diff --git a/crates/alloy-provider/src/lib.rs b/crates/alloy-provider/src/lib.rs
index 5b4df72ece..52334d2331 100644
--- a/crates/alloy-provider/src/lib.rs
+++ b/crates/alloy-provider/src/lib.rs
@@ -21,14 +21,18 @@
#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
use alloy_consensus::BlockHeader;
+use alloy_eips::BlockHashOrNumber;
use alloy_network::{primitives::HeaderResponse, BlockResponse};
-use alloy_primitives::{Address, BlockHash, BlockNumber, StorageKey, TxNumber, B256, U256};
+use alloy_primitives::{Address, BlockHash, BlockNumber, StorageKey, TxHash, TxNumber, B256, U256};
use alloy_provider::{network::Network, Provider};
use alloy_rpc_types::BlockId;
use alloy_rpc_types_engine::ForkchoiceState;
use reth_chainspec::{ChainInfo, ChainSpecProvider};
-use reth_db_api::mock::{DatabaseMock, TxMock};
-use reth_errors::ProviderError;
+use reth_db_api::{
+ mock::{DatabaseMock, TxMock},
+ models::StoredBlockBodyIndices,
+};
+use reth_errors::{ProviderError, ProviderResult};
use reth_node_types::{BlockTy, HeaderTy, NodeTypes, PrimitivesTy, ReceiptTy, TxTy};
use reth_primitives::{
Account, Bytecode, RecoveredBlock, SealedBlock, SealedHeader, TransactionMeta,
@@ -43,7 +47,10 @@ use reth_provider::{
};
use reth_prune_types::{PruneCheckpoint, PruneSegment};
use reth_stages_types::{StageCheckpoint, StageId};
-use reth_storage_api::{BlockBodyIndicesProvider, DBProvider, NodePrimitivesProvider, StatsReader};
+use reth_storage_api::{
+ BlockBodyIndicesProvider, BlockReaderIdExt, BlockSource, DBProvider, NodePrimitivesProvider,
+ ReceiptProviderIdExt, StatsReader,
+};
use reth_trie::{updates::TrieUpdates, AccountProof, HashedPostState, MultiProof, TrieInput};
use std::{
collections::BTreeMap,
@@ -135,6 +142,13 @@ impl
AlloyRethProvider
{
{
tokio::task::block_in_place(move || Handle::current().block_on(fut))
}
+
+ /// Get a reference to the conon state notification sender
+ pub const fn canon_state_notification(
+ &self,
+ ) -> &broadcast::Sender>> {
+ &self.canon_state_notification
+ }
}
impl AlloyRethProvider
@@ -261,6 +275,275 @@ where
}
}
+impl
HeaderProvider for AlloyRethProvider
+where
+ P: Provider + Clone + 'static,
+ N: Network,
+ Node: NodeTypes,
+{
+ type Header = HeaderTy;
+
+ fn header(&self, _block_hash: &BlockHash) -> ProviderResult