diff --git a/beacon_node/client/Cargo.toml b/beacon_node/client/Cargo.toml index 46394ac912..8914a9e7e2 100644 --- a/beacon_node/client/Cargo.toml +++ b/beacon_node/client/Cargo.toml @@ -7,13 +7,11 @@ edition = "2018" [dependencies] beacon_chain = { path = "../beacon_chain" } network = { path = "../network" } -libp2p = { path = "../libp2p" } sync = { path = "../sync" } db = { path = "../db" } fork_choice = { path = "../../eth2/fork_choice" } types = { path = "../../eth2/types" } slot_clock = { path = "../../eth2/utils/slot_clock" } - error-chain = "0.12.0" slog = "^2.2.3" tokio = "0.1.15" diff --git a/beacon_node/client/src/client_config.rs b/beacon_node/client/src/client_config.rs index 18b39277a3..bc3a782796 100644 --- a/beacon_node/client/src/client_config.rs +++ b/beacon_node/client/src/client_config.rs @@ -1,13 +1,13 @@ use clap::ArgMatches; use db::DBType; use fork_choice::ForkChoiceAlgorithm; -use libp2p::multiaddr::ToMultiaddr; use network::NetworkConfig; use slog::error; use std::fs; use std::net::IpAddr; use std::net::SocketAddr; use std::path::PathBuf; +use types::multiaddr::ToMultiaddr; use types::ChainSpec; /// Stores the client configuration for this Lighthouse instance. @@ -32,11 +32,15 @@ impl Default for ClientConfig { }; fs::create_dir_all(&data_dir) .unwrap_or_else(|_| panic!("Unable to create {:?}", &data_dir)); + + let default_spec = ChainSpec::lighthouse_testnet(); + let default_net_conf = NetworkConfig::new(default_spec.boot_nodes.clone()); + Self { data_dir: data_dir.clone(), // default to foundation for chain specs - spec: ChainSpec::foundation(), - net_conf: NetworkConfig::default(), + spec: default_spec, + net_conf: default_net_conf, // default to bitwise LMD Ghost fork_choice: ForkChoiceAlgorithm::BitwiseLMDGhost, // default to memory db for now diff --git a/beacon_node/libp2p/Cargo.toml b/beacon_node/libp2p/Cargo.toml index d78ddd882f..496d302683 100644 --- a/beacon_node/libp2p/Cargo.toml +++ b/beacon_node/libp2p/Cargo.toml @@ -7,8 +7,8 @@ edition = "2018" [dependencies] # SigP repository until PR is merged libp2p = { git = "https://github.com/SigP/rust-libp2p", branch = "gossipsub" } +types = { path = "../../eth2/types" } slog = "2.4.1" version = { path = "../version" } tokio = "0.1.16" futures = "0.1.25" -parity-multiaddr = "0.2.0" diff --git a/beacon_node/libp2p/src/lib.rs b/beacon_node/libp2p/src/lib.rs index 1a24165bac..f72725e49d 100644 --- a/beacon_node/libp2p/src/lib.rs +++ b/beacon_node/libp2p/src/lib.rs @@ -6,11 +6,11 @@ mod behaviour; mod network_config; mod service; -pub use libp2p::multiaddr; -pub use libp2p::Multiaddr; pub use libp2p::{ gossipsub::{GossipsubConfig, GossipsubConfigBuilder}, PeerId, }; pub use network_config::NetworkConfig; pub use service::Service; +pub use types::multiaddr; +pub use types::Multiaddr; diff --git a/beacon_node/libp2p/src/network_config.rs b/beacon_node/libp2p/src/network_config.rs index 8eeb338612..7bab57ddef 100644 --- a/beacon_node/libp2p/src/network_config.rs +++ b/beacon_node/libp2p/src/network_config.rs @@ -1,6 +1,6 @@ +use crate::Multiaddr; use libp2p::gossipsub::{GossipsubConfig, GossipsubConfigBuilder}; use libp2p::secio; -use libp2p::Multiaddr; use std::fmt; #[derive(Clone)] @@ -40,8 +40,11 @@ impl Default for NetworkConfig { } impl NetworkConfig { - pub fn new() -> Self { - NetworkConfig::default() + pub fn new(boot_nodes: Vec) -> Self { + let mut conf = NetworkConfig::default(); + conf.boot_nodes = boot_nodes; + + conf } } diff --git a/beacon_node/libp2p/src/service.rs b/beacon_node/libp2p/src/service.rs index 8e16707011..ee36cefd57 100644 --- a/beacon_node/libp2p/src/service.rs +++ b/beacon_node/libp2p/src/service.rs @@ -1,4 +1,5 @@ use crate::behaviour::Behaviour; +use crate::multiaddr::Protocol; use crate::NetworkConfig; use futures::prelude::*; use libp2p::core::{ @@ -7,7 +8,6 @@ use libp2p::core::{ transport::boxed::Boxed, upgrade::{InboundUpgradeExt, OutboundUpgradeExt}, }; -use libp2p::multiaddr::Protocol; use libp2p::{core, secio, Transport}; use libp2p::{PeerId, Swarm}; use slog::{debug, info, warn}; diff --git a/eth2/types/Cargo.toml b/eth2/types/Cargo.toml index ea1343dbab..f8120d5206 100644 --- a/eth2/types/Cargo.toml +++ b/eth2/types/Cargo.toml @@ -22,6 +22,7 @@ ssz = { path = "../utils/ssz" } ssz_derive = { path = "../utils/ssz_derive" } swap_or_not_shuffle = { path = "../utils/swap_or_not_shuffle" } test_random_derive = { path = "../utils/test_random_derive" } +libp2p = { git = "https://github.com/SigP/rust-libp2p", branch = "gossipsub" } [dev-dependencies] env_logger = "0.6.0" diff --git a/eth2/types/src/chain_spec.rs b/eth2/types/src/chain_spec.rs index 789bb6c0cc..ef2c94d653 100644 --- a/eth2/types/src/chain_spec.rs +++ b/eth2/types/src/chain_spec.rs @@ -1,4 +1,4 @@ -use crate::{Address, Epoch, Fork, Hash256, Slot}; +use crate::{Address, Epoch, Fork, Hash256, Multiaddr, Slot}; use bls::Signature; const GWEI: u64 = 1_000_000_000; @@ -106,6 +106,12 @@ pub struct ChainSpec { domain_exit: u64, domain_randao: u64, domain_transfer: u64, + + /* + * Network specific parameters + * + */ + pub boot_nodes: Vec, } impl ChainSpec { @@ -232,9 +238,31 @@ impl ChainSpec { domain_exit: 3, domain_randao: 4, domain_transfer: 5, + + /* + * Boot nodes + */ + boot_nodes: vec![], } } + /// Returns a `ChainSpec` compatible with the Lighthouse testnet specification. + /// + /// Spec v0.4.0 + pub fn lighthouse_testnet() -> Self { + /* + * Lighthouse testnet bootnodes + */ + let boot_nodes = vec!["/ip4/127.0.0.1/tcp/9000" + .parse() + .expect("correct multiaddr")]; + + let mut standard_spec = ChainSpec::foundation(); + standard_spec.boot_nodes = boot_nodes; + + standard_spec + } + /// Returns a `ChainSpec` compatible with the specification suitable for 8 validators. /// /// Spec v0.4.0 diff --git a/eth2/types/src/lib.rs b/eth2/types/src/lib.rs index 9bf60f2c92..5555600900 100644 --- a/eth2/types/src/lib.rs +++ b/eth2/types/src/lib.rs @@ -73,3 +73,5 @@ pub type AttesterMap = HashMap<(u64, u64), Vec>; pub type ProposerMap = HashMap; pub use bls::{AggregatePublicKey, AggregateSignature, Keypair, PublicKey, Signature}; +pub use libp2p::multiaddr; +pub use libp2p::Multiaddr;