MIMIR · DOCUMENTATION
How Mimir works
Mimir is an AI-settled claim market on Arc — Circle's stablecoin-native L1. Two parties stake USDC on opposite sides of a verifiable question; when the deadline passes, an off-chain AI oracle reads the agreed-upon evidence source, returns a verdict, and the smart contract pays out the winning side atomically. No committees, no manual disputes.
01
What Mimir is
A claim in Mimir is a single, verifiable question with a deadline and a designated resolution source — for example, “Will BTC close above $100,000 on 2026-05-25 according to CoinGecko?”
Anyone creates a claim by staking USDC on one side. Another party (or an autonomous agent) challenges by staking the other side. At the deadline the oracle fetches the evidence URL, asks an LLM to evaluate the outcome against the settlement rule, and submits the verdict on chain. The contract pays out the winning side in the same transaction.
What ships on chain: the question, both positions, the resolution URL, both stakes, the verdict, the confidence number, and the keccak256 hash of the raw evidence the oracle actually saw. The hash means anyone can re-fetch the URL, hash it themselves, and verify the oracle isn't lying about its input.
02
Why USDC on Arc
Arc is Circle's EVM L1 with USDC as the native gas token. That property changes the economics of a stake-and-settle market enough to be worth calling out:
No ERC-20 approval dance
msg.value. One signature opens or accepts a claim — no separate approve() tx, no allowance to manage.Predictable, sub-cent fees
Sub-second deterministic finality
Stablecoin-native semantics
03
Architecture
Three independent tiers, each running where it fits best:
- Frontend (Vercel). Next.js App Router with serverless API routes. Reads come straight from Arc RPC; writes are user-signed via wagmi/viem.
- Workers (Railway). The oracle and market-creator agents run as long-lived Node processes. Vercel functions time out before a polling cycle can finish — Railway is the right home.
- Data (Neon Postgres).A denormalised read-index of on-chain state for the explorer / dashboard feeds. Optional — the contract remains source of truth, and pages that don't need feeds (bridge, stats, claim detail) work without it.
04
The claim lifecycle
A few details matter for trust:
- Evidence hash on chain.
keccak256(raw evidence)lands in contract storage. Anyone can re-fetch the URL, hash it, and verify what the oracle actually saw. - Confidence is first-class. The LLM returns a 0–100 number that ships with the verdict. The product surfaces it as confident vs. contested.
- Refund the ambiguous.
DRAWandUNRESOLVABLEare real verdicts that return stakes. Better inconclusive and refunded than wrong and paid out. - Oracle-only resolution.
resolveClaimis gated by a single address — a Circle-managed wallet held by the agent. No human can quietly re-route payouts.
05
The agents
Two background processes run continuously. Neither holds a local private key — both sign through Circle's Programmable Wallets.
Oracle agent
resolveClaim on chain. With AUTO_CHALLENGE=1 it also stakes the contrarian side on OPEN claims it's highly confident about, sized by the Kelly criterion and capped at 25% of its bankroll.Market-creator agent
06
The Circle stack
Mimir uses Circle's developer platform end-to-end. Each piece earns its keep:
USDC (native)
msg.value, settlement pays USDC directly, no wrapper contracts.W3S Programmable Wallets
executeContract(...) — no private key ever sits in a worker process.CCTP V2 (Fast Transfer)
Gateway
POST /v1/balances to return a wallet's USDC balance across every CCTP V2 domain in one round-trip, rendered as the “unified balance” widget.07
Smart contract terms
A few terms that show up in the UI and on chain:
| Term | What it means |
|---|---|
| creator | The address that opened the claim and staked side A. |
| challengerStake | Sum of all side-B stakes (pool mode) or single counter-stake (1v1). |
| oddsMode | pool = pari-mutuel, fixed = creator-backed multipliers. |
| deadline | UTC unix timestamp. After this the oracle can settle. |
| winnerSide | CREATOR, CHALLENGERS, DRAW (refund), or UNRESOLVABLE (refund). |
| evidenceHash | keccak256 of the raw bytes the oracle fetched from the resolution URL. |
| confidence | 0–100. The LLM's self-assessed certainty for that verdict. |
08
How to play
- Get testnet USDC. faucet.circle.com on Arc Testnet, or use the bridge to pull USDC over from Base/Eth/Avax Sepolia via CCTP V2.
- Connect your wallet. The site auto-switches you to Arc Testnet on connect and adds the chain if your wallet doesn't know it.
- Either create a claim or challenge one. Browse the explorer for open markets, or open your own with /vs/create. Stake at least 2 USDC.
- Wait. At the deadline the oracle does its thing. You don't need to click anything — the contract pays out automatically.
- Check the receipt. The settlement card shows the verdict, the explanation, the evidence hash, and the on-chain tx.
09
FAQ
Do I need MetaMask?
What if the LLM is wrong?
UNRESOLVABLE and refund — the protocol prefers refunding ambiguity to fabricating certainty.Can the oracle be replaced?
oracle address is set at deploy and changeable only by the owner. The deploy script transfers ownership to the market-creator W3S wallet immediately after deploy.Is the agent betting against me?
AUTO_CHALLENGE=1 enabled, and only when its own confidence on the contrarian side is ≥ 80%. Stake size is Kelly-bounded at 25% of bankroll, with an additional 10% hard cap. The contract blocks a wallet from being both creator and challenger of the same claim.Mainnet?
lib/arc.ts) — a mainnet redeploy is mostly a single chain definition swap.