diff --git a/lcli/src/generate_bootnode_enr.rs b/lcli/src/generate_bootnode_enr.rs index 3fc259e634f..da79a1fa206 100644 --- a/lcli/src/generate_bootnode_enr.rs +++ b/lcli/src/generate_bootnode_enr.rs @@ -8,13 +8,15 @@ use std::fs::File; use std::io::Write; use std::net::IpAddr; use std::path::PathBuf; -use types::{EnrForkId, EthSpec}; +use types::{ChainSpec, EnrForkId, Epoch, EthSpec, Hash256}; pub fn run(matches: &ArgMatches) -> Result<(), String> { let ip: IpAddr = clap_utils::parse_required(matches, "ip")?; let udp_port: u16 = clap_utils::parse_required(matches, "udp-port")?; let tcp_port: u16 = clap_utils::parse_required(matches, "tcp-port")?; let output_dir: PathBuf = clap_utils::parse_required(matches, "output-dir")?; + let genesis_fork_version: [u8; 4] = + clap_utils::parse_ssz_required(matches, "genesis-fork-version")?; if output_dir.exists() { return Err(format!( @@ -30,7 +32,12 @@ pub fn run(matches: &ArgMatches) -> Result<(), String> { let local_keypair = Keypair::generate_secp256k1(); let enr_key = CombinedKey::from_libp2p(&local_keypair)?; - let enr = build_enr::(&enr_key, &config, EnrForkId::default()) + let enr_fork_id = EnrForkId { + fork_digest: ChainSpec::compute_fork_digest(genesis_fork_version, Hash256::zero()), + next_fork_version: genesis_fork_version, + next_fork_epoch: Epoch::max_value(), // FAR_FUTURE_EPOCH + }; + let enr = build_enr::(&enr_key, &config, enr_fork_id) .map_err(|e| format!("Unable to create ENR: {:?}", e))?; fs::create_dir_all(&output_dir).map_err(|e| format!("Unable to create output-dir: {:?}", e))?; diff --git a/lcli/src/main.rs b/lcli/src/main.rs index 3a396a20ad3..81f7cfe6d33 100644 --- a/lcli/src/main.rs +++ b/lcli/src/main.rs @@ -440,6 +440,15 @@ fn main() { .required(true) .help("The directory in which to create the network dir"), ) + .arg( + Arg::with_name("genesis-fork-version") + .long("genesis-fork-version") + .value_name("HEX") + .takes_value(true) + .required(true) + .help("Used to avoid reply attacks between testnets. Recommended to set to + non-default."), + ) ) .subcommand( SubCommand::with_name("insecure-validators")