↻ FLYWHEEL 2.0 is live on Sepolia. Four contracts, five permissionless routers, one closed profit loop. Everything below is fuzzed, fork-tested, and self-reviewed — not audited.
The Closure Loop
What Changed
FLYWHEEL 2.0 addresses four diagnosed gaps in the original Phase 3–4 design:
- Keep had no yield moat. 3 of 4 strategies (Aave, Compound, Morpho) were generic USDC lending. Users could access the same yield directly — no Keep lockup, no smart contract risk. Fix: Keep is now an ecosystem revenue accumulator, generating proprietary yield from Coil's trading spread and fee discounts.
- veForge votes were theater. Gauge votes shifted capital between strategies with similar base yields, so nobody voted. Fix: Gauge weights now determine Keep's capital allocation to CoilMakerStrategy — a vote is a capital tilt with real yield consequences.
- TARE's peg defense was single-line. The Curve pool was the only peg defense. Fix: The surplus reinvestment loop gives TARE a second line — surplus deployed into Keep → Coil generates fees that refill the surplus.
- Coil needed seeded liquidity. No users, no liquidity, no solvers. Fix: Keep's CoilMakerStrategy is now the primary order flow source, seeded by Coil's own fee revenue.
New Fee Flow
Coil fees (USDC) → CoilFeeRouter
├── keep_bps (0-50%) → Keep vault ★ FLYWHEEL 2.0
├── gauge_bps (0-50%) → veForge voters
└── rest → TARE surplus buffer
TARE stability fees → SurplusSplitter
├── emission_bps (≤30%) → Keep vault ★ WAS: veForge
└── rest → sTARE (savings vault)
Keep vault → CoilMakerStrategy (PRIMARY)
→ Trading spread + fee discount → Keep yield
→ Excess → TARE surplus (reinvests in Coil liquidity)
Strategy Priority (Keep Vault)
The Keep vault now uses a strict priority queue:
- CoilMakerStrategy — always preferred. Deploys USDC into Coil batch-auction orders, earning trading spread (bid-ask) and fee discounts on Keep's own activity.
- CurveTAREStrategy — second priority. Provides liquidity to the TARE/USDC Curve pool, earning swap fees and supporting the peg.
- Aave/Compound/Morpho (fallback) — used only when no internal revenue opportunities exist.
The Flywheel Closure
The actual profit loop that was missing in the original design:
- Coil DEX generates USDC fees from batch-auction settlement.
- CoilFeeRouter splits fees 3 ways:
keep_bpsto Keep vault,gauge_bpsto veForge voters, remainder to TARE surplus buffer. - Keep vault deploys capital to CoilMakerStrategy (priority 0) — its primary yield source.
- CoilMakerStrategy earns trading spread + fee discount from making markets on Coil — proprietary yield no generic lending can match.
- TARE SurplusSplitter sends emission slice (≤30%) to Keep vault, rest to sTARE savers.
- Keep vault routes TARE surplus into Coil markets (via swap + CoilMakerStrategy order flow).
- More Coil volume → more fees → more surplus → more Keep yield → deeper Coil liquidity → loop reinforces.
Core invariant: No vote, keeper, admin, or caller may move a solvent user's collateral, mint on a bad price, or alter live debt. Routers only move value already released or earned — the flywheel turns on earned fees, not printed tokens.
Sepolia Deployments
| Contract | Role | Address |
|---|---|---|
| CoilFeeRouter | 3-way fee split (keep/gauge/TARE surplus) | 0xB620…50F5 |
| SurplusSplitter | TARE surplus → Keep (≤30%) + sTARE | 0xe01C…AFFfa |
| GaugeWeightRouter (R1) | veForge votes steer Keep capital allocation | 0xa4AA…a16C |
| CoilMakerStrategy (C) | Primary market maker — Keep deploys to Coil | 0xEf52…3BaF |
| EmissionRouter (TARE) | Routes TARE emissions to Keep vault | 0x29AA…86d1 |
Key Metrics
- Keep APY from Coil spread: 0% → > lending APY (target — first proprietary yield source)
- veForge voter turnout: ~0% → >10% (target — votes now steer real capital, have yield consequences)
- TARE peg volatility: Buffer-only → Buffer + Keep reinvestment loop (second line of defense)
- Tests passing (all 4 repos): ~550 → ~650+ (with cross-protocol invariants fuzzed across router boundaries)
- Fork-proven yield: 1000 USDC → 1001.94 USDC in one Keep → CoilMaker round trip
Router Architecture
Every connection in the flywheel is a small, permissionless router with exactly one bounded action:
- CoilFeeRouter (A): Reads accumulated USDC fees from Coil, splits into 3 streams. Cannot mint. Cannot access user positions. Can only send already-earned fees.
- SurplusSplitter: Reads TARE surplus balance, splits into sTARE (senior) and emission (junior, ≤30% capped). Cannot alter live debt.
- GaugeWeightRouter (R1): Reads veForge gauge weights. Only adjusts Keep's vault allocation — cannot move user funds.
- CoilMakerStrategy (C): EIP-1271 on-chain maker. Places limit orders on Coil at or above the EMA oracle floor. Cannot be filled below a fair price.
The worst a bad actor can do is leave money on the table — they cannot steal it.