Skip to content

Commit

Permalink
Fix genesis state storage for genesis sync (sigp#4589)
Browse files Browse the repository at this point in the history
  • Loading branch information
michaelsproul committed Aug 9, 2023
1 parent bba1526 commit e373e9a
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 5 deletions.
7 changes: 4 additions & 3 deletions beacon_node/beacon_chain/src/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -337,12 +337,13 @@ where
.build_caches(&self.spec)
.map_err(|e| format!("Failed to build genesis state caches: {:?}", e))?;

store
.update_finalized_state(beacon_state_root, beacon_block_root, beacon_state.clone())
.map_err(|e| format!("Failed to set genesis state as finalized state: {:?}", e))?;
info!(store.log, "Storing genesis state"; "state_root" => ?beacon_state_root);
store
.put_state(&beacon_state_root, &beacon_state)
.map_err(|e| format!("Failed to store genesis state: {:?}", e))?;
store
.update_finalized_state(beacon_state_root, beacon_block_root, beacon_state.clone())
.map_err(|e| format!("Failed to set genesis state as finalized state: {:?}", e))?;

// Store the genesis block's execution payload (if any) in the hot database.
if let Some(execution_payload) = &payload {
Expand Down
10 changes: 8 additions & 2 deletions beacon_node/store/src/hot_cold_store.rs
Original file line number Diff line number Diff line change
Expand Up @@ -939,6 +939,11 @@ impl<E: EthSpec, Hot: ItemStore<E>, Cold: ItemStore<E>> HotColdDB<E, Hot, Cold>
.lock()
.put_state(*state_root, block_root, state)?
{
debug!(
self.log,
"Skipping storage of cached state";
"slot" => state.slot()
);
return Ok(());
}

Expand Down Expand Up @@ -1119,7 +1124,7 @@ impl<E: EthSpec, Hot: ItemStore<E>, Cold: ItemStore<E>> HotColdDB<E, Hot, Cold>

// If the prior state is the split state and it isn't cached then load it in
// entirety from disk. This should only happen on first start up.
if prior_state_root == split_read_lock.state_root {
if prior_state_root == split_read_lock.state_root || prior_summary.slot == 0 {
debug!(
self.log,
"Using split state as base state for replay";
Expand Down Expand Up @@ -1317,7 +1322,8 @@ impl<E: EthSpec, Hot: ItemStore<E>, Cold: ItemStore<E>> HotColdDB<E, Hot, Cold>

if slot >= split.slot {
Ok(state_root == split.state_root
|| self.spec.fork_activated_at_slot::<E>(slot).is_some())
|| self.spec.fork_activated_at_slot::<E>(slot).is_some()
|| slot == 0)
} else {
Err(Error::SlotIsBeforeSplit { slot })
}
Expand Down

0 comments on commit e373e9a

Please sign in to comment.