|
|
|
@ -124,7 +124,7 @@ library MerkleProof { |
|
|
|
|
bool[] memory proofFlags, |
|
|
|
|
bytes32[] memory leaves |
|
|
|
|
) internal pure returns (bytes32 merkleRoot) { |
|
|
|
|
// This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by |
|
|
|
|
// This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by |
|
|
|
|
// consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the |
|
|
|
|
// `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of |
|
|
|
|
// the merkle tree. |
|
|
|
@ -147,7 +147,9 @@ library MerkleProof { |
|
|
|
|
// `proof` array. |
|
|
|
|
for (uint256 i = 0; i < totalHashes; i++) { |
|
|
|
|
bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; |
|
|
|
|
bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; |
|
|
|
|
bytes32 b = proofFlags[i] |
|
|
|
|
? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) |
|
|
|
|
: proof[proofPos++]; |
|
|
|
|
hashes[i] = _hashPair(a, b); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -172,7 +174,7 @@ library MerkleProof { |
|
|
|
|
bool[] calldata proofFlags, |
|
|
|
|
bytes32[] memory leaves |
|
|
|
|
) internal pure returns (bytes32 merkleRoot) { |
|
|
|
|
// This function rebuild the root hash by traversing the tree up from the leaves. The root is rebuilt by |
|
|
|
|
// This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by |
|
|
|
|
// consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the |
|
|
|
|
// `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of |
|
|
|
|
// the merkle tree. |
|
|
|
@ -195,7 +197,9 @@ library MerkleProof { |
|
|
|
|
// `proof` array. |
|
|
|
|
for (uint256 i = 0; i < totalHashes; i++) { |
|
|
|
|
bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]; |
|
|
|
|
bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++]; |
|
|
|
|
bytes32 b = proofFlags[i] |
|
|
|
|
? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++]) |
|
|
|
|
: proof[proofPos++]; |
|
|
|
|
hashes[i] = _hashPair(a, b); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|