Skip to main content

oil_api/state/
rig.rs

1use serde::{Deserialize, Serialize};
2use steel::*;
3
4use crate::state::rig_pda;
5
6use super::OilAccount;
7
8/// Rig account tracks a user's auction participation and checkpoint status across all wells
9#[repr(C)]
10#[derive(Clone, Copy, Debug, PartialEq, Pod, Zeroable, Serialize, Deserialize)]
11pub struct Rig {
12    /// Authority (user's wallet)
13    pub authority: Pubkey,
14    
15    /// Last epoch participated in per well (index = well_id, 0-3)
16    pub current_epoch_id: [u64; 4],
17    
18    /// Last epoch checkpointed per well (index = well_id, 0-3)
19    pub checkpointed_epoch_id: [u64; 4],
20    
21    /// Buffer field for future extensions
22    pub buffer_a: u64,
23    
24    /// Buffer field for future extensions
25    pub buffer_b: u64,
26    
27    /// Buffer field for future extensions
28    pub buffer_c: u64,
29    
30    /// Buffer field for future extensions (Refinery: rig_level, max_equipment_slots)
31    pub buffer_d: u64,
32    
33    /// Buffer field for future extensions (Refinery: fuel_reserve)
34    pub buffer_e: u64,
35    
36    /// Buffer field for future extensions (Refinery: total_mining_power)
37    pub buffer_f: u64,
38    
39    /// Buffer field for future extensions
40    pub buffer_g: u64,
41    
42    /// Buffer field for future extensions
43    pub buffer_h: u64,
44    
45    /// Buffer field for future extensions
46    pub buffer_i: u64,
47}
48
49impl Rig {
50    pub fn pda(authority: Pubkey) -> (Pubkey, u8) {
51        rig_pda(authority)
52    }
53
54    pub fn initialize(&mut self, authority: Pubkey) {
55        self.authority = authority;
56        self.current_epoch_id = [0; 4];
57        self.checkpointed_epoch_id = [0; 4];
58        self.buffer_a = 0;
59        self.buffer_b = 0;
60        self.buffer_c = 0;
61        self.buffer_d = 0;
62        self.buffer_e = 0;
63        self.buffer_f = 0;
64        self.buffer_g = 0;
65        self.buffer_h = 0;
66        self.buffer_i = 0;
67    }
68}
69
70account!(OilAccount, Rig);