Skip to content

Bell in--:--:--

The problem: LVR at the bell

Start here · 02 / 19Preview · not deployed

The problem: LVR at the bell

Why LPs in Stock Token pools lose money at known timestamps, with the formula and a worked example.

LPs in Stock Token pools lose money at known timestamps. This page explains where the loss comes from, why the chain's ordering rule hands all of it to the fastest bot, and how large it is. The short version: the loss is scheduled, so it can be sold in advance.

Stock Token pools#

A Stock Token pool pairs a tokenized equity with a dollar token, for example $NVDA/USDG on Uniswap v4. The pool trades around the clock. The stock it tracks does not. The reference market, NYSE-calendar regular hours, opens at 09:30 ET and closes at 16:00 ET on trading days, and is closed on nights, weekends and holidays.

An AMM pool never moves its own price. It only moves when somebody trades against it. So whenever the reference price jumps, the pool keeps quoting the stale price until the first trade corrects it. Whoever makes that trade buys below fair value or sells above it, and the difference comes out of the LPs' position. This is loss-versus-rebalancing, or LVR.

The gap at the bell#

At 09:30 ET the stock opens at a new price. Overnight news, pre-market trading and the opening auction have all been absorbed into one number, and the pool is still at the old one. The first bot to trade pockets the gap.

Nothing about this is surprising. Everyone knows the minute it will happen. Everyone can see the size of the gap forming before the bell. The only open question is who gets to trade first.

A pure latency race#

Robinhood Chain orders transactions first come, first served, with ~100 ms blocks. There is no priority auction inside the block and no way for the pool to charge for position in the queue. Under that rule the first valid transaction wins the whole gap, and being first is a matter of network latency and nothing else.

The result is a race in which:

  • all the value goes to the fastest bot,
  • none of it goes to the LPs who supplied the stale quote,
  • the money spent on winning (colocation, infrastructure, spam) is pure waste from the pool's point of view.

LPs cannot defend themselves by being faster. Pulling liquidity before the bell and re-adding it after is the same race, run by the LP instead of the bot, and it leaves the pool empty exactly when traders want it.

Other scheduled moments#

The opening bell is the largest and most regular case. It is not the only one.

MomentWhy the pool is stale
Opening bellThe overnight move lands at once at 09:30 ET.
EarningsResults are released after the close, inside POST, at a time announced in advance.
Halt resumptionsTrading in the stock stops, news comes out, and the stock reopens at a new price.
Monday opensA whole weekend of news is priced in at the first bell of the week.

In every case the timestamp, or at least the trigger, is known before the move is tradable.

The formula#

For a full-range constant-product pool of value V, when the fair price moves by a ratio r (new price divided by old price), the arbitrage profit, which is the LPs' loss, is:

LVR = V · (√r − 1)² / 2

A short derivation. Let the pool hold x stock and y dollars with x · y = L², at price P = y / x. Then:

x = L / √P        y = L · √P        V = 2 · L · √P

The fair price jumps to r · P. The arbitrageur buys stock until the pool price reaches r · P:

stock taken out  = L / √P − L / √(r·P)  = (L / √P) · (1 − 1/√r)
dollars paid in  = L · √(r·P) − L · √P  = L · √P · (√r − 1)

Marking the stock at its new fair price r · P:

profit = r·P · (L / √P) · (1 − 1/√r) − L · √P · (√r − 1)
       = L · √P · (r − 2·√r + 1)
       = L · √P · (√r − 1)²
       = V · (√r − 1)² / 2

The same expression holds for a gap down. For small gaps, √r − 1 is about half the gap, so the loss grows with the square of the gap: a gap twice as large costs about four times as much.

Worked example#

Take a pool worth $4M and a +6% gap at the open. The numbers below are computed by the same code the landing page calculator uses.

  • Full-range liquidity: $1,748 goes to the first trader.
  • The same capital concentrated in a ±20% range provides about 10.4 times more liquidity at the current price, and LVR scales with liquidity. The loss is $18,141, roughly 10x the full-range figure.

Most real v4 liquidity is concentrated, so the second number is the relevant one. The table shows how it moves with the gap, for the same $4M pool.

Gap at the openFull-range LVR±20% concentrated LVRConcentrated, basis points of pool value
+1%$50$5161.3
+2%$198$2,0555.1
+4%$784$8,14120.4
+6%$1,748$18,14145.4
+10%$4,765$49,451123.6

These are losses per event, for one pool, before any swap fee the arbitrageur pays. A fee reduces the arbitrageur's profit and narrows the gaps worth trading, but it does not change who collects the rest. You can try other pool sizes, gaps and ranges in the LVR calculator on the landing page.

Scheduled, so it can be sold#

In crypto this leak is continuous and unpredictable. Prices move at any second, the pool is always slightly stale, and the right to correct it has to be sold continuously, which is what the am-AMM paper proposes (see Prior art and what is new).

For equities the leak is scheduled. The bell rings at the same time every trading day, earnings dates are published, and the exchange calendar is published well ahead. A loss that arrives on a schedule can be sold in advance, session by session, to whoever values it most, with the proceeds paid to the LPs who bear it.

That is the whole idea behind Regent. How Regent works describes the mechanism, and Sessions and the calendar describes the schedule it runs on.