scratchcats / docs

DOCS

How the alley works, where the money goes, and how to verify every claim on this page yourself. Everything here is enforced by verified contracts on Robinhood Chain — the chain is the documentation; this page is the map.

CURRENT STATUS#

reading the chain…

These numbers are read live from the production contracts on every page load, not hardcoded. /alley serves the same vitals as JSON.

THE SHORT VERSION#

$SCRATCH is a DN404 token with 6,561 whole units (94), trading through one canonical ETH/$SCRATCH pool on Uniswap v4. Hold a whole liquid token and a stray appears in your wallet — every stray is the same cat, and it dissolves if you sell below a whole unit.

Adopt a stray and it becomes a real cat: named forever, 1.0 $SCRATCH sealed inside, one of nine hidden types fixed before mint. Adoption is one-way. From then on the cat lives on a food clock: feed it or it starves, and starving cats get hunted for the ETH they guard. Nine lives; the ninth death is a permanent memorial.

Food is the experience. One Food lasts 24 minutes on the clock and pays 1 XP as it digests. XP levels reveal the cat's true look — and the combat stats attached to it. Meal money doesn't go to us: it market-buys $SCRATCH on the pool and burns it.

Every swap pays a permanent 2.5% toll enforced by the pool's hook, not by this website: 1.5% of volume flows to living cats by rarity weight, 1.0% funds the treasury. Token-side tolls burn whole. That is the entire system: a tamagotchi with real stakes, a hunt for the lapsed, and a fee engine that feeds the committed. Every section below expands one claim and names the contract that makes it true.

GLOSSARY#

The vocabulary is proprietary on purpose. Every term used on this page:

StrayThe NFT mirror of 1.0 liquid $SCRATCH. Every stray is the same cat. Materializes when your balance crosses a whole unit, dissolves when it drops below.
CatAn adopted stray: named forever, 1.0 $SCRATCH sealed inside, a hidden identity fixed before mint. Adoption is one-way.
SoulThe 1.0 $SCRATCH escrowed in a living cat. Leaves circulation for the cat's entire life.
Scratch FoodThe feed unit: 1 Food = 0.00016 ETH (~$0.40), lasts 4 minutes on the clock, pays 1 XP when digested. Snack 5 / Meal 12 / Feast 30.
DigestionHow XP works: food on the clock converts to XP continuously, credited on the next touch. A feast = 2 hours = 30 XP.
VaultETH sealed inside the cat: its share of trading reflections, won stalk stakes, and duel loot. No withdraw exists — the vault rides with the cat when sold. Loot for hunters if the cat starves.
IncomingReflections earned but not yet settled into the vault. Lands automatically on the next touch.
StreakConsecutive feeds that landed before the bowl ran dry. Starving resets it.
StarvingA cat past its fedUntil clock. Feedable by anyone, huntable by everyone.
StalkA staked bet that a fed cat will starve within 6 hours. Defended = the stake joins the cat's vault. Expired = the stalker claims a chunk into their own cat's vault.
PounceThe duel: your cat vs theirs, blows alternating until one bar empties. Loser drops a life and its whole vault; the defender can absolutely win. Attacking drops your own shield.
ShieldSix hours of pounce-immunity from a pet. Free, chainable, forfeited the moment your cat attacks.
NapThe 24h sleep after losing a life. Napping cats can't be fed or hunted.
RescueA cat untouched (no feed, no pet, from anyone) for 30 days is re-adoptable by anyone at a level-scaled price. The rescuer inherits it whole — vault included.
MemorialA cat on its ninth death. The NFT persists forever; the game ends for it.
Scratch CardThe daily lotto: ten tickets a day for the whole alley on a $1→$100 price ladder, XP-only prizes, commit-reveal odds.
BuybackThe permissionless crank that sweeps feed + card ETH into the pool as a market buy of $SCRATCH and burns everything it bought.
The Void0x…dEaD. What goes in never comes out.
RevealLevel-gated unmasking of a cat's fixed identity: type at 1, backdrop at 2, item at 3, eyewear at 4, hat at 5. Death reveals all.
WeightReflection multiplier by type rarity, 1.0x (Tabby) to 3.0x (Gold). Attested on-chain at the level-1 reveal.

STRAYS & CATS#

$SCRATCH is DN404: the token and the NFT are two views of the same asset. Hold 1.0 and a stray materializes; trade below it and the stray dissolves back. Strays are interchangeable by design — the same drawn cat, ID-unstable, earning nothing.

Adoption is the one-way door. It escrows 1.0 $SCRATCH inside the contract, mints the cat's permanent name, and seals its hidden identity from the provenance-hashed table. An adopted cat can never return to being a stray; its soul leaves circulation for as long as it lives, and every adoption shrinks the tradable float.

THE NINE TYPES#

Nine types, fixed before mint: three alive, three undead, three beyond. Rarer types carry more reflection weight.

TypeSupplyWeight
Tabby1,4581.0x
Tuxedo1,2151.1x
Bones9721.2x
Zombie8101.4x
Alien6481.6x
Void4861.8x
Ghost4052.1x
Cosmic3242.5x
Gold2433.0x

THE REVEAL LADDER#

Every cat is born sealed: a gray silhouette hiding an identity that was fixed and hashed before the first adoption. Leveling unmasks it, one axis at a time:

LevelXPRevealsAnd with it…
130Typereward weight attested on-chain
290Backdrop
3180Itemattack bonus attested
4300EyewearHP bonus attested
5450Hatdefense bonus attested
DeathEverythingthe memorial shows the whole cat

The image and metadata render live from chain state on every request — the NFT is a living document. Marketplaces show the new look after their cache refreshes.

LIVES, HP & STATS#

Nine lives, 9 HP per life — nines all the way down (9 × 9 = 81 total damage to kill). A cat's wardrobe carries its combat stats, fixed before mint and hard-capped in the contract:

  • Eyewear → bonus HP (up to +4; a Blindfold is the best armor in the alley)
  • Item → bonus attack (up to +3 on the base 3)
  • Hat → defense (up to −3 off every hit taken; the Crown floors most hits at 1)

Stats reach the chain via attestation at the reveal levels — the contract enforces the caps, the provenance hash proves nothing moved after mint.

SCRATCH FOOD#

Food is priced in ETH so a meal costs the same on a green day and a red one. 1 Food = 0.00016 ETH and lasts 4 minutes on the clock:

PortionFoodClockHeals~USD
Snack520m+3 HP$2
Meal1248m+6 HP$5
Feast302hfull$12

Anyone can feed any cat — rescues are core. Pre-feeding stacks with diminishing returns (eff = ext × K / (K + ahead)), so money buys convenience but never invulnerability. New cats are born with one welcome feast: 2 hours of food.

DIGESTION = XP#

XP is not a reward for clicking — it is the food itself, digested. Every Food burned off the clock credits 1 XP (15 XP per hour while fed), lazily accounted on the next touch and served live by xpOf(). A fully digested feast is exactly 30 XP. Starved gaps earn nothing.

Two side dishes: battle pays — +30 XP to a duel's winner and +10 to its loser, once per day per cat — and Scratch Cards pay food-sized prizes. Levels are triangular in feasts — each level costs 30 XP more than the last (level 1 = 30 XP = one feast, level 5 = 450 = fifteen) — and drive the reveal ladder.

THE ACCRUAL, IN SOLIDITY
function _accrueXp(Cat storage c) internal {
    uint40 last = c.lastXpAt < c.adoptedAt ? c.adoptedAt : c.lastXpAt;
    uint40 upTo = uint40(block.timestamp) < c.fedUntil
        ? uint40(block.timestamp) : c.fedUntil;   // digestion stops when food runs out
    if (upTo > last) {
        uint256 earned = (upTo - last) / XP_SECONDS;  // 240s: one Food, one XP
        if (earned > 0) c.xp += uint32(earned);
        c.lastXpAt = last + uint40(earned * XP_SECONDS);
    }
}

PETTING#

Survival is free; growth is not. Pet your cat (owner-only, once every 6 hours) and it gets a 6-hour shield: it cannot be pounced, even while starving. An active owner chaining pets keeps a cat alive forever without spending a cent — it just stops earning XP when the food runs out.

  • Attacking drops your shield. The moment your cat pounces someone, its own shield clears — hunters stand in the open.
  • Shields don't defend stalks. A stalk is beaten only by feeding; petting can't cheese the bet.
  • Three verbs, one line each: feed to grow, pet to stay safe, pounce to steal.

WHERE EVERY DOLLAR GOES#

No payment in the alley is ambiguous. Every inflow has one hardcoded route, enforced by the contracts rather than by this website:

SWAP (2.5% toll, taken by the hook) ETH side ├─ 1.5% of volume ────▶ living cats, by rarity weight └─ 1.0% of volume ────▶ treasury & ops token side ── whole toll ───────▶ burned via syncBurn() FEED (any meal) 93% ──▶ lpPot ─▶ buyback(): market-buys $SCRATCH on the LP ─▶ burned 7% ──▶ treasury SCRATCH CARD (the $1→$100 ladder) 93% ──▶ lpPot ─▶ same buyback ─▶ burned 7% ──▶ treasury STALK STAKE defended ─▶ 90% to the cat's vault · 10% treasury expired ─▶ 20% chunk of the vault to the stalker's cat (10% of it raked) NINTH DEATH (the sealed soul, 1.0 $SCRATCH) 8/9 ─▶ the killer · 1/9 ─▶ the void, forever

The house never pays players — players pay players, and the house keeps crumbs. There is no route by which the team receives the cats' 1.5%: the split happens inside receive() before anything can touch it.

THE BUYBACK#

Feed and card ETH queues in lpPot. Anyone may call buyback(): the contract swaps the whole pot through the canonical V4 pool — the ETH stays inside the LP forever — and takes the bought $SCRATCH directly to the void in the same transaction. The tokens never even touch the game contract. Every meal is a market buy you can point at.

THE SWAP, IN SOLIDITY
function unlockCallback(bytes calldata data) external returns (bytes memory) {
    if (msg.sender != address(POOL_MANAGER)) revert NotPoolManager();
    uint256 ethIn = abi.decode(data, (uint256));
    BalanceDelta delta = POOL_MANAGER.swap(_poolKey(), SwapParams({
        zeroForOne: true,                       // ETH in, SCRATCH out
        amountSpecified: -int256(ethIn),
        sqrtPriceLimitX96: TickMath.MIN_SQRT_PRICE + 1
    }), "");
    POOL_MANAGER.settle{value: ethIn}();        // the ETH joins the LP
    uint256 bought = uint256(uint128(delta.amount1()));
    POOL_MANAGER.take(Currency.wrap(address(scratch)), VOID, bought);  // straight to 0xdead
    return abi.encode(bought);
}

REFLECTIONS#

1.5% of every swap's volume accrues to living cats only, weighted by type rarity (1.0x–3.0x), through a masterchef-style accumulator — continuous, snapshot-free, and ungameable by just-in-time adoption (the pot flushes to existing cats before a newborn enrolls).

Reflections land in the cat's vault — sealed inside the cat, no withdraw path — where they must be defended like any other ETH: a starving cat's vault is hunter loot. Dead cats earn nothing; their weight leaves the pool at the moment of death.

THE FOUR BURN VALVES#

ValveWhat burns
Every meal93% of the ETH buys $SCRATCH on the pool; all of it burns.
Every scratch cardSame route, same fate.
Token-side tollsThe hook's $SCRATCH-side take burns whole via permissionless syncBurn().
The ninth death1/9 of the sealed soul goes to the void.

No mint function exists in the code. Supply only ever shrinks.

STALKING#

Stalking is a staked bet that a fed cat will starve. Stake at least 0.0003 ETH on someone else's healthy cat and a 6-hour clock starts:

  • Anyone feeds it in time → the stake (minus a 10% rake) lands in the defender cat's vault. You paid the cat for showing up.
  • Nobody feeds it → you claim a 20% chunk of its vault — into your own cat's vault, never your wallet.
  • It gets pounced mid-stalk → your stake returns untouched.

One stalk per cat at a time; a beaten stalker has a 24h cooldown on the same target. A stalked cat wears a visible warning — stalking is as much a pressure device as a bet.

POUNCING & DEATH#

A starving, unshielded cat is huntable by any living cat — and a pounce is a duel to the knockout. Blows alternate, attacker first, each dealing attack − defense damage (floor 1), until one cat's HP bar empties. No RNG: the wardrobe decides fights, and the outcome is computable before you commit. Every blow lands on-chain as a Struck event.

The loser drops a life, naps 24h, and its whole vault rides home with the winner — in either direction: attack a crowned or blindfolded cat and your hunter can fall to its own hunt. Winners keep their scars (carried damage) until food heals them. On a ninth loss the cat becomes a memorial: the sealed soul pays 8/9 to the winner's owner and 1/9 to the void. Starvation alone never kills — death always has an author and a payout.

SCRATCH CARDS#

The bodega stocks ten cards a day for the whole alley, restocking at 00:00 UTC on a price ladder that climbs with every sale:

Card12345678910
~USD$1$2$5$10$15$20$25$50$75$100

Prizes are food-sized bags of XP — +10 (50%) · +25 (30%) · +60 (15%) · GOLDEN +150 (5%) — and never money: the dice never touch the economy. The outcome seals against the buy block's own hash (commit-reveal), so neither side can pick winners, and the ticket money routes to the buyback like meal money. Buy as many as you can grab; one face-down card per cat at a time.

PROVENANCE#

Every cat's full identity — type, backdrop, wardrobe, and therefore stats and weight — was fixed by a salted table before the first adoption. Its SHA-256 hash is published and served live at /provenance; the salt stays sealed until the collection completes, at which point anyone can recompute the table and verify nothing ever moved.

reading /provenance…

VERIFY IT YOURSELF#

Every claim above is a cast call away (chain id 46630, RPC https://rpc.testnet.chain.robinhood.com):

# what a snack costs and how long it lasts
cast call $GAME "feedPrice(uint256)(uint256)" 0
cast call $GAME "feedExt(uint256)(uint40)" 0

# a cat's XP, including food still digesting
cast call $GAME "xpOf(uint256)(uint256)" 1

# the next card's price and today's remaining stock
cast call $GAME "cardPriceNow()(uint256)"
cast call $GAME "cardsLeftToday()(uint256)"

# ETH queued for the next buyback, and everything ever burned
cast call $GAME "lpPot()(uint256)"
cast call $TOKEN "balanceOf(address)(uint256)" 0x000000000000000000000000000000000000dEaD

# the solvency identity: balance == vaults + stakes + treasury + reflections + lpPot
cast balance $GAME

LIVE CONTRACTS#

Robinhood Chain testnet (46630), all Blockscout-verified:

ScratchCats (game, UUPS proxy)0xE2DbaaDBb00c3c93dC8bb34504664596Ac4624Df
ScratchToken ($SCRATCH, DN404)0x16Cd5C69453A226234E299F78170d6A0aa837e44
Uniswap V4 PoolManager (official)0x8366a39CC670B4001A1121B8F6A443A643e40951

Live data: /alley · /cat/1 · /img/1.png · /provenance · /collection

FAQ#

Can I un-adopt a cat to get my token back?

No. Adoption is one-way by design — the soul is sealed for the cat's entire life. The only $SCRATCH that ever leaves a cat is the ninth-death payout.

What happens if I just never feed my cat?

It starves, gets hunted for its vault, loses lives one duel at a time, and eventually becomes a memorial. Starvation alone never kills it — but the alley will.

Do I have to buy food with $SCRATCH?

No — food is paid in ETH so meal prices stay stable. The contract then buys $SCRATCH with your ETH on the pool and burns it, which is strictly better for holders than you buying it yourself.

Can the team change my cat's stats or odds?

Stats and weights were fixed before mint and hash-committed; the contract hard-caps every bonus. Card odds are constants in verified code, and outcomes seal against a block hash neither side controls.

Why did my cat's image change?

It leveled — the reveal ladder unmasked another axis. Metadata renders live from chain state; marketplaces catch up when their cache refreshes.

Someone fed my cat. Is that bad?

It's the best thing that can happen to you. Anyone may feed any cat — rescues, alliances, and hunter-denial are core mechanics. They paid; your cat ate.

What's stopping a whale from buying every scratch card?

The ladder: ten cards run $1 to $100, so buying the shelf costs ~$253 a day — all of it market-buying and burning $SCRATCH. We're fine with that.

RISKS#

Scratch Cats is experimental software on a testnet. Nothing on this page is financial, investment, legal, or tax advice, and nothing here is an offer to buy or sell any security. Reflections are promotional rewards for participating in the protocol — they are not dividends, and holding a cat or token grants no equity, ownership, or revenue rights in anything.

Crypto assets are volatile and can go to zero. Adoption escrow, feeding, cards, and the ninth-death burn are irreversible by design. This site is a user interface over permissionless contracts; the contracts are the truth and the only truth.

Never play with more than you can afford to lose completely.