Skip to content

Commit 400b253

Browse files
committed
tree: add new method LoadKeyForProof
Signed-off-by: Ignacio Hagopian <[email protected]>
1 parent 0a4e93e commit 400b253

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
@@ -811,6 +811,33 @@ func groupKeys(keys keylist, depth byte) []keylist {
811811
return groups
812812
}
813813

814+
func (n *InternalNode) LoadKeyForProof(key []byte, resolver NodeResolverFn) error {
815+
// Each internal node that is part of the proof needs to load all it's
816+
// children since it's needed for proof openings.
817+
childrenKey := make([]byte, n.depth+1)
818+
copy(childrenKey, key[:n.depth])
819+
for i := range n.children {
820+
if _, ok := n.children[i].(HashedNode); ok {
821+
childrenKey[n.depth] = byte(i)
822+
serialized, err := resolver(childrenKey)
823+
if err != nil {
824+
return err
825+
}
826+
c, err := ParseNode(serialized, n.depth+1)
827+
if err != nil {
828+
return err
829+
}
830+
n.children[i] = c
831+
}
832+
if child, ok := n.children[i].(*InternalNode); ok {
833+
if err := child.LoadKeyForProof(childrenKey, resolver); err != nil {
834+
return err
835+
}
836+
}
837+
}
838+
return nil
839+
}
840+
814841
func (n *InternalNode) GetProofItems(keys keylist, resolver NodeResolverFn) (*ProofElements, []byte, [][]byte, error) {
815842
var (
816843
groups = groupKeys(keys, n.depth)

0 commit comments

Comments
 (0)