state

package
v0.0.0-...-92cc422 Latest Latest
Warning

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

Go to latest
Published: Jan 21, 2019 License: GPL-3.0 Imports: 15 Imported by: 0

Documentation

Overview

包状态在以太坊状态trie上提供一个缓存层。

Index

Constants

This section is empty.

Variables

View Source
var MaxTrieCacheGen = uint16(120)

trie缓存生成限制,在此之后将trie节点从内存中逐出。

Functions

func NewStateSync

func NewStateSync(root common.Hash, database trie.DatabaseReader) *trie.Sync

newstatesync创建新的状态trie下载计划程序。

Types

type Account

type Account struct {
	Nonce    uint64
	Balance  *big.Int
	Root     common.Hash //存储树的merkle根
	CodeHash []byte
}

账户是账户的以太坊共识代表。 这些对象存储在主帐户trie中。

type Code

type Code []byte

func (Code) String

func (self Code) String() string

type Database

type Database interface {
	//opentrie打开主帐户trie。
	OpenTrie(root common.Hash) (Trie, error)

	//openstoragetrie打开帐户的存储trie。
	OpenStorageTrie(addrHash, root common.Hash) (Trie, error)

	//copy trie返回给定trie的独立副本。
	CopyTrie(Trie) Trie

	//ContractCode检索特定合同的代码。
	ContractCode(addrHash, codeHash common.Hash) ([]byte, error)

	//ContractCodeSize检索特定合同代码的大小。
	ContractCodeSize(addrHash, codeHash common.Hash) (int, error)

	//triedb检索用于数据存储的低级trie数据库。
	TrieDB() *trie.Database
}

数据库将访问权限包装为“尝试”和“合同代码”。

func NewDatabase

func NewDatabase(db ethdb.Database) Database

NeXDATA为状态创建后备存储。返回的数据库是安全的 同时使用并将缓存的trie节点保留在内存中。游泳池是可选的 在低级存储层和 高级Trie抽象。

type Dump

type Dump struct {
	Root     string                 `json:"root"`
	Accounts map[string]DumpAccount `json:"accounts"`
}

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"`
}

type ManagedState

type ManagedState struct {
	*StateDB
	// contains filtered or unexported fields
}

func ManageState

func ManageState(statedb *StateDB) *ManagedState

managedState返回一个新的托管状态,statedb作为它的支持层。

func (*ManagedState) GetNonce

func (ms *ManagedState) GetNonce(addr common.Address) uint64

GETNONCE返回托管或非托管帐户的规范NoCE。

因为getnonce改变了db,所以我们必须获得一个写锁。

func (*ManagedState) HasAccount

func (ms *ManagedState) HasAccount(addr common.Address) bool

hasAccount返回给定地址是否被管理

func (*ManagedState) NewNonce

func (ms *ManagedState) NewNonce(addr common.Address) uint64

new nonce返回托管帐户的新规范nonce

func (*ManagedState) RemoveNonce

func (ms *ManagedState) RemoveNonce(addr common.Address, n uint64)

removenonce从托管状态中删除了nonce以及所有将来挂起的nonce

func (*ManagedState) SetNonce

func (ms *ManagedState) SetNonce(addr common.Address, nonce uint64)

setnonce为托管状态设置新的规范nonce

func (*ManagedState) SetState

func (ms *ManagedState) SetState(statedb *StateDB)

setstate设置托管状态的底层

type NodeIterator

type NodeIterator struct {
	Hash   common.Hash //正在迭代的当前条目的哈希(如果不是独立的,则为零)
	Parent common.Hash //第一个完整祖先节点的哈希(如果当前是根节点,则为零)

	Error error //迭代器中出现内部错误时的故障集
	// contains filtered or unexported fields
}

nodeiterator是遍历整个状态trie post顺序的迭代器, 包括所有合同代码和合同状态尝试。

func NewNodeIterator

func NewNodeIterator(state *StateDB) *NodeIterator

newnodeiterator创建一个后序状态节点迭代器。

func (*NodeIterator) Next

func (it *NodeIterator) Next() bool

next将迭代器移动到下一个节点,返回是否存在 进一步的节点。如果出现内部错误,此方法将返回false,并且 将错误字段设置为遇到的故障。

type StateDB

type StateDB struct {
	// contains filtered or unexported fields
}

以太坊协议中的statedbs用于存储任何内容 在梅克尔特里亚。statedbs负责缓存和存储 嵌套状态。它是要检索的常规查询接口: *合同 *帐户

func New

func New(root common.Hash, db Database) (*StateDB, error)

从给定的trie创建新状态。

func (*StateDB) AddBalance

func (self *StateDB) AddBalance(addr common.Address, amount *big.Int)

addbalance将金额添加到与addr关联的帐户。

func (*StateDB) AddLog

func (self *StateDB) AddLog(log *types.Log)

func (*StateDB) AddPreimage

func (self *StateDB) AddPreimage(hash common.Hash, preimage []byte)

AdvPrimI图记录由VM看到的Sa3预图像。

func (*StateDB) AddRefund

func (self *StateDB) AddRefund(gas uint64)

func (*StateDB) Commit

func (s *StateDB) Commit(deleteEmptyObjects bool) (root common.Hash, err error)

commit将状态写入内存中的基础trie数据库。

func (*StateDB) Copy

func (self *StateDB) Copy() *StateDB

复制创建状态的深度独立副本。 复制状态的快照无法应用于该副本。

func (*StateDB) CreateAccount

func (self *StateDB) CreateAccount(addr common.Address)

CreateCount显式创建状态对象。如果有地址的状态对象 已存在余额转入新账户。

在EVM创建操作期间调用CreateCount。可能出现的情况是 合同执行以下操作:

1。将资金发送到sha(account++(nonce+1))。 2。tx_create(sha(account++nonce))(注意,这会得到1的地址)

保持平衡可确保乙醚不会消失。

func (*StateDB) Database

func (self *StateDB) Database() Database

数据库检索支持低级trie操作的低级数据库。

func (*StateDB) Dump

func (self *StateDB) Dump() []byte

func (*StateDB) Empty

func (self *StateDB) Empty(addr common.Address) bool

空返回状态对象是否不存在 或根据EIP161规范为空(余额=nonce=代码=0)

func (*StateDB) Error

func (self *StateDB) Error() error

func (*StateDB) Exist

func (self *StateDB) Exist(addr common.Address) bool

exist报告给定帐户地址是否存在于状态中。 值得注意的是,对于自杀账户,这也会返回真值。

func (*StateDB) Finalise

func (s *StateDB) Finalise(deleteEmptyObjects bool)

通过移除自毁对象最终确定状态 清除日记账和退款。

func (*StateDB) ForEachStorage

func (db *StateDB) ForEachStorage(addr common.Address, cb func(key, value common.Hash) bool)

func (*StateDB) GetBalance

func (self *StateDB) GetBalance(addr common.Address) *big.Int

从给定地址检索余额,如果找不到对象,则检索0

func (*StateDB) GetCode

func (self *StateDB) GetCode(addr common.Address) []byte

func (*StateDB) GetCodeHash

func (self *StateDB) GetCodeHash(addr common.Address) common.Hash

func (*StateDB) GetCodeSize

func (self *StateDB) GetCodeSize(addr common.Address) int

func (*StateDB) GetLogs

func (self *StateDB) GetLogs(hash common.Hash) []*types.Log

func (*StateDB) GetNonce

func (self *StateDB) GetNonce(addr common.Address) uint64

func (*StateDB) GetOrNewStateObject

func (self *StateDB) GetOrNewStateObject(addr common.Address) *stateObject

检索状态对象或创建新的状态对象(如果为零)。

func (*StateDB) GetRefund

func (self *StateDB) GetRefund() uint64

GetRefund返回退款计数器的当前值。

func (*StateDB) GetState

func (self *StateDB) GetState(addr common.Address, bhash common.Hash) common.Hash

func (*StateDB) HasSuicided

func (self *StateDB) HasSuicided(addr common.Address) bool

func (*StateDB) IntermediateRoot

func (s *StateDB) IntermediateRoot(deleteEmptyObjects bool) common.Hash

IntermediateRoot计算状态trie的当前根哈希。 它在事务之间调用,以获取 进入交易记录收据。

func (*StateDB) Logs

func (self *StateDB) Logs() []*types.Log

func (*StateDB) Preimages

func (self *StateDB) Preimages() map[common.Hash][]byte

preimages返回已提交的sha3 preimages列表。

func (*StateDB) Prepare

func (self *StateDB) Prepare(thash, bhash common.Hash, ti int)

准备设置当前事务哈希、索引和块哈希,即 在EVM发出新状态日志时使用。

func (*StateDB) RawDump

func (self *StateDB) RawDump() Dump

func (*StateDB) Reset

func (self *StateDB) Reset(root common.Hash) error

重置从状态数据库中清除所有短暂状态对象,但保留 基础状态将尝试避免为下一个操作重新加载数据。

func (*StateDB) RevertToSnapshot

func (self *StateDB) RevertToSnapshot(revid int)

RevertToSnapshot恢复自给定修订之后所做的所有状态更改。

func (*StateDB) SetBalance

func (self *StateDB) SetBalance(addr common.Address, amount *big.Int)

func (*StateDB) SetCode

func (self *StateDB) SetCode(addr common.Address, code []byte)

func (*StateDB) SetNonce

func (self *StateDB) SetNonce(addr common.Address, nonce uint64)

func (*StateDB) SetState

func (self *StateDB) SetState(addr common.Address, key, value common.Hash)

func (*StateDB) Snapshot

func (self *StateDB) Snapshot() int

快照返回状态的当前修订版的标识符。

func (*StateDB) StorageTrie

func (self *StateDB) StorageTrie(addr common.Address) Trie

storage trie返回帐户的存储trie。 返回值是副本,对于不存在的帐户为零。

func (*StateDB) SubBalance

func (self *StateDB) SubBalance(addr common.Address, amount *big.Int)

子余额从与addr关联的帐户中减去金额。

func (*StateDB) Suicide

func (self *StateDB) Suicide(addr common.Address) bool

自杀将指定帐户标记为自杀。 这将清除帐户余额。

在提交状态之前,帐户的状态对象仍然可用, GetStateObject将在自杀后返回非零帐户。

type Storage

type Storage map[common.Hash]common.Hash

func (Storage) Copy

func (self Storage) Copy() Storage

func (Storage) String

func (self Storage) String() (str string)

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):移除SecureTrie时移除此项
	Prove(key []byte, fromLevel uint, proofDb ethdb.Putter) error
}

特里亚是以太梅克尔特里亚。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL