diff --git a/sdk/rust/nym-sdk/src/mixnet/client.rs b/sdk/rust/nym-sdk/src/mixnet/client.rs index 6783776efa..5729b40393 100644 --- a/sdk/rust/nym-sdk/src/mixnet/client.rs +++ b/sdk/rust/nym-sdk/src/mixnet/client.rs @@ -31,6 +31,7 @@ use nym_crypto::hkdf::DerivationMaterial; use nym_socks5_client_core::config::Socks5; use nym_task::ShutdownTracker; use nym_topology::provider_trait::TopologyProvider; +use nym_topology::RoutingNode; use nym_validator_client::{nyxd, QueryHttpRpcNyxdClient, UserAgent}; use rand::rngs::OsRng; use std::path::Path; @@ -530,27 +531,37 @@ where } } - async fn new_gateway_setup(&self) -> Result { + /// Attempt to retrieve list of all gateways available for registration + async fn available_gateways(&mut self) -> Result, ClientCoreError> { + if let Some(ref mut custom_provider) = self.custom_topology_provider { + if let Some(topology) = custom_provider.get_new_topology().await { + return Ok(topology.entry_gateways().cloned().collect()); + } + } + let nym_api_endpoints = self.get_api_endpoints(); - - let selection_spec = GatewaySelectionSpecification::new( - self.config.user_chosen_gateway.clone(), - None, - self.force_tls, - ); - - let user_agent = self.user_agent.clone(); - let topology_cfg = &self.config.debug_config.topology; + let user_agent = self.user_agent.clone(); let mut rng = OsRng; - let available_gateways = gateways_for_init( + + gateways_for_init( &mut rng, &nym_api_endpoints, user_agent, topology_cfg.minimum_gateway_performance, topology_cfg.ignore_ingress_epoch_role, ) - .await?; + .await + } + + async fn new_gateway_setup(&mut self) -> Result { + let selection_spec = GatewaySelectionSpecification::new( + self.config.user_chosen_gateway.clone(), + None, + self.force_tls, + ); + + let available_gateways = self.available_gateways().await?; Ok(GatewaySetup::New { specification: selection_spec,