Appearance
Markets and parameters
The current values below are those of the current deployment (Solana devnet). The deployment scripts state that devnet uses the same economics and execution parameters intended for mainnet. Where the runbook says mainnet values will differ, the "Mainnet" column says so; "TBD" means not yet decided. Every value marked Proposal can change only through a timelocked governance proposal after launch.
Markets
| Index | Symbol | Pyth feed id | Status |
|---|---|---|---|
| 0 | BTC | e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43 | Live |
| 1 | ETH | ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace | Live |
| 2 | SOL | ef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d | Being added by an AddMarket proposal |
Launch markets: BTC, ETH and SOL. New markets are added by an AddMarket proposal.
Market parameters (MarketParams, per market; Proposal)
| Parameter | Meaning | Current (BTC, ETH, SOL) | Program bounds | Mainnet |
|---|---|---|---|---|
max_leverage | Highest leverage for new opens | 1000 | 1–1000 | — |
min_margin | Smallest margin per open | $1 | > 0 | TBD |
max_position_notional | Largest notional per position | $10,000,000 | > 0 | TBD ("start very low") |
oi_cap_long, oi_cap_short | OI ceiling per side (live + pending) | $5,000,000,000 | — | TBD (size to Pyth depth) |
impact.base_rate_bps | Win haircut floor | 770 (7.7%) | < 10,000 | — |
impact.c_e9 | Haircut curve constant | 185,000 (1.85 bps) | < 1e9 | — |
impact.deadband_e9 | Moves at or below this pay no win | 31,000 (0.31 bps) | < 1e9 | — |
retired | No new opens; closes continue | false | — | — |
crowd_oi, avg_samples, avg_step_s | Crowded-side averaging (disabled) | u64::MAX, 8, 4 | Production builds require crowd_oi = u64::MAX. All builds require avg_samples 3–8, avg_step_s 1–30, and (avg_samples − 1) × avg_step_s ≤ 120 | Disabled |
Live market state (not parameters)
| Field | Changed by | Meaning |
|---|---|---|
oi_limit_long/short | Risk keeper, instantly; must stay between current usage and the ceiling | Trailing OI limit for new requests. The keeper keeps it at usage + $5M, ±10%. |
oi_brake_long/short | Admin or guardian lower it; only the admin raises it | Emergency cap on requests and fills. Off = u64::MAX. |
last_oracle_ts, last_oracle_price | Fills, heartbeats and liquidations; a liquidation price that fails the confidence check advances only last_oracle_ts | Oracle watermark: newest recorded publish time and its price |
settle_pin_ts | propose(SettleMarket) sets it to the proposal's eta; cancelling the proposal or re-opening the market clears it, allowed only while both the Solana clock and the market's last_oracle_ts are more than 1 h before its pin, or after the settlement lapses (more than 7 days after the pin) | Settlement pin (0 = none). From it on, close requests must be pinned before it and liquidations must use prices published before it |
settle_price | SettleMarket proposal, once | A retired market's final price: the Pyth update pinned at settle_pin_ts if it is admissible under the limits recorded in the proposal, otherwise the proposed price (Oracle and safety) |
Economics (Economics, global; Proposal)
| Parameter | Meaning | Current | Program bounds |
|---|---|---|---|
fee_bps | Loss fee and payout fee | 200 (2%) | ≤ 1,000 |
staker_share_bps | Stakers' share of fees (the rest goes to dev) | 5,000 (50%) | ≤ 10,000 |
bust_buffer_e9 | Bust trigger distance before zero equity | 500,000 (0.05%) | < 1,000,000 |
staker_cap | Treasury above this is swept to stakers while the queue is empty | $5,000,000 | 0 to i64::MAX base units |
cliff | House size where the mint rate starts decaying | $2,000,000 | 0 to i64::MAX base units |
decay_s | Mint decay constant S | $120,000,000 | > 0 |
flat_per_usd | $NOTE per $1 of PnL basis (wins and losses) in the flat region | 44 | 0–1,000,000 (0 stops emission) |
reward_stream_s | Staker revenue vesting window | 3,600 s | 3,600 s–7 days (0–7 days in test and devnet-feature builds) |
monotonic_mint | Mint rate never resets to flat | true | — |
Execution (ExecParams, global; Proposal)
| Parameter | Meaning | Current | Program bounds | Mainnet (runbook) |
|---|---|---|---|---|
pin_delay_s | Pin = max(clock, watermark + 1) + this | 6 s | 4–60 (1–60 in test and devnet-feature builds) | 6, open decision (possibly 8) after mainnet measurement |
fill_window_s | Fill deadline after the pin | 30 s | 5–600 | 30–60 |
liq_max_age_s | Maximum age of a liquidation price (also of a heartbeat price) | 10 s | 1–120 | 10 |
max_conf_bps | Maximum Pyth confidence / price | 50 (0.5%) | 1–1,000 | 50 |
max_ema_dev_bps | Maximum price deviation from EMA | 500 (5%) | 1–5,000 | 500 |
max_obs_age_s | Maximum watermark age for new requests | 60 s | 1–60 | 60 |
max_clock_lag_s | Maximum watermark lead over the Solana clock | 5 s | 1–60 | 5 |
exec_fee_lamports | SOL per request, paid to the price poster | 500,000 | ≤ 10,000,000 | 200,000–1,000,000 |
Other global settings
| Setting | Meaning | Current | Changed by |
|---|---|---|---|
max_trader_notional | Open + pending notional per trader, all markets | $10,000,000 | Proposal (> 0); mainnet TBD |
timelock_delay_s | Delay before a proposal can execute | 60 s (devnet, set before the launch floor existed) | Proposal, ≤ 30 days and never below the lesser of the current delay and 24 h. Production builds refuse to launch below 24 h. Mainnet ≥ 48 h per runbook |
paused | Blocks new opens | false | Guardian or admin pause; admin unpause |
guardian, risk_keeper, admin | Roles | Devnet: admin = guardian = upgrade authority; risk keeper = the primary keeper | Proposal (admin handover also needs accept_admin) |
Fixed in the program (an upgrade is needed to change these)
| Constant | Value |
|---|---|
| Maximum leverage | 1000 |
| Pyth receiver program | rec2HHDDnjLfj4kE7VyEtFA1HPGQLK33259532cRyHp |
| Pinned update may lead the Solana clock by | ≤ 60 s |
| Maximum session-key lifetime | 30 days |
| Cancel bounty | ¼ of the execution fee |
Proposal grace period after eta | 7 days |
| Maximum timelock | 30 days |
| Settlement price band | Proposed price within 10% of the last verified oracle price (checked when proposed, and again on the dead-feed path) |
| Settlement execution delay | Only after pin + 120 s (the liq_max_age_s ceiling), when no pre-pin price can still liquidate |
| Settlement veto margin | 3,600 s (2 s in test and devnet-feature builds): a settlement can be cancelled, or its market re-opened, only while both the Solana clock and last_oracle_ts are earlier than pin − this, or after it lapses |
| Dead-feed settlement | Admin only, at least 24 h after the pin, and only if no update at or after the pin was ever recorded |
| Production floors | Launch timelock ≥ 24 h; reward_stream_s ≥ 3,600 s; pin_delay_s ≥ 4 s (relaxed in test and devnet-feature builds) |
| Timelock change floor (all builds) | ≥ the lesser of the current delay and 24 h |
| Staking tranches | 10 slots; epoch = ceil(reward_stream_s / 8) |
| Units | USDC 6 decimals; prices 8 decimals; $NOTE 6 decimals |
Keeper settings (off-chain, operational)
These are defaults of the Papersol keeper software, not program rules:
| Setting | Default |
|---|---|
| Heartbeat period | 30 s per quiet market |
| Liquidation scan | every 1 s per market |
| Trailing OI headroom | $5,000,000 per side, re-targeted outside ±10% |
| Harvest attempt | every 2 s while the queue has backing |
| Retired-market settlement | every 10 s: executes a due SettleMarket proposal with the pinned update as soon as the program allows, keeps filling closes committed before the pin, and runs settle_retired on each position in a settled market that has no pending close |
| Stuck-settlement alert | a due settlement still not executed 10 min after its pin |
| Undecodable-request alert | request accounts are decoded one by one; one that doesn't decode (a pre-upgrade layout) is skipped and alerted (undecodable-requests) until someone runs migrate_request on it |
| Standby keeper | takes over fills unfilled 6 s after their pin; posts heartbeats once the watermark is 4 s old |