Shielded pool

A pool of deposits whose participants are mutually anonymous, backed by a Merkle tree and verifying nullifier uniqueness.

A shielded pool is the on-chain object that holds the deposits and verifies the withdrawals. SolMask's pool is a single Solana program owning four PDAs: vault (the token account that custodies the asset), merkle_frontier (the append-side of the Merkle tree), root_history (the rolling list of recent valid roots), and nullifier_set (the spent-note registry).

The privacy guarantee a pool offers is the size of its anonymity set: the set of deposits that any given withdraw could plausibly correspond to. If the pool holds one deposit, anonymity is zero. If it holds ten thousand deposits, an observer trying to link any specific withdraw to a specific deposit faces a one-in-ten-thousand guess — and that's before mixing in the privacy delay.

SolMask runs a separate shielded pool per asset (one for SOL, one for USDC, one for USDT), because mixing deposits across mints would require revealing amounts at withdraw, defeating the construction. Cross-asset privacy is achieved by Jupiter-swapping inside the withdraw transaction, not by mixing the pools themselves.

Related terms

Shielded pool · Glossary · SolMask