# Privacy Pools v2 Markdown version of https://l2beat.com/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: $259.27 K (more than +1K% compared to seven days ago) - Assets tracked: 4 - Buckets tracked: 4 - Deposits 7D: 123 (+324% compared to the previous seven days) - Deposits 30D: 192 - Deposits Total: 248 - Active Relayers 30D: 2 - Tracked on: Ethereum - Attributes: ZK, Transfers, DeFi, Any amount ### 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: 80 participants (sentiment: warning). Privacy Pools v2: 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. - 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 not against a new implementation. 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 shield ETH, USDC or USDT in one pool, 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 one key that can upgrade every core contract without delay. The ASP can withhold or revoke approval for any deposit. Exiting is permissionless: a note's owner can always ragequit it from the vault, losing their privacy. ### 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 onchain 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 The ratings assume the website at [privacypools.com](https://privacypools.com), built from [public source](https://github.com/0xbow-io/privacy-pools-website-v2) and hosted by 0xbow. 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. It does not support connecting a local node with Tor enabled. Privacy Pools v2 is deployed on BNB Chain, Citrea, Optimism, Base, Arbitrum and Robinhood Chain, which L2BEAT 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 at any time, 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 later list can drop an approved label, which freezes every note that carries 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. A private transfer pays that fee as a public payout from the vault. 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, including the notes that transfers and reshields created from them. 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. 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. On any other note, a ragequit names the private transaction that created it. **Inside** - Sender: private - Recipient: private - Amount: private - Asset: private - Link: at risk. A ragequit names the transaction that created the note. **Sources** - [PoolVault](https://l2beat.com/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](https://privacy-pools-v2-docs.vercel.app/operations/transfer) - [Ragequit publishes the label and owner](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 one pairs a deposit with its withdrawal, and a yield deposit's share count encodes the day it was made. 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 a pool with a large anonymity set. 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://l2beat.com/privacy/projects/privacy-pools-v2#ASPRegistry) - [Share counts encode the exchange rate at deposit](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. Learns IP addresses, timing, fingerprints and ciphertext. 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, Alchemy under 0xbow's key with a public node as fallback, see the account at sign-in and can time it against the withdrawal. Network services like the LI.FI swap service and Sentry error reporting receive your IP address unless the app is used over Tor or a VPN, while the Tor mode is not compatible with a local Ethereum node. The app confirms a relayed withdrawal from bulk reads, so no request names it, and the pairing rests on timing, which Tor does not hide. The app downloads the pool's events whole from the ASP and matches notes locally. The relayer learns the recipient at quote time. Tor Browser works, but the relayer refuses many Tor exits and the app offers no other relayer. **Advice:** Set your own node, served over https, as the endpoint for the chain before signing in. Withdraw in a new Tor Browser session signed in with your account key, so no wallet is connected, and retry on a new circuit when the relayer refuses. **Inside, compared with a public observer** - Link: at risk. Private only from an own node, with a new Tor Browser session for the exit. **Sources** - [Alchemy first, public node last](https://github.com/0xbow-io/privacy-pools-website-v2/blob/bfb752cdf7c0659bb4fd25e97933e04fce844c4a/config/rpc-order.ts#L55-L70) - [Allowlist refuses per-note reads and topic filters](https://github.com/0xbow-io/privacy-pools-website-v2/blob/bfb752cdf7c0659bb4fd25e97933e04fce844c4a/services/egress-policy.ts#L447-L520) - [The receive quote carries the recipient](https://github.com/0xbow-io/privacy-pools-website-v2/blob/bfb752cdf7c0659bb4fd25e97933e04fce844c4a/services/egress-policy.ts#L606-L617) - [Tor needs a gateway the user runs](https://github.com/0xbow-io/privacy-pools-website-v2/blob/bfb752cdf7c0659bb4fd25e97933e04fce844c4a/config/tor.ts#L1-L50) ### Privileged insider Link at risk (sentiment: warning) **Who:** Holds an operator role, custodies funds, receives keys or plaintext by design, or delivers the client: 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 relayer sees the IP and recipient of every private exit and its ASP feeds see the IP of every session, so one operator can pair a deposit session with its withdrawal. 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. One key holds every admin role and can upgrade the four core contracts without delay. **Advice:** Before withdrawing, check the size of the approved list behind the latest root, which the ASPRegistry links on IPFS. Exit as the network observer advice says, so 0xbow sees no IP it saw at the deposit and no account lookup. **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://l2beat.com/privacy/projects/privacy-pools-v2#ASPRegistry) - [transact: only the latest ASP root is accepted](https://l2beat.com/privacy/projects/privacy-pools-v2#PoolVault) - [What the relayer receives, the IP included](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://l2beat.com/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://l2beat.com/privacy/projects/privacy-pools-v2#trusted-setups) ## Value Locked The interactive value chart is shown on [the HTML page](https://l2beat.com/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://l2beat.com/privacy/projects/privacy-pools-v2#privacy-anonymity-set). ## Flows The interactive flows chart is shown on [the HTML page](https://l2beat.com/privacy/projects/privacy-pools-v2#privacy-flows). ## Assets Breakdown | Asset | Deposits 7D | Deposits 30D | Deposits Total | Value Locked | | --- | --- | --- | --- | --- | | ppETH | 65 ($217.24 K) | 93 ($218.49 K) | 103 ($233.02 K) | $215.98 K | | ppUSDC | 45 ($67.53 K) | 68 ($68.21 K) | 88 ($69.04 K) | $37.52 K | | ppUSDT | 13 ($20.69 K) | 30 ($21.04 K) | 39 ($29.73 K) | $28.06 K | | ETH | 0 ($0.00) | 1 ($10.74) | 18 ($642.71) | $302.33 | | Total | 123 ($305.47 K) | 192 ($307.76 K) | 248 ($332.43 K) | $281.87 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://l2beat.com/privacy/projects/privacy-pools-v2#trusted-setups) participants collude or leak their secrets, allowing forged proofs. 3. the upgrader key deploys a malicious [upgrade](https://l2beat.com/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. ### Use can be stopped if 1. the upgrader key pauses deposits and spends, or raises the vetting fee on deposits up to 99.99% of their value. ### 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). 7. elliptic-curve cryptography is broken, which decrypts every onchain note from the published viewing keys (see future adversary). ## Upgrades & Governance One EOA 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, replace the verifiers, pause deposits and spends, enable assets, set a vetting fee of up to 99.99% on deposits and cap relayer fees, all without delay. It also administers the three yield shares, with a fee of at most 20% of the yield. The shares hold Aave v3 deposits, whose contracts Aave governance can upgrade after a public vote and delay. Aave's guardian multisig can pause a reserve instantly, which blocks redeeming its shares. A second EOA holds the postman role that publishes approved-label roots. A third owns RelaySwaps and curates its routers. No timelock or multisig is deployed. Ragequit cannot be paused, so funds already in the vault can leave to their owners as long as the implementation is not changed. ## 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) 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 ### 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. ## Updates Each date links the update on the HTML page, which also shows its contract diffs. ### [2026-10-21 05:05 UTC](https://l2beat.com/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, L2BEAT's contract explorer: https://disco.l2beat.com/ui/p/privacy-pools-v2 ### Ethereum #### Actors ##### 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: [0x12Dbd6335d7f529F8922420Ba9c15c9E7A324c92](https://etherscan.io/address/0x12Dbd6335d7f529F8922420Ba9c15c9E7A324c92) - 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 the Aave 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 the Aave 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 the Aave rewards controller and rescue tokens other than the backing aToken ##### EOA 2 Addresses: [0xa05B43E1dcdCe0c6A40471a602038BC346900758](https://etherscan.io/address/0xa05B43E1dcdCe0c6A40471a602038BC346900758) - Can interact with AccessRouter - publish the approved-label root every private spend must match ##### EOA 3 Addresses: [0x0967755AfA2016866D12EefB820705026842dCe8](https://etherscan.io/address/0x0967755AfA2016866D12EefB820705026842dCe8) - Can interact with RelaySwaps - approve the aggregator routers and yield zaps that RelaySwaps sends withdrawn funds through ## Smart contracts Explore these contracts and permissions in Disco, L2BEAT'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**: EOA 1 - **depositors**: Entrypoint - **entrypointManagers**: EOA 1 - **opsAdmins**: EOA 1 - **pausers**: EOA 1 - **postmen**: EOA 2 - **unpausers**: EOA 1 - **upgraders**: EOA 1 #### 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**: EOA 1 #### 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**: EOA 1 #### 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**: 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. #### RelaySwaps Addresses: [0xd0395c08DD8eA7671a7A65bDca8E473e8E8260a8](https://etherscan.io/address/0xd0395c08DD8eA7671a7A65bDca8E473e8E8260a8#code) (unverified) Withdrawal processor that swaps the withdrawn asset through an approved aggregator router, with the swap calldata bound into the proof. - Roles: - **owner**: EOA 3 The source code of this contract is not verified on Etherscan. The current deployment carries some associated risks: - Funds can be stolen if the source code of unverified contracts contains malicious code (CRITICAL).