Skip to main content

oil_api/
consts.rs

1use const_crypto::ed25519;
2use solana_program::{pubkey, pubkey::Pubkey};
3
4/// The authority allowed to initialize the program.
5pub const ADMIN_ADDRESS: Pubkey = pubkey!("DEvGq2WVuA3qkSCtwwuMYThY4onkJunEHSAxU5cieph8");
6
7/// The decimal precision of the OIL token.
8/// There are 100 billion indivisible units per OIL (called "grams").
9pub const TOKEN_DECIMALS: u8 = 11;
10
11/// One OIL token, denominated in indivisible units.
12pub const ONE_OIL: u64 = 10u64.pow(TOKEN_DECIMALS as u32);
13
14/// The duration of one minute, in seconds.
15pub const ONE_MINUTE: i64 = 60;
16
17/// The duration of one hour, in seconds.
18pub const ONE_HOUR: i64 = 60 * ONE_MINUTE;
19
20/// The duration of one day, in seconds.
21pub const ONE_DAY: i64 = 24 * ONE_HOUR;
22
23/// The number of seconds for when the winning square expires.
24pub const ONE_WEEK: i64 = 7 * ONE_DAY;
25
26/// The duration of one slot in milliseconds.
27/// Fogo has ~40ms slots (10x faster than Solana's ~400ms slots)
28pub const SLOT_DURATION_MS: u64 = 40;
29
30/// The number of slots in one minute.
31/// Fogo has ~40ms slots, so 60 seconds = 1500 slots (60 / 0.04 = 1500)
32pub const ONE_MINUTE_SLOTS: u64 = 1500;
33
34/// The number of slots in one hour.
35pub const ONE_HOUR_SLOTS: u64 = 60 * ONE_MINUTE_SLOTS;
36
37/// The number of slots in 12 hours.
38pub const TWELVE_HOURS_SLOTS: u64 = 12 * ONE_HOUR_SLOTS;
39
40/// The number of slots in one day.
41pub const ONE_DAY_SLOTS: u64 = 24 * ONE_HOUR_SLOTS;
42
43/// The number of slots in one week.
44pub const ONE_WEEK_SLOTS: u64 = 7 * ONE_DAY_SLOTS;
45
46/// The number of slots for breather between rounds.
47pub const INTERMISSION_SLOTS: u64 = 300;
48
49/// The maximum token supply (21 million).
50/// Mirrors Bitcoin's 21M supply, representing a Solana-native store of value.
51pub const MAX_SUPPLY: u64 = ONE_OIL * 21_000_000;
52
53/// The seed of the automation account PDA.
54pub const AUTOMATION: &[u8] = b"automation";
55
56/// The seed of the board account PDA.
57pub const BOARD: &[u8] = b"board";
58
59/// The seed of the config account PDA.
60pub const CONFIG: &[u8] = b"config";
61
62/// The seed of the miner account PDA.
63pub const MINER: &[u8] = b"miner";
64
65/// The seed of the rig account PDA (auction-based mining).
66pub const RIG: &[u8] = b"rig";
67
68/// The seed of the referral account PDA.
69pub const REFERRAL: &[u8] = b"referral";
70
71/// The seed of the seeker account PDA.
72pub const SEEKER: &[u8] = b"seeker";
73
74/// The seed of the square account PDA.
75pub const SQUARE: &[u8] = b"square";
76
77/// The seed of the stake account PDA.
78pub const STAKE: &[u8] = b"stake";
79
80/// The seed of the round account PDA.
81pub const ROUND: &[u8] = b"round";
82
83/// The seed of the treasury account PDA.
84pub const TREASURY: &[u8] = b"treasury";
85
86/// The seed of the pool account PDA.
87pub const POOL: &[u8] = b"pool";
88
89/// The seed of the well account PDA.
90pub const WELL: &[u8] = b"well";
91
92/// The seed of the bid account PDA.
93pub const BID: &[u8] = b"bid";
94
95/// The seed of the auction account PDA.
96pub const AUCTION: &[u8] = b"auction";
97
98/// The seed of the square account PDA (auction state per well).
99pub const EPOCH: &[u8] = b"epoch";
100
101/// Program id for const pda derivations
102const PROGRAM_ID: [u8; 32] = unsafe { *(&crate::id() as *const Pubkey as *const [u8; 32]) };
103
104/// The address of the config account.
105pub const CONFIG_ADDRESS: Pubkey =
106    Pubkey::new_from_array(ed25519::derive_program_address(&[CONFIG], &PROGRAM_ID).0);
107
108/// The address of the mint account.
109pub const MINT_ADDRESS: Pubkey = pubkey!("oiLTuhTJc9qRDr2FcMiCUBJ3BCunNXP1LGJCG7svBSy");
110
111/// The address of the sol mint account.
112pub const SOL_MINT: Pubkey = pubkey!("So11111111111111111111111111111111111111112");
113
114/// The address to indicate OIL rewards are split between all miners.
115pub const SPLIT_ADDRESS: Pubkey = pubkey!("SpLiT11111111111111111111111111111111111112");
116
117/// The address to indicate the mining pool won the lottery.
118pub const POOL_ADDRESS: Pubkey = pubkey!("PooL111111111111111111111111111111111111112");
119
120/// The address of the treasury account.
121pub const TREASURY_ADDRESS: Pubkey =
122    Pubkey::new_from_array(ed25519::derive_program_address(&[TREASURY], &PROGRAM_ID).0);
123
124/// The address of the treasury account.
125pub const TREASURY_BUMP: u8 = ed25519::derive_program_address(&[TREASURY], &PROGRAM_ID).1;
126
127/// Denominator for fee calculations.
128pub const DENOMINATOR_BPS: u64 = 10_000;
129
130/// The fee paid to bots if they checkpoint a user.
131pub const CHECKPOINT_FEE: u64 = 10_000; // 0.00001 SOL
132
133/// The fixed emission per round for block-based mining.
134pub const EMISSION_PER_ROUND: u64 = 200;
135
136/// The minimum cooldown period (in seconds) between auction OIL claims to prevent spam.
137pub const CLAIM_AUCTION_OIL_COOLDOWN_SECONDS: i64 = 10;
138
139/// The floor price for auction wells (in lamports).
140/// Price decays linearly from init_price down to this floor over auction_duration_seconds.
141/// Once price reaches floor, it stays at floor until someone bids.
142pub const AUCTION_FLOOR_PRICE: u64 = 10_000_000; // 0.01 SOL (testnet)
143
144/// The fee paid to the admin for each transaction.
145pub const ADMIN_FEE: u64 = 100; // 1%
146
147/// The address to receive the admin fee.
148pub const ADMIN_FEE_COLLECTOR: Pubkey = pubkey!("FEEFFuugN2rj9fcgrdoSfMdPFkRCfkpKi4vCGGYPyEVV");
149
150/// The swap program used for buybacks.
151pub const SWAP_PROGRAM: Pubkey = pubkey!("vnt1u7PzorND5JjweFWmDawKe2hLWoTwHU6QKz6XX98");
152
153/// The address of the var account.
154pub const VAR_ADDRESS: Pubkey = pubkey!("DQGNTK6bcSMgDQ73b5Fdg6xUwVmvzxP18v4sVdFpEHXb");
155
156/// The address which can call the bury and wrap instructions.
157pub const BURY_AUTHORITY: Pubkey = pubkey!("BoT3qYmE6xePWPU96Kf2QeuJr1pDgQ3gLWbA6kSyjzV");