Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
PR feedback
Browse files Browse the repository at this point in the history
mostly moving things around
MBerguer committed Jan 27, 2025
1 parent 79eb414 commit af26a8c
Showing 9 changed files with 84 additions and 75 deletions.
1 change: 1 addition & 0 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/common/src/compile.rs
Original file line number Diff line number Diff line change
@@ -193,7 +193,7 @@ impl ProjectCompiler {
let quiet = self.quiet.unwrap_or(false);
let bail = self.bail.unwrap_or(true);

let output = with_compilation_reporter(quiet, || {
let output = with_compilation_reporter(self.quiet.unwrap_or(false), || {
tracing::debug!("compiling project");

let timer = Instant::now();
7 changes: 5 additions & 2 deletions crates/config/src/zksync.rs
Original file line number Diff line number Diff line change
@@ -144,11 +144,14 @@ impl ZkSyncConfig {
codegen: if self.force_evmla { Codegen::EVMLA } else { Codegen::Yul },
suppressed_warnings: self.suppressed_warnings.clone(),
suppressed_errors: self.suppressed_errors.clone(),
zksolc_version: self.zksolc.as_ref().and_then(|req| req.try_version().ok()),
};

// `cli_settings` get set from `Project` values when building `ZkSolcVersionedInput`
ZkSolcSettings { settings: zk_settings, cli_settings: CliSettings::default() }
ZkSolcSettings {
settings: zk_settings,
cli_settings: CliSettings::default(),
zksolc_version: None,
}
}
}

65 changes: 0 additions & 65 deletions crates/forge/tests/cli/zk_build.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
use foundry_common::fs;
use foundry_test_utils::util::OutputExt;
use regex::Regex;

@@ -12,67 +11,3 @@ forgetest_init!(test_zk_build_sizes, |prj, cmd| {

assert!(pattern.is_match(&stdout), "Unexpected size output:\n{stdout}");
});

// tests cache works as expected in zksync mode
forgetest_init!(test_zk_cache_ok, |prj, cmd| {
let zk_toml = r#"[profile.default]
src = 'src'
out = 'out'
libs = ['lib']
solc = '0.8.26'
[profile.default.zksync]
zksolc = '1.5.6'
"#;

fs::write(prj.root().join("foundry.toml"), zk_toml).unwrap();

cmd.args(["build", "--zksync"]);
let stdout_1 = cmd.assert_success().get_output().stdout_lossy();
let pattern_1 = Regex::new(r"Compiler run successful").unwrap();

let stdout_2 = cmd.assert_success().get_output().stdout_lossy();
let pattern_2 = Regex::new(r"No files changed, compilation skipped").unwrap();

assert!(pattern_1.is_match(&stdout_1));
assert!(pattern_2.is_match(&stdout_2));
});

// tests cache is invalidated when zksolc version changes
forgetest_init!(test_zk_cache_invalid_on_version_changed, |prj, cmd| {
let template_toml = r#"[profile.default]
src = 'src'
out = 'out'
libs = ['lib']
solc = '0.8.26'
[profile.default.zksync]
"#;

let toml_156 = format!(
r#"{template_toml}
zksolc = '1.5.6'
"#
);

let toml_157 = format!(
r#"{template_toml}
zksolc = '1.5.7'
"#
);

fs::write(prj.root().join("foundry.toml"), toml_156).unwrap();

cmd.args(["build", "--zksync"]);
let stdout_1 = cmd.assert_success().get_output().stdout_lossy();
let pattern_1 = Regex::new(r"Compiler run successful").unwrap();

fs::remove_file(prj.root().join("foundry.toml")).unwrap();
fs::write(prj.root().join("foundry.toml"), toml_157).unwrap();

let stdout_2 = cmd.assert_success().get_output().stdout_lossy();
let pattern_2 = Regex::new(r"Compiler run successful!").unwrap(); // if we see this, means the cache was invalidated

assert!(pattern_1.is_match(&stdout_1));
assert!(pattern_2.is_match(&stdout_2));
});
2 changes: 2 additions & 0 deletions crates/zksync/compilers/Cargo.toml
Original file line number Diff line number Diff line change
@@ -38,3 +38,5 @@ similar-asserts.workspace = true
fd-lock = "4.0.2"
tempfile.workspace = true
foundry-test-utils.workspace = true
regex = { workspace = true, default-features = false }

2 changes: 1 addition & 1 deletion crates/zksync/compilers/src/compilers/zksolc/input.rs
Original file line number Diff line number Diff line change
@@ -40,7 +40,7 @@ impl CompilerInput for ZkSolcVersionedInput {
language: Self::Language,
version: Version,
) -> Self {
let ZkSolcSettings { settings, cli_settings } = settings;
let ZkSolcSettings { settings, cli_settings, .. } = settings;
let input = ZkSolcInput::new(language, sources, settings).sanitized(&version);

Self { solc_version: version, input, cli_settings }
10 changes: 4 additions & 6 deletions crates/zksync/compilers/src/compilers/zksolc/settings.rs
Original file line number Diff line number Diff line change
@@ -87,9 +87,6 @@ pub struct ZkSettings {
/// Suppressed `zksolc` errors.
#[serde(default, skip_serializing_if = "HashSet::is_empty")]
pub suppressed_errors: HashSet<ErrorType>,
/// The version of the zksolc compiler to use.
#[serde(default, skip_serializing_if = "Option::is_none")]
pub zksolc_version: Option<Version>,
}

/// Analogous to SolcSettings for zksolc compiler
@@ -102,6 +99,9 @@ pub struct ZkSolcSettings {
/// Additional CLI args configuration
#[serde(flatten)]
pub cli_settings: solc::CliSettings,
/// The version of the zksolc compiler to use.
#[serde(default, skip_serializing_if = "Option::is_none")]
pub zksolc_version: Option<Version>,
}

impl ZkSettings {
@@ -170,7 +170,6 @@ impl Default for ZkSettings {
codegen: Default::default(),
suppressed_errors: Default::default(),
suppressed_warnings: Default::default(),
zksolc_version: None,
}
}
}
@@ -210,7 +209,6 @@ impl CompilerSettings for ZkSolcSettings {
codegen,
suppressed_warnings,
suppressed_errors,
zksolc_version,
},
..
} = self;
@@ -228,7 +226,7 @@ impl CompilerSettings for ZkSolcSettings {
*codegen == other.settings.codegen &&
*suppressed_warnings == other.settings.suppressed_warnings &&
*suppressed_errors == other.settings.suppressed_errors &&
*zksolc_version == other.settings.zksolc_version
self.zksolc_version == other.zksolc_version
}

fn with_remappings(mut self, remappings: &[Remapping]) -> Self {
2 changes: 2 additions & 0 deletions crates/zksync/compilers/src/lib.rs
Original file line number Diff line number Diff line change
@@ -13,4 +13,6 @@ pub mod libraries;
#[cfg(test)]
use foundry_test_utils as _;
#[cfg(test)]
use regex as _;
#[cfg(test)]
use tempfile as _;
68 changes: 68 additions & 0 deletions crates/zksync/compilers/tests/zksync_tests.rs
Original file line number Diff line number Diff line change
@@ -12,13 +12,15 @@ use foundry_test_utils::foundry_compilers::{
};

use era_solc::standard_json::input::settings::{error_type::ErrorType, warning_type::WarningType};
use foundry_test_utils::{forgetest_init, util::OutputExt};
use foundry_zksync_compilers::{
artifacts::{contract::Contract, error::Error},
compilers::{
artifact_output::zk::ZkArtifactOutput,
zksolc::{input::ZkSolcInput, ZkSolc, ZkSolcCompiler, ZkSolcSettings},
},
};
use regex::Regex;

#[test]
fn zksync_can_compile_dapp_sample() {
@@ -654,3 +656,69 @@ fn zksync_can_compile_yul_sample() {

assert!(!yul_bytecode.is_empty(), "SimpleStore bytecode is empty");
}

forgetest_init!(test_zk_cache_ok, |prj, cmd| {
let zk_toml = r#"[profile.default]
src = 'src'
out = 'out'
libs = ['lib']
solc = '0.8.26'
[profile.default.zksync]
zksolc = '1.5.6'
"#;

fs::write(prj.root().join("foundry.toml"), zk_toml).unwrap();

cmd.args(["build", "--zksync"]);
let stdout_1 = cmd.assert_success().get_output().stdout_lossy();
let pattern_1 = Regex::new(r"Compiler run successful").unwrap();

let stdout_2 = cmd.assert_success().get_output().stdout_lossy();
let pattern_2 = Regex::new(r"No files changed, compilation skipped").unwrap();

assert!(pattern_1.is_match(&stdout_1));
assert!(pattern_2.is_match(&stdout_2));
});

// tests cache is invalidated when zksolc version changes
forgetest_init!(test_zk_cache_invalid_on_version_changed, |prj, cmd| {
let template_toml = r#"[profile.default]
src = 'src'
out = 'out'
libs = ['lib']
solc = '0.8.26'
[profile.default.zksync]
"#;

let toml_156 = format!(
r#"{template_toml}
zksolc = '1.5.6'
"#
);

let toml_157 = format!(
r#"{template_toml}
zksolc = '1.5.7'
"#
);

fs::write(prj.root().join("foundry.toml"), toml_156).unwrap();

cmd.args(["build", "--zksync"]);
let stdout_1 = cmd.assert_success().get_output().stdout_lossy();
let pattern_1 = Regex::new(r"Compiler run successful").unwrap();

fs::remove_file(prj.root().join("foundry.toml")).unwrap();
fs::write(prj.root().join("foundry.toml"), toml_157).unwrap();

let stdout_2 = cmd.assert_success().get_output().stdout_lossy();
let pattern_2 = Regex::new(r"Compiler run successful!").unwrap(); // if we see this, means the cache was invalidated

print!("stdout_1: {}", stdout_1);
print!("stdout_2: {}", stdout_2);

assert!(pattern_1.is_match(&stdout_1));
assert!(pattern_2.is_match(&stdout_2));
});

0 comments on commit af26a8c

Please sign in to comment.