From de01f08d90e7625b511cb451bfda77716cde4146 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Sat, 28 Oct 2023 19:23:15 +0200 Subject: [PATCH] fix: use correct trace_call params (#5214) --- crates/rpc/rpc-api/src/trace.rs | 14 ++++++++--- .../rpc-types/src/eth/trace/tracerequest.rs | 8 +++---- crates/rpc/rpc/src/trace.rs | 24 ++++++++++++------- examples/trace-transaction-cli/src/main.rs | 4 ++-- 4 files changed, 33 insertions(+), 17 deletions(-) diff --git a/crates/rpc/rpc-api/src/trace.rs b/crates/rpc/rpc-api/src/trace.rs index a05a7bd9a..557016a9a 100644 --- a/crates/rpc/rpc-api/src/trace.rs +++ b/crates/rpc/rpc-api/src/trace.rs @@ -1,8 +1,9 @@ use jsonrpsee::{core::RpcResult, proc_macros::rpc}; use reth_primitives::{BlockId, Bytes, B256}; use reth_rpc_types::{ - trace::{filter::TraceFilter, parity::*, tracerequest::TraceRequest}, - CallRequest, Index, + state::StateOverride, + trace::{filter::TraceFilter, parity::*}, + BlockOverrides, CallRequest, Index, }; use std::collections::HashSet; @@ -12,7 +13,14 @@ use std::collections::HashSet; pub trait TraceApi { /// Executes the given call and returns a number of possible traces for it. #[method(name = "call")] - async fn trace_call(&self, trace_request: TraceRequest) -> RpcResult; + async fn trace_call( + &self, + call: CallRequest, + trace_types: HashSet, + block_id: Option, + state_overrides: Option, + block_overrides: Option>, + ) -> RpcResult; /// Performs multiple call traces on top of the same block. i.e. transaction n will be executed /// on top of a pending block with all n-1 transactions applied (traced) first. Allows to trace diff --git a/crates/rpc/rpc-types/src/eth/trace/tracerequest.rs b/crates/rpc/rpc-types/src/eth/trace/tracerequest.rs index abf4e8777..3c2c2563a 100644 --- a/crates/rpc/rpc-types/src/eth/trace/tracerequest.rs +++ b/crates/rpc/rpc-types/src/eth/trace/tracerequest.rs @@ -7,9 +7,9 @@ use crate::{ use serde::{Deserialize, Serialize}; use std::collections::HashSet; -/// Trace Request builder style function implementation +/// Container type for `trace_call` arguments #[derive(Debug, Serialize, Deserialize)] -pub struct TraceRequest { +pub struct TraceCallRequest { /// call request object pub call: CallRequest, /// trace types @@ -22,8 +22,8 @@ pub struct TraceRequest { pub block_overrides: Option>, } -impl TraceRequest { - /// Returns a new [`TraceRequest`] given a [`CallRequest`] and [`HashSet`] +impl TraceCallRequest { + /// Returns a new [`TraceCallRequest`] given a [`CallRequest`] and [`HashSet`] pub fn new(call: CallRequest) -> Self { Self { call, diff --git a/crates/rpc/rpc/src/trace.rs b/crates/rpc/rpc/src/trace.rs index 5239c8ec6..d8190d7c9 100644 --- a/crates/rpc/rpc/src/trace.rs +++ b/crates/rpc/rpc/src/trace.rs @@ -20,8 +20,9 @@ use reth_revm::{ }; use reth_rpc_api::TraceApiServer; use reth_rpc_types::{ - trace::{filter::TraceFilter, parity::*, tracerequest::TraceRequest}, - BlockError, CallRequest, Index, + state::StateOverride, + trace::{filter::TraceFilter, parity::*, tracerequest::TraceCallRequest}, + BlockError, BlockOverrides, CallRequest, Index, }; use revm::{db::CacheDB, primitives::Env}; use revm_primitives::db::DatabaseCommit; @@ -65,10 +66,8 @@ where Eth: EthTransactions + 'static, { /// Executes the given call and returns a number of possible traces for it. - pub async fn trace_call(&self, trace_request: TraceRequest) -> EthResult { - let at = trace_request - .block_id - .unwrap_or(reth_rpc_types::BlockId::Number(reth_rpc_types::BlockNumberOrTag::Latest)); + pub async fn trace_call(&self, trace_request: TraceCallRequest) -> EthResult { + let at = trace_request.block_id.unwrap_or(BlockId::Number(BlockNumberOrTag::Latest)); let config = tracing_config(&trace_request.trace_types); let overrides = EvmOverrides::new(trace_request.state_overrides, trace_request.block_overrides); @@ -435,9 +434,18 @@ where /// Executes the given call and returns a number of possible traces for it. /// /// Handler for `trace_call` - async fn trace_call(&self, trace_request: TraceRequest) -> Result { + async fn trace_call( + &self, + call: CallRequest, + trace_types: HashSet, + block_id: Option, + state_overrides: Option, + block_overrides: Option>, + ) -> Result { let _permit = self.acquire_trace_permit().await; - Ok(TraceApi::trace_call(self, trace_request).await?) + let request = + TraceCallRequest { call, trace_types, block_id, state_overrides, block_overrides }; + Ok(TraceApi::trace_call(self, request).await?) } /// Handler for `trace_callMany` diff --git a/examples/trace-transaction-cli/src/main.rs b/examples/trace-transaction-cli/src/main.rs index 6c77d779c..74637aa83 100644 --- a/examples/trace-transaction-cli/src/main.rs +++ b/examples/trace-transaction-cli/src/main.rs @@ -19,7 +19,7 @@ use reth::{ primitives::{Address, IntoRecoveredTransaction}, rpc::{ compat::transaction::transaction_to_call_request, - types::trace::{parity::TraceType, tracerequest::TraceRequest}, + types::trace::{parity::TraceType, tracerequest::TraceCallRequest}, }, tasks::TaskSpawner, transaction_pool::TransactionPool, @@ -80,7 +80,7 @@ impl RethNodeCommandConfig for RethCliTxpoolExt { let callrequest = transaction_to_call_request(tx.to_recovered_transaction()); let tracerequest = - TraceRequest::new(callrequest).with_trace_type(TraceType::Trace); + TraceCallRequest::new(callrequest).with_trace_type(TraceType::Trace); if let Ok(trace_result) = traceapi.trace_call(tracerequest).await { println!( "trace result for transaction : {:?} is {:?}",