Overview
x402 rail live · API-key rail in free sandbox (paid tier building) — both credit one treasury.
All-time, settled · USDC on Base mainnet · self-settles excluded
Balances read live from Base mainnet RPC at render time (cached ~30s). The chain is the source of truth — audit either wallet on BaseScan, no trust in us required.
| Rail | Status | How it settles |
|---|---|---|
| x402 | Live | HTTP 402 → the buyer's client signs a USDC payment → the CDP facilitator (api.cdp.coinbase.com) verifies and settles it on Base mainnet (eip155:8453) → USDC lands in the shop wallet. No account, no API key. |
| API-key | Sandbox | Bearer mk_ keys at /developers: the free sandbox quota is live today; the paid prepaid tier is building. Paid API-key calls will credit the same treasury — one ledger, both rails. |
agent calls GET /buy/<service>
|
v
HTTP 402 challenge ............ price + payTo + eip155:8453 (Base mainnet, USDC)
|
v
buyer's x402 client signs the USDC payment and retries
|
v
CDP facilitator (api.cdp.coinbase.com) verifies + SETTLES on-chain
| |
v v
result delivered + signed receipt USDC --> shop wallet (payTo)
(503 before charge: a stub is 0xe10B9d44e72A29B9c19da02981FFCd875308e3C1
never billed) | sweep (on-chain, auditable)
v
treasury reserve
0x6FAf93774F43d2e796eBFE43C05461221DB32C40Every paid result ships a signed provenance receipt — the artifact that outlives us. Verify it offline against the pinned signer; no callback to Mercury required.
receipt = {
contentHash : sha256(content) // commit to the bytes, not storage
url, status, fetchedAt, nonce
signature : EIP-191 over contentHash || url || status || fetchedAt || nonce
signer : 0xACB40253BD71Bb9a5d491b2c6EFF755F2A33Fc75 // pinned
}
verify offline, forever (no Mercury required):
1. recompute sha256(content) == receipt.contentHash
2. ecrecover(signature) == the pinned key at /.well-known/mercury-attestation
3. (optional live check) POST /x402/verify{"entry":1,"kind":"wallet","label":"shop payTo","address":"0xe10B9d44e72A29B9c19da02981FFCd875308e3C1","usdc":"2.0080","verify":"https://basescan.org/address/0xe10B9d44e72A29B9c19da02981FFCd875308e3C1"}
{"entry":2,"kind":"wallet","label":"treasury reserve","address":"0x6FAf93774F43d2e796eBFE43C05461221DB32C40","usdc":"3.5000","verify":"https://basescan.org/address/0x6FAf93774F43d2e796eBFE43C05461221DB32C40"}
{"entry":3,"kind":"honest","externalBuyers":0,"revenueUsd":0,"isTraction":false,"selfSettleCount":0,"note":"every figure on this page is real or an honest zero"}This is the whole book: external USDC settlements are written by the chain, not by us — audit both wallets on BaseScan. The in-game agent-bank (bank.mjs) is a separate MBucks credit book on testnet for in-world agents; it never holds USDC and never appears in these figures.