merkle tree builder
allowlist or airdrop rows → root and proofs, openzeppelin style.
leaf typeslike a solidity parameter list
try
rowsone per line, values separated by commas
merkle root · 4 leaves
0x6bbb0434396b2fa30dfbb97be5727dfcc2773c41696182ff6de555e022e14f85proof for one row
findan address or a line number
line 2: 0x2222222222222222222222222222222222222222, 2500000000000000000
0xb92c48e9d7abe27fd8dfd6b5dfdbfb1c9a463f80c712b66f3a5180a090cccafcleaf hashproof (bytes32[])
["0x2875f5093aafcdd988e50894a94909fffb5c813a816cb7684b0652bc7a9ef946", "0xcc68be0fb07973d30b0b70c7c3758f8a4cf464921f9ed8b1be9c22170e2d78b7"]verify it in solidity
openzeppelin MerkleProof
import {MerkleProof} from "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";
bytes32 public constant ROOT = 0x6bbb0434396b2fa30dfbb97be5727dfcc2773c41696182ff6de555e022e14f85;
function claim(address account, uint256 amount, bytes32[] calldata proof) external {
bytes32 leaf = keccak256(bytes.concat(keccak256(abi.encode(account, amount))));
require(MerkleProof.verify(proof, ROOT, leaf), "not on the list");
// ...
}