1use crate::generated::types::AuthorizationDataLocal;
9use borsh::BorshDeserialize;
10use borsh::BorshSerialize;
11
12pub struct DepositNft {
14 pub owner: solana_program::pubkey::Pubkey,
16 pub pool: solana_program::pubkey::Pubkey,
18 pub whitelist: solana_program::pubkey::Pubkey,
21 pub mint_proof: Option<solana_program::pubkey::Pubkey>,
24 pub mint: solana_program::pubkey::Pubkey,
26 pub metadata: solana_program::pubkey::Pubkey,
28 pub edition: solana_program::pubkey::Pubkey,
30 pub user_token_record: Option<solana_program::pubkey::Pubkey>,
32 pub pool_token_record: Option<solana_program::pubkey::Pubkey>,
34 pub token_metadata_program: Option<solana_program::pubkey::Pubkey>,
36 pub sysvar_instructions: Option<solana_program::pubkey::Pubkey>,
38 pub authorization_rules: Option<solana_program::pubkey::Pubkey>,
40 pub authorization_rules_program: Option<solana_program::pubkey::Pubkey>,
42 pub nft_receipt: solana_program::pubkey::Pubkey,
44 pub owner_ta: solana_program::pubkey::Pubkey,
46 pub pool_ta: solana_program::pubkey::Pubkey,
48 pub token_program: solana_program::pubkey::Pubkey,
50 pub associated_token_program: solana_program::pubkey::Pubkey,
52 pub system_program: solana_program::pubkey::Pubkey,
54}
55
56impl DepositNft {
57 pub fn instruction(
58 &self,
59 args: DepositNftInstructionArgs,
60 ) -> solana_program::instruction::Instruction {
61 self.instruction_with_remaining_accounts(args, &[])
62 }
63 #[allow(clippy::vec_init_then_push)]
64 pub fn instruction_with_remaining_accounts(
65 &self,
66 args: DepositNftInstructionArgs,
67 remaining_accounts: &[solana_program::instruction::AccountMeta],
68 ) -> solana_program::instruction::Instruction {
69 let mut accounts = Vec::with_capacity(19 + remaining_accounts.len());
70 accounts.push(solana_program::instruction::AccountMeta::new(
71 self.owner, true,
72 ));
73 accounts.push(solana_program::instruction::AccountMeta::new(
74 self.pool, false,
75 ));
76 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
77 self.whitelist,
78 false,
79 ));
80 if let Some(mint_proof) = self.mint_proof {
81 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
82 mint_proof, false,
83 ));
84 } else {
85 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
86 crate::TENSOR_AMM_ID,
87 false,
88 ));
89 }
90 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
91 self.mint, false,
92 ));
93 accounts.push(solana_program::instruction::AccountMeta::new(
94 self.metadata,
95 false,
96 ));
97 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
98 self.edition,
99 false,
100 ));
101 if let Some(user_token_record) = self.user_token_record {
102 accounts.push(solana_program::instruction::AccountMeta::new(
103 user_token_record,
104 false,
105 ));
106 } else {
107 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
108 crate::TENSOR_AMM_ID,
109 false,
110 ));
111 }
112 if let Some(pool_token_record) = self.pool_token_record {
113 accounts.push(solana_program::instruction::AccountMeta::new(
114 pool_token_record,
115 false,
116 ));
117 } else {
118 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
119 crate::TENSOR_AMM_ID,
120 false,
121 ));
122 }
123 if let Some(token_metadata_program) = self.token_metadata_program {
124 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
125 token_metadata_program,
126 false,
127 ));
128 } else {
129 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
130 crate::TENSOR_AMM_ID,
131 false,
132 ));
133 }
134 if let Some(sysvar_instructions) = self.sysvar_instructions {
135 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
136 sysvar_instructions,
137 false,
138 ));
139 } else {
140 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
141 crate::TENSOR_AMM_ID,
142 false,
143 ));
144 }
145 if let Some(authorization_rules) = self.authorization_rules {
146 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
147 authorization_rules,
148 false,
149 ));
150 } else {
151 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
152 crate::TENSOR_AMM_ID,
153 false,
154 ));
155 }
156 if let Some(authorization_rules_program) = self.authorization_rules_program {
157 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
158 authorization_rules_program,
159 false,
160 ));
161 } else {
162 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
163 crate::TENSOR_AMM_ID,
164 false,
165 ));
166 }
167 accounts.push(solana_program::instruction::AccountMeta::new(
168 self.nft_receipt,
169 false,
170 ));
171 accounts.push(solana_program::instruction::AccountMeta::new(
172 self.owner_ta,
173 false,
174 ));
175 accounts.push(solana_program::instruction::AccountMeta::new(
176 self.pool_ta,
177 false,
178 ));
179 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
180 self.token_program,
181 false,
182 ));
183 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
184 self.associated_token_program,
185 false,
186 ));
187 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
188 self.system_program,
189 false,
190 ));
191 accounts.extend_from_slice(remaining_accounts);
192 let mut data = DepositNftInstructionData::new().try_to_vec().unwrap();
193 let mut args = args.try_to_vec().unwrap();
194 data.append(&mut args);
195
196 solana_program::instruction::Instruction {
197 program_id: crate::TENSOR_AMM_ID,
198 accounts,
199 data,
200 }
201 }
202}
203
204#[derive(BorshDeserialize, BorshSerialize)]
205pub struct DepositNftInstructionData {
206 discriminator: [u8; 8],
207}
208
209impl DepositNftInstructionData {
210 pub fn new() -> Self {
211 Self {
212 discriminator: [93, 226, 132, 166, 141, 9, 48, 101],
213 }
214 }
215}
216
217impl Default for DepositNftInstructionData {
218 fn default() -> Self {
219 Self::new()
220 }
221}
222
223#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
224#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
225pub struct DepositNftInstructionArgs {
226 pub authorization_data: Option<AuthorizationDataLocal>,
227}
228
229#[derive(Clone, Debug, Default)]
253pub struct DepositNftBuilder {
254 owner: Option<solana_program::pubkey::Pubkey>,
255 pool: Option<solana_program::pubkey::Pubkey>,
256 whitelist: Option<solana_program::pubkey::Pubkey>,
257 mint_proof: Option<solana_program::pubkey::Pubkey>,
258 mint: Option<solana_program::pubkey::Pubkey>,
259 metadata: Option<solana_program::pubkey::Pubkey>,
260 edition: Option<solana_program::pubkey::Pubkey>,
261 user_token_record: Option<solana_program::pubkey::Pubkey>,
262 pool_token_record: Option<solana_program::pubkey::Pubkey>,
263 token_metadata_program: Option<solana_program::pubkey::Pubkey>,
264 sysvar_instructions: Option<solana_program::pubkey::Pubkey>,
265 authorization_rules: Option<solana_program::pubkey::Pubkey>,
266 authorization_rules_program: Option<solana_program::pubkey::Pubkey>,
267 nft_receipt: Option<solana_program::pubkey::Pubkey>,
268 owner_ta: Option<solana_program::pubkey::Pubkey>,
269 pool_ta: Option<solana_program::pubkey::Pubkey>,
270 token_program: Option<solana_program::pubkey::Pubkey>,
271 associated_token_program: Option<solana_program::pubkey::Pubkey>,
272 system_program: Option<solana_program::pubkey::Pubkey>,
273 authorization_data: Option<AuthorizationDataLocal>,
274 __remaining_accounts: Vec<solana_program::instruction::AccountMeta>,
275}
276
277impl DepositNftBuilder {
278 pub fn new() -> Self {
279 Self::default()
280 }
281 #[inline(always)]
283 pub fn owner(&mut self, owner: solana_program::pubkey::Pubkey) -> &mut Self {
284 self.owner = Some(owner);
285 self
286 }
287 #[inline(always)]
289 pub fn pool(&mut self, pool: solana_program::pubkey::Pubkey) -> &mut Self {
290 self.pool = Some(pool);
291 self
292 }
293 #[inline(always)]
296 pub fn whitelist(&mut self, whitelist: solana_program::pubkey::Pubkey) -> &mut Self {
297 self.whitelist = Some(whitelist);
298 self
299 }
300 #[inline(always)]
304 pub fn mint_proof(&mut self, mint_proof: Option<solana_program::pubkey::Pubkey>) -> &mut Self {
305 self.mint_proof = mint_proof;
306 self
307 }
308 #[inline(always)]
310 pub fn mint(&mut self, mint: solana_program::pubkey::Pubkey) -> &mut Self {
311 self.mint = Some(mint);
312 self
313 }
314 #[inline(always)]
316 pub fn metadata(&mut self, metadata: solana_program::pubkey::Pubkey) -> &mut Self {
317 self.metadata = Some(metadata);
318 self
319 }
320 #[inline(always)]
322 pub fn edition(&mut self, edition: solana_program::pubkey::Pubkey) -> &mut Self {
323 self.edition = Some(edition);
324 self
325 }
326 #[inline(always)]
329 pub fn user_token_record(
330 &mut self,
331 user_token_record: Option<solana_program::pubkey::Pubkey>,
332 ) -> &mut Self {
333 self.user_token_record = user_token_record;
334 self
335 }
336 #[inline(always)]
339 pub fn pool_token_record(
340 &mut self,
341 pool_token_record: Option<solana_program::pubkey::Pubkey>,
342 ) -> &mut Self {
343 self.pool_token_record = pool_token_record;
344 self
345 }
346 #[inline(always)]
349 pub fn token_metadata_program(
350 &mut self,
351 token_metadata_program: Option<solana_program::pubkey::Pubkey>,
352 ) -> &mut Self {
353 self.token_metadata_program = token_metadata_program;
354 self
355 }
356 #[inline(always)]
359 pub fn sysvar_instructions(
360 &mut self,
361 sysvar_instructions: Option<solana_program::pubkey::Pubkey>,
362 ) -> &mut Self {
363 self.sysvar_instructions = sysvar_instructions;
364 self
365 }
366 #[inline(always)]
369 pub fn authorization_rules(
370 &mut self,
371 authorization_rules: Option<solana_program::pubkey::Pubkey>,
372 ) -> &mut Self {
373 self.authorization_rules = authorization_rules;
374 self
375 }
376 #[inline(always)]
379 pub fn authorization_rules_program(
380 &mut self,
381 authorization_rules_program: Option<solana_program::pubkey::Pubkey>,
382 ) -> &mut Self {
383 self.authorization_rules_program = authorization_rules_program;
384 self
385 }
386 #[inline(always)]
388 pub fn nft_receipt(&mut self, nft_receipt: solana_program::pubkey::Pubkey) -> &mut Self {
389 self.nft_receipt = Some(nft_receipt);
390 self
391 }
392 #[inline(always)]
394 pub fn owner_ta(&mut self, owner_ta: solana_program::pubkey::Pubkey) -> &mut Self {
395 self.owner_ta = Some(owner_ta);
396 self
397 }
398 #[inline(always)]
400 pub fn pool_ta(&mut self, pool_ta: solana_program::pubkey::Pubkey) -> &mut Self {
401 self.pool_ta = Some(pool_ta);
402 self
403 }
404 #[inline(always)]
407 pub fn token_program(&mut self, token_program: solana_program::pubkey::Pubkey) -> &mut Self {
408 self.token_program = Some(token_program);
409 self
410 }
411 #[inline(always)]
414 pub fn associated_token_program(
415 &mut self,
416 associated_token_program: solana_program::pubkey::Pubkey,
417 ) -> &mut Self {
418 self.associated_token_program = Some(associated_token_program);
419 self
420 }
421 #[inline(always)]
424 pub fn system_program(&mut self, system_program: solana_program::pubkey::Pubkey) -> &mut Self {
425 self.system_program = Some(system_program);
426 self
427 }
428 #[inline(always)]
430 pub fn authorization_data(&mut self, authorization_data: AuthorizationDataLocal) -> &mut Self {
431 self.authorization_data = Some(authorization_data);
432 self
433 }
434 #[inline(always)]
436 pub fn add_remaining_account(
437 &mut self,
438 account: solana_program::instruction::AccountMeta,
439 ) -> &mut Self {
440 self.__remaining_accounts.push(account);
441 self
442 }
443 #[inline(always)]
445 pub fn add_remaining_accounts(
446 &mut self,
447 accounts: &[solana_program::instruction::AccountMeta],
448 ) -> &mut Self {
449 self.__remaining_accounts.extend_from_slice(accounts);
450 self
451 }
452 #[allow(clippy::clone_on_copy)]
453 pub fn instruction(&self) -> solana_program::instruction::Instruction {
454 let accounts = DepositNft {
455 owner: self.owner.expect("owner is not set"),
456 pool: self.pool.expect("pool is not set"),
457 whitelist: self.whitelist.expect("whitelist is not set"),
458 mint_proof: self.mint_proof,
459 mint: self.mint.expect("mint is not set"),
460 metadata: self.metadata.expect("metadata is not set"),
461 edition: self.edition.expect("edition is not set"),
462 user_token_record: self.user_token_record,
463 pool_token_record: self.pool_token_record,
464 token_metadata_program: self.token_metadata_program,
465 sysvar_instructions: self.sysvar_instructions,
466 authorization_rules: self.authorization_rules,
467 authorization_rules_program: self.authorization_rules_program,
468 nft_receipt: self.nft_receipt.expect("nft_receipt is not set"),
469 owner_ta: self.owner_ta.expect("owner_ta is not set"),
470 pool_ta: self.pool_ta.expect("pool_ta is not set"),
471 token_program: self.token_program.unwrap_or(solana_program::pubkey!(
472 "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
473 )),
474 associated_token_program: self.associated_token_program.unwrap_or(
475 solana_program::pubkey!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"),
476 ),
477 system_program: self
478 .system_program
479 .unwrap_or(solana_program::pubkey!("11111111111111111111111111111111")),
480 };
481 let args = DepositNftInstructionArgs {
482 authorization_data: self.authorization_data.clone(),
483 };
484
485 accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
486 }
487}
488
489pub struct DepositNftCpiAccounts<'a, 'b> {
491 pub owner: &'b solana_program::account_info::AccountInfo<'a>,
493 pub pool: &'b solana_program::account_info::AccountInfo<'a>,
495 pub whitelist: &'b solana_program::account_info::AccountInfo<'a>,
498 pub mint_proof: Option<&'b solana_program::account_info::AccountInfo<'a>>,
501 pub mint: &'b solana_program::account_info::AccountInfo<'a>,
503 pub metadata: &'b solana_program::account_info::AccountInfo<'a>,
505 pub edition: &'b solana_program::account_info::AccountInfo<'a>,
507 pub user_token_record: Option<&'b solana_program::account_info::AccountInfo<'a>>,
509 pub pool_token_record: Option<&'b solana_program::account_info::AccountInfo<'a>>,
511 pub token_metadata_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
513 pub sysvar_instructions: Option<&'b solana_program::account_info::AccountInfo<'a>>,
515 pub authorization_rules: Option<&'b solana_program::account_info::AccountInfo<'a>>,
517 pub authorization_rules_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
519 pub nft_receipt: &'b solana_program::account_info::AccountInfo<'a>,
521 pub owner_ta: &'b solana_program::account_info::AccountInfo<'a>,
523 pub pool_ta: &'b solana_program::account_info::AccountInfo<'a>,
525 pub token_program: &'b solana_program::account_info::AccountInfo<'a>,
527 pub associated_token_program: &'b solana_program::account_info::AccountInfo<'a>,
529 pub system_program: &'b solana_program::account_info::AccountInfo<'a>,
531}
532
533pub struct DepositNftCpi<'a, 'b> {
535 pub __program: &'b solana_program::account_info::AccountInfo<'a>,
537 pub owner: &'b solana_program::account_info::AccountInfo<'a>,
539 pub pool: &'b solana_program::account_info::AccountInfo<'a>,
541 pub whitelist: &'b solana_program::account_info::AccountInfo<'a>,
544 pub mint_proof: Option<&'b solana_program::account_info::AccountInfo<'a>>,
547 pub mint: &'b solana_program::account_info::AccountInfo<'a>,
549 pub metadata: &'b solana_program::account_info::AccountInfo<'a>,
551 pub edition: &'b solana_program::account_info::AccountInfo<'a>,
553 pub user_token_record: Option<&'b solana_program::account_info::AccountInfo<'a>>,
555 pub pool_token_record: Option<&'b solana_program::account_info::AccountInfo<'a>>,
557 pub token_metadata_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
559 pub sysvar_instructions: Option<&'b solana_program::account_info::AccountInfo<'a>>,
561 pub authorization_rules: Option<&'b solana_program::account_info::AccountInfo<'a>>,
563 pub authorization_rules_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
565 pub nft_receipt: &'b solana_program::account_info::AccountInfo<'a>,
567 pub owner_ta: &'b solana_program::account_info::AccountInfo<'a>,
569 pub pool_ta: &'b solana_program::account_info::AccountInfo<'a>,
571 pub token_program: &'b solana_program::account_info::AccountInfo<'a>,
573 pub associated_token_program: &'b solana_program::account_info::AccountInfo<'a>,
575 pub system_program: &'b solana_program::account_info::AccountInfo<'a>,
577 pub __args: DepositNftInstructionArgs,
579}
580
581impl<'a, 'b> DepositNftCpi<'a, 'b> {
582 pub fn new(
583 program: &'b solana_program::account_info::AccountInfo<'a>,
584 accounts: DepositNftCpiAccounts<'a, 'b>,
585 args: DepositNftInstructionArgs,
586 ) -> Self {
587 Self {
588 __program: program,
589 owner: accounts.owner,
590 pool: accounts.pool,
591 whitelist: accounts.whitelist,
592 mint_proof: accounts.mint_proof,
593 mint: accounts.mint,
594 metadata: accounts.metadata,
595 edition: accounts.edition,
596 user_token_record: accounts.user_token_record,
597 pool_token_record: accounts.pool_token_record,
598 token_metadata_program: accounts.token_metadata_program,
599 sysvar_instructions: accounts.sysvar_instructions,
600 authorization_rules: accounts.authorization_rules,
601 authorization_rules_program: accounts.authorization_rules_program,
602 nft_receipt: accounts.nft_receipt,
603 owner_ta: accounts.owner_ta,
604 pool_ta: accounts.pool_ta,
605 token_program: accounts.token_program,
606 associated_token_program: accounts.associated_token_program,
607 system_program: accounts.system_program,
608 __args: args,
609 }
610 }
611 #[inline(always)]
612 pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
613 self.invoke_signed_with_remaining_accounts(&[], &[])
614 }
615 #[inline(always)]
616 pub fn invoke_with_remaining_accounts(
617 &self,
618 remaining_accounts: &[(
619 &'b solana_program::account_info::AccountInfo<'a>,
620 bool,
621 bool,
622 )],
623 ) -> solana_program::entrypoint::ProgramResult {
624 self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
625 }
626 #[inline(always)]
627 pub fn invoke_signed(
628 &self,
629 signers_seeds: &[&[&[u8]]],
630 ) -> solana_program::entrypoint::ProgramResult {
631 self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
632 }
633 #[allow(clippy::clone_on_copy)]
634 #[allow(clippy::vec_init_then_push)]
635 pub fn invoke_signed_with_remaining_accounts(
636 &self,
637 signers_seeds: &[&[&[u8]]],
638 remaining_accounts: &[(
639 &'b solana_program::account_info::AccountInfo<'a>,
640 bool,
641 bool,
642 )],
643 ) -> solana_program::entrypoint::ProgramResult {
644 let mut accounts = Vec::with_capacity(19 + remaining_accounts.len());
645 accounts.push(solana_program::instruction::AccountMeta::new(
646 *self.owner.key,
647 true,
648 ));
649 accounts.push(solana_program::instruction::AccountMeta::new(
650 *self.pool.key,
651 false,
652 ));
653 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
654 *self.whitelist.key,
655 false,
656 ));
657 if let Some(mint_proof) = self.mint_proof {
658 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
659 *mint_proof.key,
660 false,
661 ));
662 } else {
663 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
664 crate::TENSOR_AMM_ID,
665 false,
666 ));
667 }
668 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
669 *self.mint.key,
670 false,
671 ));
672 accounts.push(solana_program::instruction::AccountMeta::new(
673 *self.metadata.key,
674 false,
675 ));
676 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
677 *self.edition.key,
678 false,
679 ));
680 if let Some(user_token_record) = self.user_token_record {
681 accounts.push(solana_program::instruction::AccountMeta::new(
682 *user_token_record.key,
683 false,
684 ));
685 } else {
686 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
687 crate::TENSOR_AMM_ID,
688 false,
689 ));
690 }
691 if let Some(pool_token_record) = self.pool_token_record {
692 accounts.push(solana_program::instruction::AccountMeta::new(
693 *pool_token_record.key,
694 false,
695 ));
696 } else {
697 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
698 crate::TENSOR_AMM_ID,
699 false,
700 ));
701 }
702 if let Some(token_metadata_program) = self.token_metadata_program {
703 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
704 *token_metadata_program.key,
705 false,
706 ));
707 } else {
708 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
709 crate::TENSOR_AMM_ID,
710 false,
711 ));
712 }
713 if let Some(sysvar_instructions) = self.sysvar_instructions {
714 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
715 *sysvar_instructions.key,
716 false,
717 ));
718 } else {
719 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
720 crate::TENSOR_AMM_ID,
721 false,
722 ));
723 }
724 if let Some(authorization_rules) = self.authorization_rules {
725 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
726 *authorization_rules.key,
727 false,
728 ));
729 } else {
730 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
731 crate::TENSOR_AMM_ID,
732 false,
733 ));
734 }
735 if let Some(authorization_rules_program) = self.authorization_rules_program {
736 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
737 *authorization_rules_program.key,
738 false,
739 ));
740 } else {
741 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
742 crate::TENSOR_AMM_ID,
743 false,
744 ));
745 }
746 accounts.push(solana_program::instruction::AccountMeta::new(
747 *self.nft_receipt.key,
748 false,
749 ));
750 accounts.push(solana_program::instruction::AccountMeta::new(
751 *self.owner_ta.key,
752 false,
753 ));
754 accounts.push(solana_program::instruction::AccountMeta::new(
755 *self.pool_ta.key,
756 false,
757 ));
758 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
759 *self.token_program.key,
760 false,
761 ));
762 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
763 *self.associated_token_program.key,
764 false,
765 ));
766 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
767 *self.system_program.key,
768 false,
769 ));
770 remaining_accounts.iter().for_each(|remaining_account| {
771 accounts.push(solana_program::instruction::AccountMeta {
772 pubkey: *remaining_account.0.key,
773 is_signer: remaining_account.1,
774 is_writable: remaining_account.2,
775 })
776 });
777 let mut data = DepositNftInstructionData::new().try_to_vec().unwrap();
778 let mut args = self.__args.try_to_vec().unwrap();
779 data.append(&mut args);
780
781 let instruction = solana_program::instruction::Instruction {
782 program_id: crate::TENSOR_AMM_ID,
783 accounts,
784 data,
785 };
786 let mut account_infos = Vec::with_capacity(20 + remaining_accounts.len());
787 account_infos.push(self.__program.clone());
788 account_infos.push(self.owner.clone());
789 account_infos.push(self.pool.clone());
790 account_infos.push(self.whitelist.clone());
791 if let Some(mint_proof) = self.mint_proof {
792 account_infos.push(mint_proof.clone());
793 }
794 account_infos.push(self.mint.clone());
795 account_infos.push(self.metadata.clone());
796 account_infos.push(self.edition.clone());
797 if let Some(user_token_record) = self.user_token_record {
798 account_infos.push(user_token_record.clone());
799 }
800 if let Some(pool_token_record) = self.pool_token_record {
801 account_infos.push(pool_token_record.clone());
802 }
803 if let Some(token_metadata_program) = self.token_metadata_program {
804 account_infos.push(token_metadata_program.clone());
805 }
806 if let Some(sysvar_instructions) = self.sysvar_instructions {
807 account_infos.push(sysvar_instructions.clone());
808 }
809 if let Some(authorization_rules) = self.authorization_rules {
810 account_infos.push(authorization_rules.clone());
811 }
812 if let Some(authorization_rules_program) = self.authorization_rules_program {
813 account_infos.push(authorization_rules_program.clone());
814 }
815 account_infos.push(self.nft_receipt.clone());
816 account_infos.push(self.owner_ta.clone());
817 account_infos.push(self.pool_ta.clone());
818 account_infos.push(self.token_program.clone());
819 account_infos.push(self.associated_token_program.clone());
820 account_infos.push(self.system_program.clone());
821 remaining_accounts
822 .iter()
823 .for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
824
825 if signers_seeds.is_empty() {
826 solana_program::program::invoke(&instruction, &account_infos)
827 } else {
828 solana_program::program::invoke_signed(&instruction, &account_infos, signers_seeds)
829 }
830 }
831}
832
833#[derive(Clone, Debug)]
857pub struct DepositNftCpiBuilder<'a, 'b> {
858 instruction: Box<DepositNftCpiBuilderInstruction<'a, 'b>>,
859}
860
861impl<'a, 'b> DepositNftCpiBuilder<'a, 'b> {
862 pub fn new(program: &'b solana_program::account_info::AccountInfo<'a>) -> Self {
863 let instruction = Box::new(DepositNftCpiBuilderInstruction {
864 __program: program,
865 owner: None,
866 pool: None,
867 whitelist: None,
868 mint_proof: None,
869 mint: None,
870 metadata: None,
871 edition: None,
872 user_token_record: None,
873 pool_token_record: None,
874 token_metadata_program: None,
875 sysvar_instructions: None,
876 authorization_rules: None,
877 authorization_rules_program: None,
878 nft_receipt: None,
879 owner_ta: None,
880 pool_ta: None,
881 token_program: None,
882 associated_token_program: None,
883 system_program: None,
884 authorization_data: None,
885 __remaining_accounts: Vec::new(),
886 });
887 Self { instruction }
888 }
889 #[inline(always)]
891 pub fn owner(&mut self, owner: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
892 self.instruction.owner = Some(owner);
893 self
894 }
895 #[inline(always)]
897 pub fn pool(&mut self, pool: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
898 self.instruction.pool = Some(pool);
899 self
900 }
901 #[inline(always)]
904 pub fn whitelist(
905 &mut self,
906 whitelist: &'b solana_program::account_info::AccountInfo<'a>,
907 ) -> &mut Self {
908 self.instruction.whitelist = Some(whitelist);
909 self
910 }
911 #[inline(always)]
915 pub fn mint_proof(
916 &mut self,
917 mint_proof: Option<&'b solana_program::account_info::AccountInfo<'a>>,
918 ) -> &mut Self {
919 self.instruction.mint_proof = mint_proof;
920 self
921 }
922 #[inline(always)]
924 pub fn mint(&mut self, mint: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
925 self.instruction.mint = Some(mint);
926 self
927 }
928 #[inline(always)]
930 pub fn metadata(
931 &mut self,
932 metadata: &'b solana_program::account_info::AccountInfo<'a>,
933 ) -> &mut Self {
934 self.instruction.metadata = Some(metadata);
935 self
936 }
937 #[inline(always)]
939 pub fn edition(
940 &mut self,
941 edition: &'b solana_program::account_info::AccountInfo<'a>,
942 ) -> &mut Self {
943 self.instruction.edition = Some(edition);
944 self
945 }
946 #[inline(always)]
949 pub fn user_token_record(
950 &mut self,
951 user_token_record: Option<&'b solana_program::account_info::AccountInfo<'a>>,
952 ) -> &mut Self {
953 self.instruction.user_token_record = user_token_record;
954 self
955 }
956 #[inline(always)]
959 pub fn pool_token_record(
960 &mut self,
961 pool_token_record: Option<&'b solana_program::account_info::AccountInfo<'a>>,
962 ) -> &mut Self {
963 self.instruction.pool_token_record = pool_token_record;
964 self
965 }
966 #[inline(always)]
969 pub fn token_metadata_program(
970 &mut self,
971 token_metadata_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
972 ) -> &mut Self {
973 self.instruction.token_metadata_program = token_metadata_program;
974 self
975 }
976 #[inline(always)]
979 pub fn sysvar_instructions(
980 &mut self,
981 sysvar_instructions: Option<&'b solana_program::account_info::AccountInfo<'a>>,
982 ) -> &mut Self {
983 self.instruction.sysvar_instructions = sysvar_instructions;
984 self
985 }
986 #[inline(always)]
989 pub fn authorization_rules(
990 &mut self,
991 authorization_rules: Option<&'b solana_program::account_info::AccountInfo<'a>>,
992 ) -> &mut Self {
993 self.instruction.authorization_rules = authorization_rules;
994 self
995 }
996 #[inline(always)]
999 pub fn authorization_rules_program(
1000 &mut self,
1001 authorization_rules_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1002 ) -> &mut Self {
1003 self.instruction.authorization_rules_program = authorization_rules_program;
1004 self
1005 }
1006 #[inline(always)]
1008 pub fn nft_receipt(
1009 &mut self,
1010 nft_receipt: &'b solana_program::account_info::AccountInfo<'a>,
1011 ) -> &mut Self {
1012 self.instruction.nft_receipt = Some(nft_receipt);
1013 self
1014 }
1015 #[inline(always)]
1017 pub fn owner_ta(
1018 &mut self,
1019 owner_ta: &'b solana_program::account_info::AccountInfo<'a>,
1020 ) -> &mut Self {
1021 self.instruction.owner_ta = Some(owner_ta);
1022 self
1023 }
1024 #[inline(always)]
1026 pub fn pool_ta(
1027 &mut self,
1028 pool_ta: &'b solana_program::account_info::AccountInfo<'a>,
1029 ) -> &mut Self {
1030 self.instruction.pool_ta = Some(pool_ta);
1031 self
1032 }
1033 #[inline(always)]
1035 pub fn token_program(
1036 &mut self,
1037 token_program: &'b solana_program::account_info::AccountInfo<'a>,
1038 ) -> &mut Self {
1039 self.instruction.token_program = Some(token_program);
1040 self
1041 }
1042 #[inline(always)]
1044 pub fn associated_token_program(
1045 &mut self,
1046 associated_token_program: &'b solana_program::account_info::AccountInfo<'a>,
1047 ) -> &mut Self {
1048 self.instruction.associated_token_program = Some(associated_token_program);
1049 self
1050 }
1051 #[inline(always)]
1053 pub fn system_program(
1054 &mut self,
1055 system_program: &'b solana_program::account_info::AccountInfo<'a>,
1056 ) -> &mut Self {
1057 self.instruction.system_program = Some(system_program);
1058 self
1059 }
1060 #[inline(always)]
1062 pub fn authorization_data(&mut self, authorization_data: AuthorizationDataLocal) -> &mut Self {
1063 self.instruction.authorization_data = Some(authorization_data);
1064 self
1065 }
1066 #[inline(always)]
1068 pub fn add_remaining_account(
1069 &mut self,
1070 account: &'b solana_program::account_info::AccountInfo<'a>,
1071 is_writable: bool,
1072 is_signer: bool,
1073 ) -> &mut Self {
1074 self.instruction
1075 .__remaining_accounts
1076 .push((account, is_writable, is_signer));
1077 self
1078 }
1079 #[inline(always)]
1084 pub fn add_remaining_accounts(
1085 &mut self,
1086 accounts: &[(
1087 &'b solana_program::account_info::AccountInfo<'a>,
1088 bool,
1089 bool,
1090 )],
1091 ) -> &mut Self {
1092 self.instruction
1093 .__remaining_accounts
1094 .extend_from_slice(accounts);
1095 self
1096 }
1097 #[inline(always)]
1098 pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
1099 self.invoke_signed(&[])
1100 }
1101 #[allow(clippy::clone_on_copy)]
1102 #[allow(clippy::vec_init_then_push)]
1103 pub fn invoke_signed(
1104 &self,
1105 signers_seeds: &[&[&[u8]]],
1106 ) -> solana_program::entrypoint::ProgramResult {
1107 let args = DepositNftInstructionArgs {
1108 authorization_data: self.instruction.authorization_data.clone(),
1109 };
1110 let instruction = DepositNftCpi {
1111 __program: self.instruction.__program,
1112
1113 owner: self.instruction.owner.expect("owner is not set"),
1114
1115 pool: self.instruction.pool.expect("pool is not set"),
1116
1117 whitelist: self.instruction.whitelist.expect("whitelist is not set"),
1118
1119 mint_proof: self.instruction.mint_proof,
1120
1121 mint: self.instruction.mint.expect("mint is not set"),
1122
1123 metadata: self.instruction.metadata.expect("metadata is not set"),
1124
1125 edition: self.instruction.edition.expect("edition is not set"),
1126
1127 user_token_record: self.instruction.user_token_record,
1128
1129 pool_token_record: self.instruction.pool_token_record,
1130
1131 token_metadata_program: self.instruction.token_metadata_program,
1132
1133 sysvar_instructions: self.instruction.sysvar_instructions,
1134
1135 authorization_rules: self.instruction.authorization_rules,
1136
1137 authorization_rules_program: self.instruction.authorization_rules_program,
1138
1139 nft_receipt: self
1140 .instruction
1141 .nft_receipt
1142 .expect("nft_receipt is not set"),
1143
1144 owner_ta: self.instruction.owner_ta.expect("owner_ta is not set"),
1145
1146 pool_ta: self.instruction.pool_ta.expect("pool_ta is not set"),
1147
1148 token_program: self
1149 .instruction
1150 .token_program
1151 .expect("token_program is not set"),
1152
1153 associated_token_program: self
1154 .instruction
1155 .associated_token_program
1156 .expect("associated_token_program is not set"),
1157
1158 system_program: self
1159 .instruction
1160 .system_program
1161 .expect("system_program is not set"),
1162 __args: args,
1163 };
1164 instruction.invoke_signed_with_remaining_accounts(
1165 signers_seeds,
1166 &self.instruction.__remaining_accounts,
1167 )
1168 }
1169}
1170
1171#[derive(Clone, Debug)]
1172struct DepositNftCpiBuilderInstruction<'a, 'b> {
1173 __program: &'b solana_program::account_info::AccountInfo<'a>,
1174 owner: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1175 pool: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1176 whitelist: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1177 mint_proof: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1178 mint: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1179 metadata: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1180 edition: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1181 user_token_record: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1182 pool_token_record: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1183 token_metadata_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1184 sysvar_instructions: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1185 authorization_rules: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1186 authorization_rules_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1187 nft_receipt: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1188 owner_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1189 pool_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1190 token_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1191 associated_token_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1192 system_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1193 authorization_data: Option<AuthorizationDataLocal>,
1194 __remaining_accounts: Vec<(
1196 &'b solana_program::account_info::AccountInfo<'a>,
1197 bool,
1198 bool,
1199 )>,
1200}