Spread, price impact and slippage are three different costs, measured at three different moments. Spread is the round-trip cost of trading against a venue at a single instant. Price impact is the price move your own order causes against the liquidity standing in front of it, and it is fully computable before you sign. Slippage is what you actually gave up between the quote you saw and the fill you received. Reading spread vs slippage as one number is the most common way a trader misdiagnoses a bad fill.
Three definitions, stated precisely
Each of the three answers a different question. Keeping the questions apart is most of the work, because once you know which question a number answers you know whether it can be predicted, who set it, and which lever moves it. The definitions below are the ones used consistently across this section of the site.
Spread
The spread is the difference between the price at which you can immediately buy and the price at which you can immediately sell, at the same instant, for the same size. On an order book it is the gap between the best resting bid and the best resting ask. It is the price of immediacy: the amount you lose by entering and exiting a position instantly with no price movement in between.
Price impact
Price impact is the deterministic degradation in your average execution price caused by consuming liquidity as your order fills. It is a function of your order size measured against the reserves or depth available at the venue. Given the pool state, it is not an estimate or a probability. It is arithmetic, and any interface that shows it is running that arithmetic on the reserves it last read.
Slippage
Slippage is the realised difference between the price implied by the quote you were shown and the price you actually received on the landed transaction. It is measured after the fact. It contains your price impact, plus any movement in the pool caused by other traders between quote and execution, plus the effect of the route or fee tier changing under you. It cannot be known in advance.
Why spread means something else on an AMM
A constant-product automated market maker holds two reserves and prices every trade off a curve. There is no queue of resting orders, so there is no best bid and no best ask in the order-book sense. Traders sometimes conclude from this that an AMM has no spread. That conclusion is wrong in a way that costs money, because the round-trip cost the spread was invented to measure is still there.
Ask the pool for two quotes at the same instant: one to sell a very small amount, one to buy a very small amount. The sell quote comes back below the mid price and the buy quote comes back above it, because the fee fraction is deducted from the input on both legs. The gap between them is a fee-induced spread, and for a pool with fee fraction f it is close to twice f.
Worked example: the fee-induced spread
Take an illustrative pool whose mid price is 250 USDC per SOL with a 0.30 per cent fee tier. A negligibly small sell returns about 250 × 0.997 = 249.25 USDC. A negligibly small buy costs about 250 / 0.997 = 250.75 USDC. The two quotes differ by 1.50 USDC, which is 0.60 per cent of the mid price — twice the fee tier, and independent of your size because both legs are too small for curvature to matter.
Solana also hosts venues where a literal spread exists. Concentrated liquidity market makers hold liquidity in discrete ranges, so the effective quote can gap when a range boundary is crossed. Central limit order book venues carry real resting bids and asks with a measurable top-of-book gap. On those venues the order-book definition of spread applies without translation, and comparing spread vs slippage becomes a comparison between a quoted state and a realised outcome.
Price impact is arithmetic on reserves
For a constant-product pool the invariant is x * y = k. Your input is added to one reserve after the fee is deducted, and the output is whatever must leave the other reserve to keep the product at k. That single line produces the entire price impact curve, and it is the reason impact grows with the ratio of your size to the reserve rather than with your size in absolute terms.
out = y - k / (x + in * (1 - f))where x is the reserve of the token you are selling, y is the reserve of the token you are buying, k is x times y before the trade, in is your input amount and f is the pool fee fractionThe mid price before your trade is y / x, the marginal rate for an infinitesimal trade. Your execution price is out / in, the average rate you actually achieved across the whole order. Price impact is the fractional shortfall between the two, and it is worth writing down because it is the only definition on this page that is unambiguous once the pool state is fixed.
price impact = 1 - (execution price / mid price)where execution price is out divided by in, and mid price is the marginal rate y divided by x immediately before the tradeSubstituting gives a compact result. The execution price equals (1 - f) * y / (x + in * (1 - f)), which says something useful: trading with a fee behaves exactly like a fee-free trade of a slightly smaller size, scaled down by (1 - f). The fee and the curvature are therefore multiplicative, not additive, which is why the fee share of total impact shrinks slightly as your size grows.
Some interfaces report price impact with the pool fee excluded and list the fee separately. Others fold it in. The two figures will never agree, and neither is wrong. Check which convention a quote panel uses before you compare it to another one.
Worked example: one pool, five sizes
Take an illustrative constant-product pool holding 4,000 SOL and 1,000,000 USDC, giving a mid price of 250 USDC per SOL and an invariant of 4,000,000,000. The fee tier is 0.30 per cent. Every figure below is produced by the two formulas above applied to that state. Nothing here is observed market data; it exists only to show how the curve behaves as size grows.
| SOL sold | USDC received | Execution price | Impact with fee | Impact without fee |
|---|---|---|---|---|
| 5 | 1,244.70 | 248.94 | 0.424% | 0.125% |
| 20 | 4,960.27 | 248.01 | 0.794% | 0.498% |
| 100 | 24,318.85 | 243.19 | 2.725% | 2.439% |
| 200 | 47,482.98 | 237.41 | 5.034% | 4.762% |
| 400 | 90,661.09 | 226.65 | 9.339% | 9.091% |
Two patterns matter. First, the fee-free component is simply in / (x + in): five SOL against a four thousand SOL reserve costs 0.125 per cent, and four hundred SOL costs 9.09 per cent. Second, the fee contributes a near-constant 0.30 per cent at small size but only about 0.25 percentage points at the largest size, because the two effects compound rather than add.
The practical reading is that impact is a size-to-depth question, not a size question. Four hundred SOL is a large order in this invented pool and a rounding error in a pool ten times deeper. That is also why splitting an order across several pools reduces the total cost, a mechanism covered in detail in the note on how route splitting flattens the impact curve.
Slippage is realised, not quoted
Everything above was computable at quote time. Slippage is not, because it depends on the pool state at the moment your transaction is processed, not the state your quote was built from. On Solana a slot targets roughly 400 milliseconds, so even a fast path leaves a window in which other transactions can touch the same reserves before yours does.
Realised slippage therefore decomposes into three contributions. Your own price impact, which you could have predicted. Market movement, meaning trades by other participants that changed the reserves between quote and execution. And route or state drift, where the path your quote assumed is no longer the path that executes, or a concentrated liquidity range has been crossed and the effective depth has changed.
- Your own price impact: predictable from reserves at quote time.
- Other traders moving the reserves before you land: not predictable, only bounded.
- Route or tick-range drift between quote and execution: partly predictable from route complexity.
- Rounding at the token decimal boundary: negligible for SOL at nine decimals, occasionally visible on low-decimal tokens.
Because two of those three are outside your control, slippage is a distribution rather than a number. The useful discipline is to measure it repeatedly on your own fills and look at the shape of the distribution, which is the approach set out in the longer treatment of what actually produces slippage on Solana.
The distinguishing table
This is the asset worth keeping. Four rows, four questions. Slippage tolerance is included because it is routinely confused with slippage itself, and separating them removes most of the remaining ambiguity in the spread vs slippage discussion.
| Term | What it measures | When it is known | Who or what sets it | How you reduce it |
|---|---|---|---|---|
| Spread | Round-trip cost of buying and selling at the same instant | Continuously, before you trade | The fee tier on an AMM; competing market makers on a book | Choose a lower fee tier or a tighter venue for the same pair |
| Price impact | How far your own order moves the price against you | Exactly, at quote time, from pool reserves | Your size measured against available depth | Cut size, split across pools, split across time, pick deeper venues |
| Slippage | Realised gap between quoted price and filled price | Only after the transaction lands | Your impact, plus other traders, plus timing | Reduce impact, land faster, reduce route complexity |
| Slippage tolerance | The worst fill you are willing to authorise | You set it, so always | You, or an auto-slippage estimator on your behalf | Not a cost to reduce — a ceiling to calibrate |
Read the fourth row carefully. Tolerance is the only entry that is an input rather than an outcome. Lowering it does not lower your cost; it lowers the maximum cost you will accept, at the price of a higher chance the transaction reverts. That trade-off has its own page.
Where each one appears in a swap interface
Most Solana swap interfaces surface these numbers in different places and with different names, which is a large part of why they get merged in the reader's head. Knowing which field maps to which concept turns a quote panel into a cost breakdown.
- The rate line. Usually the execution price for your entered size, not the mid price. If you shrink the input to a dust amount the same field converges towards the mid.
- Price impact. Reported as a percentage against a reference price. Check whether that reference is the pool mid or an aggregate across venues, and whether the fee is inside or outside the figure.
- Minimum received. This is tolerance, not slippage. It is the quoted output multiplied by one minus your tolerance, and it becomes a hard floor in the instruction.
- Route. Each hop carries its own fee tier and its own impact. A four-hop route is four spreads and four impact terms, not one.
- Fee lines. Network fee, priority fee and any interface fee sit outside all three concepts and must be added separately when you total the cost.
Spread is the one term that usually has no dedicated field. To see it, request a quote in both directions for a small size at the same moment and difference the two rates. On a single constant-product pool the answer will land near twice the fee tier; on a routed quote it will be wider, because the round trip may not use the same path in both directions.
What you control and what you do not
Sorting the levers is the point of the whole distinction. Two of these three costs respond to decisions you make before signing. The third is partly a consequence of those decisions and partly a consequence of what everyone else does in the same few hundred milliseconds.
- Fully under your control: order size, whether you split it, which venue or route you accept, the fee tier you trade against, your tolerance, the priority fee you attach, and when you send.
- Partly under your control: how long the transaction sits before inclusion, which depends on your priority fee and on network conditions you do not set.
- Not under your control: the reserve state when your instruction executes, other participants' order flow, the ordering of transactions within a block, and the volatility of the underlying pair.
That sorting is also the fairest way to judge any tool that promises better execution. Software sold as Solana volume automation can only act on the first list: it sets size, splits, venue, tolerance, priority fee and timing, and it is exactly as exposed as you are to the third. Judge it on the controllable column and treat any claim about the uncontrollable one as marketing.
The asymmetry has a practical consequence. When a fill disappoints, the productive question is not why slippage was high but which component was high. If price impact was already 4 per cent at quote time, the fill was expensive before the transaction ever left your machine, and no amount of latency engineering will fix it. Sizing is the fix.
Five confusions, corrected
These five come up repeatedly, and each one leads to a different wrong action. Stated as a wrong belief followed by what is actually true.
Wrong: my slippage tolerance is the slippage I will pay
True: tolerance is a ceiling, not a price. A 5 per cent tolerance on a deep pair will usually fill within a fraction of a per cent of the quote. What the number does is authorise a worse fill, and authorising a worse fill widens the window in which reordering your transaction is profitable for someone else.
Wrong: price impact and slippage are the same number
True: impact is one term inside slippage. Impact is known before signing and follows from reserves; slippage is measured afterwards and includes everything that happened in between. A trade can show 0.1 per cent impact and realise 2 per cent slippage if the pool moved, and the reverse is also possible when the pool moves in your favour.
Wrong: an AMM has no spread because it has no order book
True: the fee tier creates a round-trip cost that behaves exactly like a spread and is close to twice the fee fraction. Comparing spread vs slippage across venue types is legitimate as long as you compare the round-trip cost of immediacy in both cases rather than looking for a resting quote that does not exist.
Wrong: a bigger pool always means less impact
True: what matters is depth at the price where you trade. In a concentrated liquidity pool, a large headline value can sit in ranges far from the current price and contribute nothing to your fill. Two pools with the same total value can produce very different impact for the same order size.
Wrong: zero displayed price impact means a free trade
True: a displayed zero usually means the figure rounded below display precision, and it often excludes the pool fee entirely. You still pay the fee tier, the base signature fee of 5,000 lamports per signature, whatever priority fee you attached, and any adverse movement before your transaction lands.
Using the distinction when a fill goes wrong
Turn the three definitions into a diagnostic. The spread vs slippage split only earns its keep if it changes what you do next, so pull the quote you were shown and the output you actually received, then attribute the gap. If the quoted impact already accounted for most of it, the problem is size against depth. If the quoted impact was small and the gap was large, the problem is timing, route drift or contention for the same reserves.
That attribution decides which lever to pull. A size problem is solved by splitting the order across pools or across time, or by accepting that the pair is too thin for the notional you had in mind. A timing problem is solved by shortening the route, raising the priority fee so the transaction lands sooner, or reducing the interval between quote and signature.
Two habits make the attribution reliable. Record the quoted output alongside the realised output for every trade, so you accumulate a distribution rather than an anecdote. And re-quote a dust-sized trade immediately after a large one to see where the mid actually ended up, which tells you how much of the move was permanent and how much was your own footprint recovering.
The Solana runtime gives you one structural advantage here: because the swap instruction carries an explicit minimum output, an unacceptable fill fails rather than executing badly. That converts an unbounded price risk into a bounded execution risk, and it is why the tolerance number deserves deliberate calibration rather than a default. The rest of this territory is mapped in the execution basics section, and the mechanics of the invariant itself are documented in the reference implementations linked from the Solana developer resources.
If you take one thing from the spread vs slippage distinction, take this: spread is the cost of showing up, price impact is the cost of your size, and slippage is the bill that arrives after both have been settled against a market that did not wait for you.
Frequently asked questions
Is price impact the same thing as slippage?
No. Price impact is the price move your own order causes against the liquidity in front of it, and it is computable from pool reserves before you sign. Slippage is the realised difference between the quote you saw and the fill you received. Price impact is one component of slippage; market movement between quote and execution is another.
Do automated market makers have a bid-ask spread?
Not a literal one, because there are no resting orders. But if you request a buy quote and a sell quote at the same instant for a tiny size, the two prices differ. For a constant-product pool with a fee fraction f, that gap is close to twice f. Concentrated liquidity venues and order-book venues on Solana do have a real spread.
Why does my price impact figure differ between two interfaces?
Usually because they define the reference price differently, or because one folds the pool fee into the number and the other reports impact net of fee. Some quote against the pool mid price, some against an aggregated reference price across venues. Read the label before comparing two figures.
Does a lower price impact always mean a better fill?
No. Price impact is a single component. A route with lower impact may cross more pools, pay more protocol fees, use more compute units and fail more often. Compare the final output amount for the same input, not the impact percentage in isolation.
Which of the three costs can I actually reduce?
Price impact responds directly to size, splitting and venue choice. Spread responds to venue and fee tier selection. Slippage responds indirectly, through all of the above plus timing and how fast your transaction lands. Slippage tolerance is not a cost at all; it is a ceiling you authorise.
If the interface shows zero price impact, is the trade free?
No. A displayed zero usually means the impact rounded below the display precision, and it frequently excludes the pool fee. You still pay the fee tier, the base signature fee, any priority fee you attached, and whatever the price moved between quote and landing.
Filed under Execution basics by The SolSpread Desk. Worked examples on this page are illustrative arithmetic, not observed market data. Read how we handle numbers in the editorial policy.