# Privacy Pools Markdown version of https://l2beat.com/zk-catalog/privacy-pools ## Summary - Creator: 0xbow - Total Value Secured: $9.40 M (+1.52% compared to seven days ago) - Trusted setups for Snarkjs (Groth16): - Privacy Pools, 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 two Groth16 Privacy Pools circuits. It was built on top of 80 phase 1 contributions, with 513 phase 2 participants. Proving system could be broken if either phase 1 or 2 is compromised. - Used in: [Privacy Pools](https://l2beat.com/privacy/projects/privacy-pools) - Verifiers: 1 successful (verified by [L2BEAT](https://l2beat.com)) - zkVM: BN254 (curve), Snarkjs (Groth16) ### About A privacy pool system for any amount, where only centrally approved deposits can be withdrawn privately. ### Links - Website: https://privacypools.com - Docs: https://docs.privacypools.com - Repository: https://github.com/0xbow-io/privacy-pools-core, https://github.com/0xbow-io/privacy-pools-website ## Value Secured The interactive TVS chart is shown on [the HTML page](https://l2beat.com/zk-catalog/privacy-pools#tvs). ## Milestones & Incidents - 2026-03-11 (incident): [ASP revokes every fxUSD approval](https://etherscan.io/tx/0xd67628764f6ba49ef61e8e16b9aa3b3e4143b5daea4e37e914594c152f6120cb). Approved fxUSD deposits leave the list for 13 days, with public ragequit as the only exit. - 2026-03-11 (incident): [ASP halts all private withdrawals](https://etherscan.io/tx/0x4fbb5ecd0d2436b89756ddb584d31de6b71eaf743f71d09605bba3dff36adac0). The ASP posts a root no deposit belongs to, blocking every private withdrawal for two hours. ## 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 - Risk: yellow (medium risk) - Proof systems: Snarkjs (Groth16) Trusted setup for two Groth16 Privacy Pools circuits: the Ragequit circuit and the private Withdrawal circuit. This trusted setup ceremony builds on top of the 80th contribution to the [Perpetual Powers of Tau ceremony](https://github.com/privacy-ethereum/perpetualpowersoftau) as phase 1. Phase 2 of the ceremony was publicly announced, open to anonymous and identified participants, and concluded in March 2025. It contains 514 contributions to the Withdraw circuit and 513 participants to the Ragequit circuit. The finalized zKeys were published for independent verification, and the ceremony code and UI were open-sourced. - Phase 1 ceremony: . - Ceremony completion announcement: [https://0xbow.io/blog/celebrating-the-conclusion-of-the-trusted-setup-ceremony](https://0xbow.io/blog/celebrating-the-conclusion-of-the-trusted-setup-ceremony) - Ceremony page with finalized zKeys: [https://ceremony.pse.dev/projects/Privacy%20Pools%20Ceremony](https://ceremony.pse.dev/projects/Privacy%20Pools%20Ceremony) - Initial ceremony announcement: [https://0xbow.io/blog/privacy-pools-trusted-setup-ceremony-join-us-in-strengthening-privacy](https://0xbow.io/blog/privacy-pools-trusted-setup-ceremony-join-us-in-strengthening-privacy) - Privacy Pools repository: [https://github.com/0xbow-io/privacy-pools-core](https://github.com/0xbow-io/privacy-pools-core) ## 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 verifiers v1.2.1 - Verifier ID: `Privacy Pools Withdrawal and Ragequit verifiers 03.07.2026` - Source: https://github.com/0xbow-io/privacy-pools-core/tree/v1.2.1/packages/circuits - Verification: successful (verified by [L2BEAT](https://l2beat.com)) - Used in: [Privacy Pools](https://l2beat.com/privacy/projects/privacy-pools) **Known deployments** - [0xa45ACa8604a73D80C551fAad6355A5c3A5565eC6](https://etherscan.io/address/0xa45ACa8604a73D80C551fAad6355A5c3A5565eC6#code) on Ethereum, used in: [Privacy Pools](https://l2beat.com/privacy/projects/privacy-pools) - [0x022891F938Ae7fDC8Ab9Ead0FBf50aBA8C897D6d](https://etherscan.io/address/0x022891F938Ae7fDC8Ab9Ead0FBf50aBA8C897D6d#code) on Ethereum, used in: [Privacy Pools](https://l2beat.com/privacy/projects/privacy-pools) ##### Verification steps Privacy Pools uses two Groth16 circuits — `commitment` (named `ragequit` in the trusted-setup ceremony) and `withdraw` — whose verification keys are hard-coded in the deployed `CommitmentVerifier.sol` and `WithdrawalVerifier.sol` smart contracts. This regeneration attests that these onchain verification keys correspond to the circuits published in the Privacy Pools repo. Generally, to regenerate the two Privacy Pools verification keys, the following has to be done: 1. Checkout the `v1.2.1` tag of the [Privacy Pools core repo](https://github.com/0xbow-io/privacy-pools-core/tree/v1.2.1) (commit hash `a80836a47451e662f127af17e11430ffa976c234`). 2. Install the repo-pinned toolchain and compile the `.circom` circuit sources into `.r1cs` binaries. 3. Download the phase 1 trusted setup file `ppot_0080_16.ptau` (Perpetual Powers of Tau contribution #80), which underlies the ceremony final keys. 4. Verify the checked-in final prover keys (`.zkey`) against the compiled circuits and the phase 1 file. This step also implicitly checks the integrity of the phase 2 trusted setup. 5. Export verification keys from the final prover keys and make sure they are identical to the checked-in `.vkey` files, whose values are hard-coded in the onchain verifier smart contracts. Helper scripts that implement the flow above and more detailed explanations could be found in this [script .zip archive](https://trusted-setup-hosting.l2beat.com/privacy/privacy-pools/verification_privacy_pools.zip). This .zip must be extracted in the `privacy-pools-core` dir checked out on tag `v1.2.1` (commit hash `a80836a47451e662f127af17e11430ffa976c234`) before the execution.