XEROXDROP

Criteria on the wall first.
List sealed after.
Never the other way.

Xeroxdrop runs token distributions in one fixed order: you write the rule set, its keccak256 hash goes on-chain together with the block that will be snapshotted, then holdings are read at that block. After that: a merkle tree, a claim contract with no owner and no upgrade path, and a claim page that already exists. Anyone can run the CLI, replay from public chain data, and compare the root. We do not prove your rules are fair — we prove the list matches the rules you pinned to the wall before opening the door.

Dry-run a dropSee the public registryfree, commits nothing →

We never hold your tokens. One fee per drop, tiered by wallets on the list.

every sheet pinned before its block happened
1Write ruleseditable until you sign
2Dry runreplayable, costs nothing
3Anchor hashirreversible
4Snapshotat the committed block
5Open claimsfrom an audited template
step 3 is the one you cannot walk back

Meme segment, right now

live from CoinGecko
Could not read this
CoinGecko did not answer and there is no cached value to fall back on, so this section shows nothing rather than a placeholder. Reason: cache "segment:meme": upstream failed and nothing is cached

What is actually enforced

ordering
The hash goes up before the block happens

RulesAnchor.anchor() reverts when the snapshot block is already in the past. The ordering is not a promise in a blog post, it is a require statement.

if (snapshotBlock <= block.number) revert SnapshotBlockNotInFuture();
replay
The list is rebuilt from Transfer logs, not from an API

The engine walks every Transfer event from the token deployment block to the snapshot block and reconstructs balances. Anyone with an RPC URL gets the same root.

xeroxdrop replay --rules rules.json --rpc $RPC_URL
self-check
Every snapshot cross-checks itself

After the replay, a deterministic sample of balances is compared against eth_call balanceOf at the same block. A single mismatch voids the run instead of shipping a wrong list.

cross-check: 17/17 balances match eth_call
no custody
Tokens never touch us

The distributor has no owner, no pause, no way to change the root, and one destination for unclaimed funds — fixed in an immutable at deployment.

address public immutable treasury;

What we don't do

read before you write to us
  • We do NOT vet your project.
  • We do NOT claim your rule set is fair. We only prove the list matches the rule set published beforehand.
  • We do NOT decide who is on your list. Your published rule set does, and anyone can replay it.
  • We do NOT hold your tokens — they sit in the claim contract; gas and transactions are signed by you.
  • We can NOT edit a drop after you anchor the hash. Even if you beg.