Skip to content

Release: Arbitrum One x402 deposits via CDP (checksummed v2 payload)#295

Merged
gianalarcon merged 2 commits into
mainfrom
develop
Jun 13, 2026
Merged

Release: Arbitrum One x402 deposits via CDP (checksummed v2 payload)#295
gianalarcon merged 2 commits into
mainfrom
develop

Conversation

@gianalarcon

Copy link
Copy Markdown
Contributor

Promotes the Arbitrum One x402 fix from develop (staging) to main (production).

Contents

Single feature — settles agentic gasless USDC (x402) deposits on Arbitrum One (42161) via the Coinbase CDP facilitator (#294):

  • Routing: Arbitrum One → CDP (x402 v2); Base + everything else stay on PayAI v1 (untouched). Guarded by CDP_SUPPORTED_NETWORKS / assertCdpNetworkSupported.
  • CDP v2 payload fix: checksum (EIP-55) asset/payTo and authorization.from/to via viem getAddress. Lowercase addresses were failing CDP's oneOf validator and surfacing the misleading "x402V1PaymentPayload requires 'scheme'" error. (PayAI does not settle Arbitrum at all — confirmed invalid_exact_evm_network_mismatch on prod.)

CI

develop checks green (ci + test-backend E2E) on #294.

⚠️ Post-merge prod actions (required before announcing)

  1. Fund the prod relayer 0x5e6EC800… with Arbitrum One ETH (was ~0.0015 ETH) — needed for account-creation (Stylus deploy).
  2. Run one live Arbitrum One test deposit (real multisig + USDC) — this is the only way to confirm CDP /verify + /settle accept the checksummed body end-to-end; it can't be exercised in CI or on staging (testnet, no CDP Arbitrum Sepolia support).

🤖 Generated with Claude Code

gianalarcon and others added 2 commits June 13, 2026 10:14
…ayload

Arbitrum One (42161) only settles through Coinbase CDP (x402 v2); PayAI
advertises "arbitrum" in /supported but rejects it on verify with
invalid_exact_evm_network_mismatch (confirmed on prod). Route Arbitrum One
deposits to CDP (Base + everything else stay on PayAI v1) and fix the CDP v2
payload that was being rejected.

Root cause of the CDP 400: CDP's v2 validator requires EIP-55 checksummed EVM
addresses. We sent lowercase (multisig addresses are stored lowercase; the
X-PAYMENT authorization carries lowercase), so the payload failed CDP's
oneOf[x402V2PaymentPayload, x402V1PaymentPayload] and surfaced the misleading
"x402V1PaymentPayload requires 'scheme'" error. Checksum asset/payTo in the v2
requirements leaf and authorization.from/to in the payment payload via viem
getAddress. Casing does not affect the EIP-3009 signature (EIP-712 encodes
addresses to the 20-byte value). PayAI v1 path is untouched.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
fix(x402): settle Arbitrum One deposits via CDP with checksummed v2 payload
@gianalarcon gianalarcon merged commit e9356eb into main Jun 13, 2026
3 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