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 trailing bump byte appended by find_program_address is 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