mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
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:
@ -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();
|
||||
|
||||
@ -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)),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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.
|
||||
|
||||
Reference in New Issue
Block a user