chain · Ethereum
copy · DePunks.club databasebehind

I had two things the copy could not answer well:

Which DePunk was used as the key to reveal which DeBot?history
Who holds a punk at the moment someone acts in its name?decision
Ask the chain on every page view
about290,000blocks of history
refused on the free planserved
One page view: hundreds of small requests.
Trust the copy for who holds a punk
chainprevious holdernew holder
copyprevious holderstill counts
until the indexer caught up, and for good if the cached row was missing.
Reveal contract on Ethereum
one log per DeBot a DePunk unlocked
finalizednewest
may still be dropped
finalized blocks only
debot_key_use
cursor = contract + start block
DePunk 4376 → DeBot #1838
I rejected two other options:
live log reads per page reading the newest block
Someone acts in a punk's name
ownerOf(punk)
read on chain, now, never the copy
the holder matches
allowedallowed
error, revert, timeout
refusedrefused
Try:
Decisions about who holds a punk read ownerOf on chain at that moment, and they refuse if the chain cannot be read.
Key-use sync, last runsuccess

A review found two quiet failure modes.

The reveal contract's address changes
The cursor would pick up the old position and skip the new contract's history while still reporting success.
The cursor is now keyed by contract and start block.
A key used twice
It would hit a unique index and block every later run at the same spot.
The later reveal wins.

We fixed both.

Each fix came with a test, and we check those tests by planting the old bug back and watching them go red.

Planted bugstests
an owner check that fails opengreenred
a cursor that forgets its contractgreenred
a sync that reads unfinalized blocksgreenred
3 of 3planted bugs turn the tests red

DePunk 4376

Used as a key for DeBot #1838

Type:FemaleSkin:DarkStatus:UpgradedEar:EarringHead:Blonde Bob

The DePunks list and each DePunk's page now show it.

NewestOldest3,500 DEBOTS

The link opens the DeBots grid with that tile ringed.

HTML of the deep link to the oldest DeBot
about 3.3 MB · every tile from the top down
about 60 KB · only the page that holds it
770
rows in the table
=
770
reveals on chain
about 3.3 MB
→ about 60 KB
HTML of the deep link to the oldest DeBot, before and after the fix
69 of 69tests pass for the live-owner check and the key-use sync
3 of 3planted bugs turn those tests red
As of 22 Oct 2026
A reveal shows up on the site only once its block is finalized, not the moment it happens.
Test and production share one database on purpose, because chain state can't be faithfully mocked.
The page layout still has no automated render tests. It was checked by hand.
DePunks.club