@@ -811,7 +811,7 @@ func groupKeys(keys keylist, depth byte) []keylist {
811
811
return groups
812
812
}
813
813
814
- func (n * InternalNode ) LoadKeyForProof (key []byte , resolver NodeResolverFn ) error {
814
+ func (n * InternalNode ) GetAndLoadForProof (key []byte , resolver NodeResolverFn ) ([] byte , error ) {
815
815
// Each internal node that is part of the proof needs to load all it's
816
816
// children since it's needed for proof openings.
817
817
childrenKey := make ([]byte , n .depth + 1 )
@@ -821,21 +821,23 @@ func (n *InternalNode) LoadKeyForProof(key []byte, resolver NodeResolverFn) erro
821
821
childrenKey [n .depth ] = byte (i )
822
822
serialized , err := resolver (childrenKey )
823
823
if err != nil {
824
- return err
824
+ return nil , fmt . Errorf ( "resolving node: %s" , err )
825
825
}
826
826
c , err := ParseNode (serialized , n .depth + 1 )
827
827
if err != nil {
828
- return err
828
+ return nil , fmt . Errorf ( "parsing resolved node: %s" , err )
829
829
}
830
830
n .children [i ] = c
831
831
}
832
- if child , ok := n .children [i ].(* InternalNode ); ok {
833
- if err := child .LoadKeyForProof (childrenKey , resolver ); err != nil {
834
- return err
835
- }
836
- }
837
832
}
838
- return nil
833
+ switch child := n .children [key [n .depth + 1 ]].(type ) {
834
+ case * InternalNode : // If next node is an internal node, recurse.
835
+ return child .GetAndLoadForProof (childrenKey , resolver )
836
+ case * LeafNode : // If next node is a leaf node, return the value.
837
+ return child .Get (key , nil )
838
+ default :
839
+ panic ("invalid node type" )
840
+ }
839
841
}
840
842
841
843
func (n * InternalNode ) GetProofItems (keys keylist , resolver NodeResolverFn ) (* ProofElements , []byte , [][]byte , error ) {
0 commit comments