Deployment
Environments
Local, Fuel testnet, and Fuel mainnet use separate contract IDs, native asset IDs, D1 databases, R2 buckets, 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:
0x3a1edfe022d6fec25886be71c414873d3b4ccc493c01170efed30a33819ccf1d - Vault:
0xcc4f48d5e093a3963c75568db696b96e3bce1d37c47199a1cee021061c26754b - BondMarket V2 proxy:
0x6027926f9b9cc77c54378a6b726d83f37544e3123af29dee2df6019d21c41a92 - BondMarket V2 implementation:
0x34f8d436138b23b265afa4a915057c2bba19f867df7c6e02d953b3288b7534b5 - Shared simplified TWAP oracle:
0x2c32b316b19394261f271bdf2ece2756389c2d9351ab50f13d5b3605b5a176f2 - tFUEL:
0x35b4807838ac4087c393a1941a0dd02bb371c7201bb1bfdcd8563da91d060777 - tstFUEL:
0xbe8c4c51d0a3d8f6f782bbc9c21b7f027f2fe3b6fdc070263dc58d07ded0a1de - tUSDC:
0x7d904e99c2f81d3aa58b6fb609b9efc9f03718776badb6a428d4500c34ffa1cf - Deployment block:
0x46b48aa/74139818 - Verified reserve: exactly
1_000_000_000_000raw tUSDC - Configuration status:
enabled: false
The app, API Worker, and indexer reference these IDs. The prior math-vulnerable stack remains on-chain so its six existing positions and escrow can still be settled directly: Vault 0xe95066584ac959d73db1cde5fce0598f65e3a7550e0c0a7a92740a81f03bad75, Market proxy 0x0ee7e48a97f75105d3200141cc0552bd491c366184713f7874b93f0976bc974a, and implementation 0x7e039f6421342fdd5962e86d88b3f501cc3bb1f1079b057a1ae47429dd298ebc. No positions, NFTs, liabilities, or escrow were migrated. 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 twap:deploy:testnet. It deploys fresh hardened test assets, a fresh Vault tied to the shared simplified TWAP oracle, funds its tUSDC reserve, and deploys a fresh V2 market implementation and proxy. - Verify the reserve balance and generated contract/asset IDs before enabling the app.
- Verify the shared oracle's O2 source and external updater health. Configure the API Worker and app with the fresh Vault and market IDs.
- Run deposit, transfer, list, cancel, buy, early-unbond, maturity, pause, and reconciliation smoke tests.
Oracle verification
Run bun run oracle:health:testnet to verify the immutable O2 source, rolling price, sample count, freshness, and external updater health. Fuel Earn does not operate an oracle keeper; prices are read directly from Fuel RPC.
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 external-updater incident 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.