Your exposure is the same on both versions. A band of plus or minus 5% on ETH against dollars behaves identically on Uniswap v3 and v4.
What changed is where the pool’s state lives, how tokens move during a transaction, and who is allowed to run code when a swap arrives.
The first two make trading and managing positions cheaper. The third is the part you need to inspect. By the end you should be able to judge a specific v4 pool and decide whether moving a v3 position there is worth the cost.
Key point: Read the hook before the yield. In v4 the hook is part of the pool’s identity, so two pools on the same pair with different hooks are different markets with different code paths and trust assumptions. Before you migrate, identify every callback the hook can run.
One contract instead of thousands
In v3, every pool is a separate contract, identified by its pair and fee tier[1]. Each one holds its own tokens, so a route through three pools moves tokens three times.
In v4, one contract, the PoolManager, holds every pool as internal state. A pool is identified by its two tokens, its fee, its tick spacing and its hook address[8]. Creating a pool becomes an entry in that contract rather than a new deployment, which makes launching a market much cheaper[8].
v4 also drops v3’s fixed fee tiers. A pool can set any fee from 0% to 100%, or let its hook set the fee dynamically[10].
The routing effect is direct. A three-hop swap in v3 moves tokens at every step. The same route in v4 updates internal balances and moves tokens once, at the end[8].
Why settling once is so much cheaper
Ethereum added a kind of storage that lasts only for one transaction and then clears itself[3]. v4 keeps its running tally there.
During a transaction the PoolManager records what each side owes. Before the transaction finishes, every one of those debts must be settled, or the whole thing reverts[2].
| What that buys | Why it matters |
|---|---|
| Lower gas on multi-hop and multi-pool operations | Intermediate token transfers disappear[8] |
| Composability | One contract can rebalance across several pools in one transaction, settling once |
| Internal balances | Frequent traders can hold token claims inside the PoolManager instead of moving tokens back and forth[5] |
Those internal claims use ERC-6909 — a lightweight standard for holding many token balances in one contract[5]. Your liquidity position is still an NFT, minted by the position manager, just as v3 positions were[13].
None of that changes the price a swap gets. The pricing rule and tick math are inherited from v3[2].
Hooks: the change that affects you
A hook is a contract attached to a pool when it is created. It can run at defined moments: when the pool is initialised, around each swap, around liquidity going in or out, and around donations[6]. Its permissions are encoded in its own address, so you can read what it is allowed to do without trusting anybody’s description[6]. Once the pool exists, its hook cannot be added, removed or swapped[6].
| What hooks make possible | What hooks also introduce |
|---|---|
| Fees that rise with volatility, charging arbitrage more when it takes most[9] | Code sitting in the swap path |
| Custom pricing rules that used to need a separate protocol | Conditions on withdrawal that did not exist in v3 |
| Limit orders and automatic range management inside the pool | Upgradeability, if the hook’s logic sits behind a proxy with an admin key |
| Fee routing to a treasury, insurance fund or reward programme | Behaviour under stress that may not have been tested at scale |
The first row on the left matters most to anyone supplying liquidity. A dynamic fee gives the pool a way to charge for loss-versus-rebalancing — the value arbitrageurs extract because the pool’s price lags the wider market[12][9]. See Loss-Versus-Rebalancing and Uniswap v4 Architecture and Hooks.
What did not change at all
| Your concern | v3 | v4 |
|---|---|---|
| The range maths | The shifted curve between your two bounds | Identical |
| Divergence | Full, amplified by how narrow your band is | Identical |
| Out of range | You convert and stop earning | Identical |
| How fees accrue | Pro rata to liquidity in range at each swap | Identical |
| Being picked off | Arbitrage against a stale quote | Identical, unless a hook prices it |
A band of plus or minus 5% behaves the same way on both. The reasons to prefer one are gas, where the volume goes, and whether a hook improves the fee side. The reasons to be careful about a specific v4 pool are mostly about its hook. Because the range maths is inherited, the Uniswap v3 liquidity calculator prices a v4 band exactly as it prices a v3 one.
If the range mechanics are new, start with Concentrated Liquidity Explained and Out-of-Range Liquidity.
The protocol fee is different on each side
One thing that does differ is how much of the swap fee reaches you. Uniswap governance switched on protocol fees in December 2025[10]. On v3, LPs now keep three-quarters of the fee in the 0.01% and 0.05% tiers and five-sixths in the 0.30% and 1% tiers[10].
On v4, protocol fees began in July 2026 on a subset of pools: those without hooks, pools launched through Uniswap’s auction hook, and aggregator hook pools[11]. For hookless pools, the protocol’s share follows a curve set by governance rather than a fixed fraction[11]. Pools with other hooks were left out of that vote[11].
So when you compare two pools, compare fee income net of the protocol fee on each. Governance can change these settings, so check the current values before you decide[10].
Checking a v4 pool before you supply
- Resolve the hook address from the pool key, and check whether it is verified and audited.
- Decode its permissions from that address. Specifically, can it act when liquidity is removed[6]?
- Check for a proxy. If the hook’s logic can be replaced, the rules can change after you deposit.
- Read the fee logic. If the fee moves, understand what sets it and how far it can go[9].
- Compare routed volume with the equivalent v3 pool. Architecture does not pay fees; volume does.
- Simulate the whole lifecycle on Tenderly or a fork: mint, swap through your range, collect, withdraw. Confirm the exit returns what you expect with the hook in place.
- Run the ordinary checks too, from How to Evaluate a Liquidity Pool. Contract risk and out-of-range risk apply to every version[4].
A migration decision, worked
You hold $50,000 in a v3 ETH and USDC band earning about $18 a day after the protocol fee. The equivalent v4 pool, with no hook, pays about $21 a day after its protocol fee for the same band, because routers now send it more volume.
| Value | |
|---|---|
| Extra income from moving | about $3 a day |
| Cost of moving: two transactions and a small swap | about $60 on a quiet day |
| Time to repay the move | about 20 days |
That is a reasonable trade if the extra volume is steady rather than a one-week spike. Now suppose the v4 pool has a hook that can change its fee. Add the time it takes to read and verify that hook, and ask for a longer track record before you trust the higher number.
Whether to migrate
Migration has real costs: two gas payments, locking in your current composition, and price impact (the cost of your own swap moving the price) if the ratio has to be adjusted. Compare that against the extra fee income you expect, and set a payback period you would actually accept.
One operational note for anyone running many positions. In v3 every pool is its own address, so tooling tracks a set of contracts. In v4 there is one address and pools are identified by key. That simplifies indexing, but your monitoring has to resolve the hook for each pool rather than assuming pools on the same pair behave alike.
A sensible default: migrate when the destination’s volume per unit of liquidity clearly beats the source, and the hook is either absent or immutable and audited. Otherwise let the market decide where the flow settles, and follow it with new money rather than churning what you have.
The architecture is cheaper to use, and it allows things v3 could not do. Returns are still decided by volume, volatility, who else is in your band, and how actively the position is managed[7].
Where to go next
The exposure both versions share, impermanent loss (how far a range position falls behind holding the same tokens), is derived in The Impermanent Loss Formula, and the fee decision is in Uniswap Fee Tiers Explained. For how all three generations sit side by side, including v2, read Uniswap Liquidity Pools and the earlier comparison in Uniswap v2 vs v3.
References
- Uniswap v3 Core (Adams et al., 2021)
- Uniswap v4 Core (Adams et al., 2024)
- EIP-1153: Transient storage opcodes (Ethereum Improvement Proposals)
- What are the risks when providing liquidity? (Uniswap Labs)
- ERC-6909: Minimal Multi-Token Interface (Ethereum Improvement Proposals)
- Uniswap v4 Hooks (Uniswap Developer Documentation)
- Risks and Returns of Uniswap V3 Liquidity Providers (Heimbach et al., 2022)
- PoolManager (Uniswap Developer Documentation)
- Dynamic Fees (Uniswap Developer Documentation)
- Fees (Uniswap Developer Documentation)
- Activate v4 Protocol Fees, Part 1/2 (Uniswap Governance Proposal 100, 2026)
- Automated Market Making and Loss-Versus-Rebalancing (Milionis et al., 2022)
- Position Manager (Uniswap Developer Documentation)
Frequently asked questions
What is the main difference between Uniswap v3 and v4?
v3 deploys one contract per pool; v4 holds every pool inside a single PoolManager contract and settles net balances at the end of a transaction using transient storage. v4 also lets each pool attach a hook contract that can run custom logic around swaps and liquidity changes, including setting a dynamic fee, and it drops v3's fixed fee tiers.
Does Uniswap v4 change impermanent loss?
No. Both versions use the same concentrated-liquidity range math, so a position with the same bounds carries the same divergence exposure. What v4 changes is the cost of interacting with the pool and the ability to price volatility through a dynamic fee, which affects net outcomes rather than the underlying exposure.
Are Uniswap v4 pools riskier than v3 pools?
They add one specific surface: the hook. A hook is code with permissions over swap and liquidity callbacks, so a v4 pool inherits the trust assumptions of its hook. A pool with no hook, or an immutable and audited hook, is comparable to v3; a pool whose hook is upgradeable and holds broad permissions is not.
Should an LP migrate positions from v3 to v4?
Only where the destination pool has the depth and routed volume to pay for the migration. Moving costs gas twice and locks in the current composition. Compare fee income net of each pool's protocol fee, and remember that liquidity depth on the specific pair, not the architecture, decides what you earn.
Continue in this track
This is guide 12 of 12 in Advanced.
Previous: ← PancakeSwap Liquidity Pools: Structure, Fees and Incentives
See the full track sequence, or browse all 59 guides.