ConvexityVault — a choice about how much collateral an
underwriter posts per unit of MaxIL. Turn the dial all the way to
collateral MaxIL and you get FULL: structurally no bad debt, no monitoring, no
liquidation. Turn it down and you get PARTIAL: more positions per dollar of capital, but
real bad-debt risk that must be engineered away with floors, fees, buffers, and circuit
breakers — none of which can be invented; all of which come out of the Monte Carlo.
Today the dial only turns to FULL.
CollateralModel is {FULL, PARTIAL} in the
shipped enum, but every create path requires model == FULL and PARTIAL reverts
UnsupportedModel. PARTIAL is a designed-in,
gated-off roadmap mode — the gate is the quant, not the code.The dial, defined
Define the leverage of a swap as the ratio of MaxIL to the collateral the underwriter actually locks:- FULL posts , so leverage is exactly . The underwriter sets aside the entire maximum possible payout up front.
- PARTIAL posts for some
ratio (
partialRatioBpsin the SignedQuote), so leverage is and the same capital underwrites more notional. The shortfall is what the rest of the PARTIAL machinery exists to cover.
settle, the same
cap, the same MaxIL geometry.
The dial lives entirely upstream of settlement, in how much is locked at create. What
changes downstream is only the question “is the locked collateral always the
payout?” — which FULL answers structurally and PARTIAL answers probabilistically.
FULL — the launch mode and the no-bad-debt headline
FULL is the only mode live today, and it is the headline because of one line of algebra. Because the contract locks at create (on Path A and on Path B) and the payout is capped at MaxIL at settle: So holds by construction of the cap — under every price path, with no assumption about volatility, no monitoring, and no liquidation. This is invariant I1, and it is structural: it does not depend on the volatility oracle being right, only on the cap equalling the lock.This is exactly why FULL needs no risk engine. Liquidation is mathematically
impossible — there is no margin to maintain, no health
factor to watch, no keeper to keep the position solvent. The collateral was correct the
moment it was locked and stays correct until settle. The price oracle is
not load-bearing for I1; it only affects pricing and depositor solvency.
FULL on both rails
The dial reads the same on FULL regardless of which rail opens the swap, because FULL is enforced at create on both:
On Path B the FULL gate is explicit:
createSwap reverts UnsupportedModel for any
model != FULL, and partialRatioBps is required to be 0 in
FULL (the SignedQuote struct). On Path A there simply is no
PARTIAL entry point to reach.
PARTIAL — the capital-efficiency mode, gated on the quant
PARTIAL would let an underwriter lock less than MaxIL per swap and so write more notional per dollar of capital. That is genuinely valuable — but it breaks the structural guarantee: once , the inequality no longer holds for free. A position that runs to its MaxIL can now exceed the collateral behind it, and the difference is real bad debt. PARTIAL therefore replaces a proof (FULL’s one-line algebra) with a control system: a stack of floors, fees, buffers, exposure caps, and circuit breakers tuned so that the probability and magnitude of bad debt stay inside an explicitly chosen risk budget. None of those numbers can be guessed.Why no PARTIAL constant may ever be hardcoded
This is the single most load-bearing rule in the PARTIAL design, and it is a direct response to the external audit. Hardcoding any PARTIAL primitive — a liquidation buffer of “10%”, a circuit breaker at “σ × 3”, a first-loss slice of “5%” — is exactly the failure the audit flagged: it bakes a guess about the world into the contract and calls it a safety margin. The correct shape is a calibration pipeline, not a constant: The precedent is already shipped for the FULL load stack:baseLoad regimes, both skew
curves, and maxLoadBps are read from the calibrated risk-parameter set via LoadParams,
set by the owner through InflexionCore.setLoadParams — none hardcoded. PARTIAL extends the same pattern to its
full constant set.
The PARTIAL parameter set — every constant is params-driven
Each of these is a constant today’s FULL mode does not need and PARTIAL cannot ship without. All are sourced from the calibrated risk-parameter set, none hardcoded.
The first-loss / junior interaction here is about PARTIAL bad debt, distinct from the
ordinary tranche waterfall that operates in FULL today — see the
tranches page for the SENIOR/JUNIOR mechanics that ship now. This
page is about the FULL/PARTIAL dial; it deliberately does not re-derive the tranche
accounting.
FULL vs PARTIAL side by side
The honest framing: FULL trades capital efficiency for a proof; PARTIAL would trade the
proof for capital efficiency, and the price of that trade is a calibration the protocol
refuses to fake.
Who carries the risk in each mode
The no-bad-debt guarantee (Claim A) is about the LP being paid. It is a separate claim from whether the underwriter’s capital is safe (Claim B) — and the two never merge. The dial changes the underwriter’s risk profile, not the LP’s:- In FULL, the LP is paid under the qualified clause and the underwriter’s only underwriting loss is the ordinary out of collateral they posted — never bad debt, because they posted the full MaxIL.
- In PARTIAL, the LP is still paid up to the protocol’s coverage, but the under-collateralization means some of that payout can exceed the individual swap’s collateral, and the first-loss / junior capital is what stands behind the gap. That is precisely why PARTIAL’s first-loss size is one of the calibrated constants above.
Where this sits in the roadmap
FULL vs PARTIAL is the collateral leverage dial, and it is explicitly a roadmap item: FULL is the only launch mode and the no-bad-debt headline; PARTIAL is capital-efficient, carries real bad-debt risk, and is gated on the quant with every constant from the calibrated risk-parameter set. The enum ships (CollateralModel{FULL, PARTIAL}), the wiring ships, and the gate stays closed until the
calibration lands.
Structures ship from day one; the full DYNAMICS (pool-vs-MM spread as a forward-vol signal) mature with multiple competing MMs and volume. The dataset begins at the single redeploy; the off-chain telemetry halves begin at the first interaction logged.What Inflexion offers today is the architecture and the first public view into the microstructure of the DeFi LP volatility-risk premium — not yet a mature dataset:
- Structures are present day-one. All five non-circular behavioral signals are defined and queryable from launch.
- Dynamics mature with volume. The richer signal — the pool-vs-MM spread read as a forward-vol indicator — only sharpens once multiple market makers compete and real flow accumulates.
- The dataset begins at the single redeploy, and the off-chain telemetry halves begin at the first interaction logged. History is served live from the subgraph via the API; if a backing (subgraph URL / RPC / telemetry) is absent, surfaces degrade to a typed
pendingstate — never an error.
Where to go next
MaxIL — the cap and the unit
Why MaxIL is both the load-bearing payout cap (the FULL guarantee) and the fungible
unit of risk.
No bad debt — the qualified claim
The exact clause under which FULL produces no bad debt, and why PARTIAL cannot inherit
it for free.
The tranches
SENIOR / JUNIOR mechanics that ship in FULL today — distinct from the PARTIAL
first-loss sizing.
The pricing stack & the quant
How the calibrated risk-parameter set feeds on-chain parameters — the same pipeline that gates PARTIAL.
The invariants
I1 (no bad debt, FULL) and where every invariant is enforced in code.
The audit
Why hardcoding any PARTIAL constant is the exact failure the audit flagged.