mirror of
https://github.com/sigp/lighthouse.git
synced 2026-04-16 12:28:24 +00:00
Epoch duties update
This commit is contained in:
@@ -1,8 +1,6 @@
|
||||
use super::epoch_duties::{EpochDuties, EpochDuty};
|
||||
use super::traits::{BeaconNode, BeaconNodeError};
|
||||
use protos::services::{
|
||||
ActiveValidator, GetDutiesRequest, GetDutiesResponse, ValidatorDuty, Validators,
|
||||
};
|
||||
use protos::services::{GetDutiesRequest, Validators};
|
||||
use protos::services_grpc::ValidatorServiceClient;
|
||||
use ssz::ssz_encode;
|
||||
use std::collections::HashMap;
|
||||
@@ -19,10 +17,8 @@ impl BeaconNode for ValidatorServiceClient {
|
||||
// build the request
|
||||
let mut req = GetDutiesRequest::new();
|
||||
req.set_epoch(epoch.as_u64());
|
||||
let validators = Validators::new().mut_public_key();
|
||||
for pubkey in pubkeys {
|
||||
validators.push(pubkey);
|
||||
}
|
||||
let mut validators = Validators::new();
|
||||
validators.set_public_keys(pubkeys.iter().map(|v| ssz_encode(v)).collect());
|
||||
req.set_validators(validators);
|
||||
|
||||
// send the request, get the duties reply
|
||||
@@ -30,24 +26,29 @@ impl BeaconNode for ValidatorServiceClient {
|
||||
.get_validator_duties(&req)
|
||||
.map_err(|err| BeaconNodeError::RemoteFailure(format!("{:?}", err)))?;
|
||||
|
||||
let mut epoch_duties: HashMap<PublicKey, Option<EpochDuties>> = HashMap::new();
|
||||
for (index, validator_duty) in reply.get_active_validator().enumerate() {
|
||||
if let Some(duty) = validator_duty.has_slot() {
|
||||
// the validator is active
|
||||
//build the EpochDuty
|
||||
let active_duty = duty.get_duty();
|
||||
let block_produce_slot = active_duty.get_block_produce_slot();
|
||||
let epoch_duty = EpochDuty {
|
||||
block_produce_slot,
|
||||
committee_slot: active_duty.get_committee_slot(),
|
||||
committee_shard: active_duty.get_committee_shard(),
|
||||
committee_index: active_duty.get_committee_index(),
|
||||
};
|
||||
epoch_duties.insert(pubkeys[index], Some(epoch_duty));
|
||||
} else {
|
||||
// validator is not active and has no duties
|
||||
epoch_duties.insert(pubkeys[index], None);
|
||||
let mut epoch_duties: HashMap<PublicKey, Option<EpochDuty>> = HashMap::new();
|
||||
for (index, validator_duty) in reply.get_active_validators().iter().enumerate() {
|
||||
if !validator_duty.has_duty() {
|
||||
// validator is inactive
|
||||
epoch_duties.insert(pubkeys[index].clone(), None);
|
||||
break;
|
||||
}
|
||||
// active validator
|
||||
let active_duty = validator_duty.get_duty();
|
||||
let block_production_slot = {
|
||||
if active_duty.has_block_production_slot() {
|
||||
Some(Slot::from(active_duty.get_block_production_slot()))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
};
|
||||
let epoch_duty = EpochDuty {
|
||||
block_production_slot,
|
||||
committee_slot: Slot::from(active_duty.get_committee_slot()),
|
||||
committee_shard: active_duty.get_committee_shard(),
|
||||
committee_index: active_duty.get_committee_index(),
|
||||
};
|
||||
epoch_duties.insert(pubkeys[index].clone(), Some(epoch_duty));
|
||||
}
|
||||
Ok(epoch_duties)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user