Merkle Proof

Allows users to verify Merkle Tree proofs. It is based on the OZ implementation. The tree and the proofs can be generated using https://github.com/merkletreejs/merkletreejs.

You should avoid using leaf values that are 64 bytes long prior to hashing.

Interface

verify

Returns true if a leaf can be proved to be a part of a Merkle tree defined by root.

public fun verify(
    proof: &vector<vector<u8>>,
    root: vector<u8>,
    leaf: vector<u8>
  ): bool
  • @param proof: The Merkle proof.

  • @param root: The root of Merkle Tree.

  • @param leaf: The leaf we wish to prove if it is part of the tree.

  • @return bool. If it is part of the Merkle tree.

verify_with_index

Returns true if a leaf can be proved to be a part of a Merkle tree defined by root. For this, a proof must be provided, containing sibling hashes on the branch from the leaf to the root of the tree. Each pair of leaves and each pair of pre-images are assumed to be sorted.

The index logic is from ENS token: https://etherscan.io/token/0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72#code

public fun verify_with_index(
    proof: &vector<vector<u8>>,
    root: vector<u8>,
    leaf: vector<u8>
): (bool, u256)
  • @param proof: The Merkle proof.

  • @param root: The root of Merkle Tree.

  • @param leaf: The leaf we wish to prove if it is part of the tree.

  • @return bool. If it is part of the Merkle tree.

  • @return u256. The index of the leaf.

Last updated