From 64c8dd259c79690bb20b00381541a4b83d20e30a Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Mon, 7 Aug 2023 19:21:52 +0200 Subject: [PATCH] fix: record push stack as vec u256 (#4077) --- crates/revm/revm-inspectors/src/tracing/builder/parity.rs | 2 +- crates/revm/revm-inspectors/src/tracing/mod.rs | 5 +++-- crates/revm/revm-inspectors/src/tracing/types.rs | 4 ++-- crates/rpc/rpc-types/src/eth/trace/parity.rs | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/crates/revm/revm-inspectors/src/tracing/builder/parity.rs b/crates/revm/revm-inspectors/src/tracing/builder/parity.rs index b70173a8db..9ecddcfd45 100644 --- a/crates/revm/revm-inspectors/src/tracing/builder/parity.rs +++ b/crates/revm/revm-inspectors/src/tracing/builder/parity.rs @@ -353,7 +353,7 @@ impl ParityTraceBuilder { let maybe_execution = Some(VmExecutedOperation { used: step.gas_remaining, - push: step.new_stack.into_iter().map(|new_stack| new_stack.into()).collect(), + push: step.push_stack.clone().unwrap_or_default(), mem: maybe_memory, store: maybe_storage, }); diff --git a/crates/revm/revm-inspectors/src/tracing/mod.rs b/crates/revm/revm-inspectors/src/tracing/mod.rs index be6af4b53e..48f772ebde 100644 --- a/crates/revm/revm-inspectors/src/tracing/mod.rs +++ b/crates/revm/revm-inspectors/src/tracing/mod.rs @@ -275,7 +275,7 @@ impl TracingInspector { op, contract: interp.contract.address, stack, - new_stack: None, + push_stack: None, memory, memory_size: interp.memory.len(), gas_remaining: self.gas_inspector.gas_remaining(), @@ -302,7 +302,8 @@ impl TracingInspector { let step = &mut self.traces.arena[trace_idx].trace.steps[step_idx]; if interp.stack.len() > step.stack.len() { - step.new_stack = interp.stack.data().last().copied(); + // if the stack grew, we need to record the new values + step.push_stack = Some(interp.stack.data()[step.stack.len()..].to_vec()); } if self.config.record_memory_snapshots { diff --git a/crates/revm/revm-inspectors/src/tracing/types.rs b/crates/revm/revm-inspectors/src/tracing/types.rs index 0aee843053..51fb1d21cb 100644 --- a/crates/revm/revm-inspectors/src/tracing/types.rs +++ b/crates/revm/revm-inspectors/src/tracing/types.rs @@ -538,8 +538,8 @@ pub(crate) struct CallTraceStep { pub(crate) contract: Address, /// Stack before step execution pub(crate) stack: Stack, - /// The new stack item placed by this step if any - pub(crate) new_stack: Option, + /// The new stack items placed by this step if any + pub(crate) push_stack: Option>, /// All allocated memory in a step /// /// This will be empty if memory capture is disabled diff --git a/crates/rpc/rpc-types/src/eth/trace/parity.rs b/crates/rpc/rpc-types/src/eth/trace/parity.rs index 60de0b5d15..aa2732732f 100644 --- a/crates/rpc/rpc-types/src/eth/trace/parity.rs +++ b/crates/rpc/rpc-types/src/eth/trace/parity.rs @@ -314,7 +314,7 @@ pub struct VmExecutedOperation { /// The total gas used. pub used: u64, /// The stack item placed, if any. - pub push: Vec, + pub push: Vec, /// If altered, the memory delta. pub mem: Option, /// The altered storage value, if any.