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:
@ -26,7 +26,6 @@ reth-payload-builder-primitives.workspace = true
|
||||
reth-payload-util.workspace = true
|
||||
reth-payload-primitives = { workspace = true, features = ["op"] }
|
||||
reth-basic-payload-builder.workspace = true
|
||||
reth-trie.workspace = true
|
||||
reth-chain-state.workspace = true
|
||||
|
||||
# op-reth
|
||||
|
||||
@ -22,12 +22,14 @@ use reth_primitives::{
|
||||
proofs, transaction::SignedTransactionIntoRecoveredExt, Block, BlockBody, BlockExt, Receipt,
|
||||
SealedHeader, TransactionSigned, TxType,
|
||||
};
|
||||
use reth_provider::{ProviderError, StateProofProvider, StateProviderFactory, StateRootProvider};
|
||||
use reth_provider::{
|
||||
HashedPostStateProvider, ProviderError, StateProofProvider, StateProviderFactory,
|
||||
StateRootProvider,
|
||||
};
|
||||
use reth_revm::database::StateProviderDatabase;
|
||||
use reth_transaction_pool::{
|
||||
noop::NoopTransactionPool, BestTransactionsAttributes, PoolTransaction, TransactionPool,
|
||||
};
|
||||
use reth_trie::HashedPostState;
|
||||
use revm::{
|
||||
db::{states::bundle_state::BundleRetention, State},
|
||||
primitives::{
|
||||
@ -339,7 +341,7 @@ where
|
||||
where
|
||||
EvmConfig: ConfigureEvm<Header = Header>,
|
||||
DB: Database<Error = ProviderError> + AsRef<P>,
|
||||
P: StateRootProvider,
|
||||
P: StateRootProvider + HashedPostStateProvider,
|
||||
{
|
||||
let ExecutedPayload { info, withdrawals_root } = match self.execute(&mut state, &ctx)? {
|
||||
BuildOutcomeKind::Better { payload } | BuildOutcomeKind::Freeze(payload) => payload,
|
||||
@ -367,17 +369,16 @@ where
|
||||
execution_outcome.block_logs_bloom(block_number).expect("Number is in range");
|
||||
|
||||
// // calculate the state root
|
||||
let hashed_state = HashedPostState::from_bundle_state(&execution_outcome.state().state);
|
||||
let state_provider = state.database.as_ref();
|
||||
let hashed_state = state_provider.hashed_post_state(execution_outcome.state());
|
||||
let (state_root, trie_output) = {
|
||||
state.database.as_ref().state_root_with_updates(hashed_state.clone()).inspect_err(
|
||||
|err| {
|
||||
warn!(target: "payload_builder",
|
||||
parent_header=%ctx.parent().hash(),
|
||||
%err,
|
||||
"failed to calculate state root for payload"
|
||||
);
|
||||
},
|
||||
)?
|
||||
state_provider.state_root_with_updates(hashed_state.clone()).inspect_err(|err| {
|
||||
warn!(target: "payload_builder",
|
||||
parent_header=%ctx.parent().hash(),
|
||||
%err,
|
||||
"failed to calculate state root for payload"
|
||||
);
|
||||
})?
|
||||
};
|
||||
|
||||
// create the block header
|
||||
|
||||
Reference in New Issue
Block a user