Anonymity sets

A privacy pool hides you among everyone whose deposit or note could be yours. That crowd is your anonymity set: the larger it is, the weaker a watcher's guess. This page counts it for six projects, from their own contracts and nodes.

  • 6 projects
  • 82 pools and trees
  • 11 blockchains
  • 9 charts

The last daily reading was on 18 Oct 2026, 01:23 UTC. Information only, not investment advice.

What an anonymity set is

When you take money out of a privacy pool, a watcher sees the withdrawal but not which deposit it came from. Everyone whose deposit could be the one is part of your anonymity set. With three candidates, a watcher has a one-in-three guess; with thousands, the guess is close to worthless.

How it works explains the idea in The basic trick: the pool, and Where privacy still leaks explains why the real crowd is often smaller than any count.

No project publishes one agreed figure, so this page uses the counter each design keeps on its own chain and says which it is. Counts from different designs do not compare directly: a deposit, a note and a ring member are different things.

The counts used here

Deposits since launch
Every deposit a pool has taken, from the contract's own counter. In a pool of fixed amounts, a withdrawal could come from any earlier deposit of the same size.
Unspent notes
Deposits not yet withdrawn: the pool's balance divided by its fixed amount. A stricter count, although nobody can see which deposits they are.
Note commitments
Pools that take any amount record each note they create in a Merkle tree. Change and dummy notes count too, so this measures notes, not people.
Ring members
Monero hides each coin it spends among decoys picked from earlier outputs. Every ring now has 16 members: the real one and 15 decoys.

Current pool sizes

The latest daily reading for each pool, with where and when it was read. Each row is its own crowd: a note in one pool gives no cover in another, so the rows do not add up.

PoolSet sizeWhat it countsHeldSourceRead
Tornado Cash
0.1 ETH, Ethereum6,235Notes not yet withdrawn, of 74,380 deposits623.5 ETHPublicNode18 Oct 2026, 01:23 UTC
1 ETH, Ethereum4,303Notes not yet withdrawn, of 95,779 deposits4,303 ETHPublicNode18 Oct 2026, 01:23 UTC
10 ETH, Ethereum2,291Notes not yet withdrawn, of 78,242 deposits22,910 ETHPublicNode18 Oct 2026, 01:23 UTC
100 ETH, Ethereum2,253Notes not yet withdrawn, of 48,807 deposits225,300 ETHPublicNode18 Oct 2026, 01:23 UTC
15 other pools on Ethereum591Notes not yet withdrawn, of 16,828 deposits, in DAI, cDAI, USDC, USDT and WBTC poolsBy poolPublicNode18 Oct 2026, 01:23 UTC
Pools on six other chains9,997Notes not yet withdrawn, of 318,875 depositsBy chainPublicNode18 Oct 2026, 01:23 UTC
Nova, Gnosis47,940Note commitments, two per transaction, in a pool of any amount463.06 WETHPublicNode18 Oct 2026, 01:23 UTC
Railgun
Ethereum289,861Note commitments in the contract's trees20,185 WETH, 30,193,748 USDTAll tokens readPublicNode18 Oct 2026, 01:23 UTC
BNB Chain53,831Note commitments in the contract's trees565.17 WBNB, 223,118 USDTAll tokens readPublicNode18 Oct 2026, 01:23 UTC
Polygon91,324Note commitments in the contract's trees653,377 WPOL, 215,585 USDCAll tokens readPublicNode18 Oct 2026, 01:23 UTC
Arbitrum130,659Note commitments in the contract's trees687.58 WETH, 801,162 USDCAll tokens readPublicNode18 Oct 2026, 01:23 UTC
Zcash
Sapling73,986,586Note commitments in the pool's tree474,372 ZECZecStats18 Oct 2026, 01:21 UTC
OrchardClosed to new value50,476,893Note commitments in the pool's tree350,222 ZECZecStats18 Oct 2026, 01:21 UTC
Ironwood797,547Note commitments in the pool's tree4,116,711 ZECZecStats18 Oct 2026, 01:21 UTC
Sprout–No tree in the data read here22,309 ZECZecStats18 Oct 2026, 01:21 UTC
Privacy Pools
ETH, Ethereum6,274Deposits since launch; 7,282 withdrawals789 ETHPublicNode18 Oct 2026, 01:23 UTC
13 other pools on Ethereum1,615Deposits since launch, each pool its own setBy poolPublicNode18 Oct 2026, 01:23 UTC
Eight pools on four other chains696Deposits since launch, each pool its own setBy poolPublicNode18 Oct 2026, 01:23 UTC
Association set, Ethereum6,903Deposits approved by 0xbow across the 14 Ethereum pools, checked once–IPFS file of the latest root16 Oct 2026, 07:55 UTC
Privacy Cash
SOL, Solana860,000Note commitments, two per transaction9,457 SOLPublicNode18 Oct 2026, 01:23 UTC
USDC, Solana98,340Note commitments, two per transaction586,591 USDCPublicNode18 Oct 2026, 01:23 UTC
Seven other token trees14,440Note commitments, each token its own setBy tokenPublicNode18 Oct 2026, 01:23 UTC
Monero
Every transaction input16Ring members: the real output and 15 decoys–Monero READMEConsensus rule since 13 Aug 2022
RingCT outputs165,764,651Outputs on the chain that decoys are drawn from–xmr-node.cakewallet.com18 Oct 2026, 01:22 UTC

Tornado Cash

Tornado Cash takes only fixed amounts, and each amount has its own pool: a withdrawal of 1 ETH hides only among deposits of 1 ETH. Each contract counts its deposits, and its balance divided by the fixed amount gives the notes still inside. A withdrawal could come from any earlier deposit in the same pool; the notes still inside are a stricter count, although nobody can see which deposits they are.

TVL on DefiLlama: $681.3M on 18 Oct 2026 (Data: DefiLlama). Tornado Cash profile.

Unspent notes in the ETH pools on Ethereum

Each pool's balance divided by its fixed amount, read once a day from the contracts. No free source gives the pools' past balances, so the chart starts with the first daily reading.

Deposits since launch, ETH pools on Ethereum

Each contract's own deposit counter (nextIndex), read once a day. The first deposit in the 1 ETH pool was made on 16 Dec 2019.

Pools on Ethereum

PoolDeposits since launchWithdrawnUnspent notesHeld
0.1 ETH74,38068,1456,235623.5 ETH
1 ETH95,77991,4764,3034,303 ETH
10 ETH78,24275,9512,29122,910 ETH
100 ETH48,80746,5542,253225,300 ETH
100 DAI471399727,200 DAI
1,000 DAI1,3741,255119119,000 DAI
10,000 DAI3,4453,3381071,070,000 DAI
100,000 DAI4,3854,319666,600,000 DAI
5,000 cDAI53210,000 cDAI
50,000 cDAI11811800 cDAI
500,000 cDAI878521,000,000 cDAI
5,000,000 cDAI11411400 cDAI
100 USDC395349464,600 USDC
1,000 USDC9349082626,000 USDC
100 USDT97887610210,293 USDT
1,000 USDT2,1222,0873535,010 USDT
0.1 WBTC15615330.3 WBTC
1 WBTC1,0421,03933 WBTC
10 WBTC1,2021,194880 WBTC

Withdrawn is deposits minus unspent notes. cDAI is held as cDAI. Read at Ethereum block 26,216,135 on 18 Oct 2026, 01:23 UTC.

Other chains

ChainPoolsDeposits since launchUnspent notesHeld
BNB Chain4281,7878,48978,100 BNB
Arbitrum46,798419229.1 ETH
Optimism41,0837011.5 ETH
Gnosis41,6608246,900 xDAI
Polygon420,422779442,400 POL
Avalanche37,1251585,110 AVAX

The same contracts, with the chain's own coin in each pool. Tornado Cash Nova on Gnosis takes any amount, so it has no count of notes: on 18 Oct 2026, 01:23 UTC its tree held 47,940 note commitments, two per transaction, and 463.06 WETH.

Railgun

Railgun keeps shielded balances as private notes inside one contract per chain. Every shield and private transfer adds note commitments to the contract's Merkle trees; a tree holds 65,536 leaves before the next one starts, and the counts below add the trees up. Notes of any amount and any token share a chain's trees.

TVL on DefiLlama: $112.2M on 18 Oct 2026 (Data: DefiLlama). Railgun profile.

Note commitments by chain

Read from each chain's contract once a day. Before that, the count at the end of the first day of each month, from the quick-sync index the Railgun wallet uses.

Notes, not people

A note commitment is created for every output of a shield or a private transfer, including the change sent back to the sender, so one person can account for many. The count says how many notes a spend could be hidden among, not how many people use Railgun.

Tokens held by the contract

ChainNote commitmentsMain tokens heldRead
Ethereum289,86120,185 WETH; 30,193,748 USDT; 16,810,286 USDC; 4,989,106 DAI; 32.93 WBTC18 Oct 2026, 01:23 UTC
BNB Chain53,831565.17 WBNB; 223,118 USDT; 33,889 USDC18 Oct 2026, 01:23 UTC
Polygon91,324653,377 WPOL; 215,585 USDC; 18,628 USDC.e; 72,023 USDT18 Oct 2026, 01:23 UTC
Arbitrum130,659687.58 WETH; 801,162 USDC; 399,142 USDT18 Oct 2026, 01:23 UTC

Railgun wraps each chain's own coin, so ETH, BNB and POL appear as WETH, WBNB and WPOL. The contract on Ethereum also holds hundreds of smaller tokens that are not read here.

Zcash

Zcash has its shielded pools built into the coin. Each pool keeps a note commitment tree, and every shielded output adds a leaf, including the change and dummy outputs that wallets add. Since the NU6.3 upgrade on 28 Jul 2026 (height 3,428,143), no new value may enter Orchard; value can leave it, including into Ironwood, so Orchard's fall reflects that move rather than people leaving the shielded pools. Sprout, the first pool, has no tree in the data read here.

Zcash profile.

ZEC held in each shielded pool

Daily since 29 Oct 2018 from zeczcash.com; the latest value from ZecStats. Data: ZecStats (https://zecstats.org), CC BY 4.0.

Note commitments in each tree

Tree sizes from the zec.rocks lightwalletd servers, which must agree on the height: on the first day of each month before daily readings began, then daily.

PoolZEC heldNote commitmentsRead
Sapling474,372 ZEC73,986,58618 Oct 2026, 01:21 UTC
Orchard350,222 ZEC50,476,89318 Oct 2026, 01:21 UTC
Ironwood4,116,711 ZEC797,54718 Oct 2026, 01:21 UTC
Sprout22,309 ZEC–18 Oct 2026, 01:21 UTC

Privacy Pools

Privacy Pools, run by 0xbow, takes any amount, with one pool per asset and chain. Each pool counts its deposits, and its state tree adds a leaf for every deposit and every withdrawal, so the difference gives the withdrawals. To withdraw privately, a user proves that their deposit is in the association set, the list of deposits 0xbow has approved; a deposit left out can still be taken back, but only in public.

TVL on DefiLlama: $9.4M on 18 Oct 2026 (Data: DefiLlama). Privacy Pools profile.

Deposits since launch

Each pool's deposit counter (the label nonce), read once a day from the contracts. No free source gives the counters' past values, so the chart starts with the first daily reading.

The association set

At 16 Oct 2026, 07:55 UTC (Ethereum block 26,203,736), the association set held 6,903 approved deposits, shared by the 14 pools on Ethereum; 5,315 of the ETH pool's 6,230 deposits were in it. This was checked once, from the file named by the latest root on chain, through a public IPFS gateway meant only for testing, so it is not updated daily.

Pools

PoolChainDeposits since launchWithdrawalsHeld
ETHEthereum6,2747,282789 ETH
USDTEthereum5201,0786,840,347 USDT
USDCEthereum8931,839408,571 USDC
DAIEthereum854,534 DAI
USDSEthereum18122,483 USDS
sUSDSEthereum1161,250 sUSDS
wstETHEthereum454545.79 wstETH
wBTCEthereum690.0554 wBTC
USDeEthereum110 USDe
USD1Ethereum411,350 USD1
frxUSDEthereum9910,149 frxUSD
WOETHEthereum422.07 WOETH
fxUSDEthereum76114710.67 fxUSD
BOLDEthereum202749,861 BOLD
ETHOptimism75800.089 ETH
USDCOptimism901182,672 USDC
BNBBNB Chain32180.0701 BNB
USDTBNB Chain40852.45 USDT
ETHArbitrum1872803.82 ETH
USDCArbitrum23634828,657 USDC
yUSNDArbitrum332768 yUSND
ETHBase320.01 ETH

Withdrawals is the state tree's leaves minus deposits. Each withdrawal leaves a new note for any value still in the pool, so a deposit can be withdrawn in parts and withdrawals can outnumber deposits. None of the pools has been wound down. The pool on Base is deployed but not listed in the web app.

Privacy Cash

Privacy Cash runs on Solana, with one Merkle tree per token, so each token is a separate crowd. Each transaction adds two note commitments, so the counts are about twice the number of transactions. SOL is held by the program's pool account and the other tokens in vaults owned by its configuration account.

TVL on DefiLlama: $1.9M on 18 Oct 2026 (Data: DefiLlama). Privacy Cash profile.

Note commitments by token tree

Each tree's next index, read once a day from Solana. No cheap source gives past values, so the chart starts with the first daily reading.

Other chains

DefiLlama also lists Privacy Cash on Ethereum, Base, BNB Chain and Robinhood Chain. Those deployments are not read here: their contract addresses have not been checked against a primary source.

Token trees

TokenNote commitmentsHeld
SOL860,0009,457 SOL
USDC98,340586,591 USDC
USDT9,42218,127 USDT
ZEC1,0701.67 ZEC
ORE2,238510.28 ORE
stORE158600.08 stORE
stORE (legacy)1,52294.42 stORE
jlUSDC1816 jlUSDC
jlWSOL120.04 jlWSOL

SOL is shown without the account's rent deposit. Read on 18 Oct 2026, 01:23 UTC.

Monero

Monero has no pool to join: every transaction hides its inputs. Each coin spent is signed for as one member of a ring of earlier outputs, and since the v15 upgrade at height 2,688,888 on 13 Aug 2022, every ring has exactly 16 members. The ring size is a consensus rule, so it is shown as a dated constant from the Monero README rather than measured.

Monero profile.

16ring members for every input, the real output and 15 decoys, since 13 Aug 2022. The nodes read report hard fork version 16, so the rule still applies.

Ring size required by consensus

From the upgrade table in the Monero README: at least 3 from 22 Mar 2016, 5 from 16 Sep 2017 and 7 from 6 Apr 2018, then exactly 11 from 18 Oct 2018 and 16 from 13 Aug 2022.

RingCT outputs on the chain

Decoys are drawn from these outputs, and FCMP++ would make all of them the set. Every 64,800 blocks (about 90 days) from the start of RingCT at height 1,220,516, then daily, from public nodes checked against each other.

FCMP++

Full-chain membership proofs (FCMP++) would replace rings with a proof that the coin spent is one of all the outputs on the chain. In April 2024 the Monero Project described this as taking each input from an immediate anonymity set of 16 to about 100 million. FCMP++ is being tested on public test networks: the latest stressnet release is v0.19.0.0-beta.3.0 (25 Sep 2026), and the fcmp++ hf milestone had 29 of 42 issues closed on 18 Oct 2026 and no due date. The README's upgrade table lists no mainnet height for it.

FromHeightUpgradeRing size
22 Mar 20161,009,827v2At least 3
16 Sep 20171,400,000v6At least 5
6 Apr 20181,546,000v7At least 7
18 Oct 20181,685,555v8Exactly 11
13 Aug 20222,688,888v15Exactly 16

What this does not tell you

  • Deposits, notes and outputs are not people. One person can make many deposits, and wallets add change and dummy notes: Zcash counts every shielded output, and Privacy Cash adds two commitments to every transaction.
  • The crowd that matters is smaller than the count. A withdrawal can only come from a deposit made before it, and in pools of any amount a deposit of a different size or token can often be ruled out.
  • Habits shrink it further. Timing, amounts, fees and reused addresses can single out a user however large the pool, as Where privacy still leaks explains.
  • Sets do not add up. Each pool, token and chain is its own crowd: a note in the 1 ETH pool gives no cover to a 10 ETH withdrawal, and Railgun notes on Polygon give none on Ethereum.
  • Value is not users. A few large holders can account for most of a pool's balance.
  • Monero's figure is per input. Each input hides among its ring of 16; the outputs count is where decoys are drawn from, not a set that any one transaction hides in today.
  • Privacy Pools' private withdrawals rely on 0xbow. A withdrawal that uses the association set hides only among the deposits 0xbow has approved.
  • These are daily readings, not a census. Most figures come from one public node once a day, and a node can be wrong or behind; only the Zcash trees and Monero's outputs are checked against a second server. Most series start on 16 Oct 2026.
  • Nothing here rates a project's safety or says anything about its legal status where you live.

Sources and method

How each figure is read

Tornado Cash
Each of the 42 pool contracts on seven chains for its fixed amount (denomination), its deposit counter (nextIndex) and its balance, and Nova's tree and balance: one batch per chain through PublicNode (dRPC as the fallback on Ethereum), all at the same block. Daily.
Railgun
The contract on each of four chains for its tree number and next leaf (treeNumber, nextLeafIndex) and its balance of 15 tokens, through PublicNode. Daily; monthly history from the Railgun quick-sync index.
Zcash
Pool balances from ZecStats (ZcashInfo as the fallback), with daily history from zeczcash.com; tree sizes from GetLatestTreeState on two lightwalletd servers, decoded from each tree's frontier. Daily; monthly history of the trees.
Privacy Pools
Each of the 22 pools on five chains for its deposit counter (nonce), the size of its state tree (currentTreeSize), whether it has been wound down (dead) and its balance, through PublicNode. Daily. The association set was counted once.
Privacy Cash
The pool account and nine tree accounts, then eight vaults, on Solana through PublicNode (the Solana Foundation as the fallback). Daily.
Monero
The ring size from the README; RingCT outputs from get_output_distribution on two public nodes; the FCMP++ milestone and releases from the GitHub API. Daily; outputs every 64,800 blocks before that.

Cadence and downloads

The daily job reads every source once, after 01:20 UTC, and keeps one reading per day. The last run was on 18 Oct 2026, 01:23 UTC, and every source was read. The series behind the charts and the latest reading of each are in anonymity.json, under the site's licence and credits.

Contract addresses come from each project's own code and documentation, and the amounts and decimals are checked against the contracts when they are read. The contracts and endpoints were checked on 16 Oct 2026.

Sources

Tornado Cash

Railgun

Zcash

Privacy Pools

Privacy Cash

Monero

Terms of the services read