@@ -772,7 +772,7 @@ func groupKeys(keys keylist, depth byte) []keylist {
772772 return groups
773773}
774774
775- func (n * InternalNode ) LoadKeyForProof (key []byte , resolver NodeResolverFn ) error {
775+ func (n * InternalNode ) GetAndLoadForProof (key []byte , resolver NodeResolverFn ) ([] byte , error ) {
776776 // Each internal node that is part of the proof needs to load all it's
777777 // children since it's needed for proof openings.
778778 childrenKey := make ([]byte , n .depth + 1 )
@@ -782,21 +782,23 @@ func (n *InternalNode) LoadKeyForProof(key []byte, resolver NodeResolverFn) erro
782782 childrenKey [n .depth ] = byte (i )
783783 serialized , err := resolver (childrenKey )
784784 if err != nil {
785- return err
785+ return nil , fmt . Errorf ( "resolving node: %s" , err )
786786 }
787787 c , err := ParseNode (serialized , n .depth + 1 )
788788 if err != nil {
789- return err
789+ return nil , fmt . Errorf ( "parsing resolved node: %s" , err )
790790 }
791791 n .children [i ] = c
792792 }
793- if child , ok := n .children [i ].(* InternalNode ); ok {
794- if err := child .LoadKeyForProof (childrenKey , resolver ); err != nil {
795- return err
796- }
797- }
798793 }
799- return nil
794+ switch child := n .children [key [n .depth + 1 ]].(type ) {
795+ case * InternalNode : // If next node is an internal node, recurse.
796+ return child .GetAndLoadForProof (childrenKey , resolver )
797+ case * LeafNode : // If next node is a leaf node, return the value.
798+ return child .Get (key , nil )
799+ default :
800+ panic ("invalid node type" )
801+ }
800802}
801803
802804func (n * InternalNode ) GetProofItems (keys keylist ) (* ProofElements , []byte , [][]byte , error ) {
0 commit comments