Kerb

Methodology

The Kerb Terms Standard, version 0.1, is the rulebook that turns observations into credit terms. This page states each rule and then works it through on BRK.Bx using the numbers Kerb is publishing right now. Nothing here is illustrative. The specification carries a worked example marked “not measured”; it is deliberately not reproduced, because a placeholder number on a page that looks authoritative is how people get misled.

1. The regime machine

A regime is a statement about the quality of the market Kerb would have to liquidate into. The resolution order is strict: the first rule that fires wins, and the dangerous states are checked first so a weaker signal can never mask a stronger one.

OrderRegimeIn the reportWhat it says
1HaltedHALTEDTrading in the underlying is halted.
2StaleSTALEThe sources the mark needs are too old to price against.
3Corporate actionACTIONA corporate action is pending or in progress on the underlying.
4Last CallPRE_TRANSITIONThe session is about to weaken. Session Max positions must cure before it closes.
5Reference closedREFERENCE_CLOSEDThe underlying market is closed, so no new reference price is arriving.
6ThinTHINExecutable depth is thin relative to the debt it supports.
7NormalNORMALNormal executable liquidity in the underlying's regular session.
8DeepDEEPDeep executable liquidity and a fresh reference price.
9RecoveryRECOVERYThe session has reopened and terms are loosening back on the cooldown.

Terms tighten immediately and loosen only after a cooldown, and only by a bounded step. A market that just came back is not yet a market you can lend into at full size.

BRK.Bx right now
Reference closed

2. Executable depth

Depth is not a pool balance and not an aggregator estimate. Kerb walks the real Uniswap V3 pool tick by tick in the direction of a sale, consuming liquidity in each initialised range and applying the fee, and asks: what is the largest notional whose realised price impact is at most i? That answer is C(i). Where a pool is quoted in something other than the loan asset, each leg is simulated in turn and the impacts compound. Venues that cannot be simulated are excluded with a recorded reason, never silently dropped.

C(1%)
17,494.72
The notional the debt ceiling is built from.
C(0.5%) and C(3%)
8,245.33 and 52,598.54
Path
wBRK.Bx → USDG
Cross-check
simulated 17,494.72 against 16,393.25 quoted, a difference of 6.719%
Kerb takes the smaller of the two whenever they disagree beyond the configured maximum. Never the larger.

See the whole curve for BRK.Bx

3. The Credit Mark

The mark a lender may act on is the conservative one. Kerb takes the median of the fresh reference sources, compares it with the pool price along the whole path to the loan asset, measures the dispersion between them, applies the regime’s haircut, and publishes the lower of the two with a band. A wrapped collateral token is valued as convertToAssets(shares) times the Credit Mark: the wrapper exchange rate converts shares to units and is never itself used as a price.

Reference median
509.717500
from xstocks:price-data, yahoo:chart:BRK-B
Pool price
506.837906
time-weighted
Dispersion and haircut
0.565% dispersion, 1.782% haircut
Credit Mark
497.803674
band 492.8256 to 506.8379

4. Capacity

Three constraints, and the tightest wins. Stress capacity asks how far the underlying could gap over the horizon the position must survive, using the 99th percentile move over comparable intervals scaled by recent volatility, plus the impact of liquidating at a reference size, the liquidation bonus and a buffer. Liquidity capacity sets the debt ceiling at a fraction of C(1%): never lend more than you can liquidate. Position capacity caps what a single borrower may owe. Carry and Session Max are the same calculation over two different horizons — Carry must survive the next weakening, Session Max only the rest of the session, which is why it comes with the covenant.

Horizon
36.81h weak, 18.31h to cure
Carry is measured to the far side of the next weakening; Session Max to the cure deadline.
Gap quantile and volatility scaler
4.570% at the 99% quantile, scaler 0.7793
From at least five years of daily bars.
Carry LTV
55.00%
Session Max LTV
60.00%
Liquidation threshold
65.00%
Fixed. It does not move with the session, and changing it is a timelocked admin action.
Debt ceiling and position cap
13,121.04 and 4,373.68

5. The cure covenant

Drawing above the Carry ceiling records a target: the Carry LTV at the moment of the draw. When the underlying market is about to weaken, the Last Call window opens and the position becomes curable. Anyone may repay exactly the amount that brings it back to that target and is paid a bonus in collateral for doing it. Cure is not liquidation: it cannot repay more than the covenant requires, it cannot run outside the window, and it stops being available the moment the borrower reaches target by repaying or adding collateral. A position that breaches the fixed liquidation threshold takes the ordinary default path instead.

Because the cure also seizes the collateral that pays its own bonus, the amount required is not simply the shortfall. It solves R = (debt − target × value) / (1 − target × (1 + bonus)), so that the position is actually at target once the cure has run.

Next weakening for BRK.Bx
session close
2026-09-21 20:00 UTC · in 19h 17m
Last Call window
closed
1h 00m long, opening 2026-09-21 19:00 UTC

Try it on testnet, with mirror collateral →

6. Reproducibility

The engine is a pure function of its input bundle: no clock reads, no network calls and no randomness inside the computation path. Every report canonicalises its inputs, hashes them with keccak256, pins the bytes to IPFS, and posts the hash on chain alongside the terms. Anyone holding only that hash can recover the exact inputs and arrive at the same numbers.

Latest BRK.Bx inputs hash
0xf4dcdd88edccb3dfbc13005ba5f78536fc767ed006db7bcadeb9f43701244f9a
Recompute it
pnpm --filter @kerb/engine kerb verify 0xf4dcdd88…01244f9a
That resolves the pinned CID, fetches the bytes, checks they hash to that CID, recomputes every number and compares them with what is on chain.

The proof page carries the live version of all of this →

7. What v0.1 does not do