Do not open

Handling instructions

10,000 sealed boxes on a public chain. There is a cat in each one, and nobody can read what it is: not the holder, not the people who deployed it, not the chain. This is how that works, and what it takes to look.

Part 1

Start here

What the game is, its five counters on one page, who can be inside a box, and the form you sign before playing.

  1. What is in a box
  2. The depot at a glance
  3. Who could be inside
  4. The release form

What is in a box

DO NOT OPEN is a collection of 10,000 NFTs on Ethereum, built with Zama's encryption. Each token is a cardboard box. When a box is minted, the contract draws a random number for it and keeps that number encrypted. The cat inside, its state, its five traits and its rarity are all worked out from that one number. Who holds each box is encrypted too.

Encrypted here does not mean hidden behind a server or revealed later from a list someone prepared. The number is a ciphertext on-chain from the moment it exists. The contract can still compute with it: compare it, cut a piece out of it, add to it. It does that without ever decrypting it, which is what fully homomorphic encryption is for.

So the game is about what you choose to find out, and what that costs you. Shake a box and you learn one thing about it, privately. Open it and everyone learns everything, for good.

The depot at a glance

The game has five counters. One rule tells them apart: what is about a box is encrypted, what is about a rat is not. Money crosses between the two at the bureau de change, and the amount shows at the border.

01

The boxes

10,000 sealed boxes, a cat in each. Shake one to learn a trait, pet it, duel it, link it to another, or open it for good.

Costs5 cUSDC a box. Shaking your own is free

SecretEncrypted Who holds a box, the cat inside, how many are sold.

Read the chapter

02

Croquettes

The game's money. Every box gets a welcome bag and purrs a few a day; you feed them to your cat until it is fat, or sick.

CostsFree to earn, tradeable for USDC

SecretEncrypted Balances, meals and a cat's weight, in cCROQ.

Read the chapter

03

The bureau de change

ETH, USDC and CROQ, and their sealed twins cUSDC and cCROQ: say what you hand over and what you want. Decryption credits are sold there too.

Costs0.3% on ETH, 1% on the pool

SecretAt the border What goes in or out of a sealed balance shows; what you do inside does not.

Read the chapter

04

The studio

Draw a rat: a random one, free and endless, or one from your own words, sketched then modelled in 3D by AI.

CostsFree, or packs of 2 and 8 USDC

SecretPublic Nothing to hide: your drawings stay off-chain, the packs you buy do not.

Read the chapter

05

The rats

Adopt a studio rat as an NFT: it earns 3 croquettes a day and sniffs the boxes for you.

Costs1 USDC, 3 USDC for an AI rat

SecretPublic Who owns a rat and what it looks like.

Read the chapter
Dollars buy boxes, studio packs and rats; boxes and rats earn croquettes; croquettes feed the cats. Each card leads to its chapter.

Who could be inside

Every box holds one of these. Ten breeds, from the everyday tabby to the glitch that almost never turns up; four states, only one of them fully awake; and a few surprises on top. Spin the turntable and say hello. And then the ones you make yourself with croquettes, from thin to huge, all the way to sick.

1 / 10

Tabby

About 1 box in 5

The classic. Stripes, strong opinions, and a firm belief that your chair is theirs.

The odds under each cat come straight from the game's tables. How a box lands on one of them is the next section.

The release form

The first time you connect a wallet, the game hands you a release form, Form DNO-1: the terms of play, eight short clauses. They say plainly what you are walking into. The contracts are experimental software: nobody has audited them, and a bug, an exploit or a hack could lose what you put in, without the creators being liable as far as the law allows. The website is only a window: your boxes, cats and balances live on-chain, so if the site breaks, nothing of yours is lost. Nobody holds your money for you, nothing is refunded, and none of this is an investment.

You initial each clause, one click each, then sign with your wallet. The signature is free and sends no transaction: your wallet shows a readable message naming your address, the version of the terms and a fingerprint of the full English text. The translations are there to read; the English text is what you sign. The signature is kept as a record of your acceptance, by the game's server when it is reachable, and always in your browser. Without a wallet, nothing is asked: you can look around the whole site, and the form only comes up when a wallet that has not signed it connects. You can close it to keep looking around, or switch to another wallet from it; any action you then ask for (a mint, a shake, a feed) brings it back until it is signed.

Each new wallet signs once, and a new version of the terms is signed again before playing on. To read the form again and see your signature, open the menu and choose Terms of play. On the test network nothing is signed: the form waits for mainnet, and a notice says instead what an update of the contracts keeps (your points, your whitelist seat, your X pass).

Part 2

The boxes

How a cat is kept secret on a public chain: the seed, the hidden holders, who can read what, every action, and how a value comes out of encryption.

  1. One number per cat
  2. Nobody knows who holds what
  3. Who can read what
  4. Twelve things to do
  5. How things come out
  6. What a sale changes

One number per cat

A box holds a single 64-bit seed. Its bits are cut into seven fields. Sixteen decide whether the cat is alive, asleep, a ghost or quantum. Five bytes are the five traits. The last byte only changes how the cat looks.

A sealed seed

0x????????????????

Bits 0 to 15. Sixteen bits decide the state: alive 70%, asleep 20%, ghost 8.0%, quantum 2.0%. The alive check compares them with 45,875 under encryption and publishes the one-bit answer. A shake can never return these bits.

On-chain it stays like this: a ciphertext that reads as noise. The contract computes on it without decrypting it.

Keeping one encrypted number instead of eight keeps a mint cheap. Everything else is worked out from it when a mechanic needs it: under encryption while the box is sealed, in the clear once the box is opened. The app reads a seed exactly the way the contract does, so the cat you see is the cat the chain holds.

The rarity score is a weighted sum: three times the breed roll, the mood roll, twice the accessory roll, the broken thing, the room, plus a bonus for the state. A quantum cat starts 1,000 points ahead. The highest possible score is 3,040.

Nobody knows who holds what

The owner of each box is encrypted, like its seed. That is not how NFTs usually work: an ordinary NFT says publicly who owns it. Here nothing does. Nobody can see who holds a box, or count anyone's boxes. The collection follows a new standard written for this, the confidential ERC-721.

Sending a box never fails because of who holds it. If you hold it, it moves; if you do not, nothing happens. Either way the sender and the receiver get an encrypted receipt that only they can read, saying whether the box moved, and everyone else sees a transfer that may or may not have happened. You find your own boxes the same way: the app reads the receipts that name you and decrypts them, with one signature per visit. That is what Show my boxes does.

Minting works on the same idea. It is paid in cUSDC only, and your browser encrypts how many boxes you want. You also pick how many token ids to hide that number among, from 1 to 10, and that choice is public. The first ids, up to your quantity, are yours; the others are empty boxes owned by nobody, and from outside the two look the same. More ids hide the quantity better and cost more gas. A mint that would pass the cap, or that your cUSDC balance does not cover, gets nothing and pays nothing.

The number of boxes sold is an encrypted counter, capped at 9,000 under encryption: of the 10,000 boxes, the other 1,000 are kept for the whitelist's gifts, minted free when a seated wallet collects its gift, never sold. Only milestones of the sale are announced: 100, 500, 1,000, 2,500, 5,000, 7,500, 9,000, the last one meaning sold out. The gift boxes count in none of them. Each mint makes public a single yes-or-no answer, whether the next milestone is reached, and anyone can announce it.

Some things stay visible, by design. A mint shows the buyer's address and how many ids it created, which is an upper bound on what they bought. A transfer attempt shows who sent it and to whom, as a maybe. And an action that has to become public (an opening, an alive check, a box put up for a duel, or a duel or an entanglement that goes through) shows that its caller held that box at that moment. An attempt by someone who did not hold it settles as refused and shows nothing about the box. Croquettes add one more: the app only feeds boxes you hold, so a meal, whose event names the feeder, shows a box you hold, even though the contract treats a stranger's meal the same way. Claims do not: the app always claims for whole rows of ten box numbers, yours among others.

This is also why the leaderboard ranks only opened cats, and the players who opened them: an opening publishes its opener, while who holds a sealed box stays hidden.

One of those public facts reaches further. Once an action has shown that an address held a box, the next transfer of that box from that address is certainly real, not a maybe, so the box can be followed to its next holder, and from there onwards. When you give a box away, you can tick "Send 3 decoys with it": three more transfers of the same box to random addresses, which move nothing but look like the real one, sent in a random order with it. Then nobody can tell which one moved the box, or whether any did. Each costs gas. Without decoys, keep a box out of sight by receiving it, or moving it, at a fresh address you never use to prove anything.

Who can read what

Every ciphertext has an access list. For the seed, that list has one entry: the contract. No holder is ever added to it, because an address on the list could ask the key service to decrypt the seed directly and skip the game.

FactThe holderEveryone else
Who holds a boxYes, from their receiptsNo
How many boxes an account holdsYes, for their own accountNo
How many boxes are soldNobody. Only milestones are announced
The seed, the state, the scoreNoNo
One trait per shakeYes, freeYes, by paying
Which trait a shake pickedOnly whoever shook
Whether it is aliveEveryone, if the holder asks. One bit, once per box
Who won a duel, and one trait of the loserEveryone
The winner's trait in a duelNoNo
How many times it was petted, and how many meals it ateNobody. Attempts are public, not whether they counted
How much affection that earnedNoNo

Two consequences are deliberate. A holder who shakes often enough learns all five traits: a shake shows one of five at random, so about eleven cover them. What stays hidden even from the holder is the state, which is worth up to a third of the score, and the affection. And duels leak order: each one publishes which of two boxes scores higher. Putting a box up for a duel also shows that you hold it: that is how the duel shelf only carries boxes someone holds. That is the price of duelling.

Twelve things to do

ActionWhoCostWhat becomes public
MintAnyone, hiding how many among 1 to 10 ids5 cUSDC a boxThe buyer and how many ids, not how many are real
ShakeThe holderGas onlyThat someone shook, not whether they hold it
Paid shake (or a rat's sniff)Anyone2.5 cUSDC, 70% waits in the box for its holderThat someone paid to shake
Collect shake earningsAnyone, for the boxes they holdGas onlyTen box numbers in a row, not which or how much
PetAnyone0.5 cUSDCThat someone petted it, not whether it counted or what it earned
Alive checkThe holder, onceGas onlyOne bit, and that the caller held the box
EntangleBoth holdersGas onlyThe link, and that both held their boxes. Opening one then opens both
DuelThe holder puts it up, any holder takes it upGas onlyThat the challenger holds the box, then who won and one trait of the loser, or a void duel
OpenThe holder1 cUSDCEverything, permanently, and who opened it
Feed croquettesThe holderUp to 1,000 croquettes a day, all eatenWho fed which cat (the app only feeds your own), not whether it counted or what it held
Claim croquettesAnyoneGas onlyTen box numbers in a row, not which are yours or how much
Weigh an opened catAnyoneGas onlyIts weight, its build, whether it is sick

Petting adds a hidden amount between 0 and 3 to a hidden counter, and nothing at all if the pet was not paid. So the pets anyone can see on-chain say nothing about the counter, not even how many counted. Past 10, the accessory turns golden when the box is opened, and a cat with no accessory gets a golden bell collar.

Every price is in cUSDC, Zama's confidential USDC: nobody but you can read your balance or follow your payments, and the amount you paid is encrypted like the rest. A cUSDC payment cannot fail on-chain: a short balance just moves 0, and the action then does nothing. A mint gets no boxes, a paid shake reads "not yours", a pet adds nothing, an opening is refused. Paying from plain USDC means shielding the exact price into cUSDC first, in public, and for a mint that amount gives the quantity away. Shielding a round amount ahead of time, at the bureau de change, does not.

Duels have a ranking of their own, in the leaderboard's Duels tab: boxes, not players, by duels won, then by fewest lost. The top three wear a rosette pinned to the front of their box, gold, silver and bronze, as at a cat show. A box can climb the podium and stay sealed: the ranking uses only the winners and losers that every duel already makes public, never who holds the box.

How things come out

There are two ways out of encryption. A private decryption re-encrypts a value for one person, who must be on its access list. A public decryption publishes a value with signatures from the parties that share the key, and the contract verifies those signatures before it believes anything.

The contract never receives a callback. A reveal is a request on-chain, a decryption off-chain, and a second transaction that carries the proof back. Anyone may send that second transaction. Every request also checks, under encryption, that its caller holds the box; that bit is decrypted with the rest, and a no settles the request as refused, with zeros in place of the box's values.

A request, a decryption, and a second transaction. A request from someone who does not hold the box opens nothing and shows nothing.

  • Transaction
  • Ciphertext
  • Value with proof
  • Clear value

What a sale changes

On this protocol an access grant cannot be revoked. A design that put the holder on the seed's access list could never take the seller off it. This one never puts anyone on, so a sale has nothing to undo on the seed. What changes hands is the encrypted owner, along with what waits in the box: paid-shake earnings and croquettes go with it.

  1. MintSeed: the contract only. Owner: Alice, encrypted. The receipt: Alice only.
  2. Alice shakesA fresh ciphertext holding one trait: the contract and Alice.
  3. Alice sells to BobShe sends it. The owner changes under encryption, and the receipt, moved or not, is readable by Alice and Bob only. Nothing about the seed changes.
  4. Bob shakesAnother fresh ciphertext: the contract and Bob.
  5. Alice tries againNo error. She reads "not yours"; everyone else sees a shake, not that it failed. She keeps what she already saw, and gets nothing new.
  6. Bob claimsThe paid-shake earnings and croquettes waiting in the box go to him now, not to Alice.

If you buy a sealed box, assume the seller knows its five traits. A few paid shakes before buying level that. And a transfer that names you is only a maybe until you decrypt its receipt: Show my boxes does it for you.

Part 3

Money and croquettes

Every fee and where it goes, the bureau de change and its five tokens, and the croquettes that make a cat fat.

  1. Fees, and where they go
  2. The bureau de change
  3. Croquettes

Fees, and where they go

Everything in the game is priced in USDC, a dollar stablecoin, and most of it is paid in cUSDC, its encrypted form: nobody but you can read your balance or follow your payments. Here is every fee, who receives it, and what it pays for.

70%30%paysYoupay in USDC or cUSDCPaid shakesomeone else's boxPaid actionsmint, open, petCreditspast 25 free a dayStudiopacks, rat adoptionsBox holder70% of a paid shakeTreasurythe collection'sZamaevery decryptionServersindexer, websiteAIsketches, 3D
Dollars come in through four doors and almost all of them land in the treasury. The treasury pays Zama for the decryptions players do not pay for themselves (their free daily units), the servers that follow the chain, and the AI services behind the studio.
What you pay forPriceWhere it goes
Minting a box5 USDC a boxThe collection's treasury
Opening a box1 USDCThe collection's treasury
Petting a cat0.5 USDCThe collection's treasury
Shaking someone else's box, or sending your rat to sniff it2.5 USDC70% to whoever holds the box, 30% to the treasury. An empty id has no holder: it still shows a trait, and the 70% goes to the treasury too. A power-1 rat gets 0.75 back from the treasury, in secret
Decryption credits, past the free ones0.01 USDC eachThe collection's treasury
Buying USDC with ETH on the site0.3% of the ETHThe collection's treasury
A studio pack (AI sketches and 3D models)2 USDC (Starter) or 8 USDC (Litter)The treasury, which pays the AI services out of it
Adopting a studio rat1 USDC, 3 USDC for an AI ratThe treasury
A croquette mealCroquettes, not dollars20% to the treasury, 20% burnt, 60% back to the daily purr
Shaking your own box, the alive check, entangling, duels, sending a boxFreeOnly the network's gas, like any transaction

Why decryptions cost anything: reading something encrypted takes work from Zama's network. The parties that share the decryption key each have to take part, and Zama charges for it, for every value read, from a tenth of a cent to ten cents depending on the plan. Checking the proof that comes with a value your browser encrypts costs five times as much. It charges the collection, not you. Shaking, finding your boxes, reading your own balance, the result of a duel: each one is a decryption. Minting, feeding a cat or sending croquettes: each one encrypts a value.

So every wallet gets 25 free units a day, paid by the collection, and they come back at midnight UTC; a wallet that has not played yet gets 16, enough for a first mint. Reading a value is one unit: a shake uses 2, and finding the boxes from a mint uses one per box number it hid among. Encrypting a value, like a mint's quantity or a meal, is 5. What your browser has read once, it remembers, and it is never counted again. Past the free ones, you spend credits, one per unit, bought at the bureau de change. Their price follows what Zama charges the collection in dollars, not the price of Zama's token, so it does not swing with the market. They are paid in plain USDC on purpose: a balance that falls short cancels the purchase, where a cUSDC payment would quietly move nothing. Making a value public, to open a box, settle a duel or announce a milestone, is 1 unit a value, counted to the wallet that asks first: an opening takes 2 to 5, a duel 1 to post and 5 to settle. Asked again, by anyone, it is free. That way nobody can post duels in a loop at the collection's expense. In the game, the Decryptions meter at the top right counts what is left (free today, plus credits): it blinks when you are running low, turns red at zero, and a click opens the bureau de change to buy more.

The treasury pays what keeps the game running: Zama's fees for every free unit, and the servers that follow the chain so the site stays fast. The rest goes to the project. Nobody can read the cUSDC it receives, the owner included: read after every payment, it would give away each mint's hidden quantity, and so who bought which boxes. The owner withdraws it at most once every 7 days, so it only ever learns weekly sums. An opening's 1 USDC fee waits until the opening settles: it joins the treasury when the box opens, and goes back to the opener if the box's entangled partner opened it first.

The bureau de change

The game uses five tokens: ETH for the network's gas, USDC and CROQ, which are plain, and cUSDC and cCROQ, the same money sealed. A plain balance is public, like any ordinary token; a sealed one is encrypted, and only you can read it. To go from one to another, open the menu and choose Bureau de change: say what you hand over and what you want, and it finds the way and shows every cost before you sign. The rate and the number of transactions stay in sight under the form; Details unfolds the route, each fee and what becomes public. It also lists what you hold; sealed balances are decrypted on demand, for you alone, with one signature.

Plain: balances publicSealed: balances encryptedETHthe network's gasUSDCdollars, in the openCROQcroquettes, in the openCreditsspent, not heldcUSDCpays the gamecCROQfeeds the catsramp, 0.3%shieldunshieldsealunsealbuysellUniswap pool, 1%creditsamounts public at the border
Every arrow is one transaction; any other pair chains them, ETH to cCROQ in three. ETH can also land straight in cUSDC through the ramp. Each crossing of the border shows its amount; inside the sealed side, nothing does.

Some exchanges take one transaction: buying USDC with ETH (it can arrive sealed, as cUSDC), shielding USDC into cUSDC or unshielding it back, buying or selling CROQ for USDC, sealing CROQ into cCROQ or unsealing it. Any other pair chains these steps: ETH to cCROQ, for example, is three. Each step is its own transaction, signed one after the other, and in between the money waits in your wallet as plain USDC or CROQ. If a step delivers nothing, because a sealed balance smaller than the amount moves nothing, without a word, the bureau stops and tells you where your money is. ETH can only be handed over, never received.

Buying USDC with ETH costs 0.3% of the ETH, kept by the site. Shielding and unshielding are free. Every step pays the network's gas, like any transaction. A trade on a pool can land at a worse price than quoted if someone trades first: the slippage tolerance, 1% unless you change it (from 0.01% to 50%), is how much worse you accept before the transaction cancels itself, costing only the gas. The bureau also shows the price impact, how much your own trade moves the pool's price, and warns you above 2%.

What becomes public: plain tokens move in the open, so every swap shows its amounts, and so does every crossing between plain and sealed. The amount you shield or seal is public, and so is the amount you unshield or unseal: it is decrypted in public to be paid out, which is why those steps take a minute longer. Once your money is sealed, what you do with it stays private.

Decryption credits are bought in plain USDC only. So when what you want is cUSDC, from ETH or from USDC, the bureau can keep a share of it plain: none, 5%, 10% or 20%, the choice is remembered. From ETH that takes two buys on the ramp, one plain and one sealed, at the same fee; from USDC, only the rest is shielded. The bureau shows the USDC kept and how many credits it buys at least. The credits themselves are sold only at the bureau, in a window of their own to the left of the counter (under your holdings on a narrow screen), since they are spent rather than held: pick a quantity, see the price, buy. When the plain USDC is short, it sends you back to the counter to get some.

Croquettes

Croquettes are the game's money, and they come in two forms. CROQ is a plain ERC-20 with a fixed supply of 20,000,000: nothing can mint more, and it has no decimals, so one CROQ is one croquette. Being plain, any market can list it. cCROQ is the same croquette wrapped into a confidential token (ERC-7984): balances and transfer amounts are encrypted. The game only ever uses cCROQ.

PublicEncryptedMarketUniswap V3 pool, CROQ / USDCCROQERC-20, balances publiccCROQERC-7984, balances hiddenbuysellwrap 1:1unwrapamounts public at the bordermeals, purrs, giftsevery trade is public
Crossing the border shows the amount: wrapping moves plain CROQ, and unwrapping goes through a public decryption. Everything that happens in cCROQ in between stays encrypted.

The whole supply was minted once, at deployment, and split like this:

  • Game reserve 10,000,000In the Pantry. Pays the daily purr, and takes back part of every meal.
  • Welcome bags 1,000,000In the Pantry. One bag for each box that can ever exist.
  • Market 4,000,000Put in the public pool on its own, with no USDC, and locked there for good.
  • Treasury 5,000,000Plain CROQ kept for events and more liquidity later; 500,000 of it went to the rats' pantry.

Croquettes reach players from the Pantry, the contract that runs the economy. Every box someone bought brings a welcome bag of 100 the first time it is claimed for: once per box, whoever holds it, so a second wallet earns nothing. Then each box purrs: every day, an encrypted amount between 0 and 4, multiplied by 2 for a Vet Certified box, collected up to 7 days at a time. An empty id, one a mint creates beyond the quantity bought and that nobody holds, gets no bag and no purr. Bags and purrs are paid into the box, an encrypted stash, and whoever claims receives the stashes of the boxes they hold, and nothing for the others. So nobody can spend another holder's days. A claim lists its box numbers in public, so the app never lists only yours: it claims for whole rows of ten numbers (0 to 9, 10 to 19, and so on), always the same rows, one transaction per row. Anyone watching learns at most that you may hold one of those ten. The purr halves every year, and the reserve pays a whole claim or none of it. Nobody but the claimer sees how much arrived.

The rats you adopt in the studio earn croquettes too, but not from the Pantry: each one gets 3 plain CROQ a day from the rats' own pantry, collected from "My rats", 7 days at most between two collections. Plain, not confidential: who owns a rat is public, so what it earns may be. That pantry got 500,000 CROQ from the treasury; the game reserve that feeds the boxes is not touched.

Reserve11,000,000 at the startYour balanceonly you read itYour cateats it allTreasurythe collection's shareBurntlocked for goodclaimbag of 100, then 0–4 a daymeal, up to 1,000 a day+ weight, hidden until the weigh-in20%20% of each meal60% back to the purr
Every croquette in the Pantry sits in exactly one encrypted pile: the reserve, the treasury's share, or the burnt one. A meal leaves nothing in the cat but weight. Burnt croquettes stay locked in the Pantry; no function can move them, and nobody can read how many there are.

Only the holder feeds their cat: at most 2 meals and 1,000 croquettes a day, however they are spread. Who holds the cat, how many meals it had today and the amount are all checked under encryption: a meal past the limits, or from someone who does not hold the cat, moves 0, silently. An offer past what is left of the day is cut down to it. Your browser encrypts the amount and the cat eats it all: its weight goes up by that much, encrypted, and nobody can read it while the box is sealed, the holder included. The croquettes are split: 20% to the collection's treasury, 60% back to the reserve that pays the purr, 20% burnt. Nobody can read the treasury's share between collections, the treasury included: read after each meal, it would tell who fed which cat and how much. It is sent to the treasury at most once every 7 days. If you hold less than you offered, the meal moves nothing, with no error and no hint. The meal itself is public and names the feeder, and the app only feeds cats you hold, so a meal shows that you hold that cat.

Once the box is opened, anyone can weigh the cat: its weight is decrypted in public and sets its build. Each cat also has a tolerance of its own, drawn from its seed. Nobody can know it while the seed is encrypted, and once it is public the cat has stopped eating. Weighed at or past it, the cat is sick: an ultra-rare trophy, never a death.

BuildCroquettes eatenDays at the daily capScore
Thin0 – 0–+0
Normal1 – 9,9991+0
Chubby10,000 – 49,99910+100
Fat50,000 – 149,99950+300
Huge150,000+150+700
Sick (a limit of its own)300,000 – 600,000300 – 600+2000

The weight follows the box, and so does its stash. A buyer knows nothing of its meals: not how many, not how much, and not how close it is to its tolerance. The seller at least knows what they served themselves. The market prices the rest.

Nobody can read a weight before the box is opened, the holder included, for the same reason nobody is ever allowed on a seed: an access grant cannot be taken back, so a past holder would keep reading it after a sale. What stays secret, and what does not:

FactWho can read it
Your cCROQ balanceYou
The amount of a transfer, a meal or a claimThe two sides of it
A cat's weightNobody while the box is sealed. Everyone once the cat is weighed
How much has been burntNobody
Who tried to feed which catEveryone, and since the app only feeds your own cats, that you hold it. Whether it counted: only the feeder
Who claimed, and for which boxesEveryone, but the app claims ten box numbers in a row at a time, so not which of them are yours. How much: only them
How heavy an opened cat came out, and whether it is sickEveryone
Wrapping, unwrapping, market tradesEveryone, amounts included
The total supplyEveryone. How much still circulates: nobody
The treasury's share of the mealsNobody, the treasury included. It is collected at most once every 7 days

There is no official price. Their value shows up indirectly, in what a heavy sealed cat sells for.

The public market is a Uniswap pool where CROQ trades against USDC. The collection put only croquettes in it, no dollars, so they sell from 0.001 USDC each upward, and never for less: selling only gives back the USDC that buyers brought. Until someone has bought, there is nothing to sell into, and the bureau de change says so. The pool's croquettes are locked in it for good: nobody can take them out, the collection included. Each trade pays the pool a 1% fee, which goes to the collection's treasury.

Part 4

The studio and the rats

The depot's other residents: rats you draw for free or with AI and adopt as NFTs. They earn croquettes, sniff the boxes, and protect or attack them with a secret power.

  1. The studio
  2. The rats

The studio

The studio is a page of its own, open to anyone, wallet or not: there you draw one of the depot's rats yourself. Rats, not cats, on purpose: the cats only come out of boxes, so nothing drawn in the studio can be taken for one. The button Another rat asks the game's own rat generator for a random one, in your browser: procedural, free, endless, and in 3D, turned with a drag. Buck teeth, big ears, a hat or a wedge of cheese, as the seed falls. No AI and nothing on-chain.

A random rat skips the AI: from step 1 it can go straight to adoption. An AI rat takes every step. Your words and drawings stay with the studio's server; only the pack and the adoption go on-chain.

Drawing a rat from your own words goes through paid AI services, so it is sold first, in packs bought on-chain in plain USDC from the StudioPacks contract: the Starter pack, 2 USDC for 10 sketches and one 3D model, and the Litter, 8 USDC for 50 sketches and five 3D models. The payment goes straight to the collection's treasury and the units never expire. A purchase is public, like any plain USDC payment; what you draw with it is not on-chain.

A sketch is one cartoon picture of your rat, drawn by the AI from what you wrote inside a fixed style, so it always comes out in the depot's look. It is cheap: try again until the rat looks right. A 3D model turns one of your sketches into a mesh that the page draws with the game's toon shading and outline, breathing slowly on the turntable. It takes a minute or two. A switch at the top of the page goes from the free random rats to the AI desk. A sketch shows up big on the drawing board, and you turn it into 3D from there. While the AI works, a rat runs in its wheel over a progress bar; you can leave the page, the work goes on, and the bar is back where it was when you return.

To spend your units, sign in once with your wallet: a free signature, no transaction, that tells the studio which units are yours. The site spends a unit before it calls the AI and gives it back if the service fails, up to three times a day: past that, or when the AI's safety checker refuses the picture, the unit is spent, since the service was paid. A prompt is 3 to 240 characters; licensed characters and adult content are refused before anything is spent. Each day the studio stops at a spending cap: past it, come back tomorrow.

On the testnet the USDC is pretend money while the AI costs real money, so the AI studio may be closed or kept to a list of testers there (the "Draw with AI" tab is then greyed out, and a tester opens it by signing in with their wallet); the random rats stay free everywhere.

The rats

A rat you like in the studio can be adopted: minted as an NFT of your own in the Rats contract, paid in plain USDC straight to the collection's treasury. A random rat costs 1 USDC and is adopted by its seed, each seed once: its look is worked out from that number again wherever it is shown, so there is nothing else to store. An AI rat costs 3 USDC: its picture is first stored on Arweave for good, like the cats' pictures, while its 3D model is kept by the game's server.

There will only ever be 700 random rats and 300 AI rats, set for good in the contract, and one wallet adopts 5 at most, both kinds together. A rat can still be given or sold to a wallet past that. The studio and the home page show how many are left.

One of the 700 random rats there will ever be, drawn in your browser from a random seed. Click it and another one lands.

A rat is everything a box is not, on purpose: the cats are the depot's secret residents, the rats its open ones. Who owns a rat and what it looks like are public, so it works like any NFT. It keeps one secret only: its power, below.

A boxA rat
What it isA sealed box with a cat nobody can seeA cartoon rat, there for anyone to see
Who holds itEncrypted: only the holder knowsPublic, like any NFT
What it is made ofOne encrypted seed, readable by the contract onlyIts seed, or its picture on Arweave, in the clear
Its secretThe cat, who holds it, what it earnsIts power (1, 2 or 3), read by its holder only
Price5 cUSDC, encrypted payment1 USDC, 3 for an AI rat, plain payment
How many10,000; how many are sold is encrypted700 random and 300 AI, 5 per wallet
EarnsA bag of 100 cCROQ, then 0 to 4 a day, hidden in the box3 plain CROQ a day, to its owner
Wallets and marketsNeed a market built for the confidential ERC-721, like the flea marketA standard ERC-721: any wallet or market can show it

A rat's croquettes

Each rat earns 3 plain CROQ a day from the day it was adopted. They come from the rats' own pantry, the RatPantry, which got 500,000 CROQ from the treasury, and not from the Pantry that feeds the boxes: the rats never touch the game reserve. Collect them from "My rats" in the game, for all your rats at once. A rat keeps 7 days at most between two collections; left alone longer, it earns nothing more. If the pantry is ever empty, collecting fails and the days wait; when it runs low, it pays what is left. The croquettes are plain because a rat's owner is public anyway: there is nothing to hide in what it earns. Sealed at the bureau de change, they can feed a cat.

The rats' pantry is separate from the boxes' one: what the rats earn never comes out of the purr. Plain until you seal them, a rat's croquettes become secret the moment they enter cCROQ.

A secret power

Every rat gets a secret power when it is adopted, random or AI, bought or given: 1, 2 or 3, drawn under encryption, so nobody, the team included, can choose or predict it. Only its holder can read it: in "My rats", press Read it. If you buy a rat, the first reading asks your wallet once for the right to read it; the seller keeps knowing what it was.

PowerSniffing a boxSet on a box
1 · Keen nose
55 rats in 100
2.5 cUSDC, 0.75 back in secretNothing: a bluff
2 · Trait jammer
30 rats in 100
2.5 cUSDCBlocks the one trait you pick
3 · Total jammer
15 rats in 100
2.5 cUSDCBlocks all five traits
Drawn at adoption, encrypted, readable by the rat's holder only.

Sniffing the boxes

A rat also sniffs. In "My rats", type the number of a sealed box you do not hold and press Sniff: your rat tells you one of its traits, for your eyes only. It is a paid shake, 2.5 cUSDC: 70% waits in the box for its holder, 30% goes to the treasury, and everyone else only sees that a rat sniffed that box. A power-1 rat gets 0.75 cUSDC of it back from the treasury, in secret: nobody can tell which rats sniff cheaper.

That is how a rat helps before a purchase: a few sniffs of a box you are thinking of buying, and you know as much about it as the seller did.

Protect or attack a box

A rat can also be set on a sealed box for 3 days; then it rests 7 days before it can go again. Type the box's number in "My rats", pick the trait to block (it only counts for a power-2 rat), and set it on the box. What it does depends on whose box it is, and the contract works that out by itself, in secret:

Where you set itFor 3 daysWho notices
On your own boxStrangers who shake or sniff it read a fake for the blocked traitsNobody: the fake looks real
On someone else's boxIts holder's shakes of the blocked traits come back scrambledThe holder, that someone jams them. Not who
Either, with a power-1 ratNothingNobody: it looks like the others
On the chain every trick reads the same: a rat, a box, a date. Protect or attack, the power and the trait stay encrypted.

On one of your own boxes, it protects it. Whoever pays to shake it, or sends a rat to sniff it, reads a fake for the traits your rat blocks: the same fake every time, so it looks real. You still read the truth. Before a sale, that keeps your box's best traits to yourself.

On someone else's box, it attacks it. When its holder shakes their own box, the traits your rat blocks come back scrambled for 3 days. They learn that someone jams them, never who. A box protected by a power-3 rat resists attacks.

Every rat has the same button, the same 3 days and the same rest, so the chain only shows "rat 12 sat on box 340": not whether it protected or attacked, not its power, not which trait. A power-1 rat set on a box does nothing at all: a perfect bluff. Duels are not affected: the trait a loser shows is always the true one.

Part 5

The flea market

Where players sell each other boxes, cats and rats: a price on the tag, or an offer in a sealed envelope that only the buyer and the seller can read.

  1. Buying second-hand
  2. Setting up a stall

Buying second-hand

The flea market sits behind the depot, open after hours. Players sell each other sealed boxes, cats (boxes already opened) and rats, paid in cUSDC. Open it from the menu: Flea market. Each item hangs under a striped awning with its price tag, and three big buttons wait at the entrance: Mint a box takes you to the shelf for a brand new one, Mint a rat to the studio, and Sell to your own stall.

There are two ways to buy. The first is the price on the tag, which is public, and it takes two steps. Buy pulls the price from your cUSDC, all or nothing: what reaches the market is the whole price or zero, encrypted, so your balance stays sealed. Then one bit, paid or not, is decrypted in public and carried back on-chain with its proof, and the market settles. If you paid and the item is still as it was listed, it is yours. If someone else's purchase settled first, or the seller retagged it or took it back, you get back exactly what left your wallet. If your cUSDC did not cover the price, nothing was taken.

The second is a secret offer. Write an amount and press Seal it: your browser encrypts it, and the market holds it in escrow. Only you and the seller can ever read it; everyone else only sees that an offer was made. The seller breaks the seals, one signature for every offer on the stall, and may accept one at once: the item goes to you, the escrow to the seller, and that price is never published. An offer from a wallet that could not cover it holds zero, and the seller sees that. Until it is accepted you can take your offer back at any time, even after the listing is gone. The figure in How things come out plays both ways, step by step.

At the asking priceWith a secret offer
The pricePublic, on the tagSealed: only you and the seller read it
How it goesBuy, then one bit decrypted in publicSeal it, then the seller accepts when they like
If your cUSDC falls shortNothing is takenThe offer holds zero, and the seller sees it
If you change your mind, or lose the raceBeaten to it, or the listing changed: refunded in fullTake it back any time until it is accepted
What everyone seesThat you bought it, and the priceThat an offer was made, then that you bought it; never the price

Whichever way an item sells, 2.5% of the price goes to the depot and the rest to the seller. The contract can never set that cut above 10%.

A box keeps its state on the table

A box is sold in the public state it was listed in: sealed or opened, entangled or not, vet checked or not. If that changes while it is on sale, say its entangled partner is opened and opens it too, buying it or accepting an offer on it is refused, and a purchase still pending is refunded.

A sealed box on a table can still be sniffed: a paid shake tells you one of its traits, for your eyes only, as with any box. The holder's share of what you paid waits in the box as usual, and whoever buys the box collects it. Before buying a sealed box, assume the seller has shaken it; a few sniffs level that.

Setting up a stall

To sell, press Sell, pick a box, a cat or a rat, and set a price. The page shows what you get once the depot's 2.5% is taken, and buyers may also slip you sealed offers. Your boxes are known only to you, so finding them takes one signature to read your receipts, as Show my boxes does.

A rat is a plain NFT: it goes to the market and is listed at once. A box is not so simple, since nobody can check who holds it, the market included. So it goes to the market in a maybe transfer, like any gift, and whether it arrived is then decrypted in public. Only if it did does the listing open, so only a box's real holder can sell it, and once the market holds it nobody else can list it. Until then it shows as On its way.

Selling is a public act: selling a box shows everyone that you held it. What is inside stays sealed, for you as for the buyer. The seller of each listing, its asking price, the buyer of each sale, and whether each buyer at the asking price could pay are public. Balances, offer amounts and the price of a sale by offer never are.

While an item is on sale, Retag changes its price (purchases pending at the old price are refunded), and Take it back brings it home. Buyers keep their sealed offers to take back.

The flea market is open on Sepolia, with test dollars. In the demo, the night shift keeps a few stalls, slips a secret offer onto whatever you put on sale, and takes any offer worth at least 70% of your asking price.

While on the testnet

This part goes away at mainnet.

The game runs on Sepolia, Ethereum's test network. Nothing here is worth money. The USDC is Zama's test token, free from the wallet slip or the bureau de change; the ETH for gas comes from a faucet; the croquette pool only exists so the market can be tried; and every price in this manual is a test price.

The mainnet allow list has 1,500 seats, first come, first served: a seat goes to each player who claims one, or who connects an X account on the boarding page, until none is left. Your points: 3 for each opponent you beat in a duel, 1 for each opponent you faced, 2 for each box you opened, up to 10 boxes. A wallet linked to your X boarding pass gets 5 more, and 3 more again once you joined the Discord server and ran /board there with the code the boarding page gives you. Each friend who boards from your referral link adds 2 more, up to 10 friends, once their pass holds a seat with a wallet linked. Each opponent counts once, however many times you meet, and duels between your own wallets count nothing. Claim your place from the leaderboard's Duels tab by signing with your wallet: it is free and sends no transaction, and it tells the game only that your address is asking. Sign again later to update your points; the best you ever had are kept, even if the test network starts over. Claimants are ranked by points; between equal points, the earlier claim goes first.

Every seat comes with a gift, set by your rank among the seated players when the list closes. Ranks 1 to 500 fly First class: 100 to 500 cCROQ, a sealed box and a rat. Up to rank 1,000, Business: 50 to 250 cCROQ and a box. Up to rank 1,500, Economy: 20 to 100 cCROQ and a rat. The croquettes are drawn at random under encryption: only your wallet can read how many. The box is minted free for you out of the boxes kept outside the sale, so a sold-out sale never empties a gift; the rat is a free one, its seed drawn at random. Both are public, like any box's first holder after a mint of one. A gift nobody collects is never minted. The gift is collected on mainnet, in one transaction from the same Duels tab, within 30 days of the list closing, by a wallet that claimed its place: a seat held only by an X account has no wallet to send it to.

The contracts on Sepolia:

Full reference

  • ArchitecturePackages, data flow, the 3D pipeline
  • Data modelWhat is encrypted, per token, and the access lists
  • FlowsSequence diagrams for every mechanic
  • Zama notesVerified versions, and where the protocol differs from the first brief
  • DesignArt direction, effects, performance budget
  • ContractsCost of each function, deploy, command line
  • CroquettesThe two tokens, the Pantry, every number and what leaks
  • Hidden ownersThe confidential ERC-721, what still leaks, what it costs
  • Relayer proxyHow decryptions are metered, the free allowance and the credits