Documentation ¶
Index ¶
- Constants
- Variables
- func IsValuable(log *types.ChangeLog) bool
- func MergeChangeLogs(logs types.ChangeLogSlice) (types.ChangeLogSlice, types.ChangeLogSlice)
- func NewAddEventLog(account types.AccountAccessor, newEvent *types.Event) *types.ChangeLog
- func NewBalanceLog(account types.AccountAccessor, newBalance *big.Int) *types.ChangeLog
- func NewCodeLog(account types.AccountAccessor, code types.Code) *types.ChangeLog
- func NewStorageLog(account types.AccountAccessor, key common.Hash, newVal []byte) (*types.ChangeLog, error)
- func NewSuicideLog(account types.AccountAccessor) *types.ChangeLog
- type Account
- func (a *Account) Finalise() error
- func (a *Account) GetAddress() common.Address
- func (a *Account) GetBalance() *big.Int
- func (a *Account) GetBaseHeight() uint32
- func (a *Account) GetCode() (types.Code, error)
- func (a *Account) GetCodeHash() common.Hash
- func (a *Account) GetStorageRoot() common.Hash
- func (a *Account) GetStorageState(key common.Hash) ([]byte, error)
- func (a *Account) GetSuicide() bool
- func (a *Account) GetTxHashList() []common.Hash
- func (a *Account) GetVersion(logType types.ChangeLogType) uint32
- func (a *Account) IsEmpty() bool
- func (a *Account) LoadNewestChangeLogs() ([]*types.ChangeLog, error)
- func (a *Account) MarshalJSON() ([]byte, error)
- func (a *Account) Save() error
- func (a *Account) SetBalance(balance *big.Int)
- func (a *Account) SetCode(code types.Code)
- func (a *Account) SetCodeHash(codeHash common.Hash)
- func (a *Account) SetStorageRoot(root common.Hash)
- func (a *Account) SetStorageState(key common.Hash, value []byte) error
- func (a *Account) SetSuicide(suicided bool)
- func (a *Account) SetVersion(logType types.ChangeLogType, version uint32)
- func (a *Account) String() string
- func (a *Account) UnmarshalJSON(input []byte) error
- type Manager
- func (am *Manager) AddEvent(event *types.Event)
- func (am *Manager) Finalise() error
- func (am *Manager) GetAccount(address common.Address) types.AccountAccessor
- func (am *Manager) GetCanonicalAccount(address common.Address) types.AccountAccessor
- func (am *Manager) GetChangeLogs() []*types.ChangeLog
- func (am *Manager) GetEvents() []*types.Event
- func (am *Manager) GetEventsByTx(txHash common.Hash) []*types.Event
- func (am *Manager) GetVersionRoot() common.Hash
- func (am *Manager) IsExist(address common.Address) bool
- func (am *Manager) MergeChangeLogs(fromIndex int)
- func (am *Manager) Rebuild(address common.Address) error
- func (am *Manager) Reset(blockHash common.Hash)
- func (am *Manager) RevertToSnapshot(revid int)
- func (am *Manager) Save(newBlockHash common.Hash) error
- func (am *Manager) SaveTxInAccount(fromAddr, toAddr common.Address, txHash common.Hash)
- func (am *Manager) Snapshot() int
- func (am *Manager) Stop(graceful bool) error
- type SafeAccount
- func (a *SafeAccount) AppendTx(hash common.Hash)
- func (a *SafeAccount) GetAddress() common.Address
- func (a *SafeAccount) GetBalance() *big.Int
- func (a *SafeAccount) GetBaseHeight() uint32
- func (a *SafeAccount) GetCode() (types.Code, error)
- func (a *SafeAccount) GetCodeHash() common.Hash
- func (a *SafeAccount) GetStorageRoot() common.Hash
- func (a *SafeAccount) GetStorageState(key common.Hash) ([]byte, error)
- func (a *SafeAccount) GetSuicide() bool
- func (a *SafeAccount) GetTxHashList() []common.Hash
- func (a *SafeAccount) GetVersion(logType types.ChangeLogType) uint32
- func (a *SafeAccount) IsDirty() bool
- func (a *SafeAccount) IsEmpty() bool
- func (a *SafeAccount) MarshalJSON() ([]byte, error)
- func (a *SafeAccount) SetBalance(balance *big.Int)
- func (a *SafeAccount) SetCode(code types.Code)
- func (a *SafeAccount) SetCodeHash(codeHash common.Hash)
- func (a *SafeAccount) SetStorageRoot(root common.Hash)
- func (a *SafeAccount) SetStorageState(key common.Hash, value []byte) error
- func (a *SafeAccount) SetSuicide(suicided bool)
- func (a *SafeAccount) SetVersion(logType types.ChangeLogType, version uint32)
- func (a *SafeAccount) String() string
- func (a *SafeAccount) UnmarshalJSON(input []byte) error
- type Storage
Constants ¶
const ( BalanceLog types.ChangeLogType = iota + 1 StorageLog CodeLog AddEventLog SuicideLog )
const MaxTrieCacheGen = uint16(120)
Trie cache generation limit after which to evict trie nodes from memory.
Variables ¶
Functions ¶
func IsValuable ¶
IsValuable returns true if the change log contains some data change
func MergeChangeLogs ¶
func MergeChangeLogs(logs types.ChangeLogSlice) (types.ChangeLogSlice, types.ChangeLogSlice)
MergeChangeLogs merges the change logs for same account in block. Then return the merged change logs and the versions need to be revert.
func NewAddEventLog ¶
NewAddEventLog records contract code change
func NewBalanceLog ¶
NewBalanceLog records balance change
func NewCodeLog ¶
NewCodeLog records contract code setting
func NewStorageLog ¶
func NewStorageLog(account types.AccountAccessor, key common.Hash, newVal []byte) (*types.ChangeLog, error)
NewStorageLog records contract storage value change
func NewSuicideLog ¶
func NewSuicideLog(account types.AccountAccessor) *types.ChangeLog
NewSuicideLog records balance change
Types ¶
type Account ¶
type Account struct {
// contains filtered or unexported fields
}
Account is used to read and write account data. the code and dirty storage K/V would be cached till they are flushing to db
func NewAccount ¶
func NewAccount(db protocol.ChainDB, address common.Address, data *types.AccountData, baseHeight uint32) *Account
NewAccount wrap an AccountData object, or creates a new one if it's nil.
func (*Account) GetAddress ¶
Implement AccountAccessor. Access Account without changelog
func (*Account) GetBalance ¶
func (*Account) GetBaseHeight ¶
func (*Account) GetCodeHash ¶
func (*Account) GetStorageRoot ¶
StorageRoot wouldn't change until Account.updateTrie() is called
func (*Account) GetStorageState ¶
GetState returns a value in account storage.
func (*Account) GetSuicide ¶
func (*Account) GetTxHashList ¶
func (*Account) GetVersion ¶
func (a *Account) GetVersion(logType types.ChangeLogType) uint32
func (*Account) IsEmpty ¶
IsEmpty returns whether the state object is either non-existent or empty (version = 0)
func (*Account) LoadNewestChangeLogs ¶
LoadNewestChangeLogs loads newest change logs
func (*Account) MarshalJSON ¶
MarshalJSON encodes the lemoClient RPC account format.
func (*Account) SetBalance ¶
func (*Account) SetCodeHash ¶
func (*Account) SetStorageRoot ¶
func (*Account) SetStorageState ¶
SetState updates a value in account storage.
func (*Account) SetSuicide ¶
func (*Account) SetVersion ¶
func (a *Account) SetVersion(logType types.ChangeLogType, version uint32)
func (*Account) UnmarshalJSON ¶
UnmarshalJSON decodes the lemoClient RPC account format.
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
Manager is used to maintain the newest and not confirmed account data. It will save all data to the db when finished a block's transactions processing.
func NewManager ¶
NewManager creates a new Manager. it is used to maintain account changes based on the block environment which specified by blockHash
func (*Manager) GetAccount ¶
func (am *Manager) GetAccount(address common.Address) types.AccountAccessor
GetAccount loads account from cache or db, or creates a new one if it's not exist.
func (*Manager) GetCanonicalAccount ¶
func (am *Manager) GetCanonicalAccount(address common.Address) types.AccountAccessor
GetCanonicalAccount loads an readonly account object from confirmed block in db, or creates a new one if it's not exist. The Modification of the account will not be recorded to store.
func (*Manager) GetChangeLogs ¶
GetChangeLogs returns all change logs since last reset
func (*Manager) GetEventsByTx ¶
GetEvents returns all events since last reset
func (*Manager) GetVersionRoot ¶
func (*Manager) IsExist ¶
IsExist reports whether the given account address exists in the db. Notably this also returns true for suicided accounts.
func (*Manager) MergeChangeLogs ¶
MergeChangeLogs merges the change logs for same account in block. Then update the version of change logs and account.
func (*Manager) Rebuild ¶
Rebuild loads and redo all change logs to update account to the newest state.
TODO Changelog maybe retrieved from other node, so the account in local store is not contain the newest NewestRecords. We'd better change this function to "Rebuild(address common.Address, logs []types.ChangeLog)" cause the Rebuild function is called by change log synchronization module
func (*Manager) RevertToSnapshot ¶
RevertToSnapshot reverts all state changes made since the given revision.
func (*Manager) SaveTxInAccount ¶
type SafeAccount ¶
type SafeAccount struct {
// contains filtered or unexported fields
}
SafeAccount is used to record modifications with changelog. So that the modifications can be reverted
func NewSafeAccount ¶
func NewSafeAccount(processor *logProcessor, account *Account) *SafeAccount
NewSafeAccount creates an account object.
func (*SafeAccount) AppendTx ¶
func (a *SafeAccount) AppendTx(hash common.Hash)
func (*SafeAccount) GetAddress ¶
func (a *SafeAccount) GetAddress() common.Address
func (*SafeAccount) GetBalance ¶
func (a *SafeAccount) GetBalance() *big.Int
func (*SafeAccount) GetBaseHeight ¶
func (a *SafeAccount) GetBaseHeight() uint32
func (*SafeAccount) GetCodeHash ¶
func (a *SafeAccount) GetCodeHash() common.Hash
func (*SafeAccount) GetStorageRoot ¶
func (a *SafeAccount) GetStorageRoot() common.Hash
func (*SafeAccount) GetStorageState ¶
func (a *SafeAccount) GetStorageState(key common.Hash) ([]byte, error)
func (*SafeAccount) GetSuicide ¶
func (a *SafeAccount) GetSuicide() bool
func (*SafeAccount) GetTxHashList ¶
func (a *SafeAccount) GetTxHashList() []common.Hash
func (*SafeAccount) GetVersion ¶
func (a *SafeAccount) GetVersion(logType types.ChangeLogType) uint32
func (*SafeAccount) IsDirty ¶
func (a *SafeAccount) IsDirty() bool
func (*SafeAccount) IsEmpty ¶
func (a *SafeAccount) IsEmpty() bool
func (*SafeAccount) MarshalJSON ¶
func (a *SafeAccount) MarshalJSON() ([]byte, error)
MarshalJSON encodes the lemoClient RPC safeAccount format.
func (*SafeAccount) SetBalance ¶
func (a *SafeAccount) SetBalance(balance *big.Int)
overwrite Account.SetXXX. Access Account with changelog
func (*SafeAccount) SetCode ¶
func (a *SafeAccount) SetCode(code types.Code)
func (*SafeAccount) SetCodeHash ¶
func (a *SafeAccount) SetCodeHash(codeHash common.Hash)
func (*SafeAccount) SetStorageRoot ¶
func (a *SafeAccount) SetStorageRoot(root common.Hash)
func (*SafeAccount) SetStorageState ¶
func (a *SafeAccount) SetStorageState(key common.Hash, value []byte) error
func (*SafeAccount) SetSuicide ¶
func (a *SafeAccount) SetSuicide(suicided bool)
func (*SafeAccount) SetVersion ¶
func (a *SafeAccount) SetVersion(logType types.ChangeLogType, version uint32)
func (*SafeAccount) String ¶
func (a *SafeAccount) String() string
func (*SafeAccount) UnmarshalJSON ¶
func (a *SafeAccount) UnmarshalJSON(input []byte) error
UnmarshalJSON decodes the lemoClient RPC safeAccount format.