use solana_instruction::AccountMeta;
use solana_pubkey::Pubkey;
use crate::utils::TokenDefaultAccounts;
#[derive(Debug, Clone)]
pub struct UpdateMintMetaConfig {
pub fee_payer: Option<Pubkey>,
pub authority: Option<Pubkey>,
pub in_merkle_tree: Pubkey,
pub in_output_queue: Pubkey,
pub out_output_queue: Pubkey,
pub with_cpi_context: bool,
}
pub fn get_update_compressed_mint_instruction_account_metas(
config: UpdateMintMetaConfig,
) -> Vec<AccountMeta> {
let default_pubkeys = TokenDefaultAccounts::default();
let mut metas = Vec::new();
metas.push(AccountMeta::new_readonly(
default_pubkeys.light_system_program,
false,
));
if let Some(authority) = config.authority {
metas.push(AccountMeta::new_readonly(authority, true));
}
if config.with_cpi_context {
} else {
if let Some(fee_payer) = config.fee_payer {
metas.push(AccountMeta::new(fee_payer, true));
}
metas.push(AccountMeta::new_readonly(
default_pubkeys.cpi_authority_pda,
false,
));
metas.push(AccountMeta::new_readonly(
default_pubkeys.registered_program_pda,
false,
));
metas.push(AccountMeta::new_readonly(
default_pubkeys.account_compression_authority,
false,
));
metas.push(AccountMeta::new_readonly(
default_pubkeys.account_compression_program,
false,
));
metas.push(AccountMeta::new_readonly(
default_pubkeys.system_program,
false,
));
metas.push(AccountMeta::new(config.in_merkle_tree, false));
metas.push(AccountMeta::new(config.in_output_queue, false));
metas.push(AccountMeta::new(config.out_output_queue, false));
}
metas
}