use marsh_api::{instruction::Evolve, loaders::*, state::Config};
use marsh_utils::*;
use solana_program::{
account_info::AccountInfo, entrypoint::ProgramResult, program_error::ProgramError,
};
pub fn process_evolve(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult {
let args = Evolve::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.evolvable = args.evolvable as u64;
Ok(())
}