From 223f8ae0f77c2c554efda34e3ecf859da613841a Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Mon, 29 Jul 2024 14:54:43 +0200 Subject: [PATCH] chore: move pending_with_provider to a struct fn (#9850) --- .../src/providers/blockchain_provider.rs | 19 ++-------- crates/storage/provider/src/providers/mod.rs | 37 ++++++++++--------- .../storage/provider/src/test_utils/mock.rs | 13 ++----- .../storage/provider/src/test_utils/noop.rs | 7 ---- crates/storage/storage-api/src/state.rs | 7 ---- 5 files changed, 27 insertions(+), 56 deletions(-) diff --git a/crates/storage/provider/src/providers/blockchain_provider.rs b/crates/storage/provider/src/providers/blockchain_provider.rs index 03c69e5e55..01a3a79251 100644 --- a/crates/storage/provider/src/providers/blockchain_provider.rs +++ b/crates/storage/provider/src/providers/blockchain_provider.rs @@ -1,9 +1,8 @@ use crate::{ - providers::{BundleStateProvider, StaticFileProvider}, - AccountReader, BlockHashReader, BlockIdReader, BlockNumReader, BlockReader, BlockReaderIdExt, - BlockSource, CanonChainTracker, CanonStateNotifications, CanonStateSubscriptions, - ChainSpecProvider, ChangeSetReader, DatabaseProviderFactory, DatabaseProviderRO, - EvmEnvProvider, FullExecutionDataProvider, HeaderProvider, ProviderError, ProviderFactory, + providers::StaticFileProvider, AccountReader, BlockHashReader, BlockIdReader, BlockNumReader, + BlockReader, BlockReaderIdExt, BlockSource, CanonChainTracker, CanonStateNotifications, + CanonStateSubscriptions, ChainSpecProvider, ChangeSetReader, DatabaseProviderFactory, + DatabaseProviderRO, EvmEnvProvider, HeaderProvider, ProviderError, ProviderFactory, PruneCheckpointReader, ReceiptProvider, ReceiptProviderIdExt, RequestsProvider, StageCheckpointReader, StateProviderBox, StateProviderFactory, StaticFileProviderFactory, TransactionVariant, TransactionsProvider, WithdrawalsProvider, @@ -646,16 +645,6 @@ where } Ok(None) } - - fn pending_with_provider( - &self, - bundle_state_data: Box, - ) -> ProviderResult { - let state_provider = self.pending()?; - - let bundle_state_provider = BundleStateProvider::new(state_provider, bundle_state_data); - Ok(Box::new(bundle_state_provider)) - } } impl CanonChainTracker for BlockchainProvider2 diff --git a/crates/storage/provider/src/providers/mod.rs b/crates/storage/provider/src/providers/mod.rs index 94deccafde..1728c5e4b0 100644 --- a/crates/storage/provider/src/providers/mod.rs +++ b/crates/storage/provider/src/providers/mod.rs @@ -123,12 +123,7 @@ where None => Err(ProviderError::HeaderNotFound(best.best_number.into())), } } -} -impl BlockchainProvider -where - DB: Database, -{ /// Ensures that the given block number is canonical (synced) /// /// This is a helper for guarding the [`HistoricalStateProvider`] against block numbers that are @@ -148,6 +143,26 @@ where } } +impl BlockchainProvider +where + Self: StateProviderFactory, + DB: Database, +{ + /// Return a [`StateProviderBox`] that contains bundle state data provider. + /// Used to inspect or execute transaction on the pending state. + fn pending_with_provider( + &self, + bundle_state_data: Box, + ) -> ProviderResult { + let canonical_fork = bundle_state_data.canonical_fork(); + trace!(target: "providers::blockchain", ?canonical_fork, "Returning post state provider"); + + let state_provider = self.history_by_block_hash(canonical_fork.hash)?; + let bundle_state_provider = BundleStateProvider::new(state_provider, bundle_state_data); + Ok(Box::new(bundle_state_provider)) + } +} + impl DatabaseProviderFactory for BlockchainProvider where DB: Database, @@ -663,18 +678,6 @@ where } Ok(None) } - - fn pending_with_provider( - &self, - bundle_state_data: Box, - ) -> ProviderResult { - let canonical_fork = bundle_state_data.canonical_fork(); - trace!(target: "providers::blockchain", ?canonical_fork, "Returning post state provider"); - - let state_provider = self.history_by_block_hash(canonical_fork.hash)?; - let bundle_state_provider = BundleStateProvider::new(state_provider, bundle_state_data); - Ok(Box::new(bundle_state_provider)) - } } impl BlockchainTreeEngine for BlockchainProvider diff --git a/crates/storage/provider/src/test_utils/mock.rs b/crates/storage/provider/src/test_utils/mock.rs index eb9a91bdcd..6325cce2e9 100644 --- a/crates/storage/provider/src/test_utils/mock.rs +++ b/crates/storage/provider/src/test_utils/mock.rs @@ -1,9 +1,9 @@ use crate::{ traits::{BlockSource, ReceiptProvider}, AccountReader, BlockHashReader, BlockIdReader, BlockNumReader, BlockReader, BlockReaderIdExt, - ChainSpecProvider, ChangeSetReader, EvmEnvProvider, FullExecutionDataProvider, HeaderProvider, - ReceiptProviderIdExt, RequestsProvider, StateProvider, StateProviderBox, StateProviderFactory, - StateRootProvider, TransactionVariant, TransactionsProvider, WithdrawalsProvider, + ChainSpecProvider, ChangeSetReader, EvmEnvProvider, HeaderProvider, ReceiptProviderIdExt, + RequestsProvider, StateProvider, StateProviderBox, StateProviderFactory, StateRootProvider, + TransactionVariant, TransactionsProvider, WithdrawalsProvider, }; use parking_lot::Mutex; use reth_chainspec::{ChainInfo, ChainSpec}; @@ -661,13 +661,6 @@ impl StateProviderFactory for MockEthProvider { fn pending_state_by_hash(&self, _block_hash: B256) -> ProviderResult> { Ok(Some(Box::new(self.clone()))) } - - fn pending_with_provider<'a>( - &'a self, - _bundle_state_data: Box, - ) -> ProviderResult { - Ok(Box::new(self.clone())) - } } impl WithdrawalsProvider for MockEthProvider { diff --git a/crates/storage/provider/src/test_utils/noop.rs b/crates/storage/provider/src/test_utils/noop.rs index ab4eba6668..3cd313699a 100644 --- a/crates/storage/provider/src/test_utils/noop.rs +++ b/crates/storage/provider/src/test_utils/noop.rs @@ -425,13 +425,6 @@ impl StateProviderFactory for NoopProvider { fn pending_state_by_hash(&self, _block_hash: B256) -> ProviderResult> { Ok(Some(Box::new(*self))) } - - fn pending_with_provider<'a>( - &'a self, - _bundle_state_data: Box, - ) -> ProviderResult { - Ok(Box::new(*self)) - } } impl StageCheckpointReader for NoopProvider { diff --git a/crates/storage/storage-api/src/state.rs b/crates/storage/storage-api/src/state.rs index c432d331b6..0147cb2ef9 100644 --- a/crates/storage/storage-api/src/state.rs +++ b/crates/storage/storage-api/src/state.rs @@ -172,13 +172,6 @@ pub trait StateProviderFactory: BlockIdReader + Send + Sync { /// /// If the block couldn't be found, returns `None`. fn pending_state_by_hash(&self, block_hash: B256) -> ProviderResult>; - - /// Return a [StateProvider] that contains bundle state data provider. - /// Used to inspect or execute transaction on the pending state. - fn pending_with_provider( - &self, - bundle_state_data: Box, - ) -> ProviderResult; } /// Blockchain trait provider that gives access to the blockchain state that is not yet committed