1use borsh::BorshSerialize;
9use borsh::BorshDeserialize;
10
11pub const OPEN_TUNA_LP_POSITION_ORCA_DISCRIMINATOR: [u8; 8] = [201, 85, 45, 226, 182, 208, 246, 115];
12
13#[derive(Debug)]
15pub struct OpenTunaLpPositionOrca {
16 pub authority: solana_pubkey::Pubkey,
23
24
25 pub mint_a: solana_pubkey::Pubkey,
26
27
28 pub mint_b: solana_pubkey::Pubkey,
29
30
31 pub market: solana_pubkey::Pubkey,
32
33
34 pub tuna_position: solana_pubkey::Pubkey,
35
36
37 pub tuna_position_mint: solana_pubkey::Pubkey,
38
39
40 pub tuna_position_ata: solana_pubkey::Pubkey,
41
42
43 pub tuna_position_ata_a: solana_pubkey::Pubkey,
44
45
46 pub tuna_position_ata_b: solana_pubkey::Pubkey,
47 pub whirlpool_program: solana_pubkey::Pubkey,
54
55
56 pub whirlpool: solana_pubkey::Pubkey,
57
58
59 pub orca_position: solana_pubkey::Pubkey,
60
61
62 pub metadata_update_auth: solana_pubkey::Pubkey,
63
64
65 pub token_program_a: solana_pubkey::Pubkey,
66
67
68 pub token_program_b: solana_pubkey::Pubkey,
69 pub token2022_program: solana_pubkey::Pubkey,
76
77
78 pub system_program: solana_pubkey::Pubkey,
79
80
81 pub associated_token_program: solana_pubkey::Pubkey,
82 }
83
84impl OpenTunaLpPositionOrca {
85 pub fn instruction(&self, args: OpenTunaLpPositionOrcaInstructionArgs) -> solana_instruction::Instruction {
86 self.instruction_with_remaining_accounts(args, &[])
87 }
88 #[allow(clippy::arithmetic_side_effects)]
89 #[allow(clippy::vec_init_then_push)]
90 pub fn instruction_with_remaining_accounts(&self, args: OpenTunaLpPositionOrcaInstructionArgs, remaining_accounts: &[solana_instruction::AccountMeta]) -> solana_instruction::Instruction {
91 let mut accounts = Vec::with_capacity(18+ remaining_accounts.len());
92 accounts.push(solana_instruction::AccountMeta::new(
93 self.authority,
94 true
95 ));
96 accounts.push(solana_instruction::AccountMeta::new_readonly(
97 self.mint_a,
98 false
99 ));
100 accounts.push(solana_instruction::AccountMeta::new_readonly(
101 self.mint_b,
102 false
103 ));
104 accounts.push(solana_instruction::AccountMeta::new_readonly(
105 self.market,
106 false
107 ));
108 accounts.push(solana_instruction::AccountMeta::new(
109 self.tuna_position,
110 false
111 ));
112 accounts.push(solana_instruction::AccountMeta::new(
113 self.tuna_position_mint,
114 true
115 ));
116 accounts.push(solana_instruction::AccountMeta::new(
117 self.tuna_position_ata,
118 false
119 ));
120 accounts.push(solana_instruction::AccountMeta::new(
121 self.tuna_position_ata_a,
122 false
123 ));
124 accounts.push(solana_instruction::AccountMeta::new(
125 self.tuna_position_ata_b,
126 false
127 ));
128 accounts.push(solana_instruction::AccountMeta::new_readonly(
129 self.whirlpool_program,
130 false
131 ));
132 accounts.push(solana_instruction::AccountMeta::new_readonly(
133 self.whirlpool,
134 false
135 ));
136 accounts.push(solana_instruction::AccountMeta::new(
137 self.orca_position,
138 false
139 ));
140 accounts.push(solana_instruction::AccountMeta::new_readonly(
141 self.metadata_update_auth,
142 false
143 ));
144 accounts.push(solana_instruction::AccountMeta::new_readonly(
145 self.token_program_a,
146 false
147 ));
148 accounts.push(solana_instruction::AccountMeta::new_readonly(
149 self.token_program_b,
150 false
151 ));
152 accounts.push(solana_instruction::AccountMeta::new_readonly(
153 self.token2022_program,
154 false
155 ));
156 accounts.push(solana_instruction::AccountMeta::new_readonly(
157 self.system_program,
158 false
159 ));
160 accounts.push(solana_instruction::AccountMeta::new_readonly(
161 self.associated_token_program,
162 false
163 ));
164 accounts.extend_from_slice(remaining_accounts);
165 let mut data = borsh::to_vec(&OpenTunaLpPositionOrcaInstructionData::new()).unwrap();
166 let mut args = borsh::to_vec(&args).unwrap();
167 data.append(&mut args);
168
169 solana_instruction::Instruction {
170 program_id: crate::TUNA_ID,
171 accounts,
172 data,
173 }
174 }
175}
176
177#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
178#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
179 pub struct OpenTunaLpPositionOrcaInstructionData {
180 discriminator: [u8; 8],
181 }
182
183impl OpenTunaLpPositionOrcaInstructionData {
184 pub fn new() -> Self {
185 Self {
186 discriminator: [201, 85, 45, 226, 182, 208, 246, 115],
187 }
188 }
189}
190
191impl Default for OpenTunaLpPositionOrcaInstructionData {
192 fn default() -> Self {
193 Self::new()
194 }
195}
196
197#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
198#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
199 pub struct OpenTunaLpPositionOrcaInstructionArgs {
200 pub tick_lower_index: i32,
201 pub tick_upper_index: i32,
202 pub lower_limit_order_sqrt_price: u128,
203 pub upper_limit_order_sqrt_price: u128,
204 pub flags: u32,
205 }
206
207
208#[derive(Clone, Debug, Default)]
231pub struct OpenTunaLpPositionOrcaBuilder {
232 authority: Option<solana_pubkey::Pubkey>,
233 mint_a: Option<solana_pubkey::Pubkey>,
234 mint_b: Option<solana_pubkey::Pubkey>,
235 market: Option<solana_pubkey::Pubkey>,
236 tuna_position: Option<solana_pubkey::Pubkey>,
237 tuna_position_mint: Option<solana_pubkey::Pubkey>,
238 tuna_position_ata: Option<solana_pubkey::Pubkey>,
239 tuna_position_ata_a: Option<solana_pubkey::Pubkey>,
240 tuna_position_ata_b: Option<solana_pubkey::Pubkey>,
241 whirlpool_program: Option<solana_pubkey::Pubkey>,
242 whirlpool: Option<solana_pubkey::Pubkey>,
243 orca_position: Option<solana_pubkey::Pubkey>,
244 metadata_update_auth: Option<solana_pubkey::Pubkey>,
245 token_program_a: Option<solana_pubkey::Pubkey>,
246 token_program_b: Option<solana_pubkey::Pubkey>,
247 token2022_program: Option<solana_pubkey::Pubkey>,
248 system_program: Option<solana_pubkey::Pubkey>,
249 associated_token_program: Option<solana_pubkey::Pubkey>,
250 tick_lower_index: Option<i32>,
251 tick_upper_index: Option<i32>,
252 lower_limit_order_sqrt_price: Option<u128>,
253 upper_limit_order_sqrt_price: Option<u128>,
254 flags: Option<u32>,
255 __remaining_accounts: Vec<solana_instruction::AccountMeta>,
256}
257
258impl OpenTunaLpPositionOrcaBuilder {
259 pub fn new() -> Self {
260 Self::default()
261 }
262 #[inline(always)]
266 pub fn authority(&mut self, authority: solana_pubkey::Pubkey) -> &mut Self {
267 self.authority = Some(authority);
268 self
269 }
270 #[inline(always)]
271 pub fn mint_a(&mut self, mint_a: solana_pubkey::Pubkey) -> &mut Self {
272 self.mint_a = Some(mint_a);
273 self
274 }
275 #[inline(always)]
276 pub fn mint_b(&mut self, mint_b: solana_pubkey::Pubkey) -> &mut Self {
277 self.mint_b = Some(mint_b);
278 self
279 }
280 #[inline(always)]
281 pub fn market(&mut self, market: solana_pubkey::Pubkey) -> &mut Self {
282 self.market = Some(market);
283 self
284 }
285 #[inline(always)]
286 pub fn tuna_position(&mut self, tuna_position: solana_pubkey::Pubkey) -> &mut Self {
287 self.tuna_position = Some(tuna_position);
288 self
289 }
290 #[inline(always)]
291 pub fn tuna_position_mint(&mut self, tuna_position_mint: solana_pubkey::Pubkey) -> &mut Self {
292 self.tuna_position_mint = Some(tuna_position_mint);
293 self
294 }
295 #[inline(always)]
296 pub fn tuna_position_ata(&mut self, tuna_position_ata: solana_pubkey::Pubkey) -> &mut Self {
297 self.tuna_position_ata = Some(tuna_position_ata);
298 self
299 }
300 #[inline(always)]
301 pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: solana_pubkey::Pubkey) -> &mut Self {
302 self.tuna_position_ata_a = Some(tuna_position_ata_a);
303 self
304 }
305 #[inline(always)]
306 pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: solana_pubkey::Pubkey) -> &mut Self {
307 self.tuna_position_ata_b = Some(tuna_position_ata_b);
308 self
309 }
310 #[inline(always)]
314 pub fn whirlpool_program(&mut self, whirlpool_program: solana_pubkey::Pubkey) -> &mut Self {
315 self.whirlpool_program = Some(whirlpool_program);
316 self
317 }
318 #[inline(always)]
319 pub fn whirlpool(&mut self, whirlpool: solana_pubkey::Pubkey) -> &mut Self {
320 self.whirlpool = Some(whirlpool);
321 self
322 }
323 #[inline(always)]
324 pub fn orca_position(&mut self, orca_position: solana_pubkey::Pubkey) -> &mut Self {
325 self.orca_position = Some(orca_position);
326 self
327 }
328 #[inline(always)]
329 pub fn metadata_update_auth(&mut self, metadata_update_auth: solana_pubkey::Pubkey) -> &mut Self {
330 self.metadata_update_auth = Some(metadata_update_auth);
331 self
332 }
333 #[inline(always)]
334 pub fn token_program_a(&mut self, token_program_a: solana_pubkey::Pubkey) -> &mut Self {
335 self.token_program_a = Some(token_program_a);
336 self
337 }
338 #[inline(always)]
339 pub fn token_program_b(&mut self, token_program_b: solana_pubkey::Pubkey) -> &mut Self {
340 self.token_program_b = Some(token_program_b);
341 self
342 }
343 #[inline(always)]
347 pub fn token2022_program(&mut self, token2022_program: solana_pubkey::Pubkey) -> &mut Self {
348 self.token2022_program = Some(token2022_program);
349 self
350 }
351 #[inline(always)]
353 pub fn system_program(&mut self, system_program: solana_pubkey::Pubkey) -> &mut Self {
354 self.system_program = Some(system_program);
355 self
356 }
357 #[inline(always)]
358 pub fn associated_token_program(&mut self, associated_token_program: solana_pubkey::Pubkey) -> &mut Self {
359 self.associated_token_program = Some(associated_token_program);
360 self
361 }
362 #[inline(always)]
363 pub fn tick_lower_index(&mut self, tick_lower_index: i32) -> &mut Self {
364 self.tick_lower_index = Some(tick_lower_index);
365 self
366 }
367 #[inline(always)]
368 pub fn tick_upper_index(&mut self, tick_upper_index: i32) -> &mut Self {
369 self.tick_upper_index = Some(tick_upper_index);
370 self
371 }
372 #[inline(always)]
373 pub fn lower_limit_order_sqrt_price(&mut self, lower_limit_order_sqrt_price: u128) -> &mut Self {
374 self.lower_limit_order_sqrt_price = Some(lower_limit_order_sqrt_price);
375 self
376 }
377 #[inline(always)]
378 pub fn upper_limit_order_sqrt_price(&mut self, upper_limit_order_sqrt_price: u128) -> &mut Self {
379 self.upper_limit_order_sqrt_price = Some(upper_limit_order_sqrt_price);
380 self
381 }
382 #[inline(always)]
383 pub fn flags(&mut self, flags: u32) -> &mut Self {
384 self.flags = Some(flags);
385 self
386 }
387 #[inline(always)]
389 pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
390 self.__remaining_accounts.push(account);
391 self
392 }
393 #[inline(always)]
395 pub fn add_remaining_accounts(&mut self, accounts: &[solana_instruction::AccountMeta]) -> &mut Self {
396 self.__remaining_accounts.extend_from_slice(accounts);
397 self
398 }
399 #[allow(clippy::clone_on_copy)]
400 pub fn instruction(&self) -> solana_instruction::Instruction {
401 let accounts = OpenTunaLpPositionOrca {
402 authority: self.authority.expect("authority is not set"),
403 mint_a: self.mint_a.expect("mint_a is not set"),
404 mint_b: self.mint_b.expect("mint_b is not set"),
405 market: self.market.expect("market is not set"),
406 tuna_position: self.tuna_position.expect("tuna_position is not set"),
407 tuna_position_mint: self.tuna_position_mint.expect("tuna_position_mint is not set"),
408 tuna_position_ata: self.tuna_position_ata.expect("tuna_position_ata is not set"),
409 tuna_position_ata_a: self.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
410 tuna_position_ata_b: self.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
411 whirlpool_program: self.whirlpool_program.expect("whirlpool_program is not set"),
412 whirlpool: self.whirlpool.expect("whirlpool is not set"),
413 orca_position: self.orca_position.expect("orca_position is not set"),
414 metadata_update_auth: self.metadata_update_auth.expect("metadata_update_auth is not set"),
415 token_program_a: self.token_program_a.expect("token_program_a is not set"),
416 token_program_b: self.token_program_b.expect("token_program_b is not set"),
417 token2022_program: self.token2022_program.expect("token2022_program is not set"),
418 system_program: self.system_program.unwrap_or(solana_pubkey::pubkey!("11111111111111111111111111111111")),
419 associated_token_program: self.associated_token_program.expect("associated_token_program is not set"),
420 };
421 let args = OpenTunaLpPositionOrcaInstructionArgs {
422 tick_lower_index: self.tick_lower_index.clone().expect("tick_lower_index is not set"),
423 tick_upper_index: self.tick_upper_index.clone().expect("tick_upper_index is not set"),
424 lower_limit_order_sqrt_price: self.lower_limit_order_sqrt_price.clone().expect("lower_limit_order_sqrt_price is not set"),
425 upper_limit_order_sqrt_price: self.upper_limit_order_sqrt_price.clone().expect("upper_limit_order_sqrt_price is not set"),
426 flags: self.flags.clone().expect("flags is not set"),
427 };
428
429 accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
430 }
431}
432
433 pub struct OpenTunaLpPositionOrcaCpiAccounts<'a, 'b> {
435 pub authority: &'b solana_account_info::AccountInfo<'a>,
442
443
444 pub mint_a: &'b solana_account_info::AccountInfo<'a>,
445
446
447 pub mint_b: &'b solana_account_info::AccountInfo<'a>,
448
449
450 pub market: &'b solana_account_info::AccountInfo<'a>,
451
452
453 pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
454
455
456 pub tuna_position_mint: &'b solana_account_info::AccountInfo<'a>,
457
458
459 pub tuna_position_ata: &'b solana_account_info::AccountInfo<'a>,
460
461
462 pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
463
464
465 pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
466 pub whirlpool_program: &'b solana_account_info::AccountInfo<'a>,
473
474
475 pub whirlpool: &'b solana_account_info::AccountInfo<'a>,
476
477
478 pub orca_position: &'b solana_account_info::AccountInfo<'a>,
479
480
481 pub metadata_update_auth: &'b solana_account_info::AccountInfo<'a>,
482
483
484 pub token_program_a: &'b solana_account_info::AccountInfo<'a>,
485
486
487 pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
488 pub token2022_program: &'b solana_account_info::AccountInfo<'a>,
495
496
497 pub system_program: &'b solana_account_info::AccountInfo<'a>,
498
499
500 pub associated_token_program: &'b solana_account_info::AccountInfo<'a>,
501 }
502
503pub struct OpenTunaLpPositionOrcaCpi<'a, 'b> {
505 pub __program: &'b solana_account_info::AccountInfo<'a>,
507 pub authority: &'b solana_account_info::AccountInfo<'a>,
514
515
516 pub mint_a: &'b solana_account_info::AccountInfo<'a>,
517
518
519 pub mint_b: &'b solana_account_info::AccountInfo<'a>,
520
521
522 pub market: &'b solana_account_info::AccountInfo<'a>,
523
524
525 pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
526
527
528 pub tuna_position_mint: &'b solana_account_info::AccountInfo<'a>,
529
530
531 pub tuna_position_ata: &'b solana_account_info::AccountInfo<'a>,
532
533
534 pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
535
536
537 pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
538 pub whirlpool_program: &'b solana_account_info::AccountInfo<'a>,
545
546
547 pub whirlpool: &'b solana_account_info::AccountInfo<'a>,
548
549
550 pub orca_position: &'b solana_account_info::AccountInfo<'a>,
551
552
553 pub metadata_update_auth: &'b solana_account_info::AccountInfo<'a>,
554
555
556 pub token_program_a: &'b solana_account_info::AccountInfo<'a>,
557
558
559 pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
560 pub token2022_program: &'b solana_account_info::AccountInfo<'a>,
567
568
569 pub system_program: &'b solana_account_info::AccountInfo<'a>,
570
571
572 pub associated_token_program: &'b solana_account_info::AccountInfo<'a>,
573 pub __args: OpenTunaLpPositionOrcaInstructionArgs,
575 }
576
577impl<'a, 'b> OpenTunaLpPositionOrcaCpi<'a, 'b> {
578 pub fn new(
579 program: &'b solana_account_info::AccountInfo<'a>,
580 accounts: OpenTunaLpPositionOrcaCpiAccounts<'a, 'b>,
581 args: OpenTunaLpPositionOrcaInstructionArgs,
582 ) -> Self {
583 Self {
584 __program: program,
585 authority: accounts.authority,
586 mint_a: accounts.mint_a,
587 mint_b: accounts.mint_b,
588 market: accounts.market,
589 tuna_position: accounts.tuna_position,
590 tuna_position_mint: accounts.tuna_position_mint,
591 tuna_position_ata: accounts.tuna_position_ata,
592 tuna_position_ata_a: accounts.tuna_position_ata_a,
593 tuna_position_ata_b: accounts.tuna_position_ata_b,
594 whirlpool_program: accounts.whirlpool_program,
595 whirlpool: accounts.whirlpool,
596 orca_position: accounts.orca_position,
597 metadata_update_auth: accounts.metadata_update_auth,
598 token_program_a: accounts.token_program_a,
599 token_program_b: accounts.token_program_b,
600 token2022_program: accounts.token2022_program,
601 system_program: accounts.system_program,
602 associated_token_program: accounts.associated_token_program,
603 __args: args,
604 }
605 }
606 #[inline(always)]
607 pub fn invoke(&self) -> solana_program_error::ProgramResult {
608 self.invoke_signed_with_remaining_accounts(&[], &[])
609 }
610 #[inline(always)]
611 pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> solana_program_error::ProgramResult {
612 self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
613 }
614 #[inline(always)]
615 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
616 self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
617 }
618 #[allow(clippy::arithmetic_side_effects)]
619 #[allow(clippy::clone_on_copy)]
620 #[allow(clippy::vec_init_then_push)]
621 pub fn invoke_signed_with_remaining_accounts(
622 &self,
623 signers_seeds: &[&[&[u8]]],
624 remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]
625 ) -> solana_program_error::ProgramResult {
626 let mut accounts = Vec::with_capacity(18+ remaining_accounts.len());
627 accounts.push(solana_instruction::AccountMeta::new(
628 *self.authority.key,
629 true
630 ));
631 accounts.push(solana_instruction::AccountMeta::new_readonly(
632 *self.mint_a.key,
633 false
634 ));
635 accounts.push(solana_instruction::AccountMeta::new_readonly(
636 *self.mint_b.key,
637 false
638 ));
639 accounts.push(solana_instruction::AccountMeta::new_readonly(
640 *self.market.key,
641 false
642 ));
643 accounts.push(solana_instruction::AccountMeta::new(
644 *self.tuna_position.key,
645 false
646 ));
647 accounts.push(solana_instruction::AccountMeta::new(
648 *self.tuna_position_mint.key,
649 true
650 ));
651 accounts.push(solana_instruction::AccountMeta::new(
652 *self.tuna_position_ata.key,
653 false
654 ));
655 accounts.push(solana_instruction::AccountMeta::new(
656 *self.tuna_position_ata_a.key,
657 false
658 ));
659 accounts.push(solana_instruction::AccountMeta::new(
660 *self.tuna_position_ata_b.key,
661 false
662 ));
663 accounts.push(solana_instruction::AccountMeta::new_readonly(
664 *self.whirlpool_program.key,
665 false
666 ));
667 accounts.push(solana_instruction::AccountMeta::new_readonly(
668 *self.whirlpool.key,
669 false
670 ));
671 accounts.push(solana_instruction::AccountMeta::new(
672 *self.orca_position.key,
673 false
674 ));
675 accounts.push(solana_instruction::AccountMeta::new_readonly(
676 *self.metadata_update_auth.key,
677 false
678 ));
679 accounts.push(solana_instruction::AccountMeta::new_readonly(
680 *self.token_program_a.key,
681 false
682 ));
683 accounts.push(solana_instruction::AccountMeta::new_readonly(
684 *self.token_program_b.key,
685 false
686 ));
687 accounts.push(solana_instruction::AccountMeta::new_readonly(
688 *self.token2022_program.key,
689 false
690 ));
691 accounts.push(solana_instruction::AccountMeta::new_readonly(
692 *self.system_program.key,
693 false
694 ));
695 accounts.push(solana_instruction::AccountMeta::new_readonly(
696 *self.associated_token_program.key,
697 false
698 ));
699 remaining_accounts.iter().for_each(|remaining_account| {
700 accounts.push(solana_instruction::AccountMeta {
701 pubkey: *remaining_account.0.key,
702 is_signer: remaining_account.1,
703 is_writable: remaining_account.2,
704 })
705 });
706 let mut data = borsh::to_vec(&OpenTunaLpPositionOrcaInstructionData::new()).unwrap();
707 let mut args = borsh::to_vec(&self.__args).unwrap();
708 data.append(&mut args);
709
710 let instruction = solana_instruction::Instruction {
711 program_id: crate::TUNA_ID,
712 accounts,
713 data,
714 };
715 let mut account_infos = Vec::with_capacity(19 + remaining_accounts.len());
716 account_infos.push(self.__program.clone());
717 account_infos.push(self.authority.clone());
718 account_infos.push(self.mint_a.clone());
719 account_infos.push(self.mint_b.clone());
720 account_infos.push(self.market.clone());
721 account_infos.push(self.tuna_position.clone());
722 account_infos.push(self.tuna_position_mint.clone());
723 account_infos.push(self.tuna_position_ata.clone());
724 account_infos.push(self.tuna_position_ata_a.clone());
725 account_infos.push(self.tuna_position_ata_b.clone());
726 account_infos.push(self.whirlpool_program.clone());
727 account_infos.push(self.whirlpool.clone());
728 account_infos.push(self.orca_position.clone());
729 account_infos.push(self.metadata_update_auth.clone());
730 account_infos.push(self.token_program_a.clone());
731 account_infos.push(self.token_program_b.clone());
732 account_infos.push(self.token2022_program.clone());
733 account_infos.push(self.system_program.clone());
734 account_infos.push(self.associated_token_program.clone());
735 remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
736
737 if signers_seeds.is_empty() {
738 solana_cpi::invoke(&instruction, &account_infos)
739 } else {
740 solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
741 }
742 }
743}
744
745#[derive(Clone, Debug)]
768pub struct OpenTunaLpPositionOrcaCpiBuilder<'a, 'b> {
769 instruction: Box<OpenTunaLpPositionOrcaCpiBuilderInstruction<'a, 'b>>,
770}
771
772impl<'a, 'b> OpenTunaLpPositionOrcaCpiBuilder<'a, 'b> {
773 pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
774 let instruction = Box::new(OpenTunaLpPositionOrcaCpiBuilderInstruction {
775 __program: program,
776 authority: None,
777 mint_a: None,
778 mint_b: None,
779 market: None,
780 tuna_position: None,
781 tuna_position_mint: None,
782 tuna_position_ata: None,
783 tuna_position_ata_a: None,
784 tuna_position_ata_b: None,
785 whirlpool_program: None,
786 whirlpool: None,
787 orca_position: None,
788 metadata_update_auth: None,
789 token_program_a: None,
790 token_program_b: None,
791 token2022_program: None,
792 system_program: None,
793 associated_token_program: None,
794 tick_lower_index: None,
795 tick_upper_index: None,
796 lower_limit_order_sqrt_price: None,
797 upper_limit_order_sqrt_price: None,
798 flags: None,
799 __remaining_accounts: Vec::new(),
800 });
801 Self { instruction }
802 }
803 #[inline(always)]
807 pub fn authority(&mut self, authority: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
808 self.instruction.authority = Some(authority);
809 self
810 }
811 #[inline(always)]
812 pub fn mint_a(&mut self, mint_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
813 self.instruction.mint_a = Some(mint_a);
814 self
815 }
816 #[inline(always)]
817 pub fn mint_b(&mut self, mint_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
818 self.instruction.mint_b = Some(mint_b);
819 self
820 }
821 #[inline(always)]
822 pub fn market(&mut self, market: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
823 self.instruction.market = Some(market);
824 self
825 }
826 #[inline(always)]
827 pub fn tuna_position(&mut self, tuna_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
828 self.instruction.tuna_position = Some(tuna_position);
829 self
830 }
831 #[inline(always)]
832 pub fn tuna_position_mint(&mut self, tuna_position_mint: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
833 self.instruction.tuna_position_mint = Some(tuna_position_mint);
834 self
835 }
836 #[inline(always)]
837 pub fn tuna_position_ata(&mut self, tuna_position_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
838 self.instruction.tuna_position_ata = Some(tuna_position_ata);
839 self
840 }
841 #[inline(always)]
842 pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
843 self.instruction.tuna_position_ata_a = Some(tuna_position_ata_a);
844 self
845 }
846 #[inline(always)]
847 pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
848 self.instruction.tuna_position_ata_b = Some(tuna_position_ata_b);
849 self
850 }
851 #[inline(always)]
855 pub fn whirlpool_program(&mut self, whirlpool_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
856 self.instruction.whirlpool_program = Some(whirlpool_program);
857 self
858 }
859 #[inline(always)]
860 pub fn whirlpool(&mut self, whirlpool: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
861 self.instruction.whirlpool = Some(whirlpool);
862 self
863 }
864 #[inline(always)]
865 pub fn orca_position(&mut self, orca_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
866 self.instruction.orca_position = Some(orca_position);
867 self
868 }
869 #[inline(always)]
870 pub fn metadata_update_auth(&mut self, metadata_update_auth: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
871 self.instruction.metadata_update_auth = Some(metadata_update_auth);
872 self
873 }
874 #[inline(always)]
875 pub fn token_program_a(&mut self, token_program_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
876 self.instruction.token_program_a = Some(token_program_a);
877 self
878 }
879 #[inline(always)]
880 pub fn token_program_b(&mut self, token_program_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
881 self.instruction.token_program_b = Some(token_program_b);
882 self
883 }
884 #[inline(always)]
888 pub fn token2022_program(&mut self, token2022_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
889 self.instruction.token2022_program = Some(token2022_program);
890 self
891 }
892 #[inline(always)]
893 pub fn system_program(&mut self, system_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
894 self.instruction.system_program = Some(system_program);
895 self
896 }
897 #[inline(always)]
898 pub fn associated_token_program(&mut self, associated_token_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
899 self.instruction.associated_token_program = Some(associated_token_program);
900 self
901 }
902 #[inline(always)]
903 pub fn tick_lower_index(&mut self, tick_lower_index: i32) -> &mut Self {
904 self.instruction.tick_lower_index = Some(tick_lower_index);
905 self
906 }
907 #[inline(always)]
908 pub fn tick_upper_index(&mut self, tick_upper_index: i32) -> &mut Self {
909 self.instruction.tick_upper_index = Some(tick_upper_index);
910 self
911 }
912 #[inline(always)]
913 pub fn lower_limit_order_sqrt_price(&mut self, lower_limit_order_sqrt_price: u128) -> &mut Self {
914 self.instruction.lower_limit_order_sqrt_price = Some(lower_limit_order_sqrt_price);
915 self
916 }
917 #[inline(always)]
918 pub fn upper_limit_order_sqrt_price(&mut self, upper_limit_order_sqrt_price: u128) -> &mut Self {
919 self.instruction.upper_limit_order_sqrt_price = Some(upper_limit_order_sqrt_price);
920 self
921 }
922 #[inline(always)]
923 pub fn flags(&mut self, flags: u32) -> &mut Self {
924 self.instruction.flags = Some(flags);
925 self
926 }
927 #[inline(always)]
929 pub fn add_remaining_account(&mut self, account: &'b solana_account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
930 self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
931 self
932 }
933 #[inline(always)]
938 pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
939 self.instruction.__remaining_accounts.extend_from_slice(accounts);
940 self
941 }
942 #[inline(always)]
943 pub fn invoke(&self) -> solana_program_error::ProgramResult {
944 self.invoke_signed(&[])
945 }
946 #[allow(clippy::clone_on_copy)]
947 #[allow(clippy::vec_init_then_push)]
948 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
949 let args = OpenTunaLpPositionOrcaInstructionArgs {
950 tick_lower_index: self.instruction.tick_lower_index.clone().expect("tick_lower_index is not set"),
951 tick_upper_index: self.instruction.tick_upper_index.clone().expect("tick_upper_index is not set"),
952 lower_limit_order_sqrt_price: self.instruction.lower_limit_order_sqrt_price.clone().expect("lower_limit_order_sqrt_price is not set"),
953 upper_limit_order_sqrt_price: self.instruction.upper_limit_order_sqrt_price.clone().expect("upper_limit_order_sqrt_price is not set"),
954 flags: self.instruction.flags.clone().expect("flags is not set"),
955 };
956 let instruction = OpenTunaLpPositionOrcaCpi {
957 __program: self.instruction.__program,
958
959 authority: self.instruction.authority.expect("authority is not set"),
960
961 mint_a: self.instruction.mint_a.expect("mint_a is not set"),
962
963 mint_b: self.instruction.mint_b.expect("mint_b is not set"),
964
965 market: self.instruction.market.expect("market is not set"),
966
967 tuna_position: self.instruction.tuna_position.expect("tuna_position is not set"),
968
969 tuna_position_mint: self.instruction.tuna_position_mint.expect("tuna_position_mint is not set"),
970
971 tuna_position_ata: self.instruction.tuna_position_ata.expect("tuna_position_ata is not set"),
972
973 tuna_position_ata_a: self.instruction.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
974
975 tuna_position_ata_b: self.instruction.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
976
977 whirlpool_program: self.instruction.whirlpool_program.expect("whirlpool_program is not set"),
978
979 whirlpool: self.instruction.whirlpool.expect("whirlpool is not set"),
980
981 orca_position: self.instruction.orca_position.expect("orca_position is not set"),
982
983 metadata_update_auth: self.instruction.metadata_update_auth.expect("metadata_update_auth is not set"),
984
985 token_program_a: self.instruction.token_program_a.expect("token_program_a is not set"),
986
987 token_program_b: self.instruction.token_program_b.expect("token_program_b is not set"),
988
989 token2022_program: self.instruction.token2022_program.expect("token2022_program is not set"),
990
991 system_program: self.instruction.system_program.expect("system_program is not set"),
992
993 associated_token_program: self.instruction.associated_token_program.expect("associated_token_program is not set"),
994 __args: args,
995 };
996 instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
997 }
998}
999
1000#[derive(Clone, Debug)]
1001struct OpenTunaLpPositionOrcaCpiBuilderInstruction<'a, 'b> {
1002 __program: &'b solana_account_info::AccountInfo<'a>,
1003 authority: Option<&'b solana_account_info::AccountInfo<'a>>,
1004 mint_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1005 mint_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1006 market: Option<&'b solana_account_info::AccountInfo<'a>>,
1007 tuna_position: Option<&'b solana_account_info::AccountInfo<'a>>,
1008 tuna_position_mint: Option<&'b solana_account_info::AccountInfo<'a>>,
1009 tuna_position_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
1010 tuna_position_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1011 tuna_position_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1012 whirlpool_program: Option<&'b solana_account_info::AccountInfo<'a>>,
1013 whirlpool: Option<&'b solana_account_info::AccountInfo<'a>>,
1014 orca_position: Option<&'b solana_account_info::AccountInfo<'a>>,
1015 metadata_update_auth: Option<&'b solana_account_info::AccountInfo<'a>>,
1016 token_program_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1017 token_program_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1018 token2022_program: Option<&'b solana_account_info::AccountInfo<'a>>,
1019 system_program: Option<&'b solana_account_info::AccountInfo<'a>>,
1020 associated_token_program: Option<&'b solana_account_info::AccountInfo<'a>>,
1021 tick_lower_index: Option<i32>,
1022 tick_upper_index: Option<i32>,
1023 lower_limit_order_sqrt_price: Option<u128>,
1024 upper_limit_order_sqrt_price: Option<u128>,
1025 flags: Option<u32>,
1026 __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
1028}
1029