Skip to content

Commit a218966

Browse files
authored
feat: cli admin set pool base fee (#212)
1 parent e00b46e commit a218966

File tree

4 files changed

+75
-2
lines changed

4 files changed

+75
-2
lines changed

cli/src/args.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,5 +145,6 @@ pub enum AdminCommand {
145145
SetPreActivationSwapAddress(SetPreactivationSwapAddressParam),
146146
InitializeTokenBadge(InitializeTokenBadgeParams),
147147
CreateClaimProtocolFeeOperator(CreateClaimFeeOperatorParams),
148-
CloseclaimProtocolFeeOperator(CloseClaimFeeOperatorParams),
148+
CloseClaimProtocolFeeOperator(CloseClaimFeeOperatorParams),
149+
UpdateBaseFee(UpdateBaseFeeParams),
149150
}

cli/src/instructions/admin/mod.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,6 @@ pub use create_claim_protocol_fee_operator::*;
3939

4040
pub mod close_claim_protocol_fee_operator;
4141
pub use close_claim_protocol_fee_operator::*;
42+
43+
pub mod update_base_fee;
44+
pub use update_base_fee::*;
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
use crate::*;
2+
use anchor_client::solana_sdk::transaction::Transaction;
3+
4+
#[derive(Debug, Parser)]
5+
pub struct UpdateBaseFeeParams {
6+
pub lb_pair: Pubkey,
7+
pub base_fee_bps: u16,
8+
}
9+
10+
pub async fn execute_update_base_fee<C: Deref<Target = impl Signer> + Clone>(
11+
params: UpdateBaseFeeParams,
12+
program: &Program<C>,
13+
transaction_config: RpcSendTransactionConfig,
14+
) -> Result<()> {
15+
let UpdateBaseFeeParams {
16+
lb_pair,
17+
base_fee_bps,
18+
} = params;
19+
20+
let rpc_client = program.async_rpc();
21+
22+
let pair_account = rpc_client.get_account(&lb_pair).await?;
23+
24+
let lb_pair_state = LbPairAccount::deserialize(pair_account.data.as_ref())?.0;
25+
26+
let (base_factor, base_fee_power_factor) =
27+
compute_base_factor_from_fee_bps(lb_pair_state.bin_step, base_fee_bps)?;
28+
29+
let ix_data = UpdateBaseFeeParametersIxData(UpdateBaseFeeParametersIxArgs {
30+
fee_parameter: BaseFeeParameter {
31+
protocol_share: lb_pair_state.parameters.protocol_share,
32+
base_factor,
33+
base_fee_power_factor,
34+
},
35+
})
36+
.try_to_vec()?;
37+
38+
let event_authority = derive_event_authority_pda().0;
39+
40+
let accounts: [AccountMeta; UPDATE_BASE_FEE_PARAMETERS_IX_ACCOUNTS_LEN] =
41+
UpdateBaseFeeParametersKeys {
42+
lb_pair,
43+
admin: program.payer(),
44+
event_authority,
45+
program: dlmm_interface::ID,
46+
}
47+
.into();
48+
49+
let ix = Instruction {
50+
program_id: program.id(),
51+
data: ix_data,
52+
accounts: accounts.to_vec(),
53+
};
54+
55+
let request_builder = program.request();
56+
let signature = request_builder
57+
.instruction(ix)
58+
.send_with_spinner_and_config(transaction_config)
59+
.await;
60+
61+
println!("Update base fee. Signature: {:#?}", signature);
62+
63+
signature?;
64+
65+
Ok(())
66+
}

cli/src/main.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,10 +244,13 @@ async fn main() -> Result<()> {
244244
execute_create_claim_protocol_fee_operator(params, &program, transaction_config)
245245
.await?;
246246
}
247-
AdminCommand::CloseclaimProtocolFeeOperator(params) => {
247+
AdminCommand::CloseClaimProtocolFeeOperator(params) => {
248248
execute_close_claim_protocol_fee_operator(params, &program, transaction_config)
249249
.await?;
250250
}
251+
AdminCommand::UpdateBaseFee(params) => {
252+
execute_update_base_fee(params, &program, transaction_config).await?;
253+
}
251254
},
252255
};
253256

0 commit comments

Comments
 (0)