Skip
Mimir

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

Stakes use msg.value. One signature opens or accepts a claim — no separate approve() tx, no allowance to manage.

Predictable, sub-cent fees

Gas is denominated in USDC, not a volatile native token. A settlement tx costs roughly $0.01 regardless of network congestion.

Sub-second deterministic finality

The oracle can settle and pay out inside a single user-visible moment, instead of leaving funds in limbo through a long confirmation window.

Stablecoin-native semantics

Treasury operations — agent funding, payouts, balance reads — all happen in the same unit users see in the UI.

03

Architecture

Three independent tiers, each running where it fits best:

UsersMetaMask / CoinbaseVERCEL · FRONTENDNext.js 16 app/explorer · /bridge · /vs/[id]+ /api routesRAILWAY · WORKERSoracle + market-creatorpoll, evaluate, settlesign via Circle W3SARC TESTNETMimir.solnative USDC stakes~$0.01 fees, sub-sec finalityNEON POSTGRESread-index cacheLLM PROVIDERGemini · AnthropicCIRCLE STACKUSDCW3SCCTP V2GatewayApp Kit
Top to bottom: user wallets → Next.js frontend (Vercel) and worker agents (Railway) → Arc contract + ancillary services (Neon read-index, LLM provider, the Circle stack).
  • 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

01CreateStake side A in USDC02ChallengeSide B stakes the other side03WaitDeadline passes04ReadOracle fetches evidence05EvaluateLLM returns verdict + confidence06ResolveAtomic on-chain payoutCREATORORACLE
Six discrete steps from open to settled. Steps 04–06 are entirely automated by the oracle agent.

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. DRAW and UNRESOLVABLE are real verdicts that return stakes. Better inconclusive and refunded than wrong and paid out.
  • Oracle-only resolution. resolveClaim is 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.

Poll loopevery 60sROLE A · SETTLERstate = ACTIVE & deadline passedfetch evidence → LLM → resolveClaim()ROLE B · CHALLENGER (opt-in)state = OPEN & deadline in futureearly LLM read → confidence ≥ 80%Kelly-sized stake (≤ 25% bankroll)requires AUTO_CHALLENGE=1ON-CHAINUSDC payoutevidence hash committedconfidence stored
Oracle decision tree. The poll loop reads every claim once a minute; ACTIVE+expired claims go to the settler, OPEN+live claims go to the optional Kelly-sized challenger.

Oracle agent

Reads expired ACTIVE claims, fetches the evidence URL, asks the LLM for a verdict + confidence + one-sentence explanation, and submits 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

Polls trusted public sources (CoinGecko, ESPN, OpenWeather) every six hours, asks the LLM to draft 1–5 verifiable claim candidates, scores each for quality, and creates the highest-scoring ones on chain with its own creator-side stake. Opening a claim is an economic commitment, not a free tweet.

06

The Circle stack

Mimir uses Circle's developer platform end-to-end. Each piece earns its keep:

USDC (native)

Arc's gas token. Stakes use msg.value, settlement pays USDC directly, no wrapper contracts.

W3S Programmable Wallets

The oracle and market-creator addresses are Circle-managed. Every contract execution goes through executeContract(...) — no private key ever sits in a worker process.

CCTP V2 (Fast Transfer)

The bridge page burns USDC on Base / Ethereum / Avalanche Sepolia, polls Iris for an attestation, and lets the user mint native USDC on Arc. End-to-end in ~15 seconds.

Gateway

A server-side proxy hits 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.
SOURCE CHAINBase · Eth · Avalancheapprove(USDC)depositForBurn(...)CIRCLE IRISattestation servicewatches burn events~13–19s for Fast TransferARC TESTNETreceiveMessage(...)mints native USDCpermissionless txburn tx hashmessage + signature
CCTP V2 bridge flow. The mint on Arc is permissionless — the user submits it themselves once Iris returns the signed message.

07

Smart contract terms

A few terms that show up in the UI and on chain:

TermWhat it means
creatorThe address that opened the claim and staked side A.
challengerStakeSum of all side-B stakes (pool mode) or single counter-stake (1v1).
oddsModepool = pari-mutuel, fixed = creator-backed multipliers.
deadlineUTC unix timestamp. After this the oracle can settle.
winnerSideCREATOR, CHALLENGERS, DRAW (refund), or UNRESOLVABLE (refund).
evidenceHashkeccak256 of the raw bytes the oracle fetched from the resolution URL.
confidence0–100. The LLM's self-assessed certainty for that verdict.

08

How to play

  1. 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.
  2. Connect your wallet. The site auto-switches you to Arc Testnet on connect and adds the chain if your wallet doesn't know it.
  3. 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.
  4. Wait. At the deadline the oracle does its thing. You don't need to click anything — the contract pays out automatically.
  5. 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?

Any injected EVM wallet works (MetaMask, Coinbase Wallet, Rabby, Phantom EVM, etc.) plus WalletConnect. The frontend uses wagmi v3.

What if the LLM is wrong?

The verdict ships with a confidence number, the evidence URL, and a keccak256 hash of the raw page bytes. Anyone can verify the oracle wasn't hallucinating. Truly ambiguous claims resolve as UNRESOLVABLE and refund — the protocol prefers refunding ambiguity to fabricating certainty.

Can the oracle be replaced?

The contract's 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?

Only with 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?

Arc is testnet-only as of writing. The codebase is chain-config driven (see lib/arc.ts) — a mainnet redeploy is mostly a single chain definition swap.