~ / content / slippage-math.html
Intermediate Published 2026-04-28 · 8 min read · DEX mechanics

Slippage Math: The Hidden Tax on Every Swap You Make

"Set slippage to 1%" is not advice — it's a coin flip. Real slippage is a function of pool depth, trade size, and how many bots are racing you to the block. Here is the math, and the parts your wallet doesn't show you.

What slippage actually is

Slippage is the difference between the price you saw when you signed and the price you got when the transaction landed. On an AMM, that gap comes from one place: your trade size moving along the curve. The wallet just bundles that movement, plus any other trades that landed before yours, into a single number.

For a constant-product pool (Uniswap v2 / Raydium classic):

# Given reserves x (token) and y (quote, e.g. SOL)
# Constant: k = x * y
# You sell Δx tokens, receiving Δy quote (after 0.3% fee)

Δy = (y * Δx * 0.997) / (x + Δx * 0.997)

price_before  = y / x
price_after   = (y - Δy) / (x + Δx)
price_impact  = 1 - (price_after / price_before)

Two things fall out immediately. First, price impact is non-linear — doubling your trade more than doubles the impact. Second, impact scales with trade size relative to pool, not absolute USD. A $5k swap is trivial in a $50M pool and lethal in a $50k one.

trade size as % of pool depth price impact % 1% 5% 10%+
Price impact vs trade size — the curve isn't linear and gets ugly fast above 5% of pool

The five components of "real" slippage

The number your wallet shows is the smallest piece. Here is what actually comes out of your trade:

ComponentTypical costWho collects it
LP fee0.20% – 1.00%Liquidity providers
Price impact0.05% – 50%+The next trader (pool rebalances)
MEV / sandwich0% – 20%Searchers (see MEV piece)
Routing inefficiency0.1% – 3%Spread between aggregator quotes
Network fee / priority$0.0001 – $30Validators / miners

Add them and the "0.5% slippage" you set is fiction. On a thin pool with active sandwich bots, your effective slippage on a $2,000 swap can be 8–12% round-trip. That is the tax.

Setting slippage tolerance — the actual rule

Slippage tolerance is the maximum gap you'll accept before your transaction reverts. Set it too low and your swap fails (you still pay gas). Set it too high and sandwich bots eat the headroom you gave them.

The right number depends on three inputs: token volatility, pool depth, and chain mempool exposure.

Asset classSlippageNotes
Stable–stable (USDC/USDT)0.05–0.1%Curve / Uniswap v3 stable pools — anything more is a trap
Major / blue-chip0.3–0.5%SOL/USDC, ETH/USDC — Jupiter / 1inch routing handles it
Mid-cap alt1–2%Raise during high-volatility hours
Memecoin entry3–8%Pool is moving while you're signing. Lower = failed tx
Memecoin exit during dump10–25%Honest math: there is no painless exit on a thin pool
Tax tokens (6/6)+ tax%Add the buy/sell tax to your slippage or your tx reverts
Tax-token gotcha A 6% buy / 6% sell tax token requires slippage strictly greater than the tax — the tax is taken from your output, which the router sees as price impact. Setting slippage to exactly 6% will revert about half the time due to rounding. Use 7% on entry, 8% on exit. See token tax mechanics for the full breakdown.

Splitting big trades

If your trade is more than 1% of pool depth, you should consider splitting. Two approaches:

  1. Time-split (TWAP). Break the order into 4–10 chunks across 5–60 minutes. The pool refills between your trades as arbitrageurs pull price back. You give up some convenience and spread, you save price impact. Tools: Jupiter on Solana has a built-in DCA / VA mode; 1inch Fusion+ on EVM.
  2. Route-split. Aggregators automatically route across multiple pools (Raydium + Meteora + Orca for SOL pairs). For sizable trades, the saving over a single-pool swap is consistently 0.5–3%. Always quote against an aggregator before signing on a single DEX.

Quick mental model

If you want one heuristic to keep in your head: your trade size, as a % of pool TVL, is roughly equal to your one-way price impact on a balanced 50/50 pool. A 2% trade = ~2% impact. A 10% trade = ~9% impact. That's not exact (the curve gives slightly less than linear at small sizes, more at large), but it's a useful sanity check before you click confirm.

# Cheap heuristic for a v2-style pool
trade_pct  = (trade_usd / pool_tvl_usd) * 100
est_impact = trade_pct  # roughly, for trades < 20% of pool

if est_impact > 3:  print("split this trade")
if est_impact > 10: print("you are the price action")

What the wallet doesn't tell you

Your wallet shows you the LP fee and a slippage tolerance. It does not show you the MEV, the routing inefficiency vs aggregator, or the cost of failed transactions when you set tolerance too tight. Over a year of active trading those uncosted lines are worth several percent of your portfolio. They are also the easiest leakage to fix — pick the right aggregator, set realistic tolerance, split big trades, and use private RPC on chains where it matters.

Tools to keep open Jupiter (Solana aggregator) · 1inch / 0x / Paraswap (EVM aggregators) · DexScreener for live pool depth · GeckoTerminal for trade tape · Flashbots Protect or MEV Blocker for EVM private routing.
Not financial advice. All formulas are simplified — production routers handle multi-hop fees, weighted pools, and concentrated-liquidity tick math. Always quote on a real aggregator before sizing a trade.