Documentation ¶
Index ¶
- Variables
- type CallType
- type Contract
- func NewContract(depth int, origin types.Address, from types.Address, to types.Address, ...) *Contract
- func NewContractCall(depth int, origin types.Address, from types.Address, to types.Address, ...) *Contract
- func NewContractCreation(depth int, origin types.Address, from types.Address, to types.Address, ...) *Contract
- type ExecutionResult
- type Host
- type Runtime
- type StorageStatus
- type TxContext
- type VMTracer
Constants ¶
This section is empty.
Variables ¶
View Source
var ( ErrOutOfGas = errors.New("out of gas") ErrStackOverflow = errors.New("stack overflow") ErrStackUnderflow = errors.New("stack underflow") ErrNotEnoughFunds = errors.New("not enough funds") ErrInsufficientBalance = errors.New("insufficient balance for transfer") ErrMaxCodeSizeExceeded = errors.New("evm: max code size exceeded") ErrContractAddressCollision = errors.New("contract address collision") ErrDepth = errors.New("max call depth exceeded") ErrExecutionReverted = errors.New("execution was reverted") ErrCodeStoreOutOfGas = errors.New("contract creation code storage out of gas") )
Functions ¶
This section is empty.
Types ¶
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 }
Contract is the instance being called
func NewContract ¶
func NewContractCall ¶
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 }
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 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 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 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 }
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, ) }
Click to show internal directories.
Click to hide internal directories.