Most “onchain” collections are a link and a promise
A token points at a metadata file, the file points at an image, and both sit on storage somebody has to keep paying for. The contract holds a number; everything a collector actually looks at lives elsewhere. When the pinning lapses or the API moves, the collection quietly turns into a row of broken frames — and nothing in the contract even notices.
HASHCATS was built to remove every one of those hops. The palette, the pixels, the traits and the rules are all in contract storage, so a cat can be rendered from a node and nothing else. No IPFS, no gateway, no API key, and no server of ours that has to stay alive for the art to exist.
Fig. 1The usual chain of off-chain hops, and the single contract that replaces it.
02The mechanism
A cat costs work, not a place on a list
There is no mint button and no allowlist. A miner searches for an input whose hash sits below the current difficulty, exactly as a block is found, and submits it; the contract checks the hash and the cat appears. The same door is open to everyone with a machine, and nobody can be moved to the front of it.
Difficulty is not a constant. The collection has a target pace, a half-life that lets difficulty decay when miners leave, and a failsafe interval so the collection cannot stall completely — three dials rather than three hard-coded numbers, because the right values are only knowable once real miners arrive.
Fig. 2A browser hunts for a hash below the target. That hash is the cat.
03The art
A PNG assembled inside the contract, 4 444 bytes at a time
Each cat is a 64×64 image built in Solidity: packed pixel data, a palette shared by the whole collection, and a renderer that writes a valid PNG byte by byte — header, chunks, checksum and all. The result is a data URI that any wallet can show, produced by a read call and nothing else.
Working at that size is a gas problem before it is an art problem. Every trait, every ramp and every byte of overhead is measured against the block limit, and the drawing decisions — how many colours, how the ramps step, where the outline sits — were made inside that budget rather than handed to it afterwards.
Fig. 3One palette, four layers, 4 444 bytes — and the cat is a read call away.
04The economy
One token, two directions, and a hook that burns
$HASH exists from the first day: a fixed amount minted once at deployment as the pool’s starting liquidity. After that, tokens only come from cats — a cat can be burned back into $HASH, which makes the cat the scarce thing and the token the liquid one.
Trading runs through a Uniswap v4 hook written for the collection. The fee it collects is spent buying $HASH back from the market and burning it, so activity shrinks supply instead of accruing to a treasury. Holding pays rent from later mints, burning cashes out, and the two are deliberately in tension: the same cat cannot do both at full value.
Fig. 4Cats burn into a fixed-supply token; a v4 hook spends the fee on buyback and burn.
Shipped9 pieces, all live
01Collection contractProof-of-work mint, difficulty control, traits and storage
02RendererPNG written in Solidity from packed pixels and a shared palette
03$HASH tokenFixed initial supply; cats burn into tokens
04Uniswap v4 hookCollects the fee and spends it on buyback-and-burn
05StakingFixed terms of 7, 30 and 90 days, with no early exit
07stats.hashcats.funLive instrument panel for the collection
08news.hashcats.funPosts written in Markdown, with full-text feeds
09DefiLlama listingThird-party adapter so the numbers can be checked elsewhere
LessonsFound before launch
Every one of these would have been expensive after launch. They are written down because the next mechanism will rhyme with this one.
01
Rarity from a hash is grindable
If traits are derived from the mined hash, a miner can keep searching until the traits are the ones they want. The rule has to be written knowing that — not discovered after the first rare cat arrives.
02
A fee window starts at birth, not at the first trade
A decaying launch fee measured from the first trade could be walked past with one cheap call, leaving the late buyer paying the sniper’s rate. Measuring from the token’s own birth closed it.
03
The art budget is the gas budget
Compression that cannot decode partially is worthless on chain: if reading one pixel costs the whole image, the saving moves from storage to every single read.