Slippage on Solana, explained
Slippage tolerance is treated as a safety setting and it is closer to a budget. It does not stop the price moving; it decides whether you accept the move or pay a fee for nothing. Here is how to pick a number that is not a guess.
What the setting actually does
When you submit a swap, the transaction does not simply say "trade this". It carries a minimum acceptable output: the smallest number of tokens you will take in exchange for what you are sending. That minimum is derived from the quoted price and your tolerance.
If execution would deliver less than that minimum, the program refuses and the transaction reverts. Nothing trades, the position is unchanged, and the fees paid to get the transaction processed are gone.
So the setting is not a shield that holds the price still. It is a threshold that decides which of two bad outcomes you prefer when the price has moved: a worse fill, or no fill and a wasted fee. Framing it that way makes the trade-off visible, which is the whole point.
Why tightening it is not protection
The instinct is that lower is safer, and on a deep pool that instinct costs nothing because the price barely moves anyway. On a thin pool it is actively expensive.
In a shallow market your own order is the main thing moving the price. If a swap moves the pool two percent and your tolerance is one, the transaction cannot succeed. Not sometimes: never. You will send it, pay for it, and receive nothing, and then very likely retry with the same settings and pay again.
This is the single most common self-inflicted failure in scripted trading, and the reason it persists is that the fix feels wrong. The correct response is usually not to change the tolerance but to send a smaller order, because that reduces the movement you need to tolerate rather than accommodating it. The price impact explainer covers why halving an order size reduces impact by more than half.
Where the movement actually comes from
Three separate things can move the price between your quote and your fill, and they call for different responses.
- Your own impact. The dominant source on thin pools. Predictable, measurable in advance, and fixable by trading smaller.
- Other traffic in the same block. Anyone else trading the same pool at the same moment. Unpredictable, and the reason a tolerance needs headroom above your own impact rather than exactly matching it.
- Deliberate positioning around your order. Somebody buying just ahead of you and selling into your fill. Repetitive campaign flow is the easiest kind to anticipate.
Note that only the first is under your control, and it is usually the largest. Teams frequently blame the third when the arithmetic says the first accounts for nearly all of it.
Choosing a number instead of guessing
- Simulate the exact trade you intend. Any aggregator quotes it and reports the price impact without executing.
- Read the impact. That is your floor: a tolerance below it cannot succeed.
- Add headroom for other traffic. Enough that ordinary activity in the same block does not push you over.
- Check the result against your patience. If the resulting number feels uncomfortably wide, that discomfort is information: the order is too large for the pool.
- Repeat per venue. Depth differs between pools for the same token, so one global number is wrong somewhere by construction.
The step people skip is the fourth. A tolerance that has to be very wide is not a setting problem that has been solved; it is a sizing problem that has been hidden, and it will show up later as a jagged chart and a poor average fill.
What it means for a campaign
Across hundreds of swaps, the tolerance decision compounds in a way that a single trade does not reveal.
Set too tight and a large share of the run reverts. The volume figure lands well below target, the fees were paid anyway, and the shortfall is silent because failures do not announce themselves. Set too wide and every swap fills slightly worse than quoted, which is a small tax applied several hundred times and shows up as a campaign that cost more than the arithmetic suggested.
The way out is not a cleverer tolerance. It is to make each swap small enough relative to depth that the correct tolerance is naturally tight, at which point both failure modes largely disappear. That is why fleet size and swap size are the levers that matter, and tolerance is downstream of them rather than a substitute.
It also matters where the swaps go. Spreading across every pool a token has means each one sees a smaller fraction of its own depth, so impact per venue falls and tolerances can stay tight everywhere. Concentrating into one pool does the opposite on all counts at once.
There is a subtlety about direction worth planning for. A pool seeded unevenly absorbs buys and sells differently, so the same tolerance that works comfortably on one leg can be marginal on the other. A campaign with balanced flow will then see its failures cluster entirely on one side, which looks like a random problem and is actually a structural one. Simulating both legs before setting anything takes ten extra seconds and explains a pattern that otherwise looks inexplicable.
Automatic slippage and its limits
Most interfaces now offer an automatic mode that picks a tolerance based on the route and current conditions. It is a genuine improvement over a fixed default and it is not a complete answer.
What it does well is adapt to the venue and the moment, which is exactly what a single global number cannot do. What it cannot do is know your intent. It does not know whether you would rather fail than fill badly, and on unusual pools it can settle on a value that succeeds while delivering a fill you would have refused if asked.
For a campaign the practical position is straightforward: automatic is a reasonable default, but the number worth watching is not the tolerance at all. It is the share of transactions that confirmed. If that share is high and the average fill is close to quote, the tolerance is doing its job whatever value it settled on. If confirmations are low, the answer is almost never a higher tolerance, and the failure guide covers how to read which cause you are actually hitting before changing anything. Some of those causes, including the expiry problem covered in the blockhash guide, are completely unaffected by slippage no matter what you set it to.
Frequently asked questions
01What does slippage tolerance actually do?
It sets the worst price you will accept. The transaction includes a minimum output amount, and if execution would deliver less than that, the program reverts rather than filling. It does not prevent the price from moving; it decides whether you take the move or lose the transaction.
02Is a lower slippage setting safer?
It is safer against a bad fill and worse against wasted fees. A tight tolerance means more transactions revert, and every reverted transaction still pays its base and priority fee while producing nothing. On a thin pool, tightening tolerance mostly converts bad fills into paid-for failures.
03What slippage should I use on Solana?
There is no universal number because the correct value depends on how far your own order moves the pool. Simulate the trade, read the price impact, and set the tolerance comfortably above it with room for other traffic in the same block. If that number looks uncomfortably large, the real problem is order size rather than the setting.
04Why do my swaps fail even with high slippage?
Because slippage is only one of several failure causes. Expired blockhashes, insufficient funds, missing token accounts and compute budget limits all produce failures that no tolerance value affects. Reading the actual error from the transaction is the only way to tell which one you are hitting.
05Does high slippage make me a target?
It widens the room available to anyone positioning around your order, because the gap between your quote and your worst acceptable price is where extraction happens. Very high tolerances on predictable, repetitive flow are the least favourable combination.
06Should slippage be the same for every venue in a campaign?
No, and using one global number is a common mistake. A deep pool tolerates a tight setting; a thin one needs room for your own impact before it needs room for anything else. Tolerance should follow the depth of the venue being traded, not a single field set once.
Keep reading
Sized so tolerance stops being the problem
Campaign swaps are kept small relative to real pool depth, which is what removes slippage failures at the source.
Open the volume console