carbon_virtuals_decoder/instructions/
update_pool_creator.rs1use carbon_core::{account_utils::next_account, deserialize::ArrangeAccounts};
3#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
4#[derive(Debug, Clone, borsh::BorshSerialize, borsh::BorshDeserialize, PartialEq)]
5pub struct UpdatePoolCreator {}
6
7#[derive(Debug, Clone, PartialEq)]
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9pub struct UpdatePoolCreatorInstructionAccounts {
10 pub creator: solana_pubkey::Pubkey,
11 pub new_creator: solana_pubkey::Pubkey,
12 pub virtuals_mint: solana_pubkey::Pubkey,
13 pub token_mint: solana_pubkey::Pubkey,
14 pub new_creator_virtuals_ata: solana_pubkey::Pubkey,
15 pub new_creator_token_ata: solana_pubkey::Pubkey,
16 pub vpool: solana_pubkey::Pubkey,
17 pub token_program: solana_pubkey::Pubkey,
18 pub associated_token_program: solana_pubkey::Pubkey,
19 pub system_program: solana_pubkey::Pubkey,
20 pub remaining: Vec<solana_instruction::AccountMeta>,
21}
22
23impl UpdatePoolCreator {
24 pub fn decode(data: &[u8]) -> Option<Self> {
25 if data.len() < 8 {
26 return None;
27 }
28 let discriminator = &data[0..8];
29 if discriminator != [113, 225, 166, 185, 94, 231, 96, 28] {
30 return None;
31 }
32
33 let mut data_slice = data;
34
35 data_slice = &data_slice[8..];
36
37 borsh::BorshDeserialize::deserialize(&mut data_slice).ok()
38 }
39}
40
41impl ArrangeAccounts for UpdatePoolCreator {
42 type ArrangedAccounts = UpdatePoolCreatorInstructionAccounts;
43
44 fn arrange_accounts(
45 accounts: &[solana_instruction::AccountMeta],
46 ) -> Option<Self::ArrangedAccounts> {
47 let mut iter = accounts.iter();
48
49 let creator = next_account(&mut iter)?;
50 let new_creator = next_account(&mut iter)?;
51 let virtuals_mint = next_account(&mut iter)?;
52 let token_mint = next_account(&mut iter)?;
53 let new_creator_virtuals_ata = next_account(&mut iter)?;
54 let new_creator_token_ata = next_account(&mut iter)?;
55 let vpool = next_account(&mut iter)?;
56 let token_program = next_account(&mut iter)?;
57 let associated_token_program = next_account(&mut iter)?;
58 let system_program = next_account(&mut iter)?;
59
60 let remaining = iter.as_slice();
61
62 Some(UpdatePoolCreatorInstructionAccounts {
63 creator,
64 new_creator,
65 virtuals_mint,
66 token_mint,
67 new_creator_virtuals_ata,
68 new_creator_token_ata,
69 vpool,
70 token_program,
71 associated_token_program,
72 system_program,
73 remaining: remaining.to_vec(),
74 })
75 }
76}