Uniswap v4 went live on 31 January. Hooks are no longer a whitepaper sketch. You can attach code around initialize, swap, add or remove liquidity, and donate, and a pile of teams already have. What has not changed is the widget people paste a pool into before they LP: “impermanent loss since deposit.”
I have been running that number for years on v2 and v3 and treating it as the cost of providing liquidity. It is not. It compares you to a static bag. The structural tax LPs pay every block is something else. Milionis, Moallemi, Roughgarden, and Zhang named it in 2022: loss-versus-rebalancing. LVR.
v4 makes the mix-up worse, not better. A hooked pool is not a constant-product curve with a fee glued on. If your dashboard still assumes that, it is not approximating your loss. It is inventing a different position.
What “impermanent loss” actually measures
Classic IL — people also call it divergence loss — is this: take the tokens you deposited on day one, leave them in a wallet, mark that bag to market, and subtract the current value of the LP position. If ETH ripped and you wish you had just held it, that gap is IL.
That comparison is not nothing. It answers “did I underperform HODL.” It does not answer “did providing liquidity lose money to informed flow.”
The LVR paper is blunt about why the HODL benchmark is a bad loss metric once you leave a one-period model. It does not add up over time. You can show IL on Monday and IL on Tuesday and zero IL across the two days if price came back. The sign itself depends on where you planted the start date. Analysts have been arguing about “is IL even real if the price reverts” for as long as Uniswap has existed. That argument is about the benchmark, not about whether arb extracted value.
A one-shot IL number also dumps market risk and microstructure into the same pile. The pool is long ETH. ETH went up. The position looks fine, or it looks terrible, mostly because ETH moved. That is beta. It is not the cost of being the stale quote.
What LVR actually measures
LVR compares the LP to a different strategy: hold the same risky inventory the AMM holds, but trade that inventory on an infinitely deep CEX at the no-arbitrage price. Same delta. No stale AMM quotes. The gap between that rebalancing book and the AMM book is what the arb took from you.
That is the first swap of the block, every block the external price moved and the pool did not. The builder, or the searcher who paid the builder, sees Binance (or the other DEX, or the mempool) and the pool. They buy the cheap side. They leave the pool at the new price. You sold low or you bought high. The fee on that swap, if there is one, is a rebate against a cost that was going to happen anyway.
Milionis et al. give the cost a closed form. In their continuous-time model it depends on volatility and on how much marginal liquidity is sitting at the current price — not on how clever the curve looks in a screenshot. They match it empirically on Uniswap v2 WETH–USDC. The leftover after you subtract the rebalancing strategy is fees minus that arb tax. That leftover is the thing an LP is actually in the business of earning.
Two consequences I wish I had internalized in 2022.
Fees can hide LVR. A pool that “prints” on a busy week can still be leaking the rebalancing gap every time the CEX jumps between blocks. The fee line and the LVR line are not the same series.
A round-trip on the HODL book can look like IL went to zero while LVR kept accruing the whole way. Price came home. The arb still got paid on the way out and on the way back.
If you only have an IL widget, you are watching the mutual-fund half of the position and calling it market making.
Why the widget lies harder on a hooked pool
v2 IL is a function of the price ratio and xy = k. v3 IL is that plus the range you picked. Both assume the pool is a known curve that does not change its mind mid-swap.
A v4 hook is allowed to change its mind.
Dynamic fees. A beforeSwap that restates the amount in or out. A curve that is not the singleton’s default concentrated-liquidity math. Inventory the hook yanks into a vault and drip-feeds back. A donation. A custom accounting token. Any of those and the position you think you hold is not the position the IL formula was written for.
The failure is not “the dashboard is a bit stale.” The payoff can stop being the convex (or concave) function those calculators assume. Path matters. Order of swaps in the block matters. Whether the hook ate part of the trade as BeforeSwapDelta matters. You can print a number that looks like 4.2% IL and have no idea whether you are looking at delta, at LVR, at a hook fee, or at the hook silently moving reserves off the curve.
I am not saying every hook is a scam. I am saying the moment the pool is no longer “Uniswap math plus a fee tier,” a v2/v3 IL dashboard is answering a question about a pool that does not exist.
If you want a number on a hooked pool, you have to mark the actual tokens the hook left you with, against a rebalancing book that matches that inventory, at a price you take from somewhere else. That is LVR-shaped work. It is not a URL with a slider.
What an “LVR-minimizing hook” actually does
The mechanism people mean, when they say that phrase, is not “charge a higher fee.” It is a specific idea from Diamond, written up as a v4 hook by Conor McMenamin (The-CTra1n) on ethresear.ch on 16 June 2023, with Uniswap Foundation grant funding. Arrakis published a proof-of-concept the following October. A follow-up on 8 February 2024 — chris0205.eth and sm-stack — simulated a different way to recycle the retained tokens.
I am going to describe the hook McMenamin actually specified, not the marketing version.
Treat the first swap of the block as the LVR swap. Everyone already knows the builder will arb the pool to the external price before they do anything else, or they are leaving money on the table. That swap is not “flow.” It is the stale-quote tax. Later swaps in the same block are a different object.
Do not let the arb take the whole implied trade. There is a rebate function β, from the gap since the last swap into [0, 1], strictly decreasing, zero after some horizon Z. The first swap executes only 1 − β of the size the producer asked for. Then the hook still moves the pool price to the price that full swap would have implied, by pulling the leftover tokens into a vault. The producer got the price they needed. They did not get the full inventory dump. The difference is discounted arb, sitting in the vault for the pool.
Force the rest of the block to come back. A hedger contract holds collateral from the producer. Later swaps only clear if they can also clear against that hedge book. By the end of the block the producer is supposed to have returned the pool to the post-swap_1 price. If they have not, the leftover hedge tokens rebalance it when the pool is next touched.
McMenamin’s own summary is the line I keep: an ideal version lets the producer do whatever they want in the block and then repay β of the implied start-to-end-of-block swap. That implied swap is the true LVR. End-of-block price is the no-arb price versus external markets, or the producer ignored a profitable arb. The hook is a roundabout way to get that repayment onchain, using beforeSwap / afterSwap, because v4 will not let you rewrite the builder’s whole auction.
Put the vault back slowly. Diamond’s paper wanted a censorship-resistant auction to convert vault tokens so you can restock the pool without creating a giant arb in the next block. McMenamin’s 2023 post skips the auction and just re-adds a slice of the vault each time the pool is first touched in a block. He calls it low-impact re-add. The simulations say you want that slice small.
The numbers in that post, because people quote them without the setup: $300M ETH/USDC, start $1844, 5% daily vol, 180 days, 1,000 runs, no-fee Uni v2-style pool. A Diamond-protected pool versus the same pool unprotected returned about 1.058×. For a 50/50 constant product the LVR paper’s instantaneous cost is σ²/8 of pool value; at 5% daily vol that is 3.125 bps/day, and 1 / (1 − 0.0003125)^180 ≈ 1.05787. Call it $17M over a half year if you could keep 100% of LVR. You cannot. At β = 0.75 the relative return in the same sim is 1.0431. Low-impact re-add of 1%, 5%, and 12.5% of the vault each block came in at 1.0456, 1.0436, and 1.0335. One percent beat Diamond’s “perfect auction” conversion in that particular sim because on large moves, converting the vault is worse than HODLing a bit of it. Re-add less and you are closer to HODL. Re-add more and you recreate next-block arb.
The February 2024 follow-up compared that drip to what Diamond actually wrote down as per-block conversion versus futures. First swap is still exclusive, collateralized arb; price jumps to market; a share of the arb sits in the vault. Then, every block, you swap half the vault at the committed price and write a futures to sell that half back at the same price — you are lending the tokens to the pool and settling every τ blocks. Periodic conversion is the coarser cousin: auction half the vault every τ blocks and skip the futures.
Their result, in one sentence: per-block conversion plus futures looks better in sideways markets and better for slippage, because the vault comes back every block. Low-impact looks better on a strong trend, because the vault is just sitting there. That is a design choice about what you think ETH is going to do, not a free lunch.
None of this is “the hook deletes LVR.” β is a split with the person who already had the right to take it. You are buying some of the tax back by making the first-of-block arb more annoying to express. The open question McMenamin left sitting there is the obvious one: if the pool keeps β of LVR, can it safely show more than 1 − β of the liquidity? I have not seen a clean answer.
One failure mode that is in the original post and easy to miss: if the builder does not put their own arb first, the first user swap of the block is treated as swap_1. That user just became the LVR swap. The hook cannot see “this was a retail market order.” It can see “this is the first touch.” Latency helps here — Dan Robinson’s point, which McMenamin flags — because a faster pool is a smaller stale quote. McAMMs try to get at the same first-transaction auction. Different wrapper, same tax.
JIT is not LVR in a costume
Just-in-time liquidity is a different animal. Xin Wan and Austin Adams wrote it up for Uniswap Labs: a searcher mints a tight v3 (now v4) position immediately before a large swap and burns it after. They take a cut of the fee. The taker often gets a better fill. The passive LP gets diluted for the one trade that would have paid them.
That is active-LP toxicity. It is a fight over who is on the book when the fat order arrives. It is not the stale-quote tax versus Binance.
Wan and Adams also showed the folklore was wrong on size. From v3’s launch on 5 May 2021 through 18 July 2022 they found 8,287 JIT attempts, more than 95% of the liquidity from one address, about $2bn of JIT notional against more than $600bn of v3 volume — call it 0.3% of liquidity demand — this after a Twitter poll where the popular guess was “over 40%.” Xiong, Wang, Knottenbelt, and Huth’s 2023 measurement is harsher on passive LPs (about 85% average share dilution on the trades that do get JIT’d) and still agrees on the shape: a whales’ game, a handful of bots, better execution for the taker.
McMenamin’s comment on his own thread is the one I agree with. Getting rid of JIT — “getting rid of toxicity from active LPs” — pushes the AMM toward a batch auction. That is a market-quality choice. It is not how you minimize LVR. An LVR rebate does not stop someone minting a tick-wide position around your swap. A JIT lockout does not stop the builder from arb’ing a stale reserve at the top of the block.
If a hook claims to “protect LPs” and the only thing it does is make mint-and-burn in the same block harder, read the sentence again. They solved a fee-sharing problem. They did not touch the tax.
What I look at now
I do not paste a hooked pool into an IL dashboard and call it due diligence.
I want three separate pictures.
Delta. What inventory does this position have, right now, after the hook has done its accounting — not after someone assumed xy = k. That is the rebalancing book. If I cannot reconstruct it from events, I do not understand the hook.
LVR. Mark that book against an external price on a short clock. In the original paper, rebalancing every minute and every hour left almost the same residual on v2 ETH–USDC. Day-level IL is a different quantity. If the hook retains arb into a vault, the vault is part of the LP’s book whether the dashboard draws it or not.
Who is allowed to be first. If the hook has a β, a vault, a hedger, a “builder must commit the end-of-block price,” that is an LVR design. If it has a same-block mint/burn lock, that is a JIT design. If it has a dynamic fee that widens when volatility jumps, that is a third thing — it can reduce LVR at the cost of killing uninformed flow. Do not let the README collapse those into “we protect LPs.”
v4 made it cheap to ship all three as one contract. That is why a number computed for a 2021 v3 ETH–USDC range position is not a number about the pool you are looking at in February 2025.
The dashboard is not going to catch up this month. The papers already did the work. Use them.
References
- Jason Milionis, Ciamac C. Moallemi, Tim Roughgarden, Anthony Lee Zhang, “Automated Market Making and Loss-Versus-Rebalancing,” arXiv:2208.06046. Initial version 31 July 2022. https://arxiv.org/abs/2208.06046
- Conor McMenamin, Vanesa Daza, Bruno Mazorra, “Diamonds are Forever, Loss-Versus-Rebalancing is Not” (IACR ePrint 2022/1420) / “An Automated Market Maker Minimizing Loss-Versus-Rebalancing,” arXiv:2210.10601. https://arxiv.org/abs/2210.10601
- The-CTra1n (Conor McMenamin), “LVR-minimization in Uniswap V4,” ethresear.ch, 16 June 2023. Uniswap Foundation grant. First-of-block swap, β, vault, hedger, low-impact re-add, simulations. https://ethresear.ch/t/lvr-minimization-in-uniswap-v4/15900
- Arrakis Finance, “Diamond: A Uniswap V4 Hook minimizing LVR,” 11 October 2023. Proof of concept with McMenamin and the Uniswap Foundation. https://arrakis.finance/blog/diamond-a-uniswap-v4-hook-minimizing-lvr
- chris0205.eth and sm-stack, “Uniswap V4 hook: LVR-minimization with Per-block conversion vs. Futures contracts,” ethresear.ch, 8 February 2024. https://ethresear.ch/t/uniswap-v4-hook-lvr-minimization-with-per-block-conversion-vs-futures-contracts/18610
- Uniswap Labs, “Uniswap v4 is Here,” 31 January 2025. https://blog.uniswap.org/uniswap-v4-is-here
- Xin Wan and Austin Adams, “Just-In-Time Liquidity on the Uniswap Protocol,” Uniswap blog; SSRN, written 9 September 2022. https://blog.uniswap.org/jit-liquidity
- Xihan Xiong, Zhipeng Wang, William Knottenbelt, Michael Huth, “Demystifying Just-in-Time (JIT) Liquidity Attacks,” IACR ePrint 2023/973. https://eprint.iacr.org/2023/973