Hashing Labs

Entry 01NFT collection · token · Uniswap v4 hook

HASHCATS

An NFT collection on Robinhood Chain. Cats are mined, and their images are assembled in Solidity from pixels stored in the contract.

Colours, gradient steps and outlines were chosen within the gas budget for reading the image.

Canvas
64 × 64 px
Stored per cat
4 444 bytes
Supply
Mined only
Chain
Robinhood Chain · 4663

01The supply

A cat is mined. The contract has no other door.

False if

A submitted hash equals the current target and the contract still mints a cat.

You cannot buy a cat from the contract. A miner runs in a browser or in a program of your own. It searches for an input whose hash is below the current target. The contract checks the submitted hash and mints the cat. There is no mint button, allowlist or queue.

Difficulty is not a constant. The collection has three dials: the pace it aims for, a half-life that lets difficulty decay when miners leave, and a failsafe interval so that it cannot stall altogether. They are dials rather than fixed numbers because the right values are only knowable once real miners turn up.

What the contract checksLower hashHigher hashThh ≥ T — the submission is refusedThh < T — the submission is accepted and the cat is mintedh — the submitted hash · T — the current targetTwo illustrative positions, no scale and no time

02The art

The contract stores the pixels and returns the PNG.

False if

Taking our server offline prevents a normal contract read from returning the image.

A cat is 64 × 64 pixels and 4 444 bytes in the collection’s own storage. The bytes are packed pixels, and the colours come from one palette shared by every cat.

The Solidity renderer writes the PNG byte by byte: header, chunks and checksum. A normal read call returns it as a data URI. There is no IPFS hash in that path, no gateway, no API key and nothing of ours that has to stay switched on.

01Packed pixels02Palette · specimen colours03Solidity PNG renderer04PNG · data URI

03The token

After launch, new $HASH comes only from burned cats.

False if

One cat pays out both the full holding rent and the full burn value.

At launch, a fixed amount of $HASH was minted as the pool’s starting liquidity. After that, new $HASH comes only from burning cats. The cat is the scarce side of the pair and the token is the liquid one.

Holding a cat earns rent from later mints; burning it produces $HASH. The same cat cannot do both at full value.

At launchOne fixed mintStarting liquidity
After launchHold the catRent from later mintsBurn the catProduces $HASH

04The market

The trading fee is spent, not kept.

False if

The collected trading fee accumulates in a treasury or is used for something other than buying and burning $HASH.

Trading runs through a Uniswap v4 hook written for this collection. The hook spends the fees it collects on buying $HASH from the market and burning it.

Burning a cat creates $HASH; the hook buys and burns existing $HASH.

Where the fee goes01Trade feeOn a swap02Uniswap v4 hookFor this collection03Buy $HASHBought on the market04Burn $HASHTokens destroyed
The fee is spent on buying $HASH and burning it.

05The pool

Rarity moves a cat up the queue; it never multiplies the price.

False if

A rare cat carries a price multiplier, or an ordinary purchase hands out the rarest cats first.

A pool holds whole cats on one side and a token on the other: the reserve times the number of cats stays constant, and the floor is the reserve divided by that number. The same contract runs twice, against ETH and against $HASH.

Cats stand in a queue ordered by the epoch they were mined in, and an ordinary purchase hands out the cheapest first. Taking one particular cat costs what it would cost to sweep everything below it and sell the rest back: the depth is paid in fee, not in reserve.

The fee is a constant, not a setting; the pool sits behind an upgradeable proxy.

Taking one cat out of the queueCheapestRarestSwept to reach itWanted
Cats stand in a queue by the epoch they were mined in; reaching one means sweeping what stands below it.

06The rules

Staking has no early exit; burning $HASH raises status.

False if

Paying a penalty releases a stake early, or raising a cat’s status leaves it without a frame.

Staking lasts 7, 30 or 90 days, with no early exit.

A cat’s status is raised by burning $HASH into it, and the frame that appears around the cat is what the burning bought. The public board at hashcats.fun/board shows who has burned the most and reads entirely from the chain.

What a term commits to7 days30 days90 days
The gate is the end of the term, and there is no earlier way out.
Burn $HASH
Same cat; the added frame is schematic.

Where to check

Contract addresses on chain 4663.

Robinhood Chain is an Arbitrum Orbit L2 with chain ID 4663. These public addresses can be checked in an explorer for chain 4663.

Collection
0xCA75DF55Cc9C476DB27a7375D1fc8E794cf80721
$HASH
0xCA75082b85bb7Bec8325d513F615b16BDa260020
Uniswap v4 hook
0xCA757986E932BC55776492Cca0b413E9b3D02aCC
Cat pool · ETH
0xCa759BA2594bb33a23d62C11C1699550595D0003
Cat pool · $HASH
0xCA752BE59e720e5dbE7F056DFc6f733D0E6f0004
Staking
0xca758b67a13Eb06474251a9f451F841A76A20002
Status
0xca756851765C363aFb8C8743934b357c38380001
Renderer
0xCA75bD02437D5819C9CeaF6709cE2e49312B0000

Read the project

Mining creates the cats. Solidity assembles their images. Burning a cat creates $HASH. Trading fees buy and burn $HASH.

Back to the studio