-
Notifications
You must be signed in to change notification settings - Fork 6
/
26-Merkle.sol
35 lines (27 loc) · 1.26 KB
/
26-Merkle.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
/// importing the openzeppling merkle proof contracts to access the verify function
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/v4.0.0/contracts/utils/cryptography/MerkleProof.sol" ;
// - should generate Merkle proof & verify it.
contract Merkle{
/// merkle root for the merkle tree
bytes32 public merkleRoot ;
constructor(bytes32 _merkleRoot) {
merkleRoot = _merkleRoot ;
}
/// @dev to generate a merkle hash for a set of data
/// @param _address - address of msg.sender
/// @param _nonce - nonce value just an additional protection
/// @return _hash - hash value in bytes is returned
function hash(address _address , uint256 _nonce) public returns(bytes32) {
return keccak256(abi.encodePacked(_address,_nonce));
}
/// @dev verify root with the proof the user has
/// @param _proof the proof which can be used to verify
/// @param _hash the hash which user got while hashing the values
/// @return bool whether the verification is done or not
function verify(bytes32[] calldata _proof ,bytes32 _hash ) public returns(bool){
bytes leaf = _hash ;
return MerkleProof.verify(_proof, merkleRoot,leaf );
}
}