Backtesting and Validation
This page reports the current validation evidence for Cardinal's launch model: historical replay, stress simulation, product-specific test vectors, charting-tool parity, and commercial user discovery.
Scope
| Dimension | Current launch scope |
|---|---|
| Products | Carry Perp and Negative Rate Hedge |
| Markets | sUSDe<>USDT and wstETH<>WETH |
| LP architecture | LP-intermediated pools, one pool per market |
| Market data | Aave V3 historical lending, borrow-rate, and loop-yield data |
| Product charting data refresh | Through June 3, 2026 |
Launch Parameters
These constants are fixed at launch. Values are shown per market; the evidence that justifies each group follows the table.
Negative Rate Hedge
| Parameter | sUSDe | wstETH |
|---|---|---|
Premium floor breach_base | 0.249% | 0.218% |
Premium load premium_load | 0.50 | 0.50 |
| Premium basis | expected negative-carry claims × (1 + premium_load) / 0.90 | expected negative-carry claims × (1 + premium_load) / 0.90 |
Coverage leverage L | 1x–10x | 1x–10x |
| Premium routing (LP / treasury) | 90% / 10% | 90% / 10% |
| Payout ramp to full coverage | 30 days | 30 days |
Each tick the buyer pays the actuarially-fair cost of the coverage they hold —
expected negative-carry claims × (1 + premium_load) / 0.90 — which scales with coverage leverage
L and is charged continuously while the policy is open (breach_base × L × (1 + premium_load) / 0.90 is a calm-window floor reference; breach_base is set per market from how often that
market's loop carry has historically gone negative). The previous current-carry
band is not used as a hard launch pricing cap because it can underprice policies
exactly when negative-carry claims are being generated. Pricing the premium to
expected claims plus a load keeps the LP underwriting margin positive after the
90/10 LP/treasury split. premium_load is defined LP-net: with premium_load = 0.5 the LP retains a +50% margin over expected claims after the 10% treasury
routing, so the buyer-gross premium is expected claims × (1 + premium_load) / 0.90. In the Track C historical replay the LP's net
insurance result was positive in both markets (+2.31% sUSDe / +0.93%
wstETH). Coverage leverage, the 90/10 routing, and the 30-day ramp were
exercised by nine launch test vectors (tv10–tv18), all passing with zero
invariant breaches — i.e. the policy accounting never broke its rules: a
policy's payout buffer never went negative, cumulative payouts never exceeded
the yield credited into that buffer, and gas tanks never went negative.
Carry Perp
| Parameter | sUSDe | wstETH |
|---|---|---|
| Global notional cap | $76.8M | $322.6M |
Shadow-drawdown scale s_L | 65 | 65 |
| Launch top tier | 5000x | 15000x |
| Performance fee | 35% | 35% |
| Liquidation triggers | equity < 5% of deposit, or shadow drawdown ≥ deposit | (same) |
| Entry fee | max(0, carry) × notional / (365.25 × 24) | (same) |
Build Plan V3 sets s_L = 65 at launch for both markets (raising wstETH from the
PR38 60 to match sUSDe). The launch-tier calibration establishes the kill gradient
— every position eventually liquidates (a 2–3 day median life at the top tier), with
the LP net positive per cycle.
LP pool
| Parameter | sUSDe | wstETH |
|---|---|---|
| Effective loop leverage | 3.05× | 4.34× |
| Pause / resume threshold (NAV drawdown) | 10% / 3% | 10% / 3% |
Loop leverage is the Aave V3 carry loop the pool runs on the LP's behalf; at these
settings the historical replay earned a mean loop APR of 10.97% / 5.16%. The
pool auto-deleverages if peak-to-trough NAV falls past 10% and redeploys once it
recovers to within 3%.
Executive Summary
| Area | Result |
|---|---|
| LP return view | Integrated launch-scope LP ROE = loop yield (gross) + NRH (net of claims) + Carry Perp genuine cash edge: sUSDe 11.33%, wstETH 7.02%. Carry Perp uses the LP's direct synthetic cash P&L (deposit kept on liquidation; the accrued carry and perf fee inside the captured equity are paper MTM, never cash). Legacy Track C decomposition (7.44% / 3.13%) retained below for provenance. |
| Carry Perp calibration | 5,000 trials per launch tier; day-2 liquidation: 68.80% sUSDe and 41.80% wstETH; LP net per $100 user deposit: $159.95 sUSDe and $186.59 wstETH |
| Negative Rate Hedge validation | 9 launch-scope test vectors passed; 9 replay rows produced 0 simulator-enforced invariant breaches; 144 pricing-study runs produced 0 invariant-breach forms |
| Stress simulation | 11 scenarios x 20 trials x 2 markets; historical-bootstrap rows show 0% breach rates; depeg, drift, and sustained-negative-carry rows identify launch-control cases |
| Commercial user discovery | Direct institutional conversations indicate approximately $10M average covered position size, 6 months to 2 years position duration, and 20 immediately addressable targets |
Confidence levels classify current evidence coverage and remaining implementation work.
| Confidence area | Current confidence | Basis | Remaining validation |
|---|---|---|---|
| Historical replay outputs | Medium for launch-scope LP projection, high for source artifact integrity | committed replay artifacts, schema checks, hash verification, and per-pool result tables | fresh Build Plan V3 two-product replay and final benchmark ratification |
| Product accounting invariants | High for launch-scope simulator cases | 9/9 Negative Rate Hedge test vectors passed; 0 invariant breaches across replay rows | contract-level implementation tests |
| Carry Perp launch calibration | High for replayed launch tiers | 5,000 trials per tier and positive LP net per cycle in both launch markets | live rollout monitoring against waitlist demand and LP capacity |
| Stress characterization | Medium-high for scenario measurement | 440 total scenario trials across both markets and explicit breach-rate reporting | production control validation for depeg, drift, and emergency paths |
| Production launch readiness | Medium until pre-launch items close | replay, stress, simulator, and user-discovery evidence is available; implementation evidence remains open | hourly production carry/TWAP validation, external audit, governance parameter bounds, operational controls, user disclosures, force-close-on-Emergency logic, wstETH depeg-ladder parameterization |
Validation Summary
| Evidence surface | Count / sample | Result recorded |
|---|---|---|
| Historical LP replay | 2 launch pools | 0 historical LP principal breaches |
| Stress simulation | 11 scenarios x 20 trials x 2 markets | breach rates reported by scenario below |
| Carry Perp calibration | 5,000 trials per launch tier | positive LP net per cycle in both launch markets |
| Negative Rate Hedge test vectors | 9 launch-scope vectors | 9 pass / 0 fail |
| Negative Rate Hedge replays | 9 replay rows | 0 simulator-enforced invariant breaches |
| Pricing study | 144 pricing runs | 0 invariant-breach forms |
| User discovery | Direct institutional conversations | $10M average covered position size discussed; 20 addressable targets identified |
Historical LP Replay
Historical replay runs the launch configuration against observed Aave V3 rate paths. ROE is annualized LP return on equity. The integrated LP return is the sum of three separate cash streams, each counted exactly once:
- Loop yield (gross) — carry the LP earns on its own deployed capital.
- Negative Rate Hedge — premium net of claims (cost-covering, LP-net after the 90/10 split).
- Carry Perp — genuine cash edge — recomputed from the LP's direct synthetic cash P&L, not a broad fee fraction: the LP keeps a liquidated user's deposit and returns the equity of the rare horizon survivors. A position's accrued carry and its perf fee live inside that equity and are the LP's short-side paper MTM (the LP is counterparty to the user's leveraged carry bet); that MTM is extinguished at the kill and is never LP cash, so it is excluded. It is also not loop carry, so there is no loop double-count. At ~100% liquidation the genuine cash ≈ the forfeited deposit.
This is why the combined is neither the naive sum of the gross bars (which would
double-count the paper MTM) nor a loop-net subtraction (which over-removes loop
carry the LP keeps). The mean loop APR (10.97% / 5.16%) is the raw loop
return over the Track C window; the launch loop leg below is the charting-tool
rolling-year loop yield.
| Pool | Venue days | Replay days | Paused days | Mean loop APR | Integrated LP ROE | Max drawdown | LP principal breaches |
|---|---|---|---|---|---|---|---|
| sUSDe | 597 | 297 | 0 | 10.97% | 11.33% | -1.13% | 0 |
| wstETH | 1,111 | 811 | 0 | 5.16% | 7.02% | -0.45% | 0 |
Integrated LP ROE by stream (annualized contribution). Carry Perp is the genuine
cash edge = the Carry Perp anchor × the direct-cash ratio genuine_cash / (fee + capture), where genuine_cash is the deposit kept on liquidation net of survivor
payouts (the accrued carry and perf fee inside the captured equity are paper MTM):
sUSDe 3.17% × 0.625 = 1.98%; wstETH 1.83% × 0.536 = 0.98%.
| Pool | Loop yield (gross) | Negative Rate Hedge | Carry Perp (genuine cash) | Integrated LP ROE |
|---|---|---|---|---|
| sUSDe | 7.71% | 1.63% | 1.98% | 11.33% |
| wstETH | 4.32% | 1.72% | 0.98% | 7.02% |
Legacy Track C anchor decomposition is preserved below for provenance. It uses older Track C product anchors and excludes the non-launch perpetual-spread-options line from launch scope. Full-config is shown only for reference.
| Pool | Track C loop-net leg | Negative Rate Hedge | Carry Perp | Transitional launch-scope estimate | Perpetual spread options (non-launch) | Full-config ROE |
|---|---|---|---|---|---|---|
| sUSDe | 2.62% | 2.31% | 2.51% | 7.44% | 16.97% | 24.41% |
| wstETH | 1.29% | 0.93% | 0.91% | 3.13% | 7.17% | 10.30% |
This applies the 2026-06-08 decisions: NRH premium_load is LP-net after the
treasury split, NRH capacity is the entitlement-share rule (not the Track C
operating anchor), and the Carry Perp leg is the genuine cash edge (paper MTM
stripped). The integrated engine sums the three streams once each, so the
loop↔Carry-Perp double-count and the loop-net over-subtraction are both resolved.
A full two-product replay would still tighten the Carry Perp genuine-cash fraction
and the (negligible at ~100% liquidation) horizon-survivor adjustment.
Pool P&L below is full-config (it includes the non-launch perpetual-spread line); the transitional launch-scope pool P&L is the Negative Rate Hedge + Carry Perp + loop-yield columns.
| Pool | Cumulative written | Outstanding at end | Pool P&L (full-config) | Treasury accrued |
|---|---|---|---|---|
| sUSDe | $326.8M | $96.8M | $1.99M | $196.9K |
| wstETH | $874.9M | $82.8M | $2.29M | $222.3K |
| Pool | Perpetual spread P&L (non-launch) | Negative Rate Hedge P&L | Carry Perp P&L | Loop-yield P&L |
|---|---|---|---|---|
| sUSDe | $1.38M | $187.9K | $203.9K | $213.5K |
| wstETH | $1.59M | $206.4K | $201.4K | $286.8K |
Carry Perp Calibration
Window note. These figures come from the launch charting-tool calibration: the Carry Perp Monte Carlo runs on each market's realized loop carry through 2026-06-03, at the Build Plan V3 launch
s_L = 65for both markets. They match the same configuration the interactive charting tool exposes (link above), so the numbers here are what reviewers see live. The carry series is the realistic loop spread (lst_yield − borrow), which includes the historical negative-rate days.
Carry distribution inputs:
| Market | Data window | Carry days | Mean carry | Median carry | Min carry | Positive-day share | Inactive negative-entry share |
|---|---|---|---|---|---|---|---|
| sUSDe | 2024-07-28 to 2026-06-03 | 676 | 1.00% | 0.82% | -21.19% | 69.82% | 30.18% |
| wstETH | 2023-03-01 to 2026-06-03 | 1,191 | 0.50% | 0.43% | -19.52% | 92.36% | 7.64% |
Launch-tier simulation outputs:
| Market | Launch tier | s_L | Trials | Total liquidation | Day-2 liquidation | Median liquidation | Crossed 2x before liquidation |
|---|---|---|---|---|---|---|---|
| sUSDe | 5000x | 65.0 | 5,000 | 100.00% | 68.80% | 2 days | 10.44% |
| wstETH | 15000x | 65.0 | 5,000 | 100.00% | 41.80% | 3 days | 18.88% |
s_L = 65 is held common across both markets per Build Plan V3. The PR38-era
≥ 60% day-2 liquidation aspiration is met at sUSDe (68.80%) but not wstETH
(41.80%, 3-day median); wstETH's slower kill gradient is the accepted
consequence of the common V3 s_L, not a calibration failure — every position
still fully liquidates and the LP is net positive per cycle.
LP economics per $100 user deposit, over a position's full lifecycle (a 2–3 day
median to liquidation), from the 5,000-trial calibration on each market's carry
distribution shown above:
| Market | LP fee | LP liquidation capture | LP net |
|---|---|---|---|
| sUSDe | $21.24 | $138.70 | $159.95 |
| wstETH | $30.38 | $156.21 | $186.59 |
Actor Outcomes
Projected profit/loss by actor across three regimes. LP and Carry-Perp cells are drawn from the replay / stress / calibration tables; the Hedger cells use the current cost-covering premium and the replay claim rows.
| Actor | Benign (rates stay positive) | Negative-rate event | Severe depeg |
|---|---|---|---|
| LP | integrated launch-scope ROE (loop gross + NRH net + Carry Perp genuine cash): +11.33% / +7.02% | +10.15% sUSDe / -2.31% wstETH annual ROE (full-config stress) | breach risk (-6.29% wstETH at a 20% depeg) |
| Hedger | pays the streaming premium, collects ~nothing → net cost ≈ premium | the policy pays out → net gain | orderly settlement, forced-close, 0 LP breaches |
| Carry-perp user | negative expected value (the LP captures $159.95 / $186.59 per $100 deposit); ~10% (sUSDe) to ~19% (wstETH) ever peak above 2x before liquidation | rational users are not expected to open new Carry Perp positions into negative carry | unaffected — separate margin |
Hedger sizing example. In the current sUSDe charting replay, a
$1M-notional policy at L = 5 prices near $28.6k/yr under the
LP-net expected-claims × (1 + premium_load) / 0.90 formula. In a mature 30-day stretch where
carry sits near −2%, that same policy receives on the order of $8k in claims
before buffer constraints — so the buyer is net-positive over the event and
net-cost in calm periods, which is the hedge working as intended.
Stress Simulation
Stress simulation parameters:
| Parameter | sUSDe | wstETH |
|---|---|---|
| Scenarios | 11 | 11 |
| Trials per scenario | 20 | 20 |
| Days per trial | 800 | 800 |
| Scenario trials | 220 | 220 |
| Pause threshold | 10% | 10% |
| Resume threshold | 3% | 3% |
| R1 percentile | 90% | 90% |
| R5 fee routing | 20% | 20% |
| R5 target fraction | 15% | 15% |
Breach rate is the share of the 20 trials in a scenario with at least one LP principal-breach event.
| Scenario | sUSDe mean ROE | sUSDe mean DD | sUSDe breach rate | wstETH mean ROE | wstETH mean DD | wstETH breach rate |
|---|---|---|---|---|---|---|
| historical_bootstrap | 10.81% | -1.98% | 0% | 5.04% | -0.87% | 0% |
| fat_tail_2x | 12.38% | -1.91% | 0% | 5.10% | -0.92% | 5% |
| fat_tail_5x | 17.78% | -1.49% | 0% | 6.27% | -0.77% | 5% |
| fat_tail_10x | 25.95% | -2.26% | 30% | 9.25% | -0.64% | 5% |
| regime_shift_mid | 11.39% | -9.25% | 35% | 5.50% | -4.16% | 20% |
| sustained_neg_carry_30d | 10.63% | -2.29% | 0% | 5.05% | -1.40% | 5% |
| sustained_neg_carry_90d | 10.15% | -1.86% | 0% | -2.31% | -9.08% | 100% |
| sudden_depeg_10pct | 4.50% | -6.67% | 100% | -3.00% | -9.55% | 100% |
| sudden_depeg_20pct | 2.23% | -8.42% | 100% | -6.29% | -12.94% | 100% |
| sudden_depeg_30pct | 0.29% | -9.64% | 100% | -8.92% | -16.54% | 100% |
| slow_drift_180d | 8.11% | -3.47% | 65% | -4.74% | -9.54% | 100% |
Negative Rate Hedge
Launch-scope test vectors:
| Vector | Case | Status | Invariant breaches |
|---|---|---|---|
| tv10 | top-up, no state change | PASS | 0 |
| tv11 | voluntary close returns gas tank | PASS | 0 |
| tv12 | forced close emergency | PASS | 0 |
| tv13 | premium floor / load accounting | PASS | 0 |
| tv14 | cost-covering premium covers expected claims | PASS | 0 |
| tv15 | premium debits through negative-carry periods | PASS | 0 |
| tv16 | perpetual, no rollover at day 180 | PASS | 0 |
| tv17 | lapse on empty gas tank | PASS | 0 |
| tv18 | premium debits during stale oracle | PASS | 0 |
Pricing basis note. The current charting branch prices NRH from expected negative-carry claims times
(1 + premium_load) / 0.90, charged continuously while the policy is open.breach_base(0.249%sUSDe /0.218%wstETH) remains a market-specific floor / calibration reference, but the old current-carry band is retired as a hard pricing cap because it can leave LPs below expected claims after the 90/10 routing split.
Historical replay summary:
| Replay | Days | Requested policies | Admitted policies | Rejected policies | Claims paid | Premium earned | NAV change | Forced closes | Invariant breaches |
|---|---|---|---|---|---|---|---|---|---|
| historical_susde | 676 | 32 | 32 | 0 | $50.9K | $38.3K | +17.84% | 0 | 0 |
| historical_wsteth | 1,220 | 56 | 4 | 52 | $0.0K | $0.0K | -14.64% | 0 | 0 |
Adversarial replay summary:
| Replay | Requested policies | Admitted policies | Claims paid | Premium earned | NAV change | Forced closes | Invariant breaches |
|---|---|---|---|---|---|---|---|
| s1_single_30d | 20 | 20 | $58.2K | $17.6K | +4.01% | 0 | 0 |
| s2_two_30d_6mo_apart | 32 | 32 | $116.8K | $40.0K | +5.30% | 0 | 0 |
| s3_two_30d_1yr_apart | 40 | 40 | $197.5K | $66.5K | +7.67% | 0 | 0 |
| s4_four_30d_stacked | 36 | 36 | $137.4K | $46.7K | +2.78% | 0 | 0 |
| s5_sustained_12mo | 40 | 24 | $62.5K | $14.9K | -0.73% | 2 | 0 |
| s6_depeg_crisis_orderly_settlement | 24 | 20 | $62.0K | $13.6K | -0.25% | 7 | 0 |
| s7_emergency_tier4_force_close | 20 | 20 | $57.3K | $13.6K | +2.99% | 3 | 0 |
Replay totals:
| Replays | Requested policies | Admitted policies | Claims paid | Premium earned | Forced closes | Invariant breaches |
|---|---|---|---|---|---|---|
| 9 | 300 | 228 | $742.7K | $251.2K | 12 | 0 |
Pricing study note:
The May 27 pricing study remains useful as historical mechanism evidence, but
its variable-band forms are superseded for the premium formula decision. The
current charting branch prices policies from expected negative-carry claims
times (1 + premium_load) / 0.90, then routes premium 90/10 to LP/treasury. Do not use
the old pricing-study "LP ok vs baseline" column as direct underwriting-margin
evidence for the launch formula.
Charting Tool
The full economics — realized loop yield, Carry Perp liquidation behavior, and Negative Rate Hedge premium / buffer / payout — are explorable interactively:
→ cardinal-product-calculator.vercel.app
It runs the launch configuration on Aave V3 data through 2026-06-03 (sUSDe loop
3.05×, USD-denominated; wstETH loop 4.34×, ETH-denominated). Per-market
parameters, coverage tiers, and stress behavior are all adjustable in the UI.
Commercial User Discovery
| Item | Observation |
|---|---|
| Covered position size | Approximately $10M average position size discussed with direct institutional users |
| Position duration | 6 months to 2 years |
| Immediately addressable targets | 20 institutional targets identified |
| Carry Perp rollout mechanism | Waitlist signups during rollout preparation |
Measurement Boundaries
| Result class | Boundary |
|---|---|
| Historical replay | Observed Aave V3 rate paths during the stated windows |
| Stress simulation | Specified scenario parameters and 20 trials per scenario |
| Carry Perp calibration | Launch-tier replay artifacts and 5,000 trials per tier |
| Negative Rate Hedge tests | Launch-scope vectors and replay rows in the referenced artifacts |
| Live deployment | Realized rates, LP participation, user demand, liquidity depth, and production controls |
Evidence Package
| Evidence area | Artifact root |
|---|---|
| Historical LP replay | output/phase4_track_c_historical_2026-04-21/ |
| Stress validation | output/phase4_track_c_combined_2026-04-21/ |
| Carry Perp launch-tier calibration | labs/product_calculator/ and output/product_calculator/data.json (charting-tool MC, s_L = 65) |
| Negative Rate Hedge replay and test vectors | output/negative_rate_hedge_per_policy_2026-05-27/ |
| Negative Rate Hedge pricing study | output/negative_rate_hedge_pricing_study_2026-05-27/ |
| Product charting tool | output/product_calculator/ and labs/product_calculator/ |
Reviewer Commands
python3 labs/benchmarks/check_artifact_schemas.py
python3 labs/benchmarks/verify_participant_econ_v6_artifacts.py
python3 -m unittest tests.test_product_calculator_guardrails