From e8e75c6b03488ccd6f1e9b3a33b8fe85cbb13aea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C4=99drzej=20Stuczy=C5=84ski?= Date: Tue, 27 May 2025 11:47:09 +0100 Subject: [PATCH] post rebasing fixes --- .../validator/cosmwasm/generators/mixnet.rs | 1 + common/pemstore/src/lib.rs | 4 +-- common/wasm/client-core/src/helpers.rs | 29 ++++++++++++++----- nym-api/enter_db.sh | 2 +- nym-network-monitor/src/main.rs | 16 ++++++---- .../examples/manually_overwrite_topology.rs | 7 +++-- 6 files changed, 39 insertions(+), 20 deletions(-) diff --git a/common/commands/src/validator/cosmwasm/generators/mixnet.rs b/common/commands/src/validator/cosmwasm/generators/mixnet.rs index a72c00b662..8a8081400e 100644 --- a/common/commands/src/validator/cosmwasm/generators/mixnet.rs +++ b/common/commands/src/validator/cosmwasm/generators/mixnet.rs @@ -157,6 +157,7 @@ pub async fn generate(args: Args) { minimum: args.minimum_interval_operating_cost.amount.into(), maximum: args.maximum_interval_operating_cost.amount.into(), }, + key_validity_in_epochs: None, }; debug!("instantiate_msg: {:?}", instantiate_msg); diff --git a/common/pemstore/src/lib.rs b/common/pemstore/src/lib.rs index 4b107467ae..91edc5fef5 100644 --- a/common/pemstore/src/lib.rs +++ b/common/pemstore/src/lib.rs @@ -104,9 +104,7 @@ fn read_pem_file>(filepath: P) -> io::Result { let mut pem_bytes = File::open(filepath)?; let mut buf = Zeroizing::new(Vec::new()); pem_bytes.read_to_end(&mut buf)?; - pem::parse(&buf) - .map(ZeroizingPem) - .map_err(io::Error::other) + pem::parse(&buf).map(ZeroizingPem).map_err(io::Error::other) } fn write_pem_file>(filepath: P, mut data: Vec, tag: &str) -> io::Result<()> { diff --git a/common/wasm/client-core/src/helpers.rs b/common/wasm/client-core/src/helpers.rs index 411c05f1c8..5d8e4b0e4d 100644 --- a/common/wasm/client-core/src/helpers.rs +++ b/common/wasm/client-core/src/helpers.rs @@ -19,7 +19,7 @@ use nym_client_core::init::{ use nym_sphinx::addressing::clients::Recipient; use nym_sphinx::anonymous_replies::requests::AnonymousSenderTag; use nym_topology::wasm_helpers::WasmFriendlyNymTopology; -use nym_topology::{NymTopology, RoutingNode}; +use nym_topology::{NymTopology, NymTopologyMetadata, RoutingNode}; use nym_validator_client::client::IdentityKey; use nym_validator_client::{NymApiClient, UserAgent}; use rand::thread_rng; @@ -29,7 +29,7 @@ use wasm_bindgen_futures::future_to_promise; use wasm_utils::error::PromisableResult; pub use nym_credential_storage::ephemeral_storage::EphemeralStorage as EphemeralCredentialStorage; -use wasm_utils::console_log; +use wasm_utils::{console_log, console_warn}; // don't get too excited about the name, under the hood it's just a big fat placeholder // with no disk_persistence @@ -73,14 +73,27 @@ pub async fn current_network_topology_async( let api_client = NymApiClient::new(url); let rewarded_set = api_client.get_current_rewarded_set().await?; - let mixnodes = api_client - .get_all_basic_active_mixing_assigned_nodes() + let mixnodes_res = api_client + .get_all_basic_active_mixing_assigned_nodes_with_metadata() .await?; - let gateways = api_client.get_all_basic_entry_assigned_nodes().await?; + let metadata = mixnodes_res.metadata; + let mixnodes = mixnodes_res.nodes; - let mut topology = NymTopology::new_empty(rewarded_set); - topology.add_skimmed_nodes(&mixnodes); - topology.add_skimmed_nodes(&gateways); + let gateways_res = api_client.get_all_basic_entry_assigned_nodes_v2().await?; + if gateways_res.metadata != metadata { + console_warn!("inconsistent nodes metadata between mixnodes and gateways calls! {metadata:?} and {:?}", gateways_res.metadata); + return Err(WasmCoreError::UnavailableNetworkTopology); + } + + let gateways = gateways_res.nodes; + + let topology = NymTopology::new( + NymTopologyMetadata::new(metadata.rotation_id, metadata.absolute_epoch_id), + rewarded_set, + Vec::new(), + ) + .with_skimmed_nodes(&mixnodes) + .with_skimmed_nodes(&gateways); Ok(topology.into()) } diff --git a/nym-api/enter_db.sh b/nym-api/enter_db.sh index bdf5056178..4ec2a09253 100755 --- a/nym-api/enter_db.sh +++ b/nym-api/enter_db.sh @@ -1,2 +1,2 @@ #!/bin/sh -sqlite3 -init settings.sql /Users/jedrzej/workspace/nym/target/debug/build/nym-api-6c1428b6c3c63c2f/out/nym-api-example.sqlite \ No newline at end of file +sqlite3 -init settings.sql /Users/jedrzej/workspace/nym/target/debug/build/nym-api-10a9906acce21392/out/nym-api-example.sqlite \ No newline at end of file diff --git a/nym-network-monitor/src/main.rs b/nym-network-monitor/src/main.rs index b1cedea18c..3442cfe7ea 100644 --- a/nym-network-monitor/src/main.rs +++ b/nym-network-monitor/src/main.rs @@ -10,7 +10,7 @@ use nym_network_defaults::setup_env; use nym_network_defaults::var_names::NYM_API; use nym_sdk::mixnet::{self, MixnetClient}; use nym_sphinx::chunking::monitoring; -use nym_topology::{HardcodedTopologyProvider, NymTopology}; +use nym_topology::{HardcodedTopologyProvider, NymTopology, NymTopologyMetadata}; use std::fs::File; use std::io::Write; use std::sync::LazyLock; @@ -167,12 +167,16 @@ async fn nym_topology_from_env() -> anyhow::Result { let rewarded_set = client.get_current_rewarded_set().await?; // just get all nodes to make our lives easier because it's just one query for the whole duration of the monitor (?) - let nodes = client.get_all_basic_nodes().await?; + let nodes_response = client.get_all_basic_nodes_with_metadata().await?; + let nodes = nodes_response.nodes; + let metadata = nodes_response.metadata; - let mut topology = NymTopology::new_empty(rewarded_set); - topology.add_skimmed_nodes(&nodes); - - Ok(topology) + Ok(NymTopology::new( + NymTopologyMetadata::new(metadata.rotation_id, metadata.absolute_epoch_id), + rewarded_set, + Vec::new(), + ) + .with_skimmed_nodes(&nodes)) } #[tokio::main] diff --git a/sdk/rust/nym-sdk/examples/manually_overwrite_topology.rs b/sdk/rust/nym-sdk/examples/manually_overwrite_topology.rs index 0b9ee0adef..f09ca26c9d 100644 --- a/sdk/rust/nym-sdk/examples/manually_overwrite_topology.rs +++ b/sdk/rust/nym-sdk/examples/manually_overwrite_topology.rs @@ -3,7 +3,7 @@ use nym_sdk::mixnet; use nym_sdk::mixnet::MixnetMessageSender; -use nym_topology::{NymTopology, RoutingNode, SupportedRoles}; +use nym_topology::{NymTopology, NymTopologyMetadata, RoutingNode, SupportedRoles}; #[tokio::main] async fn main() { @@ -76,7 +76,10 @@ async fn main() { // during client initialisation to make sure we are able to send to ourselves : ) ) let gateways = starting_topology.topology.entry_capable_nodes(); - let mut custom_topology = NymTopology::new_empty(rewarded_set); + // you should have obtained valid metadata information, in particular the key rotation ID! + let metadata = NymTopologyMetadata::new(u32::MAX, 123); + + let mut custom_topology = NymTopology::new(metadata, rewarded_set, Vec::new()); custom_topology.add_routing_nodes(nodes); custom_topology.add_routing_nodes(gateways);