diff --git a/bin/reth/src/commands/p2p/mod.rs b/bin/reth/src/commands/p2p/mod.rs index 8764d4486..64233d6e5 100644 --- a/bin/reth/src/commands/p2p/mod.rs +++ b/bin/reth/src/commands/p2p/mod.rs @@ -113,61 +113,63 @@ impl Command { let rlpx_socket = (self.network.addr, self.network.port).into(); let boot_nodes = self.chain.bootnodes().unwrap_or_default(); - let mut network_config_builder = NetworkConfigBuilder::new(p2p_secret_key) + let network = NetworkConfigBuilder::new(p2p_secret_key) .peer_config(config.peers_config_with_basic_nodes_from_file(None)) .external_ip_resolver(self.network.nat) .chain_spec(self.chain.clone()) .disable_discv4_discovery_if(self.chain.chain.is_optimism()) - .boot_nodes(boot_nodes.clone()); + .boot_nodes(boot_nodes.clone()) + .apply(|builder| { + self.network + .discovery + .apply_to_builder(builder, rlpx_socket) + .map_discv5_config_builder(|builder| { + let DiscoveryArgs { + discv5_addr, + discv5_addr_ipv6, + discv5_port, + discv5_port_ipv6, + discv5_lookup_interval, + discv5_bootstrap_lookup_interval, + discv5_bootstrap_lookup_countdown, + .. + } = self.network.discovery; - network_config_builder = self - .network - .discovery - .apply_to_builder(network_config_builder, rlpx_socket) - .map_discv5_config_builder(|builder| { - let DiscoveryArgs { - discv5_addr, - discv5_addr_ipv6, - discv5_port, - discv5_port_ipv6, - discv5_lookup_interval, - discv5_bootstrap_lookup_interval, - discv5_bootstrap_lookup_countdown, - .. - } = self.network.discovery; + // Use rlpx address if none given + let discv5_addr_ipv4 = discv5_addr.or(match self.network.addr { + IpAddr::V4(ip) => Some(ip), + IpAddr::V6(_) => None, + }); + let discv5_addr_ipv6 = discv5_addr_ipv6.or(match self.network.addr { + IpAddr::V4(_) => None, + IpAddr::V6(ip) => Some(ip), + }); - // Use rlpx address if none given - let discv5_addr_ipv4 = discv5_addr.or(match self.network.addr { - IpAddr::V4(ip) => Some(ip), - IpAddr::V6(_) => None, - }); - let discv5_addr_ipv6 = discv5_addr_ipv6.or(match self.network.addr { - IpAddr::V4(_) => None, - IpAddr::V6(ip) => Some(ip), - }); + builder + .discv5_config( + discv5::ConfigBuilder::new(ListenConfig::from_two_sockets( + discv5_addr_ipv4 + .map(|addr| SocketAddrV4::new(addr, discv5_port)), + discv5_addr_ipv6.map(|addr| { + SocketAddrV6::new(addr, discv5_port_ipv6, 0, 0) + }), + )) + .build(), + ) + .add_unsigned_boot_nodes(boot_nodes.into_iter()) + .lookup_interval(discv5_lookup_interval) + .bootstrap_lookup_interval(discv5_bootstrap_lookup_interval) + .bootstrap_lookup_countdown(discv5_bootstrap_lookup_countdown) + }) + }) + .build(Arc::new(ProviderFactory::new( + noop_db, + self.chain.clone(), + data_dir.static_files(), + )?)) + .start_network() + .await?; - builder - .discv5_config( - discv5::ConfigBuilder::new(ListenConfig::from_two_sockets( - discv5_addr_ipv4.map(|addr| SocketAddrV4::new(addr, discv5_port)), - discv5_addr_ipv6 - .map(|addr| SocketAddrV6::new(addr, discv5_port_ipv6, 0, 0)), - )) - .build(), - ) - .add_unsigned_boot_nodes(boot_nodes.into_iter()) - .lookup_interval(discv5_lookup_interval) - .bootstrap_lookup_interval(discv5_bootstrap_lookup_interval) - .bootstrap_lookup_countdown(discv5_bootstrap_lookup_countdown) - }); - - let network_config = network_config_builder.build(Arc::new(ProviderFactory::new( - noop_db, - self.chain.clone(), - data_dir.static_files(), - )?)); - - let network = network_config.start_network().await?; let fetch_client = network.fetch_client().await?; let retries = self.retries.max(1); let backoff = ConstantBuilder::default().with_max_times(retries);