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:
programs/fora-markets/src/state/prediction_market_state.rs— economic, resolution, authorities, account-state discriminant + sizeprograms/fora-markets/src/state/constants.rs— sizing, gas deposit, capacity, Manifest discriminants