Constants Reference

Every named constant exposed by the Fora protocol. If you're building a bot, indexer, or off-chain analytics, these are the numbers you encode.

Economic

Constant Value Meaning
PROTOCOL_FEE_BPS 30 Taker fee in basis points (0.30%). Charged on every fill — swaps and crossing limit orders. Collected on-chain into the per-mint fee_vault.
MAKER_REBATE_BPS 10 Rebate to the maker, in basis points (0.10%). Funded out of the taker's protocol fee. Net protocol take is 20 bps.
GAS_DEPOSIT_LAMPORTS 5_000 Lamports deposited into the global account on every global order. Returned when the order is filled, cancelled, expired, or evicted. Economic disincentive to spam.

Resolution

Constant Value Meaning
GIRARD_MIN_FILLS 10 Minimum distinct-slot fills required for a Vibe market to resolve via TWAP. With fewer fills the market resolves as SPLIT (both sides at $0.50). See Vibe markets.
NO_EXPIRATION_LAST_VALID_SLOT 0 Sentinel for orders with no expiration — last_valid_slot = 0 means the order is good-til-cancel.

Account sizing

Fixed sizes of the major account types. Useful when sizing rent exemption calculations or off-chain Borsh deserializers.

Constant Bytes
PREDICTION_MARKET_STATE_FIXED_SIZE 296
MARKET_FIXED_SIZE 256
GLOBAL_FIXED_SIZE 96
MARKET_BLOCK_SIZE 80
GLOBAL_BLOCK_SIZE 64

The Manifest red-black-tree overhead is 16 bytes per block, so RestingOrder and ClaimedSeat payloads are MARKET_BLOCK_SIZE - 16 = 64 bytes each. GlobalTrader and GlobalDeposit payloads are GLOBAL_BLOCK_SIZE - 16 = 48 bytes each.

Capacity

Constant Value (mainnet) Value (test)
MAX_GLOBAL_SEATS 999 4

Hard limit on global seats per global account. Sized so the global account never exceeds Solana account limits before the cap is hit, but generous enough that it really only matters as anti-spam.

Discriminants

The leading 8 bytes (u64) of every account, used to identify the account type when deserializing.

Constant Value ASCII
PREDICTION_MARKET_DISCRIMINANT 0x50524544_4d4b5400 "PRED_MKT" (null-terminated)
MARKET_FIXED_DISCRIMINANT 0x464F5241_4D524B54 "FORAMRKT"
GLOBAL_FIXED_DISCRIMINANT 0x464F5241_474C424C "FORAGLBL"

When parsing an account, check the first 8 bytes against these values before deserializing the rest.

Privileged authorities

Pubkeys that hold protocol-level privileges. These rotate — always re-check the source if you're hardcoding them into off-chain tooling.

Constant Privilege
KALSHI_ORACLE_AUTHORITY Can resolve markets using the Kalshi Oracle mechanism. Held by the Kalshi Oracle service signer.
MARKET_MAKER_AUTHORITY Cannot be evicted from the global account. Held by the Fora market maker.

Both addresses are inlined in programs/fora-markets/src/state/prediction_market_state.rs lines 85–92. Don't copy them into your own code — read them from the on-chain program if you need them, or use the constants directly via the SDK.

Source

All constants come from one of: