PrivacyArchitecture

System Architecture

Technical overview of Universal Private Pools

Tech Preview

Architecture may change before mainnet.

Design Principles

  1. Privacy with compliance - Hide details from observers, maintain auditability
  2. No relayers - Users pay gas directly
  3. Multi-token - Single pool for all ERC-20 tokens

Why Universal Pool?

Privacy needs a large anonymity set - the group your transaction could belong to.

Per-token pools fragment this. A universal pool combines all users:

Per-token:     UPD (1000) + USDC (500) + DAI (200) = fragmented
Universal:     All tokens in one pool = 1700 users

System Diagram

Key Components

State Merkle Tree

Stores note commitments using LeanIMT (Lean Incremental Merkle Tree):

  • Depth: 32 levels (~4B notes)
  • Hash: Poseidon
  • Root history: 64 recent roots for timing flexibility

Nullifier Set

Prevents double-spending. When a note is spent, its nullifier is recorded. Same note can't be spent twice.

ASP Registry

Manages compliance providers. Each ASP maintains a Merkle tree of approved origins.

Operations

OperationInputOutputGas
ShieldPublic tokens1 note~150k
Transfer1 note2 notes~350k
Merge2 notes1 note~400k
Withdraw1 notePublic tokens~350k

Token Support

Any ERC-20 works. Token address is included in commitment:

commitment = Poseidon(amount, blinding, origin, token)

No "transmutation" - what you deposit is what you withdraw.

Cryptographic Stack

ComponentPrimitiveSecurity
CommitmentsPoseidon hash~128 bits
KeysBabyJubJub curve~128 bits
ProofsGroth16~128 bits
EncryptionAES-GCM~128 bits

On this page