use marsh_api::{instruction::UpdateEvolver, loaders::*, state::Config};
use marsh_utils::*;
use solana_program::{
account_info::AccountInfo, entrypoint::ProgramResult, program_error::ProgramError,
};
pub fn process_update_evolver(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult {
let args = UpdateEvolver::try_from_bytes(data)?;
let [signer, config_info] = accounts else {
return Err(ProgramError::NotEnoughAccountKeys);
};
load_signer(signer)?;
load_config(config_info, true)?;
let mut config_data = config_info.data.borrow_mut();
let config = Config::try_from_bytes_mut(&mut config_data)?;
if config.evolver.ne(&signer.key) {
return Err(ProgramError::MissingRequiredSignature);
}
config.evolver = args.new_evolver;
Ok(())
}