cast/cmd/mod.rs
1//! `cast` subcommands.
2//!
3//! All subcommands should respect the `foundry_config::Config`.
4//! If a subcommand accepts values that are supported by the `Config`, then the subcommand should
5//! implement `figment::Provider` which allows the subcommand to override the config's defaults, see
6//! [`foundry_config::Config`].
7
8use eyre::Result;
9use foundry_cli::utils::load_config_from_provider;
10use foundry_config::{Config, figment::Figment};
11use foundry_evm::opts::EvmOpts;
12
13/// Loads Cast's config and applies its normalized network to the EVM options.
14pub(crate) fn load_cast_config_and_evm_opts(figment: Figment) -> Result<(Box<Config>, EvmOpts)> {
15 let config = Box::new(load_config_from_provider(figment.clone())?);
16 let mut evm_opts = figment.extract::<EvmOpts>()?;
17 evm_opts.networks = config.networks;
18 Ok((config, evm_opts))
19}
20
21pub mod access_list;
22pub mod artifact;
23mod auth;
24pub mod b2e_payload;
25pub mod batch_mktx;
26pub mod batch_send;
27pub mod bind;
28pub mod call;
29pub mod call_overrides;
30pub mod constructor_args;
31pub mod create2;
32pub mod creation_code;
33#[cfg(feature = "optimism")]
34pub mod da_estimate;
35pub mod erc20;
36pub mod estimate;
37pub mod events;
38pub mod find_block;
39pub mod interface;
40pub mod keychain;
41pub mod logs;
42pub(crate) mod miner;
43pub mod mktx;
44pub mod receive_policy;
45pub mod rpc;
46pub mod run;
47pub mod send;
48pub mod storage;
49pub mod storage_credits;
50pub mod tempo;
51pub(crate) mod tempo_policy_args;
52pub mod tip20;
53pub mod tip403;
54pub mod trace;
55pub mod txpool;
56pub mod vaddr;
57pub mod wallet;
58
59#[cfg(all(test, feature = "monad"))]
60mod tests {
61 use super::*;
62
63 #[test]
64 fn normalized_hardfork_network_is_applied_to_evm_opts() {
65 let figment = Config::figment().merge(("hardfork", "monad:MonadNine"));
66 let (config, evm_opts) = load_cast_config_and_evm_opts(figment).unwrap();
67
68 assert!(config.networks.is_monad());
69 assert!(evm_opts.networks.is_monad());
70 }
71}