fix genesis state root provided to HTTP server (#1783)

## Issue Addressed

Resolves #1776

## Proposed Changes

The beacon chain builder was using the canonical head's state root for the `genesis_state_root` field.

## Additional Info
This commit is contained in:
realbigsean 2020-10-21 23:15:30 +00:00
parent fdb9744759
commit 628891df1d

View File

@ -80,6 +80,7 @@ pub struct BeaconChainBuilder<T: BeaconChainTypes> {
store_migrator_config: Option<MigratorConfig>, store_migrator_config: Option<MigratorConfig>,
pub genesis_time: Option<u64>, pub genesis_time: Option<u64>,
genesis_block_root: Option<Hash256>, genesis_block_root: Option<Hash256>,
genesis_state_root: Option<Hash256>,
#[allow(clippy::type_complexity)] #[allow(clippy::type_complexity)]
fork_choice: Option< fork_choice: Option<
ForkChoice<BeaconForkChoiceStore<T::EthSpec, T::HotStore, T::ColdStore>, T::EthSpec>, ForkChoice<BeaconForkChoiceStore<T::EthSpec, T::HotStore, T::ColdStore>, T::EthSpec>,
@ -122,6 +123,7 @@ where
store_migrator_config: None, store_migrator_config: None,
genesis_time: None, genesis_time: None,
genesis_block_root: None, genesis_block_root: None,
genesis_state_root: None,
fork_choice: None, fork_choice: None,
op_pool: None, op_pool: None,
eth1_chain: None, eth1_chain: None,
@ -291,6 +293,7 @@ where
.map_err(|e| format!("Unable to open persisted pubkey cache: {:?}", e))?; .map_err(|e| format!("Unable to open persisted pubkey cache: {:?}", e))?;
self.genesis_block_root = Some(chain.genesis_block_root); self.genesis_block_root = Some(chain.genesis_block_root);
self.genesis_state_root = Some(genesis_block.state_root());
self.head_tracker = Some( self.head_tracker = Some(
HeadTracker::from_ssz_container(&chain.ssz_head_tracker) HeadTracker::from_ssz_container(&chain.ssz_head_tracker)
.map_err(|e| format!("Failed to decode head tracker for database: {:?}", e))?, .map_err(|e| format!("Failed to decode head tracker for database: {:?}", e))?,
@ -320,6 +323,7 @@ where
let beacon_state_root = beacon_block.message.state_root; let beacon_state_root = beacon_block.message.state_root;
let beacon_block_root = beacon_block.canonical_root(); let beacon_block_root = beacon_block.canonical_root();
self.genesis_state_root = Some(beacon_state_root);
self.genesis_block_root = Some(beacon_block_root); self.genesis_block_root = Some(beacon_block_root);
store store
@ -439,6 +443,9 @@ where
let genesis_block_root = self let genesis_block_root = self
.genesis_block_root .genesis_block_root
.ok_or_else(|| "Cannot build without a genesis block root".to_string())?; .ok_or_else(|| "Cannot build without a genesis block root".to_string())?;
let genesis_state_root = self
.genesis_state_root
.ok_or_else(|| "Cannot build without a genesis state root".to_string())?;
let current_slot = if slot_clock let current_slot = if slot_clock
.is_prior_to_genesis() .is_prior_to_genesis()
@ -544,9 +551,9 @@ where
observed_attester_slashings: <_>::default(), observed_attester_slashings: <_>::default(),
eth1_chain: self.eth1_chain, eth1_chain: self.eth1_chain,
genesis_validators_root: canonical_head.beacon_state.genesis_validators_root, genesis_validators_root: canonical_head.beacon_state.genesis_validators_root,
genesis_state_root: canonical_head.beacon_state_root,
canonical_head: TimeoutRwLock::new(canonical_head.clone()), canonical_head: TimeoutRwLock::new(canonical_head.clone()),
genesis_block_root, genesis_block_root,
genesis_state_root,
fork_choice: RwLock::new(fork_choice), fork_choice: RwLock::new(fork_choice),
event_handler: self event_handler: self
.event_handler .event_handler