mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
Introduce HashedPostStateProvider (#12607)
Co-authored-by: Matthias Seitz <matthias.seitz@outlook.de>
This commit is contained in:
@ -17,7 +17,7 @@ use reth_revm::{
|
||||
};
|
||||
use reth_rpc_api::DebugApiClient;
|
||||
use reth_tracing::tracing::warn;
|
||||
use reth_trie::{updates::TrieUpdates, HashedPostState, HashedStorage};
|
||||
use reth_trie::{updates::TrieUpdates, HashedStorage};
|
||||
use serde::Serialize;
|
||||
use std::{collections::HashMap, fmt::Debug, fs::File, io::Write, path::PathBuf};
|
||||
|
||||
@ -129,7 +129,7 @@ where
|
||||
//
|
||||
// Note: We grab *all* accounts in the cache here, as the `BundleState` prunes
|
||||
// referenced accounts + storage slots.
|
||||
let mut hashed_state = HashedPostState::from_bundle_state(&bundle_state.state);
|
||||
let mut hashed_state = db.database.hashed_post_state(&bundle_state);
|
||||
for (address, account) in db.cache.accounts {
|
||||
let hashed_address = keccak256(address);
|
||||
hashed_state
|
||||
|
||||
@ -41,8 +41,8 @@ use reth_primitives::{
|
||||
};
|
||||
use reth_provider::{
|
||||
providers::ConsistentDbView, BlockReader, DatabaseProviderFactory, ExecutionOutcome,
|
||||
ProviderError, StateProviderBox, StateProviderFactory, StateReader, StateRootProvider,
|
||||
TransactionVariant,
|
||||
HashedPostStateProvider, ProviderError, StateCommitmentProvider, StateProviderBox,
|
||||
StateProviderFactory, StateReader, StateRootProvider, TransactionVariant,
|
||||
};
|
||||
use reth_revm::database::StateProviderDatabase;
|
||||
use reth_stages_api::ControlFlow;
|
||||
@ -552,6 +552,8 @@ where
|
||||
+ BlockReader<Block = N::Block, Header = N::BlockHeader>
|
||||
+ StateProviderFactory
|
||||
+ StateReader<Receipt = reth_primitives::Receipt>
|
||||
+ StateCommitmentProvider
|
||||
+ HashedPostStateProvider
|
||||
+ Clone
|
||||
+ 'static,
|
||||
<P as DatabaseProviderFactory>::Provider: BlockReader,
|
||||
@ -1568,7 +1570,7 @@ where
|
||||
.provider
|
||||
.get_state(block.number())?
|
||||
.ok_or_else(|| ProviderError::StateForNumberNotFound(block.number()))?;
|
||||
let hashed_state = execution_output.hash_state_slow();
|
||||
let hashed_state = self.provider.hashed_post_state(execution_output.state());
|
||||
|
||||
Ok(Some(ExecutedBlock {
|
||||
block: Arc::new(block),
|
||||
@ -2242,7 +2244,7 @@ where
|
||||
return Err(err.into())
|
||||
}
|
||||
|
||||
let hashed_state = HashedPostState::from_bundle_state(&output.state.state);
|
||||
let hashed_state = self.provider.hashed_post_state(&output.state);
|
||||
|
||||
trace!(target: "engine::tree", block=?sealed_block.num_hash(), "Calculating block state root");
|
||||
let root_time = Instant::now();
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
use alloy_primitives::map::{HashMap, HashSet};
|
||||
use reth_provider::{
|
||||
providers::ConsistentDbView, BlockReader, DBProvider, DatabaseProviderFactory,
|
||||
StateCommitmentProvider,
|
||||
};
|
||||
use reth_trie::{
|
||||
proof::Proof, updates::TrieUpdates, HashedPostState, HashedStorage, MultiProof, Nibbles,
|
||||
@ -179,7 +180,12 @@ pub(crate) struct StateRootTask<Factory> {
|
||||
#[allow(dead_code)]
|
||||
impl<Factory> StateRootTask<Factory>
|
||||
where
|
||||
Factory: DatabaseProviderFactory<Provider: BlockReader> + Clone + Send + Sync + 'static,
|
||||
Factory: DatabaseProviderFactory<Provider: BlockReader>
|
||||
+ StateCommitmentProvider
|
||||
+ Clone
|
||||
+ Send
|
||||
+ Sync
|
||||
+ 'static,
|
||||
{
|
||||
/// Creates a new state root task with the unified message channel
|
||||
pub(crate) fn new(
|
||||
|
||||
@ -29,7 +29,6 @@ use reth_revm::{
|
||||
DatabaseCommit,
|
||||
};
|
||||
use reth_rpc_types_compat::engine::payload::block_to_payload;
|
||||
use reth_trie::HashedPostState;
|
||||
use revm_primitives::{calc_excess_blob_gas, EVMError, EnvWithHandlerCfg};
|
||||
use std::{
|
||||
collections::VecDeque,
|
||||
@ -382,7 +381,7 @@ where
|
||||
reorg_target.number,
|
||||
Default::default(),
|
||||
);
|
||||
let hashed_state = HashedPostState::from_bundle_state(&outcome.state().state);
|
||||
let hashed_state = state_provider.hashed_post_state(outcome.state());
|
||||
|
||||
let (blob_gas_used, excess_blob_gas) =
|
||||
if chain_spec.is_cancun_active_at_timestamp(reorg_target.timestamp) {
|
||||
|
||||
Reference in New Issue
Block a user