use crate::{constants::*, errors::*, state::*};
use anchor_lang::prelude::*;
#[derive(AnchorSerialize, AnchorDeserialize)]
pub struct ConfigUpdateParams {
pub admin: Option<Pubkey>,
pub paused: Option<bool>,
pub commission_fee: Option<u64>,
pub executor_fee_bps: Option<u64>,
pub core_team_bps: Option<u64>,
pub grace_period_seconds: Option<i64>,
pub fee_decay_seconds: Option<i64>,
}
#[derive(Accounts)]
pub struct ConfigUpdate<'info> {
#[account(
mut,
constraint = admin.key() == config.admin @ AntegenThreadError::InvalidAuthority
)]
pub admin: Signer<'info>,
#[account(
mut,
seeds = [SEED_CONFIG],
bump = config.bump
)]
pub config: Account<'info, ThreadConfig>,
}
pub fn config_update(ctx: Context<ConfigUpdate>, params: ConfigUpdateParams) -> Result<()> {
let config = &mut ctx.accounts.config;
if let Some(new_admin) = params.admin {
config.admin = new_admin;
msg!("Config admin updated to: {}", new_admin);
}
if let Some(paused) = params.paused {
config.paused = paused;
msg!("Config paused state updated to: {}", paused);
}
if let Some(commission_fee) = params.commission_fee {
config.commission_fee = commission_fee;
msg!("Commission fee updated to: {} lamports", commission_fee);
}
if let Some(executor_fee_bps) = params.executor_fee_bps {
require!(
executor_fee_bps <= 10000,
AntegenThreadError::InvalidFeePercentage
);
config.executor_fee_bps = executor_fee_bps;
msg!("Executor fee updated to: {} bps", executor_fee_bps);
}
if let Some(core_team_bps) = params.core_team_bps {
require!(
core_team_bps <= 10000,
AntegenThreadError::InvalidFeePercentage
);
config.core_team_bps = core_team_bps;
msg!("Core team fee updated to: {} bps", core_team_bps);
}
if let Some(grace_period) = params.grace_period_seconds {
require!(
grace_period >= 0 && grace_period <= 60, AntegenThreadError::InvalidFeePercentage
);
config.grace_period_seconds = grace_period;
msg!("Grace period updated to: {} seconds", grace_period);
}
if let Some(decay_period) = params.fee_decay_seconds {
require!(
decay_period >= 0 && decay_period <= 600, AntegenThreadError::InvalidFeePercentage
);
config.fee_decay_seconds = decay_period;
msg!("Fee decay period updated to: {} seconds", decay_period);
}
let total_fees = config.executor_fee_bps + config.core_team_bps;
require!(
total_fees == 10000,
AntegenThreadError::InvalidFeePercentage
);
Ok(())
}