Deployment
Environments
Local, Fuel testnet, and Fuel mainnet use separate contract IDs, native asset IDs, D1 databases, R2 buckets, oracle keys, and Cloudflare Worker environments. Mainnet transaction controls remain disabled in both API configuration and UI until release approval.
Current testnet deployment
config/deployments.json is canonical. The currently referenced fresh deployment supports valueless test transactions. Its configuration flag remains disabled so deployment tooling cannot treat it as a release-ready network. It uses:
- TestAssets:
0x56e00d1b27528cbaf0050ebd8e7fe85280eeb3562fa1a9a88e2e3cd9799e3db5 - Vault:
0x24bdab8bfd9c99a90c71e07da9b0ba2f706914d5b3d84b05fd01872725dc64c5 - BondMarket:
0xe1ecc493140246212a41a307001ad0e32470e322770dbad6f194fc2b7e27d009 - tFUEL:
0x375178f2c1ef7f63524e6693c5ef44a0738a787ca6a392e08ccd021d9ce5bcd2 - tstFUEL:
0x3a48ed1a9fcbff66ea96c87491922e183332cbfe8ec6ffb42c6b2427ba6f92d7 - tUSDC:
0xac438b82334cc5649d48816fc33908df51d3e274204d051948a8df5bfd8069f5 - Deployment block:
0x45dc13b - Verified reserve: exactly
1_000_000_000_000raw tUSDC - Configuration status:
enabled: false
The app, Oracle Worker, API Worker, and indexer reference these IDs. Older immutable testnet contracts remain on-chain but are no longer referenced. See testing status for completed and pending smoke tests.
Testnet order
- Run
bun run contracts:testandbun run test:integrationwith the Fuel SDK-compatible toolchain (forc 0.68.1,fuel-core 0.43.1). - Generate isolated deployment wallets with
bun run wallets:generate. Secrets remain in ignored.secrets/files and testnet keys are never reused on mainnet. - Fund only the testnet deployer with base ETH from the official Fuel faucet.
- Run
bun run contracts:deploy:testnet. It deploys valueless tFUEL, tstFUEL, and tUSDC, then Vault and BondMarket, initializes both, and deposits exactly 1,000,000 tUSDC into the Vault reserve. - Verify the reserve balance and generated contract/asset IDs before enabling the app.
- Configure the Oracle Worker with the O2 testnet feed
0x7ab771b983bec88a0f7296f55d67e033cdfd40d114fe0f26f3bf1534cfbabf35and its live fFUEL source asset0x43eebd58e837c2e8fa94f1b2db1268175c551b5b1bf41a59fafc4f2c69ab7dc2. Keep the destinationFUEL_ASSET_IDset to Fuel Earn tFUEL; these IDs are intentionally different. Configure the API Worker, then enable the direct wallet-to-contract test-asset faucet. - Run deposit, transfer, list, cancel, buy, early-unbond, maturity, pause, and reconciliation smoke tests.
Local oracle verification
bun run test:oracle:live validates current testnet and mainnet O2 events. Run bun run worker:oracle for the signed testnet Worker, or bun run worker:oracle:mainnet for unsigned local mainnet price reads. The mainnet profile uses feed 0x2f809dbbcf785b897fbdb2f68bd405574e89deac9edbd2104e7e32cc6a5d75f7 and native FUEL 0x27821a5432b60fb3e70c64d0a612c2c86218c1088dd0f0f1b0dd6ae5ae17bd5b. It intentionally omits a Vault ID, domain, and signer, so /oracle/quote returns unavailable.
Mainnet gate
Do not deploy or enable valuable deposits without:
- independent Sway audit
- full Fuel-node integration suite
- official FUEL/stFUEL/USDC IDs
- approved stFUEL exchange-rate source
- funded USDC obligations
- strategy allowlist and coverage policy
- manager multisig and signer rotation drill
- legal approval
- monitoring and incident runbook
Never reuse testnet private keys or database contents on mainnet. The test-assets contract and its valueless assets must never be deployed or accepted on mainnet.