diff --git a/crates/optimism/rpc/src/eth/block.rs b/crates/optimism/rpc/src/eth/block.rs index faded8f39..72ddfa0df 100644 --- a/crates/optimism/rpc/src/eth/block.rs +++ b/crates/optimism/rpc/src/eth/block.rs @@ -2,7 +2,6 @@ use alloy_consensus::{transaction::TransactionMeta, BlockHeader}; use alloy_rpc_types_eth::BlockId; -use op_alloy_network::Network; use op_alloy_rpc_types::OpTransactionReceipt; use reth_chainspec::ChainSpecProvider; use reth_node_api::BlockBody; @@ -12,6 +11,7 @@ use reth_primitives_traits::SignedTransaction; use reth_provider::{BlockReader, HeaderProvider}; use reth_rpc_eth_api::{ helpers::{EthBlocks, LoadBlock, LoadPendingBlock, LoadReceipt, SpawnBlocking}, + types::RpcTypes, RpcReceipt, }; @@ -21,7 +21,7 @@ impl EthBlocks for OpEthApi where Self: LoadBlock< Error = OpEthApiError, - NetworkTypes: Network, + NetworkTypes: RpcTypes, Provider: BlockReader, >, N: OpNodeCore + HeaderProvider>, diff --git a/crates/optimism/rpc/src/eth/pending_block.rs b/crates/optimism/rpc/src/eth/pending_block.rs index 9c2ece00d..a81938c02 100644 --- a/crates/optimism/rpc/src/eth/pending_block.rs +++ b/crates/optimism/rpc/src/eth/pending_block.rs @@ -8,7 +8,6 @@ use alloy_consensus::{ use alloy_eips::{eip7685::EMPTY_REQUESTS_HASH, merge::BEACON_NONCE, BlockNumberOrTag}; use alloy_primitives::{B256, U256}; use op_alloy_consensus::{OpDepositReceipt, OpTxType}; -use op_alloy_network::Network; use reth_chainspec::{EthChainSpec, EthereumHardforks}; use reth_evm::ConfigureEvm; use reth_optimism_consensus::calculate_receipt_root_no_memo_optimism; @@ -21,6 +20,7 @@ use reth_provider::{ }; use reth_rpc_eth_api::{ helpers::{LoadPendingBlock, SpawnBlocking}, + types::RpcTypes, EthApiTypes, FromEthApiError, FromEvmError, RpcNodeCore, }; use reth_rpc_eth_types::{EthApiError, PendingBlock}; @@ -31,8 +31,8 @@ impl LoadPendingBlock for OpEthApi where Self: SpawnBlocking + EthApiTypes< - NetworkTypes: Network< - HeaderResponse = alloy_rpc_types_eth::Header>, + NetworkTypes: RpcTypes< + Header = alloy_rpc_types_eth::Header>, >, Error: FromEvmError, >, diff --git a/crates/rpc/rpc-eth-api/src/helpers/pending_block.rs b/crates/rpc/rpc-eth-api/src/helpers/pending_block.rs index b3ef8d4ca..66db02e2e 100644 --- a/crates/rpc/rpc-eth-api/src/helpers/pending_block.rs +++ b/crates/rpc/rpc-eth-api/src/helpers/pending_block.rs @@ -2,10 +2,9 @@ //! RPC methods. use super::SpawnBlocking; -use crate::{EthApiTypes, FromEthApiError, FromEvmError, RpcNodeCore}; +use crate::{types::RpcTypes, EthApiTypes, FromEthApiError, FromEvmError, RpcNodeCore}; use alloy_consensus::{BlockHeader, Transaction}; use alloy_eips::eip4844::MAX_DATA_GAS_PER_BLOCK; -use alloy_network::Network; use alloy_primitives::B256; use alloy_rpc_types_eth::BlockNumberOrTag; use futures::Future; @@ -41,8 +40,8 @@ use tracing::debug; /// Behaviour shared by several `eth_` RPC methods, not exclusive to `eth_` blocks RPC methods. pub trait LoadPendingBlock: EthApiTypes< - NetworkTypes: Network< - HeaderResponse = alloy_rpc_types_eth::Header>, + NetworkTypes: RpcTypes< + Header = alloy_rpc_types_eth::Header>, >, Error: FromEvmError, > + RpcNodeCore< diff --git a/crates/rpc/rpc-eth-api/src/types.rs b/crates/rpc/rpc-eth-api/src/types.rs index b4aa4a991..cdd6d50d2 100644 --- a/crates/rpc/rpc-eth-api/src/types.rs +++ b/crates/rpc/rpc-eth-api/src/types.rs @@ -1,7 +1,8 @@ //! Trait for specifying `eth` network dependent API types. use crate::{AsEthApiError, FromEthApiError, RpcNodeCore}; -use alloy_network::Network; +use alloy_json_rpc::RpcObject; +use alloy_network::{Network, ReceiptResponse, TransactionResponse}; use alloy_rpc_types_eth::Block; use reth_provider::{ProviderTx, ReceiptProvider, TransactionsProvider}; use reth_rpc_types_compat::TransactionCompat; @@ -11,6 +12,27 @@ use std::{ fmt::{self}, }; +/// RPC types used by the `eth_` RPC API. +/// +/// This is a subset of [`alloy_network::Network`] trait with only RPC response types kept. +pub trait RpcTypes { + /// Header response type. + type Header: RpcObject; + /// Receipt response type. + type Receipt: RpcObject + ReceiptResponse; + /// Transaction response type. + type Transaction: RpcObject + TransactionResponse; +} + +impl RpcTypes for T +where + T: Network, +{ + type Header = T::HeaderResponse; + type Receipt = T::ReceiptResponse; + type Transaction = T::TransactionResponse; +} + /// Network specific `eth` API types. /// /// This trait defines the network specific rpc types and helpers required for the `eth_` and @@ -28,7 +50,7 @@ pub trait EthApiTypes: Send + Sync + Clone { + Send + Sync; /// Blockchain primitive types, specific to network, e.g. block and transaction. - type NetworkTypes: Network; + type NetworkTypes: RpcTypes; /// Conversion methods for transaction RPC type. type TransactionCompat: Send + Sync + Clone + fmt::Debug; @@ -37,16 +59,16 @@ pub trait EthApiTypes: Send + Sync + Clone { } /// Adapter for network specific transaction type. -pub type RpcTransaction = ::TransactionResponse; +pub type RpcTransaction = ::Transaction; /// Adapter for network specific block type. -pub type RpcBlock = Block, ::HeaderResponse>; +pub type RpcBlock = Block, RpcHeader>; /// Adapter for network specific receipt type. -pub type RpcReceipt = ::ReceiptResponse; +pub type RpcReceipt = ::Receipt; /// Adapter for network specific header type. -pub type RpcHeader = ::HeaderResponse; +pub type RpcHeader = ::Header; /// Adapter for network specific error type. pub type RpcError = ::Error; diff --git a/crates/rpc/rpc/src/eth/helpers/block.rs b/crates/rpc/rpc/src/eth/helpers/block.rs index 31efb0936..b04102592 100644 --- a/crates/rpc/rpc/src/eth/helpers/block.rs +++ b/crates/rpc/rpc/src/eth/helpers/block.rs @@ -7,6 +7,7 @@ use reth_primitives_traits::{BlockBody, SignedTransaction}; use reth_provider::{BlockReader, ChainSpecProvider}; use reth_rpc_eth_api::{ helpers::{EthBlocks, LoadBlock, LoadPendingBlock, LoadReceipt, SpawnBlocking}, + types::RpcTypes, RpcNodeCoreExt, RpcReceipt, }; use reth_rpc_eth_types::{EthApiError, EthReceiptBuilder}; @@ -17,7 +18,7 @@ impl EthBlocks for EthApi, + NetworkTypes: RpcTypes, Provider: BlockReader< Transaction = reth_primitives::TransactionSigned, Receipt = reth_primitives::Receipt, diff --git a/crates/rpc/rpc/src/eth/helpers/pending_block.rs b/crates/rpc/rpc/src/eth/helpers/pending_block.rs index cf6299017..36ec6352c 100644 --- a/crates/rpc/rpc/src/eth/helpers/pending_block.rs +++ b/crates/rpc/rpc/src/eth/helpers/pending_block.rs @@ -13,6 +13,7 @@ use reth_provider::{ }; use reth_rpc_eth_api::{ helpers::{LoadPendingBlock, SpawnBlocking}, + types::RpcTypes, FromEvmError, RpcNodeCore, }; use reth_rpc_eth_types::PendingBlock; @@ -25,7 +26,7 @@ impl LoadPendingBlock for EthApi where Self: SpawnBlocking< - NetworkTypes: alloy_network::Network, + NetworkTypes: RpcTypes
, Error: FromEvmError, > + RpcNodeCore< Provider: BlockReaderIdExt<