Skip to content

Commit c4b1795

Browse files
committed
tree: add new method LoadKeyForProof
Signed-off-by: Ignacio Hagopian <[email protected]>
1 parent 3d7dc63 commit c4b1795

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

tree.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -835,6 +835,33 @@ func groupKeys(keys keylist, depth byte) []keylist {
835835
return groups
836836
}
837837

838+
func (n *InternalNode) LoadKeyForProof(key []byte, resolver NodeResolverFn) error {
839+
// Each internal node that is part of the proof needs to load all it's
840+
// children since it's needed for proof openings.
841+
childrenKey := make([]byte, n.depth+1)
842+
copy(childrenKey, key[:n.depth])
843+
for i := range n.children {
844+
if _, ok := n.children[i].(HashedNode); ok {
845+
childrenKey[n.depth] = byte(i)
846+
serialized, err := resolver(childrenKey)
847+
if err != nil {
848+
return err
849+
}
850+
c, err := ParseNode(serialized, n.depth+1)
851+
if err != nil {
852+
return err
853+
}
854+
n.children[i] = c
855+
}
856+
if child, ok := n.children[i].(*InternalNode); ok {
857+
if err := child.LoadKeyForProof(childrenKey, resolver); err != nil {
858+
return err
859+
}
860+
}
861+
}
862+
return nil
863+
}
864+
838865
func (n *InternalNode) GetProofItems(keys keylist, resolver NodeResolverFn) (*ProofElements, []byte, [][]byte, error) {
839866
var (
840867
groups = groupKeys(keys, n.depth)

0 commit comments

Comments
 (0)