Add Liquidity to Uniswap
Providing liquidity on Uniswap is a trade, not a savings account. You are selling volatility: you collect fees continuously and you take a loss relative to simply holding whenever the price moves away from where you deposited.
Since v3 introduced concentrated liquidity, that trade has been sharpened. You choose a price range, and your capital only earns fees while the price is inside it. A tight range multiplies your fee rate and multiplies your exposure to being pushed out of range; a wide range approaches the old passive behaviour with correspondingly thinner returns.
Uniswap v4 keeps concentrated liquidity and adds hooks and a singleton architecture, which changes the gas profile and opens the door to pools with dynamic fees. This guide covers both, because in mid-2026 plenty of the deepest pools for a given pair still sit on v3.
What you'll need (prerequisites)
- Self-custodial wallet (MetaMask, Rabby, etc.)
- ETH or native gas token
- Tokens to add liquidity with
- Familiarity with transaction approvals
Ranges, fee tiers and impermanent loss
A v3 or v4 position is defined by a pair, a fee tier, and a lower and upper price bound. While the market price sits between the bounds, your capital is active and earning a share of the pool's swap fees proportional to your share of the liquidity in that price region. When the price leaves the range, your position converts entirely into the less valuable of the two assets and stops earning anything.
Impermanent loss is the gap between the value of your position and the value of simply having held the two tokens. It grows with price divergence and it is not impermanent unless the price comes back. Concentration amplifies it: a narrow range around the current price earns far more fees per dollar and converts far faster when the price moves. The break-even question is always the same — do the fees earned while in range exceed the divergence loss?
Fee tier choice follows the pair's volatility. Correlated pairs — stablecoin against stablecoin, or a liquid staking token against its underlying — trade at the lowest tiers, because divergence is small and fee income must come from volume. Volatile and long-tail pairs need higher tiers to compensate for the divergence risk. In v4, a hook may implement a dynamic fee that adjusts with volatility instead of a fixed tier, so read the pool's parameters rather than assuming.
One 2026-specific note: under the UNIfication programme, Uniswap governance activated protocol fees, which take a cut of the swap fee stream that would otherwise go entirely to liquidity providers. Protocol fees were switched on for v2 and v3 on Ethereum mainnet, and a governance vote on extending them to a portion of v4 pools was scheduled for late July 2026. Check the current status before modelling your fee take.
Recommended for this tutorial
Tools and accounts referenced in the steps below:
Step-by-step
-
Step 1: Choose the pair and check that the volume is real
Fee income is a function of volume through your range, not of total value locked. A pool with a large TVL and little turnover pays almost nothing. Look at the ratio of daily volume to liquidity, and look at whether that volume is consistent or a single spike. If you cannot find sustained volume, providing liquidity is just taking directional risk for free.
-
Step 2: Pick the version and the fee tier
Find where the depth actually is for your pair — for many pairs in mid-2026 that is still a v3 pool. Then choose the fee tier that matches the pair's behaviour: the lowest tiers for correlated assets, higher tiers for volatile ones. If the pool is a v4 hook pool with a dynamic fee, read what the hook does before committing capital to it.
-
Step 3: Decide the range before you open the interface
Work out, from the pair's realised volatility, how far the price plausibly travels over the period you intend to hold. Set the bounds so the price stays inside for most of that period. A range you have to rebalance weekly will bleed you in gas and in realised divergence loss every time you reset it. Full-range is always available and is the correct choice when you do not have a view.
-
Step 4: Connect, and prepare both tokens plus gas
Reach the interface from your own bookmark, connect the wallet, and confirm the network. A position needs both tokens in a ratio determined by your chosen range relative to the current price — a range entirely above the current price is funded in one token only, entirely below in the other. The interface computes the split; make sure you hold enough of each and a gas buffer on top.
-
Step 5: Approve the tokens, preferring Permit2
Both tokens need allowances for the position manager. Use Permit2 signatures where offered — scoped and time-limited beats a standing unlimited approval. Otherwise approve the amounts you are depositing.
-
Step 6: Mint the position and check what you received
Submit the transaction. You receive an NFT representing the position, not a fungible LP token, which means the position cannot be split or partially transferred like a v2 LP token. Confirm on the explorer that both token amounts left your wallet as expected and that the NFT arrived.
-
Step 7: Monitor in-range time, and collect fees deliberately
The metric that matters is the proportion of time the price spends inside your range. Fees accrue as a separate claimable balance and do not auto-compound; you must collect and, if you want, redeposit. On mainnet, collecting small amounts frequently is a net loss after gas — batch it.
-
Step 8: Rebalance or exit with the arithmetic in front of you
When the price leaves your range you have three choices: wait for it to return, close and reopen around the new price, or exit entirely. Rebalancing crystallises the divergence loss and costs gas both ways, so it only makes sense if the expected fees in the new range clearly exceed both. When you exit, withdraw liquidity, collect outstanding fees, burn the position, and save the transaction hashes.
The economics you are underwriting
Your revenue is your pro-rata share of swap fees generated while the price is inside your range. Your costs are gas to mint, collect, rebalance and exit; impermanent loss relative to holding; and any protocol fee taken from the swap fee stream. On Ethereum mainnet the gas component alone rules out small positions — a full lifecycle is easily five transactions. Use an L2 deployment for anything modest.
Uniswap v4's singleton and flash accounting make routing cheaper, which helps volume and therefore fee income, but they do not change the fundamental trade. Neither do hooks: a dynamic fee hook can raise the fee during volatility, which partially offsets divergence loss, but it does not eliminate it.
Model it honestly before depositing: estimate the fee APR from recent volume through your intended range, then estimate the divergence loss if the price moves by one standard deviation of its recent behaviour. If those two numbers are close, you are being paid nothing to take real risk.
Security pitfalls
- Verify both token contracts. Pairing against a lookalike token is an easy way to deposit into a pool nobody trades.
- Understand the hook before funding a v4 hook pool. Hooks are arbitrary code in the swap and liquidity path. Unaudited hook, unaudited risk.
- Do not chase incentive APRs without checking the underlying volume. Emissions end; divergence loss does not.
- Your position is an NFT. It can be transferred, and it can be stolen if someone gets a signature from you. Treat approvals on the position manager with the same care as token allowances.
- Bookmark the interface and revoke stale approvals — see revoking token approvals.
- Beware very tight ranges on volatile pairs. They look spectacular in a backtest and are usually out of range within hours in practice.
- Keep records per position. Deposits, fee collections and withdrawals are separate reportable events in most jurisdictions.
Troubleshooting
- Mint transaction reverted. Typically a missing allowance on one of the two tokens, or a range whose bounds got crossed between quoting and execution. Re-check both approvals and retry.
- Position shows zero fees. Either the price has been outside your range, or the pool has no meaningful volume. Check the in-range indicator first.
- Position converted entirely into one token. That is the expected behaviour when the price exits the range — it is not a bug. Decide whether to wait, rebalance or exit.
- Cannot find the position after minting. Wrong chain or wrong interface version. Uniswap positions are per chain and per protocol version; switch the network selector.
- Collect returns less than expected. Fees accrue only while in range, and a protocol fee may be taken from the pool's fee stream on some deployments under UNIfication.
- Gas costs more than a week of fees. The position is too small for that chain. Move to an L2 or widen the range so you rebalance far less often.
- Stuck pending transaction. Replace at the same nonce with a higher fee, or cancel via a zero-value self-transfer at that nonce.
FAQ
Is providing liquidity on Uniswap profitable?
Only when fees earned while the price is inside your range exceed the divergence loss you take relative to holding. That depends on real volume through your range, the fee tier, how tight your range is and how volatile the pair is. Many pools with large TVL and little turnover are not profitable to provide into at any range width.
What is impermanent loss in practice?
It is the shortfall between your position's value and the value of simply having held the two tokens. It grows as the price diverges from where you deposited, and concentrated positions amplify it because they convert into the weaker asset faster. It only becomes permanent when you withdraw at the diverged price — but waiting for a reversion is a directional bet, not a fix.
Should I use v3 or v4 pools?
Go where the depth and the volume are for your pair — in mid-2026 that is frequently still a v3 pool, even though v4 is live on more than fifteen networks. v4 offers cheaper routing through its singleton and flash accounting, and hooks that can implement dynamic fees, but a v4 hook pool is only worth using if you understand what the hook does.
How wide should my range be?
Wide enough that the price stays inside it for most of your intended holding period. Ranges that require frequent rebalancing bleed gas and crystallise divergence loss on every reset. If you have no view on the price, full range is the honest choice and behaves like classic pooled liquidity.
Do fees compound automatically?
No. Uniswap fees accrue as a separate claimable balance attached to the position. You must send a collect transaction, and redepositing them is a further transaction. On Ethereum mainnet, collecting small balances frequently costs more in gas than it recovers — batch collections instead.