Skip to content

Commit

Permalink
ethers clean-up
Browse files Browse the repository at this point in the history
  • Loading branch information
klkvr committed Apr 5, 2024
1 parent 0431bb3 commit 472d4ff
Show file tree
Hide file tree
Showing 23 changed files with 81 additions and 147 deletions.
5 changes: 2 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion crates/cast/bin/cmd/access_list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ impl AccessListArgs {
let AccessListArgs { to, sig, args, data, tx, eth, block, json: to_json } = self;

let config = Config::from(&eth);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
let chain = utils::get_chain(config.chain, &provider).await?;
let sender = eth.wallet.sender().await;
let etherscan_api_key = config.get_etherscan_api_key(Some(chain));
Expand Down
2 changes: 1 addition & 1 deletion crates/cast/bin/cmd/call.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ impl CallArgs {
} = self;

let config = Config::from(&eth);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
let chain = utils::get_chain(config.chain, &provider).await?;
let sender = eth.wallet.sender().await;
let etherscan_api_key = config.get_etherscan_api_key(Some(chain));
Expand Down
2 changes: 1 addition & 1 deletion crates/cast/bin/cmd/estimate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ impl EstimateArgs {

let figment = Figment::from(Config::figment()).merge(etherscan).merge(rpc);
let config = Config::try_from(figment)?;
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
let chain = utils::get_chain(config.chain, &provider).await?;
let api_key = config.get_etherscan_api_key(Some(chain));

Expand Down
2 changes: 1 addition & 1 deletion crates/cast/bin/cmd/find_block.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ impl FindBlockArgs {

let ts_target = timestamp;
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;

let last_block_num = provider.get_block_number().await?;
let cast_provider = Cast::new(provider);
Expand Down
2 changes: 1 addition & 1 deletion crates/cast/bin/cmd/logs.rs
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ impl LogsArgs {
} = self;

let config = Config::from(&eth);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;

let cast = Cast::new(&provider);

Expand Down
6 changes: 3 additions & 3 deletions crates/cast/bin/cmd/mktx.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use clap::Parser;
use eyre::Result;
use foundry_cli::{
opts::{EthereumOpts, TransactionOpts},
utils::{self, get_alloy_provider},
utils::{self, get_provider},
};
use foundry_common::ens::NameOrAddress;
use foundry_config::Config;
Expand Down Expand Up @@ -77,7 +77,7 @@ impl MakeTxArgs {
tx::validate_to_address(&code, &to)?;

let config = Config::from(&eth);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
let chain = utils::get_chain(config.chain, &provider).await?;
let api_key = config.get_etherscan_api_key(Some(chain));

Expand All @@ -91,7 +91,7 @@ impl MakeTxArgs {
tx.nonce = Some(provider.get_transaction_count(from, None).await?);
}

let provider = get_alloy_provider(&config)?;
let provider = get_provider(&config)?;

let (tx, _) =
tx::build_tx(&provider, from, to, code, sig, args, tx, chain, api_key).await?;
Expand Down
2 changes: 1 addition & 1 deletion crates/cast/bin/cmd/rpc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ impl RpcArgs {
let RpcArgs { raw, method, params, rpc } = self;

let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;

let params = if raw {
if params.is_empty() {
Expand Down
2 changes: 1 addition & 1 deletion crates/cast/bin/cmd/send.rs
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ impl SendTxArgs {
tx::validate_to_address(&code, &to)?;

let config = Config::from(&eth);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
let chain = utils::get_chain(config.chain, &provider).await?;
let api_key = config.get_etherscan_api_key(Some(chain));

Expand Down
2 changes: 1 addition & 1 deletion crates/cast/bin/cmd/storage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ impl StorageArgs {
let config = Config::from(&self);

let Self { address, slot, block, build, .. } = self;
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
let address = address.resolve(&provider).await?;

// Slot was provided, perform a simple RPC call
Expand Down
42 changes: 21 additions & 21 deletions crates/cast/bin/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -204,15 +204,15 @@ async fn main() -> Result<()> {
CastSubcommand::AccessList(cmd) => cmd.run().await?,
CastSubcommand::Age { block, rpc } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
println!(
"{}",
Cast::new(provider).age(block.unwrap_or(BlockId::Number(Latest))).await?
);
}
CastSubcommand::Balance { block, who, ether, rpc, erc20 } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
let account_addr = who.resolve(&provider).await?;

match erc20 {
Expand All @@ -233,15 +233,15 @@ async fn main() -> Result<()> {
}
CastSubcommand::BaseFee { block, rpc } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
println!(
"{}",
Cast::new(provider).base_fee(block.unwrap_or(BlockId::Number(Latest))).await?
);
}
CastSubcommand::Block { block, full, field, json, rpc } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
println!(
"{}",
Cast::new(provider)
Expand All @@ -251,39 +251,39 @@ async fn main() -> Result<()> {
}
CastSubcommand::BlockNumber { rpc } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
println!("{}", Cast::new(provider).block_number().await?);
}
CastSubcommand::Chain { rpc } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
println!("{}", Cast::new(provider).chain().await?);
}
CastSubcommand::ChainId { rpc } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
println!("{}", Cast::new(provider).chain_id().await?);
}
CastSubcommand::Client { rpc } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
println!("{}", provider.get_client_version().await?);
}
CastSubcommand::Code { block, who, disassemble, rpc } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
let who = who.resolve(&provider).await?;
println!("{}", Cast::new(provider).code(who, block, disassemble).await?);
}
CastSubcommand::Codesize { block, who, rpc } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
let who = who.resolve(&provider).await?;
println!("{}", Cast::new(provider).codesize(who, block).await?);
}
CastSubcommand::ComputeAddress { address, nonce, rpc } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;

let address: Address = stdin::unwrap_line(address)?.parse()?;
let computed = Cast::new(provider).compute_address(address, nonce).await?;
Expand Down Expand Up @@ -318,33 +318,33 @@ async fn main() -> Result<()> {
CastSubcommand::FindBlock(cmd) => cmd.run().await?,
CastSubcommand::GasPrice { rpc } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
println!("{}", Cast::new(provider).gas_price().await?);
}
CastSubcommand::Index { key_type, key, slot_number } => {
println!("{}", SimpleCast::index(&key_type, &key, &slot_number)?);
}
CastSubcommand::Implementation { block, who, rpc } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
let who = who.resolve(&provider).await?;
println!("{}", Cast::new(provider).implementation(who, block).await?);
}
CastSubcommand::Admin { block, who, rpc } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
let who = who.resolve(&provider).await?;
println!("{}", Cast::new(provider).admin(who, block).await?);
}
CastSubcommand::Nonce { block, who, rpc } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
let who = who.resolve(&provider).await?;
println!("{}", Cast::new(provider).nonce(who, block).await?);
}
CastSubcommand::Proof { address, slots, rpc, block } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
let address = address.resolve(&provider).await?;
let value = provider.get_proof(address, slots.into_iter().collect(), block).await?;
println!("{}", serde_json::to_string(&value)?);
Expand All @@ -358,7 +358,7 @@ async fn main() -> Result<()> {
CastSubcommand::MakeTx(cmd) => cmd.run().await?,
CastSubcommand::PublishTx { raw_tx, cast_async, rpc } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
let cast = Cast::new(&provider);
let pending_tx = cast.publish(raw_tx).await?;
let tx_hash = pending_tx.inner().tx_hash();
Expand All @@ -372,7 +372,7 @@ async fn main() -> Result<()> {
}
CastSubcommand::Receipt { tx_hash, field, json, cast_async, confirmations, rpc } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
println!(
"{}",
Cast::new(provider)
Expand All @@ -384,7 +384,7 @@ async fn main() -> Result<()> {
CastSubcommand::SendTx(cmd) => cmd.run().await?,
CastSubcommand::Tx { tx_hash, field, raw, json, rpc } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;

// Can use either --raw or specify raw as a field
let raw = raw || field.as_ref().is_some_and(|f| f == "raw");
Expand Down Expand Up @@ -450,7 +450,7 @@ async fn main() -> Result<()> {
}
CastSubcommand::LookupAddress { who, rpc, verify } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;

let who = stdin::unwrap_line(who)?;
let name = provider.lookup_address(who).await?;
Expand All @@ -465,7 +465,7 @@ async fn main() -> Result<()> {
}
CastSubcommand::ResolveName { who, rpc, verify } => {
let config = Config::from(&rpc);
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;

let who = stdin::unwrap_line(who)?;
let address = provider.resolve_name(&who).await?;
Expand Down
11 changes: 5 additions & 6 deletions crates/cheatcodes/src/evm/fork.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use alloy_provider::Provider;
use alloy_rpc_types::Filter;
use alloy_sol_types::SolValue;
use eyre::WrapErr;
use foundry_common::{provider::alloy::ProviderBuilder, types::ToEthers};
use foundry_common::provider::alloy::ProviderBuilder;
use foundry_compilers::utils::RuntimeOrHandle;
use foundry_evm_core::fork::CreateFork;

Expand Down Expand Up @@ -252,16 +252,15 @@ impl Cheatcode for eth_getLogsCall {
let provider = ProviderBuilder::new(&url).build()?;
let mut filter = Filter::new().address(*target).from_block(from_block).to_block(to_block);
for (i, topic) in topics.iter().enumerate() {
let topic = topic.to_ethers();
// todo: needed because rust wants to convert FixedBytes<32> to U256 to convert it back
// to FixedBytes<32> and then to Topic for some reason removing the
// From<U256> impl in alloy does not fix the situation, and it is not possible to impl
// From<FixedBytes<32>> either because of a conflicting impl
match i {
0 => filter = filter.event_signature(U256::from_be_bytes(topic.to_fixed_bytes())),
1 => filter = filter.topic1(U256::from_be_bytes(topic.to_fixed_bytes())),
2 => filter = filter.topic2(U256::from_be_bytes(topic.to_fixed_bytes())),
3 => filter = filter.topic3(U256::from_be_bytes(topic.to_fixed_bytes())),
0 => filter = filter.event_signature(*topic),
1 => filter = filter.topic1(*topic),
2 => filter = filter.topic2(*topic),
3 => filter = filter.topic3(*topic),
_ => unreachable!(),
};
}
Expand Down
38 changes: 3 additions & 35 deletions crates/cli/src/utils/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,49 +82,17 @@ pub fn abi_to_solidity(abi: &JsonAbi, name: &str) -> Result<String> {
Ok(s)
}

/// Returns a [RetryProvider](foundry_common::RetryProvider) instantiated using [Config]'s RPC URL
/// and chain.
///
/// Defaults to `http://localhost:8545` and `Mainnet`.
pub fn get_provider(config: &Config) -> Result<foundry_common::provider::ethers::RetryProvider> {
get_provider_builder(config)?.build()
}

/// Returns a [RetryProvider](foundry_common::alloy::RetryProvider) instantiated using [Config]'s
/// RPC
pub fn get_alloy_provider(
config: &Config,
) -> Result<foundry_common::provider::alloy::RetryProvider> {
get_alloy_provider_builder(config)?.build()
}

/// Returns a [ProviderBuilder](foundry_common::ProviderBuilder) instantiated using [Config]'s RPC
/// URL and chain.
///
/// Defaults to `http://localhost:8545` and `Mainnet`.
pub fn get_provider_builder(
config: &Config,
) -> Result<foundry_common::provider::ethers::ProviderBuilder> {
let url = config.get_rpc_url_or_localhost_http()?;
let mut builder = foundry_common::provider::ethers::ProviderBuilder::new(url.as_ref());

if let Ok(chain) = config.chain.unwrap_or_default().try_into() {
builder = builder.chain(chain);
}

let jwt = config.get_rpc_jwt_secret()?;
if let Some(jwt) = jwt {
builder = builder.jwt(jwt.as_ref());
}

Ok(builder)
pub fn get_provider(config: &Config) -> Result<foundry_common::provider::alloy::RetryProvider> {
get_provider_builder(config)?.build()
}

/// Returns a [ProviderBuilder](foundry_common::provider::alloy::ProviderBuilder) instantiated using
/// [Config] values.
///
/// Defaults to `http://localhost:8545` and `Mainnet`.
pub fn get_alloy_provider_builder(
pub fn get_provider_builder(
config: &Config,
) -> Result<foundry_common::provider::alloy::ProviderBuilder> {
let url = config.get_rpc_url_or_localhost_http()?;
Expand Down
2 changes: 1 addition & 1 deletion crates/forge/bin/cmd/create.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ impl CreateArgs {

// Add arguments to constructor
let config = self.eth.try_load_config_emit_warnings()?;
let provider = utils::get_alloy_provider(&config)?;
let provider = utils::get_provider(&config)?;
let params = match abi.constructor {
Some(ref v) => {
let constructor_args =
Expand Down
Loading

0 comments on commit 472d4ff

Please sign in to comment.