Skip to content

Commit 89aec4c

Browse files
committed
Hasher abstraction
1 parent 23cbf55 commit 89aec4c

File tree

3 files changed

+36
-16
lines changed

3 files changed

+36
-16
lines changed

crates/op-rbuilder/src/payload_builder.rs

+7-6
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,7 @@ use reth_primitives_traits::Block as _;
5050
use reth_primitives_traits::SignedTransaction;
5151
use reth_provider::CanonStateSubscriptions;
5252
use reth_provider::StorageRootProvider;
53-
use reth_provider::{
54-
HashedPostStateProvider, ProviderError, StateProviderFactory, StateRootProvider,
55-
};
53+
use reth_provider::{HashedPostStateProvider, ProviderError};
5654
use reth_revm::database::StateProviderDatabase;
5755
use reth_transaction_pool::PoolTransaction;
5856
use reth_transaction_pool::{BestTransactionsAttributes, TransactionPool};
@@ -77,6 +75,7 @@ use tokio_tungstenite::accept_async;
7775
use tokio_tungstenite::WebSocketStream;
7876
use url::Url;
7977

78+
use crate::provider::{BuilderStateProviderFactory, BuilderStateRootProvider};
8079
use serde::{Deserialize, Serialize};
8180

8281
#[derive(Debug, Serialize, Deserialize)]
@@ -312,7 +311,7 @@ impl<Pool, Client, EvmConfig, N: NodePrimitives> OpPayloadBuilder<Pool, Client,
312311
impl<Pool, Client, EvmConfig, N> OpPayloadBuilder<Pool, Client, EvmConfig, N>
313312
where
314313
Pool: TransactionPool<Transaction: PoolTransaction<Consensus = N::SignedTx>>,
315-
Client: StateProviderFactory + ChainSpecProvider<ChainSpec: EthChainSpec + OpHardforks>,
314+
Client: BuilderStateProviderFactory + ChainSpecProvider<ChainSpec: EthChainSpec + OpHardforks>,
316315
N: OpPayloadPrimitives<_TX = OpTransactionSigned>,
317316
EvmConfig: ConfigureEvmFor<N>,
318317
{
@@ -463,7 +462,9 @@ where
463462

464463
impl<EvmConfig, Pool, Client, N> PayloadBuilder for OpPayloadBuilder<Pool, Client, EvmConfig, N>
465464
where
466-
Client: StateProviderFactory + ChainSpecProvider<ChainSpec: EthChainSpec + OpHardforks> + Clone,
465+
Client: BuilderStateProviderFactory
466+
+ ChainSpecProvider<ChainSpec: EthChainSpec + OpHardforks>
467+
+ Clone,
467468
N: OpPayloadPrimitives<_TX = OpTransactionSigned>,
468469
Pool: TransactionPool<Transaction: PoolTransaction<Consensus = N::SignedTx>>,
469470
EvmConfig: ConfigureEvmFor<N>,
@@ -490,7 +491,7 @@ where
490491
ChainSpec: EthChainSpec + OpHardforks,
491492
N: OpPayloadPrimitives<_TX = OpTransactionSigned>,
492493
DB: Database<Error = ProviderError> + AsRef<P>,
493-
P: StateRootProvider + HashedPostStateProvider + StorageRootProvider,
494+
P: BuilderStateRootProvider + HashedPostStateProvider + StorageRootProvider,
494495
{
495496
let withdrawals_root = ctx.commit_withdrawals(&mut state)?;
496497

crates/op-rbuilder/src/payload_builder_vanilla.rs

+6-7
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

+23-3
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)