From d848668fb23d2c55a57821efb6a7093a29820ec7 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Mon, 3 Jul 2023 15:21:17 +0200 Subject: [PATCH] fix(rpc): fix parity tracing config (#3549) --- .../revm-inspectors/src/tracing/config.rs | 10 ++++++ crates/rpc/rpc/src/trace.rs | 35 +++++++++++++++++-- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/crates/revm/revm-inspectors/src/tracing/config.rs b/crates/revm/revm-inspectors/src/tracing/config.rs index 2a0cb69bd6..521786451a 100644 --- a/crates/revm/revm-inspectors/src/tracing/config.rs +++ b/crates/revm/revm-inspectors/src/tracing/config.rs @@ -103,6 +103,16 @@ impl TracingInspectorConfig { self } + /// Configure whether the tracer should record steps and state diffs. + /// + /// This is a convenience method for setting both [TracingInspectorConfig::set_steps] and + /// [TracingInspectorConfig::set_state_diffs] since tracking state diffs requires steps tracing. + pub fn set_steps_and_state_diffs(mut self, steps_and_diffs: bool) -> Self { + self.record_steps = steps_and_diffs; + self.record_state_diff = steps_and_diffs; + self + } + /// Configure whether the tracer should record logs pub fn set_record_logs(mut self, record_logs: bool) -> Self { self.record_logs = record_logs; diff --git a/crates/rpc/rpc/src/trace.rs b/crates/rpc/rpc/src/trace.rs index 37047e21f5..3158f6d0b2 100644 --- a/crates/rpc/rpc/src/trace.rs +++ b/crates/rpc/rpc/src/trace.rs @@ -615,10 +615,12 @@ struct TraceApiInner { } /// Returns the [TracingInspectorConfig] depending on the enabled [TraceType]s +#[inline] fn tracing_config(trace_types: &HashSet) -> TracingInspectorConfig { - TracingInspectorConfig::default_parity() - .set_state_diffs(trace_types.contains(&TraceType::StateDiff)) - .set_steps(trace_types.contains(&TraceType::VmTrace)) + let needs_diff = trace_types.contains(&TraceType::StateDiff); + let needs_vm_trace = trace_types.contains(&TraceType::VmTrace); + let needs_steps = needs_vm_trace || needs_diff; + TracingInspectorConfig::default_parity().set_steps(needs_steps).set_state_diffs(needs_diff) } /// Helper to construct a [`LocalizedTransactionTrace`] that describes a reward to the block @@ -637,3 +639,30 @@ fn reward_trace(header: &SealedHeader, reward: RewardAction) -> LocalizedTransac }, } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_parity_config() { + let mut s = HashSet::new(); + s.insert(TraceType::StateDiff); + let config = tracing_config(&s); + assert!(config.record_steps); + assert!(config.record_state_diff); + + let mut s = HashSet::new(); + s.insert(TraceType::VmTrace); + let config = tracing_config(&s); + assert!(config.record_steps); + assert!(!config.record_state_diff); + + let mut s = HashSet::new(); + s.insert(TraceType::VmTrace); + s.insert(TraceType::StateDiff); + let config = tracing_config(&s); + assert!(config.record_steps); + assert!(config.record_state_diff); + } +}