Tech
Contracts and API
Every contract Animr calls or deployed, and the public HTTP API behind the pages.
Contracts
| Contract | Address | Animr uses |
|---|---|---|
| AnimrTradeGuard (Animr) | 0x92D3d4Af4B3b0F29Ec020e407803e135af61987bView 0x92D3d4Af4B3b0F29Ec020e407803e135af61987b on the explorer (opens in a new tab) | trade, configure, disable, setBuyOnly; views canTrade, maxAmountIn, quoteFloor, limitsOf, isBuyOnly. Events Traded, Configured, Disabled, BuyOnlySet. |
| AnimrTrophies (Animr) | 0x7720Ed65f3DdfC4AD812D8A5ACd25762712b513dView 0x7720Ed65f3DdfC4AD812D8A5ACd25762712b513d on the explorer (opens in a new tab) | award, awarded, accountOf, balanceOfBatch. Event TrophyAwarded. |
| Chog Genesis (ERC-721) | 0xc96d31F8626c6D03Fae5dCD3d61e3FB9F4a73763View 0xc96d31F8626c6D03Fae5dCD3d61e3FB9F4a73763 on the explorer (opens in a new tab) | ownerOf, tokenURI |
| $CHOG (ERC-20) | 0x350035555E10d9AfAF1566AaebfCeD5BA6C27777View 0x350035555E10d9AfAF1566AaebfCeD5BA6C27777 on the explorer (opens in a new tab) | balanceOf, transfer (simulated in the heist proof) |
| WMON (ERC-20) | 0x3bd359C1119dA7Da1D913D1C4D2B7c461115433AView 0x3bd359C1119dA7Da1D913D1C4D2B7c461115433A on the explorer (opens in a new tab) | balanceOf |
| CHOG/WMON pool (Capricorn CL, 1%) | 0x116e7D070f1888B81E1E0324F56d6746B2D7d8f1View 0x116e7D070f1888B81E1E0324F56d6746B2D7d8f1 on the explorer (opens in a new tab) | observe (TWAP), candles via GeckoTerminal |
| Swap router | 0xdac97b6a3951641B177283028A8f428332333071View 0xdac97b6a3951641B177283028A8f428332333071 on the explorer (opens in a new tab) | exactInputSingle, called only by the guard |
| QuoterV2 | 0xB430EDD2b54cdB3B25703fb3342ca3a88663A04DView 0xB430EDD2b54cdB3B25703fb3342ca3a88663A04D on the explorer (opens in a new tab) | Quotes for on-chain trades |
| ERC-6551 Registry v0.3.1 | 0x000000006551c19487814612e58FE06813775758View 0x000000006551c19487814612e58FE06813775758 on the explorer (opens in a new tab) | createAccount, account |
| Tokenbound AccountProxy | 0x55266d75D1a14E4572138116aF39863Ed6596E7FView 0x55266d75D1a14E4572138116aF39863Ed6596E7F on the explorer (opens in a new tab) | initialize; the implementation in every wallet address |
| Tokenbound AccountV3Upgradable | 0x41C8f39463A868d3A88af00cd0fe7102F30E44eCView 0x41C8f39463A868d3A88af00cd0fe7102F30E44eC on the explorer (opens in a new tab) | owner, isValidSigner, execute, setPermissions |
| Multicall3 | 0xcA11bde05977b3631167028862bE2a173976CA11View 0xcA11bde05977b3631167028862bE2a173976CA11 on the explorer (opens in a new tab) | aggregate3 for create + initialize |
Public keys and wallets
| Who | Address | Role |
|---|---|---|
| AI operator | 0x2523bBdD941783C4E565180D2a1b18DE86319cC2View 0x2523bBdD941783C4E565180D2a1b18DE86319cC2 on the explorer (opens in a new tab) | guard.operator() and the trophies minter. Holds MON for gas only. |
| Guard admin | 0xc742AdA2872a042dD36D2E706907b4036968960CView 0xc742AdA2872a042dD36D2E706907b4036968960C on the explorer (opens in a new tab) | The team's main wallet: pause, rotate the operator. Also AnimrTrophies' owner. |
| House key | 0xbcfD3a3846e39a687901EB77ed05F4E3CdC1e259View 0xbcfD3a3846e39a687901EB77ed05F4E3CdC1e259 on the explorer (opens in a new tab) | Scripts only: deployed the contracts, grew the oracle, pays Oracle Purses through the scheduled purse job |
| House Chog wallet (CHOG #891 · token 1399) | 0xa46aE2364eDa19C7d8fCe7F5878C93E50aB2AD71View 0xa46aE2364eDa19C7d8fCe7F5878C93E50aB2AD71 on the explorer (opens in a new tab) | The heist's vault and the team's on-chain agent |
HTTP API
All routes answer JSON under https://useanimr.vercel.app. Token IDs run 1 to 1,969. Routes marked CRON_SECRET need Authorization: Bearer <CRON_SECRET>; HEIST_ADMIN_SECRET marks moderation. Fan routes set the anonymous animr_fan cookie. Hidden Chogs answer 404 on per-Chog routes.
| Route | Method | Purpose |
|---|---|---|
| /api/dna/population | GET | All Chogs ranked by edge vs holding, with headline stats. ?window=30d|45d|max |
| /api/dna/traits | GET | Trait Alpha. ?window= |
| /api/dna/[tokenId] | GET | A Chog's snapshot, genome and persona name |
| /api/dna/[tokenId]/replay | GET | Its replay on real candles. ?window= |
| /api/dna/[tokenId]/standing | GET | Its League rank and edge. ?window=, ?since= |
| /api/versus/random | GET | A fresh random bout (fighters only) |
| /api/versus/new | GET | A bout for chosen Chogs. ?a=&b= |
| /api/versus/[id] | GET | A bout's preview, or the whole race with ?spectate=1 |
| /api/versus/[id]/pick | POST | Body { fighter: "a" | "b" }: your pick, then the race and reveal |
| /api/versus/me | GET | Your Versus record |
| /api/versus/stats | GET | Versus totals |
| /api/bell/today | GET | The latest Bell, with its live move while open |
| /api/bell/[day] | GET | One Bell (YYYY-MM-DD), with its Oracle Purse once settled |
| /api/bell/[day]/calls | GET | A page of a Bell's calls. ?cursor=&sort=bold|bull|bear|tokenId|points&limit= |
| /api/bell/chog/[tokenId] | GET | A Chog's latest call and season record |
| /api/bell/recap/[day] | GET | A settled Bell's recap |
| /api/bell/standings | GET | Top oracles and top fans |
| /api/bell/ride | POST | Body { tokenId }: ride a Chog on the open (or next) Bell |
| /api/bell/cron CRON_SECRET | GET | Ring and settle whatever is due (Vercel Cron at 15:00 and 16:00; the pulse at minutes 1 and 11) |
| /api/fan | GET, POST | Your fan card; POST { nickname } sets a nickname |
| /api/heist | GET | The heist page's data |
| /api/heist/chat | POST | Body { sessionId?, message, recipient? }: one message to the defender |
| /api/heist/proof | POST | Body { recipient? }: Run the check, the read-only mainnet simulation |
| /api/heist/hall-of-fame HEIST_ADMIN_SECRET | GET, POST, PATCH, DELETE | The wall; POST adds your caving reply; PATCH and DELETE moderate |
| /api/chog/[tokenId]/ask | POST | Body { sessionId?, message, viewer? }: Ask this Chog |
| /api/agents/[tokenId] | GET | A Chog's agent and its newest decisions. Cached 5 s at the CDN with no stale-while-revalidate, so a claim or a mode switch shows on the next poll |
| /api/agents/[tokenId]/activate | POST | Wake the AI with the holder's signed message |
| /api/agents/[tokenId]/mode | POST | Switch paper or on-chain with the holder's signed message |
| /api/agents/[tokenId]/tick | POST | Think now (paper agents, rate limited; an on-chain agent answers 403) |
| /api/agent/tick CRON_SECRET | GET | Every awake agent thinks once (the pulse at minute 30) |
| /api/leaderboard | GET | Every claimed agent by PnL vs holding |
| /api/holders/[address] | GET | The Chogs an address holds, with League place and Bell call |
| /api/optout | GET, POST | Hide my Chog: list, status, the message to sign, and the signed opt-out |
| /api/stats | GET | The numbers on /stats (counts only) |
| /api/trophies/meta/[id] | GET | ERC-1155 metadata for a trophy kind |
| /api/trophies/art/[id] | GET | A trophy's badge (SVG) |
