Hashbits:
Punks are mined, not minted.
Hashbits is the proof-of-work mint behind 3 333 Modern Punks. No mint button and no allowlist: your browser hunts for a hash with enough leading zero bits, you pay the entry price of the current epoch, and the contract hands you the next Punk in line — rendered before the contract existed, sealed by a provenance hash, yours forever. Or burn it for PUNK points.

…
Three steps, none
of them ours
Nothing here waits on a server, a signature, or a list. The whole path from electricity to Punk runs between your browser and one contract.
Your browser hashes four things: your address, a nonce, the work behind the last Punk and a recent block. Nobody can steal the answer — your address is inside it. Nobody can prepare one in advance — the previous Punk is inside it too.
keccak256 · 116 bytes · Web Workers, every core you give it
A hash below the target is a ticket. Send it with the entry price of the epoch — exactly, not a wei more — and the contract checks it in one comparison. First come, one per block, no auction.
mine(nonce, anchorBlock) · value = entryPrice()
You get the next number, not a random one. All 3 333 portraits were rendered before the contract existed and their hashes are sealed on-chain; the queue decides which face is yours. Keep it, or burn it for PUNK points.
ERC-721 · sequential ids · never reissued
What makes it different
| Mint button | none | a valid hash is the only door |
|---|---|---|
| Price | epoch table | epochStart × 0.00002 ETH, fixed at deploy |
| Difficulty | six rules | floor · retarget · streak · failsafe · 1/block |
| Burn | PUNK points | 1 000, halving per epoch waited |
| Supply | 3 333 | ever. burned ids are gone for good |
| Artwork | pre-rendered | sealed by a provenance hash |
The contract has an owner for exactly two things: the metadata URL and withdrawing the treasury. It cannot mint, pause, reprice, or pick a face.