the rules, in full
all of it fits on one page, which is the point. nothing here is in a document somewhere else, and nothing here can be changed after the fact.
a box
a box holds two things: tokens, and keccak256(answer). it does not hold the answer. a hash cannot be turned back into the thing it was made from, so there is nothing in storage that could be read to open a box — not by you, not by the person who wrote it, and not by whoever deployed the contract.
the riddle itself is stored on chain in clear, next to the pot. the puzzle and the prize are the same object, and no server is involved in either.
locking one
anybody can lock a box. you pick an answer, your browser hashes it, and the contract is handed the hash, the riddle text and the pot.
answers are normalised before hashing — lowercased, trimmed, runs of whitespace collapsed to one space — so capitals and stray spaces never decide who wins. the site does this for the author and for every solver, identically.
stacking one
anybody can add tokens to any unsolved box, with no fee and no knowledge of the answer. if a riddle is good, other people can make it worth more. stacked tokens go into the same pot and leave the same way: through the answer.
opening one — and why it is two steps
commit. you send keccak256(box id, your answer, your address). it reveals nothing about the answer and it is worthless to anybody who copies it, because it is bound to your address.
reveal. at least one block later, you send the answer in clear. the contract checks it against your commit and against the box, pays you and shuts the box.
that gap is the entire anti-snipe. somebody watching the mempool can read your answer the moment you reveal it, and still cannot take the box: taking it requires a commit that already existed in an earlier block, and nobody can put one there after the fact.
a wrong answer costs gas and nothing else. you can commit again as often as you like.
the money
- 90% of the pot goes to whoever opened the box, in the reveal transaction.
- 10% is burned to 0x…dEaD, every time, with no exceptions and no other destination.
- the forge fee on every new box is burned in full.
the contract is not payable, holds no ETH, has no withdraw and no admin path to any pot. gas is the only ETH in this.
what can go wrong, said plainly
- nothing is refundable. lock a pot behind a riddle nobody solves and it sits there forever. there is no cancel, no expiry and no reclaim.
- forget your own answer and the pot is stranded. the contract cannot help you; it never knew it.
- the author cannot open their own box. the contract rejects it. but the author knows the answer, and nothing on chain can stop them using a second wallet. every box shows who locked it — judge boxes by who wrote them, and treat a pot that opens to a fresh address minutes after the riddle went up exactly as it looks.
- a riddle can be unfair. anybody can write one. the contract has no opinion on whether an answer is guessable, and neither does this site.
the owner key
it did two things, each once: wired the token and opened the doors. both functions are spent. there is no function in the contract that lets the owner open a box, move a pot, edit a riddle, read an answer, pause anything or upgrade anything. the code is the whole arrangement.
the key on every box
the sixteen cuts along the blade are the first sixteen nibbles of keccak256(answer). it is a picture of the secret that gives nothing away. sealed boxes are drawn in steel; an opened one is struck in brass. the contract can draw any of them itself — keySvgOf(id) returns the same SVG this site does.
the addresses
- contract 0x3bF35692Ab466257BEb7f54880d3c3055bD507eD
- token 0x659f7fe1344aa736062a44d129b2e142a2823f58
- deployer 0xb964…3415
- chain 4663 (robinhood)