diff --git a/contracts/mixnet/Cargo.lock b/contracts/mixnet/Cargo.lock index de88924205..8fa97e3a56 100644 --- a/contracts/mixnet/Cargo.lock +++ b/contracts/mixnet/Cargo.lock @@ -190,6 +190,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "cw-storage-plus" +version = "0.6.2" +source = "git+https://github.com/jstuczyn/cw-plus?branch=feature/0.6.2-cosmwasm-fork#5d3e59c8327d1ab4a748c0be5ad3a376b710bfe5" +dependencies = [ + "cosmwasm-std", + "schemars", + "serde", +] + [[package]] name = "der" version = "0.4.4" @@ -493,6 +503,7 @@ dependencies = [ "cosmwasm-schema", "cosmwasm-std", "cosmwasm-storage", + "cw-storage-plus", "fixed", "mixnet-contract", "schemars", diff --git a/contracts/mixnet/Cargo.toml b/contracts/mixnet/Cargo.toml index 0d803ecae1..7b510ce772 100644 --- a/contracts/mixnet/Cargo.toml +++ b/contracts/mixnet/Cargo.toml @@ -40,6 +40,7 @@ config = { path = "../../common/config"} cosmwasm-std = { git = "https://github.com/jstuczyn/cosmwasm", branch="0.14.1-updatedk256", features = ["iterator"] } cosmwasm-storage = { git = "https://github.com/jstuczyn/cosmwasm", branch="0.14.1-updatedk256", features = ["iterator"] } +cw-storage-plus = { git = "https://github.com/jstuczyn/cw-plus", branch = "feature/0.6.2-cosmwasm-fork", features = ["iterator"] } #cosmwasm-std = { version = "0.14.1", features = ["iterator"] } #cosmwasm-storage = { version = "0.14.1", features = ["iterator"] } diff --git a/contracts/mixnet/src/contract.rs b/contracts/mixnet/src/contract.rs index 4f78d33a40..2f7465e91e 100644 --- a/contracts/mixnet/src/contract.rs +++ b/contracts/mixnet/src/contract.rs @@ -70,8 +70,8 @@ pub fn instantiate( ) -> Result { let state = default_initial_state(info.sender, env); - mixnet_params_storage::contract_settings(deps.storage).save(&state)?; - mixnet_params_storage::layer_distribution(deps.storage).save(&Default::default())?; + mixnet_params_storage::CONTRACT_SETTINGS.save(deps.storage, &state)?; + mixnet_params_storage::LAYERS.save(deps.storage, &Default::default())?; Ok(Response::default()) } @@ -168,9 +168,9 @@ pub fn query(deps: Deps, _env: Env, msg: QueryMsg) -> Result to_binary(&query_owns_gateway(deps, address)?), - QueryMsg::StateParams {} => to_binary(&query_contract_settings_params(deps)), - QueryMsg::CurrentRewardingInterval {} => to_binary(&query_rewarding_interval(deps)), - QueryMsg::LayerDistribution {} => to_binary(&query_layer_distribution(deps)), + QueryMsg::StateParams {} => to_binary(&query_contract_settings_params(deps)?), + QueryMsg::CurrentRewardingInterval {} => to_binary(&query_rewarding_interval(deps)?), + QueryMsg::LayerDistribution {} => to_binary(&query_layer_distribution(deps)?), QueryMsg::GetMixDelegations { mix_identity, start_after, diff --git a/contracts/mixnet/src/gateways/transactions.rs b/contracts/mixnet/src/gateways/transactions.rs index db3d2bf605..3e3d351511 100644 --- a/contracts/mixnet/src/gateways/transactions.rs +++ b/contracts/mixnet/src/gateways/transactions.rs @@ -41,8 +41,10 @@ pub(crate) fn try_add_gateway( } } - let minimum_bond = - mixnet_params_storage::read_contract_settings_params(deps.storage).minimum_gateway_bond; + let minimum_bond = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.storage)? + .params + .minimum_gateway_bond; validate_gateway_bond(&info.funds, minimum_bond)?; let bond = GatewayBond::new( diff --git a/contracts/mixnet/src/mixnet_contract_settings/queries.rs b/contracts/mixnet/src/mixnet_contract_settings/queries.rs index faacec29e7..7d90166d6f 100644 --- a/contracts/mixnet/src/mixnet_contract_settings/queries.rs +++ b/contracts/mixnet/src/mixnet_contract_settings/queries.rs @@ -1,20 +1,21 @@ use super::storage; -use cosmwasm_std::Deps; +use cosmwasm_std::{Deps, StdResult}; use mixnet_contract::{ContractSettingsParams, RewardingIntervalResponse}; -pub(crate) fn query_contract_settings_params(deps: Deps) -> ContractSettingsParams { - storage::read_contract_settings_params(deps.storage) +pub(crate) fn query_contract_settings_params(deps: Deps) -> StdResult { + storage::CONTRACT_SETTINGS + .load(deps.storage) + .map(|settings| settings.params) } -pub(crate) fn query_rewarding_interval(deps: Deps) -> RewardingIntervalResponse { - let state = storage::contract_settings_read(deps.storage) - .load() - .unwrap(); - RewardingIntervalResponse { +pub(crate) fn query_rewarding_interval(deps: Deps) -> StdResult { + let state = storage::CONTRACT_SETTINGS.load(deps.storage)?; + + Ok(RewardingIntervalResponse { current_rewarding_interval_starting_block: state.rewarding_interval_starting_block, current_rewarding_interval_nonce: state.latest_rewarding_interval_nonce, rewarding_in_progress: state.rewarding_in_progress, - } + }) } #[cfg(test)] @@ -43,13 +44,13 @@ pub(crate) mod tests { rewarding_in_progress: false, }; - storage::contract_settings(deps.as_mut().storage) - .save(&dummy_state) + storage::CONTRACT_SETTINGS + .save(deps.as_mut().storage, &dummy_state) .unwrap(); assert_eq!( dummy_state.params, - query_contract_settings_params(deps.as_ref()) + query_contract_settings_params(deps.as_ref()).unwrap() ) } } diff --git a/contracts/mixnet/src/mixnet_contract_settings/storage.rs b/contracts/mixnet/src/mixnet_contract_settings/storage.rs index 3f62d0e7f9..43f99faa2c 100644 --- a/contracts/mixnet/src/mixnet_contract_settings/storage.rs +++ b/contracts/mixnet/src/mixnet_contract_settings/storage.rs @@ -4,87 +4,57 @@ use crate::mixnet_contract_settings::models::ContractSettings; use cosmwasm_std::StdResult; use cosmwasm_std::Storage; -use cosmwasm_storage::singleton; -use cosmwasm_storage::singleton_read; -use cosmwasm_storage::ReadonlySingleton; -use cosmwasm_storage::Singleton; -use mixnet_contract::ContractSettingsParams; +use cw_storage_plus::Item; use mixnet_contract::Layer; use mixnet_contract::LayerDistribution; -// storage prefixes -const CONFIG_KEY: &[u8] = b"config"; -const LAYER_DISTRIBUTION_KEY: &[u8] = b"layers"; - -pub fn contract_settings(storage: &mut dyn Storage) -> Singleton { - singleton(storage, CONFIG_KEY) -} - -pub fn contract_settings_read(storage: &dyn Storage) -> ReadonlySingleton { - singleton_read(storage, CONFIG_KEY) -} - -pub(crate) fn read_contract_settings_params(storage: &dyn Storage) -> ContractSettingsParams { - // note: In any other case, I wouldn't have attempted to unwrap this result, but in here - // if we fail to load the stored state we would already be in the undefined behaviour land, - // so we better just blow up immediately. - contract_settings_read(storage).load().unwrap().params -} - -pub fn layer_distribution(storage: &mut dyn Storage) -> Singleton { - singleton(storage, LAYER_DISTRIBUTION_KEY) -} - -pub(crate) fn read_layer_distribution(storage: &dyn Storage) -> LayerDistribution { - // note: In any other case, I wouldn't have attempted to unwrap this result, but in here - // if we fail to load the stored state we would already be in the undefined behaviour land, - // so we better just blow up immediately. - layer_distribution_read(storage).load().unwrap() -} - -pub fn layer_distribution_read(storage: &dyn Storage) -> ReadonlySingleton { - singleton_read(storage, LAYER_DISTRIBUTION_KEY) -} +pub(crate) const CONTRACT_SETTINGS: Item = Item::new("config"); +pub(crate) const LAYERS: Item = Item::new("layers"); pub fn increment_layer_count(storage: &mut dyn Storage, layer: Layer) -> StdResult<()> { - let mut distribution = layer_distribution(storage).load()?; - match layer { - Layer::Gateway => distribution.gateways += 1, - Layer::One => distribution.layer1 += 1, - Layer::Two => distribution.layer2 += 1, - Layer::Three => distribution.layer3 += 1, - } - layer_distribution(storage).save(&distribution) + LAYERS + .update(storage, |mut distribution| { + match layer { + Layer::Gateway => distribution.gateways += 1, + Layer::One => distribution.layer1 += 1, + Layer::Two => distribution.layer2 += 1, + Layer::Three => distribution.layer3 += 1, + } + Ok(distribution) + }) + .map(|_| ()) } pub fn decrement_layer_count(storage: &mut dyn Storage, layer: Layer) -> StdResult<()> { - let mut distribution = layer_distribution(storage).load()?; - // It can't possibly go below zero, if it does, it means there's a serious error in the contract logic - match layer { - Layer::Gateway => { - distribution.gateways = distribution - .gateways - .checked_sub(1) - .expect("tried to subtract from unsigned zero!") - } - Layer::One => { - distribution.layer1 = distribution - .layer1 - .checked_sub(1) - .expect("tried to subtract from unsigned zero!") - } - Layer::Two => { - distribution.layer2 = distribution - .layer2 - .checked_sub(1) - .expect("tried to subtract from unsigned zero!") - } - Layer::Three => { - distribution.layer3 = distribution - .layer3 - .checked_sub(1) - .expect("tried to subtract from unsigned zero!") - } - }; - layer_distribution(storage).save(&distribution) + LAYERS + .update(storage, |mut distribution| { + match layer { + Layer::Gateway => { + distribution.gateways = distribution + .gateways + .checked_sub(1) + .expect("tried to subtract from unsigned zero!") + } + Layer::One => { + distribution.layer1 = distribution + .layer1 + .checked_sub(1) + .expect("tried to subtract from unsigned zero!") + } + Layer::Two => { + distribution.layer2 = distribution + .layer2 + .checked_sub(1) + .expect("tried to subtract from unsigned zero!") + } + Layer::Three => { + distribution.layer3 = distribution + .layer3 + .checked_sub(1) + .expect("tried to subtract from unsigned zero!") + } + } + Ok(distribution) + }) + .map(|_| ()) } diff --git a/contracts/mixnet/src/mixnet_contract_settings/transactions.rs b/contracts/mixnet/src/mixnet_contract_settings/transactions.rs index f7bafe6d7c..098bbb3270 100644 --- a/contracts/mixnet/src/mixnet_contract_settings/transactions.rs +++ b/contracts/mixnet/src/mixnet_contract_settings/transactions.rs @@ -13,7 +13,7 @@ pub(crate) fn try_update_contract_settings( info: MessageInfo, params: ContractSettingsParams, ) -> Result { - let mut state = storage::contract_settings_read(deps.storage).load()?; + let mut state = storage::CONTRACT_SETTINGS.load(deps.storage)?; // check if this is executed by the owner, if not reject the transaction if info.sender != state.owner { @@ -35,8 +35,33 @@ pub(crate) fn try_update_contract_settings( } state.params = params; + storage::CONTRACT_SETTINGS.save(deps.storage, &state)?; - storage::contract_settings(deps.storage).save(&state)?; + // alternative: + + // storage::CONTRACT_SETTINGS.update(deps.storage, |mut state| { + // // check if this is executed by the owner, if not reject the transaction + // if info.sender != state.owner { + // return Err(ContractError::Unauthorized); + // } + // + // if params.mixnode_rewarded_set_size == 0 { + // return Err(ContractError::ZeroRewardedSet); + // } + // + // if params.mixnode_active_set_size == 0 { + // return Err(ContractError::ZeroActiveSet); + // } + // + // // note: rewarded_set = active_set + idle_set + // // hence rewarded set must always be bigger than (or equal to) the active set + // if params.mixnode_rewarded_set_size < params.mixnode_active_set_size { + // return Err(ContractError::InvalidActiveSetSize); + // } + // + // state.params = params; + // Ok(state) + // }); Ok(Response::default()) } @@ -66,8 +91,8 @@ pub mod tests { // sanity check to ensure new_params are different than the default ones assert_ne!( new_params, - storage::contract_settings_read(deps.as_ref().storage) - .load() + storage::CONTRACT_SETTINGS + .load(deps.as_ref().storage) .unwrap() .params ); @@ -83,8 +108,8 @@ pub mod tests { assert_eq!(res, Ok(Response::default())); // and the state is actually updated - let current_state = storage::contract_settings_read(deps.as_ref().storage) - .load() + let current_state = storage::CONTRACT_SETTINGS + .load(deps.as_ref().storage) .unwrap(); assert_eq!(current_state.params, new_params); diff --git a/contracts/mixnet/src/mixnodes/bonding_transactions.rs b/contracts/mixnet/src/mixnodes/bonding_transactions.rs index 691ea0973b..b687cb9edc 100644 --- a/contracts/mixnet/src/mixnodes/bonding_transactions.rs +++ b/contracts/mixnet/src/mixnodes/bonding_transactions.rs @@ -46,11 +46,13 @@ pub(crate) fn try_add_mixnode( } } - let minimum_bond = - mixnet_params_storage::read_contract_settings_params(deps.storage).minimum_mixnode_bond; + let minimum_bond = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.storage)? + .params + .minimum_mixnode_bond; validate_mixnode_bond(&info.funds, minimum_bond)?; - let layer_distribution = query_layer_distribution(deps.as_ref()); + let layer_distribution = query_layer_distribution(deps.as_ref())?; let layer = layer_distribution.choose_with_fewest(); let stored_bond = StoredMixnodeBond::new( @@ -386,9 +388,7 @@ pub mod tests { assert_eq!( LayerDistribution::default(), - mixnet_params_storage::layer_distribution_read(&deps.storage) - .load() - .unwrap(), + mixnet_params_storage::LAYERS.load(&deps.storage).unwrap(), ); let info = mock_info("mix-owner", &test_helpers::good_mixnode_bond()); @@ -405,9 +405,7 @@ pub mod tests { layer1: 1, ..Default::default() }, - mixnet_params_storage::layer_distribution_read(&deps.storage) - .load() - .unwrap() + mixnet_params_storage::LAYERS.load(&deps.storage).unwrap() ); } diff --git a/contracts/mixnet/src/mixnodes/layer_queries.rs b/contracts/mixnet/src/mixnodes/layer_queries.rs index a522033ba1..2ce21648f3 100644 --- a/contracts/mixnet/src/mixnodes/layer_queries.rs +++ b/contracts/mixnet/src/mixnodes/layer_queries.rs @@ -2,9 +2,9 @@ // SPDX-License-Identifier: Apache-2.0 use crate::mixnet_contract_settings::storage as mixnet_params_storage; -use cosmwasm_std::Deps; +use cosmwasm_std::{Deps, StdResult}; use mixnet_contract::LayerDistribution; -pub(crate) fn query_layer_distribution(deps: Deps) -> LayerDistribution { - mixnet_params_storage::read_layer_distribution(deps.storage) +pub(crate) fn query_layer_distribution(deps: Deps) -> StdResult { + mixnet_params_storage::LAYERS.load(deps.storage) } diff --git a/contracts/mixnet/src/rewards/queries.rs b/contracts/mixnet/src/rewards/queries.rs index c6461f475b..05700499b2 100644 --- a/contracts/mixnet/src/rewards/queries.rs +++ b/contracts/mixnet/src/rewards/queries.rs @@ -52,10 +52,9 @@ pub(crate) mod tests { fn returns_empty_status_for_unrewarded_nodes() { let mut deps = test_helpers::init_contract(); let env = mock_env(); - let current_state = - mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() - .unwrap(); + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) + .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; let node_identity = @@ -93,10 +92,9 @@ pub(crate) mod tests { // with single page let mut deps = test_helpers::init_contract(); let mut env = mock_env(); - let current_state = - mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() - .unwrap(); + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) + .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; let node_identity = "bobsnode".to_string(); @@ -216,10 +214,9 @@ pub(crate) mod tests { fn returns_pending_next_delegator_page_status_when_there_are_more_delegators_to_reward() { let mut deps = test_helpers::init_contract(); let mut env = mock_env(); - let current_state = - mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() - .unwrap(); + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) + .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; let node_identity = "bobsnode".to_string(); diff --git a/contracts/mixnet/src/rewards/transactions.rs b/contracts/mixnet/src/rewards/transactions.rs index 3758ef8eea..e8e60bf989 100644 --- a/contracts/mixnet/src/rewards/transactions.rs +++ b/contracts/mixnet/src/rewards/transactions.rs @@ -34,7 +34,7 @@ fn verify_rewarding_state( info: MessageInfo, rewarding_interval_nonce: u32, ) -> Result<(), ContractError> { - let state = mixnet_params_storage::contract_settings_read(storage).load()?; + let state = mixnet_params_storage::CONTRACT_SETTINGS.load(storage)?; // check if this is executed by the permitted validator, if not reject the transaction if info.sender != state.rewarding_validator_address { @@ -70,7 +70,7 @@ pub(crate) fn try_begin_mixnode_rewarding( info: MessageInfo, rewarding_interval_nonce: u32, ) -> Result { - let mut state = mixnet_params_storage::contract_settings_read(deps.storage).load()?; + let mut state = mixnet_params_storage::CONTRACT_SETTINGS.load(deps.storage)?; // check if this is executed by the permitted validator, if not reject the transaction if info.sender != state.rewarding_validator_address { @@ -102,7 +102,7 @@ pub(crate) fn try_begin_mixnode_rewarding( state.latest_rewarding_interval_nonce = rewarding_interval_nonce; state.rewarding_in_progress = true; - mixnet_params_storage::contract_settings(deps.storage).save(&state)?; + mixnet_params_storage::CONTRACT_SETTINGS.save(deps.storage, &state)?; let mut response = Response::new(); response.add_attribute( @@ -405,7 +405,7 @@ pub(crate) fn try_finish_mixnode_rewarding( info: MessageInfo, rewarding_interval_nonce: u32, ) -> Result { - let mut state = mixnet_params_storage::contract_settings_read(deps.storage).load()?; + let mut state = mixnet_params_storage::CONTRACT_SETTINGS.load(deps.storage)?; // check if this is executed by the permitted validator, if not reject the transaction if info.sender != state.rewarding_validator_address { @@ -425,7 +425,30 @@ pub(crate) fn try_finish_mixnode_rewarding( } state.rewarding_in_progress = false; - mixnet_params_storage::contract_settings(deps.storage).save(&state)?; + mixnet_params_storage::CONTRACT_SETTINGS.save(deps.storage, &state)?; + + // // alternative: + // mixnet_params_storage::CONTRACT_SETTINGS.update(storage, |mut state| { + // // check if this is executed by the permitted validator, if not reject the transaction + // if info.sender != state.rewarding_validator_address { + // return Err(ContractError::Unauthorized); + // } + // + // if !state.rewarding_in_progress { + // return Err(ContractError::RewardingNotInProgress); + // } + // + // // make sure the validator is in sync with the contract state + // if rewarding_interval_nonce != state.latest_rewarding_interval_nonce { + // return Err(ContractError::InvalidRewardingIntervalNonce { + // received: rewarding_interval_nonce, + // expected: state.latest_rewarding_interval_nonce, + // }); + // } + // + // state.rewarding_in_progress = false; + // Ok(state) + // })?; Ok(Response::new()) } @@ -465,10 +488,9 @@ pub mod tests { fn can_only_be_called_by_specified_validator_address() { let mut deps = test_helpers::init_contract(); let env = mock_env(); - let current_state = - mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() - .unwrap(); + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) + .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; let res = try_begin_mixnode_rewarding( @@ -492,10 +514,9 @@ pub mod tests { fn cannot_be_called_if_rewarding_is_already_in_progress_with_little_day() { let mut deps = test_helpers::init_contract(); let env = mock_env(); - let current_state = - mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() - .unwrap(); + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) + .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; try_begin_mixnode_rewarding( @@ -519,10 +540,9 @@ pub mod tests { fn can_be_called_if_rewarding_is_in_progress_if_sufficient_number_of_blocks_elapsed() { let mut deps = test_helpers::init_contract(); let env = mock_env(); - let current_state = - mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() - .unwrap(); + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) + .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; try_begin_mixnode_rewarding( @@ -550,13 +570,12 @@ pub mod tests { fn provided_nonce_must_be_equal_the_current_plus_one() { let mut deps = test_helpers::init_contract(); let env = mock_env(); - let mut current_state = - mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() - .unwrap(); + let mut current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) + .unwrap(); current_state.latest_rewarding_interval_nonce = 42; - mixnet_params_storage::contract_settings(deps.as_mut().storage) - .save(¤t_state) + mixnet_params_storage::CONTRACT_SETTINGS + .save(deps.as_mut().storage, ¤t_state) .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; @@ -616,8 +635,8 @@ pub mod tests { fn updates_contract_state() { let mut deps = test_helpers::init_contract(); let env = mock_env(); - let start_state = mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() + let start_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) .unwrap(); let rewarding_validator_address = start_state.rewarding_validator_address; @@ -629,8 +648,8 @@ pub mod tests { ) .unwrap(); - let new_state = mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() + let new_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) .unwrap(); assert!(new_state.rewarding_in_progress); assert_eq!( @@ -656,10 +675,9 @@ pub mod tests { fn can_only_be_called_by_specified_validator_address() { let mut deps = test_helpers::init_contract(); let env = mock_env(); - let current_state = - mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() - .unwrap(); + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) + .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; try_begin_mixnode_rewarding( @@ -688,10 +706,9 @@ pub mod tests { #[test] fn cannot_be_called_if_rewarding_is_not_in_progress() { let mut deps = test_helpers::init_contract(); - let current_state = - mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() - .unwrap(); + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) + .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; let res = try_finish_mixnode_rewarding( @@ -706,13 +723,12 @@ pub mod tests { fn provided_nonce_must_be_equal_the_current_one() { let mut deps = test_helpers::init_contract(); let env = mock_env(); - let mut current_state = - mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() - .unwrap(); + let mut current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) + .unwrap(); current_state.latest_rewarding_interval_nonce = 42; - mixnet_params_storage::contract_settings(deps.as_mut().storage) - .save(¤t_state) + mixnet_params_storage::CONTRACT_SETTINGS + .save(deps.as_mut().storage, ¤t_state) .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; @@ -776,10 +792,9 @@ pub mod tests { fn updates_contract_state() { let mut deps = test_helpers::init_contract(); let env = mock_env(); - let current_state = - mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() - .unwrap(); + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) + .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; try_begin_mixnode_rewarding( @@ -797,8 +812,8 @@ pub mod tests { ) .unwrap(); - let new_state = mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() + let new_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) .unwrap(); assert!(!new_state.rewarding_in_progress); } @@ -808,8 +823,8 @@ pub mod tests { fn rewarding_mixnodes_outside_rewarding_period() { let mut deps = test_helpers::init_contract(); let env = mock_env(); - let current_state = mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; @@ -856,8 +871,8 @@ pub mod tests { fn rewarding_mixnodes_with_incorrect_rewarding_nonce() { let mut deps = test_helpers::init_contract(); let env = mock_env(); - let current_state = mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; @@ -925,8 +940,8 @@ pub mod tests { fn attempting_rewarding_mixnode_multiple_times_per_interval() { let mut deps = test_helpers::init_contract(); let env = mock_env(); - let current_state = mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; @@ -994,8 +1009,8 @@ pub mod tests { fn rewarding_mixnode_blockstamp_based() { let mut deps = test_helpers::init_contract(); let mut env = mock_env(); - let current_state = mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; @@ -1149,8 +1164,8 @@ pub mod tests { let mut deps = test_helpers::init_contract(); let mut env = mock_env(); - let current_state = mixnet_params_storage::contract_settings_read(deps.as_ref().storage) - .load() + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_ref().storage) .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; let period_reward_pool = (INITIAL_REWARD_POOL / 100) * EPOCH_REWARD_PERCENT as u128; @@ -1308,10 +1323,9 @@ pub mod tests { let mut deps = test_helpers::init_contract(); let mut env = mock_env(); - let current_state = - mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() - .unwrap(); + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) + .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; let mix_bond = Uint128(10000_000_000); @@ -1390,10 +1404,9 @@ pub mod tests { let mut deps = test_helpers::init_contract(); let mut env = mock_env(); - let current_state = - mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() - .unwrap(); + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) + .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; let mix_bond = Uint128(10000_000_000); @@ -1474,10 +1487,9 @@ pub mod tests { let mut deps = test_helpers::init_contract(); let mut env = mock_env(); - let current_state = - mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() - .unwrap(); + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) + .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; let mix_bond = Uint128(10000_000_000); @@ -1736,10 +1748,9 @@ pub mod tests { #[test] fn cannot_be_called_if_rewarding_is_not_in_progress() { let mut deps = test_helpers::init_contract(); - let current_state = - mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() - .unwrap(); + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) + .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; let res = try_reward_next_mixnode_delegators_v2( @@ -1756,10 +1767,9 @@ pub mod tests { fn cannot_be_called_if_mixnodes_operator_wasnt_rewarded() { let mut deps = test_helpers::init_contract(); let env = mock_env(); - let current_state = - mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() - .unwrap(); + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) + .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; try_begin_mixnode_rewarding( @@ -1790,10 +1800,9 @@ pub mod tests { // everything was done in a single reward call let mut deps = test_helpers::init_contract(); let mut env = mock_env(); - let current_state = - mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() - .unwrap(); + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) + .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; try_add_mixnode( @@ -1942,10 +1951,9 @@ pub mod tests { // setup: bond > page limit delegators, reward operator + first batch let mut deps = test_helpers::init_contract(); let mut env = mock_env(); - let current_state = - mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() - .unwrap(); + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) + .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; let mix_bond = Uint128(10000_000_000); @@ -2041,10 +2049,9 @@ pub mod tests { // setup: bond > page limit delegators, reward operator + first batch let mut deps = test_helpers::init_contract(); let mut env = mock_env(); - let current_state = - mixnet_params_storage::contract_settings_read(deps.as_mut().storage) - .load() - .unwrap(); + let current_state = mixnet_params_storage::CONTRACT_SETTINGS + .load(deps.as_mut().storage) + .unwrap(); let rewarding_validator_address = current_state.rewarding_validator_address; let mix_bond = Uint128(10000_000_000);