1use borsh::BorshSerialize;
9use borsh::BorshDeserialize;
10
11pub const TRIGGER_ONE_BTC_DRAW_DISCRIMINATOR: [u8; 8] = [252, 210, 238, 28, 169, 118, 28, 11];
12
13#[derive(Debug)]
15pub struct TriggerOneBtcDraw {
16
17
18 pub authority: solana_address::Address,
19
20
21 pub satrush_config: solana_address::Address,
22
23
24 pub one_btc_vault: solana_address::Address,
25
26
27 pub one_btc_vault_iteration: solana_address::Address,
28
29
30 pub next_one_btc_vault_iteration: solana_address::Address,
31 pub slot_hashes: solana_address::Address,
36
37
38 pub system_program: solana_address::Address,
39
40
41 pub event_authority: solana_address::Address,
42
43
44 pub program: solana_address::Address,
45 }
46
47impl TriggerOneBtcDraw {
48 pub fn instruction(&self) -> solana_instruction::Instruction {
49 self.instruction_with_remaining_accounts(&[])
50 }
51 #[allow(clippy::arithmetic_side_effects)]
52 #[allow(clippy::vec_init_then_push)]
53 pub fn instruction_with_remaining_accounts(&self, remaining_accounts: &[solana_instruction::AccountMeta]) -> solana_instruction::Instruction {
54 let mut accounts = Vec::with_capacity(9+ remaining_accounts.len());
55 accounts.push(solana_instruction::AccountMeta::new(
56 self.authority,
57 true
58 ));
59 accounts.push(solana_instruction::AccountMeta::new_readonly(
60 self.satrush_config,
61 false
62 ));
63 accounts.push(solana_instruction::AccountMeta::new(
64 self.one_btc_vault,
65 false
66 ));
67 accounts.push(solana_instruction::AccountMeta::new(
68 self.one_btc_vault_iteration,
69 false
70 ));
71 accounts.push(solana_instruction::AccountMeta::new(
72 self.next_one_btc_vault_iteration,
73 false
74 ));
75 accounts.push(solana_instruction::AccountMeta::new_readonly(
76 self.slot_hashes,
77 false
78 ));
79 accounts.push(solana_instruction::AccountMeta::new_readonly(
80 self.system_program,
81 false
82 ));
83 accounts.push(solana_instruction::AccountMeta::new_readonly(
84 self.event_authority,
85 false
86 ));
87 accounts.push(solana_instruction::AccountMeta::new_readonly(
88 self.program,
89 false
90 ));
91 accounts.extend_from_slice(remaining_accounts);
92 let data = TriggerOneBtcDrawInstructionData::new().try_to_vec().unwrap();
93
94 solana_instruction::Instruction {
95 program_id: crate::SATRUSH_ID,
96 accounts,
97 data,
98 }
99 }
100}
101
102#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
103 pub struct TriggerOneBtcDrawInstructionData {
104 discriminator: [u8; 8],
105 }
106
107impl TriggerOneBtcDrawInstructionData {
108 pub fn new() -> Self {
109 Self {
110 discriminator: [252, 210, 238, 28, 169, 118, 28, 11],
111 }
112 }
113
114 pub(crate) fn try_to_vec(&self) -> Result<Vec<u8>, std::io::Error> {
115 borsh::to_vec(self)
116 }
117 }
118
119impl Default for TriggerOneBtcDrawInstructionData {
120 fn default() -> Self {
121 Self::new()
122 }
123}
124
125
126
127#[derive(Clone, Debug, Default)]
141pub struct TriggerOneBtcDrawBuilder {
142 authority: Option<solana_address::Address>,
143 satrush_config: Option<solana_address::Address>,
144 one_btc_vault: Option<solana_address::Address>,
145 one_btc_vault_iteration: Option<solana_address::Address>,
146 next_one_btc_vault_iteration: Option<solana_address::Address>,
147 slot_hashes: Option<solana_address::Address>,
148 system_program: Option<solana_address::Address>,
149 event_authority: Option<solana_address::Address>,
150 program: Option<solana_address::Address>,
151 __remaining_accounts: Vec<solana_instruction::AccountMeta>,
152}
153
154impl TriggerOneBtcDrawBuilder {
155 pub fn new() -> Self {
156 Self::default()
157 }
158 #[inline(always)]
159 pub fn authority(&mut self, authority: solana_address::Address) -> &mut Self {
160 self.authority = Some(authority);
161 self
162 }
163 #[inline(always)]
164 pub fn satrush_config(&mut self, satrush_config: solana_address::Address) -> &mut Self {
165 self.satrush_config = Some(satrush_config);
166 self
167 }
168 #[inline(always)]
169 pub fn one_btc_vault(&mut self, one_btc_vault: solana_address::Address) -> &mut Self {
170 self.one_btc_vault = Some(one_btc_vault);
171 self
172 }
173 #[inline(always)]
174 pub fn one_btc_vault_iteration(&mut self, one_btc_vault_iteration: solana_address::Address) -> &mut Self {
175 self.one_btc_vault_iteration = Some(one_btc_vault_iteration);
176 self
177 }
178 #[inline(always)]
179 pub fn next_one_btc_vault_iteration(&mut self, next_one_btc_vault_iteration: solana_address::Address) -> &mut Self {
180 self.next_one_btc_vault_iteration = Some(next_one_btc_vault_iteration);
181 self
182 }
183 #[inline(always)]
186 pub fn slot_hashes(&mut self, slot_hashes: solana_address::Address) -> &mut Self {
187 self.slot_hashes = Some(slot_hashes);
188 self
189 }
190 #[inline(always)]
192 pub fn system_program(&mut self, system_program: solana_address::Address) -> &mut Self {
193 self.system_program = Some(system_program);
194 self
195 }
196 #[inline(always)]
197 pub fn event_authority(&mut self, event_authority: solana_address::Address) -> &mut Self {
198 self.event_authority = Some(event_authority);
199 self
200 }
201 #[inline(always)]
202 pub fn program(&mut self, program: solana_address::Address) -> &mut Self {
203 self.program = Some(program);
204 self
205 }
206 #[inline(always)]
208 pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
209 self.__remaining_accounts.push(account);
210 self
211 }
212 #[inline(always)]
214 pub fn add_remaining_accounts(&mut self, accounts: &[solana_instruction::AccountMeta]) -> &mut Self {
215 self.__remaining_accounts.extend_from_slice(accounts);
216 self
217 }
218 #[allow(clippy::clone_on_copy)]
219 pub fn instruction(&self) -> solana_instruction::Instruction {
220 let accounts = TriggerOneBtcDraw {
221 authority: self.authority.expect("authority is not set"),
222 satrush_config: self.satrush_config.expect("satrush_config is not set"),
223 one_btc_vault: self.one_btc_vault.expect("one_btc_vault is not set"),
224 one_btc_vault_iteration: self.one_btc_vault_iteration.expect("one_btc_vault_iteration is not set"),
225 next_one_btc_vault_iteration: self.next_one_btc_vault_iteration.expect("next_one_btc_vault_iteration is not set"),
226 slot_hashes: self.slot_hashes.unwrap_or(solana_address::address!("SysvarS1otHashes111111111111111111111111111")),
227 system_program: self.system_program.unwrap_or(solana_address::address!("11111111111111111111111111111111")),
228 event_authority: self.event_authority.expect("event_authority is not set"),
229 program: self.program.expect("program is not set"),
230 };
231
232 accounts.instruction_with_remaining_accounts(&self.__remaining_accounts)
233 }
234}
235
236 pub struct TriggerOneBtcDrawCpiAccounts<'a, 'b> {
238
239
240 pub authority: &'b solana_account_info::AccountInfo<'a>,
241
242
243 pub satrush_config: &'b solana_account_info::AccountInfo<'a>,
244
245
246 pub one_btc_vault: &'b solana_account_info::AccountInfo<'a>,
247
248
249 pub one_btc_vault_iteration: &'b solana_account_info::AccountInfo<'a>,
250
251
252 pub next_one_btc_vault_iteration: &'b solana_account_info::AccountInfo<'a>,
253 pub slot_hashes: &'b solana_account_info::AccountInfo<'a>,
258
259
260 pub system_program: &'b solana_account_info::AccountInfo<'a>,
261
262
263 pub event_authority: &'b solana_account_info::AccountInfo<'a>,
264
265
266 pub program: &'b solana_account_info::AccountInfo<'a>,
267 }
268
269pub struct TriggerOneBtcDrawCpi<'a, 'b> {
271 pub __program: &'b solana_account_info::AccountInfo<'a>,
273
274
275 pub authority: &'b solana_account_info::AccountInfo<'a>,
276
277
278 pub satrush_config: &'b solana_account_info::AccountInfo<'a>,
279
280
281 pub one_btc_vault: &'b solana_account_info::AccountInfo<'a>,
282
283
284 pub one_btc_vault_iteration: &'b solana_account_info::AccountInfo<'a>,
285
286
287 pub next_one_btc_vault_iteration: &'b solana_account_info::AccountInfo<'a>,
288 pub slot_hashes: &'b solana_account_info::AccountInfo<'a>,
293
294
295 pub system_program: &'b solana_account_info::AccountInfo<'a>,
296
297
298 pub event_authority: &'b solana_account_info::AccountInfo<'a>,
299
300
301 pub program: &'b solana_account_info::AccountInfo<'a>,
302 }
303
304impl<'a, 'b> TriggerOneBtcDrawCpi<'a, 'b> {
305 pub fn new(
306 program: &'b solana_account_info::AccountInfo<'a>,
307 accounts: TriggerOneBtcDrawCpiAccounts<'a, 'b>,
308 ) -> Self {
309 Self {
310 __program: program,
311 authority: accounts.authority,
312 satrush_config: accounts.satrush_config,
313 one_btc_vault: accounts.one_btc_vault,
314 one_btc_vault_iteration: accounts.one_btc_vault_iteration,
315 next_one_btc_vault_iteration: accounts.next_one_btc_vault_iteration,
316 slot_hashes: accounts.slot_hashes,
317 system_program: accounts.system_program,
318 event_authority: accounts.event_authority,
319 program: accounts.program,
320 }
321 }
322 #[inline(always)]
323 pub fn invoke(&self) -> solana_program_error::ProgramResult {
324 self.invoke_signed_with_remaining_accounts(&[], &[])
325 }
326 #[inline(always)]
327 pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> solana_program_error::ProgramResult {
328 self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
329 }
330 #[inline(always)]
331 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
332 self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
333 }
334 #[allow(clippy::arithmetic_side_effects)]
335 #[allow(clippy::clone_on_copy)]
336 #[allow(clippy::vec_init_then_push)]
337 pub fn invoke_signed_with_remaining_accounts(
338 &self,
339 signers_seeds: &[&[&[u8]]],
340 remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]
341 ) -> solana_program_error::ProgramResult {
342 let mut accounts = Vec::with_capacity(9+ remaining_accounts.len());
343 accounts.push(solana_instruction::AccountMeta::new(
344 *self.authority.key,
345 true
346 ));
347 accounts.push(solana_instruction::AccountMeta::new_readonly(
348 *self.satrush_config.key,
349 false
350 ));
351 accounts.push(solana_instruction::AccountMeta::new(
352 *self.one_btc_vault.key,
353 false
354 ));
355 accounts.push(solana_instruction::AccountMeta::new(
356 *self.one_btc_vault_iteration.key,
357 false
358 ));
359 accounts.push(solana_instruction::AccountMeta::new(
360 *self.next_one_btc_vault_iteration.key,
361 false
362 ));
363 accounts.push(solana_instruction::AccountMeta::new_readonly(
364 *self.slot_hashes.key,
365 false
366 ));
367 accounts.push(solana_instruction::AccountMeta::new_readonly(
368 *self.system_program.key,
369 false
370 ));
371 accounts.push(solana_instruction::AccountMeta::new_readonly(
372 *self.event_authority.key,
373 false
374 ));
375 accounts.push(solana_instruction::AccountMeta::new_readonly(
376 *self.program.key,
377 false
378 ));
379 remaining_accounts.iter().for_each(|remaining_account| {
380 accounts.push(solana_instruction::AccountMeta {
381 pubkey: *remaining_account.0.key,
382 is_signer: remaining_account.1,
383 is_writable: remaining_account.2,
384 })
385 });
386 let data = TriggerOneBtcDrawInstructionData::new().try_to_vec().unwrap();
387
388 let instruction = solana_instruction::Instruction {
389 program_id: crate::SATRUSH_ID,
390 accounts,
391 data,
392 };
393 let mut account_infos = Vec::with_capacity(10 + remaining_accounts.len());
394 account_infos.push(self.__program.clone());
395 account_infos.push(self.authority.clone());
396 account_infos.push(self.satrush_config.clone());
397 account_infos.push(self.one_btc_vault.clone());
398 account_infos.push(self.one_btc_vault_iteration.clone());
399 account_infos.push(self.next_one_btc_vault_iteration.clone());
400 account_infos.push(self.slot_hashes.clone());
401 account_infos.push(self.system_program.clone());
402 account_infos.push(self.event_authority.clone());
403 account_infos.push(self.program.clone());
404 remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
405
406 if signers_seeds.is_empty() {
407 solana_cpi::invoke(&instruction, &account_infos)
408 } else {
409 solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
410 }
411 }
412}
413
414#[derive(Clone, Debug)]
428pub struct TriggerOneBtcDrawCpiBuilder<'a, 'b> {
429 instruction: Box<TriggerOneBtcDrawCpiBuilderInstruction<'a, 'b>>,
430}
431
432impl<'a, 'b> TriggerOneBtcDrawCpiBuilder<'a, 'b> {
433 pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
434 let instruction = Box::new(TriggerOneBtcDrawCpiBuilderInstruction {
435 __program: program,
436 authority: None,
437 satrush_config: None,
438 one_btc_vault: None,
439 one_btc_vault_iteration: None,
440 next_one_btc_vault_iteration: None,
441 slot_hashes: None,
442 system_program: None,
443 event_authority: None,
444 program: None,
445 __remaining_accounts: Vec::new(),
446 });
447 Self { instruction }
448 }
449 #[inline(always)]
450 pub fn authority(&mut self, authority: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
451 self.instruction.authority = Some(authority);
452 self
453 }
454 #[inline(always)]
455 pub fn satrush_config(&mut self, satrush_config: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
456 self.instruction.satrush_config = Some(satrush_config);
457 self
458 }
459 #[inline(always)]
460 pub fn one_btc_vault(&mut self, one_btc_vault: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
461 self.instruction.one_btc_vault = Some(one_btc_vault);
462 self
463 }
464 #[inline(always)]
465 pub fn one_btc_vault_iteration(&mut self, one_btc_vault_iteration: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
466 self.instruction.one_btc_vault_iteration = Some(one_btc_vault_iteration);
467 self
468 }
469 #[inline(always)]
470 pub fn next_one_btc_vault_iteration(&mut self, next_one_btc_vault_iteration: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
471 self.instruction.next_one_btc_vault_iteration = Some(next_one_btc_vault_iteration);
472 self
473 }
474 #[inline(always)]
476 pub fn slot_hashes(&mut self, slot_hashes: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
477 self.instruction.slot_hashes = Some(slot_hashes);
478 self
479 }
480 #[inline(always)]
481 pub fn system_program(&mut self, system_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
482 self.instruction.system_program = Some(system_program);
483 self
484 }
485 #[inline(always)]
486 pub fn event_authority(&mut self, event_authority: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
487 self.instruction.event_authority = Some(event_authority);
488 self
489 }
490 #[inline(always)]
491 pub fn program(&mut self, program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
492 self.instruction.program = Some(program);
493 self
494 }
495 #[inline(always)]
497 pub fn add_remaining_account(&mut self, account: &'b solana_account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
498 self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
499 self
500 }
501 #[inline(always)]
506 pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
507 self.instruction.__remaining_accounts.extend_from_slice(accounts);
508 self
509 }
510 #[inline(always)]
511 pub fn invoke(&self) -> solana_program_error::ProgramResult {
512 self.invoke_signed(&[])
513 }
514 #[allow(clippy::clone_on_copy)]
515 #[allow(clippy::vec_init_then_push)]
516 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
517 let instruction = TriggerOneBtcDrawCpi {
518 __program: self.instruction.__program,
519
520 authority: self.instruction.authority.expect("authority is not set"),
521
522 satrush_config: self.instruction.satrush_config.expect("satrush_config is not set"),
523
524 one_btc_vault: self.instruction.one_btc_vault.expect("one_btc_vault is not set"),
525
526 one_btc_vault_iteration: self.instruction.one_btc_vault_iteration.expect("one_btc_vault_iteration is not set"),
527
528 next_one_btc_vault_iteration: self.instruction.next_one_btc_vault_iteration.expect("next_one_btc_vault_iteration is not set"),
529
530 slot_hashes: self.instruction.slot_hashes.expect("slot_hashes is not set"),
531
532 system_program: self.instruction.system_program.expect("system_program is not set"),
533
534 event_authority: self.instruction.event_authority.expect("event_authority is not set"),
535
536 program: self.instruction.program.expect("program is not set"),
537 };
538 instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
539 }
540}
541
542#[derive(Clone, Debug)]
543struct TriggerOneBtcDrawCpiBuilderInstruction<'a, 'b> {
544 __program: &'b solana_account_info::AccountInfo<'a>,
545 authority: Option<&'b solana_account_info::AccountInfo<'a>>,
546 satrush_config: Option<&'b solana_account_info::AccountInfo<'a>>,
547 one_btc_vault: Option<&'b solana_account_info::AccountInfo<'a>>,
548 one_btc_vault_iteration: Option<&'b solana_account_info::AccountInfo<'a>>,
549 next_one_btc_vault_iteration: Option<&'b solana_account_info::AccountInfo<'a>>,
550 slot_hashes: Option<&'b solana_account_info::AccountInfo<'a>>,
551 system_program: Option<&'b solana_account_info::AccountInfo<'a>>,
552 event_authority: Option<&'b solana_account_info::AccountInfo<'a>>,
553 program: Option<&'b solana_account_info::AccountInfo<'a>>,
554 __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
556}
557