From 5c014932e5663f18eef354370f481a0a3b733d39 Mon Sep 17 00:00:00 2001 From: Matthias Seitz Date: Thu, 29 Sep 2022 23:01:44 +0200 Subject: [PATCH] fix(cast): use new raw abi api (#3417) --- Cargo.lock | 26 +++++++++++++------------- cast/src/lib.rs | 6 ++---- common/src/abi.rs | 8 ++++---- evm/src/trace/identifier/etherscan.rs | 4 ++-- utils/src/abi.rs | 6 ++---- 5 files changed, 23 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 25805a011127..ef2b37016183 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1625,7 +1625,7 @@ dependencies = [ [[package]] name = "ethers" version = "0.17.0" -source = "git+https://github.com/gakonst/ethers-rs#62beb6cf53caf9c98f1ce0c793d9992d778cee1f" +source = "git+https://github.com/gakonst/ethers-rs#b2fc9fdf50d6fe3e81de0ac5648a068425cf87a7" dependencies = [ "ethers-addressbook", "ethers-contract", @@ -1640,7 +1640,7 @@ dependencies = [ [[package]] name = "ethers-addressbook" version = "0.17.0" -source = "git+https://github.com/gakonst/ethers-rs#62beb6cf53caf9c98f1ce0c793d9992d778cee1f" +source = "git+https://github.com/gakonst/ethers-rs#b2fc9fdf50d6fe3e81de0ac5648a068425cf87a7" dependencies = [ "ethers-core", "once_cell", @@ -1651,7 +1651,7 @@ dependencies = [ [[package]] name = "ethers-contract" version = "0.17.0" -source = "git+https://github.com/gakonst/ethers-rs#62beb6cf53caf9c98f1ce0c793d9992d778cee1f" +source = "git+https://github.com/gakonst/ethers-rs#b2fc9fdf50d6fe3e81de0ac5648a068425cf87a7" dependencies = [ "ethers-contract-abigen", "ethers-contract-derive", @@ -1669,7 +1669,7 @@ dependencies = [ [[package]] name = "ethers-contract-abigen" version = "0.17.0" -source = "git+https://github.com/gakonst/ethers-rs#62beb6cf53caf9c98f1ce0c793d9992d778cee1f" +source = "git+https://github.com/gakonst/ethers-rs#b2fc9fdf50d6fe3e81de0ac5648a068425cf87a7" dependencies = [ "Inflector", "cfg-if 1.0.0", @@ -1692,7 +1692,7 @@ dependencies = [ [[package]] name = "ethers-contract-derive" version = "0.17.0" -source = "git+https://github.com/gakonst/ethers-rs#62beb6cf53caf9c98f1ce0c793d9992d778cee1f" +source = "git+https://github.com/gakonst/ethers-rs#b2fc9fdf50d6fe3e81de0ac5648a068425cf87a7" dependencies = [ "ethers-contract-abigen", "ethers-core", @@ -1706,7 +1706,7 @@ dependencies = [ [[package]] name = "ethers-core" version = "0.17.0" -source = "git+https://github.com/gakonst/ethers-rs#62beb6cf53caf9c98f1ce0c793d9992d778cee1f" +source = "git+https://github.com/gakonst/ethers-rs#b2fc9fdf50d6fe3e81de0ac5648a068425cf87a7" dependencies = [ "arrayvec 0.7.2", "bytes", @@ -1737,7 +1737,7 @@ dependencies = [ [[package]] name = "ethers-etherscan" version = "0.17.0" -source = "git+https://github.com/gakonst/ethers-rs#62beb6cf53caf9c98f1ce0c793d9992d778cee1f" +source = "git+https://github.com/gakonst/ethers-rs#b2fc9fdf50d6fe3e81de0ac5648a068425cf87a7" dependencies = [ "ethers-core", "ethers-solc", @@ -1754,7 +1754,7 @@ dependencies = [ [[package]] name = "ethers-middleware" version = "0.17.0" -source = "git+https://github.com/gakonst/ethers-rs#62beb6cf53caf9c98f1ce0c793d9992d778cee1f" +source = "git+https://github.com/gakonst/ethers-rs#b2fc9fdf50d6fe3e81de0ac5648a068425cf87a7" dependencies = [ "async-trait", "auto_impl 0.5.0", @@ -1779,7 +1779,7 @@ dependencies = [ [[package]] name = "ethers-providers" version = "0.17.0" -source = "git+https://github.com/gakonst/ethers-rs#62beb6cf53caf9c98f1ce0c793d9992d778cee1f" +source = "git+https://github.com/gakonst/ethers-rs#b2fc9fdf50d6fe3e81de0ac5648a068425cf87a7" dependencies = [ "async-trait", "auto_impl 1.0.1", @@ -1816,7 +1816,7 @@ dependencies = [ [[package]] name = "ethers-signers" version = "0.17.0" -source = "git+https://github.com/gakonst/ethers-rs#62beb6cf53caf9c98f1ce0c793d9992d778cee1f" +source = "git+https://github.com/gakonst/ethers-rs#b2fc9fdf50d6fe3e81de0ac5648a068425cf87a7" dependencies = [ "async-trait", "coins-bip32", @@ -1839,7 +1839,7 @@ dependencies = [ [[package]] name = "ethers-solc" version = "0.17.0" -source = "git+https://github.com/gakonst/ethers-rs#62beb6cf53caf9c98f1ce0c793d9992d778cee1f" +source = "git+https://github.com/gakonst/ethers-rs#b2fc9fdf50d6fe3e81de0ac5648a068425cf87a7" dependencies = [ "cfg-if 1.0.0", "dunce", @@ -4160,9 +4160,9 @@ checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" [[package]] name = "proc-macro2" -version = "1.0.44" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd7356a8122b6c4a24a82b278680c73357984ca2fc79a0f9fa6dea7dced7c58" +checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b" dependencies = [ "unicode-ident", ] diff --git a/cast/src/lib.rs b/cast/src/lib.rs index 586ba0e2ef9b..eb8472681969 100644 --- a/cast/src/lib.rs +++ b/cast/src/lib.rs @@ -5,11 +5,10 @@ use crate::rlp_converter::Item; use base::{Base, NumberWithBase, ToBase}; use chrono::NaiveDateTime; -use ethers_contract::RawAbi; use ethers_core::{ abi::{ token::{LenientTokenizer, Tokenizer}, - Function, HumanReadableParser, Token, + Function, HumanReadableParser, RawAbi, Token, }, types::{Chain, *}, utils::{ @@ -1274,8 +1273,7 @@ impl SimpleCast { .map(|item| item.contract_name.clone()) .collect::>(); - // TODO: Abi to RawAbi ? - let abis = source.abis().iter().cloned().map(|_| todo!()).collect(); + let abis = source.raw_abis()?; (abis, names) } diff --git a/common/src/abi.rs b/common/src/abi.rs index 7c687493e860..3d69ee71d512 100644 --- a/common/src/abi.rs +++ b/common/src/abi.rs @@ -267,13 +267,13 @@ pub async fn get_func_etherscan( let source = find_source(client, contract).await?; let metadata = source.items.first().wrap_err("etherscan returned empty metadata")?; - let empty = vec![]; - let funcs = metadata.abi.functions.get(function_name).unwrap_or(&empty); + let mut abi = metadata.abi()?; + let funcs = abi.functions.remove(function_name).unwrap_or_default(); for func in funcs { - let res = encode_args(func, args); + let res = encode_args(&func, args); if res.is_ok() { - return Ok(func.clone()) + return Ok(func) } } diff --git a/evm/src/trace/identifier/etherscan.rs b/evm/src/trace/identifier/etherscan.rs index f39fb71f2657..ea2b301c53b2 100644 --- a/evm/src/trace/identifier/etherscan.rs +++ b/evm/src/trace/identifier/etherscan.rs @@ -127,14 +127,14 @@ impl TraceIdentifier for EtherscanIdentifier { let fut = fetcher .map(|(address, metadata)| { let label = metadata.contract_name.clone(); - let abi = metadata.abi.clone(); + let abi = metadata.abi().ok().map(Cow::Owned); self.contracts.insert(address, metadata); AddressIdentity { address, label: Some(label.clone()), contract: Some(label), - abi: Some(Cow::Owned(abi)), + abi, artifact_id: None, } }) diff --git a/utils/src/abi.rs b/utils/src/abi.rs index 5169e1fbf759..235887a77537 100644 --- a/utils/src/abi.rs +++ b/utils/src/abi.rs @@ -1,11 +1,11 @@ //! Convert a json abi into solidity inerface -use ethers_contract::{InternalStructs, RawAbi}; +use ethers_contract::InternalStructs; use ethers_core::{ abi, abi::{ struct_def::{FieldType, StructFieldType}, - Contract as Abi, Event, EventParam, Function, Param, ParamType, SolStruct, + Contract as Abi, Event, EventParam, Function, Param, ParamType, RawAbi, SolStruct, }, }; use std::collections::BTreeMap; @@ -339,8 +339,6 @@ fn struct_field_to_type(ty: &StructFieldType) -> String { mod tests { use super::*; - use ethers_contract::RawAbi; - #[test] #[cfg(any(target_os = "linux", target_os = "macos"))] fn abi2solidity() {