carbon_solayer_restaking_program_decoder/instructions/
restake.rs1use carbon_core::{borsh, CarbonDeserialize};
2
3#[derive(
4 CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash,
5)]
6#[carbon(discriminator = "0x61a1f1a70620d535")]
7pub struct Restake {
8 pub amount: u64,
9}
10
11pub struct RestakeInstructionAccounts {
12 pub signer: solana_pubkey::Pubkey,
13 pub lst_mint: solana_pubkey::Pubkey,
14 pub lst_ata: solana_pubkey::Pubkey,
15 pub rst_ata: solana_pubkey::Pubkey,
16 pub rst_mint: solana_pubkey::Pubkey,
17 pub vault: solana_pubkey::Pubkey,
18 pub pool: solana_pubkey::Pubkey,
19 pub associated_token_program: solana_pubkey::Pubkey,
20 pub token_program: solana_pubkey::Pubkey,
21 pub system_program: solana_pubkey::Pubkey,
22}
23
24impl carbon_core::deserialize::ArrangeAccounts for Restake {
25 type ArrangedAccounts = RestakeInstructionAccounts;
26
27 fn arrange_accounts(
28 accounts: &[solana_instruction::AccountMeta],
29 ) -> Option<Self::ArrangedAccounts> {
30 let [signer, lst_mint, lst_ata, rst_ata, rst_mint, vault, pool, associated_token_program, token_program, system_program, _remaining @ ..] =
31 accounts
32 else {
33 return None;
34 };
35
36 Some(RestakeInstructionAccounts {
37 signer: signer.pubkey,
38 lst_mint: lst_mint.pubkey,
39 lst_ata: lst_ata.pubkey,
40 rst_ata: rst_ata.pubkey,
41 rst_mint: rst_mint.pubkey,
42 vault: vault.pubkey,
43 pool: pool.pubkey,
44 associated_token_program: associated_token_program.pubkey,
45 token_program: token_program.pubkey,
46 system_program: system_program.pubkey,
47 })
48 }
49}