Skip to content

Commit 0074a3b

Browse files
committed
Fix block & state queries prior to genesis (#4761)
## Issue Addressed Closes #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 d3fe3ad commit 0074a3b

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
@@ -809,10 +809,10 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
809809
///
810810
/// May return a database error.
811811
pub fn state_root_at_slot(&self, request_slot: Slot) -> Result<Option<Hash256>, Error> {
812-
if request_slot > self.slot()? {
813-
return Ok(None);
814-
} else if request_slot == self.spec.genesis_slot {
812+
if request_slot == self.spec.genesis_slot {
815813
return Ok(Some(self.genesis_state_root));
814+
} else if request_slot > self.slot()? {
815+
return Ok(None);
816816
}
817817

818818
// Check limits w.r.t historic state bounds.
@@ -889,10 +889,10 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
889889
///
890890
/// May return a database error.
891891
fn block_root_at_slot_skips_none(&self, request_slot: Slot) -> Result<Option<Hash256>, Error> {
892-
if request_slot > self.slot()? {
893-
return Ok(None);
894-
} else if request_slot == self.spec.genesis_slot {
892+
if request_slot == self.spec.genesis_slot {
895893
return Ok(Some(self.genesis_block_root));
894+
} else if request_slot > self.slot()? {
895+
return Ok(None);
896896
}
897897

898898
let prev_slot = request_slot.saturating_sub(1_u64);
@@ -952,10 +952,10 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
952952
///
953953
/// May return a database error.
954954
fn block_root_at_slot_skips_prev(&self, request_slot: Slot) -> Result<Option<Hash256>, Error> {
955-
if request_slot > self.slot()? {
956-
return Ok(None);
957-
} else if request_slot == self.spec.genesis_slot {
955+
if request_slot == self.spec.genesis_slot {
958956
return Ok(Some(self.genesis_block_root));
957+
} else if request_slot > self.slot()? {
958+
return Ok(None);
959959
}
960960

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

0 commit comments

Comments
 (0)