upgrade to new version of steel

This commit is contained in:
Hardhat Chad
2024-09-26 03:50:36 +00:00
parent ddc1dc73e7
commit 609349a5aa
14 changed files with 120 additions and 125 deletions

View File

@@ -192,34 +192,23 @@ pub fn load_any_proof(info: &AccountInfo<'_>, is_writable: bool) -> Result<(), P
Ok(())
}
/// Errors if:
/// - Owner is not Ore program.
/// - Address does not match the expected address.
/// - Data is empty.
/// - Data cannot deserialize into a treasury account.
/// - Expected to be writable, but is not.
pub fn load_treasury(info: &AccountInfo<'_>, is_writable: bool) -> Result<(), ProgramError> {
if info.owner.ne(&crate::id()) {
return Err(ProgramError::InvalidAccountOwner);
pub trait OreAccountInfoValidation {
fn is_config(&self) -> Result<&Self, ProgramError>;
fn is_treasury(&self) -> Result<&Self, ProgramError>;
}
impl<'a> OreAccountInfoValidation for AccountInfo<'a> {
fn is_config(&self) -> Result<&Self, ProgramError> {
self.has_address(&CONFIG_ADDRESS)?
.has_owner(&crate::ID)?
.is_type::<Treasury>()
}
if info.key.ne(&TREASURY_ADDRESS) {
return Err(ProgramError::InvalidSeeds);
fn is_treasury(&self) -> Result<&Self, ProgramError> {
self.has_address(&TREASURY_ADDRESS)?
.has_owner(&crate::ID)?
.is_type::<Treasury>()
}
if info.data_is_empty() {
return Err(ProgramError::UninitializedAccount);
}
if info.data.borrow()[0].ne(&(Treasury::discriminator() as u8)) {
return Err(solana_program::program_error::ProgramError::InvalidAccountData);
}
if is_writable && !info.is_writable {
return Err(ProgramError::InvalidAccountData);
}
Ok(())
}
/// Errors if:

View File

@@ -1,5 +1,3 @@
use bytemuck::{Pod, Zeroable};
use solana_program::pubkey::Pubkey;
use steel::*;
use crate::consts::BUS;
@@ -30,4 +28,25 @@ pub fn bus_pda(id: u8) -> (Pubkey, u8) {
Pubkey::find_program_address(&[BUS, &[id]], &crate::id())
}
impl<'a> From<&'a [u8]> for &'a Bus {
fn from(value: &'a [u8]) -> &'a Bus {
Bus::try_from_bytes(value).unwrap()
}
}
impl<'a> From<*const u8> for &'a Bus {
fn from(value: *const u8) -> &'a Bus {
unsafe {
if Bus::discriminator().ne(&value.add(0).read()) {
panic!("");
}
bytemuck::try_from_bytes::<Bus>(std::slice::from_raw_parts(
value.add(8),
std::mem::size_of::<Bus>(),
))
.expect("")
}
}
}
account!(OreAccount, Bus);

View File

@@ -1,5 +1,3 @@
use bytemuck::{Pod, Zeroable};
use solana_program::pubkey::Pubkey;
use steel::*;
use crate::consts::CONFIG;