use {
crate::{
error::TokenError,
extension::{Extension, ExtensionType},
},
bytemuck::{Pod, Zeroable},
solana_program_error::ProgramResult,
solana_zk_sdk_pod::encryption::{
auth_encryption::PodAeCiphertext,
elgamal::{PodElGamalCiphertext, PodElGamalPubkey},
},
};
pub mod instruction;
#[derive(Clone, Copy, Debug, Default, PartialEq, Pod, Zeroable)]
#[repr(C)]
pub struct ConfidentialMintBurn {
pub confidential_supply: PodElGamalCiphertext,
pub decryptable_supply: PodAeCiphertext,
pub supply_elgamal_pubkey: PodElGamalPubkey,
pub pending_burn: PodElGamalCiphertext,
}
impl Extension for ConfidentialMintBurn {
const TYPE: ExtensionType = ExtensionType::ConfidentialMintBurn;
}
impl ConfidentialMintBurn {
pub fn closable(&self) -> ProgramResult {
if self.confidential_supply == PodElGamalCiphertext::default() {
Ok(())
} else {
Err(TokenError::MintHasSupply.into())
}
}
}