A pool curve makes the marginal exchange rate worse as a trade consumes more of a pool’s available liquidity: in an illustrative constant-product pool holding 1,000 ETH and 2,000,000 USDC, the spot price is 2,000 USDC per ETH, but selling 100 ETH pushes the average execution price well below it. To estimate a real swap, separate this curve impact from the pool fee, the route’s other costs and any price movement before execution.
- Trade size relative to active liquidity sets curve impact; the headline spot price does not.
- Concentrated liquidity can change the curve’s depth when price crosses a tick or leaves a range.
- Compare expected output for your exact amount and route, then set an acceptable minimum output.
Why does a larger trade get a worse average price?
Because each unit of input moves the pool along its curve, later units trade at a less favourable marginal price than earlier ones. In a constant-product market maker, reserves x and y satisfy x·y = k; the instantaneous price is the reserve ratio, adjusted for token decimals and quote convention.
For an exact-input trade of Δx, with fee rate f taken from the input, the output is Δy = y·(Δx·(1−f))/(x+Δx·(1−f)). The fee reduces the amount that moves the curve; curve impact comes from the changing reserve ratio. A quote’s average execution price is output divided by input, while price impact usually compares that average with the pre-trade spot price. Check the quote’s definition: some interfaces include fees in the displayed impact and others show them separately.
Consider two illustrative sales into the same 1,000 ETH / 2,000,000 USDC pool, assuming a 0.30% fee. A 10 ETH sale returns about 19,743 USDC, or 1,974 USDC per ETH; a 100 ETH sale returns about 181,322 USDC, or 1,813 USDC per ETH. Both begin at the same 2,000 USDC spot price, but the larger trade pushes farther down the curve and gets a worse average rate. These figures illustrate the formula; they are not a quote for a particular pool.
What changes when liquidity is concentrated?
In a concentrated-liquidity AMM, liquidity providers choose price ranges, so only liquidity active at the current price contributes depth there. Within one active range, the v3-style curve can be described by liquidity L: for square-root price moving from √P₀ to √P₁, token amounts change approximately as Δtoken₀ = L(1/√P₁−1/√P₀) and Δtoken₁ = L(√P₁−√P₀), with direction and signs depending on the swap.
That curve is piecewise: when price crosses a tick, positions can enter or leave active liquidity, changing L and therefore the price movement per unit traded. A pool may look deep near its current price yet offer much less depth beyond a cluster of ranges. At the edge of a narrow range, liquidity can fall sharply; if no liquidity remains on the required side, the trade cannot continue through that pool at any finite price.
For a native BTC, ETH or SOL cross-chain swap, Chainflip native asset swaps use a State Chain JIT AMM combining range liquidity with limit orders. A larger trade can consume liquidity across multiple price levels and reach a different best-priced order; this is not the same as applying a single constant-product formula to total pool balances.
Which costs belong in the quote?
A swap’s total cost can include curve impact, a liquidity fee for each pool leg, any protocol or broker fee, and source or destination network costs. Chainflip’s documented liquidity fee is typically 0.10%–0.15% per pool; routes using multiple pools can incur that fee on each leg, while network costs are separate from AMM pricing.
For example, a BTC-to-ETH route may trade BTC against USDC and then USDC against ETH. Evaluate both legs: the first leg’s output becomes the second leg’s input, and each pool’s active depth and fee affect the final ETH received. A good spot rate on one leg does not guarantee a good route-wide average price.
Also distinguish quoted price impact from execution risk. In Chainflip’s JIT design, witnessed swaps are bundled by pool and direction, and liquidity providers can update orders before execution. The eventual fill can therefore depend on the liquidity available when the swap runs, not only on an earlier estimate.
How should you judge a quote for your amount?
Use the exact input size and intended route, then compare the expected output against a reliable market reference after accounting for all route legs and fees. For an exact-input swap, divide the output by the input in a common unit; compare that effective rate with the reference rate, not just the first marginal price shown for the pool.
Check whether the route crosses several price levels, whether active depth thins near a range boundary, and whether the trade is large relative to the liquidity available in that direction. Splitting a trade may reduce curve impact in a simple CPMM if the pool state stays unchanged, but it can add fixed costs or expose later pieces to changed prices; in bundled execution models, splitting may also change how orders are grouped. It is not automatically cheaper.
For the transaction itself, choose a minimum acceptable output or equivalent slippage bound that reflects the worst rate you are willing to accept. A tighter bound protects the price but can cause execution to fail or funds to be refunded if conditions move; a looser bound improves the chance of execution while accepting a worse result. Curve depth decides the size effect, and the bound decides whether that result is acceptable.