@@ -22,6 +22,7 @@ import (
22
22
"errors"
23
23
24
24
"github.com/ethereum/go-ethereum/common"
25
+ "github.com/ethereum/go-ethereum/ethdb"
25
26
"github.com/ethereum/go-ethereum/rlp"
26
27
)
27
28
@@ -114,7 +115,7 @@ type NodeIterator interface {
114
115
// Before adding a similar mechanism to any other place in Geth, consider
115
116
// making trie.Database an interface and wrapping at that level. It's a huge
116
117
// refactor, but it could be worth it if another occurance arises.
117
- AddResolver (* Database )
118
+ AddResolver (ethdb. KeyValueStore )
118
119
}
119
120
120
121
// nodeIteratorState represents the iteration state at one particular node of the
@@ -133,11 +134,7 @@ type nodeIterator struct {
133
134
path []byte // Path to the current node
134
135
err error // Failure set in case of an internal error in the iterator
135
136
136
- resolver * Database // Optional intermediate resolver above the disk layer
137
- }
138
-
139
- func (it * nodeIterator ) AddResolver (resolver * Database ) {
140
- it .resolver = resolver
137
+ resolver ethdb.KeyValueStore // Optional intermediate resolver above the disk layer
141
138
}
142
139
143
140
// errIteratorEnd is stored in nodeIterator.err when iteration is done.
@@ -162,6 +159,10 @@ func newNodeIterator(trie *Trie, start []byte) NodeIterator {
162
159
return it
163
160
}
164
161
162
+ func (it * nodeIterator ) AddResolver (resolver ethdb.KeyValueStore ) {
163
+ it .resolver = resolver
164
+ }
165
+
165
166
func (it * nodeIterator ) Hash () common.Hash {
166
167
if len (it .stack ) == 0 {
167
168
return common.Hash {}
@@ -351,8 +352,10 @@ func (it *nodeIterator) peekSeek(seekKey []byte) (*nodeIteratorState, *int, []by
351
352
352
353
func (it * nodeIterator ) resolveHash (hash hashNode , path []byte ) (node , error ) {
353
354
if it .resolver != nil {
354
- if resolved := it .resolver .node (common .BytesToHash (hash )); resolved != nil {
355
- return resolved , nil
355
+ if blob , err := it .resolver .Get (hash ); err == nil && len (blob ) > 0 {
356
+ if resolved , err := decodeNode (hash , blob ); err == nil {
357
+ return resolved , nil
358
+ }
356
359
}
357
360
}
358
361
resolved , err := it .trie .resolveHash (hash , path )
@@ -546,7 +549,7 @@ func (it *differenceIterator) Path() []byte {
546
549
return it .b .Path ()
547
550
}
548
551
549
- func (it * differenceIterator ) AddResolver (db * Database ) {
552
+ func (it * differenceIterator ) AddResolver (resolver ethdb. KeyValueStore ) {
550
553
panic ("not implemented" )
551
554
}
552
555
@@ -657,7 +660,7 @@ func (it *unionIterator) Path() []byte {
657
660
return (* it .items )[0 ].Path ()
658
661
}
659
662
660
- func (it * unionIterator ) AddResolver (db * Database ) {
663
+ func (it * unionIterator ) AddResolver (resolver ethdb. KeyValueStore ) {
661
664
panic ("not implemented" )
662
665
}
663
666
0 commit comments