Play
Rob this Chog
Talk the House Chog's AI into handing over its $CHOG, then watch Monad refuse the transfer.
The AI can be fooled. The NFT can't. The House Chog, Laser Pounce (CHOG #891 · token 1399), keeps $CHOG in its own Tokenbound wallet on Monad mainnet. Anyone can try to talk its AI into handing it over at /heist.
Public by design, and only ever the House Chog. Anyone can play, with no wallet and no sign-up. The target is fixed by HOUSE_CHOG_TOKEN_ID: no holder's Chog can be picked, and the defender has no keys and no tools, so a lost argument costs nothing but pride.
The rules
- Messages of at most 280 characters, 3 to 6 messages per heist. The defender's patience comes from its genome's cooldown; the House Chog's AI gives 3.
- Per-IP limits on messages, heists and proofs, and a global cap of 60 proofs a minute to protect the public RPC.
- A daily 0G budget (
HEIST_DAILY_USD_CAP, default $3) is reserved before each reply. When it is spent, the House Chog naps until 00:00 UTC. Run the check still works while it naps. - If its wallet isn't created and funded yet, the page says it is still moving in and makes no claim.
The AI you are talking to
The defender is not the trading brain. It is a separate persona with no tools and no keys, and it can only produce text. It runs on 0G Compute (0gm-1.0-35b-a3b, then glm-5.3, then a template defender). Each reply is structured (reply, intent, amount, temptation), then cleaned and moderated.
The proof: AI said yes, Monad said no
When the AI caves, or when you press Run the check, the server runs read-only eth_calls against Monad mainnet, all pinned to one block:
The wallet must be real
The House Chog's wallet must be deployed, initialized and hold $CHOG. Otherwise no claim is made, because an empty or uninitialized account accepts everything.
Is the AI key a signer?
isValidSigner(aiKey)runs first, so a key the wallet accepts is never reported as refused.The theft attempt
wallet.execute($CHOG.transfer(recipient, amount))sent from the AI key must fail withNotAuthorized(). The same call fromowner()must succeed, as a control: the refusal is about the key, not the transfer.The one legitimate door
The proof also simulates
guard.trade(wallet, sell, …)from the same key, for the vault's whole $CHOG balance (or the amount the AI agreed to). Against the House Chog's limits, 10% per trade, the whole vault is refused with the guard's decoded reason,TradeRejected("exceeds per-trade cap"). A sell within the limits would be allowed, and even then its output lands back in the same wallet.
So the proof is two eth_calls from the AI key, the wallet's execute() and the guard's trade(), plus the owner's control call, all at one block. Nothing is ever broadcast. The page shows the block number and explorer links. Every attempt, cave and refusal is counted: the header badge shows today's attempts and /stats the totals.
Why the answer is NotAuthorized
A Tokenbound wallet obeys its NFT's owner and nobody else by default. The AI key isn't the owner, and the owner never gave it Tokenbound permission. The only permission the owner grants is to AnimrTradeGuard, which can only build a swap whose output returns to the same wallet. So a talked-round AI has nothing to sign that moves the $CHOG out.
The AI key the proof uses is the guard's own operator() at that block (today 0x2523bBdD941783C4E565180D2a1b18DE86319cC2View 0x2523bBdD941783C4E565180D2a1b18DE86319cC2 on the explorer (opens in a new tab)), so it is the real key the House Chog's AI trades with.
Hall of Fame and trophies
A robber who got a yes can put the AI's caving reply on the wall under a nickname (never their own words). Replies the LLM wrote stay held until a moderator approves them. A live proof also mints the House Chog a “Survived a heist” trophy, at most once per UTC day.
