CenturionDEX
Launch App

Concentrated Liquidity

Last modified:

Introduction

The defining innovation of v3 is concentrated liquidity: the ability for providers to allocate capital within a custom price range rather than across the entire curve from zero to infinity.

Under the v2 model, capital is distributed uniformly — which means the vast majority sits idle. A stablecoin pair such as DAI/USDC, for example, trades almost exclusively between $0.99 and $1.01, yet a v2 position deploys only ~0.50 % of its capital in that interval.

Concentrated liquidity eliminates this waste. A provider may confine capital to any range — say, 0.99–1.01 for the stablecoin pair above — giving traders deeper liquidity at the mid-price while the provider earns proportionally more fees. Each such allocation is called a position; a single address may hold many positions in the same pool, each with distinct bounds.

Active liquidity

When the spot price exits a position's range, that liquidity becomes inactive: it no longer participates in swaps and earns no fees. As the price moves in one direction, the position accumulates the token that swappers are selling, until it consists entirely of a single asset at the boundary.

Should the price later re-enter the range, the position reactivates and begins earning again. Providers are free to create as many positions as they wish, each with its own interval — letting the market collectively determine the liquidity distribution as rational actors compete to concentrate their capital where it is most productive.

Ticks

Concentrated liquidity requires discretising the continuous price space. Ticks are the boundaries of these discrete intervals, spaced so that each successive tick represents a 0.01 % (1 basis point) change in price.

When a provider creates a position, they select a lower tick and an upper tick. During swaps the pool contract progressively consumes liquidity within the current tick interval,1 then crosses into the next tick — activating any dormant positions that use the newly reached tick as a boundary.

Although every pool defines the same underlying tick indices, only a subset is usable for position boundaries. Usable ticks must be multiples of the pool's tick spacing, which is coupled to the fee tier: lower fees permit finer spacing, and higher fees enforce wider spacing.

Crossing an active tick adds gas cost to the transaction that triggers the crossing, because the contract must activate or deactivate the affected positions. In price regions where granularity matters most — such as stablecoin pairs — finer tick spacing and deeper per-tick liquidity combine to minimise price impact.

For the fee-tier-to-tick-spacing mapping, see the whitepaper. For the full tick-to-price conversion math, see Tick Math.

The math behind concentrated liquidity

In v2 a position's liquidity L spans the entire price curve: L = sqrt(x * y). In v3 the same L is confined to a range [P_lower, P_upper], creating virtual reserves that behave as though the pool held far more capital.

The amounts of token0 and token1 required to provide L units of liquidity within a range:

Δx = L * (1/sqrt(P_lower) - 1/sqrt(P_upper))
Δy = L * (sqrt(P_upper) - sqrt(P_lower))

The capital-efficiency multiplier relative to an equivalent full-range v2 position:

multiplier = 1 / (1 - sqrt(P_lower / P_upper))

Example: A CTN/USDC position with range $1,500–$2,500 (current price $2,000):

multiplier = 1 / (1 - sqrt(1500/2500)) = 1 / (1 - 0.7746) ≈ 4.4x

The position earns fees as though it held 4.4× the capital in a v2 pool — but also experiences 4.4× the impermanent loss.

Multiplier vs range width

Range (% around spot)P_lower/P_upper ratioMultiplierEquivalent v2 capital
± 1 %0.98 / 1.02~100×$10 K acts like $1 M
± 5 %0.95 / 1.05~20×$10 K acts like $200 K
± 10 %0.90 / 1.10~10.5×$10 K acts like $105 K
± 25 %0.75 / 1.25~4.6×$10 K acts like $46 K
± 50 %0.50 / 1.50~2.4×$10 K acts like $24 K
Full range0 / ∞$10 K acts like $10 K

Choosing the optimal range width

The ideal width tracks expected price volatility. Given daily volatility σ (decimal) and an intended holding period of T days without rebalancing, a useful heuristic:

optimal_half_width ≈ 2 * σ * sqrt(T)

Example: CTN exhibits ~5 % daily volatility (σ = 0.05). For a 7-day hold:

half_width = 2 * 0.05 * sqrt(7) = 0.265 = 26.5 %

A range of ± 26.5 % captures roughly 95 % of expected price paths over one week — yielding about a 4.3× multiplier. Narrowing to ± 10 % (multiplier ~10.5×) implies the price will exit the range in roughly:

expected_days_in_range ≈ (half_width / (2 * σ))^2 = (0.10 / 0.10)^2 = 1 day

At that cadence, daily rebalancing is required — incurring gas and realising impermanent loss on each adjustment.

The tradeoff curve

Net return = (fee_APR × time_in_range) − (IL × multiplier) − (rebalance_count × gas_cost)

Tighter ranges increase fee_APR and multiplier but decrease time_in_range and increase rebalance_count. No universally optimal range exists; the right choice depends on the pool's volume, the pair's volatility, and the chain's gas economics.

What happens at tick boundaries

When the price crosses a tick boundary:

  1. The pool activates or deactivates any positions that use that tick as a bound.
  2. The position's holdings transition entirely into one token (the less valuable one).
  3. Fee accrual stops until the price re-enters the range.

Selecting the right range width is therefore critical — see LP Profitability for guidance.

Footnotes

  1. A tick interval is the region of price space between two nearest active ticks.