1use borsh::BorshDeserialize;
9use borsh::BorshSerialize;
10
11pub struct BuyT22Spl {
13 pub fee_vault: solana_program::pubkey::Pubkey,
14
15 pub fee_vault_currency_ta: solana_program::pubkey::Pubkey,
16
17 pub buyer: solana_program::pubkey::Pubkey,
18
19 pub buyer_ta: solana_program::pubkey::Pubkey,
20
21 pub list_state: solana_program::pubkey::Pubkey,
22
23 pub list_ta: solana_program::pubkey::Pubkey,
24 pub mint: solana_program::pubkey::Pubkey,
26 pub currency: solana_program::pubkey::Pubkey,
28
29 pub owner: solana_program::pubkey::Pubkey,
30
31 pub owner_currency_ta: solana_program::pubkey::Pubkey,
32
33 pub payer: solana_program::pubkey::Pubkey,
34
35 pub payer_currency_ta: solana_program::pubkey::Pubkey,
36
37 pub taker_broker: Option<solana_program::pubkey::Pubkey>,
38
39 pub taker_broker_currency_ta: Option<solana_program::pubkey::Pubkey>,
40
41 pub maker_broker: Option<solana_program::pubkey::Pubkey>,
42
43 pub maker_broker_currency_ta: Option<solana_program::pubkey::Pubkey>,
44
45 pub rent_destination: solana_program::pubkey::Pubkey,
46
47 pub token_program: solana_program::pubkey::Pubkey,
48
49 pub currency_token_program: solana_program::pubkey::Pubkey,
50
51 pub associated_token_program: solana_program::pubkey::Pubkey,
52
53 pub marketplace_program: solana_program::pubkey::Pubkey,
54
55 pub system_program: solana_program::pubkey::Pubkey,
56
57 pub cosigner: Option<solana_program::pubkey::Pubkey>,
58}
59
60impl BuyT22Spl {
61 pub fn instruction(
62 &self,
63 args: BuyT22SplInstructionArgs,
64 ) -> solana_program::instruction::Instruction {
65 self.instruction_with_remaining_accounts(args, &[])
66 }
67 #[allow(clippy::vec_init_then_push)]
68 pub fn instruction_with_remaining_accounts(
69 &self,
70 args: BuyT22SplInstructionArgs,
71 remaining_accounts: &[solana_program::instruction::AccountMeta],
72 ) -> solana_program::instruction::Instruction {
73 let mut accounts = Vec::with_capacity(23 + remaining_accounts.len());
74 accounts.push(solana_program::instruction::AccountMeta::new(
75 self.fee_vault,
76 false,
77 ));
78 accounts.push(solana_program::instruction::AccountMeta::new(
79 self.fee_vault_currency_ta,
80 false,
81 ));
82 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
83 self.buyer, false,
84 ));
85 accounts.push(solana_program::instruction::AccountMeta::new(
86 self.buyer_ta,
87 false,
88 ));
89 accounts.push(solana_program::instruction::AccountMeta::new(
90 self.list_state,
91 false,
92 ));
93 accounts.push(solana_program::instruction::AccountMeta::new(
94 self.list_ta,
95 false,
96 ));
97 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
98 self.mint, false,
99 ));
100 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
101 self.currency,
102 false,
103 ));
104 accounts.push(solana_program::instruction::AccountMeta::new(
105 self.owner, false,
106 ));
107 accounts.push(solana_program::instruction::AccountMeta::new(
108 self.owner_currency_ta,
109 false,
110 ));
111 accounts.push(solana_program::instruction::AccountMeta::new(
112 self.payer, true,
113 ));
114 accounts.push(solana_program::instruction::AccountMeta::new(
115 self.payer_currency_ta,
116 false,
117 ));
118 if let Some(taker_broker) = self.taker_broker {
119 accounts.push(solana_program::instruction::AccountMeta::new(
120 taker_broker,
121 false,
122 ));
123 } else {
124 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
125 crate::TENSOR_MARKETPLACE_ID,
126 false,
127 ));
128 }
129 if let Some(taker_broker_currency_ta) = self.taker_broker_currency_ta {
130 accounts.push(solana_program::instruction::AccountMeta::new(
131 taker_broker_currency_ta,
132 false,
133 ));
134 } else {
135 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
136 crate::TENSOR_MARKETPLACE_ID,
137 false,
138 ));
139 }
140 if let Some(maker_broker) = self.maker_broker {
141 accounts.push(solana_program::instruction::AccountMeta::new(
142 maker_broker,
143 false,
144 ));
145 } else {
146 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
147 crate::TENSOR_MARKETPLACE_ID,
148 false,
149 ));
150 }
151 if let Some(maker_broker_currency_ta) = self.maker_broker_currency_ta {
152 accounts.push(solana_program::instruction::AccountMeta::new(
153 maker_broker_currency_ta,
154 false,
155 ));
156 } else {
157 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
158 crate::TENSOR_MARKETPLACE_ID,
159 false,
160 ));
161 }
162 accounts.push(solana_program::instruction::AccountMeta::new(
163 self.rent_destination,
164 false,
165 ));
166 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
167 self.token_program,
168 false,
169 ));
170 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
171 self.currency_token_program,
172 false,
173 ));
174 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
175 self.associated_token_program,
176 false,
177 ));
178 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
179 self.marketplace_program,
180 false,
181 ));
182 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
183 self.system_program,
184 false,
185 ));
186 if let Some(cosigner) = self.cosigner {
187 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
188 cosigner, true,
189 ));
190 } else {
191 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
192 crate::TENSOR_MARKETPLACE_ID,
193 false,
194 ));
195 }
196 accounts.extend_from_slice(remaining_accounts);
197 let mut data = BuyT22SplInstructionData::new().try_to_vec().unwrap();
198 let mut args = args.try_to_vec().unwrap();
199 data.append(&mut args);
200
201 solana_program::instruction::Instruction {
202 program_id: crate::TENSOR_MARKETPLACE_ID,
203 accounts,
204 data,
205 }
206 }
207}
208
209#[derive(BorshDeserialize, BorshSerialize)]
210pub struct BuyT22SplInstructionData {
211 discriminator: [u8; 8],
212}
213
214impl BuyT22SplInstructionData {
215 pub fn new() -> Self {
216 Self {
217 discriminator: [102, 21, 163, 39, 94, 39, 122, 94],
218 }
219 }
220}
221
222impl Default for BuyT22SplInstructionData {
223 fn default() -> Self {
224 Self::new()
225 }
226}
227
228#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
229#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
230pub struct BuyT22SplInstructionArgs {
231 pub max_amount: u64,
232}
233
234#[derive(Clone, Debug, Default)]
262pub struct BuyT22SplBuilder {
263 fee_vault: Option<solana_program::pubkey::Pubkey>,
264 fee_vault_currency_ta: Option<solana_program::pubkey::Pubkey>,
265 buyer: Option<solana_program::pubkey::Pubkey>,
266 buyer_ta: Option<solana_program::pubkey::Pubkey>,
267 list_state: Option<solana_program::pubkey::Pubkey>,
268 list_ta: Option<solana_program::pubkey::Pubkey>,
269 mint: Option<solana_program::pubkey::Pubkey>,
270 currency: Option<solana_program::pubkey::Pubkey>,
271 owner: Option<solana_program::pubkey::Pubkey>,
272 owner_currency_ta: Option<solana_program::pubkey::Pubkey>,
273 payer: Option<solana_program::pubkey::Pubkey>,
274 payer_currency_ta: Option<solana_program::pubkey::Pubkey>,
275 taker_broker: Option<solana_program::pubkey::Pubkey>,
276 taker_broker_currency_ta: Option<solana_program::pubkey::Pubkey>,
277 maker_broker: Option<solana_program::pubkey::Pubkey>,
278 maker_broker_currency_ta: Option<solana_program::pubkey::Pubkey>,
279 rent_destination: Option<solana_program::pubkey::Pubkey>,
280 token_program: Option<solana_program::pubkey::Pubkey>,
281 currency_token_program: Option<solana_program::pubkey::Pubkey>,
282 associated_token_program: Option<solana_program::pubkey::Pubkey>,
283 marketplace_program: Option<solana_program::pubkey::Pubkey>,
284 system_program: Option<solana_program::pubkey::Pubkey>,
285 cosigner: Option<solana_program::pubkey::Pubkey>,
286 max_amount: Option<u64>,
287 __remaining_accounts: Vec<solana_program::instruction::AccountMeta>,
288}
289
290impl BuyT22SplBuilder {
291 pub fn new() -> Self {
292 Self::default()
293 }
294 #[inline(always)]
295 pub fn fee_vault(&mut self, fee_vault: solana_program::pubkey::Pubkey) -> &mut Self {
296 self.fee_vault = Some(fee_vault);
297 self
298 }
299 #[inline(always)]
300 pub fn fee_vault_currency_ta(
301 &mut self,
302 fee_vault_currency_ta: solana_program::pubkey::Pubkey,
303 ) -> &mut Self {
304 self.fee_vault_currency_ta = Some(fee_vault_currency_ta);
305 self
306 }
307 #[inline(always)]
308 pub fn buyer(&mut self, buyer: solana_program::pubkey::Pubkey) -> &mut Self {
309 self.buyer = Some(buyer);
310 self
311 }
312 #[inline(always)]
313 pub fn buyer_ta(&mut self, buyer_ta: solana_program::pubkey::Pubkey) -> &mut Self {
314 self.buyer_ta = Some(buyer_ta);
315 self
316 }
317 #[inline(always)]
318 pub fn list_state(&mut self, list_state: solana_program::pubkey::Pubkey) -> &mut Self {
319 self.list_state = Some(list_state);
320 self
321 }
322 #[inline(always)]
323 pub fn list_ta(&mut self, list_ta: solana_program::pubkey::Pubkey) -> &mut Self {
324 self.list_ta = Some(list_ta);
325 self
326 }
327 #[inline(always)]
329 pub fn mint(&mut self, mint: solana_program::pubkey::Pubkey) -> &mut Self {
330 self.mint = Some(mint);
331 self
332 }
333 #[inline(always)]
335 pub fn currency(&mut self, currency: solana_program::pubkey::Pubkey) -> &mut Self {
336 self.currency = Some(currency);
337 self
338 }
339 #[inline(always)]
340 pub fn owner(&mut self, owner: solana_program::pubkey::Pubkey) -> &mut Self {
341 self.owner = Some(owner);
342 self
343 }
344 #[inline(always)]
345 pub fn owner_currency_ta(
346 &mut self,
347 owner_currency_ta: solana_program::pubkey::Pubkey,
348 ) -> &mut Self {
349 self.owner_currency_ta = Some(owner_currency_ta);
350 self
351 }
352 #[inline(always)]
353 pub fn payer(&mut self, payer: solana_program::pubkey::Pubkey) -> &mut Self {
354 self.payer = Some(payer);
355 self
356 }
357 #[inline(always)]
358 pub fn payer_currency_ta(
359 &mut self,
360 payer_currency_ta: solana_program::pubkey::Pubkey,
361 ) -> &mut Self {
362 self.payer_currency_ta = Some(payer_currency_ta);
363 self
364 }
365 #[inline(always)]
367 pub fn taker_broker(
368 &mut self,
369 taker_broker: Option<solana_program::pubkey::Pubkey>,
370 ) -> &mut Self {
371 self.taker_broker = taker_broker;
372 self
373 }
374 #[inline(always)]
376 pub fn taker_broker_currency_ta(
377 &mut self,
378 taker_broker_currency_ta: Option<solana_program::pubkey::Pubkey>,
379 ) -> &mut Self {
380 self.taker_broker_currency_ta = taker_broker_currency_ta;
381 self
382 }
383 #[inline(always)]
385 pub fn maker_broker(
386 &mut self,
387 maker_broker: Option<solana_program::pubkey::Pubkey>,
388 ) -> &mut Self {
389 self.maker_broker = maker_broker;
390 self
391 }
392 #[inline(always)]
394 pub fn maker_broker_currency_ta(
395 &mut self,
396 maker_broker_currency_ta: Option<solana_program::pubkey::Pubkey>,
397 ) -> &mut Self {
398 self.maker_broker_currency_ta = maker_broker_currency_ta;
399 self
400 }
401 #[inline(always)]
402 pub fn rent_destination(
403 &mut self,
404 rent_destination: solana_program::pubkey::Pubkey,
405 ) -> &mut Self {
406 self.rent_destination = Some(rent_destination);
407 self
408 }
409 #[inline(always)]
411 pub fn token_program(&mut self, token_program: solana_program::pubkey::Pubkey) -> &mut Self {
412 self.token_program = Some(token_program);
413 self
414 }
415 #[inline(always)]
417 pub fn currency_token_program(
418 &mut self,
419 currency_token_program: solana_program::pubkey::Pubkey,
420 ) -> &mut Self {
421 self.currency_token_program = Some(currency_token_program);
422 self
423 }
424 #[inline(always)]
426 pub fn associated_token_program(
427 &mut self,
428 associated_token_program: solana_program::pubkey::Pubkey,
429 ) -> &mut Self {
430 self.associated_token_program = Some(associated_token_program);
431 self
432 }
433 #[inline(always)]
435 pub fn marketplace_program(
436 &mut self,
437 marketplace_program: solana_program::pubkey::Pubkey,
438 ) -> &mut Self {
439 self.marketplace_program = Some(marketplace_program);
440 self
441 }
442 #[inline(always)]
444 pub fn system_program(&mut self, system_program: solana_program::pubkey::Pubkey) -> &mut Self {
445 self.system_program = Some(system_program);
446 self
447 }
448 #[inline(always)]
450 pub fn cosigner(&mut self, cosigner: Option<solana_program::pubkey::Pubkey>) -> &mut Self {
451 self.cosigner = cosigner;
452 self
453 }
454 #[inline(always)]
455 pub fn max_amount(&mut self, max_amount: u64) -> &mut Self {
456 self.max_amount = Some(max_amount);
457 self
458 }
459 #[inline(always)]
461 pub fn add_remaining_account(
462 &mut self,
463 account: solana_program::instruction::AccountMeta,
464 ) -> &mut Self {
465 self.__remaining_accounts.push(account);
466 self
467 }
468 #[inline(always)]
470 pub fn add_remaining_accounts(
471 &mut self,
472 accounts: &[solana_program::instruction::AccountMeta],
473 ) -> &mut Self {
474 self.__remaining_accounts.extend_from_slice(accounts);
475 self
476 }
477 #[allow(clippy::clone_on_copy)]
478 pub fn instruction(&self) -> solana_program::instruction::Instruction {
479 let accounts =
480 BuyT22Spl {
481 fee_vault: self.fee_vault.expect("fee_vault is not set"),
482 fee_vault_currency_ta: self
483 .fee_vault_currency_ta
484 .expect("fee_vault_currency_ta is not set"),
485 buyer: self.buyer.expect("buyer is not set"),
486 buyer_ta: self.buyer_ta.expect("buyer_ta is not set"),
487 list_state: self.list_state.expect("list_state is not set"),
488 list_ta: self.list_ta.expect("list_ta is not set"),
489 mint: self.mint.expect("mint is not set"),
490 currency: self.currency.expect("currency is not set"),
491 owner: self.owner.expect("owner is not set"),
492 owner_currency_ta: self
493 .owner_currency_ta
494 .expect("owner_currency_ta is not set"),
495 payer: self.payer.expect("payer is not set"),
496 payer_currency_ta: self
497 .payer_currency_ta
498 .expect("payer_currency_ta is not set"),
499 taker_broker: self.taker_broker,
500 taker_broker_currency_ta: self.taker_broker_currency_ta,
501 maker_broker: self.maker_broker,
502 maker_broker_currency_ta: self.maker_broker_currency_ta,
503 rent_destination: self.rent_destination.expect("rent_destination is not set"),
504 token_program: self.token_program.unwrap_or(solana_program::pubkey!(
505 "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"
506 )),
507 currency_token_program: self.currency_token_program.unwrap_or(
508 solana_program::pubkey!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
509 ),
510 associated_token_program: self.associated_token_program.unwrap_or(
511 solana_program::pubkey!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"),
512 ),
513 marketplace_program: self.marketplace_program.unwrap_or(solana_program::pubkey!(
514 "TCMPhJdwDryooaGtiocG1u3xcYbRpiJzb283XfCZsDp"
515 )),
516 system_program: self
517 .system_program
518 .unwrap_or(solana_program::pubkey!("11111111111111111111111111111111")),
519 cosigner: self.cosigner,
520 };
521 let args = BuyT22SplInstructionArgs {
522 max_amount: self.max_amount.clone().expect("max_amount is not set"),
523 };
524
525 accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
526 }
527}
528
529pub struct BuyT22SplCpiAccounts<'a, 'b> {
531 pub fee_vault: &'b solana_program::account_info::AccountInfo<'a>,
532
533 pub fee_vault_currency_ta: &'b solana_program::account_info::AccountInfo<'a>,
534
535 pub buyer: &'b solana_program::account_info::AccountInfo<'a>,
536
537 pub buyer_ta: &'b solana_program::account_info::AccountInfo<'a>,
538
539 pub list_state: &'b solana_program::account_info::AccountInfo<'a>,
540
541 pub list_ta: &'b solana_program::account_info::AccountInfo<'a>,
542 pub mint: &'b solana_program::account_info::AccountInfo<'a>,
544 pub currency: &'b solana_program::account_info::AccountInfo<'a>,
546
547 pub owner: &'b solana_program::account_info::AccountInfo<'a>,
548
549 pub owner_currency_ta: &'b solana_program::account_info::AccountInfo<'a>,
550
551 pub payer: &'b solana_program::account_info::AccountInfo<'a>,
552
553 pub payer_currency_ta: &'b solana_program::account_info::AccountInfo<'a>,
554
555 pub taker_broker: Option<&'b solana_program::account_info::AccountInfo<'a>>,
556
557 pub taker_broker_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
558
559 pub maker_broker: Option<&'b solana_program::account_info::AccountInfo<'a>>,
560
561 pub maker_broker_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
562
563 pub rent_destination: &'b solana_program::account_info::AccountInfo<'a>,
564
565 pub token_program: &'b solana_program::account_info::AccountInfo<'a>,
566
567 pub currency_token_program: &'b solana_program::account_info::AccountInfo<'a>,
568
569 pub associated_token_program: &'b solana_program::account_info::AccountInfo<'a>,
570
571 pub marketplace_program: &'b solana_program::account_info::AccountInfo<'a>,
572
573 pub system_program: &'b solana_program::account_info::AccountInfo<'a>,
574
575 pub cosigner: Option<&'b solana_program::account_info::AccountInfo<'a>>,
576}
577
578pub struct BuyT22SplCpi<'a, 'b> {
580 pub __program: &'b solana_program::account_info::AccountInfo<'a>,
582
583 pub fee_vault: &'b solana_program::account_info::AccountInfo<'a>,
584
585 pub fee_vault_currency_ta: &'b solana_program::account_info::AccountInfo<'a>,
586
587 pub buyer: &'b solana_program::account_info::AccountInfo<'a>,
588
589 pub buyer_ta: &'b solana_program::account_info::AccountInfo<'a>,
590
591 pub list_state: &'b solana_program::account_info::AccountInfo<'a>,
592
593 pub list_ta: &'b solana_program::account_info::AccountInfo<'a>,
594 pub mint: &'b solana_program::account_info::AccountInfo<'a>,
596 pub currency: &'b solana_program::account_info::AccountInfo<'a>,
598
599 pub owner: &'b solana_program::account_info::AccountInfo<'a>,
600
601 pub owner_currency_ta: &'b solana_program::account_info::AccountInfo<'a>,
602
603 pub payer: &'b solana_program::account_info::AccountInfo<'a>,
604
605 pub payer_currency_ta: &'b solana_program::account_info::AccountInfo<'a>,
606
607 pub taker_broker: Option<&'b solana_program::account_info::AccountInfo<'a>>,
608
609 pub taker_broker_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
610
611 pub maker_broker: Option<&'b solana_program::account_info::AccountInfo<'a>>,
612
613 pub maker_broker_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
614
615 pub rent_destination: &'b solana_program::account_info::AccountInfo<'a>,
616
617 pub token_program: &'b solana_program::account_info::AccountInfo<'a>,
618
619 pub currency_token_program: &'b solana_program::account_info::AccountInfo<'a>,
620
621 pub associated_token_program: &'b solana_program::account_info::AccountInfo<'a>,
622
623 pub marketplace_program: &'b solana_program::account_info::AccountInfo<'a>,
624
625 pub system_program: &'b solana_program::account_info::AccountInfo<'a>,
626
627 pub cosigner: Option<&'b solana_program::account_info::AccountInfo<'a>>,
628 pub __args: BuyT22SplInstructionArgs,
630}
631
632impl<'a, 'b> BuyT22SplCpi<'a, 'b> {
633 pub fn new(
634 program: &'b solana_program::account_info::AccountInfo<'a>,
635 accounts: BuyT22SplCpiAccounts<'a, 'b>,
636 args: BuyT22SplInstructionArgs,
637 ) -> Self {
638 Self {
639 __program: program,
640 fee_vault: accounts.fee_vault,
641 fee_vault_currency_ta: accounts.fee_vault_currency_ta,
642 buyer: accounts.buyer,
643 buyer_ta: accounts.buyer_ta,
644 list_state: accounts.list_state,
645 list_ta: accounts.list_ta,
646 mint: accounts.mint,
647 currency: accounts.currency,
648 owner: accounts.owner,
649 owner_currency_ta: accounts.owner_currency_ta,
650 payer: accounts.payer,
651 payer_currency_ta: accounts.payer_currency_ta,
652 taker_broker: accounts.taker_broker,
653 taker_broker_currency_ta: accounts.taker_broker_currency_ta,
654 maker_broker: accounts.maker_broker,
655 maker_broker_currency_ta: accounts.maker_broker_currency_ta,
656 rent_destination: accounts.rent_destination,
657 token_program: accounts.token_program,
658 currency_token_program: accounts.currency_token_program,
659 associated_token_program: accounts.associated_token_program,
660 marketplace_program: accounts.marketplace_program,
661 system_program: accounts.system_program,
662 cosigner: accounts.cosigner,
663 __args: args,
664 }
665 }
666 #[inline(always)]
667 pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
668 self.invoke_signed_with_remaining_accounts(&[], &[])
669 }
670 #[inline(always)]
671 pub fn invoke_with_remaining_accounts(
672 &self,
673 remaining_accounts: &[(
674 &'b solana_program::account_info::AccountInfo<'a>,
675 bool,
676 bool,
677 )],
678 ) -> solana_program::entrypoint::ProgramResult {
679 self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
680 }
681 #[inline(always)]
682 pub fn invoke_signed(
683 &self,
684 signers_seeds: &[&[&[u8]]],
685 ) -> solana_program::entrypoint::ProgramResult {
686 self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
687 }
688 #[allow(clippy::clone_on_copy)]
689 #[allow(clippy::vec_init_then_push)]
690 pub fn invoke_signed_with_remaining_accounts(
691 &self,
692 signers_seeds: &[&[&[u8]]],
693 remaining_accounts: &[(
694 &'b solana_program::account_info::AccountInfo<'a>,
695 bool,
696 bool,
697 )],
698 ) -> solana_program::entrypoint::ProgramResult {
699 let mut accounts = Vec::with_capacity(23 + remaining_accounts.len());
700 accounts.push(solana_program::instruction::AccountMeta::new(
701 *self.fee_vault.key,
702 false,
703 ));
704 accounts.push(solana_program::instruction::AccountMeta::new(
705 *self.fee_vault_currency_ta.key,
706 false,
707 ));
708 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
709 *self.buyer.key,
710 false,
711 ));
712 accounts.push(solana_program::instruction::AccountMeta::new(
713 *self.buyer_ta.key,
714 false,
715 ));
716 accounts.push(solana_program::instruction::AccountMeta::new(
717 *self.list_state.key,
718 false,
719 ));
720 accounts.push(solana_program::instruction::AccountMeta::new(
721 *self.list_ta.key,
722 false,
723 ));
724 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
725 *self.mint.key,
726 false,
727 ));
728 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
729 *self.currency.key,
730 false,
731 ));
732 accounts.push(solana_program::instruction::AccountMeta::new(
733 *self.owner.key,
734 false,
735 ));
736 accounts.push(solana_program::instruction::AccountMeta::new(
737 *self.owner_currency_ta.key,
738 false,
739 ));
740 accounts.push(solana_program::instruction::AccountMeta::new(
741 *self.payer.key,
742 true,
743 ));
744 accounts.push(solana_program::instruction::AccountMeta::new(
745 *self.payer_currency_ta.key,
746 false,
747 ));
748 if let Some(taker_broker) = self.taker_broker {
749 accounts.push(solana_program::instruction::AccountMeta::new(
750 *taker_broker.key,
751 false,
752 ));
753 } else {
754 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
755 crate::TENSOR_MARKETPLACE_ID,
756 false,
757 ));
758 }
759 if let Some(taker_broker_currency_ta) = self.taker_broker_currency_ta {
760 accounts.push(solana_program::instruction::AccountMeta::new(
761 *taker_broker_currency_ta.key,
762 false,
763 ));
764 } else {
765 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
766 crate::TENSOR_MARKETPLACE_ID,
767 false,
768 ));
769 }
770 if let Some(maker_broker) = self.maker_broker {
771 accounts.push(solana_program::instruction::AccountMeta::new(
772 *maker_broker.key,
773 false,
774 ));
775 } else {
776 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
777 crate::TENSOR_MARKETPLACE_ID,
778 false,
779 ));
780 }
781 if let Some(maker_broker_currency_ta) = self.maker_broker_currency_ta {
782 accounts.push(solana_program::instruction::AccountMeta::new(
783 *maker_broker_currency_ta.key,
784 false,
785 ));
786 } else {
787 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
788 crate::TENSOR_MARKETPLACE_ID,
789 false,
790 ));
791 }
792 accounts.push(solana_program::instruction::AccountMeta::new(
793 *self.rent_destination.key,
794 false,
795 ));
796 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
797 *self.token_program.key,
798 false,
799 ));
800 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
801 *self.currency_token_program.key,
802 false,
803 ));
804 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
805 *self.associated_token_program.key,
806 false,
807 ));
808 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
809 *self.marketplace_program.key,
810 false,
811 ));
812 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
813 *self.system_program.key,
814 false,
815 ));
816 if let Some(cosigner) = self.cosigner {
817 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
818 *cosigner.key,
819 true,
820 ));
821 } else {
822 accounts.push(solana_program::instruction::AccountMeta::new_readonly(
823 crate::TENSOR_MARKETPLACE_ID,
824 false,
825 ));
826 }
827 remaining_accounts.iter().for_each(|remaining_account| {
828 accounts.push(solana_program::instruction::AccountMeta {
829 pubkey: *remaining_account.0.key,
830 is_signer: remaining_account.1,
831 is_writable: remaining_account.2,
832 })
833 });
834 let mut data = BuyT22SplInstructionData::new().try_to_vec().unwrap();
835 let mut args = self.__args.try_to_vec().unwrap();
836 data.append(&mut args);
837
838 let instruction = solana_program::instruction::Instruction {
839 program_id: crate::TENSOR_MARKETPLACE_ID,
840 accounts,
841 data,
842 };
843 let mut account_infos = Vec::with_capacity(23 + 1 + remaining_accounts.len());
844 account_infos.push(self.__program.clone());
845 account_infos.push(self.fee_vault.clone());
846 account_infos.push(self.fee_vault_currency_ta.clone());
847 account_infos.push(self.buyer.clone());
848 account_infos.push(self.buyer_ta.clone());
849 account_infos.push(self.list_state.clone());
850 account_infos.push(self.list_ta.clone());
851 account_infos.push(self.mint.clone());
852 account_infos.push(self.currency.clone());
853 account_infos.push(self.owner.clone());
854 account_infos.push(self.owner_currency_ta.clone());
855 account_infos.push(self.payer.clone());
856 account_infos.push(self.payer_currency_ta.clone());
857 if let Some(taker_broker) = self.taker_broker {
858 account_infos.push(taker_broker.clone());
859 }
860 if let Some(taker_broker_currency_ta) = self.taker_broker_currency_ta {
861 account_infos.push(taker_broker_currency_ta.clone());
862 }
863 if let Some(maker_broker) = self.maker_broker {
864 account_infos.push(maker_broker.clone());
865 }
866 if let Some(maker_broker_currency_ta) = self.maker_broker_currency_ta {
867 account_infos.push(maker_broker_currency_ta.clone());
868 }
869 account_infos.push(self.rent_destination.clone());
870 account_infos.push(self.token_program.clone());
871 account_infos.push(self.currency_token_program.clone());
872 account_infos.push(self.associated_token_program.clone());
873 account_infos.push(self.marketplace_program.clone());
874 account_infos.push(self.system_program.clone());
875 if let Some(cosigner) = self.cosigner {
876 account_infos.push(cosigner.clone());
877 }
878 remaining_accounts
879 .iter()
880 .for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
881
882 if signers_seeds.is_empty() {
883 solana_program::program::invoke(&instruction, &account_infos)
884 } else {
885 solana_program::program::invoke_signed(&instruction, &account_infos, signers_seeds)
886 }
887 }
888}
889
890#[derive(Clone, Debug)]
918pub struct BuyT22SplCpiBuilder<'a, 'b> {
919 instruction: Box<BuyT22SplCpiBuilderInstruction<'a, 'b>>,
920}
921
922impl<'a, 'b> BuyT22SplCpiBuilder<'a, 'b> {
923 pub fn new(program: &'b solana_program::account_info::AccountInfo<'a>) -> Self {
924 let instruction = Box::new(BuyT22SplCpiBuilderInstruction {
925 __program: program,
926 fee_vault: None,
927 fee_vault_currency_ta: None,
928 buyer: None,
929 buyer_ta: None,
930 list_state: None,
931 list_ta: None,
932 mint: None,
933 currency: None,
934 owner: None,
935 owner_currency_ta: None,
936 payer: None,
937 payer_currency_ta: None,
938 taker_broker: None,
939 taker_broker_currency_ta: None,
940 maker_broker: None,
941 maker_broker_currency_ta: None,
942 rent_destination: None,
943 token_program: None,
944 currency_token_program: None,
945 associated_token_program: None,
946 marketplace_program: None,
947 system_program: None,
948 cosigner: None,
949 max_amount: None,
950 __remaining_accounts: Vec::new(),
951 });
952 Self { instruction }
953 }
954 #[inline(always)]
955 pub fn fee_vault(
956 &mut self,
957 fee_vault: &'b solana_program::account_info::AccountInfo<'a>,
958 ) -> &mut Self {
959 self.instruction.fee_vault = Some(fee_vault);
960 self
961 }
962 #[inline(always)]
963 pub fn fee_vault_currency_ta(
964 &mut self,
965 fee_vault_currency_ta: &'b solana_program::account_info::AccountInfo<'a>,
966 ) -> &mut Self {
967 self.instruction.fee_vault_currency_ta = Some(fee_vault_currency_ta);
968 self
969 }
970 #[inline(always)]
971 pub fn buyer(&mut self, buyer: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
972 self.instruction.buyer = Some(buyer);
973 self
974 }
975 #[inline(always)]
976 pub fn buyer_ta(
977 &mut self,
978 buyer_ta: &'b solana_program::account_info::AccountInfo<'a>,
979 ) -> &mut Self {
980 self.instruction.buyer_ta = Some(buyer_ta);
981 self
982 }
983 #[inline(always)]
984 pub fn list_state(
985 &mut self,
986 list_state: &'b solana_program::account_info::AccountInfo<'a>,
987 ) -> &mut Self {
988 self.instruction.list_state = Some(list_state);
989 self
990 }
991 #[inline(always)]
992 pub fn list_ta(
993 &mut self,
994 list_ta: &'b solana_program::account_info::AccountInfo<'a>,
995 ) -> &mut Self {
996 self.instruction.list_ta = Some(list_ta);
997 self
998 }
999 #[inline(always)]
1001 pub fn mint(&mut self, mint: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1002 self.instruction.mint = Some(mint);
1003 self
1004 }
1005 #[inline(always)]
1007 pub fn currency(
1008 &mut self,
1009 currency: &'b solana_program::account_info::AccountInfo<'a>,
1010 ) -> &mut Self {
1011 self.instruction.currency = Some(currency);
1012 self
1013 }
1014 #[inline(always)]
1015 pub fn owner(&mut self, owner: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1016 self.instruction.owner = Some(owner);
1017 self
1018 }
1019 #[inline(always)]
1020 pub fn owner_currency_ta(
1021 &mut self,
1022 owner_currency_ta: &'b solana_program::account_info::AccountInfo<'a>,
1023 ) -> &mut Self {
1024 self.instruction.owner_currency_ta = Some(owner_currency_ta);
1025 self
1026 }
1027 #[inline(always)]
1028 pub fn payer(&mut self, payer: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1029 self.instruction.payer = Some(payer);
1030 self
1031 }
1032 #[inline(always)]
1033 pub fn payer_currency_ta(
1034 &mut self,
1035 payer_currency_ta: &'b solana_program::account_info::AccountInfo<'a>,
1036 ) -> &mut Self {
1037 self.instruction.payer_currency_ta = Some(payer_currency_ta);
1038 self
1039 }
1040 #[inline(always)]
1042 pub fn taker_broker(
1043 &mut self,
1044 taker_broker: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1045 ) -> &mut Self {
1046 self.instruction.taker_broker = taker_broker;
1047 self
1048 }
1049 #[inline(always)]
1051 pub fn taker_broker_currency_ta(
1052 &mut self,
1053 taker_broker_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1054 ) -> &mut Self {
1055 self.instruction.taker_broker_currency_ta = taker_broker_currency_ta;
1056 self
1057 }
1058 #[inline(always)]
1060 pub fn maker_broker(
1061 &mut self,
1062 maker_broker: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1063 ) -> &mut Self {
1064 self.instruction.maker_broker = maker_broker;
1065 self
1066 }
1067 #[inline(always)]
1069 pub fn maker_broker_currency_ta(
1070 &mut self,
1071 maker_broker_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1072 ) -> &mut Self {
1073 self.instruction.maker_broker_currency_ta = maker_broker_currency_ta;
1074 self
1075 }
1076 #[inline(always)]
1077 pub fn rent_destination(
1078 &mut self,
1079 rent_destination: &'b solana_program::account_info::AccountInfo<'a>,
1080 ) -> &mut Self {
1081 self.instruction.rent_destination = Some(rent_destination);
1082 self
1083 }
1084 #[inline(always)]
1085 pub fn token_program(
1086 &mut self,
1087 token_program: &'b solana_program::account_info::AccountInfo<'a>,
1088 ) -> &mut Self {
1089 self.instruction.token_program = Some(token_program);
1090 self
1091 }
1092 #[inline(always)]
1093 pub fn currency_token_program(
1094 &mut self,
1095 currency_token_program: &'b solana_program::account_info::AccountInfo<'a>,
1096 ) -> &mut Self {
1097 self.instruction.currency_token_program = Some(currency_token_program);
1098 self
1099 }
1100 #[inline(always)]
1101 pub fn associated_token_program(
1102 &mut self,
1103 associated_token_program: &'b solana_program::account_info::AccountInfo<'a>,
1104 ) -> &mut Self {
1105 self.instruction.associated_token_program = Some(associated_token_program);
1106 self
1107 }
1108 #[inline(always)]
1109 pub fn marketplace_program(
1110 &mut self,
1111 marketplace_program: &'b solana_program::account_info::AccountInfo<'a>,
1112 ) -> &mut Self {
1113 self.instruction.marketplace_program = Some(marketplace_program);
1114 self
1115 }
1116 #[inline(always)]
1117 pub fn system_program(
1118 &mut self,
1119 system_program: &'b solana_program::account_info::AccountInfo<'a>,
1120 ) -> &mut Self {
1121 self.instruction.system_program = Some(system_program);
1122 self
1123 }
1124 #[inline(always)]
1126 pub fn cosigner(
1127 &mut self,
1128 cosigner: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1129 ) -> &mut Self {
1130 self.instruction.cosigner = cosigner;
1131 self
1132 }
1133 #[inline(always)]
1134 pub fn max_amount(&mut self, max_amount: u64) -> &mut Self {
1135 self.instruction.max_amount = Some(max_amount);
1136 self
1137 }
1138 #[inline(always)]
1140 pub fn add_remaining_account(
1141 &mut self,
1142 account: &'b solana_program::account_info::AccountInfo<'a>,
1143 is_writable: bool,
1144 is_signer: bool,
1145 ) -> &mut Self {
1146 self.instruction
1147 .__remaining_accounts
1148 .push((account, is_writable, is_signer));
1149 self
1150 }
1151 #[inline(always)]
1156 pub fn add_remaining_accounts(
1157 &mut self,
1158 accounts: &[(
1159 &'b solana_program::account_info::AccountInfo<'a>,
1160 bool,
1161 bool,
1162 )],
1163 ) -> &mut Self {
1164 self.instruction
1165 .__remaining_accounts
1166 .extend_from_slice(accounts);
1167 self
1168 }
1169 #[inline(always)]
1170 pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
1171 self.invoke_signed(&[])
1172 }
1173 #[allow(clippy::clone_on_copy)]
1174 #[allow(clippy::vec_init_then_push)]
1175 pub fn invoke_signed(
1176 &self,
1177 signers_seeds: &[&[&[u8]]],
1178 ) -> solana_program::entrypoint::ProgramResult {
1179 let args = BuyT22SplInstructionArgs {
1180 max_amount: self
1181 .instruction
1182 .max_amount
1183 .clone()
1184 .expect("max_amount is not set"),
1185 };
1186 let instruction = BuyT22SplCpi {
1187 __program: self.instruction.__program,
1188
1189 fee_vault: self.instruction.fee_vault.expect("fee_vault is not set"),
1190
1191 fee_vault_currency_ta: self
1192 .instruction
1193 .fee_vault_currency_ta
1194 .expect("fee_vault_currency_ta is not set"),
1195
1196 buyer: self.instruction.buyer.expect("buyer is not set"),
1197
1198 buyer_ta: self.instruction.buyer_ta.expect("buyer_ta is not set"),
1199
1200 list_state: self.instruction.list_state.expect("list_state is not set"),
1201
1202 list_ta: self.instruction.list_ta.expect("list_ta is not set"),
1203
1204 mint: self.instruction.mint.expect("mint is not set"),
1205
1206 currency: self.instruction.currency.expect("currency is not set"),
1207
1208 owner: self.instruction.owner.expect("owner is not set"),
1209
1210 owner_currency_ta: self
1211 .instruction
1212 .owner_currency_ta
1213 .expect("owner_currency_ta is not set"),
1214
1215 payer: self.instruction.payer.expect("payer is not set"),
1216
1217 payer_currency_ta: self
1218 .instruction
1219 .payer_currency_ta
1220 .expect("payer_currency_ta is not set"),
1221
1222 taker_broker: self.instruction.taker_broker,
1223
1224 taker_broker_currency_ta: self.instruction.taker_broker_currency_ta,
1225
1226 maker_broker: self.instruction.maker_broker,
1227
1228 maker_broker_currency_ta: self.instruction.maker_broker_currency_ta,
1229
1230 rent_destination: self
1231 .instruction
1232 .rent_destination
1233 .expect("rent_destination is not set"),
1234
1235 token_program: self
1236 .instruction
1237 .token_program
1238 .expect("token_program is not set"),
1239
1240 currency_token_program: self
1241 .instruction
1242 .currency_token_program
1243 .expect("currency_token_program is not set"),
1244
1245 associated_token_program: self
1246 .instruction
1247 .associated_token_program
1248 .expect("associated_token_program is not set"),
1249
1250 marketplace_program: self
1251 .instruction
1252 .marketplace_program
1253 .expect("marketplace_program is not set"),
1254
1255 system_program: self
1256 .instruction
1257 .system_program
1258 .expect("system_program is not set"),
1259
1260 cosigner: self.instruction.cosigner,
1261 __args: args,
1262 };
1263 instruction.invoke_signed_with_remaining_accounts(
1264 signers_seeds,
1265 &self.instruction.__remaining_accounts,
1266 )
1267 }
1268}
1269
1270#[derive(Clone, Debug)]
1271struct BuyT22SplCpiBuilderInstruction<'a, 'b> {
1272 __program: &'b solana_program::account_info::AccountInfo<'a>,
1273 fee_vault: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1274 fee_vault_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1275 buyer: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1276 buyer_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1277 list_state: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1278 list_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1279 mint: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1280 currency: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1281 owner: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1282 owner_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1283 payer: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1284 payer_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1285 taker_broker: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1286 taker_broker_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1287 maker_broker: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1288 maker_broker_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1289 rent_destination: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1290 token_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1291 currency_token_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1292 associated_token_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1293 marketplace_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1294 system_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1295 cosigner: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1296 max_amount: Option<u64>,
1297 __remaining_accounts: Vec<(
1299 &'b solana_program::account_info::AccountInfo<'a>,
1300 bool,
1301 bool,
1302 )>,
1303}