Skip to content

Commit

Permalink
Update merkle multiproof docs with a caution note
Browse files Browse the repository at this point in the history
(cherry picked from commit 8d908fe)
  • Loading branch information
frangio committed Oct 6, 2022
1 parent 50501a7 commit 4e18cdc
Showing 1 changed file with 16 additions and 5 deletions.
21 changes: 16 additions & 5 deletions contracts/utils/cryptography/MerkleProof.sol
Original file line number Diff line number Diff line change
Expand Up @@ -75,9 +75,11 @@ library MerkleProof {
}

/**
* @dev Returns true if the `leaves` can be proved to be a part of a Merkle tree defined by
* @dev Returns true if the `leaves` can be simultaneously proven to be a part of a merkle tree defined by
* `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
*
* CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
*
* _Available since v4.7._
*/
function multiProofVerify(
Expand All @@ -92,6 +94,8 @@ library MerkleProof {
/**
* @dev Calldata version of {multiProofVerify}
*
* CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
*
* _Available since v4.7._
*/
function multiProofVerifyCalldata(
Expand All @@ -104,9 +108,14 @@ library MerkleProof {
}

/**
* @dev Returns the root of a tree reconstructed from `leaves` and the sibling nodes in `proof`,
* consuming from one or the other at each step according to the instructions given by
* `proofFlags`.
* @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
* proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
* leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
* respectively.
*
* CAUTION: Not all merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
* is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
* tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
*
* _Available since v4.7._
*/
Expand Down Expand Up @@ -152,7 +161,9 @@ library MerkleProof {
}

/**
* @dev Calldata version of {processMultiProof}
* @dev Calldata version of {processMultiProof}.
*
* CAUTION: Not all merkle trees admit multiproofs. See {processMultiProof} for details.
*
* _Available since v4.7._
*/
Expand Down

0 comments on commit 4e18cdc

Please sign in to comment.