For the complete documentation index, see llms.txt. This page is also available as Markdown.

Mainnet Checklist

TL;DR ksUSD is not on mainnet. The hard gate is an external audit, which is not yet booked. Everything else — the program, the keeper, the fork proofs — is done. One program, one vault, one mint.

This page is the inventory of what is and is not complete. To execute a launch, follow the runbook — the single ordered path, with the key ceremony and a rollback plan per stage.


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:

Trigger
Action

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 Idle the permissionless settle crank does that, so the buffer really is always open. In Normal mode only attest_nav does, and if it stops, every user path — deposit, queued withdrawal, and instant withdrawal alike — reverts NavStale 30 minutes later. settle auto-pauses the vault after 2 hours of this, which is what re-opens the permissionless emergency_close path back to Idle. 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.


Last updated