diff --git a/crates/consensus/common/src/validation.rs b/crates/consensus/common/src/validation.rs index 9d731d25b..4bb659eb5 100644 --- a/crates/consensus/common/src/validation.rs +++ b/crates/consensus/common/src/validation.rs @@ -468,7 +468,7 @@ mod tests { BlockBody, BlockHash, BlockHashOrNumber, Bytes, ChainSpecBuilder, Header, Signature, TransactionKind, TransactionSigned, Withdrawal, MAINNET, U256, }; - use std::ops::RangeBounds; + use std::ops::RangeInclusive; mock! { WithdrawalsProvider {} @@ -539,13 +539,13 @@ mod tests { Ok(None) } - fn headers_range(&self, _range: impl RangeBounds) -> RethResult> { + fn headers_range(&self, _range: RangeInclusive) -> RethResult> { Ok(vec![]) } fn sealed_headers_range( &self, - _range: impl RangeBounds, + _range: RangeInclusive, ) -> RethResult> { Ok(vec![]) } diff --git a/crates/storage/db/src/tables/models/blocks.rs b/crates/storage/db/src/tables/models/blocks.rs index a03917aaa..a9f43690a 100644 --- a/crates/storage/db/src/tables/models/blocks.rs +++ b/crates/storage/db/src/tables/models/blocks.rs @@ -2,7 +2,7 @@ use reth_codecs::{main_codec, Compact}; use reth_primitives::{Header, TxNumber, Withdrawal, B256}; -use std::ops::Range; +use std::ops::RangeInclusive; /// Total number of transactions. pub type NumTransactions = u64; @@ -28,8 +28,8 @@ pub struct StoredBlockBodyIndices { impl StoredBlockBodyIndices { /// Return the range of transaction ids for this block. - pub fn tx_num_range(&self) -> Range { - self.first_tx_num..self.first_tx_num + self.tx_count + pub fn tx_num_range(&self) -> RangeInclusive { + self.first_tx_num..=(self.first_tx_num + self.tx_count).saturating_sub(1) } /// Return the index of last transaction in this block unless the block @@ -111,6 +111,6 @@ mod test { assert_eq!(block_indices.last_tx_num(), first_tx_num + tx_count - 1); assert_eq!(block_indices.next_tx_num(), first_tx_num + tx_count); assert_eq!(block_indices.tx_count(), tx_count); - assert_eq!(block_indices.tx_num_range(), first_tx_num..first_tx_num + tx_count); + assert_eq!(block_indices.tx_num_range(), first_tx_num..=first_tx_num + tx_count - 1); } } diff --git a/crates/storage/provider/src/providers/database/mod.rs b/crates/storage/provider/src/providers/database/mod.rs index fc1c56162..388213128 100644 --- a/crates/storage/provider/src/providers/database/mod.rs +++ b/crates/storage/provider/src/providers/database/mod.rs @@ -16,7 +16,7 @@ use reth_primitives::{ }; use revm::primitives::{BlockEnv, CfgEnv}; use std::{ - ops::{RangeBounds, RangeInclusive}, + ops::{Range, RangeInclusive}, sync::Arc, }; use tracing::trace; @@ -170,13 +170,13 @@ impl HeaderProvider for ProviderFactory { self.provider()?.header_td_by_number(number) } - fn headers_range(&self, range: impl RangeBounds) -> RethResult> { + fn headers_range(&self, range: RangeInclusive) -> RethResult> { self.provider()?.headers_range(range) } fn sealed_headers_range( &self, - range: impl RangeBounds, + range: RangeInclusive, ) -> RethResult> { self.provider()?.sealed_headers_range(range) } @@ -295,19 +295,19 @@ impl TransactionsProvider for ProviderFactory { fn transactions_by_block_range( &self, - range: impl RangeBounds, + range: Range, ) -> RethResult>> { self.provider()?.transactions_by_block_range(range) } fn transactions_by_tx_range( &self, - range: impl RangeBounds, + range: RangeInclusive, ) -> RethResult> { self.provider()?.transactions_by_tx_range(range) } - fn senders_by_tx_range(&self, range: impl RangeBounds) -> RethResult> { + fn senders_by_tx_range(&self, range: RangeInclusive) -> RethResult> { self.provider()?.senders_by_tx_range(range) } diff --git a/crates/storage/provider/src/providers/database/provider.rs b/crates/storage/provider/src/providers/database/provider.rs index 7beae9b5d..e12bfb3c2 100644 --- a/crates/storage/provider/src/providers/database/provider.rs +++ b/crates/storage/provider/src/providers/database/provider.rs @@ -893,7 +893,7 @@ impl<'this, TX: DbTx<'this>> HeaderProvider for DatabaseProvider<'this, TX> { Ok(self.tx.get::(number)?.map(|td| td.0)) } - fn headers_range(&self, range: impl RangeBounds) -> RethResult> { + fn headers_range(&self, range: RangeInclusive) -> RethResult> { let mut cursor = self.tx.cursor_read::()?; cursor .walk_range(range)? @@ -903,7 +903,7 @@ impl<'this, TX: DbTx<'this>> HeaderProvider for DatabaseProvider<'this, TX> { fn sealed_headers_range( &self, - range: impl RangeBounds, + range: RangeInclusive, ) -> RethResult> { let mut headers = vec![]; for entry in self.tx.cursor_read::()?.walk_range(range)? { @@ -1246,7 +1246,7 @@ impl<'this, TX: DbTx<'this>> TransactionsProvider for DatabaseProvider<'this, TX fn transactions_by_block_range( &self, - range: impl RangeBounds, + range: Range, ) -> RethResult>> { let mut results = Vec::new(); let mut body_cursor = self.tx.cursor_read::()?; @@ -1270,7 +1270,7 @@ impl<'this, TX: DbTx<'this>> TransactionsProvider for DatabaseProvider<'this, TX fn transactions_by_tx_range( &self, - range: impl RangeBounds, + range: RangeInclusive, ) -> RethResult> { Ok(self .tx @@ -1280,7 +1280,7 @@ impl<'this, TX: DbTx<'this>> TransactionsProvider for DatabaseProvider<'this, TX .collect::, _>>()?) } - fn senders_by_tx_range(&self, range: impl RangeBounds) -> RethResult> { + fn senders_by_tx_range(&self, range: RangeInclusive) -> RethResult> { Ok(self .tx .cursor_read::()? diff --git a/crates/storage/provider/src/providers/mod.rs b/crates/storage/provider/src/providers/mod.rs index a865f5a63..7ab42155f 100644 --- a/crates/storage/provider/src/providers/mod.rs +++ b/crates/storage/provider/src/providers/mod.rs @@ -22,7 +22,7 @@ use reth_primitives::{ use revm::primitives::{BlockEnv, CfgEnv}; use std::{ collections::{BTreeMap, HashSet}, - ops::{RangeBounds, RangeInclusive}, + ops::{Range, RangeInclusive}, sync::Arc, time::Instant, }; @@ -136,13 +136,13 @@ where self.database.provider()?.header_td_by_number(number) } - fn headers_range(&self, range: impl RangeBounds) -> RethResult> { + fn headers_range(&self, range: RangeInclusive) -> RethResult> { self.database.provider()?.headers_range(range) } fn sealed_headers_range( &self, - range: impl RangeBounds, + range: RangeInclusive, ) -> RethResult> { self.database.provider()?.sealed_headers_range(range) } @@ -319,19 +319,19 @@ where fn transactions_by_block_range( &self, - range: impl RangeBounds, + range: Range, ) -> RethResult>> { self.database.provider()?.transactions_by_block_range(range) } fn transactions_by_tx_range( &self, - range: impl RangeBounds, + range: RangeInclusive, ) -> RethResult> { 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: RangeInclusive) -> RethResult> { self.database.provider()?.senders_by_tx_range(range) } diff --git a/crates/storage/provider/src/providers/snapshot.rs b/crates/storage/provider/src/providers/snapshot.rs index ec2c36e6b..f37abf64d 100644 --- a/crates/storage/provider/src/providers/snapshot.rs +++ b/crates/storage/provider/src/providers/snapshot.rs @@ -6,7 +6,7 @@ use reth_db::{ use reth_interfaces::{provider::ProviderError, RethResult}; use reth_nippy_jar::{compression::Decompressor, NippyJar, NippyJarCursor}; use reth_primitives::{BlockHash, BlockNumber, Header, SealedHeader, U256}; -use std::ops::RangeBounds; +use std::ops::RangeInclusive; /// SnapshotProvider /// @@ -85,13 +85,13 @@ impl<'a> HeaderProvider for SnapshotProvider<'a> { unimplemented!(); } - fn headers_range(&self, _range: impl RangeBounds) -> RethResult> { + fn headers_range(&self, _range: RangeInclusive) -> RethResult> { unimplemented!(); } fn sealed_headers_range( &self, - _range: impl RangeBounds, + _range: RangeInclusive, ) -> RethResult> { unimplemented!(); } diff --git a/crates/storage/provider/src/test_utils/mock.rs b/crates/storage/provider/src/test_utils/mock.rs index 3c44f1aa0..000085380 100644 --- a/crates/storage/provider/src/test_utils/mock.rs +++ b/crates/storage/provider/src/test_utils/mock.rs @@ -18,7 +18,7 @@ use reth_primitives::{ use revm::primitives::{BlockEnv, CfgEnv}; use std::{ collections::{BTreeMap, HashMap}, - ops::{RangeBounds, RangeInclusive}, + ops::{Range, RangeInclusive}, sync::Arc, }; @@ -152,7 +152,7 @@ impl HeaderProvider for MockEthProvider { Ok(Some(sum)) } - fn headers_range(&self, range: impl RangeBounds) -> RethResult> { + fn headers_range(&self, range: RangeInclusive) -> RethResult> { let lock = self.headers.lock(); let mut headers: Vec<_> = @@ -164,7 +164,7 @@ impl HeaderProvider for MockEthProvider { fn sealed_headers_range( &self, - range: impl RangeBounds, + range: RangeInclusive, ) -> RethResult> { Ok(self.headers_range(range)?.into_iter().map(|h| h.seal_slow()).collect()) } @@ -265,7 +265,7 @@ impl TransactionsProvider for MockEthProvider { fn transactions_by_block_range( &self, - range: impl RangeBounds, + range: Range, ) -> RethResult>> { // init btreemap so we can return in order let mut map = BTreeMap::new(); @@ -280,7 +280,7 @@ impl TransactionsProvider for MockEthProvider { fn transactions_by_tx_range( &self, - range: impl RangeBounds, + range: RangeInclusive, ) -> RethResult> { let lock = self.blocks.lock(); let transactions = lock @@ -299,7 +299,7 @@ impl TransactionsProvider for MockEthProvider { Ok(transactions) } - fn senders_by_tx_range(&self, range: impl RangeBounds) -> RethResult> { + fn senders_by_tx_range(&self, range: RangeInclusive) -> RethResult> { let lock = self.blocks.lock(); let transactions = lock .values() diff --git a/crates/storage/provider/src/test_utils/noop.rs b/crates/storage/provider/src/test_utils/noop.rs index 666329368..14fed7a81 100644 --- a/crates/storage/provider/src/test_utils/noop.rs +++ b/crates/storage/provider/src/test_utils/noop.rs @@ -17,7 +17,7 @@ use reth_primitives::{ }; use revm::primitives::{BlockEnv, CfgEnv}; use std::{ - ops::{RangeBounds, RangeInclusive}, + ops::{Range, RangeInclusive}, sync::Arc, }; @@ -174,18 +174,18 @@ impl TransactionsProvider for NoopProvider { fn transactions_by_block_range( &self, - _range: impl RangeBounds, + _range: Range, ) -> RethResult>> { Ok(Vec::default()) } - fn senders_by_tx_range(&self, _range: impl RangeBounds) -> RethResult> { + fn senders_by_tx_range(&self, _range: RangeInclusive) -> RethResult> { Ok(Vec::default()) } fn transactions_by_tx_range( &self, - _range: impl RangeBounds, + _range: RangeInclusive, ) -> RethResult> { Ok(Vec::default()) } @@ -228,13 +228,13 @@ impl HeaderProvider for NoopProvider { Ok(None) } - fn headers_range(&self, _range: impl RangeBounds) -> RethResult> { + fn headers_range(&self, _range: RangeInclusive) -> RethResult> { Ok(vec![]) } fn sealed_headers_range( &self, - _range: impl RangeBounds, + _range: RangeInclusive, ) -> RethResult> { Ok(vec![]) } diff --git a/crates/storage/provider/src/traits/header.rs b/crates/storage/provider/src/traits/header.rs index a553b79bb..c1656cc7f 100644 --- a/crates/storage/provider/src/traits/header.rs +++ b/crates/storage/provider/src/traits/header.rs @@ -1,7 +1,7 @@ use auto_impl::auto_impl; use reth_interfaces::RethResult; use reth_primitives::{BlockHash, BlockHashOrNumber, BlockNumber, Header, SealedHeader, U256}; -use std::ops::RangeBounds; +use std::ops::RangeInclusive; /// Client trait for fetching `Header` related data. #[auto_impl(&, Arc)] @@ -35,12 +35,12 @@ pub trait HeaderProvider: Send + Sync { fn header_td_by_number(&self, number: BlockNumber) -> RethResult>; /// Get headers in range of block numbers - fn headers_range(&self, range: impl RangeBounds) -> RethResult>; + fn headers_range(&self, range: RangeInclusive) -> RethResult>; /// Get headers in range of block numbers fn sealed_headers_range( &self, - range: impl RangeBounds, + range: RangeInclusive, ) -> RethResult>; /// Get a single sealed header by block number diff --git a/crates/storage/provider/src/traits/transactions.rs b/crates/storage/provider/src/traits/transactions.rs index 711b46c4f..fcd606652 100644 --- a/crates/storage/provider/src/traits/transactions.rs +++ b/crates/storage/provider/src/traits/transactions.rs @@ -4,7 +4,7 @@ use reth_primitives::{ Address, BlockHashOrNumber, BlockNumber, TransactionMeta, TransactionSigned, TransactionSignedNoHash, TxHash, TxNumber, }; -use std::ops::RangeBounds; +use std::ops::{Range, RangeInclusive}; /// Client trait for fetching [TransactionSigned] related data. #[auto_impl::auto_impl(&, Arc)] @@ -46,17 +46,17 @@ pub trait TransactionsProvider: BlockNumReader + Send + Sync { /// Get transactions by block range. fn transactions_by_block_range( &self, - range: impl RangeBounds, + range: Range, ) -> RethResult>>; /// Get transactions by tx range. fn transactions_by_tx_range( &self, - range: impl RangeBounds, + range: RangeInclusive, ) -> RethResult>; /// Get Senders from a tx range. - fn senders_by_tx_range(&self, range: impl RangeBounds) -> RethResult>; + fn senders_by_tx_range(&self, range: RangeInclusive) -> RethResult>; /// Get transaction sender. /// diff --git a/examples/db-access.rs b/examples/db-access.rs index faed7fc1d..3a039731d 100644 --- a/examples/db-access.rs +++ b/examples/db-access.rs @@ -69,7 +69,7 @@ fn header_provider_example(provider: T, number: u64) -> eyre: assert_ne!(td, U256::ZERO); // Can query headers by range as well, already sealed! - let headers = provider.sealed_headers_range(100..200)?; + let headers = provider.sealed_headers_range(100..=200)?; assert_eq!(headers.len(), 100); Ok(()) @@ -101,7 +101,7 @@ fn txs_provider_example(provider: T) -> eyre::Result<() let _block = provider.transaction_block(txid)?; // Can query the txs in the range [100, 200) - let _txs_by_tx_range = provider.transactions_by_tx_range(100..200)?; + let _txs_by_tx_range = provider.transactions_by_tx_range(100..=200)?; // Can query the txs in the _block_ range [100, 200)] let _txs_by_block_range = provider.transactions_by_block_range(100..200)?;