Send SOL privately on Solana
Solana · 9 decimals
Sending SOL privately means breaking the link between the address that holds your stake-weighted, exchange-attributed, or otherwise public balance and the fresh address where you want to spend, receive, or hold. SolMask's SOL pool accepts a deposit of native lamports, mints you a note off-chain, and a withdraw lands plain SOL in a recipient address with no on-chain edge back to the deposit. The pool is a per-asset vault: SOL goes into the SOL vault, SOL comes out, and the anonymity set is every other SOL depositor whose note is still unspent. The economics are linear — there is no slippage, no AMM curve, and the per-recipient withdraw fee is constant at 0.003 SOL regardless of withdraw size. For a 1 SOL transfer the fee is 0.3% of the move; for a 100 SOL transfer it is 0.003%. Larger sends are dramatically more efficient per-dollar than smaller ones, which is the right shape for a privacy-as-utility pricing model.
How to send SOL privately
- 01
Deposit SOL
Open the SolMask app, switch to the Deposit tab, and pick SOL. Enter the amount, choose a privacy delay, and sign. Your note secrets are derived from your wallet — no passphrase to choose, no file to save. The deposit is free — the full amount enters the pool — and mints a Poseidon commitment into the SOL Merkle tree, and publishes a wallet-encrypted recovery blob on-chain so the same wallet can rediscover the note on any device.
- 02
Wait for the unlock slot
The unlock slot is set at deposit time. Until that slot passes, the note cannot be spent. The waiting period is what grows the anonymity set — every other SOL deposit in the same window becomes a plausible source for your eventual withdraw.
- 03
Reconnect and choose a recipient
Switch to the Send tab and connect the same wallet you deposited with. SolMask re-derives your notes and recovers your balance from the on-chain blobs automatically — nothing to upload. Paste the recipient address; the browser generates the Groth16 withdraw proof locally, and your secrets never leave the device.
- 04
Withdraw arrives
The relayer signs and submits the withdraw transaction. The recipient's address receives SOL from the vault, with no on-chain edge to the depositing address. The on-chain footprint is one anonymous withdraw alongside every other withdraw in the same block.
Fees for SOL
Deposit fee: none. Deposits are free — a 1,000 SOL deposit mints a note worth the full 1,000 SOL.
Withdraw percentage fee: 23 bps (0.23%) of the withdrawn amount, taken in SOL at withdraw time and accrued to the pool's token fee vault. Admin-tunable on-chain (capped at 1.00%).
Withdraw flat fee: 0.003 SOL per recipient, charged by the protocol at withdraw time. This is what funds the on-chain Groth16 verifier compute and the relayer's submission cost — the relayer signs and submits the transaction, but the fee covers it; the relayer does not subsidise the gas. For multi-recipient sends the fee scales linearly: 5 recipients = 0.015 SOL.
No spread, no slippage. The SOL you deposit is the same SOL that comes out at the other side (less the withdraw fee). There is no AMM, no oracle, no liquidity provider to compensate.
Pool details
- Mint
- So1111…111112
- Decimals
- 9
- Withdraw fee
- 23 bps + 0.003 SOL
- Withdraw fee
- 0.003 SOL
FAQ
- Does the recipient need anything to receive their SOL?
- No. The withdraw delivers SOL directly to the recipient address — the 0.003 SOL withdraw fee is taken from the protocol-side fee mechanism, not from the recipient's balance. If the destination is a fresh wallet with zero balance, it works.
- How long do I have to wait between depositing and withdrawing SOL?
- You pick the unlock slot at deposit time. The minimum is the current slot (effectively instant), but the longer you wait, the larger the anonymity set your withdraw blends into. The recommendation for sensitive transfers is at least several hours, ideally a day or more, so your withdraw is statistically indistinguishable from any other note unlocked in the same window.
- Is the SOL I receive the same SOL I deposited?
- Functionally yes — it is native SOL, identical to any other SOL on Solana, and is fully fungible. The specific lamports the recipient receives came from the vault's pool of deposits, not from any particular depositor's transaction. That is the entire mechanism.
- What is the maximum SOL I can send privately?
- There is no per-transaction cap. The practical limit is the pool's anonymity set — if you withdraw an unusually large amount that has no comparable peer deposit in the same epoch, the size itself becomes an identifying signal. For very large transfers the recommended approach is to split into peer-comparable amounts across multiple recipients, which the Send tab supports.