# Privacy Pools v2 Markdown version of https://ethbeat.org/privacy/projects/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. - Total Value Locked: $513.41 K (+15.0% compared to seven days ago) - Assets tracked: 4 - Buckets tracked: 4 - Deposits 7D: 165 (-2.94% compared to the previous seven days) - Deposits 30D: 397 - Deposits Total: 481 - Active Relayers 30D: 2 - Tracked on: Ethereum - Attributes: ZK, Transfers, DeFi, Any amount - Reference app: privacypools.com ### Risks - Privacy: Link privacy. Public observer: Link private (sentiment: good); Chain analyst: Link at risk (sentiment: warning); Network observer: Link at risk (sentiment: warning); Privileged insider: Link at risk (sentiment: warning); Future adversary: Link exposed (sentiment: bad). - Trusted setup: 61 contributions (sentiment: warning). Privacy Pools v2: Trusted setup for the 27 Groth16 Privacy Pools v2 circuits. Phase 1 used 61 participant contributions and a public randomness beacon. Phase 2 had 500 contributions per circuit from 597 participants and a RANDAO beacon. Proving system could be broken if either phase 1 or 2 is compromised. - Exit window: None (sentiment: bad). The upgrader role can replace the PoolVault that escrows deposits without delay, so a malicious upgrade takes the funds before anyone can leave. Ragequit works while the vault is paused, but the same role can stop it at once without an upgrade. This protocol fails the walkaway test: users cannot fully use it if every centralized participant disappears. New deposits need the ASP's approval to be spent privately. The app offers only 0xbow's relayer. - Reproducibility: Reproducible (sentiment: good). Contracts, circuits, SDK, relayer and website are public and build locally, the contracts under a Business Source License. The 27 verifiers rebuild from the circuit sources and ceremony keys. The ASP service is closed. ### 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 - Contracts explorer (Disco): https://disco.l2beat.com/ui/p/privacy-pools-v2 ## Protocol description Privacy Pools v2 by 0xbow lets you deposit ETH, USDC or USDT, then send, swap, earn Aave yield and withdraw without a visible link to the deposit. Only deposits that 0xbow's association set provider (ASP) approves can be spent privately. Depositors, recipients, amounts and timing at the pool's edges stay public. Users trust 0xbow, which runs the ASP, the only relayer and the website, and a multisig that can upgrade every core contract without delay. The ASP can withhold or revoke approval for any deposit. Users also trust Aave, which holds the assets behind the yield shares. Exiting is permissionless: a note's owner can ragequit it from the vault, losing their privacy, unless that multisig blocks it. ### Architecture A note is a private record of value in one asset, owned by an Ethereum address and carrying the label of its deposit. The PoolVault holds all assets and a state tree of note commitments and spent nullifiers. The Keystore holds each account's registration: a hash of its nullifying key, its auth policy and an X25519 viewing public key. The ASPRegistry holds the latest root of the approved labels. USDC, USDT and ETH enter as yield shares, ppUSDC, ppUSDT and ppETH, which wrap Aave v3 deposits. ### Labels Each deposit gets a label, a private ID that only the depositor and the ASP can tie to the deposit. Every note created from the deposit's funds carries the same label, including notes paid to others, so each recipient learns it. Notes from different deposits never merge. Each private spend proves that its notes' labels are on the ASP's latest list. Anyone who knows a label can hash it, find the list update that first approved it and look at the deposits made just before. ### Flow 1. **Register.** Two transactions from your wallet add your account to the Keystore and publish your viewing public key. 2. **Shield.** You deposit through the Entrypoint. USDC, USDT and ETH pass through a PPRouter that supplies Aave and deposits the shares. Your address, asset and amount are public, and the data that ties the deposit to its label goes onchain encrypted to the ASP. 3. **Approval.** The ASP screens the depositor, adds the label's hash to its list and posts the root onchain, with the list on IPFS. 4. **Send.** A transact proof spends your notes and creates one for the recipient, encrypted to their viewing key and published onchain, plus change for you. An unregistered recipient gets a claim link instead. 0xbow's relayer submits the proof and takes its fee as a public withdrawal. 5. **Withdraw.** The relayer pays any address, minus its fee. Change stays as a note. ### Keys All keys derive from one signature of the user's wallet. Contract wallets and signers that cannot sign the same way twice can use a passkey instead. The derived account key can be exported from the app. Sharing the viewing private key reveals every incoming note, a receipt reveals one payment. The revocable key can be rotated, and the old one stays valid for 20m. ### App 0xbow hosts the app, built from public source. It reads the chain from Alchemy under 0xbow's key unless the user sets an endpoint per chain. It downloads the pool's events whole from the ASP but offers only 0xbow's relayer. Its Tor option requires a user-run Tor gateway and covers only RPC calls. Privacy Pools v2 is deployed on BNB Chain, Citrea, Optimism, Base, Arbitrum and Robinhood Chain, which ETHBEAT does not track. ### Swaps and yield The yield shares keep a fixed share count while their value grows, so the share count encodes the exchange rate on the deposit day. Withdraw-and-swap sends the withdrawn asset through LI.FI to another token or chain, with the route bound into the proof. A reshield swaps into another pool asset and deposits again in the same transaction, as a fresh deposit that needs approval again. ### Exits **Ragequit.** The note's current owner can take out its full value, approved or not, directly from the vault, also while it is paused. It publishes the owner, the amount, the label and the commitment, which names the transaction that created the note. **Claim link.** A payment to an unregistered address can only be claimed with the link the payer holds. Until then the funds can neither move nor exit. **Relaying.** The contracts accept a proof from any address, and no relayer can change its recipient. A relayer other than 0xbow's needs the user's own build of the website or another client. ### Compliance The ASP screens each depositor before approving the deposit, under 0xbow's own due diligence, and may reject it. A rejected deposit can leave only by ragequit. ### Fees Deposits pay no vetting fee today. The relayer quotes its fee per request and takes it from the sent or withdrawn asset. You accept the fee before sending, and the relayer cannot raise it. The yield shares keep 20% of the Aave yield for 0xbow. ### Anonymity set One vault holds every asset, but a withdrawal names its asset. The set is therefore the ASP-approved deposits of that asset whose notes still hold at least the withdrawn amount. Notes that transfers and reshields created from them count too. We count every depositor of the asset, approved or not. ## Privacy **What the protocol promises:** Hides which deposit funds which withdrawal and who pays whom inside the pool, for deposits the ASP approves. Deposits and withdrawals are public. **Apps** - **[privacypools.com](https://privacypools.com)** (Reference): The ratings assume this app, since 2026-10-23 · Source [6c292b4](https://github.com/0xbow-io/privacy-pools-website-v2/tree/6c292b47a977cd86d506994f1b9a0fc51b9a79db) [How we pick the reference](https://ethbeat.org/publications/privacy-methodology#reference-app) Ethereum is public by default. Each protocol is rated on its main privacy promise, like hiding who paid, who received, how much, or which deposit became which withdrawal. Against each adversary, the colour says whether it holds for a careful user with the app's own settings: green yes, yellow only with significant extra work, red no. Fields marked at risk stay private only under the condition in their note. ### Public observer Link private (sentiment: good) **Who:** Everyone with a block explorer and some basic tools. Sees every public onchain event, but does no correlation beyond following links. Examples: A curious counterparty, an employer, a journalist. A zero-knowledge proof hides which approved notes a withdrawal or transfer spends, and a transfer publishes only encrypted notes. A relayed transfer pays its fee as a public withdrawal to the relayer, so transfers are visible as events. A ragequit publishes the owner, the amount, the label and the commitment, which names the transaction that created the note. Claiming a payment to an unregistered address registers that wallet. **Advice:** Exit through a relayer, so none of your wallets pay gas for the receiving address. Ragequit only notes you deposited and never spent from. **Inside** - Sender: private - Recipient: private - Amount: private - Asset: private - Link: at risk. A ragequit names the transaction that created the note. **Sources** - [PoolVault](https://ethbeat.org/privacy/projects/privacy-pools-v2#PoolVault) - [Transact circuit](https://github.com/0xbow-io/privacy-pools-v2-monorepo/blob/61fac03acd1fc306164ddc234f7fac4147d04493/packages/circuits/circuits/templates/Transact.circom) - [Relayed transfers pay the fee as a public output (checked 2026-10-30)](https://privacy-pools-v2-docs.vercel.app/operations/transfer) - [Ragequit publishes the label and owner (checked 2026-10-30)](https://privacy-pools-v2-docs.vercel.app/operations/ragequit) ### Chain analyst Link at risk (sentiment: warning) **Who:** Scrapes all public data and correlates it: timing, amounts, gas and wallet fingerprints, address clusters. Examples: Chain analytics firms, ZachXBT, data brokers. A note's label passes to every later payee, and the ASP update that first approved it often leaves one candidate deposit. The ASP adds ten labels per update, decoys included, so an update that follows a single deposit names it. Without a payee, a relayed exit of a common amount hides among every approved deposit of its asset. Any amount is allowed, so an unusual amount, or a share count only one deposit day produces, pairs a deposit with its withdrawal. Paying gas from the user's wallet instead of a relayer exposes its fingerprint, account implementation and fee habits, even from a fresh address. **Advice:** Reshield into another asset before paying someone who should not learn the deposit, since the reshield deposits the funds again under a new label. Use ppETH or ppUSDC, the pools with the most depositors. Withdraw common amounts rather than everything at once. Wait before exiting and pick a different time of day than the deposit. Exit to a fresh address every time and spend from it with a different wallet than the one that deposited. **Inside, compared with a public observer** - Link: at risk. A received note's label, an unusual amount or a share count only one deposit day produces can pair the two ends. **Sources** - [Every output note inherits the label of an input](https://github.com/0xbow-io/privacy-pools-v2-monorepo/blob/61fac03acd1fc306164ddc234f7fac4147d04493/packages/circuits/circuits/templates/helpers/ValueConservation.circom) - [Each root update links its list on IPFS](https://ethbeat.org/privacy/projects/privacy-pools-v2#ASPRegistry) - [Share counts encode the exchange rate at deposit (checked 2026-10-30)](https://privacy-pools-v2-docs.vercel.app/concepts/yield-shares) - [Tutela (arXiv:2201.06811)](https://arxiv.org/abs/2201.06811) ### Network observer Link at risk (sentiment: warning) **Who:** Sits between the user and the services and sees traffic only: ISPs, VPNs, Tor exits, public RPCs and relayers. Ties requests to a user by content, session or timing: what they name, a shared IP or login, and when they arrive. Services the operator runs count as the insider. Examples: Infura or Alchemy, a Tornado relayer, a wallet vendor selling telemetry, Google captcha or analytics in the dapp frontend. The default RPCs, led by Alchemy under 0xbow's key, see the account at sign-in and can time it against the withdrawal. An IP-hiding route does not hide that timing, a local node does. Tor Browser and the app's Tor option cannot reach a local node, so the route must carry all traffic. **Advice:** Send all traffic through an IP-hiding route and set a local node as the endpoint before signing in. Withdraw signed in with the account key instead of a wallet. **Inside, compared with a public observer** - Link: at risk. Private only with a local node and all traffic through an IP-hiding route. **Sources** - [IP-hiding routes we checked](https://ethbeat.org/publications/privacy-methodology#ip-hiding-routes) - [Alchemy first, public node last](https://github.com/0xbow-io/privacy-pools-website-v2/blob/6c292b47a977cd86d506994f1b9a0fc51b9a79db/config/rpc-order.ts#L55-L70) - [Sign-in reads the account from the Keystore](https://github.com/0xbow-io/privacy-pools-website-v2/blob/6c292b47a977cd86d506994f1b9a0fc51b9a79db/components/sdk-provider.tsx#L679-L711) - [Allowlist refuses per-note reads and topic filters](https://github.com/0xbow-io/privacy-pools-website-v2/blob/6c292b47a977cd86d506994f1b9a0fc51b9a79db/services/egress-policy.ts#L447-L520) ### Privileged insider Link at risk (sentiment: warning) **Who:** Holds an operator role, custodies funds, receives keys or plaintext by design, or delivers the app: upgrade admin, custodian, view key holder, enclave operator, association set provider, hosted prover, registry, frontend host. Examples: A compliance backdoor key, a DAO with an upgrade key, a KMS committee, an ASP operator, a custodial bridge. The ASP postman can publish a new approved list at any time with no delay, and every private spend must prove against the latest one. A list without a deposit's label freezes every note descending from it, and a list with few labels narrows the set to them. 0xbow's ASP feeds see every session's IP and its relayer every exit's IP and recipient, so 0xbow can pair deposit and exit sessions. The request logs of its Alchemy key show it the account each sign-in looks up, which it can time against the withdrawals its relayer submits. 0xbow can change the hosted app at any time, and a multisig can upgrade the four core contracts without delay. **Advice:** Exit as the network observer advice says, after checking the size of the approved list that the ASPRegistry's latest root links on IPFS. Run an inspected local build of the app instead of the hosted frontend. **Inside, compared with a public observer** - Recipient: at risk. The relayer sees the recipient of every exit, with the IP that asked. - Link: at risk. The ASP can narrow the approved list, and 0xbow can pair sessions across ASP, relayer and its Alchemy logs. **Sources** - [updateASPRoot: the postman sets a new root with no delay](https://ethbeat.org/privacy/projects/privacy-pools-v2#ASPRegistry) - [transact: only the latest ASP root is accepted](https://ethbeat.org/privacy/projects/privacy-pools-v2#PoolVault) - [What the relayer receives, the IP included (checked 2026-10-30)](https://privacy-pools-v2-docs.vercel.app/introduction/threat-model) - [Alchemy request logs show the key owner each payload](https://www.alchemy.com/docs/alchemy-request-logs) ### Future adversary Link exposed (sentiment: bad) **Who:** Harvest now, decrypt later. Holds every byte ever published and runs the known quantum attacks: elliptic curves, pairings and RSA fall. Hashes, symmetric ciphers and post-quantum schemes stand until an attack on them is known. Examples: An intelligence agency archiving chain data today, then anyone once a break is public. Every registered account's viewing public key sits in the Keystore, so whoever breaks elliptic-curve cryptography decrypts every note ever sent to it from the chain. A decrypted note holds value, token and deposit lineage, which pairs each transfer's commitments with their deposit and recipient. Accounts created from a wallet signature reduce to that wallet's key. Breaking the ASP's key the same way decrypts the data that ties each deposit to its label. **Inside, compared with a public observer** - Sender: exposed - Recipient: exposed - Amount: exposed - Asset: exposed - Link: exposed **Sources** - [viewingKeys: X25519 public key per account](https://ethbeat.org/privacy/projects/privacy-pools-v2#Keystore) - [Notes encrypted with X25519 ECDH and XChaCha20](https://github.com/0xbow-io/privacy-pools-v2-monorepo/blob/61fac03acd1fc306164ddc234f7fac4147d04493/packages/core-sdk/src/services/NoteComputationService.ts#L242-L260) - [Three keys from one wallet signature](https://github.com/0xbow-io/privacy-pools-v2-monorepo/blob/61fac03acd1fc306164ddc234f7fac4147d04493/packages/core-sdk/src/services/AbstractCryptoService.ts#L147-L195) - [Trusted setup](https://ethbeat.org/privacy/projects/privacy-pools-v2#trusted-setups) ## Value Locked The interactive value chart is shown on [the HTML page](https://ethbeat.org/privacy/projects/privacy-pools-v2#privacy-tvl). ## Anonymity sets ### 30 day historic anonymity set How many unique depositors you could have blended in with if you withdrew on a particular day after depositing during the previous 30 days. This metric is a proxy for the historic anonymity set and shows how it developed over time. The metric looks backwards: it counts deposits that already happened, including from addresses that have since withdrawn. Your real anonymity also depends on deposits made after yours, which cannot be known in advance. ### Estimated anonymity set by holding duration An estimate of how many unique depositors you blend in with, depending on how long you leave your deposit in the pool. It is based on historic data of past deposits: each point counts depositors from the preceding period, so holding for up to 30 days effectively means blending in with everyone who deposited during the last 30 days. The interactive charts are shown on [the HTML page](https://ethbeat.org/privacy/projects/privacy-pools-v2#privacy-anonymity-set). ## Flows The interactive flows chart is shown on [the HTML page](https://ethbeat.org/privacy/projects/privacy-pools-v2#privacy-flows). ## Assets Breakdown | Asset | Deposits 7D | Deposits 30D | Deposits Total | Value Locked | | --- | --- | --- | --- | --- | | ppETH | 95 ($90.81 K) | 216 ($660.62 K) | 239 ($661.65 K) | $261.53 K | | ppUSDT | 30 ($173.54 K) | 61 ($207.92 K) | 76 ($208.28 K) | $176.79 K | | ppUSDC | 40 ($45.59 K) | 120 ($140.01 K) | 148 ($141.03 K) | $74.91 K | | ETH | 0 ($0.00) | 0 ($0.00) | 18 ($642.71) | $167.94 | | Total | 165 ($309.94 K) | 397 ($1.00 M) | 481 ($1.01 M) | $513.40 K | ## 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. ## Risk summary ### Funds can be stolen if 1. the zk proof system is broken, allowing invalid spends or withdrawals. 2. all [trusted setup](https://ethbeat.org/privacy/projects/privacy-pools-v2#trusted-setups) participants collude or leak their secrets, allowing forged proofs. 3. the admin multisig deploys a malicious [upgrade](https://ethbeat.org/privacy/projects/privacy-pools-v2#upgrades-and-governance) of the PoolVault, which holds every deposit, or a verifier that accepts any proof, with no delay. ### Funds can be lost if 1. a user loses the wallet whose signature derives their keys and the exported account key. 2. the payer loses a claim link before the recipient claims it. 3. Aave suffers a loss on the reserve behind a yield share. ### Funds can be frozen if 1. the admin multisig lets the state tree fill by lowering its capacity, which stops every ragequit, deposit and spend, with no delay. 2. Aave pauses a reserve behind the yield shares, which stops redeeming them for the underlying asset. ### Use can be stopped if 1. the admin multisig pauses deposits and spends, or raises the vetting fee on deposits up to 99.99% of their value. 2. Aave freezes the reserves behind the yield shares, which stops every deposit through the app. ### Privacy can be lost if 1. the ASP leaves deposits out of its latest list, which freezes every note from them, up to halting all private spends (see privileged insider). 2. the ASP keeps only a few labels in its latest list, so spends proven against it point to one of them (see privileged insider). 3. 0xbow's relayer refuses a withdrawal, so the user must self-relay from a public wallet (see chain analyst). 4. a note's label, which passes to every later payee, links to its deposit when timed against the ASP's updates (see chain analyst). 5. 0xbow pairs the IP of a deposit session with the IP of a withdrawal request across its ASP and relayer (see privileged insider). 6. a user keeps the default RPCs, which see their account at sign-in and can time it against the withdrawal (see network observer and privileged insider). 7. elliptic-curve cryptography is broken, which decrypts every onchain note from the published viewing keys (see future adversary). ## Upgrades & Governance A 2/4 multisig holds the default admin, ops admin, upgrader, pauser, unpauser and entrypoint manager roles in the AccessRouter. It can upgrade the PoolVault, Entrypoint, Keystore and ASPRegistry and replace the verifiers. It can pause deposits and spends, which leaves ragequit open, or let the state tree fill by lowering its capacity, which stops ragequit too. It enables assets, sets a vetting fee of up to 99.99% on deposits and caps relayer fees. It also administers the three yield shares, with a fee of at most 20% of the yield. An EOA holds the postman role that publishes approved-label roots. Another owns RelaySwaps and curates its routers and zaps. None of these roles has a delay, so every change applies at once. The shares hold Aave v3 deposits, whose contracts Aave governance can upgrade after a public vote and delay. Aave's guardian multisig can instantly freeze a reserve, which blocks the app's deposits into its shares, or pause it, which also blocks redeeming them. ## Trusted setup 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) - Phase 1: 61 contributions - Phase 2: 597 participants (500 contributions per circuit, followed by a beacon.) 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 uses `ppot_0080_18.ptau` from the [Perpetual Powers of Tau ceremony](https://github.com/privacy-ethereum/perpetualpowersoftau), prepared for 2^18 constraints. It contains 61 participant contributions and one public randomness beacon. Its contribution IDs are 0001–0058 and 0078–0080: contribution 0078 resumes from 0058 after a fork, so 0080 is an identifier rather than a count. 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: . - Phase 1 fork and included contribution IDs: . - Ceremony code and UI: . - Ceremony description and key hashes: . - Final keys and transcript: . ## Verifier IDs ### 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 [ETHBEAT](https://l2beat.com)) - Used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) **Known deployments** - [0xEe96Ca04d2Ab2eC9A8803eb78F39b2875dFF6fdf](https://etherscan.io/address/0xEe96Ca04d2Ab2eC9A8803eb78F39b2875dFF6fdf#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0x5a06582115953E2cAbeD8e6A0EeAE35BA430118f](https://etherscan.io/address/0x5a06582115953E2cAbeD8e6A0EeAE35BA430118f#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0x21347145497569b34efAB7d73952208866520042](https://etherscan.io/address/0x21347145497569b34efAB7d73952208866520042#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0x0e13d94235d8a0d8f9fC3B63BB41D666eF0677Ed](https://etherscan.io/address/0x0e13d94235d8a0d8f9fC3B63BB41D666eF0677Ed#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0xC5E1D9D9CF12E796Ec8E072646c6BF29A1e55382](https://etherscan.io/address/0xC5E1D9D9CF12E796Ec8E072646c6BF29A1e55382#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0x3ee4A00e0ba1AC0Ef8aD3e4b541CA42FBB4592c3](https://etherscan.io/address/0x3ee4A00e0ba1AC0Ef8aD3e4b541CA42FBB4592c3#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0xfa0138C5dE45E520AbA349BE38a827DAb470f70A](https://etherscan.io/address/0xfa0138C5dE45E520AbA349BE38a827DAb470f70A#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0x338625F2199675D2aC4Fbf7A89567864ac990710](https://etherscan.io/address/0x338625F2199675D2aC4Fbf7A89567864ac990710#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0xAc716f21626994c4264eA457Fe208071050611B5](https://etherscan.io/address/0xAc716f21626994c4264eA457Fe208071050611B5#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0xB8aa00333b8D6958da72A15D59179BbDD1e49064](https://etherscan.io/address/0xB8aa00333b8D6958da72A15D59179BbDD1e49064#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0xF1C6c55B70EC3Df923f5E9bcd64aee5c3073C42c](https://etherscan.io/address/0xF1C6c55B70EC3Df923f5E9bcd64aee5c3073C42c#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0x62Cf8963300F284016daE0cD19f5D9BC60846a46](https://etherscan.io/address/0x62Cf8963300F284016daE0cD19f5D9BC60846a46#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0x579f6734d35937b8432BA8FfC17C3120eb657c82](https://etherscan.io/address/0x579f6734d35937b8432BA8FfC17C3120eb657c82#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0x76D574559765fd4b90903fFa682964Ae7e7e878a](https://etherscan.io/address/0x76D574559765fd4b90903fFa682964Ae7e7e878a#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0xAeCDf3E27A602f23cEc2E5CE250093b3E806D041](https://etherscan.io/address/0xAeCDf3E27A602f23cEc2E5CE250093b3E806D041#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0xe0aec1eE10eBfCDcB09b6e5a7ea6Ae34D066219d](https://etherscan.io/address/0xe0aec1eE10eBfCDcB09b6e5a7ea6Ae34D066219d#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0xFdF4EbC7645E1F4c04aE33285b6e3f78e4A3a275](https://etherscan.io/address/0xFdF4EbC7645E1F4c04aE33285b6e3f78e4A3a275#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0x909ECAF2A4959726a2BC3d82Fc837B8D3F1c61d3](https://etherscan.io/address/0x909ECAF2A4959726a2BC3d82Fc837B8D3F1c61d3#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0x454F1Da26DD4c7c89a849019BeC4c7C7C404d3A4](https://etherscan.io/address/0x454F1Da26DD4c7c89a849019BeC4c7C7C404d3A4#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0x95dEC97ac78E8C0FfDc6315FDc0A0791238b93A3](https://etherscan.io/address/0x95dEC97ac78E8C0FfDc6315FDc0A0791238b93A3#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0x4Cb752CEF56a5095321Ed72699cD7A699D48F4b5](https://etherscan.io/address/0x4Cb752CEF56a5095321Ed72699cD7A699D48F4b5#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0x01b4954E3b3C1F68785f60D7465c38C31266bfab](https://etherscan.io/address/0x01b4954E3b3C1F68785f60D7465c38C31266bfab#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0x61573Cf3c3A20C9739b68B8e742Ca51971387Cb5](https://etherscan.io/address/0x61573Cf3c3A20C9739b68B8e742Ca51971387Cb5#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0x8ABfb288dAc87392EaFdD59F6809825fcA0e8b85](https://etherscan.io/address/0x8ABfb288dAc87392EaFdD59F6809825fcA0e8b85#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0x20D4B794A2A1ae7A34AF184172dd931d3ff2Fa32](https://etherscan.io/address/0x20D4B794A2A1ae7A34AF184172dd931d3ff2Fa32#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0x766c2F31483935CD55355fcE00fc5eDB82A15acC](https://etherscan.io/address/0x766c2F31483935CD55355fcE00fc5eDB82A15acC#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/privacy/projects/privacy-pools-v2) - [0x7BeE2554970A749D7671424DFa3fAbE15d7e4BD8](https://etherscan.io/address/0x7BeE2554970A749D7671424DFa3fAbE15d7e4BD8#code) on Ethereum, used in: [Privacy Pools v2](https://ethbeat.org/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. ## Updates Each date links the update on the HTML page, which also shows its contract diffs. ### [2026-10-26 14:24 UTC](https://ethbeat.org/privacy/projects/privacy-pools-v2?update=6bd52cf6) (high severity, 32 changes) Every AccessRouter admin role and the three yield shares moved from an EOA to a 2/4 Safe, without a delay. RelaySwaps is verified now and gets a template. maxStateTreeSize is HIGH, since lowering it stops ragequit. ### [2026-10-21 05:05 UTC](https://ethbeat.org/privacy/projects/privacy-pools-v2?update=75f84d35) (45 changes) Initial discovery of Privacy Pools v2 on Ethereum: Entrypoint, PoolVault, Keystore, ASPRegistry, AccessRouter, PrivacyPoolRelay, RelaySwaps, the yield routers, shares and zaps, and the 27 Groth16 verifiers. ## Permissions Explore these contracts and permissions in Disco, ETHBEAT's contract explorer: https://disco.l2beat.com/ui/p/privacy-pools-v2 ### Ethereum #### Actors ##### SafeL2 Addresses: [0xd563affc5ccA233514426e725c2d0b12C516a3e6](https://etherscan.io/address/0xd563affc5ccA233514426e725c2d0b12C516a3e6) A Multisig with 2/4 threshold. - Can interact with AccessRouter - enable or disable assets, set minimum deposits, vetting fees of up to 99.99% and relayer fee caps, and sweep fees held by the Entrypoint - grant and revoke the ops admin, upgrader, unpauser and depositor roles - grant and revoke the pauser, entrypoint manager and postman roles - pause deposits and transacts in the PoolVault - unpause the PoolVault - upgrade the PoolVault, Entrypoint, Keystore and ASPRegistry, and replace the vault's verifiers, registries and tree limits - Can interact with ppETH - set the yield fee up to 20%, claim fees, pause minting, set a rewards controller and rescue tokens other than the backing aToken - Can interact with ppUSDT - set the yield fee up to 20%, claim fees, pause minting, set a rewards controller and rescue tokens other than the backing aToken - Can interact with ppUSDC - set the yield fee up to 20%, claim fees, pause minting, set a rewards controller and rescue tokens other than the backing aToken Participants (4): [0x12Dbd6335d7f529F8922420Ba9c15c9E7A324c92](https://etherscan.io/address/0x12Dbd6335d7f529F8922420Ba9c15c9E7A324c92), [0x652E36f8EA937c19417380dCDb48D6e4375d13dA](https://etherscan.io/address/0x652E36f8EA937c19417380dCDb48D6e4375d13dA), [0x98AdDcc75931795eB66c52cA954541c18535E3c0](https://etherscan.io/address/0x98AdDcc75931795eB66c52cA954541c18535E3c0), [0xE8A2cC5c2349615D947b9d9fE5D7F144730cAf77](https://etherscan.io/address/0xE8A2cC5c2349615D947b9d9fE5D7F144730cAf77) ##### Entrypoint Addresses: [0xca1e072236D231130059eeA6Bfceb7F4e9a1F0C3](https://etherscan.io/address/0xca1e072236D231130059eeA6Bfceb7F4e9a1F0C3) Deposit gate of Privacy Pools v2. It checks each deposit against its asset's configuration and keeps the vetting fee. - Can interact with AccessRouter - deposit into the PoolVault on behalf of users ##### EOA 1 Addresses: [0x0967755AfA2016866D12EefB820705026842dCe8](https://etherscan.io/address/0x0967755AfA2016866D12EefB820705026842dCe8) - Can interact with RelaySwaps - approve the aggregator routers and yield zaps that RelaySwaps sends withdrawn funds through, and rescue any token it holds, such as bridge refunds ##### EOA 2 Addresses: [0xa05B43E1dcdCe0c6A40471a602038BC346900758](https://etherscan.io/address/0xa05B43E1dcdCe0c6A40471a602038BC346900758) - Can interact with AccessRouter - publish the approved-label root every private spend must match ## Smart contracts Explore these contracts and permissions in Disco, ETHBEAT's contract explorer: https://disco.l2beat.com/ui/p/privacy-pools-v2 ### Ethereum #### PrivacyPoolRelay Addresses: [0x01a8Fa4dbb60187aD8d3c3d08E7Fb8C14198A461](https://etherscan.io/address/0x01a8Fa4dbb60187aD8d3c3d08E7Fb8C14198A461#code) Withdrawal processor that submits the transact proof and pays the recipient and the relayer's fee, capped per asset. #### PoolVault Addresses: [0x0Eb42804BF897662aF851370eaeAdcDBEC1b97ed](https://etherscan.io/address/0x0Eb42804BF897662aF851370eaeAdcDBEC1b97ed#code), [0x5F89cD5c3610c2AD870B1b33126d209fECdb69c7](https://etherscan.io/address/0x5F89cD5c3610c2AD870B1b33126d209fECdb69c7#code) (Implementation (Upgradable)), [0x0000000000000000000000000000000000000000](https://etherscan.io/address/0x0000000000000000000000000000000000000000#code) (Admin) **Past upgrades** (Count of upgrades: No upgrades, Last upgrade: N/A, Avg upgrade interval: N/A) - 2026-09-01 18:38 UTC, deployment of [PoolVault](https://etherscan.io/address/0x0Eb42804BF897662aF851370eaeAdcDBEC1b97ed#code): transaction [0x2739363102ee08c72a6dd6c96e3c3241bff7507f23a71498c51b25dd5224f0c9](https://etherscan.io/tx/0x2739363102ee08c72a6dd6c96e3c3241bff7507f23a71498c51b25dd5224f0c9), implementations: [0x5F89cD5c3610c2AD870B1b33126d209fECdb69c7](https://etherscan.io/address/0x5F89cD5c3610c2AD870B1b33126d209fECdb69c7#code) Holds every pool asset and the state tree of note commitments and spent nullifiers. #### PPRouterUSDT Addresses: [0x13a0b86bac3e0C29bd64fED7BCD2EE84f371f41C](https://etherscan.io/address/0x13a0b86bac3e0C29bd64fED7BCD2EE84f371f41C#code) Yield router for one share token. It wraps deposits of the underlying into shares, and unwraps withdrawn shares to pay the recipient and the relayer fee. #### ASPRegistry Addresses: [0x259C0BEa1d783c202509BD3b2688d23b8AEf58B0](https://etherscan.io/address/0x259C0BEa1d783c202509BD3b2688d23b8AEf58B0#code), [0x046991310B099e86af239d3A4F3AB3e196F24EC7](https://etherscan.io/address/0x046991310B099e86af239d3A4F3AB3e196F24EC7#code) (Implementation (Upgradable)), [0x0000000000000000000000000000000000000000](https://etherscan.io/address/0x0000000000000000000000000000000000000000#code) (Admin) **Past upgrades** (Count of upgrades: No upgrades, Last upgrade: N/A, Avg upgrade interval: N/A) - 2026-09-01 18:30 UTC, deployment of [ASPRegistry](https://etherscan.io/address/0x259C0BEa1d783c202509BD3b2688d23b8AEf58B0#code): transaction [0xc4c8179cb77006b5190cba6d0ecae70485773ad0abd596fc1f96bdc2cb4120aa](https://etherscan.io/tx/0xc4c8179cb77006b5190cba6d0ecae70485773ad0abd596fc1f96bdc2cb4120aa), implementations: [0x046991310B099e86af239d3A4F3AB3e196F24EC7](https://etherscan.io/address/0x046991310B099e86af239d3A4F3AB3e196F24EC7#code) Publishes the association set provider's approved-label roots with their IPFS CIDs, and receives the data that ties each deposit to its label, encrypted to the ASP. #### PPYieldTokenZapETH Addresses: [0x33c1eEf370bBb447414156CFc4fDABD434776EAf](https://etherscan.io/address/0x33c1eEf370bBb447414156CFc4fDABD434776EAf#code) Converts between a share token and its underlying in one call, through Aave v3. #### AccessRouter Addresses: [0x40a6bC296D87f71Ab31Ca3Bfb50513441fBD5160](https://etherscan.io/address/0x40a6bC296D87f71Ab31Ca3Bfb50513441fBD5160#code) Role registry the Privacy Pools v2 core contracts check. No role has a delay. - Roles: - **defaultAdmins**: SafeL2 - **depositors**: Entrypoint - **entrypointManagers**: SafeL2 - **opsAdmins**: SafeL2 - **pausers**: SafeL2 - **postmen**: EOA 2 - **unpausers**: SafeL2 - **upgraders**: SafeL2 #### ppETH Addresses: [0x66051920D25af4E3596A8a46309F4D045F9D83B7](https://etherscan.io/address/0x66051920D25af4E3596A8a46309F4D045F9D83B7#code) ERC-4626 share token over an Aave v3 aToken, the asset the pool holds for a yield deposit. The admin's fee applies to the yield only. - Roles: - **owner**: SafeL2 #### Keystore Addresses: [0x6E463391c79b7e1A88eF26E0B023f9A6C9938a71](https://etherscan.io/address/0x6E463391c79b7e1A88eF26E0B023f9A6C9938a71#code), [0x7b915008ffa267271e9E328430FE328eA02C5F04](https://etherscan.io/address/0x7b915008ffa267271e9E328430FE328eA02C5F04#code) (Implementation (Upgradable)), [0x0000000000000000000000000000000000000000](https://etherscan.io/address/0x0000000000000000000000000000000000000000#code) (Admin) **Past upgrades** (Count of upgrades: No upgrades, Last upgrade: N/A, Avg upgrade interval: N/A) - 2026-09-01 18:29 UTC, deployment of [Keystore](https://etherscan.io/address/0x6E463391c79b7e1A88eF26E0B023f9A6C9938a71#code): transaction [0x50b876488cdaab2020765918b7270329ab4d9194f34126ed5192e33402c1753e](https://etherscan.io/tx/0x50b876488cdaab2020765918b7270329ab4d9194f34126ed5192e33402c1753e), implementations: [0x7b915008ffa267271e9E328430FE328eA02C5F04](https://etherscan.io/address/0x7b915008ffa267271e9E328430FE328eA02C5F04#code) Account registry of Privacy Pools v2: one leaf per account with its nullifying key hash and auth policy, plus an optional X25519 viewing public key. #### PPRouterETH Addresses: [0x77613D670BB9fD48A9898D0eac8ebf21B566F960](https://etherscan.io/address/0x77613D670BB9fD48A9898D0eac8ebf21B566F960#code) Yield router for one share token. It wraps deposits of the underlying into shares, and unwraps withdrawn shares to pay the recipient and the relayer fee. #### PPYieldTokenZapUSDC Addresses: [0x9Ea986BcDF6784D85B518b15bEEE1E65b585817B](https://etherscan.io/address/0x9Ea986BcDF6784D85B518b15bEEE1E65b585817B#code) Converts between a share token and its underlying in one call, through Aave v3. #### ppUSDT Addresses: [0xA4cF419558Ef36CC6FfB666195684dC963910426](https://etherscan.io/address/0xA4cF419558Ef36CC6FfB666195684dC963910426#code) ERC-4626 share token over an Aave v3 aToken, the asset the pool holds for a yield deposit. The admin's fee applies to the yield only. - Roles: - **owner**: SafeL2 #### ppUSDC Addresses: [0xC246aFb23482fF9596E9cee5f1f678eFe0EB1ad6](https://etherscan.io/address/0xC246aFb23482fF9596E9cee5f1f678eFe0EB1ad6#code) ERC-4626 share token over an Aave v3 aToken, the asset the pool holds for a yield deposit. The admin's fee applies to the yield only. - Roles: - **owner**: SafeL2 #### RelaySwaps Addresses: [0xd0395c08DD8eA7671a7A65bDca8E473e8E8260a8](https://etherscan.io/address/0xd0395c08DD8eA7671a7A65bDca8E473e8E8260a8#code) Withdrawal processor that swaps the withdrawn asset through an approved aggregator router, unwrapping yield shares through an approved zap first where needed, with the swap calldata bound into the proof. - Roles: - **owner**: EOA 1 #### PPYieldTokenZapUSDT Addresses: [0xDC3D922df81FC7B7f58229431ED91acB0482f3A5](https://etherscan.io/address/0xDC3D922df81FC7B7f58229431ED91acB0482f3A5#code) Converts between a share token and its underlying in one call, through Aave v3. #### PPRouterUSDC Addresses: [0xe76E793d776c1e207aD7a7fa7C57d27420d85110](https://etherscan.io/address/0xe76E793d776c1e207aD7a7fa7C57d27420d85110#code) Yield router for one share token. It wraps deposits of the underlying into shares, and unwraps withdrawn shares to pay the recipient and the relayer fee. #### Transact4x5Verifier Addresses: [0x01b4954E3b3C1F68785f60D7465c38C31266bfab](https://etherscan.io/address/0x01b4954E3b3C1F68785f60D7465c38C31266bfab#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact1x2Verifier Addresses: [0x0e13d94235d8a0d8f9fC3B63BB41D666eF0677Ed](https://etherscan.io/address/0x0e13d94235d8a0d8f9fC3B63BB41D666eF0677Ed#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact5x3Verifier Addresses: [0x20D4B794A2A1ae7A34AF184172dd931d3ff2Fa32](https://etherscan.io/address/0x20D4B794A2A1ae7A34AF184172dd931d3ff2Fa32#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact1x1Verifier Addresses: [0x21347145497569b34efAB7d73952208866520042](https://etherscan.io/address/0x21347145497569b34efAB7d73952208866520042#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact2x1Verifier Addresses: [0x338625F2199675D2aC4Fbf7A89567864ac990710](https://etherscan.io/address/0x338625F2199675D2aC4Fbf7A89567864ac990710#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact1x4Verifier Addresses: [0x3ee4A00e0ba1AC0Ef8aD3e4b541CA42FBB4592c3](https://etherscan.io/address/0x3ee4A00e0ba1AC0Ef8aD3e4b541CA42FBB4592c3#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact4x2Verifier Addresses: [0x454F1Da26DD4c7c89a849019BeC4c7C7C404d3A4](https://etherscan.io/address/0x454F1Da26DD4c7c89a849019BeC4c7C7C404d3A4#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact4x4Verifier Addresses: [0x4Cb752CEF56a5095321Ed72699cD7A699D48F4b5](https://etherscan.io/address/0x4Cb752CEF56a5095321Ed72699cD7A699D48F4b5#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact3x1Verifier Addresses: [0x579f6734d35937b8432BA8FfC17C3120eb657c82](https://etherscan.io/address/0x579f6734d35937b8432BA8FfC17C3120eb657c82#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### RagequitVerifier Addresses: [0x5a06582115953E2cAbeD8e6A0EeAE35BA430118f](https://etherscan.io/address/0x5a06582115953E2cAbeD8e6A0EeAE35BA430118f#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact5x1Verifier Addresses: [0x61573Cf3c3A20C9739b68B8e742Ca51971387Cb5](https://etherscan.io/address/0x61573Cf3c3A20C9739b68B8e742Ca51971387Cb5#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact2x5Verifier Addresses: [0x62Cf8963300F284016daE0cD19f5D9BC60846a46](https://etherscan.io/address/0x62Cf8963300F284016daE0cD19f5D9BC60846a46#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact5x4Verifier Addresses: [0x766c2F31483935CD55355fcE00fc5eDB82A15acC](https://etherscan.io/address/0x766c2F31483935CD55355fcE00fc5eDB82A15acC#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact3x2Verifier Addresses: [0x76D574559765fd4b90903fFa682964Ae7e7e878a](https://etherscan.io/address/0x76D574559765fd4b90903fFa682964Ae7e7e878a#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact5x5Verifier Addresses: [0x7BeE2554970A749D7671424DFa3fAbE15d7e4BD8](https://etherscan.io/address/0x7BeE2554970A749D7671424DFa3fAbE15d7e4BD8#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact5x2Verifier Addresses: [0x8ABfb288dAc87392EaFdD59F6809825fcA0e8b85](https://etherscan.io/address/0x8ABfb288dAc87392EaFdD59F6809825fcA0e8b85#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact4x1Verifier Addresses: [0x909ECAF2A4959726a2BC3d82Fc837B8D3F1c61d3](https://etherscan.io/address/0x909ECAF2A4959726a2BC3d82Fc837B8D3F1c61d3#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact4x3Verifier Addresses: [0x95dEC97ac78E8C0FfDc6315FDc0A0791238b93A3](https://etherscan.io/address/0x95dEC97ac78E8C0FfDc6315FDc0A0791238b93A3#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact2x2Verifier Addresses: [0xAc716f21626994c4264eA457Fe208071050611B5](https://etherscan.io/address/0xAc716f21626994c4264eA457Fe208071050611B5#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact3x3Verifier Addresses: [0xAeCDf3E27A602f23cEc2E5CE250093b3E806D041](https://etherscan.io/address/0xAeCDf3E27A602f23cEc2E5CE250093b3E806D041#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact2x3Verifier Addresses: [0xB8aa00333b8D6958da72A15D59179BbDD1e49064](https://etherscan.io/address/0xB8aa00333b8D6958da72A15D59179BbDD1e49064#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact1x3Verifier Addresses: [0xC5E1D9D9CF12E796Ec8E072646c6BF29A1e55382](https://etherscan.io/address/0xC5E1D9D9CF12E796Ec8E072646c6BF29A1e55382#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact3x4Verifier Addresses: [0xe0aec1eE10eBfCDcB09b6e5a7ea6Ae34D066219d](https://etherscan.io/address/0xe0aec1eE10eBfCDcB09b6e5a7ea6Ae34D066219d#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### DepositVerifier Addresses: [0xEe96Ca04d2Ab2eC9A8803eb78F39b2875dFF6fdf](https://etherscan.io/address/0xEe96Ca04d2Ab2eC9A8803eb78F39b2875dFF6fdf#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact2x4Verifier Addresses: [0xF1C6c55B70EC3Df923f5E9bcd64aee5c3073C42c](https://etherscan.io/address/0xF1C6c55B70EC3Df923f5E9bcd64aee5c3073C42c#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact1x5Verifier Addresses: [0xfa0138C5dE45E520AbA349BE38a827DAb470f70A](https://etherscan.io/address/0xfa0138C5dE45E520AbA349BE38a827DAb470f70A#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded. #### Transact3x5Verifier Addresses: [0xFdF4EbC7645E1F4c04aE33285b6e3f78e4A3a275](https://etherscan.io/address/0xFdF4EbC7645E1F4c04aE33285b6e3f78e4A3a275#code) Groth16 verifier for one Privacy Pools v2 circuit, with that circuit's trusted-setup verification key hard-coded.