trie/bintrie: fix debug_executionWitness for binary tree

This commit is contained in:
Guillaume Ballet 2026-02-02 18:12:37 +01:00
parent 31d5d82ce5
commit 1803f5a633
No known key found for this signature in database
2 changed files with 28 additions and 1 deletions

View file

@ -424,5 +424,5 @@ func (t *BinaryTrie) PrefetchStorage(addr common.Address, keys [][]byte) error {
// Witness returns a set containing all trie nodes that have been accessed.
func (t *BinaryTrie) Witness() map[string][]byte {
panic("not implemented")
return t.tracer.Values()
}

View file

@ -22,6 +22,7 @@ import (
"testing"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/trie"
)
var (
@ -195,3 +196,29 @@ func TestMerkleizeMultipleEntries(t *testing.T) {
t.Fatalf("invalid root, expected=%x, got = %x", expected, got)
}
}
func TestBinaryTrieWitness(t *testing.T) {
tracer := trie.NewPrevalueTracer()
tr := &BinaryTrie{
root: NewBinaryNode(),
tracer: tracer,
}
if w := tr.Witness(); len(w) != 0 {
t.Fatal("expected empty witness for fresh trie")
}
tracer.Put([]byte("path1"), []byte("blob1"))
tracer.Put([]byte("path2"), []byte("blob2"))
witness := tr.Witness()
if len(witness) != 2 {
t.Fatalf("expected 2 witness entries, got %d", len(witness))
}
if !bytes.Equal(witness[string([]byte("path1"))], []byte("blob1")) {
t.Fatal("unexpected witness value for path1")
}
if !bytes.Equal(witness[string([]byte("path2"))], []byte("blob2")) {
t.Fatal("unexpected witness value for path2")
}
}