diff --git a/beacon_node/beacon_chain/src/beacon_chain.rs b/beacon_node/beacon_chain/src/beacon_chain.rs index d281fe666ef..8982884655d 100644 --- a/beacon_node/beacon_chain/src/beacon_chain.rs +++ b/beacon_node/beacon_chain/src/beacon_chain.rs @@ -1482,7 +1482,6 @@ impl BeaconChain { metrics::stop_timer(fork_choice_register_timer); - self.head_tracker.register_block(block_root, &block); metrics::observe( &metrics::OPERATIONS_PER_BLOCK_ATTESTATION, block.body.attestations.len() as f64, @@ -1503,6 +1502,9 @@ impl BeaconChain { self.store.put_state(&block.state_root, &state)?; self.store.put_block(&block_root, signed_block.clone())?; + let parent_root = block.parent_root; + let slot = block.slot; + self.snapshot_cache .try_write_for(BLOCK_PROCESSING_CACHE_LOCK_TIMEOUT) .map(|mut snapshot_cache| { @@ -1522,6 +1524,9 @@ impl BeaconChain { ); }); + self.head_tracker + .register_block(block_root, parent_root, slot); + metrics::stop_timer(db_write_timer); metrics::inc_counter(&metrics::BLOCK_PROCESSING_SUCCESSES); diff --git a/beacon_node/beacon_chain/src/head_tracker.rs b/beacon_node/beacon_chain/src/head_tracker.rs index 7f4e64122c4..6c7186ef25a 100644 --- a/beacon_node/beacon_chain/src/head_tracker.rs +++ b/beacon_node/beacon_chain/src/head_tracker.rs @@ -2,7 +2,7 @@ use parking_lot::RwLock; use ssz_derive::{Decode, Encode}; use std::collections::HashMap; use std::iter::FromIterator; -use types::{BeaconBlock, EthSpec, Hash256, Slot}; +use types::{Hash256, Slot}; #[derive(Debug, PartialEq)] pub enum Error { @@ -23,10 +23,10 @@ impl HeadTracker { /// This function assumes that no block is imported without its parent having already been /// imported. It cannot detect an error if this is not the case, it is the responsibility of /// the upstream user. - pub fn register_block(&self, block_root: Hash256, block: &BeaconBlock) { + pub fn register_block(&self, block_root: Hash256, parent_root: Hash256, slot: Slot) { let mut map = self.0.write(); - map.remove(&block.parent_root); - map.insert(block_root, block.slot); + map.remove(&parent_root); + map.insert(block_root, slot); } /// Removes abandoned head.