Update CLI defaults and book (#999)
This commit is contained in:
parent
bf361e5ca3
commit
db7847c34a
@ -119,15 +119,16 @@ impl Default for Config {
|
|||||||
.ping_interval(Duration::from_secs(300))
|
.ping_interval(Duration::from_secs(300))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
// NOTE: Some of these get overridden by the corresponding CLI default values.
|
||||||
Config {
|
Config {
|
||||||
network_dir,
|
network_dir,
|
||||||
listen_address: "127.0.0.1".parse().expect("valid ip address"),
|
listen_address: "0.0.0.0".parse().expect("valid ip address"),
|
||||||
libp2p_port: 9000,
|
libp2p_port: 9000,
|
||||||
discovery_port: 9000,
|
discovery_port: 9000,
|
||||||
enr_address: None,
|
enr_address: None,
|
||||||
enr_udp_port: None,
|
enr_udp_port: None,
|
||||||
enr_tcp_port: None,
|
enr_tcp_port: None,
|
||||||
max_peers: 10,
|
max_peers: 50,
|
||||||
secret_key_hex: None,
|
secret_key_hex: None,
|
||||||
gs_config,
|
gs_config,
|
||||||
discv5_config,
|
discv5_config,
|
||||||
|
@ -80,6 +80,7 @@ impl<TSpec: EthSpec> Service<TSpec> {
|
|||||||
));
|
));
|
||||||
|
|
||||||
info!(log, "Libp2p Service"; "peer_id" => format!("{:?}", enr.peer_id()));
|
info!(log, "Libp2p Service"; "peer_id" => format!("{:?}", enr.peer_id()));
|
||||||
|
debug!(log, "Attempting to open listening ports"; "address" => format!("{}", config.listen_address), "tcp_port" => config.libp2p_port, "udp_port" => config.discovery_port);
|
||||||
|
|
||||||
let mut swarm = {
|
let mut swarm = {
|
||||||
// Set up the transport - tcp/ws with noise/secio and mplex/yamux
|
// Set up the transport - tcp/ws with noise/secio and mplex/yamux
|
||||||
|
@ -57,15 +57,14 @@ pub fn cli_app<'a, 'b>() -> App<'a, 'b> {
|
|||||||
Arg::with_name("discovery-port")
|
Arg::with_name("discovery-port")
|
||||||
.long("discovery-port")
|
.long("discovery-port")
|
||||||
.value_name("PORT")
|
.value_name("PORT")
|
||||||
.help("The UDP port that discovery will listen on.")
|
.help("The UDP port that discovery will listen on. Defaults to `port`")
|
||||||
.default_value("9000")
|
|
||||||
.takes_value(true),
|
.takes_value(true),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
Arg::with_name("maxpeers")
|
Arg::with_name("maxpeers")
|
||||||
.long("maxpeers")
|
.long("maxpeers")
|
||||||
.help("The maximum number of peers.")
|
.help("The maximum number of peers.")
|
||||||
.default_value("10")
|
.default_value("50")
|
||||||
.takes_value(true),
|
.takes_value(true),
|
||||||
)
|
)
|
||||||
.arg(
|
.arg(
|
||||||
|
@ -2,7 +2,7 @@ use clap::ArgMatches;
|
|||||||
use client::{config::DEFAULT_DATADIR, ClientConfig, ClientGenesis};
|
use client::{config::DEFAULT_DATADIR, ClientConfig, ClientGenesis};
|
||||||
use eth2_libp2p::{Enr, Multiaddr};
|
use eth2_libp2p::{Enr, Multiaddr};
|
||||||
use eth2_testnet_config::Eth2TestnetConfig;
|
use eth2_testnet_config::Eth2TestnetConfig;
|
||||||
use slog::{crit, warn, Logger};
|
use slog::{crit, info, Logger};
|
||||||
use ssz::Encode;
|
use ssz::Encode;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
@ -37,6 +37,12 @@ pub fn get_config<E: EthSpec>(
|
|||||||
fs::create_dir_all(&client_config.data_dir)
|
fs::create_dir_all(&client_config.data_dir)
|
||||||
.map_err(|e| format!("Failed to create data dir: {}", e))?;
|
.map_err(|e| format!("Failed to create data dir: {}", e))?;
|
||||||
|
|
||||||
|
// logs the chosen data directory
|
||||||
|
let mut log_dir = client_config.data_dir.clone();
|
||||||
|
// remove /beacon from the end
|
||||||
|
log_dir.pop();
|
||||||
|
info!(log, "Data directory initialised"; "datadir" => format!("{}",log_dir.into_os_string().into_string().expect("Datadir should be a valid os string")));
|
||||||
|
|
||||||
// Load the client config, if it exists .
|
// Load the client config, if it exists .
|
||||||
let config_file_path = client_config.data_dir.join(CLIENT_CONFIG_FILENAME);
|
let config_file_path = client_config.data_dir.join(CLIENT_CONFIG_FILENAME);
|
||||||
let config_file_existed = config_file_path.exists();
|
let config_file_existed = config_file_path.exists();
|
||||||
@ -79,6 +85,7 @@ pub fn get_config<E: EthSpec>(
|
|||||||
.map_err(|_| format!("Invalid port: {}", port_str))?;
|
.map_err(|_| format!("Invalid port: {}", port_str))?;
|
||||||
client_config.network.libp2p_port = port;
|
client_config.network.libp2p_port = port;
|
||||||
client_config.network.discovery_port = port;
|
client_config.network.discovery_port = port;
|
||||||
|
dbg!(&client_config.network.discovery_port);
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(port_str) = cli_args.value_of("discovery-port") {
|
if let Some(port_str) = cli_args.value_of("discovery-port") {
|
||||||
@ -131,7 +138,15 @@ pub fn get_config<E: EthSpec>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if cli_args.is_present("enr-match") {
|
if cli_args.is_present("enr-match") {
|
||||||
client_config.network.enr_address = Some(client_config.network.listen_address);
|
// set the enr address to localhost if the address is 0.0.0.0
|
||||||
|
if client_config.network.listen_address
|
||||||
|
== "0.0.0.0".parse::<IpAddr>().expect("valid ip addr")
|
||||||
|
{
|
||||||
|
client_config.network.enr_address =
|
||||||
|
Some("127.0.0.1".parse::<IpAddr>().expect("valid ip addr"));
|
||||||
|
} else {
|
||||||
|
client_config.network.enr_address = Some(client_config.network.listen_address);
|
||||||
|
}
|
||||||
client_config.network.enr_udp_port = Some(client_config.network.discovery_port);
|
client_config.network.enr_udp_port = Some(client_config.network.discovery_port);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,8 +19,8 @@ TL;DR isn't adequate.
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
lcli new-testnet
|
lcli new-testnet
|
||||||
lcli interop-genesis
|
lcli interop-genesis 128
|
||||||
lighthouse bn --testnet-dir ~/.lighthouse/testnet --dummy-eth1 --http
|
lighthouse bn --testnet-dir ~/.lighthouse/testnet --dummy-eth1 --http --enr-match
|
||||||
lighthouse vc --testnet-dir ~/.lighthouse/testnet --allow-unsynced testnet insecure 0 128
|
lighthouse vc --testnet-dir ~/.lighthouse/testnet --allow-unsynced testnet insecure 0 128
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -83,12 +83,13 @@ start a beacon node and validator client.
|
|||||||
Start a beacon node:
|
Start a beacon node:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
lighthouse bn --testnet-dir ~/.lighthouse/testnet --dummy-eth1 --http
|
lighthouse bn --testnet-dir ~/.lighthouse/testnet --dummy-eth1 --http --enr-match
|
||||||
```
|
```
|
||||||
|
|
||||||
> - `--testnet-dir` instructs the beacon node to use the spec we generated earlier.
|
> - `--testnet-dir` instructs the beacon node to use the spec we generated earlier.
|
||||||
> - `--dummy-eth1` uses deterministic "junk data" for linking to the eth1 chain, avoiding the requirement for an eth1 node. The downside is that new validators cannot be on-boarded after genesis.
|
> - `--dummy-eth1` uses deterministic "junk data" for linking to the eth1 chain, avoiding the requirement for an eth1 node. The downside is that new validators cannot be on-boarded after genesis.
|
||||||
> - `--http` starts the REST API so the validator client can produce blocks.
|
> - `--http` starts the REST API so the validator client can produce blocks.
|
||||||
|
> - `--enr-match` sets the local ENR to use the local IP address and port which allows other nodes to connect. This node can then behave as a bootnode for other nodes.
|
||||||
|
|
||||||
### 2.2 Start a validator client
|
### 2.2 Start a validator client
|
||||||
|
|
||||||
@ -104,3 +105,37 @@ lighthouse vc --testnet-dir ~/.lighthouse/testnet --allow-unsynced testnet insec
|
|||||||
> - `testnet insecure 0 128` instructs the validator client to use insecure
|
> - `testnet insecure 0 128` instructs the validator client to use insecure
|
||||||
> testnet private keys and that it should control validators from `0` to
|
> testnet private keys and that it should control validators from `0` to
|
||||||
> `127` (inclusive).
|
> `127` (inclusive).
|
||||||
|
|
||||||
|
## 3. Connect other nodes
|
||||||
|
|
||||||
|
Other nodes can now join this local testnet.
|
||||||
|
|
||||||
|
The initial node will output the ENR on boot. The ENR can also be obtained via
|
||||||
|
the http:
|
||||||
|
```bash
|
||||||
|
curl localhost:5052/network/enr
|
||||||
|
```
|
||||||
|
or from it's default directory:
|
||||||
|
```
|
||||||
|
~/.lighthouse/beacon/network/enr.dat
|
||||||
|
```
|
||||||
|
|
||||||
|
Once the ENR of the first node is obtained, another nodes may connect and
|
||||||
|
participate in the local network. Simply run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
lighthouse bn --testnet-dir ~/.lighthouse/testnet --dummy-eth1 --http --http-port 5053 --port 9002 --boot-nodes <ENR>
|
||||||
|
```
|
||||||
|
|
||||||
|
> - `--testnet-dir` instructs the beacon node to use the spec we generated earlier.
|
||||||
|
> - `--dummy-eth1` uses deterministic "junk data" for linking to the eth1 chain, avoiding the requirement for an eth1 node. The downside is that new validators cannot be on-boarded after genesis.
|
||||||
|
> - `--http` starts the REST API so the validator client can produce blocks.
|
||||||
|
> - `--http-port` sets the REST API port to a non-standard port to avoid conflicts with the first local node.
|
||||||
|
> - `--port` sets the ports of the lighthouse client to a non-standard value to avoid conflicts with the original node.
|
||||||
|
> - `--boot-nodes` provides the ENR of the original node to connect to. Note all nodes can use this ENR and should discover each other automatically via the discv5 discovery.
|
||||||
|
|
||||||
|
Note: The `--enr-match` is only required for the boot node. The local ENR of
|
||||||
|
all subsequent nodes will update automatically.
|
||||||
|
|
||||||
|
|
||||||
|
This node should now connect to the original node, sync and follow it's head.
|
||||||
|
@ -59,7 +59,7 @@ fn main() {
|
|||||||
Arg::with_name("debug-level")
|
Arg::with_name("debug-level")
|
||||||
.long("debug-level")
|
.long("debug-level")
|
||||||
.value_name("LEVEL")
|
.value_name("LEVEL")
|
||||||
.help("The title of the spec constants for chain config.")
|
.help("The verbosity level for emitting logs.")
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.possible_values(&["info", "debug", "trace", "warn", "error", "crit"])
|
.possible_values(&["info", "debug", "trace", "warn", "error", "crit"])
|
||||||
.default_value("info"),
|
.default_value("info"),
|
||||||
|
Loading…
Reference in New Issue
Block a user