When someone shows me a liquidity pool paying 40% APR, I don’t start with the percentage. I ask what the pool does and who is paying the return.
If traders pay swap fees, the return depends on volume and my share of active liquidity. If borrowers pay interest, it depends on demand for loans. If most of the yield comes from a newly issued reward token, the quoted APR may fall with the token price.
The percentage is the last number I look at, not the first.
What is a liquidity pool?
A liquidity pool is a reserve of crypto assets that a protocol can use for a defined purpose.
On a decentralized exchange, the pool holds tokens that traders can swap. In a lending protocol, it supplies assets that other users can borrow. Smart contracts record deposits, apply the protocol’s rules, and calculate what each participant owns.
The same term is used for several mechanisms:
| Pool | What the assets do | Main source of return | Main risks |
|---|---|---|---|
| AMM swap pool | Provide tokens for decentralized swaps | Trading fees | Impermanent loss, token risk, price impact, smart-contract risk |
| Stable-swap pool | Exchange assets expected to stay close in price | Trading fees and possible incentives | Depeg risk, contract risk, imbalance |
| Concentrated-liquidity pool | Provide swap liquidity inside a chosen price range | Fees earned while the position is active | Out-of-range position, active management, impermanent loss |
| Weighted or multi-asset pool | Hold and trade assets in selected weights | Trading fees | Rebalancing exposure, token risk, impermanent loss |
| Lending pool | Supply assets to borrowers | Borrower interest and possible incentives | Bad debt, oracle failure, liquidation design, utilization and withdrawal risk |
A staking pool is different. It combines assets for blockchain validation and distributes staking rewards. Some staking services issue a liquid staking token that can later be used in DeFi, but that doesn’t turn staking itself into an AMM liquidity pool. Ethereum’s own documentation makes this distinction and notes that pooled staking is provided by third parties rather than natively by the protocol.
How an AMM liquidity pool works
An automated market maker, or AMM, doesn’t wait for a buyer and seller to submit matching orders.
Instead, a trader swaps against assets already held by a smart contract. A mathematical rule determines how much of the output token the pool releases.
An order book works differently. It arranges bids and asks by price and matches them against incoming orders.
The best-known AMM model is the constant-product formula:
x × y = k
Where:
xis the reserve of token A;yis the reserve of token B;kis the pool’s invariant.
If a trader adds more of token B, the pool releases some token A. Token A becomes scarcer inside the pool, so its quoted price rises.
The pool doesn’t know the fair market price. It applies its formula to the reserves it has. Arbitrage traders compare that price with other markets and trade when the difference covers their costs. Those trades move the reserve ratio.
The Uniswap explanation of liquidity pools uses this constant-product model. Other protocols may use different invariants, weights, ranges, fee logic, or custom rules.
A swap example with real numbers
Take a small ETH/USDC pool so the arithmetic stays visible. It contains:
- 10 ETH
- 20,000 USDC
The initial pool price is 2,000 USDC per ETH. Its constant product is:
10 × 20,000 = 200,000
Now a trader swaps 2,000 USDC for ETH. Assume the pool charges a 0.30% fee.
The fee is:
2,000 × 0.30% = 6 USDC
That leaves an effective input of:
2,000 − 6 = 1,994 USDC
The AMM calculates the new ETH reserve:
200,000 ÷ (20,000 + 1,994) = 9.093389 ETH
The trader receives:
10 − 9.093389 = 0.906611 ETH
The average execution price is:
2,000 ÷ 0.906611 = 2,206.02 USDC per ETH
The trader pays an average of 2,206.02 USDC per ETH even though the pool started at 2,000. The order pushes up its own average price as it changes the reserves. That’s price impact. The full 2,000 USDC enters the pool, including the 6 USDC fee, so the pool ends with approximately:
- 9.093389 ETH
- 22,000 USDC
What changes when 2,000 USDC enters the pool
The AMM releases ETH according to its reserve formula. A 0.30% fee leaves 1,994 USDC as the effective swap input.
Fee: 2,000 × 0.30% = 6 USDC
Effective input: 2,000 − 6 = 1,994 USDC
New ETH reserve: 200,000 ÷ 21,994 = 9.093389 ETH
Simplified constant-product example. It excludes network costs, routing across other pools, MEV, and protocol-specific fee deductions.
A pool can’t offer the same price for every trade size. A smaller swap would move these reserves less. A larger one would receive a worse average price. With deeper liquidity, the same 2,000 USDC order would have less price impact.
Where liquidity-provider returns come from
I separate LP returns into three buckets. Mixing them together makes an APR look more stable than it is.
Trading fees.
Traders pay a fee when they swap. The protocol distributes some or all of that fee to eligible liquidity providers according to its rules.
Suppose a pool processes $5 million of daily volume, charges 0.30%, and has no protocol deduction in this simplified example:
$5,000,000 × 0.30% = $15,000 in daily fees
If my position represents 2% of the liquidity eligible to earn those fees throughout the day:
$15,000 × 2% = $300
That’s gross fee income, not net profit. My share may change, my position may move out of range, volume may fall, and the assets may move against the position.
Borrower interest.
In a lending pool, borrowers pay interest to access supplied assets. The rate normally changes with utilization.
When more of an asset is borrowed, the supply rate may rise to attract deposits and encourage repayment. When much of the pool sits unused, the rate may fall. Aave describes this utilization-based mechanism in its V3 documentation.
Withdrawal also depends on available liquidity. A supplier can’t assume that every deposited token is immediately available if much of the pool is currently borrowed.
Token incentives.
Protocols sometimes distribute governance or reward tokens to attract liquidity.
I treat this as a separate return because it has a separate source. Swap fees come from trading activity. Interest comes from borrowers. Token incentives often come from emissions.
A high incentive APR can fall for three reasons at once:
- more capital enters and divides the rewards among more participants;
- the emission schedule changes;
- the reward token loses value.
When most of the displayed yield comes from incentives rather than economic activity, I don’t project it far into the future.
What an LP token actually represents
Some protocols issue fungible LP tokens that represent a proportional claim on pool assets. Lending protocols may issue receipt tokens, such as Aave’s aTokens.
Concentrated-liquidity positions can work differently. The position has its own range, fee history, and asset composition, so it may be represented by an NFT or tracked through another position-management system.
An LP token doesn’t automatically provide governance rights either. Governance usually depends on a separate governance token and the protocol’s voting rules.
Before depositing, I check what the position token represents:
- Which assets can it redeem?
- Does it include accrued fees?
- Can it be transferred or used as collateral?
- Is redemption always available?
- Does another protocol gain control if I stake the position token elsewhere?
If I deposit the LP token into a yield farm, I’ve added another smart contract and another place where the position can fail.
Impermanent loss with a worked example
Impermanent loss is the difference between:
- the value of an AMM liquidity position; and
- the value of simply holding the assets originally deposited.
It is a comparison, not a separate fee charged by the protocol.
Return to the pool with 10 ETH and 20,000 USDC. The position starts at $40,000 when ETH is worth $2,000.
Now assume ETH rises to $4,000 elsewhere. Arbitrage traders buy ETH from the cheaper pool and add USDC until its reserve ratio reflects the new market price.
Ignoring fees for this calculation, the constant-product pool settles near:
- 7.0711 ETH
- 28,284.27 USDC
The LP position is worth:
7.0711 × $4,000 + $28,284.27 = $56,568.54
If the original assets had remained in the wallet:
10 × $4,000 + $20,000 = $60,000
The difference is:
$56,568.54 − $60,000 = −$3,431.46
Relative to holding, that is approximately −5.72% before earned fees.
ETH doubles: LP position versus holding
Both positions start with the same assets. The comparison isolates the effect of AMM rebalancing and excludes fees.
Keep the assets
Remain in the AMM pool
Full-range 50/50 constant-product example. Concentrated, weighted, stable-swap, and lending pools behave differently.
For a full-range 50/50 constant-product pool, the standard formula is:
Impermanent loss = 2 × √r ÷ (1 + r) − 1
Here, r is the new price divided by the original price.
| Price change | LP underperformance versus holding |
|---|---|
| 1.25× | −0.62% |
| 1.50× | −2.02% |
| 2.00× | −5.72% |
| 3.00× | −13.40% |
| 5.00× | −25.46% |
Don’t carry this formula over to concentrated-liquidity, weighted, stable-swap, or lending pools. Each design creates a different exposure.
The word “impermanent” also causes confusion. The difference may shrink if the relative price returns. But if I withdraw while it exists, I realize the result. Fees may offset it, but they don’t erase it by definition.
The main types of swap pools
Full-range constant-product pools. Liquidity is available across a very wide range of prices. The model is simple and requires little maintenance, but much of the capital may sit far from the current market price.
Concentrated-liquidity pools. The LP selects a price range. Capital inside that range can earn more fees per dollar because it is concentrated near the market.
But the position stops earning swap fees when price moves outside its active range. It can also become entirely composed of one token. Concentrated liquidity isn’t automatically a higher-return version of a full-range pool. It exchanges capital efficiency for range and management risk.
Stable-swap pools. These pools are designed for assets expected to trade near one another, such as two dollar-linked stablecoins or closely related forms of the same asset.
Their pricing curve can support lower price impact near the target relationship. The main danger is a depeg. A pool may accumulate the weaker asset while arbitrage traders remove the stronger one.
Weighted and multi-asset pools. These pools can hold more than two assets or use weights other than 50/50.
Weights shape how the pool rebalances and how much exposure the LP has to each asset. They don’t remove token risk or guarantee diversification.
Risks I check before providing liquidity
The assets and the contract
The pool contract can work exactly as designed while one token collapses. A high yield doesn’t compensate for an asset that can’t recover or be redeemed.
I verify token contract addresses, issuer structure, redemption mechanics, supply controls, and liquidity outside the pool.
An audit reduces uncertainty. It doesn’t prove that a contract is safe.
I check whether the contracts are upgradeable, who controls upgrades, whether there is a timelock, whether an emergency pause exists, and how much value the same code has handled over time.
Execution and range risk
Low liquidity makes swaps easier to move. It can expose traders to large price impact and create opportunities for sandwich attacks or other forms of transaction ordering.
LPs may receive fees from this volume, but harmful execution doesn’t create a healthy market by itself.
Concentrated liquidity earns fees only while the market is inside the chosen range. A narrow range can look productive during a backtest and then stop earning after one sharp move.
The position may require rebalancing, new network fees, and a decision about the token accumulated on the losing side of the range.
Lending and oracle risk
In lending pools, incorrect or manipulated prices can trigger bad liquidations or leave the protocol with debt that collateral no longer covers.
I want to know which oracle the protocol uses, how it handles stale prices, and what happens when liquidators can’t act fast enough. I also check how much of the supplied asset is already borrowed. A high utilization rate can raise interest, but it can also make a quick withdrawal harder.
Governance, network and exit risk
A protocol can reduce emissions or change fee distribution. A governance vote can alter pool economics. Large token holders, delegates, or admin keys may have more practical control than the word “decentralized” suggests.
The same protocol on another chain doesn’t have the same risk profile. Bridges, sequencers, validators, RPC infrastructure, and network congestion can all affect access to the position.
AMM liquidity is often redeemable through the contract, but this still depends on the contract functioning and the underlying assets remaining transferable.
Lending pools also need enough unborrowed liquidity. Staked or farmed LP positions may have an extra withdrawal step, delay, lock, or third-party dependency.
How I evaluate a liquidity pool
I use the same order every time.
- Identify the exact mechanism. AMM, lending, stable-swap, concentrated liquidity, or something else.
- Find the source of return. Fees, borrower interest, token emissions, or a mixture.
- Verify the assets. Contract addresses, issuer, redemption rights, market liquidity, and price dependencies.
- Read the fee rules. Fee tier, protocol share, active-range requirements, and collection process.
- Compare volume with liquidity. TVL alone doesn’t generate fees. Volume without enough depth can produce poor execution.
- Stress the asset relationship. I model a depeg and price moves of 1.5×, 2×, and 3×.
- Inspect control points. Admin keys, upgrades, pause rights, oracle design, governance, and bridge dependencies.
- Check exit conditions. Available liquidity, lockups, withdrawal delays, network costs, and what token I will receive.
- Separate gross yield from net result. I include fees earned, token incentives, impermanent loss, gas, and realized asset P&L.
- Reduce the first deposit. A small transaction tests the wallet, network, contract, accounting, and withdrawal path.
I don’t rely on the displayed APR to answer any of these questions.
What the APR doesn’t tell me
A liquidity pool isn’t a savings account with a variable interest rate. It does a specific job, and the people funding it take the risks attached to that job.
APR won’t tell me what token I’ll hold after a large price move. It won’t tell me whether a lending pool has enough free liquidity for a withdrawal. And it won’t tell me how much of the return comes from fees rather than token emissions.
If I can’t explain the source of the return and the exit path in plain words, I leave the pool alone.
