All posts
2026-05-28

Sending SOL without revealing your main wallet

Every SOL transfer you have ever signed is permanently readable by anyone with a block explorer. Send 5 SOL from your main wallet to a friend, an exchange, or a new address, and the link between those two wallets is now a fact on a public ledger — amount, timestamp, both addresses, forever. If your main wallet has ever touched a centralized exchange, an NFT mint, or a Twitter-linked airdrop, that wallet is effectively your name. Anyone you pay can walk the graph backwards and see your balance, your history, and who else you transact with.

This post is the practical version: how to move SOL so the receiving side carries no on-chain trail back to the wallet you started from. It is a how-to, not a theory piece. If you want the underlying reasoning, /blog/what-the-blockchain-reveals-about-you covers why the chain is this transparent in the first place.

Why a normal transfer can't be made private

There is no setting on a standard SOL transfer that hides the sender or recipient. The transaction is the link. People sometimes try to launder the trail by hopping through several intermediate wallets — A pays B pays C pays D — but every hop is still public, so the chain of custody is fully reconstructable. Three hops doesn't break the link; it just adds three rows to the trail.

Breaking the link requires a step where many people's funds become indistinguishable from each other — a shielded pool. You deposit into a shared pool behind a cryptographic commitment, and later withdraw to a destination using a zero-knowledge proof that says "I own one of the deposits in here" without revealing which one. The deposit and the withdraw are two unrelated-looking on-chain events. That's the mechanism; /learn/what-is-a-shielded-pool is the plain-English explainer.

The flow, step by step

1. Deposit from your main wallet. Open /swap, connect your main wallet, pick SOL and an amount, and deposit. Depositing is free — the full amount enters the pool (/blog/fee-model-explained covers why the fee lands on the way out, not the way in). Your wallet generates the note locally in the browser and writes only its commitment — a hash — to the chain. Nobody watching the deposit can tell what you'll eventually withdraw or where.

2. Choose a privacy delay, and actually use it. At deposit time you set an unlock delay. The default is 10 minutes; you can choose up to a week. This is the single most underrated control, because the longer your deposit sits in the pool while other deposits flow in around it, the larger the crowd you blend into. Picking a delay and then withdrawing the instant it elapses throws away most of the benefit. /blog/the-privacy-delay-explained explains why patience after unlock is free anonymity.

3. Prepare a fresh recipient address. The destination should be a wallet with zero prior on-chain history — never funded from your main wallet, never used to mint, claim, or trade. This is where most people quietly leak. If you withdraw cleanly to an address that already received SOL from your main wallet last month, you've reconnected both ends yourself. /learn/choosing-a-recipient-address is required reading; it's the highest-leverage step here after the deposit.

4. Withdraw to the fresh address. Generate the withdraw proof in your browser and submit it through the relayer. The relayer broadcasts the transaction and pays the network fee, so the fresh wallet doesn't need any SOL to receive funds — which matters, because funding the fresh wallet from your main wallet to cover gas would re-link them. The relayer sees the proof and the public inputs but never learns which deposit is yours (/glossary/relayer).

The result on-chain: a deposit from your main wallet, and — minutes or days later — an unrelated withdraw to a fresh address. No edge connects them.

The mistakes that undo all of it

The protocol gives you unlinkability; you can hand it back through operational slips. The common ones:

  • Funding the fresh wallet from your main wallet. Even a tiny "gas top-up" transfer reconnects the two. You don't need to — the relayer covers gas.
  • Withdrawing the instant you unlock, right after depositing. A deposit and a withdraw clustered in the same few minutes with no peer activity between them is trivially correlated by timing alone. Decorrelate in time.
  • Reusing a "fresh" address that isn't fresh. Any prior transaction on the destination defeats the purpose. One address, one use.
  • Off-chain tells. Withdraw to a new wallet and then immediately buy an NFT tied to your public identity, and the inference is fatal regardless of how clean the on-chain leg was. Privacy is a pipeline; the chain is one stage. /learn/what-solmask-cannot-protect-you-from is the honest list of what's still on you.

What if the recipient wants USDC, not SOL?

You can deposit SOL and have the recipient receive a different asset entirely — the withdraw can route through a swap so the destination gets USDC while the link stays broken. That's a separate walkthrough: /blog/swapping-sol-to-usdc-privately.

If you'd rather see the whole picture as a checklist before you start, /blog/solana-wallet-privacy-checklist is the one-page version of everything above.

FAQ

Q. Can't I just send through a few intermediate wallets instead? A. No. Every hop is public, so the trail is fully reconstructable no matter how many wallets you chain. You need a step where your funds become indistinguishable from many others' — that's what the pool does and hop-chains don't.

Q. Does the recipient need SOL to receive the withdraw? A. No. The relayer pays the network fee and broadcasts on your behalf, which is deliberate — it means you never have to fund the fresh wallet from a wallet linked to you.

Q. How long should I wait between deposit and withdraw? A. Longer than the bare minimum. Ten minutes is the floor for casual use; for anything you care about, let hours or days pass with pool activity in between. The cost is calendar time, not effort, and the payoff is a much larger crowd to hide in.

Q. Is depositing really free? A. Yes — the full amount enters the pool. The fee is charged on withdrawal, in the asset withdrawn, plus a small flat SOL amount. See /blog/fee-model-explained or /docs/fees.

Q. Will my main wallet still show the deposit? A. Yes — your main wallet publicly shows that it deposited into the pool. What's hidden is the connection to where the funds came out. Anyone can see you used a shielded pool; nobody can see which withdraw was yours.

Sending SOL without revealing your main wallet · SolMask