Skip to main content

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