Skip to content

Commit 9777934

Browse files
committed
Hasher abstraction
1 parent 23cbf55 commit 9777934

File tree

2 files changed

+29
-10
lines changed

2 files changed

+29
-10
lines changed

crates/op-rbuilder/src/payload_builder_vanilla.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use crate::provider::{BuilderStateProviderFactory, BuilderStateRootProvider};
12
use crate::{
23
generator::{BlockCell, BlockPayloadJobGenerator, BuildArguments, PayloadBuilder},
34
metrics::OpRBuilderMetrics,
@@ -62,10 +63,7 @@ use reth_primitives_traits::Block;
6263
use reth_primitives_traits::RecoveredBlock;
6364
use reth_primitives_traits::SignedTransaction;
6465
use reth_provider::CanonStateSubscriptions;
65-
use reth_provider::{
66-
HashedPostStateProvider, ProviderError, StateRootProvider,
67-
StorageRootProvider,
68-
};
66+
use reth_provider::{HashedPostStateProvider, ProviderError, StorageRootProvider};
6967
use reth_revm::database::StateProviderDatabase;
7068
use reth_transaction_pool::BestTransactionsAttributes;
7169
use reth_transaction_pool::PoolTransaction;
@@ -80,7 +78,6 @@ use std::{fmt::Display, sync::Arc, time::Instant};
8078
use tokio_util::sync::CancellationToken;
8179
use tracing::{error, info, trace, warn};
8280
use url::Url;
83-
use crate::provider::BuilderStateProviderFactory;
8481

8582
#[derive(Debug, Clone, Default)]
8683
#[non_exhaustive]
@@ -317,7 +314,9 @@ impl<Pool, Client, EvmConfig, N: NodePrimitives>
317314
impl<EvmConfig, Pool, Client, N, Txs> PayloadBuilder
318315
for OpPayloadBuilderVanilla<Pool, Client, EvmConfig, N, Txs>
319316
where
320-
Client: BuilderStateProviderFactory + ChainSpecProvider<ChainSpec: EthChainSpec + OpHardforks> + Clone,
317+
Client: BuilderStateProviderFactory
318+
+ ChainSpecProvider<ChainSpec: EthChainSpec + OpHardforks>
319+
+ Clone,
321320
N: OpPayloadPrimitives<_TX = OpTransactionSigned>,
322321
Pool: TransactionPool<Transaction: PoolTransaction<Consensus = N::SignedTx>>,
323322
EvmConfig: ConfigureEvmFor<N>,
@@ -632,7 +631,7 @@ impl<Txs> OpBuilder<'_, Txs> {
632631
N: OpPayloadPrimitives<_TX = OpTransactionSigned>,
633632
Txs: PayloadTransactions<Transaction: PoolTransaction<Consensus = N::SignedTx>>,
634633
DB: Database<Error = ProviderError> + AsRef<P>,
635-
P: StateRootProvider + HashedPostStateProvider + StorageRootProvider,
634+
P: BuilderStateRootProvider + HashedPostStateProvider + StorageRootProvider,
636635
{
637636
let ExecutedPayload {
638637
info,

crates/op-rbuilder/src/provider/mod.rs

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
use alloy_primitives::BlockHash;
2-
use reth_provider::{ProviderResult, StateProviderBox, StateProviderFactory};
1+
use alloy_primitives::{BlockHash, B256};
2+
use reth_provider::{ProviderResult, StateProviderBox, StateProviderFactory, StateRootProvider};
3+
use reth_trie::updates::TrieUpdates;
4+
use reth_trie::HashedPostState;
35

46
/// Main trait to interact with the chain data.
57
/// Allows to create different backends for chain data access without implementing lots of interfaces as would happen with reth_provider::StateProviderFactory
@@ -11,8 +13,26 @@ pub trait BuilderStateProviderFactory: Send + Sync {
1113
fn state_by_block_hash(&self, block: BlockHash) -> ProviderResult<StateProviderBox>;
1214
}
1315

14-
impl <T: StateProviderFactory> BuilderStateProviderFactory for T {
16+
impl<T: StateProviderFactory> BuilderStateProviderFactory for T {
1517
fn state_by_block_hash(&self, block: BlockHash) -> ProviderResult<StateProviderBox> {
1618
StateProviderFactory::state_by_block_hash(self, block)
1719
}
1820
}
21+
22+
pub trait BuilderStateRootProvider: Send + Sync {
23+
/// Returns the state root of the `HashedPostState` on top of the current state with trie
24+
/// updates to be committed to the database.
25+
fn state_root_with_updates(
26+
&self,
27+
hashed_state: HashedPostState,
28+
) -> ProviderResult<(B256, TrieUpdates)>;
29+
}
30+
31+
impl<T: StateRootProvider> BuilderStateRootProvider for T {
32+
fn state_root_with_updates(
33+
&self,
34+
hashed_state: HashedPostState,
35+
) -> ProviderResult<(B256, TrieUpdates)> {
36+
StateRootProvider::state_root_with_updates(self, hashed_state)
37+
}
38+
}

0 commit comments

Comments
 (0)