@@ -78,11 +78,10 @@ func testGenerateProof(t *testing.T, entries []Pair, keys [][]byte) ([]byte, [][
78
78
value := trie .Get (key )
79
79
require .NotNil (t , value )
80
80
81
- itemFromDB : = Pair {
81
+ items [ idx ] = Pair {
82
82
Key : key ,
83
83
Value : value ,
84
84
}
85
- items [idx ] = itemFromDB
86
85
}
87
86
88
87
return root , proof , items
@@ -95,23 +94,23 @@ func TestVerifyProof_ShouldReturnTrue(t *testing.T) {
95
94
{Key : []byte ("alpha" ), Value : make ([]byte , 32 )},
96
95
{Key : []byte ("bravo" ), Value : []byte ("bravo" )},
97
96
{Key : []byte ("do" ), Value : []byte ("verb" )},
98
- {Key : []byte ("dog " ), Value : []byte ("puppy" )},
99
- {Key : []byte ("doge " ), Value : make ( []byte , 32 )},
97
+ {Key : []byte ("dogea " ), Value : []byte ("puppy" )},
98
+ {Key : []byte ("dogeb " ), Value : []byte ( "puppy" )},
100
99
{Key : []byte ("horse" ), Value : []byte ("stallion" )},
101
100
{Key : []byte ("house" ), Value : []byte ("building" )},
102
101
}
103
102
104
103
keys := [][]byte {
105
104
[]byte ("do" ),
106
- []byte ("dog " ),
107
- []byte ("doge " ),
105
+ []byte ("dogea " ),
106
+ []byte ("dogeb " ),
108
107
}
109
108
110
- root , proof , pl := testGenerateProof (t , entries , keys )
109
+ root , proof , pairs := testGenerateProof (t , entries , keys )
110
+ v , err := VerifyProof (proof , root , pairs )
111
111
112
- v , err := VerifyProof (proof , root , pl )
113
- require .True (t , v )
114
112
require .NoError (t , err )
113
+ require .True (t , v )
115
114
}
116
115
117
116
func TestVerifyProof_ShouldReturnDuplicateKeysError (t * testing.T ) {
@@ -158,3 +157,68 @@ func TestVerifyProof_ShouldReturnTrueWithouCompareValues(t *testing.T) {
158
157
require .True (t , v )
159
158
require .NoError (t , err )
160
159
}
160
+
161
+ func TestBranchNodes_SameHash_DiferentPaths_GenerateAndVerifyProof (t * testing.T ) {
162
+ value := []byte ("somevalue" )
163
+ entries := []Pair {
164
+ {Key : []byte ("d" ), Value : value },
165
+ {Key : []byte ("b" ), Value : value },
166
+ {Key : []byte ("dxyz" ), Value : value },
167
+ {Key : []byte ("bxyz" ), Value : value },
168
+ {Key : []byte ("dxyzi" ), Value : value },
169
+ {Key : []byte ("bxyzi" ), Value : value },
170
+ }
171
+
172
+ keys := [][]byte {
173
+ []byte ("d" ),
174
+ []byte ("b" ),
175
+ []byte ("dxyz" ),
176
+ []byte ("bxyz" ),
177
+ []byte ("dxyzi" ),
178
+ []byte ("bxyzi" ),
179
+ }
180
+
181
+ root , proof , pairs := testGenerateProof (t , entries , keys )
182
+
183
+ ok , err := VerifyProof (proof , root , pairs )
184
+ require .NoError (t , err )
185
+ require .True (t , ok )
186
+ }
187
+
188
+ func TestLeafNodes_SameHash_DifferentPaths_GenerateAndVerifyProof (t * testing.T ) {
189
+ tmp := t .TempDir ()
190
+
191
+ memdb , err := chaindb .NewBadgerDB (& chaindb.Config {
192
+ InMemory : true ,
193
+ DataDir : tmp ,
194
+ })
195
+ require .NoError (t , err )
196
+
197
+ var (
198
+ value = []byte ("somevalue" )
199
+ key1 = []byte ("worlda" )
200
+ key2 = []byte ("worldb" )
201
+ )
202
+
203
+ tt := NewEmptyTrie ()
204
+ tt .Put (key1 , value )
205
+ tt .Put (key2 , value )
206
+
207
+ err = tt .Store (memdb )
208
+ require .NoError (t , err )
209
+
210
+ hash , err := tt .Hash ()
211
+ require .NoError (t , err )
212
+
213
+ proof , err := GenerateProof (hash .ToBytes (), [][]byte {key1 , key2 }, memdb )
214
+ require .NoError (t , err )
215
+
216
+ pairs := []Pair {
217
+ {Key : key1 , Value : value },
218
+ {Key : key2 , Value : value },
219
+ }
220
+
221
+ ok , err := VerifyProof (proof , hash .ToBytes (), pairs )
222
+ require .NoError (t , err )
223
+ require .True (t , ok )
224
+ }
0 commit comments