Test it in five minutes
There are three ways in. Watching and replaying need no wallet. Playing (setting a nudge) needs a Chog Genesis token in the connected wallet; a wallet without one is told so and cannot nudge any Chog.
All 1,969 Chogs from the Chog Genesis contract play. Rounds before #168 are replayed history (see the fairness page); 409 live rounds have closed so far.
1 · Spectator (no wallet)
- Open the Arena. Tap a Chog in the meadow for its genes and traits.
- Open an event, for example r576-e0. Press Replay. The green banner confirms your browser reproduced the stored result.
- On the same page press Check seed against Monad RPC to compare the stored seed with the live block hash.
- Open any Chog page (links below) and check the Proof column. Each season row verifies a Merkle proof in your browser.
- Open the Leaderboard, switch seasons, open the top moment, and share a highlight card to X.
2 · Sandbox (no wallet, no points)
The Sandbox lets anyone pit two Chogs against each other with chosen stances and a seed word. It is practice only: nothing is stored, and it never touches the leaderboard, badges or prizes.
3 · Holder (wallet with a Chog)
- Open My Chogs and press Connect wallet. The app switches your wallet to Monad (chain 143).
- Your Chogs appear with real art, read live from the contract. Check the genome breakdown.
- Choose Bold, Sneaky or Friendly and press Sign and lock nudge. Signing is free (a message, not a transaction). The server verifies the signature and calls
ownerOfon Monad before recording it. - Your nudge applies from the next unlocked round. Look for the "nudged" tag on later events of that Chog.
4 · The delete-the-NFT test
Connect a wallet that holds no Chog. My Chogs says "You need a Chog to play" and offers spectating, the Sandbox, or finding a Chog. The nudge API rejects any signature from a wallet that is not the on-chain owner (covered by an automated test).
Wallet paths and how each was tested
| Path | Expected result | How it is checked |
|---|---|---|
| Holder nudges a Chog they own | Signature verified, ownerOf on Monad matches, nudge recorded (200). A second nudge for the same Chog that day gets 409. | Automated test with an injected owner. Live check needs a real holder wallet (command below). |
| Non-holder signs a nudge for someone else's Chog | Rejected with 403 "This wallet does not own that Chog." Nothing is stored. | Automated test and live end-to-end script. |
| Wallet with no Chog opens My Chogs | "You need a Chog to play"; no Chogs are listed. | Live script (/api/owned) and screen recording. |
| Forged, expired or stale-day signature; token outside the collection | 401, 401, 409 and 404 respectively. | Automated tests and live end-to-end script. |
| Sandbox | Works without a wallet, uses the read-only Chog endpoint, stores nothing, and never touches the leaderboard, badges or season points. | Live script and code review (no write calls). |
Run the live checks yourself:
node scripts/test-wallet-paths.mjs # optional holder path (records ONE real nudge for a Chog that wallet owns): HOLDER_PRIVATE_KEY=0x... node scripts/test-wallet-paths.mjs
Sample Chogs






Valid token ids are 1 to 1969, at /chog/<id>. Names come from the metadata and their numbers can differ from the token id.
Run the checks locally
npm install npm test # engine, fairness bounds, replay, Merkle proofs, real-trait coverage, nudge ownership npm run typecheck npm run verify -- r168-e3 # re-run any event from public data
What to expect
- A round closes about every hour (9,000 Monad blocks). Pages refresh within seconds of a round closing.
- If Monad's RPC is down, pages say so and rounds use a labelled fallback seed. The game never stops.
- Status: /status.