initialize_immutable_owner.rs 776 B

123456789101112131415161718192021
  1. use {
  2. pinocchio::{account_info::AccountInfo, program_error::ProgramError, ProgramResult},
  3. spl_token_interface::{
  4. error::TokenError,
  5. state::{account::Account, load_unchecked, Initializable},
  6. },
  7. };
  8. #[inline(always)]
  9. pub fn process_initialize_immutable_owner(accounts: &[AccountInfo]) -> ProgramResult {
  10. let token_account_info = accounts.first().ok_or(ProgramError::NotEnoughAccountKeys)?;
  11. // SAFETY: single immutable borrow to `token_account_info` account data.
  12. let account = unsafe { load_unchecked::<Account>(token_account_info.borrow_data_unchecked())? };
  13. if account.is_initialized()? {
  14. return Err(TokenError::AlreadyInUse.into());
  15. }
  16. // Please upgrade to SPL Token 2022 for immutable owner support.
  17. Ok(())
  18. }