Guides / Base vs Solana for x402 sellers: an honest comparison
Base vs Solana for x402 sellers: an honest comparison
If you sell an API over x402, you will eventually face the rails question: price in USDC on Base, on Solana, or both. This guide compares the two honestly — mechanics, fees, verification, tooling, and what the ecosystem numbers actually mean — and ends with the answer most sellers land on: you probably do not have to pick.
The protocol is the same; the rails are not
x402 v2 works identically on both chains at the HTTP layer. Your server answers 402 with a PAYMENT-REQUIRED header (base64 JSON describing what you accept), the client pays, retries with a PAYMENT-SIGNATURE header, and you return 200 plus a PAYMENT-RESPONSE receipt. Everything below that header — how the payment is authorized, who pays gas, how you verify settlement — differs by rail. Those differences are what this guide is about.
How the payment actually moves
What does an x402 payment look like on Base?
On Base the buyer never builds a transaction. They sign an EIP-3009 transferWithAuthorization struct — a typed message authorizing USDC to move from their wallet to yours — and the facilitator submits it on-chain. Your payTo is your wallet address directly, with no token-account indirection, and verification means reading the ERC-20 Transfer event log out of the receipt. The settlement response carries a familiar 0x + 64-hex transaction hash.
What does an x402 payment look like on Solana?
On Solana the client builds a real transaction: partially signed, base64-encoded, versioned. It carries three to six instructions — SetComputeUnitLimit, SetComputeUnitPrice, a TransferChecked moving the USDC, and a Memo (only Memo and Lighthouse extras are allowed beyond those). The facilitator co-signs as the fee payer and submits it. That is why extra.feePayer is a required field in Solana PaymentRequirements: buyers need zero SOL, because the sponsor — usually the facilitator — pays the network fee.
{
"scheme": "exact",
"network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"payTo": "YOUR_OWNER_WALLET_BASE58",
"amount": "10000",
"extra": { "feePayer": "FACILITATOR_PUBKEY" }
}
// amount is atomic units: "10000" = $0.01 (USDC has 6 decimals)
Note that asset is the token mint address, not a ticker. USDC's name is not protected on Solana — anyone can mint a token named USDC — so the Circle-issued mint address is the only identity that counts, and verifiers must pin it. Two more Solana details bite sellers who skip the docs. Your payTo is your owner wallet (a base58, 32-byte pubkey), but the funds land in that wallet's USDC Associated Token Account. And the transaction rides on a recent blockhash with a lifetime of roughly 60–90 seconds (~150 slots), with no durable nonces in the scheme, so the whole 402 → pay → settle round-trip must finish inside that window or the transaction can never land.
payTo wallet with any small USDC transfer. That first transfer auto-creates the Associated Token Account that x402 settlements pay into — the payment flow itself cannot create it, and until it exists, settlements to that wallet fail.Fees and speed
For buyers, both rails are effectively instant and effectively free. Gas on Solana is sponsored by the feePayer, and on Base the EIP-3009 flow means the buyer signs a message rather than submitting a transaction. On the seller side, Solana's confirmed commitment lands in roughly 1–2 seconds — and no optimistically-confirmed Solana block has ever been rolled back — while finalized takes about 13 seconds if your risk posture wants it. In practice, neither rail makes a buyer wait in a way they will notice. Speed is not the deciding factor here.
Verifying you were actually paid
How do you verify a Base settlement?
Event-log verification. Fetch the receipt for the 0x transaction hash and read the ERC-20 Transfer events: the recipient is your wallet address directly, and the amount is right there in the log. It is the model most EVM developers already know.
How do you verify a Solana settlement?
Balance-delta verification. The settlement response gives you a base58 transaction signature (87–88 characters). Fetch it and diff the token balances:
getTransaction(signature, {
encoding: "jsonParsed",
commitment: "confirmed",
maxSupportedTransactionVersion: 0
})
// 1. require meta.err === null
// 2. diff meta.preTokenBalances vs meta.postTokenBalances
// 3. match the NET delta where owner == your payTo wallet
// AND mint == your pinned USDC mint
// 4. compare amounts as integers in atomic units (never floats)
The balance-delta approach has two quiet advantages: it needs no ATA math, and it nets out Token-2022 transfer fees automatically. For later status checks, getSignatureStatuses with searchTransactionHistory: true does the job.
Two RPC caveats worth knowing before production. The public api.mainnet-beta.solana.com endpoint blocks datacenter IPs with 403s and is not meant for production traffic. And public nodes are non-archival — old signatures return null — so verify payments promptly and persist your own receipt, or use an archive-backed provider.
Ecosystem reality, stated honestly
Analyst estimates as of mid-2026: Base leads in cumulative USD value settled, while Solana leads in transaction count, driven by micro-settlements and RPC metering. Both claims deserve a caveat that vendor marketing rarely volunteers: independent analyses estimated that a large majority of peak-period x402 transactions were non-organic — bots and self-dealing — so raw counts overstate real demand on every rail. Treat volume charts as directional, not as revenue forecasts.
Discovery is real on both rails. The Coinbase x402 Bazaar lists Solana endpoints at scale — roughly a quarter of resources in a July 2026 sample, all mainnet USDC — and settlements routed through the CDP facilitator with discovery metadata get indexed. Governance has also consolidated: x402 moved to the x402 Foundation under the Linux Foundation in July 2026, with the Solana Foundation as a member. Neither rail is a side project of the other.
Tooling maturity
Which payment schemes exist on each rail?
EVM is ahead. Base supports exact plus upto and batch-settlement; on SVM, only exact exists today. If your pricing model needs metered upper bounds or batched settlement, that is a genuine reason to lead with Base.
Which facilitators support Solana?
As of mid-July 2026, live-verified:
- PayAI (facilitator.payai.network) — keyless, mainnet and devnet, sponsors all gas.
- Coinbase CDP — mainnet and devnet; requires CDP API keys; 1,000 free transactions per month, then $0.001 per transaction; CDP acts as fee payer.
- thirdweb — mainnet; requires a thirdweb secret key.
- x402.org and x402.rs — Solana devnet only.
What does multi-rail code look like?
The client libraries make the rails question smaller than it sounds. @x402/svm (built on Solana Kit) composes with @x402/fetch exactly like the EVM scheme:
const client = new x402Client()
.register("eip155:*", new ExactEvmScheme(evmSigner))
.register("solana:*", new ExactSvmScheme(svmSigner));
Sellers using @x402/hono and similar middleware register the SVM scheme server-side the same way, then list both networks in accepts[]. The buyer's client picks whichever rail it can pay on.
So which rail should you pick?
The honest answer: for most sellers this is a false choice. A multi-rail accepts[] costs you one extra requirements entry, one funded ATA, and a second verification path — and it lets the buyer choose. Agents holding USDC on Base pay on Base; agents living in the Solana ecosystem pay there. You keep one price, one endpoint, one receipt log. Lead with Base if you need upto or batch settlement; lead with Solana if your buyers are already there; accept both if you simply want to be paid.
What Quartermaster observes
Quartermaster's ecosystem dashboard crawls live x402 endpoints and tags each with per-rail pills, so you can see which networks any endpoint actually accepts — and what the crawled population looks like across Base and Solana — before you commit to anything. The paid tools are rail-agnostic: GET /v1/payment-proof ($0.003) and GET /v1/settlement-assurance ($0.03) accept a 0x Base hash or a base58 Solana signature interchangeably, and Quartermaster's prices are the same regardless of rail.
GET /v1/x402-audit, or get the full AI-reviewed $9 endpoint report. All 49 tools are also available over MCP at /connect.Last updated 2026-07-17. Written from the x402 specification, the x402-foundation reference implementation, facilitator /supported endpoints, and live Coinbase Bazaar data. Corrections: dev@surewhynot.app.
More guides: Accept Solana USDC in your API with x402 · How to verify a Solana x402 settlement · Common Solana x402 mistakes (and how to fix them)