1use borsh::BorshSerialize;
9use borsh::BorshDeserialize;
10
11pub const DEPLOY_PUBLIC_DISCRIMINATOR: [u8; 8] = [193, 31, 240, 159, 30, 224, 157, 85];
12
13#[derive(Debug)]
15pub struct DeployPublic {
16
17
18 pub authority: solana_address::Address,
19
20
21 pub satrush_config: solana_address::Address,
22
23
24 pub board: solana_address::Address,
25 pub round: solana_address::Address,
32
33
34 pub usd_mint: solana_address::Address,
35 pub authority_usd_ata: solana_address::Address,
40 pub board_usd_ata: solana_address::Address,
45 pub public_deployment: solana_address::Address,
51 pub miner: solana_address::Address,
57
58
59 pub token_program: solana_address::Address,
60
61
62 pub system_program: solana_address::Address,
63
64
65 pub event_authority: solana_address::Address,
66
67
68 pub program: solana_address::Address,
69 }
70
71impl DeployPublic {
72 pub fn instruction(&self, args: DeployPublicInstructionArgs) -> solana_instruction::Instruction {
73 self.instruction_with_remaining_accounts(args, &[])
74 }
75 #[allow(clippy::arithmetic_side_effects)]
76 #[allow(clippy::vec_init_then_push)]
77 pub fn instruction_with_remaining_accounts(&self, args: DeployPublicInstructionArgs, remaining_accounts: &[solana_instruction::AccountMeta]) -> solana_instruction::Instruction {
78 let mut accounts = Vec::with_capacity(13+ remaining_accounts.len());
79 accounts.push(solana_instruction::AccountMeta::new(
80 self.authority,
81 true
82 ));
83 accounts.push(solana_instruction::AccountMeta::new_readonly(
84 self.satrush_config,
85 false
86 ));
87 accounts.push(solana_instruction::AccountMeta::new(
88 self.board,
89 false
90 ));
91 accounts.push(solana_instruction::AccountMeta::new(
92 self.round,
93 false
94 ));
95 accounts.push(solana_instruction::AccountMeta::new_readonly(
96 self.usd_mint,
97 false
98 ));
99 accounts.push(solana_instruction::AccountMeta::new(
100 self.authority_usd_ata,
101 false
102 ));
103 accounts.push(solana_instruction::AccountMeta::new(
104 self.board_usd_ata,
105 false
106 ));
107 accounts.push(solana_instruction::AccountMeta::new(
108 self.public_deployment,
109 false
110 ));
111 accounts.push(solana_instruction::AccountMeta::new(
112 self.miner,
113 false
114 ));
115 accounts.push(solana_instruction::AccountMeta::new_readonly(
116 self.token_program,
117 false
118 ));
119 accounts.push(solana_instruction::AccountMeta::new_readonly(
120 self.system_program,
121 false
122 ));
123 accounts.push(solana_instruction::AccountMeta::new_readonly(
124 self.event_authority,
125 false
126 ));
127 accounts.push(solana_instruction::AccountMeta::new_readonly(
128 self.program,
129 false
130 ));
131 accounts.extend_from_slice(remaining_accounts);
132 let mut data = DeployPublicInstructionData::new().try_to_vec().unwrap();
133 let mut args = args.try_to_vec().unwrap();
134 data.append(&mut args);
135
136 solana_instruction::Instruction {
137 program_id: crate::SATRUSH_ID,
138 accounts,
139 data,
140 }
141 }
142}
143
144#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
145 pub struct DeployPublicInstructionData {
146 discriminator: [u8; 8],
147 }
148
149impl DeployPublicInstructionData {
150 pub fn new() -> Self {
151 Self {
152 discriminator: [193, 31, 240, 159, 30, 224, 157, 85],
153 }
154 }
155
156 pub(crate) fn try_to_vec(&self) -> Result<Vec<u8>, std::io::Error> {
157 borsh::to_vec(self)
158 }
159 }
160
161impl Default for DeployPublicInstructionData {
162 fn default() -> Self {
163 Self::new()
164 }
165}
166
167#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
168 pub struct DeployPublicInstructionArgs {
169 pub selection_mask: u32,
170 pub amount: u64,
171 }
172
173impl DeployPublicInstructionArgs {
174 pub(crate) fn try_to_vec(&self) -> Result<Vec<u8>, std::io::Error> {
175 borsh::to_vec(self)
176 }
177}
178
179
180#[derive(Clone, Debug, Default)]
198pub struct DeployPublicBuilder {
199 authority: Option<solana_address::Address>,
200 satrush_config: Option<solana_address::Address>,
201 board: Option<solana_address::Address>,
202 round: Option<solana_address::Address>,
203 usd_mint: Option<solana_address::Address>,
204 authority_usd_ata: Option<solana_address::Address>,
205 board_usd_ata: Option<solana_address::Address>,
206 public_deployment: Option<solana_address::Address>,
207 miner: Option<solana_address::Address>,
208 token_program: Option<solana_address::Address>,
209 system_program: Option<solana_address::Address>,
210 event_authority: Option<solana_address::Address>,
211 program: Option<solana_address::Address>,
212 selection_mask: Option<u32>,
213 amount: Option<u64>,
214 __remaining_accounts: Vec<solana_instruction::AccountMeta>,
215}
216
217impl DeployPublicBuilder {
218 pub fn new() -> Self {
219 Self::default()
220 }
221 #[inline(always)]
222 pub fn authority(&mut self, authority: solana_address::Address) -> &mut Self {
223 self.authority = Some(authority);
224 self
225 }
226 #[inline(always)]
227 pub fn satrush_config(&mut self, satrush_config: solana_address::Address) -> &mut Self {
228 self.satrush_config = Some(satrush_config);
229 self
230 }
231 #[inline(always)]
232 pub fn board(&mut self, board: solana_address::Address) -> &mut Self {
233 self.board = Some(board);
234 self
235 }
236 #[inline(always)]
240 pub fn round(&mut self, round: solana_address::Address) -> &mut Self {
241 self.round = Some(round);
242 self
243 }
244 #[inline(always)]
245 pub fn usd_mint(&mut self, usd_mint: solana_address::Address) -> &mut Self {
246 self.usd_mint = Some(usd_mint);
247 self
248 }
249 #[inline(always)]
251 pub fn authority_usd_ata(&mut self, authority_usd_ata: solana_address::Address) -> &mut Self {
252 self.authority_usd_ata = Some(authority_usd_ata);
253 self
254 }
255 #[inline(always)]
257 pub fn board_usd_ata(&mut self, board_usd_ata: solana_address::Address) -> &mut Self {
258 self.board_usd_ata = Some(board_usd_ata);
259 self
260 }
261 #[inline(always)]
264 pub fn public_deployment(&mut self, public_deployment: solana_address::Address) -> &mut Self {
265 self.public_deployment = Some(public_deployment);
266 self
267 }
268 #[inline(always)]
271 pub fn miner(&mut self, miner: solana_address::Address) -> &mut Self {
272 self.miner = Some(miner);
273 self
274 }
275 #[inline(always)]
277 pub fn token_program(&mut self, token_program: solana_address::Address) -> &mut Self {
278 self.token_program = Some(token_program);
279 self
280 }
281 #[inline(always)]
283 pub fn system_program(&mut self, system_program: solana_address::Address) -> &mut Self {
284 self.system_program = Some(system_program);
285 self
286 }
287 #[inline(always)]
288 pub fn event_authority(&mut self, event_authority: solana_address::Address) -> &mut Self {
289 self.event_authority = Some(event_authority);
290 self
291 }
292 #[inline(always)]
293 pub fn program(&mut self, program: solana_address::Address) -> &mut Self {
294 self.program = Some(program);
295 self
296 }
297 #[inline(always)]
298 pub fn selection_mask(&mut self, selection_mask: u32) -> &mut Self {
299 self.selection_mask = Some(selection_mask);
300 self
301 }
302 #[inline(always)]
303 pub fn amount(&mut self, amount: u64) -> &mut Self {
304 self.amount = Some(amount);
305 self
306 }
307 #[inline(always)]
309 pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
310 self.__remaining_accounts.push(account);
311 self
312 }
313 #[inline(always)]
315 pub fn add_remaining_accounts(&mut self, accounts: &[solana_instruction::AccountMeta]) -> &mut Self {
316 self.__remaining_accounts.extend_from_slice(accounts);
317 self
318 }
319 #[allow(clippy::clone_on_copy)]
320 pub fn instruction(&self) -> solana_instruction::Instruction {
321 let accounts = DeployPublic {
322 authority: self.authority.expect("authority is not set"),
323 satrush_config: self.satrush_config.expect("satrush_config is not set"),
324 board: self.board.expect("board is not set"),
325 round: self.round.expect("round is not set"),
326 usd_mint: self.usd_mint.expect("usd_mint is not set"),
327 authority_usd_ata: self.authority_usd_ata.expect("authority_usd_ata is not set"),
328 board_usd_ata: self.board_usd_ata.expect("board_usd_ata is not set"),
329 public_deployment: self.public_deployment.expect("public_deployment is not set"),
330 miner: self.miner.expect("miner is not set"),
331 token_program: self.token_program.unwrap_or(solana_address::address!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA")),
332 system_program: self.system_program.unwrap_or(solana_address::address!("11111111111111111111111111111111")),
333 event_authority: self.event_authority.expect("event_authority is not set"),
334 program: self.program.expect("program is not set"),
335 };
336 let args = DeployPublicInstructionArgs {
337 selection_mask: self.selection_mask.clone().expect("selection_mask is not set"),
338 amount: self.amount.clone().expect("amount is not set"),
339 };
340
341 accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
342 }
343}
344
345 pub struct DeployPublicCpiAccounts<'a, 'b> {
347
348
349 pub authority: &'b solana_account_info::AccountInfo<'a>,
350
351
352 pub satrush_config: &'b solana_account_info::AccountInfo<'a>,
353
354
355 pub board: &'b solana_account_info::AccountInfo<'a>,
356 pub round: &'b solana_account_info::AccountInfo<'a>,
363
364
365 pub usd_mint: &'b solana_account_info::AccountInfo<'a>,
366 pub authority_usd_ata: &'b solana_account_info::AccountInfo<'a>,
371 pub board_usd_ata: &'b solana_account_info::AccountInfo<'a>,
376 pub public_deployment: &'b solana_account_info::AccountInfo<'a>,
382 pub miner: &'b solana_account_info::AccountInfo<'a>,
388
389
390 pub token_program: &'b solana_account_info::AccountInfo<'a>,
391
392
393 pub system_program: &'b solana_account_info::AccountInfo<'a>,
394
395
396 pub event_authority: &'b solana_account_info::AccountInfo<'a>,
397
398
399 pub program: &'b solana_account_info::AccountInfo<'a>,
400 }
401
402pub struct DeployPublicCpi<'a, 'b> {
404 pub __program: &'b solana_account_info::AccountInfo<'a>,
406
407
408 pub authority: &'b solana_account_info::AccountInfo<'a>,
409
410
411 pub satrush_config: &'b solana_account_info::AccountInfo<'a>,
412
413
414 pub board: &'b solana_account_info::AccountInfo<'a>,
415 pub round: &'b solana_account_info::AccountInfo<'a>,
422
423
424 pub usd_mint: &'b solana_account_info::AccountInfo<'a>,
425 pub authority_usd_ata: &'b solana_account_info::AccountInfo<'a>,
430 pub board_usd_ata: &'b solana_account_info::AccountInfo<'a>,
435 pub public_deployment: &'b solana_account_info::AccountInfo<'a>,
441 pub miner: &'b solana_account_info::AccountInfo<'a>,
447
448
449 pub token_program: &'b solana_account_info::AccountInfo<'a>,
450
451
452 pub system_program: &'b solana_account_info::AccountInfo<'a>,
453
454
455 pub event_authority: &'b solana_account_info::AccountInfo<'a>,
456
457
458 pub program: &'b solana_account_info::AccountInfo<'a>,
459 pub __args: DeployPublicInstructionArgs,
461 }
462
463impl<'a, 'b> DeployPublicCpi<'a, 'b> {
464 pub fn new(
465 program: &'b solana_account_info::AccountInfo<'a>,
466 accounts: DeployPublicCpiAccounts<'a, 'b>,
467 args: DeployPublicInstructionArgs,
468 ) -> Self {
469 Self {
470 __program: program,
471 authority: accounts.authority,
472 satrush_config: accounts.satrush_config,
473 board: accounts.board,
474 round: accounts.round,
475 usd_mint: accounts.usd_mint,
476 authority_usd_ata: accounts.authority_usd_ata,
477 board_usd_ata: accounts.board_usd_ata,
478 public_deployment: accounts.public_deployment,
479 miner: accounts.miner,
480 token_program: accounts.token_program,
481 system_program: accounts.system_program,
482 event_authority: accounts.event_authority,
483 program: accounts.program,
484 __args: args,
485 }
486 }
487 #[inline(always)]
488 pub fn invoke(&self) -> solana_program_error::ProgramResult {
489 self.invoke_signed_with_remaining_accounts(&[], &[])
490 }
491 #[inline(always)]
492 pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> solana_program_error::ProgramResult {
493 self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
494 }
495 #[inline(always)]
496 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
497 self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
498 }
499 #[allow(clippy::arithmetic_side_effects)]
500 #[allow(clippy::clone_on_copy)]
501 #[allow(clippy::vec_init_then_push)]
502 pub fn invoke_signed_with_remaining_accounts(
503 &self,
504 signers_seeds: &[&[&[u8]]],
505 remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]
506 ) -> solana_program_error::ProgramResult {
507 let mut accounts = Vec::with_capacity(13+ remaining_accounts.len());
508 accounts.push(solana_instruction::AccountMeta::new(
509 *self.authority.key,
510 true
511 ));
512 accounts.push(solana_instruction::AccountMeta::new_readonly(
513 *self.satrush_config.key,
514 false
515 ));
516 accounts.push(solana_instruction::AccountMeta::new(
517 *self.board.key,
518 false
519 ));
520 accounts.push(solana_instruction::AccountMeta::new(
521 *self.round.key,
522 false
523 ));
524 accounts.push(solana_instruction::AccountMeta::new_readonly(
525 *self.usd_mint.key,
526 false
527 ));
528 accounts.push(solana_instruction::AccountMeta::new(
529 *self.authority_usd_ata.key,
530 false
531 ));
532 accounts.push(solana_instruction::AccountMeta::new(
533 *self.board_usd_ata.key,
534 false
535 ));
536 accounts.push(solana_instruction::AccountMeta::new(
537 *self.public_deployment.key,
538 false
539 ));
540 accounts.push(solana_instruction::AccountMeta::new(
541 *self.miner.key,
542 false
543 ));
544 accounts.push(solana_instruction::AccountMeta::new_readonly(
545 *self.token_program.key,
546 false
547 ));
548 accounts.push(solana_instruction::AccountMeta::new_readonly(
549 *self.system_program.key,
550 false
551 ));
552 accounts.push(solana_instruction::AccountMeta::new_readonly(
553 *self.event_authority.key,
554 false
555 ));
556 accounts.push(solana_instruction::AccountMeta::new_readonly(
557 *self.program.key,
558 false
559 ));
560 remaining_accounts.iter().for_each(|remaining_account| {
561 accounts.push(solana_instruction::AccountMeta {
562 pubkey: *remaining_account.0.key,
563 is_signer: remaining_account.1,
564 is_writable: remaining_account.2,
565 })
566 });
567 let mut data = DeployPublicInstructionData::new().try_to_vec().unwrap();
568 let mut args = self.__args.try_to_vec().unwrap();
569 data.append(&mut args);
570
571 let instruction = solana_instruction::Instruction {
572 program_id: crate::SATRUSH_ID,
573 accounts,
574 data,
575 };
576 let mut account_infos = Vec::with_capacity(14 + remaining_accounts.len());
577 account_infos.push(self.__program.clone());
578 account_infos.push(self.authority.clone());
579 account_infos.push(self.satrush_config.clone());
580 account_infos.push(self.board.clone());
581 account_infos.push(self.round.clone());
582 account_infos.push(self.usd_mint.clone());
583 account_infos.push(self.authority_usd_ata.clone());
584 account_infos.push(self.board_usd_ata.clone());
585 account_infos.push(self.public_deployment.clone());
586 account_infos.push(self.miner.clone());
587 account_infos.push(self.token_program.clone());
588 account_infos.push(self.system_program.clone());
589 account_infos.push(self.event_authority.clone());
590 account_infos.push(self.program.clone());
591 remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
592
593 if signers_seeds.is_empty() {
594 solana_cpi::invoke(&instruction, &account_infos)
595 } else {
596 solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
597 }
598 }
599}
600
601#[derive(Clone, Debug)]
619pub struct DeployPublicCpiBuilder<'a, 'b> {
620 instruction: Box<DeployPublicCpiBuilderInstruction<'a, 'b>>,
621}
622
623impl<'a, 'b> DeployPublicCpiBuilder<'a, 'b> {
624 pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
625 let instruction = Box::new(DeployPublicCpiBuilderInstruction {
626 __program: program,
627 authority: None,
628 satrush_config: None,
629 board: None,
630 round: None,
631 usd_mint: None,
632 authority_usd_ata: None,
633 board_usd_ata: None,
634 public_deployment: None,
635 miner: None,
636 token_program: None,
637 system_program: None,
638 event_authority: None,
639 program: None,
640 selection_mask: None,
641 amount: None,
642 __remaining_accounts: Vec::new(),
643 });
644 Self { instruction }
645 }
646 #[inline(always)]
647 pub fn authority(&mut self, authority: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
648 self.instruction.authority = Some(authority);
649 self
650 }
651 #[inline(always)]
652 pub fn satrush_config(&mut self, satrush_config: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
653 self.instruction.satrush_config = Some(satrush_config);
654 self
655 }
656 #[inline(always)]
657 pub fn board(&mut self, board: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
658 self.instruction.board = Some(board);
659 self
660 }
661 #[inline(always)]
665 pub fn round(&mut self, round: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
666 self.instruction.round = Some(round);
667 self
668 }
669 #[inline(always)]
670 pub fn usd_mint(&mut self, usd_mint: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
671 self.instruction.usd_mint = Some(usd_mint);
672 self
673 }
674 #[inline(always)]
676 pub fn authority_usd_ata(&mut self, authority_usd_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
677 self.instruction.authority_usd_ata = Some(authority_usd_ata);
678 self
679 }
680 #[inline(always)]
682 pub fn board_usd_ata(&mut self, board_usd_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
683 self.instruction.board_usd_ata = Some(board_usd_ata);
684 self
685 }
686 #[inline(always)]
689 pub fn public_deployment(&mut self, public_deployment: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
690 self.instruction.public_deployment = Some(public_deployment);
691 self
692 }
693 #[inline(always)]
696 pub fn miner(&mut self, miner: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
697 self.instruction.miner = Some(miner);
698 self
699 }
700 #[inline(always)]
701 pub fn token_program(&mut self, token_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
702 self.instruction.token_program = Some(token_program);
703 self
704 }
705 #[inline(always)]
706 pub fn system_program(&mut self, system_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
707 self.instruction.system_program = Some(system_program);
708 self
709 }
710 #[inline(always)]
711 pub fn event_authority(&mut self, event_authority: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
712 self.instruction.event_authority = Some(event_authority);
713 self
714 }
715 #[inline(always)]
716 pub fn program(&mut self, program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
717 self.instruction.program = Some(program);
718 self
719 }
720 #[inline(always)]
721 pub fn selection_mask(&mut self, selection_mask: u32) -> &mut Self {
722 self.instruction.selection_mask = Some(selection_mask);
723 self
724 }
725 #[inline(always)]
726 pub fn amount(&mut self, amount: u64) -> &mut Self {
727 self.instruction.amount = Some(amount);
728 self
729 }
730 #[inline(always)]
732 pub fn add_remaining_account(&mut self, account: &'b solana_account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
733 self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
734 self
735 }
736 #[inline(always)]
741 pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
742 self.instruction.__remaining_accounts.extend_from_slice(accounts);
743 self
744 }
745 #[inline(always)]
746 pub fn invoke(&self) -> solana_program_error::ProgramResult {
747 self.invoke_signed(&[])
748 }
749 #[allow(clippy::clone_on_copy)]
750 #[allow(clippy::vec_init_then_push)]
751 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
752 let args = DeployPublicInstructionArgs {
753 selection_mask: self.instruction.selection_mask.clone().expect("selection_mask is not set"),
754 amount: self.instruction.amount.clone().expect("amount is not set"),
755 };
756 let instruction = DeployPublicCpi {
757 __program: self.instruction.__program,
758
759 authority: self.instruction.authority.expect("authority is not set"),
760
761 satrush_config: self.instruction.satrush_config.expect("satrush_config is not set"),
762
763 board: self.instruction.board.expect("board is not set"),
764
765 round: self.instruction.round.expect("round is not set"),
766
767 usd_mint: self.instruction.usd_mint.expect("usd_mint is not set"),
768
769 authority_usd_ata: self.instruction.authority_usd_ata.expect("authority_usd_ata is not set"),
770
771 board_usd_ata: self.instruction.board_usd_ata.expect("board_usd_ata is not set"),
772
773 public_deployment: self.instruction.public_deployment.expect("public_deployment is not set"),
774
775 miner: self.instruction.miner.expect("miner is not set"),
776
777 token_program: self.instruction.token_program.expect("token_program is not set"),
778
779 system_program: self.instruction.system_program.expect("system_program is not set"),
780
781 event_authority: self.instruction.event_authority.expect("event_authority is not set"),
782
783 program: self.instruction.program.expect("program is not set"),
784 __args: args,
785 };
786 instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
787 }
788}
789
790#[derive(Clone, Debug)]
791struct DeployPublicCpiBuilderInstruction<'a, 'b> {
792 __program: &'b solana_account_info::AccountInfo<'a>,
793 authority: Option<&'b solana_account_info::AccountInfo<'a>>,
794 satrush_config: Option<&'b solana_account_info::AccountInfo<'a>>,
795 board: Option<&'b solana_account_info::AccountInfo<'a>>,
796 round: Option<&'b solana_account_info::AccountInfo<'a>>,
797 usd_mint: Option<&'b solana_account_info::AccountInfo<'a>>,
798 authority_usd_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
799 board_usd_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
800 public_deployment: Option<&'b solana_account_info::AccountInfo<'a>>,
801 miner: Option<&'b solana_account_info::AccountInfo<'a>>,
802 token_program: Option<&'b solana_account_info::AccountInfo<'a>>,
803 system_program: Option<&'b solana_account_info::AccountInfo<'a>>,
804 event_authority: Option<&'b solana_account_info::AccountInfo<'a>>,
805 program: Option<&'b solana_account_info::AccountInfo<'a>>,
806 selection_mask: Option<u32>,
807 amount: Option<u64>,
808 __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
810}
811