initialize_immutable_owner.rs 760 B

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