Resolve merge conflicts

This commit is contained in:
Eitan Seri- Levi
2026-04-04 23:02:58 -07:00
8 changed files with 238 additions and 53 deletions

View File

@@ -101,6 +101,7 @@ pub enum Error {
from_state_slot: Slot,
target_slot: Slot,
},
FinalizedStateAlreadySet,
}
pub trait HandleUnavailable<T> {

View File

@@ -474,6 +474,25 @@ impl<E: EthSpec, Hot: ItemStore<E>, Cold: ItemStore<E>> HotColdDB<E, Hot, Cold>
}
}
/// See [`StateCache::set_initial_finalized_state`](crate::state_cache::StateCache::set_initial_finalized_state).
pub fn set_initial_finalized_state(
&self,
state_root: Hash256,
block_root: Hash256,
state: BeaconState<E>,
) -> Result<(), Error> {
let start_slot = self.get_anchor_info().anchor_slot;
let pre_finalized_slots_to_retain = self
.hierarchy
.closest_layer_points(state.slot(), start_slot);
self.state_cache.lock().set_initial_finalized_state(
state_root,
block_root,
state,
&pre_finalized_slots_to_retain,
)
}
pub fn update_finalized_state(
&self,
state_root: Hash256,

View File

@@ -124,6 +124,34 @@ impl<E: EthSpec> StateCache<E> {
roots
}
/// Used by checkpoint sync to initialize the finalized state in the state cache.
///
/// Post-gloas the checkpoint state may not be epoch-aligned, e.g when the epoch boundary
/// slot is skipped. Regular finalization updates should use `update_finalized_state`.
pub fn set_initial_finalized_state(
&mut self,
state_root: Hash256,
block_root: Hash256,
state: BeaconState<E>,
pre_finalized_slots_to_retain: &[Slot],
) -> Result<(), Error> {
if self.finalized_state.is_some() {
return Err(Error::FinalizedStateAlreadySet);
}
if !state.fork_name_unchecked().gloas_enabled() && state.slot() % E::slots_per_epoch() != 0
{
return Err(Error::FinalizedStateUnaligned);
}
self.update_finalized_state_inner(
state_root,
block_root,
state,
pre_finalized_slots_to_retain,
)
}
pub fn update_finalized_state(
&mut self,
state_root: Hash256,
@@ -135,6 +163,21 @@ impl<E: EthSpec> StateCache<E> {
return Err(Error::FinalizedStateUnaligned);
}
self.update_finalized_state_inner(
state_root,
block_root,
state,
pre_finalized_slots_to_retain,
)
}
fn update_finalized_state_inner(
&mut self,
state_root: Hash256,
block_root: Hash256,
state: BeaconState<E>,
pre_finalized_slots_to_retain: &[Slot],
) -> Result<(), Error> {
if self
.finalized_state
.as_ref()