If you’ve been providing liquidity on Uniswap, Curve, or Balancer and your tax software says you have zero issues to worry about, your tax software is wrong. This isn’t a subtle edge case. LP positions — especially Uniswap V3 — generate multiple taxable events that most consumer tools either misclassify, undercount, or silently skip. The result is usually a return that either massively overstates gains (because the software assigns zero basis to your LP NFT) or ignores the fee income entirely. Neither is correct. Neither will age well.
Here’s the full picture.
What an LP Position Actually Is On-Chain
Before you can tax something correctly, you need to know what it actually is. LP positions aren’t uniform.
Uniswap V2 / SushiSwap: When you deposit two tokens into a V2 pool, you receive ERC-20 LP tokens representing a pro-rata share of the pool. These are fungible — every LP token for a given pool is identical. Your basis is the value of the assets you deposited at the time of deposit.
Uniswap V3: Concentrated liquidity breaks the fungibility model. When you open a V3 position (by calling mint()), the protocol mints you a unique ERC-721 NFT. That NFT encodes your specific price range, your tick boundaries, and your liquidity share. No two V3 positions are the same asset. This matters enormously for tax: each NFT has its own cost basis, its own holding period, and its own fee accrual record.
Balancer BPTs: Balancer Pool Tokens are more like V2 LP tokens — ERC-20, fungible within a given pool. But Balancer pools can contain more than two assets and have weighted compositions (80/20, for example), which means the deposit and exit math is more complex.
Curve Gauges: Curve adds another layer. You deposit tokens, get LP tokens, then typically stake those LP tokens in a gauge to earn CRV rewards. That staking step is its own transaction with its own tax question (we’ll leave gauge staking for a separate post — it’s enough of a topic on its own).
For the rest of this post we’ll focus primarily on V3, because it’s where the most tax damage is being done silently.
The Entry Event: Is Depositing Into a Pool Taxable?
The IRS has not issued specific guidance on LP positions. That sentence will not save you under audit.
The conservative position — and the one most major crypto tax firms take — is that depositing into an LP pool is a taxable disposition of the tokens you deposit. The argument: you’re exchanging two assets (say, ETH and USDC) for a fundamentally different asset (an LP token or NFT representing a pro-rata claim on a pool). Under general tax principles, exchanging property for different property is a taxable event, unless a specific non-recognition rule applies. No such rule exists for LP deposits.
Some practitioners argue that V2 LP tokens are more like a receipt — that you haven’t really disposed of your assets, you’ve just wrapped them. That argument has logic to it, but it hasn’t been tested, and the IRS’s general posture on crypto is that if you got a different asset, you had a taxable exchange. Taking the aggressive position here without documentation is a risk calculation you should make consciously, not accidentally.
What this means in practice: When you deposit ETH and USDC into a Uniswap V3 pool:
- You have a taxable disposition of your ETH at its fair market value on the date of deposit. Gain or loss is calculated against your ETH’s cost basis.
- You have a taxable disposition of your USDC (usually at $1, so minimal gain/loss, but still a disposition).
- You acquire a new asset — the V3 NFT — with a cost basis equal to the total fair market value of assets deposited.
If your ETH was bought at $1,800 and you deposit it when it’s worth $3,000, you have a realized gain of $1,200 per ETH on deposit day. That’s a real tax bill before you’ve earned a single dollar in fees.
The Exit Event: Withdrawing From the Pool
When you close or reduce your LP position, you’re doing the reverse exchange. You’re disposing of your LP token or V3 NFT in exchange for the underlying tokens at the current pool composition.
V3 exit: You call burn() and collect(). The NFT position is reduced or burned. You receive some amount of ETH and USDC at whatever the current price ratio is inside your range. The gain or loss on the exit is:
> Proceeds (FMV of tokens received) minus Cost Basis of the NFT position
If you held the NFT for more than a year, that gain/loss is long-term. If less, short-term. The holding period starts at the date you minted the NFT, not the date you collected fees.
One wrinkle: if you collected fees mid-position (via an explicit collect() call — more on that below), those proceeds don’t affect your NFT basis under the most common treatment. Your basis stays at the deposit value. The fee income is accounted for separately.
The Income Event: LP Fee Accrual
V2 (and similar fungible LP tokens): Fees accrue continuously inside the pool and compound into the LP token value. Most practitioners treat fees as ordinary income at the time of withdrawal (when you actually receive them), though the continuous accrual model is debatable. This is one of several LP tax questions that could go either way.
V3 (explicit collection): V3 fees don’t auto-compound. They sit in the NFT’s fee reserves until you call collect(). The dominant position is that fees become ordinary income at the time of the collect() transaction — when you actually receive them into your wallet. The FMV at collection is your income amount and simultaneously becomes your cost basis in the received tokens.
This matters: if you collected $500 in USDC fees in February, that’s $500 of ordinary income in February regardless of what you did with the USDC later.
Impermanent Loss: Where It Shows Up in the Tax Math
Impermanent loss isn’t a tax concept — the IRS doesn’t have an “impermanent loss” line item. But it absolutely shows up in the tax math.
When you deposit equal values of ETH and USDC, and ETH moves significantly, you’ll withdraw a different ratio than you deposited — more of the underperforming asset, less of the outperformer. The difference between the USD value you deposited and the USD value you withdrew is what traders call impermanent loss.
In tax terms, this shows up as a capital loss on the exit transaction — your proceeds from the exit are lower than your cost basis in the NFT. That’s a real, reportable capital loss. It’s also an argument for tracking LP positions correctly: if your basis is wrong, you’re either overstating losses or understating them.
If you closed a losing LP position in a down year, that capital loss is potentially useful. But only if you can document it.
The Cost Basis Tracking Problem
This is where consumer tax software falls down hardest.
Most software treats V3 NFTs as assets with unknown or zero basis, for one of two reasons:
- The NFT mint transaction doesn’t come with a standard ERC-20 transfer from an exchange, so the software can’t infer the basis automatically.
- The software simply doesn’t have logic for LP NFTs and treats them like a random NFT airdrop.
The result: when you close your V3 position and receive back your ETH and USDC, the software books the entire exit value as a gain with zero cost. On a $50,000 position, that’s potentially a $50,000 phantom gain that you don’t actually owe tax on.
The fix requires manually documenting the entry: what tokens you deposited, at what price, on what date. That’s your NFT’s cost basis. Every time you partially close or add to the position, the basis adjusts accordingly.
Worked Example: Uniswap V3 ETH/USDC Position
Let’s make this concrete.
Entry: You deposit 1 ETH ($3,000) + 3,000 USDC into a V3 ETH/USDC pool at a price of $3,000 per ETH. Your range: $2,800 – $3,200. Total deposit value: $6,000. Your ETH was originally purchased at $1,500.
- Taxable on entry: You disposed of 1 ETH with a $1,500 gain (sale price $3,000, basis $1,500). You disposed of 3,000 USDC with ~$0 gain.
- NFT basis: $6,000.
Mid-position fee collection: Three months later, ETH is at $3,100 (you’re still in range). You call collect() and receive $180 in fees (mix of ETH and USDC, but let’s say you received them in USDC for simplicity).
- Taxable: $180 ordinary income at collection.
- NFT basis: Still $6,000 (fees collected separately don’t reduce basis under the most common treatment).
- New cost basis in the $180 USDC: $180.
Exit: Six months later, ETH is at $3,150. You’re still in range. You close the position. You receive approximately 0.95 ETH ($2,992.50) + 3,150 USDC = $6,142.50 total.
- Proceeds: $6,142.50
- NFT basis: $6,000
- Capital gain: $142.50 (short-term, held under a year)
Note: the impermanent loss in this example is small because ETH stayed in range. If ETH had moved to $4,000, you’d have exited with mostly USDC and a meaningful loss relative to simply holding ETH.
Multi-Chain and Bridge Reconciliation
If your LP activity spans Arbitrum, Optimism, Base, and mainnet, you have a reconciliation problem that goes beyond just LP math.
Bridging tokens to L2s is generally treated as a taxable event (exchange of mainnet token for wrapped/bridged version), though there are arguments against that treatment for native bridges that don’t change the underlying asset. The positions you open on L2 using bridged tokens inherit basis from the bridge transaction, not the original purchase.
Most tax software doesn’t connect these dots automatically. You need a complete transaction history across every chain, with bridge transactions explicitly linked, before LP entry/exit math will produce correct numbers. This is where doing it yourself with generic software gets painful fast.
If Your Software Has Been Wrong for Prior Years
If you’ve been filing with software that assigned zero basis to V3 NFTs, you likely have overstated gains on prior returns. That’s fixable — amended returns (Form 1040-X) exist for this. The statute of limitations for IRS assessment is generally three years from the filing date (six years if income is understated by more than 25%), so prior-year errors are worth reviewing.
The more important question is documentation: do you have records from those earlier LP positions? Transaction hashes from the mint event, the fee collections, the burn event — all of it. If you don’t have it now, pull it from the chain while you still can. Etherscan, Arbiscan, and their equivalents don’t delete transaction history.
The Documentation Footprint Under Audit
If the IRS asks about your LP positions, here’s what you need to be able to show:
- Entry transaction hash (the
mint() call) with timestamp and block number
- FMV of deposited tokens at time of deposit (sourced from a price API with historical data — CoinGecko, CoinMarketCap, or on-chain oracle records)
- Fee collection transaction hashes with FMV at time of each collection
- Exit transaction hash (the
burn() / collect() call) with final token amounts received and FMV at exit
- Basis calculation worksheet showing how you arrived at your gain/loss figures
- For multi-chain positions: bridge transaction hashes and the basis carryover logic
This is not what a typical 1099-DA is going to give you. The 1099-DA covers centralized exchange activity. Your on-chain LP positions are your responsibility to document.
DIY vs. Hire a Firm: The Decision Tree
DIY is probably fine if:
- You had fewer than 5 LP positions across no more than 2 chains in the tax year
- You opened and closed each position in the same tax year (no year-straddle basis issues)
- You collected fees in 3 or fewer separate transactions
- You have all the transaction hashes and can produce FMV at each event
- You’re comfortable building a basis tracking spreadsheet and attaching supplemental documentation to your return
Hire a firm if:
- You have V3 positions that straddle two tax years (opened in 2023, closed in 2024)
- You LP’d on more than 2 chains and used bridges
- You’ve been filing with software that assigned zero basis and want to assess whether amended returns make sense
- Your positions involve Balancer, Curve gauges, or any custom AMM (the math is non-standard)
- The total USD value at stake makes a basis error meaningful — if it’s a $200 error, maybe it isn’t worth it; if it’s a $20,000 phantom gain, it is
- You’re planning to LP again in the current year and want the prior year baseline clean before you compound the problem
LP tax treatment is genuinely unsettled in some areas — the IRS hasn’t opined on every edge case here. What isn’t unsettled is that ignoring the question and letting software default to zero basis is a documented, reproducible way to overstate gains. We’ve seen it repeatedly. The correct approach is to track every event, document every entry, and take a defensible position on the open questions. If you’d rather have someone do that tracking for you, we’re here.
This post covers general tax concepts and is not tax advice for your specific situation. Your LP history, basis, and filing position depend on facts unique to you. Consult a qualified tax professional before filing.
Need help with your crypto taxes? Mike Ring and the BCTP team handle the messy stuff — multi-chain DeFi, 1099-DAs that don’t add up, prior-year amendments. Free consult at cryptotaxprep.io or call 410-320-7348.
This isn’t tax advice. Talk to a professional about your specific situation.