Convert & calculate

Merkle tree builder

Build an allowlist: paste addresses, get the root to publish and a proof for each one.

Runs in your browser

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.

Solidity
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
    }
}