pallet_revive/evm/
tracing.rs1use crate::{
18 evm::{CallTrace, Trace},
19 tracing::Tracing,
20 Config,
21};
22
23mod call_tracing;
24pub use call_tracing::*;
25
26mod prestate_tracing;
27pub use prestate_tracing::*;
28
29#[derive(derive_more::From, Debug)]
31pub enum Tracer<T> {
32 CallTracer(CallTracer),
34 PrestateTracer(PrestateTracer<T>),
36}
37
38impl<T: Config> Tracer<T>
39where
40 T::Nonce: Into<u32>,
41{
42 pub fn empty_trace(&self) -> Trace {
44 match self {
45 Tracer::CallTracer(_) => CallTrace::default().into(),
46 Tracer::PrestateTracer(tracer) => tracer.empty_trace().into(),
47 }
48 }
49
50 pub fn as_tracing(&mut self) -> &mut (dyn Tracing + 'static) {
52 match self {
53 Tracer::CallTracer(inner) => inner as &mut dyn Tracing,
54 Tracer::PrestateTracer(inner) => inner as &mut dyn Tracing,
55 }
56 }
57
58 pub fn collect_trace(self) -> Option<Trace> {
60 match self {
61 Tracer::CallTracer(inner) => inner.collect_trace().map(Trace::Call),
62 Tracer::PrestateTracer(inner) => Some(inner.collect_trace().into()),
63 }
64 }
65}