dloom_flow/instructions/
update_dlmm_parameters.rs1use crate::{errors::DloomError, state::{DlmmParameter, DlmmParameters, ProtocolConfig}};
4use anchor_lang::prelude::*;
5use crate::{ParameterAction, ParameterList};
6
7pub fn handle_update_dlmm_parameters(
8 ctx: Context<UpdateDlmmParameters>,
9 list: ParameterList,
10 action: ParameterAction,
11 bin_step: u16,
12 fee_rate: u16,
13) -> Result<()> {
14 let params_account = &mut ctx.accounts.dlmm_parameters;
15 let target_list = match list {
16 ParameterList::Official => &mut params_account.official_parameters,
17 ParameterList::Community => &mut params_account.community_parameters,
18 };
19
20 let new_param = DlmmParameter { bin_step, fee_rate };
21
22 match action {
23 ParameterAction::Add => {
24 if !target_list.contains(&new_param) {
26 target_list.push(new_param);
27 }
28 }
29 ParameterAction::Remove => {
30 target_list.retain(|&p| p != new_param);
31 }
32 }
33
34 emit!(crate::events::DlmmParametersUpdated {
35 list,
36 action,
37 bin_step,
38 fee_rate,
39});
40
41 Ok(())
42}
43
44#[derive(Accounts)]
45pub struct UpdateDlmmParameters<'info> {
46 pub authority: Signer<'info>,
47 #[account(
48 seeds = [b"protocol_config"],
49 bump,
50 has_one = authority @ DloomError::Unauthorized
51 )]
52 pub protocol_config: Box<Account<'info, ProtocolConfig>>,
53
54 #[account(
55 mut,
56 seeds = [b"dlmm_parameters"],
57 bump,
58 has_one = authority @ DloomError::Unauthorized
59 )]
60 pub dlmm_parameters: Box<Account<'info, DlmmParameters>>,
61}