Skip to content

Deployment

Capped futures run on Solana mainnet and settle in real USDC. This page lists the deployment’s identities, so you can confirm that a transaction, a tool or an explorer link refers to it. The programs have not been audited.

Read these values from the futures API’s GET /v1/config when your code runs, and compare them with this page, instead of copying them into code. petri status checks them against the chain.

Field Value
Cluster Solana mainnet
Genesis hash 5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d
Futures program Bvp9kiRtJ7dT8unxP4Da39gv2eXDLEHLpcDfzcEuRKMu
Oracle program 45YCerssGjg2M29RFc9D4fAJh7dfFpMJ3ZcZtaTnRXRS
Governance controller 8fhNi6QHU5TYNhoPDM4vs89ZBztnpxp3LnBXRgkBVKtx
USDC mint EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v, 6 decimals
Futures API https://api.amoeba.farm
Browser RPC gateway https://api.amoeba.farm/rpc
Web app https://amoeba.farm

The treasury maker’s key, the Earn vault and the sponsor (the fee payer of sponsored transactions) are in /v1/config (treasury, sponsor) and /v1/earn (vault.address).

Each index has one market per monthly expiry. GET /v1/markets lists the current markets, with each one’s address, oracle period, vault, grid and lot size; GET /v1/markets?all=1 adds the markets that have expired and left the list. A market takes trades only once its oracle period is Live.

Amoeba’s markets are created with a grid of 0 to 200 index points, one point per step, and k = 10,000 atoms: a lot pays $0.01 per index point. Each market’s own values are in its market account and in GET /v1/markets/:market (grid, k, stepValue, lotUsdPerPoint); read them from there.

The oracle program and the futures program are both upgraded through the governance controller 8fhNi6QHU5TYNhoPDM4vs89ZBztnpxp3LnBXRgkBVKtx: it holds the upgrade authority of every Amoeba program on mainnet (each program’s upgrade authority is a target address of the controller). A council of five seats runs the controller, and three approvals pass a proposal, which then waits out a review period and a delay before it executes. There is no other upgrade key.

Every futures instruction passes the program’s governance gate as a read-only account, with the gate’s epoch. The program rejects the instruction if the gate is frozen or the epoch is stale. The futures API and Petri bind the current epoch before you sign, so a transaction prepared before a governance action may fail afterwards; prepare it again.

The same council creates markets and can settle a market whose oracle period has not settled, any time after its expiry. See Market lifecycle.

GET /v1/config returns, among other fields:

Field Meaning
cluster, genesisHash The chain the API serves.
rpcUrl, wsUrl The deployment’s public RPC endpoints, or null.
programs.futures, programs.oracle The futures and oracle programs.
treasury The treasury maker’s trader key.
usdcMint, usdcDecimals The USDC the markets settle in.
sponsor The fee payer of sponsored transactions.
governanceController The controller program and the programs it gates.
oracleReleaseTag The oracle’s release profile.

The oracle documents (/v1/oracle/*) carry a protocol object with the oracle’s programId, cluster, releaseTag and releaseCommit.

Petri’s default production profile uses this deployment: the futures API above and Solana’s public mainnet RPC, https://api.mainnet-beta.solana.com. It takes the program addresses from /v1/config and refuses an API that names another cluster, other programs or another controller than the ones on this page; a deployment manifest you pass with --deployment is used as given. Before it signs, it checks the RPC’s genesis hash and the programs. Petri needs a full RPC node, not the browser RPC gateway: see Use your own RPC. Its release for Solana mainnet is coming. See Petri CLI.

This section is for developers. Nothing in it applies to trading on mainnet.

  • Without spending anything on mainnet. Reads, POST /v1/quote, POST /v1/tx/quote-prepare and POST /v1/tx/prepare sign nothing and move nothing: you can prepare a transaction, decode it and run your checks without submitting it. petri quote prices an order the same way, and Petri’s oracle writes take --simulate.
  • Petri’s dev profile. --profile dev (also localnet), PETRI_PROFILE=dev or petri config set profile dev points Petri at a local chain: the futures API at http://127.0.0.1:4500 and the validator’s RPC at http://127.0.0.1:8899. It trusts the program addresses that API’s /v1/config names, or a deployment manifest you pass with --deployment. --api and --rpc (PETRI_API_URL, PETRI_RPC_URL) override those addresses as in production. A saved rpc or api setting applies in every profile, so reset it when you switch. petri config reset profile returns to production, and petri config show and petri status show which profile is in use. A development build of Petri starts in the dev profile.
  • Development builds. Amoeba tests its programs, the futures API and Petri on its own local validator, with test USDC from its own mint. Only development builds have a test-USDC faucet: the API’s POST /v1/faucet and petri faucet. Release builds, the ones that run on mainnet, have neither: the route answers 404 and the command does not exist. A development build’s /v1/config reports cluster "localnet" and a faucet object.
  • Legacy Earn pools. Before the Earn vault, the development chain had per-market Earn pools. The pool and lp fields, the poolWithdraw action and the pool, poolDeposit, poolWithdraw and earnMigrate events serve their exit there. Mainnet has no pools: those fields are null, and the mainnet futures program refuses every pool instruction.
  • Keep the identities apart. A local chain has its own genesis hash and program addresses. Petri and the API check the genesis hash, so a tool set up for a local chain refuses mainnet and the other way round. Never reuse a local chain’s key files or settings for mainnet.