Kerb
NormalPre-market
Session opens in 4h 39m (13:30 UTC)

BRK.Bx · the asset currently carrying the most capacity. See it →

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
Normal

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,000.34
The notional the debt ceiling is built from.
C(0.5%) and C(3%)
8,012.33 and 51,720.69
Path
wBRK.Bx → USDG
Cross-check
simulated 17,000.34 against 17,075.50 quoted, a difference of 0.440%
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
510.024000
from xstocks:price-data, yahoo:chart:BRK-B
Pool price
508.513150
time-weighted
Dispersion and haircut
0.296% dispersion, 0.398% haircut
Credit Mark
506.488679
band 501.4238 to 508.5131

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
28.67h weak, 10.17h 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
12,750.25 and 4,250.08

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 11h 09m
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
0x4372007edb7449ec5e9d759e569f08e74e2814476ded872cc24f9e580b0fd97f
Recompute it
pnpm --filter @kerb/engine kerb verify 0x4372007e…0b0fd97f
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. The parameter set

Every constant the engine runs on, read from the same file the engine reads. Parameters are versioned with the report, so a number published under one version can never be re-explained by another.

Params version 2026-09-20.2, KTS 0.1.

Scroll the table sideways for the values.

GroupParameterValue
depthladder0=1000 1=2500 2=5000 3=10000 4=25000 5=50000 6=100000 7=250000
depthimpactTargets0=0.005 1=0.01 2=0.03
depthfragmentationFactorMulti0.8
depthstalenessMaxSec300
depthcrosscheckMax0.25
depthminVenueC1100
markstalenessMaxSec300
markdispersionMax0.02
markhDispersion0.5
markbandRegime0.01
marktwapWindowSec900
markregimeHaircutDEEP=0 NORMAL=0.0025 THIN=0.0075 PRE_TRANSITION=0.0075 REFERENCE_CLOSED=0.015 ACTION=0.025 RECOVERY=0.0075 STALE=0.025 HALTED=0.025 DEFAULT=0.0075
regimestalenessMaxSec300
regimedispersionMax0.02
regimeactionCooldownSec3600
regimerecoveryCooldownSec1800
regimethinThreshold5000
regimedeepThreshold20000
regimespreadMax0.01
asymmetryrecoveryCooldownSec1800
asymmetrynConfirm3
asymmetrymaxLoosenStep0.02
capacityDefaultsk0.75
capacityDefaultsbuffer0.02
capacityDefaultsliquidationBonus0.07
capacityDefaultscarryMargin0.10
capacityDefaultssessionMargin0.05
capacityDefaultspositionCapAbs25000
capacityDefaultspositionCapShare0.25
capacityDefaultsreferenceLiquidationSize10000
stressquantile0.99
stresslookbackYears5
stressminBarsForOwnQuantile60
stressminBarsForSufficientHistory1260
stressvolWindowDays20
stressvolMin0.75
stressvolMax2

8. What v0.1 does not do