cfx_execute_helper/observer/
mod.rs

1pub mod exec_tracer;
2pub mod gasman;
3mod utils;
4
5use exec_tracer::ExecTracer;
6use gasman::GasMan;
7
8use cfx_executor::{
9    executive_observer::{AsTracer, DrainTrace, TracerTrait},
10    machine::Machine,
11};
12use cfx_vm_tracer_derive::{AsTracer, DrainTrace};
13use std::sync::Arc;
14
15use alloy_rpc_types_trace::geth::GethDebugTracingOptions;
16use geth_tracer::{GethTracer, TxExecContext};
17
18#[derive(AsTracer, DrainTrace)]
19pub struct Observer {
20    pub tracer: Option<ExecTracer>, // parity tracer
21    pub gas_man: Option<GasMan>,
22    pub geth_tracer: Option<GethTracer>,
23}
24
25impl Observer {
26    pub fn with_tracing() -> Self {
27        Observer {
28            tracer: Some(ExecTracer::default()),
29            gas_man: None,
30            geth_tracer: None,
31        }
32    }
33
34    pub fn with_no_tracing() -> Self {
35        Observer {
36            tracer: None,
37            gas_man: None,
38            geth_tracer: None,
39        }
40    }
41
42    pub fn virtual_call() -> Self {
43        Observer {
44            tracer: Some(ExecTracer::default()),
45            gas_man: Some(GasMan::default()),
46            geth_tracer: None,
47        }
48    }
49
50    pub fn geth_tracer(
51        tx_exec_context: TxExecContext, machine: Arc<Machine>,
52        opts: GethDebugTracingOptions,
53    ) -> Self {
54        Observer {
55            tracer: None,
56            gas_man: None,
57            geth_tracer: Some(GethTracer::new(tx_exec_context, machine, opts)),
58        }
59    }
60}