@@ -15,6 +15,7 @@ use foundry_common::{
1515 contracts:: { ContractsByAddress , ContractsByArtifact } ,
1616 shell,
1717} ;
18+ use foundry_config:: NamedChain :: SuperpositionTestnet ;
1819use revm:: bytecode:: opcode:: OpCode ;
1920use revm_inspectors:: tracing:: {
2021 OpcodeFilter ,
@@ -210,27 +211,34 @@ pub fn render_trace_arena_inner(
210211 }
211212
212213 // Remove overlapping decoded trace data
213- let mut cloned_arena = arena. clone ( ) ;
214- for node in cloned_arena. nodes_mut ( ) {
215- for step in & mut node. trace . steps {
216- if step. decoded . is_some ( ) {
217- step. storage_change = None ;
214+ let mut resolved = arena. resolve_arena ( ) ;
215+
216+ let mut tempo_changes = String :: new ( ) ;
217+ if with_storage_changes {
218+ append_tempo_channel_storage_decodes ( & mut tempo_changes, & resolved) ;
219+ }
220+
221+ let resolved_mut = resolved. to_mut ( ) ;
222+ if with_storage_changes {
223+ for node in resolved_mut. nodes_mut ( ) {
224+ for step in & mut node. trace . steps {
225+ if step. decoded . is_some ( ) {
226+ step. storage_change = None ;
227+ }
218228 }
219229 }
220230 }
221231
222- let resolved = cloned_arena. resolve_arena ( ) ;
223232 let mut w = TraceWriter :: new ( Vec :: < u8 > :: new ( ) )
224233 . color_cheatcodes ( true )
225234 . use_colors ( convert_color_choice ( shell:: color_choice ( ) ) )
226235 . write_bytecodes ( with_bytecodes)
227236 . with_storage_changes ( with_storage_changes) ;
228- w. write_arena ( & resolved ) . expect ( "Failed to write traces" ) ;
237+ w. write_arena ( & resolved_mut ) . expect ( "Failed to write traces" ) ;
229238 let mut rendered =
230239 String :: from_utf8 ( w. into_writer ( ) ) . expect ( "trace writer wrote invalid UTF-8" ) ;
231- if with_storage_changes {
232- append_tempo_channel_storage_decodes ( & mut rendered, & arena. resolve_arena ( ) ) ;
233- }
240+ rendered. push_str ( & tempo_changes) ;
241+
234242 rendered
235243}
236244
0 commit comments