1use borsh::BorshSerialize;
9use borsh::BorshDeserialize;
10
11pub const MINT_STRATEGY2_DISCRIMINATOR: [u8; 8] = [229, 64, 45, 97, 137, 184, 211, 200];
12
13#[derive(Debug)]
15pub struct MintStrategy2 {
16
17
18 pub user: solana_pubkey::Pubkey,
19
20
21 pub admin_permissions: Option<solana_pubkey::Pubkey>,
22
23
24 pub main: solana_pubkey::Pubkey,
25
26
27 pub strategy_controller: solana_pubkey::Pubkey,
28
29
30 pub receipt_mint: solana_pubkey::Pubkey,
31
32
33 pub user_receipt_ata: solana_pubkey::Pubkey,
34
35
36 pub user_earn_ata: solana_pubkey::Pubkey,
37
38
39 pub strategy_controller_earn_token_account: solana_pubkey::Pubkey,
40
41
42 pub token_program: solana_pubkey::Pubkey,
43
44
45 pub associated_token_program: solana_pubkey::Pubkey,
46
47
48 pub instruction_sysvar_account: solana_pubkey::Pubkey,
49
50
51 pub system_program: solana_pubkey::Pubkey,
52 }
53
54impl MintStrategy2 {
55 pub fn instruction(&self, args: MintStrategy2InstructionArgs) -> solana_instruction::Instruction {
56 self.instruction_with_remaining_accounts(args, &[])
57 }
58 #[allow(clippy::arithmetic_side_effects)]
59 #[allow(clippy::vec_init_then_push)]
60 pub fn instruction_with_remaining_accounts(&self, args: MintStrategy2InstructionArgs, remaining_accounts: &[solana_instruction::AccountMeta]) -> solana_instruction::Instruction {
61 let mut accounts = Vec::with_capacity(12+ remaining_accounts.len());
62 accounts.push(solana_instruction::AccountMeta::new(
63 self.user,
64 true
65 ));
66 if let Some(admin_permissions) = self.admin_permissions {
67 accounts.push(solana_instruction::AccountMeta::new_readonly(
68 admin_permissions,
69 false,
70 ));
71 } else {
72 accounts.push(solana_instruction::AccountMeta::new_readonly(
73 crate::REFLECT_MAIN_ID,
74 false,
75 ));
76 }
77 accounts.push(solana_instruction::AccountMeta::new(
78 self.main,
79 false
80 ));
81 accounts.push(solana_instruction::AccountMeta::new(
82 self.strategy_controller,
83 false
84 ));
85 accounts.push(solana_instruction::AccountMeta::new(
86 self.receipt_mint,
87 false
88 ));
89 accounts.push(solana_instruction::AccountMeta::new(
90 self.user_receipt_ata,
91 false
92 ));
93 accounts.push(solana_instruction::AccountMeta::new(
94 self.user_earn_ata,
95 false
96 ));
97 accounts.push(solana_instruction::AccountMeta::new(
98 self.strategy_controller_earn_token_account,
99 false
100 ));
101 accounts.push(solana_instruction::AccountMeta::new_readonly(
102 self.token_program,
103 false
104 ));
105 accounts.push(solana_instruction::AccountMeta::new_readonly(
106 self.associated_token_program,
107 false
108 ));
109 accounts.push(solana_instruction::AccountMeta::new_readonly(
110 self.instruction_sysvar_account,
111 false
112 ));
113 accounts.push(solana_instruction::AccountMeta::new_readonly(
114 self.system_program,
115 false
116 ));
117 accounts.extend_from_slice(remaining_accounts);
118 let mut data = MintStrategy2InstructionData::new().try_to_vec().unwrap();
119 let mut args = args.try_to_vec().unwrap();
120 data.append(&mut args);
121
122 solana_instruction::Instruction {
123 program_id: crate::REFLECT_MAIN_ID,
124 accounts,
125 data,
126 }
127 }
128}
129
130#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
131#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
132 pub struct MintStrategy2InstructionData {
133 discriminator: [u8; 8],
134 }
135
136impl MintStrategy2InstructionData {
137 pub fn new() -> Self {
138 Self {
139 discriminator: [229, 64, 45, 97, 137, 184, 211, 200],
140 }
141 }
142
143 pub(crate) fn try_to_vec(&self) -> Result<Vec<u8>, std::io::Error> {
144 borsh::to_vec(self)
145 }
146 }
147
148impl Default for MintStrategy2InstructionData {
149 fn default() -> Self {
150 Self::new()
151 }
152}
153
154#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
155#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
156 pub struct MintStrategy2InstructionArgs {
157 pub usdt_deposit_amount: u64,
158 pub min_receipt_receive: u64,
159 }
160
161impl MintStrategy2InstructionArgs {
162 pub(crate) fn try_to_vec(&self) -> Result<Vec<u8>, std::io::Error> {
163 borsh::to_vec(self)
164 }
165}
166
167
168#[derive(Clone, Debug, Default)]
185pub struct MintStrategy2Builder {
186 user: Option<solana_pubkey::Pubkey>,
187 admin_permissions: Option<solana_pubkey::Pubkey>,
188 main: Option<solana_pubkey::Pubkey>,
189 strategy_controller: Option<solana_pubkey::Pubkey>,
190 receipt_mint: Option<solana_pubkey::Pubkey>,
191 user_receipt_ata: Option<solana_pubkey::Pubkey>,
192 user_earn_ata: Option<solana_pubkey::Pubkey>,
193 strategy_controller_earn_token_account: Option<solana_pubkey::Pubkey>,
194 token_program: Option<solana_pubkey::Pubkey>,
195 associated_token_program: Option<solana_pubkey::Pubkey>,
196 instruction_sysvar_account: Option<solana_pubkey::Pubkey>,
197 system_program: Option<solana_pubkey::Pubkey>,
198 usdt_deposit_amount: Option<u64>,
199 min_receipt_receive: Option<u64>,
200 __remaining_accounts: Vec<solana_instruction::AccountMeta>,
201}
202
203impl MintStrategy2Builder {
204 pub fn new() -> Self {
205 Self::default()
206 }
207 #[inline(always)]
208 pub fn user(&mut self, user: solana_pubkey::Pubkey) -> &mut Self {
209 self.user = Some(user);
210 self
211 }
212 #[inline(always)]
214 pub fn admin_permissions(&mut self, admin_permissions: Option<solana_pubkey::Pubkey>) -> &mut Self {
215 self.admin_permissions = admin_permissions;
216 self
217 }
218 #[inline(always)]
219 pub fn main(&mut self, main: solana_pubkey::Pubkey) -> &mut Self {
220 self.main = Some(main);
221 self
222 }
223 #[inline(always)]
224 pub fn strategy_controller(&mut self, strategy_controller: solana_pubkey::Pubkey) -> &mut Self {
225 self.strategy_controller = Some(strategy_controller);
226 self
227 }
228 #[inline(always)]
229 pub fn receipt_mint(&mut self, receipt_mint: solana_pubkey::Pubkey) -> &mut Self {
230 self.receipt_mint = Some(receipt_mint);
231 self
232 }
233 #[inline(always)]
234 pub fn user_receipt_ata(&mut self, user_receipt_ata: solana_pubkey::Pubkey) -> &mut Self {
235 self.user_receipt_ata = Some(user_receipt_ata);
236 self
237 }
238 #[inline(always)]
239 pub fn user_earn_ata(&mut self, user_earn_ata: solana_pubkey::Pubkey) -> &mut Self {
240 self.user_earn_ata = Some(user_earn_ata);
241 self
242 }
243 #[inline(always)]
244 pub fn strategy_controller_earn_token_account(&mut self, strategy_controller_earn_token_account: solana_pubkey::Pubkey) -> &mut Self {
245 self.strategy_controller_earn_token_account = Some(strategy_controller_earn_token_account);
246 self
247 }
248 #[inline(always)]
250 pub fn token_program(&mut self, token_program: solana_pubkey::Pubkey) -> &mut Self {
251 self.token_program = Some(token_program);
252 self
253 }
254 #[inline(always)]
255 pub fn associated_token_program(&mut self, associated_token_program: solana_pubkey::Pubkey) -> &mut Self {
256 self.associated_token_program = Some(associated_token_program);
257 self
258 }
259 #[inline(always)]
261 pub fn instruction_sysvar_account(&mut self, instruction_sysvar_account: solana_pubkey::Pubkey) -> &mut Self {
262 self.instruction_sysvar_account = Some(instruction_sysvar_account);
263 self
264 }
265 #[inline(always)]
267 pub fn system_program(&mut self, system_program: solana_pubkey::Pubkey) -> &mut Self {
268 self.system_program = Some(system_program);
269 self
270 }
271 #[inline(always)]
272 pub fn usdt_deposit_amount(&mut self, usdt_deposit_amount: u64) -> &mut Self {
273 self.usdt_deposit_amount = Some(usdt_deposit_amount);
274 self
275 }
276 #[inline(always)]
277 pub fn min_receipt_receive(&mut self, min_receipt_receive: u64) -> &mut Self {
278 self.min_receipt_receive = Some(min_receipt_receive);
279 self
280 }
281 #[inline(always)]
283 pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
284 self.__remaining_accounts.push(account);
285 self
286 }
287 #[inline(always)]
289 pub fn add_remaining_accounts(&mut self, accounts: &[solana_instruction::AccountMeta]) -> &mut Self {
290 self.__remaining_accounts.extend_from_slice(accounts);
291 self
292 }
293 #[allow(clippy::clone_on_copy)]
294 pub fn instruction(&self) -> solana_instruction::Instruction {
295 let accounts = MintStrategy2 {
296 user: self.user.expect("user is not set"),
297 admin_permissions: self.admin_permissions,
298 main: self.main.expect("main is not set"),
299 strategy_controller: self.strategy_controller.expect("strategy_controller is not set"),
300 receipt_mint: self.receipt_mint.expect("receipt_mint is not set"),
301 user_receipt_ata: self.user_receipt_ata.expect("user_receipt_ata is not set"),
302 user_earn_ata: self.user_earn_ata.expect("user_earn_ata is not set"),
303 strategy_controller_earn_token_account: self.strategy_controller_earn_token_account.expect("strategy_controller_earn_token_account is not set"),
304 token_program: self.token_program.unwrap_or(solana_pubkey::pubkey!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA")),
305 associated_token_program: self.associated_token_program.expect("associated_token_program is not set"),
306 instruction_sysvar_account: self.instruction_sysvar_account.unwrap_or(solana_pubkey::pubkey!("Sysvar1nstructions1111111111111111111111111")),
307 system_program: self.system_program.unwrap_or(solana_pubkey::pubkey!("11111111111111111111111111111111")),
308 };
309 let args = MintStrategy2InstructionArgs {
310 usdt_deposit_amount: self.usdt_deposit_amount.clone().expect("usdt_deposit_amount is not set"),
311 min_receipt_receive: self.min_receipt_receive.clone().expect("min_receipt_receive is not set"),
312 };
313
314 accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
315 }
316}
317
318 pub struct MintStrategy2CpiAccounts<'a, 'b> {
320
321
322 pub user: &'b solana_account_info::AccountInfo<'a>,
323
324
325 pub admin_permissions: Option<&'b solana_account_info::AccountInfo<'a>>,
326
327
328 pub main: &'b solana_account_info::AccountInfo<'a>,
329
330
331 pub strategy_controller: &'b solana_account_info::AccountInfo<'a>,
332
333
334 pub receipt_mint: &'b solana_account_info::AccountInfo<'a>,
335
336
337 pub user_receipt_ata: &'b solana_account_info::AccountInfo<'a>,
338
339
340 pub user_earn_ata: &'b solana_account_info::AccountInfo<'a>,
341
342
343 pub strategy_controller_earn_token_account: &'b solana_account_info::AccountInfo<'a>,
344
345
346 pub token_program: &'b solana_account_info::AccountInfo<'a>,
347
348
349 pub associated_token_program: &'b solana_account_info::AccountInfo<'a>,
350
351
352 pub instruction_sysvar_account: &'b solana_account_info::AccountInfo<'a>,
353
354
355 pub system_program: &'b solana_account_info::AccountInfo<'a>,
356 }
357
358pub struct MintStrategy2Cpi<'a, 'b> {
360 pub __program: &'b solana_account_info::AccountInfo<'a>,
362
363
364 pub user: &'b solana_account_info::AccountInfo<'a>,
365
366
367 pub admin_permissions: Option<&'b solana_account_info::AccountInfo<'a>>,
368
369
370 pub main: &'b solana_account_info::AccountInfo<'a>,
371
372
373 pub strategy_controller: &'b solana_account_info::AccountInfo<'a>,
374
375
376 pub receipt_mint: &'b solana_account_info::AccountInfo<'a>,
377
378
379 pub user_receipt_ata: &'b solana_account_info::AccountInfo<'a>,
380
381
382 pub user_earn_ata: &'b solana_account_info::AccountInfo<'a>,
383
384
385 pub strategy_controller_earn_token_account: &'b solana_account_info::AccountInfo<'a>,
386
387
388 pub token_program: &'b solana_account_info::AccountInfo<'a>,
389
390
391 pub associated_token_program: &'b solana_account_info::AccountInfo<'a>,
392
393
394 pub instruction_sysvar_account: &'b solana_account_info::AccountInfo<'a>,
395
396
397 pub system_program: &'b solana_account_info::AccountInfo<'a>,
398 pub __args: MintStrategy2InstructionArgs,
400 }
401
402impl<'a, 'b> MintStrategy2Cpi<'a, 'b> {
403 pub fn new(
404 program: &'b solana_account_info::AccountInfo<'a>,
405 accounts: MintStrategy2CpiAccounts<'a, 'b>,
406 args: MintStrategy2InstructionArgs,
407 ) -> Self {
408 Self {
409 __program: program,
410 user: accounts.user,
411 admin_permissions: accounts.admin_permissions,
412 main: accounts.main,
413 strategy_controller: accounts.strategy_controller,
414 receipt_mint: accounts.receipt_mint,
415 user_receipt_ata: accounts.user_receipt_ata,
416 user_earn_ata: accounts.user_earn_ata,
417 strategy_controller_earn_token_account: accounts.strategy_controller_earn_token_account,
418 token_program: accounts.token_program,
419 associated_token_program: accounts.associated_token_program,
420 instruction_sysvar_account: accounts.instruction_sysvar_account,
421 system_program: accounts.system_program,
422 __args: args,
423 }
424 }
425 #[inline(always)]
426 pub fn invoke(&self) -> solana_program_error::ProgramResult {
427 self.invoke_signed_with_remaining_accounts(&[], &[])
428 }
429 #[inline(always)]
430 pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> solana_program_error::ProgramResult {
431 self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
432 }
433 #[inline(always)]
434 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
435 self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
436 }
437 #[allow(clippy::arithmetic_side_effects)]
438 #[allow(clippy::clone_on_copy)]
439 #[allow(clippy::vec_init_then_push)]
440 pub fn invoke_signed_with_remaining_accounts(
441 &self,
442 signers_seeds: &[&[&[u8]]],
443 remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]
444 ) -> solana_program_error::ProgramResult {
445 let mut accounts = Vec::with_capacity(12+ remaining_accounts.len());
446 accounts.push(solana_instruction::AccountMeta::new(
447 *self.user.key,
448 true
449 ));
450 if let Some(admin_permissions) = self.admin_permissions {
451 accounts.push(solana_instruction::AccountMeta::new_readonly(
452 *admin_permissions.key,
453 false,
454 ));
455 } else {
456 accounts.push(solana_instruction::AccountMeta::new_readonly(
457 crate::REFLECT_MAIN_ID,
458 false,
459 ));
460 }
461 accounts.push(solana_instruction::AccountMeta::new(
462 *self.main.key,
463 false
464 ));
465 accounts.push(solana_instruction::AccountMeta::new(
466 *self.strategy_controller.key,
467 false
468 ));
469 accounts.push(solana_instruction::AccountMeta::new(
470 *self.receipt_mint.key,
471 false
472 ));
473 accounts.push(solana_instruction::AccountMeta::new(
474 *self.user_receipt_ata.key,
475 false
476 ));
477 accounts.push(solana_instruction::AccountMeta::new(
478 *self.user_earn_ata.key,
479 false
480 ));
481 accounts.push(solana_instruction::AccountMeta::new(
482 *self.strategy_controller_earn_token_account.key,
483 false
484 ));
485 accounts.push(solana_instruction::AccountMeta::new_readonly(
486 *self.token_program.key,
487 false
488 ));
489 accounts.push(solana_instruction::AccountMeta::new_readonly(
490 *self.associated_token_program.key,
491 false
492 ));
493 accounts.push(solana_instruction::AccountMeta::new_readonly(
494 *self.instruction_sysvar_account.key,
495 false
496 ));
497 accounts.push(solana_instruction::AccountMeta::new_readonly(
498 *self.system_program.key,
499 false
500 ));
501 remaining_accounts.iter().for_each(|remaining_account| {
502 accounts.push(solana_instruction::AccountMeta {
503 pubkey: *remaining_account.0.key,
504 is_signer: remaining_account.1,
505 is_writable: remaining_account.2,
506 })
507 });
508 let mut data = MintStrategy2InstructionData::new().try_to_vec().unwrap();
509 let mut args = self.__args.try_to_vec().unwrap();
510 data.append(&mut args);
511
512 let instruction = solana_instruction::Instruction {
513 program_id: crate::REFLECT_MAIN_ID,
514 accounts,
515 data,
516 };
517 let mut account_infos = Vec::with_capacity(13 + remaining_accounts.len());
518 account_infos.push(self.__program.clone());
519 account_infos.push(self.user.clone());
520 if let Some(admin_permissions) = self.admin_permissions {
521 account_infos.push(admin_permissions.clone());
522 }
523 account_infos.push(self.main.clone());
524 account_infos.push(self.strategy_controller.clone());
525 account_infos.push(self.receipt_mint.clone());
526 account_infos.push(self.user_receipt_ata.clone());
527 account_infos.push(self.user_earn_ata.clone());
528 account_infos.push(self.strategy_controller_earn_token_account.clone());
529 account_infos.push(self.token_program.clone());
530 account_infos.push(self.associated_token_program.clone());
531 account_infos.push(self.instruction_sysvar_account.clone());
532 account_infos.push(self.system_program.clone());
533 remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
534
535 if signers_seeds.is_empty() {
536 solana_cpi::invoke(&instruction, &account_infos)
537 } else {
538 solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
539 }
540 }
541}
542
543#[derive(Clone, Debug)]
560pub struct MintStrategy2CpiBuilder<'a, 'b> {
561 instruction: Box<MintStrategy2CpiBuilderInstruction<'a, 'b>>,
562}
563
564impl<'a, 'b> MintStrategy2CpiBuilder<'a, 'b> {
565 pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
566 let instruction = Box::new(MintStrategy2CpiBuilderInstruction {
567 __program: program,
568 user: None,
569 admin_permissions: None,
570 main: None,
571 strategy_controller: None,
572 receipt_mint: None,
573 user_receipt_ata: None,
574 user_earn_ata: None,
575 strategy_controller_earn_token_account: None,
576 token_program: None,
577 associated_token_program: None,
578 instruction_sysvar_account: None,
579 system_program: None,
580 usdt_deposit_amount: None,
581 min_receipt_receive: None,
582 __remaining_accounts: Vec::new(),
583 });
584 Self { instruction }
585 }
586 #[inline(always)]
587 pub fn user(&mut self, user: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
588 self.instruction.user = Some(user);
589 self
590 }
591 #[inline(always)]
593 pub fn admin_permissions(&mut self, admin_permissions: Option<&'b solana_account_info::AccountInfo<'a>>) -> &mut Self {
594 self.instruction.admin_permissions = admin_permissions;
595 self
596 }
597 #[inline(always)]
598 pub fn main(&mut self, main: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
599 self.instruction.main = Some(main);
600 self
601 }
602 #[inline(always)]
603 pub fn strategy_controller(&mut self, strategy_controller: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
604 self.instruction.strategy_controller = Some(strategy_controller);
605 self
606 }
607 #[inline(always)]
608 pub fn receipt_mint(&mut self, receipt_mint: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
609 self.instruction.receipt_mint = Some(receipt_mint);
610 self
611 }
612 #[inline(always)]
613 pub fn user_receipt_ata(&mut self, user_receipt_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
614 self.instruction.user_receipt_ata = Some(user_receipt_ata);
615 self
616 }
617 #[inline(always)]
618 pub fn user_earn_ata(&mut self, user_earn_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
619 self.instruction.user_earn_ata = Some(user_earn_ata);
620 self
621 }
622 #[inline(always)]
623 pub fn strategy_controller_earn_token_account(&mut self, strategy_controller_earn_token_account: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
624 self.instruction.strategy_controller_earn_token_account = Some(strategy_controller_earn_token_account);
625 self
626 }
627 #[inline(always)]
628 pub fn token_program(&mut self, token_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
629 self.instruction.token_program = Some(token_program);
630 self
631 }
632 #[inline(always)]
633 pub fn associated_token_program(&mut self, associated_token_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
634 self.instruction.associated_token_program = Some(associated_token_program);
635 self
636 }
637 #[inline(always)]
638 pub fn instruction_sysvar_account(&mut self, instruction_sysvar_account: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
639 self.instruction.instruction_sysvar_account = Some(instruction_sysvar_account);
640 self
641 }
642 #[inline(always)]
643 pub fn system_program(&mut self, system_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
644 self.instruction.system_program = Some(system_program);
645 self
646 }
647 #[inline(always)]
648 pub fn usdt_deposit_amount(&mut self, usdt_deposit_amount: u64) -> &mut Self {
649 self.instruction.usdt_deposit_amount = Some(usdt_deposit_amount);
650 self
651 }
652 #[inline(always)]
653 pub fn min_receipt_receive(&mut self, min_receipt_receive: u64) -> &mut Self {
654 self.instruction.min_receipt_receive = Some(min_receipt_receive);
655 self
656 }
657 #[inline(always)]
659 pub fn add_remaining_account(&mut self, account: &'b solana_account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
660 self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
661 self
662 }
663 #[inline(always)]
668 pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
669 self.instruction.__remaining_accounts.extend_from_slice(accounts);
670 self
671 }
672 #[inline(always)]
673 pub fn invoke(&self) -> solana_program_error::ProgramResult {
674 self.invoke_signed(&[])
675 }
676 #[allow(clippy::clone_on_copy)]
677 #[allow(clippy::vec_init_then_push)]
678 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
679 let args = MintStrategy2InstructionArgs {
680 usdt_deposit_amount: self.instruction.usdt_deposit_amount.clone().expect("usdt_deposit_amount is not set"),
681 min_receipt_receive: self.instruction.min_receipt_receive.clone().expect("min_receipt_receive is not set"),
682 };
683 let instruction = MintStrategy2Cpi {
684 __program: self.instruction.__program,
685
686 user: self.instruction.user.expect("user is not set"),
687
688 admin_permissions: self.instruction.admin_permissions,
689
690 main: self.instruction.main.expect("main is not set"),
691
692 strategy_controller: self.instruction.strategy_controller.expect("strategy_controller is not set"),
693
694 receipt_mint: self.instruction.receipt_mint.expect("receipt_mint is not set"),
695
696 user_receipt_ata: self.instruction.user_receipt_ata.expect("user_receipt_ata is not set"),
697
698 user_earn_ata: self.instruction.user_earn_ata.expect("user_earn_ata is not set"),
699
700 strategy_controller_earn_token_account: self.instruction.strategy_controller_earn_token_account.expect("strategy_controller_earn_token_account is not set"),
701
702 token_program: self.instruction.token_program.expect("token_program is not set"),
703
704 associated_token_program: self.instruction.associated_token_program.expect("associated_token_program is not set"),
705
706 instruction_sysvar_account: self.instruction.instruction_sysvar_account.expect("instruction_sysvar_account is not set"),
707
708 system_program: self.instruction.system_program.expect("system_program is not set"),
709 __args: args,
710 };
711 instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
712 }
713}
714
715#[derive(Clone, Debug)]
716struct MintStrategy2CpiBuilderInstruction<'a, 'b> {
717 __program: &'b solana_account_info::AccountInfo<'a>,
718 user: Option<&'b solana_account_info::AccountInfo<'a>>,
719 admin_permissions: Option<&'b solana_account_info::AccountInfo<'a>>,
720 main: Option<&'b solana_account_info::AccountInfo<'a>>,
721 strategy_controller: Option<&'b solana_account_info::AccountInfo<'a>>,
722 receipt_mint: Option<&'b solana_account_info::AccountInfo<'a>>,
723 user_receipt_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
724 user_earn_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
725 strategy_controller_earn_token_account: Option<&'b solana_account_info::AccountInfo<'a>>,
726 token_program: Option<&'b solana_account_info::AccountInfo<'a>>,
727 associated_token_program: Option<&'b solana_account_info::AccountInfo<'a>>,
728 instruction_sysvar_account: Option<&'b solana_account_info::AccountInfo<'a>>,
729 system_program: Option<&'b solana_account_info::AccountInfo<'a>>,
730 usdt_deposit_amount: Option<u64>,
731 min_receipt_receive: Option<u64>,
732 __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
734}
735