diff --git a/crates/cast/src/cmd/access_list.rs b/crates/cast/src/cmd/access_list.rs index dfb5b7fde22ea..b22afe05946a0 100644 --- a/crates/cast/src/cmd/access_list.rs +++ b/crates/cast/src/cmd/access_list.rs @@ -7,9 +7,10 @@ use alloy_rpc_types::BlockId; use clap::Parser; use eyre::Result; use foundry_cli::{ - opts::{EthereumOpts, TransactionOpts}, + opts::{RpcOpts, TransactionOpts}, utils::{self, LoadConfig}, }; +use foundry_wallets::WalletOpts; use std::str::FromStr; /// CLI arguments for `cast access-list`. @@ -40,16 +41,19 @@ pub struct AccessListArgs { tx: TransactionOpts, #[command(flatten)] - eth: EthereumOpts, + rpc: RpcOpts, + + #[command(flatten)] + wallet: WalletOpts, } impl AccessListArgs { pub async fn run(self) -> Result<()> { - let Self { to, sig, args, tx, eth, block } = self; + let Self { to, sig, args, tx, rpc, wallet, block } = self; - let config = eth.load_config()?; + let config = rpc.load_config()?; let provider = utils::get_provider(&config)?; - let sender = SenderKind::from_wallet_opts(eth.wallet).await?; + let sender = SenderKind::from_wallet_opts(wallet).await?; let (tx, _) = CastTxBuilder::new(&provider, tx, &config) .await? diff --git a/crates/cast/src/cmd/call.rs b/crates/cast/src/cmd/call.rs index 775b31fab0842..9f672d0285683 100644 --- a/crates/cast/src/cmd/call.rs +++ b/crates/cast/src/cmd/call.rs @@ -15,13 +15,13 @@ use alloy_rpc_types::{ use clap::Parser; use eyre::Result; use foundry_cli::{ - opts::{EthereumOpts, TransactionOpts}, + opts::{ChainValueParser, RpcOpts, TransactionOpts}, utils::{self, TraceResult, parse_ether_value}, }; use foundry_common::shell; use foundry_compilers::artifacts::EvmVersion; use foundry_config::{ - Config, + Chain, Config, figment::{ self, Metadata, Profile, value::{Dict, Map}, @@ -32,6 +32,7 @@ use foundry_evm::{ opts::EvmOpts, traces::{InternalTraceMode, TraceMode}, }; +use foundry_wallets::WalletOpts; use itertools::Either; use regex::Regex; use revm::context::TransactionType; @@ -129,7 +130,19 @@ pub struct CallArgs { tx: TransactionOpts, #[command(flatten)] - eth: EthereumOpts, + rpc: RpcOpts, + + #[command(flatten)] + wallet: WalletOpts, + + #[arg( + short, + long, + alias = "chain-id", + env = "CHAIN", + value_parser = ChainValueParser::default(), + )] + pub chain: Option, /// Use current project artifacts for trace decoding. #[arg(long, visible_alias = "la")] @@ -196,7 +209,7 @@ pub enum CallSubcommands { impl CallArgs { pub async fn run(self) -> Result<()> { - let figment = self.eth.rpc.clone().into_figment(self.with_local_artifacts).merge(&self); + let figment = self.rpc.clone().into_figment(self.with_local_artifacts).merge(&self); let evm_opts = figment.extract::()?; let mut config = Config::from_provider(figment)?.sanitized(); let state_overrides = self.get_state_overrides()?; @@ -207,7 +220,6 @@ impl CallArgs { mut sig, mut args, mut tx, - eth, command, block, trace, @@ -218,6 +230,7 @@ impl CallArgs { data, with_local_artifacts, disable_labels, + wallet, .. } = self; @@ -226,7 +239,8 @@ impl CallArgs { } let provider = utils::get_provider(&config)?; - let sender = SenderKind::from_wallet_opts(eth.wallet).await?; + let sender = SenderKind::from_wallet_opts(wallet).await?; + let from = sender.address(); let code = if let Some(CallSubcommands::Create { diff --git a/crates/cast/src/cmd/estimate.rs b/crates/cast/src/cmd/estimate.rs index 7f63acef67dd0..dab992abda269 100644 --- a/crates/cast/src/cmd/estimate.rs +++ b/crates/cast/src/cmd/estimate.rs @@ -6,9 +6,10 @@ use alloy_rpc_types::BlockId; use clap::Parser; use eyre::Result; use foundry_cli::{ - opts::{EthereumOpts, TransactionOpts}, + opts::{RpcOpts, TransactionOpts}, utils::{self, LoadConfig, parse_ether_value}, }; +use foundry_wallets::WalletOpts; use std::str::FromStr; /// CLI arguments for `cast estimate`. @@ -37,6 +38,9 @@ pub struct EstimateArgs { #[arg(long)] cost: bool, + #[command(flatten)] + wallet: WalletOpts, + #[command(subcommand)] command: Option, @@ -44,7 +48,7 @@ pub struct EstimateArgs { tx: TransactionOpts, #[command(flatten)] - eth: EthereumOpts, + rpc: RpcOpts, } #[derive(Debug, Parser)] @@ -74,11 +78,11 @@ pub enum EstimateSubcommands { impl EstimateArgs { pub async fn run(self) -> Result<()> { - let Self { to, mut sig, mut args, mut tx, block, cost, eth, command } = self; + let Self { to, mut sig, mut args, mut tx, block, cost, wallet, rpc, command } = self; - let config = eth.load_config()?; + let config = rpc.load_config()?; let provider = utils::get_provider(&config)?; - let sender = SenderKind::from_wallet_opts(eth.wallet).await?; + let sender = SenderKind::from_wallet_opts(wallet).await?; let code = if let Some(EstimateSubcommands::Create { code, diff --git a/crates/cast/src/cmd/logs.rs b/crates/cast/src/cmd/logs.rs index b0da80fd44788..a0fb10c808cb7 100644 --- a/crates/cast/src/cmd/logs.rs +++ b/crates/cast/src/cmd/logs.rs @@ -7,7 +7,10 @@ use alloy_primitives::{Address, B256, hex::FromHex}; use alloy_rpc_types::{BlockId, BlockNumberOrTag, Filter, FilterBlockOption, FilterSet, Topic}; use clap::Parser; use eyre::Result; -use foundry_cli::{opts::EthereumOpts, utils, utils::LoadConfig}; +use foundry_cli::{ + opts::RpcOpts, + utils::{self, LoadConfig}, +}; use itertools::Itertools; use std::{io, str::FromStr}; @@ -46,15 +49,15 @@ pub struct LogsArgs { subscribe: bool, #[command(flatten)] - eth: EthereumOpts, + rpc: RpcOpts, } impl LogsArgs { pub async fn run(self) -> Result<()> { - let Self { from_block, to_block, address, sig_or_topic, topics_or_args, subscribe, eth } = + let Self { from_block, to_block, address, sig_or_topic, topics_or_args, subscribe, rpc } = self; - let config = eth.load_config()?; + let config = rpc.load_config()?; let provider = utils::get_provider(&config)?; let cast = Cast::new(&provider); diff --git a/crates/cli/src/opts/rpc.rs b/crates/cli/src/opts/rpc.rs index 4e9919966d1b9..a5f9008d78bd0 100644 --- a/crates/cli/src/opts/rpc.rs +++ b/crates/cli/src/opts/rpc.rs @@ -17,6 +17,7 @@ use std::borrow::Cow; const FLASHBOTS_URL: &str = "https://rpc.flashbots.net/fast"; #[derive(Clone, Debug, Default, Parser)] +#[command(next_help_heading = "Rpc options")] pub struct RpcOpts { /// The RPC endpoint, default value is http://localhost:8545. #[arg(short = 'r', long = "rpc-url", env = "ETH_RPC_URL")]