Documentation ¶
Overview ¶
Package state provides a caching layer atop the Ethereum state trie.
Index ¶
- Variables
- type Account
- type Code
- type DB
- func (db *DB) AddBalance(addr common.Address, amount *big.Int)
- func (db *DB) AddLog(log *types.Log)
- func (db *DB) AddPreimage(hash common.Hash, preimage []byte)
- func (db *DB) AddRefund(gas uint64)
- func (db *DB) AddReward(snapshot *stk.ValidatorWrapper, reward *big.Int, ...) error
- func (db *DB) Commit(deleteEmptyObjects bool) (root common.Hash, err error)
- func (db *DB) Copy() *DB
- func (db *DB) CreateAccount(addr common.Address)
- func (db *DB) Database() Database
- func (db *DB) Dump() string
- func (db *DB) Empty(addr common.Address) bool
- func (db *DB) Error() error
- func (db *DB) Exist(addr common.Address) bool
- func (db *DB) Finalise(deleteEmptyObjects bool)
- func (db *DB) ForEachStorage(addr common.Address, cb func(key, value common.Hash) bool)
- func (db *DB) GetBalance(addr common.Address) *big.Int
- func (db *DB) GetCode(addr common.Address) []byte
- func (db *DB) GetCodeHash(addr common.Address) common.Hash
- func (db *DB) GetCodeSize(addr common.Address) int
- func (db *DB) GetCommittedState(addr common.Address, hash common.Hash) common.Hash
- func (db *DB) GetLogs(hash common.Hash) []*types.Log
- func (db *DB) GetNonce(addr common.Address) uint64
- func (db *DB) GetOrNewStateObject(addr common.Address) *Object
- func (db *DB) GetProof(a common.Address) ([][]byte, error)
- func (db *DB) GetRefund() uint64
- func (db *DB) GetState(addr common.Address, hash common.Hash) common.Hash
- func (db *DB) GetStorageProof(a common.Address, key common.Hash) ([][]byte, error)
- func (db *DB) HasSuicided(addr common.Address) bool
- func (db *DB) IntermediateRoot(deleteEmptyObjects bool) common.Hash
- func (db *DB) IsValidator(addr common.Address) bool
- func (db *DB) Logs() []*types.Log
- func (db *DB) Preimages() map[common.Hash][]byte
- func (db *DB) Prepare(thash, bhash common.Hash, ti int)
- func (db *DB) RawDump() Dump
- func (db *DB) Reset(root common.Hash) error
- func (db *DB) RevertToSnapshot(revid int)
- func (db *DB) SetBalance(addr common.Address, amount *big.Int)
- func (db *DB) SetCode(addr common.Address, code []byte)
- func (db *DB) SetNonce(addr common.Address, nonce uint64)
- func (db *DB) SetState(addr common.Address, key, value common.Hash)
- func (db *DB) SetValidatorFlag(addr common.Address)
- func (db *DB) Snapshot() int
- func (db *DB) StorageTrie(addr common.Address) Trie
- func (db *DB) SubBalance(addr common.Address, amount *big.Int)
- func (db *DB) SubRefund(gas uint64)
- func (db *DB) Suicide(addr common.Address) bool
- func (db *DB) UnsetValidatorFlag(addr common.Address)
- func (db *DB) UpdateValidatorWrapper(addr common.Address, val *stk.ValidatorWrapper) error
- func (db *DB) ValidatorWrapper(addr common.Address) (*stk.ValidatorWrapper, error)
- func (db *DB) ValidatorWrapperCopy(addr common.Address) (*stk.ValidatorWrapper, error)
- type Database
- type Dump
- type DumpAccount
- type ManagedState
- func (ms *ManagedState) GetNonce(addr common.Address) uint64
- func (ms *ManagedState) HasAccount(addr common.Address) bool
- func (ms *ManagedState) NewNonce(addr common.Address) uint64
- func (ms *ManagedState) RemoveNonce(addr common.Address, n uint64)
- func (ms *ManagedState) SetNonce(addr common.Address, nonce uint64)
- func (ms *ManagedState) SetState(statedb *DB)
- type Object
- func (so *Object) AddBalance(amount *big.Int)
- func (so *Object) Address() common.Address
- func (so *Object) Balance() *big.Int
- func (so *Object) Code(db Database) []byte
- func (so *Object) CodeHash() []byte
- func (so *Object) CommitTrie(db Database) error
- func (so *Object) EncodeRLP(w io.Writer) error
- func (so *Object) GetCommittedState(db Database, key common.Hash) common.Hash
- func (so *Object) GetState(db Database, key common.Hash) common.Hash
- func (so *Object) IsValidator(db Database) bool
- func (so *Object) Nonce() uint64
- func (so *Object) ReturnGas(gas *big.Int)
- func (so *Object) SetBalance(amount *big.Int)
- func (so *Object) SetCode(codeHash common.Hash, code []byte)
- func (so *Object) SetNonce(nonce uint64)
- func (so *Object) SetState(db Database, key, value common.Hash)
- func (so *Object) SubBalance(amount *big.Int)
- func (so *Object) Value() *big.Int
- type Storage
- type Trie
Constants ¶
This section is empty.
Variables ¶
var MaxTrieCacheGen = uint16(120)
MaxTrieCacheGen limit after which to evict trie nodes from memory.
Functions ¶
This section is empty.
Types ¶
type Account ¶
type Account struct { Nonce uint64 Balance *big.Int Root common.Hash // merkle root of the storage trie CodeHash []byte }
Account is the Ethereum consensus representation of accounts. These objects are stored in the main account trie.
type DB ¶
type DB struct {
// contains filtered or unexported fields
}
DB within the ethereum protocol are used to store anything within the merkle trie. StateDBs take care of caching and storing nested states. It's the general query interface to retrieve: * Contracts * Accounts
func (*DB) AddBalance ¶
AddBalance adds amount to the account associated with addr.
func (*DB) AddPreimage ¶
AddPreimage records a SHA3 preimage seen by the VM.
func (*DB) AddReward ¶ added in v1.3.0
func (db *DB) AddReward(snapshot *stk.ValidatorWrapper, reward *big.Int, shareLookup map[common.Address]numeric.Dec) error
AddReward distributes the reward to all the delegators based on stake percentage.
func (*DB) Copy ¶
Copy creates a deep, independent copy of the state. Snapshots of the copied state cannot be applied to the copy.
func (*DB) CreateAccount ¶
CreateAccount explicitly creates a state object. If a state object with the address already exists the balance is carried over to the new account.
CreateAccount is called during the EVM CREATE operation. The situation might arise that a contract does the following:
- sends funds to sha(account ++ (nonce + 1))
- tx_create(sha(account ++ nonce)) (note that this gets the address of 1)
Carrying over the balance ensures that Ether doesn't disappear.
func (*DB) Database ¶
Database retrieves the low level database supporting the lower level trie ops.
func (*DB) Empty ¶
Empty returns whether the state object is either non-existent or empty according to the EIP161 specification (balance = nonce = code = 0)
func (*DB) Exist ¶
Exist reports whether the given account address exists in the state. Notably this also returns true for suicided accounts.
func (*DB) Finalise ¶
Finalise finalises the state by removing the db destructed objects and clears the journal as well as the refunds.
func (*DB) ForEachStorage ¶
ForEachStorage ...
func (*DB) GetBalance ¶
GetBalance retrieves the balance from the given address or 0 if object not found
func (*DB) GetCommittedState ¶
GetCommittedState retrieves a value from the given account's committed storage trie.
func (*DB) GetOrNewStateObject ¶
GetOrNewStateObject retrieves a state object or create a new state object if nil.
func (*DB) GetStorageProof ¶
GetStorageProof returns the StorageProof for given key
func (*DB) IntermediateRoot ¶
IntermediateRoot computes the current root hash of the state trie. It is called in between transactions to get the root hash that goes into transaction receipts.
func (*DB) IsValidator ¶ added in v1.3.0
IsValidator checks whether it is a validator object
func (*DB) Prepare ¶
Prepare sets the current transaction hash and index and block hash which is used when the EVM emits new state logs.
func (*DB) Reset ¶
Reset clears out all ephemeral state objects from the state db, but keeps the underlying state trie to avoid reloading data for the next operations.
func (*DB) RevertToSnapshot ¶
RevertToSnapshot reverts all state changes made since the given revision.
func (*DB) SetBalance ¶
SetBalance ...
func (*DB) SetValidatorFlag ¶ added in v1.3.0
SetValidatorFlag checks whether it is a validator object
func (*DB) StorageTrie ¶
StorageTrie returns the storage trie of an account. The return value is a copy and is nil for non-existent accounts.
func (*DB) SubBalance ¶
SubBalance subtracts amount from the account associated with addr.
func (*DB) SubRefund ¶
SubRefund removes gas from the refund counter. This method will panic if the refund counter goes below zero
func (*DB) Suicide ¶
Suicide marks the given account as suicided. This clears the account balance.
The account's state object is still available until the state is committed, getStateObject will return a non-nil account after Suicide.
func (*DB) UnsetValidatorFlag ¶ added in v1.3.0
UnsetValidatorFlag checks whether it is a validator object
func (*DB) UpdateValidatorWrapper ¶ added in v1.3.3
UpdateValidatorWrapper updates staking information of a given validator (including delegation info)
func (*DB) ValidatorWrapper ¶ added in v1.3.3
ValidatorWrapper retrieves the existing validator in the cache. The return value is a reference to the actual validator object in state. The modification on it will be committed to the state object when Finalize() is called.
func (*DB) ValidatorWrapperCopy ¶ added in v1.3.8
ValidatorWrapperCopy retrieves the existing validator as a copy from state object. Changes on the copy has to be explicitly commited with UpdateValidatorWrapper() to take effect.
type Database ¶
type Database interface { // OpenTrie opens the main account trie. OpenTrie(root common.Hash) (Trie, error) // OpenStorageTrie opens the storage trie of an account. OpenStorageTrie(addrHash, root common.Hash) (Trie, error) // CopyTrie returns an independent copy of the given trie. CopyTrie(Trie) Trie // ContractCode retrieves a particular contract's code. ContractCode(addrHash, codeHash common.Hash) ([]byte, error) // ContractCodeSize retrieves a particular contracts code's size. ContractCodeSize(addrHash, codeHash common.Hash) (int, error) // TrieDB retrieves the low level trie database used for data storage. TrieDB() *trie.Database }
Database wraps access to tries and contract code.
func NewDatabase ¶
NewDatabase creates a backing store for state. The returned database is safe for concurrent use and retains a few recent expanded trie nodes in memory. To keep more historical state in memory, use the NewDatabaseWithCache constructor.
func NewDatabaseWithCache ¶
NewDatabaseWithCache creates a backing store for state. The returned database is safe for concurrent use and retains both a few recent expanded trie nodes in memory, as well as a lot of collapsed RLP trie nodes in a large memory cache.
type Dump ¶
type Dump struct { Root string `json:"root"` Accounts map[string]DumpAccount `json:"accounts"` }
Dump ...
type DumpAccount ¶
type DumpAccount struct { Balance string `json:"balance"` Nonce uint64 `json:"nonce"` Root string `json:"root"` CodeHash string `json:"codeHash"` Code string `json:"code"` Storage map[string]string `json:"storage"` }
DumpAccount ...
type ManagedState ¶
type ManagedState struct { *DB // contains filtered or unexported fields }
ManagedState ...
func ManageState ¶
func ManageState(statedb *DB) *ManagedState
ManageState returns a new managed state with the statedb as it's backing layer
func (*ManagedState) GetNonce ¶
func (ms *ManagedState) GetNonce(addr common.Address) uint64
GetNonce returns the canonical nonce for the managed or unmanaged account.
Because GetNonce mutates the DB, we must take a write lock.
func (*ManagedState) HasAccount ¶
func (ms *ManagedState) HasAccount(addr common.Address) bool
HasAccount returns whether the given address is managed or not
func (*ManagedState) NewNonce ¶
func (ms *ManagedState) NewNonce(addr common.Address) uint64
NewNonce returns the new canonical nonce for the managed account
func (*ManagedState) RemoveNonce ¶
func (ms *ManagedState) RemoveNonce(addr common.Address, n uint64)
RemoveNonce removed the nonce from the managed state and all future pending nonces
func (*ManagedState) SetNonce ¶
func (ms *ManagedState) SetNonce(addr common.Address, nonce uint64)
SetNonce sets the new canonical nonce for the managed state
func (*ManagedState) SetState ¶
func (ms *ManagedState) SetState(statedb *DB)
SetState sets the backing layer of the managed state
type Object ¶
type Object struct {
// contains filtered or unexported fields
}
Object represents an Ethereum account which is being modified.
The usage pattern is as follows: First you need to obtain a state object. Account values can be accessed and modified through the object. Finally, call CommitTrie to write the modified storage trie into a database.
func (*Object) AddBalance ¶
AddBalance removes amount from c's balance. It is used to add funds to the destination account of a transfer.
func (*Object) CommitTrie ¶
CommitTrie the storage trie of the object to db. This updates the trie root.
func (*Object) GetCommittedState ¶
GetCommittedState retrieves a value from the committed account storage trie.
func (*Object) IsValidator ¶ added in v1.3.0
IsValidator checks whether it is a validator object
func (*Object) ReturnGas ¶
ReturnGas returns the gas back to the origin. Used by the Virtual machine or Closures
func (*Object) SetState ¶
SetState updates a value in account storage. to remove, set value to common.Hash{}
func (*Object) SubBalance ¶
SubBalance removes amount from c's balance. It is used to remove funds from the origin account of a transfer.
type Trie ¶
type Trie interface { TryGet(key []byte) ([]byte, error) TryUpdate(key, value []byte) error TryDelete(key []byte) error Commit(onleaf trie.LeafCallback) (common.Hash, error) Hash() common.Hash NodeIterator(startKey []byte) trie.NodeIterator GetKey([]byte) []byte // TODO(fjl): remove this when SecureTrie is removed Prove(key []byte, fromLevel uint, proofDb ethdb.Putter) error }
Trie is a Ethereum Merkle Trie.