cfx_execute_helper/observer/
mod.rs1pub 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>, 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}