x402 on Arc

StockWaves accepts payment on Circle's Arc mainnet — with no facilitator.

On Arc, gas is USDC. So a buyer can broadcast its own EIP-3009 transferWithAuthorizationand pay the gas out of the same balance as the payment. Nobody needs to sponsor anything, and the server's job shrinks to one question: did this transaction pay this request?

Why this had to be built

x402's exactscheme settles through a facilitator that broadcasts the buyer's authorization and sponsors the gas. No facilitator does this on Arc — the one listed option is Circle Gateway, which assumes pre-deposited funds and a different contract interface. The chain itself was always ready: the USDC predeploy at 0x3600…0000 is a standard FiatTokenV2 with EIP-3009 live. Only the broadcaster was missing, and on Arc the buyer can be the broadcaster.

Live now

Every StockWaves endpoint priced at $0.03 or above offers an Arc option alongside Base and Solana. Cheaper endpoints deliberately do not — see the cost table below.

# See the Arc option in the live 402 challenge:
curl -si https://stockwaves.net/api/xstock/health?symbol=SPYx \
  | grep -i '^payment-required:' | cut -d' ' -f2 | base64 -d | jq '.accepts[]'
Networkeip155:5042 (Arc mainnet)
Asset0x3600000000000000000000000000000000000000 — USDC, 6 decimals
Transfer methodeip3009-client-broadcast
Settlementthe buyer's own transaction; the server verifies the receipt

Proof, on-chain

Two real mainnet payments, verifiable without trusting this page:

Presenting either transaction a second time returns 402, not the data: the authorization is claimed before the handler runs, so a replay never reaches the service.

Pay it yourself

import { payOnArc, toPaymentHeader } from "x402-arc/client";

const payment = await payOnArc({ privateKey: KEY, requirements, chain: "mainnet" });
await fetch(url, { headers: { "PAYMENT-SIGNATURE": toPaymentHeader(payment, requirements) } });

The server half has no runtime dependencies and registers beside existing rails — Base and Solana keep working exactly as before, because registration is per network.

npm install x402-arc

What it costs, honestly

Client-broadcast moves the gas onto the buyer. Measured on Arc mainnet: 0.00226 USDC per payment (112,519 gas). That is what makes a facilitator unnecessary — and what makes this the wrong rail for sub-cent pricing:

PriceGas as a shareArc offered?
$0.00375%no
$0.037.5%yes
$0.500.5%yes
$1.500.15%yes

For true nanopayments on Arc, batching (Circle Gateway) is the right rail. This is for ordinary per-call pricing.

Status

This implements an open, unratified proposal (filed 2026-09-16, no maintainer decision yet). The receipt-verification core does not depend on that outcome; the wire format may. One correction was needed to make it usable: the proposal derives the EIP-3009 nonce deterministically from the payment requirements, and EIP-3009 nonces are single-use — so a buyer could pay for a given resource at a given price exactly once, ever. Freshness now comes from the buyer instead, which keeps repeat purchases working.

Source: github.com/kaditang/x402-arc (MIT) · Proposal: x402#3504 · Endpoints: stockwaves.net


Informational data only — not investment advice. See Terms & Disclaimer.