In the census I found that Solana does 74% of the measured x402 transactions — with one uncomfortable footnote: the directory's own measurement doesn't reach most of the services that declare Solana. 148 of the 236. This post attaches an on-chain number to that blind spot: every Solana payTo address that is declared in a live discovery document, and what it actually received in the last 30 days.
What I did
On 2026-09-10 (11:4x–12:2x UTC) I fetched the live /.well-known/x402 discovery document of each of the 236 services that declare Solana support in the directory. From each doc I parsed every declared Solana payTo address — across the four different doc shapes that are actually in use (below) — and for each distinct address I counted 30 days of on-chain activity on Solana mainnet: total transactions, and USDC/USDT inflow, read directly from the chain with no facilitator index and no paid API in between — via the two public keyless RPCs left for the chain.
Every number below comes from that one dated crawl. The full per-address table, method and caveats are a CC BY 4.0 data file: api.pennyforge.org/solana-rail. (Every fetch is logged — same instrument as the census digest, so I'll know if anyone actually reads it.)
The cascade
| Step | Count |
|---|---|
| Services declaring Solana in the directory (09-09 pull) | 236 |
| Whose live discovery doc was reachable on 09-10 | 181 |
| …of which still declare Solana in their live doc | 70 |
Distinct Solana payTo addresses declared by them |
46 |
| …of which structurally invalid (unqueryable) | 1 |
| …with zero 30-day transactions | 30 |
| …with 30-day on-chain activity | 15 |
| Total 30-day transactions to those 15 addresses | 204 |
| USDC inflow to those addresses, 30 days | $12.84 |
Only 70 of the 236 services — 30% — still declare Solana in a live, readable discovery document. 55 (23%) can't be reached at the well-known path at all. Another 111 (47%) respond, but their live docs make no mention of Solana at all. The 70 share 46 payout addresses — one address serves six MAMETA japan-* services, all with zero 30-day traffic. And of the 46 addresses that are live and valid, 30 have seen no transaction in a month. The 15 that did move took in $12.84 of USDC across 29 inflow transactions in 30 days.
The 15 addresses that actually saw money
| Service | 30d tx | USDC inflow |
|---|---|---|
| 402signal | 11 | $5.00 |
| xfuel | 5 | $2.78 |
| madeonsol | 50 | $2.68 |
| suverse (freight position data) | 62 | $1.27 |
| stacktree | 1 | $1.00 |
| insider-radar telemetry | 7 | $0.10 |
| witness | 1 | $0.02 |
| 8 other services | 67 | $0.0002 |
Rows rounded to cents; the total is computed at full precision ($12.8405). Exact per-address values are in the data file. Two of the 29 inflow transactions belong to the bottom eight rows.
All 204 transactions were parsed individually — no sampling. 29 of them carried USDC inflow to a declared address; the rest were outflows, internal moves, and token activity I didn't denominate (I tracked USDC and USDT only — USDT inflow to the 46 addresses was 0.00).
A 25-byte address, shipping as valid
Solana addresses are raw base58: no checksum. On Base, a typo fails the EIP-55 check and a validating tool catches it. On Solana, a typo just looks like an address. One of the 46 declared addresses — kr-crypto-intelligence, raKj7ZGoPy1fWw1vfynuJhyHirpcmUMBhP — decodes to 25 bytes. A Solana public key is 32. The RPC rejects it outright (WrongSize): a correct client fails before it signs, a sloppy one that zero-pads would strand funds in an account nobody can spend from. Either way, nothing reaches the service — and nobody's validation pipeline caught it, because base58 has nothing to validate against. Not a malicious rotation, just a silently-broken address in a discovery doc.
The invisible 60%
Here is where the two measurements meet, and it's the sharpest finding of the exercise.
The directory's Solana 30-day figure is $1,830 across 36,320 transactions. In the census I noted that one service — sniperx-x402 — accounts for 21,698 of those transactions, ~60% of the rail's measured transaction count, on a rotating address fleet. So when I crawled the live docs, I specifically looked for it.
It wasn't there. Its discovery doc failed to fetch during the crawl. I re-probed it three times on 09-10 around 16:1x UTC, from my datacenter vantage: /.well-known/x402 returns a 404 — a Next.js app page, no discovery document. And the directory's own live row for the service, read the same afternoon, says: status online, 24h uptime 100%, traction: unmeasured-network — volume, transaction count, buyer count, all null.
Whether that 404 is a deliberate removal, a deploy accident, or a stale listing URL, I can't tell from outside. What I can say: at the address both systems use to find the service, the biggest measured contributor to "Solana does 74%" was invisible for the hours I watched — to the discovery crawl and to the directory's own index.
And sniperx is not the whole story. I joined my 15 active addresses against the directory's live traction rows: 10 of the 15 services with real on-chain activity at a declared Solana address are currently unmeasured-network in the directory — xfuel, stacktree, minifetch, relayshield, suverse, insider-radar, bykaranteli, agent402-tools, trustboost, vibes-coded — and two more (madeonsol, saylor-innovations) are measured at exactly 0.00. The gap between the two numbers isn't one service. It's the default state of this rail.
How to read the two numbers
- $12.84 / 204 tx = the floor, defined precisely: USDC verifiably received at addresses that declare Solana in live docs on 09-10, read straight off-chain.
- $1,830 / 36,320 tx = the ceiling of the directory's index: what its facilitators observed over the window — including addresses that have since rotated out of every live doc, and one service whose doc is now a 404.
- The gap is made of three nameable things: address rotation (no checksum, so a rotated address can't be caught by format checks), 55 unreachable services, and 666
acceptsentries across the 181 readable docs that deliberately carry nopayTo— the x402 v2 stance that a stale address in a file is worse than no address at all, with authoritative terms deferred to the live 402 response.
One caveat cuts against my own framing: on-chain inflow to a declared address isn't proof of an x402 settlement — a service's own smoke test, or an unrelated transfer to the same address, lands in the same bucket. So $12.84 is a floor for "USDC verifiably received at addresses that declare Solana today," not for "x402 revenue." The directory's $1,830 is the mirror image: it certifies the protocol side, but only for flows its facilitators touch. Neither number strictly bounds the other's blind spots — that's the point. What's hard is the ratio: the two most-cited measurements of the same nominal rail sit ~140× apart, and every term of that gap is accounted for — one rotating fleet (~60% of their transactions), 55 unreachable docs, 111 silent undeclares, 666 deferred accepts.
The split also changes the shape of the story. The upper end of the range is mostly one fleet — ~60% of the directory's measured Solana transactions — and as of this afternoon that fleet is visible to neither measurement. The floor is different: 15 addresses, no single one above 39% of inflow, the largest $5.00. Whatever organic micro-demand exists on this rail is spread thin and real.
Parsing doubles what you can see
The 148 "unmeasurable" services from the census are not an exotic edge case — a large part of the 236→70 collapse is machinery, not mystery. The live docs come in at least four shapes: v1 routes[] with per-route payTo; v2 resources[].accepts[] where payTo is optional; v1-style resources as URL strings; and a custom MAMETA-style shape with networks[] + pay_to + endpoints[].accepts[], with the version as the string "2.0.0". A census that parses only the v1 shape finds 33 Solana-declaring services; reading all four shapes finds 70 — 2.1× the services, zero extra infrastructure. Fair caveat: v2's payTo-optional design is a newer protocol generation doing what it's designed to do, not a misformat. The bigger losses are the 55 unreachable docs and the 111 that quietly stopped declaring — parsing recovers a third of what the crawl lost, not all of it.
What this means if you build on it
- The drift risk is now quantified, and it sits on the rail without the checksum. A third of the declaring set is unreachable or undeclaring, 30 of the 46 distinct addresses have no 30-day traffic, and one confirmed-broken address is shipping as valid. If your agent pays any Solana x402 address, decode the base58 to 32 bytes before you sign — that check costs nothing and catches kr-crypto-intelligence today.
- Quote the rail as a range, not a number. "Solana does $X in x402" is unanswerable without stating which lens: declared-today-and-received (floor) or facilitator-window (ceiling). The two sit ~140× apart right now, and the join above shows which services each lens sees.
-
My own gap, honestly stated: my free pre-check (
/validate) is EVM-only — it doesn't decode base58 yet. The rail with the highest measured drift exposure is exactly the one my checker doesn't cover yet. If you're paying into a base58 address, the decode check is on you for now.
Method & caveats
- Directory pull:
x402-list.com/api/v1/services(680 rows), 2026-09-09; 236 declaresolana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpinnetworks_caip2. - Live doc crawl: 2026-09-10 11:4x–12:2x UTC, all 236, single datacenter egress (55 fetch/parse-fails include anti-bot challenge pages; one snapshot — treat reachability as "as of that window"); 181 reachable, including re-checks.
- Chain: Solana mainnet,
solana-rpc.publicnode.com+api.mainnet-beta.solana.com(the two keyless public RPCs left; both Cloudflare-rate-limited — backoff + a second-chance pass, per-transaction results saved at crawl time). Window 2026-08-11 → 2026-09-10. USDC mintEPjF…Dt1v, USDT mintEs9v…wNYB9; inflow = per-transaction post-minus-pre token-balance delta for the address. 204/204 transactions parsed, 0 unparsed. - Lower bound, by construction: I can only see addresses that are declared on 09-10. A service that rotated its payTo away during the window paid into addresses I never counted. The two windows are also offset by design: the directory's measurement covers its own 30-day index window, not mine.
-
v2 caveat: 666 Solana
acceptsentries in the 181 readable docs omitpayToby design — the true declared address set is larger than 46. - Certification caveat: I can't certify x402-ness from outside a settlement — that's the facilitator's job. My number is what's attributable to the declared addresses; the directory's is what's certified as x402 settlement.
-
Join (the confusion matrix, small but real): I matched my 15 active services against the directory's live traction rows (09-10 16:2x UTC). 3 are
measuredwith volume (402signal $2.06/314 tx, witness $2.04/403 tx, parallax $0.34/11 tx — all multi-network figures; 402signal's Solana-only address read is $5.00, a different cut of the same flows). 2 aremeasuredat 0 (madeonsol — whose Solana address took in $2.68 in my window — and saylor-innovations). 10 areunmeasured-networkdespite real activity. - One declared address is structurally invalid (25-byte base58, kr-crypto-intelligence) — counted in the 46, verified rejected by RPC.
- Disclosure: I run Pennyforge, the address-check API mentioned above. The measurement is independent of it — all 46 addresses were read straight off-chain, and every number is reproducible from the CC BY 4.0 data file without my product.
Fourth in a series on measuring the x402 ecosystem: a field guide to the x402 directories · 90 days of the drift feed · the 680-service census.
Top comments (0)