Folio v0.9 — CEX + On-chain Consolidation is liveSee what's new →

Uniswap V3 LP Position Tracking: A Position Is an NFT, Not a Balance (2026)

Portfolio·

Uniswap V3 LP Position Tracking: A Position Is an NFT, Not a Balance (2026)

A Uniswap V3 liquidity position is a non-fungible NFT with a price range — not a fungible LP token. It earns fees only while in range, the two-asset split shifts as price moves, and fees accrue separately. Why range, NFT identity, and separate fees break a balance-based tracker.
Author avatar Wag3s TeamEditorial team specializing in Web3 finance, crypto tax, and DAO operations. Based in Zurich, Switzerland.

Reviewed by Wag3s Editorial Team — verified against the Uniswap V3 concentrated-liquidity model (NFT positions, price ranges, separately-accrued fees) · Last reviewed May 2026

Uniswap V3 LP Position Tracking: A Position Is an NFT, Not a Balance

Uniswap V2 gave you a fungible LP token you could read like a balance. V3 does not: a position is a unique NFT with a price range, earning fees only in range, with a composition that moves with price. A balance-based tracker cannot represent it. This guide is the V3 model and how to track it.

TL;DR

  • A V3 LP position is a non-fungible NFT, not a fungible LP token — no single ERC-20 balance represents it.
  • It earns fees only while the price is in its range; out of range it stops earning and skews to one asset.
  • The two-asset split is not fixed — it rebalances with price within the range.
  • Fees accrue separately and must be collected — not auto-compounded into principal.
  • Follow the position-NFT lifecycle (mint / modify / collect / burn), not a balance.
  • Tax is jurisdiction-specific — track mechanics, confirm tax separately. Same decomposition discipline as #141.

A position is an NFT with a range

In Uniswap V2 an LP position was a fungible LP token — readable like a balance. In V3, a position is a non-fungible NFT: a distinct token with its own price range and its own accrued, uncollected fees. There is no single ERC-20 balance that represents it. Tracking must therefore follow the position-NFT identity through its lifecycle — mint, modify, collect, burn — not read a fungible balance. This is the object-identity discipline applied to liquidity.

Range decides everything

A V3 position only earns fees while the current price is within its range. Consequences for tracking:

  • In range → earning fees; underlying is a price-dependent mix of the pair.
  • Out of rangestops earning; composition skews toward one asset.

A tracker that ignores in-range/out-of-range state misreads both the fee accrual and the asset mix. Range is not a detail — it is the position's economic state.

The two-asset split moves

The position's underlying is not a fixed pair of amounts. As price moves within the range, the position rebalances between the two assets; out of range it can be entirely one asset. So "the position holds X of A and Y of B" is only valid at a point in time and must be recomputed as price moves — the impermanent-loss/rebalancing effect, made explicit by the range.

Fees are separate

Accrued fees in V3 are tracked separately and must be explicitly collected — they are not auto-compounded into the position's principal. A tracker must:

  • capture uncollected accrued fees as their own component;
  • treat collect as its own event;
  • not assume fees are inside the position's principal amounts.

Folding fees into principal (or missing them until collect) is the recurring V3 error — the same "separate the reward stream" rule as yield farming tracking.

Tax is jurisdiction-specific

Whether mint, modify, collect, or burn is a taxable event — and how fee income is treated — is framework- and jurisdiction-specific and must not be assumed (see cost-basis methods). The NFT/range/fee mechanics are the tracking layer; the tax characterisation is a separate, adviser-confirmed question.

Practical guidance

  1. Model the position as an NFT, not a fungible LP balance — follow its lifecycle.
  2. Track in-range/out-of-range state — it drives fees and composition.
  3. Recompute the two-asset split as price moves; it is not static.
  4. Capture uncollected fees separately; treat collect as its own event.
  5. Confirm tax treatment of mint/modify/collect/burn per jurisdiction.
  6. Reconcile the position-NFT to the protocol with an audit trail.

How vendor tools handle Uniswap V3

Koinly and Zerion model V3 NFT positions. Confirm the tool tracks the position-NFT lifecycle (not a fungible balance), reflects in/out-of-range state and the moving asset split, and captures uncollected fees separately — treating a V3 position like a V2 LP token is the structural error.

How Wag3s helps

Wag3s Folio models each Uniswap V3 position as an NFT through its mint/modify/collect/burn lifecycle, reflects in-range/out-of-range state and the price-dependent asset split, captures uncollected fees as a separate component, and surfaces the data for the jurisdiction-specific tax characterisation. See the Folio product page.


Further reading

Sources

  • Uniswap V3 — concentrated liquidity; a liquidity position is a non-fungible position (NFT) with a price range
  • A V3 position earns fees only while the price is within its range; the underlying asset split shifts with price
  • Accrued fees are tracked separately and must be explicitly collected (not auto-compounded into principal)
Editorial disclaimer
This article is informational and does not constitute tax or accounting advice. LP position characterisation is framework- and jurisdiction-specific. Confirm treatment with a qualified adviser.