mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
chore: add OmmersProvider trait (#13331)
This commit is contained in:
@ -35,7 +35,8 @@ use reth_primitives_traits::BlockBody as _;
|
|||||||
use reth_prune_types::{PruneCheckpoint, PruneSegment};
|
use reth_prune_types::{PruneCheckpoint, PruneSegment};
|
||||||
use reth_stages_types::{StageCheckpoint, StageId};
|
use reth_stages_types::{StageCheckpoint, StageId};
|
||||||
use reth_storage_api::{
|
use reth_storage_api::{
|
||||||
DBProvider, NodePrimitivesProvider, StateCommitmentProvider, StorageChangeSetReader,
|
DBProvider, NodePrimitivesProvider, OmmersProvider, StateCommitmentProvider,
|
||||||
|
StorageChangeSetReader,
|
||||||
};
|
};
|
||||||
use reth_storage_errors::provider::ProviderResult;
|
use reth_storage_errors::provider::ProviderResult;
|
||||||
use reth_trie::HashedPostState;
|
use reth_trie::HashedPostState;
|
||||||
@ -314,10 +315,6 @@ impl<N: ProviderNodeTypes> BlockReader for BlockchainProvider2<N> {
|
|||||||
Ok(self.canonical_in_memory_state.pending_block_and_receipts())
|
Ok(self.canonical_in_memory_state.pending_block_and_receipts())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Self::Header>>> {
|
|
||||||
self.consistent_provider()?.ommers(id)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn block_body_indices(
|
fn block_body_indices(
|
||||||
&self,
|
&self,
|
||||||
number: BlockNumber,
|
number: BlockNumber,
|
||||||
@ -478,6 +475,12 @@ impl<N: ProviderNodeTypes> WithdrawalsProvider for BlockchainProvider2<N> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<N: ProviderNodeTypes> OmmersProvider for BlockchainProvider2<N> {
|
||||||
|
fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Self::Header>>> {
|
||||||
|
self.consistent_provider()?.ommers(id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<N: ProviderNodeTypes> StageCheckpointReader for BlockchainProvider2<N> {
|
impl<N: ProviderNodeTypes> StageCheckpointReader for BlockchainProvider2<N> {
|
||||||
fn get_stage_checkpoint(&self, id: StageId) -> ProviderResult<Option<StageCheckpoint>> {
|
fn get_stage_checkpoint(&self, id: StageId) -> ProviderResult<Option<StageCheckpoint>> {
|
||||||
self.consistent_provider()?.get_stage_checkpoint(id)
|
self.consistent_provider()?.get_stage_checkpoint(id)
|
||||||
@ -815,7 +818,7 @@ mod tests {
|
|||||||
use reth_primitives_traits::{BlockBody as _, SignedTransaction};
|
use reth_primitives_traits::{BlockBody as _, SignedTransaction};
|
||||||
use reth_storage_api::{
|
use reth_storage_api::{
|
||||||
BlockHashReader, BlockIdReader, BlockNumReader, BlockReader, BlockReaderIdExt, BlockSource,
|
BlockHashReader, BlockIdReader, BlockNumReader, BlockReader, BlockReaderIdExt, BlockSource,
|
||||||
ChangeSetReader, DatabaseProviderFactory, HeaderProvider, ReceiptProvider,
|
ChangeSetReader, DatabaseProviderFactory, HeaderProvider, OmmersProvider, ReceiptProvider,
|
||||||
ReceiptProviderIdExt, StateProviderFactory, TransactionVariant, TransactionsProvider,
|
ReceiptProviderIdExt, StateProviderFactory, TransactionVariant, TransactionsProvider,
|
||||||
WithdrawalsProvider,
|
WithdrawalsProvider,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -28,7 +28,8 @@ use reth_primitives_traits::BlockBody;
|
|||||||
use reth_prune_types::{PruneCheckpoint, PruneSegment};
|
use reth_prune_types::{PruneCheckpoint, PruneSegment};
|
||||||
use reth_stages_types::{StageCheckpoint, StageId};
|
use reth_stages_types::{StageCheckpoint, StageId};
|
||||||
use reth_storage_api::{
|
use reth_storage_api::{
|
||||||
DatabaseProviderFactory, NodePrimitivesProvider, StateProvider, StorageChangeSetReader,
|
DatabaseProviderFactory, NodePrimitivesProvider, OmmersProvider, StateProvider,
|
||||||
|
StorageChangeSetReader,
|
||||||
};
|
};
|
||||||
use reth_storage_errors::provider::ProviderResult;
|
use reth_storage_errors::provider::ProviderResult;
|
||||||
use revm::{
|
use revm::{
|
||||||
@ -840,20 +841,6 @@ impl<N: ProviderNodeTypes> BlockReader for ConsistentProvider<N> {
|
|||||||
Ok(self.canonical_in_memory_state.pending_block_and_receipts())
|
Ok(self.canonical_in_memory_state.pending_block_and_receipts())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult<Option<Vec<HeaderTy<N>>>> {
|
|
||||||
self.get_in_memory_or_storage_by_block(
|
|
||||||
id,
|
|
||||||
|db_provider| db_provider.ommers(id),
|
|
||||||
|block_state| {
|
|
||||||
if self.chain_spec().final_paris_total_difficulty(block_state.number()).is_some() {
|
|
||||||
return Ok(Some(Vec::new()))
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(block_state.block_ref().block().body.ommers().map(|o| o.to_vec()))
|
|
||||||
},
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn block_body_indices(
|
fn block_body_indices(
|
||||||
&self,
|
&self,
|
||||||
number: BlockNumber,
|
number: BlockNumber,
|
||||||
@ -1216,6 +1203,22 @@ impl<N: ProviderNodeTypes> WithdrawalsProvider for ConsistentProvider<N> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<N: ProviderNodeTypes> OmmersProvider for ConsistentProvider<N> {
|
||||||
|
fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult<Option<Vec<HeaderTy<N>>>> {
|
||||||
|
self.get_in_memory_or_storage_by_block(
|
||||||
|
id,
|
||||||
|
|db_provider| db_provider.ommers(id),
|
||||||
|
|block_state| {
|
||||||
|
if self.chain_spec().final_paris_total_difficulty(block_state.number()).is_some() {
|
||||||
|
return Ok(Some(Vec::new()))
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(block_state.block_ref().block().body.ommers().map(|o| o.to_vec()))
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<N: ProviderNodeTypes> StageCheckpointReader for ConsistentProvider<N> {
|
impl<N: ProviderNodeTypes> StageCheckpointReader for ConsistentProvider<N> {
|
||||||
fn get_stage_checkpoint(&self, id: StageId) -> ProviderResult<Option<StageCheckpoint>> {
|
fn get_stage_checkpoint(&self, id: StageId) -> ProviderResult<Option<StageCheckpoint>> {
|
||||||
self.storage_provider.get_stage_checkpoint(id)
|
self.storage_provider.get_stage_checkpoint(id)
|
||||||
|
|||||||
@ -26,7 +26,7 @@ use reth_primitives::{
|
|||||||
use reth_prune_types::{PruneCheckpoint, PruneModes, PruneSegment};
|
use reth_prune_types::{PruneCheckpoint, PruneModes, PruneSegment};
|
||||||
use reth_stages_types::{StageCheckpoint, StageId};
|
use reth_stages_types::{StageCheckpoint, StageId};
|
||||||
use reth_storage_api::{
|
use reth_storage_api::{
|
||||||
NodePrimitivesProvider, StateCommitmentProvider, TryIntoHistoricalStateProvider,
|
NodePrimitivesProvider, OmmersProvider, StateCommitmentProvider, TryIntoHistoricalStateProvider,
|
||||||
};
|
};
|
||||||
use reth_storage_errors::provider::ProviderResult;
|
use reth_storage_errors::provider::ProviderResult;
|
||||||
use reth_trie::HashedPostState;
|
use reth_trie::HashedPostState;
|
||||||
@ -404,10 +404,6 @@ impl<N: ProviderNodeTypes> BlockReader for ProviderFactory<N> {
|
|||||||
self.provider()?.pending_block_and_receipts()
|
self.provider()?.pending_block_and_receipts()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Self::Header>>> {
|
|
||||||
self.provider()?.ommers(id)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn block_body_indices(
|
fn block_body_indices(
|
||||||
&self,
|
&self,
|
||||||
number: BlockNumber,
|
number: BlockNumber,
|
||||||
@ -576,6 +572,12 @@ impl<N: ProviderNodeTypes> WithdrawalsProvider for ProviderFactory<N> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<N: ProviderNodeTypes> OmmersProvider for ProviderFactory<N> {
|
||||||
|
fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Self::Header>>> {
|
||||||
|
self.provider()?.ommers(id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<N: ProviderNodeTypes> StageCheckpointReader for ProviderFactory<N> {
|
impl<N: ProviderNodeTypes> StageCheckpointReader for ProviderFactory<N> {
|
||||||
fn get_stage_checkpoint(&self, id: StageId) -> ProviderResult<Option<StageCheckpoint>> {
|
fn get_stage_checkpoint(&self, id: StageId) -> ProviderResult<Option<StageCheckpoint>> {
|
||||||
self.provider()?.get_stage_checkpoint(id)
|
self.provider()?.get_stage_checkpoint(id)
|
||||||
|
|||||||
@ -60,7 +60,7 @@ use reth_primitives_traits::{Block as _, BlockBody as _, SignedTransaction};
|
|||||||
use reth_prune_types::{PruneCheckpoint, PruneModes, PruneSegment};
|
use reth_prune_types::{PruneCheckpoint, PruneModes, PruneSegment};
|
||||||
use reth_stages_types::{StageCheckpoint, StageId};
|
use reth_stages_types::{StageCheckpoint, StageId};
|
||||||
use reth_storage_api::{
|
use reth_storage_api::{
|
||||||
BlockBodyReader, NodePrimitivesProvider, StateProvider, StorageChangeSetReader,
|
BlockBodyReader, NodePrimitivesProvider, OmmersProvider, StateProvider, StorageChangeSetReader,
|
||||||
TryIntoHistoricalStateProvider,
|
TryIntoHistoricalStateProvider,
|
||||||
};
|
};
|
||||||
use reth_storage_errors::provider::{ProviderResult, RootMismatch};
|
use reth_storage_errors::provider::{ProviderResult, RootMismatch};
|
||||||
@ -1222,26 +1222,6 @@ impl<TX: DbTx + 'static, N: NodeTypesForProvider> BlockReader for DatabaseProvid
|
|||||||
Ok(None)
|
Ok(None)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the ommers for the block with matching id from the database.
|
|
||||||
///
|
|
||||||
/// If the block is not found, this returns `None`.
|
|
||||||
/// If the block exists, but doesn't contain ommers, this returns `None`.
|
|
||||||
fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Self::Header>>> {
|
|
||||||
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.
|
|
||||||
if self.chain_spec.final_paris_total_difficulty(number).is_some() {
|
|
||||||
return Ok(Some(Vec::new()))
|
|
||||||
}
|
|
||||||
|
|
||||||
let ommers =
|
|
||||||
self.tx.get::<tables::BlockOmmers<Self::Header>>(number)?.map(|o| o.ommers);
|
|
||||||
return Ok(ommers)
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(None)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn block_body_indices(&self, num: u64) -> ProviderResult<Option<StoredBlockBodyIndices>> {
|
fn block_body_indices(&self, num: u64) -> ProviderResult<Option<StoredBlockBodyIndices>> {
|
||||||
Ok(self.tx.get::<tables::BlockBodyIndices>(num)?)
|
Ok(self.tx.get::<tables::BlockBodyIndices>(num)?)
|
||||||
}
|
}
|
||||||
@ -1635,6 +1615,28 @@ impl<TX: DbTx + 'static, N: NodeTypes<ChainSpec: EthereumHardforks>> Withdrawals
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<TX: DbTx + 'static, N: NodeTypesForProvider> OmmersProvider for DatabaseProvider<TX, N> {
|
||||||
|
/// Returns the ommers for the block with matching id from the database.
|
||||||
|
///
|
||||||
|
/// If the block is not found, this returns `None`.
|
||||||
|
/// If the block exists, but doesn't contain ommers, this returns `None`.
|
||||||
|
fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Self::Header>>> {
|
||||||
|
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.
|
||||||
|
if self.chain_spec.final_paris_total_difficulty(number).is_some() {
|
||||||
|
return Ok(Some(Vec::new()))
|
||||||
|
}
|
||||||
|
|
||||||
|
let ommers =
|
||||||
|
self.tx.get::<tables::BlockOmmers<Self::Header>>(number)?.map(|o| o.ommers);
|
||||||
|
return Ok(ommers)
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(None)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<TX: DbTx + 'static, N: NodeTypesForProvider> EvmEnvProvider<HeaderTy<N>>
|
impl<TX: DbTx + 'static, N: NodeTypesForProvider> EvmEnvProvider<HeaderTy<N>>
|
||||||
for DatabaseProvider<TX, N>
|
for DatabaseProvider<TX, N>
|
||||||
{
|
{
|
||||||
|
|||||||
@ -37,7 +37,7 @@ use reth_primitives::{
|
|||||||
};
|
};
|
||||||
use reth_prune_types::{PruneCheckpoint, PruneSegment};
|
use reth_prune_types::{PruneCheckpoint, PruneSegment};
|
||||||
use reth_stages_types::{StageCheckpoint, StageId};
|
use reth_stages_types::{StageCheckpoint, StageId};
|
||||||
use reth_storage_api::CanonChainTracker;
|
use reth_storage_api::{CanonChainTracker, OmmersProvider};
|
||||||
use reth_storage_errors::provider::ProviderResult;
|
use reth_storage_errors::provider::ProviderResult;
|
||||||
use revm::primitives::{BlockEnv, CfgEnvWithHandlerCfg};
|
use revm::primitives::{BlockEnv, CfgEnvWithHandlerCfg};
|
||||||
use std::{
|
use std::{
|
||||||
@ -402,10 +402,6 @@ impl<N: TreeNodeTypes> BlockReader for BlockchainProvider<N> {
|
|||||||
Ok(self.tree.pending_block_and_receipts())
|
Ok(self.tree.pending_block_and_receipts())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Header>>> {
|
|
||||||
self.database.ommers(id)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn block_body_indices(
|
fn block_body_indices(
|
||||||
&self,
|
&self,
|
||||||
number: BlockNumber,
|
number: BlockNumber,
|
||||||
@ -584,6 +580,12 @@ impl<N: ProviderNodeTypes> WithdrawalsProvider for BlockchainProvider<N> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<N: TreeNodeTypes> OmmersProvider for BlockchainProvider<N> {
|
||||||
|
fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Header>>> {
|
||||||
|
self.database.ommers(id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<N: ProviderNodeTypes> StageCheckpointReader for BlockchainProvider<N> {
|
impl<N: ProviderNodeTypes> StageCheckpointReader for BlockchainProvider<N> {
|
||||||
fn get_stage_checkpoint(&self, id: StageId) -> ProviderResult<Option<StageCheckpoint>> {
|
fn get_stage_checkpoint(&self, id: StageId) -> ProviderResult<Option<StageCheckpoint>> {
|
||||||
self.database.provider()?.get_stage_checkpoint(id)
|
self.database.provider()?.get_stage_checkpoint(id)
|
||||||
|
|||||||
@ -43,7 +43,7 @@ use reth_primitives::{
|
|||||||
};
|
};
|
||||||
use reth_primitives_traits::SignedTransaction;
|
use reth_primitives_traits::SignedTransaction;
|
||||||
use reth_stages_types::{PipelineTarget, StageId};
|
use reth_stages_types::{PipelineTarget, StageId};
|
||||||
use reth_storage_api::DBProvider;
|
use reth_storage_api::{DBProvider, OmmersProvider};
|
||||||
use reth_storage_errors::provider::{ProviderError, ProviderResult};
|
use reth_storage_errors::provider::{ProviderError, ProviderResult};
|
||||||
use std::{
|
use std::{
|
||||||
collections::{hash_map::Entry, BTreeMap, HashMap},
|
collections::{hash_map::Entry, BTreeMap, HashMap},
|
||||||
@ -1628,11 +1628,6 @@ impl<N: FullNodePrimitives<SignedTx: Value, Receipt: Value, BlockHeader: Value>>
|
|||||||
Err(ProviderError::UnsupportedProvider)
|
Err(ProviderError::UnsupportedProvider)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ommers(&self, _id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Self::Header>>> {
|
|
||||||
// Required data not present in static_files
|
|
||||||
Err(ProviderError::UnsupportedProvider)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn block_body_indices(&self, _num: u64) -> ProviderResult<Option<StoredBlockBodyIndices>> {
|
fn block_body_indices(&self, _num: u64) -> ProviderResult<Option<StoredBlockBodyIndices>> {
|
||||||
// Required data not present in static_files
|
// Required data not present in static_files
|
||||||
Err(ProviderError::UnsupportedProvider)
|
Err(ProviderError::UnsupportedProvider)
|
||||||
@ -1692,6 +1687,13 @@ impl<N: NodePrimitives> WithdrawalsProvider for StaticFileProvider<N> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<N: FullNodePrimitives<BlockHeader: Value>> OmmersProvider for StaticFileProvider<N> {
|
||||||
|
fn ommers(&self, _id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Self::Header>>> {
|
||||||
|
// Required data not present in static_files
|
||||||
|
Err(ProviderError::UnsupportedProvider)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<N: NodePrimitives> StatsReader for StaticFileProvider<N> {
|
impl<N: NodePrimitives> StatsReader for StaticFileProvider<N> {
|
||||||
fn count_entries<T: Table>(&self) -> ProviderResult<usize> {
|
fn count_entries<T: Table>(&self) -> ProviderResult<usize> {
|
||||||
match T::NAME {
|
match T::NAME {
|
||||||
|
|||||||
@ -29,7 +29,7 @@ use reth_primitives::{
|
|||||||
use reth_primitives_traits::SignedTransaction;
|
use reth_primitives_traits::SignedTransaction;
|
||||||
use reth_stages_types::{StageCheckpoint, StageId};
|
use reth_stages_types::{StageCheckpoint, StageId};
|
||||||
use reth_storage_api::{
|
use reth_storage_api::{
|
||||||
DatabaseProviderFactory, HashedPostStateProvider, StageCheckpointReader,
|
DatabaseProviderFactory, HashedPostStateProvider, OmmersProvider, StageCheckpointReader,
|
||||||
StateCommitmentProvider, StateProofProvider, StorageRootProvider,
|
StateCommitmentProvider, StateProofProvider, StorageRootProvider,
|
||||||
};
|
};
|
||||||
use reth_storage_errors::provider::{ConsistentViewError, ProviderError, ProviderResult};
|
use reth_storage_errors::provider::{ConsistentViewError, ProviderError, ProviderResult};
|
||||||
@ -510,10 +510,6 @@ impl BlockReader for MockEthProvider {
|
|||||||
Ok(None)
|
Ok(None)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ommers(&self, _id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Header>>> {
|
|
||||||
Ok(None)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn block_body_indices(&self, _num: u64) -> ProviderResult<Option<StoredBlockBodyIndices>> {
|
fn block_body_indices(&self, _num: u64) -> ProviderResult<Option<StoredBlockBodyIndices>> {
|
||||||
Ok(None)
|
Ok(None)
|
||||||
}
|
}
|
||||||
@ -794,6 +790,12 @@ impl WithdrawalsProvider for MockEthProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl OmmersProvider for MockEthProvider {
|
||||||
|
fn ommers(&self, _id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Header>>> {
|
||||||
|
Ok(None)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl ChangeSetReader for MockEthProvider {
|
impl ChangeSetReader for MockEthProvider {
|
||||||
fn account_block_changeset(
|
fn account_block_changeset(
|
||||||
&self,
|
&self,
|
||||||
|
|||||||
@ -28,7 +28,8 @@ use reth_primitives::{
|
|||||||
use reth_prune_types::{PruneCheckpoint, PruneSegment};
|
use reth_prune_types::{PruneCheckpoint, PruneSegment};
|
||||||
use reth_stages_types::{StageCheckpoint, StageId};
|
use reth_stages_types::{StageCheckpoint, StageId};
|
||||||
use reth_storage_api::{
|
use reth_storage_api::{
|
||||||
HashedPostStateProvider, NodePrimitivesProvider, StateProofProvider, StorageRootProvider,
|
HashedPostStateProvider, NodePrimitivesProvider, OmmersProvider, StateProofProvider,
|
||||||
|
StorageRootProvider,
|
||||||
};
|
};
|
||||||
use reth_storage_errors::provider::ProviderResult;
|
use reth_storage_errors::provider::ProviderResult;
|
||||||
use reth_trie::{
|
use reth_trie::{
|
||||||
@ -121,10 +122,6 @@ impl BlockReader for NoopProvider {
|
|||||||
Ok(None)
|
Ok(None)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ommers(&self, _id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Header>>> {
|
|
||||||
Ok(None)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn block_body_indices(&self, _num: u64) -> ProviderResult<Option<StoredBlockBodyIndices>> {
|
fn block_body_indices(&self, _num: u64) -> ProviderResult<Option<StoredBlockBodyIndices>> {
|
||||||
Ok(None)
|
Ok(None)
|
||||||
}
|
}
|
||||||
@ -528,6 +525,12 @@ impl WithdrawalsProvider for NoopProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl OmmersProvider for NoopProvider {
|
||||||
|
fn ommers(&self, _id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Header>>> {
|
||||||
|
Ok(None)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl PruneCheckpointReader for NoopProvider {
|
impl PruneCheckpointReader for NoopProvider {
|
||||||
fn get_prune_checkpoint(
|
fn get_prune_checkpoint(
|
||||||
&self,
|
&self,
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
BlockNumReader, HeaderProvider, ReceiptProvider, ReceiptProviderIdExt, TransactionVariant,
|
BlockNumReader, HeaderProvider, OmmersProvider, ReceiptProvider, ReceiptProviderIdExt,
|
||||||
TransactionsProvider, WithdrawalsProvider,
|
TransactionVariant, TransactionsProvider, WithdrawalsProvider,
|
||||||
};
|
};
|
||||||
use alloy_eips::{BlockHashOrNumber, BlockId, BlockNumberOrTag};
|
use alloy_eips::{BlockHashOrNumber, BlockId, BlockNumberOrTag};
|
||||||
use alloy_primitives::{BlockNumber, B256};
|
use alloy_primitives::{BlockNumber, B256};
|
||||||
@ -53,6 +53,7 @@ pub trait BlockReader:
|
|||||||
+ TransactionsProvider
|
+ TransactionsProvider
|
||||||
+ ReceiptProvider
|
+ ReceiptProvider
|
||||||
+ WithdrawalsProvider
|
+ WithdrawalsProvider
|
||||||
|
+ OmmersProvider
|
||||||
+ Send
|
+ Send
|
||||||
+ Sync
|
+ Sync
|
||||||
{
|
{
|
||||||
@ -98,11 +99,6 @@ pub trait BlockReader:
|
|||||||
&self,
|
&self,
|
||||||
) -> ProviderResult<Option<(SealedBlockFor<Self::Block>, Vec<Self::Receipt>)>>;
|
) -> ProviderResult<Option<(SealedBlockFor<Self::Block>, Vec<Self::Receipt>)>>;
|
||||||
|
|
||||||
/// Returns the ommers/uncle headers of the given block from the database.
|
|
||||||
///
|
|
||||||
/// Returns `None` if block is not found.
|
|
||||||
fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Self::Header>>>;
|
|
||||||
|
|
||||||
/// Returns the block with matching hash from the database.
|
/// Returns the block with matching hash from the database.
|
||||||
///
|
///
|
||||||
/// Returns `None` if block is not found.
|
/// Returns `None` if block is not found.
|
||||||
@ -190,9 +186,6 @@ impl<T: BlockReader> BlockReader for std::sync::Arc<T> {
|
|||||||
) -> ProviderResult<Option<(SealedBlockFor<Self::Block>, Vec<Self::Receipt>)>> {
|
) -> ProviderResult<Option<(SealedBlockFor<Self::Block>, Vec<Self::Receipt>)>> {
|
||||||
T::pending_block_and_receipts(self)
|
T::pending_block_and_receipts(self)
|
||||||
}
|
}
|
||||||
fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Self::Header>>> {
|
|
||||||
T::ommers(self, id)
|
|
||||||
}
|
|
||||||
fn block_by_hash(&self, hash: B256) -> ProviderResult<Option<Self::Block>> {
|
fn block_by_hash(&self, hash: B256) -> ProviderResult<Option<Self::Block>> {
|
||||||
T::block_by_hash(self, hash)
|
T::block_by_hash(self, hash)
|
||||||
}
|
}
|
||||||
@ -259,9 +252,6 @@ impl<T: BlockReader> BlockReader for &T {
|
|||||||
) -> ProviderResult<Option<(SealedBlockFor<Self::Block>, Vec<Self::Receipt>)>> {
|
) -> ProviderResult<Option<(SealedBlockFor<Self::Block>, Vec<Self::Receipt>)>> {
|
||||||
T::pending_block_and_receipts(self)
|
T::pending_block_and_receipts(self)
|
||||||
}
|
}
|
||||||
fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Self::Header>>> {
|
|
||||||
T::ommers(self, id)
|
|
||||||
}
|
|
||||||
fn block_by_hash(&self, hash: B256) -> ProviderResult<Option<Self::Block>> {
|
fn block_by_hash(&self, hash: B256) -> ProviderResult<Option<Self::Block>> {
|
||||||
T::block_by_hash(self, hash)
|
T::block_by_hash(self, hash)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -55,6 +55,9 @@ pub use chain_info::*;
|
|||||||
mod withdrawals;
|
mod withdrawals;
|
||||||
pub use withdrawals::*;
|
pub use withdrawals::*;
|
||||||
|
|
||||||
|
mod ommers;
|
||||||
|
pub use ommers::*;
|
||||||
|
|
||||||
mod database_provider;
|
mod database_provider;
|
||||||
pub use database_provider::*;
|
pub use database_provider::*;
|
||||||
|
|
||||||
|
|||||||
@ -3,9 +3,10 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
AccountReader, BlockHashReader, BlockIdReader, BlockNumReader, BlockReader, BlockReaderIdExt,
|
AccountReader, BlockHashReader, BlockIdReader, BlockNumReader, BlockReader, BlockReaderIdExt,
|
||||||
BlockSource, ChangeSetReader, HashedPostStateProvider, HeaderProvider, NodePrimitivesProvider,
|
BlockSource, ChangeSetReader, HashedPostStateProvider, HeaderProvider, NodePrimitivesProvider,
|
||||||
PruneCheckpointReader, ReceiptProvider, ReceiptProviderIdExt, StageCheckpointReader,
|
OmmersProvider, PruneCheckpointReader, ReceiptProvider, ReceiptProviderIdExt,
|
||||||
StateProofProvider, StateProvider, StateProviderBox, StateProviderFactory, StateRootProvider,
|
StageCheckpointReader, StateProofProvider, StateProvider, StateProviderBox,
|
||||||
StorageRootProvider, TransactionVariant, TransactionsProvider, WithdrawalsProvider,
|
StateProviderFactory, StateRootProvider, StorageRootProvider, TransactionVariant,
|
||||||
|
TransactionsProvider, WithdrawalsProvider,
|
||||||
};
|
};
|
||||||
use alloy_eips::{
|
use alloy_eips::{
|
||||||
eip4895::{Withdrawal, Withdrawals},
|
eip4895::{Withdrawal, Withdrawals},
|
||||||
@ -184,10 +185,6 @@ impl<C: Send + Sync, N: NodePrimitives> BlockReader for NoopProvider<C, N> {
|
|||||||
Ok(None)
|
Ok(None)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn ommers(&self, _id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Self::Header>>> {
|
|
||||||
Ok(None)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn block_body_indices(&self, _num: u64) -> ProviderResult<Option<StoredBlockBodyIndices>> {
|
fn block_body_indices(&self, _num: u64) -> ProviderResult<Option<StoredBlockBodyIndices>> {
|
||||||
Ok(None)
|
Ok(None)
|
||||||
}
|
}
|
||||||
@ -608,6 +605,12 @@ impl<C: Send + Sync, N: NodePrimitives> WithdrawalsProvider for NoopProvider<C,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<C: Send + Sync, N: NodePrimitives> OmmersProvider for NoopProvider<C, N> {
|
||||||
|
fn ommers(&self, _id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Self::Header>>> {
|
||||||
|
Ok(None)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<C: Send + Sync, N: NodePrimitives> PruneCheckpointReader for NoopProvider<C, N> {
|
impl<C: Send + Sync, N: NodePrimitives> PruneCheckpointReader for NoopProvider<C, N> {
|
||||||
fn get_prune_checkpoint(
|
fn get_prune_checkpoint(
|
||||||
&self,
|
&self,
|
||||||
|
|||||||
23
crates/storage/storage-api/src/ommers.rs
Normal file
23
crates/storage/storage-api/src/ommers.rs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
use crate::HeaderProvider;
|
||||||
|
use alloy_eips::BlockHashOrNumber;
|
||||||
|
use reth_storage_errors::provider::ProviderResult;
|
||||||
|
|
||||||
|
/// Client trait for fetching ommers.
|
||||||
|
pub trait OmmersProvider: HeaderProvider + Send + Sync {
|
||||||
|
/// Returns the ommers/uncle headers of the given block from the database.
|
||||||
|
///
|
||||||
|
/// Returns `None` if block is not found.
|
||||||
|
fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Self::Header>>>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: OmmersProvider> OmmersProvider for std::sync::Arc<T> {
|
||||||
|
fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Self::Header>>> {
|
||||||
|
T::ommers(self, id)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: OmmersProvider> OmmersProvider for &T {
|
||||||
|
fn ommers(&self, id: BlockHashOrNumber) -> ProviderResult<Option<Vec<Self::Header>>> {
|
||||||
|
T::ommers(self, id)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user