1use crate::generated::types::RemainingAccountsInfo;
9use borsh::BorshSerialize;
10use borsh::BorshDeserialize;
11
12pub const MODIFY_TUNA_SPOT_POSITION_ORCA_DISCRIMINATOR: [u8; 8] = [133, 227, 147, 148, 220, 22, 59, 218];
13
14#[derive(Debug)]
16pub struct ModifyTunaSpotPositionOrca {
17 pub authority: solana_pubkey::Pubkey,
24
25
26 pub tuna_config: solana_pubkey::Pubkey,
27
28
29 pub mint_a: solana_pubkey::Pubkey,
30
31
32 pub mint_b: solana_pubkey::Pubkey,
33
34
35 pub token_program_a: solana_pubkey::Pubkey,
36
37
38 pub token_program_b: solana_pubkey::Pubkey,
39
40
41 pub market: solana_pubkey::Pubkey,
42
43
44 pub vault_a: solana_pubkey::Pubkey,
45
46
47 pub vault_b: solana_pubkey::Pubkey,
48
49
50 pub vault_a_ata: solana_pubkey::Pubkey,
51
52
53 pub vault_b_ata: solana_pubkey::Pubkey,
54
55
56 pub tuna_position: solana_pubkey::Pubkey,
57
58
59 pub tuna_position_ata_a: solana_pubkey::Pubkey,
60
61
62 pub tuna_position_ata_b: solana_pubkey::Pubkey,
63
64
65 pub tuna_position_owner_ata_a: Option<solana_pubkey::Pubkey>,
66
67
68 pub tuna_position_owner_ata_b: Option<solana_pubkey::Pubkey>,
69
70
71 pub fee_recipient_ata_a: solana_pubkey::Pubkey,
72
73
74 pub fee_recipient_ata_b: solana_pubkey::Pubkey,
75
76
77 pub pyth_oracle_price_feed_a: solana_pubkey::Pubkey,
78
79
80 pub pyth_oracle_price_feed_b: solana_pubkey::Pubkey,
81 pub whirlpool_program: solana_pubkey::Pubkey,
88
89
90 pub whirlpool: solana_pubkey::Pubkey,
91
92
93 pub memo_program: solana_pubkey::Pubkey,
94 pub system_program: solana_pubkey::Pubkey,
101 }
102
103impl ModifyTunaSpotPositionOrca {
104 pub fn instruction(&self, args: ModifyTunaSpotPositionOrcaInstructionArgs) -> solana_instruction::Instruction {
105 self.instruction_with_remaining_accounts(args, &[])
106 }
107 #[allow(clippy::arithmetic_side_effects)]
108 #[allow(clippy::vec_init_then_push)]
109 pub fn instruction_with_remaining_accounts(&self, args: ModifyTunaSpotPositionOrcaInstructionArgs, remaining_accounts: &[solana_instruction::AccountMeta]) -> solana_instruction::Instruction {
110 let mut accounts = Vec::with_capacity(24+ remaining_accounts.len());
111 accounts.push(solana_instruction::AccountMeta::new(
112 self.authority,
113 true
114 ));
115 accounts.push(solana_instruction::AccountMeta::new_readonly(
116 self.tuna_config,
117 false
118 ));
119 accounts.push(solana_instruction::AccountMeta::new_readonly(
120 self.mint_a,
121 false
122 ));
123 accounts.push(solana_instruction::AccountMeta::new_readonly(
124 self.mint_b,
125 false
126 ));
127 accounts.push(solana_instruction::AccountMeta::new_readonly(
128 self.token_program_a,
129 false
130 ));
131 accounts.push(solana_instruction::AccountMeta::new_readonly(
132 self.token_program_b,
133 false
134 ));
135 accounts.push(solana_instruction::AccountMeta::new(
136 self.market,
137 false
138 ));
139 accounts.push(solana_instruction::AccountMeta::new(
140 self.vault_a,
141 false
142 ));
143 accounts.push(solana_instruction::AccountMeta::new(
144 self.vault_b,
145 false
146 ));
147 accounts.push(solana_instruction::AccountMeta::new(
148 self.vault_a_ata,
149 false
150 ));
151 accounts.push(solana_instruction::AccountMeta::new(
152 self.vault_b_ata,
153 false
154 ));
155 accounts.push(solana_instruction::AccountMeta::new(
156 self.tuna_position,
157 false
158 ));
159 accounts.push(solana_instruction::AccountMeta::new(
160 self.tuna_position_ata_a,
161 false
162 ));
163 accounts.push(solana_instruction::AccountMeta::new(
164 self.tuna_position_ata_b,
165 false
166 ));
167 if let Some(tuna_position_owner_ata_a) = self.tuna_position_owner_ata_a {
168 accounts.push(solana_instruction::AccountMeta::new(
169 tuna_position_owner_ata_a,
170 false,
171 ));
172 } else {
173 accounts.push(solana_instruction::AccountMeta::new_readonly(
174 crate::TUNA_ID,
175 false,
176 ));
177 }
178 if let Some(tuna_position_owner_ata_b) = self.tuna_position_owner_ata_b {
179 accounts.push(solana_instruction::AccountMeta::new(
180 tuna_position_owner_ata_b,
181 false,
182 ));
183 } else {
184 accounts.push(solana_instruction::AccountMeta::new_readonly(
185 crate::TUNA_ID,
186 false,
187 ));
188 }
189 accounts.push(solana_instruction::AccountMeta::new(
190 self.fee_recipient_ata_a,
191 false
192 ));
193 accounts.push(solana_instruction::AccountMeta::new(
194 self.fee_recipient_ata_b,
195 false
196 ));
197 accounts.push(solana_instruction::AccountMeta::new_readonly(
198 self.pyth_oracle_price_feed_a,
199 false
200 ));
201 accounts.push(solana_instruction::AccountMeta::new_readonly(
202 self.pyth_oracle_price_feed_b,
203 false
204 ));
205 accounts.push(solana_instruction::AccountMeta::new_readonly(
206 self.whirlpool_program,
207 false
208 ));
209 accounts.push(solana_instruction::AccountMeta::new(
210 self.whirlpool,
211 false
212 ));
213 accounts.push(solana_instruction::AccountMeta::new_readonly(
214 self.memo_program,
215 false
216 ));
217 accounts.push(solana_instruction::AccountMeta::new_readonly(
218 self.system_program,
219 false
220 ));
221 accounts.extend_from_slice(remaining_accounts);
222 let mut data = borsh::to_vec(&ModifyTunaSpotPositionOrcaInstructionData::new()).unwrap();
223 let mut args = borsh::to_vec(&args).unwrap();
224 data.append(&mut args);
225
226 solana_instruction::Instruction {
227 program_id: crate::TUNA_ID,
228 accounts,
229 data,
230 }
231 }
232}
233
234#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
235#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
236 pub struct ModifyTunaSpotPositionOrcaInstructionData {
237 discriminator: [u8; 8],
238 }
239
240impl ModifyTunaSpotPositionOrcaInstructionData {
241 pub fn new() -> Self {
242 Self {
243 discriminator: [133, 227, 147, 148, 220, 22, 59, 218],
244 }
245 }
246}
247
248impl Default for ModifyTunaSpotPositionOrcaInstructionData {
249 fn default() -> Self {
250 Self::new()
251 }
252}
253
254#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
255#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
256 pub struct ModifyTunaSpotPositionOrcaInstructionArgs {
257 pub decrease_percent: u32,
258 pub collateral_amount: u64,
259 pub borrow_amount: u64,
260 pub required_swap_amount: u64,
261 pub remaining_accounts_info: RemainingAccountsInfo,
262 }
263
264
265#[derive(Clone, Debug, Default)]
294pub struct ModifyTunaSpotPositionOrcaBuilder {
295 authority: Option<solana_pubkey::Pubkey>,
296 tuna_config: Option<solana_pubkey::Pubkey>,
297 mint_a: Option<solana_pubkey::Pubkey>,
298 mint_b: Option<solana_pubkey::Pubkey>,
299 token_program_a: Option<solana_pubkey::Pubkey>,
300 token_program_b: Option<solana_pubkey::Pubkey>,
301 market: Option<solana_pubkey::Pubkey>,
302 vault_a: Option<solana_pubkey::Pubkey>,
303 vault_b: Option<solana_pubkey::Pubkey>,
304 vault_a_ata: Option<solana_pubkey::Pubkey>,
305 vault_b_ata: Option<solana_pubkey::Pubkey>,
306 tuna_position: Option<solana_pubkey::Pubkey>,
307 tuna_position_ata_a: Option<solana_pubkey::Pubkey>,
308 tuna_position_ata_b: Option<solana_pubkey::Pubkey>,
309 tuna_position_owner_ata_a: Option<solana_pubkey::Pubkey>,
310 tuna_position_owner_ata_b: Option<solana_pubkey::Pubkey>,
311 fee_recipient_ata_a: Option<solana_pubkey::Pubkey>,
312 fee_recipient_ata_b: Option<solana_pubkey::Pubkey>,
313 pyth_oracle_price_feed_a: Option<solana_pubkey::Pubkey>,
314 pyth_oracle_price_feed_b: Option<solana_pubkey::Pubkey>,
315 whirlpool_program: Option<solana_pubkey::Pubkey>,
316 whirlpool: Option<solana_pubkey::Pubkey>,
317 memo_program: Option<solana_pubkey::Pubkey>,
318 system_program: Option<solana_pubkey::Pubkey>,
319 decrease_percent: Option<u32>,
320 collateral_amount: Option<u64>,
321 borrow_amount: Option<u64>,
322 required_swap_amount: Option<u64>,
323 remaining_accounts_info: Option<RemainingAccountsInfo>,
324 __remaining_accounts: Vec<solana_instruction::AccountMeta>,
325}
326
327impl ModifyTunaSpotPositionOrcaBuilder {
328 pub fn new() -> Self {
329 Self::default()
330 }
331 #[inline(always)]
335 pub fn authority(&mut self, authority: solana_pubkey::Pubkey) -> &mut Self {
336 self.authority = Some(authority);
337 self
338 }
339 #[inline(always)]
340 pub fn tuna_config(&mut self, tuna_config: solana_pubkey::Pubkey) -> &mut Self {
341 self.tuna_config = Some(tuna_config);
342 self
343 }
344 #[inline(always)]
345 pub fn mint_a(&mut self, mint_a: solana_pubkey::Pubkey) -> &mut Self {
346 self.mint_a = Some(mint_a);
347 self
348 }
349 #[inline(always)]
350 pub fn mint_b(&mut self, mint_b: solana_pubkey::Pubkey) -> &mut Self {
351 self.mint_b = Some(mint_b);
352 self
353 }
354 #[inline(always)]
355 pub fn token_program_a(&mut self, token_program_a: solana_pubkey::Pubkey) -> &mut Self {
356 self.token_program_a = Some(token_program_a);
357 self
358 }
359 #[inline(always)]
360 pub fn token_program_b(&mut self, token_program_b: solana_pubkey::Pubkey) -> &mut Self {
361 self.token_program_b = Some(token_program_b);
362 self
363 }
364 #[inline(always)]
365 pub fn market(&mut self, market: solana_pubkey::Pubkey) -> &mut Self {
366 self.market = Some(market);
367 self
368 }
369 #[inline(always)]
370 pub fn vault_a(&mut self, vault_a: solana_pubkey::Pubkey) -> &mut Self {
371 self.vault_a = Some(vault_a);
372 self
373 }
374 #[inline(always)]
375 pub fn vault_b(&mut self, vault_b: solana_pubkey::Pubkey) -> &mut Self {
376 self.vault_b = Some(vault_b);
377 self
378 }
379 #[inline(always)]
380 pub fn vault_a_ata(&mut self, vault_a_ata: solana_pubkey::Pubkey) -> &mut Self {
381 self.vault_a_ata = Some(vault_a_ata);
382 self
383 }
384 #[inline(always)]
385 pub fn vault_b_ata(&mut self, vault_b_ata: solana_pubkey::Pubkey) -> &mut Self {
386 self.vault_b_ata = Some(vault_b_ata);
387 self
388 }
389 #[inline(always)]
390 pub fn tuna_position(&mut self, tuna_position: solana_pubkey::Pubkey) -> &mut Self {
391 self.tuna_position = Some(tuna_position);
392 self
393 }
394 #[inline(always)]
395 pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: solana_pubkey::Pubkey) -> &mut Self {
396 self.tuna_position_ata_a = Some(tuna_position_ata_a);
397 self
398 }
399 #[inline(always)]
400 pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: solana_pubkey::Pubkey) -> &mut Self {
401 self.tuna_position_ata_b = Some(tuna_position_ata_b);
402 self
403 }
404 #[inline(always)]
406 pub fn tuna_position_owner_ata_a(&mut self, tuna_position_owner_ata_a: Option<solana_pubkey::Pubkey>) -> &mut Self {
407 self.tuna_position_owner_ata_a = tuna_position_owner_ata_a;
408 self
409 }
410 #[inline(always)]
412 pub fn tuna_position_owner_ata_b(&mut self, tuna_position_owner_ata_b: Option<solana_pubkey::Pubkey>) -> &mut Self {
413 self.tuna_position_owner_ata_b = tuna_position_owner_ata_b;
414 self
415 }
416 #[inline(always)]
417 pub fn fee_recipient_ata_a(&mut self, fee_recipient_ata_a: solana_pubkey::Pubkey) -> &mut Self {
418 self.fee_recipient_ata_a = Some(fee_recipient_ata_a);
419 self
420 }
421 #[inline(always)]
422 pub fn fee_recipient_ata_b(&mut self, fee_recipient_ata_b: solana_pubkey::Pubkey) -> &mut Self {
423 self.fee_recipient_ata_b = Some(fee_recipient_ata_b);
424 self
425 }
426 #[inline(always)]
427 pub fn pyth_oracle_price_feed_a(&mut self, pyth_oracle_price_feed_a: solana_pubkey::Pubkey) -> &mut Self {
428 self.pyth_oracle_price_feed_a = Some(pyth_oracle_price_feed_a);
429 self
430 }
431 #[inline(always)]
432 pub fn pyth_oracle_price_feed_b(&mut self, pyth_oracle_price_feed_b: solana_pubkey::Pubkey) -> &mut Self {
433 self.pyth_oracle_price_feed_b = Some(pyth_oracle_price_feed_b);
434 self
435 }
436 #[inline(always)]
440 pub fn whirlpool_program(&mut self, whirlpool_program: solana_pubkey::Pubkey) -> &mut Self {
441 self.whirlpool_program = Some(whirlpool_program);
442 self
443 }
444 #[inline(always)]
445 pub fn whirlpool(&mut self, whirlpool: solana_pubkey::Pubkey) -> &mut Self {
446 self.whirlpool = Some(whirlpool);
447 self
448 }
449 #[inline(always)]
450 pub fn memo_program(&mut self, memo_program: solana_pubkey::Pubkey) -> &mut Self {
451 self.memo_program = Some(memo_program);
452 self
453 }
454 #[inline(always)]
459 pub fn system_program(&mut self, system_program: solana_pubkey::Pubkey) -> &mut Self {
460 self.system_program = Some(system_program);
461 self
462 }
463 #[inline(always)]
464 pub fn decrease_percent(&mut self, decrease_percent: u32) -> &mut Self {
465 self.decrease_percent = Some(decrease_percent);
466 self
467 }
468 #[inline(always)]
469 pub fn collateral_amount(&mut self, collateral_amount: u64) -> &mut Self {
470 self.collateral_amount = Some(collateral_amount);
471 self
472 }
473 #[inline(always)]
474 pub fn borrow_amount(&mut self, borrow_amount: u64) -> &mut Self {
475 self.borrow_amount = Some(borrow_amount);
476 self
477 }
478 #[inline(always)]
479 pub fn required_swap_amount(&mut self, required_swap_amount: u64) -> &mut Self {
480 self.required_swap_amount = Some(required_swap_amount);
481 self
482 }
483 #[inline(always)]
484 pub fn remaining_accounts_info(&mut self, remaining_accounts_info: RemainingAccountsInfo) -> &mut Self {
485 self.remaining_accounts_info = Some(remaining_accounts_info);
486 self
487 }
488 #[inline(always)]
490 pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
491 self.__remaining_accounts.push(account);
492 self
493 }
494 #[inline(always)]
496 pub fn add_remaining_accounts(&mut self, accounts: &[solana_instruction::AccountMeta]) -> &mut Self {
497 self.__remaining_accounts.extend_from_slice(accounts);
498 self
499 }
500 #[allow(clippy::clone_on_copy)]
501 pub fn instruction(&self) -> solana_instruction::Instruction {
502 let accounts = ModifyTunaSpotPositionOrca {
503 authority: self.authority.expect("authority is not set"),
504 tuna_config: self.tuna_config.expect("tuna_config is not set"),
505 mint_a: self.mint_a.expect("mint_a is not set"),
506 mint_b: self.mint_b.expect("mint_b is not set"),
507 token_program_a: self.token_program_a.expect("token_program_a is not set"),
508 token_program_b: self.token_program_b.expect("token_program_b is not set"),
509 market: self.market.expect("market is not set"),
510 vault_a: self.vault_a.expect("vault_a is not set"),
511 vault_b: self.vault_b.expect("vault_b is not set"),
512 vault_a_ata: self.vault_a_ata.expect("vault_a_ata is not set"),
513 vault_b_ata: self.vault_b_ata.expect("vault_b_ata is not set"),
514 tuna_position: self.tuna_position.expect("tuna_position is not set"),
515 tuna_position_ata_a: self.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
516 tuna_position_ata_b: self.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
517 tuna_position_owner_ata_a: self.tuna_position_owner_ata_a,
518 tuna_position_owner_ata_b: self.tuna_position_owner_ata_b,
519 fee_recipient_ata_a: self.fee_recipient_ata_a.expect("fee_recipient_ata_a is not set"),
520 fee_recipient_ata_b: self.fee_recipient_ata_b.expect("fee_recipient_ata_b is not set"),
521 pyth_oracle_price_feed_a: self.pyth_oracle_price_feed_a.expect("pyth_oracle_price_feed_a is not set"),
522 pyth_oracle_price_feed_b: self.pyth_oracle_price_feed_b.expect("pyth_oracle_price_feed_b is not set"),
523 whirlpool_program: self.whirlpool_program.expect("whirlpool_program is not set"),
524 whirlpool: self.whirlpool.expect("whirlpool is not set"),
525 memo_program: self.memo_program.expect("memo_program is not set"),
526 system_program: self.system_program.unwrap_or(solana_pubkey::pubkey!("11111111111111111111111111111111")),
527 };
528 let args = ModifyTunaSpotPositionOrcaInstructionArgs {
529 decrease_percent: self.decrease_percent.clone().expect("decrease_percent is not set"),
530 collateral_amount: self.collateral_amount.clone().expect("collateral_amount is not set"),
531 borrow_amount: self.borrow_amount.clone().expect("borrow_amount is not set"),
532 required_swap_amount: self.required_swap_amount.clone().expect("required_swap_amount is not set"),
533 remaining_accounts_info: self.remaining_accounts_info.clone().expect("remaining_accounts_info is not set"),
534 };
535
536 accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
537 }
538}
539
540 pub struct ModifyTunaSpotPositionOrcaCpiAccounts<'a, 'b> {
542 pub authority: &'b solana_account_info::AccountInfo<'a>,
549
550
551 pub tuna_config: &'b solana_account_info::AccountInfo<'a>,
552
553
554 pub mint_a: &'b solana_account_info::AccountInfo<'a>,
555
556
557 pub mint_b: &'b solana_account_info::AccountInfo<'a>,
558
559
560 pub token_program_a: &'b solana_account_info::AccountInfo<'a>,
561
562
563 pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
564
565
566 pub market: &'b solana_account_info::AccountInfo<'a>,
567
568
569 pub vault_a: &'b solana_account_info::AccountInfo<'a>,
570
571
572 pub vault_b: &'b solana_account_info::AccountInfo<'a>,
573
574
575 pub vault_a_ata: &'b solana_account_info::AccountInfo<'a>,
576
577
578 pub vault_b_ata: &'b solana_account_info::AccountInfo<'a>,
579
580
581 pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
582
583
584 pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
585
586
587 pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
588
589
590 pub tuna_position_owner_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
591
592
593 pub tuna_position_owner_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
594
595
596 pub fee_recipient_ata_a: &'b solana_account_info::AccountInfo<'a>,
597
598
599 pub fee_recipient_ata_b: &'b solana_account_info::AccountInfo<'a>,
600
601
602 pub pyth_oracle_price_feed_a: &'b solana_account_info::AccountInfo<'a>,
603
604
605 pub pyth_oracle_price_feed_b: &'b solana_account_info::AccountInfo<'a>,
606 pub whirlpool_program: &'b solana_account_info::AccountInfo<'a>,
613
614
615 pub whirlpool: &'b solana_account_info::AccountInfo<'a>,
616
617
618 pub memo_program: &'b solana_account_info::AccountInfo<'a>,
619 pub system_program: &'b solana_account_info::AccountInfo<'a>,
626 }
627
628pub struct ModifyTunaSpotPositionOrcaCpi<'a, 'b> {
630 pub __program: &'b solana_account_info::AccountInfo<'a>,
632 pub authority: &'b solana_account_info::AccountInfo<'a>,
639
640
641 pub tuna_config: &'b solana_account_info::AccountInfo<'a>,
642
643
644 pub mint_a: &'b solana_account_info::AccountInfo<'a>,
645
646
647 pub mint_b: &'b solana_account_info::AccountInfo<'a>,
648
649
650 pub token_program_a: &'b solana_account_info::AccountInfo<'a>,
651
652
653 pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
654
655
656 pub market: &'b solana_account_info::AccountInfo<'a>,
657
658
659 pub vault_a: &'b solana_account_info::AccountInfo<'a>,
660
661
662 pub vault_b: &'b solana_account_info::AccountInfo<'a>,
663
664
665 pub vault_a_ata: &'b solana_account_info::AccountInfo<'a>,
666
667
668 pub vault_b_ata: &'b solana_account_info::AccountInfo<'a>,
669
670
671 pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
672
673
674 pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
675
676
677 pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
678
679
680 pub tuna_position_owner_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
681
682
683 pub tuna_position_owner_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
684
685
686 pub fee_recipient_ata_a: &'b solana_account_info::AccountInfo<'a>,
687
688
689 pub fee_recipient_ata_b: &'b solana_account_info::AccountInfo<'a>,
690
691
692 pub pyth_oracle_price_feed_a: &'b solana_account_info::AccountInfo<'a>,
693
694
695 pub pyth_oracle_price_feed_b: &'b solana_account_info::AccountInfo<'a>,
696 pub whirlpool_program: &'b solana_account_info::AccountInfo<'a>,
703
704
705 pub whirlpool: &'b solana_account_info::AccountInfo<'a>,
706
707
708 pub memo_program: &'b solana_account_info::AccountInfo<'a>,
709 pub system_program: &'b solana_account_info::AccountInfo<'a>,
716 pub __args: ModifyTunaSpotPositionOrcaInstructionArgs,
718 }
719
720impl<'a, 'b> ModifyTunaSpotPositionOrcaCpi<'a, 'b> {
721 pub fn new(
722 program: &'b solana_account_info::AccountInfo<'a>,
723 accounts: ModifyTunaSpotPositionOrcaCpiAccounts<'a, 'b>,
724 args: ModifyTunaSpotPositionOrcaInstructionArgs,
725 ) -> Self {
726 Self {
727 __program: program,
728 authority: accounts.authority,
729 tuna_config: accounts.tuna_config,
730 mint_a: accounts.mint_a,
731 mint_b: accounts.mint_b,
732 token_program_a: accounts.token_program_a,
733 token_program_b: accounts.token_program_b,
734 market: accounts.market,
735 vault_a: accounts.vault_a,
736 vault_b: accounts.vault_b,
737 vault_a_ata: accounts.vault_a_ata,
738 vault_b_ata: accounts.vault_b_ata,
739 tuna_position: accounts.tuna_position,
740 tuna_position_ata_a: accounts.tuna_position_ata_a,
741 tuna_position_ata_b: accounts.tuna_position_ata_b,
742 tuna_position_owner_ata_a: accounts.tuna_position_owner_ata_a,
743 tuna_position_owner_ata_b: accounts.tuna_position_owner_ata_b,
744 fee_recipient_ata_a: accounts.fee_recipient_ata_a,
745 fee_recipient_ata_b: accounts.fee_recipient_ata_b,
746 pyth_oracle_price_feed_a: accounts.pyth_oracle_price_feed_a,
747 pyth_oracle_price_feed_b: accounts.pyth_oracle_price_feed_b,
748 whirlpool_program: accounts.whirlpool_program,
749 whirlpool: accounts.whirlpool,
750 memo_program: accounts.memo_program,
751 system_program: accounts.system_program,
752 __args: args,
753 }
754 }
755 #[inline(always)]
756 pub fn invoke(&self) -> solana_program_error::ProgramResult {
757 self.invoke_signed_with_remaining_accounts(&[], &[])
758 }
759 #[inline(always)]
760 pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> solana_program_error::ProgramResult {
761 self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
762 }
763 #[inline(always)]
764 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
765 self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
766 }
767 #[allow(clippy::arithmetic_side_effects)]
768 #[allow(clippy::clone_on_copy)]
769 #[allow(clippy::vec_init_then_push)]
770 pub fn invoke_signed_with_remaining_accounts(
771 &self,
772 signers_seeds: &[&[&[u8]]],
773 remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]
774 ) -> solana_program_error::ProgramResult {
775 let mut accounts = Vec::with_capacity(24+ remaining_accounts.len());
776 accounts.push(solana_instruction::AccountMeta::new(
777 *self.authority.key,
778 true
779 ));
780 accounts.push(solana_instruction::AccountMeta::new_readonly(
781 *self.tuna_config.key,
782 false
783 ));
784 accounts.push(solana_instruction::AccountMeta::new_readonly(
785 *self.mint_a.key,
786 false
787 ));
788 accounts.push(solana_instruction::AccountMeta::new_readonly(
789 *self.mint_b.key,
790 false
791 ));
792 accounts.push(solana_instruction::AccountMeta::new_readonly(
793 *self.token_program_a.key,
794 false
795 ));
796 accounts.push(solana_instruction::AccountMeta::new_readonly(
797 *self.token_program_b.key,
798 false
799 ));
800 accounts.push(solana_instruction::AccountMeta::new(
801 *self.market.key,
802 false
803 ));
804 accounts.push(solana_instruction::AccountMeta::new(
805 *self.vault_a.key,
806 false
807 ));
808 accounts.push(solana_instruction::AccountMeta::new(
809 *self.vault_b.key,
810 false
811 ));
812 accounts.push(solana_instruction::AccountMeta::new(
813 *self.vault_a_ata.key,
814 false
815 ));
816 accounts.push(solana_instruction::AccountMeta::new(
817 *self.vault_b_ata.key,
818 false
819 ));
820 accounts.push(solana_instruction::AccountMeta::new(
821 *self.tuna_position.key,
822 false
823 ));
824 accounts.push(solana_instruction::AccountMeta::new(
825 *self.tuna_position_ata_a.key,
826 false
827 ));
828 accounts.push(solana_instruction::AccountMeta::new(
829 *self.tuna_position_ata_b.key,
830 false
831 ));
832 if let Some(tuna_position_owner_ata_a) = self.tuna_position_owner_ata_a {
833 accounts.push(solana_instruction::AccountMeta::new(
834 *tuna_position_owner_ata_a.key,
835 false,
836 ));
837 } else {
838 accounts.push(solana_instruction::AccountMeta::new_readonly(
839 crate::TUNA_ID,
840 false,
841 ));
842 }
843 if let Some(tuna_position_owner_ata_b) = self.tuna_position_owner_ata_b {
844 accounts.push(solana_instruction::AccountMeta::new(
845 *tuna_position_owner_ata_b.key,
846 false,
847 ));
848 } else {
849 accounts.push(solana_instruction::AccountMeta::new_readonly(
850 crate::TUNA_ID,
851 false,
852 ));
853 }
854 accounts.push(solana_instruction::AccountMeta::new(
855 *self.fee_recipient_ata_a.key,
856 false
857 ));
858 accounts.push(solana_instruction::AccountMeta::new(
859 *self.fee_recipient_ata_b.key,
860 false
861 ));
862 accounts.push(solana_instruction::AccountMeta::new_readonly(
863 *self.pyth_oracle_price_feed_a.key,
864 false
865 ));
866 accounts.push(solana_instruction::AccountMeta::new_readonly(
867 *self.pyth_oracle_price_feed_b.key,
868 false
869 ));
870 accounts.push(solana_instruction::AccountMeta::new_readonly(
871 *self.whirlpool_program.key,
872 false
873 ));
874 accounts.push(solana_instruction::AccountMeta::new(
875 *self.whirlpool.key,
876 false
877 ));
878 accounts.push(solana_instruction::AccountMeta::new_readonly(
879 *self.memo_program.key,
880 false
881 ));
882 accounts.push(solana_instruction::AccountMeta::new_readonly(
883 *self.system_program.key,
884 false
885 ));
886 remaining_accounts.iter().for_each(|remaining_account| {
887 accounts.push(solana_instruction::AccountMeta {
888 pubkey: *remaining_account.0.key,
889 is_signer: remaining_account.1,
890 is_writable: remaining_account.2,
891 })
892 });
893 let mut data = borsh::to_vec(&ModifyTunaSpotPositionOrcaInstructionData::new()).unwrap();
894 let mut args = borsh::to_vec(&self.__args).unwrap();
895 data.append(&mut args);
896
897 let instruction = solana_instruction::Instruction {
898 program_id: crate::TUNA_ID,
899 accounts,
900 data,
901 };
902 let mut account_infos = Vec::with_capacity(25 + remaining_accounts.len());
903 account_infos.push(self.__program.clone());
904 account_infos.push(self.authority.clone());
905 account_infos.push(self.tuna_config.clone());
906 account_infos.push(self.mint_a.clone());
907 account_infos.push(self.mint_b.clone());
908 account_infos.push(self.token_program_a.clone());
909 account_infos.push(self.token_program_b.clone());
910 account_infos.push(self.market.clone());
911 account_infos.push(self.vault_a.clone());
912 account_infos.push(self.vault_b.clone());
913 account_infos.push(self.vault_a_ata.clone());
914 account_infos.push(self.vault_b_ata.clone());
915 account_infos.push(self.tuna_position.clone());
916 account_infos.push(self.tuna_position_ata_a.clone());
917 account_infos.push(self.tuna_position_ata_b.clone());
918 if let Some(tuna_position_owner_ata_a) = self.tuna_position_owner_ata_a {
919 account_infos.push(tuna_position_owner_ata_a.clone());
920 }
921 if let Some(tuna_position_owner_ata_b) = self.tuna_position_owner_ata_b {
922 account_infos.push(tuna_position_owner_ata_b.clone());
923 }
924 account_infos.push(self.fee_recipient_ata_a.clone());
925 account_infos.push(self.fee_recipient_ata_b.clone());
926 account_infos.push(self.pyth_oracle_price_feed_a.clone());
927 account_infos.push(self.pyth_oracle_price_feed_b.clone());
928 account_infos.push(self.whirlpool_program.clone());
929 account_infos.push(self.whirlpool.clone());
930 account_infos.push(self.memo_program.clone());
931 account_infos.push(self.system_program.clone());
932 remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
933
934 if signers_seeds.is_empty() {
935 solana_cpi::invoke(&instruction, &account_infos)
936 } else {
937 solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
938 }
939 }
940}
941
942#[derive(Clone, Debug)]
971pub struct ModifyTunaSpotPositionOrcaCpiBuilder<'a, 'b> {
972 instruction: Box<ModifyTunaSpotPositionOrcaCpiBuilderInstruction<'a, 'b>>,
973}
974
975impl<'a, 'b> ModifyTunaSpotPositionOrcaCpiBuilder<'a, 'b> {
976 pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
977 let instruction = Box::new(ModifyTunaSpotPositionOrcaCpiBuilderInstruction {
978 __program: program,
979 authority: None,
980 tuna_config: None,
981 mint_a: None,
982 mint_b: None,
983 token_program_a: None,
984 token_program_b: None,
985 market: None,
986 vault_a: None,
987 vault_b: None,
988 vault_a_ata: None,
989 vault_b_ata: None,
990 tuna_position: None,
991 tuna_position_ata_a: None,
992 tuna_position_ata_b: None,
993 tuna_position_owner_ata_a: None,
994 tuna_position_owner_ata_b: None,
995 fee_recipient_ata_a: None,
996 fee_recipient_ata_b: None,
997 pyth_oracle_price_feed_a: None,
998 pyth_oracle_price_feed_b: None,
999 whirlpool_program: None,
1000 whirlpool: None,
1001 memo_program: None,
1002 system_program: None,
1003 decrease_percent: None,
1004 collateral_amount: None,
1005 borrow_amount: None,
1006 required_swap_amount: None,
1007 remaining_accounts_info: None,
1008 __remaining_accounts: Vec::new(),
1009 });
1010 Self { instruction }
1011 }
1012 #[inline(always)]
1016 pub fn authority(&mut self, authority: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1017 self.instruction.authority = Some(authority);
1018 self
1019 }
1020 #[inline(always)]
1021 pub fn tuna_config(&mut self, tuna_config: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1022 self.instruction.tuna_config = Some(tuna_config);
1023 self
1024 }
1025 #[inline(always)]
1026 pub fn mint_a(&mut self, mint_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1027 self.instruction.mint_a = Some(mint_a);
1028 self
1029 }
1030 #[inline(always)]
1031 pub fn mint_b(&mut self, mint_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1032 self.instruction.mint_b = Some(mint_b);
1033 self
1034 }
1035 #[inline(always)]
1036 pub fn token_program_a(&mut self, token_program_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1037 self.instruction.token_program_a = Some(token_program_a);
1038 self
1039 }
1040 #[inline(always)]
1041 pub fn token_program_b(&mut self, token_program_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1042 self.instruction.token_program_b = Some(token_program_b);
1043 self
1044 }
1045 #[inline(always)]
1046 pub fn market(&mut self, market: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1047 self.instruction.market = Some(market);
1048 self
1049 }
1050 #[inline(always)]
1051 pub fn vault_a(&mut self, vault_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1052 self.instruction.vault_a = Some(vault_a);
1053 self
1054 }
1055 #[inline(always)]
1056 pub fn vault_b(&mut self, vault_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1057 self.instruction.vault_b = Some(vault_b);
1058 self
1059 }
1060 #[inline(always)]
1061 pub fn vault_a_ata(&mut self, vault_a_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1062 self.instruction.vault_a_ata = Some(vault_a_ata);
1063 self
1064 }
1065 #[inline(always)]
1066 pub fn vault_b_ata(&mut self, vault_b_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1067 self.instruction.vault_b_ata = Some(vault_b_ata);
1068 self
1069 }
1070 #[inline(always)]
1071 pub fn tuna_position(&mut self, tuna_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1072 self.instruction.tuna_position = Some(tuna_position);
1073 self
1074 }
1075 #[inline(always)]
1076 pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1077 self.instruction.tuna_position_ata_a = Some(tuna_position_ata_a);
1078 self
1079 }
1080 #[inline(always)]
1081 pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1082 self.instruction.tuna_position_ata_b = Some(tuna_position_ata_b);
1083 self
1084 }
1085 #[inline(always)]
1087 pub fn tuna_position_owner_ata_a(&mut self, tuna_position_owner_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>) -> &mut Self {
1088 self.instruction.tuna_position_owner_ata_a = tuna_position_owner_ata_a;
1089 self
1090 }
1091 #[inline(always)]
1093 pub fn tuna_position_owner_ata_b(&mut self, tuna_position_owner_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>) -> &mut Self {
1094 self.instruction.tuna_position_owner_ata_b = tuna_position_owner_ata_b;
1095 self
1096 }
1097 #[inline(always)]
1098 pub fn fee_recipient_ata_a(&mut self, fee_recipient_ata_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1099 self.instruction.fee_recipient_ata_a = Some(fee_recipient_ata_a);
1100 self
1101 }
1102 #[inline(always)]
1103 pub fn fee_recipient_ata_b(&mut self, fee_recipient_ata_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1104 self.instruction.fee_recipient_ata_b = Some(fee_recipient_ata_b);
1105 self
1106 }
1107 #[inline(always)]
1108 pub fn pyth_oracle_price_feed_a(&mut self, pyth_oracle_price_feed_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1109 self.instruction.pyth_oracle_price_feed_a = Some(pyth_oracle_price_feed_a);
1110 self
1111 }
1112 #[inline(always)]
1113 pub fn pyth_oracle_price_feed_b(&mut self, pyth_oracle_price_feed_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1114 self.instruction.pyth_oracle_price_feed_b = Some(pyth_oracle_price_feed_b);
1115 self
1116 }
1117 #[inline(always)]
1121 pub fn whirlpool_program(&mut self, whirlpool_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1122 self.instruction.whirlpool_program = Some(whirlpool_program);
1123 self
1124 }
1125 #[inline(always)]
1126 pub fn whirlpool(&mut self, whirlpool: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1127 self.instruction.whirlpool = Some(whirlpool);
1128 self
1129 }
1130 #[inline(always)]
1131 pub fn memo_program(&mut self, memo_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1132 self.instruction.memo_program = Some(memo_program);
1133 self
1134 }
1135 #[inline(always)]
1139 pub fn system_program(&mut self, system_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1140 self.instruction.system_program = Some(system_program);
1141 self
1142 }
1143 #[inline(always)]
1144 pub fn decrease_percent(&mut self, decrease_percent: u32) -> &mut Self {
1145 self.instruction.decrease_percent = Some(decrease_percent);
1146 self
1147 }
1148 #[inline(always)]
1149 pub fn collateral_amount(&mut self, collateral_amount: u64) -> &mut Self {
1150 self.instruction.collateral_amount = Some(collateral_amount);
1151 self
1152 }
1153 #[inline(always)]
1154 pub fn borrow_amount(&mut self, borrow_amount: u64) -> &mut Self {
1155 self.instruction.borrow_amount = Some(borrow_amount);
1156 self
1157 }
1158 #[inline(always)]
1159 pub fn required_swap_amount(&mut self, required_swap_amount: u64) -> &mut Self {
1160 self.instruction.required_swap_amount = Some(required_swap_amount);
1161 self
1162 }
1163 #[inline(always)]
1164 pub fn remaining_accounts_info(&mut self, remaining_accounts_info: RemainingAccountsInfo) -> &mut Self {
1165 self.instruction.remaining_accounts_info = Some(remaining_accounts_info);
1166 self
1167 }
1168 #[inline(always)]
1170 pub fn add_remaining_account(&mut self, account: &'b solana_account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
1171 self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
1172 self
1173 }
1174 #[inline(always)]
1179 pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
1180 self.instruction.__remaining_accounts.extend_from_slice(accounts);
1181 self
1182 }
1183 #[inline(always)]
1184 pub fn invoke(&self) -> solana_program_error::ProgramResult {
1185 self.invoke_signed(&[])
1186 }
1187 #[allow(clippy::clone_on_copy)]
1188 #[allow(clippy::vec_init_then_push)]
1189 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
1190 let args = ModifyTunaSpotPositionOrcaInstructionArgs {
1191 decrease_percent: self.instruction.decrease_percent.clone().expect("decrease_percent is not set"),
1192 collateral_amount: self.instruction.collateral_amount.clone().expect("collateral_amount is not set"),
1193 borrow_amount: self.instruction.borrow_amount.clone().expect("borrow_amount is not set"),
1194 required_swap_amount: self.instruction.required_swap_amount.clone().expect("required_swap_amount is not set"),
1195 remaining_accounts_info: self.instruction.remaining_accounts_info.clone().expect("remaining_accounts_info is not set"),
1196 };
1197 let instruction = ModifyTunaSpotPositionOrcaCpi {
1198 __program: self.instruction.__program,
1199
1200 authority: self.instruction.authority.expect("authority is not set"),
1201
1202 tuna_config: self.instruction.tuna_config.expect("tuna_config is not set"),
1203
1204 mint_a: self.instruction.mint_a.expect("mint_a is not set"),
1205
1206 mint_b: self.instruction.mint_b.expect("mint_b is not set"),
1207
1208 token_program_a: self.instruction.token_program_a.expect("token_program_a is not set"),
1209
1210 token_program_b: self.instruction.token_program_b.expect("token_program_b is not set"),
1211
1212 market: self.instruction.market.expect("market is not set"),
1213
1214 vault_a: self.instruction.vault_a.expect("vault_a is not set"),
1215
1216 vault_b: self.instruction.vault_b.expect("vault_b is not set"),
1217
1218 vault_a_ata: self.instruction.vault_a_ata.expect("vault_a_ata is not set"),
1219
1220 vault_b_ata: self.instruction.vault_b_ata.expect("vault_b_ata is not set"),
1221
1222 tuna_position: self.instruction.tuna_position.expect("tuna_position is not set"),
1223
1224 tuna_position_ata_a: self.instruction.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
1225
1226 tuna_position_ata_b: self.instruction.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
1227
1228 tuna_position_owner_ata_a: self.instruction.tuna_position_owner_ata_a,
1229
1230 tuna_position_owner_ata_b: self.instruction.tuna_position_owner_ata_b,
1231
1232 fee_recipient_ata_a: self.instruction.fee_recipient_ata_a.expect("fee_recipient_ata_a is not set"),
1233
1234 fee_recipient_ata_b: self.instruction.fee_recipient_ata_b.expect("fee_recipient_ata_b is not set"),
1235
1236 pyth_oracle_price_feed_a: self.instruction.pyth_oracle_price_feed_a.expect("pyth_oracle_price_feed_a is not set"),
1237
1238 pyth_oracle_price_feed_b: self.instruction.pyth_oracle_price_feed_b.expect("pyth_oracle_price_feed_b is not set"),
1239
1240 whirlpool_program: self.instruction.whirlpool_program.expect("whirlpool_program is not set"),
1241
1242 whirlpool: self.instruction.whirlpool.expect("whirlpool is not set"),
1243
1244 memo_program: self.instruction.memo_program.expect("memo_program is not set"),
1245
1246 system_program: self.instruction.system_program.expect("system_program is not set"),
1247 __args: args,
1248 };
1249 instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
1250 }
1251}
1252
1253#[derive(Clone, Debug)]
1254struct ModifyTunaSpotPositionOrcaCpiBuilderInstruction<'a, 'b> {
1255 __program: &'b solana_account_info::AccountInfo<'a>,
1256 authority: Option<&'b solana_account_info::AccountInfo<'a>>,
1257 tuna_config: Option<&'b solana_account_info::AccountInfo<'a>>,
1258 mint_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1259 mint_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1260 token_program_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1261 token_program_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1262 market: Option<&'b solana_account_info::AccountInfo<'a>>,
1263 vault_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1264 vault_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1265 vault_a_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
1266 vault_b_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
1267 tuna_position: Option<&'b solana_account_info::AccountInfo<'a>>,
1268 tuna_position_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1269 tuna_position_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1270 tuna_position_owner_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1271 tuna_position_owner_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1272 fee_recipient_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1273 fee_recipient_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1274 pyth_oracle_price_feed_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1275 pyth_oracle_price_feed_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1276 whirlpool_program: Option<&'b solana_account_info::AccountInfo<'a>>,
1277 whirlpool: Option<&'b solana_account_info::AccountInfo<'a>>,
1278 memo_program: Option<&'b solana_account_info::AccountInfo<'a>>,
1279 system_program: Option<&'b solana_account_info::AccountInfo<'a>>,
1280 decrease_percent: Option<u32>,
1281 collateral_amount: Option<u64>,
1282 borrow_amount: Option<u64>,
1283 required_swap_amount: Option<u64>,
1284 remaining_accounts_info: Option<RemainingAccountsInfo>,
1285 __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
1287}
1288