Measured, not announced
The onchain agent economy
We don't just list what agents are built from. This is what we can actually observe on-chain: how many agent identities exist, what their wallets do after registering, which products are producing them, and what settles.
Week 2026-W36 · last collected 2026-09-01 · every figure below carries its method, evidence tier and sample size. Take the data (CC-BY).
How to read this page
- Nothing here adds up, on purpose. An ERC-8004 registration, an Olas staked service, a Virtuals token launch and a paid Mech task are four different objects. There is no total on this page and there is none in the export.
- Every number names its stage. “58,400 agents” is false. “19,180 launched, 1,233 graduated” is true.
- A sampled rate is never multiplied by a population. You will not find an “estimated active agents” figure here, because we would be making it up.
- Unknown is a value. Where a public node prunes its history we say unknown. It never rounds to zero.
- Everything here is EVM-shaped. Solana is not covered — and by transaction count, x402 mostly settles there.
The lifecycle of a registered agent
Registering is itself a transaction, so “has this agent ever transacted?” trivially returns 100% and means nothing. Each wallet is compared against its own registration count instead: the registry is an ERC-721, so balanceOf(owner) is exactly how many agent ids that wallet holds. Per chain, never blended — the chains disagree sharply and a blended rate would hide it.
BNB Chain
sample covers 0.02dnew this window: unknown — the public node prunes this chain's history
Of a sample of 19 owner wallets
n=19 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
n=19 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
n=19 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
the rate sample looked at 0.1% of the window's blocks, spread evenly across it — it estimates RATES and is not a census (use registered_new_in_window for counts); only 1 of 12 time segments were readable from a keyless node (public nodes prune history), so the sample covers 0.02 days, not 30; 1 segment(s) hit the per-segment cap, so segment counts are floors — the RATES remain valid, the counts are not a census
Base
sample covers 27.72d+23,066 in the last 30 days
Of a sample of 75 owner wallets
the rate sample looked at 11.7% of the window's blocks, spread evenly across it — it estimates RATES and is not a census (use registered_new_in_window for counts); 12 segment(s) hit the per-segment cap, so segment counts are floors — the RATES remain valid, the counts are not a census; 2 owner wallet(s) could not be read and are excluded from the denominator
Ethereum
sample covers 28.61d+3,696 in the last 30 days
Of a sample of 2 owner wallets
n=2 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
n=2 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
n=2 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
the rate sample looked at 43.7% of the window's blocks, spread evenly across it — it estimates RATES and is not a census (use registered_new_in_window for counts); 11 segment(s) were only partially scanned before the request budget ran out; 1 segment(s) hit the per-segment cap, so segment counts are floors — the RATES remain valid, the counts are not a census
Gnosis
sample covers 30.07d+16 in the last 30.07 days
Of a sample of 1 owner wallets
n=1 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
n=1 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
n=1 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
Avalanche
sample covers 27.92d+17 in the last 30.23 days
Of a sample of 0 owner wallets
n=0 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
n=0 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
n=0 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
the rate sample looked at 4.0% of the window's blocks, spread evenly across it — it estimates RATES and is not a census (use registered_new_in_window for counts); 12 segment(s) were only partially scanned before the request budget ran out
Arbitrum
sample covers 28.74d+214 in the last 30.08 days
Of a sample of 7 owner wallets
n=7 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
n=7 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
n=7 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
the rate sample looked at 45.5% of the window's blocks, spread evenly across it — it estimates RATES and is not a census (use registered_new_in_window for counts); 11 segment(s) were only partially scanned before the request budget ran out; 1 segment(s) hit the per-segment cap, so segment counts are floors — the RATES remain valid, the counts are not a census; 2 owner wallet(s) could not be read and are excluded from the denominator
Polygon
sample covers 0.66dnew this window: unknown — the public node prunes this chain's history
Of a sample of 0 owner wallets
n=0 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
n=0 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
n=0 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
the rate sample looked at 2.2% of the window's blocks, spread evenly across it — it estimates RATES and is not a census (use registered_new_in_window for counts); only 1 of 12 time segments were readable from a keyless node (public nodes prune history), so the sample covers 0.66 days, not 30; 1 segment(s) were only partially scanned before the request budget ran out
Optimism
sample covers 28.38d+7 in the last 30 days
Of a sample of 0 owner wallets
n=0 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
n=0 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
n=0 — below the 20-observation threshold. Shown because hiding it would be worse; not a finding.
the rate sample looked at 35.2% of the window's blocks, spread evenly across it — it estimates RATES and is not a census (use registered_new_in_window for counts); 12 segment(s) were only partially scanned before the request budget ran out
The venues
Each venue counts a different object and charges a different price of entry. Free and permissionless is not the same market as bonded, and a launchpad is not a registry.
ERC-4337 smart-account infrastructure
105 confirmed contracts
One unit = one deployed smart account
51,874deployed · Base · largest of 5 chains
ERC-8004 Identity Registry
11 confirmed contracts
One unit = one registered agent id
324,930registered · BNB Chain · largest of 8 chains
Overlaps with olas — these populations intersect. Never add them.
Morpheus / Lumerin
0 confirmed contracts
One unit = one GPU provider or model (NOT an agent)
unknownnothing readable
Olas (Autonolas)
8 confirmed contracts
One unit = one deployed service (a running agent service, not a blueprint)
3,795registered · Gnosis · largest of 5 chains
Overlaps with erc8004 — these populations intersect. Never add them.
SingularityNET service registry
0 confirmed contracts
One unit = one paid gRPC service endpoint (NOT an agent)
unknownnothing readable
Virtuals Protocol
2 confirmed contracts
One unit = one agent-token LAUNCH at stage 1; one graduated agent NFT at stage 2. These are different objects and must never be conflated.
19,180launched · Base
x402 payment rail
4 confirmed contracts
One unit = one settlement (a machine paying a machine for an HTTP request)
135,166settlements to catalogued sellers · Base
Catalogued and not measurable
An absent fingerprint is a finding, not a gap to hide. These venues are listed with the architectural reason they cannot be censused from chain data.
Conversion — the one comparable
Raw size is not comparable across venues. Stage-to-stage conversion is, and it is the more interesting number: it says what share of the things that entered actually became something. Rates computed on fewer than 20 observations are excluded from this table — they exist in the data, they are just not findings.
| Venue | From → to | Rate | Counts | Evidence |
|---|---|---|---|---|
| ERC-8004 Identity RegistryBase | sampled owner wallets → active beyond registering | 86.7% | 65 / 75 | Indicator the rate sample looked at 11.7% of the window's blocks, spread evenly across it — it estimates RATES and is not a census (use registered_new_in_window for counts); 12 segment(s) hit the per-segment cap, so segment counts are floors — the RATES remain valid, the counts are not a census; 2 owner wallet(s) could not be read and are excluded from the denominator |
| x402 payment railBase | catalogued sellers → paid at least once | 78.3% | 785 / 1,002 | Indicator Out of 1002 catalogued EVM payTo addresses. Receiving USDC is evidence of a paying customer, not proof the payment came through x402. |
| Virtuals ProtocolBase | launched → graduated | 6.4% | 1,233 / 19,180 | Proof Denominators differ: launched counts BondingV5 only, graduated counts every bonding version. The widely-quoted 2.1% divides the same graduations by an all-versions launch total we have never read. |
Where the activity is
Where agent activity actually happens, versus where the announcements happen. The empty and unknown rows are kept in.
BNB Chain
Base
Ethereum
Gnosis
Avalanche
Arbitrum
Polygon
Optimism
Bars are scaled against the largest single figure on the page, and the bar label names the stage each figure counts. They are not comparable across venues — a registered agent id, a token launch and a USDC settlement are different objects — and nothing on this page adds them together.
How much of this we cannot attribute
Of 70,941 smart-account deployments sampled across five chains this week, only 13.2% can be attributed to a product in our directory. Safe alone accounts for 73.7% and has no listing here. A further 12.9% comes from factory addresses we do not recognise at all.
11 of 34 confirmed contracts have no directory listing to attribute them to. And five wallet-infrastructure providers — Privy (server and embedded), Turnkey, Coinbase CDP Server Wallets, Dynamic and Fireblocks — are structurally unmeasurable: they mint ordinary EOAs, and when their user deploys a smart account the factory belongs to a different company. So this leaderboard covers account-abstraction vendors well and wallet-infrastructure vendors not at all. That is a property of the architecture, not a gap we can close with more effort.
What this data cannot settle
- Whether a registered agent is an agent. Registration is permissionless and free on most of these venues. It proves an entry exists, not that software runs behind it.
- BNB Chain, which holds most of the ids. Its count is exact and daily; its lifecycle is not measurable over a 30-day window from any keyless endpoint we could find — the log archive is roughly two hours deep.
- Anything on Solana. Every method here is an EVM method. Any claim about “the agent economy” built only from this page is EVM-shaped and should say so.
- Whether a smart account is an agent. Across 1,250 sampled smart accounts on five chains, one held an ERC-8004 agent id or paid a catalogued x402 seller in the same week. Smart-account infrastructure and onchain agents are, so far, almost entirely separate populations.
- Who runs a wallet. These are observations of public software. No identities, no IPs, no per-caller profiles.
Join the Sato Hub Briefing
One email a week — the agents, tools, and infrastructure that actually shipped, and why they matter.