feat(engine): proof fetching on state update for StateRootTask (#12458)

Co-authored-by: Roman Krasiuk <rokrassyuk@gmail.com>
Co-authored-by: Alexey Shekhirin <a.shekhirin@gmail.com>
This commit is contained in:
Federico Gimenez
2024-11-27 15:14:29 +01:00
committed by GitHub
parent 533b555f87
commit 1131bdecc3
8 changed files with 843 additions and 74 deletions

View File

@ -33,7 +33,7 @@ pub struct ParallelProof<Factory> {
/// Consistent view of the database.
view: ConsistentDbView<Factory>,
/// Trie input.
input: TrieInput,
input: Arc<TrieInput>,
/// Parallel state root metrics.
#[cfg(feature = "metrics")]
metrics: ParallelStateRootMetrics,
@ -41,7 +41,7 @@ pub struct ParallelProof<Factory> {
impl<Factory> ParallelProof<Factory> {
/// Create new state proof generator.
pub fn new(view: ConsistentDbView<Factory>, input: TrieInput) -> Self {
pub fn new(view: ConsistentDbView<Factory>, input: Arc<TrieInput>) -> Self {
Self {
view,
input,
@ -62,8 +62,8 @@ where
) -> Result<MultiProof, ParallelStateRootError> {
let mut tracker = ParallelTrieTracker::default();
let trie_nodes_sorted = Arc::new(self.input.nodes.into_sorted());
let hashed_state_sorted = Arc::new(self.input.state.into_sorted());
let trie_nodes_sorted = self.input.nodes.clone().into_sorted();
let hashed_state_sorted = self.input.state.clone().into_sorted();
// Extend prefix sets with targets
let mut prefix_sets = self.input.prefix_sets.clone();

View File

@ -4,6 +4,7 @@ use crate::{stats::ParallelTrieTracker, storage_root_targets::StorageRootTargets
use alloy_primitives::B256;
use alloy_rlp::{BufMut, Encodable};
use itertools::Itertools;
use reth_db::DatabaseError;
use reth_execution_errors::StorageRootError;
use reth_provider::{
providers::ConsistentDbView, BlockReader, DBProvider, DatabaseProviderFactory, ProviderError,
@ -225,6 +226,9 @@ pub enum ParallelStateRootError {
/// Provider error.
#[error(transparent)]
Provider(#[from] ProviderError),
/// Other unspecified error.
#[error("{_0}")]
Other(String),
}
impl From<ParallelStateRootError> for ProviderError {
@ -234,6 +238,7 @@ impl From<ParallelStateRootError> for ProviderError {
ParallelStateRootError::StorageRoot(StorageRootError::Database(error)) => {
Self::Database(error)
}
ParallelStateRootError::Other(other) => Self::Database(DatabaseError::Other(other)),
}
}
}

View File

@ -1,7 +1,7 @@
use crate::{prefix_set::TriePrefixSetsMut, updates::TrieUpdates, HashedPostState};
/// Inputs for trie-related computations.
#[derive(Default, Debug)]
#[derive(Default, Debug, Clone)]
pub struct TrieInput {
/// The collection of cached in-memory intermediate trie nodes that
/// can be reused for computation.