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