From 41748e818febc5bfaa9f5da946153877427205b0 Mon Sep 17 00:00:00 2001 From: Chirag Baghasingh <76247491+chirag-bgh@users.noreply.github.com> Date: Sat, 25 Feb 2023 15:23:41 +0530 Subject: [PATCH] feat: Integrate new EvmEnvProvider in RPC (#1550) --- bin/reth/src/args/rpc_server_args.rs | 16 +++++++++++--- crates/rpc/rpc-builder/src/auth.rs | 8 ++++--- crates/rpc/rpc-builder/src/lib.rs | 24 ++++++++++++++------- crates/rpc/rpc-engine-api/src/engine_api.rs | 8 ++++--- crates/rpc/rpc/src/eth/api/block.rs | 4 ++-- crates/rpc/rpc/src/eth/api/call.rs | 4 ++-- crates/rpc/rpc/src/eth/api/mod.rs | 6 +++--- crates/rpc/rpc/src/eth/api/server.rs | 4 ++-- crates/rpc/rpc/src/eth/api/state.rs | 4 ++-- crates/rpc/rpc/src/eth/api/transactions.rs | 4 ++-- crates/rpc/rpc/src/eth/filter.rs | 6 +++--- crates/rpc/rpc/src/eth/pubsub.rs | 8 +++---- 12 files changed, 59 insertions(+), 37 deletions(-) diff --git a/bin/reth/src/args/rpc_server_args.rs b/bin/reth/src/args/rpc_server_args.rs index 62d9961cb..5476b0f76 100644 --- a/bin/reth/src/args/rpc_server_args.rs +++ b/bin/reth/src/args/rpc_server_args.rs @@ -4,7 +4,7 @@ use crate::dirs::{JwtSecretPath, PlatformPath}; use clap::Args; use jsonrpsee::{core::Error as RpcError, server::ServerHandle}; use reth_network_api::{NetworkInfo, Peers}; -use reth_provider::{BlockProvider, HeaderProvider, StateProviderFactory}; +use reth_provider::{BlockProvider, EvmEnvProvider, HeaderProvider, StateProviderFactory}; use reth_rpc::{JwtError, JwtSecret}; use reth_rpc_builder::{ constants, IpcServerBuilder, RethRpcModule, RpcModuleSelection, RpcServerConfig, @@ -110,7 +110,12 @@ impl RpcServerArgs { network: Network, ) -> Result where - Client: BlockProvider + HeaderProvider + StateProviderFactory + Clone + 'static, + Client: BlockProvider + + HeaderProvider + + StateProviderFactory + + EvmEnvProvider + + Clone + + 'static, Pool: TransactionPool + Clone + 'static, Network: NetworkInfo + Peers + Clone + 'static, { @@ -133,7 +138,12 @@ impl RpcServerArgs { handle: EngineApiHandle, ) -> Result where - Client: BlockProvider + HeaderProvider + StateProviderFactory + Clone + 'static, + Client: BlockProvider + + HeaderProvider + + StateProviderFactory + + EvmEnvProvider + + Clone + + 'static, Pool: TransactionPool + Clone + 'static, Network: NetworkInfo + Peers + Clone + 'static, { diff --git a/crates/rpc/rpc-builder/src/auth.rs b/crates/rpc/rpc-builder/src/auth.rs index 9adaa96f8..4bccd977a 100644 --- a/crates/rpc/rpc-builder/src/auth.rs +++ b/crates/rpc/rpc-builder/src/auth.rs @@ -12,7 +12,7 @@ use jsonrpsee::{ use reth_ipc::server::IpcServer; pub use reth_ipc::server::{Builder as IpcServerBuilder, Endpoint}; use reth_network_api::{NetworkInfo, Peers}; -use reth_provider::{BlockProvider, HeaderProvider, StateProviderFactory}; +use reth_provider::{BlockProvider, EvmEnvProvider, HeaderProvider, StateProviderFactory}; use reth_rpc::{ AdminApi, AuthLayer, DebugApi, EngineApi, EthApi, JwtAuthValidator, JwtSecret, NetApi, TraceApi, Web3Api, @@ -41,7 +41,8 @@ pub async fn launch( secret: JwtSecret, ) -> Result where - Client: BlockProvider + HeaderProvider + StateProviderFactory + Clone + 'static, + Client: + BlockProvider + HeaderProvider + StateProviderFactory + EvmEnvProvider + Clone + 'static, Pool: TransactionPool + Clone + 'static, Network: NetworkInfo + Peers + Clone + 'static, { @@ -56,7 +57,8 @@ pub async fn launch_with_eth_api( secret: JwtSecret, ) -> Result where - Client: BlockProvider + HeaderProvider + StateProviderFactory + Clone + 'static, + Client: + BlockProvider + HeaderProvider + StateProviderFactory + EvmEnvProvider + Clone + 'static, Pool: TransactionPool + Clone + 'static, Network: NetworkInfo + Peers + Clone + 'static, { diff --git a/crates/rpc/rpc-builder/src/lib.rs b/crates/rpc/rpc-builder/src/lib.rs index 41cbe57b0..1a8751122 100644 --- a/crates/rpc/rpc-builder/src/lib.rs +++ b/crates/rpc/rpc-builder/src/lib.rs @@ -26,12 +26,12 @@ //! //! ``` //! use reth_network_api::{NetworkInfo, Peers}; -//! use reth_provider::{BlockProvider, HeaderProvider, StateProviderFactory}; +//! use reth_provider::{BlockProvider, HeaderProvider, StateProviderFactory, EvmEnvProvider}; //! use reth_rpc_builder::{RethRpcModule, RpcModuleBuilder, RpcServerConfig, ServerBuilder, TransportRpcModuleConfig}; //! use reth_transaction_pool::TransactionPool; //! pub async fn launch(client: Client, pool: Pool, network: Network) //! where -//! Client: BlockProvider + HeaderProvider + StateProviderFactory + Clone + 'static, +//! Client: BlockProvider + HeaderProvider + StateProviderFactory + EvmEnvProvider + Clone + 'static, //! Pool: TransactionPool + Clone + 'static, //! Network: NetworkInfo + Peers + Clone + 'static, //! { @@ -62,7 +62,7 @@ use jsonrpsee::{ }; use reth_ipc::server::IpcServer; use reth_network_api::{NetworkInfo, Peers}; -use reth_provider::{BlockProvider, HeaderProvider, StateProviderFactory}; +use reth_provider::{BlockProvider, EvmEnvProvider, HeaderProvider, StateProviderFactory}; use reth_rpc::{AdminApi, DebugApi, EthApi, NetApi, TraceApi, Web3Api}; use reth_rpc_api::servers::*; use reth_transaction_pool::TransactionPool; @@ -99,7 +99,8 @@ pub async fn launch( server_config: impl Into, ) -> Result where - Client: BlockProvider + HeaderProvider + StateProviderFactory + Clone + 'static, + Client: + BlockProvider + HeaderProvider + StateProviderFactory + EvmEnvProvider + Clone + 'static, Pool: TransactionPool + Clone + 'static, Network: NetworkInfo + Peers + Clone + 'static, { @@ -135,7 +136,7 @@ impl RpcModuleBuilder { /// Configure the client instance. pub fn with_client(self, client: C) -> RpcModuleBuilder where - C: BlockProvider + StateProviderFactory + 'static, + C: BlockProvider + StateProviderFactory + EvmEnvProvider + 'static, { let Self { pool, network, .. } = self; RpcModuleBuilder { client, network, pool } @@ -162,7 +163,8 @@ impl RpcModuleBuilder { impl RpcModuleBuilder where - Client: BlockProvider + HeaderProvider + StateProviderFactory + Clone + 'static, + Client: + BlockProvider + HeaderProvider + StateProviderFactory + EvmEnvProvider + Clone + 'static, Pool: TransactionPool + Clone + 'static, Network: NetworkInfo + Peers + Clone + 'static, { @@ -263,7 +265,12 @@ impl RpcModuleSelection { network: Network, ) -> RpcModule<()> where - Client: BlockProvider + HeaderProvider + StateProviderFactory + Clone + 'static, + Client: BlockProvider + + HeaderProvider + + StateProviderFactory + + EvmEnvProvider + + Clone + + 'static, Pool: TransactionPool + Clone + 'static, Network: NetworkInfo + Peers + Clone + 'static, { @@ -402,7 +409,8 @@ where impl RethModuleRegistry where - Client: BlockProvider + HeaderProvider + StateProviderFactory + Clone + 'static, + Client: + BlockProvider + HeaderProvider + StateProviderFactory + EvmEnvProvider + Clone + 'static, Pool: TransactionPool + Clone + 'static, Network: NetworkInfo + Peers + Clone + 'static, { diff --git a/crates/rpc/rpc-engine-api/src/engine_api.rs b/crates/rpc/rpc-engine-api/src/engine_api.rs index beedd9aaf..c5e8df1d3 100644 --- a/crates/rpc/rpc-engine-api/src/engine_api.rs +++ b/crates/rpc/rpc-engine-api/src/engine_api.rs @@ -7,7 +7,7 @@ use reth_primitives::{ BlockHash, BlockId, BlockNumber, ChainSpec, Hardfork, Header, SealedBlock, TransactionSigned, H64, U256, }; -use reth_provider::{BlockProvider, HeaderProvider, StateProviderFactory}; +use reth_provider::{BlockProvider, EvmEnvProvider, HeaderProvider, StateProviderFactory}; use reth_revm::database::{State, SubState}; use reth_rlp::Decodable; use reth_rpc_types::engine::{ @@ -45,7 +45,9 @@ pub struct EngineApi { // remote_store: HashMap, } -impl EngineApi { +impl + EngineApi +{ /// Create new instance of [EngineApi]. pub fn new( client: Client, @@ -409,7 +411,7 @@ impl EngineApi Future for EngineApi where - Client: HeaderProvider + BlockProvider + StateProviderFactory + Unpin, + Client: HeaderProvider + BlockProvider + StateProviderFactory + EvmEnvProvider + Unpin, { type Output = (); diff --git a/crates/rpc/rpc/src/eth/api/block.rs b/crates/rpc/rpc/src/eth/api/block.rs index 0863a48fd..a66aa366f 100644 --- a/crates/rpc/rpc/src/eth/api/block.rs +++ b/crates/rpc/rpc/src/eth/api/block.rs @@ -5,12 +5,12 @@ use crate::{ EthApi, }; use reth_primitives::BlockId; -use reth_provider::{BlockProvider, StateProviderFactory}; +use reth_provider::{BlockProvider, EvmEnvProvider, StateProviderFactory}; use reth_rpc_types::{Block, RichBlock}; impl EthApi where - Client: BlockProvider + StateProviderFactory + 'static, + Client: BlockProvider + StateProviderFactory + EvmEnvProvider + 'static, { /// Returns the uncle headers of the given block /// diff --git a/crates/rpc/rpc/src/eth/api/call.rs b/crates/rpc/rpc/src/eth/api/call.rs index 9eca150e4..60cb62bd6 100644 --- a/crates/rpc/rpc/src/eth/api/call.rs +++ b/crates/rpc/rpc/src/eth/api/call.rs @@ -7,7 +7,7 @@ use crate::{ EthApi, }; use reth_primitives::{AccessList, Address, BlockId, Bytes, TransactionKind, U128, U256}; -use reth_provider::{BlockProvider, StateProvider, StateProviderFactory}; +use reth_provider::{BlockProvider, EvmEnvProvider, StateProvider, StateProviderFactory}; use reth_revm::database::{State, SubState}; use reth_rpc_types::CallRequest; use revm::{ @@ -20,7 +20,7 @@ pub(crate) const MIN_TRANSACTION_GAS: U256 = Uint::from_limbs([21_000, 0, 0, 0]) impl EthApi where - Client: BlockProvider + StateProviderFactory + 'static, + Client: BlockProvider + StateProviderFactory + EvmEnvProvider + 'static, { /// Executes the call request at the given [BlockId] pub(crate) fn call_at( diff --git a/crates/rpc/rpc/src/eth/api/mod.rs b/crates/rpc/rpc/src/eth/api/mod.rs index 4d635cf68..960c19d4b 100644 --- a/crates/rpc/rpc/src/eth/api/mod.rs +++ b/crates/rpc/rpc/src/eth/api/mod.rs @@ -10,7 +10,7 @@ use reth_network_api::NetworkInfo; use reth_primitives::{ Address, BlockId, BlockNumberOrTag, ChainInfo, TransactionSigned, H256, U64, }; -use reth_provider::{BlockProvider, StateProviderFactory}; +use reth_provider::{BlockProvider, EvmEnvProvider, StateProviderFactory}; use std::num::NonZeroUsize; use crate::eth::error::EthResult; @@ -97,7 +97,7 @@ impl EthApi { impl EthApi where - Client: BlockProvider + StateProviderFactory + 'static, + Client: BlockProvider + StateProviderFactory + EvmEnvProvider + 'static, { fn convert_block_number(&self, num: BlockNumberOrTag) -> Result> { self.client().convert_block_number(num) @@ -176,7 +176,7 @@ where impl EthApiSpec for EthApi where Pool: TransactionPool + Clone + 'static, - Client: BlockProvider + StateProviderFactory + 'static, + Client: BlockProvider + StateProviderFactory + EvmEnvProvider + 'static, Network: NetworkInfo + 'static, { /// Returns the current ethereum protocol version. diff --git a/crates/rpc/rpc/src/eth/api/server.rs b/crates/rpc/rpc/src/eth/api/server.rs index 75edc235f..1e3820178 100644 --- a/crates/rpc/rpc/src/eth/api/server.rs +++ b/crates/rpc/rpc/src/eth/api/server.rs @@ -11,7 +11,7 @@ use reth_primitives::{ rpc::transaction::eip2930::AccessListWithGasUsed, Address, BlockId, BlockNumberOrTag, Bytes, Header, H256, H64, U256, U64, }; -use reth_provider::{BlockProvider, HeaderProvider, StateProviderFactory}; +use reth_provider::{BlockProvider, EvmEnvProvider, HeaderProvider, StateProviderFactory}; use reth_rpc_api::EthApiServer; use reth_rpc_types::{ CallRequest, EIP1186AccountProofResponse, FeeHistory, FeeHistoryCacheItem, Index, RichBlock, @@ -26,7 +26,7 @@ impl EthApiServer for EthApi where Self: EthApiSpec, Pool: TransactionPool + 'static, - Client: BlockProvider + HeaderProvider + StateProviderFactory + 'static, + Client: BlockProvider + HeaderProvider + StateProviderFactory + EvmEnvProvider + 'static, Network: 'static, { /// Handler for: `eth_protocolVersion` diff --git a/crates/rpc/rpc/src/eth/api/state.rs b/crates/rpc/rpc/src/eth/api/state.rs index 9c398af87..935615ea4 100644 --- a/crates/rpc/rpc/src/eth/api/state.rs +++ b/crates/rpc/rpc/src/eth/api/state.rs @@ -5,11 +5,11 @@ use crate::{ EthApi, }; use reth_primitives::{Address, BlockId, Bytes, H256, U256}; -use reth_provider::{BlockProvider, StateProvider, StateProviderFactory}; +use reth_provider::{BlockProvider, EvmEnvProvider, StateProvider, StateProviderFactory}; impl EthApi where - Client: BlockProvider + StateProviderFactory + 'static, + Client: BlockProvider + StateProviderFactory + EvmEnvProvider + 'static, { pub(crate) fn get_code(&self, address: Address, block_id: Option) -> EthResult { let state = diff --git a/crates/rpc/rpc/src/eth/api/transactions.rs b/crates/rpc/rpc/src/eth/api/transactions.rs index aa031f43c..e33e64597 100644 --- a/crates/rpc/rpc/src/eth/api/transactions.rs +++ b/crates/rpc/rpc/src/eth/api/transactions.rs @@ -5,7 +5,7 @@ use crate::{ EthApi, }; use reth_primitives::{Bytes, FromRecoveredTransaction, TransactionSigned, H256}; -use reth_provider::{BlockProvider, StateProviderFactory}; +use reth_provider::{BlockProvider, EvmEnvProvider, StateProviderFactory}; use reth_rlp::Decodable; use reth_rpc_types::TransactionRequest; use reth_transaction_pool::{TransactionOrigin, TransactionPool}; @@ -13,7 +13,7 @@ use reth_transaction_pool::{TransactionOrigin, TransactionPool}; impl EthApi where Pool: TransactionPool + 'static, - Client: BlockProvider + StateProviderFactory + 'static, + Client: BlockProvider + StateProviderFactory + EvmEnvProvider + 'static, Network: 'static, { pub(crate) async fn send_transaction(&self, _request: TransactionRequest) -> EthResult { diff --git a/crates/rpc/rpc/src/eth/filter.rs b/crates/rpc/rpc/src/eth/filter.rs index 3942a5fd4..edaf73c97 100644 --- a/crates/rpc/rpc/src/eth/filter.rs +++ b/crates/rpc/rpc/src/eth/filter.rs @@ -11,7 +11,7 @@ use reth_primitives::{ filter::{Filter, FilterBlockOption, FilteredParams}, Block, U256, }; -use reth_provider::BlockProvider; +use reth_provider::{BlockProvider, EvmEnvProvider}; use reth_rpc_api::EthFilterApiServer; use reth_rpc_types::{FilterChanges, FilterId, Log}; use reth_transaction_pool::TransactionPool; @@ -51,7 +51,7 @@ impl EthFilter { #[async_trait] impl EthFilterApiServer for EthFilter where - Client: BlockProvider + 'static, + Client: BlockProvider + EvmEnvProvider + 'static, Pool: TransactionPool + 'static, { async fn new_filter(&self, filter: Filter) -> RpcResult { @@ -172,7 +172,7 @@ struct EthFilterInner { impl EthFilterInner where - Client: BlockProvider + 'static, + Client: BlockProvider + EvmEnvProvider + 'static, Pool: TransactionPool + 'static, { /// Installs a new filter and returns the new identifier. diff --git a/crates/rpc/rpc/src/eth/pubsub.rs b/crates/rpc/rpc/src/eth/pubsub.rs index 93a84fd88..e4a9a5f14 100644 --- a/crates/rpc/rpc/src/eth/pubsub.rs +++ b/crates/rpc/rpc/src/eth/pubsub.rs @@ -3,7 +3,7 @@ use jsonrpsee::{types::SubscriptionResult, SubscriptionSink}; use reth_interfaces::events::ChainEventSubscriptions; use reth_primitives::{rpc::FilteredParams, TxHash}; -use reth_provider::BlockProvider; +use reth_provider::{BlockProvider, EvmEnvProvider}; use reth_rpc_api::EthPubSubApiServer; use reth_rpc_types::{ pubsub::{Params, SubscriptionKind, SubscriptionResult as EthSubscriptionResult}, @@ -50,7 +50,7 @@ impl EthPubSub { impl EthPubSubApiServer for EthPubSub where - Client: BlockProvider + Clone + 'static, + Client: BlockProvider + EvmEnvProvider + Clone + 'static, Pool: TransactionPool + 'static, Events: ChainEventSubscriptions + Clone + 'static, { @@ -78,7 +78,7 @@ async fn handle_accepted( kind: SubscriptionKind, params: Option, ) where - Client: BlockProvider + 'static, + Client: BlockProvider + EvmEnvProvider + 'static, Pool: TransactionPool + 'static, Events: ChainEventSubscriptions + 'static, { @@ -141,7 +141,7 @@ where impl EthPubSubInner where - Client: BlockProvider + 'static, + Client: BlockProvider + EvmEnvProvider + 'static, Events: ChainEventSubscriptions + 'static, { /// Returns a stream that yields all new RPC blocks.