runtime

package
v0.0.0-...-11d95e7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 27, 2024 License: Apache-2.0 Imports: 6 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrOutOfGas                 = errors.New("out of gas")
	ErrNotEnoughFunds           = errors.New("not enough funds")
	ErrInsufficientBalance      = errors.New("insufficient balance for transfer")
	ErrMaxCodeSizeExceeded      = errors.New("max code size exceeded")
	ErrContractAddressCollision = errors.New("contract address collision")
	ErrDepth                    = errors.New("max call depth exceeded")
	ErrExecutionReverted        = errors.New("execution reverted")
	ErrCodeStoreOutOfGas        = errors.New("contract creation code storage out of gas")
	ErrUnauthorizedCaller       = errors.New("unauthorized caller")
	ErrInvalidInputData         = errors.New("invalid input data")
	ErrNotAuth                  = errors.New("not in allow list")
)

Functions

This section is empty.

Types

type AccessList

type AccessList map[types.Address]map[types.Hash]struct{}

func NewAccessList

func NewAccessList() *AccessList

func (*AccessList) AddAddress

func (al *AccessList) AddAddress(address ...types.Address)

AddAddress adds an address to the access list returns 'true' if the operation results in a change (i.e., the address was not already present in the list).

func (*AccessList) AddSlot

func (al *AccessList) AddSlot(address types.Address, slot types.Hash) (addrChange bool, slotChange bool)

This function adds the specified address and slot pair to the access list. The return values indicate whether the address was newly added and whether the slot was newly added.

func (*AccessList) Contains

func (al *AccessList) Contains(address types.Address, slot types.Hash) (bool, bool)

Contains checks if a slot is present in an account. Returns two boolean flags: `accountPresent` and `slotPresent`.

func (*AccessList) ContainsAddress

func (al *AccessList) ContainsAddress(address types.Address) bool

Checks if address is present within the access list.

func (*AccessList) Copy

func (al *AccessList) Copy() *AccessList

Copy creates an deep copy of provided AccessList.

type CallType

type CallType int
const (
	Call CallType = iota
	CallCode
	DelegateCall
	StaticCall
	Create
	Create2
)

type Contract

type Contract struct {
	Code        []byte
	Type        CallType
	CodeAddress types.Address
	Address     types.Address
	Origin      types.Address
	Caller      types.Address
	Depth       int
	Value       *big.Int
	Input       []byte
	Gas         uint64
	Static      bool
	AccessList  *AccessList
}

Contract is the instance being called

func NewContract

func NewContract(
	depth int,
	origin types.Address,
	from types.Address,
	to types.Address,
	value *big.Int,
	gas uint64,
	code []byte,
	accessList *AccessList,
) *Contract

func NewContractCall

func NewContractCall(
	depth int,
	origin types.Address,
	from types.Address,
	to types.Address,
	value *big.Int,
	gas uint64,
	code []byte,
	input []byte,
	accessList *AccessList,
) *Contract

func NewContractCreation

func NewContractCreation(
	depth int,
	origin types.Address,
	from types.Address,
	to types.Address,
	value *big.Int,
	gas uint64,
	code []byte,
	accessList *AccessList,
) *Contract

type ExecutionResult

type ExecutionResult struct {
	ReturnValue []byte        // Returned data from the runtime (function result or data supplied with revert opcode)
	GasLeft     uint64        // Total gas left as result of execution
	GasUsed     uint64        // Total gas used as result of execution
	Err         error         // Any error encountered during the execution, listed below
	Address     types.Address // Contract address
}

ExecutionResult includes all output after executing given evm message no matter the execution itself is successful or not.

func (*ExecutionResult) Failed

func (r *ExecutionResult) Failed() bool

func (*ExecutionResult) Reverted

func (r *ExecutionResult) Reverted() bool

func (*ExecutionResult) Succeeded

func (r *ExecutionResult) Succeeded() bool

func (*ExecutionResult) UpdateGasUsed

func (r *ExecutionResult) UpdateGasUsed(gasLimit uint64, refund uint64)

type Host

type Host interface {
	AccountExists(addr types.Address) bool
	GetStorage(addr types.Address, key types.Hash) types.Hash
	SetStorage(addr types.Address, key types.Hash, value types.Hash, config *chain.ForksInTime) StorageStatus
	SetState(addr types.Address, key types.Hash, value types.Hash)
	GetBalance(addr types.Address) *big.Int
	GetCodeSize(addr types.Address) int
	GetCodeHash(addr types.Address) types.Hash
	GetCode(addr types.Address) []byte
	Selfdestruct(addr types.Address, beneficiary types.Address)
	GetTxContext() TxContext
	GetBlockHash(number int64) types.Hash
	EmitLog(addr types.Address, topics []types.Hash, data []byte)
	Callx(*Contract, Host) *ExecutionResult
	Empty(addr types.Address) bool
	GetNonce(addr types.Address) uint64
	Transfer(from types.Address, to types.Address, amount *big.Int) error
	GetTracer() VMTracer
	GetRefund() uint64
}

Host is the execution host

type Runtime

type Runtime interface {
	Run(c *Contract, host Host, config *chain.ForksInTime) *ExecutionResult
	CanRun(c *Contract, host Host, config *chain.ForksInTime) bool
	Name() string
}

Runtime can process contracts

type StackOverflowError

type StackOverflowError struct {
	StackLen int
	Limit    int
}

StackOverflowError wraps an evm error when the items on the stack exceeds the maximum allowance.

func (*StackOverflowError) Error

func (e *StackOverflowError) Error() string

type StackUnderflowError

type StackUnderflowError struct {
	StackLen int
	Required int
}

StackUnderflowError wraps an evm error when the items on the stack less than the minimal requirement.

func (*StackUnderflowError) Error

func (e *StackUnderflowError) Error() string

type StorageStatus

type StorageStatus int

StorageStatus is the status of the storage access

const (
	// StorageUnchanged if the data has not changed
	StorageUnchanged StorageStatus = iota
	// StorageModified if the value has been modified
	StorageModified
	// StorageModifiedAgain if the value has been modified before in the txn
	StorageModifiedAgain
	// StorageAdded if this is a new entry in the storage
	StorageAdded
	// StorageDeleted if the storage was deleted
	StorageDeleted
)

func (StorageStatus) String

func (s StorageStatus) String() string

type TxContext

type TxContext struct {
	GasPrice     types.Hash
	Origin       types.Address
	Coinbase     types.Address
	Number       int64
	Timestamp    int64
	GasLimit     int64
	ChainID      int64
	Difficulty   types.Hash
	Tracer       tracer.Tracer
	BaseFee      *big.Int
	BurnContract types.Address
}

TxContext is the context of the transaction

type VMTracer

type VMTracer interface {
	CaptureState(
		memory []byte,
		stack []*big.Int,
		opCode int,
		contractAddress types.Address,
		sp int,
		host tracer.RuntimeHost,
		state tracer.VMState,
	)
	ExecuteState(
		contractAddress types.Address,
		ip uint64,
		opcode string,
		availableGas uint64,
		cost uint64,
		lastReturnData []byte,
		depth int,
		err error,
		host tracer.RuntimeHost,
	)
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL