Isn't this just insurance?
Isn't this just insurance?
It is an in-range CONVEXITY hedge, not loss cover
The payoff is CAPPED — by construction, on purpose
It is NOT Bancor
MaxIL before the swap exists.Isn't the matcher centralized?
Isn't the matcher centralized?
Direct-to-contract fallback
createSwap directly, bypassing the engine entirely. A censoring operator simply loses that flow. The SDK exposes this path.Append-only quote log
Deterministic FIFO / price-time matching
What if the oracle lies?
What if the oracle lies?
- σ_ref / FairValueOracle (the PRICING oracle)
- Chainlink price (the SETTLEMENT oracle)
VolOracle) and the FairValueOracle are load-bearing for the I10 price cap and depositor solvency only. A wrong, too-low makes the pool under-charge load → premium income stops covering payouts → NAV compresses → junior absorbs it first, senior in the tail. This costs depositors, by design — they are the volatility sellers. It does not touch the LP guarantee.Even so, is conservative by construction:
The is mandatory, not optional engineering: realized vol understates risk right before a regime change, so a single fast EWMA would collapse to a deceptively calm number exactly before a crash. The floor sits above calm ETH vol on purpose (floor = 0.50 > \approx 0.45), so the pool overcharges calm months. See σ-ref.Can depositors lose money?
Can depositors lose money?
Senior — convexity savings account
Junior — pure vol-selling tranche
totalLocked ≤ juniorAssets, enforced at every lockCollateral. Since every payout its MaxIL its locked amount:
so junior absorbs all underwriting loss before senior. With target , this is exactly .The honest numbers (heavy run, bare unhedged single-pair ETH pool, gross of demand/competition/fees, leading with the geometric 3y CAGR):Is bad debt really impossible?
Is bad debt really impossible?
payout = realisedIL > maxIL ? maxIL : realisedIL — and both vaults defensively re-check payout ≤ lockedAmount.It is verified, not asserted: the heavy run found on every simulated path across a (and a widened log-move) grid — max_payout_frac = 1.000000, zero exceptions. The Foundry suite fuzzes I1/I2 over the whole price domain (256 runs).PARTIAL mode (collateral < MaxIL) does carry real bad-debt risk and is roadmap-only, gated on the quant. In the shipped code, CollateralModel has {FULL, PARTIAL} but PARTIAL reverts UnsupportedModel. See the math of no bad debt and collateral models.Why a cap?
Why a cap?
MaxIL is the maximum in-range IL of a specific position. is convex on , so its maximum while price stays in range is at a boundary:
Proof sketch: is affine in ; in range , so ⇒ strictly concave ⇒ is convex, and a convex function on a compact interval attains its max at an endpoint. This holds for any entry, centered or not.The cap is correct as a product, not just as collateral math:Beyond-range loss is DIRECTIONAL, not impermanent
Unbounded payoff cannot be trustless
The cap is the unit of risk
Why per-market quotes (not per-position)?
Why per-market quotes (not per-position)?
tokenId in a SignedQuote.The chain of reasoning:MaxIL is L-independent in the fair-rate sense
Range-agnostic ROC dissolves adverse selection
So a quote is PER-MARKET: a load + a MaxIL-ratio band + capacity
minMaxILRatioBps/maxMaxILRatioBps, and the contract enforces it per-fill: else RatioOutOfBand. Positions within the band are interchangeable.token0/1, fee, tickLower/Upper, liquidity) are public on-chain via positions(tokenId). Both the pool and any MM read the exact geometry and price the specific position — so there is no information asymmetry for a band to manage. Post-pivot, the MaxIL-ratio band survives only as an optional convenience filter, never a pricing input.Is the Phi-sum really exact?
Is the Phi-sum really exact?
FairValueOracle (machine-precise; Stylus bans WASM floating point at activation, so its erf is integer fixed-point). The Solidity FairValueOracle is a revm-testable CI cross-check, not a second production oracle — its Abramowitz–Stegun erf is only , which is why the Stylus oracle is production. The -sum is NEVER reimplemented off-chain — the SDK reads the on-chain FairPremium (a hard rule). See the Phi-sum and fair value.What is live?
What is live?
274081134. A real create→settle lifecycle ran on both rails:- Path A (cvAMM): V0 $270,531, MaxIL $1,669.24, premium $9.70 (0.58% of MaxIL), realized IL $148.64, paid in full from the
ConvexityVault. - Path B (routed to MM):
createSwapRoutedchose the MM because its premium $8.93 strictly beat the cvAMM’s $13.80; the MM’s own collateral ($3,215.65 MaxIL) was locked and paid the $245.66 settlement fromUnderwriterVault.
- LIVE today (RPC + on-chain)
- LIVE via the subgraph (history + aggregates)
- Premium preview, payoff-with-cap chart, buy/settle (Path A), vault deposit/withdraw.
- The current clearing-load surface (Signal 1) — live RPC multicall, the data moat’s hero.
- , market pricing, the on-chain book scan, coarse fills.
- The two moat events
SwapPriced/QuoteFilledandCvammPricing.loadComponents— emitted on-chain since the deploy block. - Off-chain telemetry sinks (
DEMAND_LOG/COMPETITION_LOG) — capturing now, because they are unreconstructable retroactively (I7).
inflexion-arb-sepolia), so every history/aggregate surface is served live via the hosted API — the contracts already emit every event the dataset needs, and the on-chain moat dataset begins at the redeploy block 274081134 (the subgraph startBlock). Graceful degradation remains a design property: if SUBGRAPH_URL were unset, each such surface would return a typed ApiPending envelope naming the exact route + GraphQL query it is served from, so history would degrade to a typed pending state, never an error. See state and limits and status caveats.- 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.
OracleManager treats sequencerFeed == address(0) as skip-check. Why it is safe here: it is a testnet with no sequencer SLA to enforce. Mitigation / path forward: this must be set before any mainnet deploy.The live addresses:Network: Arbitrum Sepolia · chainId 421614 · deploy block 274081134 (subgraph startBlock) · deployed 2026-06-05Core protocol
Stylus & libraries
Oracles
Uniswap
Chainlink feeds
Demo tokens / pool / LP
Lifecycle swaps
0xb8bbd684f213d5833886ade7b531a6949d85522249881a2b5d46a5cc76e439c2):- Path A (cvAMM convexity) — swapId 1, LP tokenId 3220 · V0 $270,531.28 · MaxIL $1,669.24 · premium $9.70 (0.58% of MaxIL) · settled payout $148.64 from ConvexityVault.
- Path B (MM routing) — swapId 2, LP tokenId 3221 · MM beat cvAMM ($8.93 vs $13.80) · MaxIL $3,215.65 · MM collateral locked $3,215.65 · settled payout $245.66 from MM collateral.