Liquidations
When a Direct-Loan borrower's HF crosses 1 and stays there past the proposed 24-hour grace window, anyone can repay up to 50% of the debt and seize collateral at a proposed 12% discount (8 pp to the liquidator, 4 pp to the protocol reserve). Three guardrails — grace period, per-block velocity cap, 50% close factor — turn a sharp price move into an orderly multi-block winding-down rather than a flash cascade. If no liquidator shows up, the reserve is the backstop bidder of last resort. All percentages on this page are proposed; final values fixed at official launch.
The mechanic in one formula
A liquidator who repays of a borrower's QOM debt receives ZAP collateral worth (in QOM-equivalent at the TWAP):
with paid to the liquidator and retained by the protocol. The aggregate bonus is sized within the modern partial-liquidation range — Aave v3 sits at 5–8.5% on bluechip, Morpho's LIF formula caps at 15% — and on the higher end because QOM has materially smaller liquidator depth than Ethereum.
Per-call repayment is bounded by the close factor:
so fully winding down a position requires multiple separate transactions. This is the same close-factor mechanism Aave v3 uses, except v3 escalates to 100% when HF drops below 0.95 — we keep a flat 50% to slow cascades on a chain with thinner depth.
Why everything is denominated in QOM (not USD)
Every value below — collateral, debt, HF, liquidation price — is in QOM units, derived from the ZAP/QOM TWAP read directly from the on-chain QomX pool. There is no QOM/USD oracle anywhere in the system. This is intentional and matters: a QOM dump in USD terms (with the ZAP/QOM ratio unchanged) does not liquidate anyone, because both the borrower's collateral and their debt scale identically in USD. The position is risk-neutral to QOM/USD movements — the only price that determines solvency is the ZAP/QOM ratio in the actual market where the collateral trades.
This avoids the failure mode where a thinly-traded asset (ZAP) appears to "lose value" purely because its quote currency dropped in USD. If no one is selling ZAP for QOM and the pool ratio is stable, your position is stable.
Worked example — base calibration
Take the ZAP/QOM TWAP at QOM per ZAP at origination.
| Step | Value |
|---|---|
| Borrower deposits 1,000 ZAP, TWAP QOM/ZAP → collateral value QOM | borrows QOM at 40% LTV |
| ZAP/QOM ratio drops 25% → QOM/ZAP, collateral value QOM | → liquidatable after grace |
| 24h grace window elapses without top-up | position eligible |
Liquidator calls liquidate(borrower, 100 QOM) | uses the 50% close factor |
| Liquidator pays 100 QOM into the pool | receives QOM-equivalent in ZAP, i.e. ZAP |
| Of the bonus: liquidator keeps QOM-equivalent in ZAP | protocol reserve receives QOM-equivalent in ZAP |
| Borrower remaining debt: QOM | remaining collateral: ZAP, i.e. QOM-equivalent |
After the call, recomputes with the new and . If still below 1, a second liquidate call can fire — but only after a fresh per-block velocity-cap window opens, which throttles cascade speed.
Three guardrails, formally
1. Grace period h. A position dipping below does not become liquidatable until the position has been continuously underwater for . Single-block oracle noise that recovers within the window does not trigger forced unwind. The trade-off is real: a deteriorating position that crosses 1 and stays there has 24 hours during which lenders are formally underwater. The 30-min TWAP softens this — a position that crosses 1 has already been underwater for some time on the spot price before the oracle catches up.
2. Per-block liquidation velocity cap. Total notional liquidated in any single block is capped at a fixed fraction of pool size:
This caps cascade speed independently of how many keepers are in the auction. A 50% drawdown that would liquidate in dollars instantly on Aave is spread over blocks here.
3. Close-factor cap . A single liquidator call clears at most 50% of one borrower's debt. The borrower retains a position with reduced exposure and another grace-window opportunity to restore solvency. Over-liquidation — the chronic complaint about Aave v3 before Aave v4's Target HF design — is bounded structurally by .
Liquidator economics — when keepers fire
A keeper firing in QOM realizes a profit, in QOM-equivalent terms, of
The 8 pp share is set so that even with gas and slippage on dumping ZAP back into QomX (the same market the TWAP reads), the marginal keeper expects to profit. QOM L1 orders transactions FIFO — there is no priority-fee auction, no MEV mempool, no sandwich vector. Keepers race on raw broadcast latency to a validator, not on bidding wars; the keeper that broadcasts first lands first.
Three keeper profiles compete:
| Profile | What they do |
|---|---|
| Block-watching bots | Run nodes, evaluate every borrower per block, fire within one block of . The dominant share on mature chains. |
| Generalist arb bots | Already-running arbitrage infra that adds a liquidate() call path. Cheap to bolt on. |
| Manual / backstop liquidators | Whales or other parties who watch positions and step in when bots are absent. |
What if no keeper shows up
Possible on a smaller ecosystem like QOM. Layered fallback:
| Layer | What it does |
|---|---|
| Grace period | Buys time for any liquidator (or the borrower) to act before bad debt accrues. |
| Reserve-funded backstop | If a position remains underwater past the grace window, the protocol's reserve can retire the debt at the prevailing rate. The reserve absorbs the bonus instead of paying it out. |
| Reserve-funded bad-debt absorption | Any unrecoverable shortfall after backstop is covered by the reserve. Lenders are not exposed to bad debt. |
This is a different shape than Liquity's stability-pool model (a separate pool of pre-deposited stables that automatically offsets undercollateralized debt) but achieves the same goal: bad debt is absorbed by a dedicated capital layer, not socialized to passive depositors. We chose the reserve-funded variant because it doesn't require building a separate pool primitive at launch.
Where this sits in the liquidation-design landscape
| Design | Used by | What Forge does |
|---|---|---|
| Fixed-bonus partial liquidation | Aave v3, Morpho | Yes — base model |
| Target Health Factor (dynamic repay-to-HF) | Aave v4 | Considered for Phase 3, not at launch |
| Pure absorption (protocol takes collateral at TWAP) | Compound v3 | Reserve backstop fills similar role |
| Stability-pool offset | Liquity v1/v2 | Reserve-funded analog |
| Dutch auction | Older Maker, Euler v1 | Rejected — historically gas-war-prone in thin keeper markets |
| Bonded keeper challenges | Ajna | n/a — we have a price oracle |
Borrower protections, quantified
Putting the three guardrails together: a 25% spot-price drawdown over a 6-hour window produces
- TWAP catches up gradually over 30 minutes — borrower has continuous notice.
- Once HF crosses 1, 24 hours of grace before any liquidator can fire.
- When liquidations fire, at most 5% of pool notional clears per block.
- At most 50% of any single borrower's debt clears per call.
In aggregate, a borrower at the maximum LTV who experiences a sudden 25% ZAP drawdown has approximately 24 hours + 30 minutes to top up before the first liquidation hits, and then up to two close-factor calls before the position is fully unwound — each separated by their own velocity-cap-bounded window. Compare this to a same-size borrower on a default Aave v3 deployment, where liquidations can fire in the same block the oracle moves and a position is exposed to a 100% close-factor sweep.
Liquidations on Forge are slow, predictable, and bounded — a deliberate tradeoff that accepts more time-in-bad-debt-window in exchange for far less probability of a cascade event taking out the lender side. The reserve is the absorber of last resort.