Skip to content

Commit 2a6d843

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

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

tree.go

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -772,6 +772,33 @@ func groupKeys(keys keylist, depth byte) []keylist {
772772
return groups
773773
}
774774

775+
func (n *InternalNode) LoadKeyForProof(key []byte, resolver NodeResolverFn) error {
776+
// Each internal node that is part of the proof needs to load all it's
777+
// children since it's needed for proof openings.
778+
childrenKey := make([]byte, n.depth+1)
779+
copy(childrenKey, key[:n.depth])
780+
for i := range n.children {
781+
if _, ok := n.children[i].(HashedNode); ok {
782+
childrenKey[n.depth] = byte(i)
783+
serialized, err := resolver(childrenKey)
784+
if err != nil {
785+
return err
786+
}
787+
c, err := ParseNode(serialized, n.depth+1)
788+
if err != nil {
789+
return err
790+
}
791+
n.children[i] = c
792+
}
793+
if child, ok := n.children[i].(*InternalNode); ok {
794+
if err := child.LoadKeyForProof(childrenKey, resolver); err != nil {
795+
return err
796+
}
797+
}
798+
}
799+
return nil
800+
}
801+
775802
func (n *InternalNode) GetProofItems(keys keylist) (*ProofElements, []byte, [][]byte, error) {
776803
var (
777804
groups = groupKeys(keys, n.depth)
@@ -1339,8 +1366,8 @@ func (n *LeafNode) GetProofItems(keys keylist) (*ProofElements, []byte, [][]byte
13391366
if len(esses) == 0 {
13401367
esses = append(esses, extStatusAbsentOther|(n.depth<<3))
13411368
poass = append(poass, n.stem)
1342-
pe.Vals = append(pe.Vals, nil)
13431369
}
1370+
pe.Vals = append(pe.Vals, nil) // jsign comment: there's the cause.
13441371
continue
13451372
}
13461373

0 commit comments

Comments
 (0)