use crate::errors::MultisigError;
use anchor_lang::prelude::*;
use anchor_lang::solana_program::pubkey;
use crate::state::*;
#[cfg(not(feature = "testing"))]
const INITIALIZER: Pubkey = pubkey!("HM5y4mz3Bt9JY9mr1hkyhnvqxSH4H2u2451j7Hc2dtvK");
#[cfg(feature = "testing")]
const INITIALIZER: Pubkey = pubkey!("BrQAbGdWQ9YUHmWWgKFdFe4miTURH71jkYFPXfaosqDv");
#[derive(AnchorSerialize, AnchorDeserialize)]
pub struct ProgramConfigInitArgs {
pub authority: Pubkey,
pub multisig_creation_fee: u64,
pub treasury: Pubkey,
}
#[derive(Accounts)]
pub struct ProgramConfigInit<'info> {
#[account(
init,
payer = initializer,
space = 8 + ProgramConfig::INIT_SPACE,
seeds = [SEED_PREFIX, SEED_PROGRAM_CONFIG],
bump
)]
pub program_config: Account<'info, ProgramConfig>,
#[account(
mut,
address = INITIALIZER @ MultisigError::Unauthorized
)]
pub initializer: Signer<'info>,
pub system_program: Program<'info, System>,
}
impl ProgramConfigInit<'_> {
pub fn program_config_init(ctx: Context<Self>, args: ProgramConfigInitArgs) -> Result<()> {
let program_config = &mut ctx.accounts.program_config;
program_config.authority = args.authority;
program_config.multisig_creation_fee = args.multisig_creation_fee;
program_config.treasury = args.treasury;
program_config.invariant()?;
Ok(())
}
}