Add cmd line options to allow for bootstrap nodes
This commit is contained in:
parent
b10b422b2a
commit
44bcd1b40e
24
src/main.rs
24
src/main.rs
@ -13,7 +13,7 @@ pub mod utils;
|
|||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
use slog::Drain;
|
use slog::Drain;
|
||||||
use clap::{ Arg, App, SubCommand};
|
use clap::{ Arg, App };
|
||||||
use p2p::config::NetworkConfig;
|
use p2p::config::NetworkConfig;
|
||||||
use p2p::floodsub;
|
use p2p::floodsub;
|
||||||
use p2p::state::NetworkState;
|
use p2p::state::NetworkState;
|
||||||
@ -29,21 +29,35 @@ fn main() {
|
|||||||
.author("Sigma Prime <paul@sigmaprime.io>")
|
.author("Sigma Prime <paul@sigmaprime.io>")
|
||||||
.about("Eth 2.0 Client")
|
.about("Eth 2.0 Client")
|
||||||
.arg(Arg::with_name("datadir")
|
.arg(Arg::with_name("datadir")
|
||||||
|
.long("datadir")
|
||||||
.value_name("DIR")
|
.value_name("DIR")
|
||||||
.help("Data directory for keys and databases."))
|
.help("Data directory for keys and databases.")
|
||||||
.subcommand(SubCommand::with_name("generate-keys"))
|
.takes_value(true))
|
||||||
.about("Generates a new set of random keys for p2p dev.")
|
.arg(Arg::with_name("port")
|
||||||
|
.long("port")
|
||||||
|
.value_name("PORT")
|
||||||
|
.help("Network listen port for p2p connections.")
|
||||||
|
.takes_value(true))
|
||||||
.get_matches();
|
.get_matches();
|
||||||
|
|
||||||
let mut config = NetworkConfig::default();
|
let mut config = NetworkConfig::default();
|
||||||
|
|
||||||
|
// Custom datadir
|
||||||
if let Some(dir) = matches.value_of("datadir") {
|
if let Some(dir) = matches.value_of("datadir") {
|
||||||
config.data_dir = PathBuf::from(dir.to_string());
|
config.data_dir = PathBuf::from(dir.to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Custom listen port
|
||||||
|
if let Some(port) = matches.value_of("port") {
|
||||||
|
config.listen_multiaddr =
|
||||||
|
NetworkConfig::multiaddr_on_port(&port.to_string());
|
||||||
|
}
|
||||||
|
|
||||||
info!(log, ""; "data_dir" => &config.data_dir.to_str());
|
info!(log, ""; "data_dir" => &config.data_dir.to_str());
|
||||||
if let Some(_) = matches.subcommand_matches("generate-keys") {
|
if let Some(_) = matches.subcommand_matches("generate-keys") {
|
||||||
// keys::generate_keys(&log).expect("Failed to generate keys");
|
// keys::generate_keys(&log).expect("Failed to generate keys");
|
||||||
} else {
|
} else {
|
||||||
let state = NetworkState::new(config, &log).expect("setup failed");
|
let mut state = NetworkState::new(config, &log).expect("setup failed");
|
||||||
floodsub::listen(state, &log);
|
floodsub::listen(state, &log);
|
||||||
}
|
}
|
||||||
info!(log, "Exiting.");
|
info!(log, "Exiting.");
|
||||||
|
@ -20,9 +20,14 @@ impl NetworkConfig {
|
|||||||
};
|
};
|
||||||
Self {
|
Self {
|
||||||
data_dir,
|
data_dir,
|
||||||
listen_multiaddr: "/ip4/0.0.0.0/tcp/0"
|
listen_multiaddr: NetworkConfig::multiaddr_on_port("0")
|
||||||
.parse::<Multiaddr>().unwrap()
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Return a TCP multiaddress on 0.0.0.0 for a given port.
|
||||||
|
pub fn multiaddr_on_port(port: &str) -> Multiaddr {
|
||||||
|
return format!("/ip4/0.0.0.0/tcp/{}", port)
|
||||||
|
.parse::<Multiaddr>().unwrap()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,8 +42,6 @@ pub fn listen(state: NetworkState, log: &Logger)
|
|||||||
let peer_store = state.peer_store;
|
let peer_store = state.peer_store;
|
||||||
let peer_id = state.peer_id;
|
let peer_id = state.peer_id;
|
||||||
let listen_multiaddr = state.listen_multiaddr;
|
let listen_multiaddr = state.listen_multiaddr;
|
||||||
|
|
||||||
info!(log, "Local PeerId: {:?}", peer_id);
|
|
||||||
|
|
||||||
let mut core = tokio_core::reactor::Core::new().expect("tokio failure.");
|
let mut core = tokio_core::reactor::Core::new().expect("tokio failure.");
|
||||||
let listened_addrs = Arc::new(RwLock::new(vec![]));
|
let listened_addrs = Arc::new(RwLock::new(vec![]));
|
||||||
@ -116,7 +114,7 @@ pub fn listen(state: NetworkState, log: &Logger)
|
|||||||
.listen_on(listen_multiaddr)
|
.listen_on(listen_multiaddr)
|
||||||
.expect("Failed to listen on multiaddr");
|
.expect("Failed to listen on multiaddr");
|
||||||
|
|
||||||
info!(log, "Listening on: {:?}", actual_addr);
|
info!(log, "libp2p listening"; "listen_addr" => actual_addr.to_string());
|
||||||
|
|
||||||
let (kad_ctl, kad_init) = kad_ctl_proto.start(
|
let (kad_ctl, kad_init) = kad_ctl_proto.start(
|
||||||
swarm_ctl.clone(),
|
swarm_ctl.clone(),
|
||||||
@ -145,10 +143,12 @@ pub fn listen(state: NetworkState, log: &Logger)
|
|||||||
.and_then(move |()| kad_ctl.find_node(peer_id.clone()))
|
.and_then(move |()| kad_ctl.find_node(peer_id.clone()))
|
||||||
.for_each(move |peers| {
|
.for_each(move |peers| {
|
||||||
let local_hash = U512::from(polling_peer_id.hash());
|
let local_hash = U512::from(polling_peer_id.hash());
|
||||||
info!(log, "Peer discovery results:");
|
|
||||||
for peer in peers {
|
for peer in peers {
|
||||||
let peer_hash = U512::from(peer.hash());
|
let peer_hash = U512::from(peer.hash());
|
||||||
let _distance = 512 - (local_hash ^ peer_hash).leading_zeros();
|
let distance = 512 - (local_hash ^ peer_hash).leading_zeros();
|
||||||
|
info!(log, "Discovered peer";
|
||||||
|
"distance" => distance,
|
||||||
|
"peer_id" => peer.to_base58());
|
||||||
let peer_addr = AddrComponent::P2P(peer.into_bytes()).into();
|
let peer_addr = AddrComponent::P2P(peer.into_bytes()).into();
|
||||||
let dial_result = swarm_ctl.dial(
|
let dial_result = swarm_ctl.dial(
|
||||||
peer_addr,
|
peer_addr,
|
||||||
|
@ -46,7 +46,8 @@ impl NetworkState {
|
|||||||
let base = JsonPeerstore::new(path)?;
|
let base = JsonPeerstore::new(path)?;
|
||||||
Arc::new(base)
|
Arc::new(base)
|
||||||
};
|
};
|
||||||
let listen_multiaddr = "/ip4/0.0.0.0/tcp/0".parse::<Multiaddr>()?;
|
info!(log, "Loaded peerstore"; "peer_count" => &peer_store.peers().count());
|
||||||
|
let listen_multiaddr = config.listen_multiaddr.clone();
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
config: config,
|
config: config,
|
||||||
seckey,
|
seckey,
|
||||||
@ -65,19 +66,6 @@ impl NetworkState {
|
|||||||
.add_addr(multiaddr, Duration::from_secs(duration_secs));
|
.add_addr(multiaddr, Duration::from_secs(duration_secs));
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: this shouldn't be hard-coded; distribute with peers json.
|
|
||||||
pub fn add_sigp_peer(&mut self) {
|
|
||||||
let peer_id = {
|
|
||||||
let b58 = "Qmajfeei87f8V5N7SQwPw3wr57M1dNcGNwhTqf72v73E7U";
|
|
||||||
b58.parse::<PeerId>().unwrap()
|
|
||||||
};
|
|
||||||
let multiaddr = {
|
|
||||||
let string = "/dns/lh.sigp.io/tcp/10101";
|
|
||||||
string.parse::<Multiaddr>().unwrap()
|
|
||||||
};
|
|
||||||
self.add_peer(peer_id, multiaddr, 3600 * 24 * 356);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Instantiate a SecretKey from a .pem file on disk.
|
/// Instantiate a SecretKey from a .pem file on disk.
|
||||||
pub fn load_secret_key_from_pem_file(config: &NetworkConfig, curve: &Secp256k1)
|
pub fn load_secret_key_from_pem_file(config: &NetworkConfig, curve: &Secp256k1)
|
||||||
-> Result<SecretKey, Box<Error>>
|
-> Result<SecretKey, Box<Error>>
|
||||||
|
Loading…
Reference in New Issue
Block a user