Skip to main content

satrush_client/generated/instructions/
claim_one_btc_reward.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 CLAIM_ONE_BTC_REWARD_DISCRIMINATOR: [u8; 8] = [53, 168, 61, 211, 206, 81, 133, 175];
12
13/// Accounts.
14#[derive(Debug)]
15pub struct ClaimOneBtcReward {
16      
17              
18          pub authority: solana_address::Address,
19          
20              
21          pub one_btc_vault: solana_address::Address,
22          
23              
24          pub one_btc_vault_iteration: solana_address::Address,
25                /// The winning receipt: must belong to the signer and this iteration.
26
27    
28              
29          pub ticket: solana_address::Address,
30          
31              
32          pub btc_mint: solana_address::Address,
33          
34              
35          pub one_btc_vault_btc_ata: solana_address::Address,
36          
37              
38          pub authority_btc_ata: solana_address::Address,
39          
40              
41          pub token_program: solana_address::Address,
42          
43              
44          pub associated_token_program: solana_address::Address,
45          
46              
47          pub system_program: solana_address::Address,
48      }
49
50impl ClaimOneBtcReward {
51  pub fn instruction(&self) -> solana_instruction::Instruction {
52    self.instruction_with_remaining_accounts(&[])
53  }
54  #[allow(clippy::arithmetic_side_effects)]
55  #[allow(clippy::vec_init_then_push)]
56  pub fn instruction_with_remaining_accounts(&self, remaining_accounts: &[solana_instruction::AccountMeta]) -> solana_instruction::Instruction {
57    let mut accounts = Vec::with_capacity(10+ remaining_accounts.len());
58                            accounts.push(solana_instruction::AccountMeta::new(
59            self.authority,
60            true
61          ));
62                                          accounts.push(solana_instruction::AccountMeta::new(
63            self.one_btc_vault,
64            false
65          ));
66                                          accounts.push(solana_instruction::AccountMeta::new(
67            self.one_btc_vault_iteration,
68            false
69          ));
70                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
71            self.ticket,
72            false
73          ));
74                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
75            self.btc_mint,
76            false
77          ));
78                                          accounts.push(solana_instruction::AccountMeta::new(
79            self.one_btc_vault_btc_ata,
80            false
81          ));
82                                          accounts.push(solana_instruction::AccountMeta::new(
83            self.authority_btc_ata,
84            false
85          ));
86                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
87            self.token_program,
88            false
89          ));
90                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
91            self.associated_token_program,
92            false
93          ));
94                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
95            self.system_program,
96            false
97          ));
98                      accounts.extend_from_slice(remaining_accounts);
99    let data = ClaimOneBtcRewardInstructionData::new().try_to_vec().unwrap();
100    
101    solana_instruction::Instruction {
102      program_id: crate::SATRUSH_ID,
103      accounts,
104      data,
105    }
106  }
107}
108
109#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
110 pub struct ClaimOneBtcRewardInstructionData {
111            discriminator: [u8; 8],
112      }
113
114impl ClaimOneBtcRewardInstructionData {
115  pub fn new() -> Self {
116    Self {
117                        discriminator: [53, 168, 61, 211, 206, 81, 133, 175],
118                  }
119  }
120
121    pub(crate) fn try_to_vec(&self) -> Result<Vec<u8>, std::io::Error> {
122    borsh::to_vec(self)
123  }
124  }
125
126impl Default for ClaimOneBtcRewardInstructionData {
127  fn default() -> Self {
128    Self::new()
129  }
130}
131
132
133
134/// Instruction builder for `ClaimOneBtcReward`.
135///
136/// ### Accounts:
137///
138                      ///   0. `[writable, signer]` authority
139                ///   1. `[writable]` one_btc_vault
140                ///   2. `[writable]` one_btc_vault_iteration
141          ///   3. `[]` ticket
142          ///   4. `[]` btc_mint
143                ///   5. `[writable]` one_btc_vault_btc_ata
144                ///   6. `[writable]` authority_btc_ata
145                ///   7. `[optional]` token_program (default to `TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA`)
146                ///   8. `[optional]` associated_token_program (default to `ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL`)
147                ///   9. `[optional]` system_program (default to `11111111111111111111111111111111`)
148#[derive(Clone, Debug, Default)]
149pub struct ClaimOneBtcRewardBuilder {
150            authority: Option<solana_address::Address>,
151                one_btc_vault: Option<solana_address::Address>,
152                one_btc_vault_iteration: Option<solana_address::Address>,
153                ticket: Option<solana_address::Address>,
154                btc_mint: Option<solana_address::Address>,
155                one_btc_vault_btc_ata: Option<solana_address::Address>,
156                authority_btc_ata: Option<solana_address::Address>,
157                token_program: Option<solana_address::Address>,
158                associated_token_program: Option<solana_address::Address>,
159                system_program: Option<solana_address::Address>,
160                __remaining_accounts: Vec<solana_instruction::AccountMeta>,
161}
162
163impl ClaimOneBtcRewardBuilder {
164  pub fn new() -> Self {
165    Self::default()
166  }
167            #[inline(always)]
168    pub fn authority(&mut self, authority: solana_address::Address) -> &mut Self {
169                        self.authority = Some(authority);
170                    self
171    }
172            #[inline(always)]
173    pub fn one_btc_vault(&mut self, one_btc_vault: solana_address::Address) -> &mut Self {
174                        self.one_btc_vault = Some(one_btc_vault);
175                    self
176    }
177            #[inline(always)]
178    pub fn one_btc_vault_iteration(&mut self, one_btc_vault_iteration: solana_address::Address) -> &mut Self {
179                        self.one_btc_vault_iteration = Some(one_btc_vault_iteration);
180                    self
181    }
182            /// The winning receipt: must belong to the signer and this iteration.
183#[inline(always)]
184    pub fn ticket(&mut self, ticket: solana_address::Address) -> &mut Self {
185                        self.ticket = Some(ticket);
186                    self
187    }
188            #[inline(always)]
189    pub fn btc_mint(&mut self, btc_mint: solana_address::Address) -> &mut Self {
190                        self.btc_mint = Some(btc_mint);
191                    self
192    }
193            #[inline(always)]
194    pub fn one_btc_vault_btc_ata(&mut self, one_btc_vault_btc_ata: solana_address::Address) -> &mut Self {
195                        self.one_btc_vault_btc_ata = Some(one_btc_vault_btc_ata);
196                    self
197    }
198            #[inline(always)]
199    pub fn authority_btc_ata(&mut self, authority_btc_ata: solana_address::Address) -> &mut Self {
200                        self.authority_btc_ata = Some(authority_btc_ata);
201                    self
202    }
203            /// `[optional account, default to 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA']`
204#[inline(always)]
205    pub fn token_program(&mut self, token_program: solana_address::Address) -> &mut Self {
206                        self.token_program = Some(token_program);
207                    self
208    }
209            /// `[optional account, default to 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL']`
210#[inline(always)]
211    pub fn associated_token_program(&mut self, associated_token_program: solana_address::Address) -> &mut Self {
212                        self.associated_token_program = Some(associated_token_program);
213                    self
214    }
215            /// `[optional account, default to '11111111111111111111111111111111']`
216#[inline(always)]
217    pub fn system_program(&mut self, system_program: solana_address::Address) -> &mut Self {
218                        self.system_program = Some(system_program);
219                    self
220    }
221            /// Add an additional account to the instruction.
222  #[inline(always)]
223  pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
224    self.__remaining_accounts.push(account);
225    self
226  }
227  /// Add additional accounts to the instruction.
228  #[inline(always)]
229  pub fn add_remaining_accounts(&mut self, accounts: &[solana_instruction::AccountMeta]) -> &mut Self {
230    self.__remaining_accounts.extend_from_slice(accounts);
231    self
232  }
233  #[allow(clippy::clone_on_copy)]
234  pub fn instruction(&self) -> solana_instruction::Instruction {
235    let accounts = ClaimOneBtcReward {
236                              authority: self.authority.expect("authority is not set"),
237                                        one_btc_vault: self.one_btc_vault.expect("one_btc_vault is not set"),
238                                        one_btc_vault_iteration: self.one_btc_vault_iteration.expect("one_btc_vault_iteration is not set"),
239                                        ticket: self.ticket.expect("ticket is not set"),
240                                        btc_mint: self.btc_mint.expect("btc_mint is not set"),
241                                        one_btc_vault_btc_ata: self.one_btc_vault_btc_ata.expect("one_btc_vault_btc_ata is not set"),
242                                        authority_btc_ata: self.authority_btc_ata.expect("authority_btc_ata is not set"),
243                                        token_program: self.token_program.unwrap_or(solana_address::address!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA")),
244                                        associated_token_program: self.associated_token_program.unwrap_or(solana_address::address!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL")),
245                                        system_program: self.system_program.unwrap_or(solana_address::address!("11111111111111111111111111111111")),
246                      };
247    
248    accounts.instruction_with_remaining_accounts(&self.__remaining_accounts)
249  }
250}
251
252  /// `claim_one_btc_reward` CPI accounts.
253  pub struct ClaimOneBtcRewardCpiAccounts<'a, 'b> {
254          
255                    
256              pub authority: &'b solana_account_info::AccountInfo<'a>,
257                
258                    
259              pub one_btc_vault: &'b solana_account_info::AccountInfo<'a>,
260                
261                    
262              pub one_btc_vault_iteration: &'b solana_account_info::AccountInfo<'a>,
263                        /// The winning receipt: must belong to the signer and this iteration.
264
265      
266                    
267              pub ticket: &'b solana_account_info::AccountInfo<'a>,
268                
269                    
270              pub btc_mint: &'b solana_account_info::AccountInfo<'a>,
271                
272                    
273              pub one_btc_vault_btc_ata: &'b solana_account_info::AccountInfo<'a>,
274                
275                    
276              pub authority_btc_ata: &'b solana_account_info::AccountInfo<'a>,
277                
278                    
279              pub token_program: &'b solana_account_info::AccountInfo<'a>,
280                
281                    
282              pub associated_token_program: &'b solana_account_info::AccountInfo<'a>,
283                
284                    
285              pub system_program: &'b solana_account_info::AccountInfo<'a>,
286            }
287
288/// `claim_one_btc_reward` CPI instruction.
289pub struct ClaimOneBtcRewardCpi<'a, 'b> {
290  /// The program to invoke.
291  pub __program: &'b solana_account_info::AccountInfo<'a>,
292      
293              
294          pub authority: &'b solana_account_info::AccountInfo<'a>,
295          
296              
297          pub one_btc_vault: &'b solana_account_info::AccountInfo<'a>,
298          
299              
300          pub one_btc_vault_iteration: &'b solana_account_info::AccountInfo<'a>,
301                /// The winning receipt: must belong to the signer and this iteration.
302
303    
304              
305          pub ticket: &'b solana_account_info::AccountInfo<'a>,
306          
307              
308          pub btc_mint: &'b solana_account_info::AccountInfo<'a>,
309          
310              
311          pub one_btc_vault_btc_ata: &'b solana_account_info::AccountInfo<'a>,
312          
313              
314          pub authority_btc_ata: &'b solana_account_info::AccountInfo<'a>,
315          
316              
317          pub token_program: &'b solana_account_info::AccountInfo<'a>,
318          
319              
320          pub associated_token_program: &'b solana_account_info::AccountInfo<'a>,
321          
322              
323          pub system_program: &'b solana_account_info::AccountInfo<'a>,
324        }
325
326impl<'a, 'b> ClaimOneBtcRewardCpi<'a, 'b> {
327  pub fn new(
328    program: &'b solana_account_info::AccountInfo<'a>,
329          accounts: ClaimOneBtcRewardCpiAccounts<'a, 'b>,
330          ) -> Self {
331    Self {
332      __program: program,
333              authority: accounts.authority,
334              one_btc_vault: accounts.one_btc_vault,
335              one_btc_vault_iteration: accounts.one_btc_vault_iteration,
336              ticket: accounts.ticket,
337              btc_mint: accounts.btc_mint,
338              one_btc_vault_btc_ata: accounts.one_btc_vault_btc_ata,
339              authority_btc_ata: accounts.authority_btc_ata,
340              token_program: accounts.token_program,
341              associated_token_program: accounts.associated_token_program,
342              system_program: accounts.system_program,
343                }
344  }
345  #[inline(always)]
346  pub fn invoke(&self) -> solana_program_error::ProgramResult {
347    self.invoke_signed_with_remaining_accounts(&[], &[])
348  }
349  #[inline(always)]
350  pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> solana_program_error::ProgramResult {
351    self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
352  }
353  #[inline(always)]
354  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
355    self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
356  }
357  #[allow(clippy::arithmetic_side_effects)]
358  #[allow(clippy::clone_on_copy)]
359  #[allow(clippy::vec_init_then_push)]
360  pub fn invoke_signed_with_remaining_accounts(
361    &self,
362    signers_seeds: &[&[&[u8]]],
363    remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]
364  ) -> solana_program_error::ProgramResult {
365    let mut accounts = Vec::with_capacity(10+ remaining_accounts.len());
366                            accounts.push(solana_instruction::AccountMeta::new(
367            *self.authority.key,
368            true
369          ));
370                                          accounts.push(solana_instruction::AccountMeta::new(
371            *self.one_btc_vault.key,
372            false
373          ));
374                                          accounts.push(solana_instruction::AccountMeta::new(
375            *self.one_btc_vault_iteration.key,
376            false
377          ));
378                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
379            *self.ticket.key,
380            false
381          ));
382                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
383            *self.btc_mint.key,
384            false
385          ));
386                                          accounts.push(solana_instruction::AccountMeta::new(
387            *self.one_btc_vault_btc_ata.key,
388            false
389          ));
390                                          accounts.push(solana_instruction::AccountMeta::new(
391            *self.authority_btc_ata.key,
392            false
393          ));
394                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
395            *self.token_program.key,
396            false
397          ));
398                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
399            *self.associated_token_program.key,
400            false
401          ));
402                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
403            *self.system_program.key,
404            false
405          ));
406                      remaining_accounts.iter().for_each(|remaining_account| {
407      accounts.push(solana_instruction::AccountMeta {
408          pubkey: *remaining_account.0.key,
409          is_signer: remaining_account.1,
410          is_writable: remaining_account.2,
411      })
412    });
413    let data = ClaimOneBtcRewardInstructionData::new().try_to_vec().unwrap();
414    
415    let instruction = solana_instruction::Instruction {
416      program_id: crate::SATRUSH_ID,
417      accounts,
418      data,
419    };
420    let mut account_infos = Vec::with_capacity(11 + remaining_accounts.len());
421    account_infos.push(self.__program.clone());
422                  account_infos.push(self.authority.clone());
423                        account_infos.push(self.one_btc_vault.clone());
424                        account_infos.push(self.one_btc_vault_iteration.clone());
425                        account_infos.push(self.ticket.clone());
426                        account_infos.push(self.btc_mint.clone());
427                        account_infos.push(self.one_btc_vault_btc_ata.clone());
428                        account_infos.push(self.authority_btc_ata.clone());
429                        account_infos.push(self.token_program.clone());
430                        account_infos.push(self.associated_token_program.clone());
431                        account_infos.push(self.system_program.clone());
432              remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
433
434    if signers_seeds.is_empty() {
435      solana_cpi::invoke(&instruction, &account_infos)
436    } else {
437      solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
438    }
439  }
440}
441
442/// Instruction builder for `ClaimOneBtcReward` via CPI.
443///
444/// ### Accounts:
445///
446                      ///   0. `[writable, signer]` authority
447                ///   1. `[writable]` one_btc_vault
448                ///   2. `[writable]` one_btc_vault_iteration
449          ///   3. `[]` ticket
450          ///   4. `[]` btc_mint
451                ///   5. `[writable]` one_btc_vault_btc_ata
452                ///   6. `[writable]` authority_btc_ata
453          ///   7. `[]` token_program
454          ///   8. `[]` associated_token_program
455          ///   9. `[]` system_program
456#[derive(Clone, Debug)]
457pub struct ClaimOneBtcRewardCpiBuilder<'a, 'b> {
458  instruction: Box<ClaimOneBtcRewardCpiBuilderInstruction<'a, 'b>>,
459}
460
461impl<'a, 'b> ClaimOneBtcRewardCpiBuilder<'a, 'b> {
462  pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
463    let instruction = Box::new(ClaimOneBtcRewardCpiBuilderInstruction {
464      __program: program,
465              authority: None,
466              one_btc_vault: None,
467              one_btc_vault_iteration: None,
468              ticket: None,
469              btc_mint: None,
470              one_btc_vault_btc_ata: None,
471              authority_btc_ata: None,
472              token_program: None,
473              associated_token_program: None,
474              system_program: None,
475                                __remaining_accounts: Vec::new(),
476    });
477    Self { instruction }
478  }
479      #[inline(always)]
480    pub fn authority(&mut self, authority: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
481                        self.instruction.authority = Some(authority);
482                    self
483    }
484      #[inline(always)]
485    pub fn one_btc_vault(&mut self, one_btc_vault: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
486                        self.instruction.one_btc_vault = Some(one_btc_vault);
487                    self
488    }
489      #[inline(always)]
490    pub fn one_btc_vault_iteration(&mut self, one_btc_vault_iteration: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
491                        self.instruction.one_btc_vault_iteration = Some(one_btc_vault_iteration);
492                    self
493    }
494      /// The winning receipt: must belong to the signer and this iteration.
495#[inline(always)]
496    pub fn ticket(&mut self, ticket: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
497                        self.instruction.ticket = Some(ticket);
498                    self
499    }
500      #[inline(always)]
501    pub fn btc_mint(&mut self, btc_mint: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
502                        self.instruction.btc_mint = Some(btc_mint);
503                    self
504    }
505      #[inline(always)]
506    pub fn one_btc_vault_btc_ata(&mut self, one_btc_vault_btc_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
507                        self.instruction.one_btc_vault_btc_ata = Some(one_btc_vault_btc_ata);
508                    self
509    }
510      #[inline(always)]
511    pub fn authority_btc_ata(&mut self, authority_btc_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
512                        self.instruction.authority_btc_ata = Some(authority_btc_ata);
513                    self
514    }
515      #[inline(always)]
516    pub fn token_program(&mut self, token_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
517                        self.instruction.token_program = Some(token_program);
518                    self
519    }
520      #[inline(always)]
521    pub fn associated_token_program(&mut self, associated_token_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
522                        self.instruction.associated_token_program = Some(associated_token_program);
523                    self
524    }
525      #[inline(always)]
526    pub fn system_program(&mut self, system_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
527                        self.instruction.system_program = Some(system_program);
528                    self
529    }
530            /// Add an additional account to the instruction.
531  #[inline(always)]
532  pub fn add_remaining_account(&mut self, account: &'b solana_account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
533    self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
534    self
535  }
536  /// Add additional accounts to the instruction.
537  ///
538  /// Each account is represented by a tuple of the `AccountInfo`, a `bool` indicating whether the account is writable or not,
539  /// and a `bool` indicating whether the account is a signer or not.
540  #[inline(always)]
541  pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
542    self.instruction.__remaining_accounts.extend_from_slice(accounts);
543    self
544  }
545  #[inline(always)]
546  pub fn invoke(&self) -> solana_program_error::ProgramResult {
547    self.invoke_signed(&[])
548  }
549  #[allow(clippy::clone_on_copy)]
550  #[allow(clippy::vec_init_then_push)]
551  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
552        let instruction = ClaimOneBtcRewardCpi {
553        __program: self.instruction.__program,
554                  
555          authority: self.instruction.authority.expect("authority is not set"),
556                  
557          one_btc_vault: self.instruction.one_btc_vault.expect("one_btc_vault is not set"),
558                  
559          one_btc_vault_iteration: self.instruction.one_btc_vault_iteration.expect("one_btc_vault_iteration is not set"),
560                  
561          ticket: self.instruction.ticket.expect("ticket is not set"),
562                  
563          btc_mint: self.instruction.btc_mint.expect("btc_mint is not set"),
564                  
565          one_btc_vault_btc_ata: self.instruction.one_btc_vault_btc_ata.expect("one_btc_vault_btc_ata is not set"),
566                  
567          authority_btc_ata: self.instruction.authority_btc_ata.expect("authority_btc_ata is not set"),
568                  
569          token_program: self.instruction.token_program.expect("token_program is not set"),
570                  
571          associated_token_program: self.instruction.associated_token_program.expect("associated_token_program is not set"),
572                  
573          system_program: self.instruction.system_program.expect("system_program is not set"),
574                    };
575    instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
576  }
577}
578
579#[derive(Clone, Debug)]
580struct ClaimOneBtcRewardCpiBuilderInstruction<'a, 'b> {
581  __program: &'b solana_account_info::AccountInfo<'a>,
582            authority: Option<&'b solana_account_info::AccountInfo<'a>>,
583                one_btc_vault: Option<&'b solana_account_info::AccountInfo<'a>>,
584                one_btc_vault_iteration: Option<&'b solana_account_info::AccountInfo<'a>>,
585                ticket: Option<&'b solana_account_info::AccountInfo<'a>>,
586                btc_mint: Option<&'b solana_account_info::AccountInfo<'a>>,
587                one_btc_vault_btc_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
588                authority_btc_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
589                token_program: Option<&'b solana_account_info::AccountInfo<'a>>,
590                associated_token_program: Option<&'b solana_account_info::AccountInfo<'a>>,
591                system_program: Option<&'b solana_account_info::AccountInfo<'a>>,
592                /// Additional instruction accounts `(AccountInfo, is_writable, is_signer)`.
593  __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
594}
595