removal of contracts/ workspace experiment commit 2
This commit is contained in:
@@ -29,7 +29,7 @@ use crate::verification_key_shares::queries::{query_vk_share, query_vk_shares_pa
|
||||
use crate::verification_key_shares::transactions::try_commit_verification_key_share;
|
||||
use crate::verification_key_shares::transactions::try_verify_verification_key_share;
|
||||
use cosmwasm_std::{
|
||||
entry_point, to_json_binary, Deps, DepsMut, Env, MessageInfo, QueryResponse, Response,
|
||||
Deps, DepsMut, Env, MessageInfo, QueryResponse, Response, entry_point, to_json_binary,
|
||||
};
|
||||
use cw4::Cw4Contract;
|
||||
use nym_coconut_dkg_common::msg::{ExecuteMsg, InstantiateMsg, MigrateMsg, QueryMsg};
|
||||
@@ -267,10 +267,10 @@ mod tests {
|
||||
use super::*;
|
||||
use crate::support::tests::fixtures::TEST_MIX_DENOM;
|
||||
use crate::support::tests::helpers::{ADMIN_ADDRESS, MULTISIG_CONTRACT};
|
||||
use cosmwasm_std::testing::{message_info, mock_dependencies, mock_env, MockApi};
|
||||
use cosmwasm_std::{coins, Addr};
|
||||
use cw4::Member;
|
||||
use cosmwasm_std::testing::{MockApi, message_info, mock_dependencies, mock_env};
|
||||
use cosmwasm_std::{Addr, coins};
|
||||
use cw_multi_test::{App, AppBuilder, AppResponse, ContractWrapper, Executor};
|
||||
use cw4::Member;
|
||||
use nym_coconut_dkg_common::dealing::DEFAULT_DEALINGS;
|
||||
use nym_coconut_dkg_common::msg::ExecuteMsg::{InitiateDkg, RegisterDealer};
|
||||
use nym_coconut_dkg_common::types::NodeIndex;
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use crate::dealers::storage::{
|
||||
self, get_dealer_details, get_dealer_index, get_registration_details, DEALERS_INDICES,
|
||||
EPOCH_DEALERS_MAP,
|
||||
self, DEALERS_INDICES, EPOCH_DEALERS_MAP, get_dealer_details, get_dealer_index,
|
||||
get_registration_details,
|
||||
};
|
||||
use crate::epoch_state::storage::load_current_epoch;
|
||||
use cosmwasm_std::{Deps, Order, StdResult};
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
// Copyright 2022 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use crate::error::ContractError;
|
||||
use crate::Dealer;
|
||||
use crate::error::ContractError;
|
||||
use cosmwasm_std::{StdResult, Storage};
|
||||
use cw_storage_plus::{Item, Map};
|
||||
use nym_coconut_dkg_common::dealer::{BlockHeight, OwnershipTransfer, TransactionIndex};
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
// Copyright 2022-2024 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use crate::Dealer;
|
||||
use crate::dealers::storage::{
|
||||
ensure_dealer, get_or_assign_index, is_dealer, save_dealer_details_if_not_a_dealer,
|
||||
DEALERS_INDICES, EPOCH_DEALERS_MAP, OWNERSHIP_TRANSFER_LOG,
|
||||
DEALERS_INDICES, EPOCH_DEALERS_MAP, OWNERSHIP_TRANSFER_LOG, ensure_dealer, get_or_assign_index,
|
||||
is_dealer, save_dealer_details_if_not_a_dealer,
|
||||
};
|
||||
use crate::epoch_state::storage::{load_current_epoch, save_epoch};
|
||||
use crate::epoch_state::utils::check_epoch_state;
|
||||
use crate::error::ContractError;
|
||||
use crate::state::storage::STATE;
|
||||
use crate::verification_key_shares::storage::vk_shares;
|
||||
use crate::Dealer;
|
||||
use cosmwasm_std::{Deps, DepsMut, Env, Event, MessageInfo, Response};
|
||||
use nym_coconut_dkg_common::dealer::{DealerRegistrationDetails, OwnershipTransfer};
|
||||
use nym_coconut_dkg_common::types::{EncodedBTEPublicKeyWithProof, EpochState};
|
||||
@@ -188,9 +188,9 @@ pub(crate) mod tests {
|
||||
use super::*;
|
||||
use crate::epoch_state::transactions::{try_advance_epoch_state, try_initiate_dkg};
|
||||
use crate::support::tests::helpers;
|
||||
use crate::support::tests::helpers::{add_fixture_dealer, ADMIN_ADDRESS};
|
||||
use cosmwasm_std::testing::{message_info, mock_env};
|
||||
use crate::support::tests::helpers::{ADMIN_ADDRESS, add_fixture_dealer};
|
||||
use cosmwasm_std::Addr;
|
||||
use cosmwasm_std::testing::{message_info, mock_env};
|
||||
use nym_coconut_dkg_common::types::TimeConfiguration;
|
||||
|
||||
#[test]
|
||||
@@ -243,7 +243,7 @@ pub(crate) mod tests {
|
||||
mod tests_with_mock {
|
||||
use super::*;
|
||||
use crate::testable_dkg_contract::{
|
||||
init_contract_tester, init_contract_tester_with_group_members, DkgContractTesterExt,
|
||||
DkgContractTesterExt, init_contract_tester, init_contract_tester_with_group_members,
|
||||
};
|
||||
use anyhow::Context;
|
||||
use cosmwasm_std::testing::message_info;
|
||||
@@ -257,12 +257,16 @@ mod tests_with_mock {
|
||||
let group_member = contract.random_group_member();
|
||||
|
||||
// sanity check, pre-dkg
|
||||
assert!(DEALERS_INDICES
|
||||
.may_load(&contract, &group_member)?
|
||||
.is_none());
|
||||
assert!(EPOCH_DEALERS_MAP
|
||||
.may_load(&contract, (0, &group_member))?
|
||||
.is_none());
|
||||
assert!(
|
||||
DEALERS_INDICES
|
||||
.may_load(&contract, &group_member)?
|
||||
.is_none()
|
||||
);
|
||||
assert!(
|
||||
EPOCH_DEALERS_MAP
|
||||
.may_load(&contract, (0, &group_member))?
|
||||
.is_none()
|
||||
);
|
||||
|
||||
contract.run_initial_dummy_dkg();
|
||||
let old_index = DEALERS_INDICES.load(&contract, &group_member)?;
|
||||
@@ -271,35 +275,45 @@ mod tests_with_mock {
|
||||
|
||||
let not_group_member = contract.addr_make("not_group_member");
|
||||
let (deps, env) = contract.deps_mut_env();
|
||||
assert!(try_transfer_ownership(
|
||||
deps,
|
||||
env,
|
||||
message_info(&group_member, &[]),
|
||||
not_group_member.to_string()
|
||||
)
|
||||
.is_err());
|
||||
assert!(
|
||||
try_transfer_ownership(
|
||||
deps,
|
||||
env,
|
||||
message_info(&group_member, &[]),
|
||||
not_group_member.to_string()
|
||||
)
|
||||
.is_err()
|
||||
);
|
||||
|
||||
let new_group_member = contract.addr_make("new_group_member");
|
||||
contract.add_group_member(new_group_member.clone());
|
||||
let (deps, env) = contract.deps_mut_env();
|
||||
assert!(try_transfer_ownership(
|
||||
deps,
|
||||
env.clone(),
|
||||
message_info(&group_member, &[]),
|
||||
new_group_member.to_string()
|
||||
)
|
||||
.is_ok());
|
||||
assert!(
|
||||
try_transfer_ownership(
|
||||
deps,
|
||||
env.clone(),
|
||||
message_info(&group_member, &[]),
|
||||
new_group_member.to_string()
|
||||
)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
// data under old key doesn't exist anymore
|
||||
assert!(DEALERS_INDICES
|
||||
.may_load(&contract, &group_member)?
|
||||
.is_none());
|
||||
assert!(EPOCH_DEALERS_MAP
|
||||
.may_load(&contract, (0, &group_member))?
|
||||
.is_none());
|
||||
assert!(vk_shares()
|
||||
.may_load(&contract, (&group_member, 0))?
|
||||
.is_none());
|
||||
assert!(
|
||||
DEALERS_INDICES
|
||||
.may_load(&contract, &group_member)?
|
||||
.is_none()
|
||||
);
|
||||
assert!(
|
||||
EPOCH_DEALERS_MAP
|
||||
.may_load(&contract, (0, &group_member))?
|
||||
.is_none()
|
||||
);
|
||||
assert!(
|
||||
vk_shares()
|
||||
.may_load(&contract, (&group_member, 0))?
|
||||
.is_none()
|
||||
);
|
||||
|
||||
let new_index = DEALERS_INDICES.load(&contract, &new_group_member)?;
|
||||
let new_details = EPOCH_DEALERS_MAP.load(&contract, (0, &new_group_member))?;
|
||||
@@ -362,30 +376,42 @@ mod tests_with_mock {
|
||||
let new_group_member = contract.addr_make("new_group_member");
|
||||
contract.add_group_member(new_group_member.clone());
|
||||
let (deps, env) = contract.deps_mut_env();
|
||||
assert!(try_transfer_ownership(
|
||||
deps,
|
||||
env.clone(),
|
||||
message_info(&group_member, &[]),
|
||||
new_group_member.to_string()
|
||||
)
|
||||
.is_ok());
|
||||
assert!(
|
||||
try_transfer_ownership(
|
||||
deps,
|
||||
env.clone(),
|
||||
message_info(&group_member, &[]),
|
||||
new_group_member.to_string()
|
||||
)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
// data under old key doesn't exist anymore
|
||||
assert!(DEALERS_INDICES
|
||||
.may_load(&contract, &group_member)?
|
||||
.is_none());
|
||||
assert!(EPOCH_DEALERS_MAP
|
||||
.may_load(&contract, (0, &group_member))?
|
||||
.is_none());
|
||||
assert!(EPOCH_DEALERS_MAP
|
||||
.may_load(&contract, (1, &group_member))?
|
||||
.is_none());
|
||||
assert!(EPOCH_DEALERS_MAP
|
||||
.may_load(&contract, (2, &group_member))?
|
||||
.is_none());
|
||||
assert!(EPOCH_DEALERS_MAP
|
||||
.may_load(&contract, (3, &group_member))?
|
||||
.is_none());
|
||||
assert!(
|
||||
DEALERS_INDICES
|
||||
.may_load(&contract, &group_member)?
|
||||
.is_none()
|
||||
);
|
||||
assert!(
|
||||
EPOCH_DEALERS_MAP
|
||||
.may_load(&contract, (0, &group_member))?
|
||||
.is_none()
|
||||
);
|
||||
assert!(
|
||||
EPOCH_DEALERS_MAP
|
||||
.may_load(&contract, (1, &group_member))?
|
||||
.is_none()
|
||||
);
|
||||
assert!(
|
||||
EPOCH_DEALERS_MAP
|
||||
.may_load(&contract, (2, &group_member))?
|
||||
.is_none()
|
||||
);
|
||||
assert!(
|
||||
EPOCH_DEALERS_MAP
|
||||
.may_load(&contract, (3, &group_member))?
|
||||
.is_none()
|
||||
);
|
||||
|
||||
let new_index = DEALERS_INDICES.load(&contract, &new_group_member)?;
|
||||
let new_details0 = EPOCH_DEALERS_MAP.load(&contract, (0, &new_group_member))?;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2022-2024 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use crate::dealings::storage::{StoredDealing, DEALINGS_METADATA};
|
||||
use crate::dealings::storage::{DEALINGS_METADATA, StoredDealing};
|
||||
use crate::state::storage::STATE;
|
||||
use cosmwasm_std::{Deps, StdResult};
|
||||
use nym_coconut_dkg_common::dealing::{
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
// Copyright 2022-2024 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use crate::error::ContractError;
|
||||
use crate::Dealer;
|
||||
use crate::error::ContractError;
|
||||
use cosmwasm_std::Storage;
|
||||
use cw_storage_plus::{Key, Map, Path, PrimaryKey};
|
||||
use nym_coconut_dkg_common::dealing::{DealingMetadata, PartialContractDealing};
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
use crate::dealers::storage::ensure_dealer;
|
||||
use crate::dealings::storage::{
|
||||
metadata_exists, must_read_metadata, store_metadata, StoredDealing,
|
||||
StoredDealing, metadata_exists, must_read_metadata, store_metadata,
|
||||
};
|
||||
use crate::epoch_state::storage::{load_current_epoch, save_epoch};
|
||||
use crate::epoch_state::utils::check_epoch_state;
|
||||
@@ -11,7 +11,7 @@ use crate::error::ContractError;
|
||||
use crate::state::storage::STATE;
|
||||
use cosmwasm_std::{Addr, DepsMut, Env, MessageInfo, Response, Storage};
|
||||
use nym_coconut_dkg_common::dealing::{
|
||||
DealingChunkInfo, DealingMetadata, PartialContractDealing, MAX_DEALING_CHUNKS,
|
||||
DealingChunkInfo, DealingMetadata, MAX_DEALING_CHUNKS, PartialContractDealing,
|
||||
};
|
||||
use nym_coconut_dkg_common::types::{ChunkIndex, DealingIndex, EpochId, EpochState};
|
||||
|
||||
@@ -209,7 +209,7 @@ pub(crate) mod tests {
|
||||
use crate::epoch_state::transactions::{try_advance_epoch_state, try_initiate_dkg};
|
||||
use crate::support::tests::fixtures::{dealing_metadata_fixture, partial_dealing_fixture};
|
||||
use crate::support::tests::helpers;
|
||||
use crate::support::tests::helpers::{add_current_dealer, re_register_dealer, ADMIN_ADDRESS};
|
||||
use crate::support::tests::helpers::{ADMIN_ADDRESS, add_current_dealer, re_register_dealer};
|
||||
use cosmwasm_std::testing::{message_info, mock_env};
|
||||
use nym_coconut_dkg_common::dealer::DealerDetails;
|
||||
use nym_coconut_dkg_common::types::{ContractSafeBytes, TimeConfiguration};
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use crate::epoch_state::storage::{
|
||||
load_current_epoch, EPOCH_THRESHOLDS, HISTORICAL_EPOCH, THRESHOLD,
|
||||
EPOCH_THRESHOLDS, HISTORICAL_EPOCH, THRESHOLD, load_current_epoch,
|
||||
};
|
||||
use crate::epoch_state::utils::check_state_completion;
|
||||
use crate::error::ContractError;
|
||||
@@ -63,9 +63,9 @@ pub(crate) fn query_epoch_threshold(
|
||||
pub(crate) mod test {
|
||||
use super::*;
|
||||
use crate::epoch_state::transactions::try_initiate_dkg;
|
||||
use crate::support::tests::helpers::{init_contract, ADMIN_ADDRESS};
|
||||
use cosmwasm_std::testing::{message_info, mock_env};
|
||||
use crate::support::tests::helpers::{ADMIN_ADDRESS, init_contract};
|
||||
use cosmwasm_std::Addr;
|
||||
use cosmwasm_std::testing::{message_info, mock_env};
|
||||
use nym_coconut_dkg_common::types::TimeConfiguration;
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -41,7 +41,7 @@ pub fn load_current_epoch(storage: &dyn Storage) -> StdResult<Epoch> {
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::epoch_state::transactions::{try_advance_epoch_state, try_initiate_dkg};
|
||||
use crate::support::tests::helpers::{init_contract, ADMIN_ADDRESS};
|
||||
use crate::support::tests::helpers::{ADMIN_ADDRESS, init_contract};
|
||||
use cosmwasm_std::testing::{message_info, mock_dependencies, mock_env};
|
||||
use cosmwasm_std::{Addr, Env};
|
||||
use nym_coconut_dkg_common::types::EpochState;
|
||||
@@ -80,9 +80,11 @@ mod tests {
|
||||
let mut empty_deps = mock_dependencies();
|
||||
|
||||
// before contract is initialised, there's nothing saved
|
||||
assert!(HISTORICAL_EPOCH
|
||||
.may_load(empty_deps.as_mut().storage)?
|
||||
.is_none());
|
||||
assert!(
|
||||
HISTORICAL_EPOCH
|
||||
.may_load(empty_deps.as_mut().storage)?
|
||||
.is_none()
|
||||
);
|
||||
|
||||
let mut deps = init_contract();
|
||||
let mut env = EnvWrapper { env: mock_env() };
|
||||
@@ -153,9 +155,11 @@ mod tests {
|
||||
);
|
||||
|
||||
// check old data
|
||||
assert!(HISTORICAL_EPOCH
|
||||
.may_load_at_height(deps.as_mut().storage, init_height - 1)?
|
||||
.is_none());
|
||||
assert!(
|
||||
HISTORICAL_EPOCH
|
||||
.may_load_at_height(deps.as_mut().storage, init_height - 1)?
|
||||
.is_none()
|
||||
);
|
||||
assert_eq!(
|
||||
HISTORICAL_EPOCH
|
||||
.may_load_at_height(deps.as_mut().storage, init_height + 1)?
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2024 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use crate::epoch_state::storage::{load_current_epoch, save_epoch, EPOCH_THRESHOLDS, THRESHOLD};
|
||||
use crate::epoch_state::storage::{EPOCH_THRESHOLDS, THRESHOLD, load_current_epoch, save_epoch};
|
||||
use crate::epoch_state::transactions::reset_dkg_state;
|
||||
use crate::epoch_state::utils::check_state_completion;
|
||||
use crate::error::ContractError;
|
||||
@@ -95,7 +95,7 @@ mod tests {
|
||||
use crate::epoch_state::utils::check_epoch_state;
|
||||
use crate::error::ContractError::EarlyEpochStateAdvancement;
|
||||
use crate::state::storage::STATE;
|
||||
use crate::support::tests::helpers::{init_contract, ADMIN_ADDRESS};
|
||||
use crate::support::tests::helpers::{ADMIN_ADDRESS, init_contract};
|
||||
use cosmwasm_std::testing::{message_info, mock_env};
|
||||
use cosmwasm_std::{Addr, Storage};
|
||||
use nym_coconut_dkg_common::types::TimeConfiguration;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2022-2024 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use crate::epoch_state::storage::{load_current_epoch, save_epoch, THRESHOLD};
|
||||
use crate::epoch_state::storage::{THRESHOLD, load_current_epoch, save_epoch};
|
||||
use crate::error::ContractError;
|
||||
use crate::state::storage::DKG_ADMIN;
|
||||
use cosmwasm_std::{DepsMut, Env, MessageInfo, Response, Storage};
|
||||
@@ -90,9 +90,9 @@ pub(crate) fn try_trigger_resharing(
|
||||
pub(crate) mod tests {
|
||||
use super::*;
|
||||
use crate::epoch_state::storage::load_current_epoch;
|
||||
use crate::support::tests::helpers::{init_contract, ADMIN_ADDRESS};
|
||||
use cosmwasm_std::testing::{message_info, mock_env};
|
||||
use crate::support::tests::helpers::{ADMIN_ADDRESS, init_contract};
|
||||
use cosmwasm_std::Addr;
|
||||
use cosmwasm_std::testing::{message_info, mock_env};
|
||||
use cw_controllers::AdminError;
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -68,8 +68,8 @@ pub(crate) mod test {
|
||||
use super::*;
|
||||
use crate::epoch_state::storage::save_epoch;
|
||||
use crate::support::tests::helpers::init_contract;
|
||||
use cosmwasm_std::testing::mock_env;
|
||||
use cosmwasm_std::Timestamp;
|
||||
use cosmwasm_std::testing::mock_env;
|
||||
use nym_coconut_dkg_common::types::TimeConfiguration;
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -51,7 +51,9 @@ pub enum ContractError {
|
||||
#[error("This sender is not a dealer for epoch {epoch_id}")]
|
||||
NotADealer { epoch_id: EpochId },
|
||||
|
||||
#[error("Dealer {dealer} has already committed dealing chunk for epoch {epoch_id} with dealing index {dealing_index} and chunk index {chunk_index} at height {block_height}")]
|
||||
#[error(
|
||||
"Dealer {dealer} has already committed dealing chunk for epoch {epoch_id} with dealing index {dealing_index} and chunk index {chunk_index} at height {block_height}"
|
||||
)]
|
||||
DealingChunkAlreadyCommitted {
|
||||
epoch_id: EpochId,
|
||||
dealer: Addr,
|
||||
@@ -60,7 +62,9 @@ pub enum ContractError {
|
||||
block_height: u64,
|
||||
},
|
||||
|
||||
#[error("dealer {dealer} tried to commit chunk {chunk_index} of dealing {dealing_index} for epoch {epoch_id}, but it hasn't been declared in the prior metadata")]
|
||||
#[error(
|
||||
"dealer {dealer} tried to commit chunk {chunk_index} of dealing {dealing_index} for epoch {epoch_id}, but it hasn't been declared in the prior metadata"
|
||||
)]
|
||||
DealingChunkNotInMetadata {
|
||||
epoch_id: EpochId,
|
||||
dealer: Addr,
|
||||
@@ -68,7 +72,9 @@ pub enum ContractError {
|
||||
chunk_index: ChunkIndex,
|
||||
},
|
||||
|
||||
#[error("dealer {dealer} has attempted to commit dealing chunk for epoch {epoch_id} with dealing index {index} while the key size is set to {key_size}")]
|
||||
#[error(
|
||||
"dealer {dealer} has attempted to commit dealing chunk for epoch {epoch_id} with dealing index {index} while the key size is set to {key_size}"
|
||||
)]
|
||||
DealingOutOfRange {
|
||||
epoch_id: EpochId,
|
||||
dealer: Addr,
|
||||
@@ -76,7 +82,10 @@ pub enum ContractError {
|
||||
key_size: u32,
|
||||
},
|
||||
|
||||
#[error("dealer {dealer} has attempted to commit dealing metadata for epoch {epoch_id} for dealing index {dealing_index} with {chunks} chunks while at most {} chunks are allowed", MAX_DEALING_CHUNKS)]
|
||||
#[error(
|
||||
"dealer {dealer} has attempted to commit dealing metadata for epoch {epoch_id} for dealing index {dealing_index} with {chunks} chunks while at most {} chunks are allowed",
|
||||
MAX_DEALING_CHUNKS
|
||||
)]
|
||||
TooFragmentedMetadata {
|
||||
epoch_id: EpochId,
|
||||
dealer: Addr,
|
||||
@@ -84,7 +93,9 @@ pub enum ContractError {
|
||||
chunks: usize,
|
||||
},
|
||||
|
||||
#[error("the declared chunk split for epoch {epoch_id} from dealer {dealer} for dealing index {dealing_index} is uneven. first chunk has size of {first_chunk_size} while chunk at index {chunk_index} has {size}")]
|
||||
#[error(
|
||||
"the declared chunk split for epoch {epoch_id} from dealer {dealer} for dealing index {dealing_index} is uneven. first chunk has size of {first_chunk_size} while chunk at index {chunk_index} has {size}"
|
||||
)]
|
||||
UnevenChunkSplit {
|
||||
epoch_id: EpochId,
|
||||
dealer: Addr,
|
||||
@@ -94,7 +105,9 @@ pub enum ContractError {
|
||||
size: u64,
|
||||
},
|
||||
|
||||
#[error("the received chunk for epoch {epoch_id} from dealer {dealer} at dealing index {dealing_index} at chunk index {chunk_index} has inconsistent length. the metadata contains length of {metadata_length} while the received data is {received} bytes long")]
|
||||
#[error(
|
||||
"the received chunk for epoch {epoch_id} from dealer {dealer} at dealing index {dealing_index} at chunk index {chunk_index} has inconsistent length. the metadata contains length of {metadata_length} while the received data is {received} bytes long"
|
||||
)]
|
||||
InconsistentChunkLength {
|
||||
epoch_id: EpochId,
|
||||
dealer: Addr,
|
||||
@@ -104,21 +117,27 @@ pub enum ContractError {
|
||||
received: u64,
|
||||
},
|
||||
|
||||
#[error("dealer {dealer} has attempted to commit dealing metadata for epoch {epoch_id} for dealing index {dealing_index} zero chunks")]
|
||||
#[error(
|
||||
"dealer {dealer} has attempted to commit dealing metadata for epoch {epoch_id} for dealing index {dealing_index} zero chunks"
|
||||
)]
|
||||
EmptyMetadata {
|
||||
epoch_id: EpochId,
|
||||
dealer: Addr,
|
||||
dealing_index: DealingIndex,
|
||||
},
|
||||
|
||||
#[error("metadata for dealing for epoch {epoch_id} from {dealer} at index {dealing_index} does not exist")]
|
||||
#[error(
|
||||
"metadata for dealing for epoch {epoch_id} from {dealer} at index {dealing_index} does not exist"
|
||||
)]
|
||||
UnavailableDealingMetadata {
|
||||
epoch_id: EpochId,
|
||||
dealer: Addr,
|
||||
dealing_index: DealingIndex,
|
||||
},
|
||||
|
||||
#[error("metadata for dealing for epoch {epoch_id} from {dealer} at index {dealing_index} already exists")]
|
||||
#[error(
|
||||
"metadata for dealing for epoch {epoch_id} from {dealer} at index {dealing_index} already exists"
|
||||
)]
|
||||
MetadataAlreadyExists {
|
||||
epoch_id: EpochId,
|
||||
dealer: Addr,
|
||||
@@ -137,7 +156,9 @@ pub enum ContractError {
|
||||
#[error("cannot perform DKG resharing during an ongoing exchange")]
|
||||
CantReshareDuringExchange,
|
||||
|
||||
#[error("retrieved the maximum allowed number of cw4 members. for more the contracts have to be refactored")]
|
||||
#[error(
|
||||
"retrieved the maximum allowed number of cw4 members. for more the contracts have to be refactored"
|
||||
)]
|
||||
PossiblyIncompleteGroupMembersQuery,
|
||||
|
||||
#[error("this method has been called outside transaction context")]
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
// Copyright 2022-2024 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use cosmwasm_std::testing::MockApi;
|
||||
use cosmwasm_std::Addr;
|
||||
use cosmwasm_std::testing::MockApi;
|
||||
use nym_coconut_dkg_common::dealer::DealerDetails;
|
||||
use nym_coconut_dkg_common::dealing::{DealingChunkInfo, PartialContractDealing};
|
||||
use nym_coconut_dkg_common::types::ContractSafeBytes;
|
||||
|
||||
@@ -5,10 +5,10 @@ use super::fixtures::TEST_MIX_DENOM;
|
||||
use crate::contract::instantiate;
|
||||
use crate::dealers::storage::{DEALERS_INDICES, EPOCH_DEALERS_MAP};
|
||||
use crate::epoch_state::storage::load_current_epoch;
|
||||
use cosmwasm_std::testing::{message_info, mock_dependencies, mock_env, MockApi, MockQuerier};
|
||||
use cosmwasm_std::testing::{MockApi, MockQuerier, message_info, mock_dependencies, mock_env};
|
||||
use cosmwasm_std::{
|
||||
from_json, to_json_binary, Addr, ContractResult, DepsMut, Empty, MemoryStorage, OwnedDeps,
|
||||
QuerierResult, SystemResult, WasmQuery,
|
||||
Addr, ContractResult, DepsMut, Empty, MemoryStorage, OwnedDeps, QuerierResult, SystemResult,
|
||||
WasmQuery, from_json, to_json_binary,
|
||||
};
|
||||
use cw4::{Cw4QueryMsg, Member, MemberListResponse, MemberResponse};
|
||||
use easy_addr::addr;
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
|
||||
use crate::contract::{execute, instantiate, migrate, query};
|
||||
use crate::error::ContractError;
|
||||
use cosmwasm_std::testing::message_info;
|
||||
use cosmwasm_std::Addr;
|
||||
use cosmwasm_std::testing::message_info;
|
||||
use cw4::{Cw4Contract, Member};
|
||||
use nym_contracts_common_testing::{
|
||||
AdminExt, ArbitraryContractStorageReader, ArbitraryContractStorageWriter, BankExt, ChainOpts,
|
||||
|
||||
@@ -11,7 +11,7 @@ use crate::verification_key_shares::storage::vk_shares;
|
||||
use cosmwasm_std::{DepsMut, Env, MessageInfo, Response};
|
||||
use nym_coconut_dkg_common::types::EpochState;
|
||||
use nym_coconut_dkg_common::verification_key::{
|
||||
to_cosmos_msg, ContractVKShare, VerificationKeyShare,
|
||||
ContractVKShare, VerificationKeyShare, to_cosmos_msg,
|
||||
};
|
||||
|
||||
pub fn try_commit_verification_key_share(
|
||||
@@ -105,10 +105,10 @@ mod tests {
|
||||
use crate::epoch_state::transactions::{try_advance_epoch_state, try_initiate_dkg};
|
||||
use crate::support::tests::helpers;
|
||||
use crate::support::tests::helpers::{
|
||||
add_current_dealer, add_fixture_dealer, ADMIN_ADDRESS, MULTISIG_CONTRACT,
|
||||
ADMIN_ADDRESS, MULTISIG_CONTRACT, add_current_dealer, add_fixture_dealer,
|
||||
};
|
||||
use cosmwasm_std::testing::{message_info, mock_env};
|
||||
use cosmwasm_std::Addr;
|
||||
use cosmwasm_std::testing::{message_info, mock_env};
|
||||
use cw_controllers::AdminError;
|
||||
use nym_coconut_dkg_common::dealer::DealerDetails;
|
||||
use nym_coconut_dkg_common::types::TimeConfiguration;
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
|
||||
use crate::contract::NymEcashContract;
|
||||
use crate::helpers::{
|
||||
create_batch_redemption_proposal, create_blacklist_proposal, Config, ProposalId,
|
||||
Config, ProposalId, create_batch_redemption_proposal, create_blacklist_proposal,
|
||||
};
|
||||
use cosmwasm_schema::cw_serde;
|
||||
use cosmwasm_std::{to_json_binary, Addr, Coin, Decimal, Deps, Storage, SubMsg, Uint128};
|
||||
use cosmwasm_std::{Addr, Coin, Decimal, Deps, Storage, SubMsg, Uint128, to_json_binary};
|
||||
use cw3::ProposalResponse;
|
||||
use nym_ecash_contract_common::EcashContractError;
|
||||
use nym_multisig_contract_common::msg::QueryMsg as MultisigQueryMsg;
|
||||
|
||||
@@ -5,14 +5,15 @@ use crate::constants::{BLACKLIST_PROPOSAL_REPLY_ID, REDEMPTION_PROPOSAL_REPLY_ID
|
||||
use crate::contract::helpers::Invariants;
|
||||
use crate::deposit::DepositStorage;
|
||||
use crate::helpers::{
|
||||
BlacklistKey, Config, MultisigReply, BLACKLIST_PAGE_DEFAULT_LIMIT, BLACKLIST_PAGE_MAX_LIMIT,
|
||||
CONTRACT_NAME, CONTRACT_VERSION, DEPOSITS_PAGE_DEFAULT_LIMIT, DEPOSITS_PAGE_MAX_LIMIT,
|
||||
BLACKLIST_PAGE_DEFAULT_LIMIT, BLACKLIST_PAGE_MAX_LIMIT, BlacklistKey, CONTRACT_NAME,
|
||||
CONTRACT_VERSION, Config, DEPOSITS_PAGE_DEFAULT_LIMIT, DEPOSITS_PAGE_MAX_LIMIT, MultisigReply,
|
||||
};
|
||||
use cosmwasm_std::{coin, BankMsg, Coin, Event, Order, Reply, Response, StdResult};
|
||||
use cw4::Cw4Contract;
|
||||
use cosmwasm_std::{BankMsg, Coin, Event, Order, Reply, Response, StdResult, coin};
|
||||
use cw_controllers::Admin;
|
||||
use cw_storage_plus::{Bound, Item, Map};
|
||||
use cw4::Cw4Contract;
|
||||
use nym_contracts_common::set_build_information;
|
||||
use nym_ecash_contract_common::EcashContractError;
|
||||
use nym_ecash_contract_common::blacklist::{
|
||||
BlacklistedAccount, BlacklistedAccountResponse, Blacklisting, PagedBlacklistedAccountResponse,
|
||||
};
|
||||
@@ -21,9 +22,8 @@ use nym_ecash_contract_common::deposit::{
|
||||
DepositData, DepositResponse, LatestDepositResponse, PagedDepositsResponse,
|
||||
};
|
||||
use nym_ecash_contract_common::events::{
|
||||
DEPOSITED_FUNDS_EVENT_TYPE, DEPOSIT_ID, PROPOSAL_ID_ATTRIBUTE_NAME,
|
||||
DEPOSIT_ID, DEPOSITED_FUNDS_EVENT_TYPE, PROPOSAL_ID_ATTRIBUTE_NAME,
|
||||
};
|
||||
use nym_ecash_contract_common::EcashContractError;
|
||||
use nym_network_defaults::TICKETBOOK_SIZE;
|
||||
use sylvia::ctx::{ExecCtx, InstantiateCtx, MigrateCtx, QueryCtx};
|
||||
use sylvia::{contract, entry_points};
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
use crate::contract::NymEcashContract;
|
||||
use crate::helpers::Config;
|
||||
use cosmwasm_std::{Addr, Coin, Decimal, DepsMut};
|
||||
use cw4::Cw4Contract;
|
||||
use cw_storage_plus::Item;
|
||||
use cw4::Cw4Contract;
|
||||
use nym_ecash_contract_common::EcashContractError;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use crate::contract::NymEcashContract;
|
||||
use cosmwasm_std::testing::{message_info, mock_dependencies, mock_env, MockApi, MockQuerier};
|
||||
use cosmwasm_std::{coin, Addr, Empty, Env, MemoryStorage, OwnedDeps};
|
||||
use cosmwasm_std::testing::{MockApi, MockQuerier, message_info, mock_dependencies, mock_env};
|
||||
use cosmwasm_std::{Addr, Empty, Env, MemoryStorage, OwnedDeps, coin};
|
||||
use sylvia::ctx::{InstantiateCtx, QueryCtx};
|
||||
|
||||
pub const TEST_DENOM: &str = "unym";
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use cosmwasm_std::{Order, StdResult, Storage};
|
||||
use cw_storage_plus::{range_with_prefix, Bound, Item, Key, Path, Prefix, PrimaryKey};
|
||||
use cw_storage_plus::{Bound, Item, Key, Path, Prefix, PrimaryKey, range_with_prefix};
|
||||
use nym_ecash_contract_common::deposit::DepositId;
|
||||
use nym_ecash_contract_common::{deposit::Deposit, EcashContractError};
|
||||
use nym_ecash_contract_common::{EcashContractError, deposit::Deposit};
|
||||
use std::ops::Deref;
|
||||
|
||||
pub(crate) struct DepositStorage {
|
||||
|
||||
@@ -3,14 +3,14 @@
|
||||
|
||||
use crate::constants::{BLACKLIST_PROPOSAL_REPLY_ID, REDEMPTION_PROPOSAL_REPLY_ID};
|
||||
use cosmwasm_std::{
|
||||
to_json_binary, Addr, Coin, CosmosMsg, Reply, StdError, StdResult, SubMsg, SubMsgResult,
|
||||
WasmMsg,
|
||||
Addr, Coin, CosmosMsg, Reply, StdError, StdResult, SubMsg, SubMsgResult, WasmMsg,
|
||||
to_json_binary,
|
||||
};
|
||||
use cw4::Cw4Contract;
|
||||
use nym_contracts_common::events::try_find_attribute;
|
||||
use nym_ecash_contract_common::events::{PROPOSAL_ID_ATTRIBUTE_NAME, WASM_EVENT_NAME};
|
||||
use nym_ecash_contract_common::redeem_credential::BATCH_REDEMPTION_PROPOSAL_TITLE;
|
||||
use nym_ecash_contract_common::{msg::ExecuteMsg, EcashContractError};
|
||||
use nym_ecash_contract_common::{EcashContractError, msg::ExecuteMsg};
|
||||
use nym_multisig_contract_common::msg::ExecuteMsg as MultisigExecuteMsg;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use cosmwasm_std::testing::MockApi;
|
||||
use cosmwasm_std::{coin, Coin};
|
||||
use cosmwasm_std::{Coin, coin};
|
||||
use cw_multi_test::IntoBech32;
|
||||
use cw_utils::PaymentError;
|
||||
use nym_ecash_contract_common::EcashContractError;
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
|
||||
use crate::contract::NymEcashContract;
|
||||
use crate::helpers::Config;
|
||||
use cosmwasm_std::testing::{message_info, mock_dependencies, mock_env, MockApi, MockQuerier};
|
||||
use cosmwasm_std::{coin, Addr, Deps, Empty, Env, MemoryStorage, MessageInfo, OwnedDeps};
|
||||
use rand_chacha::rand_core::SeedableRng;
|
||||
use cosmwasm_std::testing::{MockApi, MockQuerier, message_info, mock_dependencies, mock_env};
|
||||
use cosmwasm_std::{Addr, Deps, Empty, Env, MemoryStorage, MessageInfo, OwnedDeps, coin};
|
||||
use rand_chacha::ChaCha20Rng;
|
||||
use rand_chacha::rand_core::SeedableRng;
|
||||
use sylvia::ctx::{ExecCtx, InstantiateCtx, QueryCtx};
|
||||
|
||||
pub fn test_rng() -> ChaCha20Rng {
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
use crate::support::setup::{MIX_DENOM, REWARDING_VALIDATOR};
|
||||
use cosmwasm_std::Decimal;
|
||||
use nym_contracts_common::Percent;
|
||||
use nym_mixnet_contract_common::reward_params::RewardedSetParams;
|
||||
use nym_mixnet_contract_common::InitialRewardingParams;
|
||||
use nym_mixnet_contract_common::reward_params::RewardedSetParams;
|
||||
use std::time::Duration;
|
||||
|
||||
pub fn default_mixnet_init_msg() -> nym_mixnet_contract_common::InstantiateMsg {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
// Copyright 2023 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use crate::support::setup::{MIXNET_OWNER, MIX_DENOM, REWARDING_VALIDATOR, VESTING_OWNER};
|
||||
use cosmwasm_std::{coin, coins, Addr, Coin, Empty};
|
||||
use crate::support::setup::{MIX_DENOM, MIXNET_OWNER, REWARDING_VALIDATOR, VESTING_OWNER};
|
||||
use cosmwasm_std::{Addr, Coin, Empty, coin, coins};
|
||||
use cw_multi_test::{Contract, ContractWrapper};
|
||||
use rand_chacha::rand_core::SeedableRng;
|
||||
use rand_chacha::ChaCha20Rng;
|
||||
use rand_chacha::rand_core::SeedableRng;
|
||||
|
||||
#[allow(unused)]
|
||||
pub fn mixnet_owner() -> Addr {
|
||||
|
||||
@@ -5,7 +5,7 @@ use crate::support::fixtures;
|
||||
use crate::support::helpers::{
|
||||
mixnet_contract_wrapper, rewarding_validator, test_rng, vesting_contract_wrapper,
|
||||
};
|
||||
use cosmwasm_std::{coins, Addr, Coin, Decimal, Timestamp};
|
||||
use cosmwasm_std::{Addr, Coin, Decimal, Timestamp, coins};
|
||||
use cw_multi_test::{App, AppBuilder, Executor};
|
||||
use nym_contracts_common::signing::{ContractMessageContent, MessageSignature, Nonce};
|
||||
use nym_crypto::asymmetric::ed25519;
|
||||
|
||||
@@ -13,7 +13,7 @@ use crate::transactions::{
|
||||
try_withdraw_locked_allowance,
|
||||
};
|
||||
use cosmwasm_std::{
|
||||
entry_point, to_json_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response,
|
||||
Binary, Deps, DepsMut, Env, MessageInfo, Response, entry_point, to_json_binary,
|
||||
};
|
||||
use nym_contracts_common::set_build_information;
|
||||
use nym_pool_contract_common::{
|
||||
@@ -193,7 +193,7 @@ mod tests {
|
||||
#[cfg(test)]
|
||||
mod setting_initial_grants {
|
||||
use super::*;
|
||||
use cosmwasm_std::{coin, Order, Storage};
|
||||
use cosmwasm_std::{Order, Storage, coin};
|
||||
use nym_contracts_common_testing::deps_with_balance;
|
||||
use nym_pool_contract_common::{Allowance, BasicAllowance, Grant, GranteeAddress};
|
||||
use std::collections::HashMap;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2025 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use crate::storage::{retrieval_limits, NYM_POOL_STORAGE};
|
||||
use crate::storage::{NYM_POOL_STORAGE, retrieval_limits};
|
||||
use cosmwasm_std::{Coin, Deps, Env, Order, StdResult};
|
||||
use cw_controllers::AdminResponse;
|
||||
use cw_storage_plus::Bound;
|
||||
@@ -182,9 +182,9 @@ pub fn query_granters_paged(
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::contract::instantiate;
|
||||
use crate::testing::{init_contract_tester, NymPoolContractTesterExt, TEST_DENOM};
|
||||
use crate::testing::{NymPoolContractTesterExt, TEST_DENOM, init_contract_tester};
|
||||
use cosmwasm_std::testing::{message_info, mock_dependencies_with_balance, mock_env};
|
||||
use cosmwasm_std::{coin, Uint128};
|
||||
use cosmwasm_std::{Uint128, coin};
|
||||
use nym_contracts_common_testing::{AdminExt, ChainOpts, ContractOpts, DenomExt, RandExt};
|
||||
use nym_pool_contract_common::{Allowance, BasicAllowance, GranterInformation, InstantiateMsg};
|
||||
|
||||
@@ -574,7 +574,7 @@ mod tests {
|
||||
#[cfg(test)]
|
||||
mod grants_paged_query {
|
||||
use super::*;
|
||||
use crate::testing::{init_contract_tester, NymPoolContract};
|
||||
use crate::testing::{NymPoolContract, init_contract_tester};
|
||||
use nym_contracts_common_testing::{ContractOpts, ContractTester};
|
||||
|
||||
fn grants_sorted(
|
||||
|
||||
+233
-149
@@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use crate::helpers::validate_usage_coin;
|
||||
use cosmwasm_std::{coin, Addr, Coin, Deps, DepsMut, Env, Storage, Uint128};
|
||||
use cosmwasm_std::{Addr, Coin, Deps, DepsMut, Env, Storage, Uint128, coin};
|
||||
use cw_controllers::Admin;
|
||||
use cw_storage_plus::{Item, Map};
|
||||
use nym_pool_contract_common::constants::storage_keys;
|
||||
@@ -489,11 +489,11 @@ mod tests {
|
||||
#[cfg(test)]
|
||||
mod nympool_storage {
|
||||
use super::*;
|
||||
use crate::testing::{init_contract_tester, NymPoolContractTesterExt, TEST_DENOM};
|
||||
use crate::testing::{NymPoolContractTesterExt, TEST_DENOM, init_contract_tester};
|
||||
use cosmwasm_std::testing::{
|
||||
mock_dependencies, mock_env, MockApi, MockQuerier, MockStorage,
|
||||
MockApi, MockQuerier, MockStorage, mock_dependencies, mock_env,
|
||||
};
|
||||
use cosmwasm_std::{coin, coins, Empty, OwnedDeps};
|
||||
use cosmwasm_std::{Empty, OwnedDeps, coin, coins};
|
||||
use nym_contracts_common_testing::{AdminExt, ContractOpts, RandExt};
|
||||
use nym_pool_contract_common::BasicAllowance;
|
||||
|
||||
@@ -502,7 +502,7 @@ mod tests {
|
||||
use super::*;
|
||||
use crate::testing::TEST_DENOM;
|
||||
use cosmwasm_std::testing::{mock_dependencies, mock_env};
|
||||
use cosmwasm_std::{coin, Order};
|
||||
use cosmwasm_std::{Order, coin};
|
||||
use nym_contracts_common_testing::deps_with_balance;
|
||||
use nym_pool_contract_common::BasicAllowance;
|
||||
|
||||
@@ -688,9 +688,11 @@ mod tests {
|
||||
let mut grants = HashMap::new();
|
||||
grants.insert(deps.api.addr_make("gr1").to_string(), dummy_allowance());
|
||||
grants.insert("invalid_address".to_string(), dummy_allowance());
|
||||
assert!(storage
|
||||
.initialise(deps.as_mut(), env.clone(), admin.clone(), denom, grants)
|
||||
.is_err());
|
||||
assert!(
|
||||
storage
|
||||
.initialise(deps.as_mut(), env.clone(), admin.clone(), denom, grants)
|
||||
.is_err()
|
||||
);
|
||||
|
||||
// fails on invalid allowance
|
||||
let mut deps = deps_with_balance(&env);
|
||||
@@ -702,9 +704,11 @@ mod tests {
|
||||
expiration_unix_timestamp: None,
|
||||
}),
|
||||
);
|
||||
assert!(storage
|
||||
.initialise(deps.as_mut(), env.clone(), admin, denom, grants)
|
||||
.is_err());
|
||||
assert!(
|
||||
storage
|
||||
.initialise(deps.as_mut(), env.clone(), admin, denom, grants)
|
||||
.is_err()
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -782,11 +786,13 @@ mod tests {
|
||||
let denom = &TEST_DENOM.to_string();
|
||||
|
||||
storage.initialise(deps.as_mut(), env, admin, denom, HashMap::new())?;
|
||||
assert!(storage
|
||||
.locked
|
||||
.total_locked
|
||||
.load(deps.as_ref().storage)?
|
||||
.is_zero());
|
||||
assert!(
|
||||
storage
|
||||
.locked
|
||||
.total_locked
|
||||
.load(deps.as_ref().storage)?
|
||||
.is_zero()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -966,12 +972,16 @@ mod tests {
|
||||
let not_granter = test.generate_account();
|
||||
|
||||
let deps = test.deps();
|
||||
assert!(storage
|
||||
.ensure_is_whitelisted_granter(deps, &granter)
|
||||
.is_ok());
|
||||
assert!(storage
|
||||
.ensure_is_whitelisted_granter(deps, ¬_granter)
|
||||
.is_err());
|
||||
assert!(
|
||||
storage
|
||||
.ensure_is_whitelisted_granter(deps, &granter)
|
||||
.is_ok()
|
||||
);
|
||||
assert!(
|
||||
storage
|
||||
.ensure_is_whitelisted_granter(deps, ¬_granter)
|
||||
.is_err()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -1207,14 +1217,18 @@ mod tests {
|
||||
let admin = test.admin_unchecked();
|
||||
let granter = test.generate_account();
|
||||
|
||||
assert!(storage
|
||||
.remove_granter(test.deps_mut(), &admin, &granter)
|
||||
.is_err());
|
||||
assert!(
|
||||
storage
|
||||
.remove_granter(test.deps_mut(), &admin, &granter)
|
||||
.is_err()
|
||||
);
|
||||
|
||||
test.add_granter(&granter);
|
||||
assert!(storage
|
||||
.remove_granter(test.deps_mut(), &admin, &granter)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.remove_granter(test.deps_mut(), &admin, &granter)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -1230,33 +1244,43 @@ mod tests {
|
||||
test.add_granter(&granter);
|
||||
|
||||
// can't be removed by the granter itself
|
||||
assert!(storage
|
||||
.remove_granter(test.deps_mut(), &granter, &granter)
|
||||
.is_err());
|
||||
assert!(
|
||||
storage
|
||||
.remove_granter(test.deps_mut(), &granter, &granter)
|
||||
.is_err()
|
||||
);
|
||||
|
||||
// not by some random address
|
||||
assert!(storage
|
||||
.remove_granter(test.deps_mut(), &random_address, &granter)
|
||||
.is_err());
|
||||
assert!(
|
||||
storage
|
||||
.remove_granter(test.deps_mut(), &random_address, &granter)
|
||||
.is_err()
|
||||
);
|
||||
|
||||
// admin can do it though!
|
||||
assert!(storage
|
||||
.remove_granter(test.deps_mut(), &admin, &granter)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.remove_granter(test.deps_mut(), &admin, &granter)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
test.add_granter(&granter);
|
||||
let new_admin = test.generate_account();
|
||||
test.change_admin(&new_admin);
|
||||
|
||||
// old admin can't do anything : (
|
||||
assert!(storage
|
||||
.remove_granter(test.deps_mut(), &admin, &granter)
|
||||
.is_err());
|
||||
assert!(
|
||||
storage
|
||||
.remove_granter(test.deps_mut(), &admin, &granter)
|
||||
.is_err()
|
||||
);
|
||||
|
||||
// but new admin can!
|
||||
assert!(storage
|
||||
.remove_granter(test.deps_mut(), &new_admin, &granter)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.remove_granter(test.deps_mut(), &new_admin, &granter)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -1270,17 +1294,21 @@ mod tests {
|
||||
let granter = test.generate_account();
|
||||
test.add_granter(&granter);
|
||||
|
||||
assert!(storage
|
||||
.granters
|
||||
.may_load(test.storage(), granter.clone())?
|
||||
.is_some());
|
||||
assert!(
|
||||
storage
|
||||
.granters
|
||||
.may_load(test.storage(), granter.clone())?
|
||||
.is_some()
|
||||
);
|
||||
|
||||
storage.remove_granter(test.deps_mut(), &admin, &granter)?;
|
||||
|
||||
assert!(storage
|
||||
.granters
|
||||
.may_load(test.storage(), granter.clone())?
|
||||
.is_none());
|
||||
assert!(
|
||||
storage
|
||||
.granters
|
||||
.may_load(test.storage(), granter.clone())?
|
||||
.is_none()
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
@@ -1478,14 +1506,16 @@ mod tests {
|
||||
assert!(matches!(res, NymPoolContractError::GrantNotFound { .. }));
|
||||
|
||||
test.add_dummy_grant_for(&grantee);
|
||||
assert!(storage
|
||||
.try_spend_part_of_grant(
|
||||
test.deps_mut(),
|
||||
&env,
|
||||
&grantee,
|
||||
&coin(100, TEST_DENOM)
|
||||
)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.try_spend_part_of_grant(
|
||||
test.deps_mut(),
|
||||
&env,
|
||||
&grantee,
|
||||
&coin(100, TEST_DENOM)
|
||||
)
|
||||
.is_ok()
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -1629,17 +1659,21 @@ mod tests {
|
||||
// removes the actual entry from the map
|
||||
test.add_dummy_grant_for(&grantee);
|
||||
|
||||
assert!(storage
|
||||
.grants
|
||||
.may_load(test.storage(), grantee.clone())?
|
||||
.is_some());
|
||||
assert!(
|
||||
storage
|
||||
.grants
|
||||
.may_load(test.storage(), grantee.clone())?
|
||||
.is_some()
|
||||
);
|
||||
|
||||
assert!(storage.remove_grant(test.deps_mut(), &grantee).is_ok());
|
||||
|
||||
assert!(storage
|
||||
.grants
|
||||
.may_load(test.storage(), grantee.clone())?
|
||||
.is_none());
|
||||
assert!(
|
||||
storage
|
||||
.grants
|
||||
.may_load(test.storage(), grantee.clone())?
|
||||
.is_none()
|
||||
);
|
||||
|
||||
// if applicable, unlocks any locked tokens
|
||||
// (all the details of unlocking are already tested in different unit test(s),
|
||||
@@ -1649,11 +1683,13 @@ mod tests {
|
||||
|
||||
assert!(storage.remove_grant(test.deps_mut(), &grantee2).is_ok());
|
||||
|
||||
assert!(storage
|
||||
.locked
|
||||
.grantees
|
||||
.may_load(test.storage(), grantee2)?
|
||||
.is_none());
|
||||
assert!(
|
||||
storage
|
||||
.locked
|
||||
.grantees
|
||||
.may_load(test.storage(), grantee2)?
|
||||
.is_none()
|
||||
);
|
||||
assert!(storage.locked.total_locked.load(test.storage())?.is_zero());
|
||||
|
||||
Ok(())
|
||||
@@ -1682,9 +1718,11 @@ mod tests {
|
||||
);
|
||||
|
||||
test.add_dummy_grant_for(&grantee);
|
||||
assert!(storage
|
||||
.revoke_grant(test.deps_mut(), &grantee, &admin)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.revoke_grant(test.deps_mut(), &grantee, &admin)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -1698,17 +1736,21 @@ mod tests {
|
||||
|
||||
// current admin
|
||||
let admin = test.admin_unchecked();
|
||||
assert!(storage
|
||||
.revoke_grant(test.deps_mut(), &grantee, &admin)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.revoke_grant(test.deps_mut(), &grantee, &admin)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
// new admin
|
||||
let new_admin = test.generate_account();
|
||||
let grantee = test.add_dummy_grant().grantee;
|
||||
test.change_admin(&new_admin);
|
||||
assert!(storage
|
||||
.revoke_grant(test.deps_mut(), &grantee, &new_admin)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.revoke_grant(test.deps_mut(), &grantee, &new_admin)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
// old admin
|
||||
let grantee = test.add_dummy_grant().grantee;
|
||||
@@ -1750,9 +1792,11 @@ mod tests {
|
||||
)?;
|
||||
|
||||
// still whitelisted
|
||||
assert!(storage
|
||||
.revoke_grant(test.deps_mut(), &grantee1, &granter)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.revoke_grant(test.deps_mut(), &grantee1, &granter)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
// not whitelisted anymore
|
||||
storage.remove_granter(test.deps_mut(), &admin, &granter)?;
|
||||
@@ -1775,10 +1819,12 @@ mod tests {
|
||||
let grantee = test.add_dummy_grant().grantee;
|
||||
|
||||
storage.revoke_grant(test.deps_mut(), &grantee, &admin)?;
|
||||
assert!(storage
|
||||
.grants
|
||||
.may_load(test.storage(), grantee.clone())?
|
||||
.is_none());
|
||||
assert!(
|
||||
storage
|
||||
.grants
|
||||
.may_load(test.storage(), grantee.clone())?
|
||||
.is_none()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -1801,12 +1847,16 @@ mod tests {
|
||||
|
||||
let env = test.env();
|
||||
|
||||
assert!(storage
|
||||
.lock_part_of_allowance(test.deps_mut(), &env, &grantee, bad_amount)
|
||||
.is_err());
|
||||
assert!(storage
|
||||
.lock_part_of_allowance(test.deps_mut(), &env, &grantee, good_amount)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.lock_part_of_allowance(test.deps_mut(), &env, &grantee, bad_amount)
|
||||
.is_err()
|
||||
);
|
||||
assert!(
|
||||
storage
|
||||
.lock_part_of_allowance(test.deps_mut(), &env, &grantee, good_amount)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -1821,15 +1871,19 @@ mod tests {
|
||||
let amount = test.coin(100);
|
||||
|
||||
// doesn't exist
|
||||
assert!(storage
|
||||
.lock_part_of_allowance(test.deps_mut(), &env, &grantee, amount.clone())
|
||||
.is_err());
|
||||
assert!(
|
||||
storage
|
||||
.lock_part_of_allowance(test.deps_mut(), &env, &grantee, amount.clone())
|
||||
.is_err()
|
||||
);
|
||||
|
||||
// does exist
|
||||
test.add_dummy_grant_for(&grantee);
|
||||
assert!(storage
|
||||
.lock_part_of_allowance(test.deps_mut(), &env, &grantee, amount)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.lock_part_of_allowance(test.deps_mut(), &env, &grantee, amount)
|
||||
.is_ok()
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -1848,14 +1902,18 @@ mod tests {
|
||||
storage.insert_new_grant(test.deps_mut(), &env, &admin, &grantee, allowance)?;
|
||||
|
||||
let amount = test.coin(101);
|
||||
assert!(storage
|
||||
.lock_part_of_allowance(test.deps_mut(), &env, &grantee, amount)
|
||||
.is_err());
|
||||
assert!(
|
||||
storage
|
||||
.lock_part_of_allowance(test.deps_mut(), &env, &grantee, amount)
|
||||
.is_err()
|
||||
);
|
||||
|
||||
let amount = test.coin(100);
|
||||
assert!(storage
|
||||
.lock_part_of_allowance(test.deps_mut(), &env, &grantee, amount)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.lock_part_of_allowance(test.deps_mut(), &env, &grantee, amount)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -1962,7 +2020,7 @@ mod tests {
|
||||
#[cfg(test)]
|
||||
mod unlocking_part_of_allowance {
|
||||
use super::*;
|
||||
use crate::testing::{init_contract_tester, NymPoolContract};
|
||||
use crate::testing::{NymPoolContract, init_contract_tester};
|
||||
use nym_contracts_common_testing::{ContractTester, DenomExt};
|
||||
|
||||
fn setup_locked_grant(test: &mut ContractTester<NymPoolContract>) -> Addr {
|
||||
@@ -1980,12 +2038,16 @@ mod tests {
|
||||
let bad_amount = coin(0, "invalid-denom");
|
||||
let good_amount = test.coin(100);
|
||||
|
||||
assert!(storage
|
||||
.unlock_part_of_allowance(test.deps_mut(), &grantee, &bad_amount)
|
||||
.is_err());
|
||||
assert!(storage
|
||||
.unlock_part_of_allowance(test.deps_mut(), &grantee, &good_amount)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.unlock_part_of_allowance(test.deps_mut(), &grantee, &bad_amount)
|
||||
.is_err()
|
||||
);
|
||||
assert!(
|
||||
storage
|
||||
.unlock_part_of_allowance(test.deps_mut(), &grantee, &good_amount)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -1997,14 +2059,18 @@ mod tests {
|
||||
let grantee = setup_locked_grant(&mut test);
|
||||
|
||||
let amount = test.coin(101);
|
||||
assert!(storage
|
||||
.unlock_part_of_allowance(test.deps_mut(), &grantee, &amount)
|
||||
.is_err());
|
||||
assert!(
|
||||
storage
|
||||
.unlock_part_of_allowance(test.deps_mut(), &grantee, &amount)
|
||||
.is_err()
|
||||
);
|
||||
|
||||
let amount = test.coin(100);
|
||||
assert!(storage
|
||||
.unlock_part_of_allowance(test.deps_mut(), &grantee, &amount)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.unlock_part_of_allowance(test.deps_mut(), &grantee, &amount)
|
||||
.is_ok()
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -2016,14 +2082,18 @@ mod tests {
|
||||
|
||||
let amount = test.coin(100);
|
||||
|
||||
assert!(storage
|
||||
.unlock_part_of_allowance(test.deps_mut(), &grantee, &amount)
|
||||
.is_err());
|
||||
assert!(
|
||||
storage
|
||||
.unlock_part_of_allowance(test.deps_mut(), &grantee, &amount)
|
||||
.is_err()
|
||||
);
|
||||
test.add_dummy_grant_for(&grantee);
|
||||
test.lock_allowance(&grantee, Uint128::new(100));
|
||||
assert!(storage
|
||||
.unlock_part_of_allowance(test.deps_mut(), &grantee, &amount)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.unlock_part_of_allowance(test.deps_mut(), &grantee, &amount)
|
||||
.is_ok()
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -2035,13 +2105,17 @@ mod tests {
|
||||
|
||||
let amount = test.coin(100);
|
||||
|
||||
assert!(storage
|
||||
.unlock_part_of_allowance(test.deps_mut(), &grantee, &amount)
|
||||
.is_err());
|
||||
assert!(
|
||||
storage
|
||||
.unlock_part_of_allowance(test.deps_mut(), &grantee, &amount)
|
||||
.is_err()
|
||||
);
|
||||
test.lock_allowance(&grantee, Uint128::new(100));
|
||||
assert!(storage
|
||||
.unlock_part_of_allowance(test.deps_mut(), &grantee, &amount)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.unlock_part_of_allowance(test.deps_mut(), &grantee, &amount)
|
||||
.is_ok()
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -2112,11 +2186,13 @@ mod tests {
|
||||
|
||||
let amount = test.coin(80);
|
||||
storage.unlock_part_of_allowance(test.deps_mut(), &grantee, &amount)?;
|
||||
assert!(storage
|
||||
.locked
|
||||
.grantees
|
||||
.may_load(test.storage(), grantee)?
|
||||
.is_none(),);
|
||||
assert!(
|
||||
storage
|
||||
.locked
|
||||
.grantees
|
||||
.may_load(test.storage(), grantee)?
|
||||
.is_none(),
|
||||
);
|
||||
assert!(storage.locked.total_locked.load(test.storage())?.is_zero());
|
||||
|
||||
Ok(())
|
||||
@@ -2127,7 +2203,7 @@ mod tests {
|
||||
#[cfg(test)]
|
||||
mod locked_storage {
|
||||
use super::*;
|
||||
use crate::testing::{init_contract_tester, NymPoolContractTesterExt};
|
||||
use crate::testing::{NymPoolContractTesterExt, init_contract_tester};
|
||||
use cosmwasm_std::testing::mock_dependencies;
|
||||
use nym_contracts_common_testing::{ContractOpts, RandExt};
|
||||
|
||||
@@ -2154,15 +2230,19 @@ mod tests {
|
||||
let storage = LockedStorage::new();
|
||||
|
||||
// returns zero when there's nothing
|
||||
assert!(storage
|
||||
.grantee_locked(test.deps().storage, &grantee)?
|
||||
.is_zero());
|
||||
assert!(
|
||||
storage
|
||||
.grantee_locked(test.deps().storage, &grantee)?
|
||||
.is_zero()
|
||||
);
|
||||
|
||||
// even when a grant is created (but with nothing locked!)
|
||||
test.add_dummy_grant_for(&grantee);
|
||||
assert!(storage
|
||||
.grantee_locked(test.deps().storage, &grantee)?
|
||||
.is_zero());
|
||||
assert!(
|
||||
storage
|
||||
.grantee_locked(test.deps().storage, &grantee)?
|
||||
.is_zero()
|
||||
);
|
||||
let to_lock = Uint128::new(100);
|
||||
|
||||
// lock some tokens...
|
||||
@@ -2185,15 +2265,19 @@ mod tests {
|
||||
let storage = LockedStorage::new();
|
||||
|
||||
// returns None when there's nothing
|
||||
assert!(storage
|
||||
.maybe_grantee_locked(test.deps().storage, &grantee)?
|
||||
.is_none());
|
||||
assert!(
|
||||
storage
|
||||
.maybe_grantee_locked(test.deps().storage, &grantee)?
|
||||
.is_none()
|
||||
);
|
||||
|
||||
// even when a grant is created (but with nothing locked!)
|
||||
test.add_dummy_grant_for(&grantee);
|
||||
assert!(storage
|
||||
.maybe_grantee_locked(test.deps().storage, &grantee)?
|
||||
.is_none());
|
||||
assert!(
|
||||
storage
|
||||
.maybe_grantee_locked(test.deps().storage, &grantee)?
|
||||
.is_none()
|
||||
);
|
||||
let to_lock = Uint128::new(100);
|
||||
|
||||
// lock some tokens...
|
||||
|
||||
@@ -262,7 +262,7 @@ pub fn try_remove_expired(
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::testing::{init_contract_tester, NymPoolContractTesterExt};
|
||||
use crate::testing::{NymPoolContractTesterExt, init_contract_tester};
|
||||
use nym_contracts_common_testing::{AdminExt, ContractOpts, DenomExt, RandExt};
|
||||
use nym_pool_contract_common::ExecuteMsg;
|
||||
|
||||
@@ -418,14 +418,16 @@ mod tests {
|
||||
));
|
||||
|
||||
let valid_address = test.generate_account();
|
||||
assert!(try_grant_allowance(
|
||||
test.deps_mut(),
|
||||
env.clone(),
|
||||
admin.clone(),
|
||||
valid_address.to_string(),
|
||||
dummy_grant
|
||||
)
|
||||
.is_ok());
|
||||
assert!(
|
||||
try_grant_allowance(
|
||||
test.deps_mut(),
|
||||
env.clone(),
|
||||
admin.clone(),
|
||||
valid_address.to_string(),
|
||||
dummy_grant
|
||||
)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -473,13 +475,15 @@ mod tests {
|
||||
);
|
||||
|
||||
// for sanity’s sake check with an existing grant
|
||||
assert!(try_revoke_grant(
|
||||
test.deps_mut(),
|
||||
env.clone(),
|
||||
admin.clone(),
|
||||
grant.grantee.to_string()
|
||||
)
|
||||
.is_ok());
|
||||
assert!(
|
||||
try_revoke_grant(
|
||||
test.deps_mut(),
|
||||
env.clone(),
|
||||
admin.clone(),
|
||||
grant.grantee.to_string()
|
||||
)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -811,7 +815,7 @@ mod tests {
|
||||
#[cfg(test)]
|
||||
mod withdrawing_from_allowance {
|
||||
use super::*;
|
||||
use crate::testing::{init_contract_tester, NymPoolContractTesterExt};
|
||||
use crate::testing::{NymPoolContractTesterExt, init_contract_tester};
|
||||
use cosmwasm_std::coin;
|
||||
use nym_contracts_common_testing::{AdminExt, ChainOpts, ContractOpts, DenomExt, RandExt};
|
||||
use nym_pool_contract_common::{BasicAllowance, ExecuteMsg};
|
||||
@@ -1450,10 +1454,12 @@ mod tests {
|
||||
assert!(res.is_ok());
|
||||
|
||||
// introduces new granter
|
||||
assert!(NYM_POOL_STORAGE
|
||||
.granters
|
||||
.may_load(test.storage(), good_address)?
|
||||
.is_some());
|
||||
assert!(
|
||||
NYM_POOL_STORAGE
|
||||
.granters
|
||||
.may_load(test.storage(), good_address)?
|
||||
.is_some()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -1493,10 +1499,12 @@ mod tests {
|
||||
);
|
||||
assert!(res.is_ok());
|
||||
|
||||
assert!(NYM_POOL_STORAGE
|
||||
.granters
|
||||
.may_load(test.storage(), granter_address)?
|
||||
.is_none());
|
||||
assert!(
|
||||
NYM_POOL_STORAGE
|
||||
.granters
|
||||
.may_load(test.storage(), granter_address)?
|
||||
.is_none()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -1504,7 +1512,7 @@ mod tests {
|
||||
#[cfg(test)]
|
||||
mod removing_expired {
|
||||
use super::*;
|
||||
use crate::testing::{init_contract_tester, NymPoolContract, NymPoolContractTesterExt};
|
||||
use crate::testing::{NymPoolContract, NymPoolContractTesterExt, init_contract_tester};
|
||||
use nym_contracts_common_testing::{ChainOpts, ContractOpts, ContractTester, RandExt};
|
||||
use nym_pool_contract_common::{BasicAllowance, GranteeAddress};
|
||||
|
||||
@@ -1580,10 +1588,12 @@ mod tests {
|
||||
let (mut test, grantee) = setup_with_expired_grant();
|
||||
let sender = test.generate_account();
|
||||
|
||||
assert!(NYM_POOL_STORAGE
|
||||
.grants
|
||||
.may_load(test.storage(), grantee.clone())?
|
||||
.is_some());
|
||||
assert!(
|
||||
NYM_POOL_STORAGE
|
||||
.grants
|
||||
.may_load(test.storage(), grantee.clone())?
|
||||
.is_some()
|
||||
);
|
||||
|
||||
test.execute_raw(
|
||||
sender.clone(),
|
||||
@@ -1592,10 +1602,12 @@ mod tests {
|
||||
},
|
||||
)?;
|
||||
|
||||
assert!(NYM_POOL_STORAGE
|
||||
.grants
|
||||
.may_load(test.storage(), grantee)?
|
||||
.is_none());
|
||||
assert!(
|
||||
NYM_POOL_STORAGE
|
||||
.grants
|
||||
.may_load(test.storage(), grantee)?
|
||||
.is_none()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ use crate::transactions::{
|
||||
try_submit_performance_results, try_update_contract_admin,
|
||||
};
|
||||
use cosmwasm_std::{
|
||||
entry_point, to_json_binary, Binary, Deps, DepsMut, Env, MessageInfo, Response,
|
||||
Binary, Deps, DepsMut, Env, MessageInfo, Response, entry_point, to_json_binary,
|
||||
};
|
||||
use nym_contracts_common::set_build_information;
|
||||
use nym_performance_contract_common::{
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2025 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use cosmwasm_std::{from_json, Binary, CustomQuery, QuerierWrapper, StdError, StdResult};
|
||||
use cosmwasm_std::{Binary, CustomQuery, QuerierWrapper, StdError, StdResult, from_json};
|
||||
use cw_storage_plus::{Key, Namespace, Path, PrimaryKey};
|
||||
use nym_mixnet_contract_common::{Interval, NymNodeBond};
|
||||
use nym_performance_contract_common::{EpochId, NodeId};
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2025 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use crate::storage::{retrieval_limits, NYM_PERFORMANCE_CONTRACT_STORAGE};
|
||||
use crate::storage::{NYM_PERFORMANCE_CONTRACT_STORAGE, retrieval_limits};
|
||||
use cosmwasm_std::{Addr, Deps, Order, StdResult};
|
||||
use cw_controllers::AdminResponse;
|
||||
use cw_storage_plus::Bound;
|
||||
@@ -315,7 +315,7 @@ pub fn query_last_submission(deps: Deps) -> Result<LastSubmission, NymPerformanc
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::testing::{init_contract_tester, PerformanceContractTesterExt};
|
||||
use crate::testing::{PerformanceContractTesterExt, init_contract_tester};
|
||||
use nym_contracts_common_testing::{ChainOpts, ContractOpts, RandExt};
|
||||
use nym_performance_contract_common::LastSubmittedData;
|
||||
|
||||
|
||||
@@ -579,7 +579,7 @@ mod tests {
|
||||
#[cfg(test)]
|
||||
mod performance_contract_storage {
|
||||
use super::*;
|
||||
use crate::testing::{init_contract_tester, PerformanceContractTesterExt, PreInitContract};
|
||||
use crate::testing::{PerformanceContractTesterExt, PreInitContract, init_contract_tester};
|
||||
use nym_contracts_common_testing::{AdminExt, ContractOpts};
|
||||
|
||||
#[cfg(test)]
|
||||
@@ -788,9 +788,11 @@ mod tests {
|
||||
|
||||
// authorised network monitor can submit the results just fine
|
||||
let perf = tester.dummy_node_performance();
|
||||
assert!(storage
|
||||
.submit_performance_data(tester.deps_mut(), env.clone(), &nm1, 0, perf)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.submit_performance_data(tester.deps_mut(), env.clone(), &nm1, 0, perf)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
// unauthorised address is rejected
|
||||
let res = storage
|
||||
@@ -805,9 +807,11 @@ mod tests {
|
||||
|
||||
// it is fine after explicit authorisation though
|
||||
tester.authorise_network_monitor(&nm2)?;
|
||||
assert!(storage
|
||||
.submit_performance_data(tester.deps_mut(), env.clone(), &nm2, 0, perf)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.submit_performance_data(tester.deps_mut(), env.clone(), &nm2, 0, perf)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
// and address that was never authorised still fails
|
||||
let res = storage
|
||||
@@ -843,9 +847,11 @@ mod tests {
|
||||
};
|
||||
|
||||
// first submission
|
||||
assert!(storage
|
||||
.submit_performance_data(tester.deps_mut(), env.clone(), &nm, 0, data)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.submit_performance_data(tester.deps_mut(), env.clone(), &nm, 0, data)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
// second submission
|
||||
let res = storage
|
||||
@@ -863,14 +869,24 @@ mod tests {
|
||||
);
|
||||
|
||||
// another submission works fine
|
||||
assert!(storage
|
||||
.submit_performance_data(tester.deps_mut(), env.clone(), &nm, 0, another_data)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.submit_performance_data(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm,
|
||||
0,
|
||||
another_data
|
||||
)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
// original one works IF it's for next epoch
|
||||
assert!(storage
|
||||
.submit_performance_data(tester.deps_mut(), env.clone(), &nm, 1, data)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.submit_performance_data(tester.deps_mut(), env.clone(), &nm, 1, data)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
let res = storage
|
||||
.submit_performance_data(tester.deps_mut(), env.clone(), &nm, 0, data)
|
||||
@@ -908,9 +924,17 @@ mod tests {
|
||||
performance: Percent::hundred(),
|
||||
};
|
||||
|
||||
assert!(storage
|
||||
.submit_performance_data(tester.deps_mut(), env.clone(), &nm, 0, another_data)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.submit_performance_data(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm,
|
||||
0,
|
||||
another_data
|
||||
)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
let res = storage
|
||||
.submit_performance_data(tester.deps_mut(), env.clone(), &nm, 0, data)
|
||||
@@ -927,9 +951,11 @@ mod tests {
|
||||
);
|
||||
|
||||
// check across epochs
|
||||
assert!(storage
|
||||
.submit_performance_data(tester.deps_mut(), env.clone(), &nm, 10, data)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.submit_performance_data(tester.deps_mut(), env.clone(), &nm, 10, data)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
let res = storage
|
||||
.submit_performance_data(tester.deps_mut(), env.clone(), &nm, 9, data)
|
||||
@@ -987,12 +1013,16 @@ mod tests {
|
||||
}
|
||||
);
|
||||
|
||||
assert!(storage
|
||||
.submit_performance_data(tester.deps_mut(), env.clone(), &nm, 10, perf)
|
||||
.is_ok());
|
||||
assert!(storage
|
||||
.submit_performance_data(tester.deps_mut(), env.clone(), &nm, 11, perf)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.submit_performance_data(tester.deps_mut(), env.clone(), &nm, 10, perf)
|
||||
.is_ok()
|
||||
);
|
||||
assert!(
|
||||
storage
|
||||
.submit_performance_data(tester.deps_mut(), env.clone(), &nm, 11, perf)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -1282,15 +1312,17 @@ mod tests {
|
||||
|
||||
let perf = tester.dummy_node_performance();
|
||||
// authorised network monitor can submit the results just fine
|
||||
assert!(storage
|
||||
.batch_submit_performance_results(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm1,
|
||||
0,
|
||||
vec![perf]
|
||||
)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.batch_submit_performance_results(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm1,
|
||||
0,
|
||||
vec![perf]
|
||||
)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
// unauthorised address is rejected
|
||||
let res = storage
|
||||
@@ -1311,15 +1343,17 @@ mod tests {
|
||||
|
||||
// it is fine after explicit authorisation though
|
||||
tester.authorise_network_monitor(&nm2)?;
|
||||
assert!(storage
|
||||
.batch_submit_performance_results(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm2,
|
||||
0,
|
||||
vec![perf]
|
||||
)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.batch_submit_performance_results(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm2,
|
||||
0,
|
||||
vec![perf]
|
||||
)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
// and address that was never authorised still fails
|
||||
let res = storage
|
||||
@@ -1414,15 +1448,17 @@ mod tests {
|
||||
.unwrap_err();
|
||||
assert_eq!(res, NymPerformanceContractError::UnsortedBatchSubmission);
|
||||
|
||||
assert!(storage
|
||||
.batch_submit_performance_results(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm,
|
||||
0,
|
||||
sorted
|
||||
)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.batch_submit_performance_results(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm,
|
||||
0,
|
||||
sorted
|
||||
)
|
||||
.is_ok()
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -1446,15 +1482,17 @@ mod tests {
|
||||
};
|
||||
|
||||
// first submission
|
||||
assert!(storage
|
||||
.batch_submit_performance_results(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm,
|
||||
0,
|
||||
vec![data]
|
||||
)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.batch_submit_performance_results(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm,
|
||||
0,
|
||||
vec![data]
|
||||
)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
// second submission
|
||||
let res = storage
|
||||
@@ -1478,26 +1516,30 @@ mod tests {
|
||||
);
|
||||
|
||||
// another submission works fine
|
||||
assert!(storage
|
||||
.batch_submit_performance_results(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm,
|
||||
0,
|
||||
vec![another_data]
|
||||
)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.batch_submit_performance_results(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm,
|
||||
0,
|
||||
vec![another_data]
|
||||
)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
// original one works IF it's for next epoch
|
||||
assert!(storage
|
||||
.batch_submit_performance_results(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm,
|
||||
1,
|
||||
vec![data]
|
||||
)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.batch_submit_performance_results(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm,
|
||||
1,
|
||||
vec![data]
|
||||
)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
let res = storage
|
||||
.batch_submit_performance_results(
|
||||
@@ -1541,15 +1583,17 @@ mod tests {
|
||||
performance: Percent::hundred(),
|
||||
};
|
||||
|
||||
assert!(storage
|
||||
.batch_submit_performance_results(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm,
|
||||
0,
|
||||
vec![another_data]
|
||||
)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.batch_submit_performance_results(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm,
|
||||
0,
|
||||
vec![another_data]
|
||||
)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
let res = storage
|
||||
.batch_submit_performance_results(
|
||||
@@ -1572,15 +1616,17 @@ mod tests {
|
||||
);
|
||||
|
||||
// check across epochs
|
||||
assert!(storage
|
||||
.batch_submit_performance_results(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm,
|
||||
10,
|
||||
vec![data]
|
||||
)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.batch_submit_performance_results(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm,
|
||||
10,
|
||||
vec![data]
|
||||
)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
let res = storage
|
||||
.batch_submit_performance_results(
|
||||
@@ -1657,24 +1703,28 @@ mod tests {
|
||||
}
|
||||
);
|
||||
|
||||
assert!(storage
|
||||
.batch_submit_performance_results(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm,
|
||||
10,
|
||||
vec![perf]
|
||||
)
|
||||
.is_ok());
|
||||
assert!(storage
|
||||
.batch_submit_performance_results(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm,
|
||||
11,
|
||||
vec![perf]
|
||||
)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.batch_submit_performance_results(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm,
|
||||
10,
|
||||
vec![perf]
|
||||
)
|
||||
.is_ok()
|
||||
);
|
||||
assert!(
|
||||
storage
|
||||
.batch_submit_performance_results(
|
||||
tester.deps_mut(),
|
||||
env.clone(),
|
||||
&nm,
|
||||
11,
|
||||
vec![perf]
|
||||
)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -2091,9 +2141,11 @@ mod tests {
|
||||
.unwrap_err();
|
||||
assert_eq!(res, NymPerformanceContractError::Admin(NotAdmin {}));
|
||||
|
||||
assert!(storage
|
||||
.authorise_network_monitor(tester.deps_mut(), &env, &admin, nm)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.authorise_network_monitor(tester.deps_mut(), &env, &admin, nm)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
// change admin
|
||||
let new_admin = tester.addr_make("new-admin");
|
||||
@@ -2107,9 +2159,11 @@ mod tests {
|
||||
.unwrap_err();
|
||||
assert_eq!(res, NymPerformanceContractError::Admin(NotAdmin {}));
|
||||
|
||||
assert!(storage
|
||||
.authorise_network_monitor(tester.deps_mut(), &env, &new_admin, another_nm)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.authorise_network_monitor(tester.deps_mut(), &env, &new_admin, another_nm)
|
||||
.is_ok()
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -2234,9 +2288,11 @@ mod tests {
|
||||
.unwrap_err();
|
||||
assert_eq!(res, NymPerformanceContractError::Admin(NotAdmin {}));
|
||||
|
||||
assert!(storage
|
||||
.retire_network_monitor(tester.deps_mut(), env.clone(), &admin, nm)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.retire_network_monitor(tester.deps_mut(), env.clone(), &admin, nm)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
// change admin
|
||||
let new_admin = tester.addr_make("new-admin");
|
||||
@@ -2253,9 +2309,11 @@ mod tests {
|
||||
.unwrap_err();
|
||||
assert_eq!(res, NymPerformanceContractError::Admin(NotAdmin {}));
|
||||
|
||||
assert!(storage
|
||||
.retire_network_monitor(tester.deps_mut(), env, &new_admin, another_nm)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.retire_network_monitor(tester.deps_mut(), env, &new_admin, another_nm)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -2425,9 +2483,11 @@ mod tests {
|
||||
.unwrap_err();
|
||||
assert_eq!(res, NymPerformanceContractError::Admin(NotAdmin {}));
|
||||
|
||||
assert!(storage
|
||||
.remove_node_measurements(tester.deps_mut(), &admin, epoch_id, id1)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.remove_node_measurements(tester.deps_mut(), &admin, epoch_id, id1)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
// change admin
|
||||
let new_admin = tester.addr_make("new-admin");
|
||||
@@ -2439,9 +2499,11 @@ mod tests {
|
||||
.unwrap_err();
|
||||
assert_eq!(res, NymPerformanceContractError::Admin(NotAdmin {}));
|
||||
|
||||
assert!(storage
|
||||
.remove_node_measurements(tester.deps_mut(), &new_admin, epoch_id, id2)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.remove_node_measurements(tester.deps_mut(), &new_admin, epoch_id, id2)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -2561,9 +2623,11 @@ mod tests {
|
||||
.unwrap_err();
|
||||
assert_eq!(res, NymPerformanceContractError::Admin(NotAdmin {}));
|
||||
|
||||
assert!(storage
|
||||
.remove_epoch_measurements(tester.deps_mut(), &admin, 0)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.remove_epoch_measurements(tester.deps_mut(), &admin, 0)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
// change admin
|
||||
let new_admin = tester.addr_make("new-admin");
|
||||
@@ -2575,9 +2639,11 @@ mod tests {
|
||||
.unwrap_err();
|
||||
assert_eq!(res, NymPerformanceContractError::Admin(NotAdmin {}));
|
||||
|
||||
assert!(storage
|
||||
.remove_epoch_measurements(tester.deps_mut(), &new_admin, 1)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.remove_epoch_measurements(tester.deps_mut(), &new_admin, 1)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -2726,7 +2792,7 @@ mod tests {
|
||||
#[cfg(test)]
|
||||
mod network_monitors_storage {
|
||||
use super::*;
|
||||
use crate::testing::{init_contract_tester, PerformanceContractTesterExt};
|
||||
use crate::testing::{PerformanceContractTesterExt, init_contract_tester};
|
||||
use nym_contracts_common_testing::{AdminExt, ContractOpts};
|
||||
|
||||
#[test]
|
||||
@@ -2741,9 +2807,11 @@ mod tests {
|
||||
let nm1 = tester.addr_make("network-monitor1");
|
||||
let nm2 = tester.addr_make("network-monitor2");
|
||||
|
||||
assert!(storage
|
||||
.insert_new(tester.deps_mut(), &env, &admin, &nm1)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.insert_new(tester.deps_mut(), &env, &admin, &nm1)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
// total authorised count is incremented
|
||||
assert_eq!(storage.authorised_count.load(&tester)?, 1);
|
||||
@@ -2758,9 +2826,11 @@ mod tests {
|
||||
}
|
||||
);
|
||||
|
||||
assert!(storage
|
||||
.insert_new(tester.deps_mut(), &env, &admin, &nm2)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.insert_new(tester.deps_mut(), &env, &admin, &nm2)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
assert_eq!(storage.authorised_count.load(&tester)?, 2);
|
||||
assert_eq!(
|
||||
@@ -2781,9 +2851,11 @@ mod tests {
|
||||
assert!(storage.retired.may_load(&tester, &nm1)?.is_some());
|
||||
|
||||
// if it was previously retired, that information is purged
|
||||
assert!(storage
|
||||
.insert_new(tester.deps_mut(), &env, &admin, &nm1)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.insert_new(tester.deps_mut(), &env, &admin, &nm1)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
assert!(storage.retired.may_load(&tester, &nm1)?.is_none());
|
||||
|
||||
@@ -2805,9 +2877,11 @@ mod tests {
|
||||
tester.authorise_network_monitor(&nm2)?;
|
||||
|
||||
// fails on unauthorised NMs
|
||||
assert!(storage
|
||||
.retire(tester.deps_mut(), &env, &admin, &nm3)
|
||||
.is_err());
|
||||
assert!(
|
||||
storage
|
||||
.retire(tester.deps_mut(), &env, &admin, &nm3)
|
||||
.is_err()
|
||||
);
|
||||
|
||||
assert_eq!(storage.authorised_count.load(&tester)?, 2);
|
||||
|
||||
@@ -2855,7 +2929,7 @@ mod tests {
|
||||
#[cfg(test)]
|
||||
mod performance_storage {
|
||||
use super::*;
|
||||
use crate::testing::{init_contract_tester, PerformanceContractTesterExt};
|
||||
use crate::testing::{PerformanceContractTesterExt, init_contract_tester};
|
||||
use nym_contracts_common_testing::ContractOpts;
|
||||
use std::str::FromStr;
|
||||
|
||||
@@ -2948,37 +3022,55 @@ mod tests {
|
||||
tester.insert_epoch_performance(&nm, 2, id2, Percent::hundred())?;
|
||||
|
||||
// illegal to submit anything < than last used epoch
|
||||
assert!(storage
|
||||
.ensure_non_stale_submission(&tester, &nm, 0, id2)
|
||||
.is_err());
|
||||
assert!(storage
|
||||
.ensure_non_stale_submission(&tester, &nm, 1, id2)
|
||||
.is_err());
|
||||
assert!(storage
|
||||
.ensure_non_stale_submission(&tester, &nm, 1, id3)
|
||||
.is_err());
|
||||
assert!(
|
||||
storage
|
||||
.ensure_non_stale_submission(&tester, &nm, 0, id2)
|
||||
.is_err()
|
||||
);
|
||||
assert!(
|
||||
storage
|
||||
.ensure_non_stale_submission(&tester, &nm, 1, id2)
|
||||
.is_err()
|
||||
);
|
||||
assert!(
|
||||
storage
|
||||
.ensure_non_stale_submission(&tester, &nm, 1, id3)
|
||||
.is_err()
|
||||
);
|
||||
|
||||
// for the current epoch, node id has to be greater than what has already been submitted
|
||||
assert!(storage
|
||||
.ensure_non_stale_submission(&tester, &nm, 2, id1)
|
||||
.is_err());
|
||||
assert!(storage
|
||||
.ensure_non_stale_submission(&tester, &nm, 2, id2)
|
||||
.is_err());
|
||||
assert!(storage
|
||||
.ensure_non_stale_submission(&tester, &nm, 2, id3)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.ensure_non_stale_submission(&tester, &nm, 2, id1)
|
||||
.is_err()
|
||||
);
|
||||
assert!(
|
||||
storage
|
||||
.ensure_non_stale_submission(&tester, &nm, 2, id2)
|
||||
.is_err()
|
||||
);
|
||||
assert!(
|
||||
storage
|
||||
.ensure_non_stale_submission(&tester, &nm, 2, id3)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
// and anything for future epochs is fine (as long as it's the first entry)
|
||||
assert!(storage
|
||||
.ensure_non_stale_submission(&tester, &nm, 3, id1)
|
||||
.is_ok());
|
||||
assert!(storage
|
||||
.ensure_non_stale_submission(&tester, &nm, 3, id2)
|
||||
.is_ok());
|
||||
assert!(storage
|
||||
.ensure_non_stale_submission(&tester, &nm, 1111, id3)
|
||||
.is_ok());
|
||||
assert!(
|
||||
storage
|
||||
.ensure_non_stale_submission(&tester, &nm, 3, id1)
|
||||
.is_ok()
|
||||
);
|
||||
assert!(
|
||||
storage
|
||||
.ensure_non_stale_submission(&tester, &nm, 3, id2)
|
||||
.is_ok()
|
||||
);
|
||||
assert!(
|
||||
storage
|
||||
.ensure_non_stale_submission(&tester, &nm, 1111, id3)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -4,34 +4,34 @@
|
||||
use crate::contract::{execute, instantiate, migrate, query};
|
||||
use crate::helpers::MixnetContractQuerier;
|
||||
use crate::storage::NYM_PERFORMANCE_CONTRACT_STORAGE;
|
||||
use cosmwasm_std::testing::{message_info, mock_env, MockApi};
|
||||
use cosmwasm_std::testing::{MockApi, message_info, mock_env};
|
||||
use cosmwasm_std::{
|
||||
coin, coins, Addr, ContractInfo, Deps, DepsMut, Env, MessageInfo, QuerierWrapper, StdError,
|
||||
StdResult,
|
||||
Addr, ContractInfo, Deps, DepsMut, Env, MessageInfo, QuerierWrapper, StdError, StdResult, coin,
|
||||
coins,
|
||||
};
|
||||
use mixnet_contract::testable_mixnet_contract::MixnetContract;
|
||||
use nym_contracts_common::signing::{ContractMessageContent, MessageSignature};
|
||||
use nym_contracts_common::Percent;
|
||||
use nym_contracts_common::signing::{ContractMessageContent, MessageSignature};
|
||||
use nym_contracts_common_testing::{
|
||||
addr, AdminExt, ArbitraryContractStorageReader, ArbitraryContractStorageWriter, BankExt,
|
||||
ChainOpts, CommonStorageKeys, ContractFn, ContractOpts, ContractStorageWrapper, ContractTester,
|
||||
ContractTesterBuilder, DenomExt, PermissionedFn, QueryFn, RandExt, TestableNymContract,
|
||||
TEST_DENOM,
|
||||
AdminExt, ArbitraryContractStorageReader, ArbitraryContractStorageWriter, BankExt, ChainOpts,
|
||||
CommonStorageKeys, ContractFn, ContractOpts, ContractStorageWrapper, ContractTester,
|
||||
ContractTesterBuilder, DenomExt, PermissionedFn, QueryFn, RandExt, TEST_DENOM,
|
||||
TestableNymContract, addr,
|
||||
};
|
||||
use nym_crypto::asymmetric::ed25519;
|
||||
use nym_mixnet_contract_common::nym_node::{NodeDetailsResponse, NodeOwnershipResponse, Role};
|
||||
use nym_mixnet_contract_common::{
|
||||
CurrentIntervalResponse, EpochId, Interval, NodeCostParams, NymNode, NymNodeBondingPayload,
|
||||
RoleAssignment, SignableNymNodeBondingMsg, DEFAULT_INTERVAL_OPERATING_COST_AMOUNT,
|
||||
DEFAULT_PROFIT_MARGIN_PERCENT,
|
||||
CurrentIntervalResponse, DEFAULT_INTERVAL_OPERATING_COST_AMOUNT, DEFAULT_PROFIT_MARGIN_PERCENT,
|
||||
EpochId, Interval, NodeCostParams, NymNode, NymNodeBondingPayload, RoleAssignment,
|
||||
SignableNymNodeBondingMsg,
|
||||
};
|
||||
use nym_performance_contract_common::constants::storage_keys;
|
||||
use nym_performance_contract_common::{
|
||||
ExecuteMsg, InstantiateMsg, MigrateMsg, NodeId, NodePerformance, NodeResults,
|
||||
NymPerformanceContractError, QueryMsg,
|
||||
};
|
||||
use serde::de::DeserializeOwned;
|
||||
use serde::Serialize;
|
||||
use serde::de::DeserializeOwned;
|
||||
use std::str::FromStr;
|
||||
|
||||
pub struct PerformanceContract;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use crate::storage::NYM_PERFORMANCE_CONTRACT_STORAGE;
|
||||
use cosmwasm_std::{to_json_binary, DepsMut, Env, Event, MessageInfo, Response};
|
||||
use cosmwasm_std::{DepsMut, Env, Event, MessageInfo, Response, to_json_binary};
|
||||
use nym_performance_contract_common::{
|
||||
EpochId, NodeId, NodePerformance, NymPerformanceContractError,
|
||||
};
|
||||
@@ -130,7 +130,7 @@ pub fn try_remove_epoch_measurements(
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::storage::retrieval_limits;
|
||||
use crate::testing::{init_contract_tester, PerformanceContractTesterExt};
|
||||
use crate::testing::{PerformanceContractTesterExt, init_contract_tester};
|
||||
use cosmwasm_std::from_json;
|
||||
use nym_contracts_common_testing::{AdminExt, ContractOpts};
|
||||
use nym_performance_contract_common::RemoveEpochMeasurementsResponse;
|
||||
@@ -222,20 +222,24 @@ mod tests {
|
||||
let env = test.env();
|
||||
let admin = test.admin_msg();
|
||||
|
||||
assert!(try_authorise_network_monitor(
|
||||
test.deps_mut(),
|
||||
env.clone(),
|
||||
admin.clone(),
|
||||
bad_address
|
||||
)
|
||||
.is_err());
|
||||
assert!(try_authorise_network_monitor(
|
||||
test.deps_mut(),
|
||||
env,
|
||||
admin,
|
||||
good_address.to_string()
|
||||
)
|
||||
.is_ok());
|
||||
assert!(
|
||||
try_authorise_network_monitor(
|
||||
test.deps_mut(),
|
||||
env.clone(),
|
||||
admin.clone(),
|
||||
bad_address
|
||||
)
|
||||
.is_err()
|
||||
);
|
||||
assert!(
|
||||
try_authorise_network_monitor(
|
||||
test.deps_mut(),
|
||||
env,
|
||||
admin,
|
||||
good_address.to_string()
|
||||
)
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -244,7 +248,7 @@ mod tests {
|
||||
#[cfg(test)]
|
||||
mod retiring_network_monitor {
|
||||
use super::*;
|
||||
use crate::testing::{init_contract_tester, PerformanceContractTesterExt};
|
||||
use crate::testing::{PerformanceContractTesterExt, init_contract_tester};
|
||||
use nym_contracts_common_testing::{AdminExt, ContractOpts, RandExt};
|
||||
|
||||
#[test]
|
||||
@@ -258,20 +262,19 @@ mod tests {
|
||||
let env = test.env();
|
||||
let admin = test.admin_msg();
|
||||
|
||||
assert!(try_retire_network_monitor(
|
||||
test.deps_mut(),
|
||||
env.clone(),
|
||||
admin.clone(),
|
||||
bad_address
|
||||
)
|
||||
.is_err());
|
||||
assert!(try_retire_network_monitor(
|
||||
test.deps_mut(),
|
||||
env,
|
||||
admin,
|
||||
good_address.to_string()
|
||||
)
|
||||
.is_ok());
|
||||
assert!(
|
||||
try_retire_network_monitor(
|
||||
test.deps_mut(),
|
||||
env.clone(),
|
||||
admin.clone(),
|
||||
bad_address
|
||||
)
|
||||
.is_err()
|
||||
);
|
||||
assert!(
|
||||
try_retire_network_monitor(test.deps_mut(), env, admin, good_address.to_string())
|
||||
.is_ok()
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user