From 3238722ade1b3d19b794edfa74f31f7addc4aa73 Mon Sep 17 00:00:00 2001 From: benedettadavico Date: Tue, 27 Aug 2024 14:55:47 +0200 Subject: [PATCH 1/5] WIP --- .../mixnode/settings/update_cost_params.rs | 35 ++++++++++++++----- .../mixnet/operators/mixnodes/settings/mod.rs | 2 +- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/common/commands/src/validator/mixnet/operators/mixnode/settings/update_cost_params.rs b/common/commands/src/validator/mixnet/operators/mixnode/settings/update_cost_params.rs index 0616a81d33..2b64dbfdf4 100644 --- a/common/commands/src/validator/mixnet/operators/mixnode/settings/update_cost_params.rs +++ b/common/commands/src/validator/mixnet/operators/mixnode/settings/update_cost_params.rs @@ -5,15 +5,15 @@ use crate::context::SigningClient; use clap::Parser; use cosmwasm_std::Uint128; use log::info; -use nym_mixnet_contract_common::{MixNodeCostParams, Percent}; -use nym_validator_client::nyxd::contract_traits::MixnetSigningClient; +use nym_mixnet_contract_common::{MixId, MixNodeCostParams, Percent}; +use nym_validator_client::nyxd::contract_traits::{MixnetQueryClient, MixnetSigningClient}; use nym_validator_client::nyxd::CosmWasmCoin; #[derive(Debug, Parser)] pub struct Args { #[clap( long, - help = "input your profit margin as follows; (so it would be 10, rather than 0.1)" + help = "input your profit margin as follows; (so it would be 20, rather than 0.2)" )] pub profit_margin_percent: Option, @@ -24,14 +24,33 @@ pub struct Args { pub interval_operating_cost: Option, } -pub async fn update_cost_params(args: Args, client: SigningClient) { +pub async fn update_cost_params(args: Args, client: SigningClient, mix_id: MixId) { let denom = client.current_chain_details().mix_denom.base.as_str(); + fn convert_to_percent(value: u64) -> Percent { + Percent::from_percentage_value(value) + .expect("Invalid value") + } + + let default_profit_margin: Percent = convert_to_percent(20); + + let profit_margin_percent = match client.get_mixnode_rewarding_details(mix_id).await { + Ok(details) => details.rewarding_details + .map(|rd| rd.cost_params.profit_margin_percent) + .unwrap_or(default_profit_margin), + Err(_) => { + eprintln!("Failed to obtain profit margin from node, using default value of 20%"); + default_profit_margin + } + }; + + let profit_margin_value = args.profit_margin_percent + .map(|pm| convert_to_percent(pm as u64)) + .unwrap_or(profit_margin_percent); + + let cost_params = MixNodeCostParams { - profit_margin_percent: Percent::from_percentage_value( - args.profit_margin_percent.unwrap_or(10) as u64, - ) - .unwrap(), + profit_margin_percent: profit_margin_value, interval_operating_cost: CosmWasmCoin { denom: denom.into(), amount: Uint128::new(args.interval_operating_cost.unwrap_or(40_000_000)), diff --git a/tools/nym-cli/src/validator/mixnet/operators/mixnodes/settings/mod.rs b/tools/nym-cli/src/validator/mixnet/operators/mixnodes/settings/mod.rs index a5d5c02883..8628e90c9e 100644 --- a/tools/nym-cli/src/validator/mixnet/operators/mixnodes/settings/mod.rs +++ b/tools/nym-cli/src/validator/mixnet/operators/mixnodes/settings/mod.rs @@ -14,7 +14,7 @@ pub(crate) async fn execute( nym_cli_commands::validator::mixnet::operators::mixnode::settings::update_config::update_config(args, create_signing_client(global_args, network_details)?).await } nym_cli_commands::validator::mixnet::operators::mixnode::settings::MixnetOperatorsMixnodeSettingsCommands::UpdateCostParameters(args) => { - nym_cli_commands::validator::mixnet::operators::mixnode::settings::update_cost_params::update_cost_params(args, create_signing_client(global_args, network_details)?).await + nym_cli_commands::validator::mixnet::operators::mixnode::settings::update_cost_params::update_cost_params(args, create_signing_client(global_args, network_details), mix_id?).await } _ => unreachable!(), } From 9a43d1079a33eb5c789df21d6774621ebdf87f7c Mon Sep 17 00:00:00 2001 From: benedettadavico Date: Tue, 27 Aug 2024 15:15:45 +0200 Subject: [PATCH 2/5] cargo fmt --- .../mixnode/settings/update_cost_params.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/common/commands/src/validator/mixnet/operators/mixnode/settings/update_cost_params.rs b/common/commands/src/validator/mixnet/operators/mixnode/settings/update_cost_params.rs index 2b64dbfdf4..06cc022d52 100644 --- a/common/commands/src/validator/mixnet/operators/mixnode/settings/update_cost_params.rs +++ b/common/commands/src/validator/mixnet/operators/mixnode/settings/update_cost_params.rs @@ -28,14 +28,14 @@ pub async fn update_cost_params(args: Args, client: SigningClient, mix_id: MixId let denom = client.current_chain_details().mix_denom.base.as_str(); fn convert_to_percent(value: u64) -> Percent { - Percent::from_percentage_value(value) - .expect("Invalid value") + Percent::from_percentage_value(value).expect("Invalid value") } let default_profit_margin: Percent = convert_to_percent(20); - + let profit_margin_percent = match client.get_mixnode_rewarding_details(mix_id).await { - Ok(details) => details.rewarding_details + Ok(details) => details + .rewarding_details .map(|rd| rd.cost_params.profit_margin_percent) .unwrap_or(default_profit_margin), Err(_) => { @@ -43,12 +43,12 @@ pub async fn update_cost_params(args: Args, client: SigningClient, mix_id: MixId default_profit_margin } }; - - let profit_margin_value = args.profit_margin_percent + + let profit_margin_value = args + .profit_margin_percent .map(|pm| convert_to_percent(pm as u64)) .unwrap_or(profit_margin_percent); - - + let cost_params = MixNodeCostParams { profit_margin_percent: profit_margin_value, interval_operating_cost: CosmWasmCoin { From 4635db73f184bed13e00e76d24ffebdeb6acb6a7 Mon Sep 17 00:00:00 2001 From: benedettadavico Date: Tue, 27 Aug 2024 16:20:44 +0200 Subject: [PATCH 3/5] update code and fmt again --- .../mixnode/settings/update_cost_params.rs | 34 ++++++++++++++----- .../mixnet/operators/mixnodes/settings/mod.rs | 2 +- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/common/commands/src/validator/mixnet/operators/mixnode/settings/update_cost_params.rs b/common/commands/src/validator/mixnet/operators/mixnode/settings/update_cost_params.rs index 06cc022d52..e76bd0bdf3 100644 --- a/common/commands/src/validator/mixnet/operators/mixnode/settings/update_cost_params.rs +++ b/common/commands/src/validator/mixnet/operators/mixnode/settings/update_cost_params.rs @@ -24,7 +24,7 @@ pub struct Args { pub interval_operating_cost: Option, } -pub async fn update_cost_params(args: Args, client: SigningClient, mix_id: MixId) { +pub async fn update_cost_params(args: Args, client: SigningClient) { let denom = client.current_chain_details().mix_denom.base.as_str(); fn convert_to_percent(value: u64) -> Percent { @@ -33,17 +33,35 @@ pub async fn update_cost_params(args: Args, client: SigningClient, mix_id: MixId let default_profit_margin: Percent = convert_to_percent(20); - let profit_margin_percent = match client.get_mixnode_rewarding_details(mix_id).await { - Ok(details) => details - .rewarding_details - .map(|rd| rd.cost_params.profit_margin_percent) - .unwrap_or(default_profit_margin), + let mixownership_response = match client.get_owned_mixnode(&client.address()).await { + Ok(response) => response, Err(_) => { - eprintln!("Failed to obtain profit margin from node, using default value of 20%"); - default_profit_margin + eprintln!("Failed to obtain mixnode details"); + return; } }; + let mix_id = match mixownership_response.mixnode_details { + Some(details) => details.bond_information.mix_id, + None => { + eprintln!("No mixnode details found"); + return; + } + }; + + let rewarding_response = match client.get_mixnode_rewarding_details(mix_id).await { + Ok(details) => details, + Err(_) => { + eprintln!("Failed to obtain rewarding details"); + return; + } + }; + + let profit_margin_percent = rewarding_response + .rewarding_details + .map(|rd| rd.cost_params.profit_margin_percent) + .unwrap_or(default_profit_margin); + let profit_margin_value = args .profit_margin_percent .map(|pm| convert_to_percent(pm as u64)) diff --git a/tools/nym-cli/src/validator/mixnet/operators/mixnodes/settings/mod.rs b/tools/nym-cli/src/validator/mixnet/operators/mixnodes/settings/mod.rs index 8628e90c9e..a5d5c02883 100644 --- a/tools/nym-cli/src/validator/mixnet/operators/mixnodes/settings/mod.rs +++ b/tools/nym-cli/src/validator/mixnet/operators/mixnodes/settings/mod.rs @@ -14,7 +14,7 @@ pub(crate) async fn execute( nym_cli_commands::validator::mixnet::operators::mixnode::settings::update_config::update_config(args, create_signing_client(global_args, network_details)?).await } nym_cli_commands::validator::mixnet::operators::mixnode::settings::MixnetOperatorsMixnodeSettingsCommands::UpdateCostParameters(args) => { - nym_cli_commands::validator::mixnet::operators::mixnode::settings::update_cost_params::update_cost_params(args, create_signing_client(global_args, network_details), mix_id?).await + nym_cli_commands::validator::mixnet::operators::mixnode::settings::update_cost_params::update_cost_params(args, create_signing_client(global_args, network_details)?).await } _ => unreachable!(), } From eafbed6c9f195049187e85e1d839f06097e4dc3d Mon Sep 17 00:00:00 2001 From: benedettadavico Date: Wed, 28 Aug 2024 11:21:11 +0200 Subject: [PATCH 4/5] wording --- .../mixnet/operators/mixnode/settings/update_cost_params.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/commands/src/validator/mixnet/operators/mixnode/settings/update_cost_params.rs b/common/commands/src/validator/mixnet/operators/mixnode/settings/update_cost_params.rs index e76bd0bdf3..bc84cf6140 100644 --- a/common/commands/src/validator/mixnet/operators/mixnode/settings/update_cost_params.rs +++ b/common/commands/src/validator/mixnet/operators/mixnode/settings/update_cost_params.rs @@ -36,7 +36,7 @@ pub async fn update_cost_params(args: Args, client: SigningClient) { let mixownership_response = match client.get_owned_mixnode(&client.address()).await { Ok(response) => response, Err(_) => { - eprintln!("Failed to obtain mixnode details"); + eprintln!("Failed to obtain owned mixnode"); return; } }; @@ -44,7 +44,7 @@ pub async fn update_cost_params(args: Args, client: SigningClient) { let mix_id = match mixownership_response.mixnode_details { Some(details) => details.bond_information.mix_id, None => { - eprintln!("No mixnode details found"); + eprintln!("Failed to obtain mixnode details"); return; } }; From 73fc2d6bb24efcdd0621bd957fd160505e875e6c Mon Sep 17 00:00:00 2001 From: benedettadavico Date: Wed, 28 Aug 2024 11:43:16 +0200 Subject: [PATCH 5/5] remove unused import --- .../mixnet/operators/mixnode/settings/update_cost_params.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/commands/src/validator/mixnet/operators/mixnode/settings/update_cost_params.rs b/common/commands/src/validator/mixnet/operators/mixnode/settings/update_cost_params.rs index bc84cf6140..7c09ba2946 100644 --- a/common/commands/src/validator/mixnet/operators/mixnode/settings/update_cost_params.rs +++ b/common/commands/src/validator/mixnet/operators/mixnode/settings/update_cost_params.rs @@ -5,7 +5,7 @@ use crate::context::SigningClient; use clap::Parser; use cosmwasm_std::Uint128; use log::info; -use nym_mixnet_contract_common::{MixId, MixNodeCostParams, Percent}; +use nym_mixnet_contract_common::{MixNodeCostParams, Percent}; use nym_validator_client::nyxd::contract_traits::{MixnetQueryClient, MixnetSigningClient}; use nym_validator_client::nyxd::CosmWasmCoin;