1#![allow(
2 clippy::all,
3 clippy::pedantic,
4 clippy::nursery,
5 clippy::expect_used,
6 clippy::unwrap_used,
7 clippy::indexing_slicing,
8 clippy::allow_attributes,
9 clippy::allow_attributes_without_reason,
10 clippy::mem_forget,
11 unfulfilled_lint_expectations,
12 unexpected_cfgs,
13 unused_imports
14)]
15
16use borsh::BorshDeserialize;
24use borsh::BorshSerialize;
25
26pub const CLAIM_DISCRIMINATOR: [u8; 8] =
27 [62, 198, 214, 193, 213, 159, 108, 210];
28
29#[derive(Debug)]
31pub struct Claim {
32 pub user: solana_address::Address,
33 pub payer: solana_address::Address,
34 pub staking_mint: solana_address::Address,
35 pub reward_mint: solana_address::Address,
36 pub staking_config: solana_address::Address,
37 pub user_stake_position: solana_address::Address,
38 pub reward_state: solana_address::Address,
39 pub vault: solana_address::Address,
40 pub launchpad_reward_accrual: solana_address::Address,
41 pub dex_reward_accrual: solana_address::Address,
42 pub user_reward_debt: solana_address::Address,
43 pub destination: solana_address::Address,
44 pub token_program: solana_address::Address,
45 pub associated_token_program: solana_address::Address,
46 pub system_program: solana_address::Address,
47 pub event_authority: solana_address::Address,
48 pub program: solana_address::Address,
49}
50
51impl Claim {
52 pub fn instruction(&self) -> solana_instruction::Instruction {
53 self.instruction_with_remaining_accounts(&[])
54 }
55 #[allow(clippy::arithmetic_side_effects)]
56 #[allow(clippy::vec_init_then_push)]
57 pub fn instruction_with_remaining_accounts(
58 &self,
59 remaining_accounts: &[solana_instruction::AccountMeta],
60 ) -> solana_instruction::Instruction {
61 let mut accounts = Vec::with_capacity(17 + remaining_accounts.len());
62 accounts.push(solana_instruction::AccountMeta::new_readonly(
63 self.user, true,
64 ));
65 accounts.push(solana_instruction::AccountMeta::new(self.payer, true));
66 accounts.push(solana_instruction::AccountMeta::new_readonly(
67 self.staking_mint,
68 false,
69 ));
70 accounts.push(solana_instruction::AccountMeta::new_readonly(
71 self.reward_mint,
72 false,
73 ));
74 accounts.push(solana_instruction::AccountMeta::new_readonly(
75 self.staking_config,
76 false,
77 ));
78 accounts.push(solana_instruction::AccountMeta::new(
79 self.user_stake_position,
80 false,
81 ));
82 accounts.push(solana_instruction::AccountMeta::new(
83 self.reward_state,
84 false,
85 ));
86 accounts.push(solana_instruction::AccountMeta::new(self.vault, false));
87 accounts.push(solana_instruction::AccountMeta::new_readonly(
88 self.launchpad_reward_accrual,
89 false,
90 ));
91 accounts.push(solana_instruction::AccountMeta::new_readonly(
92 self.dex_reward_accrual,
93 false,
94 ));
95 accounts.push(solana_instruction::AccountMeta::new(
96 self.user_reward_debt,
97 false,
98 ));
99 accounts.push(solana_instruction::AccountMeta::new(
100 self.destination,
101 false,
102 ));
103 accounts.push(solana_instruction::AccountMeta::new_readonly(
104 self.token_program,
105 false,
106 ));
107 accounts.push(solana_instruction::AccountMeta::new_readonly(
108 self.associated_token_program,
109 false,
110 ));
111 accounts.push(solana_instruction::AccountMeta::new_readonly(
112 self.system_program,
113 false,
114 ));
115 accounts.push(solana_instruction::AccountMeta::new_readonly(
116 self.event_authority,
117 false,
118 ));
119 accounts.push(solana_instruction::AccountMeta::new_readonly(
120 self.program,
121 false,
122 ));
123 accounts.extend_from_slice(remaining_accounts);
124 let data = ClaimInstructionData::new().try_to_vec().unwrap();
125
126 solana_instruction::Instruction {
127 program_id: crate::nexus::generated::SEND_NEXUS_ID,
128 accounts,
129 data,
130 }
131 }
132}
133
134#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
135#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
136#[cfg_attr(feature = "serde", serde(rename_all = "camelCase"))]
137pub struct ClaimInstructionData {
138 discriminator: [u8; 8],
139}
140
141impl ClaimInstructionData {
142 pub fn new() -> Self {
143 Self {
144 discriminator: [62, 198, 214, 193, 213, 159, 108, 210],
145 }
146 }
147
148 pub(crate) fn try_to_vec(&self) -> Result<Vec<u8>, std::io::Error> {
149 borsh::to_vec(self)
150 }
151}
152
153impl Default for ClaimInstructionData {
154 fn default() -> Self {
155 Self::new()
156 }
157}
158
159#[derive(Clone, Debug)]
181pub struct ClaimBuilder {
182 user: solana_address::Address,
183 payer: solana_address::Address,
184 staking_mint: solana_address::Address,
185 reward_mint: solana_address::Address,
186 staking_config: Option<solana_address::Address>,
187 user_stake_position: Option<solana_address::Address>,
188 reward_state: Option<solana_address::Address>,
189 vault: solana_address::Address,
190 launchpad_reward_accrual: Option<solana_address::Address>,
191 dex_reward_accrual: Option<solana_address::Address>,
192 user_reward_debt: Option<solana_address::Address>,
193 destination: solana_address::Address,
194 token_program: Option<solana_address::Address>,
195 __remaining_accounts: Vec<solana_instruction::AccountMeta>,
196}
197
198impl ClaimBuilder {
199 pub fn new(
200 user: solana_address::Address,
201 payer: solana_address::Address,
202 staking_mint: solana_address::Address,
203 reward_mint: solana_address::Address,
204 vault: solana_address::Address,
205 destination: solana_address::Address,
206 ) -> Self {
207 Self {
208 user,
209 payer,
210 staking_mint,
211 reward_mint,
212 staking_config: None,
213 user_stake_position: None,
214 reward_state: None,
215 vault,
216 launchpad_reward_accrual: None,
217 dex_reward_accrual: None,
218 user_reward_debt: None,
219 destination,
220 token_program: None,
221 __remaining_accounts: Vec::new(),
222 }
223 }
224 #[inline(always)]
226 pub fn staking_config(
227 &mut self,
228 staking_config: solana_address::Address,
229 ) -> &mut Self {
230 self.staking_config = Some(staking_config);
231 self
232 }
233 #[inline(always)]
235 pub fn user_stake_position(
236 &mut self,
237 user_stake_position: solana_address::Address,
238 ) -> &mut Self {
239 self.user_stake_position = Some(user_stake_position);
240 self
241 }
242 #[inline(always)]
244 pub fn reward_state(
245 &mut self,
246 reward_state: solana_address::Address,
247 ) -> &mut Self {
248 self.reward_state = Some(reward_state);
249 self
250 }
251 #[inline(always)]
253 pub fn launchpad_reward_accrual(
254 &mut self,
255 launchpad_reward_accrual: solana_address::Address,
256 ) -> &mut Self {
257 self.launchpad_reward_accrual = Some(launchpad_reward_accrual);
258 self
259 }
260 #[inline(always)]
262 pub fn dex_reward_accrual(
263 &mut self,
264 dex_reward_accrual: solana_address::Address,
265 ) -> &mut Self {
266 self.dex_reward_accrual = Some(dex_reward_accrual);
267 self
268 }
269 #[inline(always)]
271 pub fn user_reward_debt(
272 &mut self,
273 user_reward_debt: solana_address::Address,
274 ) -> &mut Self {
275 self.user_reward_debt = Some(user_reward_debt);
276 self
277 }
278 #[inline(always)]
280 pub fn token_program(
281 &mut self,
282 token_program: solana_address::Address,
283 ) -> &mut Self {
284 self.token_program = Some(token_program);
285 self
286 }
287 #[inline(always)]
289 pub fn add_remaining_account(
290 &mut self,
291 account: solana_instruction::AccountMeta,
292 ) -> &mut Self {
293 self.__remaining_accounts.push(account);
294 self
295 }
296 #[inline(always)]
298 pub fn add_remaining_accounts(
299 &mut self,
300 accounts: &[solana_instruction::AccountMeta],
301 ) -> &mut Self {
302 self.__remaining_accounts.extend_from_slice(accounts);
303 self
304 }
305 #[allow(clippy::clone_on_copy)]
306 pub fn instruction(&self) -> solana_instruction::Instruction {
307 let user = self.user;
308 let payer = self.payer;
309 let staking_mint = self.staking_mint;
310 let reward_mint = self.reward_mint;
311 let staking_config = self
312 .staking_config
313 .unwrap_or(crate::nexus::generated::pdas::STAKING_CONFIG_ADDRESS);
314 let user_stake_position =
315 self.user_stake_position.unwrap_or_else(|| {
316 crate::nexus::generated::pdas::find_user_stake_position_pda(
317 &self.user,
318 &self.staking_mint,
319 )
320 .0
321 });
322 let reward_state = self.reward_state.unwrap_or_else(|| {
323 crate::nexus::generated::pdas::find_reward_state_pda(
324 &staking_config,
325 &self.reward_mint,
326 )
327 .0
328 });
329 let vault = self.vault;
330 let launchpad_reward_accrual =
331 self.launchpad_reward_accrual.unwrap_or_else(|| {
332 solana_address::Address::find_program_address(
333 &[
334 &[
335 114, 101, 119, 97, 114, 100, 95, 97, 99, 99, 114,
336 117, 97, 108,
337 ],
338 self.reward_mint.as_ref(),
339 ],
340 &solana_address::address!(
341 "5R1uFyEE4oxqkm7hJDqHq6gXaLVF9dxeF3LF4yz1sfLP"
342 ),
343 )
344 .0
345 });
346 let dex_reward_accrual = self.dex_reward_accrual.unwrap_or_else(|| {
347 solana_address::Address::find_program_address(
348 &[
349 &[
350 114, 101, 119, 97, 114, 100, 95, 97, 99, 99, 114, 117,
351 97, 108,
352 ],
353 self.reward_mint.as_ref(),
354 ],
355 &solana_address::address!(
356 "84qj5FPZZdXkQy8mfowyg6RBZ3XKuTds6XS4ZYT1sfDX"
357 ),
358 )
359 .0
360 });
361 let user_reward_debt = self.user_reward_debt.unwrap_or_else(|| {
362 crate::nexus::generated::pdas::find_user_reward_debt_pda(
363 &self.user,
364 &self.staking_mint,
365 &self.reward_mint,
366 )
367 .0
368 });
369 let destination = self.destination;
370 let token_program =
371 self.token_program.unwrap_or(solana_address::address!(
372 "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
373 ));
374 let associated_token_program = solana_address::address!(
375 "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
376 );
377 let system_program =
378 solana_address::address!("11111111111111111111111111111111");
379 let event_authority =
380 crate::nexus::generated::pdas::EVENT_AUTHORITY_ADDRESS;
381 let program = solana_address::address!(
382 "7rrCurqdWFesbzwtYPo95fM8waTtVXgXwCom45x1sfNX"
383 );
384 let accounts = Claim {
385 user,
386 payer,
387 staking_mint,
388 reward_mint,
389 staking_config,
390 user_stake_position,
391 reward_state,
392 vault,
393 launchpad_reward_accrual,
394 dex_reward_accrual,
395 user_reward_debt,
396 destination,
397 token_program,
398 associated_token_program,
399 system_program,
400 event_authority,
401 program,
402 };
403
404 accounts.instruction_with_remaining_accounts(&self.__remaining_accounts)
405 }
406}
407
408pub struct ClaimCpiAccounts<'a, 'b> {
410 pub user: &'b solana_program::account_info::AccountInfo<'a>,
411 pub payer: &'b solana_program::account_info::AccountInfo<'a>,
412 pub staking_mint: &'b solana_program::account_info::AccountInfo<'a>,
413 pub reward_mint: &'b solana_program::account_info::AccountInfo<'a>,
414 pub staking_config: &'b solana_program::account_info::AccountInfo<'a>,
415 pub user_stake_position: &'b solana_program::account_info::AccountInfo<'a>,
416 pub reward_state: &'b solana_program::account_info::AccountInfo<'a>,
417 pub vault: &'b solana_program::account_info::AccountInfo<'a>,
418 pub launchpad_reward_accrual:
419 &'b solana_program::account_info::AccountInfo<'a>,
420 pub dex_reward_accrual: &'b solana_program::account_info::AccountInfo<'a>,
421 pub user_reward_debt: &'b solana_program::account_info::AccountInfo<'a>,
422 pub destination: &'b solana_program::account_info::AccountInfo<'a>,
423 pub token_program: &'b solana_program::account_info::AccountInfo<'a>,
424 pub associated_token_program:
425 &'b solana_program::account_info::AccountInfo<'a>,
426 pub system_program: &'b solana_program::account_info::AccountInfo<'a>,
427 pub event_authority: &'b solana_program::account_info::AccountInfo<'a>,
428 pub program: &'b solana_program::account_info::AccountInfo<'a>,
429}
430
431pub struct ClaimCpi<'a, 'b> {
433 pub __program: &'b solana_program::account_info::AccountInfo<'a>,
435 pub user: &'b solana_program::account_info::AccountInfo<'a>,
436 pub payer: &'b solana_program::account_info::AccountInfo<'a>,
437 pub staking_mint: &'b solana_program::account_info::AccountInfo<'a>,
438 pub reward_mint: &'b solana_program::account_info::AccountInfo<'a>,
439 pub staking_config: &'b solana_program::account_info::AccountInfo<'a>,
440 pub user_stake_position: &'b solana_program::account_info::AccountInfo<'a>,
441 pub reward_state: &'b solana_program::account_info::AccountInfo<'a>,
442 pub vault: &'b solana_program::account_info::AccountInfo<'a>,
443 pub launchpad_reward_accrual:
444 &'b solana_program::account_info::AccountInfo<'a>,
445 pub dex_reward_accrual: &'b solana_program::account_info::AccountInfo<'a>,
446 pub user_reward_debt: &'b solana_program::account_info::AccountInfo<'a>,
447 pub destination: &'b solana_program::account_info::AccountInfo<'a>,
448 pub token_program: &'b solana_program::account_info::AccountInfo<'a>,
449 pub associated_token_program:
450 &'b solana_program::account_info::AccountInfo<'a>,
451 pub system_program: &'b solana_program::account_info::AccountInfo<'a>,
452 pub event_authority: &'b solana_program::account_info::AccountInfo<'a>,
453 pub program: &'b solana_program::account_info::AccountInfo<'a>,
454}
455
456impl<'a, 'b> ClaimCpi<'a, 'b> {
457 pub fn new(
458 program: &'b solana_program::account_info::AccountInfo<'a>,
459 accounts: ClaimCpiAccounts<'a, 'b>,
460 ) -> Self {
461 Self {
462 __program: program,
463 user: accounts.user,
464 payer: accounts.payer,
465 staking_mint: accounts.staking_mint,
466 reward_mint: accounts.reward_mint,
467 staking_config: accounts.staking_config,
468 user_stake_position: accounts.user_stake_position,
469 reward_state: accounts.reward_state,
470 vault: accounts.vault,
471 launchpad_reward_accrual: accounts.launchpad_reward_accrual,
472 dex_reward_accrual: accounts.dex_reward_accrual,
473 user_reward_debt: accounts.user_reward_debt,
474 destination: accounts.destination,
475 token_program: accounts.token_program,
476 associated_token_program: accounts.associated_token_program,
477 system_program: accounts.system_program,
478 event_authority: accounts.event_authority,
479 program: accounts.program,
480 }
481 }
482 #[inline(always)]
483 pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
484 self.invoke_signed_with_remaining_accounts(&[], &[])
485 }
486 #[inline(always)]
487 pub fn invoke_with_remaining_accounts(
488 &self,
489 remaining_accounts: &[(
490 &'b solana_program::account_info::AccountInfo<'a>,
491 bool,
492 bool,
493 )],
494 ) -> solana_program::entrypoint::ProgramResult {
495 self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
496 }
497 #[inline(always)]
498 pub fn invoke_signed(
499 &self,
500 signers_seeds: &[&[&[u8]]],
501 ) -> solana_program::entrypoint::ProgramResult {
502 self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
503 }
504 #[allow(clippy::arithmetic_side_effects)]
505 #[allow(clippy::clone_on_copy)]
506 #[allow(clippy::vec_init_then_push)]
507 pub fn invoke_signed_with_remaining_accounts(
508 &self,
509 signers_seeds: &[&[&[u8]]],
510 remaining_accounts: &[(
511 &'b solana_program::account_info::AccountInfo<'a>,
512 bool,
513 bool,
514 )],
515 ) -> solana_program::entrypoint::ProgramResult {
516 let mut accounts = Vec::with_capacity(17 + remaining_accounts.len());
517 accounts.push(solana_instruction::AccountMeta::new_readonly(
518 *self.user.key,
519 true,
520 ));
521 accounts
522 .push(solana_instruction::AccountMeta::new(*self.payer.key, true));
523 accounts.push(solana_instruction::AccountMeta::new_readonly(
524 *self.staking_mint.key,
525 false,
526 ));
527 accounts.push(solana_instruction::AccountMeta::new_readonly(
528 *self.reward_mint.key,
529 false,
530 ));
531 accounts.push(solana_instruction::AccountMeta::new_readonly(
532 *self.staking_config.key,
533 false,
534 ));
535 accounts.push(solana_instruction::AccountMeta::new(
536 *self.user_stake_position.key,
537 false,
538 ));
539 accounts.push(solana_instruction::AccountMeta::new(
540 *self.reward_state.key,
541 false,
542 ));
543 accounts
544 .push(solana_instruction::AccountMeta::new(*self.vault.key, false));
545 accounts.push(solana_instruction::AccountMeta::new_readonly(
546 *self.launchpad_reward_accrual.key,
547 false,
548 ));
549 accounts.push(solana_instruction::AccountMeta::new_readonly(
550 *self.dex_reward_accrual.key,
551 false,
552 ));
553 accounts.push(solana_instruction::AccountMeta::new(
554 *self.user_reward_debt.key,
555 false,
556 ));
557 accounts.push(solana_instruction::AccountMeta::new(
558 *self.destination.key,
559 false,
560 ));
561 accounts.push(solana_instruction::AccountMeta::new_readonly(
562 *self.token_program.key,
563 false,
564 ));
565 accounts.push(solana_instruction::AccountMeta::new_readonly(
566 *self.associated_token_program.key,
567 false,
568 ));
569 accounts.push(solana_instruction::AccountMeta::new_readonly(
570 *self.system_program.key,
571 false,
572 ));
573 accounts.push(solana_instruction::AccountMeta::new_readonly(
574 *self.event_authority.key,
575 false,
576 ));
577 accounts.push(solana_instruction::AccountMeta::new_readonly(
578 *self.program.key,
579 false,
580 ));
581 remaining_accounts.iter().for_each(|remaining_account| {
582 accounts.push(solana_instruction::AccountMeta {
583 pubkey: *remaining_account.0.key,
584 is_writable: remaining_account.1,
585 is_signer: remaining_account.2,
586 })
587 });
588 let data = ClaimInstructionData::new().try_to_vec().unwrap();
589
590 let instruction = solana_instruction::Instruction {
591 program_id: crate::nexus::generated::SEND_NEXUS_ID,
592 accounts,
593 data,
594 };
595 let mut account_infos =
596 Vec::with_capacity(18 + remaining_accounts.len());
597 account_infos.push(self.__program.clone());
598 account_infos.push(self.user.clone());
599 account_infos.push(self.payer.clone());
600 account_infos.push(self.staking_mint.clone());
601 account_infos.push(self.reward_mint.clone());
602 account_infos.push(self.staking_config.clone());
603 account_infos.push(self.user_stake_position.clone());
604 account_infos.push(self.reward_state.clone());
605 account_infos.push(self.vault.clone());
606 account_infos.push(self.launchpad_reward_accrual.clone());
607 account_infos.push(self.dex_reward_accrual.clone());
608 account_infos.push(self.user_reward_debt.clone());
609 account_infos.push(self.destination.clone());
610 account_infos.push(self.token_program.clone());
611 account_infos.push(self.associated_token_program.clone());
612 account_infos.push(self.system_program.clone());
613 account_infos.push(self.event_authority.clone());
614 account_infos.push(self.program.clone());
615 remaining_accounts.iter().for_each(|remaining_account| {
616 account_infos.push(remaining_account.0.clone())
617 });
618
619 if signers_seeds.is_empty() {
620 solana_program::program::invoke(&instruction, &account_infos)
621 } else {
622 solana_program::program::invoke_signed(
623 &instruction,
624 &account_infos,
625 signers_seeds,
626 )
627 }
628 }
629}
630
631#[derive(Clone, Debug)]
653pub struct ClaimCpiBuilder<'a, 'b> {
654 instruction: Box<ClaimCpiBuilderInstruction<'a, 'b>>,
655}
656
657impl<'a, 'b> ClaimCpiBuilder<'a, 'b> {
658 pub fn new(
659 __program: &'b solana_program::account_info::AccountInfo<'a>,
660 user: &'b solana_program::account_info::AccountInfo<'a>,
661 payer: &'b solana_program::account_info::AccountInfo<'a>,
662 staking_mint: &'b solana_program::account_info::AccountInfo<'a>,
663 reward_mint: &'b solana_program::account_info::AccountInfo<'a>,
664 staking_config: &'b solana_program::account_info::AccountInfo<'a>,
665 user_stake_position: &'b solana_program::account_info::AccountInfo<'a>,
666 reward_state: &'b solana_program::account_info::AccountInfo<'a>,
667 vault: &'b solana_program::account_info::AccountInfo<'a>,
668 launchpad_reward_accrual: &'b solana_program::account_info::AccountInfo<
669 'a,
670 >,
671 dex_reward_accrual: &'b solana_program::account_info::AccountInfo<'a>,
672 user_reward_debt: &'b solana_program::account_info::AccountInfo<'a>,
673 destination: &'b solana_program::account_info::AccountInfo<'a>,
674 token_program: &'b solana_program::account_info::AccountInfo<'a>,
675 associated_token_program: &'b solana_program::account_info::AccountInfo<
676 'a,
677 >,
678 system_program: &'b solana_program::account_info::AccountInfo<'a>,
679 event_authority: &'b solana_program::account_info::AccountInfo<'a>,
680 program: &'b solana_program::account_info::AccountInfo<'a>,
681 ) -> Self {
682 let instruction = Box::new(ClaimCpiBuilderInstruction {
683 __program,
684 user,
685 payer,
686 staking_mint,
687 reward_mint,
688 staking_config,
689 user_stake_position,
690 reward_state,
691 vault,
692 launchpad_reward_accrual,
693 dex_reward_accrual,
694 user_reward_debt,
695 destination,
696 token_program,
697 associated_token_program,
698 system_program,
699 event_authority,
700 program,
701 __remaining_accounts: Vec::new(),
702 });
703 Self { instruction }
704 }
705 #[inline(always)]
707 pub fn add_remaining_account(
708 &mut self,
709 account: &'b solana_program::account_info::AccountInfo<'a>,
710 is_writable: bool,
711 is_signer: bool,
712 ) -> &mut Self {
713 self.instruction.__remaining_accounts.push((
714 account,
715 is_writable,
716 is_signer,
717 ));
718 self
719 }
720 #[inline(always)]
725 pub fn add_remaining_accounts(
726 &mut self,
727 accounts: &[(
728 &'b solana_program::account_info::AccountInfo<'a>,
729 bool,
730 bool,
731 )],
732 ) -> &mut Self {
733 self.instruction
734 .__remaining_accounts
735 .extend_from_slice(accounts);
736 self
737 }
738 #[inline(always)]
739 pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
740 self.invoke_signed(&[])
741 }
742 #[allow(clippy::clone_on_copy)]
743 #[allow(clippy::vec_init_then_push)]
744 pub fn invoke_signed(
745 &self,
746 signers_seeds: &[&[&[u8]]],
747 ) -> solana_program::entrypoint::ProgramResult {
748 let instruction = ClaimCpi {
749 __program: self.instruction.__program,
750 user: self.instruction.user,
751 payer: self.instruction.payer,
752 staking_mint: self.instruction.staking_mint,
753 reward_mint: self.instruction.reward_mint,
754 staking_config: self.instruction.staking_config,
755 user_stake_position: self.instruction.user_stake_position,
756 reward_state: self.instruction.reward_state,
757 vault: self.instruction.vault,
758 launchpad_reward_accrual: self.instruction.launchpad_reward_accrual,
759 dex_reward_accrual: self.instruction.dex_reward_accrual,
760 user_reward_debt: self.instruction.user_reward_debt,
761 destination: self.instruction.destination,
762 token_program: self.instruction.token_program,
763 associated_token_program: self.instruction.associated_token_program,
764 system_program: self.instruction.system_program,
765 event_authority: self.instruction.event_authority,
766 program: self.instruction.program,
767 };
768 instruction.invoke_signed_with_remaining_accounts(
769 signers_seeds,
770 &self.instruction.__remaining_accounts,
771 )
772 }
773}
774
775#[derive(Clone, Debug)]
776struct ClaimCpiBuilderInstruction<'a, 'b> {
777 __program: &'b solana_program::account_info::AccountInfo<'a>,
778 user: &'b solana_program::account_info::AccountInfo<'a>,
779 payer: &'b solana_program::account_info::AccountInfo<'a>,
780 staking_mint: &'b solana_program::account_info::AccountInfo<'a>,
781 reward_mint: &'b solana_program::account_info::AccountInfo<'a>,
782 staking_config: &'b solana_program::account_info::AccountInfo<'a>,
783 user_stake_position: &'b solana_program::account_info::AccountInfo<'a>,
784 reward_state: &'b solana_program::account_info::AccountInfo<'a>,
785 vault: &'b solana_program::account_info::AccountInfo<'a>,
786 launchpad_reward_accrual: &'b solana_program::account_info::AccountInfo<'a>,
787 dex_reward_accrual: &'b solana_program::account_info::AccountInfo<'a>,
788 user_reward_debt: &'b solana_program::account_info::AccountInfo<'a>,
789 destination: &'b solana_program::account_info::AccountInfo<'a>,
790 token_program: &'b solana_program::account_info::AccountInfo<'a>,
791 associated_token_program: &'b solana_program::account_info::AccountInfo<'a>,
792 system_program: &'b solana_program::account_info::AccountInfo<'a>,
793 event_authority: &'b solana_program::account_info::AccountInfo<'a>,
794 program: &'b solana_program::account_info::AccountInfo<'a>,
795 __remaining_accounts: Vec<(
797 &'b solana_program::account_info::AccountInfo<'a>,
798 bool,
799 bool,
800 )>,
801}