removal of contracts/ workspace experiment commit 2

This commit is contained in:
mfahampshire
2026-01-08 12:35:37 +00:00
parent c82059fd06
commit 6200899b70
38 changed files with 789 additions and 547 deletions
+4 -4
View File
@@ -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 -2
View File
@@ -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 -1
View File
@@ -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]
+31 -10
View File
@@ -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;
+2 -2
View File
@@ -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;
+6 -6
View File
@@ -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 -2
View File
@@ -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 -2
View File
@@ -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 -3
View File
@@ -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};
+1 -1
View File
@@ -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 -3
View File
@@ -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;
+2 -2
View File
@@ -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;
+4 -4
View File
@@ -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
View File
@@ -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, &not_granter)
.is_err());
assert!(
storage
.ensure_is_whitelisted_granter(deps, &granter)
.is_ok()
);
assert!(
storage
.ensure_is_whitelisted_granter(deps, &not_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...
+46 -34
View File
@@ -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 sanitys 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(())
}
+1 -1
View File
@@ -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 -1
View File
@@ -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};
+2 -2
View File
@@ -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;
+275 -183
View File
@@ -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(())
}
+12 -12
View File
@@ -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;
+34 -31
View File
@@ -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(())
}