From f20e4cbad8ae82aed527ecd809b1e9a553f46e6a Mon Sep 17 00:00:00 2001 From: Emilia Hane Date: Fri, 3 May 2024 14:38:26 +0200 Subject: [PATCH] debt(discv5): discv5 integration into network (#8065) --- bin/reth/src/commands/p2p/mod.rs | 6 +++++- crates/net/discv4/src/lib.rs | 10 ---------- crates/net/discv5/src/config.rs | 12 +++++++++++- crates/net/discv5/src/lib.rs | 5 +++-- crates/net/network/src/config.rs | 16 ---------------- crates/node-core/src/args/network.rs | 14 +++----------- crates/node-core/src/node_config.rs | 7 ++++++- 7 files changed, 28 insertions(+), 42 deletions(-) diff --git a/bin/reth/src/commands/p2p/mod.rs b/bin/reth/src/commands/p2p/mod.rs index 1cc5d4f88..18cc6aba8 100644 --- a/bin/reth/src/commands/p2p/mod.rs +++ b/bin/reth/src/commands/p2p/mod.rs @@ -126,6 +126,7 @@ impl Command { let mut network_config_builder = config .network_config(self.nat, None, p2p_secret_key) .chain_spec(self.chain.clone()) + .disable_discv4_discovery_if(self.chain.chain.is_optimism()) .boot_nodes(self.chain.bootnodes().unwrap_or_default()); network_config_builder = self.discovery.apply_to_builder(network_config_builder); @@ -136,7 +137,10 @@ impl Command { data_dir.static_files(), )?)); - if self.discovery.enable_discv5_discovery { + if !self.discovery.disable_discovery && + (self.discovery.enable_discv5_discovery || + network_config.chain_spec.chain.is_optimism()) + { network_config = network_config.discovery_v5_with_config_builder(|builder| { let DiscoveryArgs { discv5_addr, diff --git a/crates/net/discv4/src/lib.rs b/crates/net/discv4/src/lib.rs index 9a0cb9c11..77cc309eb 100644 --- a/crates/net/discv4/src/lib.rs +++ b/crates/net/discv4/src/lib.rs @@ -94,16 +94,6 @@ pub const DEFAULT_DISCOVERY_ADDR: IpAddr = IpAddr::V4(Ipv4Addr::UNSPECIFIED); /// Note: the default TCP port is the same. pub const DEFAULT_DISCOVERY_PORT: u16 = 30303; -/// The default address for discv5 via UDP. -/// -/// Note: the default TCP address is the same. -pub const DEFAULT_DISCOVERY_V5_ADDR: IpAddr = IpAddr::V4(Ipv4Addr::UNSPECIFIED); - -/// The default port for discv5 via UDP. -/// -/// Default is port 9000. -pub const DEFAULT_DISCOVERY_V5_PORT: u16 = 9000; - /// The default address for discv4 via UDP: "0.0.0.0:30303" /// /// Note: The default TCP address is the same. diff --git a/crates/net/discv5/src/config.rs b/crates/net/discv5/src/config.rs index 05c2863c8..da7e58cb7 100644 --- a/crates/net/discv5/src/config.rs +++ b/crates/net/discv5/src/config.rs @@ -3,7 +3,7 @@ use std::{ collections::HashSet, fmt::Debug, - net::{IpAddr, SocketAddr}, + net::{IpAddr, Ipv4Addr, SocketAddr}, }; use derive_more::Display; @@ -13,6 +13,16 @@ use reth_primitives::{Bytes, EnrForkIdEntry, ForkId, NodeRecord}; use crate::{enr::discv4_id_to_multiaddr_id, filter::MustNotIncludeKeys, NetworkStackId}; +/// The default address for discv5 via UDP. +/// +/// Default is 0.0.0.0, all interfaces. See [`discv5::ListenConfig`] default. +pub const DEFAULT_DISCOVERY_V5_ADDR: IpAddr = IpAddr::V4(Ipv4Addr::UNSPECIFIED); + +/// The default port for discv5 via UDP. +/// +/// Default is port 9000. See [`discv5::ListenConfig`] default. +pub const DEFAULT_DISCOVERY_V5_PORT: u16 = 9000; + /// Default interval in seconds at which to run a lookup up query. /// /// Default is 60 seconds. diff --git a/crates/net/discv5/src/lib.rs b/crates/net/discv5/src/lib.rs index e9bc79dce..a5ac1d808 100644 --- a/crates/net/discv5/src/lib.rs +++ b/crates/net/discv5/src/lib.rs @@ -38,8 +38,9 @@ pub mod network_stack_id; pub use discv5::{self, IpMode}; pub use config::{ - BootNode, Config, ConfigBuilder, DEFAULT_COUNT_BOOTSTRAP_LOOKUPS, - DEFAULT_SECONDS_BOOTSTRAP_LOOKUP_INTERVAL, DEFAULT_SECONDS_LOOKUP_INTERVAL, + BootNode, Config, ConfigBuilder, DEFAULT_COUNT_BOOTSTRAP_LOOKUPS, DEFAULT_DISCOVERY_V5_ADDR, + DEFAULT_DISCOVERY_V5_PORT, DEFAULT_SECONDS_BOOTSTRAP_LOOKUP_INTERVAL, + DEFAULT_SECONDS_LOOKUP_INTERVAL, }; pub use enr::enr_to_discv4_id; pub use error::Error; diff --git a/crates/net/network/src/config.rs b/crates/net/network/src/config.rs index 9e898014f..40d88f991 100644 --- a/crates/net/network/src/config.rs +++ b/crates/net/network/src/config.rs @@ -176,8 +176,6 @@ pub struct NetworkConfigBuilder { dns_discovery_config: Option, /// How to set up discovery version 4. discovery_v4_builder: Option, - /// Whether to enable discovery version 5. Disabled by default. - enable_discovery_v5: bool, /// All boot nodes to start network discovery with. boot_nodes: HashSet, /// Address to use for discovery @@ -220,7 +218,6 @@ impl NetworkConfigBuilder { secret_key, dns_discovery_config: Some(Default::default()), discovery_v4_builder: Some(Default::default()), - enable_discovery_v5: false, boot_nodes: Default::default(), discovery_addr: None, listener_addr: None, @@ -353,12 +350,6 @@ impl NetworkConfigBuilder { self } - /// Allows discv5 discovery. - pub fn discovery_v5(mut self) -> Self { - self.enable_discovery_v5 = true; - self - } - /// Sets the dns discovery config to use. pub fn dns_discovery(mut self, config: DnsDiscoveryConfig) -> Self { self.dns_discovery_config = Some(config); @@ -407,12 +398,6 @@ impl NetworkConfigBuilder { self } - /// Enable the Discv5 discovery. - pub fn enable_discv5_discovery(mut self) -> Self { - self.enable_discovery_v5 = true; - self - } - /// Disable the DNS discovery if the given condition is true. pub fn disable_dns_discovery_if(self, disable: bool) -> Self { if disable { @@ -469,7 +454,6 @@ impl NetworkConfigBuilder { secret_key, mut dns_discovery_config, discovery_v4_builder, - enable_discovery_v5: _, boot_nodes, discovery_addr, listener_addr, diff --git a/crates/node-core/src/args/network.rs b/crates/node-core/src/args/network.rs index df6f8ece8..0d5206e7f 100644 --- a/crates/node-core/src/args/network.rs +++ b/crates/node-core/src/args/network.rs @@ -3,13 +3,10 @@ use crate::version::P2P_CLIENT_VERSION; use clap::Args; use reth_config::Config; -use reth_discv4::{ - DEFAULT_DISCOVERY_ADDR, DEFAULT_DISCOVERY_PORT, DEFAULT_DISCOVERY_V5_ADDR, - DEFAULT_DISCOVERY_V5_PORT, -}; +use reth_discv4::{DEFAULT_DISCOVERY_ADDR, DEFAULT_DISCOVERY_PORT}; use reth_discv5::{ - DEFAULT_COUNT_BOOTSTRAP_LOOKUPS, DEFAULT_SECONDS_BOOTSTRAP_LOOKUP_INTERVAL, - DEFAULT_SECONDS_LOOKUP_INTERVAL, + DEFAULT_COUNT_BOOTSTRAP_LOOKUPS, DEFAULT_DISCOVERY_V5_ADDR, DEFAULT_DISCOVERY_V5_PORT, + DEFAULT_SECONDS_BOOTSTRAP_LOOKUP_INTERVAL, DEFAULT_SECONDS_LOOKUP_INTERVAL, }; use reth_net_nat::NatResolver; use reth_network::{ @@ -272,11 +269,6 @@ impl DiscoveryArgs { network_config_builder = network_config_builder.disable_discv4_discovery(); } - if !self.disable_discovery && (self.enable_discv5_discovery || cfg!(feature = "optimism")) { - network_config_builder = network_config_builder.disable_discv4_discovery(); - network_config_builder = network_config_builder.enable_discv5_discovery(); - } - network_config_builder } diff --git a/crates/node-core/src/node_config.rs b/crates/node-core/src/node_config.rs index 3f149a824..a4301b804 100644 --- a/crates/node-core/src/node_config.rs +++ b/crates/node-core/src/node_config.rs @@ -462,6 +462,7 @@ impl NodeConfig { // set discovery port based on instance number self.network.port + self.instance - 1, )) + .disable_discv4_discovery_if(self.chain.chain.is_optimism()) .discovery_addr(SocketAddr::new( self.network.discovery.addr, // set discovery port based on instance number @@ -470,9 +471,13 @@ impl NodeConfig { let config = cfg_builder.build(client); - if !self.network.discovery.enable_discv5_discovery { + if self.network.discovery.disable_discovery || + !self.network.discovery.enable_discv5_discovery && + !config.chain_spec.chain.is_optimism() + { return config } + // work around since discv5 config builder can't be integrated into network config builder // due to unsatisfied trait bounds config.discovery_v5_with_config_builder(|builder| {