- Layer 1 — MaxIL. Pure geometry. The collateral unit. No vol, no time, no calibration.
- Layer 2 —
fairRate· MaxIL = FairPremium. The exact closed-form Φ-sum. All of the vol/time dependence lives here, and only here. - Layer 3 — the load/skew stack + the I10 clamp. The volatility-risk premium an underwriter charges over fair value, mechanically capped so it can never run away.
This page is the wiring diagram. The deep derivations live on their own pages:
the IL formula, the MaxIL derivation,
the Phi-sum, σ_ref and
the load stack. For the end-to-end create→settle path see
the lifecycle; for the two rails see the two rails.
The stack at a glance
The pipeline, in one line of algebra:
with
totalLoad hard-capped at maxLoad (invariant I10) and the whole thing additionally
capped at MaxIL itself — you can never be charged more than the maximum possible payout.
Layer 1 — MaxIL (geometry)
MaxIL is the collateral unit and the coverage cap at once — it is computed once at creation from pure geometry and never moves (ILMath.computeMaxIL).
In-range IL is convex on (the hold value is affine in price, the LP value is
strictly concave), so its maximum while price stays in range sits at a boundary:
Two properties make this the right base for everything above it:
- It carries zero vol/time dependence. The same position has the same MaxIL for the 7-day, 30-day and 90-day markets — which is precisely why the cvAMM publishes three different prices for one position, all backed by the same collateral.
- It makes positions fungible. Because MaxIL is pure geometry, frozen at creation, and
L-independent in the fair-rate sense, an underwriter quotes per-market, never per-NFT.
That is the whole reason the SignedQuote carries no
tokenId.
Full treatment: the MaxIL derivation and MaxIL — the cap and the unit of risk.
Layer 2 — fairRate and FairPremium (the Φ-sum)
Layer 2 turns the geometric unit into a price under the risk-neutral measure:fairRate is the fraction of MaxIL the capped claim is worth — an S-curve in :
near 0 for calm/short markets, rising toward 1 for violent/long ones
(FairValueOracle.fairPremium).
fairRate carries ALL of the vol/time dependence; MaxIL carries none. This clean split
is what lets one geometric unit (Layer 1) back three different prices (one per duration) — the
duration shows up only through inside fairRate.Why it is an exact closed form, not a fitted surface
The capped v3 payoff is piecewise in the terminal price : linear below , a convex arm inside , and linear above . Each arm, integrated against the lognormal density of , is a standard interval moment that closes in the normal CDF . SoFairPremium is a finite Φ-sum
(~6–10 terms, Black–Scholes class) — no Monte Carlo, no lookup table, no calibrated
coefficients — evaluated live per quote.
The Φ-sum runs in normalized units (), so it depends only on ,
, and — it is L-independent. The only stochastic input is ,
the conservative vol estimate (see σ_ref).
Full treatment: the Phi-sum, on-chain published fair value.
Layer 3 — the load stack and the I10 clamp
FairPremium is what the claim is worth; nobody underwrites at fair value. Layer 3 is the volatility-risk premium — the load an underwriter charges over fair value for taking short-gamma risk — plus the two skews that price scarcity and concentration. It is the only layer with discretion, so it is also the only layer that is hard-clamped. The cvAMM computes the full stack on-chain (CvammPricing):
clamped by invariant I10:
The three load terms
util_skew(u) — scarcity pricing on capacity
util_skew(u) — scarcity pricing on capacity
With : flat below a knee, convex above, capped
(
CvammPricing.utilSkewWad). It rises as the pool nears full
commitment, so marginal capacity is priced up before over-commitment — the same
locked/free accounting wires directly into the run defense.dispersion_skew(h) — single-pair concentration pricing
dispersion_skew(h) — single-pair concentration pricing
With = normalized coverage HHI (Herfindahl): the honest single-pair concentration
analogue — many positions bunched at one edge all hit MaxIL together. Capped
(
CvammPricing.dispSkewWad). The HHI is computed O(1) from an
incremental accumulator (ConvexityVault.concentrationWad).The I10 clamp, exactly as coded
The three terms are summed and then clamped before the premium is formed:CvammPricing — totalLoadWad / premiumFromLoad
1e18 = 1.0 = 100% load, and 1 bps = 1e14 WAD.
Finally, both paths additionally cap the charged premium at
MaxIL — “never charge more than the max possible payout”.
I10 is orthogonal to I1 (no-bad-debt). I10 is a deterministic, mechanical clamp in the
PHASE-1 pricing/read step, strictly upstream of
settle. It never touches the settlement
core, the MaxIL formula, or any of I1–I9. The no-bad-debt proof is structural —
— and does not depend on the premium cap.
See the invariants.Both rails, the same fair value
This is the load-bearing symmetry of the whole pricing design: Path A and Path B price off the identical FairPremium. They diverge only in how Layer 3 is applied.- Path A — cvAMM (pool)
- Path B — market maker
- Routed — cheaper of the two
The cvAMM computes the entire Layer 3 stack on-chain — baseLoad + util_skew +
dispersion_skew, clamped by I10, capped at MaxIL (
_pricePathA, CvammPricing).
No signature, no validity clock. This is the floor of liquidity — it
always quotes. See Path A — the cvAMM.maxLoad is the rate; on-chain it is maxLoadBps (basis points). The same ceiling binds both
rails, so neither the pool nor any MM can overcharge past FairPremium · (1 + maxLoad).
The “no PARTIAL primitive is hardcoded” rule
Layer 3 is the only layer with tunable numbers, and none of them are baked into the code. ThebaseLoad regimes, both skew curves (knee / slope / power / cap), and maxLoadBps are all
read from the calibrated risk-parameter set (the cvAMM block) via LoadParams,
set by the owner through InflexionCore.setLoadParams.
A mis-set load is a solvency-load question, not a no-bad-debt question: a too-low load
compresses pool NAV and the loss hits the tranche waterfall junior-first
— it can never violate the FULL no-bad-debt invariant, which is structural and
oracle/parameter-independent.
A worked number (live, 2026-06-05)
The fresh redeploy ran a real create→settle on a 300s market through the stack:
Read it top-down: Layer 1 fixes the collateral and the cap; Layer 2 fixes what the claim is
worth; Layer 3 sets what was charged — and on swap #2 the MM’s single
loadBps produced a
premium ($8.93) strictly below the pool’s full clamped stack ($13.80), so routing handed the
LP the cheaper rail. Both swaps settled at exactly min(realized_IL, MaxIL) from the chosen
counterparty’s collateral.
For the full numeric walk-through see the worked example; for the
live addresses see deployments.
Where to go next
MaxIL — the cap and the unit
Layer 1 in depth: why pure geometry makes positions fungible.
The Φ-sum
Layer 2 in depth: the exact closed-form fair value, arm by arm.
The load stack
Layer 3 in depth: baseLoad, both skews, and the I10 clamp.
The invariants
Why I10 is orthogonal to no-bad-debt, and the other nine.