let is_member = std::merkle::check_membership(root, leaf, index, hashpath);
```|
In the above , what is index? In the examples, we are using index = 0 . Why is that the case?
is index used to denote the position of the leaf, left or right?
50 Likes
So the index is the position of the leaf in the tree. In a binary merkle tree it is broken down into a bit array where each bit is used to determine whether the current leaf we are hashing is on the left or right. In our stdlib you can see this in more detail: noir/noir_stdlib/src/merkle.nr at bd8379e2e847ab5196ff01e23add5a277fc6eb1c ยท noir-lang/noir ยท GitHub. We are going to be deprecating the check_membership
method in favor of the method linked in the next version of Noir.
19 Likes
Just to supplement the other answer, I think the โposition of the leaf in the treeโ means that leftmost โleaf indexโ is 0 and the rightmost is ( 2^height)-1
(if height does not include root).
โโโโโ
root: โญโโโโโโโโโโโโโโจ r โ โโโโโโโโโโโโโโฎ
โ โโโโโ โ
โโโทโโ โโโทโโ
lyr2: โญโโโโโโจ x โ โโโโโโฎ โญโโโโโโจ x โ โโโโโโฎ
โ โโโโโ โ โ โโโโโ โ
โโโทโโ โโโทโโ โโโทโโ โโโทโโ
lyr1: โญโโจ x โ โโฎ โญโโจ x โ โโฎ โญโโจ x โ โโฎ โญโโจ x โ โโฎ
โ โโโโโ โ โ โโโโโ โ โ โโโโโ โ โ โโโโโ โ
โโโทโโ โโโทโโ โโโทโโ โโโทโโ โโโทโโ โโโทโโ โโโทโโ โโโทโโ
lry0: โ 0 โ โ 1 โ โ 2 โ โ 3 โ โ 4 โ โ 5 โ โ 6 โ โ 7 โ
โโโโโ โโโโโ โโโโโ โโโโโ โโโโโ โโโโโ โโโโโ โโโโโ
height = 3
num_leaves = (2^height) = 2^3 = 8
59 Likes
Thanks for the explanation
25 Likes