Protocols

Valuing Uniswap V3 Concentrated Liquidity

A Uniswap V3 position is an NFT whose composition changes with price. Why a token balance tells you nothing, and what has to be computed to value one.

Octav Team2 min read
Banner: Your LP position is an NFT, not a balance

Protocols covered

  • Uniswap protocol logoUniswap
  • Ethereum blockchain logoEthereum

Uniswap V2 positions were fungible LP tokens: hold 1% of the supply, own 1% of the pool. V3 replaced that with concentrated liquidity, and in doing so made LP positions genuinely hard to value.

The position is an NFT, not a balance

A V3 position is an ERC-721 token representing liquidity provided within a specific price range — a lower and upper tick. Two positions in the same pool with the same capital can be worth different amounts and hold entirely different assets.

That means a balance query returns, at best, "this wallet owns NFT #123456". The value is contract state, not a number in the wallet.

Composition changes with price

Within its range, a position holds a mix of both assets that shifts as the price moves. Outside its range, it holds exactly one:

Price relative to rangePosition holds
Below the range100% of the base asset
Inside the rangeA mix, shifting as price moves
Above the range100% of the quote asset
Out of range (either side)Earning no fees

The last row is the operationally important one. An out-of-range position is still capital, but it has stopped doing the job it was deployed for. A portfolio report that shows only value will not surface that; a report that shows range status will.

What has to be computed

To value a V3 position you need, at minimum:

  1. The position's tick range and liquidity amount.
  2. The pool's current tick.
  3. The resulting token amounts at that price.
  4. Uncollected fees — accrued but not yet withdrawn.
  5. Prices for both underlying assets.

Point four is routinely missed. Uncollected fees can be a material share of a position's value, and they sit in the contract rather than the wallet. An API that reports the liquidity but not the fees understates every active LP position, and understates the most successful ones most.

Impermanent loss is not a data field

A common request is for the API to report impermanent loss. It cannot, because IL is defined against a counterfactual — what the assets would be worth if you had simply held them — and that depends on when you entered.

What a portfolio API can give you is the honest inputs: current composition, fees earned, and range status. Computing IL against your own cost basis is a downstream job, and one that belongs alongside transaction reconciliation where the entry price actually lives.

V4 and hooks

Uniswap V4 keeps concentrated liquidity and adds hooks — custom logic attached to a pool. Hooks can alter fee behaviour and position mechanics, which means coverage is now per-hook as well as per-pool. A provider supporting "Uniswap V4" does not necessarily support every hook deployed against it.

Worth asking about explicitly rather than assuming.

Checking a provider

For a wallet with an open V3 position:

  • Is the position resolved into underlying token amounts, or shown as an NFT?
  • Are uncollected fees included, and shown separately?
  • Is range status exposed — in range, or out?
  • Does the value change correctly when the pool price crosses a range boundary?

A provider that reports LP positions at the LP token's own market price, rather than by resolving pool composition, is making the error described in Why Portfolio APIs Disagree About Net Worth.

Keep reading

  • Banner: Three places your capital hides
    Protocols

    Tracking Curve Pools, Gauges and veCRV

    Curve positions move through three places and only one is your wallet. Why staked LP tokens vanish from balance queries and how locked veCRV should be valued.

    2 min read

  • Banner: Supply, debt and the health factor
    Protocols

    Tracking Aave Positions: Supply, Debt, Health

    Aave supplies and borrows are separate tokens with independent balances. How to net them into a real position, and why health factor belongs in risk data.

    2 min read

  • Banner: stETH rebases. wstETH does not.
    Protocols

    Valuing stETH and Liquid Staking Positions

    Rebasing and wrapped staking tokens need different valuation logic. Why stETH balances change with no transaction, and how wstETH breaks naive pricing.

    2 min read