1#![cfg_attr(not(test), warn(unused_crate_dependencies))]
6#![cfg_attr(docsrs, feature(doc_cfg))]
7
8#[cfg(feature = "optimism")]
9use op_alloy_rpc_types as _;
10
11use crate::constants::DEFAULT_CREATE2_DEPLOYER;
12use alloy_primitives::{Address, map::HashMap};
13use auto_impl::auto_impl;
14use revm::{Inspector, inspector::NoOpInspector, interpreter::CreateInputs};
15use revm_inspectors::access_list::AccessListInspector;
16
17pub type Breakpoints = HashMap<char, (Address, usize)>;
19
20#[macro_use]
21extern crate tracing;
22
23pub mod abi {
24 pub use foundry_cheatcodes_spec::Vm;
25 pub use foundry_evm_abi::*;
26}
27
28pub mod env;
29pub use env::*;
30use foundry_evm_networks::NetworkConfigs;
31
32pub mod backend;
33pub mod buffer;
34pub mod bytecode;
35pub mod constants;
36pub mod decode;
37pub mod evm;
38pub mod fork;
39pub mod hardfork;
40pub mod ic;
41pub mod opts;
42pub mod precompiles;
43pub mod state_snapshot;
44pub mod tempo;
45pub mod utils;
46
47#[auto_impl(&mut, Box)]
53pub trait InspectorExt {
54 fn should_use_create2_factory(&mut self, _depth: usize, _inputs: &CreateInputs) -> bool {
59 false
60 }
61
62 fn console_log(&mut self, msg: &str) {
64 let _ = msg;
65 }
66
67 fn get_networks(&self) -> NetworkConfigs {
69 NetworkConfigs::default()
70 }
71
72 fn create2_deployer(&self) -> Address {
74 DEFAULT_CREATE2_DEPLOYER
75 }
76}
77
78pub trait FoundryInspectorExt<CTX: FoundryContextExt>: Inspector<CTX> + InspectorExt {}
82
83impl<CTX: FoundryContextExt, T> FoundryInspectorExt<CTX> for T where T: Inspector<CTX> + InspectorExt
84{}
85
86impl InspectorExt for NoOpInspector {}
87
88impl InspectorExt for AccessListInspector {}