diff --git a/crates/optimism/rpc/src/eth/call.rs b/crates/optimism/rpc/src/eth/call.rs index 0459a1e2aa..f892a315fe 100644 --- a/crates/optimism/rpc/src/eth/call.rs +++ b/crates/optimism/rpc/src/eth/call.rs @@ -5,7 +5,7 @@ use reth_evm::{execute::BlockExecutorFactory, ConfigureEvm, EvmFactory, TxEnvFor use reth_node_api::NodePrimitives; use reth_rpc_eth_api::{ helpers::{estimate::EstimateCall, Call, EthCall, LoadBlock, LoadState, SpawnBlocking}, - FromEvmError, FullEthApiTypes, TransactionCompat, + FromEvmError, FullEthApiTypes, RpcConvert, }; use reth_storage_api::{errors::ProviderError, ProviderHeader, ProviderTx}; use revm::context::TxEnv; @@ -37,9 +37,9 @@ where EvmFactory: EvmFactory>, >, >, - TransactionCompat: TransactionCompat>, + RpcConvert: RpcConvert>, Error: FromEvmError - + From<::Error> + + From<::Error> + From, > + SpawnBlocking, Self::Error: From, diff --git a/crates/optimism/rpc/src/eth/mod.rs b/crates/optimism/rpc/src/eth/mod.rs index d4e8205068..83210fff80 100644 --- a/crates/optimism/rpc/src/eth/mod.rs +++ b/crates/optimism/rpc/src/eth/mod.rs @@ -117,9 +117,9 @@ where { type Error = OpEthApiError; type NetworkTypes = NetworkT; - type TransactionCompat = RpcConverter>; + type RpcConvert = RpcConverter>; - fn tx_resp_builder(&self) -> &Self::TransactionCompat { + fn tx_resp_builder(&self) -> &Self::RpcConvert { &self.tx_resp_builder } } diff --git a/crates/optimism/rpc/src/eth/pending_block.rs b/crates/optimism/rpc/src/eth/pending_block.rs index 2b0a7362ed..de011aa279 100644 --- a/crates/optimism/rpc/src/eth/pending_block.rs +++ b/crates/optimism/rpc/src/eth/pending_block.rs @@ -13,7 +13,7 @@ use reth_primitives_traits::{RecoveredBlock, SealedHeader}; use reth_rpc_eth_api::{ helpers::{LoadPendingBlock, SpawnBlocking}, types::RpcTypes, - EthApiTypes, FromEthApiError, FromEvmError, RpcNodeCore, TransactionCompat, + EthApiTypes, FromEthApiError, FromEvmError, RpcConvert, RpcNodeCore, }; use reth_rpc_eth_types::{EthApiError, PendingBlock}; use reth_storage_api::{ @@ -30,7 +30,7 @@ where Header = alloy_rpc_types_eth::Header>, >, Error: FromEvmError, - TransactionCompat: TransactionCompat, + RpcConvert: RpcConvert, >, N: RpcNodeCore< Provider: BlockReaderIdExt diff --git a/crates/rpc/rpc-eth-api/src/helpers/block.rs b/crates/rpc/rpc-eth-api/src/helpers/block.rs index 1c1bade5ad..6ab45c1a90 100644 --- a/crates/rpc/rpc-eth-api/src/helpers/block.rs +++ b/crates/rpc/rpc-eth-api/src/helpers/block.rs @@ -13,7 +13,7 @@ use futures::Future; use reth_evm::ConfigureEvm; use reth_node_api::BlockBody; use reth_primitives_traits::{NodePrimitives, RecoveredBlock, SealedBlock}; -use reth_rpc_types_compat::TransactionCompat; +use reth_rpc_types_compat::RpcConvert; use reth_storage_api::{BlockIdReader, BlockReader, ProviderHeader, ProviderReceipt, ProviderTx}; use reth_transaction_pool::{PoolTransaction, TransactionPool}; use std::sync::Arc; diff --git a/crates/rpc/rpc-eth-api/src/helpers/call.rs b/crates/rpc/rpc-eth-api/src/helpers/call.rs index e5ceb7e523..9ac1adee74 100644 --- a/crates/rpc/rpc-eth-api/src/helpers/call.rs +++ b/crates/rpc/rpc-eth-api/src/helpers/call.rs @@ -34,7 +34,7 @@ use reth_rpc_eth_types::{ simulate::{self, EthSimulateError}, EthApiError, RevertError, RpcInvalidTransactionError, StateCacheDb, }; -use reth_rpc_types_compat::TransactionCompat; +use reth_rpc_types_compat::RpcConvert; use reth_storage_api::{BlockIdReader, ProviderHeader, ProviderTx}; use revm::{ context_interface::{ @@ -456,9 +456,9 @@ pub trait Call: SignedTx = ProviderTx, >, >, - TransactionCompat: TransactionCompat>, + RpcConvert: RpcConvert>, Error: FromEvmError - + From<::Error> + + From<::Error> + From, > + SpawnBlocking { 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 dc416ca620..64d6f2b0a1 100644 --- a/crates/rpc/rpc-eth-api/src/helpers/pending_block.rs +++ b/crates/rpc/rpc-eth-api/src/helpers/pending_block.rs @@ -20,7 +20,7 @@ use reth_primitives_traits::{ }; use reth_revm::{database::StateProviderDatabase, db::State}; use reth_rpc_eth_types::{EthApiError, PendingBlock, PendingBlockEnv, PendingBlockEnvOrigin}; -use reth_rpc_types_compat::TransactionCompat; +use reth_rpc_types_compat::RpcConvert; use reth_storage_api::{ BlockReader, BlockReaderIdExt, ProviderBlock, ProviderHeader, ProviderReceipt, ProviderTx, ReceiptProvider, StateProviderFactory, @@ -43,7 +43,7 @@ pub trait LoadPendingBlock: Header = alloy_rpc_types_eth::Header>, >, Error: FromEvmError, - TransactionCompat: TransactionCompat, + RpcConvert: RpcConvert, > + RpcNodeCore< Provider: BlockReaderIdExt + ChainSpecProvider diff --git a/crates/rpc/rpc-eth-api/src/helpers/transaction.rs b/crates/rpc/rpc-eth-api/src/helpers/transaction.rs index df53fbf6f2..32af3661ff 100644 --- a/crates/rpc/rpc-eth-api/src/helpers/transaction.rs +++ b/crates/rpc/rpc-eth-api/src/helpers/transaction.rs @@ -23,7 +23,7 @@ use reth_rpc_eth_types::{ utils::binary_search, EthApiError, EthApiError::TransactionConfirmationTimeout, SignError, TransactionSource, }; -use reth_rpc_types_compat::transaction::TransactionCompat; +use reth_rpc_types_compat::transaction::RpcConvert; use reth_storage_api::{ BlockNumReader, BlockReaderIdExt, ProviderBlock, ProviderReceipt, ProviderTx, ReceiptProvider, TransactionsProvider, diff --git a/crates/rpc/rpc-eth-api/src/types.rs b/crates/rpc/rpc-eth-api/src/types.rs index de13ce6842..c57ff608c7 100644 --- a/crates/rpc/rpc-eth-api/src/types.rs +++ b/crates/rpc/rpc-eth-api/src/types.rs @@ -3,7 +3,7 @@ use crate::{AsEthApiError, FromEthApiError, RpcNodeCore}; use alloy_rpc_types_eth::Block; use reth_chain_state::CanonStateSubscriptions; -use reth_rpc_types_compat::TransactionCompat; +use reth_rpc_types_compat::RpcConvert; use reth_storage_api::{ProviderTx, ReceiptProvider, TransactionsProvider}; use reth_transaction_pool::{PoolTransaction, TransactionPool}; use std::{ @@ -32,10 +32,10 @@ pub trait EthApiTypes: Send + Sync + Clone { /// Blockchain primitive types, specific to network, e.g. block and transaction. type NetworkTypes: RpcTypes; /// Conversion methods for transaction RPC type. - type TransactionCompat: Send + Sync + Clone + fmt::Debug; + type RpcConvert: Send + Sync + Clone + fmt::Debug; /// Returns reference to transaction response builder. - fn tx_resp_builder(&self) -> &Self::TransactionCompat; + fn tx_resp_builder(&self) -> &Self::RpcConvert; } /// Adapter for network specific block type. @@ -59,7 +59,7 @@ where Transaction: PoolTransaction>, >, > + EthApiTypes< - TransactionCompat: TransactionCompat< + RpcConvert: RpcConvert< Primitives = ::Primitives, Network = Self::NetworkTypes, Error = RpcError, @@ -75,7 +75,7 @@ impl FullEthApiTypes for T where Transaction: PoolTransaction>, >, > + EthApiTypes< - TransactionCompat: TransactionCompat< + RpcConvert: RpcConvert< Primitives = ::Primitives, Network = Self::NetworkTypes, Error = RpcError, diff --git a/crates/rpc/rpc-eth-types/src/simulate.rs b/crates/rpc/rpc-eth-types/src/simulate.rs index 1c82633b5b..a02b4494c0 100644 --- a/crates/rpc/rpc-eth-types/src/simulate.rs +++ b/crates/rpc/rpc-eth-types/src/simulate.rs @@ -23,7 +23,7 @@ use reth_primitives_traits::{ block::BlockTx, BlockBody as _, NodePrimitives, Recovered, RecoveredBlock, SignedTransaction, }; use reth_rpc_server_types::result::rpc_err; -use reth_rpc_types_compat::{RpcTransaction, TransactionCompat}; +use reth_rpc_types_compat::{RpcConvert, RpcTransaction}; use reth_storage_api::noop::NoopProvider; use revm::{ context_interface::result::ExecutionResult, @@ -77,7 +77,7 @@ pub fn execute_transactions( > where S: BlockBuilder>>>>, - T: TransactionCompat, + T: RpcConvert, { builder.apply_pre_execution_changes()?; @@ -121,7 +121,7 @@ pub fn resolve_transaction( ) -> Result, EthApiError> where DB::Error: Into, - T: TransactionCompat>, + T: RpcConvert>, { // If we're missing any fields we try to fill nonce, gas and // gas price. @@ -193,7 +193,7 @@ pub fn build_simulated_block( tx_resp_builder: &T, ) -> Result, Header>>, T::Error> where - T: TransactionCompat< + T: RpcConvert< Primitives: NodePrimitives>, Error: FromEthApiError + FromEvmHalt, >, diff --git a/crates/rpc/rpc-eth-types/src/transaction.rs b/crates/rpc/rpc-eth-types/src/transaction.rs index ddc5dbe0b4..36cdfd9ffa 100644 --- a/crates/rpc/rpc-eth-types/src/transaction.rs +++ b/crates/rpc/rpc-eth-types/src/transaction.rs @@ -6,7 +6,7 @@ use alloy_primitives::B256; use alloy_rpc_types_eth::TransactionInfo; use reth_ethereum_primitives::TransactionSigned; use reth_primitives_traits::{NodePrimitives, Recovered, SignedTransaction}; -use reth_rpc_types_compat::{RpcTransaction, TransactionCompat}; +use reth_rpc_types_compat::{RpcConvert, RpcTransaction}; /// Represents from where a transaction was fetched. #[derive(Debug, Clone, Eq, PartialEq)] @@ -44,7 +44,7 @@ impl TransactionSource { resp_builder: &Builder, ) -> Result, Builder::Error> where - Builder: TransactionCompat>, + Builder: RpcConvert>, { match self { Self::Pool(tx) => resp_builder.fill_pending(tx), diff --git a/crates/rpc/rpc-types-compat/src/lib.rs b/crates/rpc/rpc-types-compat/src/lib.rs index d08da214b5..d274d3f964 100644 --- a/crates/rpc/rpc-types-compat/src/lib.rs +++ b/crates/rpc/rpc-types-compat/src/lib.rs @@ -17,8 +17,8 @@ pub mod transaction; pub use fees::{CallFees, CallFeesError}; pub use rpc::*; pub use transaction::{ - EthTxEnvError, IntoRpcTx, RpcConverter, TransactionCompat, TransactionConversionError, - TryIntoSimTx, TxInfoMapper, + EthTxEnvError, IntoRpcTx, RpcConvert, RpcConverter, TransactionConversionError, TryIntoSimTx, + TxInfoMapper, }; #[cfg(feature = "op")] diff --git a/crates/rpc/rpc-types-compat/src/transaction.rs b/crates/rpc/rpc-types-compat/src/transaction.rs index 98421e68a8..5bcacca573 100644 --- a/crates/rpc/rpc-types-compat/src/transaction.rs +++ b/crates/rpc/rpc-types-compat/src/transaction.rs @@ -20,8 +20,15 @@ use revm_context::{BlockEnv, CfgEnv, TxEnv}; use std::{convert::Infallible, error::Error, fmt::Debug, marker::PhantomData}; use thiserror::Error; -/// Builds RPC transaction w.r.t. network. -pub trait TransactionCompat: Send + Sync + Unpin + Clone + Debug { +/// Responsible for the conversions from and into RPC requests and responses. +/// +/// The JSON-RPC schema and the Node primitives are configurable using the [`RpcConvert::Network`] +/// and [`RpcConvert::Primitives`] associated types respectively. +/// +/// A generic implementation [`RpcConverter`] should be preferred over a manual implementation. As +/// long as its trait bound requirements are met, the implementation is created automatically and +/// can be used in RPC method handlers for all the conversions. +pub trait RpcConvert: Send + Sync + Unpin + Clone + Debug { /// Associated lower layer consensus types to convert from and into types of [`Self::Network`]. type Primitives: NodePrimitives; @@ -32,7 +39,7 @@ pub trait TransactionCompat: Send + Sync + Unpin + Clone + Debug { /// A set of variables for executing a transaction. type TxEnv; - /// RPC transaction error type. + /// An associated RPC conversion error. type Error: error::Error + Into>; /// Wrapper for `fill()` with default `TransactionInfo` @@ -352,7 +359,7 @@ impl Default for RpcConverter { } } -impl TransactionCompat for RpcConverter +impl RpcConvert for RpcConverter where N: NodePrimitives, E: RpcTypes + Send + Sync + Unpin + Clone + Debug, diff --git a/crates/rpc/rpc/src/eth/core.rs b/crates/rpc/rpc/src/eth/core.rs index 6a079b821b..e2cb066197 100644 --- a/crates/rpc/rpc/src/eth/core.rs +++ b/crates/rpc/rpc/src/eth/core.rs @@ -158,9 +158,9 @@ where { type Error = EthApiError; type NetworkTypes = Ethereum; - type TransactionCompat = EthRpcConverter; + type RpcConvert = EthRpcConverter; - fn tx_resp_builder(&self) -> &Self::TransactionCompat { + fn tx_resp_builder(&self) -> &Self::RpcConvert { &self.tx_resp_builder } } diff --git a/crates/rpc/rpc/src/eth/filter.rs b/crates/rpc/rpc/src/eth/filter.rs index 25c9f47266..59d07a06f8 100644 --- a/crates/rpc/rpc/src/eth/filter.rs +++ b/crates/rpc/rpc/src/eth/filter.rs @@ -12,8 +12,8 @@ use jsonrpsee::{core::RpcResult, server::IdProvider}; use reth_errors::ProviderError; use reth_primitives_traits::NodePrimitives; use reth_rpc_eth_api::{ - EngineEthFilter, EthApiTypes, EthFilterApiServer, FullEthApiTypes, QueryLimits, RpcNodeCore, - RpcNodeCoreExt, RpcTransaction, TransactionCompat, + EngineEthFilter, EthApiTypes, EthFilterApiServer, FullEthApiTypes, QueryLimits, RpcConvert, + RpcNodeCore, RpcNodeCoreExt, RpcTransaction, }; use reth_rpc_eth_types::{ logs_utils::{self, append_matching_block_logs, ProviderOrBlock}, @@ -686,7 +686,7 @@ struct FullTransactionsReceiver { impl FullTransactionsReceiver where T: PoolTransaction + 'static, - TxCompat: TransactionCompat>, + TxCompat: RpcConvert>, { /// Creates a new `FullTransactionsReceiver` encapsulating the provided transaction stream. fn new(stream: NewSubpoolTransactionStream, tx_resp_builder: TxCompat) -> Self { @@ -724,7 +724,7 @@ impl FullTransactionsFilter> for FullTransactionsReceiver where T: PoolTransaction + 'static, - TxCompat: TransactionCompat> + 'static, + TxCompat: RpcConvert> + 'static, { async fn drain(&self) -> FilterChanges> { Self::drain(self).await diff --git a/crates/rpc/rpc/src/eth/helpers/block.rs b/crates/rpc/rpc/src/eth/helpers/block.rs index 508db22619..3ce1283a3e 100644 --- a/crates/rpc/rpc/src/eth/helpers/block.rs +++ b/crates/rpc/rpc/src/eth/helpers/block.rs @@ -11,7 +11,7 @@ use reth_rpc_eth_api::{ RpcNodeCore, RpcNodeCoreExt, RpcReceipt, }; use reth_rpc_eth_types::{EthApiError, EthReceiptBuilder}; -use reth_rpc_types_compat::TransactionCompat; +use reth_rpc_types_compat::RpcConvert; use reth_storage_api::{BlockReader, ProviderTx}; use reth_transaction_pool::{PoolTransaction, TransactionPool}; @@ -22,7 +22,7 @@ where Self: LoadBlock< Error = EthApiError, NetworkTypes: RpcTypes, - TransactionCompat: TransactionCompat, + RpcConvert: RpcConvert, Provider: BlockReader< Transaction = reth_ethereum_primitives::TransactionSigned, Receipt = reth_ethereum_primitives::Receipt, diff --git a/crates/rpc/rpc/src/eth/helpers/call.rs b/crates/rpc/rpc/src/eth/helpers/call.rs index 479aa28b39..5d64c6fc20 100644 --- a/crates/rpc/rpc/src/eth/helpers/call.rs +++ b/crates/rpc/rpc/src/eth/helpers/call.rs @@ -9,7 +9,7 @@ use reth_rpc_eth_api::{ helpers::{estimate::EstimateCall, Call, EthCall, LoadPendingBlock, LoadState, SpawnBlocking}, FromEvmError, FullEthApiTypes, RpcNodeCore, RpcNodeCoreExt, }; -use reth_rpc_types_compat::TransactionCompat; +use reth_rpc_types_compat::RpcConvert; use reth_storage_api::{BlockReader, ProviderHeader, ProviderTx}; use reth_transaction_pool::{PoolTransaction, TransactionPool}; use revm::context::TxEnv; @@ -41,9 +41,9 @@ where SignedTx = ProviderTx, >, >, - TransactionCompat: TransactionCompat>, + RpcConvert: RpcConvert>, Error: FromEvmError - + From<::Error> + + From<::Error> + From, > + SpawnBlocking, Provider: BlockReader, diff --git a/crates/rpc/rpc/src/eth/helpers/pending_block.rs b/crates/rpc/rpc/src/eth/helpers/pending_block.rs index 8e94f8ab2a..d16777e538 100644 --- a/crates/rpc/rpc/src/eth/helpers/pending_block.rs +++ b/crates/rpc/rpc/src/eth/helpers/pending_block.rs @@ -12,7 +12,7 @@ use reth_rpc_eth_api::{ FromEvmError, RpcNodeCore, }; use reth_rpc_eth_types::PendingBlock; -use reth_rpc_types_compat::TransactionCompat; +use reth_rpc_types_compat::RpcConvert; use reth_storage_api::{ BlockReader, BlockReaderIdExt, ProviderBlock, ProviderHeader, ProviderReceipt, ProviderTx, StateProviderFactory, @@ -28,7 +28,7 @@ where Header = alloy_rpc_types_eth::Header>, >, Error: FromEvmError, - TransactionCompat: TransactionCompat, + RpcConvert: RpcConvert, > + RpcNodeCore< Provider: BlockReaderIdExt + ChainSpecProvider diff --git a/crates/rpc/rpc/src/eth/pubsub.rs b/crates/rpc/rpc/src/eth/pubsub.rs index 7b5e1cea03..1c7982f80f 100644 --- a/crates/rpc/rpc/src/eth/pubsub.rs +++ b/crates/rpc/rpc/src/eth/pubsub.rs @@ -15,7 +15,7 @@ use reth_chain_state::CanonStateSubscriptions; use reth_network_api::NetworkInfo; use reth_primitives_traits::NodePrimitives; use reth_rpc_eth_api::{ - pubsub::EthPubSubApiServer, EthApiTypes, RpcNodeCore, RpcTransaction, TransactionCompat, + pubsub::EthPubSubApiServer, EthApiTypes, RpcConvert, RpcNodeCore, RpcTransaction, }; use reth_rpc_eth_types::logs_utils; use reth_rpc_server_types::result::{internal_rpc_err, invalid_params_rpc_err}; @@ -62,7 +62,7 @@ where Pool: TransactionPool, Network: NetworkInfo, > + EthApiTypes< - TransactionCompat: TransactionCompat< + RpcConvert: RpcConvert< Primitives: NodePrimitives>, >, >, @@ -211,7 +211,7 @@ where Pool: TransactionPool, Network: NetworkInfo, > + EthApiTypes< - TransactionCompat: TransactionCompat< + RpcConvert: RpcConvert< Primitives: NodePrimitives>, >, > + 'static, diff --git a/crates/rpc/rpc/src/txpool.rs b/crates/rpc/rpc/src/txpool.rs index ae9df3535a..0e3adc5863 100644 --- a/crates/rpc/rpc/src/txpool.rs +++ b/crates/rpc/rpc/src/txpool.rs @@ -11,7 +11,7 @@ use jsonrpsee::core::RpcResult; use reth_primitives_traits::NodePrimitives; use reth_rpc_api::TxPoolApiServer; use reth_rpc_eth_api::RpcTransaction; -use reth_rpc_types_compat::{RpcTypes, TransactionCompat}; +use reth_rpc_types_compat::{RpcConvert, RpcTypes}; use reth_transaction_pool::{ AllPoolTransactions, PoolConsensusTx, PoolTransaction, TransactionPool, }; @@ -37,7 +37,7 @@ impl TxPoolApi { impl TxPoolApi where Pool: TransactionPool> + 'static, - Eth: TransactionCompat>>, + Eth: RpcConvert>>, { fn content(&self) -> Result>, Eth::Error> { #[inline] @@ -51,7 +51,7 @@ where ) -> Result<(), RpcTxB::Error> where Tx: PoolTransaction, - RpcTxB: TransactionCompat>, + RpcTxB: RpcConvert>, { content.entry(tx.sender()).or_default().insert( tx.nonce().to_string(), @@ -79,7 +79,7 @@ where impl TxPoolApiServer> for TxPoolApi where Pool: TransactionPool> + 'static, - Eth: TransactionCompat>> + 'static, + Eth: RpcConvert>> + 'static, { /// Returns the number of transactions currently pending for inclusion in the next block(s), as /// well as the ones that are being scheduled for future execution only.