diff --git a/common/client-libs/validator-client/src/nyxd/contract_traits/node_families_query_client.rs b/common/client-libs/validator-client/src/nyxd/contract_traits/node_families_query_client.rs index dd62bb7dc6..b72bbc758f 100644 --- a/common/client-libs/validator-client/src/nyxd/contract_traits/node_families_query_client.rs +++ b/common/client-libs/validator-client/src/nyxd/contract_traits/node_families_query_client.rs @@ -7,12 +7,12 @@ use crate::nyxd::error::NyxdError; use crate::nyxd::CosmWasmClient; use async_trait::async_trait; use cosmrs::AccountId; +use nym_mixnet_contract_common::NodeId; use serde::Deserialize; -use nym_mixnet_contract_common::NodeId; pub use nym_node_families_contract_common::{ msg::QueryMsg as NodeFamiliesQueryMsg, AllFamilyMembersPagedResponse, - AllPastFamilyInvitationsPagedResponse, FamiliesPagedResponse, FamilyMemberRecord, + AllPastFamilyInvitationsPagedResponse, Config, FamiliesPagedResponse, FamilyMemberRecord, FamilyMembersPagedResponse, GlobalPastFamilyInvitationCursor, NodeFamily, NodeFamilyByNameResponse, NodeFamilyByOwnerResponse, NodeFamilyId, NodeFamilyMembershipResponse, NodeFamilyResponse, PastFamilyInvitation, @@ -35,6 +35,11 @@ pub trait NodeFamiliesQueryClient { where for<'a> T: Deserialize<'a>; + async fn get_config(&self) -> Result { + self.query_node_families_contract(NodeFamiliesQueryMsg::GetConfig {}) + .await + } + async fn get_family_by_id( &self, family_id: NodeFamilyId, @@ -360,6 +365,7 @@ mod tests { msg: NodeFamiliesQueryMsg, ) { match msg { + NodeFamiliesQueryMsg::GetConfig {} => client.get_config().ignore(), NodeFamiliesQueryMsg::GetFamilyById { family_id } => { client.get_family_by_id(family_id).ignore() } diff --git a/common/cosmwasm-smart-contracts/node-families-contract/src/msg.rs b/common/cosmwasm-smart-contracts/node-families-contract/src/msg.rs index a542a0b707..c7f861ff93 100644 --- a/common/cosmwasm-smart-contracts/node-families-contract/src/msg.rs +++ b/common/cosmwasm-smart-contracts/node-families-contract/src/msg.rs @@ -96,6 +96,10 @@ pub enum ExecuteMsg { #[cw_serde] #[cfg_attr(feature = "schema", derive(cosmwasm_schema::QueryResponses))] pub enum QueryMsg { + /// Retrieve current contract configuration values + #[cfg_attr(feature = "schema", returns(Config))] + GetConfig {}, + /// Look up a single family by its id. #[cfg_attr(feature = "schema", returns(NodeFamilyResponse))] GetFamilyById { family_id: NodeFamilyId }, diff --git a/contracts/Cargo.lock b/contracts/Cargo.lock index b7d5f646e1..ec00166bde 100644 --- a/contracts/Cargo.lock +++ b/contracts/Cargo.lock @@ -1037,7 +1037,7 @@ dependencies = [ [[package]] name = "node-families" -version = "0.1.0" +version = "0.1.1" dependencies = [ "anyhow", "cosmwasm-schema", @@ -1052,7 +1052,6 @@ dependencies = [ "nym-mixnet-contract", "nym-mixnet-contract-common", "nym-node-families-contract-common", - "serde", ] [[package]] diff --git a/contracts/Cargo.toml b/contracts/Cargo.toml index cf3911c319..0d60b2db2f 100644 --- a/contracts/Cargo.toml +++ b/contracts/Cargo.toml @@ -87,7 +87,7 @@ cw3-flex-multisig = { version = "2.0.0", path = "multisig/cw3-flex-multisig" } cw4-group = { version = "2.0.0", path = "multisig/cw4-group" } nym-mixnet-contract = { version = "1.5.1", path = "mixnet" } nym-vesting-contract = { version = "1.4.1", path = "vesting" } -node-families = { version = "0.1.0", path = "node-families" } +node-families = { version = "0.1.1", path = "node-families" } [workspace.lints.clippy] unwrap_used = "deny" diff --git a/contracts/node-families/Cargo.toml b/contracts/node-families/Cargo.toml index 289db1eae2..0ae5efbd8c 100644 --- a/contracts/node-families/Cargo.toml +++ b/contracts/node-families/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "node-families" description = "Nym Node Families contract" -version = "0.1.0" +version = "0.1.1" authors.workspace = true edition.workspace = true license.workspace = true @@ -25,7 +25,6 @@ cosmwasm-std = { workspace = true } cw2 = { workspace = true } cw-storage-plus = { workspace = true } cw-controllers = { workspace = true } -serde = { workspace = true } cosmwasm-schema = { workspace = true, optional = true } cw-utils = { workspace = true } diff --git a/contracts/node-families/src/contract.rs b/contracts/node-families/src/contract.rs index 54918514ca..3c36e9c458 100644 --- a/contracts/node-families/src/contract.rs +++ b/contracts/node-families/src/contract.rs @@ -5,7 +5,7 @@ use crate::queries::{ query_all_family_members_paged, query_all_past_invitations_paged, - query_all_pending_invitations_paged, query_families_paged, query_family_by_id, + query_all_pending_invitations_paged, query_config, query_families_paged, query_family_by_id, query_family_by_name, query_family_by_owner, query_family_members_paged, query_family_membership, query_past_invitations_for_family_paged, query_past_invitations_for_node_paged, query_past_members_for_family_paged, @@ -100,6 +100,7 @@ pub fn execute( #[entry_point] pub fn query(deps: Deps, env: Env, msg: QueryMsg) -> Result { match msg { + QueryMsg::GetConfig {} => Ok(to_json_binary(&query_config(deps)?)?), QueryMsg::GetFamilyById { family_id } => { Ok(to_json_binary(&query_family_by_id(deps, family_id)?)?) } diff --git a/contracts/node-families/src/queries.rs b/contracts/node-families/src/queries.rs index 9b75201fb5..e9e350ce9a 100644 --- a/contracts/node-families/src/queries.rs +++ b/contracts/node-families/src/queries.rs @@ -7,18 +7,23 @@ use cosmwasm_std::{Deps, Env, Order, StdResult}; use cw_storage_plus::Bound; use nym_mixnet_contract_common::NodeId; use nym_node_families_contract_common::{ - AllFamilyMembersPagedResponse, AllPastFamilyInvitationsPagedResponse, FamiliesPagedResponse, - FamilyMemberRecord, FamilyMembersPagedResponse, GlobalPastFamilyInvitationCursor, - NodeFamiliesContractError, NodeFamilyByNameResponse, NodeFamilyByOwnerResponse, NodeFamilyId, - NodeFamilyMembershipResponse, NodeFamilyResponse, PastFamilyInvitationCursor, - PastFamilyInvitationForNodeCursor, PastFamilyInvitationsForNodePagedResponse, - PastFamilyInvitationsPagedResponse, PastFamilyMemberCursor, PastFamilyMemberForNodeCursor, - PastFamilyMembersForNodePagedResponse, PastFamilyMembersPagedResponse, - PendingFamilyInvitationDetails, PendingFamilyInvitationResponse, - PendingFamilyInvitationsPagedResponse, PendingInvitationsForNodePagedResponse, - PendingInvitationsPagedResponse, + AllFamilyMembersPagedResponse, AllPastFamilyInvitationsPagedResponse, Config, + FamiliesPagedResponse, FamilyMemberRecord, FamilyMembersPagedResponse, + GlobalPastFamilyInvitationCursor, NodeFamiliesContractError, NodeFamilyByNameResponse, + NodeFamilyByOwnerResponse, NodeFamilyId, NodeFamilyMembershipResponse, NodeFamilyResponse, + PastFamilyInvitationCursor, PastFamilyInvitationForNodeCursor, + PastFamilyInvitationsForNodePagedResponse, PastFamilyInvitationsPagedResponse, + PastFamilyMemberCursor, PastFamilyMemberForNodeCursor, PastFamilyMembersForNodePagedResponse, + PastFamilyMembersPagedResponse, PendingFamilyInvitationDetails, + PendingFamilyInvitationResponse, PendingFamilyInvitationsPagedResponse, + PendingInvitationsForNodePagedResponse, PendingInvitationsPagedResponse, }; +/// Retrieve current contract configuration values +pub fn query_config(deps: Deps) -> Result { + Ok(NodeFamiliesStorage::new().config.load(deps.storage)?) +} + /// Resolve a single family by its id. Returns `family: None` if no family /// with that id exists. pub fn query_family_by_id(