Leveraged tokens (LTs)
Between a coin and its perp position sits one piece of machinery. A leveraged token is the tokenized form of a perp position: a plain ERC-20 whose value — its NAV, or net asset value — is a live Lighter position's equity divided by the LT's supply. Put dollars in, get LT out at NAV; give LT back, get dollars out at NAV.
It exists so a coin's backing can be a token the contracts can hold, count and transfer, rather than an off-chain account balance they'd have to trust someone about.
Why not just hold a perp
A raw perp position has three properties that make it useless as a coin's treasury. It can be liquidated — one bad candle and the backing is gone permanently, in a single event. Its leverage drifts: a 5× long that gains becomes a 3× long, and one that loses becomes an 8× long, sliding toward liquidation exactly when you least want it to. And it isn't a token, so a contract can't hold a share of it.
An LT fixes all three. The keeper watches effective leverage and, when it drifts outside a band, adjusts notional to bring it back to target. The position is rebalanced rather than left to run into a liquidation price: it de-risks on the way down, cutting notional as the position moves against it, so it can ride through moves that would have closed out a static 5× long. And it's an ordinary ERC-20, so backing is just a balance.
That's the structural difference from opening the same trade yourself. A static 5× position has a fixed liquidation price sitting there waiting for it; a rebalanced one keeps stepping away from that price. Continuous rebalancing is the mechanism, which is why the keeper runs continuously rather than on a schedule — a large enough move arriving in a single gap outruns it.
The catalogue
Every combination of underlying and direction is its own LT: 15 underlyings, long or short, at a fixed 5× — 30 in all.
Each has its own vault, its own price oracle and its own margin. They do not pool risk. A 5× long on TSLA going to zero has no effect on a 3× short on gold.
Mint and redeem
The protocol mints LT when a coin harvests capital into its hedge and redeems it when a coin needs margin back or realizes a gain for a buyback. Both happen at the signed NAV.
Redemption is served from a cash buffer the vault keeps idle — bufferBps = 2000, so 20% of liabilities — which lets ordinary redeems settle instantly. A redeem larger than the buffer is queued rather than reverted: the keeper pulls margin back from Lighter and the claim settles when it lands, typically in minutes. fundHedge can never take idle cash below that floor.
This queue is invisible to you as a trader. It sits on the protocol's side of the wall — your sell hits the pool's WETH depth, which is exactly why the majority of a coin's capital stays in the pool.
Per-coin isolation
There's a subtle failure mode the design goes out of its way to avoid. If many coins shared one perp position per underlying, a coin could be dragged toward ruin by a stranger's bet, and a coin launching onto an already-crashed shared position would inherit someone else's near-death position on day one. That isn't the coin's own bet, and the whole premise here is that a coin is its own bet.
So live coins get their own isolated position where capacity allows. The isolation unit is a (sub-account, market) pair on Lighter, and Lighter caps sub-accounts per address, so it's a bounded pool of slots. A slot is allocated when a coin crosses the hedge floor and returns to free only on proof that its position is closed and its margin is back in its pool — no timeout and no death signal can free it. A dead coin can never squat a slot, and a fresh coin's capital can never land on a position that's still open. An unwind that stalls is marked STUCK, alerted loudly, and kept occupied rather than silently recycled.
LTVault handles mint/redeem at oracle NAV and publishes targetLeverageX and leverageBandBps for the keeper's rebalance band. LTFactory is the owner-gated registry that deploys a NAVOracle and LTVault per LT and exposes the isLt() gate the launcher checks. Slot allocation lives in keeper/hood10l/slot_pool.py as a FREE → LIVE → UNWINDING → FREE state machine.
