Skip to content

Bell in--:--:--

Rent streaming and anti-JIT

Mechanism · 06 / 19Preview · not deployed

Rent streaming and anti-JIT

Upfront payment, per-second streaming through donate(), and the anti-JIT rule.

The rent is the winning bid of the seat auction, paid upfront by the regent and streamed to the pool's LPs while the session runs. This page covers the escrow, the stream, the protocol cut, the anti-JIT rule and what happens if the sequencer stops.

Upfront payment and escrow#

The winner pays before the session, not during it and not after it. The full amount of the winning bid is in escrow when the auction closes, at the latest 2 min before the session starts.

Of that escrow, 10% is the protocol cut. The remaining 90% is the session's rent and streams to LPs.

Paying upfront removes a whole category of problems. A regent who pays as it goes can stop paying, which means the protocol has to track debt, demand collateral, detect default and liquidate somebody at the worst possible moment. Here there is nothing to track. The money is already there. No credit, no default, no liquidation.

It also means a regent who does nothing harms nobody but itself. The rent streams whether or not the regent ever trades.

Per-second streaming#

The rent streams second by second for the whole session, through Uniswap v4 donate(). A donation in v4 is credited to the liquidity that is in range at that moment, in proportion to its size, the same way swap fees are. So rent goes to the LPs who are actually quoting at the current price, not to positions parked far from it.

Winning bidUSDG, paid upfrontRentStreamescrow90% to in-range LPsper second, via v4 donate()10% cutprotocol50% buy & burn30% stakers (USDG)20% treasury
The regent escrows 100% of the bid upfront. 90% streams to in-range LPs through donate(); 10% is the protocol cut.

The rate is constant over the session:

rentPerSecond = (winningBid × lpShare) / sessionDurationInSeconds

Here lpShare is 90%, and the duration is the real length of the session in seconds. A DAY shortened by a 13:00 early close, or a WEEKEND-type session stretched by a holiday, uses its actual length; see Sessions and the calendar. The accounting is per second. How often the planned contract settles the accrued amount into the pool is an implementation detail that is not fixed yet.

An illustrative example#

The figures in this section are illustrative. They are not a forecast of what any seat will sell for.

Suppose the OPEN seat of a pool sells for 2,000 USDG. OPEN runs from 09:30 to 10:00, which is 1,800 seconds.

ItemAmount (USDG)
Winning bid, escrowed upfront2,000.00
Protocol cut, 10%200.00
Rent to LPs, 90%1,800.00
Rent per second1.0000
An LP holding a tenth of in-range liquidity for the whole session receives180.00

An LP's share moves during the session. If the price leaves a position's range, that position stops receiving rent until the price comes back. If other LPs add in-range liquidity, everyone's share of the stream shrinks.

Known income and no promise#

LPs know their income before the session starts. When the auction closes, the bid is public, the session length is public, and so the rate per second for the whole pool is fixed and visible before the first second streams. An LP can look at that rate and decide whether to stay in range for the session.

That is a statement about one session whose auction has already closed. It is not a promise about any future session.

The protocol cut#

The protocol takes 10% of every winning bid. The cut is split three ways.

Share of the cutDestination
50%Buy and burn of $RGNT
30%$RGNT stakers, paid in USDG
20%Treasury
90% rent to in-range LPs10% cut = 50% burn / 30% stakers / 20% treasury
Of every winning bid: 90% rent to LPs, 10% protocol cut (50% buy and burn, 30% stakers in USDG, 20% treasury).

In the illustrative example above, the cut of 200.00 USDG would split into 100.00 for buy and burn, 60.00 for stakers and 40.00 for the treasury.

The $RGNT token is not live. There is no contract address, nothing to stake and nothing being burned. See The $RGNT token.

Anti-JIT#

Just-in-time (JIT) liquidity is liquidity that appears for a moment to capture a payment and leaves straight after. In ordinary pools it is used to take the fee from one large swap: add a big position just before the swap, collect most of the fee, remove the position just after.

A rent stream would be an easy target for the same trick. Someone could add a very large in-range position at a quiet moment, collect most of the stream for a few minutes, and leave before the price can move. They would carry almost no price risk and quote almost nothing to real traders, while diluting the LPs who stay through the bell and bear the risk the rent is meant to pay for.

The rule that prevents it: liquidity removed less than 30 min after being added forfeits its accrued rent back to the pool.

  • The forfeited rent is not taken by the protocol. It goes back to the pool and is shared among the LPs who remain.
  • Only the accrued rent is forfeited. The position's principal is untouched.
  • A position older than 30 min can leave at any time and keep everything it accrued.
  • In the preview simulator, adding to an existing position restarts its clock. This is preview behavior, not a fixed part of the design.

The planned implementation uses the hook's afterRemoveLiquidity callback with a return delta. When a position is removed, the SeatHook checks its age. If it is younger than 30 min, the hook uses the return delta to withhold the rent that position accrued, and that amount is returned to the pool. Doing it inside the hook means there is no separate claim step to bypass. See Architecture and contracts.

Sequencer downtime#

Rent pays for a session in which the regent can use the seat. If the sequencer is down, nobody can swap, and the seat is worth nothing for that time. The design handles this simply: rent that did not stream because of sequencer downtime is refunded to the regent pro rata.

In terms of the formula, the refund is the rate per second multiplied by the seconds of downtime, capped at the session. LPs are not paid for seconds in which the pool could not trade, and the regent is not charged for them. Other abnormal conditions, such as a trading halt in the stock, are covered in Edge cases and attack surface.

Summary#

QuestionAnswer
Who paysThe regent, in full, before the session
Who receivesIn-range LPs, 90% of the bid, per second
What the protocol takes10% of the bid
Can the regent defaultNo. There is no credit.
Can rent be zeroYes. An unsold seat pays no rent.
Can JIT liquidity skim itLiquidity younger than 30 min forfeits its accrued rent to the pool
What if the sequencer stopsUnstreamed rent is refunded pro rata