runtime

package
v0.0.0-...-f672fcd Latest Latest
Warning

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

Go to latest
Published: Jan 28, 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 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
}

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,
) *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,
) *Contract

func NewContractCreation

func NewContractCreation(
	depth int,
	origin types.Address,
	from types.Address,
	to types.Address,
	value *big.Int,
	gas uint64,
	code []byte,
) *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