mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 19:09:54 +00:00
feat(discv5): config via cli (#7394)
This commit is contained in:
@ -41,6 +41,9 @@ reth-prune.workspace = true
|
||||
reth-blockchain-tree.workspace = true
|
||||
reth-static-file.workspace = true
|
||||
|
||||
# ethereum
|
||||
discv5.workspace = true
|
||||
|
||||
# async
|
||||
tokio.workspace = true
|
||||
|
||||
|
||||
@ -3,7 +3,10 @@
|
||||
use crate::version::P2P_CLIENT_VERSION;
|
||||
use clap::Args;
|
||||
use reth_config::Config;
|
||||
use reth_discv4::{DEFAULT_DISCOVERY_ADDR, DEFAULT_DISCOVERY_PORT};
|
||||
use reth_discv4::{
|
||||
DEFAULT_DISCOVERY_ADDR, DEFAULT_DISCOVERY_PORT, DEFAULT_DISCOVERY_V5_ADDR,
|
||||
DEFAULT_DISCOVERY_V5_PORT,
|
||||
};
|
||||
use reth_net_nat::NatResolver;
|
||||
use reth_network::{
|
||||
transactions::{
|
||||
@ -211,13 +214,27 @@ pub struct DiscoveryArgs {
|
||||
#[arg(long, conflicts_with = "disable_discovery")]
|
||||
pub disable_discv4_discovery: bool,
|
||||
|
||||
/// The UDP address to use for P2P discovery/networking
|
||||
/// Enable Discv5 discovery.
|
||||
#[arg(long, conflicts_with = "disable_discovery")]
|
||||
pub enable_discv5_discovery: bool,
|
||||
|
||||
/// The UDP address to use for devp2p peer discovery version 4.
|
||||
#[arg(id = "discovery.addr", long = "discovery.addr", value_name = "DISCOVERY_ADDR", default_value_t = DEFAULT_DISCOVERY_ADDR)]
|
||||
pub addr: IpAddr,
|
||||
|
||||
/// The UDP port to use for P2P discovery/networking
|
||||
/// The UDP port to use for devp2p peer discovery version 4.
|
||||
#[arg(id = "discovery.port", long = "discovery.port", value_name = "DISCOVERY_PORT", default_value_t = DEFAULT_DISCOVERY_PORT)]
|
||||
pub port: u16,
|
||||
|
||||
/// The UDP address to use for devp2p peer discovery version 5.
|
||||
#[arg(id = "discovery.v5.addr", long = "discovery.v5.addr", value_name = "DISCOVERY_V5_ADDR",
|
||||
default_value_t = DEFAULT_DISCOVERY_V5_ADDR)]
|
||||
pub discv5_addr: IpAddr,
|
||||
|
||||
/// The UDP port to use for devp2p peer discovery version 5.
|
||||
#[arg(id = "discovery.v5.port", long = "discovery.v5.port", value_name = "DISCOVERY_V5_PORT",
|
||||
default_value_t = DEFAULT_DISCOVERY_V5_PORT)]
|
||||
pub discv5_port: u16,
|
||||
}
|
||||
|
||||
impl DiscoveryArgs {
|
||||
@ -233,6 +250,11 @@ impl DiscoveryArgs {
|
||||
if self.disable_discovery || self.disable_discv4_discovery {
|
||||
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.enable_discv5_discovery();
|
||||
}
|
||||
|
||||
network_config_builder
|
||||
}
|
||||
|
||||
@ -250,8 +272,11 @@ impl Default for DiscoveryArgs {
|
||||
disable_discovery: false,
|
||||
disable_dns_discovery: false,
|
||||
disable_discv4_discovery: false,
|
||||
enable_discv5_discovery: cfg!(feature = "optimism"),
|
||||
addr: DEFAULT_DISCOVERY_ADDR,
|
||||
port: DEFAULT_DISCOVERY_PORT,
|
||||
discv5_addr: DEFAULT_DISCOVERY_V5_ADDR,
|
||||
discv5_port: DEFAULT_DISCOVERY_V5_PORT,
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -315,6 +340,7 @@ mod tests {
|
||||
);
|
||||
}
|
||||
|
||||
#[cfg(not(feature = "optimism"))]
|
||||
#[test]
|
||||
fn network_args_default_sanity_test() {
|
||||
let default_args = NetworkArgs::default();
|
||||
|
||||
@ -2,14 +2,15 @@
|
||||
|
||||
use crate::{
|
||||
args::{
|
||||
get_secret_key, DatabaseArgs, DebugArgs, DevArgs, NetworkArgs, PayloadBuilderArgs,
|
||||
PruningArgs, RpcServerArgs, TxPoolArgs,
|
||||
get_secret_key, DatabaseArgs, DebugArgs, DevArgs, DiscoveryArgs, NetworkArgs,
|
||||
PayloadBuilderArgs, PruningArgs, RpcServerArgs, TxPoolArgs,
|
||||
},
|
||||
cli::config::RethTransactionPoolConfig,
|
||||
dirs::{ChainPath, DataDirPath},
|
||||
metrics::prometheus_exporter,
|
||||
utils::{get_single_header, write_peers_to_file},
|
||||
};
|
||||
use discv5::ListenConfig;
|
||||
use metrics_exporter_prometheus::PrometheusHandle;
|
||||
use once_cell::sync::Lazy;
|
||||
use reth_auto_seal_consensus::{AutoSealConsensus, MiningMode};
|
||||
@ -162,6 +163,7 @@ pub struct NodeConfig {
|
||||
///
|
||||
/// Changes to the following port numbers:
|
||||
/// - DISCOVERY_PORT: default + `instance` - 1
|
||||
/// - DISCOVERY_V5_PORT: default + `instance` - 1
|
||||
/// - AUTH_PORT: default + `instance` * 100 - 100
|
||||
/// - HTTP_RPC_PORT: default - `instance` + 1
|
||||
/// - WS_RPC_PORT: default + `instance` * 2 - 2
|
||||
@ -768,7 +770,25 @@ impl NodeConfig {
|
||||
self.network.discovery.port + self.instance - 1,
|
||||
));
|
||||
|
||||
cfg_builder.build(client)
|
||||
let config = cfg_builder.build(client);
|
||||
|
||||
if !self.network.discovery.enable_discv5_discovery {
|
||||
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| {
|
||||
let DiscoveryArgs { discv5_addr, discv5_port, .. } = self.network.discovery;
|
||||
builder
|
||||
.discv5_config(
|
||||
discv5::ConfigBuilder::new(ListenConfig::from(Into::<SocketAddr>::into((
|
||||
discv5_addr,
|
||||
discv5_port + self.instance - 1,
|
||||
))))
|
||||
.build(),
|
||||
)
|
||||
.build()
|
||||
})
|
||||
}
|
||||
|
||||
/// Builds the [Pipeline] with the given [ProviderFactory] and downloaders.
|
||||
|
||||
Reference in New Issue
Block a user