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