Skip to main content

antegen_thread_program/instructions/
config_init.rs

1use crate::{constants::*, state::*};
2use anchor_lang::prelude::*;
3
4/// Accounts required by the `config_initialize` instruction.
5#[derive(Accounts)]
6pub struct ConfigInit<'info> {
7    /// The admin initializing the config
8    #[account(mut)]
9    pub admin: Signer<'info>,
10
11    /// The config account to initialize
12    #[account(
13        init,
14        payer = admin,
15        space = ThreadConfig::space(),
16        seeds = [SEED_CONFIG],
17        bump
18    )]
19    pub config: Account<'info, ThreadConfig>,
20
21    /// System program
22    pub system_program: Program<'info, System>,
23}
24
25pub fn config_init(ctx: Context<ConfigInit>) -> Result<()> {
26    let config = &mut ctx.accounts.config;
27    let admin = &ctx.accounts.admin;
28
29    // Initialize with default values
30    config.version = 1;
31    config.bump = ctx.bumps.config;
32    config.admin = admin.key();
33    config.paused = false;
34    config.commission_fee = 1000; // 1000 lamports base commission
35    config.executor_fee_bps = 9000; // 90% to executor
36    config.core_team_bps = 1000; // 10% to core team
37    config.grace_period_seconds = 5; // 5 second grace period
38    config.fee_decay_seconds = 295; // 295 second decay (total 300s = 5 minutes)
39
40    msg!("Thread config initialized with admin: {}", admin.key());
41
42    Ok(())
43}