1,000 pixel foxes, drawn and stored entirely onchain — no IPFS, no server — and this time they move. Each is generated from its own seed, so no two are alike. A toll at the gate, one fox to a hand, no machines.
One fox to a hand. For the first 24 hours, active StonkBrokers mint free — the contract checks the dividend tier on-chain. Then the gate opens to everyone at the 0.01 ETH toll. Connect a wallet on Robinhood Chain and a fresh animated fox is drawn straight from the contract.
One fox to a hand. No machines at the gate.
The first age was free. Then the bots came — scripts wearing wallets, 189 of them, five each. All 900 gone in minutes, before a real person reached the gate.
The second age has a toll and one fox per wallet. Cheap for you, not worth it for a bot. It all lives in the contract — pull it yourself if you don’t trust the ledger.
Reading foxes straight from the chain…
This runs the same pipeline the contract runs at mint: a random 256-bit seed, traits by modular arithmetic, the 24×24 sprite, corruption, a 3% party-hat roll, one dry line from the ledger, and the animation baked into the SVG. Roll as many as you like — they move, just like the real ones.
At mint, the contract hashes the previous blockhash + minter address + token id into a 256-bit seed. That one number is the fox’s entire DNA — stored forever, so the art re-derives identically every time anyone calls tokenURI().
_seed[id] = keccak256(blockhash(block.number-1), msg.sender, id)
Modular arithmetic peels traits off the seed: 6 furs × 6 hoods × 4 eyes, a d100 for background (30% CALM AF, 40% LOUD, 25% TRIPPY, 5% VOID), another for glitch tier (20% CLEAN, 45% GLITCHED, 25% CORRUPTED, 10% FRIED AF), and a 3% party-hat roll across 5 colors. Token #1 skips the roll: purple, hardcoded — the only purple crown, held not taken.
if (id == 1) { t.phat = true; t.phatIdx = PURPLE; }The base fox — hood, ears, snout, sly eyes — is a hand-placed 24×24 pixel grid packed two cells per byte into a 288-byte constant baked into the bytecode. Ten palette symbols; the trait colors fill them in.
bytes constant SPRITE = hex"0000...6510" // 288 bytes = the whole fox
The GAN-melt homage. Higher tiers shift whole pixel rows sideways (wrapping at the edges), splatter up to 40 dead pixels in 8 loud colors, lay scanlines over CORRUPTED+, and hue-rotate the entire fox on FRIED AF.
shift[4+(h%18)] = 1+(h/18)%4 corr[h%576] = 1+(h/576)%8
No mad-libs, no morals, nothing invented. Every fox draws one line from A Gest of Robyn Hode — the real ~1450 outlaw ballad, public domain, its Middle English kept exactly as written — picked by a second hash of the seed. Token #1 gets its own: “So curteyse an outlawe was never non founde” (there was never another found).
"Lythe and listin, gentilmen" "Where we shall robbe and reue"
The Second Age moves. Pure SMIL, baked into the SVG, so it animates inside the NFT itself — no JS, no server. Every fox breathes and blinks; glitched foxes drift CRT scanlines; FRIED AF foxes twitch and hue-cycle; a party hat catches a sweeping gleam. Motion scales with rarity, and it’s the one thing a bot can’t farm.
<animateTransform type="translate" values="0 0;0 -7;0 0" dur="4s"/>
The SVG is run-length encoded into rects, base64’d, wrapped in JSON metadata, base64’d again, and returned as a data URI. OpenSea reads it straight off the chain — there is nothing else to host, and nothing that can ever 404.
return "data:application/json;base64," + Base64.encode(json)