Browse Source

Streamline initialize check

febo 5 months ago
parent
commit
129f93c6b6

+ 3 - 15
interface/src/state/account.rs

@@ -1,5 +1,5 @@
 use {
-    super::{account_state::AccountState, validate_option, COption, Initializable, Transmutable},
+    super::{account_state::AccountState, COption, Initializable, Transmutable},
     pinocchio::{program_error::ProgramError, pubkey::Pubkey},
 };
 
@@ -142,7 +142,7 @@ impl Account {
 
     #[inline(always)]
     pub fn is_frozen(&self) -> Result<bool, ProgramError> {
-        Ok(AccountState::try_from(self.state)? == AccountState::Frozen)
+        AccountState::try_from(self.state).map(|state| state == AccountState::Frozen)
     }
 
     #[inline(always)]
@@ -158,18 +158,6 @@ impl Transmutable for Account {
 impl Initializable for Account {
     #[inline(always)]
     fn is_initialized(&self) -> Result<bool, ProgramError> {
-        // delegate
-        validate_option(self.delegate.0)?;
-
-        // state
-        let state = AccountState::try_from(self.state)?;
-
-        // is_native
-        validate_option(self.is_native)?;
-
-        // close authority
-        validate_option(self.close_authority.0)?;
-
-        Ok(state != AccountState::Uninitialized)
+        AccountState::try_from(self.state).map(|state| state != AccountState::Uninitialized)
     }
 }

+ 6 - 15
interface/src/state/mint.rs

@@ -1,5 +1,5 @@
 use {
-    super::{validate_option, COption, Initializable, Transmutable},
+    super::{COption, Initializable, Transmutable},
     pinocchio::{program_error::ProgramError, pubkey::Pubkey},
 };
 
@@ -92,19 +92,10 @@ impl Transmutable for Mint {
 impl Initializable for Mint {
     #[inline(always)]
     fn is_initialized(&self) -> Result<bool, ProgramError> {
-        // mint_authority
-        validate_option(self.mint_authority.0)?;
-
-        // is_initialized
-        let initialized = match self.is_initialized {
-            0 => false,
-            1 => true,
-            _ => return Err(ProgramError::InvalidAccountData),
-        };
-
-        // freeze_authority
-        validate_option(self.freeze_authority.0)?;
-
-        Ok(initialized)
+        match self.is_initialized {
+            0 => Ok(false),
+            1 => Ok(true),
+            _ => Err(ProgramError::InvalidAccountData),
+        }
     }
 }

+ 1 - 15
interface/src/state/mod.rs

@@ -1,4 +1,4 @@
-use pinocchio::{program_error::ProgramError, ProgramResult};
+use pinocchio::program_error::ProgramError;
 
 pub mod account;
 pub mod account_state;
@@ -21,10 +21,6 @@ pub trait Transmutable {
 }
 
 /// Trait to represent a type that can be initialized.
-///
-/// Types implementing this trait must provide a method to check if the object
-/// is initialized, i.e., if all required fields are set to valid values and
-/// they represent an initialized state.
 pub trait Initializable {
     /// Return `true` if the object is initialized.
     fn is_initialized(&self) -> Result<bool, ProgramError>;
@@ -97,13 +93,3 @@ pub unsafe fn load_mut_unchecked<T: Transmutable>(
     }
     Ok(&mut *(bytes.as_mut_ptr() as *mut T))
 }
-
-/// Validates a `COption` mask value.
-#[inline(always)]
-const fn validate_option(value: [u8; 4]) -> ProgramResult {
-    if u32::from_le_bytes(value) > 1 {
-        Err(ProgramError::InvalidAccountData)
-    } else {
-        Ok(())
-    }
-}

+ 0 - 1
interface/src/state/multisig.rs

@@ -46,7 +46,6 @@ impl Transmutable for Multisig {
 impl Initializable for Multisig {
     #[inline(always)]
     fn is_initialized(&self) -> Result<bool, ProgramError> {
-        // is_initialized
         match self.is_initialized {
             0 => Ok(false),
             1 => Ok(true),