Correct compiler issues, re-introduce validator library

This commit is contained in:
Age Manning 2019-03-30 12:14:56 +11:00
parent e418cd1183
commit 97bb61371c
No known key found for this signature in database
GPG Key ID: 05EED64B79E06A93
3 changed files with 21 additions and 11 deletions

View File

@ -8,6 +8,10 @@ edition = "2018"
name = "validator_client" name = "validator_client"
path = "src/main.rs" path = "src/main.rs"
[lib]
name = "validator_client"
path = "src/lib.rs"
[dependencies] [dependencies]
block_proposer = { path = "../eth2/block_proposer" } block_proposer = { path = "../eth2/block_proposer" }
attester = { path = "../eth2/attester" } attester = { path = "../eth2/attester" }

View File

@ -0,0 +1,3 @@
pub mod config;
pub use crate::config::Config;

View File

@ -41,9 +41,7 @@ use types::{ChainSpec, Epoch, Fork, Slot};
/// duties. /// duties.
//TODO: Generalize the BeaconNode types to use testing //TODO: Generalize the BeaconNode types to use testing
pub struct Service<B: BeaconNodeDuties + 'static> { pub struct Service<B: BeaconNodeDuties + 'static> {
/// The node we currently connected to. /// The node's current fork version we are processing on.
connected_node_version: String,
/// The chain id we are processing on.
fork: Fork, fork: Fork,
/// The slot clock for this service. /// The slot clock for this service.
slot_clock: SystemTimeSlotClock, slot_clock: SystemTimeSlotClock,
@ -67,7 +65,10 @@ impl<B: BeaconNodeDuties + 'static> Service<B> {
/// ///
/// This tries to connect to a beacon node. Once connected, it initialised the gRPC clients /// This tries to connect to a beacon node. Once connected, it initialised the gRPC clients
/// and returns an instance of the service. /// and returns an instance of the service.
fn initialize_service(config: ValidatorConfig, log: slog::Logger) -> error_chain::Result<Self> { fn initialize_service(
config: ValidatorConfig,
log: slog::Logger,
) -> error_chain::Result<Service<ValidatorServiceClient>> {
// initialise the beacon node client to check for a connection // initialise the beacon node client to check for a connection
let env = Arc::new(EnvBuilder::new().build()); let env = Arc::new(EnvBuilder::new().build());
@ -162,8 +163,6 @@ impl<B: BeaconNodeDuties + 'static> Service<B> {
.map_err(|e| ErrorKind::SlotClockError(e))? .map_err(|e| ErrorKind::SlotClockError(e))?
.expect("Genesis must be in the future"); .expect("Genesis must be in the future");
let spec = Arc::new(config.spec);
/* Generate the duties manager */ /* Generate the duties manager */
// generate keypairs // generate keypairs
@ -185,8 +184,9 @@ impl<B: BeaconNodeDuties + 'static> Service<B> {
beacon_node: validator_client, beacon_node: validator_client,
}); });
Ok(Self { let spec = Arc::new(config.spec);
connected_node_version: node_info.version,
Ok(Service {
fork, fork,
slot_clock, slot_clock,
current_slot, current_slot,
@ -199,9 +199,10 @@ impl<B: BeaconNodeDuties + 'static> Service<B> {
} }
/// Initialise the service then run the core thread. /// Initialise the service then run the core thread.
// TODO: Improve handling of generic BeaconNode types, to stub grpcClient
pub fn start(config: ValidatorConfig, log: slog::Logger) -> error_chain::Result<()> { pub fn start(config: ValidatorConfig, log: slog::Logger) -> error_chain::Result<()> {
// connect to the node and retrieve its properties and initialize the gRPC clients // connect to the node and retrieve its properties and initialize the gRPC clients
let service = Service::initialize_service(config, log)?; let mut service = Service::<ValidatorServiceClient>::initialize_service(config, log)?;
// we have connected to a node and established its parameters. Spin up the core service // we have connected to a node and established its parameters. Spin up the core service
@ -221,7 +222,7 @@ impl<B: BeaconNodeDuties + 'static> Service<B> {
// set up the validator work interval - start at next slot and proceed every slot // set up the validator work interval - start at next slot and proceed every slot
let interval = { let interval = {
// Set the interval to start at the next slot, and every slot after // Set the interval to start at the next slot, and every slot after
let slot_duration = Duration::from_secs(config.spec.seconds_per_slot); let slot_duration = Duration::from_secs(service.spec.seconds_per_slot);
//TODO: Handle checked add correctly //TODO: Handle checked add correctly
Interval::new(Instant::now() + duration_to_next_slot, slot_duration) Interval::new(Instant::now() + duration_to_next_slot, slot_duration)
}; };
@ -236,7 +237,7 @@ impl<B: BeaconNodeDuties + 'static> Service<B> {
Ok(()) Ok(())
}) })
.map_err(|e| format!("Service thread failed: {:?}", e)), .map_err(|e| format!("Service thread failed: {:?}", e)),
); )?;
// validator client exited // validator client exited
Ok(()) Ok(())
} }
@ -300,11 +301,13 @@ impl<B: BeaconNodeDuties + 'static> Service<B> {
if work_type.produce_block { if work_type.produce_block {
// spawns a thread to produce a beacon block // spawns a thread to produce a beacon block
std::thread::spawn(move || { std::thread::spawn(move || {
/*
let block_producer = BlockProducer { let block_producer = BlockProducer {
fork: self.fork, fork: self.fork,
slot: self.current_slot, slot: self.current_slot,
spec: self.spec.clone(), spec: self.spec.clone(),
}; };
*/
}); });
// TODO: Produce a beacon block in a new thread // TODO: Produce a beacon block in a new thread