Skip to content
For judges and testers

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)

  1. Open the Arena. Tap a Chog in the meadow for its genes and traits.
  2. Open an event, for example r576-e0. Press Replay. The green banner confirms your browser reproduced the stored result.
  3. On the same page press Check seed against Monad RPC to compare the stored seed with the live block hash.
  4. Open any Chog page (links below) and check the Proof column. Each season row verifies a Merkle proof in your browser.
  5. 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)

  1. Open My Chogs and press Connect wallet. The app switches your wallet to Monad (chain 143).
  2. Your Chogs appear with real art, read live from the contract. Check the genome breakdown.
  3. 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 ownerOf on Monad before recording it.
  4. 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

PathExpected resultHow it is checked
Holder nudges a Chog they ownSignature 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 ChogRejected 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 collection401, 401, 409 and 404 respectively.Automated tests and live end-to-end script.
SandboxWorks 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