mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			41 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			41 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Solidity
		
	
	
	
	
	
| pragma experimental SMTChecker;
 | |
| 
 | |
| /**
 | |
|  * @title MerkleProof
 | |
|  * @dev Merkle proof verification based on
 | |
|  * https://github.com/ameensol/merkle-tree-solidity/blob/master/src/MerkleProof.sol
 | |
|  */
 | |
| library MerkleProof {
 | |
|     /**
 | |
|      * @dev Verifies a Merkle proof proving the existence of a leaf in a Merkle tree. Assumes that each pair of leaves
 | |
|      * and each pair of pre-images are sorted.
 | |
|      * @param proof Merkle proof containing sibling hashes on the branch from the leaf to the root of the Merkle tree
 | |
|      * @param root Merkle root
 | |
|      * @param leaf Leaf of Merkle tree
 | |
|      */
 | |
|     function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
 | |
|         bytes32 computedHash = leaf;
 | |
| 
 | |
|         for (uint256 i = 0; i < proof.length; i++) {
 | |
|             bytes32 proofElement = proof[i];
 | |
| 
 | |
|             if (computedHash < proofElement) {
 | |
|                 // Hash(current computed hash + current element of the proof)
 | |
|                 computedHash = keccak256(abi.encodePacked(computedHash, proofElement));
 | |
|             } else {
 | |
|                 // Hash(current element of the proof + current computed hash)
 | |
|                 computedHash = keccak256(abi.encodePacked(proofElement, computedHash));
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         // Check if the computed hash (root) is equal to the provided root
 | |
|         return computedHash == root;
 | |
|     }
 | |
| }
 | |
| 
 | |
| // ----
 | |
| // Warning 4588: (988-1032): Assertion checker does not yet implement this type of function call.
 | |
| // Warning 4588: (1175-1219): Assertion checker does not yet implement this type of function call.
 | |
| // Warning 4588: (988-1032): Assertion checker does not yet implement this type of function call.
 | |
| // Warning 4588: (1175-1219): Assertion checker does not yet implement this type of function call.
 |