mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
Add an ability to change P2P listening address (#4849)
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
@ -3,11 +3,12 @@
|
||||
use crate::version::P2P_CLIENT_VERSION;
|
||||
use clap::Args;
|
||||
use reth_config::Config;
|
||||
use reth_discv4::{DEFAULT_DISCOVERY_ADDR, DEFAULT_DISCOVERY_PORT};
|
||||
use reth_net_nat::NatResolver;
|
||||
use reth_network::{HelloMessage, NetworkConfigBuilder};
|
||||
use reth_primitives::{mainnet_nodes, ChainSpec, NodeRecord};
|
||||
use secp256k1::SecretKey;
|
||||
use std::{path::PathBuf, sync::Arc};
|
||||
use std::{net::Ipv4Addr, path::PathBuf, sync::Arc};
|
||||
|
||||
/// Parameters for configuring the network more granularity via CLI
|
||||
#[derive(Debug, Args)]
|
||||
@ -57,9 +58,13 @@ pub struct NetworkArgs {
|
||||
#[arg(long, default_value = "any")]
|
||||
pub nat: NatResolver,
|
||||
|
||||
/// Network listening port. default: 30303
|
||||
#[arg(long = "port", value_name = "PORT")]
|
||||
pub port: Option<u16>,
|
||||
/// Network listening address
|
||||
#[arg(long = "addr", value_name = "ADDR", default_value_t = DEFAULT_DISCOVERY_ADDR)]
|
||||
pub addr: Ipv4Addr,
|
||||
|
||||
/// Network listening port
|
||||
#[arg(long = "port", value_name = "PORT", default_value_t = DEFAULT_DISCOVERY_PORT)]
|
||||
pub port: u16,
|
||||
|
||||
/// Maximum number of outbound requests. default: 100
|
||||
#[arg(long)]
|
||||
@ -133,9 +138,13 @@ pub struct DiscoveryArgs {
|
||||
#[arg(long, conflicts_with = "disable_discovery")]
|
||||
pub disable_discv4_discovery: bool,
|
||||
|
||||
/// The UDP port to use for P2P discovery/networking. default: 30303
|
||||
#[arg(long = "discovery.port", name = "discovery.port", value_name = "DISCOVERY_PORT")]
|
||||
pub port: Option<u16>,
|
||||
/// The UDP address to use for P2P discovery/networking
|
||||
#[arg(long = "discovery.addr", name = "discovery.addr", value_name = "DISCOVERY_ADDR", default_value_t = DEFAULT_DISCOVERY_ADDR)]
|
||||
pub addr: Ipv4Addr,
|
||||
|
||||
/// The UDP port to use for P2P discovery/networking
|
||||
#[arg(long = "discovery.port", name = "discovery.port", value_name = "DISCOVERY_PORT", default_value_t = DEFAULT_DISCOVERY_PORT)]
|
||||
pub port: u16,
|
||||
}
|
||||
|
||||
impl DiscoveryArgs {
|
||||
|
||||
@ -12,7 +12,6 @@ use futures::{stream::select as stream_select, StreamExt};
|
||||
use reth_beacon_consensus::BeaconConsensus;
|
||||
use reth_config::Config;
|
||||
use reth_db::{database::Database, init_db, DatabaseEnv};
|
||||
use reth_discv4::DEFAULT_DISCOVERY_PORT;
|
||||
use reth_downloaders::{
|
||||
bodies::bodies::BodiesDownloaderBuilder,
|
||||
headers::reverse_headers::ReverseHeadersDownloaderBuilder,
|
||||
@ -35,7 +34,7 @@ use reth_stages::{
|
||||
};
|
||||
use reth_tasks::TaskExecutor;
|
||||
use std::{
|
||||
net::{Ipv4Addr, SocketAddr, SocketAddrV4},
|
||||
net::{SocketAddr, SocketAddrV4},
|
||||
path::PathBuf,
|
||||
sync::Arc,
|
||||
};
|
||||
@ -167,13 +166,10 @@ impl Command {
|
||||
.network
|
||||
.network_config(config, self.chain.clone(), secret_key, default_peers_path)
|
||||
.with_task_executor(Box::new(task_executor))
|
||||
.listener_addr(SocketAddr::V4(SocketAddrV4::new(
|
||||
Ipv4Addr::UNSPECIFIED,
|
||||
self.network.port.unwrap_or(DEFAULT_DISCOVERY_PORT),
|
||||
)))
|
||||
.listener_addr(SocketAddr::V4(SocketAddrV4::new(self.network.addr, self.network.port)))
|
||||
.discovery_addr(SocketAddr::V4(SocketAddrV4::new(
|
||||
Ipv4Addr::UNSPECIFIED,
|
||||
self.network.discovery.port.unwrap_or(DEFAULT_DISCOVERY_PORT),
|
||||
self.network.discovery.addr,
|
||||
self.network.discovery.port,
|
||||
)))
|
||||
.build(ProviderFactory::new(db, self.chain.clone()))
|
||||
.start_network()
|
||||
|
||||
@ -9,7 +9,6 @@ use backon::{ConstantBuilder, Retryable};
|
||||
use clap::Parser;
|
||||
use reth_config::Config;
|
||||
use reth_db::{init_db, DatabaseEnv};
|
||||
use reth_discv4::DEFAULT_DISCOVERY_PORT;
|
||||
use reth_network::NetworkHandle;
|
||||
use reth_network_api::NetworkInfo;
|
||||
use reth_primitives::{fs, stage::StageId, BlockHashOrNumber, ChainSpec};
|
||||
@ -21,7 +20,7 @@ use reth_provider::{
|
||||
use reth_tasks::TaskExecutor;
|
||||
use reth_trie::{hashed_cursor::HashedPostStateCursorFactory, updates::TrieKey, StateRoot};
|
||||
use std::{
|
||||
net::{Ipv4Addr, SocketAddr, SocketAddrV4},
|
||||
net::{SocketAddr, SocketAddrV4},
|
||||
path::PathBuf,
|
||||
sync::Arc,
|
||||
};
|
||||
@ -90,13 +89,10 @@ impl Command {
|
||||
.network
|
||||
.network_config(config, self.chain.clone(), secret_key, default_peers_path)
|
||||
.with_task_executor(Box::new(task_executor))
|
||||
.listener_addr(SocketAddr::V4(SocketAddrV4::new(
|
||||
Ipv4Addr::UNSPECIFIED,
|
||||
self.network.port.unwrap_or(DEFAULT_DISCOVERY_PORT),
|
||||
)))
|
||||
.listener_addr(SocketAddr::V4(SocketAddrV4::new(self.network.addr, self.network.port)))
|
||||
.discovery_addr(SocketAddr::V4(SocketAddrV4::new(
|
||||
Ipv4Addr::UNSPECIFIED,
|
||||
self.network.discovery.port.unwrap_or(DEFAULT_DISCOVERY_PORT),
|
||||
self.network.discovery.addr,
|
||||
self.network.discovery.port,
|
||||
)))
|
||||
.build(ProviderFactory::new(db, self.chain.clone()))
|
||||
.start_network()
|
||||
|
||||
@ -10,7 +10,6 @@ use clap::Parser;
|
||||
use reth_beacon_consensus::BeaconConsensus;
|
||||
use reth_config::Config;
|
||||
use reth_db::{cursor::DbCursorRO, init_db, tables, transaction::DbTx, DatabaseEnv};
|
||||
use reth_discv4::DEFAULT_DISCOVERY_PORT;
|
||||
use reth_interfaces::{consensus::Consensus, p2p::full_block::FullBlockClient};
|
||||
use reth_network::NetworkHandle;
|
||||
use reth_network_api::NetworkInfo;
|
||||
@ -29,7 +28,7 @@ use reth_stages::{
|
||||
};
|
||||
use reth_tasks::TaskExecutor;
|
||||
use std::{
|
||||
net::{Ipv4Addr, SocketAddr, SocketAddrV4},
|
||||
net::{SocketAddr, SocketAddrV4},
|
||||
path::PathBuf,
|
||||
sync::Arc,
|
||||
};
|
||||
@ -99,13 +98,10 @@ impl Command {
|
||||
.network
|
||||
.network_config(config, self.chain.clone(), secret_key, default_peers_path)
|
||||
.with_task_executor(Box::new(task_executor))
|
||||
.listener_addr(SocketAddr::V4(SocketAddrV4::new(
|
||||
Ipv4Addr::UNSPECIFIED,
|
||||
self.network.port.unwrap_or(DEFAULT_DISCOVERY_PORT),
|
||||
)))
|
||||
.listener_addr(SocketAddr::V4(SocketAddrV4::new(self.network.addr, self.network.port)))
|
||||
.discovery_addr(SocketAddr::V4(SocketAddrV4::new(
|
||||
Ipv4Addr::UNSPECIFIED,
|
||||
self.network.discovery.port.unwrap_or(DEFAULT_DISCOVERY_PORT),
|
||||
self.network.discovery.addr,
|
||||
self.network.discovery.port,
|
||||
)))
|
||||
.build(ProviderFactory::new(db, self.chain.clone()))
|
||||
.start_network()
|
||||
|
||||
@ -34,7 +34,6 @@ use reth_blockchain_tree::{
|
||||
};
|
||||
use reth_config::{config::PruneConfig, Config};
|
||||
use reth_db::{database::Database, init_db, DatabaseEnv};
|
||||
use reth_discv4::DEFAULT_DISCOVERY_PORT;
|
||||
use reth_downloaders::{
|
||||
bodies::bodies::BodiesDownloaderBuilder,
|
||||
headers::reverse_headers::ReverseHeadersDownloaderBuilder,
|
||||
@ -78,7 +77,7 @@ use reth_transaction_pool::{
|
||||
};
|
||||
use secp256k1::SecretKey;
|
||||
use std::{
|
||||
net::{Ipv4Addr, SocketAddr, SocketAddrV4},
|
||||
net::{SocketAddr, SocketAddrV4},
|
||||
path::PathBuf,
|
||||
sync::Arc,
|
||||
};
|
||||
@ -777,20 +776,14 @@ impl<Ext: RethCliExt> NodeCommand<Ext> {
|
||||
.with_task_executor(Box::new(executor))
|
||||
.set_head(head)
|
||||
.listener_addr(SocketAddr::V4(SocketAddrV4::new(
|
||||
Ipv4Addr::UNSPECIFIED,
|
||||
self.network.addr,
|
||||
// set discovery port based on instance number
|
||||
match self.network.port {
|
||||
Some(port) => port + self.instance - 1,
|
||||
None => DEFAULT_DISCOVERY_PORT + self.instance - 1,
|
||||
},
|
||||
self.network.port + self.instance - 1,
|
||||
)))
|
||||
.discovery_addr(SocketAddr::V4(SocketAddrV4::new(
|
||||
Ipv4Addr::UNSPECIFIED,
|
||||
self.network.addr,
|
||||
// set discovery port based on instance number
|
||||
match self.network.port {
|
||||
Some(port) => port + self.instance - 1,
|
||||
None => DEFAULT_DISCOVERY_PORT + self.instance - 1,
|
||||
},
|
||||
self.network.port + self.instance - 1,
|
||||
)))
|
||||
.build(ProviderFactory::new(db, self.chain.clone()))
|
||||
}
|
||||
@ -954,8 +947,12 @@ async fn run_network_until_shutdown<C>(
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use reth_discv4::DEFAULT_DISCOVERY_PORT;
|
||||
use reth_primitives::DEV;
|
||||
use std::{net::IpAddr, path::Path};
|
||||
use std::{
|
||||
net::{IpAddr, Ipv4Addr},
|
||||
path::Path,
|
||||
};
|
||||
|
||||
#[test]
|
||||
fn parse_help_node_command() {
|
||||
@ -971,10 +968,31 @@ mod tests {
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_discovery_addr() {
|
||||
let cmd =
|
||||
NodeCommand::<()>::try_parse_from(["reth", "--discovery.addr", "127.0.0.1"]).unwrap();
|
||||
assert_eq!(cmd.network.discovery.addr, Ipv4Addr::LOCALHOST);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_addr() {
|
||||
let cmd = NodeCommand::<()>::try_parse_from([
|
||||
"reth",
|
||||
"--discovery.addr",
|
||||
"127.0.0.1",
|
||||
"--addr",
|
||||
"127.0.0.1",
|
||||
])
|
||||
.unwrap();
|
||||
assert_eq!(cmd.network.discovery.addr, Ipv4Addr::LOCALHOST);
|
||||
assert_eq!(cmd.network.addr, Ipv4Addr::LOCALHOST);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_discovery_port() {
|
||||
let cmd = NodeCommand::<()>::try_parse_from(["reth", "--discovery.port", "300"]).unwrap();
|
||||
assert_eq!(cmd.network.discovery.port, Some(300));
|
||||
assert_eq!(cmd.network.discovery.port, 300);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -982,8 +1000,8 @@ mod tests {
|
||||
let cmd =
|
||||
NodeCommand::<()>::try_parse_from(["reth", "--discovery.port", "300", "--port", "99"])
|
||||
.unwrap();
|
||||
assert_eq!(cmd.network.discovery.port, Some(300));
|
||||
assert_eq!(cmd.network.port, Some(99));
|
||||
assert_eq!(cmd.network.discovery.port, 300);
|
||||
assert_eq!(cmd.network.port, 99);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -1052,32 +1070,32 @@ mod tests {
|
||||
fn parse_instance() {
|
||||
let mut cmd = NodeCommand::<()>::parse_from(["reth"]);
|
||||
cmd.adjust_instance_ports();
|
||||
cmd.network.port = Some(DEFAULT_DISCOVERY_PORT + cmd.instance - 1);
|
||||
cmd.network.port = DEFAULT_DISCOVERY_PORT + cmd.instance - 1;
|
||||
// check rpc port numbers
|
||||
assert_eq!(cmd.rpc.auth_port, 8551);
|
||||
assert_eq!(cmd.rpc.http_port, 8545);
|
||||
assert_eq!(cmd.rpc.ws_port, 8546);
|
||||
// check network listening port number
|
||||
assert_eq!(cmd.network.port.unwrap(), 30303);
|
||||
assert_eq!(cmd.network.port, 30303);
|
||||
|
||||
let mut cmd = NodeCommand::<()>::parse_from(["reth", "--instance", "2"]);
|
||||
cmd.adjust_instance_ports();
|
||||
cmd.network.port = Some(DEFAULT_DISCOVERY_PORT + cmd.instance - 1);
|
||||
cmd.network.port = DEFAULT_DISCOVERY_PORT + cmd.instance - 1;
|
||||
// check rpc port numbers
|
||||
assert_eq!(cmd.rpc.auth_port, 8651);
|
||||
assert_eq!(cmd.rpc.http_port, 8544);
|
||||
assert_eq!(cmd.rpc.ws_port, 8548);
|
||||
// check network listening port number
|
||||
assert_eq!(cmd.network.port.unwrap(), 30304);
|
||||
assert_eq!(cmd.network.port, 30304);
|
||||
|
||||
let mut cmd = NodeCommand::<()>::parse_from(["reth", "--instance", "3"]);
|
||||
cmd.adjust_instance_ports();
|
||||
cmd.network.port = Some(DEFAULT_DISCOVERY_PORT + cmd.instance - 1);
|
||||
cmd.network.port = DEFAULT_DISCOVERY_PORT + cmd.instance - 1;
|
||||
// check rpc port numbers
|
||||
assert_eq!(cmd.rpc.auth_port, 8751);
|
||||
assert_eq!(cmd.rpc.http_port, 8543);
|
||||
assert_eq!(cmd.rpc.ws_port, 8550);
|
||||
// check network listening port number
|
||||
assert_eq!(cmd.network.port.unwrap(), 30305);
|
||||
assert_eq!(cmd.network.port, 30305);
|
||||
}
|
||||
}
|
||||
|
||||
@ -88,6 +88,11 @@ use reth_net_nat::ResolveNatInterval;
|
||||
/// reexport to get public ip.
|
||||
pub use reth_net_nat::{external_ip, NatResolver};
|
||||
|
||||
/// The default address for discv4 via UDP
|
||||
///
|
||||
/// Note: the default TCP address is the same.
|
||||
pub const DEFAULT_DISCOVERY_ADDR: Ipv4Addr = Ipv4Addr::UNSPECIFIED;
|
||||
|
||||
/// The default port for discv4 via UDP
|
||||
///
|
||||
/// Note: the default TCP port is the same.
|
||||
|
||||
Reference in New Issue
Block a user