attempt to retrieve auxiliary details v2 from nym-nodes when fetching self-described data
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
// Copyright 2021-2023 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
pub use crate::nym_api::NymApiClientExt;
|
||||
use crate::nyxd::{self, NyxdClient};
|
||||
use crate::signing::direct_wallet::DirectSecp256k1HdWallet;
|
||||
use crate::signing::signer::{NoSigner, OfflineSigner};
|
||||
@@ -18,9 +19,11 @@ use nym_api_requests::ecash::{
|
||||
BlindSignRequestBody, BlindedSignatureResponse, PartialCoinIndicesSignatureResponse,
|
||||
PartialExpirationDateSignatureResponse, VerificationKeyResponse,
|
||||
};
|
||||
use nym_api_requests::models::described::v1::NymNodeDescriptionV1;
|
||||
use nym_api_requests::models::described::v2::NymNodeDescriptionV2;
|
||||
use nym_api_requests::models::{
|
||||
ApiHealthResponse, GatewayCoreStatusResponse, HistoricalPerformanceResponse,
|
||||
MixnodeCoreStatusResponse, NymNodeDescriptionV1, NymNodeDescriptionV2,
|
||||
MixnodeCoreStatusResponse,
|
||||
};
|
||||
use nym_api_requests::nym_nodes::{
|
||||
NodesByAddressesResponse, SemiSkimmedNodesWithMetadata, SkimmedNodeV1, SkimmedNodesWithMetadata,
|
||||
@@ -28,15 +31,13 @@ use nym_api_requests::nym_nodes::{
|
||||
use nym_coconut_dkg_common::types::EpochId;
|
||||
use nym_http_api_client::UserAgent;
|
||||
use nym_mixnet_contract_common::EpochRewardedSet;
|
||||
pub use nym_mixnet_contract_common::{
|
||||
mixnode::MixNodeDetails, GatewayBond, IdentityKey, IdentityKeyRef, NodeId, NymNodeDetails,
|
||||
};
|
||||
use nym_network_defaults::NymNetworkDetails;
|
||||
use std::net::IpAddr;
|
||||
use time::Date;
|
||||
use url::Url;
|
||||
|
||||
pub use crate::nym_api::NymApiClientExt;
|
||||
pub use nym_mixnet_contract_common::{
|
||||
mixnode::MixNodeDetails, GatewayBond, IdentityKey, IdentityKeyRef, NodeId, NymNodeDetails,
|
||||
};
|
||||
// re-export the type to not break existing imports
|
||||
pub use crate::coconut::EcashApiClient;
|
||||
|
||||
|
||||
@@ -15,16 +15,13 @@ use nym_api_requests::ecash::models::{
|
||||
VerifyEcashTicketBody,
|
||||
};
|
||||
use nym_api_requests::ecash::VerificationKeyResponse;
|
||||
use nym_api_requests::models::network_monitor::{
|
||||
KnownNetworkMonitorResponse, StressTestBatchSubmission,
|
||||
};
|
||||
|
||||
use nym_api_requests::models::node_families::NodeFamily;
|
||||
use nym_api_requests::models::{
|
||||
AnnotationResponseV1, AnnotationResponseV2, ApiHealthResponse, BinaryBuildInformationOwned,
|
||||
ChainBlocksStatusResponse, ChainStatusResponse, KeyRotationInfoResponse,
|
||||
NodePerformanceResponse, NodeRefreshBody, NymNodeDescriptionV1, NymNodeDescriptionV2,
|
||||
PerformanceHistoryResponse, RewardedSetResponse, SignerInformationResponse,
|
||||
StressTestBatchSubmissionResponse,
|
||||
NodePerformanceResponse, NodeRefreshBody, PerformanceHistoryResponse, RewardedSetResponse,
|
||||
SignerInformationResponse,
|
||||
};
|
||||
use nym_api_requests::pagination::PaginatedResponse;
|
||||
use nym_http_api_client::{ApiClient, NO_PARAMS};
|
||||
@@ -34,6 +31,11 @@ use time::format_description::BorrowedFormatItem;
|
||||
use time::Date;
|
||||
use tracing::instrument;
|
||||
|
||||
use nym_api_requests::models::described::v1::NymNodeDescriptionV1;
|
||||
use nym_api_requests::models::described::v2::NymNodeDescriptionV2;
|
||||
use nym_api_requests::models::v3::{
|
||||
KnownNetworkMonitorResponse, StressTestBatchSubmission, StressTestBatchSubmissionResponse,
|
||||
};
|
||||
pub use nym_api_requests::{
|
||||
ecash::{
|
||||
models::SpentCredentialsResponse, BlindSignRequestBody, BlindedSignatureResponse,
|
||||
@@ -52,7 +54,6 @@ pub use nym_api_requests::{
|
||||
},
|
||||
NymNetworkDetailsResponse,
|
||||
};
|
||||
|
||||
pub use nym_coconut_dkg_common::types::EpochId;
|
||||
|
||||
pub mod error;
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
// Copyright 2024 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use nym_api_requests::models::DeclaredRolesV1;
|
||||
use nym_api_requests::models::described::type_translation::DeclaredRolesV1;
|
||||
use nym_api_requests::nym_nodes::SkimmedNodeV1;
|
||||
use nym_crypto::asymmetric::{ed25519, x25519};
|
||||
pub use nym_mixnet_contract_common::LegacyMixLayer;
|
||||
use nym_mixnet_contract_common::NodeId;
|
||||
use nym_sphinx_addressing::nodes::NymNodeRoutingAddress;
|
||||
use nym_sphinx_types::Node as SphinxNode;
|
||||
@@ -12,8 +13,6 @@ use std::fmt::Debug;
|
||||
use std::net::{IpAddr, SocketAddr};
|
||||
use thiserror::Error;
|
||||
|
||||
pub use nym_mixnet_contract_common::LegacyMixLayer;
|
||||
|
||||
#[derive(Error, Debug)]
|
||||
pub enum RoutingNodeError {
|
||||
#[error("node {node_id} ('{identity}') has not provided any valid ip addresses")]
|
||||
|
||||
@@ -7,9 +7,9 @@ use crate::measurements::{Config, PacketListener, PacketSender};
|
||||
use crate::models::VerlocNodeResult;
|
||||
use futures::StreamExt;
|
||||
use futures::stream::FuturesUnordered;
|
||||
use nym_api_requests::models::described::v1::NymNodeDescriptionV1;
|
||||
use nym_crypto::asymmetric::ed25519;
|
||||
use nym_task::ShutdownToken;
|
||||
use nym_validator_client::models::NymNodeDescriptionV1;
|
||||
use nym_validator_client::nym_api::NymApiClientExt;
|
||||
use rand::prelude::SliceRandom;
|
||||
use rand::thread_rng;
|
||||
|
||||
@@ -9,11 +9,7 @@ use utoipa::ToSchema;
|
||||
pub mod type_translation;
|
||||
pub mod v1;
|
||||
pub mod v2;
|
||||
|
||||
// don't break existing imports
|
||||
pub use type_translation::*;
|
||||
pub use v1::*;
|
||||
pub use v2::*;
|
||||
pub mod v3;
|
||||
|
||||
#[derive(Clone, Debug, Serialize, Deserialize, schemars::JsonSchema, ToSchema)]
|
||||
pub struct NoiseDetails {
|
||||
|
||||
@@ -77,7 +77,7 @@ pub struct AnnouncePortsV1 {
|
||||
#[derive(
|
||||
Clone, Copy, Debug, Default, Serialize, Deserialize, schemars::JsonSchema, ToSchema, PartialEq,
|
||||
)]
|
||||
pub struct AuxiliaryDetailsV1 {
|
||||
pub struct NymNodeAuxiliaryDetailsV1 {
|
||||
/// Optional ISO 3166 alpha-2 two-letter country code of the node's **physical** location
|
||||
#[schema(example = "PL", value_type = Option<String>)]
|
||||
#[schemars(with = "Option<String>")]
|
||||
@@ -395,9 +395,11 @@ impl From<nym_node_requests::api::v1::node::models::AnnouncePorts> for AnnounceP
|
||||
}
|
||||
}
|
||||
|
||||
impl From<nym_node_requests::api::v1::node::models::AuxiliaryDetailsV1> for AuxiliaryDetailsV1 {
|
||||
impl From<nym_node_requests::api::v1::node::models::AuxiliaryDetailsV1>
|
||||
for NymNodeAuxiliaryDetailsV1
|
||||
{
|
||||
fn from(value: nym_node_requests::api::v1::node::models::AuxiliaryDetailsV1) -> Self {
|
||||
AuxiliaryDetailsV1 {
|
||||
NymNodeAuxiliaryDetailsV1 {
|
||||
location: value.location,
|
||||
announce_ports: value.announce_ports.into(),
|
||||
accepted_operator_terms_and_conditions: value.accepted_operator_terms_and_conditions,
|
||||
@@ -405,6 +407,33 @@ impl From<nym_node_requests::api::v1::node::models::AuxiliaryDetailsV1> for Auxi
|
||||
}
|
||||
}
|
||||
|
||||
impl From<nym_node_requests::api::v1::node::models::AuxiliaryDetailsV1>
|
||||
for super::v3::NymNodeAuxiliaryDetailsV3
|
||||
{
|
||||
fn from(value: nym_node_requests::api::v1::node::models::AuxiliaryDetailsV1) -> Self {
|
||||
super::v3::NymNodeAuxiliaryDetailsV3 {
|
||||
location: value.location,
|
||||
// v1 wire predates the chain-address field
|
||||
address: None,
|
||||
announce_ports: value.announce_ports.into(),
|
||||
accepted_operator_terms_and_conditions: value.accepted_operator_terms_and_conditions,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<nym_node_requests::api::v2::node::models::AuxiliaryDetailsV2>
|
||||
for super::v3::NymNodeAuxiliaryDetailsV3
|
||||
{
|
||||
fn from(value: nym_node_requests::api::v2::node::models::AuxiliaryDetailsV2) -> Self {
|
||||
super::v3::NymNodeAuxiliaryDetailsV3 {
|
||||
location: value.location,
|
||||
address: Some(value.address),
|
||||
announce_ports: value.announce_ports.into(),
|
||||
accepted_operator_terms_and_conditions: value.accepted_operator_terms_and_conditions,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<nym_node_requests::api::v1::node::models::NodeRoles> for DeclaredRolesV1 {
|
||||
fn from(value: nym_node_requests::api::v1::node::models::NodeRoles) -> Self {
|
||||
DeclaredRolesV1 {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
// Copyright 2026 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use crate::models::{
|
||||
AuthenticatorDetailsV1, AuxiliaryDetailsV1, BinaryBuildInformationOwned, DeclaredRolesV1,
|
||||
HostInformationV1, IpPacketRouterDetailsV1, NetworkRequesterDetailsV1,
|
||||
OffsetDateTimeJsonSchemaWrapper, WebSocketsV1, WireguardDetailsV1,
|
||||
use crate::models::described::type_translation::{
|
||||
AuthenticatorDetailsV1, DeclaredRolesV1, HostInformationV1, IpPacketRouterDetailsV1,
|
||||
NetworkRequesterDetailsV1, NymNodeAuxiliaryDetailsV1, WebSocketsV1, WireguardDetailsV1,
|
||||
};
|
||||
use crate::models::{BinaryBuildInformationOwned, OffsetDateTimeJsonSchemaWrapper};
|
||||
use crate::nym_nodes::{BasicEntryInformation, NodeRole, SemiSkimmedNodeV1, SkimmedNodeV1};
|
||||
use nym_crypto::asymmetric::{ed25519, x25519};
|
||||
use nym_mixnet_contract_common::reward_params::Performance;
|
||||
@@ -160,7 +160,7 @@ pub struct NymNodeDataV1 {
|
||||
pub declared_role: DeclaredRolesV1,
|
||||
|
||||
#[serde(default)]
|
||||
pub auxiliary_details: AuxiliaryDetailsV1,
|
||||
pub auxiliary_details: NymNodeAuxiliaryDetailsV1,
|
||||
|
||||
// TODO: do we really care about ALL build info or just the version?
|
||||
pub build_information: BinaryBuildInformationOwned,
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
// Copyright 2026 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use crate::models::{
|
||||
AuthenticatorDetailsV1, AuxiliaryDetailsV1, BinaryBuildInformationOwned, DeclaredRolesV1,
|
||||
DescribedNodeTypeV1, HostInformationV1, HostKeysV1, IpPacketRouterDetailsV1,
|
||||
LewesProtocolDetailsV1, NetworkRequesterDetailsV1, NymNodeDataV1, NymNodeDescriptionV1,
|
||||
OffsetDateTimeJsonSchemaWrapper, SphinxKeyV1, WebSocketsV1, WireguardDetailsV1,
|
||||
use crate::models::described::type_translation::{
|
||||
AnnouncePortsV1, AuthenticatorDetailsV1, DeclaredRolesV1, HostInformationV1, HostKeysV1,
|
||||
IpPacketRouterDetailsV1, LewesProtocolDetailsV1, NetworkRequesterDetailsV1,
|
||||
NymNodeAuxiliaryDetailsV1, SphinxKeyV1, WebSocketsV1, WireguardDetailsV1,
|
||||
};
|
||||
use crate::models::described::v1::{DescribedNodeTypeV1, NymNodeDataV1, NymNodeDescriptionV1};
|
||||
use crate::models::{BinaryBuildInformationOwned, OffsetDateTimeJsonSchemaWrapper};
|
||||
use crate::nym_nodes::{
|
||||
BasicEntryInformation, NodeRole, SemiSkimmedNodeV1, SemiSkimmedNodeV3, SkimmedNodeV1,
|
||||
};
|
||||
@@ -22,7 +23,8 @@ use utoipa::ToSchema;
|
||||
// no changes for the following types
|
||||
pub type HostInformationV2 = HostInformationV1;
|
||||
pub type DeclaredRolesV2 = DeclaredRolesV1;
|
||||
pub type AuxiliaryDetailsV2 = AuxiliaryDetailsV1;
|
||||
pub type AnnouncePortsV2 = AnnouncePortsV1;
|
||||
pub type NymNodeAuxiliaryDetailsV2 = NymNodeAuxiliaryDetailsV1;
|
||||
pub type NetworkRequesterDetailsV2 = NetworkRequesterDetailsV1;
|
||||
pub type IpPacketRouterDetailsV2 = IpPacketRouterDetailsV1;
|
||||
pub type AuthenticatorDetailsV2 = AuthenticatorDetailsV1;
|
||||
@@ -172,7 +174,7 @@ pub struct NymNodeDataV2 {
|
||||
pub declared_role: DeclaredRolesV2,
|
||||
|
||||
#[serde(default)]
|
||||
pub auxiliary_details: AuxiliaryDetailsV2,
|
||||
pub auxiliary_details: NymNodeAuxiliaryDetailsV2,
|
||||
|
||||
// TODO: do we really care about ALL build info or just the version?
|
||||
pub build_information: BinaryBuildInformationOwned,
|
||||
@@ -339,7 +341,7 @@ pub fn mock_nym_node_description(seed: u64) -> NymNodeDescriptionV2 {
|
||||
exit_nr: true,
|
||||
exit_ipr: true,
|
||||
},
|
||||
auxiliary_details: AuxiliaryDetailsV2 {
|
||||
auxiliary_details: NymNodeAuxiliaryDetailsV2 {
|
||||
location: Some(celes::Country::switzerland()),
|
||||
announce_ports: Default::default(),
|
||||
accepted_operator_terms_and_conditions: true,
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
// Copyright 2026 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use crate::models::described::v2::{AnnouncePortsV2, NymNodeAuxiliaryDetailsV2};
|
||||
use celes::Country;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use utoipa::ToSchema;
|
||||
|
||||
pub type AnnouncePortsV3 = AnnouncePortsV2;
|
||||
|
||||
#[derive(
|
||||
Clone, Debug, Default, Serialize, Deserialize, schemars::JsonSchema, ToSchema, PartialEq,
|
||||
)]
|
||||
pub struct NymNodeAuxiliaryDetailsV3 {
|
||||
/// Optional ISO 3166 alpha-2 two-letter country code of the node's **physical** location
|
||||
#[schema(example = "PL", value_type = Option<String>)]
|
||||
#[schemars(with = "Option<String>")]
|
||||
#[schemars(length(equal = 2))]
|
||||
pub location: Option<Country>,
|
||||
|
||||
/// On-chain address of this node
|
||||
pub address: Option<String>,
|
||||
|
||||
#[serde(default)]
|
||||
pub announce_ports: AnnouncePortsV3,
|
||||
|
||||
/// Specifies whether this node operator has agreed to the terms and conditions
|
||||
/// as defined at <https://nymtech.net/terms-and-conditions/operators/v1.0.0>
|
||||
// make sure to include the default deserialisation as this field hasn't existed when the struct was first created
|
||||
#[serde(default)]
|
||||
pub accepted_operator_terms_and_conditions: bool,
|
||||
}
|
||||
|
||||
impl From<NymNodeAuxiliaryDetailsV3> for NymNodeAuxiliaryDetailsV2 {
|
||||
fn from(value: NymNodeAuxiliaryDetailsV3) -> Self {
|
||||
NymNodeAuxiliaryDetailsV2 {
|
||||
location: value.location,
|
||||
announce_ports: value.announce_ports,
|
||||
accepted_operator_terms_and_conditions: value.accepted_operator_terms_and_conditions,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -23,7 +23,6 @@ pub mod utility;
|
||||
// don't break existing imports
|
||||
pub use api_status::*;
|
||||
pub use circulating_supply::*;
|
||||
pub use described::*;
|
||||
pub use legacy::*;
|
||||
pub use mixnet::*;
|
||||
pub use network::*;
|
||||
|
||||
@@ -75,8 +75,6 @@ pub struct GatewayCoreStatusResponse {
|
||||
pub count: i64,
|
||||
}
|
||||
|
||||
pub use v3::*;
|
||||
|
||||
/// Request/response types for the v3 network-monitor flow, in which an orchestrator submits
|
||||
/// stress testing results to nym-api via signed batches.
|
||||
pub mod v3 {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
// Copyright 2024 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
use crate::models::{
|
||||
DeclaredRolesV1, LewesProtocolDetailsV1, NymNodeDataV1, OffsetDateTimeJsonSchemaWrapper,
|
||||
};
|
||||
use crate::models::described::type_translation::{DeclaredRolesV1, LewesProtocolDetailsV1};
|
||||
use crate::models::described::v1::NymNodeDataV1;
|
||||
use crate::models::OffsetDateTimeJsonSchemaWrapper;
|
||||
use crate::pagination::{PaginatedResponse, Pagination};
|
||||
use nym_crypto::asymmetric::ed25519::serde_helpers::bs58_ed25519_pubkey;
|
||||
use nym_crypto::asymmetric::x25519::serde_helpers::bs58_x25519_pubkey;
|
||||
|
||||
@@ -54,9 +54,9 @@ impl<T> SignedMessage<T> {
|
||||
// make sure only our types can implement this trait (to ensure infallible serialisation)
|
||||
pub(crate) mod sealed {
|
||||
use crate::ecash::models::*;
|
||||
use crate::models::network_monitor::v3::StressTestBatchSubmissionContent;
|
||||
use crate::models::{
|
||||
v3, ChainBlocksStatusResponseBody, DetailedSignersStatusResponseBody,
|
||||
SignersStatusResponseBody,
|
||||
ChainBlocksStatusResponseBody, DetailedSignersStatusResponseBody, SignersStatusResponseBody,
|
||||
};
|
||||
|
||||
pub trait Sealed {}
|
||||
@@ -75,5 +75,5 @@ pub(crate) mod sealed {
|
||||
impl Sealed for DetailedSignersStatusResponseBody {}
|
||||
|
||||
// v3 stress testing
|
||||
impl Sealed for v3::StressTestBatchSubmissionContent {}
|
||||
impl Sealed for StressTestBatchSubmissionContent {}
|
||||
}
|
||||
|
||||
@@ -8,7 +8,8 @@ use crate::node_describe_cache::cache::DescribedNodes;
|
||||
use crate::node_describe_cache::NodeDescriptionTopologyExt;
|
||||
use crate::node_status_api::NodeStatusCache;
|
||||
use crate::support::caching::cache::SharedCache;
|
||||
use nym_api_requests::models::{NodeAnnotationV2, NymNodeDescriptionV2};
|
||||
use nym_api_requests::models::described::v2::NymNodeDescriptionV2;
|
||||
use nym_api_requests::models::NodeAnnotationV2;
|
||||
use nym_crypto::asymmetric::{ed25519, x25519};
|
||||
use nym_mixnet_contract_common::{LegacyMixLayer, NodeId};
|
||||
use nym_node_tester_utils::node::{NodeType, TestableNode};
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
// Copyright 2025 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use nym_api_requests::models::{DescribedNodeTypeV2, NymNodeDataV2, NymNodeDescriptionV2};
|
||||
use nym_api_requests::models::described::v2::{
|
||||
DescribedNodeTypeV2, NymNodeDataV2, NymNodeDescriptionV2,
|
||||
};
|
||||
use nym_mixnet_contract_common::NodeId;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::collections::HashMap;
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use crate::support::caching::cache::UninitialisedCache;
|
||||
use nym_api_requests::models::{NymNodeDescriptionV1, NymNodeDescriptionV2};
|
||||
use nym_api_requests::models::described::v1::NymNodeDescriptionV1;
|
||||
use nym_api_requests::models::described::v2::NymNodeDescriptionV2;
|
||||
use nym_mixnet_contract_common::NodeId;
|
||||
use nym_node_requests::api::client::NymNodeApiClientError;
|
||||
use nym_topology::node::RoutingNodeError;
|
||||
|
||||
@@ -4,11 +4,12 @@
|
||||
use crate::node_describe_cache::NodeDescribeCacheError;
|
||||
use futures::future::{maybe_done, MaybeDone};
|
||||
use futures::{FutureExt, TryFutureExt};
|
||||
use nym_api_requests::models::{
|
||||
AuthenticatorDetailsV2, AuxiliaryDetailsV2, DeclaredRolesV2, HostInformationV2,
|
||||
IpPacketRouterDetailsV2, LewesProtocolDetailsV1, NetworkRequesterDetailsV2, NymNodeDataV2,
|
||||
WebSocketsV2, WireguardDetailsV2,
|
||||
use nym_api_requests::models::described::type_translation::LewesProtocolDetailsV1;
|
||||
use nym_api_requests::models::described::v2::{
|
||||
AuthenticatorDetailsV2, DeclaredRolesV2, HostInformationV2, IpPacketRouterDetailsV2,
|
||||
NetworkRequesterDetailsV2, NymNodeDataV2, WebSocketsV2, WireguardDetailsV2,
|
||||
};
|
||||
use nym_api_requests::models::described::v3::NymNodeAuxiliaryDetailsV3;
|
||||
use nym_bin_common::build_information::BinaryBuildInformationOwned;
|
||||
use nym_config::defaults::mainnet;
|
||||
use nym_mixnet_contract_common::NodeId;
|
||||
@@ -37,6 +38,23 @@ async fn network_requester_future(
|
||||
})
|
||||
}
|
||||
|
||||
// try v2 first; nodes that haven't been upgraded yet won't expose it, so fall back to v1
|
||||
// (the v1 path yields no chain address).
|
||||
async fn auxiliary_details_future(client: &Client, node_id: NodeId) -> NymNodeAuxiliaryDetailsV3 {
|
||||
if let Ok(v2) = client.get_auxiliary_details_v2().await {
|
||||
return v2.into();
|
||||
}
|
||||
|
||||
client
|
||||
.get_auxiliary_details()
|
||||
.await
|
||||
.inspect_err(|err| {
|
||||
debug!("could not obtain auxiliary details of node {node_id}: {err} is it running an old version?")
|
||||
})
|
||||
.map(Into::into)
|
||||
.unwrap_or_default()
|
||||
}
|
||||
|
||||
pub(crate) async fn query_for_described_data(
|
||||
client: &Client,
|
||||
node_id: NodeId,
|
||||
@@ -50,13 +68,7 @@ pub(crate) async fn query_for_described_data(
|
||||
NodeDescribedInfoMegaFuture::new(
|
||||
client.get_build_information().map_err(map_query_err),
|
||||
client.get_roles().ok_into().map_err(map_query_err),
|
||||
client.get_auxiliary_details()
|
||||
.inspect_err(|err| {
|
||||
// old nym-nodes will not have this field, so use the default instead
|
||||
debug!("could not obtain auxiliary details of node {node_id}: {err} is it running an old version?")
|
||||
})
|
||||
.ok_into()
|
||||
.unwrap_or_else(|_| AuxiliaryDetailsV2::default()),
|
||||
auxiliary_details_future(client, node_id),
|
||||
client.get_mixnet_websockets().ok_into().map_err(map_query_err),
|
||||
network_requester_future(client).map_err(map_query_err),
|
||||
// `ok_into` ultimately calls `IpPacketRouter::into` to transform it into `IpPacketRouterDetails`
|
||||
@@ -114,7 +126,7 @@ impl<F1, F2, F3, F4, F5, F6, F7, F8, F9> Future
|
||||
where
|
||||
F1: Future<Output = Result<BinaryBuildInformationOwned, NodeDescribeCacheError>>,
|
||||
F2: Future<Output = Result<DeclaredRolesV2, NodeDescribeCacheError>>,
|
||||
F3: Future<Output = AuxiliaryDetailsV2>,
|
||||
F3: Future<Output = NymNodeAuxiliaryDetailsV3>,
|
||||
F4: Future<Output = Result<WebSocketsV2, NodeDescribeCacheError>>,
|
||||
F5: Future<Output = Result<Option<NetworkRequesterDetailsV2>, NodeDescribeCacheError>>,
|
||||
F6: Future<Output = Option<IpPacketRouterDetailsV2>>,
|
||||
@@ -205,7 +217,7 @@ struct ResolvedNodeDescribedInfo {
|
||||
build_info: Result<BinaryBuildInformationOwned, NodeDescribeCacheError>,
|
||||
roles: Result<DeclaredRolesV2, NodeDescribeCacheError>,
|
||||
// TODO: in the future make it return a Result as well.
|
||||
auxiliary_details: AuxiliaryDetailsV2,
|
||||
auxiliary_details: NymNodeAuxiliaryDetailsV3,
|
||||
websockets: Result<WebSocketsV2, NodeDescribeCacheError>,
|
||||
network_requester: Result<Option<NetworkRequesterDetailsV2>, NodeDescribeCacheError>,
|
||||
ipr: Option<IpPacketRouterDetailsV2>,
|
||||
@@ -234,7 +246,7 @@ impl ResolvedNodeDescribedInfo {
|
||||
pub(crate) struct UnwrappedResolvedNodeDescribedInfo {
|
||||
pub(crate) build_info: BinaryBuildInformationOwned,
|
||||
pub(crate) roles: DeclaredRolesV2,
|
||||
pub(crate) auxiliary_details: AuxiliaryDetailsV2,
|
||||
pub(crate) auxiliary_details: NymNodeAuxiliaryDetailsV3,
|
||||
pub(crate) websockets: WebSocketsV2,
|
||||
pub(crate) network_requester: Option<NetworkRequesterDetailsV2>,
|
||||
pub(crate) ipr: Option<IpPacketRouterDetailsV2>,
|
||||
@@ -258,7 +270,7 @@ impl UnwrappedResolvedNodeDescribedInfo {
|
||||
wireguard: self.wireguard,
|
||||
lewes_protocol: self.lewes_protocol,
|
||||
mixnet_websockets: self.websockets,
|
||||
auxiliary_details: self.auxiliary_details,
|
||||
auxiliary_details: self.auxiliary_details.into(),
|
||||
declared_role: self.roles,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
use crate::node_describe_cache::query_helpers::query_for_described_data;
|
||||
use crate::node_describe_cache::NodeDescribeCacheError;
|
||||
use nym_api_requests::models::{DescribedNodeTypeV2, NymNodeDescriptionV2};
|
||||
use nym_api_requests::models::described::v2::{DescribedNodeTypeV2, NymNodeDescriptionV2};
|
||||
use nym_bin_common::bin_info;
|
||||
use nym_crypto::asymmetric::ed25519;
|
||||
use nym_mixnet_contract_common::{NodeId, NymNodeDetails};
|
||||
|
||||
+2
-1
@@ -2,7 +2,8 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use crate::mixnet_contract_cache::cache::data::ConfigScoreData;
|
||||
use nym_api_requests::models::{ConfigScore, NymNodeDescriptionV2};
|
||||
use nym_api_requests::models::described::v2::NymNodeDescriptionV2;
|
||||
use nym_api_requests::models::ConfigScore;
|
||||
use nym_contracts_common::NaiveFloat;
|
||||
use nym_mixnet_contract_common::VersionScoreFormulaParams;
|
||||
|
||||
|
||||
@@ -7,10 +7,12 @@ use crate::support::http::state::AppState;
|
||||
use axum::extract::{Path, Query, State};
|
||||
use axum::routing::{get, post};
|
||||
use axum::{Json, Router};
|
||||
use nym_api_requests::models::described::v1::NymNodeDescriptionV1;
|
||||
use nym_api_requests::models::described::NoiseDetails;
|
||||
use nym_api_requests::models::{
|
||||
AnnotationResponseV1, NodeDatePerformanceResponse, NodePerformanceResponse, NodeRefreshBody,
|
||||
NoiseDetails, NymNodeDescriptionV1, PerformanceHistoryResponse, RewardedSetResponse,
|
||||
StakeSaturationResponse, UptimeHistoryResponse,
|
||||
PerformanceHistoryResponse, RewardedSetResponse, StakeSaturationResponse,
|
||||
UptimeHistoryResponse,
|
||||
};
|
||||
use nym_api_requests::pagination::{PaginatedResponse, Pagination};
|
||||
use nym_contracts_common::NaiveFloat;
|
||||
|
||||
@@ -7,7 +7,8 @@ use crate::support::http::state::AppState;
|
||||
use axum::extract::{Path, Query, State};
|
||||
use axum::routing::get;
|
||||
use axum::Router;
|
||||
use nym_api_requests::models::{AnnotationResponseV2, NymNodeDescriptionV2};
|
||||
use nym_api_requests::models::described::v2::NymNodeDescriptionV2;
|
||||
use nym_api_requests::models::AnnotationResponseV2;
|
||||
use nym_api_requests::pagination::{PaginatedResponse, Pagination};
|
||||
use nym_http_api_common::{FormattedResponse, OutputParams};
|
||||
use tower_http::compression::CompressionLayer;
|
||||
|
||||
@@ -7,8 +7,9 @@ use crate::support::storage::models::NymNodeStressTestingResult;
|
||||
use axum::extract::{Path, State};
|
||||
use axum::routing::{get, post};
|
||||
use axum::{Json, Router};
|
||||
use nym_api_requests::models::network_monitor::KnownNetworkMonitorResponse;
|
||||
use nym_api_requests::models::{StressTestBatchSubmission, StressTestBatchSubmissionResponse};
|
||||
use nym_api_requests::models::v3::{
|
||||
KnownNetworkMonitorResponse, StressTestBatchSubmission, StressTestBatchSubmissionResponse,
|
||||
};
|
||||
use nym_crypto::asymmetric::ed25519;
|
||||
use std::time::Duration;
|
||||
use time::OffsetDateTime;
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
// Copyright 2021 - Nym Technologies SA <contact@nymtech.net>
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use nym_api_requests::models::{StressTestResult, StressTestingScore, TestNode};
|
||||
use nym_api_requests::models::v3::StressTestResult;
|
||||
use nym_api_requests::models::{StressTestingScore, TestNode};
|
||||
use nym_crypto::asymmetric::ed25519;
|
||||
use nym_mixnet_contract_common::NodeId;
|
||||
use sqlx::FromRow;
|
||||
|
||||
@@ -6,8 +6,9 @@ use crate::support::http::state::AppState;
|
||||
use crate::unstable_routes::helpers::refreshed_at;
|
||||
use crate::unstable_routes::v2::nym_nodes::helpers::NodesParamsWithRole;
|
||||
use axum::extract::{Query, State};
|
||||
use nym_api_requests::models::described::v2::NymNodeDescriptionV2;
|
||||
use nym_api_requests::models::{
|
||||
NodeAnnotationV1, NodeAnnotationV2, NymNodeDescriptionV2, OffsetDateTimeJsonSchemaWrapper,
|
||||
NodeAnnotationV1, NodeAnnotationV2, OffsetDateTimeJsonSchemaWrapper,
|
||||
};
|
||||
use nym_api_requests::nym_nodes::{NodeRole, PaginatedCachedNodesResponseV2, SemiSkimmedNodeV1};
|
||||
use nym_api_requests::pagination::PaginatedResponse;
|
||||
|
||||
@@ -6,8 +6,9 @@ use crate::unstable_routes::helpers::refreshed_at;
|
||||
use crate::unstable_routes::v2::nym_nodes::helpers::NodesParams;
|
||||
use crate::unstable_routes::v2::nym_nodes::skimmed::PaginatedSkimmedNodes;
|
||||
use axum::extract::{Query, State};
|
||||
use nym_api_requests::models::described::v2::NymNodeDescriptionV2;
|
||||
use nym_api_requests::models::{
|
||||
NodeAnnotationV1, NodeAnnotationV2, NymNodeDescriptionV2, OffsetDateTimeJsonSchemaWrapper,
|
||||
NodeAnnotationV1, NodeAnnotationV2, OffsetDateTimeJsonSchemaWrapper,
|
||||
};
|
||||
use nym_api_requests::nym_nodes::{NodeRole, PaginatedCachedNodesResponseV2, SkimmedNodeV1};
|
||||
use nym_http_api_common::Output;
|
||||
|
||||
@@ -5,8 +5,9 @@ use crate::node_status_api::models::AxumResult;
|
||||
use crate::support::http::state::AppState;
|
||||
use crate::unstable_routes::helpers::refreshed_at;
|
||||
use axum::extract::{Query, State};
|
||||
use nym_api_requests::models::described::v2::NymNodeDescriptionV2;
|
||||
use nym_api_requests::models::{
|
||||
NodeAnnotationV1, NodeAnnotationV2, NymNodeDescriptionV2, OffsetDateTimeJsonSchemaWrapper,
|
||||
NodeAnnotationV1, NodeAnnotationV2, OffsetDateTimeJsonSchemaWrapper,
|
||||
};
|
||||
use nym_api_requests::nym_nodes::{NodeRole, PaginatedCachedNodesResponseV2, SemiSkimmedNodeV3};
|
||||
use nym_api_requests::pagination::PaginatedResponse;
|
||||
|
||||
+1
-1
@@ -4,10 +4,10 @@
|
||||
use crate::orchestrator::config::Config;
|
||||
use crate::storage::NetworkMonitorStorage;
|
||||
use anyhow::Context;
|
||||
use nym_api_requests::models::v3::{StressTestBatchSubmissionContent, StressTestResult};
|
||||
use nym_crypto::asymmetric::ed25519;
|
||||
use nym_node_requests::api::Client;
|
||||
use nym_task::ShutdownToken;
|
||||
use nym_validator_client::models::{StressTestBatchSubmissionContent, StressTestResult};
|
||||
use nym_validator_client::nym_api::NymApiClientExt;
|
||||
use nym_validator_client::signable::SignableMessageBody;
|
||||
use std::sync::Arc;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use anyhow::Context;
|
||||
use nym_api_requests::models::network_monitor::StressTestResult;
|
||||
use nym_api_requests::models::v3::StressTestResult;
|
||||
use nym_crypto::asymmetric::{ed25519, x25519};
|
||||
use nym_network_monitor_orchestrator_requests::models::{
|
||||
self as api, LatencyDistribution, NymNodeData, TestRunData, TestRunInProgressData,
|
||||
|
||||
@@ -336,9 +336,9 @@ use mixnode::MixnodeSummary;
|
||||
use nym_bin_common::build_information::BinaryBuildInformationOwned;
|
||||
use nym_mixnet_contract_common::NodeId;
|
||||
use nym_validator_client::models::{
|
||||
AuthenticatorDetailsV2, AuxiliaryDetailsV2, DeclaredRolesV2, DescribedNodeTypeV2,
|
||||
HostInformationV2, HostKeysV2, IpPacketRouterDetailsV2, LewesProtocolDetailsV1,
|
||||
NetworkRequesterDetailsV2, NymNodeDataV2, NymNodeDescriptionV2,
|
||||
AuthenticatorDetailsV2, DeclaredRolesV2, DescribedNodeTypeV2, HostInformationV2, HostKeysV2,
|
||||
IpPacketRouterDetailsV2, LewesProtocolDetailsV1, NetworkRequesterDetailsV2,
|
||||
NymNodeAuxiliaryDetailsV2, NymNodeDataV2, NymNodeDescriptionV2,
|
||||
OffsetDateTimeJsonSchemaWrapper, SphinxKeyV1, VersionedNoiseKeyV1, WebSocketsV1,
|
||||
WireguardDetailsV2,
|
||||
};
|
||||
@@ -743,7 +743,7 @@ pub struct NymNodeDataDeHelper {
|
||||
pub declared_role: DeclaredRolesV2,
|
||||
|
||||
#[serde(default)]
|
||||
pub auxiliary_details: AuxiliaryDetailsV2,
|
||||
pub auxiliary_details: NymNodeAuxiliaryDetailsV2,
|
||||
|
||||
// TODO: do we really care about ALL build info or just the version?
|
||||
pub build_information: BinaryBuildInformationOwned,
|
||||
|
||||
@@ -14,6 +14,7 @@ use crate::api::v1::node::models::{
|
||||
AuxiliaryDetailsV1, NodeDescription, NodeRoles, SignedHostInformation,
|
||||
};
|
||||
use crate::api::v1::node_load::models::NodeLoad;
|
||||
use crate::api::v2::node::models::AuxiliaryDetailsV2;
|
||||
use crate::routes;
|
||||
use async_trait::async_trait;
|
||||
use nym_bin_common::build_information::BinaryBuildInformationOwned;
|
||||
@@ -60,6 +61,11 @@ pub trait NymNodeApiClientExt: ApiClient {
|
||||
.await
|
||||
}
|
||||
|
||||
async fn get_auxiliary_details_v2(&self) -> Result<AuxiliaryDetailsV2, NymNodeApiClientError> {
|
||||
self.get_json_from(routes::api::v2::auxiliary_absolute())
|
||||
.await
|
||||
}
|
||||
|
||||
// TODO: implement calls for other endpoints; for now I only care about the wss
|
||||
async fn get_mixnet_websockets(&self) -> Result<WebSockets, NymNodeApiClientError> {
|
||||
self.get_json_from(
|
||||
|
||||
@@ -2,20 +2,18 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-only
|
||||
|
||||
use anyhow::Result;
|
||||
use nym_task::ShutdownToken;
|
||||
|
||||
use celes::Country;
|
||||
use nym_validator_client::models::NymNodeDescriptionV1;
|
||||
use nym_http_api_client::Client;
|
||||
use nym_task::ShutdownToken;
|
||||
use nym_validator_client::client::NymApiClientExt;
|
||||
use nym_validator_client::models::described::v1::NymNodeDescriptionV1;
|
||||
use std::collections::HashMap;
|
||||
use std::time::Duration;
|
||||
use std::{net::IpAddr, sync::Arc};
|
||||
use tokio::sync::RwLock;
|
||||
use tokio::time::interval;
|
||||
use url::Url;
|
||||
|
||||
use nym_http_api_client::Client;
|
||||
use nym_validator_client::client::NymApiClientExt;
|
||||
use tracing::{error, info, trace, warn};
|
||||
use url::Url;
|
||||
|
||||
const NETWORK_CACHE_TTL: Duration = Duration::from_secs(600);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user