Skip to content

Commit 7a3eb2d

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

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
@@ -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

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

0 commit comments

Comments
 (0)