Five steps from your first mint to a $EVOLVE payout. Nothing automated for you — and nothing automated against you. The punk does its own evolution; you just choose which moments to keep.
A pay-once, get-one transaction. The contract rolls a 256-bit gene for you at the block — that gene is yours, forever.
The gene decides three things, all at mint and all permanent:
Your punk has 8 trait slots. They don't all turn on at once — each one sleeps on its own random timer, set by your gene the moment you mint.
The 8 slots are Head · Eyes · LowerFace · MouthAcc · Expression · Face · Earring · Neck.
At mint, slot[0] in the random order is already awake. The remaining 7 wait their turn.
You won't know which slot is next until it pops. You won't know the gap until it ticks past. That's by design — the schedule is committed at mint, but it's invisible to everyone (including you) until it plays out.
mintSeed on-chain — different
for every punk, fixed forever, only revealed as time passes. Even we can't
look it up; it's only computed when a slot is about to wake.
Once a slot is unlocked AND unfrozen, the contract picks a new trait for it on every epoch. There's no end state. The punk keeps moving.
Each reroll is a two-step random draw:
No bot does this. No keeper. The rolls are a pure view function — keccak(entropy, slot, epoch). They cost zero gas to watch.
When you see a combo you love, call freeze(). It commits the current
roll for every slot that's currently evolving. The sleeping slots are
untouched — they'll wake up later and you can freeze them in a separate transaction.
Why one button instead of per-slot? Because partial freezing creates a perverse incentive to wait, watch, cherry-pick one slot, then game the others. By making freeze atomic, the protocol forces you to commit to what's on screen right now.
Each successful freeze also re-mixes your entropy with the current block
randomness. That means the future trajectory of your unfrozen slots changes every time you
freeze. You can't grind by freezing-and-watching either — the path forks after every commit.
freeze() in a loop to scramble entropy on their unfrozen slots
for free. We're not extracting value here — without it, the protocol's
randomness guarantee would break. The fee is therefore charged
even on a no-op (a call that doesn't end up freezing anything new),
because a no-op spam call would do exactly the damage the fee prevents.
When you're ready, burn the punk. Your supply drops by 1 forever. In return, the protocol mints $EVOLVE proportional to the rarity you committed to.
The reward is the Shannon surprisal — −log₂(p) — summed across:
Time to roll a gene.