cfx_execute_helper/observer/
mod.rs1pub mod access_list;
2pub mod exec_tracer;
3pub mod gasman;
4mod utils;
5
6use access_list::AccessListInspector;
7use exec_tracer::ExecTracer;
8use gasman::GasMan;
9
10use cfx_executor::{
11 executive_observer::{AsTracer, DrainTrace, TracerTrait},
12 machine::Machine,
13};
14use cfx_vm_tracer_derive::{AsTracer, DrainTrace};
15use std::sync::Arc;
16
17use alloy_rpc_types_trace::geth::GethDebugTracingOptions;
18use cfx_types::Address;
19use geth_tracer::{GethTracer, TxExecContext};
20use primitives::AccessList;
21use std::collections::HashSet;
22
23#[derive(AsTracer, DrainTrace)]
24pub struct Observer {
25 pub tracer: Option<ExecTracer>, pub gas_man: Option<GasMan>,
27 pub geth_tracer: Option<GethTracer>,
28 pub access_list_inspector: Option<AccessListInspector>,
29}
30
31impl Observer {
32 pub fn with_tracing() -> Self {
33 Observer {
34 tracer: Some(ExecTracer::default()),
35 gas_man: None,
36 geth_tracer: None,
37 access_list_inspector: None,
38 }
39 }
40
41 pub fn with_no_tracing() -> Self {
42 Observer {
43 tracer: None,
44 gas_man: None,
45 geth_tracer: None,
46 access_list_inspector: None,
47 }
48 }
49
50 pub fn virtual_call() -> Self {
51 Observer {
52 tracer: Some(ExecTracer::default()),
53 gas_man: Some(GasMan::default()),
54 geth_tracer: None,
55 access_list_inspector: None,
56 }
57 }
58
59 pub fn geth_tracer(
60 tx_exec_context: TxExecContext, machine: Arc<Machine>,
61 opts: GethDebugTracingOptions,
62 ) -> Self {
63 Observer {
64 tracer: None,
65 gas_man: None,
66 geth_tracer: Some(GethTracer::new(tx_exec_context, machine, opts)),
67 access_list_inspector: None,
68 }
69 }
70
71 pub fn access_list_inspector(
72 access_list: AccessList, excludes: HashSet<Address>,
73 ) -> Self {
74 Observer {
75 tracer: None,
76 gas_man: None,
77 geth_tracer: None,
78 access_list_inspector: Some(AccessListInspector::new(
79 access_list,
80 excludes,
81 )),
82 }
83 }
84}