diff --git a/Cargo.lock b/Cargo.lock
index a885081cd36b..9d40ebfb2c7f 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -6550,6 +6550,7 @@ dependencies = [
name = "reth-blockchain-tree-api"
version = "1.1.0"
dependencies = [
+ "alloy-eips",
"alloy-primitives",
"reth-consensus",
"reth-execution-errors",
@@ -7557,6 +7558,7 @@ dependencies = [
name = "reth-exex-test-utils"
version = "1.1.0"
dependencies = [
+ "alloy-eips",
"eyre",
"futures-util",
"rand 0.8.5",
diff --git a/crates/blockchain-tree-api/Cargo.toml b/crates/blockchain-tree-api/Cargo.toml
index 552b72767177..b1c01f85938f 100644
--- a/crates/blockchain-tree-api/Cargo.toml
+++ b/crates/blockchain-tree-api/Cargo.toml
@@ -18,6 +18,7 @@ reth-storage-errors.workspace = true
# alloy
alloy-primitives.workspace = true
+alloy-eips.workspace = true
# misc
thiserror.workspace = true
diff --git a/crates/blockchain-tree-api/src/lib.rs b/crates/blockchain-tree-api/src/lib.rs
index 0a1bf6164e0e..7e1d0d714c14 100644
--- a/crates/blockchain-tree-api/src/lib.rs
+++ b/crates/blockchain-tree-api/src/lib.rs
@@ -9,8 +9,9 @@
use self::error::CanonicalError;
use crate::error::InsertBlockError;
+use alloy_eips::BlockNumHash;
use alloy_primitives::{BlockHash, BlockNumber};
-use reth_primitives::{BlockNumHash, Receipt, SealedBlock, SealedBlockWithSenders, SealedHeader};
+use reth_primitives::{Receipt, SealedBlock, SealedBlockWithSenders, SealedHeader};
use reth_storage_errors::provider::{ProviderError, ProviderResult};
use std::collections::BTreeMap;
diff --git a/crates/consensus/beacon/src/engine/mod.rs b/crates/consensus/beacon/src/engine/mod.rs
index a00f507dbd99..65904196e1c1 100644
--- a/crates/consensus/beacon/src/engine/mod.rs
+++ b/crates/consensus/beacon/src/engine/mod.rs
@@ -1,4 +1,4 @@
-use alloy_eips::merge::EPOCH_SLOTS;
+use alloy_eips::{merge::EPOCH_SLOTS, BlockNumHash};
use alloy_primitives::{BlockNumber, B256};
use alloy_rpc_types_engine::{
ExecutionPayload, ExecutionPayloadSidecar, ForkchoiceState, PayloadStatus, PayloadStatusEnum,
@@ -20,7 +20,7 @@ use reth_node_types::NodeTypesWithEngine;
use reth_payload_builder::PayloadBuilderHandle;
use reth_payload_primitives::{PayloadAttributes, PayloadBuilder, PayloadBuilderAttributes};
use reth_payload_validator::ExecutionPayloadValidator;
-use reth_primitives::{BlockNumHash, Head, Header, SealedBlock, SealedHeader};
+use reth_primitives::{Head, Header, SealedBlock, SealedHeader};
use reth_provider::{
providers::ProviderNodeTypes, BlockIdReader, BlockReader, BlockSource, CanonChainTracker,
ChainSpecProvider, ProviderError, StageCheckpointReader,
diff --git a/crates/exex/exex/src/event.rs b/crates/exex/exex/src/event.rs
index 1215ea2a502a..bbd79addc9e2 100644
--- a/crates/exex/exex/src/event.rs
+++ b/crates/exex/exex/src/event.rs
@@ -1,4 +1,4 @@
-use reth_primitives::BlockNumHash;
+use alloy_eips::BlockNumHash;
/// Events emitted by an `ExEx`.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
diff --git a/crates/exex/exex/src/manager.rs b/crates/exex/exex/src/manager.rs
index 8c1518f3090f..a17de660862b 100644
--- a/crates/exex/exex/src/manager.rs
+++ b/crates/exex/exex/src/manager.rs
@@ -1,13 +1,14 @@
use crate::{
wal::Wal, ExExEvent, ExExNotification, ExExNotifications, FinishedExExHeight, WalHandle,
};
+use alloy_eips::BlockNumHash;
use futures::StreamExt;
use itertools::Itertools;
use metrics::Gauge;
use reth_chain_state::ForkChoiceStream;
use reth_chainspec::Head;
use reth_metrics::{metrics::Counter, Metrics};
-use reth_primitives::{BlockNumHash, SealedHeader};
+use reth_primitives::SealedHeader;
use reth_provider::HeaderProvider;
use reth_tracing::tracing::debug;
use std::{
diff --git a/crates/exex/test-utils/Cargo.toml b/crates/exex/test-utils/Cargo.toml
index cd0e0831b496..6e5af981b317 100644
--- a/crates/exex/test-utils/Cargo.toml
+++ b/crates/exex/test-utils/Cargo.toml
@@ -33,6 +33,9 @@ reth-tasks.workspace = true
reth-transaction-pool = { workspace = true, features = ["test-utils"] }
reth-trie-db.workspace = true
+## alloy
+alloy-eips.workspace = true
+
## async
futures-util.workspace = true
tokio.workspace = true
diff --git a/crates/exex/test-utils/src/lib.rs b/crates/exex/test-utils/src/lib.rs
index 06aa8c81c7cd..5c3468a3c1c7 100644
--- a/crates/exex/test-utils/src/lib.rs
+++ b/crates/exex/test-utils/src/lib.rs
@@ -15,6 +15,7 @@ use std::{
task::Poll,
};
+use alloy_eips::BlockNumHash;
use futures_util::FutureExt;
use reth_blockchain_tree::noop::NoopBlockchainTree;
use reth_chainspec::{ChainSpec, MAINNET};
@@ -44,7 +45,7 @@ use reth_node_ethereum::{
EthEngineTypes, EthEvmConfig,
};
use reth_payload_builder::noop::NoopPayloadBuilderService;
-use reth_primitives::{BlockNumHash, Head, SealedBlockWithSenders};
+use reth_primitives::{Head, SealedBlockWithSenders};
use reth_provider::{
providers::{BlockchainProvider, StaticFileProvider},
BlockReader, ProviderFactory,
diff --git a/crates/primitives/src/block.rs b/crates/primitives/src/block.rs
index 2b651652df5b..b9f43df5d7c0 100644
--- a/crates/primitives/src/block.rs
+++ b/crates/primitives/src/block.rs
@@ -2,7 +2,7 @@ use crate::{
GotExpected, Header, SealedHeader, TransactionSigned, TransactionSignedEcRecovered, Withdrawals,
};
use alloc::vec::Vec;
-pub use alloy_eips::eip1898::{BlockNumHash, BlockNumberOrTag, ForkBlock, RpcBlockHash};
+pub use alloy_eips::eip1898::{BlockNumberOrTag, ForkBlock, RpcBlockHash};
use alloy_eips::eip2718::Encodable2718;
use alloy_primitives::{Address, Bytes, Sealable, B256};
use alloy_rlp::{Decodable, Encodable, RlpDecodable, RlpEncodable};
diff --git a/crates/primitives/src/lib.rs b/crates/primitives/src/lib.rs
index 679b24abd848..4f56b1ac4e6f 100644
--- a/crates/primitives/src/lib.rs
+++ b/crates/primitives/src/lib.rs
@@ -34,8 +34,8 @@ pub mod transaction;
#[cfg(any(test, feature = "arbitrary"))]
pub use block::{generate_valid_header, valid_header_strategy};
pub use block::{
- Block, BlockBody, BlockNumHash, BlockNumberOrTag, BlockWithSenders, ForkBlock, RpcBlockHash,
- SealedBlock, SealedBlockWithSenders,
+ Block, BlockBody, BlockNumberOrTag, BlockWithSenders, ForkBlock, RpcBlockHash, SealedBlock,
+ SealedBlockWithSenders,
};
#[cfg(feature = "reth-codec")]
pub use compression::*;
diff --git a/crates/rpc/rpc-eth-types/src/logs_utils.rs b/crates/rpc/rpc-eth-types/src/logs_utils.rs
index 205e2bba37be..aa132675c931 100644
--- a/crates/rpc/rpc-eth-types/src/logs_utils.rs
+++ b/crates/rpc/rpc-eth-types/src/logs_utils.rs
@@ -2,11 +2,12 @@
//!
//! Log parsing for building filter.
+use alloy_eips::BlockNumHash;
use alloy_primitives::TxHash;
use alloy_rpc_types::{FilteredParams, Log};
use reth_chainspec::ChainInfo;
use reth_errors::ProviderError;
-use reth_primitives::{BlockNumHash, Receipt, SealedBlockWithSenders};
+use reth_primitives::{Receipt, SealedBlockWithSenders};
use reth_storage_api::BlockReader;
use std::sync::Arc;
diff --git a/crates/storage/provider/src/test_utils/mock.rs b/crates/storage/provider/src/test_utils/mock.rs
index 2e7cd6a06de6..b5593b9040d3 100644
--- a/crates/storage/provider/src/test_utils/mock.rs
+++ b/crates/storage/provider/src/test_utils/mock.rs
@@ -463,15 +463,15 @@ impl BlockNumReader for MockEthProvider {
}
impl BlockIdReader for MockEthProvider {
- fn pending_block_num_hash(&self) -> ProviderResult