diff --git a/bin/reth/src/chain/import.rs b/bin/reth/src/chain/import.rs index c0cb2543b..984a34f8c 100644 --- a/bin/reth/src/chain/import.rs +++ b/bin/reth/src/chain/import.rs @@ -114,7 +114,7 @@ impl ImportCommand { debug!(target: "reth::cli", ?tip, "Tip manually set"); let factory = ProviderFactory::new(&db, self.chain.clone()); - let provider = factory.provider().map_err(PipelineError::Interface)?; + let provider = factory.provider()?; let latest_block_number = provider.get_stage_checkpoint(StageId::Finish)?.map(|ch| ch.block_number); diff --git a/bin/reth/src/debug_cmd/execution.rs b/bin/reth/src/debug_cmd/execution.rs index ad74f0bd8..fee6390d2 100644 --- a/bin/reth/src/debug_cmd/execution.rs +++ b/bin/reth/src/debug_cmd/execution.rs @@ -34,7 +34,7 @@ use reth_stages::{ ExecutionStage, ExecutionStageThresholds, HeaderSyncMode, SenderRecoveryStage, TotalDifficultyStage, }, - Pipeline, PipelineError, StageSet, + Pipeline, StageSet, }; use reth_tasks::TaskExecutor; use std::{ @@ -234,7 +234,7 @@ impl Command { )?; let factory = ProviderFactory::new(&db, self.chain.clone()); - let provider = factory.provider().map_err(PipelineError::Interface)?; + let provider = factory.provider()?; let latest_block_number = provider.get_stage_checkpoint(StageId::Finish)?.map(|ch| ch.block_number); @@ -269,8 +269,7 @@ impl Command { // Unwind the pipeline without committing. { factory - .provider_rw() - .map_err(PipelineError::Interface)? + .provider_rw()? .take_block_and_execution_range(&self.chain, next_block..=target_block)?; } diff --git a/bin/reth/src/debug_cmd/in_memory_merkle.rs b/bin/reth/src/debug_cmd/in_memory_merkle.rs index 5ab78d9d9..81db51c5c 100644 --- a/bin/reth/src/debug_cmd/in_memory_merkle.rs +++ b/bin/reth/src/debug_cmd/in_memory_merkle.rs @@ -194,7 +194,7 @@ impl Command { provider_rw.insert_block(block.clone(), None, None)?; block_state.write_to_db(provider_rw.tx_ref(), OriginalValuesKnown::No)?; let storage_lists = provider_rw.changed_storages_with_range(block.number..=block.number)?; - let storages = provider_rw.plainstate_storages(storage_lists)?; + let storages = provider_rw.plain_state_storages(storage_lists)?; provider_rw.insert_storage_for_hashing(storages)?; let account_lists = provider_rw.changed_accounts_with_range(block.number..=block.number)?; let accounts = provider_rw.basic_accounts(account_lists)?; diff --git a/bin/reth/src/debug_cmd/merkle.rs b/bin/reth/src/debug_cmd/merkle.rs index 4a982e816..dc5f98e59 100644 --- a/bin/reth/src/debug_cmd/merkle.rs +++ b/bin/reth/src/debug_cmd/merkle.rs @@ -28,7 +28,7 @@ use reth_stages::{ AccountHashingStage, ExecutionStage, ExecutionStageThresholds, MerkleStage, StorageHashingStage, MERKLE_STAGE_DEFAULT_CLEAN_THRESHOLD, }, - ExecInput, PipelineError, Stage, + ExecInput, Stage, }; use reth_tasks::TaskExecutor; use std::{ @@ -121,7 +121,7 @@ impl Command { // initialize the database let db = Arc::new(init_db(db_path, self.db.log_level)?); let factory = ProviderFactory::new(&db, self.chain.clone()); - let provider_rw = factory.provider_rw().map_err(PipelineError::Interface)?; + let provider_rw = factory.provider_rw()?; // Configure and build network let network_secret_path = diff --git a/bin/reth/src/init.rs b/bin/reth/src/init.rs index 3ebc5d407..6b3d63804 100644 --- a/bin/reth/src/init.rs +++ b/bin/reth/src/init.rs @@ -5,14 +5,14 @@ use reth_db::{ tables, transaction::{DbTx, DbTxMut}, }; -use reth_interfaces::{db::DatabaseError, RethError}; +use reth_interfaces::{db::DatabaseError, provider::ProviderResult}; use reth_primitives::{ stage::StageId, Account, Bytecode, ChainSpec, Receipts, StorageEntry, B256, U256, }; use reth_provider::{ bundle_state::{BundleStateInit, RevertsInit}, BundleStateWithReceipts, DatabaseProviderRW, HashingWriter, HistoryWriter, OriginalValuesKnown, - ProviderFactory, + ProviderError, ProviderFactory, }; use std::{ collections::{BTreeMap, HashMap}, @@ -33,13 +33,15 @@ pub enum InitDatabaseError { database_hash: B256, }, - /// Low-level database error. + /// Provider error. #[error(transparent)] - DBError(#[from] DatabaseError), + Provider(#[from] ProviderError), +} - /// Internal error. - #[error(transparent)] - InternalError(#[from] RethError), +impl From for InitDatabaseError { + fn from(error: DatabaseError) -> Self { + Self::Provider(ProviderError::Database(error)) + } } /// Write the genesis block if it has not already been written @@ -94,7 +96,7 @@ pub fn init_genesis( pub fn insert_genesis_state( tx: &>::TXMut, genesis: &reth_primitives::Genesis, -) -> Result<(), InitDatabaseError> { +) -> ProviderResult<()> { let mut state_init: BundleStateInit = HashMap::new(); let mut reverts_init = HashMap::new(); let mut contracts: HashMap = HashMap::new(); @@ -160,7 +162,7 @@ pub fn insert_genesis_state( pub fn insert_genesis_hashes( provider: &DatabaseProviderRW<'_, &DB>, genesis: &reth_primitives::Genesis, -) -> Result<(), InitDatabaseError> { +) -> ProviderResult<()> { // insert and hash accounts to hashing table let alloc_accounts = genesis.alloc.clone().into_iter().map(|(addr, account)| (addr, Some(account.into()))); @@ -184,7 +186,7 @@ pub fn insert_genesis_hashes( pub fn insert_genesis_history( provider: &DatabaseProviderRW<'_, &DB>, genesis: &reth_primitives::Genesis, -) -> Result<(), InitDatabaseError> { +) -> ProviderResult<()> { let account_transitions = genesis.alloc.keys().map(|addr| (*addr, vec![0])).collect::>(); provider.insert_account_history_index(account_transitions)?; @@ -204,7 +206,7 @@ pub fn insert_genesis_history( pub fn insert_genesis_header( tx: &>::TXMut, chain: Arc, -) -> Result<(), InitDatabaseError> { +) -> ProviderResult<()> { let header = chain.sealed_genesis_header(); tx.put::(0, header.hash)?; diff --git a/bin/reth/src/node/mod.rs b/bin/reth/src/node/mod.rs index 3e6b9cd6a..3db510564 100644 --- a/bin/reth/src/node/mod.rs +++ b/bin/reth/src/node/mod.rs @@ -1048,7 +1048,6 @@ mod tests { use super::*; use crate::args::utils::SUPPORTED_CHAINS; use reth_discv4::DEFAULT_DISCOVERY_PORT; - use reth_primitives::DEV; use std::{ net::{IpAddr, Ipv4Addr}, path::Path, @@ -1154,7 +1153,7 @@ mod tests { #[cfg(not(feature = "optimism"))] // dev mode not yet supported in op-reth fn parse_dev() { let cmd = NodeCommand::<()>::parse_from(["reth", "--dev"]); - let chain = DEV.clone(); + let chain = reth_primitives::DEV.clone(); assert_eq!(cmd.chain.chain, chain.chain); assert_eq!(cmd.chain.genesis_hash, chain.genesis_hash); assert_eq!( diff --git a/bin/reth/src/stage/run.rs b/bin/reth/src/stage/run.rs index af49f3e4f..c66792668 100644 --- a/bin/reth/src/stage/run.rs +++ b/bin/reth/src/stage/run.rs @@ -24,7 +24,7 @@ use reth_stages::{ IndexAccountHistoryStage, IndexStorageHistoryStage, MerkleStage, SenderRecoveryStage, StorageHashingStage, TransactionLookupStage, }, - ExecInput, ExecOutput, PipelineError, Stage, UnwindInput, + ExecInput, ExecOutput, Stage, UnwindInput, }; use std::{any::Any, net::SocketAddr, path::PathBuf, sync::Arc}; use tracing::*; @@ -125,7 +125,7 @@ impl Command { info!(target: "reth::cli", "Database opened"); let factory = ProviderFactory::new(&db, self.chain.clone()); - let mut provider_rw = factory.provider_rw().map_err(PipelineError::Interface)?; + let mut provider_rw = factory.provider_rw()?; if let Some(listen_addr) = self.metrics { info!(target: "reth::cli", "Starting metrics endpoint at {}", listen_addr); @@ -247,7 +247,7 @@ impl Command { if self.commit { provider_rw.commit()?; - provider_rw = factory.provider_rw().map_err(PipelineError::Interface)?; + provider_rw = factory.provider_rw()?; } } } @@ -264,7 +264,7 @@ impl Command { if self.commit { provider_rw.commit()?; - provider_rw = factory.provider_rw().map_err(PipelineError::Interface)?; + provider_rw = factory.provider_rw()?; } } diff --git a/crates/consensus/beacon/src/engine/mod.rs b/crates/consensus/beacon/src/engine/mod.rs index 7497044cf..b7242f335 100644 --- a/crates/consensus/beacon/src/engine/mod.rs +++ b/crates/consensus/beacon/src/engine/mod.rs @@ -355,7 +355,7 @@ where inconsistent_stage_checkpoint = stage_checkpoint, "Pipeline sync progress is inconsistent" ); - return self.blockchain.block_hash(first_stage_checkpoint) + return Ok(self.blockchain.block_hash(first_stage_checkpoint)?) } } @@ -1670,7 +1670,7 @@ where }, Err(error) => { error!(target: "consensus::engine", ?error, "Error getting canonical header for continuous sync"); - return Some(Err(error.into())) + return Some(Err(RethError::Provider(error).into())) } }; self.blockchain.set_canonical_head(max_header); @@ -1836,7 +1836,10 @@ where cx, EngineContext { tip_block_number: this.blockchain.canonical_tip().number, - finalized_block_number: this.blockchain.finalized_block_number()?, + finalized_block_number: this + .blockchain + .finalized_block_number() + .map_err(RethError::Provider)?, }, )? { this.on_hook_result(result)?; @@ -1908,7 +1911,10 @@ where cx, EngineContext { tip_block_number: this.blockchain.canonical_tip().number, - finalized_block_number: this.blockchain.finalized_block_number()?, + finalized_block_number: this + .blockchain + .finalized_block_number() + .map_err(RethError::Provider)?, }, this.sync.is_pipeline_active(), )? { diff --git a/crates/consensus/common/src/validation.rs b/crates/consensus/common/src/validation.rs index 5af6f36a4..8ba4e535f 100644 --- a/crates/consensus/common/src/validation.rs +++ b/crates/consensus/common/src/validation.rs @@ -484,8 +484,8 @@ mod tests { use super::*; use mockall::mock; use reth_interfaces::{ + provider::ProviderResult, test_utils::generators::{self, Rng}, - RethResult, }; use reth_primitives::{ constants::eip4844::DATA_GAS_PER_BLOB, hex_literal::hex, proofs, Account, Address, @@ -498,13 +498,13 @@ mod tests { WithdrawalsProvider {} impl WithdrawalsProvider for WithdrawalsProvider { - fn latest_withdrawal(&self) -> RethResult> ; + fn latest_withdrawal(&self) -> ProviderResult> ; fn withdrawals_by_block( &self, _id: BlockHashOrNumber, _timestamp: u64, - ) -> RethResult>> ; + ) -> ProviderResult>> ; } } @@ -537,37 +537,43 @@ mod tests { } impl AccountReader for Provider { - fn basic_account(&self, _address: Address) -> RethResult> { + fn basic_account(&self, _address: Address) -> ProviderResult> { Ok(self.account) } } impl HeaderProvider for Provider { - fn is_known(&self, _block_hash: &BlockHash) -> RethResult { + fn is_known(&self, _block_hash: &BlockHash) -> ProviderResult { Ok(self.is_known) } - fn header(&self, _block_number: &BlockHash) -> RethResult> { + fn header(&self, _block_number: &BlockHash) -> ProviderResult> { Ok(self.parent.clone()) } - fn header_by_number(&self, _num: u64) -> RethResult> { + fn header_by_number(&self, _num: u64) -> ProviderResult> { Ok(self.parent.clone()) } - fn header_td(&self, _hash: &BlockHash) -> RethResult> { + fn header_td(&self, _hash: &BlockHash) -> ProviderResult> { Ok(None) } - fn header_td_by_number(&self, _number: BlockNumber) -> RethResult> { + fn header_td_by_number(&self, _number: BlockNumber) -> ProviderResult> { Ok(None) } - fn headers_range(&self, _range: impl RangeBounds) -> RethResult> { + fn headers_range( + &self, + _range: impl RangeBounds, + ) -> ProviderResult> { Ok(vec![]) } - fn sealed_header(&self, _block_number: BlockNumber) -> RethResult> { + fn sealed_header( + &self, + _block_number: BlockNumber, + ) -> ProviderResult> { Ok(None) } @@ -575,7 +581,7 @@ mod tests { &self, _range: impl RangeBounds, _predicate: impl FnMut(&SealedHeader) -> bool, - ) -> RethResult> { + ) -> ProviderResult> { Ok(vec![]) } } @@ -585,11 +591,11 @@ mod tests { &self, _id: BlockHashOrNumber, _timestamp: u64, - ) -> RethResult>> { + ) -> ProviderResult>> { self.withdrawals_provider.withdrawals_by_block(_id, _timestamp) } - fn latest_withdrawal(&self) -> RethResult> { + fn latest_withdrawal(&self) -> ProviderResult> { self.withdrawals_provider.latest_withdrawal() } } diff --git a/crates/interfaces/src/blockchain_tree/error.rs b/crates/interfaces/src/blockchain_tree/error.rs index 695233d2a..ac7d45527 100644 --- a/crates/interfaces/src/blockchain_tree/error.rs +++ b/crates/interfaces/src/blockchain_tree/error.rs @@ -3,6 +3,7 @@ use crate::{ consensus::ConsensusError, executor::{BlockExecutionError, BlockValidationError}, + provider::ProviderError, }; use reth_primitives::{BlockHash, BlockNumber, SealedBlock}; @@ -201,6 +202,9 @@ pub enum InsertBlockErrorKind { /// Block violated tree invariants. #[error(transparent)] Tree(#[from] BlockchainTreeError), + /// Provider error. + #[error(transparent)] + Provider(#[from] ProviderError), /// An internal error occurred, like interacting with the database. #[error(transparent)] Internal(#[from] Box), @@ -260,7 +264,7 @@ impl InsertBlockErrorKind { BlockchainTreeError::BlockBufferingFailed { .. } => false, } } - InsertBlockErrorKind::Internal(_) => { + InsertBlockErrorKind::Provider(_) | InsertBlockErrorKind::Internal(_) => { // any other error, such as database errors, are considered internal errors false } diff --git a/crates/interfaces/src/error.rs b/crates/interfaces/src/error.rs index e40a1abd5..ef14d1211 100644 --- a/crates/interfaces/src/error.rs +++ b/crates/interfaces/src/error.rs @@ -33,12 +33,6 @@ impl From for RethError { } } -impl From for RethError { - fn from(err: reth_nippy_jar::NippyJarError) -> Self { - RethError::Custom(err.to_string()) - } -} - impl From for RethError { fn from(err: reth_primitives::fs::FsPathError) -> Self { RethError::Custom(err.to_string()) diff --git a/crates/interfaces/src/provider.rs b/crates/interfaces/src/provider.rs index a5a72c942..f5f0a7fcc 100644 --- a/crates/interfaces/src/provider.rs +++ b/crates/interfaces/src/provider.rs @@ -5,12 +5,21 @@ use reth_primitives::{ use std::path::PathBuf; use thiserror::Error; +/// Provider result type. +pub type ProviderResult = Result; + /// Bundled errors variants thrown by various providers. #[derive(Clone, Debug, Error, PartialEq, Eq)] pub enum ProviderError { /// Database error. #[error(transparent)] Database(#[from] crate::db::DatabaseError), + /// Nippy jar error. + #[error("nippy jar error: {0}")] + NippyJar(String), + /// Error when recovering the sender for a transaction + #[error("failed to recover sender for transaction")] + SenderRecoveryError, /// The header number was not found for the given block hash. #[error("block hash {0} does not exist in Headers table")] BlockHashNotFound(BlockHash), @@ -107,6 +116,12 @@ pub enum ProviderError { MissingSnapshotTx(SnapshotSegment, TxNumber), } +impl From for ProviderError { + fn from(err: reth_nippy_jar::NippyJarError) -> Self { + ProviderError::NippyJar(err.to_string()) + } +} + /// A root mismatch error at a given block height. #[derive(Clone, Debug, Error, PartialEq, Eq)] #[error("root mismatch at #{block_number} ({block_hash}): {root}")] diff --git a/crates/payload/builder/src/error.rs b/crates/payload/builder/src/error.rs index 7d8360864..d42366d12 100644 --- a/crates/payload/builder/src/error.rs +++ b/crates/payload/builder/src/error.rs @@ -1,6 +1,6 @@ //! Error types emitted by types or implementations of this crate. -use reth_interfaces::RethError; +use reth_interfaces::{provider::ProviderError, RethError}; use reth_primitives::{revm_primitives::EVMError, B256}; use reth_transaction_pool::BlobStoreError; use tokio::sync::oneshot; @@ -32,6 +32,12 @@ pub enum PayloadBuilderError { Optimism(#[from] OptimismPayloadBuilderError), } +impl From for PayloadBuilderError { + fn from(error: ProviderError) -> Self { + PayloadBuilderError::Internal(RethError::Provider(error)) + } +} + /// Optimism specific payload building errors. #[derive(Debug, thiserror::Error)] pub enum OptimismPayloadBuilderError { diff --git a/crates/prune/src/segments/mod.rs b/crates/prune/src/segments/mod.rs index 82a44f6b0..62fda6195 100644 --- a/crates/prune/src/segments/mod.rs +++ b/crates/prune/src/segments/mod.rs @@ -22,7 +22,7 @@ pub use transactions::Transactions; use crate::PrunerError; use reth_db::database::Database; -use reth_interfaces::RethResult; +use reth_interfaces::{provider::ProviderResult, RethResult}; use reth_primitives::{BlockNumber, PruneCheckpoint, PruneMode, PruneSegment, TxNumber}; use reth_provider::{BlockReader, DatabaseProviderRW, PruneCheckpointWriter}; use std::ops::RangeInclusive; @@ -54,7 +54,7 @@ pub trait Segment: Debug + Send + Sync { &self, provider: &DatabaseProviderRW<'_, DB>, checkpoint: PruneCheckpoint, - ) -> RethResult<()> { + ) -> ProviderResult<()> { provider.save_prune_checkpoint(self.segment(), checkpoint) } } diff --git a/crates/prune/src/segments/receipts.rs b/crates/prune/src/segments/receipts.rs index b260cf78b..fb97897e0 100644 --- a/crates/prune/src/segments/receipts.rs +++ b/crates/prune/src/segments/receipts.rs @@ -3,7 +3,7 @@ use crate::{ PrunerError, }; use reth_db::{database::Database, tables}; -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_primitives::{PruneCheckpoint, PruneMode, PruneSegment}; use reth_provider::{DatabaseProviderRW, PruneCheckpointWriter, TransactionsProvider}; use tracing::{instrument, trace}; @@ -73,7 +73,7 @@ impl Segment for Receipts { &self, provider: &DatabaseProviderRW<'_, DB>, checkpoint: PruneCheckpoint, - ) -> RethResult<()> { + ) -> ProviderResult<()> { provider.save_prune_checkpoint(PruneSegment::Receipts, checkpoint)?; // `PruneSegment::Receipts` overrides `PruneSegment::ContractLogs`, so we can preemptively diff --git a/crates/revm/src/processor.rs b/crates/revm/src/processor.rs index baf8b1595..f78c04117 100644 --- a/crates/revm/src/processor.rs +++ b/crates/revm/src/processor.rs @@ -557,7 +557,7 @@ pub fn verify_receipt<'a>( #[cfg(test)] mod tests { use super::*; - use reth_interfaces::RethResult; + use reth_interfaces::provider::ProviderResult; use reth_primitives::{ bytes, constants::{BEACON_ROOTS_ADDRESS, SYSTEM_ADDRESS}, @@ -599,14 +599,13 @@ mod tests { } impl AccountReader for StateProviderTest { - fn basic_account(&self, address: Address) -> RethResult> { - let ret = Ok(self.accounts.get(&address).map(|(_, acc)| *acc)); - ret + fn basic_account(&self, address: Address) -> ProviderResult> { + Ok(self.accounts.get(&address).map(|(_, acc)| *acc)) } } impl BlockHashReader for StateProviderTest { - fn block_hash(&self, number: u64) -> RethResult> { + fn block_hash(&self, number: u64) -> ProviderResult> { Ok(self.block_hash.get(&number).cloned()) } @@ -614,7 +613,7 @@ mod tests { &self, start: BlockNumber, end: BlockNumber, - ) -> RethResult> { + ) -> ProviderResult> { let range = start..end; Ok(self .block_hash @@ -625,7 +624,7 @@ mod tests { } impl StateRootProvider for StateProviderTest { - fn state_root(&self, _bundle_state: &BundleStateWithReceipts) -> RethResult { + fn state_root(&self, _bundle_state: &BundleStateWithReceipts) -> ProviderResult { unimplemented!("state root computation is not supported") } } @@ -635,18 +634,18 @@ mod tests { &self, account: Address, storage_key: StorageKey, - ) -> RethResult> { + ) -> ProviderResult> { Ok(self .accounts .get(&account) .and_then(|(storage, _)| storage.get(&storage_key).cloned())) } - fn bytecode_by_hash(&self, code_hash: B256) -> RethResult> { + fn bytecode_by_hash(&self, code_hash: B256) -> ProviderResult> { Ok(self.contracts.get(&code_hash).cloned()) } - fn proof(&self, _address: Address, _keys: &[B256]) -> RethResult { + fn proof(&self, _address: Address, _keys: &[B256]) -> ProviderResult { unimplemented!("proof generation is not supported") } } diff --git a/crates/rpc/rpc/src/eth/api/mod.rs b/crates/rpc/rpc/src/eth/api/mod.rs index 39b241beb..b30b4db56 100644 --- a/crates/rpc/rpc/src/eth/api/mod.rs +++ b/crates/rpc/rpc/src/eth/api/mod.rs @@ -226,12 +226,12 @@ where /// Returns the state at the given block number pub fn state_at_hash(&self, block_hash: B256) -> RethResult> { - self.provider().history_by_block_hash(block_hash) + Ok(self.provider().history_by_block_hash(block_hash)?) } /// Returns the _latest_ state pub fn latest_state(&self) -> RethResult> { - self.provider().latest() + Ok(self.provider().latest()?) } } @@ -364,7 +364,7 @@ where /// Returns the current info for the chain fn chain_info(&self) -> RethResult { - self.provider().chain_info() + Ok(self.provider().chain_info()?) } fn accounts(&self) -> Vec
{ diff --git a/crates/rpc/rpc/src/eth/cache/mod.rs b/crates/rpc/rpc/src/eth/cache/mod.rs index f5c061b71..fb1f65d1d 100644 --- a/crates/rpc/rpc/src/eth/cache/mod.rs +++ b/crates/rpc/rpc/src/eth/cache/mod.rs @@ -1,7 +1,7 @@ //! Async caching support for eth RPC use futures::{future::Either, Stream, StreamExt}; -use reth_interfaces::{provider::ProviderError, RethResult}; +use reth_interfaces::provider::{ProviderError, ProviderResult}; use reth_primitives::{Block, Receipt, SealedBlock, TransactionSigned, B256}; use reth_provider::{ BlockReader, BlockSource, CanonStateNotification, EvmEnvProvider, StateProviderFactory, @@ -30,16 +30,17 @@ mod multi_consumer; pub use multi_consumer::MultiConsumerLruCache; /// The type that can send the response to a requested [Block] -type BlockResponseSender = oneshot::Sender>>; +type BlockResponseSender = oneshot::Sender>>; /// The type that can send the response to a requested [Block] -type BlockTransactionsResponseSender = oneshot::Sender>>>; +type BlockTransactionsResponseSender = + oneshot::Sender>>>; /// The type that can send the response to the requested receipts of a block. -type ReceiptsResponseSender = oneshot::Sender>>>; +type ReceiptsResponseSender = oneshot::Sender>>>; /// The type that can send the response to a requested env -type EnvResponseSender = oneshot::Sender>; +type EnvResponseSender = oneshot::Sender>; type BlockLruCache = MultiConsumerLruCache< B256, @@ -127,7 +128,7 @@ impl EthStateCache { /// Requests the [Block] for the block hash /// /// Returns `None` if the block does not exist. - pub(crate) async fn get_block(&self, block_hash: B256) -> RethResult> { + pub(crate) async fn get_block(&self, block_hash: B256) -> ProviderResult> { let (response_tx, rx) = oneshot::channel(); let _ = self.to_service.send(CacheAction::GetBlock { block_hash, response_tx }); rx.await.map_err(|_| ProviderError::CacheServiceUnavailable)? @@ -139,7 +140,7 @@ impl EthStateCache { pub(crate) async fn get_sealed_block( &self, block_hash: B256, - ) -> RethResult> { + ) -> ProviderResult> { Ok(self.get_block(block_hash).await?.map(|block| block.seal(block_hash))) } @@ -149,7 +150,7 @@ impl EthStateCache { pub(crate) async fn get_block_transactions( &self, block_hash: B256, - ) -> RethResult>> { + ) -> ProviderResult>> { let (response_tx, rx) = oneshot::channel(); let _ = self.to_service.send(CacheAction::GetBlockTransactions { block_hash, response_tx }); rx.await.map_err(|_| ProviderError::CacheServiceUnavailable)? @@ -159,7 +160,7 @@ impl EthStateCache { pub(crate) async fn get_transactions_and_receipts( &self, block_hash: B256, - ) -> RethResult, Vec)>> { + ) -> ProviderResult, Vec)>> { let transactions = self.get_block_transactions(block_hash); let receipts = self.get_receipts(block_hash); @@ -171,7 +172,10 @@ impl EthStateCache { /// Requests the [Receipt] for the block hash /// /// Returns `None` if the block was not found. - pub(crate) async fn get_receipts(&self, block_hash: B256) -> RethResult>> { + pub(crate) async fn get_receipts( + &self, + block_hash: B256, + ) -> ProviderResult>> { let (response_tx, rx) = oneshot::channel(); let _ = self.to_service.send(CacheAction::GetReceipts { block_hash, response_tx }); rx.await.map_err(|_| ProviderError::CacheServiceUnavailable)? @@ -181,7 +185,7 @@ impl EthStateCache { pub(crate) async fn get_block_and_receipts( &self, block_hash: B256, - ) -> RethResult)>> { + ) -> ProviderResult)>> { let block = self.get_sealed_block(block_hash); let receipts = self.get_receipts(block_hash); @@ -194,7 +198,7 @@ impl EthStateCache { /// /// Returns an error if the corresponding header (required for populating the envs) was not /// found. - pub(crate) async fn get_evm_env(&self, block_hash: B256) -> RethResult<(CfgEnv, BlockEnv)> { + pub(crate) async fn get_evm_env(&self, block_hash: B256) -> ProviderResult<(CfgEnv, BlockEnv)> { let (response_tx, rx) = oneshot::channel(); let _ = self.to_service.send(CacheAction::GetEnv { block_hash, response_tx }); rx.await.map_err(|_| ProviderError::CacheServiceUnavailable)? @@ -251,7 +255,7 @@ where Provider: StateProviderFactory + BlockReader + EvmEnvProvider + Clone + Unpin + 'static, Tasks: TaskSpawner + Clone + 'static, { - fn on_new_block(&mut self, block_hash: B256, res: RethResult>) { + fn on_new_block(&mut self, block_hash: B256, res: ProviderResult>) { if let Some(queued) = self.full_block_cache.remove(&block_hash) { // send the response to queued senders for tx in queued { @@ -274,7 +278,7 @@ where } } - fn on_new_receipts(&mut self, block_hash: B256, res: RethResult>>) { + fn on_new_receipts(&mut self, block_hash: B256, res: ProviderResult>>) { if let Some(queued) = self.receipts_cache.remove(&block_hash) { // send the response to queued senders for tx in queued { @@ -457,9 +461,9 @@ enum CacheAction { GetBlockTransactions { block_hash: B256, response_tx: BlockTransactionsResponseSender }, GetEnv { block_hash: B256, response_tx: EnvResponseSender }, GetReceipts { block_hash: B256, response_tx: ReceiptsResponseSender }, - BlockResult { block_hash: B256, res: RethResult> }, - ReceiptsResult { block_hash: B256, res: RethResult>> }, - EnvResult { block_hash: B256, res: Box> }, + BlockResult { block_hash: B256, res: ProviderResult> }, + ReceiptsResult { block_hash: B256, res: ProviderResult>> }, + EnvResult { block_hash: B256, res: Box> }, CacheNewCanonicalChain { blocks: Vec, receipts: Vec }, } diff --git a/crates/rpc/rpc/src/eth/filter.rs b/crates/rpc/rpc/src/eth/filter.rs index 3427a06fe..96cb687e6 100644 --- a/crates/rpc/rpc/src/eth/filter.rs +++ b/crates/rpc/rpc/src/eth/filter.rs @@ -11,9 +11,8 @@ use core::fmt; use async_trait::async_trait; use jsonrpsee::{core::RpcResult, server::IdProvider}; -use reth_interfaces::RethError; use reth_primitives::{BlockHashOrNumber, IntoRecoveredTransaction, Receipt, SealedBlock, TxHash}; -use reth_provider::{BlockIdReader, BlockReader, EvmEnvProvider}; +use reth_provider::{BlockIdReader, BlockReader, EvmEnvProvider, ProviderError}; use reth_rpc_api::EthFilterApiServer; use reth_rpc_types::{ Filter, FilterBlockOption, FilterChanges, FilterId, FilteredParams, Log, @@ -690,8 +689,8 @@ impl From for jsonrpsee::types::error::ErrorObject<'static> { } } -impl From for FilterError { - fn from(err: RethError) -> Self { +impl From for FilterError { + fn from(err: ProviderError) -> Self { FilterError::EthAPIError(err.into()) } } diff --git a/crates/rpc/rpc/src/result.rs b/crates/rpc/rpc/src/result.rs index d18759011..43ceb5d94 100644 --- a/crates/rpc/rpc/src/result.rs +++ b/crates/rpc/rpc/src/result.rs @@ -104,6 +104,7 @@ macro_rules! impl_to_rpc_result { impl_to_rpc_result!(PayloadError); impl_to_rpc_result!(reth_interfaces::RethError); +impl_to_rpc_result!(reth_interfaces::provider::ProviderError); impl_to_rpc_result!(reth_network_api::NetworkError); /// An extension to used to apply error conversions to various result types diff --git a/crates/snapshot/src/segments/headers.rs b/crates/snapshot/src/segments/headers.rs index 89fc009f9..d6852c73d 100644 --- a/crates/snapshot/src/segments/headers.rs +++ b/crates/snapshot/src/segments/headers.rs @@ -3,7 +3,7 @@ use reth_db::{ cursor::DbCursorRO, database::Database, snapshot::create_snapshot_T1_T2_T3, tables, transaction::DbTx, RawKey, RawTable, }; -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_primitives::{ snapshot::{Compression, Filters, SegmentConfig}, BlockNumber, SnapshotSegment, @@ -40,7 +40,7 @@ impl Segment for Headers { provider: &DatabaseProviderRO<'_, DB>, directory: impl AsRef, range: RangeInclusive, - ) -> RethResult<()> { + ) -> ProviderResult<()> { let range_len = range.clone().count(); let mut jar = prepare_jar::( provider, diff --git a/crates/snapshot/src/segments/mod.rs b/crates/snapshot/src/segments/mod.rs index 0603dbeed..ec9061ebc 100644 --- a/crates/snapshot/src/segments/mod.rs +++ b/crates/snapshot/src/segments/mod.rs @@ -12,7 +12,7 @@ pub use receipts::Receipts; use reth_db::{ cursor::DbCursorRO, database::Database, table::Table, transaction::DbTx, RawKey, RawTable, }; -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_nippy_jar::NippyJar; use reth_primitives::{ snapshot::{ @@ -34,7 +34,7 @@ pub trait Segment: Default { provider: &DatabaseProviderRO<'_, DB>, directory: impl AsRef, range: RangeInclusive, - ) -> RethResult<()>; + ) -> ProviderResult<()>; /// Returns this struct's [`SnapshotSegment`]. fn segment() -> SnapshotSegment; @@ -45,7 +45,7 @@ pub trait Segment: Default { provider: &DatabaseProviderRO<'_, DB>, range: &RangeInclusive, range_len: usize, - ) -> RethResult>> { + ) -> ProviderResult>> { let mut cursor = provider.tx_ref().cursor_read::>()?; Ok(cursor .walk_back(Some(RawKey::from(*range.end())))? @@ -64,8 +64,8 @@ pub(crate) fn prepare_jar( segment_config: SegmentConfig, block_range: RangeInclusive, total_rows: usize, - prepare_compression: impl Fn() -> RethResult>, -) -> RethResult> { + prepare_compression: impl Fn() -> ProviderResult>, +) -> ProviderResult> { let tx_range = provider.transaction_range_by_block_range(block_range.clone())?; let mut nippy_jar = NippyJar::new( COLUMNS, diff --git a/crates/snapshot/src/segments/receipts.rs b/crates/snapshot/src/segments/receipts.rs index 75e8aaa89..c40949a0d 100644 --- a/crates/snapshot/src/segments/receipts.rs +++ b/crates/snapshot/src/segments/receipts.rs @@ -1,6 +1,6 @@ use crate::segments::{prepare_jar, Segment}; use reth_db::{database::Database, snapshot::create_snapshot_T1, tables}; -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_primitives::{ snapshot::{Compression, Filters, SegmentConfig, SegmentHeader}, BlockNumber, SnapshotSegment, TxNumber, @@ -37,7 +37,7 @@ impl Segment for Receipts { provider: &DatabaseProviderRO<'_, DB>, directory: impl AsRef, block_range: RangeInclusive, - ) -> RethResult<()> { + ) -> ProviderResult<()> { let tx_range = provider.transaction_range_by_block_range(block_range.clone())?; let tx_range_len = tx_range.clone().count(); diff --git a/crates/snapshot/src/segments/transactions.rs b/crates/snapshot/src/segments/transactions.rs index b9cccfd20..4367f1ce0 100644 --- a/crates/snapshot/src/segments/transactions.rs +++ b/crates/snapshot/src/segments/transactions.rs @@ -1,6 +1,6 @@ use crate::segments::{prepare_jar, Segment}; use reth_db::{database::Database, snapshot::create_snapshot_T1, tables}; -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_primitives::{ snapshot::{Compression, Filters, SegmentConfig, SegmentHeader}, BlockNumber, SnapshotSegment, TxNumber, @@ -37,7 +37,7 @@ impl Segment for Transactions { provider: &DatabaseProviderRO<'_, DB>, directory: impl AsRef, block_range: RangeInclusive, - ) -> RethResult<()> { + ) -> ProviderResult<()> { let tx_range = provider.transaction_range_by_block_range(block_range.clone())?; let tx_range_len = tx_range.clone().count(); diff --git a/crates/stages/src/error.rs b/crates/stages/src/error.rs index 598e229a8..180a8ca5a 100644 --- a/crates/stages/src/error.rs +++ b/crates/stages/src/error.rs @@ -109,9 +109,9 @@ pub enum PipelineError { /// The pipeline encountered a database error. #[error(transparent)] Database(#[from] DbError), - /// The pipeline encountered an irrecoverable error in one of the stages. + /// Provider error. #[error(transparent)] - Interface(#[from] RethError), + Provider(#[from] ProviderError), /// The pipeline encountered an error while trying to send an event. #[error("pipeline encountered an error while trying to send an event")] Channel(#[from] SendError), diff --git a/crates/stages/src/pipeline/mod.rs b/crates/stages/src/pipeline/mod.rs index 4b58b69c8..f5955a5df 100644 --- a/crates/stages/src/pipeline/mod.rs +++ b/crates/stages/src/pipeline/mod.rs @@ -263,7 +263,7 @@ where let unwind_pipeline = self.stages.iter_mut().rev(); let factory = ProviderFactory::new(&self.db, self.chain_spec.clone()); - let mut provider_rw = factory.provider_rw().map_err(PipelineError::Interface)?; + let mut provider_rw = factory.provider_rw()?; for stage in unwind_pipeline { let stage_id = stage.id(); @@ -320,7 +320,7 @@ where .notify(PipelineEvent::Unwound { stage_id, result: unwind_output }); provider_rw.commit()?; - provider_rw = factory.provider_rw().map_err(PipelineError::Interface)?; + provider_rw = factory.provider_rw()?; } Err(err) => { self.listeners.notify(PipelineEvent::Error { stage_id }); @@ -346,7 +346,7 @@ where let target = self.max_block.or(previous_stage); let factory = ProviderFactory::new(&self.db, self.chain_spec.clone()); - let mut provider_rw = factory.provider_rw().map_err(PipelineError::Interface)?; + let mut provider_rw = factory.provider_rw()?; loop { let prev_checkpoint = provider_rw.get_stage_checkpoint(stage_id)?; @@ -427,7 +427,7 @@ where // TODO: Make the commit interval configurable provider_rw.commit()?; - provider_rw = factory.provider_rw().map_err(PipelineError::Interface)?; + provider_rw = factory.provider_rw()?; if done { let block_number = checkpoint.block_number; @@ -465,8 +465,7 @@ where // stage not clearing its checkpoint, and // restarting from an invalid place. drop(provider_rw); - provider_rw = - factory.provider_rw().map_err(PipelineError::Interface)?; + provider_rw = factory.provider_rw()?; provider_rw.save_stage_checkpoint_progress( StageId::MerkleExecute, vec![], diff --git a/crates/stages/src/stages/hashing_storage.rs b/crates/stages/src/stages/hashing_storage.rs index 62bd020ac..2580b58c9 100644 --- a/crates/stages/src/stages/hashing_storage.rs +++ b/crates/stages/src/stages/hashing_storage.rs @@ -175,7 +175,7 @@ impl Stage for StorageHashingStage { // iterate over plain state and get newest storage value. // Assumption we are okay with is that plain state represent // `previous_stage_progress` state. - let storages = provider.plainstate_storages(lists)?; + let storages = provider.plain_state_storages(lists)?; provider.insert_storage_for_hashing(storages)?; } diff --git a/crates/stages/src/test_utils/runner.rs b/crates/stages/src/test_utils/runner.rs index ab8e23136..9bc08638d 100644 --- a/crates/stages/src/test_utils/runner.rs +++ b/crates/stages/src/test_utils/runner.rs @@ -1,9 +1,9 @@ use super::TestTransaction; use crate::{ExecInput, ExecOutput, Stage, StageError, UnwindInput, UnwindOutput}; use reth_db::DatabaseEnv; -use reth_interfaces::{db::DatabaseError, RethError}; +use reth_interfaces::db::DatabaseError; use reth_primitives::MAINNET; -use reth_provider::ProviderFactory; +use reth_provider::{ProviderError, ProviderFactory}; use std::{borrow::Borrow, sync::Arc}; use tokio::sync::oneshot; @@ -14,7 +14,7 @@ pub(crate) enum TestRunnerError { #[error(transparent)] Internal(#[from] Box), #[error(transparent)] - Interface(#[from] RethError), + Provider(#[from] ProviderError), } /// A generic test runner for stages. diff --git a/crates/storage/db/src/snapshot/cursor.rs b/crates/storage/db/src/snapshot/cursor.rs index 403183f93..0f5d3e946 100644 --- a/crates/storage/db/src/snapshot/cursor.rs +++ b/crates/storage/db/src/snapshot/cursor.rs @@ -1,7 +1,7 @@ use super::mask::{ColumnSelectorOne, ColumnSelectorThree, ColumnSelectorTwo}; use crate::table::Decompress; use derive_more::{Deref, DerefMut}; -use reth_interfaces::{RethError, RethResult}; +use reth_interfaces::provider::ProviderResult; use reth_nippy_jar::{MmapHandle, NippyJar, NippyJarCursor}; use reth_primitives::{snapshot::SegmentHeader, B256}; @@ -11,10 +11,7 @@ pub struct SnapshotCursor<'a>(NippyJarCursor<'a, SegmentHeader>); impl<'a> SnapshotCursor<'a> { /// Returns a new [`SnapshotCursor`]. - pub fn new( - jar: &'a NippyJar, - mmap_handle: MmapHandle, - ) -> Result { + pub fn new(jar: &'a NippyJar, mmap_handle: MmapHandle) -> ProviderResult { Ok(Self(NippyJarCursor::with_handle(jar, mmap_handle)?)) } @@ -29,7 +26,7 @@ impl<'a> SnapshotCursor<'a> { &mut self, key_or_num: KeyOrNumber<'_>, mask: usize, - ) -> RethResult>> { + ) -> ProviderResult>> { let row = match key_or_num { KeyOrNumber::Key(k) => self.row_by_key_with_cols(k, mask), KeyOrNumber::Number(n) => { @@ -48,7 +45,7 @@ impl<'a> SnapshotCursor<'a> { pub fn get_one( &mut self, key_or_num: KeyOrNumber<'_>, - ) -> RethResult> { + ) -> ProviderResult> { let row = self.get(key_or_num, M::MASK)?; match row { @@ -61,7 +58,7 @@ impl<'a> SnapshotCursor<'a> { pub fn get_two( &mut self, key_or_num: KeyOrNumber<'_>, - ) -> RethResult> { + ) -> ProviderResult> { let row = self.get(key_or_num, M::MASK)?; match row { @@ -75,7 +72,7 @@ impl<'a> SnapshotCursor<'a> { pub fn get_three( &mut self, key_or_num: KeyOrNumber<'_>, - ) -> RethResult> { + ) -> ProviderResult> { let row = self.get(key_or_num, M::MASK)?; match row { diff --git a/crates/storage/db/src/snapshot/generation.rs b/crates/storage/db/src/snapshot/generation.rs index 5a2088ed6..df6a68a1e 100644 --- a/crates/storage/db/src/snapshot/generation.rs +++ b/crates/storage/db/src/snapshot/generation.rs @@ -5,9 +5,8 @@ use crate::{ RawKey, RawTable, }; -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_nippy_jar::{ColumnResult, NippyJar, PHFKey}; - use reth_tracing::tracing::*; use serde::{Deserialize, Serialize}; use std::{error::Error as StdError, ops::RangeInclusive}; @@ -46,7 +45,7 @@ macro_rules! generate_snapshot_func { keys: Option>>, row_count: usize, nippy_jar: &mut NippyJar - ) -> RethResult<()> + ) -> ProviderResult<()> where K: Key + Copy { let additional = additional.unwrap_or_default(); diff --git a/crates/storage/nippy-jar/src/error.rs b/crates/storage/nippy-jar/src/error.rs index dbb37c1f8..16a01ed05 100644 --- a/crates/storage/nippy-jar/src/error.rs +++ b/crates/storage/nippy-jar/src/error.rs @@ -1,7 +1,7 @@ use thiserror::Error; /// Errors associated with [`crate::NippyJar`]. -#[derive(Debug, Error)] +#[derive(Error, Debug)] pub enum NippyJarError { #[error(transparent)] Internal(#[from] Box), diff --git a/crates/storage/provider/src/providers/bundle_state_provider.rs b/crates/storage/provider/src/providers/bundle_state_provider.rs index 8c83ebe15..46d9ae702 100644 --- a/crates/storage/provider/src/providers/bundle_state_provider.rs +++ b/crates/storage/provider/src/providers/bundle_state_provider.rs @@ -2,7 +2,7 @@ use crate::{ bundle_state::BundleStateWithReceipts, AccountReader, BlockHashReader, BundleStateDataProvider, StateProvider, StateRootProvider, }; -use reth_interfaces::{provider::ProviderError, RethResult}; +use reth_interfaces::provider::{ProviderError, ProviderResult}; use reth_primitives::{trie::AccountProof, Account, Address, BlockNumber, Bytecode, B256}; /// A state provider that either resolves to data in a wrapped [`crate::BundleStateWithReceipts`], @@ -27,7 +27,7 @@ impl BundleStateProvider BlockHashReader for BundleStateProvider { - fn block_hash(&self, block_number: BlockNumber) -> RethResult> { + fn block_hash(&self, block_number: BlockNumber) -> ProviderResult> { let block_hash = self.post_state_data_provider.block_hash(block_number); if block_hash.is_some() { return Ok(block_hash) @@ -39,7 +39,7 @@ impl BlockHashReader &self, _start: BlockNumber, _end: BlockNumber, - ) -> RethResult> { + ) -> ProviderResult> { unimplemented!() } } @@ -47,7 +47,7 @@ impl BlockHashReader impl AccountReader for BundleStateProvider { - fn basic_account(&self, address: Address) -> RethResult> { + fn basic_account(&self, address: Address) -> ProviderResult> { if let Some(account) = self.post_state_data_provider.state().account(&address) { Ok(account) } else { @@ -59,7 +59,7 @@ impl AccountReader impl StateRootProvider for BundleStateProvider { - fn state_root(&self, post_state: &BundleStateWithReceipts) -> RethResult { + fn state_root(&self, post_state: &BundleStateWithReceipts) -> ProviderResult { let mut state = self.post_state_data_provider.state().clone(); state.extend(post_state.clone()); self.state_provider.state_root(&state) @@ -73,7 +73,7 @@ impl StateProvider &self, account: Address, storage_key: reth_primitives::StorageKey, - ) -> RethResult> { + ) -> ProviderResult> { let u256_storage_key = storage_key.into(); if let Some(value) = self.post_state_data_provider.state().storage(&account, u256_storage_key) @@ -84,7 +84,7 @@ impl StateProvider self.state_provider.storage(account, storage_key) } - fn bytecode_by_hash(&self, code_hash: B256) -> RethResult> { + fn bytecode_by_hash(&self, code_hash: B256) -> ProviderResult> { if let Some(bytecode) = self.post_state_data_provider.state().bytecode(&code_hash) { return Ok(Some(bytecode)) } @@ -92,7 +92,7 @@ impl StateProvider self.state_provider.bytecode_by_hash(code_hash) } - fn proof(&self, _address: Address, _keys: &[B256]) -> RethResult { - Err(ProviderError::StateRootNotAvailableForHistoricalBlock.into()) + fn proof(&self, _address: Address, _keys: &[B256]) -> ProviderResult { + Err(ProviderError::StateRootNotAvailableForHistoricalBlock) } } diff --git a/crates/storage/provider/src/providers/database/mod.rs b/crates/storage/provider/src/providers/database/mod.rs index 357a09196..38b4be901 100644 --- a/crates/storage/provider/src/providers/database/mod.rs +++ b/crates/storage/provider/src/providers/database/mod.rs @@ -9,7 +9,7 @@ use crate::{ TransactionVariant, TransactionsProvider, WithdrawalsProvider, }; use reth_db::{database::Database, init_db, models::StoredBlockBodyIndices, DatabaseEnv}; -use reth_interfaces::{db::LogLevel, RethError, RethResult}; +use reth_interfaces::{db::LogLevel, provider::ProviderResult, RethError, RethResult}; use reth_primitives::{ snapshot::HighestSnapshots, stage::{StageCheckpoint, StageId}, @@ -49,7 +49,7 @@ impl ProviderFactory { /// Returns a provider with a created `DbTx` inside, which allows fetching data from the /// database using different types of providers. Example: [`HeaderProvider`] /// [`BlockHashReader`]. This may fail if the inner read database transaction fails to open. - pub fn provider(&self) -> RethResult> { + pub fn provider(&self) -> ProviderResult> { let mut provider = DatabaseProvider::new(self.db.tx()?, self.chain_spec.clone()); if let Some(snapshot_provider) = &self.snapshot_provider { @@ -63,7 +63,7 @@ impl ProviderFactory { /// data from the database using different types of providers. Example: [`HeaderProvider`] /// [`BlockHashReader`]. This may fail if the inner read/write database transaction fails to /// open. - pub fn provider_rw(&self) -> RethResult> { + pub fn provider_rw(&self) -> ProviderResult> { let mut provider = DatabaseProvider::new_rw(self.db.tx_mut()?, self.chain_spec.clone()); if let Some(snapshot_provider) = &self.snapshot_provider { @@ -122,7 +122,7 @@ impl Clone for ProviderFactory { impl ProviderFactory { /// Storage provider for latest block - pub fn latest(&self) -> RethResult> { + pub fn latest(&self) -> ProviderResult> { trace!(target: "providers::db", "Returning latest state provider"); Ok(Box::new(LatestStateProvider::new(self.db.tx()?))) } @@ -131,7 +131,7 @@ impl ProviderFactory { fn state_provider_by_block_number( &self, mut block_number: BlockNumber, - ) -> RethResult> { + ) -> ProviderResult> { let provider = self.provider()?; if block_number == provider.best_block_number().unwrap_or_default() && @@ -174,14 +174,17 @@ impl ProviderFactory { pub fn history_by_block_number( &self, block_number: BlockNumber, - ) -> RethResult> { + ) -> ProviderResult> { let state_provider = self.state_provider_by_block_number(block_number)?; trace!(target: "providers::db", ?block_number, "Returning historical state provider for block number"); Ok(state_provider) } /// Storage provider for state at that given block hash - pub fn history_by_block_hash(&self, block_hash: BlockHash) -> RethResult> { + pub fn history_by_block_hash( + &self, + block_hash: BlockHash, + ) -> ProviderResult> { let block_number = self .provider()? .block_number(block_hash)? @@ -194,34 +197,34 @@ impl ProviderFactory { } impl HeaderProvider for ProviderFactory { - fn header(&self, block_hash: &BlockHash) -> RethResult> { + fn header(&self, block_hash: &BlockHash) -> ProviderResult> { self.provider()?.header(block_hash) } - fn header_by_number(&self, num: BlockNumber) -> RethResult> { + fn header_by_number(&self, num: BlockNumber) -> ProviderResult> { self.provider()?.header_by_number(num) } - fn header_td(&self, hash: &BlockHash) -> RethResult> { + fn header_td(&self, hash: &BlockHash) -> ProviderResult> { self.provider()?.header_td(hash) } - fn header_td_by_number(&self, number: BlockNumber) -> RethResult> { + fn header_td_by_number(&self, number: BlockNumber) -> ProviderResult> { self.provider()?.header_td_by_number(number) } - fn headers_range(&self, range: impl RangeBounds) -> RethResult> { + fn headers_range(&self, range: impl RangeBounds) -> ProviderResult> { self.provider()?.headers_range(range) } - fn sealed_header(&self, number: BlockNumber) -> RethResult> { + fn sealed_header(&self, number: BlockNumber) -> ProviderResult> { self.provider()?.sealed_header(number) } fn sealed_headers_range( &self, range: impl RangeBounds, - ) -> RethResult> { + ) -> ProviderResult> { self.provider()?.sealed_headers_range(range) } @@ -229,13 +232,13 @@ impl HeaderProvider for ProviderFactory { &self, range: impl RangeBounds, predicate: impl FnMut(&SealedHeader) -> bool, - ) -> RethResult> { + ) -> ProviderResult> { self.provider()?.sealed_headers_while(range, predicate) } } impl BlockHashReader for ProviderFactory { - fn block_hash(&self, number: u64) -> RethResult> { + fn block_hash(&self, number: u64) -> ProviderResult> { self.provider()?.block_hash(number) } @@ -243,54 +246,54 @@ impl BlockHashReader for ProviderFactory { &self, start: BlockNumber, end: BlockNumber, - ) -> RethResult> { + ) -> ProviderResult> { self.provider()?.canonical_hashes_range(start, end) } } impl BlockNumReader for ProviderFactory { - fn chain_info(&self) -> RethResult { + fn chain_info(&self) -> ProviderResult { self.provider()?.chain_info() } - fn best_block_number(&self) -> RethResult { + fn best_block_number(&self) -> ProviderResult { self.provider()?.best_block_number() } - fn last_block_number(&self) -> RethResult { + fn last_block_number(&self) -> ProviderResult { self.provider()?.last_block_number() } - fn block_number(&self, hash: B256) -> RethResult> { + fn block_number(&self, hash: B256) -> ProviderResult> { self.provider()?.block_number(hash) } } impl BlockReader for ProviderFactory { - fn find_block_by_hash(&self, hash: B256, source: BlockSource) -> RethResult> { + fn find_block_by_hash(&self, hash: B256, source: BlockSource) -> ProviderResult> { self.provider()?.find_block_by_hash(hash, source) } - fn block(&self, id: BlockHashOrNumber) -> RethResult> { + fn block(&self, id: BlockHashOrNumber) -> ProviderResult> { self.provider()?.block(id) } - fn pending_block(&self) -> RethResult> { + fn pending_block(&self) -> ProviderResult> { self.provider()?.pending_block() } - fn pending_block_and_receipts(&self) -> RethResult)>> { + fn pending_block_and_receipts(&self) -> ProviderResult)>> { self.provider()?.pending_block_and_receipts() } - fn ommers(&self, id: BlockHashOrNumber) -> RethResult>> { + fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult>> { self.provider()?.ommers(id) } fn block_body_indices( &self, number: BlockNumber, - ) -> RethResult> { + ) -> ProviderResult> { self.provider()?.block_body_indices(number) } @@ -298,86 +301,89 @@ impl BlockReader for ProviderFactory { &self, id: BlockHashOrNumber, transaction_kind: TransactionVariant, - ) -> RethResult> { + ) -> ProviderResult> { self.provider()?.block_with_senders(id, transaction_kind) } - fn block_range(&self, range: RangeInclusive) -> RethResult> { + fn block_range(&self, range: RangeInclusive) -> ProviderResult> { self.provider()?.block_range(range) } } impl TransactionsProvider for ProviderFactory { - fn transaction_id(&self, tx_hash: TxHash) -> RethResult> { + fn transaction_id(&self, tx_hash: TxHash) -> ProviderResult> { self.provider()?.transaction_id(tx_hash) } - fn transaction_by_id(&self, id: TxNumber) -> RethResult> { + fn transaction_by_id(&self, id: TxNumber) -> ProviderResult> { self.provider()?.transaction_by_id(id) } fn transaction_by_id_no_hash( &self, id: TxNumber, - ) -> RethResult> { + ) -> ProviderResult> { self.provider()?.transaction_by_id_no_hash(id) } - fn transaction_by_hash(&self, hash: TxHash) -> RethResult> { + fn transaction_by_hash(&self, hash: TxHash) -> ProviderResult> { self.provider()?.transaction_by_hash(hash) } fn transaction_by_hash_with_meta( &self, tx_hash: TxHash, - ) -> RethResult> { + ) -> ProviderResult> { self.provider()?.transaction_by_hash_with_meta(tx_hash) } - fn transaction_block(&self, id: TxNumber) -> RethResult> { + fn transaction_block(&self, id: TxNumber) -> ProviderResult> { self.provider()?.transaction_block(id) } fn transactions_by_block( &self, id: BlockHashOrNumber, - ) -> RethResult>> { + ) -> ProviderResult>> { self.provider()?.transactions_by_block(id) } fn transactions_by_block_range( &self, range: impl RangeBounds, - ) -> RethResult>> { + ) -> ProviderResult>> { self.provider()?.transactions_by_block_range(range) } fn transactions_by_tx_range( &self, range: impl RangeBounds, - ) -> RethResult> { + ) -> ProviderResult> { self.provider()?.transactions_by_tx_range(range) } - fn senders_by_tx_range(&self, range: impl RangeBounds) -> RethResult> { + fn senders_by_tx_range( + &self, + range: impl RangeBounds, + ) -> ProviderResult> { self.provider()?.senders_by_tx_range(range) } - fn transaction_sender(&self, id: TxNumber) -> RethResult> { + fn transaction_sender(&self, id: TxNumber) -> ProviderResult> { self.provider()?.transaction_sender(id) } } impl ReceiptProvider for ProviderFactory { - fn receipt(&self, id: TxNumber) -> RethResult> { + fn receipt(&self, id: TxNumber) -> ProviderResult> { self.provider()?.receipt(id) } - fn receipt_by_hash(&self, hash: TxHash) -> RethResult> { + fn receipt_by_hash(&self, hash: TxHash) -> ProviderResult> { self.provider()?.receipt_by_hash(hash) } - fn receipts_by_block(&self, block: BlockHashOrNumber) -> RethResult>> { + fn receipts_by_block(&self, block: BlockHashOrNumber) -> ProviderResult>> { self.provider()?.receipts_by_block(block) } } @@ -387,21 +393,21 @@ impl WithdrawalsProvider for ProviderFactory { &self, id: BlockHashOrNumber, timestamp: u64, - ) -> RethResult>> { + ) -> ProviderResult>> { self.provider()?.withdrawals_by_block(id, timestamp) } - fn latest_withdrawal(&self) -> RethResult> { + fn latest_withdrawal(&self) -> ProviderResult> { self.provider()?.latest_withdrawal() } } impl StageCheckpointReader for ProviderFactory { - fn get_stage_checkpoint(&self, id: StageId) -> RethResult> { + fn get_stage_checkpoint(&self, id: StageId) -> ProviderResult> { self.provider()?.get_stage_checkpoint(id) } - fn get_stage_checkpoint_progress(&self, id: StageId) -> RethResult>> { + fn get_stage_checkpoint_progress(&self, id: StageId) -> ProviderResult>> { self.provider()?.get_stage_checkpoint_progress(id) } } @@ -412,7 +418,7 @@ impl EvmEnvProvider for ProviderFactory { cfg: &mut CfgEnv, block_env: &mut BlockEnv, at: BlockHashOrNumber, - ) -> RethResult<()> { + ) -> ProviderResult<()> { self.provider()?.fill_env_at(cfg, block_env, at) } @@ -421,11 +427,15 @@ impl EvmEnvProvider for ProviderFactory { cfg: &mut CfgEnv, block_env: &mut BlockEnv, header: &Header, - ) -> RethResult<()> { + ) -> ProviderResult<()> { self.provider()?.fill_env_with_header(cfg, block_env, header) } - fn fill_block_env_at(&self, block_env: &mut BlockEnv, at: BlockHashOrNumber) -> RethResult<()> { + fn fill_block_env_at( + &self, + block_env: &mut BlockEnv, + at: BlockHashOrNumber, + ) -> ProviderResult<()> { self.provider()?.fill_block_env_at(block_env, at) } @@ -433,15 +443,15 @@ impl EvmEnvProvider for ProviderFactory { &self, block_env: &mut BlockEnv, header: &Header, - ) -> RethResult<()> { + ) -> ProviderResult<()> { self.provider()?.fill_block_env_with_header(block_env, header) } - fn fill_cfg_env_at(&self, cfg: &mut CfgEnv, at: BlockHashOrNumber) -> RethResult<()> { + fn fill_cfg_env_at(&self, cfg: &mut CfgEnv, at: BlockHashOrNumber) -> ProviderResult<()> { self.provider()?.fill_cfg_env_at(cfg, at) } - fn fill_cfg_env_with_header(&self, cfg: &mut CfgEnv, header: &Header) -> RethResult<()> { + fn fill_cfg_env_with_header(&self, cfg: &mut CfgEnv, header: &Header) -> ProviderResult<()> { self.provider()?.fill_cfg_env_with_header(cfg, header) } } @@ -456,7 +466,10 @@ where } impl PruneCheckpointReader for ProviderFactory { - fn get_prune_checkpoint(&self, segment: PruneSegment) -> RethResult> { + fn get_prune_checkpoint( + &self, + segment: PruneSegment, + ) -> ProviderResult> { self.provider()?.get_prune_checkpoint(segment) } } diff --git a/crates/storage/provider/src/providers/database/provider.rs b/crates/storage/provider/src/providers/database/provider.rs index cf29d76ec..198aeb553 100644 --- a/crates/storage/provider/src/providers/database/provider.rs +++ b/crates/storage/provider/src/providers/database/provider.rs @@ -24,11 +24,7 @@ use reth_db::{ transaction::{DbTx, DbTxMut}, BlockNumberList, DatabaseError, }; -use reth_interfaces::{ - executor::{BlockExecutionError, BlockValidationError}, - provider::RootMismatch, - RethError, RethResult, -}; +use reth_interfaces::provider::{ProviderResult, RootMismatch}; use reth_primitives::{ keccak256, revm::{ @@ -82,7 +78,7 @@ impl DerefMut for DatabaseProviderRW<'_, DB> { impl<'this, DB: Database> DatabaseProviderRW<'this, DB> { /// Commit database transaction - pub fn commit(self) -> RethResult { + pub fn commit(self) -> ProviderResult { self.0.commit() } @@ -129,7 +125,7 @@ fn unwind_history_shards( start_key: T::Key, block_number: BlockNumber, mut shard_belongs_to_key: impl FnMut(&T::Key) -> bool, -) -> RethResult> +) -> ProviderResult> where T: Table, T::Key: AsRef>, @@ -201,7 +197,7 @@ impl DatabaseProvider { impl DatabaseProvider { /// Commit database transaction. - pub fn commit(self) -> RethResult { + pub fn commit(self) -> ProviderResult { Ok(self.tx.commit()?) } @@ -234,7 +230,7 @@ impl DatabaseProvider { fn unwind_or_peek_state( &self, range: RangeInclusive, - ) -> RethResult { + ) -> ProviderResult { if range.is_empty() { return Ok(BundleStateWithReceipts::default()) } @@ -409,7 +405,7 @@ impl DatabaseProvider { pub(crate) fn get_take_block_transaction_range( &self, range: impl RangeBounds + Clone, - ) -> RethResult)>> { + ) -> ProviderResult)>> { // Raad range of block bodies to get all transactions id's of this range. let block_bodies = self.get_or_take::(range)?; @@ -477,7 +473,7 @@ impl DatabaseProvider { missing_senders.iter().map(|(_, _, tx)| *tx).collect::>(), missing_senders.len(), ) - .ok_or(BlockExecutionError::Validation(BlockValidationError::SenderRecoveryError))?; + .ok_or(ProviderError::SenderRecoveryError)?; // Insert recovered senders along with tx numbers at the corresponding indexes to the // original `senders` vector @@ -547,7 +543,7 @@ impl DatabaseProvider { &self, chain_spec: &ChainSpec, range: impl RangeBounds + Clone, - ) -> RethResult> { + ) -> ProviderResult> { // For block we need Headers, Bodies, Uncles, withdrawals, Transactions, Signers let block_headers = self.get_or_take::(range.clone())?; @@ -746,7 +742,7 @@ impl DatabaseProvider { /// Load shard and remove it. If list is empty, last shard was full or /// there are no shards at all. - fn take_shard(&self, key: T::Key) -> RethResult> + fn take_shard(&self, key: T::Key) -> ProviderResult> where T: Table, { @@ -772,7 +768,7 @@ impl DatabaseProvider { &self, index_updates: BTreeMap>, mut sharded_key_factory: impl FnMut(P, BlockNumber) -> T::Key, - ) -> RethResult<()> + ) -> ProviderResult<()> where P: Copy, T: Table, @@ -806,7 +802,7 @@ impl DatabaseProvider { } impl AccountReader for DatabaseProvider { - fn basic_account(&self, address: Address) -> RethResult> { + fn basic_account(&self, address: Address) -> ProviderResult> { Ok(self.tx.get::(address)?) } } @@ -815,7 +811,7 @@ impl AccountExtReader for DatabaseProvider { fn changed_accounts_with_range( &self, range: impl RangeBounds, - ) -> RethResult> { + ) -> ProviderResult> { self.tx .cursor_read::()? .walk_range(range)? @@ -828,7 +824,7 @@ impl AccountExtReader for DatabaseProvider { fn basic_accounts( &self, iter: impl IntoIterator, - ) -> RethResult)>> { + ) -> ProviderResult)>> { let mut plain_accounts = self.tx.cursor_read::()?; Ok(iter .into_iter() @@ -839,12 +835,12 @@ impl AccountExtReader for DatabaseProvider { fn changed_accounts_and_blocks_with_range( &self, range: RangeInclusive, - ) -> RethResult>> { + ) -> ProviderResult>> { let mut changeset_cursor = self.tx.cursor_read::()?; let account_transitions = changeset_cursor.walk_range(range)?.try_fold( BTreeMap::new(), - |mut accounts: BTreeMap>, entry| -> RethResult<_> { + |mut accounts: BTreeMap>, entry| -> ProviderResult<_> { let (index, account) = entry?; accounts.entry(account.address).or_default().push(index); Ok(accounts) @@ -859,12 +855,12 @@ impl ChangeSetReader for DatabaseProvider { fn account_block_changeset( &self, block_number: BlockNumber, - ) -> RethResult> { + ) -> ProviderResult> { let range = block_number..=block_number; self.tx .cursor_read::()? .walk_range(range)? - .map(|result| -> RethResult<_> { + .map(|result| -> ProviderResult<_> { let (_, account_before) = result?; Ok(account_before) }) @@ -873,7 +869,7 @@ impl ChangeSetReader for DatabaseProvider { } impl HeaderProvider for DatabaseProvider { - fn header(&self, block_hash: &BlockHash) -> RethResult> { + fn header(&self, block_hash: &BlockHash) -> ProviderResult> { if let Some(num) = self.block_number(*block_hash)? { Ok(self.header_by_number(num)?) } else { @@ -881,11 +877,11 @@ impl HeaderProvider for DatabaseProvider { } } - fn header_by_number(&self, num: BlockNumber) -> RethResult> { + fn header_by_number(&self, num: BlockNumber) -> ProviderResult> { Ok(self.tx.get::(num)?) } - fn header_td(&self, block_hash: &BlockHash) -> RethResult> { + fn header_td(&self, block_hash: &BlockHash) -> ProviderResult> { if let Some(num) = self.block_number(*block_hash)? { self.header_td_by_number(num) } else { @@ -893,7 +889,7 @@ impl HeaderProvider for DatabaseProvider { } } - fn header_td_by_number(&self, number: BlockNumber) -> RethResult> { + fn header_td_by_number(&self, number: BlockNumber) -> ProviderResult> { if let Some(td) = self.chain_spec.final_paris_total_difficulty(number) { // if this block is higher than the final paris(merge) block, return the final paris // difficulty @@ -903,15 +899,15 @@ impl HeaderProvider for DatabaseProvider { Ok(self.tx.get::(number)?.map(|td| td.0)) } - fn headers_range(&self, range: impl RangeBounds) -> RethResult> { + fn headers_range(&self, range: impl RangeBounds) -> ProviderResult> { let mut cursor = self.tx.cursor_read::()?; cursor .walk_range(range)? .map(|result| result.map(|(_, header)| header).map_err(Into::into)) - .collect::>>() + .collect::>>() } - fn sealed_header(&self, number: BlockNumber) -> RethResult> { + fn sealed_header(&self, number: BlockNumber) -> ProviderResult> { if let Some(header) = self.header_by_number(number)? { let hash = self .block_hash(number)? @@ -926,7 +922,7 @@ impl HeaderProvider for DatabaseProvider { &self, range: impl RangeBounds, mut predicate: impl FnMut(&SealedHeader) -> bool, - ) -> RethResult> { + ) -> ProviderResult> { let mut headers = vec![]; for entry in self.tx.cursor_read::()?.walk_range(range)? { let (number, header) = entry?; @@ -944,7 +940,7 @@ impl HeaderProvider for DatabaseProvider { } impl BlockHashReader for DatabaseProvider { - fn block_hash(&self, number: u64) -> RethResult> { + fn block_hash(&self, number: u64) -> ProviderResult> { Ok(self.tx.get::(number)?) } @@ -952,41 +948,41 @@ impl BlockHashReader for DatabaseProvider { &self, start: BlockNumber, end: BlockNumber, - ) -> RethResult> { + ) -> ProviderResult> { let range = start..end; let mut cursor = self.tx.cursor_read::()?; cursor .walk_range(range)? .map(|result| result.map(|(_, hash)| hash).map_err(Into::into)) - .collect::>>() + .collect::>>() } } impl BlockNumReader for DatabaseProvider { - fn chain_info(&self) -> RethResult { + fn chain_info(&self) -> ProviderResult { let best_number = self.best_block_number()?; let best_hash = self.block_hash(best_number)?.unwrap_or_default(); Ok(ChainInfo { best_hash, best_number }) } - fn best_block_number(&self) -> RethResult { + fn best_block_number(&self) -> ProviderResult { Ok(self .get_stage_checkpoint(StageId::Finish)? .map(|checkpoint| checkpoint.block_number) .unwrap_or_default()) } - fn last_block_number(&self) -> RethResult { + fn last_block_number(&self) -> ProviderResult { Ok(self.tx.cursor_read::()?.last()?.unwrap_or_default().0) } - fn block_number(&self, hash: B256) -> RethResult> { + fn block_number(&self, hash: B256) -> ProviderResult> { Ok(self.tx.get::(hash)?) } } impl BlockReader for DatabaseProvider { - fn find_block_by_hash(&self, hash: B256, source: BlockSource) -> RethResult> { + fn find_block_by_hash(&self, hash: B256, source: BlockSource) -> ProviderResult> { if source.is_database() { self.block(hash.into()) } else { @@ -999,7 +995,7 @@ impl BlockReader for DatabaseProvider { /// If the header for this block is not found, this returns `None`. /// If the header is found, but the transactions either do not exist, or are not indexed, this /// will return None. - fn block(&self, id: BlockHashOrNumber) -> RethResult> { + fn block(&self, id: BlockHashOrNumber) -> ProviderResult> { if let Some(number) = self.convert_hash_or_number(id)? { if let Some(header) = self.header_by_number(number)? { let withdrawals = self.withdrawals_by_block(number.into(), header.timestamp)?; @@ -1020,15 +1016,15 @@ impl BlockReader for DatabaseProvider { Ok(None) } - fn pending_block(&self) -> RethResult> { + fn pending_block(&self) -> ProviderResult> { Ok(None) } - fn pending_block_and_receipts(&self) -> RethResult)>> { + fn pending_block_and_receipts(&self) -> ProviderResult)>> { Ok(None) } - fn ommers(&self, id: BlockHashOrNumber) -> RethResult>> { + fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult>> { if let Some(number) = self.convert_hash_or_number(id)? { // If the Paris (Merge) hardfork block is known and block is after it, return empty // ommers. @@ -1043,7 +1039,7 @@ impl BlockReader for DatabaseProvider { Ok(None) } - fn block_body_indices(&self, num: u64) -> RethResult> { + fn block_body_indices(&self, num: u64) -> ProviderResult> { Ok(self.tx.get::(num)?) } @@ -1059,7 +1055,7 @@ impl BlockReader for DatabaseProvider { &self, id: BlockHashOrNumber, transaction_kind: TransactionVariant, - ) -> RethResult> { + ) -> ProviderResult> { let Some(block_number) = self.convert_hash_or_number(id)? else { return Ok(None) }; let Some(header) = self.header_by_number(block_number)? else { return Ok(None) }; @@ -1102,7 +1098,7 @@ impl BlockReader for DatabaseProvider { Ok(Some(Block { header, body, ommers, withdrawals }.with_senders(senders))) } - fn block_range(&self, range: RangeInclusive) -> RethResult> { + fn block_range(&self, range: RangeInclusive) -> ProviderResult> { if range.is_empty() { return Ok(Vec::new()) } @@ -1167,7 +1163,7 @@ impl TransactionsProviderExt for DatabaseProvider { fn transaction_hashes_by_range( &self, tx_range: Range, - ) -> RethResult> { + ) -> ProviderResult> { let mut tx_cursor = self.tx.cursor_read::()?; let tx_range_size = tx_range.clone().count(); let tx_walker = tx_cursor.walk_range(tx_range)?; @@ -1180,7 +1176,7 @@ impl TransactionsProviderExt for DatabaseProvider { fn calculate_hash( entry: Result<(TxNumber, TransactionSignedNoHash), DatabaseError>, rlp_buf: &mut Vec, - ) -> Result<(B256, TxNumber), Box> { + ) -> Result<(B256, TxNumber), Box> { let (tx_id, tx) = entry.map_err(|e| Box::new(e.into()))?; tx.transaction.encode_with_signature(&tx.signature, rlp_buf, false); Ok((keccak256(rlp_buf), tx_id)) @@ -1221,22 +1217,22 @@ impl TransactionsProviderExt for DatabaseProvider { /// Calculates the hash of the given transaction impl TransactionsProvider for DatabaseProvider { - fn transaction_id(&self, tx_hash: TxHash) -> RethResult> { + fn transaction_id(&self, tx_hash: TxHash) -> ProviderResult> { Ok(self.tx.get::(tx_hash)?) } - fn transaction_by_id(&self, id: TxNumber) -> RethResult> { + fn transaction_by_id(&self, id: TxNumber) -> ProviderResult> { Ok(self.tx.get::(id)?.map(Into::into)) } fn transaction_by_id_no_hash( &self, id: TxNumber, - ) -> RethResult> { + ) -> ProviderResult> { Ok(self.tx.get::(id)?) } - fn transaction_by_hash(&self, hash: TxHash) -> RethResult> { + fn transaction_by_hash(&self, hash: TxHash) -> ProviderResult> { if let Some(id) = self.transaction_id(hash)? { Ok(self.transaction_by_id_no_hash(id)?.map(|tx| TransactionSigned { hash, @@ -1252,7 +1248,7 @@ impl TransactionsProvider for DatabaseProvider { fn transaction_by_hash_with_meta( &self, tx_hash: TxHash, - ) -> RethResult> { + ) -> ProviderResult> { let mut transaction_cursor = self.tx.cursor_read::()?; if let Some(transaction_id) = self.transaction_id(tx_hash)? { if let Some(tx) = self.transaction_by_id_no_hash(transaction_id)? { @@ -1292,7 +1288,7 @@ impl TransactionsProvider for DatabaseProvider { Ok(None) } - fn transaction_block(&self, id: TxNumber) -> RethResult> { + fn transaction_block(&self, id: TxNumber) -> ProviderResult> { let mut cursor = self.tx.cursor_read::()?; Ok(cursor.seek(id)?.map(|(_, bn)| bn)) } @@ -1300,7 +1296,7 @@ impl TransactionsProvider for DatabaseProvider { fn transactions_by_block( &self, id: BlockHashOrNumber, - ) -> RethResult>> { + ) -> ProviderResult>> { let mut tx_cursor = self.tx.cursor_read::()?; if let Some(block_number) = self.convert_hash_or_number(id)? { if let Some(body) = self.block_body_indices(block_number)? { @@ -1322,7 +1318,7 @@ impl TransactionsProvider for DatabaseProvider { fn transactions_by_block_range( &self, range: impl RangeBounds, - ) -> RethResult>> { + ) -> ProviderResult>> { let mut results = Vec::new(); let mut body_cursor = self.tx.cursor_read::()?; let mut tx_cursor = self.tx.cursor_read::()?; @@ -1346,7 +1342,7 @@ impl TransactionsProvider for DatabaseProvider { fn transactions_by_tx_range( &self, range: impl RangeBounds, - ) -> RethResult> { + ) -> ProviderResult> { Ok(self .tx .cursor_read::()? @@ -1355,7 +1351,10 @@ impl TransactionsProvider for DatabaseProvider { .collect::, _>>()?) } - fn senders_by_tx_range(&self, range: impl RangeBounds) -> RethResult> { + fn senders_by_tx_range( + &self, + range: impl RangeBounds, + ) -> ProviderResult> { Ok(self .tx .cursor_read::()? @@ -1364,17 +1363,17 @@ impl TransactionsProvider for DatabaseProvider { .collect::, _>>()?) } - fn transaction_sender(&self, id: TxNumber) -> RethResult> { + fn transaction_sender(&self, id: TxNumber) -> ProviderResult> { Ok(self.tx.get::(id)?) } } impl ReceiptProvider for DatabaseProvider { - fn receipt(&self, id: TxNumber) -> RethResult> { + fn receipt(&self, id: TxNumber) -> ProviderResult> { Ok(self.tx.get::(id)?) } - fn receipt_by_hash(&self, hash: TxHash) -> RethResult> { + fn receipt_by_hash(&self, hash: TxHash) -> ProviderResult> { if let Some(id) = self.transaction_id(hash)? { self.receipt(id) } else { @@ -1382,7 +1381,7 @@ impl ReceiptProvider for DatabaseProvider { } } - fn receipts_by_block(&self, block: BlockHashOrNumber) -> RethResult>> { + fn receipts_by_block(&self, block: BlockHashOrNumber) -> ProviderResult>> { if let Some(number) = self.convert_hash_or_number(block)? { if let Some(body) = self.block_body_indices(number)? { let tx_range = body.tx_num_range(); @@ -1407,7 +1406,7 @@ impl WithdrawalsProvider for DatabaseProvider { &self, id: BlockHashOrNumber, timestamp: u64, - ) -> RethResult>> { + ) -> ProviderResult>> { if self.chain_spec.is_shanghai_active_at_timestamp(timestamp) { if let Some(number) = self.convert_hash_or_number(id)? { // If we are past shanghai, then all blocks should have a withdrawal list, even if @@ -1423,7 +1422,7 @@ impl WithdrawalsProvider for DatabaseProvider { Ok(None) } - fn latest_withdrawal(&self) -> RethResult> { + fn latest_withdrawal(&self) -> ProviderResult> { let latest_block_withdrawal = self.tx.cursor_read::()?.last()?; Ok(latest_block_withdrawal .and_then(|(_, mut block_withdrawal)| block_withdrawal.withdrawals.pop())) @@ -1436,7 +1435,7 @@ impl EvmEnvProvider for DatabaseProvider { cfg: &mut CfgEnv, block_env: &mut BlockEnv, at: BlockHashOrNumber, - ) -> RethResult<()> { + ) -> ProviderResult<()> { let hash = self.convert_number(at)?.ok_or(ProviderError::HeaderNotFound(at))?; let header = self.header(&hash)?.ok_or(ProviderError::HeaderNotFound(at))?; self.fill_env_with_header(cfg, block_env, &header) @@ -1447,7 +1446,7 @@ impl EvmEnvProvider for DatabaseProvider { cfg: &mut CfgEnv, block_env: &mut BlockEnv, header: &Header, - ) -> RethResult<()> { + ) -> ProviderResult<()> { let total_difficulty = self .header_td_by_number(header.number)? .ok_or_else(|| ProviderError::HeaderNotFound(header.number.into()))?; @@ -1455,7 +1454,11 @@ impl EvmEnvProvider for DatabaseProvider { Ok(()) } - fn fill_block_env_at(&self, block_env: &mut BlockEnv, at: BlockHashOrNumber) -> RethResult<()> { + fn fill_block_env_at( + &self, + block_env: &mut BlockEnv, + at: BlockHashOrNumber, + ) -> ProviderResult<()> { let hash = self.convert_number(at)?.ok_or(ProviderError::HeaderNotFound(at))?; let header = self.header(&hash)?.ok_or(ProviderError::HeaderNotFound(at))?; @@ -1466,7 +1469,7 @@ impl EvmEnvProvider for DatabaseProvider { &self, block_env: &mut BlockEnv, header: &Header, - ) -> RethResult<()> { + ) -> ProviderResult<()> { let total_difficulty = self .header_td_by_number(header.number)? .ok_or_else(|| ProviderError::HeaderNotFound(header.number.into()))?; @@ -1486,13 +1489,13 @@ impl EvmEnvProvider for DatabaseProvider { Ok(()) } - fn fill_cfg_env_at(&self, cfg: &mut CfgEnv, at: BlockHashOrNumber) -> RethResult<()> { + fn fill_cfg_env_at(&self, cfg: &mut CfgEnv, at: BlockHashOrNumber) -> ProviderResult<()> { let hash = self.convert_number(at)?.ok_or(ProviderError::HeaderNotFound(at))?; let header = self.header(&hash)?.ok_or(ProviderError::HeaderNotFound(at))?; self.fill_cfg_env_with_header(cfg, &header) } - fn fill_cfg_env_with_header(&self, cfg: &mut CfgEnv, header: &Header) -> RethResult<()> { + fn fill_cfg_env_with_header(&self, cfg: &mut CfgEnv, header: &Header) -> ProviderResult<()> { let total_difficulty = self .header_td_by_number(header.number)? .ok_or_else(|| ProviderError::HeaderNotFound(header.number.into()))?; @@ -1502,24 +1505,32 @@ impl EvmEnvProvider for DatabaseProvider { } impl StageCheckpointReader for DatabaseProvider { - fn get_stage_checkpoint(&self, id: StageId) -> RethResult> { + fn get_stage_checkpoint(&self, id: StageId) -> ProviderResult> { Ok(self.tx.get::(id.to_string())?) } /// Get stage checkpoint progress. - fn get_stage_checkpoint_progress(&self, id: StageId) -> RethResult>> { + fn get_stage_checkpoint_progress(&self, id: StageId) -> ProviderResult>> { Ok(self.tx.get::(id.to_string())?) } } impl StageCheckpointWriter for DatabaseProvider { /// Save stage checkpoint progress. - fn save_stage_checkpoint_progress(&self, id: StageId, checkpoint: Vec) -> RethResult<()> { + fn save_stage_checkpoint_progress( + &self, + id: StageId, + checkpoint: Vec, + ) -> ProviderResult<()> { Ok(self.tx.put::(id.to_string(), checkpoint)?) } /// Save stage checkpoint. - fn save_stage_checkpoint(&self, id: StageId, checkpoint: StageCheckpoint) -> RethResult<()> { + fn save_stage_checkpoint( + &self, + id: StageId, + checkpoint: StageCheckpoint, + ) -> ProviderResult<()> { Ok(self.tx.put::(id.to_string(), checkpoint)?) } @@ -1527,7 +1538,7 @@ impl StageCheckpointWriter for DatabaseProvider { &self, block_number: BlockNumber, drop_stage_checkpoint: bool, - ) -> RethResult<()> { + ) -> ProviderResult<()> { // iterate over all existing stages in the table and update its progress. let mut cursor = self.tx.cursor_write::()?; for stage_id in StageId::ALL { @@ -1546,10 +1557,10 @@ impl StageCheckpointWriter for DatabaseProvider { } impl StorageReader for DatabaseProvider { - fn plainstate_storages( + fn plain_state_storages( &self, addresses_with_keys: impl IntoIterator)>, - ) -> RethResult)>> { + ) -> ProviderResult)>> { let mut plain_storage = self.tx.cursor_dup_read::()?; addresses_with_keys @@ -1557,22 +1568,22 @@ impl StorageReader for DatabaseProvider { .map(|(address, storage)| { storage .into_iter() - .map(|key| -> RethResult<_> { + .map(|key| -> ProviderResult<_> { Ok(plain_storage .seek_by_key_subkey(address, key)? .filter(|v| v.key == key) .unwrap_or_else(|| StorageEntry { key, value: Default::default() })) }) - .collect::>>() + .collect::>>() .map(|storage| (address, storage)) }) - .collect::>>() + .collect::>>() } fn changed_storages_with_range( &self, range: RangeInclusive, - ) -> RethResult>> { + ) -> ProviderResult>> { self.tx .cursor_read::()? .walk_range(BlockNumberAddress::range(range))? @@ -1588,13 +1599,13 @@ impl StorageReader for DatabaseProvider { fn changed_storages_and_blocks_with_range( &self, range: RangeInclusive, - ) -> RethResult>> { + ) -> ProviderResult>> { let mut changeset_cursor = self.tx.cursor_read::()?; let storage_changeset_lists = changeset_cursor.walk_range(BlockNumberAddress::range(range))?.try_fold( BTreeMap::new(), - |mut storages: BTreeMap<(Address, B256), Vec>, entry| -> RethResult<_> { + |mut storages: BTreeMap<(Address, B256), Vec>, entry| -> ProviderResult<_> { let (index, storage) = entry?; storages .entry((index.address(), storage.key)) @@ -1614,7 +1625,7 @@ impl HashingWriter for DatabaseProvider { range: RangeInclusive, end_block_hash: B256, expected_state_root: B256, - ) -> RethResult<()> { + ) -> ProviderResult<()> { // Initialize prefix sets. let mut account_prefix_set = PrefixSetMut::default(); let mut storage_prefix_set: HashMap = HashMap::default(); @@ -1625,7 +1636,7 @@ impl HashingWriter for DatabaseProvider { // storage hashing stage { let lists = self.changed_storages_with_range(range.clone())?; - let storages = self.plainstate_storages(lists)?; + let storages = self.plain_state_storages(lists)?; let storage_entries = self.insert_storage_for_hashing(storages)?; for (hashed_address, hashed_slots) in storage_entries { account_prefix_set.insert(Nibbles::unpack(hashed_address)); @@ -1670,8 +1681,7 @@ impl HashingWriter for DatabaseProvider { root: GotExpected { got: state_root, expected: expected_state_root }, block_number: *range.end(), block_hash: end_block_hash, - })) - .into()) + }))) } trie_updates.flush(&self.tx)?; } @@ -1685,7 +1695,7 @@ impl HashingWriter for DatabaseProvider { fn unwind_storage_hashing( &self, range: Range, - ) -> RethResult>> { + ) -> ProviderResult>> { let mut hashed_storage = self.tx.cursor_dup_write::()?; // Aggregate all block changesets and make list of accounts that have been changed. @@ -1719,7 +1729,7 @@ impl HashingWriter for DatabaseProvider { hashed_storages .into_iter() // Apply values to HashedStorage (if Value is zero just remove it); - .try_for_each(|((hashed_address, key), value)| -> RethResult<()> { + .try_for_each(|((hashed_address, key), value)| -> ProviderResult<()> { if hashed_storage .seek_by_key_subkey(hashed_address, key)? .filter(|entry| entry.key == key) @@ -1740,7 +1750,7 @@ impl HashingWriter for DatabaseProvider { fn insert_storage_for_hashing( &self, storages: impl IntoIterator)>, - ) -> RethResult>> { + ) -> ProviderResult>> { // hash values let hashed_storages = storages.into_iter().fold(BTreeMap::new(), |mut map, (address, storage)| { @@ -1761,7 +1771,7 @@ impl HashingWriter for DatabaseProvider { // Hash the address and key and apply them to HashedStorage (if Storage is None // just remove it); hashed_storages.into_iter().try_for_each(|(hashed_address, storage)| { - storage.into_iter().try_for_each(|(key, value)| -> RethResult<()> { + storage.into_iter().try_for_each(|(key, value)| -> ProviderResult<()> { if hashed_storage_cursor .seek_by_key_subkey(hashed_address, key)? .filter(|entry| entry.key == key) @@ -1783,7 +1793,7 @@ impl HashingWriter for DatabaseProvider { fn unwind_account_hashing( &self, range: RangeInclusive, - ) -> RethResult>> { + ) -> ProviderResult>> { let mut hashed_accounts_cursor = self.tx.cursor_write::()?; // Aggregate all block changesets and make a list of accounts that have been changed. @@ -1811,7 +1821,7 @@ impl HashingWriter for DatabaseProvider { hashed_accounts .iter() // Apply values to HashedState (if Account is None remove it); - .try_for_each(|(hashed_address, account)| -> RethResult<()> { + .try_for_each(|(hashed_address, account)| -> ProviderResult<()> { if let Some(account) = account { hashed_accounts_cursor.upsert(*hashed_address, *account)?; } else if hashed_accounts_cursor.seek_exact(*hashed_address)?.is_some() { @@ -1826,7 +1836,7 @@ impl HashingWriter for DatabaseProvider { fn insert_account_for_hashing( &self, accounts: impl IntoIterator)>, - ) -> RethResult>> { + ) -> ProviderResult>> { let mut hashed_accounts_cursor = self.tx.cursor_write::()?; let hashed_accounts = accounts.into_iter().fold( @@ -1837,7 +1847,7 @@ impl HashingWriter for DatabaseProvider { }, ); - hashed_accounts.iter().try_for_each(|(hashed_address, account)| -> RethResult<()> { + hashed_accounts.iter().try_for_each(|(hashed_address, account)| -> ProviderResult<()> { if let Some(account) = account { hashed_accounts_cursor.upsert(*hashed_address, *account)? } else if hashed_accounts_cursor.seek_exact(*hashed_address)?.is_some() { @@ -1851,7 +1861,7 @@ impl HashingWriter for DatabaseProvider { } impl HistoryWriter for DatabaseProvider { - fn update_history_indices(&self, range: RangeInclusive) -> RethResult<()> { + fn update_history_indices(&self, range: RangeInclusive) -> ProviderResult<()> { // account history stage { let indices = self.changed_accounts_and_blocks_with_range(range.clone())?; @@ -1870,7 +1880,7 @@ impl HistoryWriter for DatabaseProvider { fn insert_storage_history_index( &self, storage_transitions: BTreeMap<(Address, B256), Vec>, - ) -> RethResult<()> { + ) -> ProviderResult<()> { self.append_history_index::<_, tables::StorageHistory>( storage_transitions, |(address, storage_key), highest_block_number| { @@ -1882,14 +1892,14 @@ impl HistoryWriter for DatabaseProvider { fn insert_account_history_index( &self, account_transitions: BTreeMap>, - ) -> RethResult<()> { + ) -> ProviderResult<()> { self.append_history_index::<_, tables::AccountHistory>(account_transitions, ShardedKey::new) } fn unwind_storage_history_indices( &self, range: Range, - ) -> RethResult { + ) -> ProviderResult { let storage_changesets = self .tx .cursor_read::()? @@ -1939,7 +1949,7 @@ impl HistoryWriter for DatabaseProvider { fn unwind_account_history_indices( &self, range: RangeInclusive, - ) -> RethResult { + ) -> ProviderResult { let account_changeset = self .tx .cursor_read::()? @@ -1988,7 +1998,7 @@ impl BlockExecutionWriter for DatabaseProvider { &self, chain_spec: &ChainSpec, range: RangeInclusive, - ) -> RethResult { + ) -> ProviderResult { if TAKE { let storage_range = BlockNumberAddress::range(range.clone()); @@ -2053,8 +2063,7 @@ impl BlockExecutionWriter for DatabaseProvider { root: GotExpected { got: new_state_root, expected: parent_state_root }, block_number: parent_number, block_hash: parent_hash, - })) - .into()) + }))) } trie_updates.flush(&self.tx)?; } @@ -2086,7 +2095,7 @@ impl BlockWriter for DatabaseProvider { block: SealedBlock, senders: Option>, prune_modes: Option<&PruneModes>, - ) -> RethResult { + ) -> ProviderResult { let block_number = block.number; let mut durations_recorder = metrics::DurationsRecorder::default(); @@ -2138,9 +2147,8 @@ impl BlockWriter for DatabaseProvider { let tx_iter = if Some(block.body.len()) == senders_len { block.body.into_iter().zip(senders.unwrap()).collect::>() } else { - let senders = TransactionSigned::recover_signers(&block.body, block.body.len()).ok_or( - BlockExecutionError::Validation(BlockValidationError::SenderRecoveryError), - )?; + let senders = TransactionSigned::recover_signers(&block.body, block.body.len()) + .ok_or(ProviderError::SenderRecoveryError)?; durations_recorder.record_relative(metrics::Action::RecoverSigners); debug_assert_eq!(senders.len(), block.body.len(), "missing one or more senders"); block.body.into_iter().zip(senders).collect() @@ -2228,7 +2236,7 @@ impl BlockWriter for DatabaseProvider { blocks: Vec, state: BundleStateWithReceipts, prune_modes: Option<&PruneModes>, - ) -> RethResult<()> { + ) -> ProviderResult<()> { if blocks.is_empty() { return Ok(()) } @@ -2273,7 +2281,10 @@ impl BlockWriter for DatabaseProvider { } impl PruneCheckpointReader for DatabaseProvider { - fn get_prune_checkpoint(&self, segment: PruneSegment) -> RethResult> { + fn get_prune_checkpoint( + &self, + segment: PruneSegment, + ) -> ProviderResult> { Ok(self.tx.get::(segment)?) } } @@ -2283,7 +2294,7 @@ impl PruneCheckpointWriter for DatabaseProvider { &self, segment: PruneSegment, checkpoint: PruneCheckpoint, - ) -> RethResult<()> { + ) -> ProviderResult<()> { Ok(self.tx.put::(segment, checkpoint)?) } } diff --git a/crates/storage/provider/src/providers/mod.rs b/crates/storage/provider/src/providers/mod.rs index 43380487c..898b5a39c 100644 --- a/crates/storage/provider/src/providers/mod.rs +++ b/crates/storage/provider/src/providers/mod.rs @@ -10,6 +10,7 @@ use reth_db::{database::Database, models::StoredBlockBodyIndices}; use reth_interfaces::{ blockchain_tree::{BlockchainTreeEngine, BlockchainTreeViewer}, consensus::ForkchoiceState, + provider::ProviderResult, RethError, RethResult, }; use reth_primitives::{ @@ -76,7 +77,7 @@ where { /// Create a new provider using only the database and the tree, fetching the latest header from /// the database to initialize the provider. - pub fn new(database: ProviderFactory, tree: Tree) -> RethResult { + pub fn new(database: ProviderFactory, tree: Tree) -> ProviderResult { let provider = database.provider()?; let best: ChainInfo = provider.chain_info()?; match provider.header_by_number(best.best_number)? { @@ -84,9 +85,7 @@ where drop(provider); Ok(Self::with_latest(database, tree, header.seal(best.best_hash))) } - None => { - Err(RethError::Provider(ProviderError::HeaderNotFound(best.best_number.into()))) - } + None => Err(ProviderError::HeaderNotFound(best.best_number.into())), } } } @@ -105,10 +104,10 @@ where /// Instead, we ensure that the `block_number` is within the range of the /// [Self::best_block_number] which is updated when a block is synced. #[inline] - fn ensure_canonical_block(&self, block_number: BlockNumber) -> RethResult<()> { + fn ensure_canonical_block(&self, block_number: BlockNumber) -> ProviderResult<()> { let latest = self.best_block_number()?; if block_number > latest { - Err(ProviderError::HeaderNotFound(block_number.into()).into()) + Err(ProviderError::HeaderNotFound(block_number.into())) } else { Ok(()) } @@ -120,34 +119,34 @@ where DB: Database, Tree: Send + Sync, { - fn header(&self, block_hash: &BlockHash) -> RethResult> { + fn header(&self, block_hash: &BlockHash) -> ProviderResult> { self.database.provider()?.header(block_hash) } - fn header_by_number(&self, num: BlockNumber) -> RethResult> { + fn header_by_number(&self, num: BlockNumber) -> ProviderResult> { self.database.provider()?.header_by_number(num) } - fn header_td(&self, hash: &BlockHash) -> RethResult> { + fn header_td(&self, hash: &BlockHash) -> ProviderResult> { self.database.provider()?.header_td(hash) } - fn header_td_by_number(&self, number: BlockNumber) -> RethResult> { + fn header_td_by_number(&self, number: BlockNumber) -> ProviderResult> { self.database.provider()?.header_td_by_number(number) } - fn headers_range(&self, range: impl RangeBounds) -> RethResult> { + fn headers_range(&self, range: impl RangeBounds) -> ProviderResult> { self.database.provider()?.headers_range(range) } - fn sealed_header(&self, number: BlockNumber) -> RethResult> { + fn sealed_header(&self, number: BlockNumber) -> ProviderResult> { self.database.provider()?.sealed_header(number) } fn sealed_headers_range( &self, range: impl RangeBounds, - ) -> RethResult> { + ) -> ProviderResult> { self.database.provider()?.sealed_headers_range(range) } @@ -155,7 +154,7 @@ where &self, range: impl RangeBounds, predicate: impl FnMut(&SealedHeader) -> bool, - ) -> RethResult> { + ) -> ProviderResult> { self.database.provider()?.sealed_headers_while(range, predicate) } } @@ -165,7 +164,7 @@ where DB: Database, Tree: Send + Sync, { - fn block_hash(&self, number: u64) -> RethResult> { + fn block_hash(&self, number: u64) -> ProviderResult> { self.database.provider()?.block_hash(number) } @@ -173,7 +172,7 @@ where &self, start: BlockNumber, end: BlockNumber, - ) -> RethResult> { + ) -> ProviderResult> { self.database.provider()?.canonical_hashes_range(start, end) } } @@ -183,19 +182,19 @@ where DB: Database, Tree: BlockchainTreeViewer + Send + Sync, { - fn chain_info(&self) -> RethResult { + fn chain_info(&self) -> ProviderResult { Ok(self.chain_info.chain_info()) } - fn best_block_number(&self) -> RethResult { + fn best_block_number(&self) -> ProviderResult { Ok(self.chain_info.get_canonical_block_number()) } - fn last_block_number(&self) -> RethResult { + fn last_block_number(&self) -> ProviderResult { self.database.provider()?.last_block_number() } - fn block_number(&self, hash: B256) -> RethResult> { + fn block_number(&self, hash: B256) -> ProviderResult> { self.database.provider()?.block_number(hash) } } @@ -205,15 +204,15 @@ where DB: Database, Tree: BlockchainTreeViewer + Send + Sync, { - fn pending_block_num_hash(&self) -> RethResult> { + fn pending_block_num_hash(&self) -> ProviderResult> { Ok(self.tree.pending_block_num_hash()) } - fn safe_block_num_hash(&self) -> RethResult> { + fn safe_block_num_hash(&self) -> ProviderResult> { Ok(self.chain_info.get_safe_num_hash()) } - fn finalized_block_num_hash(&self) -> RethResult> { + fn finalized_block_num_hash(&self) -> ProviderResult> { Ok(self.chain_info.get_finalized_num_hash()) } } @@ -223,7 +222,7 @@ where DB: Database, Tree: BlockchainTreeViewer + Send + Sync, { - fn find_block_by_hash(&self, hash: B256, source: BlockSource) -> RethResult> { + fn find_block_by_hash(&self, hash: B256, source: BlockSource) -> ProviderResult> { let block = match source { BlockSource::Any => { // check database first @@ -242,29 +241,29 @@ where Ok(block) } - fn block(&self, id: BlockHashOrNumber) -> RethResult> { + fn block(&self, id: BlockHashOrNumber) -> ProviderResult> { match id { BlockHashOrNumber::Hash(hash) => self.find_block_by_hash(hash, BlockSource::Any), BlockHashOrNumber::Number(num) => self.database.provider()?.block_by_number(num), } } - fn pending_block(&self) -> RethResult> { + fn pending_block(&self) -> ProviderResult> { Ok(self.tree.pending_block()) } - fn pending_block_and_receipts(&self) -> RethResult)>> { + fn pending_block_and_receipts(&self) -> ProviderResult)>> { Ok(self.tree.pending_block_and_receipts()) } - fn ommers(&self, id: BlockHashOrNumber) -> RethResult>> { + fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult>> { self.database.provider()?.ommers(id) } fn block_body_indices( &self, number: BlockNumber, - ) -> RethResult> { + ) -> ProviderResult> { self.database.provider()?.block_body_indices(number) } @@ -278,11 +277,11 @@ where &self, id: BlockHashOrNumber, transaction_kind: TransactionVariant, - ) -> RethResult> { + ) -> ProviderResult> { self.database.provider()?.block_with_senders(id, transaction_kind) } - fn block_range(&self, range: RangeInclusive) -> RethResult> { + fn block_range(&self, range: RangeInclusive) -> ProviderResult> { self.database.provider()?.block_range(range) } } @@ -292,62 +291,65 @@ where DB: Database, Tree: BlockchainTreeViewer + Send + Sync, { - fn transaction_id(&self, tx_hash: TxHash) -> RethResult> { + fn transaction_id(&self, tx_hash: TxHash) -> ProviderResult> { self.database.provider()?.transaction_id(tx_hash) } - fn transaction_by_id(&self, id: TxNumber) -> RethResult> { + fn transaction_by_id(&self, id: TxNumber) -> ProviderResult> { self.database.provider()?.transaction_by_id(id) } fn transaction_by_id_no_hash( &self, id: TxNumber, - ) -> RethResult> { + ) -> ProviderResult> { self.database.provider()?.transaction_by_id_no_hash(id) } - fn transaction_by_hash(&self, hash: TxHash) -> RethResult> { + fn transaction_by_hash(&self, hash: TxHash) -> ProviderResult> { self.database.provider()?.transaction_by_hash(hash) } fn transaction_by_hash_with_meta( &self, tx_hash: TxHash, - ) -> RethResult> { + ) -> ProviderResult> { self.database.provider()?.transaction_by_hash_with_meta(tx_hash) } - fn transaction_block(&self, id: TxNumber) -> RethResult> { + fn transaction_block(&self, id: TxNumber) -> ProviderResult> { self.database.provider()?.transaction_block(id) } fn transactions_by_block( &self, id: BlockHashOrNumber, - ) -> RethResult>> { + ) -> ProviderResult>> { self.database.provider()?.transactions_by_block(id) } fn transactions_by_block_range( &self, range: impl RangeBounds, - ) -> RethResult>> { + ) -> ProviderResult>> { self.database.provider()?.transactions_by_block_range(range) } fn transactions_by_tx_range( &self, range: impl RangeBounds, - ) -> RethResult> { + ) -> ProviderResult> { self.database.provider()?.transactions_by_tx_range(range) } - fn senders_by_tx_range(&self, range: impl RangeBounds) -> RethResult> { + fn senders_by_tx_range( + &self, + range: impl RangeBounds, + ) -> ProviderResult> { self.database.provider()?.senders_by_tx_range(range) } - fn transaction_sender(&self, id: TxNumber) -> RethResult> { + fn transaction_sender(&self, id: TxNumber) -> ProviderResult> { self.database.provider()?.transaction_sender(id) } } @@ -357,15 +359,15 @@ where DB: Database, Tree: Send + Sync, { - fn receipt(&self, id: TxNumber) -> RethResult> { + fn receipt(&self, id: TxNumber) -> ProviderResult> { self.database.provider()?.receipt(id) } - fn receipt_by_hash(&self, hash: TxHash) -> RethResult> { + fn receipt_by_hash(&self, hash: TxHash) -> ProviderResult> { self.database.provider()?.receipt_by_hash(hash) } - fn receipts_by_block(&self, block: BlockHashOrNumber) -> RethResult>> { + fn receipts_by_block(&self, block: BlockHashOrNumber) -> ProviderResult>> { self.database.provider()?.receipts_by_block(block) } } @@ -374,7 +376,7 @@ where DB: Database, Tree: BlockchainTreeViewer + Send + Sync, { - fn receipts_by_block_id(&self, block: BlockId) -> RethResult>> { + fn receipts_by_block_id(&self, block: BlockId) -> ProviderResult>> { match block { BlockId::Hash(rpc_block_hash) => { let mut receipts = self.receipts_by_block(rpc_block_hash.block_hash.into())?; @@ -406,11 +408,11 @@ where &self, id: BlockHashOrNumber, timestamp: u64, - ) -> RethResult>> { + ) -> ProviderResult>> { self.database.provider()?.withdrawals_by_block(id, timestamp) } - fn latest_withdrawal(&self) -> RethResult> { + fn latest_withdrawal(&self) -> ProviderResult> { self.database.provider()?.latest_withdrawal() } } @@ -420,11 +422,11 @@ where DB: Database, Tree: Send + Sync, { - fn get_stage_checkpoint(&self, id: StageId) -> RethResult> { + fn get_stage_checkpoint(&self, id: StageId) -> ProviderResult> { self.database.provider()?.get_stage_checkpoint(id) } - fn get_stage_checkpoint_progress(&self, id: StageId) -> RethResult>> { + fn get_stage_checkpoint_progress(&self, id: StageId) -> ProviderResult>> { self.database.provider()?.get_stage_checkpoint_progress(id) } } @@ -439,7 +441,7 @@ where cfg: &mut CfgEnv, block_env: &mut BlockEnv, at: BlockHashOrNumber, - ) -> RethResult<()> { + ) -> ProviderResult<()> { self.database.provider()?.fill_env_at(cfg, block_env, at) } @@ -448,11 +450,15 @@ where cfg: &mut CfgEnv, block_env: &mut BlockEnv, header: &Header, - ) -> RethResult<()> { + ) -> ProviderResult<()> { self.database.provider()?.fill_env_with_header(cfg, block_env, header) } - fn fill_block_env_at(&self, block_env: &mut BlockEnv, at: BlockHashOrNumber) -> RethResult<()> { + fn fill_block_env_at( + &self, + block_env: &mut BlockEnv, + at: BlockHashOrNumber, + ) -> ProviderResult<()> { self.database.provider()?.fill_block_env_at(block_env, at) } @@ -460,15 +466,15 @@ where &self, block_env: &mut BlockEnv, header: &Header, - ) -> RethResult<()> { + ) -> ProviderResult<()> { self.database.provider()?.fill_block_env_with_header(block_env, header) } - fn fill_cfg_env_at(&self, cfg: &mut CfgEnv, at: BlockHashOrNumber) -> RethResult<()> { + fn fill_cfg_env_at(&self, cfg: &mut CfgEnv, at: BlockHashOrNumber) -> ProviderResult<()> { self.database.provider()?.fill_cfg_env_at(cfg, at) } - fn fill_cfg_env_with_header(&self, cfg: &mut CfgEnv, header: &Header) -> RethResult<()> { + fn fill_cfg_env_with_header(&self, cfg: &mut CfgEnv, header: &Header) -> ProviderResult<()> { self.database.provider()?.fill_cfg_env_with_header(cfg, header) } } @@ -478,7 +484,10 @@ where DB: Database, Tree: Send + Sync, { - fn get_prune_checkpoint(&self, segment: PruneSegment) -> RethResult> { + fn get_prune_checkpoint( + &self, + segment: PruneSegment, + ) -> ProviderResult> { self.database.provider()?.get_prune_checkpoint(segment) } } @@ -499,7 +508,7 @@ where Tree: BlockchainTreePendingStateProvider + BlockchainTreeViewer, { /// Storage provider for latest block - fn latest(&self) -> RethResult> { + fn latest(&self) -> ProviderResult> { trace!(target: "providers::blockchain", "Getting latest block state provider"); self.database.latest() } @@ -507,18 +516,18 @@ where fn history_by_block_number( &self, block_number: BlockNumber, - ) -> RethResult> { + ) -> ProviderResult> { trace!(target: "providers::blockchain", ?block_number, "Getting history by block number"); self.ensure_canonical_block(block_number)?; self.database.history_by_block_number(block_number) } - fn history_by_block_hash(&self, block_hash: BlockHash) -> RethResult> { + fn history_by_block_hash(&self, block_hash: BlockHash) -> ProviderResult> { trace!(target: "providers::blockchain", ?block_hash, "Getting history by block hash"); self.database.history_by_block_hash(block_hash) } - fn state_by_block_hash(&self, block: BlockHash) -> RethResult> { + fn state_by_block_hash(&self, block: BlockHash) -> ProviderResult> { trace!(target: "providers::blockchain", ?block, "Getting state by block hash"); let mut state = self.history_by_block_hash(block); @@ -537,7 +546,7 @@ where /// /// If there's no pending block available then the latest state provider is returned: /// [Self::latest] - fn pending(&self) -> RethResult> { + fn pending(&self) -> ProviderResult> { trace!(target: "providers::blockchain", "Getting provider for pending state"); if let Some(block) = self.tree.pending_block_num_hash() { @@ -550,7 +559,10 @@ where self.latest() } - fn pending_state_by_hash(&self, block_hash: B256) -> RethResult>> { + fn pending_state_by_hash( + &self, + block_hash: B256, + ) -> ProviderResult>> { if let Some(state) = self.tree.find_pending_state_provider(block_hash) { return Ok(Some(self.pending_with_provider(state)?)) } @@ -560,7 +572,7 @@ where fn pending_with_provider( &self, post_state_data: Box, - ) -> RethResult> { + ) -> ProviderResult> { let canonical_fork = post_state_data.canonical_fork(); trace!(target: "providers::blockchain", ?canonical_fork, "Returning post state provider"); @@ -714,7 +726,7 @@ where Self: BlockReader + BlockIdReader + ReceiptProviderIdExt, Tree: BlockchainTreeEngine, { - fn block_by_id(&self, id: BlockId) -> RethResult> { + fn block_by_id(&self, id: BlockId) -> ProviderResult> { match id { BlockId::Number(num) => self.block_by_number_or_tag(num), BlockId::Hash(hash) => { @@ -732,23 +744,23 @@ where } } - fn header_by_number_or_tag(&self, id: BlockNumberOrTag) -> RethResult> { - match id { - BlockNumberOrTag::Latest => Ok(Some(self.chain_info.get_canonical_head().unseal())), + fn header_by_number_or_tag(&self, id: BlockNumberOrTag) -> ProviderResult> { + Ok(match id { + BlockNumberOrTag::Latest => Some(self.chain_info.get_canonical_head().unseal()), BlockNumberOrTag::Finalized => { - Ok(self.chain_info.get_finalized_header().map(|h| h.unseal())) + self.chain_info.get_finalized_header().map(|h| h.unseal()) } - BlockNumberOrTag::Safe => Ok(self.chain_info.get_safe_header().map(|h| h.unseal())), - BlockNumberOrTag::Earliest => self.header_by_number(0), - BlockNumberOrTag::Pending => Ok(self.tree.pending_header().map(|h| h.unseal())), - BlockNumberOrTag::Number(num) => self.header_by_number(num), - } + BlockNumberOrTag::Safe => self.chain_info.get_safe_header().map(|h| h.unseal()), + BlockNumberOrTag::Earliest => self.header_by_number(0)?, + BlockNumberOrTag::Pending => self.tree.pending_header().map(|h| h.unseal()), + BlockNumberOrTag::Number(num) => self.header_by_number(num)?, + }) } fn sealed_header_by_number_or_tag( &self, id: BlockNumberOrTag, - ) -> RethResult> { + ) -> ProviderResult> { match id { BlockNumberOrTag::Latest => Ok(Some(self.chain_info.get_canonical_head())), BlockNumberOrTag::Finalized => Ok(self.chain_info.get_finalized_header()), @@ -763,23 +775,21 @@ where } } - fn sealed_header_by_id(&self, id: BlockId) -> RethResult> { - match id { - BlockId::Number(num) => self.sealed_header_by_number_or_tag(num), - BlockId::Hash(hash) => { - self.header(&hash.block_hash)?.map_or_else(|| Ok(None), |h| Ok(Some(h.seal_slow()))) - } - } + fn sealed_header_by_id(&self, id: BlockId) -> ProviderResult> { + Ok(match id { + BlockId::Number(num) => self.sealed_header_by_number_or_tag(num)?, + BlockId::Hash(hash) => self.header(&hash.block_hash)?.map(|h| h.seal_slow()), + }) } - fn header_by_id(&self, id: BlockId) -> RethResult> { - match id { - BlockId::Number(num) => self.header_by_number_or_tag(num), - BlockId::Hash(hash) => self.header(&hash.block_hash), - } + fn header_by_id(&self, id: BlockId) -> ProviderResult> { + Ok(match id { + BlockId::Number(num) => self.header_by_number_or_tag(num)?, + BlockId::Hash(hash) => self.header(&hash.block_hash)?, + }) } - fn ommers_by_id(&self, id: BlockId) -> RethResult>> { + fn ommers_by_id(&self, id: BlockId) -> ProviderResult>> { match id { BlockId::Number(num) => self.ommers_by_number_or_tag(num), BlockId::Hash(hash) => { @@ -822,7 +832,7 @@ where fn account_block_changeset( &self, block_number: BlockNumber, - ) -> RethResult> { + ) -> ProviderResult> { self.database.provider()?.account_block_changeset(block_number) } } @@ -833,7 +843,7 @@ where Tree: Sync + Send, { /// Get basic account information. - fn basic_account(&self, address: Address) -> RethResult> { + fn basic_account(&self, address: Address) -> ProviderResult> { self.database.provider()?.basic_account(address) } } diff --git a/crates/storage/provider/src/providers/snapshot/jar.rs b/crates/storage/provider/src/providers/snapshot/jar.rs index 60d59a3f9..9d996d9e1 100644 --- a/crates/storage/provider/src/providers/snapshot/jar.rs +++ b/crates/storage/provider/src/providers/snapshot/jar.rs @@ -6,11 +6,7 @@ use reth_db::{ codecs::CompactU256, snapshot::{HeaderMask, ReceiptMask, SnapshotCursor, TransactionMask}, }; -use reth_interfaces::{ - executor::{BlockExecutionError, BlockValidationError}, - provider::ProviderError, - RethResult, -}; +use reth_interfaces::provider::{ProviderError, ProviderResult}; use reth_primitives::{ Address, BlockHash, BlockHashOrNumber, BlockNumber, ChainInfo, Header, Receipt, SealedHeader, TransactionMeta, TransactionSigned, TransactionSignedNoHash, TxHash, TxNumber, B256, U256, @@ -41,7 +37,7 @@ impl<'a> From> for SnapshotJarProvider<'a> { impl<'a> SnapshotJarProvider<'a> { /// Provides a cursor for more granular data access. - pub fn cursor<'b>(&'b self) -> RethResult> + pub fn cursor<'b>(&'b self) -> ProviderResult> where 'b: 'a, { @@ -56,7 +52,7 @@ impl<'a> SnapshotJarProvider<'a> { } impl<'a> HeaderProvider for SnapshotJarProvider<'a> { - fn header(&self, block_hash: &BlockHash) -> RethResult> { + fn header(&self, block_hash: &BlockHash) -> ProviderResult> { Ok(self .cursor()? .get_two::>(block_hash.into())? @@ -64,11 +60,11 @@ impl<'a> HeaderProvider for SnapshotJarProvider<'a> { .map(|(header, _)| header)) } - fn header_by_number(&self, num: BlockNumber) -> RethResult> { + fn header_by_number(&self, num: BlockNumber) -> ProviderResult> { self.cursor()?.get_one::>(num.into()) } - fn header_td(&self, block_hash: &BlockHash) -> RethResult> { + fn header_td(&self, block_hash: &BlockHash) -> ProviderResult> { Ok(self .cursor()? .get_two::>(block_hash.into())? @@ -76,11 +72,11 @@ impl<'a> HeaderProvider for SnapshotJarProvider<'a> { .map(|(td, _)| td.into())) } - fn header_td_by_number(&self, num: BlockNumber) -> RethResult> { + fn header_td_by_number(&self, num: BlockNumber) -> ProviderResult> { Ok(self.cursor()?.get_one::>(num.into())?.map(Into::into)) } - fn headers_range(&self, range: impl RangeBounds) -> RethResult> { + fn headers_range(&self, range: impl RangeBounds) -> ProviderResult> { let range = to_range(range); let mut cursor = self.cursor()?; @@ -95,7 +91,7 @@ impl<'a> HeaderProvider for SnapshotJarProvider<'a> { Ok(headers) } - fn sealed_header(&self, number: BlockNumber) -> RethResult> { + fn sealed_header(&self, number: BlockNumber) -> ProviderResult> { Ok(self .cursor()? .get_two::>(number.into())? @@ -106,7 +102,7 @@ impl<'a> HeaderProvider for SnapshotJarProvider<'a> { &self, range: impl RangeBounds, mut predicate: impl FnMut(&SealedHeader) -> bool, - ) -> RethResult> { + ) -> ProviderResult> { let range = to_range(range); let mut cursor = self.cursor()?; @@ -128,7 +124,7 @@ impl<'a> HeaderProvider for SnapshotJarProvider<'a> { } impl<'a> BlockHashReader for SnapshotJarProvider<'a> { - fn block_hash(&self, number: u64) -> RethResult> { + fn block_hash(&self, number: u64) -> ProviderResult> { self.cursor()?.get_one::>(number.into()) } @@ -136,7 +132,7 @@ impl<'a> BlockHashReader for SnapshotJarProvider<'a> { &self, start: BlockNumber, end: BlockNumber, - ) -> RethResult> { + ) -> ProviderResult> { let mut cursor = self.cursor()?; let mut hashes = Vec::with_capacity((end - start) as usize); @@ -150,22 +146,22 @@ impl<'a> BlockHashReader for SnapshotJarProvider<'a> { } impl<'a> BlockNumReader for SnapshotJarProvider<'a> { - fn chain_info(&self) -> RethResult { + fn chain_info(&self) -> ProviderResult { // Information on live database - Err(ProviderError::UnsupportedProvider.into()) + Err(ProviderError::UnsupportedProvider) } - fn best_block_number(&self) -> RethResult { + fn best_block_number(&self) -> ProviderResult { // Information on live database - Err(ProviderError::UnsupportedProvider.into()) + Err(ProviderError::UnsupportedProvider) } - fn last_block_number(&self) -> RethResult { + fn last_block_number(&self) -> ProviderResult { // Information on live database - Err(ProviderError::UnsupportedProvider.into()) + Err(ProviderError::UnsupportedProvider) } - fn block_number(&self, hash: B256) -> RethResult> { + fn block_number(&self, hash: B256) -> ProviderResult> { let mut cursor = self.cursor()?; Ok(cursor @@ -175,7 +171,7 @@ impl<'a> BlockNumReader for SnapshotJarProvider<'a> { } impl<'a> TransactionsProvider for SnapshotJarProvider<'a> { - fn transaction_id(&self, hash: TxHash) -> RethResult> { + fn transaction_id(&self, hash: TxHash) -> ProviderResult> { let mut cursor = self.cursor()?; Ok(cursor @@ -183,7 +179,7 @@ impl<'a> TransactionsProvider for SnapshotJarProvider<'a> { .and_then(|res| (res.hash() == hash).then(|| cursor.number()))) } - fn transaction_by_id(&self, num: TxNumber) -> RethResult> { + fn transaction_by_id(&self, num: TxNumber) -> ProviderResult> { Ok(self .cursor()? .get_one::>(num.into())? @@ -193,11 +189,11 @@ impl<'a> TransactionsProvider for SnapshotJarProvider<'a> { fn transaction_by_id_no_hash( &self, num: TxNumber, - ) -> RethResult> { + ) -> ProviderResult> { self.cursor()?.get_one::>(num.into()) } - fn transaction_by_hash(&self, hash: TxHash) -> RethResult> { + fn transaction_by_hash(&self, hash: TxHash) -> ProviderResult> { Ok(self .cursor()? .get_one::>((&hash).into())? @@ -207,44 +203,47 @@ impl<'a> TransactionsProvider for SnapshotJarProvider<'a> { fn transaction_by_hash_with_meta( &self, _hash: TxHash, - ) -> RethResult> { + ) -> ProviderResult> { // Information required on indexing table [`tables::TransactionBlock`] - Err(ProviderError::UnsupportedProvider.into()) + Err(ProviderError::UnsupportedProvider) } - fn transaction_block(&self, _id: TxNumber) -> RethResult> { + fn transaction_block(&self, _id: TxNumber) -> ProviderResult> { // Information on indexing table [`tables::TransactionBlock`] - Err(ProviderError::UnsupportedProvider.into()) + Err(ProviderError::UnsupportedProvider) } fn transactions_by_block( &self, _block_id: BlockHashOrNumber, - ) -> RethResult>> { + ) -> ProviderResult>> { // Related to indexing tables. Live database should get the tx_range and call snapshot // provider with `transactions_by_tx_range` instead. - Err(ProviderError::UnsupportedProvider.into()) + Err(ProviderError::UnsupportedProvider) } fn transactions_by_block_range( &self, _range: impl RangeBounds, - ) -> RethResult>> { + ) -> ProviderResult>> { // Related to indexing tables. Live database should get the tx_range and call snapshot // provider with `transactions_by_tx_range` instead. - Err(ProviderError::UnsupportedProvider.into()) + Err(ProviderError::UnsupportedProvider) } - fn senders_by_tx_range(&self, range: impl RangeBounds) -> RethResult> { + fn senders_by_tx_range( + &self, + range: impl RangeBounds, + ) -> ProviderResult> { let txs = self.transactions_by_tx_range(range)?; - Ok(TransactionSignedNoHash::recover_signers(&txs, txs.len()) - .ok_or(BlockExecutionError::Validation(BlockValidationError::SenderRecoveryError))?) + TransactionSignedNoHash::recover_signers(&txs, txs.len()) + .ok_or(ProviderError::SenderRecoveryError) } fn transactions_by_tx_range( &self, range: impl RangeBounds, - ) -> RethResult> { + ) -> ProviderResult> { let range = to_range(range); let mut cursor = self.cursor()?; let mut txes = Vec::with_capacity((range.end - range.start) as usize); @@ -259,7 +258,7 @@ impl<'a> TransactionsProvider for SnapshotJarProvider<'a> { Ok(txes) } - fn transaction_sender(&self, num: TxNumber) -> RethResult> { + fn transaction_sender(&self, num: TxNumber) -> ProviderResult> { Ok(self .cursor()? .get_one::>(num.into())? @@ -268,11 +267,11 @@ impl<'a> TransactionsProvider for SnapshotJarProvider<'a> { } impl<'a> ReceiptProvider for SnapshotJarProvider<'a> { - fn receipt(&self, num: TxNumber) -> RethResult> { + fn receipt(&self, num: TxNumber) -> ProviderResult> { self.cursor()?.get_one::>(num.into()) } - fn receipt_by_hash(&self, hash: TxHash) -> RethResult> { + fn receipt_by_hash(&self, hash: TxHash) -> ProviderResult> { if let Some(tx_snapshot) = &self.auxiliar_jar { if let Some(num) = tx_snapshot.transaction_id(hash)? { return self.receipt(num) @@ -281,10 +280,10 @@ impl<'a> ReceiptProvider for SnapshotJarProvider<'a> { Ok(None) } - fn receipts_by_block(&self, _block: BlockHashOrNumber) -> RethResult>> { + fn receipts_by_block(&self, _block: BlockHashOrNumber) -> ProviderResult>> { // Related to indexing tables. Snapshot should get the tx_range and call snapshot // provider with `receipt()` instead for each - Err(ProviderError::UnsupportedProvider.into()) + Err(ProviderError::UnsupportedProvider) } } diff --git a/crates/storage/provider/src/providers/snapshot/manager.rs b/crates/storage/provider/src/providers/snapshot/manager.rs index d4124f785..972df4040 100644 --- a/crates/storage/provider/src/providers/snapshot/manager.rs +++ b/crates/storage/provider/src/providers/snapshot/manager.rs @@ -6,7 +6,7 @@ use reth_db::{ codecs::CompactU256, snapshot::{HeaderMask, TransactionMask}, }; -use reth_interfaces::{provider::ProviderError, RethResult}; +use reth_interfaces::provider::{ProviderError, ProviderResult}; use reth_nippy_jar::NippyJar; use reth_primitives::{ snapshot::HighestSnapshots, Address, BlockHash, BlockHashOrNumber, BlockNumber, ChainInfo, @@ -73,13 +73,13 @@ impl SnapshotProvider { segment: SnapshotSegment, block: BlockNumber, path: Option<&Path>, - ) -> RethResult> { + ) -> ProviderResult> { self.get_segment_provider( segment, || self.get_segment_ranges_from_block(segment, block), path, )? - .ok_or_else(|| ProviderError::MissingSnapshotBlock(segment, block).into()) + .ok_or_else(|| ProviderError::MissingSnapshotBlock(segment, block)) } /// Gets the [`SnapshotJarProvider`] of the requested segment and transaction. @@ -88,13 +88,13 @@ impl SnapshotProvider { segment: SnapshotSegment, tx: TxNumber, path: Option<&Path>, - ) -> RethResult> { + ) -> ProviderResult> { self.get_segment_provider( segment, || self.get_segment_ranges_from_transaction(segment, tx), path, )? - .ok_or_else(|| ProviderError::MissingSnapshotTx(segment, tx).into()) + .ok_or_else(|| ProviderError::MissingSnapshotTx(segment, tx)) } /// Gets the [`SnapshotJarProvider`] of the requested segment and block or transaction. @@ -103,7 +103,7 @@ impl SnapshotProvider { segment: SnapshotSegment, fn_ranges: impl Fn() -> Option<(RangeInclusive, RangeInclusive)>, path: Option<&Path>, - ) -> RethResult>> { + ) -> ProviderResult>> { // If we have a path, then get the block range and transaction range from its name. // Otherwise, check `self.available_snapshots` let snapshot_ranges = match path { @@ -136,7 +136,7 @@ impl SnapshotProvider { segment: SnapshotSegment, block_range: &RangeInclusive, tx_range: &RangeInclusive, - ) -> Result, reth_interfaces::RethError> { + ) -> ProviderResult> { let key = (*block_range.end(), segment); if let Some(jar) = self.map.get(&key) { Ok(jar.into()) @@ -212,8 +212,8 @@ impl SnapshotProvider { pub fn find_snapshot( &self, segment: SnapshotSegment, - func: impl Fn(SnapshotJarProvider<'_>) -> RethResult>, - ) -> RethResult> { + func: impl Fn(SnapshotJarProvider<'_>) -> ProviderResult>, + ) -> ProviderResult> { let snapshots = self.snapshots_block_index.read(); if let Some(segment_snapshots) = snapshots.get(&segment) { // It's more probable that the request comes from a newer block height, so we iterate @@ -241,7 +241,7 @@ impl SnapshotProvider { } impl HeaderProvider for SnapshotProvider { - fn header(&self, block_hash: &BlockHash) -> RethResult> { + fn header(&self, block_hash: &BlockHash) -> ProviderResult> { self.find_snapshot(SnapshotSegment::Headers, |jar_provider| { Ok(jar_provider .cursor()? @@ -255,12 +255,12 @@ impl HeaderProvider for SnapshotProvider { }) } - fn header_by_number(&self, num: BlockNumber) -> RethResult> { + fn header_by_number(&self, num: BlockNumber) -> ProviderResult> { self.get_segment_provider_from_block(SnapshotSegment::Headers, num, None)? .header_by_number(num) } - fn header_td(&self, block_hash: &BlockHash) -> RethResult> { + fn header_td(&self, block_hash: &BlockHash) -> ProviderResult> { self.find_snapshot(SnapshotSegment::Headers, |jar_provider| { Ok(jar_provider .cursor()? @@ -269,16 +269,16 @@ impl HeaderProvider for SnapshotProvider { }) } - fn header_td_by_number(&self, num: BlockNumber) -> RethResult> { + fn header_td_by_number(&self, num: BlockNumber) -> ProviderResult> { self.get_segment_provider_from_block(SnapshotSegment::Headers, num, None)? .header_td_by_number(num) } - fn headers_range(&self, _range: impl RangeBounds) -> RethResult> { + fn headers_range(&self, _range: impl RangeBounds) -> ProviderResult> { todo!(); } - fn sealed_header(&self, num: BlockNumber) -> RethResult> { + fn sealed_header(&self, num: BlockNumber) -> ProviderResult> { self.get_segment_provider_from_block(SnapshotSegment::Headers, num, None)? .sealed_header(num) } @@ -287,13 +287,13 @@ impl HeaderProvider for SnapshotProvider { &self, _range: impl RangeBounds, _predicate: impl FnMut(&SealedHeader) -> bool, - ) -> RethResult> { + ) -> ProviderResult> { todo!() } } impl BlockHashReader for SnapshotProvider { - fn block_hash(&self, num: u64) -> RethResult> { + fn block_hash(&self, num: u64) -> ProviderResult> { self.get_segment_provider_from_block(SnapshotSegment::Headers, num, None)?.block_hash(num) } @@ -301,31 +301,31 @@ impl BlockHashReader for SnapshotProvider { &self, _start: BlockNumber, _end: BlockNumber, - ) -> RethResult> { + ) -> ProviderResult> { todo!() } } impl BlockNumReader for SnapshotProvider { - fn chain_info(&self) -> RethResult { + fn chain_info(&self) -> ProviderResult { todo!() } - fn best_block_number(&self) -> RethResult { + fn best_block_number(&self) -> ProviderResult { todo!() } - fn last_block_number(&self) -> RethResult { + fn last_block_number(&self) -> ProviderResult { todo!() } - fn block_number(&self, _hash: B256) -> RethResult> { + fn block_number(&self, _hash: B256) -> ProviderResult> { todo!() } } impl TransactionsProvider for SnapshotProvider { - fn transaction_id(&self, tx_hash: TxHash) -> RethResult> { + fn transaction_id(&self, tx_hash: TxHash) -> ProviderResult> { self.find_snapshot(SnapshotSegment::Transactions, |jar_provider| { let mut cursor = jar_provider.cursor()?; if cursor @@ -340,7 +340,7 @@ impl TransactionsProvider for SnapshotProvider { }) } - fn transaction_by_id(&self, num: TxNumber) -> RethResult> { + fn transaction_by_id(&self, num: TxNumber) -> ProviderResult> { self.get_segment_provider_from_transaction(SnapshotSegment::Transactions, num, None)? .transaction_by_id(num) } @@ -348,12 +348,12 @@ impl TransactionsProvider for SnapshotProvider { fn transaction_by_id_no_hash( &self, num: TxNumber, - ) -> RethResult> { + ) -> ProviderResult> { self.get_segment_provider_from_transaction(SnapshotSegment::Transactions, num, None)? .transaction_by_id_no_hash(num) } - fn transaction_by_hash(&self, hash: TxHash) -> RethResult> { + fn transaction_by_hash(&self, hash: TxHash) -> ProviderResult> { self.find_snapshot(SnapshotSegment::Transactions, |jar_provider| { Ok(jar_provider .cursor()? @@ -366,40 +366,43 @@ impl TransactionsProvider for SnapshotProvider { fn transaction_by_hash_with_meta( &self, _hash: TxHash, - ) -> RethResult> { + ) -> ProviderResult> { todo!() } - fn transaction_block(&self, _id: TxNumber) -> RethResult> { + fn transaction_block(&self, _id: TxNumber) -> ProviderResult> { todo!() } fn transactions_by_block( &self, _block_id: BlockHashOrNumber, - ) -> RethResult>> { + ) -> ProviderResult>> { todo!() } fn transactions_by_block_range( &self, _range: impl RangeBounds, - ) -> RethResult>> { + ) -> ProviderResult>> { todo!() } - fn senders_by_tx_range(&self, _range: impl RangeBounds) -> RethResult> { + fn senders_by_tx_range( + &self, + _range: impl RangeBounds, + ) -> ProviderResult> { todo!() } fn transactions_by_tx_range( &self, _range: impl RangeBounds, - ) -> RethResult> { + ) -> ProviderResult> { todo!() } - fn transaction_sender(&self, id: TxNumber) -> RethResult> { + fn transaction_sender(&self, id: TxNumber) -> ProviderResult> { Ok(self.transaction_by_id_no_hash(id)?.and_then(|tx| tx.recover_signer())) } } diff --git a/crates/storage/provider/src/providers/snapshot/mod.rs b/crates/storage/provider/src/providers/snapshot/mod.rs index cde7dbfc1..a5244c78e 100644 --- a/crates/storage/provider/src/providers/snapshot/mod.rs +++ b/crates/storage/provider/src/providers/snapshot/mod.rs @@ -4,7 +4,7 @@ pub use manager::SnapshotProvider; mod jar; pub use jar::SnapshotJarProvider; -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_nippy_jar::NippyJar; use reth_primitives::{snapshot::SegmentHeader, SnapshotSegment}; use std::ops::Deref; @@ -20,7 +20,7 @@ pub struct LoadedJar { } impl LoadedJar { - fn new(jar: NippyJar) -> RethResult { + fn new(jar: NippyJar) -> ProviderResult { let mmap_handle = jar.open_data()?; Ok(Self { jar, mmap_handle }) } diff --git a/crates/storage/provider/src/providers/state/historical.rs b/crates/storage/provider/src/providers/state/historical.rs index d91d2f589..c76ea75d5 100644 --- a/crates/storage/provider/src/providers/state/historical.rs +++ b/crates/storage/provider/src/providers/state/historical.rs @@ -10,7 +10,7 @@ use reth_db::{ transaction::DbTx, BlockNumberList, }; -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_primitives::{ trie::AccountProof, Account, Address, BlockNumber, Bytecode, StorageKey, StorageValue, B256, }; @@ -61,9 +61,9 @@ impl<'b, TX: DbTx> HistoricalStateProviderRef<'b, TX> { } /// Lookup an account in the AccountHistory table - pub fn account_history_lookup(&self, address: Address) -> RethResult { + pub fn account_history_lookup(&self, address: Address) -> ProviderResult { if !self.lowest_available_blocks.is_account_history_available(self.block_number) { - return Err(ProviderError::StateAtBlockPruned(self.block_number).into()) + return Err(ProviderError::StateAtBlockPruned(self.block_number)) } // history key to search IntegerList of block number changesets. @@ -80,9 +80,9 @@ impl<'b, TX: DbTx> HistoricalStateProviderRef<'b, TX> { &self, address: Address, storage_key: StorageKey, - ) -> RethResult { + ) -> ProviderResult { if !self.lowest_available_blocks.is_storage_history_available(self.block_number) { - return Err(ProviderError::StateAtBlockPruned(self.block_number).into()) + return Err(ProviderError::StateAtBlockPruned(self.block_number)) } // history key to search IntegerList of block number changesets. @@ -99,7 +99,7 @@ impl<'b, TX: DbTx> HistoricalStateProviderRef<'b, TX> { key: K, key_filter: impl Fn(&K) -> bool, lowest_available_block_number: Option, - ) -> RethResult + ) -> ProviderResult where T: Table, { @@ -153,7 +153,7 @@ impl<'b, TX: DbTx> HistoricalStateProviderRef<'b, TX> { impl<'b, TX: DbTx> AccountReader for HistoricalStateProviderRef<'b, TX> { /// Get basic account information. - fn basic_account(&self, address: Address) -> RethResult> { + fn basic_account(&self, address: Address) -> ProviderResult> { match self.account_history_lookup(address)? { HistoryInfo::NotYetWritten => Ok(None), HistoryInfo::InChangeset(changeset_block_number) => Ok(self @@ -175,7 +175,7 @@ impl<'b, TX: DbTx> AccountReader for HistoricalStateProviderRef<'b, TX> { impl<'b, TX: DbTx> BlockHashReader for HistoricalStateProviderRef<'b, TX> { /// Get block hash by number. - fn block_hash(&self, number: u64) -> RethResult> { + fn block_hash(&self, number: u64) -> ProviderResult> { self.tx.get::(number).map_err(Into::into) } @@ -183,7 +183,7 @@ impl<'b, TX: DbTx> BlockHashReader for HistoricalStateProviderRef<'b, TX> { &self, start: BlockNumber, end: BlockNumber, - ) -> RethResult> { + ) -> ProviderResult> { let range = start..end; self.tx .cursor_read::() @@ -191,15 +191,15 @@ impl<'b, TX: DbTx> BlockHashReader for HistoricalStateProviderRef<'b, TX> { cursor .walk_range(range)? .map(|result| result.map(|(_, hash)| hash).map_err(Into::into)) - .collect::>>() + .collect::>>() })? .map_err(Into::into) } } impl<'b, TX: DbTx> StateRootProvider for HistoricalStateProviderRef<'b, TX> { - fn state_root(&self, _post_state: &BundleStateWithReceipts) -> RethResult { - Err(ProviderError::StateRootNotAvailableForHistoricalBlock.into()) + fn state_root(&self, _post_state: &BundleStateWithReceipts) -> ProviderResult { + Err(ProviderError::StateRootNotAvailableForHistoricalBlock) } } @@ -209,7 +209,7 @@ impl<'b, TX: DbTx> StateProvider for HistoricalStateProviderRef<'b, TX> { &self, address: Address, storage_key: StorageKey, - ) -> RethResult> { + ) -> ProviderResult> { match self.storage_history_lookup(address, storage_key)? { HistoryInfo::NotYetWritten => Ok(None), HistoryInfo::InChangeset(changeset_block_number) => Ok(Some( @@ -235,13 +235,13 @@ impl<'b, TX: DbTx> StateProvider for HistoricalStateProviderRef<'b, TX> { } /// Get account code by its hash - fn bytecode_by_hash(&self, code_hash: B256) -> RethResult> { + fn bytecode_by_hash(&self, code_hash: B256) -> ProviderResult> { self.tx.get::(code_hash).map_err(Into::into) } /// Get account and storage proofs. - fn proof(&self, _address: Address, _keys: &[B256]) -> RethResult { - Err(ProviderError::StateRootNotAvailableForHistoricalBlock.into()) + fn proof(&self, _address: Address, _keys: &[B256]) -> ProviderResult { + Err(ProviderError::StateRootNotAvailableForHistoricalBlock) } } @@ -566,11 +566,11 @@ mod tests { ); assert_eq!( provider.account_history_lookup(ADDRESS), - Err(ProviderError::StateAtBlockPruned(provider.block_number).into()) + Err(ProviderError::StateAtBlockPruned(provider.block_number)) ); assert_eq!( provider.storage_history_lookup(ADDRESS, STORAGE), - Err(ProviderError::StateAtBlockPruned(provider.block_number).into()) + Err(ProviderError::StateAtBlockPruned(provider.block_number)) ); // provider block_number == lowest available block number, diff --git a/crates/storage/provider/src/providers/state/latest.rs b/crates/storage/provider/src/providers/state/latest.rs index be70c1945..1b45555fc 100644 --- a/crates/storage/provider/src/providers/state/latest.rs +++ b/crates/storage/provider/src/providers/state/latest.rs @@ -7,7 +7,7 @@ use reth_db::{ tables, transaction::DbTx, }; -use reth_interfaces::{provider::ProviderError, RethError, RethResult}; +use reth_interfaces::provider::{ProviderError, ProviderResult}; use reth_primitives::{ keccak256, trie::AccountProof, Account, Address, BlockNumber, Bytecode, StorageKey, StorageValue, B256, @@ -29,14 +29,14 @@ impl<'b, TX: DbTx> LatestStateProviderRef<'b, TX> { impl<'b, TX: DbTx> AccountReader for LatestStateProviderRef<'b, TX> { /// Get basic account information. - fn basic_account(&self, address: Address) -> RethResult> { + fn basic_account(&self, address: Address) -> ProviderResult> { self.db.get::(address).map_err(Into::into) } } impl<'b, TX: DbTx> BlockHashReader for LatestStateProviderRef<'b, TX> { /// Get block hash by number. - fn block_hash(&self, number: u64) -> RethResult> { + fn block_hash(&self, number: u64) -> ProviderResult> { self.db.get::(number).map_err(Into::into) } @@ -44,7 +44,7 @@ impl<'b, TX: DbTx> BlockHashReader for LatestStateProviderRef<'b, TX> { &self, start: BlockNumber, end: BlockNumber, - ) -> RethResult> { + ) -> ProviderResult> { let range = start..end; self.db .cursor_read::() @@ -52,15 +52,15 @@ impl<'b, TX: DbTx> BlockHashReader for LatestStateProviderRef<'b, TX> { cursor .walk_range(range)? .map(|result| result.map(|(_, hash)| hash).map_err(Into::into)) - .collect::>>() + .collect::>>() })? .map_err(Into::into) } } impl<'b, TX: DbTx> StateRootProvider for LatestStateProviderRef<'b, TX> { - fn state_root(&self, bundle_state: &BundleStateWithReceipts) -> RethResult { - bundle_state.state_root_slow(self.db).map_err(|err| RethError::Database(err.into())) + fn state_root(&self, bundle_state: &BundleStateWithReceipts) -> ProviderResult { + bundle_state.state_root_slow(self.db).map_err(|err| ProviderError::Database(err.into())) } } @@ -70,7 +70,7 @@ impl<'b, TX: DbTx> StateProvider for LatestStateProviderRef<'b, TX> { &self, account: Address, storage_key: StorageKey, - ) -> RethResult> { + ) -> ProviderResult> { let mut cursor = self.db.cursor_dup_read::()?; if let Some(entry) = cursor.seek_by_key_subkey(account, storage_key)? { if entry.key == storage_key { @@ -81,11 +81,11 @@ impl<'b, TX: DbTx> StateProvider for LatestStateProviderRef<'b, TX> { } /// Get account code by its hash - fn bytecode_by_hash(&self, code_hash: B256) -> RethResult> { + fn bytecode_by_hash(&self, code_hash: B256) -> ProviderResult> { self.db.get::(code_hash).map_err(Into::into) } - fn proof(&self, address: Address, _keys: &[B256]) -> RethResult { + fn proof(&self, address: Address, _keys: &[B256]) -> ProviderResult { let _hashed_address = keccak256(address); let _root = self .db diff --git a/crates/storage/provider/src/providers/state/macros.rs b/crates/storage/provider/src/providers/state/macros.rs index d14c7235f..67b3c33f5 100644 --- a/crates/storage/provider/src/providers/state/macros.rs +++ b/crates/storage/provider/src/providers/state/macros.rs @@ -31,19 +31,19 @@ macro_rules! delegate_provider_impls { $crate::providers::state::macros::delegate_impls_to_as_ref!( for $target => StateRootProvider $(where [$($generics)*])? { - fn state_root(&self, state: &crate::BundleStateWithReceipts) -> reth_interfaces::RethResult; + fn state_root(&self, state: &crate::BundleStateWithReceipts) -> reth_interfaces::provider::ProviderResult; } AccountReader $(where [$($generics)*])? { - fn basic_account(&self, address: reth_primitives::Address) -> reth_interfaces::RethResult>; + fn basic_account(&self, address: reth_primitives::Address) -> reth_interfaces::provider::ProviderResult>; } BlockHashReader $(where [$($generics)*])? { - fn block_hash(&self, number: u64) -> reth_interfaces::RethResult>; - fn canonical_hashes_range(&self, start: reth_primitives::BlockNumber, end: reth_primitives::BlockNumber) -> reth_interfaces::RethResult>; + fn block_hash(&self, number: u64) -> reth_interfaces::provider::ProviderResult>; + fn canonical_hashes_range(&self, start: reth_primitives::BlockNumber, end: reth_primitives::BlockNumber) -> reth_interfaces::provider::ProviderResult>; } StateProvider $(where [$($generics)*])?{ - fn storage(&self, account: reth_primitives::Address, storage_key: reth_primitives::StorageKey) -> reth_interfaces::RethResult>; - fn proof(&self, address: reth_primitives::Address, keys: &[reth_primitives::B256]) -> reth_interfaces::RethResult; - fn bytecode_by_hash(&self, code_hash: reth_primitives::B256) -> reth_interfaces::RethResult>; + fn storage(&self, account: reth_primitives::Address, storage_key: reth_primitives::StorageKey) -> reth_interfaces::provider::ProviderResult>; + fn proof(&self, address: reth_primitives::Address, keys: &[reth_primitives::B256]) -> reth_interfaces::provider::ProviderResult; + fn bytecode_by_hash(&self, code_hash: reth_primitives::B256) -> reth_interfaces::provider::ProviderResult>; } ); } diff --git a/crates/storage/provider/src/test_utils/mock.rs b/crates/storage/provider/src/test_utils/mock.rs index 8f18732f4..c4689ac57 100644 --- a/crates/storage/provider/src/test_utils/mock.rs +++ b/crates/storage/provider/src/test_utils/mock.rs @@ -8,7 +8,7 @@ use crate::{ }; use parking_lot::Mutex; use reth_db::models::{AccountBeforeTx, StoredBlockBodyIndices}; -use reth_interfaces::{provider::ProviderError, RethResult}; +use reth_interfaces::provider::{ProviderError, ProviderResult}; use reth_primitives::{ keccak256, trie::AccountProof, Account, Address, Block, BlockHash, BlockHashOrNumber, BlockId, BlockNumber, BlockWithSenders, Bytecode, Bytes, ChainInfo, ChainSpec, Header, Receipt, @@ -124,17 +124,17 @@ impl MockEthProvider { } impl HeaderProvider for MockEthProvider { - fn header(&self, block_hash: &BlockHash) -> RethResult> { + fn header(&self, block_hash: &BlockHash) -> ProviderResult> { let lock = self.headers.lock(); Ok(lock.get(block_hash).cloned()) } - fn header_by_number(&self, num: u64) -> RethResult> { + fn header_by_number(&self, num: u64) -> ProviderResult> { let lock = self.headers.lock(); Ok(lock.values().find(|h| h.number == num).cloned()) } - fn header_td(&self, hash: &BlockHash) -> RethResult> { + fn header_td(&self, hash: &BlockHash) -> ProviderResult> { let lock = self.headers.lock(); Ok(lock.get(hash).map(|target| { lock.values() @@ -143,7 +143,7 @@ impl HeaderProvider for MockEthProvider { })) } - fn header_td_by_number(&self, number: BlockNumber) -> RethResult> { + fn header_td_by_number(&self, number: BlockNumber) -> ProviderResult> { let lock = self.headers.lock(); let sum = lock .values() @@ -152,7 +152,7 @@ impl HeaderProvider for MockEthProvider { Ok(Some(sum)) } - fn headers_range(&self, range: impl RangeBounds) -> RethResult> { + fn headers_range(&self, range: impl RangeBounds) -> ProviderResult> { let lock = self.headers.lock(); let mut headers: Vec<_> = @@ -162,7 +162,7 @@ impl HeaderProvider for MockEthProvider { Ok(headers) } - fn sealed_header(&self, number: BlockNumber) -> RethResult> { + fn sealed_header(&self, number: BlockNumber) -> ProviderResult> { Ok(self.header_by_number(number)?.map(|h| h.seal_slow())) } @@ -170,7 +170,7 @@ impl HeaderProvider for MockEthProvider { &self, range: impl RangeBounds, mut predicate: impl FnMut(&SealedHeader) -> bool, - ) -> RethResult> { + ) -> ProviderResult> { Ok(self .headers_range(range)? .into_iter() @@ -187,7 +187,7 @@ impl ChainSpecProvider for MockEthProvider { } impl TransactionsProvider for MockEthProvider { - fn transaction_id(&self, tx_hash: TxHash) -> RethResult> { + fn transaction_id(&self, tx_hash: TxHash) -> ProviderResult> { let lock = self.blocks.lock(); let tx_number = lock .values() @@ -198,7 +198,7 @@ impl TransactionsProvider for MockEthProvider { Ok(tx_number) } - fn transaction_by_id(&self, id: TxNumber) -> RethResult> { + fn transaction_by_id(&self, id: TxNumber) -> ProviderResult> { let lock = self.blocks.lock(); let transaction = lock.values().flat_map(|block| &block.body).nth(id as usize).cloned(); @@ -208,7 +208,7 @@ impl TransactionsProvider for MockEthProvider { fn transaction_by_id_no_hash( &self, id: TxNumber, - ) -> RethResult> { + ) -> ProviderResult> { let lock = self.blocks.lock(); let transaction = lock .values() @@ -219,7 +219,7 @@ impl TransactionsProvider for MockEthProvider { Ok(transaction) } - fn transaction_by_hash(&self, hash: TxHash) -> RethResult> { + fn transaction_by_hash(&self, hash: TxHash) -> ProviderResult> { Ok(self .blocks .lock() @@ -230,7 +230,7 @@ impl TransactionsProvider for MockEthProvider { fn transaction_by_hash_with_meta( &self, hash: TxHash, - ) -> RethResult> { + ) -> ProviderResult> { let lock = self.blocks.lock(); for (block_hash, block) in lock.iter() { for (index, tx) in block.body.iter().enumerate() { @@ -250,7 +250,7 @@ impl TransactionsProvider for MockEthProvider { Ok(None) } - fn transaction_block(&self, id: TxNumber) -> RethResult> { + fn transaction_block(&self, id: TxNumber) -> ProviderResult> { let lock = self.blocks.lock(); let mut current_tx_number: TxNumber = 0; for block in lock.values() { @@ -265,14 +265,14 @@ impl TransactionsProvider for MockEthProvider { fn transactions_by_block( &self, id: BlockHashOrNumber, - ) -> RethResult>> { + ) -> ProviderResult>> { Ok(self.block(id)?.map(|b| b.body)) } fn transactions_by_block_range( &self, range: impl RangeBounds, - ) -> RethResult>> { + ) -> ProviderResult>> { // init btreemap so we can return in order let mut map = BTreeMap::new(); for (_, block) in self.blocks.lock().iter() { @@ -287,7 +287,7 @@ impl TransactionsProvider for MockEthProvider { fn transactions_by_tx_range( &self, range: impl RangeBounds, - ) -> RethResult> { + ) -> ProviderResult> { let lock = self.blocks.lock(); let transactions = lock .values() @@ -305,7 +305,10 @@ impl TransactionsProvider for MockEthProvider { Ok(transactions) } - fn senders_by_tx_range(&self, range: impl RangeBounds) -> RethResult> { + fn senders_by_tx_range( + &self, + range: impl RangeBounds, + ) -> ProviderResult> { let lock = self.blocks.lock(); let transactions = lock .values() @@ -323,21 +326,21 @@ impl TransactionsProvider for MockEthProvider { Ok(transactions) } - fn transaction_sender(&self, id: TxNumber) -> RethResult> { + fn transaction_sender(&self, id: TxNumber) -> ProviderResult> { self.transaction_by_id(id).map(|tx_option| tx_option.map(|tx| tx.recover_signer().unwrap())) } } impl ReceiptProvider for MockEthProvider { - fn receipt(&self, _id: TxNumber) -> RethResult> { + fn receipt(&self, _id: TxNumber) -> ProviderResult> { Ok(None) } - fn receipt_by_hash(&self, _hash: TxHash) -> RethResult> { + fn receipt_by_hash(&self, _hash: TxHash) -> ProviderResult> { Ok(None) } - fn receipts_by_block(&self, _block: BlockHashOrNumber) -> RethResult>> { + fn receipts_by_block(&self, _block: BlockHashOrNumber) -> ProviderResult>> { Ok(None) } } @@ -345,7 +348,7 @@ impl ReceiptProvider for MockEthProvider { impl ReceiptProviderIdExt for MockEthProvider {} impl BlockHashReader for MockEthProvider { - fn block_hash(&self, number: u64) -> RethResult> { + fn block_hash(&self, number: u64) -> ProviderResult> { let lock = self.blocks.lock(); let hash = lock.iter().find_map(|(hash, b)| (b.number == number).then_some(*hash)); @@ -356,7 +359,7 @@ impl BlockHashReader for MockEthProvider { &self, start: BlockNumber, end: BlockNumber, - ) -> RethResult> { + ) -> ProviderResult> { let range = start..end; let lock = self.blocks.lock(); @@ -369,7 +372,7 @@ impl BlockHashReader for MockEthProvider { } impl BlockNumReader for MockEthProvider { - fn chain_info(&self) -> RethResult { + fn chain_info(&self) -> ProviderResult { let best_block_number = self.best_block_number()?; let lock = self.headers.lock(); @@ -380,20 +383,19 @@ impl BlockNumReader for MockEthProvider { .unwrap_or_default()) } - fn best_block_number(&self) -> RethResult { + fn best_block_number(&self) -> ProviderResult { let lock = self.headers.lock(); - Ok(lock - .iter() + lock.iter() .max_by_key(|h| h.1.number) .map(|(_, header)| header.number) - .ok_or(ProviderError::BestBlockNotFound)?) + .ok_or(ProviderError::BestBlockNotFound) } - fn last_block_number(&self) -> RethResult { + fn last_block_number(&self) -> ProviderResult { self.best_block_number() } - fn block_number(&self, hash: B256) -> RethResult> { + fn block_number(&self, hash: B256) -> ProviderResult> { let lock = self.blocks.lock(); let num = lock.iter().find_map(|(h, b)| (*h == hash).then_some(b.number)); Ok(num) @@ -401,25 +403,29 @@ impl BlockNumReader for MockEthProvider { } impl BlockIdReader for MockEthProvider { - fn pending_block_num_hash(&self) -> RethResult> { + fn pending_block_num_hash(&self) -> ProviderResult> { Ok(None) } - fn safe_block_num_hash(&self) -> RethResult> { + fn safe_block_num_hash(&self) -> ProviderResult> { Ok(None) } - fn finalized_block_num_hash(&self) -> RethResult> { + fn finalized_block_num_hash(&self) -> ProviderResult> { Ok(None) } } impl BlockReader for MockEthProvider { - fn find_block_by_hash(&self, hash: B256, _source: BlockSource) -> RethResult> { + fn find_block_by_hash( + &self, + hash: B256, + _source: BlockSource, + ) -> ProviderResult> { self.block(hash.into()) } - fn block(&self, id: BlockHashOrNumber) -> RethResult> { + fn block(&self, id: BlockHashOrNumber) -> ProviderResult> { let lock = self.blocks.lock(); match id { BlockHashOrNumber::Hash(hash) => Ok(lock.get(&hash).cloned()), @@ -427,19 +433,19 @@ impl BlockReader for MockEthProvider { } } - fn pending_block(&self) -> RethResult> { + fn pending_block(&self) -> ProviderResult> { Ok(None) } - fn pending_block_and_receipts(&self) -> RethResult)>> { + fn pending_block_and_receipts(&self) -> ProviderResult)>> { Ok(None) } - fn ommers(&self, _id: BlockHashOrNumber) -> RethResult>> { + fn ommers(&self, _id: BlockHashOrNumber) -> ProviderResult>> { Ok(None) } - fn block_body_indices(&self, _num: u64) -> RethResult> { + fn block_body_indices(&self, _num: u64) -> ProviderResult> { Ok(None) } @@ -447,35 +453,35 @@ impl BlockReader for MockEthProvider { &self, _id: BlockHashOrNumber, _transaction_kind: TransactionVariant, - ) -> RethResult> { + ) -> ProviderResult> { Ok(None) } - fn block_range(&self, _range: RangeInclusive) -> RethResult> { + fn block_range(&self, _range: RangeInclusive) -> ProviderResult> { Ok(vec![]) } } impl BlockReaderIdExt for MockEthProvider { - fn block_by_id(&self, id: BlockId) -> RethResult> { + fn block_by_id(&self, id: BlockId) -> ProviderResult> { match id { BlockId::Number(num) => self.block_by_number_or_tag(num), BlockId::Hash(hash) => self.block_by_hash(hash.block_hash), } } - fn sealed_header_by_id(&self, id: BlockId) -> RethResult> { + fn sealed_header_by_id(&self, id: BlockId) -> ProviderResult> { self.header_by_id(id)?.map_or_else(|| Ok(None), |h| Ok(Some(h.seal_slow()))) } - fn header_by_id(&self, id: BlockId) -> RethResult> { + fn header_by_id(&self, id: BlockId) -> ProviderResult> { match self.block_by_id(id)? { None => Ok(None), Some(block) => Ok(Some(block.header)), } } - fn ommers_by_id(&self, id: BlockId) -> RethResult>> { + fn ommers_by_id(&self, id: BlockId) -> ProviderResult>> { match id { BlockId::Number(num) => self.ommers_by_number_or_tag(num), BlockId::Hash(hash) => self.ommers(BlockHashOrNumber::Hash(hash.block_hash)), @@ -484,13 +490,13 @@ impl BlockReaderIdExt for MockEthProvider { } impl AccountReader for MockEthProvider { - fn basic_account(&self, address: Address) -> RethResult> { + fn basic_account(&self, address: Address) -> ProviderResult> { Ok(self.accounts.lock().get(&address).cloned().map(|a| a.account)) } } impl StateRootProvider for MockEthProvider { - fn state_root(&self, _state: &BundleStateWithReceipts) -> RethResult { + fn state_root(&self, _state: &BundleStateWithReceipts) -> ProviderResult { todo!() } } @@ -500,12 +506,12 @@ impl StateProvider for MockEthProvider { &self, account: Address, storage_key: StorageKey, - ) -> RethResult> { + ) -> ProviderResult> { let lock = self.accounts.lock(); Ok(lock.get(&account).and_then(|account| account.storage.get(&storage_key)).cloned()) } - fn bytecode_by_hash(&self, code_hash: B256) -> RethResult> { + fn bytecode_by_hash(&self, code_hash: B256) -> ProviderResult> { let lock = self.accounts.lock(); Ok(lock.values().find_map(|account| { match (account.account.bytecode_hash.as_ref(), account.bytecode.as_ref()) { @@ -517,7 +523,7 @@ impl StateProvider for MockEthProvider { })) } - fn proof(&self, _address: Address, _keys: &[B256]) -> RethResult { + fn proof(&self, _address: Address, _keys: &[B256]) -> ProviderResult { todo!() } } @@ -528,7 +534,7 @@ impl EvmEnvProvider for MockEthProvider { _cfg: &mut CfgEnv, _block_env: &mut BlockEnv, _at: BlockHashOrNumber, - ) -> RethResult<()> { + ) -> ProviderResult<()> { Ok(()) } @@ -537,7 +543,7 @@ impl EvmEnvProvider for MockEthProvider { _cfg: &mut CfgEnv, _block_env: &mut BlockEnv, _header: &Header, - ) -> RethResult<()> { + ) -> ProviderResult<()> { Ok(()) } @@ -545,7 +551,7 @@ impl EvmEnvProvider for MockEthProvider { &self, _block_env: &mut BlockEnv, _at: BlockHashOrNumber, - ) -> RethResult<()> { + ) -> ProviderResult<()> { Ok(()) } @@ -553,94 +559,100 @@ impl EvmEnvProvider for MockEthProvider { &self, _block_env: &mut BlockEnv, _header: &Header, - ) -> RethResult<()> { + ) -> ProviderResult<()> { Ok(()) } - fn fill_cfg_env_at(&self, _cfg: &mut CfgEnv, _at: BlockHashOrNumber) -> RethResult<()> { + fn fill_cfg_env_at(&self, _cfg: &mut CfgEnv, _at: BlockHashOrNumber) -> ProviderResult<()> { Ok(()) } - fn fill_cfg_env_with_header(&self, _cfg: &mut CfgEnv, _header: &Header) -> RethResult<()> { + fn fill_cfg_env_with_header(&self, _cfg: &mut CfgEnv, _header: &Header) -> ProviderResult<()> { Ok(()) } } impl StateProviderFactory for MockEthProvider { - fn latest(&self) -> RethResult> { + fn latest(&self) -> ProviderResult> { Ok(Box::new(self.clone())) } - fn history_by_block_number(&self, _block: BlockNumber) -> RethResult> { + fn history_by_block_number(&self, _block: BlockNumber) -> ProviderResult> { Ok(Box::new(self.clone())) } - fn history_by_block_hash(&self, _block: BlockHash) -> RethResult> { + fn history_by_block_hash(&self, _block: BlockHash) -> ProviderResult> { Ok(Box::new(self.clone())) } - fn state_by_block_hash(&self, _block: BlockHash) -> RethResult> { + fn state_by_block_hash(&self, _block: BlockHash) -> ProviderResult> { Ok(Box::new(self.clone())) } - fn pending(&self) -> RethResult> { + fn pending(&self) -> ProviderResult> { Ok(Box::new(self.clone())) } - fn pending_state_by_hash(&self, _block_hash: B256) -> RethResult>> { + fn pending_state_by_hash( + &self, + _block_hash: B256, + ) -> ProviderResult>> { Ok(Some(Box::new(self.clone()))) } fn pending_with_provider<'a>( &'a self, _post_state_data: Box, - ) -> RethResult> { + ) -> ProviderResult> { Ok(Box::new(self.clone())) } } impl StateProviderFactory for Arc { - fn latest(&self) -> RethResult> { + fn latest(&self) -> ProviderResult> { Ok(Box::new(self.clone())) } - fn history_by_block_number(&self, _block: BlockNumber) -> RethResult> { + fn history_by_block_number(&self, _block: BlockNumber) -> ProviderResult> { Ok(Box::new(self.clone())) } - fn history_by_block_hash(&self, _block: BlockHash) -> RethResult> { + fn history_by_block_hash(&self, _block: BlockHash) -> ProviderResult> { Ok(Box::new(self.clone())) } - fn state_by_block_hash(&self, _block: BlockHash) -> RethResult> { + fn state_by_block_hash(&self, _block: BlockHash) -> ProviderResult> { Ok(Box::new(self.clone())) } - fn pending(&self) -> RethResult> { + fn pending(&self) -> ProviderResult> { Ok(Box::new(self.clone())) } - fn pending_state_by_hash(&self, _block_hash: B256) -> RethResult>> { + fn pending_state_by_hash( + &self, + _block_hash: B256, + ) -> ProviderResult>> { Ok(Some(Box::new(self.clone()))) } fn pending_with_provider<'a>( &'a self, _post_state_data: Box, - ) -> RethResult> { + ) -> ProviderResult> { Ok(Box::new(self.clone())) } } impl WithdrawalsProvider for MockEthProvider { - fn latest_withdrawal(&self) -> RethResult> { + fn latest_withdrawal(&self) -> ProviderResult> { Ok(None) } fn withdrawals_by_block( &self, _id: BlockHashOrNumber, _timestamp: u64, - ) -> RethResult>> { + ) -> ProviderResult>> { Ok(None) } } @@ -649,7 +661,7 @@ impl ChangeSetReader for MockEthProvider { fn account_block_changeset( &self, _block_number: BlockNumber, - ) -> RethResult> { + ) -> ProviderResult> { Ok(Vec::default()) } } diff --git a/crates/storage/provider/src/test_utils/noop.rs b/crates/storage/provider/src/test_utils/noop.rs index 6780959c1..45258bc69 100644 --- a/crates/storage/provider/src/test_utils/noop.rs +++ b/crates/storage/provider/src/test_utils/noop.rs @@ -8,7 +8,7 @@ use crate::{ WithdrawalsProvider, }; use reth_db::models::{AccountBeforeTx, StoredBlockBodyIndices}; -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_primitives::{ stage::{StageCheckpoint, StageId}, trie::AccountProof, @@ -36,7 +36,7 @@ impl ChainSpecProvider for NoopProvider { /// Noop implementation for testing purposes impl BlockHashReader for NoopProvider { - fn block_hash(&self, _number: u64) -> RethResult> { + fn block_hash(&self, _number: u64) -> ProviderResult> { Ok(None) } @@ -44,51 +44,55 @@ impl BlockHashReader for NoopProvider { &self, _start: BlockNumber, _end: BlockNumber, - ) -> RethResult> { + ) -> ProviderResult> { Ok(vec![]) } } impl BlockNumReader for NoopProvider { - fn chain_info(&self) -> RethResult { + fn chain_info(&self) -> ProviderResult { Ok(ChainInfo::default()) } - fn best_block_number(&self) -> RethResult { + fn best_block_number(&self) -> ProviderResult { Ok(0) } - fn last_block_number(&self) -> RethResult { + fn last_block_number(&self) -> ProviderResult { Ok(0) } - fn block_number(&self, _hash: B256) -> RethResult> { + fn block_number(&self, _hash: B256) -> ProviderResult> { Ok(None) } } impl BlockReader for NoopProvider { - fn find_block_by_hash(&self, hash: B256, _source: BlockSource) -> RethResult> { + fn find_block_by_hash( + &self, + hash: B256, + _source: BlockSource, + ) -> ProviderResult> { self.block(hash.into()) } - fn block(&self, _id: BlockHashOrNumber) -> RethResult> { + fn block(&self, _id: BlockHashOrNumber) -> ProviderResult> { Ok(None) } - fn pending_block(&self) -> RethResult> { + fn pending_block(&self) -> ProviderResult> { Ok(None) } - fn pending_block_and_receipts(&self) -> RethResult)>> { + fn pending_block_and_receipts(&self) -> ProviderResult)>> { Ok(None) } - fn ommers(&self, _id: BlockHashOrNumber) -> RethResult>> { + fn ommers(&self, _id: BlockHashOrNumber) -> ProviderResult>> { Ok(None) } - fn block_body_indices(&self, _num: u64) -> RethResult> { + fn block_body_indices(&self, _num: u64) -> ProviderResult> { Ok(None) } @@ -96,118 +100,121 @@ impl BlockReader for NoopProvider { &self, _id: BlockHashOrNumber, _transaction_kind: TransactionVariant, - ) -> RethResult> { + ) -> ProviderResult> { Ok(None) } - fn block_range(&self, _range: RangeInclusive) -> RethResult> { + fn block_range(&self, _range: RangeInclusive) -> ProviderResult> { Ok(vec![]) } } impl BlockReaderIdExt for NoopProvider { - fn block_by_id(&self, _id: BlockId) -> RethResult> { + fn block_by_id(&self, _id: BlockId) -> ProviderResult> { Ok(None) } - fn sealed_header_by_id(&self, _id: BlockId) -> RethResult> { + fn sealed_header_by_id(&self, _id: BlockId) -> ProviderResult> { Ok(None) } - fn header_by_id(&self, _id: BlockId) -> RethResult> { + fn header_by_id(&self, _id: BlockId) -> ProviderResult> { Ok(None) } - fn ommers_by_id(&self, _id: BlockId) -> RethResult>> { + fn ommers_by_id(&self, _id: BlockId) -> ProviderResult>> { Ok(None) } } impl BlockIdReader for NoopProvider { - fn pending_block_num_hash(&self) -> RethResult> { + fn pending_block_num_hash(&self) -> ProviderResult> { Ok(None) } - fn safe_block_num_hash(&self) -> RethResult> { + fn safe_block_num_hash(&self) -> ProviderResult> { Ok(None) } - fn finalized_block_num_hash(&self) -> RethResult> { + fn finalized_block_num_hash(&self) -> ProviderResult> { Ok(None) } } impl TransactionsProvider for NoopProvider { - fn transaction_id(&self, _tx_hash: TxHash) -> RethResult> { + fn transaction_id(&self, _tx_hash: TxHash) -> ProviderResult> { Ok(None) } - fn transaction_by_id(&self, _id: TxNumber) -> RethResult> { + fn transaction_by_id(&self, _id: TxNumber) -> ProviderResult> { Ok(None) } fn transaction_by_id_no_hash( &self, _id: TxNumber, - ) -> RethResult> { + ) -> ProviderResult> { Ok(None) } - fn transaction_by_hash(&self, _hash: TxHash) -> RethResult> { + fn transaction_by_hash(&self, _hash: TxHash) -> ProviderResult> { Ok(None) } fn transaction_by_hash_with_meta( &self, _hash: TxHash, - ) -> RethResult> { + ) -> ProviderResult> { Ok(None) } - fn transaction_block(&self, _id: TxNumber) -> RethResult> { + fn transaction_block(&self, _id: TxNumber) -> ProviderResult> { todo!() } fn transactions_by_block( &self, _block_id: BlockHashOrNumber, - ) -> RethResult>> { + ) -> ProviderResult>> { Ok(None) } fn transactions_by_block_range( &self, _range: impl RangeBounds, - ) -> RethResult>> { + ) -> ProviderResult>> { Ok(Vec::default()) } - fn senders_by_tx_range(&self, _range: impl RangeBounds) -> RethResult> { + fn senders_by_tx_range( + &self, + _range: impl RangeBounds, + ) -> ProviderResult> { Ok(Vec::default()) } fn transactions_by_tx_range( &self, _range: impl RangeBounds, - ) -> RethResult> { + ) -> ProviderResult> { Ok(Vec::default()) } - fn transaction_sender(&self, _id: TxNumber) -> RethResult> { + fn transaction_sender(&self, _id: TxNumber) -> ProviderResult> { Ok(None) } } impl ReceiptProvider for NoopProvider { - fn receipt(&self, _id: TxNumber) -> RethResult> { + fn receipt(&self, _id: TxNumber) -> ProviderResult> { Ok(None) } - fn receipt_by_hash(&self, _hash: TxHash) -> RethResult> { + fn receipt_by_hash(&self, _hash: TxHash) -> ProviderResult> { Ok(None) } - fn receipts_by_block(&self, _block: BlockHashOrNumber) -> RethResult>> { + fn receipts_by_block(&self, _block: BlockHashOrNumber) -> ProviderResult>> { Ok(None) } } @@ -215,27 +222,27 @@ impl ReceiptProvider for NoopProvider { impl ReceiptProviderIdExt for NoopProvider {} impl HeaderProvider for NoopProvider { - fn header(&self, _block_hash: &BlockHash) -> RethResult> { + fn header(&self, _block_hash: &BlockHash) -> ProviderResult> { Ok(None) } - fn header_by_number(&self, _num: u64) -> RethResult> { + fn header_by_number(&self, _num: u64) -> ProviderResult> { Ok(None) } - fn header_td(&self, _hash: &BlockHash) -> RethResult> { + fn header_td(&self, _hash: &BlockHash) -> ProviderResult> { Ok(None) } - fn header_td_by_number(&self, _number: BlockNumber) -> RethResult> { + fn header_td_by_number(&self, _number: BlockNumber) -> ProviderResult> { Ok(None) } - fn headers_range(&self, _range: impl RangeBounds) -> RethResult> { + fn headers_range(&self, _range: impl RangeBounds) -> ProviderResult> { Ok(vec![]) } - fn sealed_header(&self, _number: BlockNumber) -> RethResult> { + fn sealed_header(&self, _number: BlockNumber) -> ProviderResult> { Ok(None) } @@ -243,13 +250,13 @@ impl HeaderProvider for NoopProvider { &self, _range: impl RangeBounds, _predicate: impl FnMut(&SealedHeader) -> bool, - ) -> RethResult> { + ) -> ProviderResult> { Ok(vec![]) } } impl AccountReader for NoopProvider { - fn basic_account(&self, _address: Address) -> RethResult> { + fn basic_account(&self, _address: Address) -> ProviderResult> { Ok(None) } } @@ -258,13 +265,13 @@ impl ChangeSetReader for NoopProvider { fn account_block_changeset( &self, _block_number: BlockNumber, - ) -> RethResult> { + ) -> ProviderResult> { Ok(Vec::default()) } } impl StateRootProvider for NoopProvider { - fn state_root(&self, _state: &BundleStateWithReceipts) -> RethResult { + fn state_root(&self, _state: &BundleStateWithReceipts) -> ProviderResult { Ok(B256::default()) } } @@ -274,15 +281,15 @@ impl StateProvider for NoopProvider { &self, _account: Address, _storage_key: StorageKey, - ) -> RethResult> { + ) -> ProviderResult> { Ok(None) } - fn bytecode_by_hash(&self, _code_hash: B256) -> RethResult> { + fn bytecode_by_hash(&self, _code_hash: B256) -> ProviderResult> { Ok(None) } - fn proof(&self, _address: Address, _keys: &[B256]) -> RethResult { + fn proof(&self, _address: Address, _keys: &[B256]) -> ProviderResult { Ok(AccountProof::default()) } } @@ -293,7 +300,7 @@ impl EvmEnvProvider for NoopProvider { _cfg: &mut CfgEnv, _block_env: &mut BlockEnv, _at: BlockHashOrNumber, - ) -> RethResult<()> { + ) -> ProviderResult<()> { Ok(()) } @@ -302,7 +309,7 @@ impl EvmEnvProvider for NoopProvider { _cfg: &mut CfgEnv, _block_env: &mut BlockEnv, _header: &Header, - ) -> RethResult<()> { + ) -> ProviderResult<()> { Ok(()) } @@ -310,7 +317,7 @@ impl EvmEnvProvider for NoopProvider { &self, _block_env: &mut BlockEnv, _at: BlockHashOrNumber, - ) -> RethResult<()> { + ) -> ProviderResult<()> { Ok(()) } @@ -318,77 +325,83 @@ impl EvmEnvProvider for NoopProvider { &self, _block_env: &mut BlockEnv, _header: &Header, - ) -> RethResult<()> { + ) -> ProviderResult<()> { Ok(()) } - fn fill_cfg_env_at(&self, _cfg: &mut CfgEnv, _at: BlockHashOrNumber) -> RethResult<()> { + fn fill_cfg_env_at(&self, _cfg: &mut CfgEnv, _at: BlockHashOrNumber) -> ProviderResult<()> { Ok(()) } - fn fill_cfg_env_with_header(&self, _cfg: &mut CfgEnv, _header: &Header) -> RethResult<()> { + fn fill_cfg_env_with_header(&self, _cfg: &mut CfgEnv, _header: &Header) -> ProviderResult<()> { Ok(()) } } impl StateProviderFactory for NoopProvider { - fn latest(&self) -> RethResult> { + fn latest(&self) -> ProviderResult> { Ok(Box::new(*self)) } - fn history_by_block_number(&self, _block: BlockNumber) -> RethResult> { + fn history_by_block_number(&self, _block: BlockNumber) -> ProviderResult> { Ok(Box::new(*self)) } - fn history_by_block_hash(&self, _block: BlockHash) -> RethResult> { + fn history_by_block_hash(&self, _block: BlockHash) -> ProviderResult> { Ok(Box::new(*self)) } - fn state_by_block_hash(&self, _block: BlockHash) -> RethResult> { + fn state_by_block_hash(&self, _block: BlockHash) -> ProviderResult> { Ok(Box::new(*self)) } - fn pending(&self) -> RethResult> { + fn pending(&self) -> ProviderResult> { Ok(Box::new(*self)) } - fn pending_state_by_hash(&self, _block_hash: B256) -> RethResult>> { + fn pending_state_by_hash( + &self, + _block_hash: B256, + ) -> ProviderResult>> { Ok(Some(Box::new(*self))) } fn pending_with_provider<'a>( &'a self, _post_state_data: Box, - ) -> RethResult> { + ) -> ProviderResult> { Ok(Box::new(*self)) } } impl StageCheckpointReader for NoopProvider { - fn get_stage_checkpoint(&self, _id: StageId) -> RethResult> { + fn get_stage_checkpoint(&self, _id: StageId) -> ProviderResult> { Ok(None) } - fn get_stage_checkpoint_progress(&self, _id: StageId) -> RethResult>> { + fn get_stage_checkpoint_progress(&self, _id: StageId) -> ProviderResult>> { Ok(None) } } impl WithdrawalsProvider for NoopProvider { - fn latest_withdrawal(&self) -> RethResult> { + fn latest_withdrawal(&self) -> ProviderResult> { Ok(None) } fn withdrawals_by_block( &self, _id: BlockHashOrNumber, _timestamp: u64, - ) -> RethResult>> { + ) -> ProviderResult>> { Ok(None) } } impl PruneCheckpointReader for NoopProvider { - fn get_prune_checkpoint(&self, _segment: PruneSegment) -> RethResult> { + fn get_prune_checkpoint( + &self, + _segment: PruneSegment, + ) -> ProviderResult> { Ok(None) } } diff --git a/crates/storage/provider/src/traits/account.rs b/crates/storage/provider/src/traits/account.rs index 57243c698..16042bce1 100644 --- a/crates/storage/provider/src/traits/account.rs +++ b/crates/storage/provider/src/traits/account.rs @@ -1,6 +1,6 @@ use auto_impl::auto_impl; use reth_db::models::AccountBeforeTx; -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_primitives::{Account, Address, BlockNumber}; use std::{ collections::{BTreeMap, BTreeSet}, @@ -13,7 +13,7 @@ pub trait AccountReader: Send + Sync { /// Get basic account information. /// /// Returns `None` if the account doesn't exist. - fn basic_account(&self, address: Address) -> RethResult>; + fn basic_account(&self, address: Address) -> ProviderResult>; } /// Account reader @@ -23,7 +23,7 @@ pub trait AccountExtReader: Send + Sync { fn changed_accounts_with_range( &self, _range: impl RangeBounds, - ) -> RethResult>; + ) -> ProviderResult>; /// Get basic account information for multiple accounts. A more efficient version than calling /// [`AccountReader::basic_account`] repeatedly. @@ -32,7 +32,7 @@ pub trait AccountExtReader: Send + Sync { fn basic_accounts( &self, _iter: impl IntoIterator, - ) -> RethResult)>>; + ) -> ProviderResult)>>; /// Iterate over account changesets and return all account addresses that were changed alongside /// each specific set of blocks. @@ -41,7 +41,7 @@ pub trait AccountExtReader: Send + Sync { fn changed_accounts_and_blocks_with_range( &self, range: RangeInclusive, - ) -> RethResult>>; + ) -> ProviderResult>>; } /// AccountChange reader @@ -51,5 +51,5 @@ pub trait ChangeSetReader: Send + Sync { fn account_block_changeset( &self, block_number: BlockNumber, - ) -> RethResult>; + ) -> ProviderResult>; } diff --git a/crates/storage/provider/src/traits/block.rs b/crates/storage/provider/src/traits/block.rs index e5ea94641..766905806 100644 --- a/crates/storage/provider/src/traits/block.rs +++ b/crates/storage/provider/src/traits/block.rs @@ -4,7 +4,7 @@ use crate::{ }; use auto_impl::auto_impl; use reth_db::models::StoredBlockBodyIndices; -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_primitives::{ Address, Block, BlockHashOrNumber, BlockId, BlockNumber, BlockNumberOrTag, BlockWithSenders, ChainSpec, Header, PruneModes, Receipt, SealedBlock, SealedBlockWithSenders, SealedHeader, @@ -72,45 +72,45 @@ pub trait BlockReader: /// Note: this only operates on the hash because the number might be ambiguous. /// /// Returns `None` if block is not found. - fn find_block_by_hash(&self, hash: B256, source: BlockSource) -> RethResult>; + fn find_block_by_hash(&self, hash: B256, source: BlockSource) -> ProviderResult>; /// Returns the block with given id from the database. /// /// Returns `None` if block is not found. - fn block(&self, id: BlockHashOrNumber) -> RethResult>; + fn block(&self, id: BlockHashOrNumber) -> ProviderResult>; /// Returns the pending block if available /// /// Note: This returns a [SealedBlock] because it's expected that this is sealed by the provider /// and the caller does not know the hash. - fn pending_block(&self) -> RethResult>; + fn pending_block(&self) -> ProviderResult>; /// Returns the pending block and receipts if available. - fn pending_block_and_receipts(&self) -> RethResult)>>; + fn pending_block_and_receipts(&self) -> ProviderResult)>>; /// Returns the ommers/uncle headers of the given block from the database. /// /// Returns `None` if block is not found. - fn ommers(&self, id: BlockHashOrNumber) -> RethResult>>; + fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult>>; /// Returns the block with matching hash from the database. /// /// Returns `None` if block is not found. - fn block_by_hash(&self, hash: B256) -> RethResult> { + fn block_by_hash(&self, hash: B256) -> ProviderResult> { self.block(hash.into()) } /// Returns the block with matching number from database. /// /// Returns `None` if block is not found. - fn block_by_number(&self, num: u64) -> RethResult> { + fn block_by_number(&self, num: u64) -> ProviderResult> { self.block(num.into()) } /// Returns the block body indices with matching number from database. /// /// Returns `None` if block is not found. - fn block_body_indices(&self, num: u64) -> RethResult>; + fn block_body_indices(&self, num: u64) -> ProviderResult>; /// Returns the block with senders with matching number or hash from database. /// @@ -121,12 +121,12 @@ pub trait BlockReader: &self, id: BlockHashOrNumber, transaction_kind: TransactionVariant, - ) -> RethResult>; + ) -> ProviderResult>; /// Returns all blocks in the given inclusive range. /// /// Note: returns only available blocks - fn block_range(&self, range: RangeInclusive) -> RethResult>; + fn block_range(&self, range: RangeInclusive) -> ProviderResult>; } /// Trait extension for `BlockReader`, for types that implement `BlockId` conversion. @@ -144,7 +144,7 @@ pub trait BlockReaderIdExt: BlockReader + BlockIdReader + ReceiptProviderIdExt { /// Returns the block with matching tag from the database /// /// Returns `None` if block is not found. - fn block_by_number_or_tag(&self, id: BlockNumberOrTag) -> RethResult> { + fn block_by_number_or_tag(&self, id: BlockNumberOrTag) -> ProviderResult> { self.convert_block_number(id)?.map_or_else(|| Ok(None), |num| self.block(num.into())) } @@ -152,7 +152,7 @@ pub trait BlockReaderIdExt: BlockReader + BlockIdReader + ReceiptProviderIdExt { /// /// Note: This returns a [SealedHeader] because it's expected that this is sealed by the /// provider and the caller does not know the hash. - fn pending_header(&self) -> RethResult> { + fn pending_header(&self) -> ProviderResult> { self.sealed_header_by_id(BlockNumberOrTag::Pending.into()) } @@ -160,7 +160,7 @@ pub trait BlockReaderIdExt: BlockReader + BlockIdReader + ReceiptProviderIdExt { /// /// Note: This returns a [SealedHeader] because it's expected that this is sealed by the /// provider and the caller does not know the hash. - fn latest_header(&self) -> RethResult> { + fn latest_header(&self) -> ProviderResult> { self.sealed_header_by_id(BlockNumberOrTag::Latest.into()) } @@ -168,7 +168,7 @@ pub trait BlockReaderIdExt: BlockReader + BlockIdReader + ReceiptProviderIdExt { /// /// Note: This returns a [SealedHeader] because it's expected that this is sealed by the /// provider and the caller does not know the hash. - fn safe_header(&self) -> RethResult> { + fn safe_header(&self) -> ProviderResult> { self.sealed_header_by_id(BlockNumberOrTag::Safe.into()) } @@ -176,19 +176,19 @@ pub trait BlockReaderIdExt: BlockReader + BlockIdReader + ReceiptProviderIdExt { /// /// Note: This returns a [SealedHeader] because it's expected that this is sealed by the /// provider and the caller does not know the hash. - fn finalized_header(&self) -> RethResult> { + fn finalized_header(&self) -> ProviderResult> { self.sealed_header_by_id(BlockNumberOrTag::Finalized.into()) } /// Returns the block with the matching `BlockId` from the database. /// /// Returns `None` if block is not found. - fn block_by_id(&self, id: BlockId) -> RethResult>; + fn block_by_id(&self, id: BlockId) -> ProviderResult>; /// Returns the header with matching tag from the database /// /// Returns `None` if header is not found. - fn header_by_number_or_tag(&self, id: BlockNumberOrTag) -> RethResult> { + fn header_by_number_or_tag(&self, id: BlockNumberOrTag) -> ProviderResult> { self.convert_block_number(id)? .map_or_else(|| Ok(None), |num| self.header_by_hash_or_number(num.into())) } @@ -199,7 +199,7 @@ pub trait BlockReaderIdExt: BlockReader + BlockIdReader + ReceiptProviderIdExt { fn sealed_header_by_number_or_tag( &self, id: BlockNumberOrTag, - ) -> RethResult> { + ) -> ProviderResult> { self.convert_block_number(id)? .map_or_else(|| Ok(None), |num| self.header_by_hash_or_number(num.into()))? .map_or_else(|| Ok(None), |h| Ok(Some(h.seal_slow()))) @@ -208,22 +208,22 @@ pub trait BlockReaderIdExt: BlockReader + BlockIdReader + ReceiptProviderIdExt { /// Returns the sealed header with the matching `BlockId` from the database. /// /// Returns `None` if header is not found. - fn sealed_header_by_id(&self, id: BlockId) -> RethResult>; + fn sealed_header_by_id(&self, id: BlockId) -> ProviderResult>; /// Returns the header with the matching `BlockId` from the database. /// /// Returns `None` if header is not found. - fn header_by_id(&self, id: BlockId) -> RethResult>; + fn header_by_id(&self, id: BlockId) -> ProviderResult>; /// Returns the ommers with the matching tag from the database. - fn ommers_by_number_or_tag(&self, id: BlockNumberOrTag) -> RethResult>> { + fn ommers_by_number_or_tag(&self, id: BlockNumberOrTag) -> ProviderResult>> { self.convert_block_number(id)?.map_or_else(|| Ok(None), |num| self.ommers(num.into())) } /// Returns the ommers with the matching `BlockId` from the database. /// /// Returns `None` if block is not found. - fn ommers_by_id(&self, id: BlockId) -> RethResult>>; + fn ommers_by_id(&self, id: BlockId) -> ProviderResult>>; } /// BlockExecution Writer @@ -234,7 +234,7 @@ pub trait BlockExecutionWriter: BlockWriter + BlockReader + Send + Sync { &self, chain_spec: &ChainSpec, range: RangeInclusive, - ) -> RethResult { + ) -> ProviderResult { self.get_or_take_block_and_execution_range::(chain_spec, range) } @@ -243,7 +243,7 @@ pub trait BlockExecutionWriter: BlockWriter + BlockReader + Send + Sync { &self, chain_spec: &ChainSpec, range: RangeInclusive, - ) -> RethResult { + ) -> ProviderResult { self.get_or_take_block_and_execution_range::(chain_spec, range) } @@ -252,7 +252,7 @@ pub trait BlockExecutionWriter: BlockWriter + BlockReader + Send + Sync { &self, chain_spec: &ChainSpec, range: RangeInclusive, - ) -> RethResult; + ) -> ProviderResult; } /// Block Writer @@ -268,7 +268,7 @@ pub trait BlockWriter: Send + Sync { block: SealedBlock, senders: Option>, prune_modes: Option<&PruneModes>, - ) -> RethResult; + ) -> ProviderResult; /// Appends a batch of sealed blocks to the blockchain, including sender information, and /// updates the post-state. @@ -290,5 +290,5 @@ pub trait BlockWriter: Send + Sync { blocks: Vec, state: BundleStateWithReceipts, prune_modes: Option<&PruneModes>, - ) -> RethResult<()>; + ) -> ProviderResult<()>; } diff --git a/crates/storage/provider/src/traits/block_hash.rs b/crates/storage/provider/src/traits/block_hash.rs index e7b9e91c0..8bb334c8b 100644 --- a/crates/storage/provider/src/traits/block_hash.rs +++ b/crates/storage/provider/src/traits/block_hash.rs @@ -1,5 +1,5 @@ use auto_impl::auto_impl; -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_primitives::{BlockHashOrNumber, BlockNumber, B256}; /// Client trait for fetching block hashes by number. @@ -7,11 +7,14 @@ use reth_primitives::{BlockHashOrNumber, BlockNumber, B256}; pub trait BlockHashReader: Send + Sync { /// Get the hash of the block with the given number. Returns `None` if no block with this number /// exists. - fn block_hash(&self, number: BlockNumber) -> RethResult>; + fn block_hash(&self, number: BlockNumber) -> ProviderResult>; /// Get the hash of the block with the given number. Returns `None` if no block with this number /// exists. - fn convert_block_hash(&self, hash_or_number: BlockHashOrNumber) -> RethResult> { + fn convert_block_hash( + &self, + hash_or_number: BlockHashOrNumber, + ) -> ProviderResult> { match hash_or_number { BlockHashOrNumber::Hash(hash) => Ok(Some(hash)), BlockHashOrNumber::Number(num) => self.block_hash(num), @@ -23,6 +26,9 @@ pub trait BlockHashReader: Send + Sync { /// Returns the available hashes of that range. /// /// Note: The range is `start..end`, so the expected result is `[start..end)` - fn canonical_hashes_range(&self, start: BlockNumber, end: BlockNumber) - -> RethResult>; + fn canonical_hashes_range( + &self, + start: BlockNumber, + end: BlockNumber, + ) -> ProviderResult>; } diff --git a/crates/storage/provider/src/traits/block_id.rs b/crates/storage/provider/src/traits/block_id.rs index ee7f54880..fd52f6c32 100644 --- a/crates/storage/provider/src/traits/block_id.rs +++ b/crates/storage/provider/src/traits/block_id.rs @@ -1,5 +1,5 @@ use super::BlockHashReader; -use reth_interfaces::{provider::ProviderError, RethResult}; +use reth_interfaces::provider::{ProviderError, ProviderResult}; use reth_primitives::{BlockHashOrNumber, BlockId, BlockNumber, BlockNumberOrTag, ChainInfo, B256}; /// Client trait for getting important block numbers (such as the latest block number), converting @@ -9,20 +9,20 @@ use reth_primitives::{BlockHashOrNumber, BlockId, BlockNumber, BlockNumberOrTag, #[auto_impl::auto_impl(&, Arc)] pub trait BlockNumReader: BlockHashReader + Send + Sync { /// Returns the current info for the chain. - fn chain_info(&self) -> RethResult; + fn chain_info(&self) -> ProviderResult; /// Returns the best block number in the chain. - fn best_block_number(&self) -> RethResult; + fn best_block_number(&self) -> ProviderResult; /// Returns the last block number associated with the last canonical header in the database. - fn last_block_number(&self) -> RethResult; + fn last_block_number(&self) -> ProviderResult; /// Gets the `BlockNumber` for the given hash. Returns `None` if no block with this hash exists. - fn block_number(&self, hash: B256) -> RethResult>; + fn block_number(&self, hash: B256) -> ProviderResult>; /// Gets the block number for the given `BlockHashOrNumber`. Returns `None` if no block with /// this hash exists. If the `BlockHashOrNumber` is a `Number`, it is returned as is. - fn convert_hash_or_number(&self, id: BlockHashOrNumber) -> RethResult> { + fn convert_hash_or_number(&self, id: BlockHashOrNumber) -> ProviderResult> { match id { BlockHashOrNumber::Hash(hash) => self.block_number(hash), BlockHashOrNumber::Number(num) => Ok(Some(num)), @@ -31,7 +31,7 @@ pub trait BlockNumReader: BlockHashReader + Send + Sync { /// Gets the block hash for the given `BlockHashOrNumber`. Returns `None` if no block with this /// number exists. If the `BlockHashOrNumber` is a `Hash`, it is returned as is. - fn convert_number(&self, id: BlockHashOrNumber) -> RethResult> { + fn convert_number(&self, id: BlockHashOrNumber) -> ProviderResult> { match id { BlockHashOrNumber::Hash(hash) => Ok(Some(hash)), BlockHashOrNumber::Number(num) => self.block_hash(num), @@ -51,7 +51,7 @@ pub trait BlockNumReader: BlockHashReader + Send + Sync { #[auto_impl::auto_impl(&, Arc)] pub trait BlockIdReader: BlockNumReader + Send + Sync { /// Converts the `BlockNumberOrTag` variants to a block number. - fn convert_block_number(&self, num: BlockNumberOrTag) -> RethResult> { + fn convert_block_number(&self, num: BlockNumberOrTag) -> ProviderResult> { let num = match num { BlockNumberOrTag::Latest => self.best_block_number()?, BlockNumberOrTag::Earliest => 0, @@ -63,18 +63,18 @@ pub trait BlockIdReader: BlockNumReader + Send + Sync { BlockNumberOrTag::Number(num) => num, BlockNumberOrTag::Finalized => match self.finalized_block_number()? { Some(block_number) => block_number, - None => return Err(ProviderError::FinalizedBlockNotFound.into()), + None => return Err(ProviderError::FinalizedBlockNotFound), }, BlockNumberOrTag::Safe => match self.safe_block_number()? { Some(block_number) => block_number, - None => return Err(ProviderError::SafeBlockNotFound.into()), + None => return Err(ProviderError::SafeBlockNotFound), }, }; Ok(Some(num)) } /// Get the hash of the block by matching the given id. - fn block_hash_for_id(&self, block_id: BlockId) -> RethResult> { + fn block_hash_for_id(&self, block_id: BlockId) -> ProviderResult> { match block_id { BlockId::Hash(hash) => Ok(Some(hash.into())), BlockId::Number(num) => { @@ -97,7 +97,7 @@ pub trait BlockIdReader: BlockNumReader + Send + Sync { } /// Get the number of the block by matching the given id. - fn block_number_for_id(&self, block_id: BlockId) -> RethResult> { + fn block_number_for_id(&self, block_id: BlockId) -> ProviderResult> { match block_id { BlockId::Hash(hash) => self.block_number(hash.into()), BlockId::Number(num) => self.convert_block_number(num), @@ -105,31 +105,31 @@ pub trait BlockIdReader: BlockNumReader + Send + Sync { } /// Get the current pending block number and hash. - fn pending_block_num_hash(&self) -> RethResult>; + fn pending_block_num_hash(&self) -> ProviderResult>; /// Get the current safe block number and hash. - fn safe_block_num_hash(&self) -> RethResult>; + fn safe_block_num_hash(&self) -> ProviderResult>; /// Get the current finalized block number and hash. - fn finalized_block_num_hash(&self) -> RethResult>; + fn finalized_block_num_hash(&self) -> ProviderResult>; /// Get the safe block number. - fn safe_block_number(&self) -> RethResult> { + fn safe_block_number(&self) -> ProviderResult> { self.safe_block_num_hash().map(|res_opt| res_opt.map(|num_hash| num_hash.number)) } /// Get the finalized block number. - fn finalized_block_number(&self) -> RethResult> { + fn finalized_block_number(&self) -> ProviderResult> { self.finalized_block_num_hash().map(|res_opt| res_opt.map(|num_hash| num_hash.number)) } /// Get the safe block hash. - fn safe_block_hash(&self) -> RethResult> { + fn safe_block_hash(&self) -> ProviderResult> { self.safe_block_num_hash().map(|res_opt| res_opt.map(|num_hash| num_hash.hash)) } /// Get the finalized block hash. - fn finalized_block_hash(&self) -> RethResult> { + fn finalized_block_hash(&self) -> ProviderResult> { self.finalized_block_num_hash().map(|res_opt| res_opt.map(|num_hash| num_hash.hash)) } } diff --git a/crates/storage/provider/src/traits/evm_env.rs b/crates/storage/provider/src/traits/evm_env.rs index 23c13440b..4aa540078 100644 --- a/crates/storage/provider/src/traits/evm_env.rs +++ b/crates/storage/provider/src/traits/evm_env.rs @@ -1,4 +1,4 @@ -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_primitives::{BlockHashOrNumber, Header}; use revm::primitives::{BlockEnv, CfgEnv}; @@ -15,10 +15,10 @@ pub trait EvmEnvProvider: Send + Sync { cfg: &mut CfgEnv, block_env: &mut BlockEnv, at: BlockHashOrNumber, - ) -> RethResult<()>; + ) -> ProviderResult<()>; /// Fills the default [CfgEnv] and [BlockEnv] fields with values specific to the given [Header]. - fn env_with_header(&self, header: &Header) -> RethResult<(CfgEnv, BlockEnv)> { + fn env_with_header(&self, header: &Header) -> ProviderResult<(CfgEnv, BlockEnv)> { let mut cfg = CfgEnv::default(); let mut block_env = BlockEnv::default(); self.fill_env_with_header(&mut cfg, &mut block_env, header)?; @@ -31,21 +31,25 @@ pub trait EvmEnvProvider: Send + Sync { cfg: &mut CfgEnv, block_env: &mut BlockEnv, header: &Header, - ) -> RethResult<()>; + ) -> ProviderResult<()>; /// Fills the [BlockEnv] fields with values specific to the given [BlockHashOrNumber]. - fn fill_block_env_at(&self, block_env: &mut BlockEnv, at: BlockHashOrNumber) -> RethResult<()>; + fn fill_block_env_at( + &self, + block_env: &mut BlockEnv, + at: BlockHashOrNumber, + ) -> ProviderResult<()>; /// Fills the [BlockEnv] fields with values specific to the given [Header]. fn fill_block_env_with_header( &self, block_env: &mut BlockEnv, header: &Header, - ) -> RethResult<()>; + ) -> ProviderResult<()>; /// Fills the [CfgEnv] fields with values specific to the given [BlockHashOrNumber]. - fn fill_cfg_env_at(&self, cfg: &mut CfgEnv, at: BlockHashOrNumber) -> RethResult<()>; + fn fill_cfg_env_at(&self, cfg: &mut CfgEnv, at: BlockHashOrNumber) -> ProviderResult<()>; /// Fills the [CfgEnv] fields with values specific to the given [Header]. - fn fill_cfg_env_with_header(&self, cfg: &mut CfgEnv, header: &Header) -> RethResult<()>; + fn fill_cfg_env_with_header(&self, cfg: &mut CfgEnv, header: &Header) -> ProviderResult<()>; } diff --git a/crates/storage/provider/src/traits/hashing.rs b/crates/storage/provider/src/traits/hashing.rs index dfeeabd18..b5a77247e 100644 --- a/crates/storage/provider/src/traits/hashing.rs +++ b/crates/storage/provider/src/traits/hashing.rs @@ -1,6 +1,6 @@ use auto_impl::auto_impl; use reth_db::models::BlockNumberAddress; -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_primitives::{Account, Address, BlockNumber, StorageEntry, B256}; use std::{ collections::{BTreeMap, BTreeSet, HashMap}, @@ -18,7 +18,7 @@ pub trait HashingWriter: Send + Sync { fn unwind_account_hashing( &self, range: RangeInclusive, - ) -> RethResult>>; + ) -> ProviderResult>>; /// Inserts all accounts into [reth_db::tables::AccountHistory] table. /// @@ -28,7 +28,7 @@ pub trait HashingWriter: Send + Sync { fn insert_account_for_hashing( &self, accounts: impl IntoIterator)>, - ) -> RethResult>>; + ) -> ProviderResult>>; /// Unwind and clear storage hashing /// @@ -38,7 +38,7 @@ pub trait HashingWriter: Send + Sync { fn unwind_storage_hashing( &self, range: Range, - ) -> RethResult>>; + ) -> ProviderResult>>; /// Iterates over storages and inserts them to hashing table. /// @@ -48,7 +48,7 @@ pub trait HashingWriter: Send + Sync { fn insert_storage_for_hashing( &self, storages: impl IntoIterator)>, - ) -> RethResult>>; + ) -> ProviderResult>>; /// Calculate the hashes of all changed accounts and storages, and finally calculate the state /// root. @@ -61,5 +61,5 @@ pub trait HashingWriter: Send + Sync { range: RangeInclusive, end_block_hash: B256, expected_state_root: B256, - ) -> RethResult<()>; + ) -> ProviderResult<()>; } diff --git a/crates/storage/provider/src/traits/header.rs b/crates/storage/provider/src/traits/header.rs index 3beebd170..ad04f52ac 100644 --- a/crates/storage/provider/src/traits/header.rs +++ b/crates/storage/provider/src/traits/header.rs @@ -1,5 +1,5 @@ use auto_impl::auto_impl; -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_primitives::{BlockHash, BlockHashOrNumber, BlockNumber, Header, SealedHeader, U256}; use std::ops::RangeBounds; @@ -7,21 +7,21 @@ use std::ops::RangeBounds; #[auto_impl(&, Arc)] pub trait HeaderProvider: Send + Sync { /// Check if block is known - fn is_known(&self, block_hash: &BlockHash) -> RethResult { + fn is_known(&self, block_hash: &BlockHash) -> ProviderResult { self.header(block_hash).map(|header| header.is_some()) } /// Get header by block hash - fn header(&self, block_hash: &BlockHash) -> RethResult>; + fn header(&self, block_hash: &BlockHash) -> ProviderResult>; /// Get header by block number - fn header_by_number(&self, num: u64) -> RethResult>; + fn header_by_number(&self, num: u64) -> ProviderResult>; /// Get header by block number or hash fn header_by_hash_or_number( &self, hash_or_num: BlockHashOrNumber, - ) -> RethResult> { + ) -> ProviderResult> { match hash_or_num { BlockHashOrNumber::Hash(hash) => self.header(&hash), BlockHashOrNumber::Number(num) => self.header_by_number(num), @@ -29,22 +29,22 @@ pub trait HeaderProvider: Send + Sync { } /// Get total difficulty by block hash. - fn header_td(&self, hash: &BlockHash) -> RethResult>; + fn header_td(&self, hash: &BlockHash) -> ProviderResult>; /// Get total difficulty by block number. - fn header_td_by_number(&self, number: BlockNumber) -> RethResult>; + fn header_td_by_number(&self, number: BlockNumber) -> ProviderResult>; /// Get headers in range of block numbers - fn headers_range(&self, range: impl RangeBounds) -> RethResult>; + fn headers_range(&self, range: impl RangeBounds) -> ProviderResult>; /// Get a single sealed header by block number. - fn sealed_header(&self, number: BlockNumber) -> RethResult>; + fn sealed_header(&self, number: BlockNumber) -> ProviderResult>; /// Get headers in range of block numbers. fn sealed_headers_range( &self, range: impl RangeBounds, - ) -> RethResult> { + ) -> ProviderResult> { self.sealed_headers_while(range, |_| true) } @@ -53,5 +53,5 @@ pub trait HeaderProvider: Send + Sync { &self, range: impl RangeBounds, predicate: impl FnMut(&SealedHeader) -> bool, - ) -> RethResult>; + ) -> ProviderResult>; } diff --git a/crates/storage/provider/src/traits/history.rs b/crates/storage/provider/src/traits/history.rs index b9c59cdb7..daef02b9f 100644 --- a/crates/storage/provider/src/traits/history.rs +++ b/crates/storage/provider/src/traits/history.rs @@ -1,6 +1,6 @@ use auto_impl::auto_impl; use reth_db::models::BlockNumberAddress; -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_primitives::{Address, BlockNumber, B256}; use std::{ collections::BTreeMap, @@ -16,26 +16,28 @@ pub trait HistoryWriter: Send + Sync { fn unwind_account_history_indices( &self, range: RangeInclusive, - ) -> RethResult; + ) -> ProviderResult; /// Insert account change index to database. Used inside AccountHistoryIndex stage fn insert_account_history_index( &self, account_transitions: BTreeMap>, - ) -> RethResult<()>; + ) -> ProviderResult<()>; /// Unwind and clear storage history indices. /// /// Returns number of changesets walked. - fn unwind_storage_history_indices(&self, range: Range) - -> RethResult; + fn unwind_storage_history_indices( + &self, + range: Range, + ) -> ProviderResult; /// Insert storage change index to database. Used inside StorageHistoryIndex stage fn insert_storage_history_index( &self, storage_transitions: BTreeMap<(Address, B256), Vec>, - ) -> RethResult<()>; + ) -> ProviderResult<()>; /// Read account/storage changesets and update account/storage history indices. - fn update_history_indices(&self, range: RangeInclusive) -> RethResult<()>; + fn update_history_indices(&self, range: RangeInclusive) -> ProviderResult<()>; } diff --git a/crates/storage/provider/src/traits/prune_checkpoint.rs b/crates/storage/provider/src/traits/prune_checkpoint.rs index f44a1c00e..60470bfec 100644 --- a/crates/storage/provider/src/traits/prune_checkpoint.rs +++ b/crates/storage/provider/src/traits/prune_checkpoint.rs @@ -1,11 +1,14 @@ -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_primitives::{PruneCheckpoint, PruneSegment}; /// The trait for fetching prune checkpoint related data. #[auto_impl::auto_impl(&, Arc)] pub trait PruneCheckpointReader: Send + Sync { /// Fetch the checkpoint for the given prune segment. - fn get_prune_checkpoint(&self, segment: PruneSegment) -> RethResult>; + fn get_prune_checkpoint( + &self, + segment: PruneSegment, + ) -> ProviderResult>; } /// The trait for updating prune checkpoint related data. @@ -16,5 +19,5 @@ pub trait PruneCheckpointWriter: Send + Sync { &self, segment: PruneSegment, checkpoint: PruneCheckpoint, - ) -> RethResult<()>; + ) -> ProviderResult<()>; } diff --git a/crates/storage/provider/src/traits/receipts.rs b/crates/storage/provider/src/traits/receipts.rs index ccb1b7dc8..defb69faf 100644 --- a/crates/storage/provider/src/traits/receipts.rs +++ b/crates/storage/provider/src/traits/receipts.rs @@ -1,4 +1,4 @@ -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_primitives::{BlockHashOrNumber, BlockId, BlockNumberOrTag, Receipt, TxHash, TxNumber}; use crate::BlockIdReader; @@ -9,17 +9,17 @@ pub trait ReceiptProvider: Send + Sync { /// Get receipt by transaction number /// /// Returns `None` if the transaction is not found. - fn receipt(&self, id: TxNumber) -> RethResult>; + fn receipt(&self, id: TxNumber) -> ProviderResult>; /// Get receipt by transaction hash. /// /// Returns `None` if the transaction is not found. - fn receipt_by_hash(&self, hash: TxHash) -> RethResult>; + fn receipt_by_hash(&self, hash: TxHash) -> ProviderResult>; /// Get receipts by block num or hash. /// /// Returns `None` if the block is not found. - fn receipts_by_block(&self, block: BlockHashOrNumber) -> RethResult>>; + fn receipts_by_block(&self, block: BlockHashOrNumber) -> ProviderResult>>; } /// Trait extension for `ReceiptProvider`, for types that implement `BlockId` conversion. @@ -34,7 +34,7 @@ pub trait ReceiptProvider: Send + Sync { /// retrieving the receipts should be done using the type's `ReceiptProvider` methods. pub trait ReceiptProviderIdExt: ReceiptProvider + BlockIdReader { /// Get receipt by block id - fn receipts_by_block_id(&self, block: BlockId) -> RethResult>> { + fn receipts_by_block_id(&self, block: BlockId) -> ProviderResult>> { let id = match block { BlockId::Hash(hash) => BlockHashOrNumber::Hash(hash.block_hash), BlockId::Number(num_tag) => { @@ -55,7 +55,7 @@ pub trait ReceiptProviderIdExt: ReceiptProvider + BlockIdReader { fn receipts_by_number_or_tag( &self, number_or_tag: BlockNumberOrTag, - ) -> RethResult>> { + ) -> ProviderResult>> { self.receipts_by_block_id(number_or_tag.into()) } } diff --git a/crates/storage/provider/src/traits/stage_checkpoint.rs b/crates/storage/provider/src/traits/stage_checkpoint.rs index 11db878fa..ff58fa3ea 100644 --- a/crates/storage/provider/src/traits/stage_checkpoint.rs +++ b/crates/storage/provider/src/traits/stage_checkpoint.rs @@ -1,4 +1,4 @@ -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_primitives::{ stage::{StageCheckpoint, StageId}, BlockNumber, @@ -8,25 +8,30 @@ use reth_primitives::{ #[auto_impl::auto_impl(&, Arc)] pub trait StageCheckpointReader: Send + Sync { /// Fetch the checkpoint for the given stage. - fn get_stage_checkpoint(&self, id: StageId) -> RethResult>; + fn get_stage_checkpoint(&self, id: StageId) -> ProviderResult>; /// Get stage checkpoint progress. - fn get_stage_checkpoint_progress(&self, id: StageId) -> RethResult>>; + fn get_stage_checkpoint_progress(&self, id: StageId) -> ProviderResult>>; } /// The trait for updating stage checkpoint related data. #[auto_impl::auto_impl(&, Arc)] pub trait StageCheckpointWriter: Send + Sync { /// Save stage checkpoint. - fn save_stage_checkpoint(&self, id: StageId, checkpoint: StageCheckpoint) -> RethResult<()>; + fn save_stage_checkpoint(&self, id: StageId, checkpoint: StageCheckpoint) + -> ProviderResult<()>; /// Save stage checkpoint progress. - fn save_stage_checkpoint_progress(&self, id: StageId, checkpoint: Vec) -> RethResult<()>; + fn save_stage_checkpoint_progress( + &self, + id: StageId, + checkpoint: Vec, + ) -> ProviderResult<()>; /// Update all pipeline sync stage progress. fn update_pipeline_stages( &self, block_number: BlockNumber, drop_stage_checkpoint: bool, - ) -> RethResult<()>; + ) -> ProviderResult<()>; } diff --git a/crates/storage/provider/src/traits/state.rs b/crates/storage/provider/src/traits/state.rs index 9204ff86e..617550441 100644 --- a/crates/storage/provider/src/traits/state.rs +++ b/crates/storage/provider/src/traits/state.rs @@ -1,7 +1,7 @@ use super::AccountReader; use crate::{BlockHashReader, BlockIdReader, BundleStateWithReceipts}; use auto_impl::auto_impl; -use reth_interfaces::{provider::ProviderError, RethResult}; +use reth_interfaces::provider::{ProviderError, ProviderResult}; use reth_primitives::{ trie::AccountProof, Address, BlockHash, BlockId, BlockNumHash, BlockNumber, BlockNumberOrTag, Bytecode, StorageKey, StorageValue, B256, KECCAK_EMPTY, U256, @@ -18,18 +18,18 @@ pub trait StateProvider: BlockHashReader + AccountReader + StateRootProvider + S &self, account: Address, storage_key: StorageKey, - ) -> RethResult>; + ) -> ProviderResult>; /// Get account code by its hash - fn bytecode_by_hash(&self, code_hash: B256) -> RethResult>; + fn bytecode_by_hash(&self, code_hash: B256) -> ProviderResult>; /// Get account and storage proofs. - fn proof(&self, address: Address, keys: &[B256]) -> RethResult; + fn proof(&self, address: Address, keys: &[B256]) -> ProviderResult; /// Get account code by its address. /// /// Returns `None` if the account doesn't exist or account is not a contract - fn account_code(&self, addr: Address) -> RethResult> { + fn account_code(&self, addr: Address) -> ProviderResult> { // Get basic account information // Returns None if acc doesn't exist let acc = match self.basic_account(addr)? { @@ -52,7 +52,7 @@ pub trait StateProvider: BlockHashReader + AccountReader + StateRootProvider + S /// Get account balance by its address. /// /// Returns `None` if the account doesn't exist - fn account_balance(&self, addr: Address) -> RethResult> { + fn account_balance(&self, addr: Address) -> ProviderResult> { // Get basic account information // Returns None if acc doesn't exist match self.basic_account(addr)? { @@ -64,7 +64,7 @@ pub trait StateProvider: BlockHashReader + AccountReader + StateRootProvider + S /// Get account nonce by its address. /// /// Returns `None` if the account doesn't exist - fn account_nonce(&self, addr: Address) -> RethResult> { + fn account_nonce(&self, addr: Address) -> ProviderResult> { // Get basic account information // Returns None if acc doesn't exist match self.basic_account(addr)? { @@ -99,13 +99,13 @@ pub trait StateProvider: BlockHashReader + AccountReader + StateRootProvider + S /// to be used, since block `n` was executed on its parent block's state. pub trait StateProviderFactory: BlockIdReader + Send + Sync { /// Storage provider for latest block. - fn latest(&self) -> RethResult>; + fn latest(&self) -> ProviderResult>; /// Returns a [StateProvider] indexed by the given [BlockId]. /// /// Note: if a number or hash is provided this will __only__ look at historical(canonical) /// state. - fn state_by_block_id(&self, block_id: BlockId) -> RethResult> { + fn state_by_block_id(&self, block_id: BlockId) -> ProviderResult> { match block_id { BlockId::Number(block_number) => self.state_by_block_number_or_tag(block_number), BlockId::Hash(block_hash) => self.history_by_block_hash(block_hash.into()), @@ -118,14 +118,14 @@ pub trait StateProviderFactory: BlockIdReader + Send + Sync { fn state_by_block_number_or_tag( &self, number_or_tag: BlockNumberOrTag, - ) -> RethResult> { + ) -> ProviderResult> { match number_or_tag { BlockNumberOrTag::Latest => self.latest(), BlockNumberOrTag::Finalized => { // we can only get the finalized state by hash, not by num let hash = match self.finalized_block_hash()? { Some(hash) => hash, - None => return Err(ProviderError::FinalizedBlockNotFound.into()), + None => return Err(ProviderError::FinalizedBlockNotFound), }; // only look at historical state self.history_by_block_hash(hash) @@ -134,7 +134,7 @@ pub trait StateProviderFactory: BlockIdReader + Send + Sync { // we can only get the safe state by hash, not by num let hash = match self.safe_block_hash()? { Some(hash) => hash, - None => return Err(ProviderError::SafeBlockNotFound.into()), + None => return Err(ProviderError::SafeBlockNotFound), }; self.history_by_block_hash(hash) @@ -152,37 +152,40 @@ pub trait StateProviderFactory: BlockIdReader + Send + Sync { /// /// /// Note: this only looks at historical blocks, not pending blocks. - fn history_by_block_number(&self, block: BlockNumber) -> RethResult>; + fn history_by_block_number(&self, block: BlockNumber) -> ProviderResult>; /// Returns a historical [StateProvider] indexed by the given block hash. /// /// Note: this only looks at historical blocks, not pending blocks. - fn history_by_block_hash(&self, block: BlockHash) -> RethResult>; + fn history_by_block_hash(&self, block: BlockHash) -> ProviderResult>; /// Returns _any_[StateProvider] with matching block hash. /// /// This will return a [StateProvider] for either a historical or pending block. - fn state_by_block_hash(&self, block: BlockHash) -> RethResult>; + fn state_by_block_hash(&self, block: BlockHash) -> ProviderResult>; /// Storage provider for pending state. /// /// Represents the state at the block that extends the canonical chain by one. /// If there's no `pending` block, then this is equal to [StateProviderFactory::latest] - fn pending(&self) -> RethResult>; + fn pending(&self) -> ProviderResult>; /// Storage provider for pending state for the given block hash. /// /// Represents the state at the block that extends the canonical chain. /// /// If the block couldn't be found, returns `None`. - fn pending_state_by_hash(&self, block_hash: B256) -> RethResult>>; + fn pending_state_by_hash( + &self, + block_hash: B256, + ) -> ProviderResult>>; /// Return a [StateProvider] that contains post state data provider. /// Used to inspect or execute transaction on the pending state. fn pending_with_provider( &self, post_state_data: Box, - ) -> RethResult>; + ) -> ProviderResult>; } /// Blockchain trait provider that gives access to the blockchain state that is not yet committed @@ -195,10 +198,9 @@ pub trait BlockchainTreePendingStateProvider: Send + Sync { fn pending_state_provider( &self, block_hash: BlockHash, - ) -> RethResult> { - Ok(self - .find_pending_state_provider(block_hash) - .ok_or(ProviderError::StateForHashNotFound(block_hash))?) + ) -> ProviderResult> { + self.find_pending_state_provider(block_hash) + .ok_or(ProviderError::StateForHashNotFound(block_hash)) } /// Returns state provider if a matching block exists. @@ -231,5 +233,5 @@ pub trait BundleStateDataProvider: Send + Sync { #[auto_impl[Box,&, Arc]] pub trait StateRootProvider: Send + Sync { /// Returns the state root of the BundleState on top of the current state. - fn state_root(&self, post_state: &BundleStateWithReceipts) -> RethResult; + fn state_root(&self, post_state: &BundleStateWithReceipts) -> ProviderResult; } diff --git a/crates/storage/provider/src/traits/storage.rs b/crates/storage/provider/src/traits/storage.rs index 764ea1c01..302acad8b 100644 --- a/crates/storage/provider/src/traits/storage.rs +++ b/crates/storage/provider/src/traits/storage.rs @@ -4,23 +4,23 @@ use std::{ }; use auto_impl::auto_impl; -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_primitives::{Address, BlockNumber, StorageEntry, B256}; /// Storage reader #[auto_impl(&, Arc, Box)] pub trait StorageReader: Send + Sync { /// Get plainstate storages for addresses and storage keys. - fn plainstate_storages( + fn plain_state_storages( &self, addresses_with_keys: impl IntoIterator)>, - ) -> RethResult)>>; + ) -> ProviderResult)>>; /// Iterate over storage changesets and return all storage slots that were changed. fn changed_storages_with_range( &self, range: RangeInclusive, - ) -> RethResult>>; + ) -> ProviderResult>>; /// Iterate over storage changesets and return all storage slots that were changed alongside /// each specific set of blocks. @@ -29,5 +29,5 @@ pub trait StorageReader: Send + Sync { fn changed_storages_and_blocks_with_range( &self, range: RangeInclusive, - ) -> RethResult>>; + ) -> ProviderResult>>; } diff --git a/crates/storage/provider/src/traits/transactions.rs b/crates/storage/provider/src/traits/transactions.rs index 2f9c72ed1..9041593b5 100644 --- a/crates/storage/provider/src/traits/transactions.rs +++ b/crates/storage/provider/src/traits/transactions.rs @@ -1,5 +1,5 @@ use crate::{BlockNumReader, BlockReader}; -use reth_interfaces::{provider::ProviderError, RethResult}; +use reth_interfaces::provider::{ProviderError, ProviderResult}; use reth_primitives::{ Address, BlockHashOrNumber, BlockNumber, TransactionMeta, TransactionSigned, TransactionSignedNoHash, TxHash, TxNumber, @@ -13,55 +13,58 @@ pub trait TransactionsProvider: BlockNumReader + Send + Sync { /// /// This is the inverse of [TransactionsProvider::transaction_by_id]. /// Returns None if the transaction is not found. - fn transaction_id(&self, tx_hash: TxHash) -> RethResult>; + fn transaction_id(&self, tx_hash: TxHash) -> ProviderResult>; /// Get transaction by id, computes hash everytime so more expensive. - fn transaction_by_id(&self, id: TxNumber) -> RethResult>; + fn transaction_by_id(&self, id: TxNumber) -> ProviderResult>; /// Get transaction by id without computing the hash. fn transaction_by_id_no_hash( &self, id: TxNumber, - ) -> RethResult>; + ) -> ProviderResult>; /// Get transaction by transaction hash. - fn transaction_by_hash(&self, hash: TxHash) -> RethResult>; + fn transaction_by_hash(&self, hash: TxHash) -> ProviderResult>; /// Get transaction by transaction hash and additional metadata of the block the transaction was /// mined in fn transaction_by_hash_with_meta( &self, hash: TxHash, - ) -> RethResult>; + ) -> ProviderResult>; /// Get transaction block number - fn transaction_block(&self, id: TxNumber) -> RethResult>; + fn transaction_block(&self, id: TxNumber) -> ProviderResult>; /// Get transactions by block id. fn transactions_by_block( &self, block: BlockHashOrNumber, - ) -> RethResult>>; + ) -> ProviderResult>>; /// Get transactions by block range. fn transactions_by_block_range( &self, range: impl RangeBounds, - ) -> RethResult>>; + ) -> ProviderResult>>; /// Get transactions by tx range. fn transactions_by_tx_range( &self, range: impl RangeBounds, - ) -> RethResult>; + ) -> ProviderResult>; /// Get Senders from a tx range. - fn senders_by_tx_range(&self, range: impl RangeBounds) -> RethResult>; + fn senders_by_tx_range( + &self, + range: impl RangeBounds, + ) -> ProviderResult>; /// Get transaction sender. /// /// Returns None if the transaction is not found. - fn transaction_sender(&self, id: TxNumber) -> RethResult>; + fn transaction_sender(&self, id: TxNumber) -> ProviderResult>; } /// Client trait for fetching additional [TransactionSigned] related data. @@ -71,7 +74,7 @@ pub trait TransactionsProviderExt: BlockReader + Send + Sync { fn transaction_range_by_block_range( &self, block_range: RangeInclusive, - ) -> RethResult> { + ) -> ProviderResult> { let from = self .block_body_indices(*block_range.start())? .ok_or(ProviderError::BlockBodyIndicesNotFound(*block_range.start()))? @@ -89,5 +92,5 @@ pub trait TransactionsProviderExt: BlockReader + Send + Sync { fn transaction_hashes_by_range( &self, tx_range: Range, - ) -> RethResult>; + ) -> ProviderResult>; } diff --git a/crates/storage/provider/src/traits/withdrawals.rs b/crates/storage/provider/src/traits/withdrawals.rs index 6361e6509..419c1453d 100644 --- a/crates/storage/provider/src/traits/withdrawals.rs +++ b/crates/storage/provider/src/traits/withdrawals.rs @@ -1,4 +1,4 @@ -use reth_interfaces::RethResult; +use reth_interfaces::provider::ProviderResult; use reth_primitives::{BlockHashOrNumber, Withdrawal}; /// Client trait for fetching [Withdrawal] related data. @@ -9,8 +9,8 @@ pub trait WithdrawalsProvider: Send + Sync { &self, id: BlockHashOrNumber, timestamp: u64, - ) -> RethResult>>; + ) -> ProviderResult>>; /// Get latest withdrawal from this block or earlier . - fn latest_withdrawal(&self) -> RethResult>; + fn latest_withdrawal(&self) -> ProviderResult>; } diff --git a/crates/transaction-pool/src/maintain.rs b/crates/transaction-pool/src/maintain.rs index 692a5177b..4f834de4d 100644 --- a/crates/transaction-pool/src/maintain.rs +++ b/crates/transaction-pool/src/maintain.rs @@ -10,14 +10,13 @@ use futures_util::{ future::{BoxFuture, Fuse, FusedFuture}, FutureExt, Stream, StreamExt, }; -use reth_interfaces::RethError; use reth_primitives::{ Address, BlockHash, BlockNumber, BlockNumberOrTag, FromRecoveredPooledTransaction, FromRecoveredTransaction, PooledTransactionsElementEcRecovered, }; use reth_provider::{ BlockReaderIdExt, BundleStateWithReceipts, CanonStateNotification, ChainSpecProvider, - StateProviderFactory, + ProviderError, StateProviderFactory, }; use reth_tasks::TaskSpawner; use std::{ @@ -495,7 +494,7 @@ fn load_accounts( client: Client, at: BlockHash, addresses: I, -) -> Result, RethError)>> +) -> Result, ProviderError)>> where I: Iterator, diff --git a/testing/ef-tests/src/cases/blockchain_test.rs b/testing/ef-tests/src/cases/blockchain_test.rs index 6b2b08da1..5d9a4bf86 100644 --- a/testing/ef-tests/src/cases/blockchain_test.rs +++ b/testing/ef-tests/src/cases/blockchain_test.rs @@ -78,17 +78,24 @@ impl Case for BlockchainTestCase { let provider = factory.provider_rw().unwrap(); // Insert test state - provider.insert_block( - SealedBlock::new(case.genesis_block_header.clone().into(), BlockBody::default()), - None, - None, - )?; + provider + .insert_block( + SealedBlock::new( + case.genesis_block_header.clone().into(), + BlockBody::default(), + ), + None, + None, + ) + .map_err(|err| Error::RethError(err.into()))?; case.pre.write_to_db(provider.tx_ref())?; let mut last_block = None; for block in case.blocks.iter() { let decoded = SealedBlock::decode(&mut block.rlp.as_ref())?; - provider.insert_block(decoded.clone(), None, None)?; + provider + .insert_block(decoded.clone(), None, None) + .map_err(|err| Error::RethError(err.into()))?; last_block = Some(decoded); } @@ -118,11 +125,9 @@ impl Case for BlockchainTestCase { // `insert_hashes` will insert hashed data, compute the state root and match it to // expected internally let last_block = last_block.unwrap_or_default(); - provider.insert_hashes( - 0..=last_block.number, - last_block.hash, - expected_state_root, - )?; + provider + .insert_hashes(0..=last_block.number, last_block.hash, expected_state_root) + .map_err(|err| Error::RethError(err.into()))?; } else { return Err(Error::MissingPostState) }