max_payout_frac = 1.000000 on every simulated path.
The whole proof in one sentence. Collateral is locked at
MaxIL; the payout is
capped at MaxIL; therefore payout ≤ collateral by
construction — and nothing about how the premium was priced, or what the oracle
said, can change that.1. The three-line structural core
The settle-path guarantee, stated exactly as the code enforces it: Read line by line, this is the entire argument:1
Collateral is locked at exactly MaxIL
At swap creation the underwriter posts collateral equal to the position’s
MaxIL — the boundary impermanent loss,
, which is pure geometry,
frozen at creation. Path A locks it from the pool; Path B locks the MM’s own
collateral. In FULL mode
collateral == MaxIL exactly — not a
multiple, not a fraction.2
The payout is capped at MaxIL
At That ternary is the . The covered payoff is
, so it can never exceed
settle, the protocol recomputes realized_IL on-chain from the
Chainlink-pinned settlement price and applies the cap:MaxIL.3
Therefore payout ≤ collateral
Combine the two:
payout ≤ MaxIL == collateral. There is no price path — in
range, below , above , or in the no-IL region — on which the payout can
exceed the locked collateral. The underwriter’s capital always covers the claim,
with a non-negative residual returned at settle.- I1 — No bad debt (FULL): .
- I2 — Cap correctness: .
InflexionCore and verified by a fuzz test
(testFuzz_I1_I2_payoutCappedAtMaxIL, 256 runs). Both vaults additionally re-check
payout ≤ lockedAmount as defense-in-depth.
2. Why the guarantee is orthogonal to the premium
The three lines above contain no premium term, no load, no fairRate, and no . That is deliberate, and it is the single most important structural fact about the protocol. The premium is computed upstream of settle, in a completely separate phase (the four-phase CEI structure): This sits in PHASE 1 (pricing, READ) and PHASE 2 (checks). The no-bad-debt cap lives insettle, which runs only after expiry. The
invariant I10 price cap — overcharge is impossible by
construction — is also purely upstream:
I10 orthogonality. The load clamp
is a
mechanical deterministic clamp, so
holds for all
inputs on both paths. But I10 lives in pricing, strictly upstream of
settle
— it does not touch settle, the MaxIL formula, or I1–I9. A mispriced premium is
an economic outcome for the underwriter (NAV), never an LP bad-debt event.MaxIL of collateral would still cover it. The
premium decides whether underwriting is profitable; it has nothing to do with
whether the LP gets paid. Those are two separate questions, answered by two
separate parts of the contract, in two separate phases.
3. Why the guarantee is oracle-independent
The same observation, sharpened to its most-probed corner. The no-bad-debt proof is structural and holds regardless of what any oracle said — including a wrong, stale, or maliciously-set one. Walk the oracle dependencies:
The first two never enter
settle at all. FairPremium and
are solvency-load-bearing for the I10 cap and depositor solvency only — a wrong
makes the pool under-charge load, compressing NAV — but they
are NOT load-bearing for the FULL no-bad-debt invariant. In FULL, collateral =
MaxIL ≥ payout regardless of what was.
The third — the Chainlink round-at-T — sets the settlement price, so it determines
the value of realized_IL. But the cap is applied after that value is
computed:
For any whatsoever — correct, glitched, or adversarial — the right-hand
side is . The cap is the outermost operation, so the bound is
immune to what feeds it. The settlement price affects how much the LP is paid (up
to the cap), never whether collateral covers it.
What the cap depends on, exactly
To be precise about what is required for I1, separate from what is not:- Required (structural, by code): the cap operation itself; collateral locked at
MaxIL at creation;
Lstored once and never re-read (invariant I6 — an externalincreaseLiquidityon the custodied NFT cannot inflate the computed IL); the guarded subtraction (invariant I3). - Required for the full clause (the qualifiers, not the bound): capped payoff,
solvent USDC, oracle/settlement liveness (so
settlecan run — see the forks and invariant I8), and no rehypothecation breach (locked collateral stays instantly liquid). - NOT required: a correct premium, a correct
fairRate, a correct , or even a correct settlement price for the bound to hold (only for the amount within the bound).
settle
caps payout at MaxIL == collateral.
4. The dual-tranche waterfall math
I1 guarantees LPs are always paid. It says nothing about whether the underwriter loses money — and on the pooled cvAMM rail (Path A), the underwriter is the two-tranche vault. The samepayout ≤ locked algebra extends
to a second structural invariant that protects senior depositors.
4.1 The senior-protection invariant
The structural senior protection is the invarianttotalLocked ≤ juniorAssets,
enforced at every lockCollateral (the SeniorProtectionBreached revert). Chain
it with the per-swap no-bad-debt bound:
so
The first inequality is just I1 summed over every open swap — each payout is bounded
by its own locked MaxIL, so the total payout is bounded by totalLocked. The second
is the vault invariant. Together they mean the junior-first-loss waterfall absorbs
all underwriting loss before senior capital is reached.
4.2 The waterfall in code
releaseAndDistribute takes the junior loss first and only then any senior loss:
By the invariant above, , so and
at every settle. The is therefore defense-in-depth
— under the invariant, senior is never reached.
4.3 The algebraic link to u ≤ 1 − sf
This is the adaptive code form of the “enforce ” rule, keyed to the
actual junior buffer rather than a fixed ratio (which is safer). The algebra: with
target senior fraction , the junior fraction is , and on
utilization ,
That is exactly the utilization bound under which the P1.13 senior-P(loss) = 0
calibration holds.
4.4 The two claims, side by side
The math gives you two distinct guarantees, and they are never merged:
This is also why Inflexion is not Bancor: the cvAMM pays claims in
pre-locked USDC and mints nothing — no token-inflation reinsurance, no death
spiral. LPs are always paid (Claim A); depositors can lose principal in a crash
(Claim B). Two claims, never one.
5. P1.13 verification — max_payout_frac = 1.0
The structural argument is airtight on paper. The P1.13 heavy run confirms it
empirically across an extreme price grid, and — crucially — independently of any
oracle.
Define the payout fraction as the payout normalized by its own collateral:
If I1 holds for every path, this fraction must satisfy
everywhere — the payout never exceeds the collateral.
Result:
max_payout_frac
1.000000 — the cap binds exactly at the boundary and never exceeds it.
Exceptions
Zero. No simulated path produced
payout > MaxIL.Grid
A ±99% terminal-price grid, plus a widened −6…+6 log-move grid.
max_payout_frac = 1.000000 across that grid, with zero exceptions,
structurally and independent of any oracle. The fraction reaches exactly 1.0
because for any path that drives realized_IL ≥ MaxIL, the cap binds and the payout
equals MaxIL — never more. This is the numerical fingerprint of “the cap is the
outermost operation.”
The heavy-run model is deliberately stronger than GBM — the bar the protocol set
for itself:
- Student-t fat tails (),
- a 3-state Markov vol regime (calm 0.45 / normal 0.75 / stressed 1.30, persistence 0.82),
- tail-dependent crash correlation → 1 (single pair, the whole book settles against the same move),
- Poisson deep-crash months (~0.8/yr, mean −45%),
- and a lagging so coverage at a stress onset is underpriced exactly as it would be on-chain.
The adversarial self-audit verdict was GO: a 6-agent workflow independently
re-ran the engine and confirmed the no-bad-debt
structural result (
max_payout_frac = 1.0), that the measure split is correct
(premium risk-neutral at , payout under the real measure), and
that the model is in fact net-conservative to depositors — the
floor of 0.50 sits above calm ETH vol (~0.45), so the pool overcharges the ~27% of
calm months; all-months realized payout/premium = 0.654.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.
6. The invariant set, in one place
The settle-path invariants that make the three-line core hold at the formula level:
Note the asymmetry: I1 depends on oracle/settlement liveness (so
settle can
run within its window), while I10 is always-true by code (a pure pricing clamp
with no liveness dependency). They live in different phases and answer different
questions — never conflate them. Full statements, the “why each holds,” and the
fuzz-test citations are on the invariants page.
Where to go next
MaxIL — the cap and the unit
Why MaxIL is both the load-bearing payout cap and the unit that makes
positions fungible to an underwriter.
MaxIL derivation
The convexity proof that the in-range max is at a boundary, and why beyond-range
IL is unbounded.
The invariants
All ten invariants I1–I10 plus the pool-side senior-protection invariant, each
with its “why” and fuzz-test citation.
Tranches
The junior-first-loss / senior-protected waterfall, the run defense, and the
capital-not-guaranteed disclosure for both.
σ_ref
The vol oracle and its precise load-bearing scope — solvency and I10 only, never
I1.
The trust model
Why the no-bad-debt guarantee is independent of the off-chain matcher and of how
the swap was opened.