1use borsh::BorshSerialize;
9use borsh::BorshDeserialize;
10
11pub const COLLECT_REWARD_ORCA_DISCRIMINATOR: [u8; 8] = [99, 253, 84, 63, 250, 243, 165, 191];
12
13#[derive(Debug)]
15pub struct CollectRewardOrca {
16 pub authority: solana_pubkey::Pubkey,
23
24
25 pub tuna_config: solana_pubkey::Pubkey,
26
27
28 pub reward_mint: solana_pubkey::Pubkey,
29
30
31 pub reward_token_program: solana_pubkey::Pubkey,
32
33
34 pub tuna_position: solana_pubkey::Pubkey,
35
36
37 pub tuna_position_ata: solana_pubkey::Pubkey,
38
39
40 pub tuna_position_owner_reward_ata: solana_pubkey::Pubkey,
41 pub whirlpool_program: solana_pubkey::Pubkey,
48
49
50 pub whirlpool: solana_pubkey::Pubkey,
51
52
53 pub orca_position: solana_pubkey::Pubkey,
54
55
56 pub reward_vault: solana_pubkey::Pubkey,
57
58
59 pub tick_array_lower: solana_pubkey::Pubkey,
60
61
62 pub tick_array_upper: solana_pubkey::Pubkey,
63
64
65 pub memo_program: solana_pubkey::Pubkey,
66 }
67
68impl CollectRewardOrca {
69 pub fn instruction(&self, args: CollectRewardOrcaInstructionArgs) -> solana_instruction::Instruction {
70 self.instruction_with_remaining_accounts(args, &[])
71 }
72 #[allow(clippy::arithmetic_side_effects)]
73 #[allow(clippy::vec_init_then_push)]
74 pub fn instruction_with_remaining_accounts(&self, args: CollectRewardOrcaInstructionArgs, remaining_accounts: &[solana_instruction::AccountMeta]) -> solana_instruction::Instruction {
75 let mut accounts = Vec::with_capacity(14+ remaining_accounts.len());
76 accounts.push(solana_instruction::AccountMeta::new(
77 self.authority,
78 true
79 ));
80 accounts.push(solana_instruction::AccountMeta::new_readonly(
81 self.tuna_config,
82 false
83 ));
84 accounts.push(solana_instruction::AccountMeta::new_readonly(
85 self.reward_mint,
86 false
87 ));
88 accounts.push(solana_instruction::AccountMeta::new_readonly(
89 self.reward_token_program,
90 false
91 ));
92 accounts.push(solana_instruction::AccountMeta::new(
93 self.tuna_position,
94 false
95 ));
96 accounts.push(solana_instruction::AccountMeta::new_readonly(
97 self.tuna_position_ata,
98 false
99 ));
100 accounts.push(solana_instruction::AccountMeta::new(
101 self.tuna_position_owner_reward_ata,
102 false
103 ));
104 accounts.push(solana_instruction::AccountMeta::new_readonly(
105 self.whirlpool_program,
106 false
107 ));
108 accounts.push(solana_instruction::AccountMeta::new_readonly(
109 self.whirlpool,
110 false
111 ));
112 accounts.push(solana_instruction::AccountMeta::new(
113 self.orca_position,
114 false
115 ));
116 accounts.push(solana_instruction::AccountMeta::new(
117 self.reward_vault,
118 false
119 ));
120 accounts.push(solana_instruction::AccountMeta::new(
121 self.tick_array_lower,
122 false
123 ));
124 accounts.push(solana_instruction::AccountMeta::new(
125 self.tick_array_upper,
126 false
127 ));
128 accounts.push(solana_instruction::AccountMeta::new_readonly(
129 self.memo_program,
130 false
131 ));
132 accounts.extend_from_slice(remaining_accounts);
133 let mut data = borsh::to_vec(&CollectRewardOrcaInstructionData::new()).unwrap();
134 let mut args = borsh::to_vec(&args).unwrap();
135 data.append(&mut args);
136
137 solana_instruction::Instruction {
138 program_id: crate::TUNA_ID,
139 accounts,
140 data,
141 }
142 }
143}
144
145#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
146#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
147 pub struct CollectRewardOrcaInstructionData {
148 discriminator: [u8; 8],
149 }
150
151impl CollectRewardOrcaInstructionData {
152 pub fn new() -> Self {
153 Self {
154 discriminator: [99, 253, 84, 63, 250, 243, 165, 191],
155 }
156 }
157}
158
159impl Default for CollectRewardOrcaInstructionData {
160 fn default() -> Self {
161 Self::new()
162 }
163}
164
165#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
166#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
167 pub struct CollectRewardOrcaInstructionArgs {
168 pub reward_index: u8,
169 }
170
171
172#[derive(Clone, Debug, Default)]
191pub struct CollectRewardOrcaBuilder {
192 authority: Option<solana_pubkey::Pubkey>,
193 tuna_config: Option<solana_pubkey::Pubkey>,
194 reward_mint: Option<solana_pubkey::Pubkey>,
195 reward_token_program: Option<solana_pubkey::Pubkey>,
196 tuna_position: Option<solana_pubkey::Pubkey>,
197 tuna_position_ata: Option<solana_pubkey::Pubkey>,
198 tuna_position_owner_reward_ata: Option<solana_pubkey::Pubkey>,
199 whirlpool_program: Option<solana_pubkey::Pubkey>,
200 whirlpool: Option<solana_pubkey::Pubkey>,
201 orca_position: Option<solana_pubkey::Pubkey>,
202 reward_vault: Option<solana_pubkey::Pubkey>,
203 tick_array_lower: Option<solana_pubkey::Pubkey>,
204 tick_array_upper: Option<solana_pubkey::Pubkey>,
205 memo_program: Option<solana_pubkey::Pubkey>,
206 reward_index: Option<u8>,
207 __remaining_accounts: Vec<solana_instruction::AccountMeta>,
208}
209
210impl CollectRewardOrcaBuilder {
211 pub fn new() -> Self {
212 Self::default()
213 }
214 #[inline(always)]
218 pub fn authority(&mut self, authority: solana_pubkey::Pubkey) -> &mut Self {
219 self.authority = Some(authority);
220 self
221 }
222 #[inline(always)]
223 pub fn tuna_config(&mut self, tuna_config: solana_pubkey::Pubkey) -> &mut Self {
224 self.tuna_config = Some(tuna_config);
225 self
226 }
227 #[inline(always)]
228 pub fn reward_mint(&mut self, reward_mint: solana_pubkey::Pubkey) -> &mut Self {
229 self.reward_mint = Some(reward_mint);
230 self
231 }
232 #[inline(always)]
233 pub fn reward_token_program(&mut self, reward_token_program: solana_pubkey::Pubkey) -> &mut Self {
234 self.reward_token_program = Some(reward_token_program);
235 self
236 }
237 #[inline(always)]
238 pub fn tuna_position(&mut self, tuna_position: solana_pubkey::Pubkey) -> &mut Self {
239 self.tuna_position = Some(tuna_position);
240 self
241 }
242 #[inline(always)]
243 pub fn tuna_position_ata(&mut self, tuna_position_ata: solana_pubkey::Pubkey) -> &mut Self {
244 self.tuna_position_ata = Some(tuna_position_ata);
245 self
246 }
247 #[inline(always)]
248 pub fn tuna_position_owner_reward_ata(&mut self, tuna_position_owner_reward_ata: solana_pubkey::Pubkey) -> &mut Self {
249 self.tuna_position_owner_reward_ata = Some(tuna_position_owner_reward_ata);
250 self
251 }
252 #[inline(always)]
256 pub fn whirlpool_program(&mut self, whirlpool_program: solana_pubkey::Pubkey) -> &mut Self {
257 self.whirlpool_program = Some(whirlpool_program);
258 self
259 }
260 #[inline(always)]
261 pub fn whirlpool(&mut self, whirlpool: solana_pubkey::Pubkey) -> &mut Self {
262 self.whirlpool = Some(whirlpool);
263 self
264 }
265 #[inline(always)]
266 pub fn orca_position(&mut self, orca_position: solana_pubkey::Pubkey) -> &mut Self {
267 self.orca_position = Some(orca_position);
268 self
269 }
270 #[inline(always)]
271 pub fn reward_vault(&mut self, reward_vault: solana_pubkey::Pubkey) -> &mut Self {
272 self.reward_vault = Some(reward_vault);
273 self
274 }
275 #[inline(always)]
276 pub fn tick_array_lower(&mut self, tick_array_lower: solana_pubkey::Pubkey) -> &mut Self {
277 self.tick_array_lower = Some(tick_array_lower);
278 self
279 }
280 #[inline(always)]
281 pub fn tick_array_upper(&mut self, tick_array_upper: solana_pubkey::Pubkey) -> &mut Self {
282 self.tick_array_upper = Some(tick_array_upper);
283 self
284 }
285 #[inline(always)]
286 pub fn memo_program(&mut self, memo_program: solana_pubkey::Pubkey) -> &mut Self {
287 self.memo_program = Some(memo_program);
288 self
289 }
290 #[inline(always)]
291 pub fn reward_index(&mut self, reward_index: u8) -> &mut Self {
292 self.reward_index = Some(reward_index);
293 self
294 }
295 #[inline(always)]
297 pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
298 self.__remaining_accounts.push(account);
299 self
300 }
301 #[inline(always)]
303 pub fn add_remaining_accounts(&mut self, accounts: &[solana_instruction::AccountMeta]) -> &mut Self {
304 self.__remaining_accounts.extend_from_slice(accounts);
305 self
306 }
307 #[allow(clippy::clone_on_copy)]
308 pub fn instruction(&self) -> solana_instruction::Instruction {
309 let accounts = CollectRewardOrca {
310 authority: self.authority.expect("authority is not set"),
311 tuna_config: self.tuna_config.expect("tuna_config is not set"),
312 reward_mint: self.reward_mint.expect("reward_mint is not set"),
313 reward_token_program: self.reward_token_program.expect("reward_token_program is not set"),
314 tuna_position: self.tuna_position.expect("tuna_position is not set"),
315 tuna_position_ata: self.tuna_position_ata.expect("tuna_position_ata is not set"),
316 tuna_position_owner_reward_ata: self.tuna_position_owner_reward_ata.expect("tuna_position_owner_reward_ata is not set"),
317 whirlpool_program: self.whirlpool_program.expect("whirlpool_program is not set"),
318 whirlpool: self.whirlpool.expect("whirlpool is not set"),
319 orca_position: self.orca_position.expect("orca_position is not set"),
320 reward_vault: self.reward_vault.expect("reward_vault is not set"),
321 tick_array_lower: self.tick_array_lower.expect("tick_array_lower is not set"),
322 tick_array_upper: self.tick_array_upper.expect("tick_array_upper is not set"),
323 memo_program: self.memo_program.expect("memo_program is not set"),
324 };
325 let args = CollectRewardOrcaInstructionArgs {
326 reward_index: self.reward_index.clone().expect("reward_index is not set"),
327 };
328
329 accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
330 }
331}
332
333 pub struct CollectRewardOrcaCpiAccounts<'a, 'b> {
335 pub authority: &'b solana_account_info::AccountInfo<'a>,
342
343
344 pub tuna_config: &'b solana_account_info::AccountInfo<'a>,
345
346
347 pub reward_mint: &'b solana_account_info::AccountInfo<'a>,
348
349
350 pub reward_token_program: &'b solana_account_info::AccountInfo<'a>,
351
352
353 pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
354
355
356 pub tuna_position_ata: &'b solana_account_info::AccountInfo<'a>,
357
358
359 pub tuna_position_owner_reward_ata: &'b solana_account_info::AccountInfo<'a>,
360 pub whirlpool_program: &'b solana_account_info::AccountInfo<'a>,
367
368
369 pub whirlpool: &'b solana_account_info::AccountInfo<'a>,
370
371
372 pub orca_position: &'b solana_account_info::AccountInfo<'a>,
373
374
375 pub reward_vault: &'b solana_account_info::AccountInfo<'a>,
376
377
378 pub tick_array_lower: &'b solana_account_info::AccountInfo<'a>,
379
380
381 pub tick_array_upper: &'b solana_account_info::AccountInfo<'a>,
382
383
384 pub memo_program: &'b solana_account_info::AccountInfo<'a>,
385 }
386
387pub struct CollectRewardOrcaCpi<'a, 'b> {
389 pub __program: &'b solana_account_info::AccountInfo<'a>,
391 pub authority: &'b solana_account_info::AccountInfo<'a>,
398
399
400 pub tuna_config: &'b solana_account_info::AccountInfo<'a>,
401
402
403 pub reward_mint: &'b solana_account_info::AccountInfo<'a>,
404
405
406 pub reward_token_program: &'b solana_account_info::AccountInfo<'a>,
407
408
409 pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
410
411
412 pub tuna_position_ata: &'b solana_account_info::AccountInfo<'a>,
413
414
415 pub tuna_position_owner_reward_ata: &'b solana_account_info::AccountInfo<'a>,
416 pub whirlpool_program: &'b solana_account_info::AccountInfo<'a>,
423
424
425 pub whirlpool: &'b solana_account_info::AccountInfo<'a>,
426
427
428 pub orca_position: &'b solana_account_info::AccountInfo<'a>,
429
430
431 pub reward_vault: &'b solana_account_info::AccountInfo<'a>,
432
433
434 pub tick_array_lower: &'b solana_account_info::AccountInfo<'a>,
435
436
437 pub tick_array_upper: &'b solana_account_info::AccountInfo<'a>,
438
439
440 pub memo_program: &'b solana_account_info::AccountInfo<'a>,
441 pub __args: CollectRewardOrcaInstructionArgs,
443 }
444
445impl<'a, 'b> CollectRewardOrcaCpi<'a, 'b> {
446 pub fn new(
447 program: &'b solana_account_info::AccountInfo<'a>,
448 accounts: CollectRewardOrcaCpiAccounts<'a, 'b>,
449 args: CollectRewardOrcaInstructionArgs,
450 ) -> Self {
451 Self {
452 __program: program,
453 authority: accounts.authority,
454 tuna_config: accounts.tuna_config,
455 reward_mint: accounts.reward_mint,
456 reward_token_program: accounts.reward_token_program,
457 tuna_position: accounts.tuna_position,
458 tuna_position_ata: accounts.tuna_position_ata,
459 tuna_position_owner_reward_ata: accounts.tuna_position_owner_reward_ata,
460 whirlpool_program: accounts.whirlpool_program,
461 whirlpool: accounts.whirlpool,
462 orca_position: accounts.orca_position,
463 reward_vault: accounts.reward_vault,
464 tick_array_lower: accounts.tick_array_lower,
465 tick_array_upper: accounts.tick_array_upper,
466 memo_program: accounts.memo_program,
467 __args: args,
468 }
469 }
470 #[inline(always)]
471 pub fn invoke(&self) -> solana_program_error::ProgramResult {
472 self.invoke_signed_with_remaining_accounts(&[], &[])
473 }
474 #[inline(always)]
475 pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> solana_program_error::ProgramResult {
476 self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
477 }
478 #[inline(always)]
479 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
480 self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
481 }
482 #[allow(clippy::arithmetic_side_effects)]
483 #[allow(clippy::clone_on_copy)]
484 #[allow(clippy::vec_init_then_push)]
485 pub fn invoke_signed_with_remaining_accounts(
486 &self,
487 signers_seeds: &[&[&[u8]]],
488 remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]
489 ) -> solana_program_error::ProgramResult {
490 let mut accounts = Vec::with_capacity(14+ remaining_accounts.len());
491 accounts.push(solana_instruction::AccountMeta::new(
492 *self.authority.key,
493 true
494 ));
495 accounts.push(solana_instruction::AccountMeta::new_readonly(
496 *self.tuna_config.key,
497 false
498 ));
499 accounts.push(solana_instruction::AccountMeta::new_readonly(
500 *self.reward_mint.key,
501 false
502 ));
503 accounts.push(solana_instruction::AccountMeta::new_readonly(
504 *self.reward_token_program.key,
505 false
506 ));
507 accounts.push(solana_instruction::AccountMeta::new(
508 *self.tuna_position.key,
509 false
510 ));
511 accounts.push(solana_instruction::AccountMeta::new_readonly(
512 *self.tuna_position_ata.key,
513 false
514 ));
515 accounts.push(solana_instruction::AccountMeta::new(
516 *self.tuna_position_owner_reward_ata.key,
517 false
518 ));
519 accounts.push(solana_instruction::AccountMeta::new_readonly(
520 *self.whirlpool_program.key,
521 false
522 ));
523 accounts.push(solana_instruction::AccountMeta::new_readonly(
524 *self.whirlpool.key,
525 false
526 ));
527 accounts.push(solana_instruction::AccountMeta::new(
528 *self.orca_position.key,
529 false
530 ));
531 accounts.push(solana_instruction::AccountMeta::new(
532 *self.reward_vault.key,
533 false
534 ));
535 accounts.push(solana_instruction::AccountMeta::new(
536 *self.tick_array_lower.key,
537 false
538 ));
539 accounts.push(solana_instruction::AccountMeta::new(
540 *self.tick_array_upper.key,
541 false
542 ));
543 accounts.push(solana_instruction::AccountMeta::new_readonly(
544 *self.memo_program.key,
545 false
546 ));
547 remaining_accounts.iter().for_each(|remaining_account| {
548 accounts.push(solana_instruction::AccountMeta {
549 pubkey: *remaining_account.0.key,
550 is_signer: remaining_account.1,
551 is_writable: remaining_account.2,
552 })
553 });
554 let mut data = borsh::to_vec(&CollectRewardOrcaInstructionData::new()).unwrap();
555 let mut args = borsh::to_vec(&self.__args).unwrap();
556 data.append(&mut args);
557
558 let instruction = solana_instruction::Instruction {
559 program_id: crate::TUNA_ID,
560 accounts,
561 data,
562 };
563 let mut account_infos = Vec::with_capacity(15 + remaining_accounts.len());
564 account_infos.push(self.__program.clone());
565 account_infos.push(self.authority.clone());
566 account_infos.push(self.tuna_config.clone());
567 account_infos.push(self.reward_mint.clone());
568 account_infos.push(self.reward_token_program.clone());
569 account_infos.push(self.tuna_position.clone());
570 account_infos.push(self.tuna_position_ata.clone());
571 account_infos.push(self.tuna_position_owner_reward_ata.clone());
572 account_infos.push(self.whirlpool_program.clone());
573 account_infos.push(self.whirlpool.clone());
574 account_infos.push(self.orca_position.clone());
575 account_infos.push(self.reward_vault.clone());
576 account_infos.push(self.tick_array_lower.clone());
577 account_infos.push(self.tick_array_upper.clone());
578 account_infos.push(self.memo_program.clone());
579 remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
580
581 if signers_seeds.is_empty() {
582 solana_cpi::invoke(&instruction, &account_infos)
583 } else {
584 solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
585 }
586 }
587}
588
589#[derive(Clone, Debug)]
608pub struct CollectRewardOrcaCpiBuilder<'a, 'b> {
609 instruction: Box<CollectRewardOrcaCpiBuilderInstruction<'a, 'b>>,
610}
611
612impl<'a, 'b> CollectRewardOrcaCpiBuilder<'a, 'b> {
613 pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
614 let instruction = Box::new(CollectRewardOrcaCpiBuilderInstruction {
615 __program: program,
616 authority: None,
617 tuna_config: None,
618 reward_mint: None,
619 reward_token_program: None,
620 tuna_position: None,
621 tuna_position_ata: None,
622 tuna_position_owner_reward_ata: None,
623 whirlpool_program: None,
624 whirlpool: None,
625 orca_position: None,
626 reward_vault: None,
627 tick_array_lower: None,
628 tick_array_upper: None,
629 memo_program: None,
630 reward_index: None,
631 __remaining_accounts: Vec::new(),
632 });
633 Self { instruction }
634 }
635 #[inline(always)]
639 pub fn authority(&mut self, authority: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
640 self.instruction.authority = Some(authority);
641 self
642 }
643 #[inline(always)]
644 pub fn tuna_config(&mut self, tuna_config: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
645 self.instruction.tuna_config = Some(tuna_config);
646 self
647 }
648 #[inline(always)]
649 pub fn reward_mint(&mut self, reward_mint: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
650 self.instruction.reward_mint = Some(reward_mint);
651 self
652 }
653 #[inline(always)]
654 pub fn reward_token_program(&mut self, reward_token_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
655 self.instruction.reward_token_program = Some(reward_token_program);
656 self
657 }
658 #[inline(always)]
659 pub fn tuna_position(&mut self, tuna_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
660 self.instruction.tuna_position = Some(tuna_position);
661 self
662 }
663 #[inline(always)]
664 pub fn tuna_position_ata(&mut self, tuna_position_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
665 self.instruction.tuna_position_ata = Some(tuna_position_ata);
666 self
667 }
668 #[inline(always)]
669 pub fn tuna_position_owner_reward_ata(&mut self, tuna_position_owner_reward_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
670 self.instruction.tuna_position_owner_reward_ata = Some(tuna_position_owner_reward_ata);
671 self
672 }
673 #[inline(always)]
677 pub fn whirlpool_program(&mut self, whirlpool_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
678 self.instruction.whirlpool_program = Some(whirlpool_program);
679 self
680 }
681 #[inline(always)]
682 pub fn whirlpool(&mut self, whirlpool: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
683 self.instruction.whirlpool = Some(whirlpool);
684 self
685 }
686 #[inline(always)]
687 pub fn orca_position(&mut self, orca_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
688 self.instruction.orca_position = Some(orca_position);
689 self
690 }
691 #[inline(always)]
692 pub fn reward_vault(&mut self, reward_vault: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
693 self.instruction.reward_vault = Some(reward_vault);
694 self
695 }
696 #[inline(always)]
697 pub fn tick_array_lower(&mut self, tick_array_lower: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
698 self.instruction.tick_array_lower = Some(tick_array_lower);
699 self
700 }
701 #[inline(always)]
702 pub fn tick_array_upper(&mut self, tick_array_upper: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
703 self.instruction.tick_array_upper = Some(tick_array_upper);
704 self
705 }
706 #[inline(always)]
707 pub fn memo_program(&mut self, memo_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
708 self.instruction.memo_program = Some(memo_program);
709 self
710 }
711 #[inline(always)]
712 pub fn reward_index(&mut self, reward_index: u8) -> &mut Self {
713 self.instruction.reward_index = Some(reward_index);
714 self
715 }
716 #[inline(always)]
718 pub fn add_remaining_account(&mut self, account: &'b solana_account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
719 self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
720 self
721 }
722 #[inline(always)]
727 pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
728 self.instruction.__remaining_accounts.extend_from_slice(accounts);
729 self
730 }
731 #[inline(always)]
732 pub fn invoke(&self) -> solana_program_error::ProgramResult {
733 self.invoke_signed(&[])
734 }
735 #[allow(clippy::clone_on_copy)]
736 #[allow(clippy::vec_init_then_push)]
737 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
738 let args = CollectRewardOrcaInstructionArgs {
739 reward_index: self.instruction.reward_index.clone().expect("reward_index is not set"),
740 };
741 let instruction = CollectRewardOrcaCpi {
742 __program: self.instruction.__program,
743
744 authority: self.instruction.authority.expect("authority is not set"),
745
746 tuna_config: self.instruction.tuna_config.expect("tuna_config is not set"),
747
748 reward_mint: self.instruction.reward_mint.expect("reward_mint is not set"),
749
750 reward_token_program: self.instruction.reward_token_program.expect("reward_token_program is not set"),
751
752 tuna_position: self.instruction.tuna_position.expect("tuna_position is not set"),
753
754 tuna_position_ata: self.instruction.tuna_position_ata.expect("tuna_position_ata is not set"),
755
756 tuna_position_owner_reward_ata: self.instruction.tuna_position_owner_reward_ata.expect("tuna_position_owner_reward_ata is not set"),
757
758 whirlpool_program: self.instruction.whirlpool_program.expect("whirlpool_program is not set"),
759
760 whirlpool: self.instruction.whirlpool.expect("whirlpool is not set"),
761
762 orca_position: self.instruction.orca_position.expect("orca_position is not set"),
763
764 reward_vault: self.instruction.reward_vault.expect("reward_vault is not set"),
765
766 tick_array_lower: self.instruction.tick_array_lower.expect("tick_array_lower is not set"),
767
768 tick_array_upper: self.instruction.tick_array_upper.expect("tick_array_upper is not set"),
769
770 memo_program: self.instruction.memo_program.expect("memo_program is not set"),
771 __args: args,
772 };
773 instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
774 }
775}
776
777#[derive(Clone, Debug)]
778struct CollectRewardOrcaCpiBuilderInstruction<'a, 'b> {
779 __program: &'b solana_account_info::AccountInfo<'a>,
780 authority: Option<&'b solana_account_info::AccountInfo<'a>>,
781 tuna_config: Option<&'b solana_account_info::AccountInfo<'a>>,
782 reward_mint: Option<&'b solana_account_info::AccountInfo<'a>>,
783 reward_token_program: Option<&'b solana_account_info::AccountInfo<'a>>,
784 tuna_position: Option<&'b solana_account_info::AccountInfo<'a>>,
785 tuna_position_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
786 tuna_position_owner_reward_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
787 whirlpool_program: Option<&'b solana_account_info::AccountInfo<'a>>,
788 whirlpool: Option<&'b solana_account_info::AccountInfo<'a>>,
789 orca_position: Option<&'b solana_account_info::AccountInfo<'a>>,
790 reward_vault: Option<&'b solana_account_info::AccountInfo<'a>>,
791 tick_array_lower: Option<&'b solana_account_info::AccountInfo<'a>>,
792 tick_array_upper: Option<&'b solana_account_info::AccountInfo<'a>>,
793 memo_program: Option<&'b solana_account_info::AccountInfo<'a>>,
794 reward_index: Option<u8>,
795 __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
797}
798