Skip to content

Commit 6eeff3e

Browse files
authored
trie: replace custom logic with bytes.HasPrefix (#30771)
in `trie` - Replace custom logic with `bytes.HasPrefix` - Remove unnecessary code in `GetNode`
1 parent 16f2f71 commit 6eeff3e

File tree

2 files changed

+6
-9
lines changed

2 files changed

+6
-9
lines changed

trie/proof.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func (t *Trie) Prove(key []byte, proofDb ethdb.KeyValueWriter) error {
4848
for len(key) > 0 && tn != nil {
4949
switch n := tn.(type) {
5050
case *shortNode:
51-
if len(key) < len(n.Key) || !bytes.Equal(n.Key, key[:len(n.Key)]) {
51+
if !bytes.HasPrefix(key, n.Key) {
5252
// The trie doesn't contain the key.
5353
tn = nil
5454
} else {
@@ -371,7 +371,7 @@ func unset(parent node, child node, key []byte, pos int, removeLeft bool) error
371371
}
372372
return unset(cld, cld.Children[key[pos]], key, pos+1, removeLeft)
373373
case *shortNode:
374-
if len(key[pos:]) < len(cld.Key) || !bytes.Equal(cld.Key, key[pos:pos+len(cld.Key)]) {
374+
if !bytes.HasPrefix(key[pos:], cld.Key) {
375375
// Find the fork point, it's a non-existent branch.
376376
if removeLeft {
377377
if bytes.Compare(cld.Key, key[pos:]) < 0 {
@@ -434,7 +434,7 @@ func hasRightElement(node node, key []byte) bool {
434434
}
435435
node, pos = rn.Children[key[pos]], pos+1
436436
case *shortNode:
437-
if len(key)-pos < len(rn.Key) || !bytes.Equal(rn.Key, key[pos:pos+len(rn.Key)]) {
437+
if !bytes.HasPrefix(key[pos:], rn.Key) {
438438
return bytes.Compare(rn.Key, key[pos:]) > 0
439439
}
440440
node, pos = rn.Val, pos+len(rn.Key)
@@ -589,7 +589,7 @@ func get(tn node, key []byte, skipResolved bool) ([]byte, node) {
589589
for {
590590
switch n := tn.(type) {
591591
case *shortNode:
592-
if len(key) < len(n.Key) || !bytes.Equal(n.Key, key[:len(n.Key)]) {
592+
if !bytes.HasPrefix(key, n.Key) {
593593
return nil, nil
594594
}
595595
tn = n.Val

trie/trie.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ func (t *Trie) get(origNode node, key []byte, pos int) (value []byte, newnode no
163163
case valueNode:
164164
return n, n, false, nil
165165
case *shortNode:
166-
if len(key)-pos < len(n.Key) || !bytes.Equal(n.Key, key[pos:pos+len(n.Key)]) {
166+
if !bytes.HasPrefix(key[pos:], n.Key) {
167167
// key not found in trie
168168
return nil, n, false, nil
169169
}
@@ -219,9 +219,6 @@ func (t *Trie) GetNode(path []byte) ([]byte, int, error) {
219219
if resolved > 0 {
220220
t.root = newroot
221221
}
222-
if item == nil {
223-
return nil, resolved, nil
224-
}
225222
return item, resolved, nil
226223
}
227224

@@ -254,7 +251,7 @@ func (t *Trie) getNode(origNode node, path []byte, pos int) (item []byte, newnod
254251
return nil, nil, 0, nil
255252

256253
case *shortNode:
257-
if len(path)-pos < len(n.Key) || !bytes.Equal(n.Key, path[pos:pos+len(n.Key)]) {
254+
if !bytes.HasPrefix(path[pos:], n.Key) {
258255
// Path branches off from short node
259256
return nil, n, 0, nil
260257
}

0 commit comments

Comments
 (0)