Skip to content

Add Celo rail: USDC on eip155:42220 via the new x402.celo.org facilitator#463

Merged
MikeyPetrillo merged 3 commits into
mainfrom
claude/sweet-brown-i99jl3
Jul 20, 2026
Merged

Add Celo rail: USDC on eip155:42220 via the new x402.celo.org facilitator#463
MikeyPetrillo merged 3 commits into
mainfrom
claude/sweet-brown-i99jl3

Conversation

@MikeyPetrillo

Copy link
Copy Markdown
Owner

Celo's x402 facilitator is live (https://x402.celo.org, API at api.x402.celo.org — keyless, advertises exact/eip155:42220 at x402 v2). This wires Celo in as the ninth settlement rail, following the Monad pattern.

Payments

  • celo (eip155:42220) in EVM_NETWORKS, opt-in via PAYMENT_NETWORKS
  • Dedicated facilitator client, CELO_FACILITATOR_URL default https://api.x402.celo.org
  • Money parser for native Circle USDC 0xcebA9300f2b948710d2653dD7B07f33A8B32118C — @x402/evm's registry lacks chain 42220, and the on-chain EIP-712 name is "USDC" (not "USD Coin"; verified on-chain via forno.celo.org: name(), version()=2, decimals=6, EIP-3009 typehash present)
  • Same drop-if-unset safety as Monad/Robinhood: emptied facilitator URL degrades Celo to "not offered" instead of breaking every 402

Marketplace + surfaces

  • rails.js entry (all derived copy), /celo market page, chain logo (Celo's own square/ring-C mark), revenue-live read-config (Alchemy celo-mainnet + forno fallback, celoscan links), SNAPSHOT_RAIL_LABEL, STATIC_CHAINS fallback (also fixes /monad missing there), nine-network copy sweep (README/wiki/listings)

Testing

  • Offline suites green: test-rails, test-chain-logos, test-canary-coverage, test-discovery, test-x402-economy
  • Local boot with PAYMENT_NETWORKS=base,celo: facilitator syncs, 402 offers eip155:42220 with the correct asset + signing domain, /celo + /marketplace + manifest render
  • Paid canary gains a pinned Celo leg (needs the EVM burner funded with USDC on Celo before it settles green)

Railway PAYMENT_NETWORKS already updated (skip-deploys) — this deploy picks it up.

🤖 Generated with Claude Code

MikeyPetrillo and others added 2 commits July 20, 2026 08:49
…elo.org facilitator

Celo's facilitator went live at api.x402.celo.org (keyless, advertises
exact/eip155:42220 at x402 v2). Wires Celo end to end like Monad:

- payments.js: celo network, CELO_FACILITATOR_URL (default api.x402.celo.org),
  money parser for native Circle USDC 0xcebA9300f2b948710d2653dD7B07f33A8B32118C
  with the on-chain EIP-712 domain name "USDC" / version "2" (verified via
  forno.celo.org: name(), version(), decimals, EIP-3009 typehash), drop-if-unset
  safety so an emptied facilitator URL degrades to "not offered", never a broken 402
- rails.js entry (copy layer -> every derived surface), chain-logos mark
  (Celo's own square/ring-C favicon path), market-page /celo entry, revenue-live
  read-config (Alchemy celo-mainnet + forno fallback, celoscan links),
  server SNAPSHOT_RAIL_LABEL, ledger-chrome STATIC_CHAINS
  (also fixes /monad missing from that fallback list)
- paid-canary pinned Celo leg + drain-burner chain, nine-network copy sweep
  (README, wiki, ecosystem listings)

Local e2e: boot with PAYMENT_NETWORKS=base,celo -> facilitator syncs, 402
offers eip155:42220 with the correct asset + signing domain; /celo,
/marketplace, /.well-known/x402, /sell all render the rail. test-rails,
test-chain-logos, test-canary-coverage, test-discovery, test-x402-economy green.
PAYMENT_NETWORKS on Railway already updated (skip-deploys; this deploy picks it up).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…-pages, static-pages)

test-market-pages pinned CHAIN_PAGES at 8 entries; now 9 with the Celo rail,
plus a celo fixture (network eip155:42220, testnet-off eip155:11142220,
celoscan.io) so the page gets the same per-chain rendering assertions as the
rest. test-static-pages gains the /celo page. Both suites green locally.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@MikeyPetrillo
MikeyPetrillo temporarily deployed to agent402 / production July 20, 2026 13:07 — with GitHub Actions Inactive
@railway-app
railway-app Bot temporarily deployed to agent402 / production July 20, 2026 13:07 Inactive
…ated offer

First live canary against the Celo rail surfaced what the facilitator's docs
don't mention: /supported and /verify are keyless, but /settle returns
401 "Missing X-API-Key". A keyless Celo offer therefore verifies fine and
bounces every buyer at settlement (never charged, but a dead rail).

- CELO_FACILITATOR_KEY env: rides verify/settle/supported as X-API-Key via
  createAuthHeaders (same pattern as the Stellar bearer)
- Offer gate: celo is dropped from the offered networks with a loud warning
  unless BOTH the facilitator URL and the key are set
- Keys are free + self-service (sign a no-gas message at x402.celo.org;
  confirmed live: with the key /settle returns payload validation, not 401,
  and auth is not payTo-bound). Key set on Railway (skip-deploys).
- CLAUDE.md + wiki Self-Hosting document the key requirement

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@MikeyPetrillo
MikeyPetrillo temporarily deployed to agent402 / production July 20, 2026 13:48 — with GitHub Actions Inactive
@railway-app
railway-app Bot temporarily deployed to agent402 / production July 20, 2026 13:50 Inactive
@MikeyPetrillo
MikeyPetrillo marked this pull request as ready for review July 20, 2026 13:55
@MikeyPetrillo
MikeyPetrillo merged commit 18292ac into main Jul 20, 2026
18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant