1use hyperstack_sdk::serde_utils;
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Clone, Serialize, Deserialize, Default)]
5pub struct OreRoundId {
6 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
7 pub round_id: Option<u64>,
8 #[serde(default)]
9 pub round_address: Option<String>,
10}
11
12#[derive(Debug, Clone, Serialize, Deserialize, Default)]
13pub struct OreRoundState {
14 #[serde(
15 default,
16 deserialize_with = "serde_utils::deserialize_option_option_i64"
17 )]
18 pub expires_at: Option<Option<i64>>,
19 #[serde(
20 default,
21 deserialize_with = "serde_utils::deserialize_option_option_i64"
22 )]
23 pub estimated_expires_at_unix: Option<Option<i64>>,
24 #[serde(default)]
25 pub motherlode: Option<Option<f64>>,
26 #[serde(default)]
27 pub total_deployed: Option<Option<f64>>,
28 #[serde(default)]
29 pub total_vaulted: Option<Option<f64>>,
30 #[serde(default)]
31 pub total_winnings: Option<Option<f64>>,
32 #[serde(
33 default,
34 deserialize_with = "serde_utils::deserialize_option_option_u64"
35 )]
36 pub total_miners: Option<Option<u64>>,
37 #[serde(default)]
38 pub deployed_per_square: Option<Option<Vec<serde_json::Value>>>,
39 #[serde(default)]
40 pub deployed_per_square_ui: Option<Option<Vec<serde_json::Value>>>,
41 #[serde(default)]
42 pub count_per_square: Option<Option<Vec<serde_json::Value>>>,
43}
44
45#[derive(Debug, Clone, Serialize, Deserialize, Default)]
46pub struct OreRoundResults {
47 #[serde(default)]
48 pub top_miner: Option<Option<String>>,
49 #[serde(default)]
50 pub top_miner_reward: Option<Option<f64>>,
51 #[serde(default)]
52 pub rent_payer: Option<Option<String>>,
53 #[serde(default)]
54 pub slot_hash: Option<Option<String>>,
55 #[serde(
56 default,
57 deserialize_with = "serde_utils::deserialize_option_option_u64"
58 )]
59 pub rng: Option<Option<u64>>,
60 #[serde(
61 default,
62 deserialize_with = "serde_utils::deserialize_option_option_u64"
63 )]
64 pub winning_square: Option<Option<u64>>,
65 #[serde(default)]
66 pub did_hit_motherlode: Option<Option<bool>>,
67}
68
69#[derive(Debug, Clone, Serialize, Deserialize, Default)]
70pub struct OreRoundMetrics {
71 #[serde(
72 default,
73 deserialize_with = "serde_utils::deserialize_option_option_u64"
74 )]
75 pub deploy_count: Option<Option<u64>>,
76 #[serde(
77 default,
78 deserialize_with = "serde_utils::deserialize_option_option_u64"
79 )]
80 pub checkpoint_count: Option<Option<u64>>,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize, Default)]
84pub struct OreRoundTreasury {
85 #[serde(default)]
86 pub motherlode: Option<Option<f64>>,
87}
88
89#[derive(Debug, Clone, Serialize, Deserialize, Default)]
90pub struct OreRoundEntropy {
91 #[serde(default)]
92 pub entropy_value: Option<Option<String>>,
93 #[serde(default)]
94 pub entropy_seed: Option<Option<String>>,
95 #[serde(default)]
96 pub entropy_slot_hash: Option<Option<String>>,
97 #[serde(
98 default,
99 deserialize_with = "serde_utils::deserialize_option_option_i64"
100 )]
101 pub entropy_start_at: Option<Option<i64>>,
102 #[serde(
103 default,
104 deserialize_with = "serde_utils::deserialize_option_option_i64"
105 )]
106 pub entropy_end_at: Option<Option<i64>>,
107 #[serde(
108 default,
109 deserialize_with = "serde_utils::deserialize_option_option_u64"
110 )]
111 pub entropy_samples: Option<Option<u64>>,
112 #[serde(default)]
113 pub entropy_var_address: Option<Option<String>>,
114 #[serde(default)]
115 pub resolved_seed: Option<Option<Vec<serde_json::Value>>>,
116}
117
118#[derive(Debug, Clone, Serialize, Deserialize, Default)]
119pub struct OreRound {
120 #[serde(default)]
121 pub id: OreRoundId,
122 #[serde(default)]
123 pub state: OreRoundState,
124 #[serde(default)]
125 pub results: OreRoundResults,
126 #[serde(default)]
127 pub metrics: OreRoundMetrics,
128 #[serde(default)]
129 pub treasury: OreRoundTreasury,
130 #[serde(default)]
131 pub entropy: OreRoundEntropy,
132 #[serde(default)]
133 pub ore_metadata: Option<Option<serde_json::Value>>,
134}
135
136#[derive(Debug, Clone, Serialize, Deserialize, Default)]
137pub struct OreTreasuryId {
138 #[serde(default)]
139 pub address: Option<String>,
140}
141
142#[derive(Debug, Clone, Serialize, Deserialize, Default)]
143pub struct OreTreasuryState {
144 #[serde(
145 default,
146 deserialize_with = "serde_utils::deserialize_option_option_u64"
147 )]
148 pub balance: Option<Option<u64>>,
149 #[serde(default)]
150 pub motherlode: Option<Option<f64>>,
151 #[serde(default)]
152 pub total_refined: Option<Option<f64>>,
153 #[serde(default)]
154 pub total_staked: Option<Option<f64>>,
155 #[serde(default)]
156 pub total_unclaimed: Option<Option<f64>>,
157}
158
159#[derive(Debug, Clone, Serialize, Deserialize, Default)]
160pub struct OreTreasury {
161 #[serde(default)]
162 pub id: OreTreasuryId,
163 #[serde(default)]
164 pub state: OreTreasuryState,
165 #[serde(default)]
166 pub treasury_snapshot: Option<Option<serde_json::Value>>,
167}
168
169#[derive(Debug, Clone, Serialize, Deserialize, Default)]
170pub struct Treasury {
171 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
172 pub balance: Option<u64>,
173 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
174 pub buffer_a: Option<u64>,
175 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
176 pub motherlode: Option<u64>,
177 #[serde(default)]
178 pub miner_rewards_factor: Option<serde_json::Value>,
179 #[serde(default)]
180 pub stake_rewards_factor: Option<serde_json::Value>,
181 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
182 pub buffer_b: Option<u64>,
183 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
184 pub total_refined: Option<u64>,
185 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
186 pub total_staked: Option<u64>,
187 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
188 pub total_unclaimed: Option<u64>,
189}
190
191#[derive(Debug, Clone, Serialize, Deserialize, Default)]
192pub struct OreMinerId {
193 #[serde(default)]
194 pub authority: Option<String>,
195 #[serde(default)]
196 pub miner_address: Option<String>,
197 #[serde(default)]
198 pub automation_address: Option<Option<String>>,
199}
200
201#[derive(Debug, Clone, Serialize, Deserialize, Default)]
202pub struct OreMinerRewards {
203 #[serde(
204 default,
205 deserialize_with = "serde_utils::deserialize_option_option_u64"
206 )]
207 pub rewards_sol: Option<Option<u64>>,
208 #[serde(
209 default,
210 deserialize_with = "serde_utils::deserialize_option_option_u64"
211 )]
212 pub rewards_ore: Option<Option<u64>>,
213 #[serde(
214 default,
215 deserialize_with = "serde_utils::deserialize_option_option_u64"
216 )]
217 pub refined_ore: Option<Option<u64>>,
218 #[serde(
219 default,
220 deserialize_with = "serde_utils::deserialize_option_option_u64"
221 )]
222 pub lifetime_rewards_sol: Option<Option<u64>>,
223 #[serde(
224 default,
225 deserialize_with = "serde_utils::deserialize_option_option_u64"
226 )]
227 pub lifetime_rewards_ore: Option<Option<u64>>,
228 #[serde(
229 default,
230 deserialize_with = "serde_utils::deserialize_option_option_u64"
231 )]
232 pub lifetime_deployed: Option<Option<u64>>,
233}
234
235#[derive(Debug, Clone, Serialize, Deserialize, Default)]
236pub struct OreMinerState {
237 #[serde(
238 default,
239 deserialize_with = "serde_utils::deserialize_option_option_u64"
240 )]
241 pub round_id: Option<Option<u64>>,
242 #[serde(
243 default,
244 deserialize_with = "serde_utils::deserialize_option_option_u64"
245 )]
246 pub checkpoint_id: Option<Option<u64>>,
247 #[serde(
248 default,
249 deserialize_with = "serde_utils::deserialize_option_option_u64"
250 )]
251 pub checkpoint_fee: Option<Option<u64>>,
252 #[serde(
253 default,
254 deserialize_with = "serde_utils::deserialize_option_option_i64"
255 )]
256 pub last_claim_ore_at: Option<Option<i64>>,
257 #[serde(
258 default,
259 deserialize_with = "serde_utils::deserialize_option_option_i64"
260 )]
261 pub last_claim_sol_at: Option<Option<i64>>,
262}
263
264#[derive(Debug, Clone, Serialize, Deserialize, Default)]
265pub struct OreMinerAutomation {
266 #[serde(
267 default,
268 deserialize_with = "serde_utils::deserialize_option_option_u64"
269 )]
270 pub amount: Option<Option<u64>>,
271 #[serde(
272 default,
273 deserialize_with = "serde_utils::deserialize_option_option_u64"
274 )]
275 pub balance: Option<Option<u64>>,
276 #[serde(default)]
277 pub executor: Option<Option<String>>,
278 #[serde(
279 default,
280 deserialize_with = "serde_utils::deserialize_option_option_u64"
281 )]
282 pub fee: Option<Option<u64>>,
283 #[serde(
284 default,
285 deserialize_with = "serde_utils::deserialize_option_option_u64"
286 )]
287 pub strategy: Option<Option<u64>>,
288 #[serde(
289 default,
290 deserialize_with = "serde_utils::deserialize_option_option_u64"
291 )]
292 pub mask: Option<Option<u64>>,
293 #[serde(
294 default,
295 deserialize_with = "serde_utils::deserialize_option_option_u64"
296 )]
297 pub reload: Option<Option<u64>>,
298}
299
300#[derive(Debug, Clone, Serialize, Deserialize, Default)]
301pub struct OreMiner {
302 #[serde(default)]
303 pub id: OreMinerId,
304 #[serde(default)]
305 pub rewards: OreMinerRewards,
306 #[serde(default)]
307 pub state: OreMinerState,
308 #[serde(default)]
309 pub automation: OreMinerAutomation,
310 #[serde(default)]
311 pub miner_snapshot: Option<Option<serde_json::Value>>,
312 #[serde(default)]
313 pub automation_snapshot: Option<Option<serde_json::Value>>,
314}
315
316#[derive(Debug, Clone, Serialize, Deserialize, Default)]
317pub struct Miner {
318 #[serde(default)]
319 pub authority: Option<String>,
320 #[serde(default, deserialize_with = "serde_utils::deserialize_option_vec_u64")]
321 pub deployed: Option<Vec<u64>>,
322 #[serde(default, deserialize_with = "serde_utils::deserialize_option_vec_u64")]
323 pub cumulative: Option<Vec<u64>>,
324 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
325 pub checkpoint_fee: Option<u64>,
326 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
327 pub checkpoint_id: Option<u64>,
328 #[serde(default, deserialize_with = "serde_utils::deserialize_option_i64")]
329 pub last_claim_ore_at: Option<i64>,
330 #[serde(default, deserialize_with = "serde_utils::deserialize_option_i64")]
331 pub last_claim_sol_at: Option<i64>,
332 #[serde(default)]
333 pub rewards_factor: Option<serde_json::Value>,
334 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
335 pub rewards_sol: Option<u64>,
336 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
337 pub rewards_ore: Option<u64>,
338 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
339 pub refined_ore: Option<u64>,
340 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
341 pub round_id: Option<u64>,
342 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
343 pub lifetime_rewards_sol: Option<u64>,
344 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
345 pub lifetime_rewards_ore: Option<u64>,
346 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
347 pub lifetime_deployed: Option<u64>,
348}
349
350#[derive(Debug, Clone, Serialize, Deserialize, Default)]
351pub struct Automation {
352 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
353 pub amount: Option<u64>,
354 #[serde(default)]
355 pub authority: Option<String>,
356 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
357 pub balance: Option<u64>,
358 #[serde(default)]
359 pub executor: Option<String>,
360 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
361 pub fee: Option<u64>,
362 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
363 pub strategy: Option<u64>,
364 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
365 pub mask: Option<u64>,
366 #[serde(default, deserialize_with = "serde_utils::deserialize_option_u64")]
367 pub reload: Option<u64>,
368}
369
370#[derive(Debug, Clone, Serialize, Deserialize)]
371pub struct EventWrapper<T> {
372 #[serde(default, deserialize_with = "serde_utils::deserialize_i64")]
373 pub timestamp: i64,
374 pub data: T,
375 #[serde(default)]
376 pub slot: Option<f64>,
377 #[serde(default)]
378 pub signature: Option<String>,
379}
380
381impl<T: Default> Default for EventWrapper<T> {
382 fn default() -> Self {
383 Self {
384 timestamp: 0,
385 data: T::default(),
386 slot: None,
387 signature: None,
388 }
389 }
390}