carbon_score_decoder/instructions/
process_harvest.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 ProcessHarvest {
11 pub staking_bump: u8,
12 pub scorevars_ship_bump: u8,
13 pub treasury_bump: u8,
14 pub treasury_auth_bump: u8,
15}
16
17#[derive(Debug, Clone, PartialEq)]
18#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
19pub struct ProcessHarvestInstructionAccounts {
20 pub player_account: solana_pubkey::Pubkey,
21 pub ship_staking_account: solana_pubkey::Pubkey,
22 pub score_vars_ship_account: solana_pubkey::Pubkey,
23 pub player_atlas_token_account: solana_pubkey::Pubkey,
24 pub treasury_token_account: solana_pubkey::Pubkey,
25 pub treasury_authority_account: solana_pubkey::Pubkey,
26 pub token_program: solana_pubkey::Pubkey,
27 pub clock: solana_pubkey::Pubkey,
28 pub ship_mint: solana_pubkey::Pubkey,
29 pub remaining: Vec<solana_instruction::AccountMeta>,
30}
31
32impl ProcessHarvest {
33 pub fn decode(data: &[u8]) -> Option<Self> {
34 if data.len() < 8 {
35 return None;
36 }
37 let discriminator = &data[0..8];
38 if discriminator != &[191, 70, 102, 41, 226, 36, 127, 160] {
39 return None;
40 }
41
42 let data_slice = data;
43
44 let data_slice = &data_slice[8..];
45
46 Self::deserialize(data_slice)
47 }
48}
49
50impl ArrangeAccounts for ProcessHarvest {
51 type ArrangedAccounts = ProcessHarvestInstructionAccounts;
52
53 fn arrange_accounts(
54 accounts: &[solana_instruction::AccountMeta],
55 ) -> Option<Self::ArrangedAccounts> {
56 let mut iter = accounts.iter();
57
58 let player_account = next_account(&mut iter)?;
59 let ship_staking_account = next_account(&mut iter)?;
60 let score_vars_ship_account = next_account(&mut iter)?;
61 let player_atlas_token_account = next_account(&mut iter)?;
62 let treasury_token_account = next_account(&mut iter)?;
63 let treasury_authority_account = next_account(&mut iter)?;
64 let token_program = next_account(&mut iter)?;
65 let clock = next_account(&mut iter)?;
66 let ship_mint = next_account(&mut iter)?;
67
68 let remaining = iter.as_slice();
69
70 Some(ProcessHarvestInstructionAccounts {
71 player_account,
72 ship_staking_account,
73 score_vars_ship_account,
74 player_atlas_token_account,
75 treasury_token_account,
76 treasury_authority_account,
77 token_program,
78 clock,
79 ship_mint,
80 remaining: remaining.to_vec(),
81 })
82 }
83}