I've watched people LP, lose money, and not quite understand why. The fees looked fine. The pair seemed reasonable. Something in the math quietly worked against them and they couldn't point to what.

This is that explanation. Start from what liquidity actually is, go through how TradFi hides it and DeFi exposes it, and end with the full impermanent loss curve so you're not surprised when the numbers don't add up. No shortcuts.

What liquidity actually means

A market is liquid if you can buy or sell without moving the price. That's the whole definition. Everything else is downstream of it.

Think about depth. Drop a rock into a shallow puddle and everything moves. Drop it into the ocean and nothing measurable happens. A liquid market is the ocean. Your order gets absorbed without disturbing anything. A thin market is the puddle, and if your rock is big enough, you're making waves whether you want to or not.

The number you feel this through is slippage: the gap between the price you saw and the price you actually got. In a deep market a $10k order doesn't register. In a thin one that same $10k shifts the price by 1%, 3%, sometimes more. You overpay. The next person overpays a bit more because you moved the floor.

The other signal is the bid-ask spread: the gap between what buyers will pay and what sellers will accept. Liquid markets keep this tight, fractions of a percent. Illiquid ones let it widen. That spread isn't neutral. It's income for whoever is sitting on the other side of your order.

So who is that?

Market makers and the problem of scale

In traditional markets, that's market makers. They post a buy price and a sell price at the same time, earn the spread between them, and absorb whatever you throw at them. They're the counterparty to almost every trade a retail investor makes without knowing it.

This works fine at normal order sizes. It stops working when you're a pension fund trying to deploy $500 million into Apple stock. You can't do that on the public exchange quietly. The moment you start, the market sees the order, prices move up ahead of you, and by the time you're done you've paid more than you would have if you'd somehow executed the whole thing at the opening price. The difference is market impact, and for large institutional traders it's one of the most expensive problems they have.

TradFi's solution: dark pools.

Dark pools: when liquidity goes private

The name makes them sound like something the SEC should be investigating. The actual mechanism is boring, and makes complete sense once you understand the problem they're solving.

A dark pool is a private trading venue where large orders get matched off-exchange, away from the public order book. "Dark" means the orders are invisible until after execution. So a pension fund wanting to offload 2 million Apple shares doesn't post that intention on the NYSE for everyone to see. Instead it routes through a dark pool, finds a willing counterparty, and executes near the public market price, without the market knowing it was coming and repricing ahead of it.

Price is still discovered on the lit exchanges (NYSE, Nasdaq). Dark pools don't set prices. They free-ride on prices the public market already found. They exist because broadcasting a massive order before it executes is self-defeating. The opacity is the feature, not a bug. If your $500M sell order is visible, everyone frontruns it. Hiding it means you actually get the price you wanted.

So TradFi ended up with a split architecture: public markets for price discovery, private venues for execution at scale. Two layers doing different jobs.

DeFi threw all of that out.

AMMs: the opposite philosophy

Early DeFi had no market makers, no order books, no dark pools, no institutional infrastructure of any kind. Just wallets and smart contracts and the slightly absurd ambition of building financial markets from scratch on a blockchain.

The Automated Market Maker was the answer, and it's almost the exact inverse of how TradFi does it.

Instead of matching buyers with sellers, an AMM uses a pool of locked assets and a pricing formula. No counterparty needed. No order book. Prices come from the ratio of assets in the pool and update automatically with every trade. Everything is on-chain and public: pool balances, trade history, prices, all of it visible to anyone before and after every transaction.

Where TradFi solves liquidity by hiding large orders from the market, DeFi solves it by making the pool itself the market. And the pool only exists because someone put their assets into it.

That someone is the LP.

What LPing is

When you LP on Uniswap, you're not lending money to a protocol. You're becoming the market maker. Your capital is the pool. Every swap on that pair runs through your deposit.

You deposit two assets in roughly equal value, say ETH and USDC. The pool uses them to fill trades. Someone wants ETH? They buy it from your pool, pushing USDC in. Someone wants USDC? The other direction. The composition of your position shifts with every trade, and you earn a fee on each one. That fee is your payment for sitting on the other side of every transaction whether you want to be there or not.

The formula governing all of this is the constant product formula:

x · y = k
Where x and y are the quantities of each token in the pool, and k is a constant that never changes. Every trade must preserve k.

Say a pool holds 100 ETH and 200,000 USDC. k = 20,000,000. Someone buys 1 ETH — they pull ETH out and push USDC in. For k to stay constant: 99 ETH × new USDC = 20,000,000, so they owe 202,020 USDC. They came in expecting $2,000 and paid $2,020. That $20 gap is slippage, and it scales with trade size — a bigger buy moves the ratio more, so the next buyer pays even more. Deep pools have more TVL to absorb the same trade with less ratio shift and less slippage. That's the direct connection between how much liquidity is in a pool and how usable it is for trading.

Every trade pays a fee, 0.01%, 0.05%, 0.3%, or 1% depending on the pool, split proportionally across all LPs by their share. That's the income side. The expense side is what we need to talk about.

Impermanent loss: the full curve

This is what most LP explainers skip, or explain wrong. It's also the thing that quietly eats your returns when you can't figure out where the money went.

When you deposit into a pool you're not parking assets. You're letting the constant product formula automatically rebalance your position as prices move. Arbitrageurs trade against the pool whenever the pool price drifts from the market price, which means the pool is always being pushed toward 50/50 value split at the current price. Your composition changes whether you want it to or not.

Impermanent loss is the name for the cost of that rebalancing: the gap between what your LP position is worth versus what you'd have if you'd just held the same assets in a wallet.

Run through it. You deposit 1 ETH and $2,000 USDC when ETH is $2,000. Total value: $4,000.

ETH goes to $4,000. If you'd held: 1 ETH + $2,000 USDC = $6,000. But the pool doesn't know or care what price you entered at. Arbitrageurs have been buying your cheap ETH and selling USDC into the pool until the pool price matches the market. By the time ETH is at $4,000:

  1. 1
    Your ETH quantity dropped to 0.707 ETH (down from 1). Arbitrageurs bought it cheaply from the pool.
  2. 2
    Your USDC quantity rose to $2,828 (up from $2,000), the USDC the arbitrageurs paid in.
  3. 3
    Your LP value: 0.707 × $4,000 + $2,828 = $5,657.
  4. 4
    Versus holding: $6,000. The difference, $343 or −5.7%, is impermanent loss.

$343 less than holding, on an ETH move you correctly anticipated. That's the sting of it. The formula, for full-range positions, with r = new price / entry price:

IL = 2√r / (1 + r) − 1
r is the price ratio of one asset relative to the other. The formula is symmetric: a 2× up and a 0.5× down produce identical IL.

The thing that gets people: IL is symmetric. ETH doubling and ETH halving produce exactly the same loss, ~5.7% each. Direction doesn't matter, only divergence does. The pool doesn't care which way the price moved. It's been rebalancing you toward 50/50 at whatever the current price is, and both outcomes leave you holding less total value than if you'd just sat on the assets.

How it scales:

Impermanent loss by price move (vs. holding)
1.25× / 0.8×
−0.6%
1.5× / 0.67×
−2.0%
2× / 0.5×
−5.7%
3× / 0.33×
−13.4%
5× / 0.2×
−25.5%
10× / 0.1×
−42.5%

The word "impermanent" is one of the worst naming decisions in crypto, which is saying something. It's technically true: if ETH comes back to exactly $2,000, the IL disappears. But if you exit at any other price, the loss is fully realised. Most people don't time their exit to their entry price. Most of the time, the loss is just a loss.

Concentrated liquidity changes the math

Uniswap V3 let LPs deploy capital within a specific price range instead of across the full curve. Set a range of $1,800 to $2,200 and your capital only works when ETH is in that band. Outside it, you earn nothing. Inside it, you earn fees at a much higher rate per dollar than a full-range position would.

Concentration amplifies everything. More fees when in range. Steeper IL when price escapes.

If price leaves your range entirely, you end up 100% in one asset: all ETH if price dropped below your range, all USDC if it rose above. The pool converted you entirely into the losing side at the moment things went wrong. The IL isn't worse in percentage terms than V2, but it hits faster. A ±10% range hits max IL the moment price moves 10%.

Tight range is a bet on low volatility. Wide range is safer but you earn less per dollar. Getting that width right is most of the work in active V3 LP management.

The other factors

IL is the big one but not the only thing eating your returns.

Fee tier selection. The same pair often has pools at 0.01%, 0.05%, 0.3%, and 1%. You choose which to provide to. Stablecoin/stablecoin pairs (USDC/USDT) belong at 0.01%. Correlated assets like ETH/stETH belong at 0.05% — volume is enormous, IL is basically zero, and any higher and you lose to LPs who undercut you. ETH/USDC lives at 0.3%. Volatile pairs and new tokens warrant 1% because the IL risk is real and if you're not being compensated for it at that rate, you're probably losing.

0.01%
Stablecoin/stablecoin pairs (USDC/USDT, etc.)
0.05%
Correlated assets (ETH/stETH)
0.3%
Standard pairs: ETH/USDC, most blue-chips
1%
High-volatility, exotic or low-liquidity pairs

Volume/TVL ratio. The number that actually tells you whether a pool is worth entering. $10M TVL with $1M/day volume generates fees fast. $10M TVL with $100K/day volume generates them slowly, and slowly might not be fast enough to offset IL when price moves. This ratio, not APY, not TVL on its own, is the primary screen.

Rebalancing cost. In V3, when price exits your range you need to withdraw, adjust, and redeposit to get earning again. Each time costs gas. On mainnet, if you're running a tight range on a volatile asset, you can rebalance your fees away before they compound into anything meaningful. Most active V3 LPs either use L2s where gas is negligible, or set ranges wide enough that they're not moving positions every few days.

Smart contract risk. Your capital sits in a contract. Uniswap's contracts are about as battle-tested as anything in DeFi, but the risk isn't zero. Forks, newer protocols, pools with exotic token mechanics: higher risk, and worth knowing what you're in before you're in it.

When LPing makes sense

You're taking the other side of every trade. Sideways market, steady volume, low-volatility pair: fees accumulate and IL barely moves. You come out ahead. Trending market, volatile asset, directional price action: arbitrageurs strip your pool of whatever's appreciating and you end up concentrated in whatever's losing. The fees don't cover it.

The pairs that structurally work:

Pair type IL profile Fee potential Verdict
Stablecoin / stablecoin Near zero. Prices don't diverge. Low per trade, high volume Structurally good. Race to the bottom on fees.
ETH / stETH or similar Minimal. Assets move together. Moderate Strong. Correlation kills IL.
ETH / USDC Moderate. ETH is volatile. High. Deepest pool, most volume. Works in sideways markets. Bleeds in bull runs.
Volatile token / ETH High. Asymmetric directional risk. High, but it has to be Requires active management. Easy to get wrecked.

The LP Yield Dashboard

I built a tool that screens Uniswap V3 pools across Ethereum, Arbitrum, Base, Polygon, and Optimism. It ranks by volume/TVL ratio and streams per-chain as data comes in, so you're not staring at a loading spinner waiting for five chains to respond before seeing anything.

It won't tell you when to exit or whether a pair will stay correlated. What it does is cut through the noise of 500 pools and surface the ones actually generating fees relative to their depth. Start there, then apply the fee tier and pair volatility logic from above to filter further.

If you're curious how I think about products, systems, and trade-offs:

See how I think →
This is not financial advice. LPing involves real risks including impermanent loss, smart contract vulnerabilities, and loss of principal. This article is for educational purposes. Understand the mechanics fully before deploying capital.