carbon_solayer_restaking_program_decoder/instructions/
restake.rs

1use 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}