mirror of
https://github.com/sigp/lighthouse.git
synced 2026-04-19 13:58:28 +00:00
Impl more validator client
This commit is contained in:
@@ -1,23 +1,13 @@
|
||||
mod block_producer;
|
||||
|
||||
use spec::ChainSpec;
|
||||
use tokio::prelude::*;
|
||||
use tokio::timer::Interval;
|
||||
|
||||
use crate::block_producer::{BlockProducer, PollOutcome as BlockProducerPollOutcome};
|
||||
|
||||
use std::time::{Duration, Instant};
|
||||
|
||||
use std::sync::{Arc, RwLock};
|
||||
|
||||
use std::collections::HashMap;
|
||||
|
||||
use slot_clock::SystemTimeSlotClock;
|
||||
|
||||
use crate::block_producer::{BlockProducer, BlockProducerService};
|
||||
use grpcio::{ChannelBuilder, EnvBuilder};
|
||||
use protos::services_grpc::BeaconBlockServiceClient;
|
||||
use slog::{info, o, Drain};
|
||||
use slot_clock::SystemTimeSlotClock;
|
||||
use spec::ChainSpec;
|
||||
use std::collections::HashMap;
|
||||
use std::sync::{Arc, RwLock};
|
||||
|
||||
use slog::{error, info, o, warn, Drain};
|
||||
mod block_producer;
|
||||
|
||||
fn main() {
|
||||
// gRPC
|
||||
@@ -47,40 +37,18 @@ fn main() {
|
||||
Arc::new(RwLock::new(clock))
|
||||
};
|
||||
|
||||
let mut block_producer =
|
||||
let block_producer =
|
||||
BlockProducer::new(spec.clone(), epoch_map.clone(), slot_clock.clone(), client);
|
||||
|
||||
info!(log, "Slot duration"; "milliseconds" => duration);
|
||||
|
||||
let task = Interval::new(Instant::now(), Duration::from_millis(duration))
|
||||
// .take(10)
|
||||
.for_each(move |_instant| {
|
||||
match block_producer.poll() {
|
||||
Err(error) => {
|
||||
error!(log, "Block producer poll error"; "error" => format!("{:?}", error))
|
||||
}
|
||||
Ok(BlockProducerPollOutcome::BlockProduced) => info!(log, "Produced block"),
|
||||
Ok(BlockProducerPollOutcome::SlashableBlockNotProduced) => {
|
||||
warn!(log, "Slashable block was not signed")
|
||||
}
|
||||
Ok(BlockProducerPollOutcome::BlockProductionNotRequired) => {
|
||||
info!(log, "Block production not required")
|
||||
}
|
||||
Ok(BlockProducerPollOutcome::ProducerDutiesUnknown) => {
|
||||
error!(log, "Block production duties unknown")
|
||||
}
|
||||
Ok(BlockProducerPollOutcome::SlotAlreadyProcessed) => {
|
||||
warn!(log, "Attempted to re-process slot")
|
||||
}
|
||||
Ok(BlockProducerPollOutcome::BeaconNodeUnableToProduceBlock) => {
|
||||
error!(log, "Beacon node unable to produce block")
|
||||
}
|
||||
};
|
||||
Ok(())
|
||||
})
|
||||
.map_err(|e| panic!("Block producer interval errored; err={:?}", e));
|
||||
let mut block_producer_service = BlockProducerService {
|
||||
block_producer,
|
||||
poll_interval_millis: spec.epoch_length * 1000 / 100, // 1% epoch time precision.
|
||||
log: log.clone(),
|
||||
};
|
||||
|
||||
tokio::run(task);
|
||||
block_producer_service.run();
|
||||
}
|
||||
|
||||
#[derive(Debug, PartialEq, Clone, Copy, Default)]
|
||||
|
||||
Reference in New Issue
Block a user