@@ -835,7 +835,7 @@ func groupKeys(keys keylist, depth byte) []keylist {
835835 return groups
836836}
837837
838- func (n * InternalNode ) LoadKeyForProof (key []byte , resolver NodeResolverFn ) error {
838+ func (n * InternalNode ) GetAndLoadForProof (key []byte , resolver NodeResolverFn ) ([] byte , error ) {
839839 // Each internal node that is part of the proof needs to load all it's
840840 // children since it's needed for proof openings.
841841 childrenKey := make ([]byte , n .depth + 1 )
@@ -845,21 +845,23 @@ func (n *InternalNode) LoadKeyForProof(key []byte, resolver NodeResolverFn) erro
845845 childrenKey [n .depth ] = byte (i )
846846 serialized , err := resolver (childrenKey )
847847 if err != nil {
848- return err
848+ return nil , fmt . Errorf ( "resolving node: %s" , err )
849849 }
850850 c , err := ParseNode (serialized , n .depth + 1 )
851851 if err != nil {
852- return err
852+ return nil , fmt . Errorf ( "parsing resolved node: %s" , err )
853853 }
854854 n .children [i ] = c
855855 }
856- if child , ok := n .children [i ].(* InternalNode ); ok {
857- if err := child .LoadKeyForProof (childrenKey , resolver ); err != nil {
858- return err
859- }
860- }
861856 }
862- return nil
857+ switch child := n .children [key [n .depth + 1 ]].(type ) {
858+ case * InternalNode : // If next node is an internal node, recurse.
859+ return child .GetAndLoadForProof (childrenKey , resolver )
860+ case * LeafNode : // If next node is a leaf node, return the value.
861+ return child .Get (key , nil )
862+ default :
863+ panic ("invalid node type" )
864+ }
863865}
864866
865867func (n * InternalNode ) GetProofItems (keys keylist , resolver NodeResolverFn ) (* ProofElements , []byte , [][]byte , error ) {
0 commit comments