Skip to content

Commit ead3a25

Browse files
committed
tree: extend method to also return value
Signed-off-by: Ignacio Hagopian <[email protected]>
1 parent c4b1795 commit ead3a25

File tree

1 file changed

+11
-9
lines changed

1 file changed

+11
-9
lines changed

tree.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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

865867
func (n *InternalNode) GetProofItems(keys keylist, resolver NodeResolverFn) (*ProofElements, []byte, [][]byte, error) {

0 commit comments

Comments
 (0)