From cce8f30fe7721b1dfa7a653a601af351ad43837a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Olav?= Date: Sun, 6 Sep 2026 07:47:43 +0200 Subject: [PATCH 1/2] net: resolve a seed name with its port --- lib/net/mod.rs | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/net/mod.rs b/lib/net/mod.rs index f4f653a2..c0e37935 100644 --- a/lib/net/mod.rs +++ b/lib/net/mod.rs @@ -216,7 +216,7 @@ pub async fn resolve_peer_address( peer_addr: PeerAddress, ) -> std::io::Result> where - S: std::fmt::Display + tokio::net::ToSocketAddrs, + S: std::fmt::Display, { match peer_addr.host { url::Host::Ipv4(ipv4) => Ok(ResolvedPeerAddress::Static( @@ -226,7 +226,9 @@ where SocketAddr::new(IpAddr::V6(ipv6), peer_addr.port), )), url::Host::Domain(domain) => { - let mut addrs: Vec<_> = tokio::net::lookup_host(&domain) + // `lookup_host` reads a `host:port` pair, not a bare name. + let host_port = format!("{domain}:{}", peer_addr.port); + let mut addrs: Vec<_> = tokio::net::lookup_host(host_port) .await? .filter_map(|addr| { if addr.ip().is_unspecified() { @@ -674,3 +676,25 @@ impl Net { }) } } + +#[cfg(test)] +mod test { + use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; + + use crate::{net::resolve_peer_address, types::net::PeerAddress}; + + /// A seed names a host and a port, and the resolver keeps both. + #[tokio::test] + async fn a_seed_name_resolves_with_its_port() -> anyhow::Result<()> { + let peer_addr: PeerAddress = "localhost:4009".parse()?; + let resolved = resolve_peer_address(peer_addr).await?; + assert_eq!(resolved.port(), 4009); + assert!( + resolved + .ip_addrs() + .any(|addr| addr == IpAddr::V4(Ipv4Addr::LOCALHOST) + || addr == IpAddr::V6(Ipv6Addr::LOCALHOST)) + ); + Ok(()) + } +} From f9cfe63867578406282ac427f1febb30a57205d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Olav?= Date: Sun, 6 Sep 2026 07:47:47 +0200 Subject: [PATCH 2/2] net: replace the dead alphanet seeds --- lib/net/mod.rs | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/lib/net/mod.rs b/lib/net/mod.rs index c0e37935..581cd2e3 100644 --- a/lib/net/mod.rs +++ b/lib/net/mod.rs @@ -161,19 +161,10 @@ pub fn make_server_endpoint( pub type PeerInfoRx = mpsc::UnboundedReceiver<(SocketAddr, Option)>; -const ALPHANET_SEED_PEER_ADDRS: &[PeerAddress<&'static str>] = { - // seed.alpha.ecash.drivecha.in - const DRIVECHA_IN: PeerAddress<&'static str> = PeerAddress { - host: url::Host::Ipv4(Ipv4Addr::new(157, 180, 96, 24)), - port: DEFAULT_PORT, - }; - // seed.alpha.ecash.ninja - const ECASH_NINJA: PeerAddress<&'static str> = PeerAddress { - host: url::Host::Domain("seed.alpha.ecash.ninja"), - port: DEFAULT_PORT, - }; - &[DRIVECHA_IN, ECASH_NINJA] -}; +const ALPHANET_SEED_PEER_ADDRS: &[PeerAddress<&'static str>] = &[PeerAddress { + host: url::Host::Domain("seed.alpha.ecash.eu.com"), + port: DEFAULT_PORT, +}]; const SIGNET_SEED_PEER_ADDRS: &[PeerAddress<&'static str>] = { const SIGNET_MINING_SERVER: PeerAddress<&'static str> = PeerAddress {