use solana_program::{
account_info::AccountInfo, entrypoint::ProgramResult, msg,
program_error::ProgramError, pubkey::Pubkey,
};
use crate::{
error::DlpError::Unauthorized,
processor::utils::{
loaders::{
load_initialized_pda, load_program_upgrade_authority, load_signer,
},
pda::close_pda,
},
validator_fees_vault_seeds_from_validator,
};
pub fn process_close_validator_fees_vault(
_program_id: &Pubkey,
accounts: &[AccountInfo],
_data: &[u8],
) -> ProgramResult {
let [payer, admin, delegation_program_data, validator_identity, validator_fees_vault] =
accounts
else {
return Err(ProgramError::NotEnoughAccountKeys);
};
load_signer(payer, "payer")?;
load_signer(admin, "admin")?;
let admin_pubkey =
load_program_upgrade_authority(&crate::ID, delegation_program_data)?
.ok_or(Unauthorized)?;
if !admin.key.eq(&admin_pubkey) {
msg!(
"Expected admin pubkey: {} but got {}",
admin_pubkey,
admin.key
);
return Err(Unauthorized.into());
}
load_initialized_pda(
validator_fees_vault,
validator_fees_vault_seeds_from_validator!(validator_identity.key),
&crate::id(),
true,
"validator fees vault",
)?;
close_pda(validator_fees_vault, validator_identity)?;
Ok(())
}