PDA Reference
Every Program-Derived Address (PDA) used by the Fora program. Each entry shows the seed pattern as it appears in the Rust source.
All PDAs are derived with
Pubkey::find_program_address(seeds, &fora_program_id). The trailingbumpbyte appended byfind_program_addressis stored on the relevant account for canonical re-derivation.
Prediction Market
The account holding all per-market state — market_state, winning_outcome, supplies, TWAP accumulators, references to the YES and NO Manifest markets, etc.
let (prediction_market_pda, _bump) = Pubkey::find_program_address(
&[PREDICTION_MARKET_SEED, metadata_hash.as_ref()],
&fora_program_id,
);
| Component | Value |
|---|---|
| Seed const | PREDICTION_MARKET_SEED = b"prediction_market" |
| Variable seed | metadata_hash: [u8; 32] — SHA-256 of the canonical metadata URI |
| Bump location | PredictionMarketStateFixed.bump |
The market PDA is keyed by metadata_hash, not by ticker. The ticker is metadata; the hash is the canonical identity.
YES Mint
Token-2022 mint for the YES side of the market.
let (yes_mint_pda, _bump) = Pubkey::find_program_address(
&[YES_MINT_SEED, prediction_market_pda.as_ref()],
&fora_program_id,
);
| Component | Value |
|---|---|
| Seed const | YES_MINT_SEED = b"yes_mint" |
| Variable seed | The market PDA |
| Bump location | PredictionMarketStateFixed.yes_mint_bump |
NO Mint
Token-2022 mint for the NO side of the market.
let (no_mint_pda, _bump) = Pubkey::find_program_address(
&[NO_MINT_SEED, prediction_market_pda.as_ref()],
&fora_program_id,
);
| Component | Value |
|---|---|
| Seed const | NO_MINT_SEED = b"no_mint" |
| Variable seed | The market PDA |
| Bump location | PredictionMarketStateFixed.no_mint_bump |
Collateral Vault
The per-market token account that holds USDC backing minted YES + NO tokens. 1 USDC sits here for every (1 YES + 1 NO) outstanding.
let (collateral_vault_pda, _bump) = Pubkey::find_program_address(
&[
COLLATERAL_VAULT_SEED,
prediction_market_pda.as_ref(),
collateral_mint.as_ref(),
],
&fora_program_id,
);
| Component | Value |
|---|---|
| Seed const | COLLATERAL_VAULT_SEED = b"vault" |
| Variable seeds | The market PDA + the collateral mint (USDC on mainnet) |
Note the seed string is "vault", not "collateral_vault". Earlier docs had this wrong.
Fee Vault
A single global token account per collateral mint that collects all protocol fees from taker fills.
let (fee_vault_pda, _bump) = Pubkey::find_program_address(
&[FEE_VAULT_SEED, quote_mint.as_ref()],
&fora_program_id,
);
| Component | Value |
|---|---|
| Seed const | FEE_VAULT_SEED = b"fee_vault" |
| Variable seed | The quote mint (USDC) |
One fee vault per quote mint — not per market. All fees across all markets collateralized by the same mint accrue here.
Burn Account
Token account used to permanently retire winning/losing tokens during settlement.
let (burn_account_pda, _bump) = Pubkey::find_program_address(
&[BURN_ACCOUNT_SEED],
&fora_program_id,
);
| Component | Value |
|---|---|
| Seed const | BURN_ACCOUNT_SEED = b"burn" |
| Variable seed | None — singleton |
Cleanup Authority
PDA that can sign cleanup instructions for evicting orders and closing Manifest seats during the CLEANED lifecycle phase. See Market Lifecycle.
let (cleanup_authority_pda, _bump) = Pubkey::find_program_address(
&[CLEANUP_AUTHORITY_SEED],
&fora_program_id,
);
| Component | Value |
|---|---|
| Seed const | CLEANUP_AUTHORITY_SEED = b"cleanup_authority" |
| Variable seed | None — singleton |
Manifest Global (inherited)
Manifest's per-mint global state. Used by the cross-market matching path. Not under the Fora program ID — derived against the Manifest program ID.
let (global_state, _) = Pubkey::find_program_address(
&[b"global", quote_mint.as_ref()],
&manifest_program_id,
);
let (global_vault, _) = Pubkey::find_program_address(
&[b"global-vault", quote_mint.as_ref()],
&manifest_program_id,
);
| PDA | Seeds | Program |
|---|---|---|
| Global state | [b"global", quote_mint] |
Manifest |
| Global vault | [b"global-vault", quote_mint] |
Manifest |
Quick reference
| PDA | Seeds | Program | Variable |
|---|---|---|---|
| Prediction Market | ["prediction_market", metadata_hash] |
Fora | metadata_hash |
| YES Mint | ["yes_mint", market_pda] |
Fora | market_pda |
| NO Mint | ["no_mint", market_pda] |
Fora | market_pda |
| Collateral Vault | ["vault", market_pda, collateral_mint] |
Fora | market_pda + collateral_mint |
| Fee Vault | ["fee_vault", quote_mint] |
Fora | quote_mint |
| Burn Account | ["burn"] |
Fora | none |
| Cleanup Authority | ["cleanup_authority"] |
Fora | none |
| Manifest Global State | ["global", quote_mint] |
Manifest | quote_mint |
| Manifest Global Vault | ["global-vault", quote_mint] |
Manifest | quote_mint |
Source
- Seed constants:
programs/fora-markets/src/state/prediction_market_state.rslines 9–14, 134 - Derivation sites:
programs/fora-markets/src/program/instruction_builders/— one file per instruction - Manifest globals: built on
@cks-systems/manifest— see Manifest's own docs forglobal/global-vaultseed conventions