antegen_thread_program/instructions/
config_update.rs1use crate::{constants::*, errors::*, state::*};
2use anchor_lang::prelude::*;
3
4#[derive(AnchorSerialize, AnchorDeserialize, Default)]
6pub struct ConfigUpdateParams {
7 pub admin: Option<Pubkey>,
8 pub paused: Option<bool>,
9 pub commission_fee: Option<u64>,
10 pub executor_fee_bps: Option<u64>,
11 pub core_team_bps: Option<u64>,
12 pub grace_period_seconds: Option<i64>,
13 pub fee_decay_seconds: Option<i64>,
14}
15
16#[derive(Accounts)]
18pub struct ConfigUpdate<'info> {
19 #[account(
21 mut,
22 constraint = admin.key() == config.admin @ AntegenThreadError::InvalidAuthority
23 )]
24 pub admin: Signer<'info>,
25
26 #[account(
28 mut,
29 seeds = [SEED_CONFIG],
30 bump = config.bump
31 )]
32 pub config: Account<'info, ThreadConfig>,
33}
34
35pub fn config_update(ctx: Context<ConfigUpdate>, params: ConfigUpdateParams) -> Result<()> {
36 let config = &mut ctx.accounts.config;
37
38 if let Some(new_admin) = params.admin {
40 config.admin = new_admin;
41 msg!("Config admin updated to: {}", new_admin);
42 }
43
44 if let Some(paused) = params.paused {
46 config.paused = paused;
47 msg!("Config paused state updated to: {}", paused);
48 }
49
50 if let Some(commission_fee) = params.commission_fee {
52 config.commission_fee = commission_fee;
53 msg!("Commission fee updated to: {} lamports", commission_fee);
54 }
55
56 if let Some(executor_fee_bps) = params.executor_fee_bps {
58 require!(
59 executor_fee_bps <= 10000,
60 AntegenThreadError::InvalidFeePercentage
61 );
62 config.executor_fee_bps = executor_fee_bps;
63 msg!("Executor fee updated to: {} bps", executor_fee_bps);
64 }
65
66 if let Some(core_team_bps) = params.core_team_bps {
67 require!(
68 core_team_bps <= 10000,
69 AntegenThreadError::InvalidFeePercentage
70 );
71 config.core_team_bps = core_team_bps;
72 msg!("Core team fee updated to: {} bps", core_team_bps);
73 }
74
75 if let Some(grace_period) = params.grace_period_seconds {
77 require!(
78 grace_period >= 0 && grace_period <= 60, AntegenThreadError::InvalidFeePercentage
80 );
81 config.grace_period_seconds = grace_period;
82 msg!("Grace period updated to: {} seconds", grace_period);
83 }
84
85 if let Some(decay_period) = params.fee_decay_seconds {
86 require!(
87 decay_period >= 0 && decay_period <= 600, AntegenThreadError::InvalidFeePercentage
89 );
90 config.fee_decay_seconds = decay_period;
91 msg!("Fee decay period updated to: {} seconds", decay_period);
92 }
93
94 let total_fees = config.executor_fee_bps + config.core_team_bps;
96 require!(
97 total_fees == 10000,
98 AntegenThreadError::InvalidFeePercentage
99 );
100
101 Ok(())
102}