@@ -772,6 +772,33 @@ func groupKeys(keys keylist, depth byte) []keylist {
772772 return groups
773773}
774774
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+
775802func (n * InternalNode ) GetProofItems (keys keylist ) (* ProofElements , []byte , [][]byte , error ) {
776803 var (
777804 groups = groupKeys (keys , n .depth )
@@ -1339,8 +1366,8 @@ func (n *LeafNode) GetProofItems(keys keylist) (*ProofElements, []byte, [][]byte
13391366 if len (esses ) == 0 {
13401367 esses = append (esses , extStatusAbsentOther | (n .depth << 3 ))
13411368 poass = append (poass , n .stem )
1342- pe .Vals = append (pe .Vals , nil )
13431369 }
1370+ pe .Vals = append (pe .Vals , nil ) // TODO(PR-temp): workaround proving bug.
13441371 continue
13451372 }
13461373
0 commit comments