From 8d282f2b26c309761b7b0f44f0e1385eb7eec8ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Stuczy=C5=84ski?= Date: Wed, 17 Jul 2024 15:06:44 +0100 Subject: [PATCH] introduced the concept of allowed profit margin ranges --- Cargo.lock | 17 ----------------- .../mixnet-contract/src/msg.rs | 19 +++++++++++++++++++ .../mixnet-contract/src/types.rs | 7 ++++++- contracts/mixnet/src/contract.rs | 14 +++++++++++++- .../src/mixnet_contract_settings/queries.rs | 1 + .../mixnet_contract_settings/transactions.rs | 1 + contracts/mixnet/src/support/tests/mod.rs | 1 + 7 files changed, 41 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0bc53266de..0822026fe5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4999,23 +4999,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "nym-network-statistics" -version = "1.1.34" -dependencies = [ - "dirs 4.0.0", - "log", - "nym-bin-common", - "nym-statistics-common", - "nym-task", - "pretty_env_logger", - "rocket", - "serde", - "sqlx", - "thiserror", - "tokio", -] - [[package]] name = "nym-node" version = "1.1.4" diff --git a/common/cosmwasm-smart-contracts/mixnet-contract/src/msg.rs b/common/cosmwasm-smart-contracts/mixnet-contract/src/msg.rs index ca154e231b..bab2025552 100644 --- a/common/cosmwasm-smart-contracts/mixnet-contract/src/msg.rs +++ b/common/cosmwasm-smart-contracts/mixnet-contract/src/msg.rs @@ -57,6 +57,25 @@ pub struct InstantiateMsg { pub epochs_in_interval: u32, pub epoch_duration: Duration, pub initial_rewarding_params: InitialRewardingParams, + + #[serde(default)] + pub profit_margin: ProfitMarginRange, +} + +#[cw_serde] +#[derive(Copy)] +pub struct ProfitMarginRange { + pub minimum: Percent, + pub maximum: Percent, +} + +impl Default for ProfitMarginRange { + fn default() -> Self { + ProfitMarginRange { + minimum: Percent::zero(), + maximum: Percent::hundred(), + } + } } #[cw_serde] diff --git a/common/cosmwasm-smart-contracts/mixnet-contract/src/types.rs b/common/cosmwasm-smart-contracts/mixnet-contract/src/types.rs index e1ff854bb9..7e98f5ebee 100644 --- a/common/cosmwasm-smart-contracts/mixnet-contract/src/types.rs +++ b/common/cosmwasm-smart-contracts/mixnet-contract/src/types.rs @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 use crate::error::MixnetContractError; -use crate::Layer; +use crate::{Layer, ProfitMarginRange}; use cosmwasm_schema::cw_serde; use cosmwasm_std::Addr; use cosmwasm_std::Coin; @@ -154,4 +154,9 @@ pub struct ContractStateParams { /// Minimum amount a gateway must pledge to get into the system. pub minimum_gateway_pledge: Coin, + + /// Defines the allowed profit margin range of operators. + /// default: 0% - 100% + #[serde(default)] + pub profit_margin: ProfitMarginRange, } diff --git a/contracts/mixnet/src/contract.rs b/contracts/mixnet/src/contract.rs index e6c755d05d..8ac0904e1b 100644 --- a/contracts/mixnet/src/contract.rs +++ b/contracts/mixnet/src/contract.rs @@ -11,7 +11,8 @@ use cosmwasm_std::{ }; use mixnet_contract_common::error::MixnetContractError; use mixnet_contract_common::{ - ContractState, ContractStateParams, ExecuteMsg, InstantiateMsg, Interval, MigrateMsg, QueryMsg, + ContractState, ContractStateParams, ExecuteMsg, InstantiateMsg, Interval, MigrateMsg, + ProfitMarginRange, QueryMsg, }; use nym_contracts_common::set_build_information; @@ -24,6 +25,7 @@ fn default_initial_state( rewarding_validator_address: Addr, rewarding_denom: String, vesting_contract_address: Addr, + profit_margin: ProfitMarginRange, ) -> ContractState { ContractState { owner, @@ -40,6 +42,7 @@ fn default_initial_state( denom: rewarding_denom, amount: INITIAL_GATEWAY_PLEDGE_AMOUNT, }, + profit_margin, }, } } @@ -71,6 +74,7 @@ pub fn instantiate( rewarding_validator_address.clone(), msg.rewarding_denom, vesting_contract_address, + msg.profit_margin, ); let starting_interval = Interval::init_interval(msg.epochs_in_interval, msg.epoch_duration, &env); @@ -657,6 +661,10 @@ mod tests { rewarded_set_size: 543, active_set_size: 123, }, + profit_margin: ProfitMarginRange { + minimum: "0.05".parse().unwrap(), + maximum: "0.95".parse().unwrap(), + }, }; let sender = mock_info("sender", &[]); @@ -678,6 +686,10 @@ mod tests { denom: "uatom".into(), amount: INITIAL_GATEWAY_PLEDGE_AMOUNT, }, + profit_margin: ProfitMarginRange { + minimum: Percent::from_percentage_value(5).unwrap(), + maximum: Percent::from_percentage_value(95).unwrap(), + }, }, }; diff --git a/contracts/mixnet/src/mixnet_contract_settings/queries.rs b/contracts/mixnet/src/mixnet_contract_settings/queries.rs index 1fbedf4d62..adf28f72b3 100644 --- a/contracts/mixnet/src/mixnet_contract_settings/queries.rs +++ b/contracts/mixnet/src/mixnet_contract_settings/queries.rs @@ -45,6 +45,7 @@ pub(crate) mod tests { minimum_mixnode_delegation: None, minimum_mixnode_pledge: coin(123u128, "unym"), minimum_gateway_pledge: coin(456u128, "unym"), + profit_margin: Default::default(), }, }; diff --git a/contracts/mixnet/src/mixnet_contract_settings/transactions.rs b/contracts/mixnet/src/mixnet_contract_settings/transactions.rs index 5aed1d45ea..efe458b94b 100644 --- a/contracts/mixnet/src/mixnet_contract_settings/transactions.rs +++ b/contracts/mixnet/src/mixnet_contract_settings/transactions.rs @@ -121,6 +121,7 @@ pub mod tests { denom, amount: INITIAL_GATEWAY_PLEDGE_AMOUNT + Uint128::new(1234), }, + profit_margin: Default::default(), }; let initial_params = storage::CONTRACT_STATE diff --git a/contracts/mixnet/src/support/tests/mod.rs b/contracts/mixnet/src/support/tests/mod.rs index 2bd98eb175..be2d11a106 100644 --- a/contracts/mixnet/src/support/tests/mod.rs +++ b/contracts/mixnet/src/support/tests/mod.rs @@ -1258,6 +1258,7 @@ pub mod test_helpers { epochs_in_interval: 720, epoch_duration: Duration::from_secs(60 * 60), initial_rewarding_params: initial_rewarding_params(), + profit_margin: Default::default(), }; let env = mock_env(); let info = mock_info("creator", &[]);