Documentation ¶
Index ¶
- Constants
- Variables
- func TestState(t *testing.T, buildPreState buildPreState)
- func TransactionGasCost(msg *types.Transaction, isHomestead, isIstanbul bool) (uint64, error)
- type Account
- type BlockResult
- type Executor
- func (e *Executor) BeginTxn(parentRoot types.Hash, header *types.Header, coinbaseReceiver types.Address) (*Transition, error)
- func (e *Executor) GetForksInTime(blockNumber uint64) chain.ForksInTime
- func (e *Executor) ProcessBlock(parentRoot types.Hash, block *types.Block, blockCreator types.Address) (*Transition, error)
- func (e *Executor) State() State
- func (e *Executor) StateAt(root types.Hash) (Snapshot, error)
- func (e *Executor) WriteGenesis(alloc map[types.Address]*chain.GenesisAccount) types.Hash
- type GasLimitReachedTransitionApplicationError
- type GetHashByNumber
- type GetHashByNumberHelper
- type Object
- type PreState
- type PreStates
- type Snapshot
- type State
- type StateObject
- type StorageObject
- type Transition
- func (t *Transition) AccountExists(addr types.Address) bool
- func (t *Transition) Apply(msg *types.Transaction) (*runtime.ExecutionResult, error)
- func (t *Transition) Call2(caller types.Address, to types.Address, input []byte, value *big.Int, ...) *runtime.ExecutionResult
- func (t *Transition) Callx(c *runtime.Contract, h runtime.Host) *runtime.ExecutionResult
- func (t *Transition) Commit() (Snapshot, types.Hash)
- func (t *Transition) ContextPtr() *runtime.TxContext
- func (t *Transition) Create2(caller types.Address, code []byte, value *big.Int, gas uint64) *runtime.ExecutionResult
- func (t *Transition) EmitLog(addr types.Address, topics []types.Hash, data []byte)
- func (t *Transition) Empty(addr types.Address) bool
- func (t *Transition) GetBalance(addr types.Address) *big.Int
- func (t *Transition) GetBlockHash(number int64) (res types.Hash)
- func (t *Transition) GetCode(addr types.Address) []byte
- func (t *Transition) GetCodeHash(addr types.Address) (res types.Hash)
- func (t *Transition) GetCodeSize(addr types.Address) int
- func (t *Transition) GetNonce(addr types.Address) uint64
- func (t *Transition) GetRefund() uint64
- func (t *Transition) GetStorage(addr types.Address, key types.Hash) types.Hash
- func (t *Transition) GetTracer() runtime.VMTracer
- func (t *Transition) GetTxContext() runtime.TxContext
- func (t *Transition) Receipts() []*types.Receipt
- func (t *Transition) Selfdestruct(addr types.Address, beneficiary types.Address)
- func (t *Transition) SetAccountDirectly(addr types.Address, account *chain.GenesisAccount) error
- func (t *Transition) SetCodeDirectly(addr types.Address, code []byte) error
- func (t *Transition) SetStorage(addr types.Address, key types.Hash, value types.Hash, ...) runtime.StorageStatus
- func (t *Transition) SetTracer(tracer tracer.Tracer)
- func (t *Transition) TotalGas() uint64
- func (t *Transition) Transfer(from, to types.Address, amount *big.Int) error
- func (t *Transition) Txn() *Txn
- func (t *Transition) Write(txn *types.Transaction) error
- func (t *Transition) WriteFailedReceipt(txn *types.Transaction) error
- type TransitionApplicationError
- type Txn
- func (txn *Txn) AddBalance(addr types.Address, balance *big.Int)
- func (txn *Txn) AddLog(log *types.Log)
- func (txn *Txn) AddRefund(gas uint64)
- func (txn *Txn) AddSealingReward(addr types.Address, balance *big.Int)
- func (txn *Txn) CleanDeleteObjects(deleteEmptyObjects bool)
- func (txn *Txn) Commit(deleteEmptyObjects bool) []*Object
- func (txn *Txn) CreateAccount(addr types.Address)
- func (txn *Txn) EmitLog(addr types.Address, topics []types.Hash, data []byte)
- func (txn *Txn) Empty(addr types.Address) bool
- func (txn *Txn) Exist(addr types.Address) bool
- func (txn *Txn) GetAccount(addr types.Address) (*Account, bool)
- func (txn *Txn) GetBalance(addr types.Address) *big.Int
- func (txn *Txn) GetCode(addr types.Address) []byte
- func (txn *Txn) GetCodeHash(addr types.Address) types.Hash
- func (txn *Txn) GetCodeSize(addr types.Address) int
- func (txn *Txn) GetCommittedState(addr types.Address, key types.Hash) types.Hash
- func (txn *Txn) GetNonce(addr types.Address) uint64
- func (txn *Txn) GetRadix() *iradix.Txn
- func (txn *Txn) GetRefund() uint64
- func (txn *Txn) GetState(addr types.Address, key types.Hash) types.Hash
- func (txn *Txn) HasSuicided(addr types.Address) bool
- func (txn *Txn) IncrNonce(addr types.Address)
- func (txn *Txn) Logs() []*types.Log
- func (txn *Txn) RevertToSnapshot(id int)
- func (txn *Txn) SetBalance(addr types.Address, balance *big.Int)
- func (txn *Txn) SetCode(addr types.Address, code []byte)
- func (txn *Txn) SetNonce(addr types.Address, nonce uint64)
- func (txn *Txn) SetState(addr types.Address, key, value types.Hash)
- func (txn *Txn) SetStorage(addr types.Address, key types.Hash, value types.Hash, ...) runtime.StorageStatus
- func (txn *Txn) Snapshot() int
- func (txn *Txn) SubBalance(addr types.Address, amount *big.Int) error
- func (txn *Txn) SubRefund(gas uint64)
- func (txn *Txn) Suicide(addr types.Address) bool
- func (txn *Txn) TouchAccount(addr types.Address)
Constants ¶
const ( SpuriousDragonMaxCodeSize = 24576 TxGas uint64 = 21000 // Per transaction not creating a contract TxGasContractCreation uint64 = 53000 // Per transaction that creates a contract )
Variables ¶
var ( ErrNonceIncorrect = fmt.Errorf("incorrect nonce") ErrNotEnoughFundsForGas = fmt.Errorf("not enough funds to cover gas costs") ErrBlockLimitReached = fmt.Errorf("gas limit reached in the pool") ErrIntrinsicGasOverflow = fmt.Errorf("overflow in intrinsic gas calculation") ErrNotEnoughIntrinsicGas = fmt.Errorf("not enough gas supplied for intrinsic gas costs") ErrNotEnoughFunds = fmt.Errorf("not enough funds for transfer with given value") )
Functions ¶
func TransactionGasCost ¶
func TransactionGasCost(msg *types.Transaction, isHomestead, isIstanbul bool) (uint64, error)
Types ¶
type Account ¶
Account is the account reference in the ethereum state
func (*Account) UnmarshalRlp ¶
type BlockResult ¶
type Executor ¶
type Executor struct { GetHash GetHashByNumberHelper PostHook func(txn *Transition) GenesisPostHook func(*Transition) error // contains filtered or unexported fields }
Executor is the main entity
func NewExecutor ¶
NewExecutor creates a new executor
func (*Executor) GetForksInTime ¶
func (e *Executor) GetForksInTime(blockNumber uint64) chain.ForksInTime
GetForksInTime returns the active forks at the given block height
func (*Executor) ProcessBlock ¶
func (e *Executor) ProcessBlock( parentRoot types.Hash, block *types.Block, blockCreator types.Address, ) (*Transition, error)
ProcessBlock already does all the handling of the whole process
func (*Executor) WriteGenesis ¶
type GasLimitReachedTransitionApplicationError ¶
type GasLimitReachedTransitionApplicationError struct {
TransitionApplicationError
}
func NewGasLimitReachedTransitionApplicationError ¶
func NewGasLimitReachedTransitionApplicationError(err error) *GasLimitReachedTransitionApplicationError
type GetHashByNumber ¶
GetHashByNumber returns the hash function of a block number
type GetHashByNumberHelper ¶
type GetHashByNumberHelper = func(*types.Header) GetHashByNumber
type Object ¶
type Object struct { Address types.Address CodeHash types.Hash Balance *big.Int Root types.Hash Nonce uint64 Deleted bool // TODO: Move this to executor DirtyCode bool Code []byte Storage []*StorageObject }
Object is the serialization of the radix object (can be merged to StateObject?).
type StateObject ¶
type StateObject struct { Account *Account Code []byte Suicide bool Deleted bool DirtyCode bool Txn *iradix.Txn }
StateObject is the internal representation of the account
func (*StateObject) Copy ¶
func (s *StateObject) Copy() *StateObject
Copy makes a copy of the state object
func (*StateObject) Empty ¶
func (s *StateObject) Empty() bool
type StorageObject ¶
StorageObject is an entry in the storage
type Transition ¶
type Transition struct { PostHook func(t *Transition) // contains filtered or unexported fields }
func NewTransition ¶ added in v0.6.1
func NewTransition(config chain.ForksInTime, snap Snapshot, radix *Txn) *Transition
func (*Transition) AccountExists ¶
func (t *Transition) AccountExists(addr types.Address) bool
func (*Transition) Apply ¶
func (t *Transition) Apply(msg *types.Transaction) (*runtime.ExecutionResult, error)
Apply applies a new transaction
func (*Transition) Callx ¶
func (t *Transition) Callx(c *runtime.Contract, h runtime.Host) *runtime.ExecutionResult
func (*Transition) Commit ¶
func (t *Transition) Commit() (Snapshot, types.Hash)
Commit commits the final result
func (*Transition) ContextPtr ¶
func (t *Transition) ContextPtr() *runtime.TxContext
ContextPtr returns reference of context This method is called only by test
func (*Transition) Create2 ¶
func (t *Transition) Create2( caller types.Address, code []byte, value *big.Int, gas uint64, ) *runtime.ExecutionResult
func (*Transition) GetBalance ¶
func (t *Transition) GetBalance(addr types.Address) *big.Int
func (*Transition) GetBlockHash ¶
func (t *Transition) GetBlockHash(number int64) (res types.Hash)
func (*Transition) GetCodeHash ¶
func (t *Transition) GetCodeHash(addr types.Address) (res types.Hash)
func (*Transition) GetCodeSize ¶
func (t *Transition) GetCodeSize(addr types.Address) int
func (*Transition) GetRefund ¶ added in v0.6.2
func (t *Transition) GetRefund() uint64
func (*Transition) GetStorage ¶
func (*Transition) GetTracer ¶ added in v0.6.2
func (t *Transition) GetTracer() runtime.VMTracer
GetTracer returns a tracer in context
func (*Transition) GetTxContext ¶
func (t *Transition) GetTxContext() runtime.TxContext
func (*Transition) Receipts ¶
func (t *Transition) Receipts() []*types.Receipt
func (*Transition) Selfdestruct ¶
func (t *Transition) Selfdestruct(addr types.Address, beneficiary types.Address)
func (*Transition) SetAccountDirectly ¶ added in v0.3.0
func (t *Transition) SetAccountDirectly(addr types.Address, account *chain.GenesisAccount) error
SetAccountDirectly sets an account to the given address NOTE: SetAccountDirectly changes the world state without a transaction
func (*Transition) SetCodeDirectly ¶ added in v0.6.0
func (t *Transition) SetCodeDirectly(addr types.Address, code []byte) error
SetCodeDirectly sets new code into the account with the specified address NOTE: SetCodeDirectly changes the world state without a transaction
func (*Transition) SetStorage ¶
func (t *Transition) SetStorage( addr types.Address, key types.Hash, value types.Hash, config *chain.ForksInTime, ) runtime.StorageStatus
func (*Transition) SetTracer ¶ added in v0.6.2
func (t *Transition) SetTracer(tracer tracer.Tracer)
SetTracer sets tracer to the context in order to enable it
func (*Transition) TotalGas ¶
func (t *Transition) TotalGas() uint64
func (*Transition) Txn ¶
func (t *Transition) Txn() *Txn
func (*Transition) Write ¶
func (t *Transition) Write(txn *types.Transaction) error
Write writes another transaction to the executor
func (*Transition) WriteFailedReceipt ¶
func (t *Transition) WriteFailedReceipt(txn *types.Transaction) error
type TransitionApplicationError ¶
type TransitionApplicationError struct { Err error IsRecoverable bool // Should the transaction be discarded, or put back in the queue. }
func NewTransitionApplicationError ¶
func NewTransitionApplicationError(err error, isRecoverable bool) *TransitionApplicationError
func (*TransitionApplicationError) Error ¶
func (e *TransitionApplicationError) Error() string
type Txn ¶
type Txn struct {
// contains filtered or unexported fields
}
Txn is a reference of the state
func (*Txn) AddBalance ¶
AddBalance adds balance
func (*Txn) AddSealingReward ¶
func (*Txn) CleanDeleteObjects ¶
func (*Txn) CreateAccount ¶
func (*Txn) GetAccount ¶
GetAccount returns an account
func (*Txn) GetBalance ¶
GetBalance returns the balance of an address
func (*Txn) GetCommittedState ¶
GetCommittedState returns the state of the address in the trie
func (*Txn) HasSuicided ¶
HasSuicided returns true if the account suicided
func (*Txn) RevertToSnapshot ¶
RevertToSnapshot reverts to a given snapshot
func (*Txn) SetBalance ¶
SetBalance sets the balance
func (*Txn) SetStorage ¶
func (*Txn) SubBalance ¶
SubBalance reduces the balance at address addr by amount