state update test passing
This commit is contained in:
@@ -54,7 +54,7 @@ use nym_statistics_common::clients::ClientStatsSender;
|
||||
use nym_statistics_common::generate_client_stats_id;
|
||||
use nym_task::connections::{ConnectionCommandReceiver, ConnectionCommandSender, LaneQueueLengths};
|
||||
use nym_task::{TaskClient, TaskHandle};
|
||||
use nym_topology::providers::{TopologyProvider, HardcodedTopologyProvider};
|
||||
use nym_topology::providers::{HardcodedTopologyProvider, TopologyProvider};
|
||||
use nym_validator_client::{nyxd::contract_traits::DkgQueryClient, UserAgent};
|
||||
use rand::rngs::OsRng;
|
||||
use std::fmt::Debug;
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
use async_trait::async_trait;
|
||||
use log::{debug, error, warn};
|
||||
use nym_topology::{TopologyProvider, NymTopology};
|
||||
use nym_topology::{NymTopology, TopologyProvider};
|
||||
use nym_validator_client::UserAgent;
|
||||
use rand::prelude::SliceRandom;
|
||||
use rand::thread_rng;
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
use async_trait::async_trait;
|
||||
use log::{debug, error, warn};
|
||||
use nym_topology::{
|
||||
providers::piecewise::{Config, PiecewiseTopologyProvider, NymTopologyProvider},
|
||||
providers::piecewise::{Config, NymTopologyProvider, PiecewiseTopologyProvider},
|
||||
EpochRewardedSet, NymTopology, RoutingNode,
|
||||
};
|
||||
use nym_validator_client::UserAgent;
|
||||
@@ -22,7 +22,7 @@ use std::collections::HashMap;
|
||||
/// fetch changes and node details.
|
||||
#[derive(Clone)]
|
||||
pub struct NymApiTopologyProvider {
|
||||
inner: NymTopologyProvider<NymApiPiecewiseProvider>,
|
||||
inner: NymTopologyProvider<NymApiPiecewiseProvider>,
|
||||
}
|
||||
|
||||
impl NymApiTopologyProvider {
|
||||
@@ -36,16 +36,14 @@ impl NymApiTopologyProvider {
|
||||
let manager = NymApiPiecewiseProvider::new(nym_api_urls, Some(user_agent));
|
||||
let inner = NymTopologyProvider::new(manager, config, initial_topology);
|
||||
|
||||
Self {
|
||||
inner,
|
||||
}
|
||||
Self { inner }
|
||||
}
|
||||
}
|
||||
|
||||
impl AsRef<NymTopologyProvider<NymApiPiecewiseProvider>> for NymApiTopologyProvider {
|
||||
fn as_ref(&self) -> &NymTopologyProvider<NymApiPiecewiseProvider> {
|
||||
&self.inner
|
||||
}
|
||||
fn as_ref(&self) -> &NymTopologyProvider<NymApiPiecewiseProvider> {
|
||||
&self.inner
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
|
||||
@@ -14,7 +14,8 @@ pub mod error;
|
||||
pub mod init;
|
||||
|
||||
pub use nym_topology::{
|
||||
providers::HardcodedTopologyProvider, NymRouteProvider, NymTopology, NymTopologyError, TopologyProvider,
|
||||
providers::HardcodedTopologyProvider, NymRouteProvider, NymTopology, NymTopologyError,
|
||||
TopologyProvider,
|
||||
};
|
||||
|
||||
#[cfg(target_arch = "wasm32")]
|
||||
|
||||
@@ -110,10 +110,6 @@ impl RewardedSet {
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
pub fn all_ids(&self) -> Vec<NodeId> {
|
||||
Vec::new()
|
||||
}
|
||||
}
|
||||
|
||||
#[cw_serde]
|
||||
|
||||
@@ -25,11 +25,9 @@ pub mod error;
|
||||
pub mod node;
|
||||
pub mod rewarded_set;
|
||||
|
||||
|
||||
#[cfg(feature = "wasm-serde-types")]
|
||||
pub mod wasm_helpers;
|
||||
|
||||
|
||||
#[cfg(feature = "providers")]
|
||||
pub mod providers;
|
||||
#[cfg(feature = "providers")]
|
||||
@@ -181,7 +179,6 @@ impl NymRouteProvider {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq)]
|
||||
pub struct NymTopology {
|
||||
// for the purposes of future VRF, everyone will need the same view of the network, regardless of performance filtering
|
||||
@@ -194,7 +191,6 @@ pub struct NymTopology {
|
||||
node_details: HashMap<NodeId, RoutingNode>,
|
||||
}
|
||||
|
||||
|
||||
impl NymTopology {
|
||||
pub fn new_empty(rewarded_set: impl Into<CachedEpochRewardedSet>) -> Self {
|
||||
NymTopology {
|
||||
@@ -554,8 +550,7 @@ impl NymTopology {
|
||||
}
|
||||
|
||||
pub fn all_nodes(&self) -> impl Iterator<Item = &RoutingNode> {
|
||||
self.node_details
|
||||
.values()
|
||||
self.node_details.values()
|
||||
}
|
||||
|
||||
pub fn all_node_ids(&self) -> impl Iterator<Item = &NodeId> {
|
||||
@@ -563,11 +558,9 @@ impl NymTopology {
|
||||
}
|
||||
|
||||
pub fn gateways(&self) -> impl Iterator<Item = &RoutingNode> {
|
||||
self.node_details
|
||||
.values()
|
||||
.filter(|n|
|
||||
self.rewarded_set.entry_gateways.contains(&n.node_id)
|
||||
self.node_details.values().filter(|n| {
|
||||
self.rewarded_set.entry_gateways.contains(&n.node_id)
|
||||
|| self.rewarded_set.exit_gateways.contains(&n.node_id)
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
use nym_api_requests::models::DeclaredRoles;
|
||||
use nym_api_requests::nym_nodes::SkimmedNode;
|
||||
use nym_crypto::asymmetric::{ed25519, x25519};
|
||||
use nym_mixnet_contract_common::NodeId;
|
||||
use nym_mixnet_contract_common::reward_params::Performance;
|
||||
use nym_mixnet_contract_common::NodeId;
|
||||
use nym_sphinx_addressing::nodes::NymNodeRoutingAddress;
|
||||
use nym_sphinx_types::Node as SphinxNode;
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
use crate::NymTopology;
|
||||
pub use async_trait::async_trait;
|
||||
|
||||
pub mod piecewise;
|
||||
pub mod nyxd;
|
||||
pub mod piecewise;
|
||||
|
||||
#[cfg(not(target_arch = "wasm32"))]
|
||||
#[async_trait]
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
|
||||
@@ -162,7 +162,6 @@ impl<M: PiecewiseTopologyProvider> NymTopologyProviderInner<M> {
|
||||
}
|
||||
|
||||
let layer_assignments = response.unwrap();
|
||||
|
||||
// Check if we already know about the epoch
|
||||
if cached_topology.rewarded_set.epoch_id == layer_assignments.epoch_id {
|
||||
debug!("pulled layer assignments, epoch already known");
|
||||
@@ -170,9 +169,10 @@ impl<M: PiecewiseTopologyProvider> NymTopologyProviderInner<M> {
|
||||
return;
|
||||
}
|
||||
|
||||
cached_topology.rewarded_set = layer_assignments.into();
|
||||
|
||||
// get the set of node IDs
|
||||
let newly_assigned_node_ids = layer_assignments.assignment.all_ids();
|
||||
let new_id_set = HashSet::<u32>::from_iter(newly_assigned_node_ids);
|
||||
let new_id_set = cached_topology.rewarded_set.all_ids();
|
||||
let known_id_set = HashSet::<u32>::from_iter(cached_topology.all_node_ids().copied());
|
||||
let unknown_node_ids: Vec<_> = new_id_set.difference(&known_id_set).copied().collect();
|
||||
|
||||
@@ -242,13 +242,11 @@ pub trait PiecewiseTopologyProvider: Send {
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use std::net::SocketAddr;
|
||||
|
||||
use nym_mixnet_contract_common::Percent;
|
||||
use nym_crypto::asymmetric::identity::PublicKey as IdentityPubkey;
|
||||
use nym_crypto::asymmetric::encryption::PublicKey as SphinxPubkey;
|
||||
use super::*;
|
||||
use crate::SupportedRoles;
|
||||
use nym_crypto::asymmetric::encryption::PublicKey as SphinxPubkey;
|
||||
use nym_crypto::asymmetric::identity::PublicKey as IdentityPubkey;
|
||||
use nym_mixnet_contract_common::Percent;
|
||||
|
||||
#[derive(Clone)]
|
||||
struct PassthroughPiecewiseTopologyProvider {
|
||||
@@ -296,7 +294,7 @@ mod test {
|
||||
assert!(topo.is_some());
|
||||
let topo = topo.unwrap();
|
||||
assert!(topo.is_empty());
|
||||
|
||||
|
||||
// create a change in the manager to make sure it is propogated to the provider cache on update
|
||||
topo_mgr.topo.rewarded_set.epoch_id += 1;
|
||||
topo_mgr.topo.rewarded_set.entry_gateways = HashSet::from([123]);
|
||||
|
||||
@@ -119,4 +119,22 @@ impl CachedEpochRewardedSet {
|
||||
mixnodes.extend(&self.layer3);
|
||||
mixnodes
|
||||
}
|
||||
|
||||
pub fn all_ids(&self) -> HashSet<NodeId> {
|
||||
let mut mixnodes = HashSet::with_capacity(
|
||||
self.entry_gateways.len()
|
||||
+ self.exit_gateways.len()
|
||||
+ self.layer1.len()
|
||||
+ self.layer2.len()
|
||||
+ self.layer3.len()
|
||||
+ self.standby.len(),
|
||||
);
|
||||
mixnodes.extend(&self.entry_gateways);
|
||||
mixnodes.extend(&self.exit_gateways);
|
||||
mixnodes.extend(&self.layer1);
|
||||
mixnodes.extend(&self.layer2);
|
||||
mixnodes.extend(&self.layer3);
|
||||
mixnodes.extend(&self.standby);
|
||||
mixnodes
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,7 +28,9 @@ pub use nym_sphinx::{
|
||||
};
|
||||
pub use nym_statistics_common::clients::ClientStatsSender;
|
||||
pub use nym_task;
|
||||
pub use nym_topology::{HardcodedTopologyProvider, MixLayer, NymTopology, TopologyProvider};
|
||||
pub use nym_topology::{
|
||||
providers::HardcodedTopologyProvider, MixLayer, NymTopology, TopologyProvider,
|
||||
};
|
||||
pub use nym_validator_client::nym_api::Client as ApiClient;
|
||||
pub use nym_validator_client::{DirectSigningReqwestRpcNyxdClient, QueryReqwestRpcNyxdClient};
|
||||
// TODO: that's a very nasty import path. it should come from contracts instead!
|
||||
|
||||
Reference in New Issue
Block a user