|=[ HOW MUCH STEALTH DOES A STEALTH ADDRESS GET YOU? :: METHODOLOGY ]=
METHODOLOGY.
How every number in How Much Stealth Does a Stealth Address Get You? was produced: every stage of the analysis, what was measured, and the numbers behind each claim.
DATA · OCT 2021 → SEP 2026 · MAINNET + L2s
RE-INDEX EVERYTHING FROM GENESIS
All data is public: raw eth_getLogs re-indexes, public explorer
APIs, the public ENS ReverseRecords contract, and public web endpoints. No private endpoints,
no privileged access.
Every protocol's event logs were pulled raw via JSON-RPC and decoded independently: Umbra 11,714 registrations + 24,992 announcements on mainnet plus 266,339 L2 announcement logs (266,321 unique stealth addresses); Fluidkey 83,020 module logs and 117,664 decoded fund movements; Cloaked 12,951 orchestrator intent logs with 550 of 573 multi-EOA spends fully decoded. Explorer APIs were used for labels only, never for measurements.
The mainnet essay is the small print
Umbra stealth payments per chain, genesis – Aug 2026 · 266k L2 announcements = 10.7× mainnet volume
REVERSE-RESOLVE THE REGISTRY
Every Umbra registrant address (~40k ENS reverse-resolutions) was checked for a public ENS name. Result: 37.0% of mainnet registrants registered from ENS-named wallets, and the May–July 2022 crisis cohort was 51.3% named against a 37% baseline.
Privacy panics in a crisis
Umbra stealth-key registrations on Ethereum mainnet, weekly, Oct 2021 – Aug 2026
FOLLOW THE MONEY OUT
Full transaction histories for every mainnet stealth address via the public explorer API (25k+ addresses). Withdrawals were classified by destination: is it a registered key-holder? an active sender? the original sender itself?
| Heuristic | Result | Statistical note |
|---|---|---|
| Withdrawal to registered key-holder | 8,932 stealth addresses (35.7% of all) | destination is itself in the public StealthKeyRegistry |
| Withdrawal to active Umbra sender | 41.5% of all withdrawals | recipient is a visible public actor |
| Self-payment loops | 391 users paid themselves | 174 from ENS-named wallets |
| Same-block sweeps | 1,102 stealth pairs | ~20 expected by chance → 55× lift over null |
| Destination clustering (union) | 48.3% of active stealth addresses | largest cluster: 131 addresses |
| ENS-named registrants | 4,286 / 11,578 (37.0%) | reverse-resolved via public ReverseRecords contract |
| ENS-named payments | 21.3% of all payments | naming propagation from registrant set |
WELD ADDRESSES INTO PEOPLE
Shared withdrawal destinations plus same-block sweeps were used to cluster stealth addresses into single-owner groups. Every heuristic was run against shuffled controls: 265 same-block withdrawal pairs observed against ~5 expected by chance (55× lift). Union result: 48.3% of active mainnet stealth addresses fall into clusters; the largest spans 131 addresses.
How much gets linked, per protocol
share of the population an observer can weld to a common owner or known wallet, public data only
THE NUMBERS THEMSELVES TALK
| Fingerprint | Finding | Null model |
|---|---|---|
| Exact wei repeats | 455 distinct values across 1,617 payments (6.9% of ETH payments) | collision probability ≈ 2⁻⁶⁰; every repeat is a proven relationship |
| Fiat price-point families | 108 families | e.g. 70 payments in 0.00445–0.00455 ETH over 13 months = one merchant's revenue |
| Fluidkey dust suffixes | .552850 family: 12 Safes | balances decrement in exact 9-USDC steps |
THREE MOMENTS A SAFE GETS LINKED
Each edge type was computed independently, with protocol-internal counterparties (earn vaults, share burns) excluded: naively counted, those fake-link 91% of users. CEX hot wallets were identified by extreme nonce and fan-out (a 478,873-nonce wallet funding thousands of strangers proves nothing; a quiet 74-nonce wallet that seeded 836 Safes proves everything).
Three ways a Fluidkey Safe gets welded
Safes linked per edge type, out of 31,263 censused. The weld happens at birth, at the funder, and at the destination
| Weld type | Safes linked | Share | Note |
|---|---|---|---|
| Shared cash-out destination | 6,293 | 23.3% of active | decoded from 117,664 fund movements out of 27,013 active Safes |
| Shared personal-wallet funder | 5,026 | — | CEX hot wallets excluded by nonce/fan-out heuristic |
| Born together (atomic co-init) | 3,335 | 10.7% of census | 1,224 transactions initialized multiple Safes atomically |
| Union of all three | 12,697 | 44.3% of observable | edge types overlap; union < sum |
CONSOLIDATION IS A FEATURE, AND A CONFESSION
573 multi-EOA spend transactions; 550 fully decoded from calldata, 100% coherent single-user consolidations. 40.1% of Base spenders and 61.1% of Ethereum spenders welded their accounts in the act of spending; one user merged 51 one-time addresses in a single transaction.
One click, one identity
largest single-user merge clusters: stealth EOAs welded together in shared EIP-7702 spends, top 10 per chain
NAMING-LAYER ORACLES
| Channel | What leaks | Scale |
|---|---|---|
| CCIP gateway oracle | name existence (address vs zero) | dictionary probeable |
| username.clkd.id web app | name existence (200 vs 404) | faster oracle |
| Google index | usernames with no probing at all | site:clkd.id |
| Result | 69 registered usernames recovered | from ~9,000 probes; 0 of 105 CT influencer handles registered |
| Seed harvesting | 1,475 live receive addresses | across 59 known usernames; weekly re-check watchlist |
THE STITCH
Every address set was intersected across protocols and across chains. The address layer is perfectly firewalled (zero overlaps); the wallet layer is not.
| Join | Result |
|---|---|
| Umbra ∩ Fluidkey wallets | 8 addresses (3 ENS-named: ckxpress.eth, leo888.eth, zyrav21.eth) |
| Cloaked EOAs merged on Base AND Ethereum | 115 |
| Cross-protocol address reuse | 0 across every address set held |
WHAT DOESN'T LEAK
Null results are published as credibility for the positive ones:
| Checked | Result |
|---|---|
| Ephemeral-key reuse (Umbra) | 3 cases in 25,000 payments |
| Stealth-to-stealth payment chains | ≈ 0 |
| Cryptographic-layer failures | none in any system |
EXTENDING THE WITHDRAWAL ANALYSIS TO 266K L2 ANNOUNCEMENTS
The mainnet withdrawal analysis was extended to all four L2s. Method: (1) nonce
prefilter via batched eth_getTransactionCount on dRPC, dropping addresses that
never sent a transaction; (2) full transaction history pull for the survivors via Etherscan
V2. A pure-RPC token-sweep scan was evaluated and rejected: dRPC kills selective log scans
beyond ~10k-block ranges, making it slower than the pull it would replace.
| Chain | Censused payments | Unique stealth addrs | Nonce = 0 (dropped) | Nonce > 0 (pull list) | Withdrawal txs pulled |
|---|---|---|---|---|---|
| Base | 5,604 | 5,604 | 1,637 (29.2%) | 3,967 | done |
| Optimism | 58,048 | 58,048 | 4,199 (7.2%) | 53,849 | done |
| Arbitrum | 100,138 | 100,138 | 11,587 (11.6%) | 88,551 | done |
| Polygon | 102,549 | 102,531 | 48,074 (46.9%) | 54,457 | done |
| Total | 266,339 | 266,321 | 65,497 dropped (24.6%) | 200,824 | all 4 chains |
The welding heuristics (shared destinations, same-block sweeps, amount families) ran over all four L2 graphs: 73.3% of active L2 receivers are linkable (Arbitrum 76.0%, Base 77.4%, Optimism 69.8%, Polygon 72.2%), replacing the 2023 paper's 25.8–65.7% estimate with measured values.