## Issue Addressed #1378 ## Proposed Changes Boot node reuses code from beacon_node to initialize network config. This also enables using the network directory to store/load the enr and the private key. ## Additional Info Note that before this PR the port cli arguments were off (the argument was named `enr-port` but used as `boot-node-enr-port`). Therefore as port always the cli port argument was used (for both enr and listening). Now the enr-port argument can be used to overwrite the listening port as the public port others should connect to. Last but not least note, that this restructuring reuses `ethlibp2p::NetworkConfig` that has many more options than the ones used in the boot node. For example the network config has an own `discv5_config` field that gets never used in the boot node and instead another `Discv5Config` gets created later in the boot node process. Co-authored-by: Age Manning <Age@AgeManning.com>
61 lines
2.7 KiB
Rust
61 lines
2.7 KiB
Rust
//! Simple logic for spawning a Lighthouse BootNode.
|
|
|
|
use clap::{App, Arg};
|
|
|
|
// TODO: Add DOS prevention CLI params
|
|
pub fn cli_app<'a, 'b>() -> App<'a, 'b> {
|
|
App::new("boot_node")
|
|
.about("Start a special Lighthouse process that only serves as a discv5 boot-node. This \
|
|
process will *not* import blocks or perform most typical beacon node functions. Instead, it \
|
|
will simply run the discv5 service and assist nodes on the network to discover each other. \
|
|
This is the recommended way to provide a network boot-node since it has a reduced attack \
|
|
surface compared to a full beacon node.")
|
|
.settings(&[clap::AppSettings::ColoredHelp])
|
|
.arg(
|
|
Arg::with_name("enr-address")
|
|
.value_name("IP-ADDRESS")
|
|
.help("The external IP address/ DNS address to broadcast to other peers on how to reach this node. \
|
|
If a DNS address is provided, the enr-address is set to the IP address it resolves to and \
|
|
does not auto-update based on PONG responses in discovery.")
|
|
.required(true)
|
|
.takes_value(true),
|
|
)
|
|
.arg(
|
|
Arg::with_name("port")
|
|
.value_name("PORT")
|
|
.help("The UDP port to listen on.")
|
|
.default_value("9000")
|
|
.takes_value(true),
|
|
)
|
|
.arg(
|
|
Arg::with_name("listen-address")
|
|
.long("listen-address")
|
|
.value_name("ADDRESS")
|
|
.help("The address the bootnode will listen for UDP connections.")
|
|
.default_value("0.0.0.0")
|
|
.takes_value(true)
|
|
)
|
|
.arg(
|
|
Arg::with_name("boot-nodes")
|
|
.long("boot-nodes")
|
|
.allow_hyphen_values(true)
|
|
.value_name("ENR-LIST/Multiaddr")
|
|
.help("One or more comma-delimited base64-encoded ENR's or multiaddr strings of peers to initially add to the local routing table")
|
|
.takes_value(true),
|
|
)
|
|
.arg(
|
|
Arg::with_name("enr-udp-port")
|
|
.long("enr-port")
|
|
.value_name("PORT")
|
|
.help("The UDP port of the boot node's ENR. This is the port that external peers will dial to reach this boot node. Set this only if the external port differs from the listening port.")
|
|
.takes_value(true),
|
|
)
|
|
.arg(
|
|
Arg::with_name("enable-enr-auto-update")
|
|
.short("x")
|
|
.long("enable-enr-auto-update")
|
|
.help("Discovery can automatically update the node's local ENR with an external IP address and port as seen by other peers on the network. \
|
|
This enables this feature.")
|
|
)
|
|
}
|