Hashing Labs

Entry 01 · Collection · token · hook

HASHCATS

A proof-of-work cat collection that lives inside its own contract.

Artwork
64 × 64 px
Bytes per cat
4 444 B onchain
Mint
Proof of work
Chain
Robinhood · 4663

01The problem

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.

Usually · off-chain token file Hashcats · on-chain contract token · art · rules · state
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.

Proof of work 9f3a c1 7d e2 … 71c8 4b e0 a9 … c0d4 19 8a 3f … Target 0000 a5 f2 c9 … Accepted
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.

Drawn from storage pixelsrampsoutlinetraits 4 444 B one read call, no file
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.

$HASH · fixed supply burn $HASH mined by work trade fee v4 hook buyback the fee buys $HASH back and burns it
Fig. 4Cats burn into a fixed-supply token; a v4 hook spends the fee on buyback and burn.

Shipped9 pieces, all live

  1. 01Collection contractProof-of-work mint, difficulty control, traits and storage
  2. 02RendererPNG written in Solidity from packed pixels and a shared palette
  3. 03$HASH tokenFixed initial supply; cats burn into tokens
  4. 04Uniswap v4 hookCollects the fee and spends it on buyback-and-burn
  5. 05StakingFixed terms of 7, 30 and 90 days, with no early exit
  6. 06hashcats.funMining console, collection, token page, docs — reads the chain directly
  7. 07stats.hashcats.funLive instrument panel for the collection
  8. 08news.hashcats.funPosts written in Markdown, with full-text feeds
  9. 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.

  1. 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.

  2. 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.

  3. 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.

ElsewhereThe same thing, checked from outside