Skip to content

PDAs and Accounts

Metadata Specification
Document ID TP-REFR-001
Status Canonical (Devnet MVP)
Scope Program-derived accounts and treasury surfaces

This page describes the program-owned account surfaces used by the TIMLG MVP. It is intentionally focused on what each account is for, how it is derived, and how it should be read.


Global accounts

Account Seed pattern Operational role Holds funds?
Config [b"config_v3"] Global protocol settings, authorities, NIST chaining anchor, recovery state No
Tokenomics [b"tokenomics_v3"] Fee parameters and treasury routing configuration No
OracleSet [b"oracle_set_v3"] Allowlist of oracle public keys plus quorum threshold No
RoundRegistry [b"round_registry_v3"] Global round indexing, next_round_id, and last_created_target No
GlobalStats [b"global_stats"] Aggregated protocol-level counters No
StreakLeaderboard [b"streak_leaderboard_v1"] Singleton record of the global streak record holder No

Round-scoped accounts

Account Seed pattern Operational role Holds funds?
Round [b"round_v3", u64_le(round_id)] Canonical timing, pulse, and settlement state for one round; carries kind (Betting / Continuity) No
RoundTargetRecord [b"round_target_v1", u64_le(pulse_index_target)] One-shot dedup record per NIST target — prevents two rounds racing for the same target No
Round Vault (SPL) [b"vault", round_pda] Round-level SPL token escrow and post-settlement routing Yes
TIMLG Vault (SPL) [b"timlg_vault_v3", round_pda] Round-level TIMLG settlement vault Yes

User-scoped accounts

Account Seed pattern Operational role Holds funds?
Ticket [b"ticket_v3", u64_le(round_id), Pubkey(user), u64_le(nonce)] One participation record: commitment, reveal proof, outcome, claim state, and user_commit_index No
UserStats [b"user_stats_v3", Pubkey(user)] Wallet-level counters, current/longest streak, and refunded_in_streak_window No
UserEscrow [b"user_escrow_v3", Pubkey(user)] Optional balance surface for pre-funded / batched / relayed flows Yes, if enabled

Why UserStats deserves its own line

UserStats is not cosmetic metadata. It is the canonical summary surface for participation counters and streak tracking, and it is the eligibility input for the on-chain Streak Jackpot (see Streak Jackpot).


Oracle attestation accounts

Account Seed pattern Operational role Holds funds?
OracleAttestationRecord [b"oracle_att_v3", u64_le(round_id), Pubkey(oracle)] One-shot pulse attestation per (round, oracle); stores the oracle's signature and the NIST output_value No
OracleAnchorAttestationRecord [b"oracle_anchor_att_v3", u64_le(pulse_index), Pubkey(oracle)] One-shot anchor attestation per (pulse_index, oracle); stores the signature, output_value, and precommitment_value No

These two account families form the "Attestation Board": any actor can read them, assemble a threshold of signatures, and submit set_pulse_quorum or install_nist_anchor_quorum. No intermediary is privileged.


Treasury and fee surfaces

Account / Surface Seed pattern or identifier Purpose
Reward Fee Pool (SPL) [b"reward_fee_pool_v3"] Receives the protocol fee applied to winning rewards
Treasury SPL (TIMLG) [b"treasury_v3"] Receives swept residual TIMLG after grace expiry
Treasury SOL [b"treasury_sol_v3"] Receives sol_service_fee_lamports per ticket — funds the Streak Jackpot

Reading guidance

If you want to know... Read...
Who controls protocol-wide runtime behavior Config
Which oracles are accepted and what threshold is needed OracleSet
How fees are configured Tokenomics
What happened in a specific round Round + round logs
Whether a pulse target is already locked RoundTargetRecord
What happened to one specific ticket Ticket
A wallet's cumulative performance and streaks UserStats
Who currently holds the streak record (and what jackpot is queued) StreakLeaderboard + Treasury SOL balance
Which oracles have already attested a given round/anchor OracleAttestationRecord / OracleAnchorAttestationRecord
Whether funds are still escrowed at round level Round Vault / TIMLG Vault

Relationship between tickets, user statistics, and the leaderboard

Surface Granularity Main question it answers
Ticket Per participation "What happened to this exact ticket?"
UserStats Per wallet "What is this participant's cumulative history and current streak?"
StreakLeaderboard Global "Who currently holds the all-time on-chain streak record?"

This separation is deliberate. The protocol never requires an analytics client to scan an entire ticket history just to render high-level wallet counters or evaluate jackpot eligibility — yet ticket-level truth remains available for full forensic verification.