Skip to main content

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