Skip to content

Commit baea4d8

Browse files
committed
fix: don't try to load empty nodes
1 parent 3e81284 commit baea4d8

File tree

2 files changed

+12
-10
lines changed

2 files changed

+12
-10
lines changed

trie/binary.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import (
3535

3636
type (
3737
NodeFlushFn func([]byte, BinaryNode)
38-
NodeResolverFn func([]byte) ([]byte, error)
38+
NodeResolverFn func([]byte, common.Hash) ([]byte, error)
3939
)
4040

4141
type BinaryNode interface {
@@ -115,7 +115,7 @@ func (h HashedNode) Insert(key []byte, value []byte, resolver NodeResolverFn) (B
115115
return h, errors.New("resolver is nil")
116116
}
117117

118-
resolved, err := resolver(h[:])
118+
resolved, err := resolver(h[:], common.Hash(h))
119119
if err != nil {
120120
return nil, fmt.Errorf("insert error: %w", err)
121121
}
@@ -132,8 +132,7 @@ func (h HashedNode) Commit() common.Hash {
132132
}
133133

134134
func (h HashedNode) Copy() BinaryNode {
135-
var nh common.Hash
136-
nh = common.Hash(h)
135+
nh := common.Hash(h)
137136
return HashedNode(nh)
138137
}
139138

@@ -154,7 +153,7 @@ func (h HashedNode) InsertValuesAtStem(key []byte, values [][]byte, resolver Nod
154153
if err != nil {
155154
return nil, fmt.Errorf("resolving node in insert: %w", err)
156155
}
157-
resolved, err := resolver(path)
156+
resolved, err := resolver(path, common.Hash(h))
158157
if err != nil {
159158
return nil, fmt.Errorf("insert error: %w", err)
160159
}
@@ -399,12 +398,12 @@ func (bt *InternalNode) GetValuesAtStem(stem []byte, resolver NodeResolverFn) ([
399398
child = &bt.right
400399
}
401400

402-
if _, ok := (*child).(HashedNode); ok {
401+
if hn, ok := (*child).(HashedNode); ok {
403402
path, err := keyToPath(bt.depth, stem)
404403
if err != nil {
405404
return nil, fmt.Errorf("GetValuesAtStem resolve error: %w", err)
406405
}
407-
data, err := resolver(path)
406+
data, err := resolver(path, common.Hash(hn))
408407
if err != nil {
409408
return nil, fmt.Errorf("GetValuesAtStem resolve error: %w", err)
410409
}
@@ -553,7 +552,7 @@ func SerializeNode(node BinaryNode) []byte {
553552

554553
func DeserializeNode(serialized []byte, depth int) (BinaryNode, error) {
555554
if len(serialized) == 0 {
556-
return nil, errors.New("empty serialized node")
555+
return Empty{}, nil
557556
}
558557

559558
switch serialized[0] {
@@ -621,7 +620,10 @@ func NewVerkleTrie(root BinaryNode, db *Database, ended bool) *BinaryTrie {
621620
}
622621
}
623622

624-
func (trie *BinaryTrie) FlatdbNodeResolver(path []byte) ([]byte, error) {
623+
func (trie *BinaryTrie) FlatdbNodeResolver(path []byte, hash common.Hash) ([]byte, error) {
624+
if hash == (common.Hash{}) {
625+
return nil, nil // empty node
626+
}
625627
return trie.db.diskdb.Get(append(FlatDBVerkleNodeKeyPrefix, path...))
626628
}
627629

trie/binary_iterator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ func (it *verkleNodeIterator) Next(descend bool) bool {
110110
return it.Next(descend)
111111
case HashedNode:
112112
// resolve the node
113-
data, err := it.trie.FlatdbNodeResolver(it.Path())
113+
data, err := it.trie.FlatdbNodeResolver(it.Path(), common.Hash(node))
114114
if err != nil {
115115
panic(err)
116116
}

0 commit comments

Comments
 (0)