carbon_score_decoder/instructions/
process_withdraw_ships.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;
7
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9#[derive(Debug, Clone, borsh::BorshSerialize, CarbonDeserialize, PartialEq, Eq, Hash)]
10pub struct ProcessWithdrawShips {
11 pub staking_bump: u8,
12 pub scorevars_bump: u8,
13 pub scorevars_ship_bump: u8,
14 pub escrow_auth_bump: u8,
15 pub escrow_bump: u8,
16 pub treasury_auth_bump: u8,
17 pub treasury_bump: u8,
18}
19
20#[derive(Debug, Clone, PartialEq)]
21#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
22pub struct ProcessWithdrawShipsInstructionAccounts {
23 pub player_account: solana_pubkey::Pubkey,
24 pub ship_staking_account: solana_pubkey::Pubkey,
25 pub score_vars_account: solana_pubkey::Pubkey,
26 pub score_vars_ship_account: solana_pubkey::Pubkey,
27 pub player_atlas_token_account: solana_pubkey::Pubkey,
28 pub ship_token_account_escrow: solana_pubkey::Pubkey,
29 pub ship_token_account_return: solana_pubkey::Pubkey,
30 pub toolkit_token_account_source: solana_pubkey::Pubkey,
31 pub treasury_token_account: solana_pubkey::Pubkey,
32 pub treasury_authority_account: solana_pubkey::Pubkey,
33 pub escrow_authority: solana_pubkey::Pubkey,
34 pub token_program: solana_pubkey::Pubkey,
35 pub system_program: solana_pubkey::Pubkey,
36 pub clock: solana_pubkey::Pubkey,
37 pub ship_mint: solana_pubkey::Pubkey,
38 pub toolkit_mint: solana_pubkey::Pubkey,
39 pub remaining: Vec<solana_instruction::AccountMeta>,
40}
41
42impl ProcessWithdrawShips {
43 pub fn decode(data: &[u8]) -> Option<Self> {
44 if data.len() < 8 {
45 return None;
46 }
47 let discriminator = &data[0..8];
48 if discriminator != &[75, 198, 23, 209, 171, 228, 207, 85] {
49 return None;
50 }
51
52 let data_slice = data;
53
54 let data_slice = &data_slice[8..];
55
56 Self::deserialize(data_slice)
57 }
58}
59
60impl ArrangeAccounts for ProcessWithdrawShips {
61 type ArrangedAccounts = ProcessWithdrawShipsInstructionAccounts;
62
63 fn arrange_accounts(
64 accounts: &[solana_instruction::AccountMeta],
65 ) -> Option<Self::ArrangedAccounts> {
66 let mut iter = accounts.iter();
67
68 let player_account = next_account(&mut iter)?;
69 let ship_staking_account = next_account(&mut iter)?;
70 let score_vars_account = next_account(&mut iter)?;
71 let score_vars_ship_account = next_account(&mut iter)?;
72 let player_atlas_token_account = next_account(&mut iter)?;
73 let ship_token_account_escrow = next_account(&mut iter)?;
74 let ship_token_account_return = next_account(&mut iter)?;
75 let toolkit_token_account_source = next_account(&mut iter)?;
76 let treasury_token_account = next_account(&mut iter)?;
77 let treasury_authority_account = next_account(&mut iter)?;
78 let escrow_authority = next_account(&mut iter)?;
79 let token_program = next_account(&mut iter)?;
80 let system_program = next_account(&mut iter)?;
81 let clock = next_account(&mut iter)?;
82 let ship_mint = next_account(&mut iter)?;
83 let toolkit_mint = next_account(&mut iter)?;
84
85 let remaining = iter.as_slice();
86
87 Some(ProcessWithdrawShipsInstructionAccounts {
88 player_account,
89 ship_staking_account,
90 score_vars_account,
91 score_vars_ship_account,
92 player_atlas_token_account,
93 ship_token_account_escrow,
94 ship_token_account_return,
95 toolkit_token_account_source,
96 treasury_token_account,
97 treasury_authority_account,
98 escrow_authority,
99 token_program,
100 system_program,
101 clock,
102 ship_mint,
103 toolkit_mint,
104 remaining: remaining.to_vec(),
105 })
106 }
107}