From 08b1c27ee50a1f80a0865b457e74830e08c6e689 Mon Sep 17 00:00:00 2001 From: Darioush Jalali Date: Wed, 19 Jan 2022 15:57:18 -0600 Subject: [PATCH] trie/proof: edge case for VerifyRangeProof --- trie/proof_test.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/trie/proof_test.go b/trie/proof_test.go index 95ad6169c3bd6..06d75fa2d4a2f 100644 --- a/trie/proof_test.go +++ b/trie/proof_test.go @@ -1067,3 +1067,43 @@ func nonRandomTrie(n int) (*Trie, map[string]*kv) { } return trie, vals } + +func TestRangeProofKeysWithSharedPrefix(t *testing.T) { + // TODO: test fails if 1st key/value pair is omitted. + keys := [][]byte{ + common.Hex2Bytes("1000000000000000000000000000000000000000000000000000000000000000"), + common.Hex2Bytes("aa10000000000000000000000000000000000000000000000000000000000000"), + common.Hex2Bytes("aa20000000000000000000000000000000000000000000000000000000000000"), + } + vals := [][]byte{ + common.Hex2Bytes("01"), + common.Hex2Bytes("02"), + common.Hex2Bytes("03"), + } + db := memorydb.New() + tr, err := New(common.Hash{}, NewDatabase(db)) + if err != nil { + t.Fatalf("could not create new trie: %v", err) + } + for i, key := range keys { + tr.Update(key, vals[i]) + } + root := tr.Hash() + proof := memorydb.New() + start := common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000000") + end := common.Hex2Bytes("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff") + if err := tr.Prove(start, 0, proof); err != nil { + t.Fatalf("failed to prove start: %v", err) + } + if err := tr.Prove(end, 0, proof); err != nil { + t.Fatalf("failed to prove end: %v", err) + } + + more, err := VerifyRangeProof(root, start, end, keys, vals, proof) + if err != nil { + t.Fatalf("failed to verify range proof: %v", err) + } + if more != false { + t.Error("expected more to be false") + } +}