carbon_tcomp_decoder/instructions/
list.rs1use carbon_core::CarbonDeserialize;
3use carbon_core::account_utils::next_account;
4use carbon_core::borsh;
5use carbon_core::deserialize::ArrangeAccounts;
6use carbon_core::deserialize::CarbonDeserialize;
7use solana_pubkey::Pubkey;
8
9#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
10#[derive(Debug, Clone, borsh::BorshSerialize, CarbonDeserialize, PartialEq, Eq, Hash)]
11pub struct List {
12 pub nonce: u64,
13 pub index: u32,
14 pub root: [u8; 32],
15 pub data_hash: [u8; 32],
16 pub creator_hash: [u8; 32],
17 pub amount: u64,
18 pub expire_in_sec: Option<u64>,
19 pub currency: Option<Pubkey>,
20 pub private_taker: Option<Pubkey>,
21 pub maker_broker: Option<Pubkey>,
22}
23
24#[derive(Debug, Clone, PartialEq)]
25#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
26pub struct ListInstructionAccounts {
27 pub tree_authority: solana_pubkey::Pubkey,
28 pub owner: solana_pubkey::Pubkey,
29 pub delegate: solana_pubkey::Pubkey,
30 pub merkle_tree: solana_pubkey::Pubkey,
31 pub log_wrapper: solana_pubkey::Pubkey,
32 pub compression_program: solana_pubkey::Pubkey,
33 pub system_program: solana_pubkey::Pubkey,
34 pub bubblegum_program: solana_pubkey::Pubkey,
35 pub tcomp_program: solana_pubkey::Pubkey,
36 pub list_state: solana_pubkey::Pubkey,
37 pub rent_payer: solana_pubkey::Pubkey,
38 pub remaining: Vec<solana_instruction::AccountMeta>,
39}
40
41impl List {
42 pub fn decode(data: &[u8]) -> Option<Self> {
43 if data.len() < 8 {
44 return None;
45 }
46 let discriminator = &data[0..8];
47 if discriminator != &[54, 174, 193, 67, 17, 41, 132, 38] {
48 return None;
49 }
50
51 let data_slice = data;
52
53 let data_slice = &data_slice[8..];
54
55 Self::deserialize(data_slice)
56 }
57}
58
59impl ArrangeAccounts for List {
60 type ArrangedAccounts = ListInstructionAccounts;
61
62 fn arrange_accounts(
63 accounts: &[solana_instruction::AccountMeta],
64 ) -> Option<Self::ArrangedAccounts> {
65 let mut iter = accounts.iter();
66
67 let tree_authority = next_account(&mut iter)?;
68 let owner = next_account(&mut iter)?;
69 let delegate = next_account(&mut iter)?;
70 let merkle_tree = next_account(&mut iter)?;
71 let log_wrapper = next_account(&mut iter)?;
72 let compression_program = next_account(&mut iter)?;
73 let system_program = next_account(&mut iter)?;
74 let bubblegum_program = next_account(&mut iter)?;
75 let tcomp_program = next_account(&mut iter)?;
76 let list_state = next_account(&mut iter)?;
77 let rent_payer = next_account(&mut iter)?;
78
79 let remaining = iter.as_slice();
80
81 Some(ListInstructionAccounts {
82 tree_authority,
83 owner,
84 delegate,
85 merkle_tree,
86 log_wrapper,
87 compression_program,
88 system_program,
89 bubblegum_program,
90 tcomp_program,
91 list_state,
92 rent_payer,
93 remaining: remaining.to_vec(),
94 })
95 }
96}