From b28596286a57056ad82fb779473cd0c3c3659ea2 Mon Sep 17 00:00:00 2001 From: jmwample Date: Thu, 29 May 2025 13:27:01 -0600 Subject: [PATCH 1/5] add extended (optional) fields to the NetworkDiscovery --- common/network-defaults/src/network.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/common/network-defaults/src/network.rs b/common/network-defaults/src/network.rs index 8cebe533409..389a3bdbd31 100644 --- a/common/network-defaults/src/network.rs +++ b/common/network-defaults/src/network.rs @@ -37,6 +37,15 @@ pub struct NymNetworkDetails { pub contracts: NymContracts, pub explorer_api: Option, pub nym_vpn_api_url: Option, + pub nym_api_urls: Option>, + pub nym_vpn_api_urls: Option>, +} + +#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize, JsonSchema)] +#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] +pub struct ApiUrl { + pub url: String, + pub front_urls: Option>, } // by default we assume the same defaults as mainnet, i.e. same prefixes and denoms @@ -67,6 +76,8 @@ impl NymNetworkDetails { contracts: Default::default(), explorer_api: Default::default(), nym_vpn_api_url: Default::default(), + nym_api_urls: Default::default(), + nym_vpn_api_urls: Default::default(), } } @@ -154,6 +165,8 @@ impl NymNetworkDetails { }, explorer_api: parse_optional_str(mainnet::EXPLORER_API), nym_vpn_api_url: parse_optional_str(mainnet::NYM_VPN_API), + nym_api_urls: None, + nym_vpn_api_urls: None, } } From f27a58884f3b1c0b539fdbe462ade195a4615568 Mon Sep 17 00:00:00 2001 From: jmwample Date: Fri, 30 May 2025 11:38:42 -0600 Subject: [PATCH 2/5] add some initial defaults --- common/network-defaults/src/mainnet.rs | 23 ++++++++++++++++++++++- common/network-defaults/src/network.rs | 14 ++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/common/network-defaults/src/mainnet.rs b/common/network-defaults/src/mainnet.rs index 2b54d174068..065c61448ea 100644 --- a/common/network-defaults/src/mainnet.rs +++ b/common/network-defaults/src/mainnet.rs @@ -1,6 +1,7 @@ // Copyright 2021 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 +use crate::ApiUrlConst; #[cfg(feature = "network")] use crate::{DenomDetails, ValidatorDetails}; @@ -29,10 +30,30 @@ pub const COCONUT_DKG_CONTRACT_ADDRESS: &str = pub const REWARDING_VALIDATOR_ADDRESS: &str = "n10yyd98e2tuwu0f7ypz9dy3hhjw7v772q6287gy"; pub const NYXD_URL: &str = "https://rpc.nymtech.net"; -pub const NYM_API: &str = "https://validator.nymtech.net/api/"; pub const NYXD_WS: &str = "wss://rpc.nymtech.net/websocket"; pub const EXPLORER_API: &str = "https://explorer.nymtech.net/api/"; +pub const NYM_API: &str = "https://validator.nymtech.net/api/"; +pub const NYM_APIS: &[ApiUrlConst] = &[ + ApiUrlConst { + url: NYM_API, + front_urls: None, + }, + ApiUrlConst { + url: "https://validator.global.ssl.fastly.net/api/", + front_urls: Some(&["https://yelp.global.ssl.fastly.net"]), + }, +]; pub const NYM_VPN_API: &str = "https://nymvpn.com/api/"; +pub const NYM_VPN_APIS: &[ApiUrlConst] = &[ + ApiUrlConst { + url: NYM_VPN_API, + front_urls: None, + }, + ApiUrlConst { + url: "https://nymvpn.global.ssl.fastly.net/api/", + front_urls: Some(&["https://yelp.global.ssl.fastly.net"]), + }, +]; // I'm making clippy mad on purpose, because that url HAS TO be updated and deployed before merging pub const EXIT_POLICY_URL: &str = diff --git a/common/network-defaults/src/network.rs b/common/network-defaults/src/network.rs index 389a3bdbd31..22dbf04d4e7 100644 --- a/common/network-defaults/src/network.rs +++ b/common/network-defaults/src/network.rs @@ -48,6 +48,20 @@ pub struct ApiUrl { pub front_urls: Option>, } +pub struct ApiUrlConst<'a> { + pub url: &'a str, + pub front_urls: Option<&'a [&'a str]>, +} + +impl From> for ApiUrl { + fn from(value: ApiUrlConst) -> Self { + ApiUrl { + url: value.url.to_string(), + front_urls: value.front_urls.map(|slice| slice.iter().map(|s| s.to_string()).collect()), + } + } +} + // by default we assume the same defaults as mainnet, i.e. same prefixes and denoms impl Default for NymNetworkDetails { fn default() -> Self { From 439474efa5f00d85465ee71abbc06c094d15c7dc Mon Sep 17 00:00:00 2001 From: jmwample Date: Fri, 30 May 2025 12:12:02 -0600 Subject: [PATCH 3/5] fix minor issues and sync with develop --- common/network-defaults/src/network.rs | 4 +++- nym-wallet/nym-wallet-types/src/network/sandbox.rs | 2 ++ tools/internal/testnet-manager/src/manager/network.rs | 2 ++ tools/internal/testnet-manager/src/manager/network_init.rs | 2 ++ 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/common/network-defaults/src/network.rs b/common/network-defaults/src/network.rs index 22dbf04d4e7..81e49069cad 100644 --- a/common/network-defaults/src/network.rs +++ b/common/network-defaults/src/network.rs @@ -57,7 +57,9 @@ impl From> for ApiUrl { fn from(value: ApiUrlConst) -> Self { ApiUrl { url: value.url.to_string(), - front_urls: value.front_urls.map(|slice| slice.iter().map(|s| s.to_string()).collect()), + front_urls: value + .front_urls + .map(|slice| slice.iter().map(|s| s.to_string()).collect()), } } } diff --git a/nym-wallet/nym-wallet-types/src/network/sandbox.rs b/nym-wallet/nym-wallet-types/src/network/sandbox.rs index c436c9f09e1..68d389ebfba 100644 --- a/nym-wallet/nym-wallet-types/src/network/sandbox.rs +++ b/nym-wallet/nym-wallet-types/src/network/sandbox.rs @@ -55,5 +55,7 @@ pub(crate) fn network_details() -> nym_network_defaults::NymNetworkDetails { }, explorer_api: parse_optional_str(EXPLORER_API), nym_vpn_api_url: None, + nym_vpn_api_urls: None, + nym_api_urls: None, } } diff --git a/tools/internal/testnet-manager/src/manager/network.rs b/tools/internal/testnet-manager/src/manager/network.rs index 6c65eda06cb..623a3d0a8ec 100644 --- a/tools/internal/testnet-manager/src/manager/network.rs +++ b/tools/internal/testnet-manager/src/manager/network.rs @@ -83,6 +83,8 @@ impl<'a> From<&'a LoadedNetwork> for nym_config::defaults::NymNetworkDetails { contracts, explorer_api: None, nym_vpn_api_url: None, + nym_vpn_api_urls: None, + nym_api_urls: None, } } } diff --git a/tools/internal/testnet-manager/src/manager/network_init.rs b/tools/internal/testnet-manager/src/manager/network_init.rs index 8e978e4fc6a..6deb16046bf 100644 --- a/tools/internal/testnet-manager/src/manager/network_init.rs +++ b/tools/internal/testnet-manager/src/manager/network_init.rs @@ -40,6 +40,8 @@ impl InitCtx { contracts: Default::default(), explorer_api: None, nym_vpn_api_url: None, + nym_vpn_api_urls: None, + nym_api_urls: None, }; Ok(Config::try_from_nym_network_details(&network_details)?) } From ced940f1f29a5845227cc198039f3df5c8495105 Mon Sep 17 00:00:00 2001 From: jmwample Date: Wed, 11 Jun 2025 12:56:21 -0600 Subject: [PATCH 4/5] updated fallback hosts --- common/network-defaults/src/mainnet.rs | 16 ++++++++++------ common/network-defaults/src/network.rs | 14 ++++++++++---- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/common/network-defaults/src/mainnet.rs b/common/network-defaults/src/mainnet.rs index 065c61448ea..612a347d2c8 100644 --- a/common/network-defaults/src/mainnet.rs +++ b/common/network-defaults/src/mainnet.rs @@ -36,22 +36,26 @@ pub const NYM_API: &str = "https://validator.nymtech.net/api/"; pub const NYM_APIS: &[ApiUrlConst] = &[ ApiUrlConst { url: NYM_API, - front_urls: None, + front_hosts: None, }, ApiUrlConst { - url: "https://validator.global.ssl.fastly.net/api/", - front_urls: Some(&["https://yelp.global.ssl.fastly.net"]), + url: "https://nym-fronntdoor.vercel.app/api/", + front_hosts: Some(&["vercel.app", "vercel.com"]), + }, + ApiUrlConst { + url: "https://nym-frontdoor.global.ssl.fastly.net/api/", + front_hosts: Some(&["yelp.global.ssl.fastly.net"]), }, ]; pub const NYM_VPN_API: &str = "https://nymvpn.com/api/"; pub const NYM_VPN_APIS: &[ApiUrlConst] = &[ ApiUrlConst { url: NYM_VPN_API, - front_urls: None, + front_hosts: Some(&["vercel.app", "vercel.com"]), }, ApiUrlConst { - url: "https://nymvpn.global.ssl.fastly.net/api/", - front_urls: Some(&["https://yelp.global.ssl.fastly.net"]), + url: "https://nymvpn-frontdoor.global.ssl.fastly.net/api/", + front_hosts: Some(&["yelp.global.ssl.fastly.net"]), }, ]; diff --git a/common/network-defaults/src/network.rs b/common/network-defaults/src/network.rs index 81e49069cad..e2b7ceb8226 100644 --- a/common/network-defaults/src/network.rs +++ b/common/network-defaults/src/network.rs @@ -44,21 +44,27 @@ pub struct NymNetworkDetails { #[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq, Serialize, JsonSchema)] #[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))] pub struct ApiUrl { + /// Expects a string formatted Url + /// + /// see https://docs.rs/url/latest/url/struct.Url.html pub url: String, - pub front_urls: Option>, + /// Optional alternative equivalent hostnames. Each entry must parse as valid Host + /// + /// see https://docs.rs/url/latest/url/enum.Host.html + pub front_hosts: Option>, } pub struct ApiUrlConst<'a> { pub url: &'a str, - pub front_urls: Option<&'a [&'a str]>, + pub front_hosts: Option<&'a [&'a str]>, } impl From> for ApiUrl { fn from(value: ApiUrlConst) -> Self { ApiUrl { url: value.url.to_string(), - front_urls: value - .front_urls + front_hosts: value + .front_hosts .map(|slice| slice.iter().map(|s| s.to_string()).collect()), } } From c88adb6fa3fa15ddd7e0e4fe1c76d5c288756f1a Mon Sep 17 00:00:00 2001 From: jmwample Date: Thu, 12 Jun 2025 10:45:09 -0600 Subject: [PATCH 5/5] fix contracts build --- common/network-defaults/src/mainnet.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/common/network-defaults/src/mainnet.rs b/common/network-defaults/src/mainnet.rs index 612a347d2c8..26981621970 100644 --- a/common/network-defaults/src/mainnet.rs +++ b/common/network-defaults/src/mainnet.rs @@ -1,9 +1,8 @@ // Copyright 2021 - Nym Technologies SA // SPDX-License-Identifier: Apache-2.0 -use crate::ApiUrlConst; #[cfg(feature = "network")] -use crate::{DenomDetails, ValidatorDetails}; +use crate::{ApiUrlConst, DenomDetails, ValidatorDetails}; pub const NETWORK_NAME: &str = "mainnet"; @@ -33,6 +32,7 @@ pub const NYXD_URL: &str = "https://rpc.nymtech.net"; pub const NYXD_WS: &str = "wss://rpc.nymtech.net/websocket"; pub const EXPLORER_API: &str = "https://explorer.nymtech.net/api/"; pub const NYM_API: &str = "https://validator.nymtech.net/api/"; +#[cfg(feature = "network")] pub const NYM_APIS: &[ApiUrlConst] = &[ ApiUrlConst { url: NYM_API, @@ -48,6 +48,7 @@ pub const NYM_APIS: &[ApiUrlConst] = &[ }, ]; pub const NYM_VPN_API: &str = "https://nymvpn.com/api/"; +#[cfg(feature = "network")] pub const NYM_VPN_APIS: &[ApiUrlConst] = &[ ApiUrlConst { url: NYM_VPN_API,