squads_multisig_program/instructions/
program_config.rs1use anchor_lang::prelude::*;
2
3use crate::errors::MultisigError;
4use crate::state::*;
5
6#[derive(AnchorSerialize, AnchorDeserialize)]
7pub struct ProgramConfigSetAuthorityArgs {
8 pub new_authority: Pubkey,
9}
10
11#[derive(AnchorSerialize, AnchorDeserialize)]
12pub struct ProgramConfigSetMultisigCreationFeeArgs {
13 pub new_multisig_creation_fee: u64,
14}
15
16#[derive(AnchorSerialize, AnchorDeserialize)]
17pub struct ProgramConfigSetTreasuryArgs {
18 pub new_treasury: Pubkey,
19}
20
21#[derive(Accounts)]
22pub struct ProgramConfig<'info> {
23 #[account(
24 mut,
25 seeds = [SEED_PREFIX, SEED_PROGRAM_CONFIG],
26 bump,
27 )]
28 pub program_config: Account<'info, crate::state::ProgramConfig>,
29
30 pub authority: Signer<'info>,
31}
32
33impl ProgramConfig<'_> {
34 fn validate(&self) -> Result<()> {
35 let Self {
36 program_config,
37 authority,
38 } = self;
39
40 require_keys_eq!(
42 program_config.authority,
43 authority.key(),
44 MultisigError::Unauthorized
45 );
46
47 Ok(())
48 }
49
50 #[access_control(ctx.accounts.validate())]
51 pub fn program_config_set_authority(
52 ctx: Context<Self>,
53 args: ProgramConfigSetAuthorityArgs,
54 ) -> Result<()> {
55 let program_config = &mut ctx.accounts.program_config;
56
57 program_config.authority = args.new_authority;
58
59 program_config.invariant()?;
60
61 Ok(())
62 }
63
64 #[access_control(ctx.accounts.validate())]
65 pub fn program_config_set_multisig_creation_fee(
66 ctx: Context<Self>,
67 args: ProgramConfigSetMultisigCreationFeeArgs,
68 ) -> Result<()> {
69 let program_config = &mut ctx.accounts.program_config;
70
71 program_config.multisig_creation_fee = args.new_multisig_creation_fee;
72
73 program_config.invariant()?;
74
75 Ok(())
76 }
77
78 #[access_control(ctx.accounts.validate())]
79 pub fn program_config_set_treasury(
80 ctx: Context<Self>,
81 args: ProgramConfigSetTreasuryArgs,
82 ) -> Result<()> {
83 let program_config = &mut ctx.accounts.program_config;
84
85 program_config.treasury = args.new_treasury;
86
87 program_config.invariant()?;
88
89 Ok(())
90 }
91}