Dexosphere Research Report
Beyond TVL: Accurately Measuring Liquidity and Returns in Uniswap V3
April 11th, 2025
Why TVL (total value locked) is not the same as pool liquidity, and how to better understand liquidity and returns in Uniswap V3 liquidity positons and pools, using the USDC-WETH 0.3% pool as an example.
Why not use TVL like everyone else?
When you look at most sources for Uniswap V3 pool “APR” yields, you are looking at a calculation that is something like:
F
=Fees Earned in Last 30 DaysTVL
=Total Value Locked (as of current time)There are several reasons why this calculation does not accurately reflect the reality of LP returns:
- Temporal mismatch: The fees earned are from a 30-day time period, but the total value locked is from a single point in time (usually a snapshot taken at the current time at the end of the period). In reality, the TVL was moving up and down with price appreciation over the time period.
- Not equivalent to actual liquidity: A snapshot of TVL is not equivalent to the liquidity in the pool even at the time of the snapshot. TVL tracks the amount of tokens net added into the pool over time, and multiplies those amounts by the prices for the two tokens at the time of the snapshot. However, in an AMM pool the balance of each token in the pool diverges as the price changes over time (e.g. “impermanent loss”) and these changes are not taken into account in this calculation.
- Concentrated liquidity nuances: In a concentrated liquidity AMM such as Uniswap V3, not all of the liquidity added to the pool is “in range.” Liquidity added to pools can be added out of range to speculate on future price movements, or liquidity provided in range can move out of range as prices move. TVL is not equipped to handle this.
What should be done instead?
We've addressed these problems in the “Annualized Fee Return” calculation that we've developed at the individual liquidity position (LP) level in Dexosphere:
Ftotal
=Total Fees EarnedAavg
=Time Weighted Average AssetsTyear
=One year in secondsTduration
=Duration of LP in secondsWhy other data providers have not taken this approach became clearer once we went to implement this metric: it's quite involved to make these calculations. In order to calculate this, you need to:
- Track the entire history of the LP including all additions and removals of liquidity
- Monitor price changes induced by swaps over the life of the LP
- Maintain a running calculation of the virtual balances in the position
- Determine whether the position is in range earning fees under continuously changing conditions
Applying this to WETH - USDC 0.3%
To apply our methodology, we process a stream of blockchain events from the pool:
- Mints — additions of liquidity to the pool
- Burns — removals of liquidity from the pool
- Swaps — trades that change prices and generate fees
By replaying these events chronologically, we can build time series data illustrating these metrics over the lifetime of a large Uniswap V3 Pool:
Total Liquidity vs. In-Range Liquidity
You can see that the Total and In-Range Liquidity are correlated, but the in-range liquidity is more volatile with bigger decreases during periods of price volatility. This overall pool has also seen declining liquidity over time due to competition from other pools such as WETH - USDC 0.05%, but this pool was selected since it is a good example of a major pool from the inception of the Uniswap V3 protocol.
Now, we can analyze fee returns in this pool using these two different denominators:
Total Liquidity
Includes all positions, even those out of range. This represents the fee returns spread across all LPs, even those currently not earning any fees because they are out of range. Most LPs should be able to outperform this level with even minimal active management.
In-Range Liquidity
This represents the average fee returns for the positions that are in range at the time of the fees. Positions that are more concentrated than average will earn more than this, and positions less concentrated than average will earn less than this.
Annualized Fee Return (In-Range Liquidity)
Daily annualized fee returns for positions in range at the time fees are collected, all time median daily annualized fee return: 42.58%
Annualized Fee Return (Total Liquidity)
Daily annualized fee returns for all positions in the pool, including out-of-range positions, all time median daily annualized fee return: 31.18%
You can see that these returns are very volatile, but also very significant (long term medians of 42.58% and 31.18% respectively.) This is because these positions are likely very concentrated on average and thus very likely to suffer from impermanent loss. Though, if you drill-down to the individual positions, you can see that many LPs are able to leverage these yields to make an attractive return adjusting for impermanent loss (or on top of hedging costs mitigating impermanent loss.)
There is a lot more to explore here, but we think that this is a good starting point for understanding the true returns of LPs in Uniswap V3 pools.
Contact
Questions? Feedback? Interested in custom data or research? Please reach out!
Subscribe for future research reports and product updates: