About ten cents a note, and almost all of it goes to the chain rather than to anyone running this.
There is no percentage cut on TornadoSol. You pay Solana, and you pay a small relayer margin if you use one. Here is the whole bill, measured from the lamport deltas of a real deposit and withdrawal rather than estimated.
| item | SOL | what it is |
|---|---|---|
| deposit transaction | 0.000005 | ordinary network fee |
| nullifier record | 0.001002 | permanent on-chain rent |
| withdrawal transaction | 0.000005 | ordinary network fee |
| relayer margin | 0.000015 | at the floor |
| total per note | 0.001027 | — |
Roughly 97% of the total is the nullifier record — the entry proving a note has been spent. It has to outlive the note permanently, or the note becomes spendable a second time, so the chain charges rent for it once and forever. It is not a fee anyone chose to levy and no operator receives it.
The same ~0.001 SOL covers a 0.1 SOL mix and a 10 SOL mix. That is about 1% of the first and 0.01% of the second. If cost matters to you, the answer is a larger denomination, not a different mixer.
Waiting costs nothing and buys more privacy than any fee optimisation. A withdrawal in the same block window as its deposit is paired by timing regardless of the proof. Leave a real gap, and let deposits accumulate behind yours.
Also worth reading: the step-by-step guide and why an exchange is not a substitute.