mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-06 10:11:44 +00:00
[Merge] Block validator duties when EL is not ready (#2672)
* Reject some HTTP endpoints when EL is not ready * Restrict more endpoints * Add watchdog task * Change scheduling * Update to new schedule * Add "syncing" concept * Remove RequireSynced * Add is_merge_complete to head_info * Cache latest_head in Engines * Call consensus_forkchoiceUpdate on startup
This commit is contained in:
@@ -647,8 +647,55 @@ where
|
||||
|
||||
if let Some(beacon_chain) = self.beacon_chain.as_ref() {
|
||||
let state_advance_context = runtime_context.service_context("state_advance".into());
|
||||
let log = state_advance_context.log().clone();
|
||||
spawn_state_advance_timer(state_advance_context.executor, beacon_chain.clone(), log);
|
||||
let state_advance_log = state_advance_context.log().clone();
|
||||
spawn_state_advance_timer(
|
||||
state_advance_context.executor,
|
||||
beacon_chain.clone(),
|
||||
state_advance_log,
|
||||
);
|
||||
|
||||
if let Some(execution_layer) = beacon_chain.execution_layer.as_ref() {
|
||||
let store = beacon_chain.store.clone();
|
||||
let inner_execution_layer = execution_layer.clone();
|
||||
|
||||
let head = beacon_chain
|
||||
.head_info()
|
||||
.map_err(|e| format!("Unable to read beacon chain head: {:?}", e))?;
|
||||
|
||||
// Issue the head to the execution engine on startup. This ensures it can start
|
||||
// syncing.
|
||||
if head.is_merge_complete {
|
||||
let result = runtime_context
|
||||
.executor
|
||||
.runtime()
|
||||
.upgrade()
|
||||
.ok_or_else(|| "Cannot update engine head, shutting down".to_string())?
|
||||
.block_on(async move {
|
||||
BeaconChain::<
|
||||
Witness<TSlotClock, TEth1Backend, TEthSpec, THotStore, TColdStore>,
|
||||
>::update_execution_engine_forkchoice(
|
||||
inner_execution_layer,
|
||||
store,
|
||||
head.finalized_checkpoint.root,
|
||||
head.block_root,
|
||||
)
|
||||
.await
|
||||
});
|
||||
|
||||
// No need to exit early if setting the head fails. It will be set again if/when the
|
||||
// node comes online.
|
||||
if let Err(e) = result {
|
||||
warn!(
|
||||
log,
|
||||
"Failed to update head on execution engines";
|
||||
"error" => ?e
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Spawn a routine that tracks the status of the execution engines.
|
||||
execution_layer.spawn_watchdog_routine(beacon_chain.slot_clock.clone());
|
||||
}
|
||||
}
|
||||
|
||||
Ok(Client {
|
||||
|
||||
Reference in New Issue
Block a user