Skip to content

Commit f9d4b4e

Browse files
michaelsproulWoodpile37
authored andcommitted
Fix block & state queries prior to genesis (sigp#4761)
## Issue Addressed Closes sigp#4751 ## Proposed Changes Prevent `state_root_at_slot` and `block_root_at_slot` from erroring out due to a call to `self.slot()?` that fails before genesis. This fixes pre-genesis queries for: - block at slot 0 - block by genesis block root - state at slot 0 - state by genesis state root - state at `finalized` tag - state at `justified` tag
1 parent 61a4f7e commit f9d4b4e

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

beacon_node/beacon_chain/src/beacon_chain.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -801,10 +801,10 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
801801
///
802802
/// May return a database error.
803803
pub fn state_root_at_slot(&self, request_slot: Slot) -> Result<Option<Hash256>, Error> {
804-
if request_slot > self.slot()? {
805-
return Ok(None);
806-
} else if request_slot == self.spec.genesis_slot {
804+
if request_slot == self.spec.genesis_slot {
807805
return Ok(Some(self.genesis_state_root));
806+
} else if request_slot > self.slot()? {
807+
return Ok(None);
808808
}
809809

810810
// Check limits w.r.t historic state bounds.
@@ -881,10 +881,10 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
881881
///
882882
/// May return a database error.
883883
fn block_root_at_slot_skips_none(&self, request_slot: Slot) -> Result<Option<Hash256>, Error> {
884-
if request_slot > self.slot()? {
885-
return Ok(None);
886-
} else if request_slot == self.spec.genesis_slot {
884+
if request_slot == self.spec.genesis_slot {
887885
return Ok(Some(self.genesis_block_root));
886+
} else if request_slot > self.slot()? {
887+
return Ok(None);
888888
}
889889

890890
let prev_slot = request_slot.saturating_sub(1_u64);
@@ -944,10 +944,10 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
944944
///
945945
/// May return a database error.
946946
fn block_root_at_slot_skips_prev(&self, request_slot: Slot) -> Result<Option<Hash256>, Error> {
947-
if request_slot > self.slot()? {
948-
return Ok(None);
949-
} else if request_slot == self.spec.genesis_slot {
947+
if request_slot == self.spec.genesis_slot {
950948
return Ok(Some(self.genesis_block_root));
949+
} else if request_slot > self.slot()? {
950+
return Ok(None);
951951
}
952952

953953
// Try an optimized path of reading the root directly from the head state.

0 commit comments

Comments
 (0)