# Privacy Pools v2 Markdown version of https://l2beat.com/zk-catalog/privacy-pools-v2 ## Summary **Warning:** Privacy Pools v2 opened to the public on 2026-10-20 after a capped beta. We are still early, so the ratings rest on the design and ignore the small anonymity set. - Creator: 0xbow - Total Value Secured: $459.90 K (more than +1K% compared to seven days ago) - Trusted setups for Snarkjs (Groth16): - Privacy Pools v2, risk yellow (medium risk) per the [Trusted Setups Risk Framework](https://forum.l2beat.com/t/the-trusted-setups-framework-for-zk-catalog/381): Trusted setup for the 27 Groth16 Privacy Pools v2 circuits. It was built on top of 80 phase 1 contributions, with 500 phase 2 contributions per circuit from 597 participants and a RANDAO beacon. Proving system could be broken if either phase 1 or 2 is compromised. - Used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - Verifiers: 1 successful (verified by [L2BEAT](https://l2beat.com)) - zkVM: BN254 (curve), Snarkjs (Groth16) ### About A shielded ledger with private transfers, swaps and Aave yield inside the pool, where only deposits the ASP approves can be spent privately. ### Links - Website: https://privacypools.com - Docs: https://privacy-pools-v2-docs.vercel.app - Repository: https://github.com/0xbow-io/privacy-pools-v2-monorepo, https://github.com/0xbow-io/privacy-pools-website-v2 ## Value Secured The interactive TVS chart is shown on [the HTML page](https://l2beat.com/zk-catalog/privacy-pools-v2#tvs). ## Milestones & Incidents - 2026-10-20: [Privacy Pools v2 public launch](https://github.com/0xbow-io/privacy-pools-website-v2/releases/tag/v1.0.0). The v2 app opens at privacypools.com with transfers, swaps and yield inside the pool. - 2026-10-20 (incident): [Beta verifiers used single-contributor keys](https://github.com/0xbow-io/privacy-pools-v2-monorepo/blob/61fac03acd1fc306164ddc234f7fac4147d04493/CHANGELOG.md). From 2026-09-01 until this rotation, every verifier held a developer key, not the ceremony key. - 2026-09-03: [Mainnet beta with a $100 deposit cap](https://github.com/0xbow-io/privacy-pools-website/pull/232). The production contracts take their first deposits, capped at $100 each by the ASP and the app. ## Trusted Setups Risk levels follow the [Trusted Setups Risk Framework](https://forum.l2beat.com/t/the-trusted-setups-framework-for-zk-catalog/381). Yellow (medium risk): all contributions are published and the final output can be verified, the ceremony client is open source, there were at least 30 contributions, participation was open to the public and announced, and participants are publicly identified. Green (lowest risk): everything required for yellow, with at least 150 contributions. Red (highest risk): at least one requirement for yellow is not met. N/A: the proof system needs no trusted setup. ### Privacy Pools v2 - Risk: yellow (medium risk) - Proof systems: Snarkjs (Groth16) Trusted setup for the 27 Groth16 Privacy Pools v2 circuits: deposit, ragequit and 25 transact circuits, one per combination of 1 to 5 spent notes and 1 to 5 created notes. Phase 1 is the 80th contribution to the [Perpetual Powers of Tau ceremony](https://github.com/privacy-ethereum/perpetualpowersoftau), prepared for 2^18 constraints. Phase 2, named ppv2-ceremony, ran publicly from 2026-07-08 to 2026-07-14 with 500 contributions per circuit from 597 distinct participants, followed by one beacon contribution from the RANDAO reveal of beacon-chain slot 14767039. Participants are pseudonymous in the published transcript. The final proving keys, their verification keys and the transcript are published with release v1.0.0 of the monorepo, and the ceremony code is open source. - Phase 1 ceremony: . - Ceremony code and UI: . - Ceremony description and key hashes: . - Final keys and transcript: . ## Verifier IDs List of different onchain verifiers for this proving system. Unique ID distinguishes different deployments of the same verifier from different verifiers (e.g. different versions). ### Groth16: Snarkjs Circom / iden3 implementation of Groth16 proving system written in JS. #### Privacy Pools v2 verifiers v1.0.1 - Verifier ID: `Privacy Pools v2 verifiers 20.10.2026` - Source: https://github.com/0xbow-io/privacy-pools-v2-monorepo/tree/61fac03acd1fc306164ddc234f7fac4147d04493/packages/circuits - Verification: successful (verified by [L2BEAT](https://l2beat.com)) - Used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) **Known deployments** - [0xEe96Ca04d2Ab2eC9A8803eb78F39b2875dFF6fdf](https://etherscan.io/address/0xEe96Ca04d2Ab2eC9A8803eb78F39b2875dFF6fdf#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0x5a06582115953E2cAbeD8e6A0EeAE35BA430118f](https://etherscan.io/address/0x5a06582115953E2cAbeD8e6A0EeAE35BA430118f#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0x21347145497569b34efAB7d73952208866520042](https://etherscan.io/address/0x21347145497569b34efAB7d73952208866520042#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0x0e13d94235d8a0d8f9fC3B63BB41D666eF0677Ed](https://etherscan.io/address/0x0e13d94235d8a0d8f9fC3B63BB41D666eF0677Ed#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0xC5E1D9D9CF12E796Ec8E072646c6BF29A1e55382](https://etherscan.io/address/0xC5E1D9D9CF12E796Ec8E072646c6BF29A1e55382#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0x3ee4A00e0ba1AC0Ef8aD3e4b541CA42FBB4592c3](https://etherscan.io/address/0x3ee4A00e0ba1AC0Ef8aD3e4b541CA42FBB4592c3#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0xfa0138C5dE45E520AbA349BE38a827DAb470f70A](https://etherscan.io/address/0xfa0138C5dE45E520AbA349BE38a827DAb470f70A#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0x338625F2199675D2aC4Fbf7A89567864ac990710](https://etherscan.io/address/0x338625F2199675D2aC4Fbf7A89567864ac990710#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0xAc716f21626994c4264eA457Fe208071050611B5](https://etherscan.io/address/0xAc716f21626994c4264eA457Fe208071050611B5#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0xB8aa00333b8D6958da72A15D59179BbDD1e49064](https://etherscan.io/address/0xB8aa00333b8D6958da72A15D59179BbDD1e49064#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0xF1C6c55B70EC3Df923f5E9bcd64aee5c3073C42c](https://etherscan.io/address/0xF1C6c55B70EC3Df923f5E9bcd64aee5c3073C42c#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0x62Cf8963300F284016daE0cD19f5D9BC60846a46](https://etherscan.io/address/0x62Cf8963300F284016daE0cD19f5D9BC60846a46#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0x579f6734d35937b8432BA8FfC17C3120eb657c82](https://etherscan.io/address/0x579f6734d35937b8432BA8FfC17C3120eb657c82#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0x76D574559765fd4b90903fFa682964Ae7e7e878a](https://etherscan.io/address/0x76D574559765fd4b90903fFa682964Ae7e7e878a#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0xAeCDf3E27A602f23cEc2E5CE250093b3E806D041](https://etherscan.io/address/0xAeCDf3E27A602f23cEc2E5CE250093b3E806D041#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0xe0aec1eE10eBfCDcB09b6e5a7ea6Ae34D066219d](https://etherscan.io/address/0xe0aec1eE10eBfCDcB09b6e5a7ea6Ae34D066219d#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0xFdF4EbC7645E1F4c04aE33285b6e3f78e4A3a275](https://etherscan.io/address/0xFdF4EbC7645E1F4c04aE33285b6e3f78e4A3a275#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0x909ECAF2A4959726a2BC3d82Fc837B8D3F1c61d3](https://etherscan.io/address/0x909ECAF2A4959726a2BC3d82Fc837B8D3F1c61d3#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0x454F1Da26DD4c7c89a849019BeC4c7C7C404d3A4](https://etherscan.io/address/0x454F1Da26DD4c7c89a849019BeC4c7C7C404d3A4#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0x95dEC97ac78E8C0FfDc6315FDc0A0791238b93A3](https://etherscan.io/address/0x95dEC97ac78E8C0FfDc6315FDc0A0791238b93A3#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0x4Cb752CEF56a5095321Ed72699cD7A699D48F4b5](https://etherscan.io/address/0x4Cb752CEF56a5095321Ed72699cD7A699D48F4b5#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0x01b4954E3b3C1F68785f60D7465c38C31266bfab](https://etherscan.io/address/0x01b4954E3b3C1F68785f60D7465c38C31266bfab#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0x61573Cf3c3A20C9739b68B8e742Ca51971387Cb5](https://etherscan.io/address/0x61573Cf3c3A20C9739b68B8e742Ca51971387Cb5#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0x8ABfb288dAc87392EaFdD59F6809825fcA0e8b85](https://etherscan.io/address/0x8ABfb288dAc87392EaFdD59F6809825fcA0e8b85#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0x20D4B794A2A1ae7A34AF184172dd931d3ff2Fa32](https://etherscan.io/address/0x20D4B794A2A1ae7A34AF184172dd931d3ff2Fa32#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0x766c2F31483935CD55355fcE00fc5eDB82A15acC](https://etherscan.io/address/0x766c2F31483935CD55355fcE00fc5eDB82A15acC#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) - [0x7BeE2554970A749D7671424DFa3fAbE15d7e4BD8](https://etherscan.io/address/0x7BeE2554970A749D7671424DFa3fAbE15d7e4BD8#code) on Ethereum, used in: [Privacy Pools v2](https://l2beat.com/privacy/projects/privacy-pools-v2) ##### Verification steps Privacy Pools v2 uses 27 Groth16 circuits: `deposit`, `ragequit` and `transact_NxM` for 1 to 5 spent notes (N) and 1 to 5 created notes (M). The PoolVault holds the deposit and ragequit verifier addresses and routes each transact proof to the verifier registered for its (N, M). Each verifier contract hard-codes its verification key. The steps below tie the deployed bytecode to the published circuit sources and ceremony keys. Steps, all on monorepo tag `v1.0.2` (commit `61fac03acd1fc306164ddc234f7fac4147d04493`), whose circuit sources, `.r1cs` files and keys are those of release `v1.0.0`: 1. Compile every main circuit under `packages/circuits/circuits/main` with circom 2.2.3, `--O1`, circomlib 2.0.5 and `@zk-kit/binary-merkle-root.circom` 2.0.0, the toolchain `circomkit.json` and `package.json` pin. The sha256 of each produced `.r1cs` equals the committed `packages/circuits/build//.r1cs` (Git LFS). 2. Download the circuit tarballs and `transcript.json` of release `v1.0.0` and check them against `circuits-v1.0.0-SHA256SUMS.txt`. The sha256 of each `groth16_pkey.zkey` equals the hash in `packages/circuits/CEREMONY.md` and the transcript's `finalZkeyHash`. 3. Download the phase 1 file `ppot_0080_18.ptau` (Perpetual Powers of Tau contribution 80, sha256 `9693220206afab749e3d88d4ab5fdf5d36120ea102e7e587ccea0e7a5208e711`). 4. Run `snarkjs zkey verify .r1cs ppot_0080_18.ptau .zkey` (snarkjs 0.7.5) for all 27 circuits. Each key verifies with 500 contributions and the beacon contribution 501. For `deposit`, the 500 contribution hashes equal the transcript's `serverContributionHash` values in order and contribution 501 equals its `finalContributionHash`. 5. Read the runtime bytecode of the 27 verifiers the PoolVault names at block 26235496 and check that every coordinate of `vk_alpha_1`, `vk_beta_2`, `vk_gamma_2`, `vk_delta_2` and `IC` in the committed `groth16_vkey.json` appears in it as a PUSH constant (values with leading zero bytes use shorter pushes). All 27 match. 6. Build `packages/contracts/src/verifiers/VerifierArtifacts.sol` with `forge build` under `packages/contracts/foundry.toml` (solc 0.8.32, via-IR, 10,000 optimizer runs, EVM version prague). The runtime bytecode of each verifier equals the deployed one, metadata hash included.