This is the applied companion to the conceptual math pages. If a step is unfamiliar, jump to its home page: the IL formula, the MaxIL convexity proof, the Φ-sum, the load stack, and the no-bad-debt math.
The position
A Uniswap v3 LP holds an ETH/USDC position worth USDC at entry, with a geometric-symmetric ±10% range around the entry price. To make every figure concrete we pin the entry price at USDC/ETH; the dollar results scale with and are otherwise -independent in the fair-rate sense.
The in-range gate is what makes this an in-range convexity hedge rather than insurance — an out-of-range entry is rejected at
createSwap because there is no in-range IL left to hedge.
Step 1 — MaxIL (pure geometry, one number for all three durations)
MaxIL is the maximum in-range IL, attained at a range boundary (the convexity proof): Computing both boundaries for this position:
Two facts to read off this table:
- The upper boundary wins. even though the range is ratio-symmetric — the structural upper-boundary asymmetry (affine growing without bound vs. flattening , see the derivation). .
- MaxIL/V0 = 2.56% matches the reference magnitude for a ±10% geometric range exactly.
Step 2 — fairRate and FairPremium (three durations)
fairRate is the dimensionless fraction of MaxIL the capped claim is worth under the risk-neutral measure — an exact closed-form Φ-sum, an S-curve in : Evaluating at for the ±10% geometry across the three durations:
Read this as the S-curve walking up : over 7d the ±10% band is rarely touched, so the claim is worth only 44.9% of MaxIL (the most convexity value, the cheapest fraction); over 90d the band is exited most of the time, so the claim is worth 82.9% of MaxIL — you are pre-paying a near-certain loss. Over 90d the band is touched ~75% of the time vs. ~24% over 7d, and the S-curve does all the work.
Step 3 — the load stack → premium
The published premium is FairPremium scaled by the load stack, hard-capped by invariant I10: For this walkthrough take a clean +15% total load (skews = 0, a normal-regimebaseLoad example — the live calibrated baseLoad bands are 20/30/50% by σ regime). The premium the cvAMM publishes for the same position at each duration:
Load sensitivity on the 30d cell (the load is the only thing the pool’s inventory state can move): at +5% load the 30d premium is USDC; at +30% it is USDC. The ceiling is , enforced by the I10 clamp.
Both rails price off this same FairPremium. Path A computes the load stack on-chain; Path B (a market maker) carries a single
loadBps and the contract derives premium = FairPremium·(1 + loadBps/1e4), requiring loadBps ≤ maxLoadBps (I10 on Path B). createSwapRouted gives the LP the cheaper of {pool, MM} and falls back to the pool if the MM quote is unusable — see routing.Step 4 — settlement at three terminal prices
The LP buys the 30d quote: premium USDC, collateral locked USDC (= MaxIL). At expiry the protocol pins the settlement price on-chain from the Chainlink round-at-expiry and pays the LP from the underwriter’s collateral: We settle the same position at three representative terminal prices: one inside the range, one at the upper boundary, and one beyond the range where the cap binds hard.
Three things this table shows, each load-bearing:
1
A — interior: the payoff is exactly the realized IL
Inside the range the convex IL curve sits below its boundary endpoints (the convexity proof), so realized IL () is well under MaxIL and the LP is paid it in full, uncapped. Net of the premium the LP’s hedge cost this scenario is USDC — the price of the volatility protection in a calm outcome.
2
B — at the boundary: payout equals MaxIL by construction
At the realized IL equals MaxIL to the cent () — this is the definition of MaxIL, the maximum in-range IL attained at a boundary. The payout is the full collateral; the underwriter keeps residual on this swap.
3
C — beyond range: the cap is load-bearing, not a defect
At the LP has fully rotated into USDC ( is flat above ), while keeps growing — realized IL balloons to , but the payout is capped at = MaxIL. The LP eats the of uncovered loss. That uncovered slice is directional loss — foregone spot upside the LP would have had holding ETH — not the impermanent loss the product set out to hedge. Capping at MaxIL is exactly what keeps the product fully collateralized and trustless.
The whole stack on one position, one screen
Collecting Steps 1–4 for the 30d quote, end to end: The only number that changed between the 7d / 30d / 90d quotes was fairRate (); MaxIL, and therefore the collateral and the cap, was constant throughout.The real on-chain lifecycle — 2026-06-05, both rails
The illustrative numbers above are reproduced by a live create→settle run on the fresh stack, on a short (300s) fee-500 market, settled with no time-warp at the Chainlink round bracketing each expiry. Two swaps ran — one on each rail — demonstrating the floor-of-liquidity / ceiling-of-price routing end to end.- Path A — cvAMM pool
- Path B — MM won the route
The signature-free cvAMM underwrote swap #1 directly; settlement paid from the
ConvexityVault.The premium being a tiny 0.58% of MaxIL is the convexity hedge in the wild: a wide/short position has a low fairRate, so the protection is cheap relative to the worst-case cap. Realized IL ($148.64) landed well inside the cap, so the full uncapped amount was paid and the pool kept $1,669.24 − $148.64 = $1,520.60 residual collateral.
ConvexityVault; Path B from the single MM’s UnderwriterVault. The settlement core is identical regardless of which rail opened the swap.
The live addresses for every contract referenced here are in the deployment registry. See deployments for the full table.
Where to go next
MaxIL & the convexity proof
The rigorous version of Step 1 — why the maximum in-range IL is always at a boundary.
FairValue — the Φ-sum
The exact closed form behind Step 2’s fairRate — a finite lognormal-moment sum, no Monte Carlo.
The load stack
baseLoad + the two skews + the I10 clamp — the inventory layer of Step 3.
No-bad-debt math
The three-line proof that the cap binding in scenario C can never become bad debt.