How Seiz3 works

A Morpho loan backed by tokenised NVDA goes past its limit. Instead of dumping the stock, the Seiz3 vault buys it, shorts the same amount on HyperCore so a price move can't hurt it, and sells it back through a Uniswap v4 hook.

1 · LTV and LLTV

Morpho Blue

LTV (loan-to-value) is where a loan stands now: debt ÷ (collateral × price). It rises when the borrower takes more, when interest accrues, or when the price falls.

LLTV (liquidation LTV) is the market's fixed limit. Once a loan's LTV is past it, anyone can liquidate it: repay some or all of the debt and take the collateral at a discount, the liquidator's bonus.

Liquidation price = debt ÷ (collateral × LLTV). On Morpho you can borrow right up to the LLTV, with no lower borrowing limit as on Aave, so interest alone can tip a full loan over. That's what the Try it page does.

Example · market C · live price
Collateral
10 NVDAx × $168.00 = $1,680.00
Max borrow at the 77% LLTV
$1,293.60
Borrowed
$1,150.00 → LTV 68.5%
Liquidatable if NVDA falls to
$149.35 (−11.1%)
Bad debt if NVDA falls to
$123.52 (−26.5%)
this loan 68.5%
safe · 0–77%liquidatable · 77%–93%bad debt · over 93%

Below $123.52 the stock is worth less than the debt plus the liquidator's 7.4% bonus. No liquidator can repay it all, and the lenders take the loss.

MarketLLTVBonusBad debt pastWho liquidates
Market A naive77.0%7.4%93.1% LTVDumps the stock into a thin pool at any price
Market B conservative38.5%15.0%87.0% LTVLow limit: loans rarely get near it
Market C seiz377.0%7.4%93.1% LTVThe Seiz3 vault: buys the stock and shorts it on HyperCore

Bonus is Morpho's liquidation incentive, set by the LLTV: min(15%, 1 ÷ (1 − 0.3 × (1 − LLTV)) − 1). A lower LLTV pays a bigger bonus and leaves more room before bad debt.

Bad debt past is the LTV where the collateral no longer covers the debt plus that bonus. The Seiz3 vault also refuses any liquidation with less than a … discount.

Why it matters after the bell: NYSE closes, but NVDAx keeps trading on-chain in thin pools. A weekend price gap pushes loans past the LLTV when nobody can sell the stock at a fair price. Market A's liquidator dumps it and creates bad debt. Seiz3 hedges the stock on HyperCore straight away and sells it slowly.

2 · Who holds the funds

Uniswap v4
Seiz3VaultRemoteholds the stock

Holds the seized NVDAx and the USDC. Its stock is never added to the pool as liquidity: it leaves the vault only at the moment it's sold.

Seiz3HookRemoteholds nothing

Holds no tokens, ever. It moves tokens inside a buyer's swap, and its balance in the PoolManager is back to zero before the swap ends.

v4 PoolManagerholds the curve

Uniswap's singleton. Holds the curve's liquidity (the LP positions PoolSeeder owns). In a sale to a buyer it only passes tokens through.

→ user · hookTo a buyer, through the hook

Someone swaps USDC for NVDAx in the vault's pool. In beforeSwap the hook sells them the vault's stock at HyperCore's price plus a spread, off the curve. Whatever it doesn't fill goes to the curve.

Token moves · all in one transaction
  1. 1
    PoolManager→VaultUSDC
    The PoolManager fronts the price (v4 flash accounting)
  2. 2
    Vault→PoolManagerNVDAx
    onHookFill: the vault sends the stock it sold
  3. 3
    Buyer→PoolManagerUSDC
    The buyer pays, which repays step 1
  4. 4
    PoolManager→BuyerNVDAx
    The buyer receives the stock
Afterwards
Vault
−NVDAx, +USDC
Buyer
+NVDAx, −USDC
PoolManager, hook
unchanged
Curve liquidity
not used
Terms
Price
HyperCore oracle + … open / … closed
Only when
the pool trades at or above that ask, so the buyer never pays more than the curve
Size
up to … per fill

Now: ask $202.02 · no fill available · market closed

→ AMMInto the pool, by the keeper

The keeper calls unwindStep(). The vault sells one chunk into the curve, like any other swapper.

Token moves · all in one transaction
  1. 1
    Vault→PoolManagerNVDAx
    Joins the curve's reserves
  2. 2
    PoolManager→VaultUSDC
    Paid out of the LP positions
Afterwards
Vault
−NVDAx, +USDC
Sold NVDAx
stays in the PoolManager, owned by the LPs
Hook
unchanged (it doesn't fill sells)
Curve liquidity
used
Terms
Price
the curve's, … LP fee, price impact capped at …
Only when
the pool is within … of HyperCore and the cooldown has passed
Size
up to … per step, at least HyperCore value − …

Now: pool $151.20 vs HyperCore $168.00 (-10.00%)

SaleStock beforeStock afterUSDC goes toCurve liquidity
→ user · hookVaultBuyerVaultNot used
→ AMMVaultPoolManager (the LPs' reserves)VaultUsed

After either sale the vault queues a reduce-only buy on HyperCore (HyperCoreGateway.placeOrder), the relayer places it from the hedge account, and the keeper's syncHedge confirms it. No other sale can happen until then, so the stock goes out one chunk at a time and the short shrinks with it.

3 · Who calls what

WhoCallsWhy
Buyer (you on Try it, or the demo bot)
PoolSwapTest.swap → PoolManager.unlock → PoolManager.swap
→ Seiz3HookRemote.beforeSwap → PoolManager.take / sync
→ Seiz3VaultRemote.onHookFill → PoolManager.settle
Buys NVDAx; the hook fills it from the vault
Keeper
Seiz3VaultRemote.liquidate → Morpho.liquidate → onMorphoLiquidate
Seiz3VaultRemote.unwindStep → PoolManager.unlock → unlockCallback → PoolManager.swap
Seiz3VaultRemote.syncHedge
Liquidates, pushes chunks into the pool, confirms each hedge
PoolManager
Seiz3HookRemote.beforeInitialize / beforeSwap
Seiz3VaultRemote.unlockCallback
v4 calls the hook on every swap in the vault's pool
Seiz3VaultRemote
HyperCoreGateway.placeOrder
Queues the short after a liquidation, and the buy-back after a sale
Relayer
IOC order on Hyperliquid
HyperCoreGateway.relay(snapshot)
Places the vault's orders, reports the position back
Chainlink CRE
HyperCoreGateway.onReport
RiskParams.onReport
Independent snapshots of the hedge account; market hours
Pool bot
PoolSeeder.swapToPrice → PoolManager.swap
Keeps the pool on HyperCore's price, as arbitrageurs would
Market A liquidator
NaiveLiquidator.liquidate → Morpho.liquidate → swap on the thin pool
The comparison: dumps at any price, no hedge

4 · Contracts

Base Sepolia · 84532
Seiz3VaultRemote
0x9557cd78f2332fb661eBd0017eE057cD4A086c20 ↗
ERC-4626 vault (abUSDC): liquidates, hedges, unwinds
Seiz3HookRemote
0x4fbe407b4320E7ADF1323e86509eaC7097052088 ↗
Uniswap v4 hook on the vault's pool
HyperCoreGateway
0x6db06845B210C69889022B1F83a2Ba17528Ed826 ↗
The vault's orders out, HyperCore snapshots in
RiskParams
0xce19e7C888D3b4c3a6E2e55e2C516b1A8e2d0990 ↗
Limits, market hours (CRE)
PoolSeeder
0x07A559F404Baf5D150d7Cf8D7C68D734eB9c7287 ↗
Owns the LP positions; the pool bot's swaps
NaiveLiquidator
0x7367b01616ec7F7eFaF237Ab3B0a8Fd5150b2830 ↗
Market A's liquidator
Chainlink CRE forwarder
0x82300bd7c3958625581cc2F77bC6464dcEcDF3e5 ↗
Delivers CRE reports

Pools: the vault's USDC/NVDAx pool (fee set by the hook on every swap, tick spacing 60, hook 0x4fbe…2088), and market A's own pool (0.05% fee, no hook), so the naive dump never moves the vault's pool.