defituna_client/generated/instructions/
liquidate_position_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 crate::generated::types::RemainingAccountsInfo;
9use borsh::BorshSerialize;
10use borsh::BorshDeserialize;
11
12/// Accounts.
13#[derive(Debug)]
14pub struct LiquidatePositionOrca {
15            /// 
16/// TUNA accounts
17/// 
18
19    
20              
21          pub authority: solana_program::pubkey::Pubkey,
22          
23              
24          pub tuna_config: solana_program::pubkey::Pubkey,
25          
26              
27          pub mint_a: solana_program::pubkey::Pubkey,
28          
29              
30          pub mint_b: solana_program::pubkey::Pubkey,
31          
32              
33          pub market: solana_program::pubkey::Pubkey,
34          
35              
36          pub vault_a: solana_program::pubkey::Pubkey,
37          
38              
39          pub vault_b: solana_program::pubkey::Pubkey,
40          
41              
42          pub vault_a_ata: solana_program::pubkey::Pubkey,
43          
44              
45          pub vault_b_ata: solana_program::pubkey::Pubkey,
46          
47              
48          pub tuna_position: solana_program::pubkey::Pubkey,
49          
50              
51          pub tuna_position_ata: solana_program::pubkey::Pubkey,
52          
53              
54          pub tuna_position_ata_a: solana_program::pubkey::Pubkey,
55          
56              
57          pub tuna_position_ata_b: solana_program::pubkey::Pubkey,
58          
59              
60          pub liquidation_fee_recipient_ata_a: solana_program::pubkey::Pubkey,
61          
62              
63          pub liquidation_fee_recipient_ata_b: solana_program::pubkey::Pubkey,
64          
65              
66          pub pyth_oracle_price_feed_a: solana_program::pubkey::Pubkey,
67          
68              
69          pub pyth_oracle_price_feed_b: solana_program::pubkey::Pubkey,
70                /// 
71/// ORCA accounts
72/// 
73
74    
75              
76          pub whirlpool_program: solana_program::pubkey::Pubkey,
77          
78              
79          pub whirlpool: solana_program::pubkey::Pubkey,
80          
81              
82          pub orca_position: solana_program::pubkey::Pubkey,
83          
84              
85          pub token_program_a: solana_program::pubkey::Pubkey,
86          
87              
88          pub token_program_b: solana_program::pubkey::Pubkey,
89          
90              
91          pub memo_program: solana_program::pubkey::Pubkey,
92      }
93
94impl LiquidatePositionOrca {
95  pub fn instruction(&self, args: LiquidatePositionOrcaInstructionArgs) -> solana_program::instruction::Instruction {
96    self.instruction_with_remaining_accounts(args, &[])
97  }
98  #[allow(clippy::arithmetic_side_effects)]
99  #[allow(clippy::vec_init_then_push)]
100  pub fn instruction_with_remaining_accounts(&self, args: LiquidatePositionOrcaInstructionArgs, remaining_accounts: &[solana_program::instruction::AccountMeta]) -> solana_program::instruction::Instruction {
101    let mut accounts = Vec::with_capacity(23+ remaining_accounts.len());
102                            accounts.push(solana_program::instruction::AccountMeta::new(
103            self.authority,
104            true
105          ));
106                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
107            self.tuna_config,
108            false
109          ));
110                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
111            self.mint_a,
112            false
113          ));
114                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
115            self.mint_b,
116            false
117          ));
118                                          accounts.push(solana_program::instruction::AccountMeta::new(
119            self.market,
120            false
121          ));
122                                          accounts.push(solana_program::instruction::AccountMeta::new(
123            self.vault_a,
124            false
125          ));
126                                          accounts.push(solana_program::instruction::AccountMeta::new(
127            self.vault_b,
128            false
129          ));
130                                          accounts.push(solana_program::instruction::AccountMeta::new(
131            self.vault_a_ata,
132            false
133          ));
134                                          accounts.push(solana_program::instruction::AccountMeta::new(
135            self.vault_b_ata,
136            false
137          ));
138                                          accounts.push(solana_program::instruction::AccountMeta::new(
139            self.tuna_position,
140            false
141          ));
142                                          accounts.push(solana_program::instruction::AccountMeta::new(
143            self.tuna_position_ata,
144            false
145          ));
146                                          accounts.push(solana_program::instruction::AccountMeta::new(
147            self.tuna_position_ata_a,
148            false
149          ));
150                                          accounts.push(solana_program::instruction::AccountMeta::new(
151            self.tuna_position_ata_b,
152            false
153          ));
154                                          accounts.push(solana_program::instruction::AccountMeta::new(
155            self.liquidation_fee_recipient_ata_a,
156            false
157          ));
158                                          accounts.push(solana_program::instruction::AccountMeta::new(
159            self.liquidation_fee_recipient_ata_b,
160            false
161          ));
162                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
163            self.pyth_oracle_price_feed_a,
164            false
165          ));
166                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
167            self.pyth_oracle_price_feed_b,
168            false
169          ));
170                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
171            self.whirlpool_program,
172            false
173          ));
174                                          accounts.push(solana_program::instruction::AccountMeta::new(
175            self.whirlpool,
176            false
177          ));
178                                          accounts.push(solana_program::instruction::AccountMeta::new(
179            self.orca_position,
180            false
181          ));
182                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
183            self.token_program_a,
184            false
185          ));
186                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
187            self.token_program_b,
188            false
189          ));
190                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
191            self.memo_program,
192            false
193          ));
194                      accounts.extend_from_slice(remaining_accounts);
195    let mut data = borsh::to_vec(&LiquidatePositionOrcaInstructionData::new()).unwrap();
196          let mut args = borsh::to_vec(&args).unwrap();
197      data.append(&mut args);
198    
199    solana_program::instruction::Instruction {
200      program_id: crate::TUNA_ID,
201      accounts,
202      data,
203    }
204  }
205}
206
207#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
208#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
209 pub struct LiquidatePositionOrcaInstructionData {
210            discriminator: [u8; 8],
211                  }
212
213impl LiquidatePositionOrcaInstructionData {
214  pub fn new() -> Self {
215    Self {
216                        discriminator: [62, 92, 176, 35, 164, 100, 46, 141],
217                                              }
218  }
219}
220
221impl Default for LiquidatePositionOrcaInstructionData {
222  fn default() -> Self {
223    Self::new()
224  }
225}
226
227#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
228#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
229 pub struct LiquidatePositionOrcaInstructionArgs {
230                  pub withdraw_percent: u32,
231                pub remaining_accounts_info: RemainingAccountsInfo,
232      }
233
234
235/// Instruction builder for `LiquidatePositionOrca`.
236///
237/// ### Accounts:
238///
239                      ///   0. `[writable, signer]` authority
240          ///   1. `[]` tuna_config
241          ///   2. `[]` mint_a
242          ///   3. `[]` mint_b
243                ///   4. `[writable]` market
244                ///   5. `[writable]` vault_a
245                ///   6. `[writable]` vault_b
246                ///   7. `[writable]` vault_a_ata
247                ///   8. `[writable]` vault_b_ata
248                ///   9. `[writable]` tuna_position
249                ///   10. `[writable]` tuna_position_ata
250                ///   11. `[writable]` tuna_position_ata_a
251                ///   12. `[writable]` tuna_position_ata_b
252                ///   13. `[writable]` liquidation_fee_recipient_ata_a
253                ///   14. `[writable]` liquidation_fee_recipient_ata_b
254          ///   15. `[]` pyth_oracle_price_feed_a
255          ///   16. `[]` pyth_oracle_price_feed_b
256          ///   17. `[]` whirlpool_program
257                ///   18. `[writable]` whirlpool
258                ///   19. `[writable]` orca_position
259          ///   20. `[]` token_program_a
260          ///   21. `[]` token_program_b
261          ///   22. `[]` memo_program
262#[derive(Clone, Debug, Default)]
263pub struct LiquidatePositionOrcaBuilder {
264            authority: Option<solana_program::pubkey::Pubkey>,
265                tuna_config: Option<solana_program::pubkey::Pubkey>,
266                mint_a: Option<solana_program::pubkey::Pubkey>,
267                mint_b: Option<solana_program::pubkey::Pubkey>,
268                market: Option<solana_program::pubkey::Pubkey>,
269                vault_a: Option<solana_program::pubkey::Pubkey>,
270                vault_b: Option<solana_program::pubkey::Pubkey>,
271                vault_a_ata: Option<solana_program::pubkey::Pubkey>,
272                vault_b_ata: Option<solana_program::pubkey::Pubkey>,
273                tuna_position: Option<solana_program::pubkey::Pubkey>,
274                tuna_position_ata: Option<solana_program::pubkey::Pubkey>,
275                tuna_position_ata_a: Option<solana_program::pubkey::Pubkey>,
276                tuna_position_ata_b: Option<solana_program::pubkey::Pubkey>,
277                liquidation_fee_recipient_ata_a: Option<solana_program::pubkey::Pubkey>,
278                liquidation_fee_recipient_ata_b: Option<solana_program::pubkey::Pubkey>,
279                pyth_oracle_price_feed_a: Option<solana_program::pubkey::Pubkey>,
280                pyth_oracle_price_feed_b: Option<solana_program::pubkey::Pubkey>,
281                whirlpool_program: Option<solana_program::pubkey::Pubkey>,
282                whirlpool: Option<solana_program::pubkey::Pubkey>,
283                orca_position: Option<solana_program::pubkey::Pubkey>,
284                token_program_a: Option<solana_program::pubkey::Pubkey>,
285                token_program_b: Option<solana_program::pubkey::Pubkey>,
286                memo_program: Option<solana_program::pubkey::Pubkey>,
287                        withdraw_percent: Option<u32>,
288                remaining_accounts_info: Option<RemainingAccountsInfo>,
289        __remaining_accounts: Vec<solana_program::instruction::AccountMeta>,
290}
291
292impl LiquidatePositionOrcaBuilder {
293  pub fn new() -> Self {
294    Self::default()
295  }
296            /// 
297/// TUNA accounts
298/// 
299#[inline(always)]
300    pub fn authority(&mut self, authority: solana_program::pubkey::Pubkey) -> &mut Self {
301                        self.authority = Some(authority);
302                    self
303    }
304            #[inline(always)]
305    pub fn tuna_config(&mut self, tuna_config: solana_program::pubkey::Pubkey) -> &mut Self {
306                        self.tuna_config = Some(tuna_config);
307                    self
308    }
309            #[inline(always)]
310    pub fn mint_a(&mut self, mint_a: solana_program::pubkey::Pubkey) -> &mut Self {
311                        self.mint_a = Some(mint_a);
312                    self
313    }
314            #[inline(always)]
315    pub fn mint_b(&mut self, mint_b: solana_program::pubkey::Pubkey) -> &mut Self {
316                        self.mint_b = Some(mint_b);
317                    self
318    }
319            #[inline(always)]
320    pub fn market(&mut self, market: solana_program::pubkey::Pubkey) -> &mut Self {
321                        self.market = Some(market);
322                    self
323    }
324            #[inline(always)]
325    pub fn vault_a(&mut self, vault_a: solana_program::pubkey::Pubkey) -> &mut Self {
326                        self.vault_a = Some(vault_a);
327                    self
328    }
329            #[inline(always)]
330    pub fn vault_b(&mut self, vault_b: solana_program::pubkey::Pubkey) -> &mut Self {
331                        self.vault_b = Some(vault_b);
332                    self
333    }
334            #[inline(always)]
335    pub fn vault_a_ata(&mut self, vault_a_ata: solana_program::pubkey::Pubkey) -> &mut Self {
336                        self.vault_a_ata = Some(vault_a_ata);
337                    self
338    }
339            #[inline(always)]
340    pub fn vault_b_ata(&mut self, vault_b_ata: solana_program::pubkey::Pubkey) -> &mut Self {
341                        self.vault_b_ata = Some(vault_b_ata);
342                    self
343    }
344            #[inline(always)]
345    pub fn tuna_position(&mut self, tuna_position: solana_program::pubkey::Pubkey) -> &mut Self {
346                        self.tuna_position = Some(tuna_position);
347                    self
348    }
349            #[inline(always)]
350    pub fn tuna_position_ata(&mut self, tuna_position_ata: solana_program::pubkey::Pubkey) -> &mut Self {
351                        self.tuna_position_ata = Some(tuna_position_ata);
352                    self
353    }
354            #[inline(always)]
355    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: solana_program::pubkey::Pubkey) -> &mut Self {
356                        self.tuna_position_ata_a = Some(tuna_position_ata_a);
357                    self
358    }
359            #[inline(always)]
360    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: solana_program::pubkey::Pubkey) -> &mut Self {
361                        self.tuna_position_ata_b = Some(tuna_position_ata_b);
362                    self
363    }
364            #[inline(always)]
365    pub fn liquidation_fee_recipient_ata_a(&mut self, liquidation_fee_recipient_ata_a: solana_program::pubkey::Pubkey) -> &mut Self {
366                        self.liquidation_fee_recipient_ata_a = Some(liquidation_fee_recipient_ata_a);
367                    self
368    }
369            #[inline(always)]
370    pub fn liquidation_fee_recipient_ata_b(&mut self, liquidation_fee_recipient_ata_b: solana_program::pubkey::Pubkey) -> &mut Self {
371                        self.liquidation_fee_recipient_ata_b = Some(liquidation_fee_recipient_ata_b);
372                    self
373    }
374            #[inline(always)]
375    pub fn pyth_oracle_price_feed_a(&mut self, pyth_oracle_price_feed_a: solana_program::pubkey::Pubkey) -> &mut Self {
376                        self.pyth_oracle_price_feed_a = Some(pyth_oracle_price_feed_a);
377                    self
378    }
379            #[inline(always)]
380    pub fn pyth_oracle_price_feed_b(&mut self, pyth_oracle_price_feed_b: solana_program::pubkey::Pubkey) -> &mut Self {
381                        self.pyth_oracle_price_feed_b = Some(pyth_oracle_price_feed_b);
382                    self
383    }
384            /// 
385/// ORCA accounts
386/// 
387#[inline(always)]
388    pub fn whirlpool_program(&mut self, whirlpool_program: solana_program::pubkey::Pubkey) -> &mut Self {
389                        self.whirlpool_program = Some(whirlpool_program);
390                    self
391    }
392            #[inline(always)]
393    pub fn whirlpool(&mut self, whirlpool: solana_program::pubkey::Pubkey) -> &mut Self {
394                        self.whirlpool = Some(whirlpool);
395                    self
396    }
397            #[inline(always)]
398    pub fn orca_position(&mut self, orca_position: solana_program::pubkey::Pubkey) -> &mut Self {
399                        self.orca_position = Some(orca_position);
400                    self
401    }
402            #[inline(always)]
403    pub fn token_program_a(&mut self, token_program_a: solana_program::pubkey::Pubkey) -> &mut Self {
404                        self.token_program_a = Some(token_program_a);
405                    self
406    }
407            #[inline(always)]
408    pub fn token_program_b(&mut self, token_program_b: solana_program::pubkey::Pubkey) -> &mut Self {
409                        self.token_program_b = Some(token_program_b);
410                    self
411    }
412            #[inline(always)]
413    pub fn memo_program(&mut self, memo_program: solana_program::pubkey::Pubkey) -> &mut Self {
414                        self.memo_program = Some(memo_program);
415                    self
416    }
417                    #[inline(always)]
418      pub fn withdraw_percent(&mut self, withdraw_percent: u32) -> &mut Self {
419        self.withdraw_percent = Some(withdraw_percent);
420        self
421      }
422                #[inline(always)]
423      pub fn remaining_accounts_info(&mut self, remaining_accounts_info: RemainingAccountsInfo) -> &mut Self {
424        self.remaining_accounts_info = Some(remaining_accounts_info);
425        self
426      }
427        /// Add an additional account to the instruction.
428  #[inline(always)]
429  pub fn add_remaining_account(&mut self, account: solana_program::instruction::AccountMeta) -> &mut Self {
430    self.__remaining_accounts.push(account);
431    self
432  }
433  /// Add additional accounts to the instruction.
434  #[inline(always)]
435  pub fn add_remaining_accounts(&mut self, accounts: &[solana_program::instruction::AccountMeta]) -> &mut Self {
436    self.__remaining_accounts.extend_from_slice(accounts);
437    self
438  }
439  #[allow(clippy::clone_on_copy)]
440  pub fn instruction(&self) -> solana_program::instruction::Instruction {
441    let accounts = LiquidatePositionOrca {
442                              authority: self.authority.expect("authority is not set"),
443                                        tuna_config: self.tuna_config.expect("tuna_config is not set"),
444                                        mint_a: self.mint_a.expect("mint_a is not set"),
445                                        mint_b: self.mint_b.expect("mint_b is not set"),
446                                        market: self.market.expect("market is not set"),
447                                        vault_a: self.vault_a.expect("vault_a is not set"),
448                                        vault_b: self.vault_b.expect("vault_b is not set"),
449                                        vault_a_ata: self.vault_a_ata.expect("vault_a_ata is not set"),
450                                        vault_b_ata: self.vault_b_ata.expect("vault_b_ata is not set"),
451                                        tuna_position: self.tuna_position.expect("tuna_position is not set"),
452                                        tuna_position_ata: self.tuna_position_ata.expect("tuna_position_ata is not set"),
453                                        tuna_position_ata_a: self.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
454                                        tuna_position_ata_b: self.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
455                                        liquidation_fee_recipient_ata_a: self.liquidation_fee_recipient_ata_a.expect("liquidation_fee_recipient_ata_a is not set"),
456                                        liquidation_fee_recipient_ata_b: self.liquidation_fee_recipient_ata_b.expect("liquidation_fee_recipient_ata_b is not set"),
457                                        pyth_oracle_price_feed_a: self.pyth_oracle_price_feed_a.expect("pyth_oracle_price_feed_a is not set"),
458                                        pyth_oracle_price_feed_b: self.pyth_oracle_price_feed_b.expect("pyth_oracle_price_feed_b is not set"),
459                                        whirlpool_program: self.whirlpool_program.expect("whirlpool_program is not set"),
460                                        whirlpool: self.whirlpool.expect("whirlpool is not set"),
461                                        orca_position: self.orca_position.expect("orca_position is not set"),
462                                        token_program_a: self.token_program_a.expect("token_program_a is not set"),
463                                        token_program_b: self.token_program_b.expect("token_program_b is not set"),
464                                        memo_program: self.memo_program.expect("memo_program is not set"),
465                      };
466          let args = LiquidatePositionOrcaInstructionArgs {
467                                                              withdraw_percent: self.withdraw_percent.clone().expect("withdraw_percent is not set"),
468                                                                  remaining_accounts_info: self.remaining_accounts_info.clone().expect("remaining_accounts_info is not set"),
469                                    };
470    
471    accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
472  }
473}
474
475  /// `liquidate_position_orca` CPI accounts.
476  pub struct LiquidatePositionOrcaCpiAccounts<'a, 'b> {
477                  /// 
478/// TUNA accounts
479/// 
480
481      
482                    
483              pub authority: &'b solana_program::account_info::AccountInfo<'a>,
484                
485                    
486              pub tuna_config: &'b solana_program::account_info::AccountInfo<'a>,
487                
488                    
489              pub mint_a: &'b solana_program::account_info::AccountInfo<'a>,
490                
491                    
492              pub mint_b: &'b solana_program::account_info::AccountInfo<'a>,
493                
494                    
495              pub market: &'b solana_program::account_info::AccountInfo<'a>,
496                
497                    
498              pub vault_a: &'b solana_program::account_info::AccountInfo<'a>,
499                
500                    
501              pub vault_b: &'b solana_program::account_info::AccountInfo<'a>,
502                
503                    
504              pub vault_a_ata: &'b solana_program::account_info::AccountInfo<'a>,
505                
506                    
507              pub vault_b_ata: &'b solana_program::account_info::AccountInfo<'a>,
508                
509                    
510              pub tuna_position: &'b solana_program::account_info::AccountInfo<'a>,
511                
512                    
513              pub tuna_position_ata: &'b solana_program::account_info::AccountInfo<'a>,
514                
515                    
516              pub tuna_position_ata_a: &'b solana_program::account_info::AccountInfo<'a>,
517                
518                    
519              pub tuna_position_ata_b: &'b solana_program::account_info::AccountInfo<'a>,
520                
521                    
522              pub liquidation_fee_recipient_ata_a: &'b solana_program::account_info::AccountInfo<'a>,
523                
524                    
525              pub liquidation_fee_recipient_ata_b: &'b solana_program::account_info::AccountInfo<'a>,
526                
527                    
528              pub pyth_oracle_price_feed_a: &'b solana_program::account_info::AccountInfo<'a>,
529                
530                    
531              pub pyth_oracle_price_feed_b: &'b solana_program::account_info::AccountInfo<'a>,
532                        /// 
533/// ORCA accounts
534/// 
535
536      
537                    
538              pub whirlpool_program: &'b solana_program::account_info::AccountInfo<'a>,
539                
540                    
541              pub whirlpool: &'b solana_program::account_info::AccountInfo<'a>,
542                
543                    
544              pub orca_position: &'b solana_program::account_info::AccountInfo<'a>,
545                
546                    
547              pub token_program_a: &'b solana_program::account_info::AccountInfo<'a>,
548                
549                    
550              pub token_program_b: &'b solana_program::account_info::AccountInfo<'a>,
551                
552                    
553              pub memo_program: &'b solana_program::account_info::AccountInfo<'a>,
554            }
555
556/// `liquidate_position_orca` CPI instruction.
557pub struct LiquidatePositionOrcaCpi<'a, 'b> {
558  /// The program to invoke.
559  pub __program: &'b solana_program::account_info::AccountInfo<'a>,
560            /// 
561/// TUNA accounts
562/// 
563
564    
565              
566          pub authority: &'b solana_program::account_info::AccountInfo<'a>,
567          
568              
569          pub tuna_config: &'b solana_program::account_info::AccountInfo<'a>,
570          
571              
572          pub mint_a: &'b solana_program::account_info::AccountInfo<'a>,
573          
574              
575          pub mint_b: &'b solana_program::account_info::AccountInfo<'a>,
576          
577              
578          pub market: &'b solana_program::account_info::AccountInfo<'a>,
579          
580              
581          pub vault_a: &'b solana_program::account_info::AccountInfo<'a>,
582          
583              
584          pub vault_b: &'b solana_program::account_info::AccountInfo<'a>,
585          
586              
587          pub vault_a_ata: &'b solana_program::account_info::AccountInfo<'a>,
588          
589              
590          pub vault_b_ata: &'b solana_program::account_info::AccountInfo<'a>,
591          
592              
593          pub tuna_position: &'b solana_program::account_info::AccountInfo<'a>,
594          
595              
596          pub tuna_position_ata: &'b solana_program::account_info::AccountInfo<'a>,
597          
598              
599          pub tuna_position_ata_a: &'b solana_program::account_info::AccountInfo<'a>,
600          
601              
602          pub tuna_position_ata_b: &'b solana_program::account_info::AccountInfo<'a>,
603          
604              
605          pub liquidation_fee_recipient_ata_a: &'b solana_program::account_info::AccountInfo<'a>,
606          
607              
608          pub liquidation_fee_recipient_ata_b: &'b solana_program::account_info::AccountInfo<'a>,
609          
610              
611          pub pyth_oracle_price_feed_a: &'b solana_program::account_info::AccountInfo<'a>,
612          
613              
614          pub pyth_oracle_price_feed_b: &'b solana_program::account_info::AccountInfo<'a>,
615                /// 
616/// ORCA accounts
617/// 
618
619    
620              
621          pub whirlpool_program: &'b solana_program::account_info::AccountInfo<'a>,
622          
623              
624          pub whirlpool: &'b solana_program::account_info::AccountInfo<'a>,
625          
626              
627          pub orca_position: &'b solana_program::account_info::AccountInfo<'a>,
628          
629              
630          pub token_program_a: &'b solana_program::account_info::AccountInfo<'a>,
631          
632              
633          pub token_program_b: &'b solana_program::account_info::AccountInfo<'a>,
634          
635              
636          pub memo_program: &'b solana_program::account_info::AccountInfo<'a>,
637            /// The arguments for the instruction.
638    pub __args: LiquidatePositionOrcaInstructionArgs,
639  }
640
641impl<'a, 'b> LiquidatePositionOrcaCpi<'a, 'b> {
642  pub fn new(
643    program: &'b solana_program::account_info::AccountInfo<'a>,
644          accounts: LiquidatePositionOrcaCpiAccounts<'a, 'b>,
645              args: LiquidatePositionOrcaInstructionArgs,
646      ) -> Self {
647    Self {
648      __program: program,
649              authority: accounts.authority,
650              tuna_config: accounts.tuna_config,
651              mint_a: accounts.mint_a,
652              mint_b: accounts.mint_b,
653              market: accounts.market,
654              vault_a: accounts.vault_a,
655              vault_b: accounts.vault_b,
656              vault_a_ata: accounts.vault_a_ata,
657              vault_b_ata: accounts.vault_b_ata,
658              tuna_position: accounts.tuna_position,
659              tuna_position_ata: accounts.tuna_position_ata,
660              tuna_position_ata_a: accounts.tuna_position_ata_a,
661              tuna_position_ata_b: accounts.tuna_position_ata_b,
662              liquidation_fee_recipient_ata_a: accounts.liquidation_fee_recipient_ata_a,
663              liquidation_fee_recipient_ata_b: accounts.liquidation_fee_recipient_ata_b,
664              pyth_oracle_price_feed_a: accounts.pyth_oracle_price_feed_a,
665              pyth_oracle_price_feed_b: accounts.pyth_oracle_price_feed_b,
666              whirlpool_program: accounts.whirlpool_program,
667              whirlpool: accounts.whirlpool,
668              orca_position: accounts.orca_position,
669              token_program_a: accounts.token_program_a,
670              token_program_b: accounts.token_program_b,
671              memo_program: accounts.memo_program,
672                    __args: args,
673          }
674  }
675  #[inline(always)]
676  pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
677    self.invoke_signed_with_remaining_accounts(&[], &[])
678  }
679  #[inline(always)]
680  pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_program::account_info::AccountInfo<'a>, bool, bool)]) -> solana_program::entrypoint::ProgramResult {
681    self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
682  }
683  #[inline(always)]
684  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program::entrypoint::ProgramResult {
685    self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
686  }
687  #[allow(clippy::arithmetic_side_effects)]
688  #[allow(clippy::clone_on_copy)]
689  #[allow(clippy::vec_init_then_push)]
690  pub fn invoke_signed_with_remaining_accounts(
691    &self,
692    signers_seeds: &[&[&[u8]]],
693    remaining_accounts: &[(&'b solana_program::account_info::AccountInfo<'a>, bool, bool)]
694  ) -> solana_program::entrypoint::ProgramResult {
695    let mut accounts = Vec::with_capacity(23+ remaining_accounts.len());
696                            accounts.push(solana_program::instruction::AccountMeta::new(
697            *self.authority.key,
698            true
699          ));
700                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
701            *self.tuna_config.key,
702            false
703          ));
704                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
705            *self.mint_a.key,
706            false
707          ));
708                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
709            *self.mint_b.key,
710            false
711          ));
712                                          accounts.push(solana_program::instruction::AccountMeta::new(
713            *self.market.key,
714            false
715          ));
716                                          accounts.push(solana_program::instruction::AccountMeta::new(
717            *self.vault_a.key,
718            false
719          ));
720                                          accounts.push(solana_program::instruction::AccountMeta::new(
721            *self.vault_b.key,
722            false
723          ));
724                                          accounts.push(solana_program::instruction::AccountMeta::new(
725            *self.vault_a_ata.key,
726            false
727          ));
728                                          accounts.push(solana_program::instruction::AccountMeta::new(
729            *self.vault_b_ata.key,
730            false
731          ));
732                                          accounts.push(solana_program::instruction::AccountMeta::new(
733            *self.tuna_position.key,
734            false
735          ));
736                                          accounts.push(solana_program::instruction::AccountMeta::new(
737            *self.tuna_position_ata.key,
738            false
739          ));
740                                          accounts.push(solana_program::instruction::AccountMeta::new(
741            *self.tuna_position_ata_a.key,
742            false
743          ));
744                                          accounts.push(solana_program::instruction::AccountMeta::new(
745            *self.tuna_position_ata_b.key,
746            false
747          ));
748                                          accounts.push(solana_program::instruction::AccountMeta::new(
749            *self.liquidation_fee_recipient_ata_a.key,
750            false
751          ));
752                                          accounts.push(solana_program::instruction::AccountMeta::new(
753            *self.liquidation_fee_recipient_ata_b.key,
754            false
755          ));
756                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
757            *self.pyth_oracle_price_feed_a.key,
758            false
759          ));
760                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
761            *self.pyth_oracle_price_feed_b.key,
762            false
763          ));
764                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
765            *self.whirlpool_program.key,
766            false
767          ));
768                                          accounts.push(solana_program::instruction::AccountMeta::new(
769            *self.whirlpool.key,
770            false
771          ));
772                                          accounts.push(solana_program::instruction::AccountMeta::new(
773            *self.orca_position.key,
774            false
775          ));
776                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
777            *self.token_program_a.key,
778            false
779          ));
780                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
781            *self.token_program_b.key,
782            false
783          ));
784                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
785            *self.memo_program.key,
786            false
787          ));
788                      remaining_accounts.iter().for_each(|remaining_account| {
789      accounts.push(solana_program::instruction::AccountMeta {
790          pubkey: *remaining_account.0.key,
791          is_signer: remaining_account.1,
792          is_writable: remaining_account.2,
793      })
794    });
795    let mut data = borsh::to_vec(&LiquidatePositionOrcaInstructionData::new()).unwrap();
796          let mut args = borsh::to_vec(&self.__args).unwrap();
797      data.append(&mut args);
798    
799    let instruction = solana_program::instruction::Instruction {
800      program_id: crate::TUNA_ID,
801      accounts,
802      data,
803    };
804    let mut account_infos = Vec::with_capacity(24 + remaining_accounts.len());
805    account_infos.push(self.__program.clone());
806                  account_infos.push(self.authority.clone());
807                        account_infos.push(self.tuna_config.clone());
808                        account_infos.push(self.mint_a.clone());
809                        account_infos.push(self.mint_b.clone());
810                        account_infos.push(self.market.clone());
811                        account_infos.push(self.vault_a.clone());
812                        account_infos.push(self.vault_b.clone());
813                        account_infos.push(self.vault_a_ata.clone());
814                        account_infos.push(self.vault_b_ata.clone());
815                        account_infos.push(self.tuna_position.clone());
816                        account_infos.push(self.tuna_position_ata.clone());
817                        account_infos.push(self.tuna_position_ata_a.clone());
818                        account_infos.push(self.tuna_position_ata_b.clone());
819                        account_infos.push(self.liquidation_fee_recipient_ata_a.clone());
820                        account_infos.push(self.liquidation_fee_recipient_ata_b.clone());
821                        account_infos.push(self.pyth_oracle_price_feed_a.clone());
822                        account_infos.push(self.pyth_oracle_price_feed_b.clone());
823                        account_infos.push(self.whirlpool_program.clone());
824                        account_infos.push(self.whirlpool.clone());
825                        account_infos.push(self.orca_position.clone());
826                        account_infos.push(self.token_program_a.clone());
827                        account_infos.push(self.token_program_b.clone());
828                        account_infos.push(self.memo_program.clone());
829              remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
830
831    if signers_seeds.is_empty() {
832      solana_program::program::invoke(&instruction, &account_infos)
833    } else {
834      solana_program::program::invoke_signed(&instruction, &account_infos, signers_seeds)
835    }
836  }
837}
838
839/// Instruction builder for `LiquidatePositionOrca` via CPI.
840///
841/// ### Accounts:
842///
843                      ///   0. `[writable, signer]` authority
844          ///   1. `[]` tuna_config
845          ///   2. `[]` mint_a
846          ///   3. `[]` mint_b
847                ///   4. `[writable]` market
848                ///   5. `[writable]` vault_a
849                ///   6. `[writable]` vault_b
850                ///   7. `[writable]` vault_a_ata
851                ///   8. `[writable]` vault_b_ata
852                ///   9. `[writable]` tuna_position
853                ///   10. `[writable]` tuna_position_ata
854                ///   11. `[writable]` tuna_position_ata_a
855                ///   12. `[writable]` tuna_position_ata_b
856                ///   13. `[writable]` liquidation_fee_recipient_ata_a
857                ///   14. `[writable]` liquidation_fee_recipient_ata_b
858          ///   15. `[]` pyth_oracle_price_feed_a
859          ///   16. `[]` pyth_oracle_price_feed_b
860          ///   17. `[]` whirlpool_program
861                ///   18. `[writable]` whirlpool
862                ///   19. `[writable]` orca_position
863          ///   20. `[]` token_program_a
864          ///   21. `[]` token_program_b
865          ///   22. `[]` memo_program
866#[derive(Clone, Debug)]
867pub struct LiquidatePositionOrcaCpiBuilder<'a, 'b> {
868  instruction: Box<LiquidatePositionOrcaCpiBuilderInstruction<'a, 'b>>,
869}
870
871impl<'a, 'b> LiquidatePositionOrcaCpiBuilder<'a, 'b> {
872  pub fn new(program: &'b solana_program::account_info::AccountInfo<'a>) -> Self {
873    let instruction = Box::new(LiquidatePositionOrcaCpiBuilderInstruction {
874      __program: program,
875              authority: None,
876              tuna_config: None,
877              mint_a: None,
878              mint_b: None,
879              market: None,
880              vault_a: None,
881              vault_b: None,
882              vault_a_ata: None,
883              vault_b_ata: None,
884              tuna_position: None,
885              tuna_position_ata: None,
886              tuna_position_ata_a: None,
887              tuna_position_ata_b: None,
888              liquidation_fee_recipient_ata_a: None,
889              liquidation_fee_recipient_ata_b: None,
890              pyth_oracle_price_feed_a: None,
891              pyth_oracle_price_feed_b: None,
892              whirlpool_program: None,
893              whirlpool: None,
894              orca_position: None,
895              token_program_a: None,
896              token_program_b: None,
897              memo_program: None,
898                                            withdraw_percent: None,
899                                remaining_accounts_info: None,
900                    __remaining_accounts: Vec::new(),
901    });
902    Self { instruction }
903  }
904      /// 
905/// TUNA accounts
906/// 
907#[inline(always)]
908    pub fn authority(&mut self, authority: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
909                        self.instruction.authority = Some(authority);
910                    self
911    }
912      #[inline(always)]
913    pub fn tuna_config(&mut self, tuna_config: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
914                        self.instruction.tuna_config = Some(tuna_config);
915                    self
916    }
917      #[inline(always)]
918    pub fn mint_a(&mut self, mint_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
919                        self.instruction.mint_a = Some(mint_a);
920                    self
921    }
922      #[inline(always)]
923    pub fn mint_b(&mut self, mint_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
924                        self.instruction.mint_b = Some(mint_b);
925                    self
926    }
927      #[inline(always)]
928    pub fn market(&mut self, market: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
929                        self.instruction.market = Some(market);
930                    self
931    }
932      #[inline(always)]
933    pub fn vault_a(&mut self, vault_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
934                        self.instruction.vault_a = Some(vault_a);
935                    self
936    }
937      #[inline(always)]
938    pub fn vault_b(&mut self, vault_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
939                        self.instruction.vault_b = Some(vault_b);
940                    self
941    }
942      #[inline(always)]
943    pub fn vault_a_ata(&mut self, vault_a_ata: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
944                        self.instruction.vault_a_ata = Some(vault_a_ata);
945                    self
946    }
947      #[inline(always)]
948    pub fn vault_b_ata(&mut self, vault_b_ata: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
949                        self.instruction.vault_b_ata = Some(vault_b_ata);
950                    self
951    }
952      #[inline(always)]
953    pub fn tuna_position(&mut self, tuna_position: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
954                        self.instruction.tuna_position = Some(tuna_position);
955                    self
956    }
957      #[inline(always)]
958    pub fn tuna_position_ata(&mut self, tuna_position_ata: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
959                        self.instruction.tuna_position_ata = Some(tuna_position_ata);
960                    self
961    }
962      #[inline(always)]
963    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
964                        self.instruction.tuna_position_ata_a = Some(tuna_position_ata_a);
965                    self
966    }
967      #[inline(always)]
968    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
969                        self.instruction.tuna_position_ata_b = Some(tuna_position_ata_b);
970                    self
971    }
972      #[inline(always)]
973    pub fn liquidation_fee_recipient_ata_a(&mut self, liquidation_fee_recipient_ata_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
974                        self.instruction.liquidation_fee_recipient_ata_a = Some(liquidation_fee_recipient_ata_a);
975                    self
976    }
977      #[inline(always)]
978    pub fn liquidation_fee_recipient_ata_b(&mut self, liquidation_fee_recipient_ata_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
979                        self.instruction.liquidation_fee_recipient_ata_b = Some(liquidation_fee_recipient_ata_b);
980                    self
981    }
982      #[inline(always)]
983    pub fn pyth_oracle_price_feed_a(&mut self, pyth_oracle_price_feed_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
984                        self.instruction.pyth_oracle_price_feed_a = Some(pyth_oracle_price_feed_a);
985                    self
986    }
987      #[inline(always)]
988    pub fn pyth_oracle_price_feed_b(&mut self, pyth_oracle_price_feed_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
989                        self.instruction.pyth_oracle_price_feed_b = Some(pyth_oracle_price_feed_b);
990                    self
991    }
992      /// 
993/// ORCA accounts
994/// 
995#[inline(always)]
996    pub fn whirlpool_program(&mut self, whirlpool_program: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
997                        self.instruction.whirlpool_program = Some(whirlpool_program);
998                    self
999    }
1000      #[inline(always)]
1001    pub fn whirlpool(&mut self, whirlpool: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1002                        self.instruction.whirlpool = Some(whirlpool);
1003                    self
1004    }
1005      #[inline(always)]
1006    pub fn orca_position(&mut self, orca_position: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1007                        self.instruction.orca_position = Some(orca_position);
1008                    self
1009    }
1010      #[inline(always)]
1011    pub fn token_program_a(&mut self, token_program_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1012                        self.instruction.token_program_a = Some(token_program_a);
1013                    self
1014    }
1015      #[inline(always)]
1016    pub fn token_program_b(&mut self, token_program_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1017                        self.instruction.token_program_b = Some(token_program_b);
1018                    self
1019    }
1020      #[inline(always)]
1021    pub fn memo_program(&mut self, memo_program: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1022                        self.instruction.memo_program = Some(memo_program);
1023                    self
1024    }
1025                    #[inline(always)]
1026      pub fn withdraw_percent(&mut self, withdraw_percent: u32) -> &mut Self {
1027        self.instruction.withdraw_percent = Some(withdraw_percent);
1028        self
1029      }
1030                #[inline(always)]
1031      pub fn remaining_accounts_info(&mut self, remaining_accounts_info: RemainingAccountsInfo) -> &mut Self {
1032        self.instruction.remaining_accounts_info = Some(remaining_accounts_info);
1033        self
1034      }
1035        /// Add an additional account to the instruction.
1036  #[inline(always)]
1037  pub fn add_remaining_account(&mut self, account: &'b solana_program::account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
1038    self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
1039    self
1040  }
1041  /// Add additional accounts to the instruction.
1042  ///
1043  /// Each account is represented by a tuple of the `AccountInfo`, a `bool` indicating whether the account is writable or not,
1044  /// and a `bool` indicating whether the account is a signer or not.
1045  #[inline(always)]
1046  pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_program::account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
1047    self.instruction.__remaining_accounts.extend_from_slice(accounts);
1048    self
1049  }
1050  #[inline(always)]
1051  pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
1052    self.invoke_signed(&[])
1053  }
1054  #[allow(clippy::clone_on_copy)]
1055  #[allow(clippy::vec_init_then_push)]
1056  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program::entrypoint::ProgramResult {
1057          let args = LiquidatePositionOrcaInstructionArgs {
1058                                                              withdraw_percent: self.instruction.withdraw_percent.clone().expect("withdraw_percent is not set"),
1059                                                                  remaining_accounts_info: self.instruction.remaining_accounts_info.clone().expect("remaining_accounts_info is not set"),
1060                                    };
1061        let instruction = LiquidatePositionOrcaCpi {
1062        __program: self.instruction.__program,
1063                  
1064          authority: self.instruction.authority.expect("authority is not set"),
1065                  
1066          tuna_config: self.instruction.tuna_config.expect("tuna_config is not set"),
1067                  
1068          mint_a: self.instruction.mint_a.expect("mint_a is not set"),
1069                  
1070          mint_b: self.instruction.mint_b.expect("mint_b is not set"),
1071                  
1072          market: self.instruction.market.expect("market is not set"),
1073                  
1074          vault_a: self.instruction.vault_a.expect("vault_a is not set"),
1075                  
1076          vault_b: self.instruction.vault_b.expect("vault_b is not set"),
1077                  
1078          vault_a_ata: self.instruction.vault_a_ata.expect("vault_a_ata is not set"),
1079                  
1080          vault_b_ata: self.instruction.vault_b_ata.expect("vault_b_ata is not set"),
1081                  
1082          tuna_position: self.instruction.tuna_position.expect("tuna_position is not set"),
1083                  
1084          tuna_position_ata: self.instruction.tuna_position_ata.expect("tuna_position_ata is not set"),
1085                  
1086          tuna_position_ata_a: self.instruction.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
1087                  
1088          tuna_position_ata_b: self.instruction.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
1089                  
1090          liquidation_fee_recipient_ata_a: self.instruction.liquidation_fee_recipient_ata_a.expect("liquidation_fee_recipient_ata_a is not set"),
1091                  
1092          liquidation_fee_recipient_ata_b: self.instruction.liquidation_fee_recipient_ata_b.expect("liquidation_fee_recipient_ata_b is not set"),
1093                  
1094          pyth_oracle_price_feed_a: self.instruction.pyth_oracle_price_feed_a.expect("pyth_oracle_price_feed_a is not set"),
1095                  
1096          pyth_oracle_price_feed_b: self.instruction.pyth_oracle_price_feed_b.expect("pyth_oracle_price_feed_b is not set"),
1097                  
1098          whirlpool_program: self.instruction.whirlpool_program.expect("whirlpool_program is not set"),
1099                  
1100          whirlpool: self.instruction.whirlpool.expect("whirlpool is not set"),
1101                  
1102          orca_position: self.instruction.orca_position.expect("orca_position is not set"),
1103                  
1104          token_program_a: self.instruction.token_program_a.expect("token_program_a is not set"),
1105                  
1106          token_program_b: self.instruction.token_program_b.expect("token_program_b is not set"),
1107                  
1108          memo_program: self.instruction.memo_program.expect("memo_program is not set"),
1109                          __args: args,
1110            };
1111    instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
1112  }
1113}
1114
1115#[derive(Clone, Debug)]
1116struct LiquidatePositionOrcaCpiBuilderInstruction<'a, 'b> {
1117  __program: &'b solana_program::account_info::AccountInfo<'a>,
1118            authority: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1119                tuna_config: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1120                mint_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1121                mint_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1122                market: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1123                vault_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1124                vault_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1125                vault_a_ata: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1126                vault_b_ata: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1127                tuna_position: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1128                tuna_position_ata: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1129                tuna_position_ata_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1130                tuna_position_ata_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1131                liquidation_fee_recipient_ata_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1132                liquidation_fee_recipient_ata_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1133                pyth_oracle_price_feed_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1134                pyth_oracle_price_feed_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1135                whirlpool_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1136                whirlpool: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1137                orca_position: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1138                token_program_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1139                token_program_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1140                memo_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1141                        withdraw_percent: Option<u32>,
1142                remaining_accounts_info: Option<RemainingAccountsInfo>,
1143        /// Additional instruction accounts `(AccountInfo, is_writable, is_signer)`.
1144  __remaining_accounts: Vec<(&'b solana_program::account_info::AccountInfo<'a>, bool, bool)>,
1145}
1146