perf(engine): cache proof targets in proof sequencer for state root task (#13310)

This commit is contained in:
Alexey Shekhirin
2024-12-12 16:28:12 +00:00
committed by GitHub
parent 5ef21cdfec
commit 6ff2510ad9
8 changed files with 206 additions and 88 deletions

View File

@ -13,11 +13,29 @@ use alloy_trie::{
proof::{verify_proof, ProofNodes, ProofVerificationError},
TrieMask, EMPTY_ROOT_HASH,
};
use derive_more::derive::{Deref, DerefMut, From, Into, IntoIterator};
use itertools::Itertools;
use reth_primitives_traits::Account;
/// Proof targets map.
pub type MultiProofTargets = B256HashMap<B256HashSet>;
#[derive(Debug, Default, Clone, Deref, DerefMut, From, Into, IntoIterator)]
pub struct MultiProofTargets(B256HashMap<B256HashSet>);
impl MultiProofTargets {
/// Extends the proof targets map with another one.
pub fn extend(&mut self, other: Self) {
for (address, slots) in other.0 {
self.0.entry(address).or_default().extend(slots);
}
}
/// Extends the proof targets map with another one by reference.
pub fn extend_ref(&mut self, other: &Self) {
for (address, slots) in &other.0 {
self.0.entry(*address).or_default().extend(slots);
}
}
}
/// The state multiproof of target accounts and multiproofs of their storage tries.
/// Multiproof is effectively a state subtrie that only contains the nodes