Skip to main content

satrush_client/generated/instructions/
deploy_public.rs

1//! This code was AUTOGENERATED using the codama library.
2//! Please DO NOT EDIT THIS FILE, instead use visitors
3//! to add features, then rerun codama to update it.
4//!
5//! <https://github.com/codama-idl/codama>
6//!
7
8use borsh::BorshSerialize;
9use borsh::BorshDeserialize;
10
11pub const DEPLOY_PUBLIC_DISCRIMINATOR: [u8; 8] = [193, 31, 240, 159, 30, 224, 157, 85];
12
13/// Accounts.
14#[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                /// Round the miner is deploying into. Must be the board's current round.
26/// Stays a regular `Account`: its `id` feeds PDA seeds here and below, and
27/// the IDL seed parser can only encode plain field paths like `round.id`.
28
29    
30              
31          pub round: solana_address::Address,
32          
33              
34          pub usd_mint: solana_address::Address,
35                /// Miner's USD token account funds are pulled from.
36
37    
38              
39          pub authority_usd_ata: solana_address::Address,
40                /// Board's USD deposit pool that funds are deposited into.
41
42    
43              
44          pub board_usd_ata: solana_address::Address,
45                /// Per-(round, miner) deployment record. Init fails if the miner already
46/// deployed into this round.
47
48    
49              
50          pub public_deployment: solana_address::Address,
51                /// Miner profile for `authority`. Created lazily on the first deploy and
52/// loaded on subsequent ones; its streak advances on every play.
53
54    
55              
56          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/// Instruction builder for `DeployPublic`.
181///
182/// ### Accounts:
183///
184                      ///   0. `[writable, signer]` authority
185          ///   1. `[]` satrush_config
186                ///   2. `[writable]` board
187                ///   3. `[writable]` round
188          ///   4. `[]` usd_mint
189                ///   5. `[writable]` authority_usd_ata
190                ///   6. `[writable]` board_usd_ata
191                ///   7. `[writable]` public_deployment
192                ///   8. `[writable]` miner
193                ///   9. `[optional]` token_program (default to `TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA`)
194                ///   10. `[optional]` system_program (default to `11111111111111111111111111111111`)
195          ///   11. `[]` event_authority
196          ///   12. `[]` program
197#[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            /// Round the miner is deploying into. Must be the board's current round.
237/// Stays a regular `Account`: its `id` feeds PDA seeds here and below, and
238/// the IDL seed parser can only encode plain field paths like `round.id`.
239#[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            /// Miner's USD token account funds are pulled from.
250#[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            /// Board's USD deposit pool that funds are deposited into.
256#[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            /// Per-(round, miner) deployment record. Init fails if the miner already
262/// deployed into this round.
263#[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            /// Miner profile for `authority`. Created lazily on the first deploy and
269/// loaded on subsequent ones; its streak advances on every play.
270#[inline(always)]
271    pub fn miner(&mut self, miner: solana_address::Address) -> &mut Self {
272                        self.miner = Some(miner);
273                    self
274    }
275            /// `[optional account, default to 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA']`
276#[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            /// `[optional account, default to '11111111111111111111111111111111']`
282#[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        /// Add an additional account to the instruction.
308  #[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  /// Add additional accounts to the instruction.
314  #[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  /// `deploy_public` CPI accounts.
346  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                        /// Round the miner is deploying into. Must be the board's current round.
357/// Stays a regular `Account`: its `id` feeds PDA seeds here and below, and
358/// the IDL seed parser can only encode plain field paths like `round.id`.
359
360      
361                    
362              pub round: &'b solana_account_info::AccountInfo<'a>,
363                
364                    
365              pub usd_mint: &'b solana_account_info::AccountInfo<'a>,
366                        /// Miner's USD token account funds are pulled from.
367
368      
369                    
370              pub authority_usd_ata: &'b solana_account_info::AccountInfo<'a>,
371                        /// Board's USD deposit pool that funds are deposited into.
372
373      
374                    
375              pub board_usd_ata: &'b solana_account_info::AccountInfo<'a>,
376                        /// Per-(round, miner) deployment record. Init fails if the miner already
377/// deployed into this round.
378
379      
380                    
381              pub public_deployment: &'b solana_account_info::AccountInfo<'a>,
382                        /// Miner profile for `authority`. Created lazily on the first deploy and
383/// loaded on subsequent ones; its streak advances on every play.
384
385      
386                    
387              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
402/// `deploy_public` CPI instruction.
403pub struct DeployPublicCpi<'a, 'b> {
404  /// The program to invoke.
405  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                /// Round the miner is deploying into. Must be the board's current round.
416/// Stays a regular `Account`: its `id` feeds PDA seeds here and below, and
417/// the IDL seed parser can only encode plain field paths like `round.id`.
418
419    
420              
421          pub round: &'b solana_account_info::AccountInfo<'a>,
422          
423              
424          pub usd_mint: &'b solana_account_info::AccountInfo<'a>,
425                /// Miner's USD token account funds are pulled from.
426
427    
428              
429          pub authority_usd_ata: &'b solana_account_info::AccountInfo<'a>,
430                /// Board's USD deposit pool that funds are deposited into.
431
432    
433              
434          pub board_usd_ata: &'b solana_account_info::AccountInfo<'a>,
435                /// Per-(round, miner) deployment record. Init fails if the miner already
436/// deployed into this round.
437
438    
439              
440          pub public_deployment: &'b solana_account_info::AccountInfo<'a>,
441                /// Miner profile for `authority`. Created lazily on the first deploy and
442/// loaded on subsequent ones; its streak advances on every play.
443
444    
445              
446          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            /// The arguments for the instruction.
460    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/// Instruction builder for `DeployPublic` via CPI.
602///
603/// ### Accounts:
604///
605                      ///   0. `[writable, signer]` authority
606          ///   1. `[]` satrush_config
607                ///   2. `[writable]` board
608                ///   3. `[writable]` round
609          ///   4. `[]` usd_mint
610                ///   5. `[writable]` authority_usd_ata
611                ///   6. `[writable]` board_usd_ata
612                ///   7. `[writable]` public_deployment
613                ///   8. `[writable]` miner
614          ///   9. `[]` token_program
615          ///   10. `[]` system_program
616          ///   11. `[]` event_authority
617          ///   12. `[]` program
618#[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      /// Round the miner is deploying into. Must be the board's current round.
662/// Stays a regular `Account`: its `id` feeds PDA seeds here and below, and
663/// the IDL seed parser can only encode plain field paths like `round.id`.
664#[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      /// Miner's USD token account funds are pulled from.
675#[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      /// Board's USD deposit pool that funds are deposited into.
681#[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      /// Per-(round, miner) deployment record. Init fails if the miner already
687/// deployed into this round.
688#[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      /// Miner profile for `authority`. Created lazily on the first deploy and
694/// loaded on subsequent ones; its streak advances on every play.
695#[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        /// Add an additional account to the instruction.
731  #[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  /// Add additional accounts to the instruction.
737  ///
738  /// Each account is represented by a tuple of the `AccountInfo`, a `bool` indicating whether the account is writable or not,
739  /// and a `bool` indicating whether the account is a signer or not.
740  #[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        /// Additional instruction accounts `(AccountInfo, is_writable, is_signer)`.
809  __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
810}
811