Search for projects by name or address
A shielded pool for ERC-20 tokens on OP Mainnet, designed for institutional users. Provides TEE-backed privacy, balancing better UX with worse privacy trust assumptions.
A shielded pool for ERC-20 tokens on OP Mainnet, designed for institutional users. Provides TEE-backed privacy, balancing better UX with worse privacy trust assumptions.
Privacy Boost is a shielded pool for registered ERC-20 tokens on OP Mainnet, aimed at institutional users. The operator’s TEE setup has to be trusted for privacy and liveness, while ZKPs ensure validity and an exit path against a malicious or faulty operator.
Deposited tokens are represented as notes whose Poseidon2 commitments are appended to an onchain Merkle tree, and spending a note publishes its nullifier. Users can privately transfer deposited tokens to other users. The TEE collects user-approved transfers and withdrawals, batches them into epochs, and a permissioned relay submits each epoch onchain with a Groth16 proof that checks correctness.
Each user registers an approval public key in the AuthRegistry, and the pool normally snapshots the registry’s Merkle roots every 1 minute. Any user whose approval key is included in the snapshot can locally generate a forced withdrawal to an address of their choice, executable 3 days after it is requested. A forced withdrawal is generated locally and executed onchain, with no cooperation from the TEE or relays.
If the operator disappears, no new deposits or private transfers can be processed and the pool effectively enters this exit-only mode, in which the zero-knowledge guarantees alone are sufficient to recover funds.
All private data exists in plaintext inside the operator’s TEE. This privacy depends on the hardware security of the TEE against actors with physical access (side-channel and microarchitectural attacks could expose the full plaintext ledger), as well as vendor vulnerabilities. Currently the source code running within TEE is not published, so it is impossible to verify the TEE node.
A permissionless forced withdrawal publishes the commitments of the spent notes and the registered account ID, publicly linking the exit of specific notes with the EOA that registered auth keys. It is a fallback mechanism that reclaims the user’s tokens but strips the privacy.
Practical privacy also depends on the timing and amounts of deposits and withdrawals, as well as on the frontend used to interact with the pool. Normal withdrawals and transfers within the private pool are not submitted as onchain transactions via RPC nodes, but directly to the TEE, thus not leaking anything to the RPC. Users are advised to research OPSEC best practice.
Deposits into the pool are free of protocol fees. All withdrawals pay a 0.4% fee on the withdrawn amount, which is forwarded to the treasury.
Registered auditors can query the Audit API of the TEE to fetch the balance and transaction history of any address. The TEE serves such requests without user consent, but is supposed to emit a record of every access on the AuditGateway smart contract, so users can publicly verify whether and when their private data was disclosed.
Currently the source code running within TEE is not published, so it is impossible to verify the onchain audit attestation.
Privacy Boost is controlled by the 2/3 admin multisig that can upgrade core smart contracts, replace the epoch, deposit and forced withdrawal verifiers, register or replace verifying keys for individual circuit shapes, set the withdrawal fee up to 10%, and change the treasury and operator addresses.
Circuit-specific trusted setup for the 18 Groth16 circuits of the Privacy Boost protocol over the BN254 curve, run by Sunnyside Labs and finalised on 1 April 2026. It reuses the first 80 contributions of the public Perpetual Powers of Tau ceremony as Phase 1. Phase 2 is a gnark-native MPC ceremony, the published manifest records 25 participants and 425 contributions in total, between 23 and 25 per circuit. Participants are identified by GitHub username.
Verifier | Verification | Used in | Known deployments | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Privacy Boost epoch verifier, 14 circuits | by | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description Verifies the batched private transfer and withdrawal proofs. Verifier ID: Privacy Boost epoch verifier 18.08.2026Known deployments Verification steps The epoch verifier stores verification keys for 14 different batched private transfer and withdrawal circuits with varying Helper scripts implementing all of the reproduction steps are in the script archive.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Privacy Boost deposit verifier, 3 circuits | by | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description Verifies the batched deposit epoch proofs. Verifier ID: Privacy Boost deposit verifier 18.08.2026Known deployments Verification steps The deposit verifier stores verification keys for 3 different batched deposit circuits across 3 registered batch sizes ( Helper scripts implementing all of the reproduction steps are in the script archive.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Privacy Boost forced withdrawal verifier, 1 circuit | by | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Description Verifies the client-side forced withdrawal proofs. Verifier ID: Privacy Boost forced withdrawal verifier 18.08.2026Known deployments Verification steps The forced verifier stores a verification key for the forced withdrawal circuit. The steps below reproduce it from circuit sources and trusted setup files. They require 36-64 GiB RAM and ~90 GiB disk space. Helper scripts implementing all of the reproduction steps are in the script archive.
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Initial discovery of privacy boost.
Initial discovery of privacy boost.
| + | Status: CREATED |
| contract TokenRegistryProxyAdmin (oeth:0x11B75DE42f6107AE4D5C50e4e34af6E34F63C0dd) [global/ProxyAdmin] | |
| +++ description: Admin contract of the TokenRegistry proxy. |
| + | Status: CREATED |
| contract AuthRegistry (oeth:0x54e87D7D0E420B24B9FdFE9cFcAe88162093A48f) [privacy-boost/AuthRegistry] | |
| +++ description: Registry of account authorization keys for the PrivacyBoost pool. Accounts register BabyJubJub approval public keys into Merkle trees with EIP-712 owner signatures (submitted directly or through allowed relays), and can rotate or revoke them. PrivacyBoost snapshots the tree roots and epoch proofs validate spend authorization against them. |
| + | Status: CREATED |
| contract AdminMultisig (oeth:0x6476cBeBbce2673aeDAa464a4b9f31FD284aA0dC) [GnosisSafe] | |
| +++ description: None |
| + | Status: CREATED |
| contract Groth16EpochVerifier (oeth:0x67b1bD839203223870fBF51e4CDf2104E3Ca966b) [privacy-boost/Groth16EpochVerifier] | |
| +++ description: Groth16 verifier for PrivacyBoost private transfer / withdrawal epoch proofs. Verification keys are stored in SSTORE2 data contracts, keyed by circuit configuration (max transfers, inputs and outputs per transfer). Registered epoch keys are not enumerable on-chain. |
| + | Status: CREATED |
| contract OperatorMultisig (oeth:0x78a927114A20Fb34b9d8d9c6a9A75E65f918D52B) [GnosisSafe] | |
| +++ description: None |
| + | Status: CREATED |
| contract TokenRegistry (oeth:0x867872f80b1e22D30C4b06FcB474aC10B9DAA2f6) [privacy-boost/TokenRegistry] | |
| +++ description: Registry mapping compact token IDs to the ERC-20 tokens accepted by the PrivacyBoost pool. |
| + | Status: CREATED |
| contract AuditGatewayProxyAdmin (oeth:0x96f3E5551E1330f31974597217019812667544c8) [global/ProxyAdmin] | |
| +++ description: Admin contract of the AuditGateway proxy. |
| + | Status: CREATED |
| contract PrivacyBoostProxyAdmin (oeth:0x9d3F3CcD3c7a084eE73C4584CE33e77CEdaEc7E2) [global/ProxyAdmin] | |
| +++ description: Admin contract of the PrivacyBoost proxy. |
| + | Status: CREATED |
| contract AuditGateway (oeth:0xb328535aB3bCe578996AE9af5A7f44f175721118) [privacy-boost/AuditGateway] | |
| +++ description: Manages the list of auditors authorized to query private user data through the Audit API of the TEE, and stores an onchain log of every audit access so that users can publicly verify whether and when their private data was disclosed. |
| + | Status: CREATED |
| contract TreasuryMultisig (oeth:0xc82018cbC82A50064e3DdEF79EAdC319710Ffc5e) [GnosisSafe] | |
| +++ description: None |
| + | Status: CREATED |
| contract Groth16DepositVerifier (oeth:0xC829061276e95D11aF92E678DE2B767AcFB4e924) [privacy-boost/Groth16DepositVerifier] | |
| +++ description: Groth16 verifier for PrivacyBoost deposit epoch proofs. Verification keys are stored in SSTORE2 data contracts, registered per supported batch size. |
| + | Status: CREATED |
| contract PrivacyBoost (oeth:0xca689828854a422CF1f778be03CA80549408F620) [privacy-boost/PrivacyBoost] | |
| +++ description: Main contract of the PrivacyBoost private transfer pool. It escrows registered ERC-20 tokens deposited against note commitments, and lets allowed relays batch private transfers and withdrawals into epochs that are verified with Groth16 proofs against a note Merkle tree. Users can exit without relay cooperation via a delayed forced withdrawal with their own proof. |
| + | Status: CREATED |
| contract Groth16ForcedVerifier (oeth:0xF023c61C5c745Be40fd30B0d48C0929839Ec3C67) [privacy-boost/Groth16ForcedVerifier] | |
| +++ description: Groth16 verifier for PrivacyBoost forced withdrawal proofs, used by the permissionless exit path. Verification keys are stored in SSTORE2 data contracts, registered per supported input count. |
| + | Status: CREATED |
| contract AuthRegistryProxyAdmin (oeth:0xfB66dfD80B9a96c2BF2bcfDC5E6715C48916eD6C) [global/ProxyAdmin] | |
| +++ description: Admin contract of the AuthRegistry proxy. |

A Multisig with 2/3 threshold.
A Multisig with 2/3 threshold.
A Multisig with 2/3 threshold.

Admin contract of the TokenRegistry proxy.
Registry of account authorization keys for the PrivacyBoost pool. Accounts register BabyJubJub approval public keys into Merkle trees with EIP-712 owner signatures (submitted directly or through allowed relays), and can rotate or revoke them. PrivacyBoost snapshots the tree roots and epoch proofs validate spend authorization against them.
Registry mapping compact token IDs to the ERC-20 tokens accepted by the PrivacyBoost pool.
Admin contract of the AuditGateway proxy.
Admin contract of the PrivacyBoost proxy.
Manages the list of auditors authorized to query private user data through the Audit API of the TEE, and stores an onchain log of every audit access so that users can publicly verify whether and when their private data was disclosed.
Main contract of the PrivacyBoost private transfer pool. It escrows registered ERC-20 tokens deposited against note commitments, and lets allowed relays batch private transfers and withdrawals into epochs that are verified with Groth16 proofs against a note Merkle tree. Users can exit without relay cooperation via a delayed forced withdrawal with their own proof.
Groth16 verifier for PrivacyBoost forced withdrawal proofs, used by the permissionless exit path. Verification keys are stored in SSTORE2 data contracts, registered per supported input count.
Admin contract of the AuthRegistry proxy.