DEX TVL measures the marked value of included pool assets. Active liquidity describes the positions available at the current price; executable depth also depends on how that liquidity changes along the swap. Two pools can hold the same assets and report the same TVL while giving different outputs for an identical trade. Compare the range distribution and a size-specific quote before treating TVL as trading capacity.
The useful question is how much the intended swap can receive, in its direction and at its size. A protocol-wide asset total cannot answer that question. Even the value of positions currently in range leaves out how tightly those positions concentrate their capital.
The hypothetical comparison below holds both total value and total token inventories constant. It changes the position ranges, derives the resulting liquidity and checks the same swap in each pool.
Give each liquidity measure its own meaning
TVL starts with an accounting boundary: which assets are included, where they sit and which prices value them. DefiLlama's methodology, for example, defines protocol TVL through included assets and applies exclusions, including certain unproductive deposits. A dashboard total therefore needs its provider's counting rules. DefiLlama data definitions.
Price changes can move that dollar total without changing deposited quantities. The separate TVL versus net deposits reconciliation explains that accounting problem. Here the question is what an unchanged inventory can make available to a swap.
| Measure | What it describes | What it leaves unresolved |
|---|---|---|
| TVL | Included inventory valued at stated prices | Where liquidity sits on the price curve |
| Value of in-range positions | Marked capital belonging to currently active positions | How tightly that capital is concentrated |
| Active liquidity parameter, L | The local liquidity used by the pool's curve | Liquidity after the next boundary |
| Size-specific output quote | Estimated tokens received for a defined instruction | Whether that state survives until execution |
In Uniswap v3, the pool's liquidity() field reports currently in-range liquidity. The interface distinguishes it from total liquidity across ticks. L is a curve parameter, not a dollar amount; comparing raw L across different token pairs or decimal conventions is misleading. Uniswap v3 pool state interface.
Build three pools with the same $20,000 inventory
This is a hypothetical continuous-price teaching model using Uniswap v3 position mechanics. X is token0 and Y is token1. Each has an external snapshot valuation of $1, and the starting pool price is P = 1 Y per X. Assume ordinary tokens, normalized units, no accrued fees and no competing transactions.
Each pool holds exactly 10,000 X plus 10,000 Y. Counting the gross inventory of all positions, each has $20,000 of TVL, including assets in out-of-range positions. This convention is explicit: a provider that excludes particular inactive deposits could report another number.
| Pool | Current active price range, Y/X | Active L | In-range position value | Out-of-range value |
|---|---|---|---|---|
| Near | 0.81–1.234568 | 100,000 | $20,000 | $0 |
| Wide | 0.25–4.00 | 20,000 | $20,000 | $0 |
| Away | 0.81–1.234568 | 20,000 | $4,000 | $16,000 |
The displayed upper bound 1.234568 is rounded; calculations use the exact value 100/81. These convenient teaching boundaries are not a claim that a deployed pool accepts arbitrary prices: real positions use permitted tick boundaries. Uniswap documents how positions concentrate liquidity between their selected ticks. Uniswap concentrated liquidity.
Near places everything in the central range. Wide spreads the same inventory over a broader interval. Away puts only 2,000 X and 2,000 Y in the central range. Its remaining 8,000 X sits above the current price, between 1.44 and 2.25; its remaining 8,000 Y sits below it, between 0.36 and 0.5625.
These are alternative pool snapshots, not three simultaneously tradable pools linked by an arbitrage strategy. The construction deliberately removes differences in total assets so the range distribution is visible.
Reconstruct L rather than assigning it arbitrarily
Let s be the square root of the current price, a the square root of the lower bound and b the square root of the upper bound. For a position inside its range, its X balance is L × (1/s − 1/b) and its Y balance is L × (s − a). These are the real-reserve relationships described by the Uniswap v3 whitepaper.
At the starting price, s = 1. Near has a = 0.9 and b = 10/9. Each balance is therefore 0.1 × L. Setting each to 10,000 gives L = 100,000 and reconciles the $20,000 inventory.
Wide has a = 0.5 and b = 2. Each balance is 0.5 × L. Its same 10,000 X and 10,000 Y require L = 20,000. Both Near and Wide have 100% of their position value in range, yet Near has five times the local L.
Away uses Near's bounds with L = 20,000, producing 2,000 of each token centrally. Its upper inactive position has L = 48,000 and square-root bounds 1.2 and 1.5, giving 48,000 × (1/1.2 − 1/1.5) = 8,000 X. Its lower position has L = 160,000/3 and square-root bounds 0.6 and 0.75, giving 8,000 Y. The full inventory again totals 10,000 of each token.
Away has only 20% of its capital currently active, but the same local L as Wide. The fraction in range is useful context; it is not a substitute for reconstructing the curve.
Send the same 1,000 net Y through each pool
The hypothetical trader sends 1,000 Y to buy X, so P rises. Use net input after swap fees. Within an unchanged active range, the new square-root price is s′ = s + net Y/L. X output is L × (1/s − 1/s′). The deployed v3 library implements these relationships with integer arithmetic and explicit rounding. Uniswap square-root price math.
| Pool | New square-root price | X received | Average Y paid per X | Ending marginal P |
|---|---|---|---|---|
| Near | 1.01 | 990.099010 | 1.01 | 1.0201 |
| Wide | 1.05 | 952.380952 | 1.05 | 1.1025 |
| Away | 1.05 | 952.380952 | 1.05 | 1.1025 |
For Near, 1 + 1,000/100,000 = 1.01. Applying the output relationship gives 990.099010 X. Wide and Away instead reach 1.05 and deliver 952.380952 X. All ending prices stay inside their respective central ranges, so no boundary update is needed for this calculation.
Near delivers about 37.718058 more X despite identical initial TVL and token totals. Wide and Away deliver equal amounts despite their very different active-capital percentages. Those two counterexamples rule out using either headline measure alone to price the swap.
Average execution price and ending marginal price also differ. Near's average is 1.01 Y/X; its last marginal price is 1.0201. Describe which one a percentage compares before labeling it price impact.
At a hypothetical 0.30% input fee, obtaining 1,000 net Y requires about 1,003.009027 gross Y, ignoring rounding. Gas adds another cost. The table isolates liquidity distribution; it is not an all-in transaction quote.
Check where the local comparison stops
Higher current L does not establish that a pool remains deeper for every possible order size. Near's central position reaches its upper boundary after 11,111.111111 net Y from the starting state. Away reaches the same bound after only 2,222.222222 net Y. Wide's much broader position reaches its upper boundary after 20,000 net Y.
Those amounts follow from L × (b − 1). They describe input to the stated boundary, not an amount that can trade at the starting price. Beyond it, the active set changes and the original L must be replaced before continuing the calculation.
For Away, the central position ends before the upper inactive position begins. A larger trade therefore needs an explicit treatment of the intervening interval. The concentrated-liquidity execution guide follows multi-range paths and gaps. Extending the small-swap result with one constant L would miss that behavior.
This also explains why a liquidity chart must match trade direction. Buying X moves toward upper boundaries in this example; selling X moves toward lower ones. A single symmetric depth score can conceal different distributions on the two sides.
Turn a TVL screen into a quote worksheet
Start with one intended trade, then collect enough evidence to reproduce its estimate.
| Evidence to save | Practical validation |
|---|---|
| Chain, pool, protocol version and fee tier | Confirm that TVL and quote refer to the same venue scope |
| Block identifier and observation time | Read price, liquidity and boundaries from consistent state |
| Token contracts, order and decimals | Convert raw amounts into the intended X/Y units |
| TVL inclusion and valuation rules | Identify inactive positions, filters and price sources |
| Input direction and exact amount | Compare the same instruction across candidates |
| Current L and relevant initialized ticks | Identify every range change the trade can reach |
| Estimated output and transaction costs | Separate pool math, swap fees and gas |
Uniswap's QuoterV2 provides a documented implementation example: its single-pool quote returns output, the post-swap square-root price, initialized ticks crossed and a gas estimate. Preserve those outputs together. The estimate is in gas units, so converting it to ETH requires a gas price. It describes the measured portion of the quoting calculation and does not cover the complete transaction's final cost. Uniswap QuoterV2 source.
Repeat quotes at several relevant sizes and in the intended direction. A sudden deterioration can reveal a boundary that the smallest quote never reaches. Then check the actual route: assets in another fee tier, chain or unrelated pool cannot be counted as directly available to this pool's next swap.
Recognize the failure cases behind attractive totals
A stale snapshot can combine today's TVL with yesterday's range distribution. Consistent block references address that mismatch; they cannot prevent subsequent swaps or liquidity withdrawals. Refresh the quote before constructing the final instruction and retain explicit acceptance limits using the swap deadline and slippage guide.
Valuation can create a second mismatch. If a pool contains a staking receipt, a protocol conversion value and its market quote need separate treatment. The liquid staking token discount worksheet explains that unit distinction. A generous mark on the inventory does not create more executable output.
Finally, deeper local execution does not establish a better liquidity-provider investment. Fee collection, changing inventory, incentives and costs require their own ledger; use liquidity pool fee APR versus net return for that separate question.
Keep the pool's reported TVL beside the exact trade size, direction, block and estimated net output. If the range data or quote is missing, leave execution capacity unmeasured. The next swap can use only the liquidity its actual path reaches.
