Why is liquidity position ownership represented by tokens or NFTs?

Ownership of Uniswap liquidity is represented by UNI-V2 tokens (for Uniswap v2 liquidity) and NFTs (for Uniswap v3 and Uniswap v4 liquidity).

The wallet address holding the NFTs or UNI-V2 tokens owns the liquidity. The owner of these tokens can remove the liquidity, claim earned fees, or add liquidity to the position.

Transferring UNI-V2 tokens or NFTs to another address gives ownership of the liquidity to the receiving wallet.

 

Liquidity on Uniswap v2

Uniswap v2 represents liquidity using UNI-V2 tokens.
These tokens are deposited in the liquidity provider's wallet when liquidity is added to Uniswap v2. The UNI-V2 tokens deposited represent how much liquidity the provider added.

 

Liquidity on Uniswap v3 and Uniswap v4

Uniswap v3 and Uniswap v4 represent liquidity using NFTs.
The NFT is deposited in the liquidity providers wallet when liquidity is added to Uniswap v3 and Uniswap v4. These NFTs store all of the data for the liquidity position.

The Uniswap interface does not burn NFTs when removing liquidity (outside of migrating from v3 to v4, which will burn the v3 NFT). This allows users to keep the NFT as a keepsake or record, add liquidity to the same position later, or transfer or sell the NFT. 
The Uniswap interface does not have any current options to burn an LP NFT.

 

The NFT stores the following data:

  • Nonce: Tracks permit nonces
  • Operator: Typically a 0x… address unless permission is granted to another address to manage the liquidity
  • Token0 Address: Address of the first token in the pool
  • Token1 Address: Address of the second token in the pool
  • Pool Fee Tier: The selected fee tier for the pool
  • Lower Tick: The lower price boundary of the position
  • Upper Tick: The upper price boundary of the position
  • Liquidity Value: The value of the liquidity in the position
  • feeGrowthInside0LastX128: Used for fee tracking on Token0
  • feeGrowthInside1LastX128: Used for fee tracking on Token1
  • tokensOwed0: A temporary value representing owed tokens for Token0
  • tokensOwed1: A temporary value representing owed tokens for Token1