1use borsh::BorshSerialize;
9use borsh::BorshDeserialize;
10
11#[derive(Debug)]
13pub struct ClosePositionOrca {
14 pub authority: solana_program::pubkey::Pubkey,
21
22
23 pub mint_a: solana_program::pubkey::Pubkey,
24
25
26 pub mint_b: solana_program::pubkey::Pubkey,
27
28
29 pub tuna_position: solana_program::pubkey::Pubkey,
30
31
32 pub tuna_position_mint: solana_program::pubkey::Pubkey,
33
34
35 pub tuna_position_ata: solana_program::pubkey::Pubkey,
36
37
38 pub tuna_position_ata_a: solana_program::pubkey::Pubkey,
39
40
41 pub tuna_position_ata_b: solana_program::pubkey::Pubkey,
42 pub whirlpool_program: solana_program::pubkey::Pubkey,
49
50
51 pub orca_position: solana_program::pubkey::Pubkey,
52
53
54 pub token_program_a: solana_program::pubkey::Pubkey,
55
56
57 pub token_program_b: solana_program::pubkey::Pubkey,
58 pub token2022_program: solana_program::pubkey::Pubkey,
65 }
66
67impl ClosePositionOrca {
68 pub fn instruction(&self) -> solana_program::instruction::Instruction {
69 self.instruction_with_remaining_accounts(&[])
70 }
71 #[allow(clippy::arithmetic_side_effects)]
72 #[allow(clippy::vec_init_then_push)]
73 pub fn instruction_with_remaining_accounts(&self, remaining_accounts: &[solana_program::instruction::AccountMeta]) -> solana_program::instruction::Instruction {
74 let mut accounts = Vec::with_capacity(13+ remaining_accounts.len());
75 accounts.push(solana_program::instruction::AccountMeta::new(
76 self.authority,
77 true
78 ));
79 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
80 self.mint_a,
81 false
82 ));
83 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
84 self.mint_b,
85 false
86 ));
87 accounts.push(solana_program::instruction::AccountMeta::new(
88 self.tuna_position,
89 false
90 ));
91 accounts.push(solana_program::instruction::AccountMeta::new(
92 self.tuna_position_mint,
93 false
94 ));
95 accounts.push(solana_program::instruction::AccountMeta::new(
96 self.tuna_position_ata,
97 false
98 ));
99 accounts.push(solana_program::instruction::AccountMeta::new(
100 self.tuna_position_ata_a,
101 false
102 ));
103 accounts.push(solana_program::instruction::AccountMeta::new(
104 self.tuna_position_ata_b,
105 false
106 ));
107 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
108 self.whirlpool_program,
109 false
110 ));
111 accounts.push(solana_program::instruction::AccountMeta::new(
112 self.orca_position,
113 false
114 ));
115 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
116 self.token_program_a,
117 false
118 ));
119 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
120 self.token_program_b,
121 false
122 ));
123 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
124 self.token2022_program,
125 false
126 ));
127 accounts.extend_from_slice(remaining_accounts);
128 let data = borsh::to_vec(&ClosePositionOrcaInstructionData::new()).unwrap();
129
130 solana_program::instruction::Instruction {
131 program_id: crate::TUNA_ID,
132 accounts,
133 data,
134 }
135 }
136}
137
138#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
139#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
140 pub struct ClosePositionOrcaInstructionData {
141 discriminator: [u8; 8],
142 }
143
144impl ClosePositionOrcaInstructionData {
145 pub fn new() -> Self {
146 Self {
147 discriminator: [253, 98, 90, 239, 191, 36, 161, 26],
148 }
149 }
150}
151
152impl Default for ClosePositionOrcaInstructionData {
153 fn default() -> Self {
154 Self::new()
155 }
156}
157
158
159
160#[derive(Clone, Debug, Default)]
178pub struct ClosePositionOrcaBuilder {
179 authority: Option<solana_program::pubkey::Pubkey>,
180 mint_a: Option<solana_program::pubkey::Pubkey>,
181 mint_b: Option<solana_program::pubkey::Pubkey>,
182 tuna_position: Option<solana_program::pubkey::Pubkey>,
183 tuna_position_mint: Option<solana_program::pubkey::Pubkey>,
184 tuna_position_ata: Option<solana_program::pubkey::Pubkey>,
185 tuna_position_ata_a: Option<solana_program::pubkey::Pubkey>,
186 tuna_position_ata_b: Option<solana_program::pubkey::Pubkey>,
187 whirlpool_program: Option<solana_program::pubkey::Pubkey>,
188 orca_position: Option<solana_program::pubkey::Pubkey>,
189 token_program_a: Option<solana_program::pubkey::Pubkey>,
190 token_program_b: Option<solana_program::pubkey::Pubkey>,
191 token2022_program: Option<solana_program::pubkey::Pubkey>,
192 __remaining_accounts: Vec<solana_program::instruction::AccountMeta>,
193}
194
195impl ClosePositionOrcaBuilder {
196 pub fn new() -> Self {
197 Self::default()
198 }
199 #[inline(always)]
203 pub fn authority(&mut self, authority: solana_program::pubkey::Pubkey) -> &mut Self {
204 self.authority = Some(authority);
205 self
206 }
207 #[inline(always)]
208 pub fn mint_a(&mut self, mint_a: solana_program::pubkey::Pubkey) -> &mut Self {
209 self.mint_a = Some(mint_a);
210 self
211 }
212 #[inline(always)]
213 pub fn mint_b(&mut self, mint_b: solana_program::pubkey::Pubkey) -> &mut Self {
214 self.mint_b = Some(mint_b);
215 self
216 }
217 #[inline(always)]
218 pub fn tuna_position(&mut self, tuna_position: solana_program::pubkey::Pubkey) -> &mut Self {
219 self.tuna_position = Some(tuna_position);
220 self
221 }
222 #[inline(always)]
223 pub fn tuna_position_mint(&mut self, tuna_position_mint: solana_program::pubkey::Pubkey) -> &mut Self {
224 self.tuna_position_mint = Some(tuna_position_mint);
225 self
226 }
227 #[inline(always)]
228 pub fn tuna_position_ata(&mut self, tuna_position_ata: solana_program::pubkey::Pubkey) -> &mut Self {
229 self.tuna_position_ata = Some(tuna_position_ata);
230 self
231 }
232 #[inline(always)]
233 pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: solana_program::pubkey::Pubkey) -> &mut Self {
234 self.tuna_position_ata_a = Some(tuna_position_ata_a);
235 self
236 }
237 #[inline(always)]
238 pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: solana_program::pubkey::Pubkey) -> &mut Self {
239 self.tuna_position_ata_b = Some(tuna_position_ata_b);
240 self
241 }
242 #[inline(always)]
246 pub fn whirlpool_program(&mut self, whirlpool_program: solana_program::pubkey::Pubkey) -> &mut Self {
247 self.whirlpool_program = Some(whirlpool_program);
248 self
249 }
250 #[inline(always)]
251 pub fn orca_position(&mut self, orca_position: solana_program::pubkey::Pubkey) -> &mut Self {
252 self.orca_position = Some(orca_position);
253 self
254 }
255 #[inline(always)]
256 pub fn token_program_a(&mut self, token_program_a: solana_program::pubkey::Pubkey) -> &mut Self {
257 self.token_program_a = Some(token_program_a);
258 self
259 }
260 #[inline(always)]
261 pub fn token_program_b(&mut self, token_program_b: solana_program::pubkey::Pubkey) -> &mut Self {
262 self.token_program_b = Some(token_program_b);
263 self
264 }
265 #[inline(always)]
269 pub fn token2022_program(&mut self, token2022_program: solana_program::pubkey::Pubkey) -> &mut Self {
270 self.token2022_program = Some(token2022_program);
271 self
272 }
273 #[inline(always)]
275 pub fn add_remaining_account(&mut self, account: solana_program::instruction::AccountMeta) -> &mut Self {
276 self.__remaining_accounts.push(account);
277 self
278 }
279 #[inline(always)]
281 pub fn add_remaining_accounts(&mut self, accounts: &[solana_program::instruction::AccountMeta]) -> &mut Self {
282 self.__remaining_accounts.extend_from_slice(accounts);
283 self
284 }
285 #[allow(clippy::clone_on_copy)]
286 pub fn instruction(&self) -> solana_program::instruction::Instruction {
287 let accounts = ClosePositionOrca {
288 authority: self.authority.expect("authority is not set"),
289 mint_a: self.mint_a.expect("mint_a is not set"),
290 mint_b: self.mint_b.expect("mint_b is not set"),
291 tuna_position: self.tuna_position.expect("tuna_position is not set"),
292 tuna_position_mint: self.tuna_position_mint.expect("tuna_position_mint is not set"),
293 tuna_position_ata: self.tuna_position_ata.expect("tuna_position_ata is not set"),
294 tuna_position_ata_a: self.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
295 tuna_position_ata_b: self.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
296 whirlpool_program: self.whirlpool_program.expect("whirlpool_program is not set"),
297 orca_position: self.orca_position.expect("orca_position is not set"),
298 token_program_a: self.token_program_a.expect("token_program_a is not set"),
299 token_program_b: self.token_program_b.expect("token_program_b is not set"),
300 token2022_program: self.token2022_program.expect("token2022_program is not set"),
301 };
302
303 accounts.instruction_with_remaining_accounts(&self.__remaining_accounts)
304 }
305}
306
307 pub struct ClosePositionOrcaCpiAccounts<'a, 'b> {
309 pub authority: &'b solana_program::account_info::AccountInfo<'a>,
316
317
318 pub mint_a: &'b solana_program::account_info::AccountInfo<'a>,
319
320
321 pub mint_b: &'b solana_program::account_info::AccountInfo<'a>,
322
323
324 pub tuna_position: &'b solana_program::account_info::AccountInfo<'a>,
325
326
327 pub tuna_position_mint: &'b solana_program::account_info::AccountInfo<'a>,
328
329
330 pub tuna_position_ata: &'b solana_program::account_info::AccountInfo<'a>,
331
332
333 pub tuna_position_ata_a: &'b solana_program::account_info::AccountInfo<'a>,
334
335
336 pub tuna_position_ata_b: &'b solana_program::account_info::AccountInfo<'a>,
337 pub whirlpool_program: &'b solana_program::account_info::AccountInfo<'a>,
344
345
346 pub orca_position: &'b solana_program::account_info::AccountInfo<'a>,
347
348
349 pub token_program_a: &'b solana_program::account_info::AccountInfo<'a>,
350
351
352 pub token_program_b: &'b solana_program::account_info::AccountInfo<'a>,
353 pub token2022_program: &'b solana_program::account_info::AccountInfo<'a>,
360 }
361
362pub struct ClosePositionOrcaCpi<'a, 'b> {
364 pub __program: &'b solana_program::account_info::AccountInfo<'a>,
366 pub authority: &'b solana_program::account_info::AccountInfo<'a>,
373
374
375 pub mint_a: &'b solana_program::account_info::AccountInfo<'a>,
376
377
378 pub mint_b: &'b solana_program::account_info::AccountInfo<'a>,
379
380
381 pub tuna_position: &'b solana_program::account_info::AccountInfo<'a>,
382
383
384 pub tuna_position_mint: &'b solana_program::account_info::AccountInfo<'a>,
385
386
387 pub tuna_position_ata: &'b solana_program::account_info::AccountInfo<'a>,
388
389
390 pub tuna_position_ata_a: &'b solana_program::account_info::AccountInfo<'a>,
391
392
393 pub tuna_position_ata_b: &'b solana_program::account_info::AccountInfo<'a>,
394 pub whirlpool_program: &'b solana_program::account_info::AccountInfo<'a>,
401
402
403 pub orca_position: &'b solana_program::account_info::AccountInfo<'a>,
404
405
406 pub token_program_a: &'b solana_program::account_info::AccountInfo<'a>,
407
408
409 pub token_program_b: &'b solana_program::account_info::AccountInfo<'a>,
410 pub token2022_program: &'b solana_program::account_info::AccountInfo<'a>,
417 }
418
419impl<'a, 'b> ClosePositionOrcaCpi<'a, 'b> {
420 pub fn new(
421 program: &'b solana_program::account_info::AccountInfo<'a>,
422 accounts: ClosePositionOrcaCpiAccounts<'a, 'b>,
423 ) -> Self {
424 Self {
425 __program: program,
426 authority: accounts.authority,
427 mint_a: accounts.mint_a,
428 mint_b: accounts.mint_b,
429 tuna_position: accounts.tuna_position,
430 tuna_position_mint: accounts.tuna_position_mint,
431 tuna_position_ata: accounts.tuna_position_ata,
432 tuna_position_ata_a: accounts.tuna_position_ata_a,
433 tuna_position_ata_b: accounts.tuna_position_ata_b,
434 whirlpool_program: accounts.whirlpool_program,
435 orca_position: accounts.orca_position,
436 token_program_a: accounts.token_program_a,
437 token_program_b: accounts.token_program_b,
438 token2022_program: accounts.token2022_program,
439 }
440 }
441 #[inline(always)]
442 pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
443 self.invoke_signed_with_remaining_accounts(&[], &[])
444 }
445 #[inline(always)]
446 pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_program::account_info::AccountInfo<'a>, bool, bool)]) -> solana_program::entrypoint::ProgramResult {
447 self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
448 }
449 #[inline(always)]
450 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program::entrypoint::ProgramResult {
451 self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
452 }
453 #[allow(clippy::arithmetic_side_effects)]
454 #[allow(clippy::clone_on_copy)]
455 #[allow(clippy::vec_init_then_push)]
456 pub fn invoke_signed_with_remaining_accounts(
457 &self,
458 signers_seeds: &[&[&[u8]]],
459 remaining_accounts: &[(&'b solana_program::account_info::AccountInfo<'a>, bool, bool)]
460 ) -> solana_program::entrypoint::ProgramResult {
461 let mut accounts = Vec::with_capacity(13+ remaining_accounts.len());
462 accounts.push(solana_program::instruction::AccountMeta::new(
463 *self.authority.key,
464 true
465 ));
466 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
467 *self.mint_a.key,
468 false
469 ));
470 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
471 *self.mint_b.key,
472 false
473 ));
474 accounts.push(solana_program::instruction::AccountMeta::new(
475 *self.tuna_position.key,
476 false
477 ));
478 accounts.push(solana_program::instruction::AccountMeta::new(
479 *self.tuna_position_mint.key,
480 false
481 ));
482 accounts.push(solana_program::instruction::AccountMeta::new(
483 *self.tuna_position_ata.key,
484 false
485 ));
486 accounts.push(solana_program::instruction::AccountMeta::new(
487 *self.tuna_position_ata_a.key,
488 false
489 ));
490 accounts.push(solana_program::instruction::AccountMeta::new(
491 *self.tuna_position_ata_b.key,
492 false
493 ));
494 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
495 *self.whirlpool_program.key,
496 false
497 ));
498 accounts.push(solana_program::instruction::AccountMeta::new(
499 *self.orca_position.key,
500 false
501 ));
502 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
503 *self.token_program_a.key,
504 false
505 ));
506 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
507 *self.token_program_b.key,
508 false
509 ));
510 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
511 *self.token2022_program.key,
512 false
513 ));
514 remaining_accounts.iter().for_each(|remaining_account| {
515 accounts.push(solana_program::instruction::AccountMeta {
516 pubkey: *remaining_account.0.key,
517 is_signer: remaining_account.1,
518 is_writable: remaining_account.2,
519 })
520 });
521 let data = borsh::to_vec(&ClosePositionOrcaInstructionData::new()).unwrap();
522
523 let instruction = solana_program::instruction::Instruction {
524 program_id: crate::TUNA_ID,
525 accounts,
526 data,
527 };
528 let mut account_infos = Vec::with_capacity(14 + remaining_accounts.len());
529 account_infos.push(self.__program.clone());
530 account_infos.push(self.authority.clone());
531 account_infos.push(self.mint_a.clone());
532 account_infos.push(self.mint_b.clone());
533 account_infos.push(self.tuna_position.clone());
534 account_infos.push(self.tuna_position_mint.clone());
535 account_infos.push(self.tuna_position_ata.clone());
536 account_infos.push(self.tuna_position_ata_a.clone());
537 account_infos.push(self.tuna_position_ata_b.clone());
538 account_infos.push(self.whirlpool_program.clone());
539 account_infos.push(self.orca_position.clone());
540 account_infos.push(self.token_program_a.clone());
541 account_infos.push(self.token_program_b.clone());
542 account_infos.push(self.token2022_program.clone());
543 remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
544
545 if signers_seeds.is_empty() {
546 solana_program::program::invoke(&instruction, &account_infos)
547 } else {
548 solana_program::program::invoke_signed(&instruction, &account_infos, signers_seeds)
549 }
550 }
551}
552
553#[derive(Clone, Debug)]
571pub struct ClosePositionOrcaCpiBuilder<'a, 'b> {
572 instruction: Box<ClosePositionOrcaCpiBuilderInstruction<'a, 'b>>,
573}
574
575impl<'a, 'b> ClosePositionOrcaCpiBuilder<'a, 'b> {
576 pub fn new(program: &'b solana_program::account_info::AccountInfo<'a>) -> Self {
577 let instruction = Box::new(ClosePositionOrcaCpiBuilderInstruction {
578 __program: program,
579 authority: None,
580 mint_a: None,
581 mint_b: None,
582 tuna_position: None,
583 tuna_position_mint: None,
584 tuna_position_ata: None,
585 tuna_position_ata_a: None,
586 tuna_position_ata_b: None,
587 whirlpool_program: None,
588 orca_position: None,
589 token_program_a: None,
590 token_program_b: None,
591 token2022_program: None,
592 __remaining_accounts: Vec::new(),
593 });
594 Self { instruction }
595 }
596 #[inline(always)]
600 pub fn authority(&mut self, authority: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
601 self.instruction.authority = Some(authority);
602 self
603 }
604 #[inline(always)]
605 pub fn mint_a(&mut self, mint_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
606 self.instruction.mint_a = Some(mint_a);
607 self
608 }
609 #[inline(always)]
610 pub fn mint_b(&mut self, mint_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
611 self.instruction.mint_b = Some(mint_b);
612 self
613 }
614 #[inline(always)]
615 pub fn tuna_position(&mut self, tuna_position: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
616 self.instruction.tuna_position = Some(tuna_position);
617 self
618 }
619 #[inline(always)]
620 pub fn tuna_position_mint(&mut self, tuna_position_mint: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
621 self.instruction.tuna_position_mint = Some(tuna_position_mint);
622 self
623 }
624 #[inline(always)]
625 pub fn tuna_position_ata(&mut self, tuna_position_ata: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
626 self.instruction.tuna_position_ata = Some(tuna_position_ata);
627 self
628 }
629 #[inline(always)]
630 pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
631 self.instruction.tuna_position_ata_a = Some(tuna_position_ata_a);
632 self
633 }
634 #[inline(always)]
635 pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
636 self.instruction.tuna_position_ata_b = Some(tuna_position_ata_b);
637 self
638 }
639 #[inline(always)]
643 pub fn whirlpool_program(&mut self, whirlpool_program: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
644 self.instruction.whirlpool_program = Some(whirlpool_program);
645 self
646 }
647 #[inline(always)]
648 pub fn orca_position(&mut self, orca_position: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
649 self.instruction.orca_position = Some(orca_position);
650 self
651 }
652 #[inline(always)]
653 pub fn token_program_a(&mut self, token_program_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
654 self.instruction.token_program_a = Some(token_program_a);
655 self
656 }
657 #[inline(always)]
658 pub fn token_program_b(&mut self, token_program_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
659 self.instruction.token_program_b = Some(token_program_b);
660 self
661 }
662 #[inline(always)]
666 pub fn token2022_program(&mut self, token2022_program: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
667 self.instruction.token2022_program = Some(token2022_program);
668 self
669 }
670 #[inline(always)]
672 pub fn add_remaining_account(&mut self, account: &'b solana_program::account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
673 self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
674 self
675 }
676 #[inline(always)]
681 pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_program::account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
682 self.instruction.__remaining_accounts.extend_from_slice(accounts);
683 self
684 }
685 #[inline(always)]
686 pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
687 self.invoke_signed(&[])
688 }
689 #[allow(clippy::clone_on_copy)]
690 #[allow(clippy::vec_init_then_push)]
691 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program::entrypoint::ProgramResult {
692 let instruction = ClosePositionOrcaCpi {
693 __program: self.instruction.__program,
694
695 authority: self.instruction.authority.expect("authority is not set"),
696
697 mint_a: self.instruction.mint_a.expect("mint_a is not set"),
698
699 mint_b: self.instruction.mint_b.expect("mint_b is not set"),
700
701 tuna_position: self.instruction.tuna_position.expect("tuna_position is not set"),
702
703 tuna_position_mint: self.instruction.tuna_position_mint.expect("tuna_position_mint is not set"),
704
705 tuna_position_ata: self.instruction.tuna_position_ata.expect("tuna_position_ata is not set"),
706
707 tuna_position_ata_a: self.instruction.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
708
709 tuna_position_ata_b: self.instruction.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
710
711 whirlpool_program: self.instruction.whirlpool_program.expect("whirlpool_program is not set"),
712
713 orca_position: self.instruction.orca_position.expect("orca_position is not set"),
714
715 token_program_a: self.instruction.token_program_a.expect("token_program_a is not set"),
716
717 token_program_b: self.instruction.token_program_b.expect("token_program_b is not set"),
718
719 token2022_program: self.instruction.token2022_program.expect("token2022_program is not set"),
720 };
721 instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
722 }
723}
724
725#[derive(Clone, Debug)]
726struct ClosePositionOrcaCpiBuilderInstruction<'a, 'b> {
727 __program: &'b solana_program::account_info::AccountInfo<'a>,
728 authority: Option<&'b solana_program::account_info::AccountInfo<'a>>,
729 mint_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
730 mint_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
731 tuna_position: Option<&'b solana_program::account_info::AccountInfo<'a>>,
732 tuna_position_mint: Option<&'b solana_program::account_info::AccountInfo<'a>>,
733 tuna_position_ata: Option<&'b solana_program::account_info::AccountInfo<'a>>,
734 tuna_position_ata_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
735 tuna_position_ata_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
736 whirlpool_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
737 orca_position: Option<&'b solana_program::account_info::AccountInfo<'a>>,
738 token_program_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
739 token_program_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
740 token2022_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
741 __remaining_accounts: Vec<(&'b solana_program::account_info::AccountInfo<'a>, bool, bool)>,
743}
744