From 0b171cf0975583143cfffe3beb7b500f74e1d684 Mon Sep 17 00:00:00 2001 From: Michael Sproul Date: Thu, 17 Feb 2022 17:32:40 +1100 Subject: [PATCH] Use rustc-hash in participation cache --- consensus/state_processing/Cargo.toml | 1 + .../per_epoch_processing/altair/participation_cache.rs | 10 +++++++--- lcli/src/transition_blocks.rs | 7 +++++-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/consensus/state_processing/Cargo.toml b/consensus/state_processing/Cargo.toml index 8661751e10..06af1d41ff 100644 --- a/consensus/state_processing/Cargo.toml +++ b/consensus/state_processing/Cargo.toml @@ -25,6 +25,7 @@ smallvec = "1.6.1" arbitrary = { version = "1.0", features = ["derive"], optional = true } lighthouse_metrics = { path = "../../common/lighthouse_metrics", optional = true } lazy_static = { version = "1.4.0", optional = true } +rustc-hash = "1.1.0" [features] default = ["legacy-arith", "metrics"] diff --git a/consensus/state_processing/src/per_epoch_processing/altair/participation_cache.rs b/consensus/state_processing/src/per_epoch_processing/altair/participation_cache.rs index 17d7673703..088f7b8192 100644 --- a/consensus/state_processing/src/per_epoch_processing/altair/participation_cache.rs +++ b/consensus/state_processing/src/per_epoch_processing/altair/participation_cache.rs @@ -11,8 +11,8 @@ //! Additionally, this cache is returned from the `altair::process_epoch` function and can be used //! to get useful summaries about the validator participation in an epoch. +use rustc_hash::FxHashMap as HashMap; use safe_arith::{ArithError, SafeArith}; -use std::collections::HashMap; use types::{ consts::altair::{ NUM_FLAG_INDICES, TIMELY_HEAD_FLAG_INDEX, TIMELY_SOURCE_FLAG_INDEX, @@ -82,7 +82,10 @@ impl SingleEpochParticipationCache { let zero_balance = Balance::zero(spec.effective_balance_increment); Self { - unslashed_participating_indices: HashMap::with_capacity(hashmap_len), + unslashed_participating_indices: HashMap::with_capacity_and_hasher( + hashmap_len, + Default::default(), + ), total_flag_balances: [zero_balance; NUM_FLAG_INDICES], total_active_balance: zero_balance, } @@ -200,7 +203,8 @@ impl ParticipationCache { let mut previous_epoch_participation = SingleEpochParticipationCache::new(num_previous_epoch_active_vals, spec); - let mut effective_balances = HashMap::with_capacity(num_current_epoch_active_vals); + let mut effective_balances = + HashMap::with_capacity_and_hasher(num_current_epoch_active_vals, Default::default()); // Contains the set of validators which are either: // diff --git a/lcli/src/transition_blocks.rs b/lcli/src/transition_blocks.rs index 9111d6d416..527294035b 100644 --- a/lcli/src/transition_blocks.rs +++ b/lcli/src/transition_blocks.rs @@ -2,7 +2,8 @@ use clap::ArgMatches; use eth2_network_config::Eth2NetworkConfig; use ssz::Encode; use state_processing::{ - per_block_processing, per_slot_processing, BlockSignatureStrategy, VerifyBlockRoot, + per_block_processing, per_slot_processing, BlockSignatureStrategy, ConsensusContext, + VerifyBlockRoot, }; use std::fs::File; use std::io::prelude::*; @@ -94,12 +95,14 @@ fn do_transition( .map_err(|e| format!("Unable to build caches: {:?}", e))?; let t = std::time::Instant::now(); + let mut ctxt = + ConsensusContext::new(block.slot()).set_proposer_index(block.message().proposer_index()); per_block_processing( &mut pre_state, &block, - None, BlockSignatureStrategy::NoVerification, VerifyBlockRoot::True, + &mut ctxt, spec, ) .map_err(|e| format!("State transition failed: {:?}", e))?;