@@ -772,6 +772,33 @@ func groupKeys(keys keylist, depth byte) []keylist {
772
772
return groups
773
773
}
774
774
775
+ func (n * InternalNode ) LoadKeyForProof (key []byte , resolver NodeResolverFn ) error {
776
+ // Each internal node that is part of the proof needs to load all it's
777
+ // children since it's needed for proof openings.
778
+ childrenKey := make ([]byte , n .depth + 1 )
779
+ copy (childrenKey , key [:n .depth ])
780
+ for i := range n .children {
781
+ if _ , ok := n .children [i ].(HashedNode ); ok {
782
+ childrenKey [n .depth ] = byte (i )
783
+ serialized , err := resolver (childrenKey )
784
+ if err != nil {
785
+ return err
786
+ }
787
+ c , err := ParseNode (serialized , n .depth + 1 )
788
+ if err != nil {
789
+ return err
790
+ }
791
+ n .children [i ] = c
792
+ }
793
+ if child , ok := n .children [i ].(* InternalNode ); ok {
794
+ if err := child .LoadKeyForProof (childrenKey , resolver ); err != nil {
795
+ return err
796
+ }
797
+ }
798
+ }
799
+ return nil
800
+ }
801
+
775
802
func (n * InternalNode ) GetProofItems (keys keylist ) (* ProofElements , []byte , [][]byte , error ) {
776
803
var (
777
804
groups = groupKeys (keys , n .depth )
@@ -1339,8 +1366,8 @@ func (n *LeafNode) GetProofItems(keys keylist) (*ProofElements, []byte, [][]byte
1339
1366
if len (esses ) == 0 {
1340
1367
esses = append (esses , extStatusAbsentOther | (n .depth << 3 ))
1341
1368
poass = append (poass , n .stem )
1342
- pe .Vals = append (pe .Vals , nil )
1343
1369
}
1370
+ pe .Vals = append (pe .Vals , nil ) // TODO(PR-temp): workaround proving bug.
1344
1371
continue
1345
1372
}
1346
1373
0 commit comments