From ea11461126229a75532bc96d97e615d3b47ea343 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Thu, 9 Mar 2023 21:51:35 +0100 Subject: [PATCH] chore(rpc): add required fields to Trace handler (#1683) --- crates/rpc/rpc-builder/src/lib.rs | 5 ++++- crates/rpc/rpc/src/trace.rs | 27 +++++++++++++++++---------- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/crates/rpc/rpc-builder/src/lib.rs b/crates/rpc/rpc-builder/src/lib.rs index c09caf4ca6..a9837adff9 100644 --- a/crates/rpc/rpc-builder/src/lib.rs +++ b/crates/rpc/rpc-builder/src/lib.rs @@ -559,6 +559,7 @@ where namespaces: impl Iterator, ) -> Vec { let eth_api = self.eth_api(); + let eth_cache = self.eth_cache(); namespaces .map(|namespace| { self.modules @@ -572,7 +573,9 @@ where RethRpcModule::Net => { NetApi::new(self.network.clone(), eth_api.clone()).into_rpc().into() } - RethRpcModule::Trace => TraceApi::new().into_rpc().into(), + RethRpcModule::Trace => { + TraceApi::new(self.client.clone(), eth_cache.clone()).into_rpc().into() + } RethRpcModule::Web3 => Web3Api::new(self.network.clone()).into_rpc().into(), }) .clone() diff --git a/crates/rpc/rpc/src/trace.rs b/crates/rpc/rpc/src/trace.rs index 962129fbd1..2767d6bf99 100644 --- a/crates/rpc/rpc/src/trace.rs +++ b/crates/rpc/rpc/src/trace.rs @@ -1,7 +1,8 @@ -use crate::result::internal_rpc_err; +use crate::{eth::cache::EthStateCache, result::internal_rpc_err}; use async_trait::async_trait; use jsonrpsee::core::RpcResult as Result; use reth_primitives::{BlockId, Bytes, H256}; +use reth_provider::{BlockProvider, EvmEnvProvider, StateProviderFactory}; use reth_rpc_api::TraceApiServer; use reth_rpc_types::{ trace::{filter::TraceFilter, parity::*}, @@ -12,22 +13,28 @@ use std::collections::HashSet; /// `trace` API implementation. /// /// This type provides the functionality for handling `trace` related requests. -#[non_exhaustive] -pub struct TraceApi {} +#[derive(Clone)] +pub struct TraceApi { + /// The client that can interact with the chain. + client: Client, + /// The async cache frontend for eth related data + eth_cache: EthStateCache, +} // === impl TraceApi === -impl TraceApi { +impl TraceApi { /// Create a new instance of the [TraceApi] - #[allow(clippy::new_without_default)] - // TODO add necessary types - pub fn new() -> Self { - Self {} + pub fn new(client: Client, eth_cache: EthStateCache) -> Self { + Self { client, eth_cache } } } #[async_trait] -impl TraceApiServer for TraceApi { +impl TraceApiServer for TraceApi +where + Client: BlockProvider + StateProviderFactory + EvmEnvProvider + 'static, +{ async fn call( &self, _call: CallRequest, @@ -91,7 +98,7 @@ impl TraceApiServer for TraceApi { } } -impl std::fmt::Debug for TraceApi { +impl std::fmt::Debug for TraceApi { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.debug_struct("TraceApi").finish_non_exhaustive() }