@@ -811,7 +811,7 @@ func groupKeys(keys keylist, depth byte) []keylist {
811811 return groups
812812}
813813
814- func (n * InternalNode ) LoadKeyForProof (key []byte , resolver NodeResolverFn ) error {
814+ func (n * InternalNode ) GetAndLoadForProof (key []byte , resolver NodeResolverFn ) ([] byte , error ) {
815815 // Each internal node that is part of the proof needs to load all it's
816816 // children since it's needed for proof openings.
817817 childrenKey := make ([]byte , n .depth + 1 )
@@ -821,21 +821,23 @@ func (n *InternalNode) LoadKeyForProof(key []byte, resolver NodeResolverFn) erro
821821 childrenKey [n .depth ] = byte (i )
822822 serialized , err := resolver (childrenKey )
823823 if err != nil {
824- return err
824+ return nil , fmt . Errorf ( "resolving node: %s" , err )
825825 }
826826 c , err := ParseNode (serialized , n .depth + 1 )
827827 if err != nil {
828- return err
828+ return nil , fmt . Errorf ( "parsing resolved node: %s" , err )
829829 }
830830 n .children [i ] = c
831831 }
832- if child , ok := n .children [i ].(* InternalNode ); ok {
833- if err := child .LoadKeyForProof (childrenKey , resolver ); err != nil {
834- return err
835- }
836- }
837832 }
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+ }
839841}
840842
841843func (n * InternalNode ) GetProofItems (keys keylist , resolver NodeResolverFn ) (* ProofElements , []byte , [][]byte , error ) {
0 commit comments