Skip to content

Commit 2f6148f

Browse files
tarrencevgakonst
andauthored
fix: artifact api changes from ethers-rs (#614)
* fix: artifact api changes from ethers-rs * chore(cli/cast): allow clippy lint for too many args * chore: temporarily disable geb tests Co-authored-by: Georgios Konstantopoulos <[email protected]>
1 parent 4224041 commit 2f6148f

File tree

5 files changed

+26
-15
lines changed

5 files changed

+26
-15
lines changed

cli/src/cast.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,7 @@ where
578578
})
579579
}
580580

581+
#[allow(clippy::too_many_arguments)]
581582
async fn cast_send<M: Middleware, F: Into<NameOrAddress>, T: Into<NameOrAddress>>(
582583
provider: M,
583584
from: F,

cli/src/cmd/create.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ impl Cmd for CreateArgs {
4949
// Get ABI and BIN
5050
let (abi, bin, _) = super::read_artifact(&project, compiled, self.contract.clone())?;
5151

52+
let bin = match bin.object {
53+
BytecodeObject::Bytecode(_) => bin.object,
54+
_ => eyre::bail!("Dynamic linking not supported in `create` command - deploy the library contract first, then provide the address to link at compile time")
55+
};
56+
5257
// Add arguments to constructor
5358
let provider = Provider::<Http>::try_from(self.eth.rpc_url()?)?;
5459
let params = match abi.constructor {

cli/src/cmd/mod.rs

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,10 @@ pub mod verify;
5252
use crate::opts::forge::ContractInfo;
5353
use ethers::{
5454
abi::Abi,
55-
prelude::Graph,
55+
prelude::{
56+
artifacts::{CompactBytecode, CompactDeployedBytecode},
57+
Graph,
58+
},
5659
solc::{
5760
artifacts::{Source, Sources},
5861
cache::SolFilesCache,
@@ -66,9 +69,7 @@ pub trait Cmd: clap::Parser + Sized {
6669
fn run(self) -> eyre::Result<Self::Output>;
6770
}
6871

69-
use ethers::solc::{
70-
artifacts::BytecodeObject, MinimalCombinedArtifacts, Project, ProjectCompileOutput,
71-
};
72+
use ethers::solc::{MinimalCombinedArtifacts, Project, ProjectCompileOutput};
7273

7374
/// Compiles the provided [`Project`], throws if there's any compiler error and logs whether
7475
/// compilation was successful or if there was a cache hit.
@@ -135,7 +136,7 @@ pub fn read_artifact(
135136
project: &Project,
136137
compiled: ProjectCompileOutput<MinimalCombinedArtifacts>,
137138
contract: ContractInfo,
138-
) -> eyre::Result<(Abi, BytecodeObject, BytecodeObject)> {
139+
) -> eyre::Result<(Abi, CompactBytecode, CompactDeployedBytecode)> {
139140
Ok(match contract.path {
140141
Some(path) => get_artifact_from_path(project, path, contract.name)?,
141142
None => get_artifact_from_name(contract, compiled)?,
@@ -148,7 +149,7 @@ pub fn read_artifact(
148149
fn get_artifact_from_name(
149150
contract: ContractInfo,
150151
compiled: ProjectCompileOutput<MinimalCombinedArtifacts>,
151-
) -> eyre::Result<(Abi, BytecodeObject, BytecodeObject)> {
152+
) -> eyre::Result<(Abi, CompactBytecode, CompactDeployedBytecode)> {
152153
let mut has_found_contract = false;
153154
let mut contract_artifact = None;
154155

@@ -175,10 +176,10 @@ fn get_artifact_from_name(
175176
artifact
176177
.abi
177178
.ok_or_else(|| eyre::Error::msg(format!("abi not found for {}", contract.name)))?,
178-
artifact.bin.ok_or_else(|| {
179+
artifact.bytecode.ok_or_else(|| {
179180
eyre::Error::msg(format!("bytecode not found for {}", contract.name))
180181
})?,
181-
artifact.bin_runtime.ok_or_else(|| {
182+
artifact.deployed_bytecode.ok_or_else(|| {
182183
eyre::Error::msg(format!("bytecode not found for {}", contract.name))
183184
})?,
184185
),
@@ -195,7 +196,7 @@ fn get_artifact_from_path(
195196
project: &Project,
196197
path: String,
197198
name: String,
198-
) -> eyre::Result<(Abi, BytecodeObject, BytecodeObject)> {
199+
) -> eyre::Result<(Abi, CompactBytecode, CompactDeployedBytecode)> {
199200
// Get sources from the requested location
200201
let abs_path = dunce::canonicalize(PathBuf::from(path))?;
201202
let mut sources = Sources::new();
@@ -219,9 +220,11 @@ fn get_artifact_from_path(
219220

220221
Ok((
221222
artifact.abi.ok_or_else(|| eyre::Error::msg(format!("abi not found for {}", name)))?,
222-
artifact.bin.ok_or_else(|| eyre::Error::msg(format!("bytecode not found for {}", name)))?,
223223
artifact
224-
.bin_runtime
224+
.bytecode
225+
.ok_or_else(|| eyre::Error::msg(format!("bytecode not found for {}", name)))?,
226+
artifact
227+
.deployed_bytecode
225228
.ok_or_else(|| eyre::Error::msg(format!("bytecode not found for {}", name)))?,
226229
))
227230
}

cli/src/cmd/run.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::cmd::{build::BuildArgs, compile, manual_compile, Cmd};
22
use clap::{Parser, ValueHint};
3-
use ethers::abi::Abi;
3+
use ethers::{abi::Abi, prelude::artifacts::CompactContract};
44
use forge::ContractRunner;
55
use foundry_utils::IntoFunction;
66
use std::{collections::BTreeMap, path::PathBuf};
@@ -11,7 +11,7 @@ use ethers::solc::{MinimalCombinedArtifacts, Project};
1111
use crate::opts::evm::EvmArgs;
1212
use ansi_term::Colour;
1313
use ethers::{
14-
prelude::{artifacts::ContractBytecode, Artifact},
14+
prelude::artifacts::ContractBytecode,
1515
solc::artifacts::{CompactContractSome, ContractBytecodeSome},
1616
};
1717
use evm_adapters::{
@@ -285,7 +285,7 @@ impl RunArgs {
285285
contract.1
286286
};
287287

288-
let contract = contract_bytecode.into_compact_contract().unwrap();
288+
let contract = CompactContract::from(contract_bytecode).try_into().expect("Couldn't create contract from bytecodes, either abi, bytecode, or deployed_bytecode were empty.");
289289

290290
let mut highlevel_known_contracts = BTreeMap::new();
291291

cli/tests/integration.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
use foundry_cli_test_utils::forgetest_external;
44

55
forgetest_external!(solmate, "Rari-Capital/solmate");
6-
forgetest_external!(geb, "reflexer-labs/geb");
6+
// There's an issue with geb's automatic version detection due to faulty
7+
// pragmas. Temporarily disabled.
8+
// forgetest_external!(geb, "reflexer-labs/geb");
79
forgetest_external!(stringutils, "Arachnid/solidity-stringutils");
810
forgetest_external!(vaults, "Rari-Capital/vaults");
911
forgetest_external!(multicall, "makerdao/multicall", &["--block-number", "1"]);

0 commit comments

Comments
 (0)