Skip to main content

sendfun_sdk/nexus/generated/instructions/
claim.rs

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
16//! This code was AUTOGENERATED using the codama library.
17//! Please DO NOT EDIT THIS FILE, instead use visitors
18//! to add features, then rerun codama to update it.
19//!
20//! <https://github.com/codama-idl/codama>
21//!
22
23use borsh::BorshDeserialize;
24use borsh::BorshSerialize;
25
26pub const CLAIM_DISCRIMINATOR: [u8; 8] =
27	[62, 198, 214, 193, 213, 159, 108, 210];
28
29/// Accounts.
30#[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/// Instruction builder for `Claim`.
160///
161/// ### Accounts:
162///
163///   0. `[signer]` user
164///   1. `[writable, signer]` payer
165///   2. `[]` staking_mint
166///   3. `[]` reward_mint
167///   4. `[optional]` staking_config (default to PDA derived from 'stakingConfig')
168///   5. `[writable, optional]` user_stake_position (default to PDA derived from 'userStakePosition')
169///   6. `[writable, optional]` reward_state (default to PDA derived from 'rewardState')
170///   7. `[writable]` vault
171///   8. `[optional]` launchpad_reward_accrual (default to PDA derived from 'launchpadRewardAccrual')
172///   9. `[optional]` dex_reward_accrual (default to PDA derived from 'dexRewardAccrual')
173///   10. `[writable, optional]` user_reward_debt (default to PDA derived from 'userRewardDebt')
174///   11. `[writable]` destination
175///   12. `[optional]` token_program (default to `TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA`)
176///   13. `[]` associated_token_program (fixed to 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL')
177///   14. `[]` system_program (fixed to '11111111111111111111111111111111')
178///   15. `[]` event_authority (fixed to 'BxA56yuUugqREwSEFVr117VKJ6JmVdPA7jm7MCXzDNJr')
179///   16. `[]` program (fixed to '7rrCurqdWFesbzwtYPo95fM8waTtVXgXwCom45x1sfNX')
180#[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	/// `[optional account, default to PDA derived from 'stakingConfig']`
225	#[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	/// `[optional account, default to PDA derived from 'userStakePosition']`
234	#[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	/// `[optional account, default to PDA derived from 'rewardState']`
243	#[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	/// `[optional account, default to PDA derived from 'launchpadRewardAccrual']`
252	#[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	/// `[optional account, default to PDA derived from 'dexRewardAccrual']`
261	#[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	/// `[optional account, default to PDA derived from 'userRewardDebt']`
270	#[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	/// `[optional account, default to 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA']`
279	#[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	/// Add an additional account to the instruction.
288	#[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	/// Add additional accounts to the instruction.
297	#[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
408/// `claim` CPI accounts.
409pub 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
431/// `claim` CPI instruction.
432pub struct ClaimCpi<'a, 'b> {
433	/// The program to invoke.
434	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/// Instruction builder for `Claim` via CPI.
632///
633/// ### Accounts:
634///
635///   0. `[signer]` user
636///   1. `[writable, signer]` payer
637///   2. `[]` staking_mint
638///   3. `[]` reward_mint
639///   4. `[]` staking_config
640///   5. `[writable]` user_stake_position
641///   6. `[writable]` reward_state
642///   7. `[writable]` vault
643///   8. `[]` launchpad_reward_accrual
644///   9. `[]` dex_reward_accrual
645///   10. `[writable]` user_reward_debt
646///   11. `[writable]` destination
647///   12. `[]` token_program
648///   13. `[]` associated_token_program
649///   14. `[]` system_program
650///   15. `[]` event_authority
651///   16. `[]` program
652#[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	/// Add an additional account to the instruction.
706	#[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	/// Add additional accounts to the instruction.
721	///
722	/// Each account is represented by a tuple of the `AccountInfo`, a `bool` indicating whether the account is writable or not,
723	/// and a `bool` indicating whether the account is a signer or not.
724	#[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	/// Additional instruction accounts `(AccountInfo, is_writable, is_signer)`.
796	__remaining_accounts: Vec<(
797		&'b solana_program::account_info::AccountInfo<'a>,
798		bool,
799		bool,
800	)>,
801}