Docs / Trading

Liquidation and the bust buffer(06)

Every position has a bust price, fixed when it opens. If the market reaches it, the position is liquidated and you lose your whole margin.

[ Fig. 1 ] BUST PRICE
d     = 1 / leverage − BUST_BUFFER        BUST_BUFFER = 0.0005  (5 bps)
long:  bust = entry × (1 − d)
short: bust = entry × (1 + d)

Without the buffer, the bust would sit exactly where your loss equals your margin. The 5 basis point buffer moves it slightly closer to your entry, so that a jump between two grid points does not leave the house with a loss larger than the margin.

Worked bust prices

ENTRY $80,000
LeverageDistance to bustLong bustShort bust
2x49.95 %$40,040$119,960
10x9.95 %$72,040$87,960
25x3.95 %$76,840$83,160
50x1.95 %$78,440$81,560
100x0.95 %$79,240$80,760

How a liquidation happens

  • liquidate() is permissionless. It reads the newest price in the market's price book, which must be at most 60 seconds old and newer than the position's open.
  • If that price is at or beyond your bust price, the position closes as a liquidation.
  • A close request whose fill price is at or beyond your bust price also settles as a liquidation.
  • Crossing the bust is final: you lose the full margin, even if a close an instant earlier would have returned a little.

The protocol's keeper checks every open position against the gateway price every 10 seconds. Only when one crosses does it post a price and liquidate, so the cost of liquidations grows with use, not with time.

Where the margin goes

A liquidation is settled like a losing close with loss = margin. If the queue is empty, a 2 % fee is charged and distributed and the house keeps the rest. If the queue is open, the whole margin flows to the front of the line first. Either way you mint paper on the full margin.

The liquidator receives nothing. The keeper that runs liquidations belongs to the protocol, so there is no bounty to race for.