#![no_std]
#[cfg(feature = "alloc")]
extern crate alloc;
use {
solana_address::Address,
solana_program_error::{ProgramError, ProgramResult},
};
pub mod instructions;
pub mod state;
solana_address::declare_id!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
const TOKEN_2022: Address = Address::from_str_const("TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb");
pub trait TokenInterface {
const ID: Address;
#[inline(always)]
fn verify(address: &Address) -> ProgramResult {
if address != &Self::ID {
return Err(incorrect_program_id());
}
Ok(())
}
}
pub struct TokenProgram;
impl TokenInterface for TokenProgram {
const ID: Address = crate::ID;
#[inline(always)]
fn verify(address: &Address) -> ProgramResult {
if address != &Self::ID && address != &TOKEN_2022 {
return Err(incorrect_program_id());
}
Ok(())
}
}
#[doc(hidden)]
#[cold]
fn incorrect_program_id() -> ProgramError {
ProgramError::IncorrectProgramId
}