What it costs, itemised

About 0.001 SOL a note. Almost all of it is rent to the chain, and none of it is a percentage.

The figures below are measured, not estimated: scripts/measure-costs.js reads the lamport deltas from a real deposit and a real withdrawal on mainnet.

Where the money goes

ItemRoughlyPaid to
nullifier account rent~0.00097 SOLthe chain, permanently
transaction fees~0.00001 SOLvalidators
relayer marginsmall, shown before you confirmthe relayer
percentage of your depositnone

Why the rent dominates

Solana charges rent to keep an account alive. The record marking a note as spent has to exist for as long as the pool does, because the moment it disappears the note can be spent again. So it is paid for once, up front, and it lasts. Nobody chose that charge and nobody collects it — it is the price of the double-spend guard being permanent.

Flat, not proportional

The cost does not scale with the amount. Mix 0.1 SOL and 0.001 SOL is 1% of it. Mix 10 SOL and the same 0.001 SOL is 0.01%. That inverts the usual advice: the small pools are the expensive ones in relative terms, and they are also the thinner crowds. Both arguments point the same way.

The relayer's cut, and why it exists

A brand-new destination wallet holds no SOL, so it cannot pay for its own transaction. Funding it from your old wallet would rebuild exactly the link you are paying to remove. A relayer broadcasts instead and takes its fee from the withdrawal. The fee and the recipient are both bound into the proof, so it cannot quietly raise one or change the other — a modified transaction stops verifying.

The cost nobody prices

Waiting. It is free, it does more for your privacy than any fee you pay, and it is the step people skip. A deposit and a withdrawal minutes apart are linkable on timing whatever they cost.

Compare with routing through an exchange, where the fee is lower and the price is your identity.