The shield
The shared pool that breaks the link between your wallets.
What it is
The shield is a shared pool of SOL. You put SOL in from one wallet and take it out to another. When you take it out, you prove that one of the deposits is yours without revealing which one — so nobody watching the chain can tell which deposit became which withdrawal.
Hover a deposit on the left: its trail stops at the pool. That's not a simplification of the picture — the chain genuinely records only that deposits went in and withdrawals came out, never which matched which.
Depositing
- 1Pick a pool size0.1, 1, 10 or 100 SOL. Every deposit in a pool is the same size.
- 2Save your secret noteYour browser makes two random secrets and turns them into a note. Save it somewhere safe before you continue.
- 3Confirm the depositOnly a fingerprint of your note goes on chain. It reveals nothing about the note itself.
ztonk-1000000000-5f2c…e91a
└─ pool size in lamports (1 SOL)Withdrawing
Paste your note and the address you want the SOL sent to. Your browser builds a zero-knowledge proof — a short piece of data that convinces the program you own one of the pool's deposits, without saying which. A relayer submits it and pays the network fee, so the receiving wallet can start completely empty.
The relayer can't redirect your SOL
The recipient address and the relayer's fee are built into the proof. If the relayer changed either one, the proof would stop being valid and the program would reject it. The worst a relayer can do is refuse to submit — and then you can use a different one.
Each note works once
Withdrawing records a second fingerprint of your note (a nullifier) that can't be linked to the deposit. Using the same note twice would produce the same nullifier, and the program refuses it.
Why fixed sizes
If you deposited 3.217 SOL and later withdrew 3.217 SOL, the amount alone would give you away. With fixed sizes, every deposit in a pool looks the same, so you're hidden among everyone else in that pool. To move an odd amount, split it across pools and withdraw at different times.
Details
| Deposits per pool | About 1 million |
| Proof system | Groth16, checked on chain with Solana's built-in alt_bn128 operations |
| Proof stays valid | Against any of the pool's last 64 states, so other people depositing while you prove doesn't break it |
| Relayer fee | Set when you withdraw, up to a cap fixed per pool |
- The shield only holds SOL. Tokens you buy with it sit in the new wallet like any other.
- Proofs are made entirely in your browser; your note never leaves your device.