Skip to content

Commit 8d89807

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

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

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

0 commit comments

Comments
 (0)