mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-22 06:14:38 +00:00
Fix IncorrectAttestationSource error in attn. simulator (#5048)
* Don't produce attestations when syncing * Handle `IncorrectAttestationSource`
This commit is contained in:
@@ -4,7 +4,11 @@ use slot_clock::SlotClock;
|
||||
use std::sync::Arc;
|
||||
use task_executor::TaskExecutor;
|
||||
use tokio::time::sleep;
|
||||
use types::Slot;
|
||||
use types::{EthSpec, Slot};
|
||||
|
||||
/// Don't run the attestation simulator if the head slot is this many epochs
|
||||
/// behind the wall-clock slot.
|
||||
const SYNCING_TOLERANCE_EPOCHS: u64 = 2;
|
||||
|
||||
/// Spawns a routine which produces an unaggregated attestation at every slot.
|
||||
///
|
||||
@@ -58,33 +62,43 @@ async fn attestation_simulator_service<T: BeaconChainTypes>(
|
||||
}
|
||||
|
||||
pub fn produce_unaggregated_attestation<T: BeaconChainTypes>(
|
||||
inner_chain: Arc<BeaconChain<T>>,
|
||||
chain: Arc<BeaconChain<T>>,
|
||||
current_slot: Slot,
|
||||
) {
|
||||
// Don't run the attestation simulator when the head slot is far behind the
|
||||
// wall-clock slot.
|
||||
//
|
||||
// This helps prevent the simulator from becoming a burden by computing
|
||||
// committees from old states.
|
||||
let syncing_tolerance_slots = SYNCING_TOLERANCE_EPOCHS * T::EthSpec::slots_per_epoch();
|
||||
if chain.best_slot() + syncing_tolerance_slots < current_slot {
|
||||
return;
|
||||
}
|
||||
|
||||
// Since attestations for different committees are practically identical (apart from the committee index field)
|
||||
// Committee 0 is guaranteed to exist. That means there's no need to load the committee.
|
||||
let beacon_committee_index = 0;
|
||||
|
||||
// Store the unaggregated attestation in the validator monitor for later processing
|
||||
match inner_chain.produce_unaggregated_attestation(current_slot, beacon_committee_index) {
|
||||
match chain.produce_unaggregated_attestation(current_slot, beacon_committee_index) {
|
||||
Ok(unaggregated_attestation) => {
|
||||
let data = &unaggregated_attestation.data;
|
||||
|
||||
debug!(
|
||||
inner_chain.log,
|
||||
chain.log,
|
||||
"Produce unagg. attestation";
|
||||
"attestation_source" => data.source.root.to_string(),
|
||||
"attestation_target" => data.target.root.to_string(),
|
||||
);
|
||||
|
||||
inner_chain
|
||||
chain
|
||||
.validator_monitor
|
||||
.write()
|
||||
.set_unaggregated_attestation(unaggregated_attestation);
|
||||
}
|
||||
Err(e) => {
|
||||
debug!(
|
||||
inner_chain.log,
|
||||
chain.log,
|
||||
"Failed to simulate attestation";
|
||||
"error" => ?e
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user