From cba5ffddac56fad297275bcefd6b3e7bd57c23ed Mon Sep 17 00:00:00 2001 From: Oleksandr Zarudnyi Date: Fri, 1 Nov 2024 23:20:29 +0800 Subject: [PATCH] feat: move the solc client to another crate (#118) --- Cargo.lock | 89 +++++++------ LLVM.lock | 2 +- compiler_tester/Cargo.toml | 1 + compiler_tester/src/compilers/eravm/mod.rs | 13 +- compiler_tester/src/compilers/llvm/mod.rs | 22 +--- compiler_tester/src/compilers/mod.rs | 4 +- .../src/compilers/solidity/cache_key.rs | 4 +- compiler_tester/src/compilers/solidity/mod.rs | 120 ++++++++---------- .../src/compilers/solidity/mode.rs | 18 ++- .../src/compilers/solidity/upstream/mod.rs | 50 ++++---- .../src/compilers/solidity/upstream/mode.rs | 18 ++- .../upstream/solc/standard_json/input/mod.rs | 14 +- .../solc/standard_json/input/settings/mod.rs | 6 +- .../input/settings/selection/file/flag.rs | 8 +- .../input/settings/selection/file/mod.rs | 4 +- .../input/settings/selection/mod.rs | 4 +- compiler_tester/src/compilers/vyper/mod.rs | 4 +- compiler_tester/src/compilers/yul/mod.rs | 19 +-- .../src/directories/ethereum/test.rs | 2 +- .../src/directories/matter_labs/test/mod.rs | 2 +- .../src/vm/eravm/system_contracts.rs | 4 +- fuzzer/Cargo.toml | 1 + fuzzer/fuzz_targets/common.rs | 3 +- 23 files changed, 189 insertions(+), 223 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7597d0fb..95a63758 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -127,7 +127,7 @@ checksum = "2b09cae092c27b6f1bde952653a22708691802e57bfef4a2973b80bea21efd3f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.86", ] [[package]] @@ -302,7 +302,7 @@ checksum = "3c87f3f15e7794432337fc718554eaa4dc8f04c9677a950ffe366f20a162ae42" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.86", ] [[package]] @@ -593,6 +593,7 @@ dependencies = [ "era-compiler-llvm-context", "era-compiler-solidity", "era-compiler-vyper", + "era-solc", "evm", "glob", "hex", @@ -630,6 +631,7 @@ dependencies = [ "era-compiler-common", "era-compiler-llvm-context", "era-compiler-solidity", + "era-solc", "libfuzzer-sys", "semver 1.0.23", "solidity-adapter", @@ -823,7 +825,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.85", + "syn 2.0.86", ] [[package]] @@ -843,7 +845,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.86", "unicode-xid", ] @@ -932,7 +934,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.86", ] [[package]] @@ -943,7 +945,7 @@ checksum = "2f9ed6b3789237c8a0c1c505af1c7eb2c560df6186f01b098c3a1064ea532f38" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.86", ] [[package]] @@ -955,7 +957,7 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "era-compiler-common" version = "1.5.0" -source = "git+https://github.com/matter-labs/era-compiler-common?branch=main#11cc7ed039fb96ef04d45d71c009e8dc8fffda9a" +source = "git+https://github.com/matter-labs/era-compiler-common?branch=main#32637b83bf23b7b177c7d711992a6f6f101ac399" dependencies = [ "anyhow", "base58", @@ -971,7 +973,7 @@ dependencies = [ [[package]] name = "era-compiler-downloader" version = "1.5.0" -source = "git+https://github.com/matter-labs/era-compiler-common?branch=main#11cc7ed039fb96ef04d45d71c009e8dc8fffda9a" +source = "git+https://github.com/matter-labs/era-compiler-common?branch=main#32637b83bf23b7b177c7d711992a6f6f101ac399" dependencies = [ "anyhow", "colored", @@ -984,7 +986,7 @@ dependencies = [ [[package]] name = "era-compiler-llvm-context" version = "1.5.0" -source = "git+https://github.com/matter-labs/era-compiler-llvm-context?branch=main#67bb2349e221627f15b09893e59f807094ab81ca" +source = "git+https://github.com/matter-labs/era-compiler-llvm-context?branch=main#5350b284c14ff19309d02c9c38a0fe88c93e037b" dependencies = [ "anyhow", "era-compiler-common", @@ -998,13 +1000,13 @@ dependencies = [ [[package]] name = "era-compiler-solidity" -version = "1.5.6" -source = "git+https://github.com/matter-labs/era-compiler-solidity?branch=main#2b32d2de6039165bb91569375673fd750c8a10b0" +version = "1.5.7" +source = "git+https://github.com/matter-labs/era-compiler-solidity?branch=main#d965e139c2f5dcaddf25d8c568103c840ac38c44" dependencies = [ "anyhow", - "boolinator", "era-compiler-common", "era-compiler-llvm-context", + "era-solc", "era-yul", "hex", "inkwell", @@ -1013,24 +1015,20 @@ dependencies = [ "num", "num_cpus", "path-slash", - "rand", "rayon", - "regex", "rusty_pool", "semver 1.0.23", "serde", "serde_json", - "sha3 0.10.8", "structopt", "thiserror", - "which", "zkevm_opcode_defs", ] [[package]] name = "era-compiler-vyper" -version = "1.5.6" -source = "git+https://github.com/matter-labs/era-compiler-vyper?branch=main#90a858bc42d1a83be3fe95beb858f60c14f910cb" +version = "1.5.7" +source = "git+https://github.com/matter-labs/era-compiler-vyper?branch=main#9c8fd92cf1f2b1330750d18e67ce007642de82ef" dependencies = [ "anyhow", "era-compiler-common", @@ -1050,10 +1048,27 @@ dependencies = [ "zkevm_opcode_defs", ] +[[package]] +name = "era-solc" +version = "1.5.7" +source = "git+https://github.com/matter-labs/era-compiler-solidity?branch=main#d965e139c2f5dcaddf25d8c568103c840ac38c44" +dependencies = [ + "anyhow", + "boolinator", + "era-compiler-common", + "hex", + "num", + "rayon", + "semver 1.0.23", + "serde", + "serde_json", + "which", +] + [[package]] name = "era-yul" -version = "1.5.6" -source = "git+https://github.com/matter-labs/era-compiler-solidity?branch=main#2b32d2de6039165bb91569375673fd750c8a10b0" +version = "1.5.7" +source = "git+https://github.com/matter-labs/era-compiler-solidity?branch=main#d965e139c2f5dcaddf25d8c568103c840ac38c44" dependencies = [ "anyhow", "regex", @@ -1288,7 +1303,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.86", ] [[package]] @@ -1651,7 +1666,7 @@ source = "git+https://github.com/matter-labs-forks/inkwell?branch=llvm-17#c50692 dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.86", ] [[package]] @@ -2063,7 +2078,7 @@ dependencies = [ "proc-macro-crate 1.3.1", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.86", ] [[package]] @@ -2110,7 +2125,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.86", ] [[package]] @@ -2257,7 +2272,7 @@ checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.86", ] [[package]] @@ -2855,7 +2870,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.86", ] [[package]] @@ -3010,7 +3025,7 @@ checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.86", ] [[package]] @@ -3289,9 +3304,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.85" +version = "2.0.86" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5023162dfcd14ef8f32034d8bcd4cc5ddc61ef7a247c024a33e24e1f24d21b56" +checksum = "e89275301d38033efb81a6e60e3497e734dfcc62571f2854bf4b16690398824c" dependencies = [ "proc-macro2", "quote", @@ -3370,7 +3385,7 @@ checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.86", ] [[package]] @@ -3507,7 +3522,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.86", ] [[package]] @@ -3699,7 +3714,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.86", "wasm-bindgen-shared", ] @@ -3733,7 +3748,7 @@ checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.86", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4012,7 +4027,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.86", ] [[package]] @@ -4032,7 +4047,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.85", + "syn 2.0.86", ] [[package]] @@ -4102,7 +4117,7 @@ dependencies = [ [[package]] name = "zksync_vm2" version = "0.2.1" -source = "git+https://github.com/matter-labs/vm2#df5bec3d04d64d434f9b0ccb285ba4681008f7b3" +source = "git+https://github.com/matter-labs/vm2#457d8a7eea9093af9440662e33e598c13ba41633" dependencies = [ "enum_dispatch", "primitive-types", @@ -4114,7 +4129,7 @@ dependencies = [ [[package]] name = "zksync_vm2_interface" version = "0.2.1" -source = "git+https://github.com/matter-labs/vm2#df5bec3d04d64d434f9b0ccb285ba4681008f7b3" +source = "git+https://github.com/matter-labs/vm2#457d8a7eea9093af9440662e33e598c13ba41633" dependencies = [ "primitive-types", ] diff --git a/LLVM.lock b/LLVM.lock index 15b374ab..9b393bc3 100644 --- a/LLVM.lock +++ b/LLVM.lock @@ -1,2 +1,2 @@ url = "https://github.com/matter-labs/era-compiler-llvm" -branch = "kpv-eravm-fix-linker-duplicating-symbols" +branch = "main" diff --git a/compiler_tester/Cargo.toml b/compiler_tester/Cargo.toml index 8c601faf..69b3ca82 100644 --- a/compiler_tester/Cargo.toml +++ b/compiler_tester/Cargo.toml @@ -50,6 +50,7 @@ era-compiler-common = { git = "https://github.com/matter-labs/era-compiler-commo era-compiler-downloader = { git = "https://github.com/matter-labs/era-compiler-common", branch = "main" } era-compiler-llvm-context = { git = "https://github.com/matter-labs/era-compiler-llvm-context", branch = "main" } era-compiler-solidity = { git = "https://github.com/matter-labs/era-compiler-solidity", branch = "main" } +era-solc = { git = "https://github.com/matter-labs/era-compiler-solidity", branch = "main" } era-compiler-vyper = { git = "https://github.com/matter-labs/era-compiler-vyper", branch = "main" } solidity-adapter = { path = "../solidity_adapter" } diff --git a/compiler_tester/src/compilers/eravm/mod.rs b/compiler_tester/src/compilers/eravm/mod.rs index b9a6d598..60dc9513 100644 --- a/compiler_tester/src/compilers/eravm/mod.rs +++ b/compiler_tester/src/compilers/eravm/mod.rs @@ -7,7 +7,7 @@ pub mod mode; use std::collections::BTreeMap; use std::collections::HashMap; -use era_compiler_solidity::CollectableError; +use era_solc::CollectableError; use crate::compilers::mode::Mode; use crate::compilers::Compiler; @@ -27,7 +27,7 @@ impl Compiler for EraVMCompiler { &self, _test_path: String, sources: Vec<(String, String)>, - _libraries: era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + _libraries: era_solc::StandardJsonInputLibraries, _mode: &Mode, llvm_options: Vec, debug_config: Option, @@ -41,12 +41,7 @@ impl Compiler for EraVMCompiler { let project = era_compiler_solidity::Project::try_from_eravm_assembly_sources( sources .into_iter() - .map(|(path, source)| { - ( - path, - era_compiler_solidity::SolcStandardJsonInputSource::from(source), - ) - }) + .map(|(path, source)| (path, era_solc::StandardJsonInputSource::from(source))) .collect(), None, )?; @@ -76,7 +71,7 @@ impl Compiler for EraVMCompiler { &self, _test_path: String, _sources: Vec<(String, String)>, - _libraries: era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + _libraries: era_solc::StandardJsonInputLibraries, _mode: &Mode, _test_params: Option<&solidity_adapter::Params>, _llvm_options: Vec, diff --git a/compiler_tester/src/compilers/llvm/mod.rs b/compiler_tester/src/compilers/llvm/mod.rs index 333cca86..c0edfef8 100644 --- a/compiler_tester/src/compilers/llvm/mod.rs +++ b/compiler_tester/src/compilers/llvm/mod.rs @@ -6,7 +6,7 @@ pub mod mode; use std::collections::HashMap; -use era_compiler_solidity::CollectableError; +use era_solc::CollectableError; use crate::compilers::mode::Mode; use crate::compilers::Compiler; @@ -39,7 +39,7 @@ impl Compiler for LLVMCompiler { &self, _test_path: String, sources: Vec<(String, String)>, - libraries: era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + libraries: era_solc::StandardJsonInputLibraries, mode: &Mode, llvm_options: Vec, debug_config: Option, @@ -57,12 +57,7 @@ impl Compiler for LLVMCompiler { let project = era_compiler_solidity::Project::try_from_llvm_ir_sources( sources .into_iter() - .map(|(path, source)| { - ( - path, - era_compiler_solidity::SolcStandardJsonInputSource::from(source), - ) - }) + .map(|(path, source)| (path, era_solc::StandardJsonInputSource::from(source))) .collect(), libraries, None, @@ -93,7 +88,7 @@ impl Compiler for LLVMCompiler { &self, _test_path: String, sources: Vec<(String, String)>, - _libraries: era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + _libraries: era_solc::StandardJsonInputLibraries, mode: &Mode, _test_params: Option<&solidity_adapter::Params>, llvm_options: Vec, @@ -110,14 +105,9 @@ impl Compiler for LLVMCompiler { let project = era_compiler_solidity::Project::try_from_llvm_ir_sources( sources .into_iter() - .map(|(path, source)| { - ( - path, - era_compiler_solidity::SolcStandardJsonInputSource::from(source), - ) - }) + .map(|(path, source)| (path, era_solc::StandardJsonInputSource::from(source))) .collect(), - era_compiler_solidity::SolcStandardJsonInputSettingsLibraries::default(), + era_solc::StandardJsonInputLibraries::default(), None, )?; diff --git a/compiler_tester/src/compilers/mod.rs b/compiler_tester/src/compilers/mod.rs index 54162604..08566f4f 100644 --- a/compiler_tester/src/compilers/mod.rs +++ b/compiler_tester/src/compilers/mod.rs @@ -26,7 +26,7 @@ pub trait Compiler: Send + Sync + 'static { &self, test_path: String, sources: Vec<(String, String)>, - libraries: era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + libraries: era_solc::StandardJsonInputLibraries, mode: &Mode, llvm_options: Vec, debug_config: Option, @@ -39,7 +39,7 @@ pub trait Compiler: Send + Sync + 'static { &self, test_path: String, sources: Vec<(String, String)>, - libraries: era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + libraries: era_solc::StandardJsonInputLibraries, mode: &Mode, test_params: Option<&solidity_adapter::Params>, llvm_options: Vec, diff --git a/compiler_tester/src/compilers/solidity/cache_key.rs b/compiler_tester/src/compilers/solidity/cache_key.rs index 3968f716..7145b414 100644 --- a/compiler_tester/src/compilers/solidity/cache_key.rs +++ b/compiler_tester/src/compilers/solidity/cache_key.rs @@ -12,7 +12,7 @@ pub struct CacheKey { /// The Solidity compiler version. pub version: semver::Version, /// The Solidity compiler output type. - pub codegen: era_compiler_solidity::SolcStandardJsonInputSettingsCodegen, + pub codegen: era_solc::StandardJsonInputCodegen, /// Whether to enable the EVMLA codegen via Yul IR. pub via_ir: bool, /// Whether to run the Solidity compiler optimizer. @@ -26,7 +26,7 @@ impl CacheKey { pub fn new( test_path: String, version: semver::Version, - codegen: era_compiler_solidity::SolcStandardJsonInputSettingsCodegen, + codegen: era_solc::StandardJsonInputCodegen, via_ir: bool, optimize: bool, ) -> Self { diff --git a/compiler_tester/src/compilers/solidity/mod.rs b/compiler_tester/src/compilers/solidity/mod.rs index c534d105..85660ae3 100644 --- a/compiler_tester/src/compilers/solidity/mod.rs +++ b/compiler_tester/src/compilers/solidity/mod.rs @@ -13,7 +13,7 @@ use std::path::Path; use itertools::Itertools; -use era_compiler_solidity::CollectableError; +use era_solc::CollectableError; use crate::compilers::cache::Cache; use crate::compilers::mode::Mode; @@ -30,7 +30,7 @@ use self::mode::Mode as SolidityMode; /// pub struct SolidityCompiler { /// The `solc` process output cache. - cache: Cache, + cache: Cache, } lazy_static::lazy_static! { @@ -42,9 +42,9 @@ lazy_static::lazy_static! { static ref MODES: Vec = { let mut solc_codegen_versions = Vec::new(); for (codegen, optimize, via_ir) in [ - (era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::EVMLA, true, false), - (era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::EVMLA, true, true), - (era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::Yul, true, true), + (era_solc::StandardJsonInputCodegen::EVMLA, true, false), + (era_solc::StandardJsonInputCodegen::EVMLA, true, true), + (era_solc::StandardJsonInputCodegen::Yul, true, true), ] { for version in SolidityCompiler::all_versions(codegen, via_ir).expect("`solc` versions analysis error") { solc_codegen_versions.push((codegen, optimize, via_ir, version)); @@ -98,19 +98,15 @@ impl SolidityCompiler { /// /// Returns the `solc` executable by its version. /// - pub fn executable( - version: &semver::Version, - ) -> anyhow::Result { - era_compiler_solidity::SolcCompiler::try_from_path( - format!("{}/solc-{}", Self::DIRECTORY, version).as_str(), - ) + pub fn executable(version: &semver::Version) -> anyhow::Result { + era_solc::Compiler::try_from_path(format!("{}/solc-{}", Self::DIRECTORY, version).as_str()) } /// /// Returns the `solc` executable used to compile system contracts. /// - pub fn system_contract_executable() -> anyhow::Result { - era_compiler_solidity::SolcCompiler::try_from_path( + pub fn system_contract_executable() -> anyhow::Result { + era_solc::Compiler::try_from_path( format!("{}/solc-system-contracts", Self::DIRECTORY).as_str(), ) } @@ -119,7 +115,7 @@ impl SolidityCompiler { /// Returns the compiler versions downloaded for the specified compilation codegen. /// pub fn all_versions( - codegen: era_compiler_solidity::SolcStandardJsonInputSettingsCodegen, + codegen: era_solc::StandardJsonInputCodegen, via_ir: bool, ) -> anyhow::Result> { let mut versions = Vec::new(); @@ -149,14 +145,14 @@ impl SolidityCompiler { Ok(version) => version, Err(_) => continue, }; - if era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::Yul == codegen - && version < era_compiler_solidity::SolcCompiler::FIRST_YUL_VERSION + if era_solc::StandardJsonInputCodegen::Yul == codegen + && version < era_solc::Compiler::FIRST_YUL_VERSION { continue; } - if era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::EVMLA == codegen + if era_solc::StandardJsonInputCodegen::EVMLA == codegen && via_ir - && version < era_compiler_solidity::SolcCompiler::FIRST_VIA_IR_VERSION + && version < era_solc::Compiler::FIRST_VIA_IR_VERSION { continue; } @@ -171,9 +167,9 @@ impl SolidityCompiler { /// fn standard_json_output( sources: &[(String, String)], - libraries: &era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + libraries: &era_solc::StandardJsonInputLibraries, mode: &SolidityMode, - ) -> anyhow::Result { + ) -> anyhow::Result { let solc_compiler = if mode.is_system_contracts_mode { Self::system_contract_executable() } else { @@ -181,50 +177,44 @@ impl SolidityCompiler { }?; let mut output_selection = - era_compiler_solidity::SolcStandardJsonInputSettingsSelection::new_required( - mode.solc_codegen, - ); - output_selection.extend( - era_compiler_solidity::SolcStandardJsonInputSettingsSelection::new(vec![ - era_compiler_solidity::SolcStandardJsonInputSettingsSelectionFlag::EraVMAssembly, - ]), - ); + era_solc::StandardJsonInputSelection::new_required(mode.solc_codegen); + output_selection.extend(era_solc::StandardJsonInputSelection::new(vec![ + era_solc::StandardJsonInputSelectionFlag::EraVMAssembly, + ])); - let evm_version = - if mode.solc_version >= era_compiler_solidity::SolcCompiler::FIRST_CANCUN_VERSION { - Some(era_compiler_common::EVMVersion::Cancun) - } else { - None - }; + let evm_version = if mode.solc_version >= era_solc::Compiler::FIRST_CANCUN_VERSION { + Some(era_compiler_common::EVMVersion::Cancun) + } else { + None + }; - let sources: BTreeMap = sources + let sources: BTreeMap = sources .iter() .map(|(path, source)| { ( path.to_owned(), - era_compiler_solidity::SolcStandardJsonInputSource::from(source.to_owned()), + era_solc::StandardJsonInputSource::from(source.to_owned()), ) }) .collect(); - let mut solc_input = - era_compiler_solidity::SolcStandardJsonInput::try_from_solidity_sources( - sources, - libraries.to_owned(), - BTreeSet::new(), - era_compiler_solidity::SolcStandardJsonInputSettingsOptimizer::default(), - Some(mode.solc_codegen), - evm_version, - mode.enable_eravm_extensions, - output_selection, - era_compiler_solidity::SolcStandardJsonInputSettingsMetadata::default(), - vec![], - vec![era_compiler_solidity::ErrorType::SendTransfer], - vec![], - false, - mode.via_ir, - ) - .map_err(|error| anyhow::anyhow!("Solidity standard JSON I/O error: {}", error))?; + let mut solc_input = era_solc::StandardJsonInput::try_from_solidity_sources( + sources, + libraries.to_owned(), + BTreeSet::new(), + era_solc::StandardJsonInputOptimizer::default(), + Some(mode.solc_codegen), + evm_version, + mode.enable_eravm_extensions, + output_selection, + era_solc::StandardJsonInputMetadata::default(), + vec![], + vec![era_solc::StandardJsonInputErrorType::SendTransfer], + vec![], + false, + mode.via_ir, + ) + .map_err(|error| anyhow::anyhow!("Solidity standard JSON I/O error: {}", error))?; let allow_paths = Path::new(Self::SOLC_ALLOW_PATHS) .canonicalize() @@ -249,9 +239,9 @@ impl SolidityCompiler { &self, test_path: String, sources: &[(String, String)], - libraries: &era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + libraries: &era_solc::StandardJsonInputLibraries, mode: &SolidityMode, - ) -> anyhow::Result { + ) -> anyhow::Result { let cache_key = CacheKey::new( test_path, mode.solc_version.clone(), @@ -273,7 +263,7 @@ impl SolidityCompiler { /// Get the method identifiers from the solc output. /// fn get_method_identifiers( - solc_output: &era_compiler_solidity::SolcStandardJsonOutput, + solc_output: &era_solc::StandardJsonOutput, ) -> anyhow::Result>> { let mut method_identifiers = BTreeMap::new(); for (path, file) in solc_output.contracts.iter() { @@ -286,14 +276,6 @@ impl SolidityCompiler { anyhow::anyhow!("EVM object of the contract `{}:{}` not found", path, name) })? .method_identifiers - .as_ref() - .ok_or_else(|| { - anyhow::anyhow!( - "Method identifiers of the contract `{}:{}` not found", - path, - name - ) - })? .iter() { let selector = @@ -317,7 +299,7 @@ impl SolidityCompiler { /// Get the last contract from the solc output. /// fn get_last_contract( - solc_output: &era_compiler_solidity::SolcStandardJsonOutput, + solc_output: &era_solc::StandardJsonOutput, sources: &[(String, String)], ) -> anyhow::Result { for (path, _source) in sources.iter().rev() { @@ -340,7 +322,7 @@ impl Compiler for SolidityCompiler { &self, test_path: String, sources: Vec<(String, String)>, - libraries: era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + libraries: era_solc::StandardJsonInputLibraries, mode: &Mode, llvm_options: Vec, debug_config: Option, @@ -403,7 +385,7 @@ impl Compiler for SolidityCompiler { build.write_to_standard_json( &mut solc_output, - Some(&era_compiler_solidity::SolcVersion::new( + Some(&era_solc::Version::new( mode.solc_version.to_string(), mode.solc_version.to_owned(), None, @@ -422,7 +404,7 @@ impl Compiler for SolidityCompiler { &self, test_path: String, sources: Vec<(String, String)>, - libraries: era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + libraries: era_solc::StandardJsonInputLibraries, mode: &Mode, _test_params: Option<&solidity_adapter::Params>, llvm_options: Vec, diff --git a/compiler_tester/src/compilers/solidity/mode.rs b/compiler_tester/src/compilers/solidity/mode.rs index 45d3d0c2..3b4c7ecd 100644 --- a/compiler_tester/src/compilers/solidity/mode.rs +++ b/compiler_tester/src/compilers/solidity/mode.rs @@ -16,7 +16,7 @@ pub struct Mode { /// The Solidity compiler version. pub solc_version: semver::Version, /// The Solidity compiler output type. - pub solc_codegen: era_compiler_solidity::SolcStandardJsonInputSettingsCodegen, + pub solc_codegen: era_solc::StandardJsonInputCodegen, /// Whether to enable the EVMLA codegen via Yul IR. pub via_ir: bool, /// Whether to run the Solidity compiler optimizer. @@ -35,7 +35,7 @@ impl Mode { /// pub fn new( solc_version: semver::Version, - solc_codegen: era_compiler_solidity::SolcStandardJsonInputSettingsCodegen, + solc_codegen: era_solc::StandardJsonInputCodegen, via_ir: bool, solc_optimize: bool, mut llvm_optimizer_settings: era_compiler_llvm_context::OptimizerSettings, @@ -113,15 +113,15 @@ impl Mode { } match self.solc_codegen { - era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::Yul => { + era_solc::StandardJsonInputCodegen::Yul => { params.compile_via_yul != solidity_adapter::CompileViaYul::False && params.abi_encoder_v1_only != solidity_adapter::ABIEncoderV1Only::True } - era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::EVMLA if self.via_ir => { + era_solc::StandardJsonInputCodegen::EVMLA if self.via_ir => { params.compile_via_yul != solidity_adapter::CompileViaYul::False && params.abi_encoder_v1_only != solidity_adapter::ABIEncoderV1Only::True } - era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::EVMLA => { + era_solc::StandardJsonInputCodegen::EVMLA => { params.compile_via_yul != solidity_adapter::CompileViaYul::True } } @@ -134,11 +134,9 @@ impl std::fmt::Display for Mode { f, "{}{}{} {}", match self.solc_codegen { - era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::Yul => "Y", - era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::EVMLA - if self.via_ir => - "I", - era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::EVMLA => "E", + era_solc::StandardJsonInputCodegen::Yul => "Y", + era_solc::StandardJsonInputCodegen::EVMLA if self.via_ir => "I", + era_solc::StandardJsonInputCodegen::EVMLA => "E", }, if self.solc_optimize { '+' } else { '-' }, self.llvm_optimizer_settings, diff --git a/compiler_tester/src/compilers/solidity/upstream/mod.rs b/compiler_tester/src/compilers/solidity/upstream/mod.rs index 10078d40..283356fc 100644 --- a/compiler_tester/src/compilers/solidity/upstream/mod.rs +++ b/compiler_tester/src/compilers/solidity/upstream/mod.rs @@ -21,9 +21,9 @@ use crate::vm::evm::input::Input as EVMInput; use self::mode::Mode as SolidityUpstreamMode; use self::solc::standard_json::input::language::Language as SolcStandardJsonInputLanguage; -use self::solc::standard_json::input::settings::debug::Debug as SolcStandardJsonInputSettingsDebug; -use self::solc::standard_json::input::settings::optimizer::Optimizer as SolcStandardJsonInputSettingsOptimizer; -use self::solc::standard_json::input::settings::selection::Selection as SolcStandardJsonInputSettingsSelection; +use self::solc::standard_json::input::settings::debug::Debug as SolcStandardJsonInputDebug; +use self::solc::standard_json::input::settings::optimizer::Optimizer as SolcStandardJsonInputOptimizer; +use self::solc::standard_json::input::settings::selection::Selection as SolcStandardJsonInputSelection; use self::solc::standard_json::input::Input as SolcStandardJsonInput; use self::solc::standard_json::output::Output as SolcStandardJsonOutput; use self::solc::Compiler as SolcUpstreamCompiler; @@ -50,12 +50,12 @@ lazy_static::lazy_static! { static ref SOLIDITY_MODES: Vec = { let mut modes = Vec::new(); for (codegen, optimize, via_ir) in [ - (era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::EVMLA, false, false), - (era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::EVMLA, false, true), - (era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::EVMLA, true, false), - (era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::EVMLA, true, true), - (era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::Yul, false, true), - (era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::Yul, true, true), + (era_solc::StandardJsonInputCodegen::EVMLA, false, false), + (era_solc::StandardJsonInputCodegen::EVMLA, false, true), + (era_solc::StandardJsonInputCodegen::EVMLA, true, false), + (era_solc::StandardJsonInputCodegen::EVMLA, true, true), + (era_solc::StandardJsonInputCodegen::Yul, false, true), + (era_solc::StandardJsonInputCodegen::Yul, true, true), ] { for version in SolidityCompiler::all_versions(codegen, via_ir).expect("`solc` versions analysis error") { modes.push(SolidityUpstreamMode::new(version, codegen, via_ir, false, optimize).into()); @@ -74,7 +74,7 @@ lazy_static::lazy_static! { for optimize in [ false, true ] { - for version in SolidityCompiler::all_versions(era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::Yul, true).expect("`solc` versions analysis error") { + for version in SolidityCompiler::all_versions(era_solc::StandardJsonInputCodegen::Yul, true).expect("`solc` versions analysis error") { modes.push(YulUpstreamMode::new(version, false, optimize).into()); } } @@ -87,7 +87,7 @@ lazy_static::lazy_static! { /// All compilers must be downloaded before initialization. /// static ref SOLIDITY_MLIR_MODES: Vec = { - vec![SolidityUpstreamMode::new(semver::Version::new(0, 8, 26), era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::Yul, false, true, false).into()] + vec![SolidityUpstreamMode::new(semver::Version::new(0, 8, 26), era_solc::StandardJsonInputCodegen::Yul, false, true, false).into()] }; /// @@ -140,7 +140,7 @@ impl SolidityCompiler { /// Returns the compiler versions downloaded for the specified compilation codegen. /// pub fn all_versions( - codegen: era_compiler_solidity::SolcStandardJsonInputSettingsCodegen, + codegen: era_solc::StandardJsonInputCodegen, via_ir: bool, ) -> anyhow::Result> { let mut versions = Vec::new(); @@ -170,12 +170,12 @@ impl SolidityCompiler { Ok(version) => version, Err(_) => continue, }; - if era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::Yul == codegen + if era_solc::StandardJsonInputCodegen::Yul == codegen && version < SolcUpstreamCompiler::FIRST_YUL_VERSION { continue; } - if era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::EVMLA == codegen + if era_solc::StandardJsonInputCodegen::EVMLA == codegen && via_ir && version < SolcUpstreamCompiler::FIRST_VIA_IR_VERSION { @@ -194,7 +194,7 @@ impl SolidityCompiler { language: SolcStandardJsonInputLanguage, toolchain: Toolchain, sources: &[(String, String)], - libraries: &era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + libraries: &era_solc::StandardJsonInputLibraries, mode: &Mode, test_params: Option<&solidity_adapter::Params>, ) -> anyhow::Result { @@ -205,15 +205,13 @@ impl SolidityCompiler { }; let mut solc = Self::executable(toolchain, solc_version)?; - let output_selection = SolcStandardJsonInputSettingsSelection::new_required(match mode { + let output_selection = SolcStandardJsonInputSelection::new_required(match mode { Mode::SolidityUpstream(mode) => mode.solc_codegen, - Mode::YulUpstream(_mode) => { - era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::Yul - } + Mode::YulUpstream(_mode) => era_solc::StandardJsonInputCodegen::Yul, mode => anyhow::bail!("Unsupported mode: {mode}"), }); - let optimizer = SolcStandardJsonInputSettingsOptimizer::new(match mode { + let optimizer = SolcStandardJsonInputOptimizer::new(match mode { Mode::SolidityUpstream(mode) => mode.solc_optimize, Mode::YulUpstream(mode) => mode.solc_optimize, mode => anyhow::bail!("Unsupported mode: {mode}"), @@ -244,9 +242,7 @@ impl SolidityCompiler { let debug = if solc_version >= &semver::Version::new(0, 6, 3) { test_params.map(|test_params| { - SolcStandardJsonInputSettingsDebug::new(Some( - test_params.revert_strings.to_string(), - )) + SolcStandardJsonInputDebug::new(Some(test_params.revert_strings.to_string())) }) } else { None @@ -283,7 +279,7 @@ impl SolidityCompiler { test_path: String, language: SolcStandardJsonInputLanguage, sources: &[(String, String)], - libraries: &era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + libraries: &era_solc::StandardJsonInputLibraries, mode: &Mode, test_params: Option<&solidity_adapter::Params>, ) -> anyhow::Result { @@ -298,7 +294,7 @@ impl SolidityCompiler { Mode::YulUpstream(mode) => CacheKey::new( test_path, mode.solc_version.to_owned(), - era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::Yul, + era_solc::StandardJsonInputCodegen::Yul, true, mode.solc_optimize, ), @@ -427,7 +423,7 @@ impl Compiler for SolidityCompiler { &self, test_path: String, sources: Vec<(String, String)>, - libraries: era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + libraries: era_solc::StandardJsonInputLibraries, mode: &Mode, _llvm_options: Vec, _debug_config: Option, @@ -519,7 +515,7 @@ impl Compiler for SolidityCompiler { &self, test_path: String, sources: Vec<(String, String)>, - libraries: era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + libraries: era_solc::StandardJsonInputLibraries, mode: &Mode, test_params: Option<&solidity_adapter::Params>, _llvm_options: Vec, diff --git a/compiler_tester/src/compilers/solidity/upstream/mode.rs b/compiler_tester/src/compilers/solidity/upstream/mode.rs index 3a37b435..41fc264a 100644 --- a/compiler_tester/src/compilers/solidity/upstream/mode.rs +++ b/compiler_tester/src/compilers/solidity/upstream/mode.rs @@ -14,7 +14,7 @@ pub struct Mode { /// The Solidity compiler version. pub solc_version: semver::Version, /// The Solidity compiler output type. - pub solc_codegen: era_compiler_solidity::SolcStandardJsonInputSettingsCodegen, + pub solc_codegen: era_solc::StandardJsonInputCodegen, /// Whether to enable the EVMLA codegen via Yul IR. pub via_ir: bool, /// Whether to enable the MLIR codegen. @@ -29,7 +29,7 @@ impl Mode { /// pub fn new( solc_version: semver::Version, - solc_codegen: era_compiler_solidity::SolcStandardJsonInputSettingsCodegen, + solc_codegen: era_solc::StandardJsonInputCodegen, via_ir: bool, via_mlir: bool, solc_optimize: bool, @@ -98,15 +98,15 @@ impl Mode { } match self.solc_codegen { - era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::Yul => { + era_solc::StandardJsonInputCodegen::Yul => { params.compile_via_yul != solidity_adapter::CompileViaYul::False && params.abi_encoder_v1_only != solidity_adapter::ABIEncoderV1Only::True } - era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::EVMLA if self.via_ir => { + era_solc::StandardJsonInputCodegen::EVMLA if self.via_ir => { params.compile_via_yul != solidity_adapter::CompileViaYul::False && params.abi_encoder_v1_only != solidity_adapter::ABIEncoderV1Only::True } - era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::EVMLA => { + era_solc::StandardJsonInputCodegen::EVMLA => { params.compile_via_yul != solidity_adapter::CompileViaYul::True } } @@ -123,11 +123,9 @@ impl std::fmt::Display for Mode { f, "{}{} {}", match self.solc_codegen { - era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::Yul => "Y", - era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::EVMLA - if self.via_ir => - "I", - era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::EVMLA => "E", + era_solc::StandardJsonInputCodegen::Yul => "Y", + era_solc::StandardJsonInputCodegen::EVMLA if self.via_ir => "I", + era_solc::StandardJsonInputCodegen::EVMLA => "E", }, if self.solc_optimize { '+' } else { '-' }, self.solc_version, diff --git a/compiler_tester/src/compilers/solidity/upstream/solc/standard_json/input/mod.rs b/compiler_tester/src/compilers/solidity/upstream/solc/standard_json/input/mod.rs index a1feb86d..b051e233 100644 --- a/compiler_tester/src/compilers/solidity/upstream/solc/standard_json/input/mod.rs +++ b/compiler_tester/src/compilers/solidity/upstream/solc/standard_json/input/mod.rs @@ -13,9 +13,9 @@ use rayon::iter::IntoParallelIterator; use rayon::iter::ParallelIterator; use serde::Serialize; -use self::settings::debug::Debug as SolcStandardJsonInputSettingsDebug; -use self::settings::optimizer::Optimizer as SolcStandardJsonInputSettingsOptimizer; -use self::settings::selection::Selection as SolcStandardJsonInputSettingsSelection; +use self::settings::debug::Debug as SolcStandardJsonInputDebug; +use self::settings::optimizer::Optimizer as SolcStandardJsonInputOptimizer; +use self::settings::selection::Selection as SolcStandardJsonInputSelection; use self::language::Language; use self::settings::Settings; @@ -45,13 +45,13 @@ impl Input { language: Language, evm_version: Option, sources: BTreeMap, - libraries: era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + libraries: era_solc::StandardJsonInputLibraries, remappings: Option>, - output_selection: SolcStandardJsonInputSettingsSelection, + output_selection: SolcStandardJsonInputSelection, via_ir: bool, via_mlir: bool, - optimizer: SolcStandardJsonInputSettingsOptimizer, - debug: Option, + optimizer: SolcStandardJsonInputOptimizer, + debug: Option, ) -> anyhow::Result { let sources = sources .into_par_iter() diff --git a/compiler_tester/src/compilers/solidity/upstream/solc/standard_json/input/settings/mod.rs b/compiler_tester/src/compilers/solidity/upstream/solc/standard_json/input/settings/mod.rs index 1ffd5b12..8daf0889 100644 --- a/compiler_tester/src/compilers/solidity/upstream/solc/standard_json/input/settings/mod.rs +++ b/compiler_tester/src/compilers/solidity/upstream/solc/standard_json/input/settings/mod.rs @@ -26,9 +26,9 @@ pub struct Settings { /// The linker library addresses. #[serde( default, - skip_serializing_if = "era_compiler_solidity::SolcStandardJsonInputSettingsLibraries::is_empty" + skip_serializing_if = "era_solc::StandardJsonInputLibraries::is_empty" )] - pub libraries: era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + pub libraries: era_solc::StandardJsonInputLibraries, /// The sorted list of remappings. #[serde(skip_serializing_if = "Option::is_none")] pub remappings: Option>, @@ -62,7 +62,7 @@ impl Settings { /// pub fn new( evm_version: Option, - libraries: era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + libraries: era_solc::StandardJsonInputLibraries, remappings: Option>, output_selection: Selection, via_ir: bool, diff --git a/compiler_tester/src/compilers/solidity/upstream/solc/standard_json/input/settings/selection/file/flag.rs b/compiler_tester/src/compilers/solidity/upstream/solc/standard_json/input/settings/selection/file/flag.rs index e5eb3fce..20ef485b 100644 --- a/compiler_tester/src/compilers/solidity/upstream/solc/standard_json/input/settings/selection/file/flag.rs +++ b/compiler_tester/src/compilers/solidity/upstream/solc/standard_json/input/settings/selection/file/flag.rs @@ -28,11 +28,11 @@ pub enum Flag { EVMLA, } -impl From for Flag { - fn from(codegen: era_compiler_solidity::SolcStandardJsonInputSettingsCodegen) -> Self { +impl From for Flag { + fn from(codegen: era_solc::StandardJsonInputCodegen) -> Self { match codegen { - era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::Yul => Self::Yul, - era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::EVMLA => Self::EVMLA, + era_solc::StandardJsonInputCodegen::Yul => Self::Yul, + era_solc::StandardJsonInputCodegen::EVMLA => Self::EVMLA, } } } diff --git a/compiler_tester/src/compilers/solidity/upstream/solc/standard_json/input/settings/selection/file/mod.rs b/compiler_tester/src/compilers/solidity/upstream/solc/standard_json/input/settings/selection/file/mod.rs index d49a842c..263a60a0 100644 --- a/compiler_tester/src/compilers/solidity/upstream/solc/standard_json/input/settings/selection/file/mod.rs +++ b/compiler_tester/src/compilers/solidity/upstream/solc/standard_json/input/settings/selection/file/mod.rs @@ -27,9 +27,7 @@ impl File { /// /// Creates the selection required by EVM compilation process. /// - pub fn new_required( - codegen: era_compiler_solidity::SolcStandardJsonInputSettingsCodegen, - ) -> Self { + pub fn new_required(codegen: era_solc::StandardJsonInputCodegen) -> Self { Self { per_file: Some(HashSet::from_iter([SelectionFlag::AST])), per_contract: Some(HashSet::from_iter([ diff --git a/compiler_tester/src/compilers/solidity/upstream/solc/standard_json/input/settings/selection/mod.rs b/compiler_tester/src/compilers/solidity/upstream/solc/standard_json/input/settings/selection/mod.rs index 4e8ffcf5..db6cb4ee 100644 --- a/compiler_tester/src/compilers/solidity/upstream/solc/standard_json/input/settings/selection/mod.rs +++ b/compiler_tester/src/compilers/solidity/upstream/solc/standard_json/input/settings/selection/mod.rs @@ -22,9 +22,7 @@ impl Selection { /// /// Creates the selection required by EVM compilation process. /// - pub fn new_required( - codegen: era_compiler_solidity::SolcStandardJsonInputSettingsCodegen, - ) -> Self { + pub fn new_required(codegen: era_solc::StandardJsonInputCodegen) -> Self { Self { all: Some(FileSelection::new_required(codegen)), } diff --git a/compiler_tester/src/compilers/vyper/mod.rs b/compiler_tester/src/compilers/vyper/mod.rs index b89f2a61..5d892239 100644 --- a/compiler_tester/src/compilers/vyper/mod.rs +++ b/compiler_tester/src/compilers/vyper/mod.rs @@ -195,7 +195,7 @@ impl Compiler for VyperCompiler { &self, test_path: String, sources: Vec<(String, String)>, - _libraries: era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + _libraries: era_solc::StandardJsonInputLibraries, mode: &Mode, llvm_options: Vec, debug_config: Option, @@ -258,7 +258,7 @@ impl Compiler for VyperCompiler { &self, _test_path: String, _sources: Vec<(String, String)>, - _libraries: era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + _libraries: era_solc::StandardJsonInputLibraries, _mode: &Mode, _test_params: Option<&solidity_adapter::Params>, _llvm_options: Vec, diff --git a/compiler_tester/src/compilers/yul/mod.rs b/compiler_tester/src/compilers/yul/mod.rs index 824bf22b..5268c179 100644 --- a/compiler_tester/src/compilers/yul/mod.rs +++ b/compiler_tester/src/compilers/yul/mod.rs @@ -7,7 +7,7 @@ pub mod mode_upstream; use std::collections::HashMap; -use era_compiler_solidity::CollectableError; +use era_solc::CollectableError; use crate::compilers::mode::Mode; use crate::compilers::solidity::upstream::solc::standard_json::input::language::Language as SolcStandardJsonInputLanguage; @@ -54,7 +54,7 @@ impl Compiler for YulCompiler { &self, _test_path: String, sources: Vec<(String, String)>, - libraries: era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + libraries: era_solc::StandardJsonInputLibraries, mode: &Mode, llvm_options: Vec, debug_config: Option, @@ -64,9 +64,9 @@ impl Compiler for YulCompiler { let solc_version = if mode.enable_eravm_extensions { None } else { - Some(era_compiler_solidity::SolcVersion::new( - era_compiler_solidity::SolcCompiler::LAST_SUPPORTED_VERSION.to_string(), - era_compiler_solidity::SolcCompiler::LAST_SUPPORTED_VERSION, + Some(era_solc::Version::new( + era_solc::Compiler::LAST_SUPPORTED_VERSION.to_string(), + era_solc::Compiler::LAST_SUPPORTED_VERSION, None, )) }; @@ -81,12 +81,7 @@ impl Compiler for YulCompiler { let sources = sources .into_iter() - .map(|(path, source)| { - ( - path, - era_compiler_solidity::SolcStandardJsonInputSource::from(source), - ) - }) + .map(|(path, source)| (path, era_solc::StandardJsonInputSource::from(source))) .collect(); let project = era_compiler_solidity::Project::try_from_yul_sources( @@ -131,7 +126,7 @@ impl Compiler for YulCompiler { &self, test_path: String, sources: Vec<(String, String)>, - libraries: era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + libraries: era_solc::StandardJsonInputLibraries, mode: &Mode, test_params: Option<&solidity_adapter::Params>, _llvm_options: Vec, diff --git a/compiler_tester/src/directories/ethereum/test.rs b/compiler_tester/src/directories/ethereum/test.rs index 99172fc7..31a43242 100644 --- a/compiler_tester/src/directories/ethereum/test.rs +++ b/compiler_tester/src/directories/ethereum/test.rs @@ -124,7 +124,7 @@ impl EthereumTest { ) -> anyhow::Result<( web3::types::Address, BTreeMap, - era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + era_solc::StandardJsonInputLibraries, )> { let mut caller = solidity_adapter::account_address(solidity_adapter::DEFAULT_ACCOUNT_INDEX); diff --git a/compiler_tester/src/directories/matter_labs/test/mod.rs b/compiler_tester/src/directories/matter_labs/test/mod.rs index 313e7863..8a32951e 100644 --- a/compiler_tester/src/directories/matter_labs/test/mod.rs +++ b/compiler_tester/src/directories/matter_labs/test/mod.rs @@ -230,7 +230,7 @@ impl MatterLabsTest { &self, address_iterator: &mut API, ) -> ( - era_compiler_solidity::SolcStandardJsonInputSettingsLibraries, + era_solc::StandardJsonInputLibraries, BTreeMap, ) where diff --git a/compiler_tester/src/vm/eravm/system_contracts.rs b/compiler_tester/src/vm/eravm/system_contracts.rs index 8dc79694..fae0d6b2 100644 --- a/compiler_tester/src/vm/eravm/system_contracts.rs +++ b/compiler_tester/src/vm/eravm/system_contracts.rs @@ -293,7 +293,7 @@ impl SystemContracts { let solidity_optimizer_settings = era_compiler_llvm_context::OptimizerSettings::cycles(); let solidity_mode = SolidityMode::new( solc_version, - era_compiler_solidity::SolcStandardJsonInputSettingsCodegen::Yul, + era_solc::StandardJsonInputCodegen::Yul, true, true, solidity_optimizer_settings, @@ -430,7 +430,7 @@ impl SystemContracts { .compile_for_eravm( "system-contracts".to_owned(), sources, - era_compiler_solidity::SolcStandardJsonInputSettingsLibraries::default(), + era_solc::StandardJsonInputLibraries::default(), mode, llvm_options, debug_config, diff --git a/fuzzer/Cargo.toml b/fuzzer/Cargo.toml index 85a1434d..d5138c51 100644 --- a/fuzzer/Cargo.toml +++ b/fuzzer/Cargo.toml @@ -36,6 +36,7 @@ zkevm_tester = { git = "https://github.com/matter-labs/era-zkevm_tester", branch era-compiler-common = { git = "https://github.com/matter-labs/era-compiler-common", branch = "main" } era-compiler-llvm-context = { git = "https://github.com/matter-labs/era-compiler-llvm-context", branch = "main" } era-compiler-solidity = { git = "https://github.com/matter-labs/era-compiler-solidity", branch = "main" } +era-solc = { git = "https://github.com/matter-labs/era-compiler-solidity", branch = "main" } compiler-tester = { path = "../compiler_tester" } solidity-adapter = { path = "../solidity_adapter" } diff --git a/fuzzer/fuzz_targets/common.rs b/fuzzer/fuzz_targets/common.rs index 6e3044b5..630ec565 100644 --- a/fuzzer/fuzz_targets/common.rs +++ b/fuzzer/fuzz_targets/common.rs @@ -9,7 +9,6 @@ use std::{path::PathBuf, sync::Arc}; use compiler_tester::{ Buildable, EthereumTest, Mode, SolidityCompiler, SolidityMode, Summary, Workflow, }; -use era_compiler_solidity::SolcStandardJsonInputSettingsCodegen; pub use solidity_adapter::{ test::function_call::parser::{ @@ -160,7 +159,7 @@ pub fn build_and_run(test: EthereumTest) -> anyhow::Result { let solc_version = semver::Version::new(0, 8, 26); let mode = Mode::Solidity(SolidityMode::new( solc_version, - SolcStandardJsonInputSettingsCodegen::Yul, + era_solc::StandardJsonInputCodegen::Yul, true, true, era_compiler_llvm_context::OptimizerSettings::try_from_cli('3')