Skip to main content

lightcone_sdk/program/
constants.rs

1//! Constants for the Lightcone Pinocchio program.
2//!
3//! This module contains all program IDs, seeds, discriminators, and size constants
4//! matching the on-chain program exactly.
5
6use solana_sdk::pubkey::Pubkey;
7use std::str::FromStr;
8
9// ============================================================================
10// Program IDs
11// ============================================================================
12
13lazy_static::lazy_static! {
14    /// Lightcone Pinocchio Program ID
15    pub static ref PROGRAM_ID: Pubkey = Pubkey::from_str("EfRvELrn4b5aJRwddD1VUrqzsfm1pewBLPebq3iMPDp2").unwrap();
16}
17
18/// SPL Token Program ID
19pub const TOKEN_PROGRAM_ID: Pubkey = spl_token::ID;
20
21/// Token-2022 Program ID (for conditional tokens)
22pub const TOKEN_2022_PROGRAM_ID: Pubkey = spl_token_2022::ID;
23
24/// Associated Token Account Program ID
25pub const ASSOCIATED_TOKEN_PROGRAM_ID: Pubkey = spl_associated_token_account::ID;
26
27/// System Program ID
28pub const SYSTEM_PROGRAM_ID: Pubkey = solana_sdk_ids::system_program::ID;
29
30/// Rent Sysvar ID
31pub const RENT_SYSVAR_ID: Pubkey = solana_sdk_ids::sysvar::rent::ID;
32
33/// Instructions Sysvar ID (for Ed25519 verification)
34pub const INSTRUCTIONS_SYSVAR_ID: Pubkey = solana_sdk_ids::sysvar::instructions::ID;
35
36/// Ed25519 Program ID (for signature verification)
37pub const ED25519_PROGRAM_ID: Pubkey = solana_sdk_ids::ed25519_program::ID;
38
39// ============================================================================
40// Instruction Discriminators
41// ============================================================================
42
43/// Instruction discriminators (single byte indices)
44pub mod instruction {
45    pub const INITIALIZE: u8 = 0;
46    pub const CREATE_MARKET: u8 = 1;
47    pub const ADD_DEPOSIT_MINT: u8 = 2;
48    pub const MINT_COMPLETE_SET: u8 = 3;
49    pub const MERGE_COMPLETE_SET: u8 = 4;
50    pub const CANCEL_ORDER: u8 = 5;
51    pub const INCREMENT_NONCE: u8 = 6;
52    pub const SETTLE_MARKET: u8 = 7;
53    pub const REDEEM_WINNINGS: u8 = 8;
54    pub const SET_PAUSED: u8 = 9;
55    pub const SET_OPERATOR: u8 = 10;
56    pub const WITHDRAW_FROM_POSITION: u8 = 11;
57    pub const ACTIVATE_MARKET: u8 = 12;
58    pub const MATCH_ORDERS_MULTI: u8 = 13;
59}
60
61// ============================================================================
62// Account Discriminators (8 bytes each)
63// ============================================================================
64
65/// Exchange account discriminator
66pub const EXCHANGE_DISCRIMINATOR: [u8; 8] = *b"exchange";
67/// Market account discriminator
68pub const MARKET_DISCRIMINATOR: [u8; 8] = *b"market\0\0";
69/// Order status account discriminator
70pub const ORDER_STATUS_DISCRIMINATOR: [u8; 8] = *b"ordstat\0";
71/// User nonce account discriminator
72pub const USER_NONCE_DISCRIMINATOR: [u8; 8] = *b"usrnonce";
73/// Position account discriminator
74pub const POSITION_DISCRIMINATOR: [u8; 8] = *b"position";
75
76// ============================================================================
77// PDA Seeds
78// ============================================================================
79
80/// Exchange PDA seed
81pub const EXCHANGE_SEED: &[u8] = b"central_state";
82/// Market PDA seed
83pub const MARKET_SEED: &[u8] = b"market";
84/// Vault PDA seed (for deposit token accounts)
85pub const VAULT_SEED: &[u8] = b"market_deposit_token_account";
86/// Mint authority PDA seed
87pub const MINT_AUTHORITY_SEED: &[u8] = b"market_mint_authority";
88/// Conditional mint PDA seed
89pub const CONDITIONAL_MINT_SEED: &[u8] = b"conditional_mint";
90/// Order status PDA seed
91pub const ORDER_STATUS_SEED: &[u8] = b"order_status";
92/// User nonce PDA seed
93pub const USER_NONCE_SEED: &[u8] = b"user_nonce";
94/// Position PDA seed
95pub const POSITION_SEED: &[u8] = b"position";
96
97// ============================================================================
98// Account Sizes
99// ============================================================================
100
101/// Exchange account size in bytes
102pub const EXCHANGE_SIZE: usize = 88;
103/// Market account size in bytes
104pub const MARKET_SIZE: usize = 120;
105/// Order status account size in bytes
106pub const ORDER_STATUS_SIZE: usize = 24;
107/// User nonce account size in bytes
108pub const USER_NONCE_SIZE: usize = 16;
109/// Position account size in bytes
110pub const POSITION_SIZE: usize = 80;
111
112// ============================================================================
113// Order Sizes
114// ============================================================================
115
116/// Full order size in bytes
117pub const FULL_ORDER_SIZE: usize = 225;
118/// Compact order size in bytes
119pub const COMPACT_ORDER_SIZE: usize = 65;
120/// Signature size in bytes
121pub const SIGNATURE_SIZE: usize = 64;
122
123// ============================================================================
124// Limits
125// ============================================================================
126
127/// Maximum outcomes per market (limited by compute budget)
128pub const MAX_OUTCOMES: u8 = 6;
129/// Minimum outcomes per market
130pub const MIN_OUTCOMES: u8 = 2;
131/// Maximum makers in a single match_orders_multi instruction
132pub const MAX_MAKERS: usize = 5;