Update beacon_node to work w/ BeaconStateTypes

This commit is contained in:
Paul Hauner 2019-05-09 09:40:32 +10:00
parent 42b7aa89d4
commit 4c0c93f0c9
No known key found for this signature in database
GPG Key ID: D362883A9218FCC6
5 changed files with 34 additions and 11 deletions

View File

@ -9,8 +9,8 @@ use std::net::{IpAddr, Ipv4Addr};
use std::path::PathBuf;
use types::multiaddr::Protocol;
use types::multiaddr::ToMultiaddr;
use types::ChainSpec;
use types::Multiaddr;
use types::{BeaconStateTypes, ChainSpec, LighthouseTestnetStateTypes};
/// Stores the client configuration for this Lighthouse instance.
#[derive(Debug, Clone)]
@ -35,7 +35,7 @@ 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_spec = LighthouseTestnetStateTypes::spec();
let default_net_conf = NetworkConfig::new(default_spec.boot_nodes.clone());
Self {

View File

@ -7,6 +7,7 @@ use beacon_chain::{
BeaconChain,
};
use fork_choice::ForkChoice;
use types::{BeaconStateTypes, FewValidatorsStateTypes, FoundationStateTypes};
use std::sync::Arc;
@ -14,10 +15,11 @@ pub trait ClientTypes {
type DB: ClientDB + 'static;
type SlotClock: SlotClock + 'static;
type ForkChoice: ForkChoice + 'static;
type BeaconStateTypes: BeaconStateTypes + 'static;
fn initialise_beacon_chain(
config: &ClientConfig,
) -> Arc<BeaconChain<Self::DB, Self::SlotClock, Self::ForkChoice>>;
) -> Arc<BeaconChain<Self::DB, Self::SlotClock, Self::ForkChoice, Self::BeaconStateTypes>>;
}
pub struct StandardClientType;
@ -25,11 +27,12 @@ pub struct StandardClientType;
impl ClientTypes for StandardClientType {
type DB = DiskDB;
type SlotClock = SystemTimeSlotClock;
type ForkChoice = BitwiseLMDGhost<DiskDB>;
type ForkChoice = BitwiseLMDGhost<DiskDB, Self::BeaconStateTypes>;
type BeaconStateTypes = FoundationStateTypes;
fn initialise_beacon_chain(
config: &ClientConfig,
) -> Arc<BeaconChain<Self::DB, Self::SlotClock, Self::ForkChoice>> {
) -> Arc<BeaconChain<Self::DB, Self::SlotClock, Self::ForkChoice, Self::BeaconStateTypes>> {
initialise::initialise_beacon_chain(&config.spec, Some(&config.db_name))
}
}
@ -39,11 +42,12 @@ pub struct TestingClientType;
impl ClientTypes for TestingClientType {
type DB = MemoryDB;
type SlotClock = SystemTimeSlotClock;
type ForkChoice = BitwiseLMDGhost<MemoryDB>;
type ForkChoice = BitwiseLMDGhost<MemoryDB, Self::BeaconStateTypes>;
type BeaconStateTypes = FewValidatorsStateTypes;
fn initialise_beacon_chain(
config: &ClientConfig,
) -> Arc<BeaconChain<Self::DB, Self::SlotClock, Self::ForkChoice>> {
) -> Arc<BeaconChain<Self::DB, Self::SlotClock, Self::ForkChoice, Self::BeaconStateTypes>> {
initialise::initialise_test_beacon_chain(&config.spec, None)
}
}

View File

@ -20,6 +20,7 @@ use std::sync::Arc;
use std::time::{Duration, Instant};
use tokio::runtime::TaskExecutor;
use tokio::timer::Interval;
use types::BeaconStateTypes;
/// Main beacon node client service. This provides the connection and initialisation of the clients
/// sub-services in multiple threads.
@ -27,9 +28,9 @@ pub struct Client<T: ClientTypes> {
/// Configuration for the lighthouse client.
_config: ClientConfig,
/// The beacon chain for the running client.
_beacon_chain: Arc<BeaconChain<T::DB, T::SlotClock, T::ForkChoice>>,
_beacon_chain: Arc<BeaconChain<T::DB, T::SlotClock, T::ForkChoice, T::BeaconStateTypes>>,
/// Reference to the network service.
pub network: Arc<NetworkService>,
pub network: Arc<NetworkService<T::BeaconStateTypes>>,
/// Signal to terminate the RPC server.
pub rpc_exit_signal: Option<Signal>,
/// Signal to terminate the slot timer.
@ -141,11 +142,12 @@ impl<TClientType: ClientTypes> Client<TClientType> {
}
}
fn do_state_catchup<T, U, F>(chain: &Arc<BeaconChain<T, U, F>>, log: &slog::Logger)
fn do_state_catchup<T, U, F, B>(chain: &Arc<BeaconChain<T, U, F, B>>, log: &slog::Logger)
where
T: ClientDB,
U: SlotClock,
F: ForkChoice,
B: BeaconStateTypes,
{
if let Some(genesis_height) = chain.slots_since_genesis() {
let result = chain.catchup_state();

View File

@ -12,6 +12,7 @@ pub trait BeaconStateTypes: 'static + Default + Sync + Send + Clone + Debug + Pa
fn spec() -> ChainSpec;
}
/// Ethereum Foundation specifications.
#[derive(Clone, PartialEq, Debug, Default)]
pub struct FoundationStateTypes;
@ -45,3 +46,20 @@ impl BeaconStateTypes for FewValidatorsStateTypes {
}
pub type FewValidatorsBeaconState = BeaconState<FewValidatorsStateTypes>;
#[derive(Clone, PartialEq, Debug, Default)]
pub struct LighthouseTestnetStateTypes;
impl BeaconStateTypes for LighthouseTestnetStateTypes {
type ShardCount = U8;
type SlotsPerHistoricalRoot = U8192;
type LatestRandaoMixesLength = U8192;
type LatestActiveIndexRootsLength = U8192;
type LatestSlashedExitLength = U8192;
fn spec() -> ChainSpec {
ChainSpec::lighthouse_testnet()
}
}
pub type LighthouseTestnetBeaconState = BeaconState<LighthouseTestnetStateTypes>;

View File

@ -29,7 +29,6 @@ impl<T, N: Unsigned> FixedLenVec<T, N> {
impl<T: Default, N: Unsigned> From<Vec<T>> for FixedLenVec<T, N> {
fn from(mut vec: Vec<T>) -> Self {
dbg!(Self::capacity());
vec.resize_with(Self::capacity(), Default::default);
Self {