uniswap – Understanding Why Concentrated Liquidity Is Capital Efficient in Uniswap

defiliquidity-provideruniswapuniswapv3

This is from Uniswapv3 white paper:

In other words, earlier versions were designed to provide liquidity
across the entire price range (0, ∞). This is simple to implement and
allows liquidity to be efficiently aggregated, but means that much of
the assets held in a pool are never touched.

Having considered this, it seems reasonable to allow LPs to
concentrate their liquidity to smaller price ranges than (0, ∞). We
call liquidity concentrated to a finite range a position. A position
only needs to maintain enough reserves to support trading within its
range, and therefore can act like a constant product pool with larger
reserves (we call these the virtual reserves) within that range

When a user provides liquidity into the pool, how come range is important. Liquidity provider justs puts its assets on the pool and those assets are just in a box and any other user can use those to swap.

Let's say I put one 1eth where 1 eth=1000 dai. As far as I see, regardless of specifying the range or not, these assets will be available in the pool and any user can use them any time. But whitepaper says

much of the assets held in a pool are never touched.

Best Answer

Concentrated liquidity is more capital efficient because with increased concentration, the same amount of tokens invested creates greater depth of liquidity.

From Uniswap's blog:

By concentrating their liquidity, LPs can provide the same liquidity depth as v2 within specified price ranges while putting far less capital at risk.

An informal way how to define capital efficiency is to see it as the ratio between the capital invested and the value generated.

  • Situation A: $1 generates 1 units of value.
  • Situation B: $1 generates 2 units of value.

The capital in situation B is used in 2 times more efficient way.

The main function liquidity pools is to let trading to happen. All else being equal, a pool is more attractive for traders if it has deeper liquidity, because deeper liquidity -> reduced price impact for trades. It means that value (efficiency) of capital is greater if it is used to achieve greater depth of liquidity in the pool.


Some math-based analysis follows.

Exactly how inefficient are v2 pools? Uniswap v2 is a traditional constant-product automated market maker (AMM). The liquidity L is defined with the help of the formula

x * y = L^2,

where x and y are the amounts of assets in the pool. Let's say the initial price of ETH is P0 = $2000, and that someone puts 1 ETH and 2000 DAI in the pool. In this case the value of L is sqrt(2000) or approximately 44.7.

Now for a different price P the amount of ETH in the pool is sqrt(P0 / P), for instance for P = $8000 the pool has 0.5 ETH and for P = $500 it has 2 ETH. This means that 50% of the pool's capital is reserved for ETH prices below $500 and above $8000. Moreover, 10% of the pool's capital is reserved for prices 100x different from the current price, that is, above $200,000 and below $10 per ETH. Sure, these prices are not impossible, but is it really sensible to allocate as much as 10% of capital for these extreme scenarios?

The consequence of the capital being so spread out is that the price impact of trades in v2 pools is high unless the amount of capital is huge.

In v3, LPs can set the price range [Pa, Pb] of each position, where Pa is the minimum price and Pb the maximum price. The virtual liquidity of such a v3 position / pool is defined as:

v3 liquidity formula

For instance, if someone believes that ETH is going to trade in the $500-$8000 range they can set these range endpoints and be 2x more capital efficient. Verify this in code:

L = sqrt(2000)  # v2 liquidity value for 1 ETH + 2000 DAI position
P = 2000        # initial/current price
Pa = 500        # range min price
Pb = 8000       # range max price
# amount of ETH to match the v2 liquidity
x = L * (sqrt(Pb) - sqrt(P)) / (sqrt(Pb) * sqrt(P))
# amount of DAI to match the v2 liquidity
y = L * (sqrt(P) - sqrt(Pa))

The result is x=0.5 (ETH) and y=1000 (DAI) as expected. 2x less ETH and DAI needed to achieve the same liquidity depth!

Expanding this further:

  • [P / 4, P * 4] price range -> 2x capital efficiency

  • [P / 2, P * 2] price range -> 3.41x capital efficiency

  • [P / 1.2, P * 1.2] price range -> 11.48x capital efficiency

  • [P / 1.1, P * 1.1] price range -> 21.49x capital efficiency

  • [P / 1.05, P * 1.05] price range -> 41.49x capital efficiency

  • [P / 1.01, P * 1.01] price range -> 201.5x capital efficiency

Meaning that for stable pairs, v3 pools can easily be hundreds of times more capital efficient than v2.

For more experimentation, the Uniswap's blog also have a nice interactive calculator at the end of the "Capital Efficiency" section.

Related Topic