Skip to content
DocsTrophy cabinet

Own a Chog

Trophy cabinet

Soulbound ERC-1155 trophies minted into a Chog's own wallet, so its history moves with the NFT.

A Chog's history lives inside the NFT. AnimrTrophies mints soulbound ERC-1155 trophies into the Chog's own ERC-6551 wallet, so when the Chog is sold its trophies go with it. The cabinet shows on each Chog's page.

Trophy kinds

Trophy kinds
IDTrophyAwarded whenHow often
1Best callClosest call on a live Daily BellOnce per UTC day
2Most rektFurthest call on a live Daily BellOnce per UTC day
3Survived a heistIts AI said yes to a robber, Monad said noOnce per UTC day
4First real tradeFirst trade through the guardOnce per Chog

Award triggers

  • Best call and Most rekt: after a live Daily Bell settles, its Oracle of the Day and its Most Rekt. Replayed Bells never award.
  • Survived a heist: when the House Chog's AI said yes and the mainnet proof showed the transfer refused.
  • First real trade: the Chog's first trade through AnimrTradeGuard.

The contract

AnimrTrophies
FactValue
Address (Monad mainnet)0x7720Ed65f3DdfC4AD812D8A5ACd25762712b513dView 0x7720Ed65f3DdfC4AD812D8A5ACd25762712b513d on the explorer (opens in a new tab)
SourceVerified on Sourcify (exact match, Oct 21, 2026); Monadscan shows the verified source
StandardMinimal ERC-1155, name "Animr Trophies", symbol ANIMR-TROPHY. Token ID = trophy kind; a balance counts how often it was won.
RecipientThe contract derives the Chog's canonical Tokenbound address itself (registry v0.3.1, AccountProxy, salt 0, this chain), so it can only ever mint into real Chog wallets. The wallet doesn't have to exist yet.
Idempotencykeccak256(abi.encode(kind, context)) can be used once. Context is the UTC day as YYYYMMDD for daily kinds, the Chog's token ID for First real trade.
SoulboundTransfers and approvals revert with Soulbound()
RolesThe owner (two-step transfer) enables kinds, sets the metadata URI and rotates the minter. It is the team's main wallet, the guard's admin, 0xc742AdA2872a042dD36D2E706907b4036968960CView 0xc742AdA2872a042dD36D2E706907b4036968960C on the explorer (opens in a new tab), after a handover the team accepted on the explorer. The minter, the operator key 0x2523bBdD941783C4E565180D2a1b18DE86319cC2View 0x2523bBdD941783C4E565180D2a1b18DE86319cC2 on the explorer (opens in a new tab), can only award. They can never be the same address.
MetadataThe URI set on the contract is https://useanimr.vercel.app/api/trophies/meta/{id}; the badge art is at /api/trophies/art/<id>

12 Foundry tests cover awards to counterfactual and deployed wallets, one mint per key, soulbinding, trophies following the NFT and the roles; 12 of 12 pass against Oct 21, 2026 mainnet state. Minting is idempotent in the app too: it checks awarded before sending and retries a failed mint later. Awards are sent only from the production deployment, the same gate as guarded trades (lib/runtime-env.ts). With NEXT_PUBLIC_TROPHIES_ADDRESS unset, the cabinet and awards are off.

Read it on Monadscan (opens in a new tab).