1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
use ed25519;
use ;
/// The authority allowed to initialize the program.
pub const ADMIN_ADDRESS: Pubkey = pubkey!;
/// The decimal precision of the OIL token.
/// There are 100 billion indivisible units per OIL (called "grams").
pub const TOKEN_DECIMALS: u8 = 11;
/// One OIL token, denominated in indivisible units.
pub const ONE_OIL: u64 = 10u64.pow;
/// Refuel cost: OIL per fuel unit in atomic units (0.0003 OIL per fuel = 30_000_000 atomic).
pub const REFUEL_RATE_ATOMIC: u64 = 30_000_000; // 0.0003 * 10^11
/// The duration of one minute, in seconds.
pub const ONE_MINUTE: i64 = 60;
/// The duration of one hour, in seconds.
pub const ONE_HOUR: i64 = 60 * ONE_MINUTE;
/// The duration of one day, in seconds.
pub const ONE_DAY: i64 = 24 * ONE_HOUR;
/// The number of seconds for when the winning square expires.
pub const ONE_WEEK: i64 = 7 * ONE_DAY;
/// The duration of one slot in milliseconds.
/// Fogo has ~40ms slots (10x faster than Solana's ~400ms slots)
pub const SLOT_DURATION_MS: u64 = 40;
/// The number of slots in one minute.
/// Fogo has ~40ms slots, so 60 seconds = 1500 slots (60 / 0.04 = 1500)
pub const ONE_MINUTE_SLOTS: u64 = 1500;
/// The number of slots in one hour.
pub const ONE_HOUR_SLOTS: u64 = 60 * ONE_MINUTE_SLOTS;
/// The number of slots in 12 hours.
pub const TWELVE_HOURS_SLOTS: u64 = 12 * ONE_HOUR_SLOTS;
/// The number of slots in one day.
pub const ONE_DAY_SLOTS: u64 = 24 * ONE_HOUR_SLOTS;
/// The number of slots in one week.
pub const ONE_WEEK_SLOTS: u64 = 7 * ONE_DAY_SLOTS;
/// The number of slots for breather between rounds.
pub const INTERMISSION_SLOTS: u64 = 300;
/// The maximum token supply (21 million).
/// Mirrors Bitcoin's 21M supply, representing a Solana-native store of value.
pub const MAX_SUPPLY: u64 = ONE_OIL * 21_000_000;
/// The seed of the automation account PDA.
pub const AUTOMATION: & = b"automation";
/// The seed of the board account PDA.
pub const BOARD: & = b"board";
/// The seed of the config account PDA.
pub const CONFIG: & = b"config";
/// The seed of the miner account PDA.
pub const MINER: & = b"miner";
/// The seed of the referral account PDA.
pub const REFERRAL: & = b"referral";
/// The seed of the stake account PDA.
pub const STAKE: & = b"stake";
/// The seed of the round account PDA.
pub const ROUND: & = b"round";
/// The seed of the treasury account PDA.
pub const TREASURY: & = b"treasury";
/// The seed of the pool account PDA.
pub const POOL: & = b"pool";
/// The seed of the well account PDA.
pub const WELL: & = b"well";
/// The seed of the auction account PDA.
pub const AUCTION: & = b"auction";
/// The seed of the whitelist account PDA.
pub const WHITELIST: & = b"whitelist";
/// The seed of the rig account PDA (auction-based mining).
pub const RIG: & = b"rig";
/// The seed of the micro account PDA (per-epoch auction state).
pub const MICRO: & = b"micro";
/// The seed of the share account PDA (per-user, per-epoch auction contribution).
pub const SHARE: & = b"share";
/// The seed of the plot account PDA (refinery system).
pub const PLOT: & = b"plot";
/// The seed of the refinery account PDA (refinery system).
pub const REFINERY: & = b"refinery";
/// The seed of the rig collection PDA (Metaplex collection update authority for verified rig NFTs).
pub const RIG_COLLECTION: & = b"rig_collection";
/// The seed of the OIL price oracle PDA (Valiant-backed, centralized updater).
pub const ORACLE: & = b"oracle";
/// Max age (seconds) of oracle price before considered stale for claim fee. 10 minutes.
pub const MAX_ORACLE_PRICE_AGE_SEC: u32 = 600;
/// Program id for const pda derivations
const PROGRAM_ID: = unsafe ;
/// The address of the config account.
pub const CONFIG_ADDRESS: Pubkey =
new_from_array;
/// The address of the mint account.
pub const MINT_ADDRESS: Pubkey = pubkey!;
/// The address of the sol mint account.
pub const SOL_MINT: Pubkey = pubkey!;
/// The address to indicate OIL rewards are split between all miners.
pub const SPLIT_ADDRESS: Pubkey = pubkey!;
/// The address to indicate the mining pool won the lottery.
pub const POOL_ADDRESS: Pubkey = pubkey!;
/// The address of the treasury account.
pub const TREASURY_ADDRESS: Pubkey =
new_from_array;
/// The address of the treasury account.
pub const TREASURY_BUMP: u8 = derive_program_address.1;
/// Denominator for fee calculations.
pub const DENOMINATOR_BPS: u64 = 10_000;
/// The fee paid to bots if they checkpoint a user.
pub const CHECKPOINT_FEE: u64 = 10_000; // 0.00001 SOL
/// Minimum claim fee (lamports) for refinery rewards; ensures fee is never 0. 0.01 SOL.
pub const MIN_REFINERY_CLAIM_FEE_LAMPORTS: u64 = 10_000_000;
/// Minimum fee in lamports per 1 OIL (full token); prevents under-reporting price. 0.0001 SOL per OIL.
/// Enforced: fee_lamports >= claimable_atomic * this / ONE_OIL (with 0.01 SOL absolute floor).
pub const MIN_REFINERY_FEE_LAMPORTS_PER_FULL_OIL: u64 = 100_000;
/// The fixed emission per round for block-based mining.
pub const EMISSION_PER_ROUND: u64 = 200;
/// The minimum cooldown period (in seconds) between auction OIL claims to prevent spam.
pub const CLAIM_AUCTION_OIL_COOLDOWN_SECONDS: i64 = 10;
/// The floor price for auction wells (in lamports).
/// Price decays linearly from init_price down to this floor over auction_duration_seconds.
/// Once price reaches floor, it stays at floor until someone bids.
pub const AUCTION_FLOOR_PRICE: u64 = 10_000_000; // 0.01 SOL (testnet)
/// The fee paid to the admin for each transaction.
pub const ADMIN_FEE: u64 = 100; // 1%
/// The address to receive the admin fee.
pub const ADMIN_FEE_COLLECTOR: Pubkey = pubkey!;
/// The swap program used for buybacks.
pub const SWAP_PROGRAM: Pubkey = pubkey!;
/// The address of the var account.
pub const VAR_ADDRESS: Pubkey = pubkey!;
/// The address which can call the bury and wrap instructions.
pub const BURY_AUTHORITY: Pubkey = pubkey!;