From 8d743d4f63f68e13243af36ede89bdde810f2caf Mon Sep 17 00:00:00 2001 From: Hardhat Chad Date: Thu, 15 Feb 2024 19:28:43 +0000 Subject: [PATCH] AccountDeserialize --- src/lib.rs | 2 +- src/loaders.rs | 1 + src/processor/claim.rs | 1 + src/processor/create_proof.rs | 1 + src/processor/initialize.rs | 1 + src/processor/mine.rs | 1 + src/processor/reset.rs | 1 + src/processor/update_admin.rs | 2 +- src/processor/update_difficulty.rs | 4 +++- src/utils.rs | 17 +++++++++++------ tests/test_initialize.rs | 1 + tests/test_mine.rs | 1 + tests/test_reset.rs | 1 + 13 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 7bf8d70..806019b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -3,7 +3,7 @@ pub mod instruction; mod loaders; mod processor; pub mod state; -mod utils; +pub mod utils; use processor::*; use solana_program::{ diff --git a/src/loaders.rs b/src/loaders.rs index 233c669..5cf797e 100644 --- a/src/loaders.rs +++ b/src/loaders.rs @@ -6,6 +6,7 @@ use spl_token::state::Mint; use crate::{ state::{Bus, Proof}, + utils::AccountDeserialize, BUS_COUNT, MINT_ADDRESS, TREASURY_ADDRESS, }; diff --git a/src/processor/claim.rs b/src/processor/claim.rs index b92abb9..41b4dc7 100644 --- a/src/processor/claim.rs +++ b/src/processor/claim.rs @@ -8,6 +8,7 @@ use crate::{ instruction::ClaimArgs, loaders::*, state::{Proof, Treasury}, + utils::AccountDeserialize, TREASURY, }; diff --git a/src/processor/create_proof.rs b/src/processor/create_proof.rs index 7b1509c..0cac262 100644 --- a/src/processor/create_proof.rs +++ b/src/processor/create_proof.rs @@ -9,6 +9,7 @@ use crate::{ instruction::CreateProofArgs, loaders::*, state::Proof, + utils::AccountDeserialize, utils::{create_pda, Discriminator}, PROOF, }; diff --git a/src/processor/initialize.rs b/src/processor/initialize.rs index a7490ac..1348aff 100644 --- a/src/processor/initialize.rs +++ b/src/processor/initialize.rs @@ -15,6 +15,7 @@ use crate::{ loaders::*, state::{Bus, Treasury}, utils::create_pda, + utils::AccountDeserialize, utils::Discriminator, BUS, BUS_COUNT, INITIAL_DIFFICULTY, INITIAL_REWARD_RATE, MINT, MINT_ADDRESS, TOKEN_DECIMALS, TREASURY, TREASURY_ADDRESS, diff --git a/src/processor/mine.rs b/src/processor/mine.rs index 8606448..0898d9e 100644 --- a/src/processor/mine.rs +++ b/src/processor/mine.rs @@ -17,6 +17,7 @@ use crate::{ instruction::MineArgs, loaders::*, state::{Bus, Proof, Treasury}, + utils::AccountDeserialize, EPOCH_DURATION, }; diff --git a/src/processor/reset.rs b/src/processor/reset.rs index d7eb1fd..c32cc7e 100644 --- a/src/processor/reset.rs +++ b/src/processor/reset.rs @@ -7,6 +7,7 @@ use crate::{ error::OreError, loaders::*, state::{Bus, Treasury}, + utils::AccountDeserialize, BUS_COUNT, BUS_EPOCH_REWARDS, EPOCH_DURATION, MAX_EPOCH_REWARDS, SMOOTHING_FACTOR, TARGET_EPOCH_REWARDS, TREASURY, }; diff --git a/src/processor/update_admin.rs b/src/processor/update_admin.rs index 3e4df75..3a91ad9 100644 --- a/src/processor/update_admin.rs +++ b/src/processor/update_admin.rs @@ -3,7 +3,7 @@ use solana_program::{ pubkey::Pubkey, }; -use crate::{instruction::UpdateAdminArgs, loaders::*, state::Treasury}; +use crate::{instruction::UpdateAdminArgs, loaders::*, state::Treasury, utils::AccountDeserialize}; pub fn process_update_admin<'a, 'info>( _program_id: &Pubkey, diff --git a/src/processor/update_difficulty.rs b/src/processor/update_difficulty.rs index 2968a3e..6e32cf4 100644 --- a/src/processor/update_difficulty.rs +++ b/src/processor/update_difficulty.rs @@ -3,7 +3,9 @@ use solana_program::{ pubkey::Pubkey, }; -use crate::{instruction::UpdateDifficultyArgs, loaders::*, state::Treasury}; +use crate::{ + instruction::UpdateDifficultyArgs, loaders::*, state::Treasury, utils::AccountDeserialize, +}; pub fn process_update_difficulty<'a, 'info>( _program_id: &Pubkey, diff --git a/src/utils.rs b/src/utils.rs index 1200b31..8f3967c 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -1,12 +1,12 @@ use num_enum::{IntoPrimitive, TryFromPrimitive}; use solana_program::{ - account_info::AccountInfo, entrypoint::ProgramResult, pubkey::Pubkey, rent::Rent, - sysvar::Sysvar, + account_info::AccountInfo, entrypoint::ProgramResult, program_error::ProgramError, + pubkey::Pubkey, rent::Rent, sysvar::Sysvar, }; /// Creates a new pda #[inline(always)] -pub fn create_pda<'a, 'info>( +pub(crate) fn create_pda<'a, 'info>( target_account: &'a AccountInfo<'info>, owner: &Pubkey, space: usize, @@ -56,11 +56,16 @@ macro_rules! impl_to_bytes { }; } +pub trait AccountDeserialize { + fn try_from_bytes(data: &[u8]) -> Result<&Self, ProgramError>; + fn try_from_bytes_mut(data: &mut [u8]) -> Result<&mut Self, ProgramError>; +} + #[macro_export] macro_rules! impl_account_from_bytes { ($struct_name:ident) => { - impl $struct_name { - pub fn try_from_bytes( + impl crate::utils::AccountDeserialize for $struct_name { + fn try_from_bytes( data: &[u8], ) -> Result<&Self, solana_program::program_error::ProgramError> { if (Self::discriminator() as u8).ne(&data[0]) { @@ -70,7 +75,7 @@ macro_rules! impl_account_from_bytes { solana_program::program_error::ProgramError::InvalidAccountData, )) } - pub fn try_from_bytes_mut( + fn try_from_bytes_mut( data: &mut [u8], ) -> Result<&mut Self, solana_program::program_error::ProgramError> { if (Self::discriminator() as u8).ne(&data[0]) { diff --git a/tests/test_initialize.rs b/tests/test_initialize.rs index aa879c0..0893db2 100644 --- a/tests/test_initialize.rs +++ b/tests/test_initialize.rs @@ -1,6 +1,7 @@ use ore::{ instruction::{InitializeArgs, OreInstruction}, state::{Bus, Treasury}, + utils::AccountDeserialize, BUS, BUS_COUNT, INITIAL_DIFFICULTY, INITIAL_REWARD_RATE, MINT, TREASURY, }; use solana_program::{ diff --git a/tests/test_mine.rs b/tests/test_mine.rs index cbd3204..11b65e6 100644 --- a/tests/test_mine.rs +++ b/tests/test_mine.rs @@ -3,6 +3,7 @@ use std::str::FromStr; use ore::{ instruction::{CreateProofArgs, MineArgs, OreInstruction}, state::{Proof, Treasury}, + utils::AccountDeserialize, BUS, PROOF, TREASURY, }; use solana_program::{ diff --git a/tests/test_reset.rs b/tests/test_reset.rs index a8bb6cb..501b7bb 100644 --- a/tests/test_reset.rs +++ b/tests/test_reset.rs @@ -3,6 +3,7 @@ use std::str::FromStr; use ore::{ instruction::OreInstruction, state::{Bus, Treasury}, + utils::AccountDeserialize, BUS, BUS_COUNT, BUS_EPOCH_REWARDS, INITIAL_DIFFICULTY, INITIAL_REWARD_RATE, MAX_EPOCH_REWARDS, MINT, TREASURY, };