Mainnet Checklist
Pre-deployment (v1). The perp venue is Phoenix Perps (Ellipsis Labs), USDC margin via Ember, integrated by on-chain CPI (Rise SDK). Before it can post margin, the vault's trader PDA needs its CAN_DEPOSIT/CAN_WITHDRAW capabilities enabled. Our contact at Phoenix has agreed to enable them once the program is deployed to mainnet, so this closes after deploy rather than before it. It is requested at Stage 6 and confirmed at Stage 8, and the deposit cap stays at the operator's own seed until the hedge is on — outside money does not arrive before the position it is meant to be in. The self-serve onboarding endpoint still reports itself gated, which is why the agreed path runs through the contact.
Phase 1 — Engineering (in progress)
Phase 2 — Audit
Phase 3 — Mainnet deployment
The program deploy itself is one script, run via npm run mainnet:deploy, which builds, preflights, deploys, verifies the on-chain binary against the local build, writes the IDL, and records the deploy. Run --check first (no transactions), and --rehearse against devnet to walk the identical path.
Phase 4 — Private beta
Phase 5 — Public launch
Rollback / circuit-breaker plan
If any of the following occur in the first 90 days post-launch:
Audit reveals a missed critical issue
set_pause(true) immediately; if non-recoverable, init_wind_down and coordinate redeploy under new program ID
NAV drawdown exceeds 3% within a week
emergency_close + set_pause(true); investigate before resuming
Phoenix or Kamino announce a critical incident
set_pause(true) until the dependency is verified safe
Pyth feed instability for > 1h
set_pause(true); instant withdrawals stay open
LST depeg auto-trip
Vault is already paused by settle; admin investigates and either unpauses or emergency-closes
attest_nav stalls > 2h in Normal mode
Vault is already paused by settle (NavAttesterStalled); restart the NAV duty, or emergency_close to unwind to Idle
While paused, instant withdrawals from the liquidity buffer remain available — but they require a NAV attested within the last 5 minutes, so they stay open only as long as something is refreshing NAV. In
Idlethe permissionlesssettlecrank does that, so the buffer really is always open. InNormalmode onlyattest_navdoes, and if it stops, every user path — deposit, queued withdrawal, and instant withdrawal alike — revertsNavStale30 minutes later.settleauto-pauses the vault after 2 hours of this, which is what re-opens the permissionlessemergency_closepath back toIdle. The duty is now implemented (Phase 1), but do not enable Normal mode until you have watched it run for a full day — in Normal mode it is the only thing standing between the vault and every user path freezing.
Related
Launch runbook — the ordered path this page inventories
Last updated