1#![cfg_attr(not(test), warn(unused_crate_dependencies))]
6#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
7
8use crate::constants::DEFAULT_CREATE2_DEPLOYER;
9use alloy_evm::eth::EthEvmContext;
10use alloy_primitives::Address;
11use auto_impl::auto_impl;
12use backend::DatabaseExt;
13use revm::{Inspector, inspector::NoOpInspector, interpreter::CreateInputs};
14use revm_inspectors::access_list::AccessListInspector;
15
16#[macro_use]
17extern crate tracing;
18
19pub mod abi {
20 pub use foundry_cheatcodes_spec::Vm;
21 pub use foundry_evm_abi::*;
22}
23
24pub mod env;
25pub use env::*;
26use foundry_evm_networks::NetworkConfigs;
27
28pub mod backend;
29pub mod buffer;
30pub mod constants;
31pub mod decode;
32pub mod either_evm;
33pub mod evm;
34pub mod fork;
35pub mod ic;
36pub mod opts;
37pub mod precompiles;
38pub mod state_snapshot;
39pub mod utils;
40
41#[auto_impl(&mut, Box)]
44pub trait InspectorExt: for<'a> Inspector<EthEvmContext<&'a mut dyn DatabaseExt>> {
45 fn should_use_create2_factory(
50 &mut self,
51 _context: &mut EthEvmContext<&mut dyn DatabaseExt>,
52 _inputs: &CreateInputs,
53 ) -> bool {
54 false
55 }
56
57 fn console_log(&mut self, msg: &str) {
59 let _ = msg;
60 }
61
62 fn get_networks(&self) -> NetworkConfigs {
64 NetworkConfigs::default()
65 }
66
67 fn create2_deployer(&self) -> Address {
69 DEFAULT_CREATE2_DEPLOYER
70 }
71}
72
73impl InspectorExt for NoOpInspector {}
74
75impl InspectorExt for AccessListInspector {}