Skip to content

Research notes

LP Tokens vs Liquidity Position NFTs

Reconcile a v2 pool-share transfer and a v3 NFT withdrawal, then separate position ownership, accrued fees and underlying tokens received.

Ivory rings in a shallow bowl beside a sculptural ivory frame with curved rails and a lime clasp.
Illustration for research notes; examples in this article are educational.

LP tokens usually divide a common pool claim into interchangeable units. A liquidity position NFT identifies one separately tracked position, such as a chosen price range in Uniswap v3 or v4’s PositionManager. Transferring either token can change who controls the claim without withdrawing the underlying assets. The contract version, manager and current position state determine what the new owner can collect.

A wallet can display “150 LP tokens” beside “1 position NFT,” but those numbers measure different things. The first may be a divisible share balance. The second counts an identifier. Neither number, by itself, tells you the underlying token quantities or their value.

Interchangeable units need a common claim

In Uniswap v2, each pool issues its own fungible ERC-20 liquidity token. Units issued by the same pool contract participate in the same reserve claim. Tokens from another pool are different assets, even if their wallet labels both say UNI-V2. Uniswap’s v2 pool documentation explains how pool tokens represent contributions and are burned to retrieve underlying liquidity.

For a simplified snapshot, the claim on each underlying token is the LP balance divided by total LP supply, multiplied by that token’s pool balance. Swaps and fees can change the balances behind each unit. The original deposit is therefore a historical input, rather than a fixed redemption package.

Consider a hypothetical existing pool containing 40 A and 80,000 B, with 2,000 LP units outstanding. Alice owns 150 units. Assume balances equal reserves, ordinary token transfers, no intervening swaps or deposits, and no protocol-fee mint dilution or rounding effects during these operations. Total supply includes all outstanding units, including any inaccessible ones.

Alice’s fraction is 150 / 2,000 = 7.5%. Her proportional claim is 3 A and 6,000 B. She transfers 50 LP units to Bob:

StateAlice’s LP unitsBob’s LP unitsPool supply
Before transfer15002,000
After transfer100502,000
After Bob redeems all his units10001,950

The transfer itself sends no A or B out of the pool. Alice now controls a claim on 2 A and 4,000 B; Bob controls a claim on 1 A and 2,000 B. Those claims add back to the original 3 A and 6,000 B.

If Bob then redeems, he receives 1 A and 2,000 B. The pool retains 39 A and 78,000 B. Alice’s pool share rises from 5% immediately after the transfer to approximately 5.1282%, but her claim remains 2 A and 4,000 B: 100 / 1,950 times the remaining balances. A larger percentage after another provider exits need not mean more assets.

The actual v2 pair contract computes burn proceeds from balances and supply after checking protocol-fee minting. Live calculations must include that state, token decimals and integer rounding. The example deliberately removes those complications so transfer and redemption can be compared directly.

A position identifier carries different information

Concentrated liquidity allows separately configured price ranges. Two positions in the same pool can have different bounds, liquidity and fee histories. Counting their NFTs as two equal pool shares would discard the information needed to determine their claims.

Uniswap v3’s NonfungiblePositionManager source associates each token identifier with position data, including bounds, liquidity, fee-growth checkpoints and owed tokens. The NFT provides an ownership interface for that record. Its liquidity parameter, L, is not a balance of A, B or dollars.

This is a manager convention. The v3 core position library identifies core positions by owner and tick boundaries; an NFT wrapper is not required by the idea of concentrated liquidity itself. A different manager or vault can expose a different ownership instrument.

QuestionPlain v2 pool tokenv3 position-manager NFT
What does the wallet balance count?Divisible units of one pool’s tokenDistinct position identifiers
Can a transfer split the instrument?Yes, by transferring some unitsA normal NFT transfer moves the whole identifier
Which state determines principal?Pool balances and LP supplyPosition liquidity, bounds and pool price
Where are swap fees accounted?Within the pool reservesSeparately from position principal

That fee-accounting difference is documented in Uniswap’s fee overview. Adding a separate fee estimate to a v2 reserve claim can count the same value twice. The pool fees versus net return guide extends this distinction into a complete performance ledger.

Follow one NFT through three different operations

Take a separate hypothetical v3 position, NFT 712. Its current principal is 5 A and 24,000 B, its L is 1,200, and accrued uncollected fees are 0.08 A and 120 B. These are stipulated snapshot inputs, not a live pool quote or an instruction to deposit those amounts.

Keep price and range fixed, assume no additional swaps or fees between steps, and ignore gas and rounding. For unchanged price and bounds, removing one quarter of L removes one quarter of principal. Token A and B have no assumed dollar value here.

The opening fees in this ledger are assumed to be reflected in the manager’s stored owed balances. In a live position, tokensOwed0 and tokensOwed1 alone can omit later fee growth. Collection updates that fee accounting for a funded position before payment. The v3 manager’s collection logic shows this update.

Alice first transfers the NFT to Bob. The same position, including its uncollected claim, is now under Bob’s ownership. Uniswap’s ownership explanation explicitly distinguishes this transfer of ownership. There is no underlying-token payout from the transfer alone.

Bob next decreases L by 300, or 25% of 1,200. Released principal is 1.25 A and 6,000 B. Under the v3 manager, decreasing liquidity credits owed tokens; collection is the separate operation that sends them to a recipient. Its decrease-liquidity guide demonstrates both calls together.

Assume Bob has collected nothing earlier and then collects all owed tokens to his own wallet:

Confirmed stateLPrincipal A / BOwed A / BCumulative receipt A / B
Bob receives NFT1,2005 / 24,0000.08 / 1200 / 0
Bob decreases L by 3009003.75 / 18,0001.33 / 6,1200 / 0
Bob collects all owed tokens9003.75 / 18,0000 / 01.33 / 6,120

The middle row’s owed balance combines released principal and previously earned fees: 1.25 + 0.08 = 1.33 A, and 6,000 + 120 = 6,120 B. Calling that entire amount “fees” would misclassify the withdrawal.

After collection, remaining principal plus wallet receipts is 5.08 A and 24,120 B. That exactly matches opening principal plus fees. Collection changes the location of the claim; it does not create another 1.33 A and 6,120 B of income.

As an alternative to decreasing liquidity, Bob could collect fees while leaving L unchanged. Uniswap’s v3 collection guide shows fee collection while maintaining custody of the NFT. Transfer, decrease and collection answer three different questions: who controls the record, how much liquidity remains, and which tokens reached the recipient.

If Bob later removes the remaining liquidity and collects everything, the NFT can still exist with zero liquidity and zero owed tokens. In the v3 manager, explicitly burning the NFT requires those balances to be cleared first. Possessing an NFT therefore does not establish that it remains funded.

Read v4 at the correct contract layer

Uniswap v4’s supplied PositionManager contract also mints ERC-721 position NFTs. That does not make every token balance within v4 a position NFT.

The PoolManager also supports ERC-6909 currency claims. Uniswap’s ERC-6909 guide describes using those balances to resolve currency obligations. A claim denominated in one currency is a different object from an NFT identifying liquidity across a price range. Record the contract and identifier before interpreting either balance.

The v3 operation sequence also needs translation. v4’s PositionManager guide uses commands and currency-settlement actions; fee collection can use a zero-liquidity decrease followed by a take action. Its decrease guide pairs reducing liquidity with actions that deliver the resulting currencies. Check the complete transaction payload, recipient and hook configuration rather than assuming a familiar method name establishes the result.

Check the ownership path before valuing the position

The most useful worksheet starts with contract state and ends with confirmed receipts:

Record to saveWhat to validate
Chain and contract addressThe displayed token is the intended pool share, manager NFT or vault receipt
LP balance and total supplyBoth refer to the same fungible pool token and state reference
NFT owner and token identifierThe current owner controls the intended position record
Pool, range and liquidityThe position is funded and its principal calculation uses matching state
Fee checkpoints and owed tokensCurrent fee growth is included; released principal is identified separately
Approvals and custodyThe proposed caller has the required authority and the destination can manage the claim
Operation and recipientTransfer, decrease, collect and burn produce the intended state and payout
Receipt and valuation timestampActual quantities reconcile before applying a price or reporting-currency mark

Several failure cases follow directly. An NFT marketplace image may persist after all liquidity is removed. A missing wallet display does not prove the position was redeemed. An LP token deposited into a separate staking or vault contract requires checking that contract’s withdrawal rights; the depositor’s wallet balance alone no longer describes the custody path.

Approvals also matter. ERC-721 permits approved addresses or operators to transfer NFTs, and its safe-transfer interface checks contract recipients for the required receiver response. A receiving contract must still support the intended management workflow. These are token-standard rules, not guarantees about recoverable principal.

A funded position can also be outside its active range; the out-of-range liquidity guide explains the resulting inventory and fee eligibility. For valuation, identify whether the mark uses a spot price or TWAP oracle, then record its time. Neither ownership format supplies a price guarantee.

The same discipline applies to other wrappers: a transferable token’s label does not reveal its economic exposure. The daily-reset leveraged-token example follows a different mechanism that likewise requires reading the rules behind the token.

Before transferring or withdrawing, write down the exact claim, the current controller and the expected underlying-token receipt. After confirmation, reconcile those three records. A token moving wallets and assets leaving a pool should appear as different events in that ledger.

Keep the context with the example.

Each worked example is illustrative, with its sources and assumptions in the article. Read our editorial standards for authorship, verification and corrections.