From c4bf5bb8ca271a6055f5af8431fd0bfb4ba79feb Mon Sep 17 00:00:00 2001 From: ZzPoLariszZ <39354078+ZzPoLariszZ@users.noreply.github.com> Date: Thu, 25 Jul 2024 20:32:49 +0100 Subject: [PATCH] fix: gas and gasUsed in trace root only for ParityTrace (#9761) Co-authored-by: Matthias Seitz --- Cargo.lock | 4 ++-- crates/rpc/rpc/src/debug.rs | 30 ++++++++++++++++++++---------- crates/rpc/rpc/src/trace.rs | 24 +++++++++--------------- 3 files changed, 31 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1ba16db4d9..1a9674584e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8905,9 +8905,9 @@ dependencies = [ [[package]] name = "revm-inspectors" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af2dc001e37ac3b061dc9087876aea91e28756c188a97cd99416d23a5562ca73" +checksum = "5296ccad8d7ccbeb6c5a037a57bfe1ff27e81d8c4efbd3ae7df0a554eb1a818a" dependencies = [ "alloy-primitives", "alloy-rpc-types", diff --git a/crates/rpc/rpc/src/debug.rs b/crates/rpc/rpc/src/debug.rs index 30ad448e80..cbf35a7d51 100644 --- a/crates/rpc/rpc/src/debug.rs +++ b/crates/rpc/rpc/src/debug.rs @@ -320,8 +320,9 @@ where .inner .eth_api .spawn_with_call_at(call, at, overrides, move |db, env| { - let (res, _) = this.eth_api().inspect(db, env, &mut inspector)?; + let (res, env) = this.eth_api().inspect(db, env, &mut inspector)?; let frame = inspector + .with_transaction_gas_limit(env.tx.gas_limit) .into_geth_builder() .geth_call_traces(call_config, res.result.gas_used()); Ok(frame.into()) @@ -345,9 +346,10 @@ where // see let db = db.0; - let (res, _) = + let (res, env) = this.eth_api().inspect(&mut *db, env, &mut inspector)?; let frame = inspector + .with_transaction_gas_limit(env.tx.gas_limit) .into_geth_builder() .geth_prestate_traces(&res, prestate_config, db) .map_err(Eth::Error::from_eth_err)?; @@ -415,17 +417,20 @@ where let mut inspector = TracingInspector::new(inspector_config); - let (res, inspector) = self + let (res, tx_gas_limit, inspector) = self .inner .eth_api .spawn_with_call_at(call, at, overrides, move |db, env| { - let (res, _) = this.eth_api().inspect(db, env, &mut inspector)?; - Ok((res, inspector)) + let (res, env) = this.eth_api().inspect(db, env, &mut inspector)?; + Ok((res, env.tx.gas_limit, inspector)) }) .await?; let gas_used = res.result.gas_used(); let return_value = res.result.into_output().unwrap_or_default(); - let frame = inspector.into_geth_builder().geth_traces(gas_used, return_value, config); + let frame = inspector + .with_transaction_gas_limit(tx_gas_limit) + .into_geth_builder() + .geth_traces(gas_used, return_value, config); Ok(frame.into()) } @@ -578,9 +583,10 @@ where TracingInspectorConfig::from_geth_call_config(&call_config), ); - let (res, _) = self.eth_api().inspect(db, env, &mut inspector)?; + let (res, env) = self.eth_api().inspect(db, env, &mut inspector)?; let frame = inspector + .with_transaction_gas_limit(env.tx.gas_limit) .into_geth_builder() .geth_call_traces(call_config, res.result.gas_used()); @@ -594,9 +600,10 @@ where let mut inspector = TracingInspector::new( TracingInspectorConfig::from_geth_prestate_config(&prestate_config), ); - let (res, _) = self.eth_api().inspect(&mut *db, env, &mut inspector)?; + let (res, env) = self.eth_api().inspect(&mut *db, env, &mut inspector)?; let frame = inspector + .with_transaction_gas_limit(env.tx.gas_limit) .into_geth_builder() .geth_prestate_traces(&res, prestate_config, db) .map_err(Eth::Error::from_eth_err)?; @@ -644,10 +651,13 @@ where let mut inspector = TracingInspector::new(inspector_config); - let (res, _) = self.eth_api().inspect(db, env, &mut inspector)?; + let (res, env) = self.eth_api().inspect(db, env, &mut inspector)?; let gas_used = res.result.gas_used(); let return_value = res.result.into_output().unwrap_or_default(); - let frame = inspector.into_geth_builder().geth_traces(gas_used, return_value, config); + let frame = inspector + .with_transaction_gas_limit(env.tx.gas_limit) + .into_geth_builder() + .geth_traces(gas_used, return_value, config); Ok((frame.into(), res.state)) } diff --git a/crates/rpc/rpc/src/trace.rs b/crates/rpc/rpc/src/trace.rs index a69eb2d451..461a1cad5f 100644 --- a/crates/rpc/rpc/src/trace.rs +++ b/crates/rpc/rpc/src/trace.rs @@ -306,17 +306,15 @@ where num.into(), Some(highest_idx), TracingInspectorConfig::default_parity(), - move |tx_info, inspector, res, _, _| { + move |tx_info, inspector, _, _, _| { if let Some(idx) = tx_info.index { if !indices.contains(&idx) { // only record traces for relevant transactions return Ok(None) } } - let traces = inspector - .with_transaction_gas_used(res.gas_used()) - .into_parity_builder() - .into_localized_transaction_traces(tx_info); + let traces = + inspector.into_parity_builder().into_localized_transaction_traces(tx_info); Ok(Some(traces)) }, ); @@ -372,11 +370,9 @@ where .spawn_trace_transaction_in_block( hash, TracingInspectorConfig::default_parity(), - move |tx_info, inspector, res, _| { - let traces = inspector - .with_transaction_gas_used(res.result.gas_used()) - .into_parity_builder() - .into_localized_transaction_traces(tx_info); + move |tx_info, inspector, _, _| { + let traces = + inspector.into_parity_builder().into_localized_transaction_traces(tx_info); Ok(traces) }, ) @@ -391,11 +387,9 @@ where let traces = self.inner.eth_api.trace_block_with( block_id, TracingInspectorConfig::default_parity(), - |tx_info, inspector, res, _, _| { - let traces = inspector - .with_transaction_gas_used(res.gas_used()) - .into_parity_builder() - .into_localized_transaction_traces(tx_info); + |tx_info, inspector, _, _, _| { + let traces = + inspector.into_parity_builder().into_localized_transaction_traces(tx_info); Ok(traces) }, );