Search for projects by name or address
A selective-disclosure privacy system for Ethereum that adds compliance-aware association sets.
A selective-disclosure privacy system for Ethereum that adds compliance-aware association sets.
Privacy Pools is a non-custodial privacy protocol on Ethereum built around asset-specific pools and private withdrawals, adding compliance by whitelisting all legitimate deposits. A deposit creates a commitment, which is represented by secret and nullifier, and a later withdrawal uses a zero-knowledge proof to spend that commitment, either partially or in full, without revealing the matching deposit. Losing the secret and the nullifier would effectively mean losing deposited tokens.
Privacy Pools are controlled by a 2/4 multisig, which has authority to stop deposits and manage the deposit whitelist, but users always have an option to publicly withdraw deposited tokens, linking their withdrawal to their deposit.
Privacy Pools protocol supports relayed withdrawals, in which relayer processes withdrawals on user’s behalf for a fee, which enables sending funds to fresh addresses.
Practical privacy also depends on the timing and amounts of deposits and withdrawals, underlying network and browser used to interact with Privacy Pools frontend (if used), RPC providers used to send transactions and query public blockchain state. Users are advised to research OPSEC best practices.
Privacy Pools charges a mandatory onchain vetting fee on deposits and caps relayed-withdrawal fees per asset:
The vetting fees are accumulated in the Entrypoint and can be withdrawn by its owner. Relayer fees are paid on withdrawals to the selected relayer and cannot exceed the per-asset cap; relayers can still choose their own quote below that cap and users can self-relay to not pay the fee.
The main feature of Privacy Pools is compliance, which is enforced through the ASP. Association set is a whitelist of deposits that are allowed to be withdrawn from the protocol. This set is managed in real time by the provider, which is currently a single entity. The full association set is published via IPFS, only its Merkle root is posted onchain. User’s deposit could be excluded from the whitelist at any moment, in this case the user can still ragequit, i.e. publicly withdraw deposited funds and link them to their deposit.
ASP is designed to vouch that withdrawals from Privacy Pools are not related to any known illegal activity.
The anonymity set consists of all whitelisted deposits of the same token with the value greater than the withdrawal amount. Note that only deposits approved by the ASP add to the anonymity set. To maximize the anonymity set, users are recommended to withdraw smaller amounts and deposit popular tokens.
2025 May 26 — 2026 May 26
2025 May 25 — 2026 May 26
Asset | Deposits 7D | Deposits 30D | Deposits Total | Value Locked |
|---|---|---|---|---|
USDT | 9 $13.72 K | 57 $1.37 M | 150 $3.90 M | $3.34 M |
ETH | 28 $100.04 K | 154 $451.99 K | 4.09 K $9.57 M | $1.59 M |
USDC | 23 $129.32 K | 95 $464.12 K | 545 $3.12 M | $1.51 M |
wstETH | 0 $0.00 | 2 $2.35 K | 35 $311.03 K | $69.16 K |
BOLD | 0 $0.00 | 0 $0.00 | 20 $50.42 K | $49.84 K |
frxUSD | 0 $0.00 | 0 $0.00 | 9 $11.73 K | $10.64 K |
wOETH | 0 $0.00 | 0 $0.00 | 4 $12.88 K | $4.93 K |
USDS | 0 $0.00 | 3 $5.31 K | 17 $13.01 K | $2.48 K |
sUSDS | 0 $0.00 | 0 $0.00 | 11 $4.83 K | $1.77 K |
USD1 | 0 $0.00 | 0 $0.00 | 4 $2.33 K | $1.34 K |
DAI | 0 $0.00 | 0 $0.00 | 5 $6.50 K | $779.73 |
fxUSD | 0 $0.00 | 1 $9.87 K | 76 $1.75 M | $712.05 |
WBTC | 0 $0.00 | 0 $0.00 | 4 $12.50 K | $54.50 |
USDe | 0 $0.00 | 0 $0.00 | 1 $995.39 | — |
| Total | 60 $243.09 K | 312 $2.31 M | 4.97 K $18.78 M | $6.59 M |
The 2/4 Privacy Pools Multisig can instantly change the system’s critical configs, including the Entrypoint implementation and ASP root used for private withdrawals. The ASP postman (EOA) can also remove any deposit from the whitelist at any time, forcing a public rage-quit if the affected party wishes to withdraw. The guaranteed immutable escape hatch is pool-level ragequit (public withdrawal) to the original depositor address, because that logic lives in the immutable pool contracts and does not depend on the Entrypoint registry and config. This means the system is permissioned in its deposit logic and deposit privacy, but non-custodial for deposited assets. Past, successful (non-ragequit) withdrawals can not be deanonymized by the protocol.
Trusted setup for two Groth16 Privacy Pools circuits: the Exit circuit and the Private Withdrawal circuit. The ceremony was publicly announced, open to anonymous and identified participants, and concluded in March 2025. The finalized zKeys were published for independent verification, and the ceremony code and UI were open-sourced.

A Multisig with 2/4 threshold.


ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.
ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.
ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.
Main hub for Privacy Pools. Entrypoint for deposits, relayed withdrawals, pool registry/configuration, ASP root updates, fee withdrawal, and wind-down management.
ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.
ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.
ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.
ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.
ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.
ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.
ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.
ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.
ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.
Native-asset Privacy Pool that escrows ETH commitments for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.
ERC20 Privacy Pool that escrows one asset for one scope. Withdrawals and ragequits depend on the linked Groth16 verifiers and on the latest association-set root in the Entrypoint.