carbon_wavebreak_decoder/instructions/
lp_transfer.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 LpTransfer {}
6
7#[derive(Debug, Clone, PartialEq)]
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9pub struct LpTransferInstructionAccounts {
10 pub lp_authority: solana_pubkey::Pubkey,
11 pub new_lp_authority: solana_pubkey::Pubkey,
12 pub lp_escrow: solana_pubkey::Pubkey,
13 pub new_lp_escrow: solana_pubkey::Pubkey,
14 pub position_mint: solana_pubkey::Pubkey,
15 pub position: solana_pubkey::Pubkey,
16 pub position_token_account: solana_pubkey::Pubkey,
17 pub new_position_token_account: solana_pubkey::Pubkey,
18 pub lock_config: solana_pubkey::Pubkey,
19 pub system_program: solana_pubkey::Pubkey,
20 pub token22_program: solana_pubkey::Pubkey,
21 pub ata_program: solana_pubkey::Pubkey,
22 pub whirlpool_program: solana_pubkey::Pubkey,
23 pub remaining: Vec<solana_instruction::AccountMeta>,
24}
25
26impl LpTransfer {
27 pub fn decode(data: &[u8]) -> Option<Self> {
28 if data.is_empty() {
29 return None;
30 }
31 let discriminator = &data[0..1];
32 if discriminator != [57] {
33 return None;
34 }
35
36 let mut data_slice = data;
37
38 data_slice = &data_slice[1..];
39
40 borsh::BorshDeserialize::deserialize(&mut data_slice).ok()
41 }
42}
43
44impl ArrangeAccounts for LpTransfer {
45 type ArrangedAccounts = LpTransferInstructionAccounts;
46
47 fn arrange_accounts(
48 accounts: &[solana_instruction::AccountMeta],
49 ) -> Option<Self::ArrangedAccounts> {
50 let mut iter = accounts.iter();
51
52 let lp_authority = next_account(&mut iter)?;
53 let new_lp_authority = next_account(&mut iter)?;
54 let lp_escrow = next_account(&mut iter)?;
55 let new_lp_escrow = next_account(&mut iter)?;
56 let position_mint = next_account(&mut iter)?;
57 let position = next_account(&mut iter)?;
58 let position_token_account = next_account(&mut iter)?;
59 let new_position_token_account = next_account(&mut iter)?;
60 let lock_config = next_account(&mut iter)?;
61 let system_program = next_account(&mut iter)?;
62 let token22_program = next_account(&mut iter)?;
63 let ata_program = next_account(&mut iter)?;
64 let whirlpool_program = next_account(&mut iter)?;
65
66 let remaining = iter.as_slice();
67
68 Some(LpTransferInstructionAccounts {
69 lp_authority,
70 new_lp_authority,
71 lp_escrow,
72 new_lp_escrow,
73 position_mint,
74 position,
75 position_token_account,
76 new_position_token_account,
77 lock_config,
78 system_program,
79 token22_program,
80 ata_program,
81 whirlpool_program,
82 remaining: remaining.to_vec(),
83 })
84 }
85}