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