|
|
@ -26,9 +26,9 @@ import ( |
|
|
|
"github.com/ethereum/go-ethereum/trie" |
|
|
|
"github.com/ethereum/go-ethereum/trie" |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
// NodeIterator is an iterator to traverse the entire state trie post-order,
|
|
|
|
// nodeIterator is an iterator to traverse the entire state trie post-order,
|
|
|
|
// including all of the contract code and contract state tries.
|
|
|
|
// including all of the contract code and contract state tries.
|
|
|
|
type NodeIterator struct { |
|
|
|
type nodeIterator struct { |
|
|
|
state *StateDB // State being iterated
|
|
|
|
state *StateDB // State being iterated
|
|
|
|
|
|
|
|
|
|
|
|
stateIt trie.NodeIterator // Primary iterator for the global state trie
|
|
|
|
stateIt trie.NodeIterator // Primary iterator for the global state trie
|
|
|
@ -44,9 +44,9 @@ type NodeIterator struct { |
|
|
|
Error error // Failure set in case of an internal error in the iterator
|
|
|
|
Error error // Failure set in case of an internal error in the iterator
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// NewNodeIterator creates an post-order state node iterator.
|
|
|
|
// newNodeIterator creates an post-order state node iterator.
|
|
|
|
func NewNodeIterator(state *StateDB) *NodeIterator { |
|
|
|
func newNodeIterator(state *StateDB) *nodeIterator { |
|
|
|
return &NodeIterator{ |
|
|
|
return &nodeIterator{ |
|
|
|
state: state, |
|
|
|
state: state, |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -54,7 +54,7 @@ func NewNodeIterator(state *StateDB) *NodeIterator { |
|
|
|
// Next moves the iterator to the next node, returning whether there are any
|
|
|
|
// Next moves the iterator to the next node, returning whether there are any
|
|
|
|
// further nodes. In case of an internal error this method returns false and
|
|
|
|
// further nodes. In case of an internal error this method returns false and
|
|
|
|
// sets the Error field to the encountered failure.
|
|
|
|
// sets the Error field to the encountered failure.
|
|
|
|
func (it *NodeIterator) Next() bool { |
|
|
|
func (it *nodeIterator) Next() bool { |
|
|
|
// If the iterator failed previously, don't do anything
|
|
|
|
// If the iterator failed previously, don't do anything
|
|
|
|
if it.Error != nil { |
|
|
|
if it.Error != nil { |
|
|
|
return false |
|
|
|
return false |
|
|
@ -68,7 +68,7 @@ func (it *NodeIterator) Next() bool { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// step moves the iterator to the next entry of the state trie.
|
|
|
|
// step moves the iterator to the next entry of the state trie.
|
|
|
|
func (it *NodeIterator) step() error { |
|
|
|
func (it *nodeIterator) step() error { |
|
|
|
// Abort if we reached the end of the iteration
|
|
|
|
// Abort if we reached the end of the iteration
|
|
|
|
if it.state == nil { |
|
|
|
if it.state == nil { |
|
|
|
return nil |
|
|
|
return nil |
|
|
@ -131,7 +131,7 @@ func (it *NodeIterator) step() error { |
|
|
|
|
|
|
|
|
|
|
|
// retrieve pulls and caches the current state entry the iterator is traversing.
|
|
|
|
// retrieve pulls and caches the current state entry the iterator is traversing.
|
|
|
|
// The method returns whether there are any more data left for inspection.
|
|
|
|
// The method returns whether there are any more data left for inspection.
|
|
|
|
func (it *NodeIterator) retrieve() bool { |
|
|
|
func (it *nodeIterator) retrieve() bool { |
|
|
|
// Clear out any previously set values
|
|
|
|
// Clear out any previously set values
|
|
|
|
it.Hash = common.Hash{} |
|
|
|
it.Hash = common.Hash{} |
|
|
|
|
|
|
|
|
|
|
|