How SolVanish works
SolVanish is a zero-knowledge privacy protocol on Solana. It lets you deposit SOL from one wallet and withdraw the same amount to a completely different wallet — with no on-chain link between the two.
Overview
When you deposit, your SOL goes into a shared on-chain pool and a cryptographic commitment is recorded in a Merkle tree. You receive a private note — a secret string that proves you own that deposit. When you're ready to withdraw, you submit that note along with a destination address. A zero-knowledge proof is generated in your browser that proves you know a valid note in the tree, without revealing which deposit it is. The protocol verifies the proof on-chain and releases the funds to your chosen address.
Because the proof reveals nothing about the deposit wallet, an observer watching the blockchain cannot connect the source and destination.
Step-by-step
Connect your wallet
Connect any Solana wallet (Phantom, Backpack, Solflare, etc.) using the button in the top-right corner.
Select an amount and deposit
Choose a fixed denomination (0.1, 0.5, 1, 5, or 10 SOL) or enter a custom amount. Fixed amounts give better privacy because all deposits of the same size look identical on-chain. Hit Deposit and approve the transaction in your wallet.
Save your note — immediately
After the deposit confirms, a solvanish-v1-… note string is shown. Copy it somewhere safe — a text file, password manager, anywhere offline. This note is the only way to withdraw your funds. If you lose it, the SOL is gone permanently.
Wait (optional but recommended)
For the strongest privacy, wait some time before withdrawing — ideally after other deposits have been made into the pool. The larger the anonymity set, the harder it is to guess which deposit you're withdrawing.
Withdraw to a fresh wallet
Switch to the Withdraw tab. Paste your note, enter the destination address (ideally a wallet with no prior history), and click Withdraw. Your browser generates a ZK proof — this takes around 30–60 seconds. Once done, a transaction is submitted and the funds land at your destination address.
Fees
The 1% withdrawal fee is taken at the protocol level and goes to the fee recipient. No other fees are charged.
Privacy model
Privacy comes from two things working together:
- Zero-knowledge proofs (Groth16). The proof confirms you know a valid note without revealing which commitment in the tree it corresponds to.
- Shared pool. All deposits go into the same contract. An on-chain observer only sees SOL entering and leaving the pool — not which entry maps to which exit.
- Nullifiers. Each note can only be spent once. When you withdraw, a nullifier is published on-chain to prevent double-spending, but it cannot be traced back to your deposit.
For maximum privacy: use a fresh destination wallet, withdraw to a different amount than you deposited (use multiple notes), and allow time between deposit and withdrawal.
Private note format
Your note looks like this:
It encodes your UTXO secret keys, leaf index in the Merkle tree, deposit transaction signature, and amount. Notes are stored in your browser's local storage for convenience, but you should always keep a separate backup — clearing browser data will remove them.
FAQ
What happens if I lose my note?
The funds are permanently inaccessible. There is no recovery mechanism — this is a property of zero-knowledge systems. Always back up your note.
Is this non-custodial?
Yes. The protocol is entirely on-chain. No one else holds your funds and no server is involved in the deposit or withdrawal flow. The ZK proof is generated locally in your browser.
Why does proof generation take 30–60 seconds?
Generating a Groth16 proof requires heavy computation. This runs fully in your browser using WebAssembly, so no proof data ever leaves your device.
Can I withdraw to the same wallet I deposited from?
You can, but it defeats the purpose. For meaningful privacy, withdraw to a wallet that has never interacted with your depositing wallet.
Can I split a deposit across multiple withdrawals?
Not directly — each note corresponds to one fixed deposit amount. To receive funds across multiple wallets, make multiple separate deposits and withdraw each note independently.
What network is this on?
Solana Mainnet.
Technical details
Proof system
Groth16 (snarkjs)
Hash function
Poseidon
Merkle tree depth
26 levels
Root history
100 roots
Fixed denominations
0.1 · 0.5 · 1 · 5 · 10 SOL
Program
Anchor (Solana)