Merkle tree builder
Build an allowlist: paste addresses, get the root to publish and a proof for each one.
Your allowlist
One address per line. The tree rebuilds a moment after you stop typing.
Paste straight out of a spreadsheet. Blank lines are ignored; anything that isn't an address is hashed as plain text.
Pairs are sorted before hashing, which is what OpenZeppelin's MerkleProof library expects — so a root from here verifies against a stock allowlist contract.
No list yet
Paste your addresses on the left. You'll get one root to publish in your contract, and a proof for every address on the list.
What you do with these
The root goes in the contract; the proof goes in the transaction.
A lets a contract check membership of a list of any size while storing a single value. Each claimer sends their own proof — a handful of hashes — and the contract replays them to see whether they rebuild the root.
import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";
contract Allowlist {
bytes32 public immutable root;
constructor(bytes32 _root) {
root = _root; // the Merkle root from this page
}
function claim(bytes32[] calldata proof) external {
bytes32 leaf = bytes32(uint256(uint160(msg.sender)));
require(MerkleProof.verify(proof, root, leaf), "not on the list");
// ...mint, transfer, or whatever the allowlist unlocks
}
}