From ddb7b95356af7adf0247868e4c233e405c876994 Mon Sep 17 00:00:00 2001 From: guorong009 Date: Thu, 7 Aug 2025 16:14:48 +0800 Subject: [PATCH 01/15] feat: use criterion for provekit benchmark --- Cargo.lock | 1 + provekit/Cargo.toml | 7 +++++- provekit/benches/prove_verify.rs | 37 +++++++++++++++++++++++++++ provekit/benches/provekit.rs | 6 ----- provekit/src/lib.rs | 43 +++++++++++--------------------- 5 files changed, 59 insertions(+), 35 deletions(-) create mode 100644 provekit/benches/prove_verify.rs delete mode 100644 provekit/benches/provekit.rs diff --git a/Cargo.lock b/Cargo.lock index ddbc53b..2363deb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6499,6 +6499,7 @@ dependencies = [ name = "provekit" version = "0.1.0" dependencies = [ + "criterion", "noir-r1cs", "rand 0.8.5", "utils", diff --git a/provekit/Cargo.toml b/provekit/Cargo.toml index 979e72d..822e9d2 100644 --- a/provekit/Cargo.toml +++ b/provekit/Cargo.toml @@ -6,8 +6,13 @@ edition = "2024" [dependencies] rand = { workspace = true } utils = { workspace = true } +criterion = { workspace = true } noir-r1cs = { git = "https://github.com/worldfnd/ProveKit", branch = "main" } [[bench]] -name = "provekit" +name = "prove_verify" harness = false + +[[bin]] +name = "provekit-measure" +path = "src/bin/measure.rs" diff --git a/provekit/benches/prove_verify.rs b/provekit/benches/prove_verify.rs new file mode 100644 index 0000000..7ea5cba --- /dev/null +++ b/provekit/benches/prove_verify.rs @@ -0,0 +1,37 @@ +use criterion::{BatchSize, Criterion, criterion_group, criterion_main}; +use provekit::{prove, setup, verify}; + +fn sha256_bench(c: &mut Criterion) { + let mut group = c.benchmark_group("sha256_bench"); + group.sample_size(10); + + group.bench_function("sha256_bench_prove", |bench| { + bench.iter_batched( + || { + let _ = setup().unwrap(); + }, + || { + prove(11); + }, + BatchSize::SmallInput, + ); + }); + + group.bench_function("sha256_bench_verify", |bench| { + bench.iter_batched( + || { + let _ = setup().unwrap(); + let proof = prove(11); + proof + }, + |proof| { + verify(11, proof); + }, + BatchSize::SmallInput, + ); + }); + group.finish(); +} + +criterion_main!(sha256); +criterion_group!(sha256, sha256_bench); diff --git a/provekit/benches/provekit.rs b/provekit/benches/provekit.rs deleted file mode 100644 index e225673..0000000 --- a/provekit/benches/provekit.rs +++ /dev/null @@ -1,6 +0,0 @@ -use provekit::{bench_sha256, setup}; - -fn main() { - setup().unwrap(); - bench_sha256(); -} diff --git a/provekit/src/lib.rs b/provekit/src/lib.rs index cd1a79e..e9417a6 100644 --- a/provekit/src/lib.rs +++ b/provekit/src/lib.rs @@ -1,4 +1,4 @@ -use noir_r1cs::NoirProofScheme; +use noir_r1cs::{NoirProof, NoirProofScheme}; use rand::RngCore; use std::fs::{self, File}; use std::io::{Read, Write}; @@ -6,10 +6,9 @@ use std::process::Command; use std::time::Instant; use utils::bench::{Metrics, benchmark}; -pub const INPUT_EXP: [u32; 5] = [8, 9, 10, 11, 12]; +pub const INPUT_EXP: [u32; 1] = [11]; pub const TMP_DIR: &str = "tmp"; pub const CIRCUIT_ROOT: &str = "circuits/hash/sha256-provekit"; -pub const CSV_OUTPUT: &str = "tmp/provekit_sha256.csv"; /// Generates random input files for hashing benchmarks. pub fn generate_hash_inputs() -> Result<(), &'static str> { @@ -104,35 +103,23 @@ pub fn setup() -> Result<(), &'static str> { Ok(()) } -/// Benchmarks provekit with sha256 for all input exponents. -pub fn bench_sha256() { - let inputs: Vec = INPUT_EXP.to_vec(); +pub fn prove(input_exp: u32) -> NoirProof { + let circuit_dir = format!("{}/sha256-bench-2e{}", CIRCUIT_ROOT, input_exp); + let circuit_path = format!("circuits/target/sha256_bench_2e{}.json", input_exp); + let prover_toml_path = format!("{}/Prover.toml", circuit_dir); - benchmark( - |input_exp| { - let size = 1usize << input_exp; - let mut metrics = Metrics::new(size); + let proof_scheme = NoirProofScheme::from_file(&circuit_path).unwrap(); + let input_map = proof_scheme.read_witness(&prover_toml_path).unwrap(); - let circuit_dir = format!("{}/sha256-bench-2e{}", CIRCUIT_ROOT, input_exp); - let circuit_path = format!("circuits/target/sha256_bench_2e{}.json", input_exp); - let prover_toml_path = format!("{}/Prover.toml", circuit_dir); + let proof = proof_scheme.prove(&input_map).unwrap(); - let proof_scheme = NoirProofScheme::from_file(&circuit_path).unwrap(); - let input_map = proof_scheme.read_witness(&prover_toml_path).unwrap(); - - let prove_start = Instant::now(); - let proof = proof_scheme.prove(&input_map).unwrap(); - metrics.proof_duration = prove_start.elapsed(); + proof +} - let verify_start = Instant::now(); - proof_scheme.verify(&proof).unwrap(); - metrics.verify_duration = verify_start.elapsed(); +pub fn verify(input_exp: u32, proof: NoirProof) { + let circuit_path = format!("circuits/target/sha256_bench_2e{}.json", input_exp); - metrics.proof_size = proof.whir_r1cs_proof.transcript.len(); + let proof_scheme = NoirProofScheme::from_file(&circuit_path).unwrap(); - metrics - }, - &inputs, - CSV_OUTPUT, - ); + proof_scheme.verify(&proof).unwrap(); } From bc5b0e7c4d423beb5e0c518679c2743cf7211afa Mon Sep 17 00:00:00 2001 From: guorong009 Date: Thu, 7 Aug 2025 16:15:29 +0800 Subject: [PATCH 02/15] feat: add RAM measurement code for provekit benchmark --- provekit/src/bin/measure.rs | 43 +++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 provekit/src/bin/measure.rs diff --git a/provekit/src/bin/measure.rs b/provekit/src/bin/measure.rs new file mode 100644 index 0000000..533c9dd --- /dev/null +++ b/provekit/src/bin/measure.rs @@ -0,0 +1,43 @@ +use provekit::{CIRCUIT_ROOT, prove, setup}; +use utils::bench::{SubMetrics, measure_peak_memory, write_json_submetrics}; + +fn main() { + let json_file = "sha2_provekit_submetrics.json"; + + let input_exp = 11; // 2048 bytes + let metrics = benchmark_sha2(input_exp); + + write_json_submetrics(json_file, &metrics); +} + +fn benchmark_sha2(input_exp: u32) -> SubMetrics { + let num_bytes = 1usize << input_exp; + let mut metrics = SubMetrics::new(num_bytes); + + let (_, peak_memory) = measure_peak_memory(|| setup().unwrap()); + metrics.preprocessing_peak_memory = peak_memory; + println!( + "Preprocessing peak memory: {} GB", + peak_memory as f32 / (1024.0 * 1024.0 * 1024.0), + ); + + // Load the preprocessing files. + let circuit_dir = format!("{}/sha256-bench-2e{}", CIRCUIT_ROOT, input_exp); + let circuit_path = format!("circuits/target/sha256_bench_2e{}.json", input_exp); + let prover_toml_path = format!("{}/Prover.toml", circuit_dir); + + let proof_scheme_file_bytes = std::fs::read(&circuit_path).unwrap(); + let input_map_file_bytes = std::fs::read(&prover_toml_path).unwrap(); + metrics.preprocessing_size = proof_scheme_file_bytes.len() + input_map_file_bytes.len(); + + let (proof, peak_memory) = measure_peak_memory(|| prove(input_exp)); + metrics.proving_peak_memory = peak_memory; + metrics.proof_size = proof.whir_r1cs_proof.transcript.len(); + + println!( + "Proving peak memory: {} GB", + peak_memory as f32 / (1024.0 * 1024.0 * 1024.0), + ); + + metrics +} From 4e29a5c12d96ae89a0ab41100214afd4509f276c Mon Sep 17 00:00:00 2001 From: guorong009 Date: Thu, 7 Aug 2025 16:15:43 +0800 Subject: [PATCH 03/15] doc: add README for provekit benchmark --- provekit/README.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 provekit/README.md diff --git a/provekit/README.md b/provekit/README.md new file mode 100644 index 0000000..4e2bda1 --- /dev/null +++ b/provekit/README.md @@ -0,0 +1,16 @@ +# ProveKit SHA256 Benchmark + +This benchmark code is using the ProveKit of World Foundation(https://github.com/worldfnd/ProveKit). + + +## Benchmarking + +```bash +cargo bench +``` + +Measure RAM footprint: + +```bash +cargo run -r --bin provekit-measure +``` From d398f1c62e077041c99c9a3aba3ac050fb5bef26 Mon Sep 17 00:00:00 2001 From: guorong009 Date: Thu, 7 Aug 2025 17:06:21 +0800 Subject: [PATCH 04/15] ref: use "SHA2_INPUTS" metadata for provekit benchmark --- provekit/benches/prove_verify.rs | 6 +++--- provekit/src/bin/measure.rs | 15 +++++++-------- provekit/src/lib.rs | 28 ++++++++++++++-------------- 3 files changed, 24 insertions(+), 25 deletions(-) diff --git a/provekit/benches/prove_verify.rs b/provekit/benches/prove_verify.rs index 7ea5cba..ca53856 100644 --- a/provekit/benches/prove_verify.rs +++ b/provekit/benches/prove_verify.rs @@ -11,7 +11,7 @@ fn sha256_bench(c: &mut Criterion) { let _ = setup().unwrap(); }, || { - prove(11); + prove(2048); }, BatchSize::SmallInput, ); @@ -21,11 +21,11 @@ fn sha256_bench(c: &mut Criterion) { bench.iter_batched( || { let _ = setup().unwrap(); - let proof = prove(11); + let proof = prove(2048); proof }, |proof| { - verify(11, proof); + verify(2048, proof); }, BatchSize::SmallInput, ); diff --git a/provekit/src/bin/measure.rs b/provekit/src/bin/measure.rs index 533c9dd..af2b7bb 100644 --- a/provekit/src/bin/measure.rs +++ b/provekit/src/bin/measure.rs @@ -4,15 +4,14 @@ use utils::bench::{SubMetrics, measure_peak_memory, write_json_submetrics}; fn main() { let json_file = "sha2_provekit_submetrics.json"; - let input_exp = 11; // 2048 bytes - let metrics = benchmark_sha2(input_exp); + let input_num_bytes = 2048; + let metrics = benchmark_sha2(input_num_bytes); write_json_submetrics(json_file, &metrics); } -fn benchmark_sha2(input_exp: u32) -> SubMetrics { - let num_bytes = 1usize << input_exp; - let mut metrics = SubMetrics::new(num_bytes); +fn benchmark_sha2(input_num_bytes: usize) -> SubMetrics { + let mut metrics = SubMetrics::new(input_num_bytes); let (_, peak_memory) = measure_peak_memory(|| setup().unwrap()); metrics.preprocessing_peak_memory = peak_memory; @@ -22,15 +21,15 @@ fn benchmark_sha2(input_exp: u32) -> SubMetrics { ); // Load the preprocessing files. - let circuit_dir = format!("{}/sha256-bench-2e{}", CIRCUIT_ROOT, input_exp); - let circuit_path = format!("circuits/target/sha256_bench_2e{}.json", input_exp); + let circuit_dir = format!("{}/sha256-bench-{}", CIRCUIT_ROOT, input_num_bytes); + let circuit_path = format!("circuits/target/sha256_bench_{}.json", input_num_bytes); let prover_toml_path = format!("{}/Prover.toml", circuit_dir); let proof_scheme_file_bytes = std::fs::read(&circuit_path).unwrap(); let input_map_file_bytes = std::fs::read(&prover_toml_path).unwrap(); metrics.preprocessing_size = proof_scheme_file_bytes.len() + input_map_file_bytes.len(); - let (proof, peak_memory) = measure_peak_memory(|| prove(input_exp)); + let (proof, peak_memory) = measure_peak_memory(|| prove(input_num_bytes)); metrics.proving_peak_memory = peak_memory; metrics.proof_size = proof.whir_r1cs_proof.transcript.len(); diff --git a/provekit/src/lib.rs b/provekit/src/lib.rs index e9417a6..56d6dd6 100644 --- a/provekit/src/lib.rs +++ b/provekit/src/lib.rs @@ -4,9 +4,11 @@ use std::fs::{self, File}; use std::io::{Read, Write}; use std::process::Command; use std::time::Instant; -use utils::bench::{Metrics, benchmark}; +use utils::{ + bench::{Metrics, benchmark}, + metadata::SHA2_INPUTS, +}; -pub const INPUT_EXP: [u32; 1] = [11]; pub const TMP_DIR: &str = "tmp"; pub const CIRCUIT_ROOT: &str = "circuits/hash/sha256-provekit"; @@ -17,9 +19,8 @@ pub fn generate_hash_inputs() -> Result<(), &'static str> { let mut rng = rand::thread_rng(); - for exp in INPUT_EXP { - let size = 1usize << exp; - let bin_path = format!("{}/input_2e{}.bin", input_dir, exp); + for size in SHA2_INPUTS { + let bin_path = format!("{}/input_{}.bin", input_dir, size); let mut data = vec![0u8; size]; rng.fill_bytes(&mut data); @@ -80,10 +81,9 @@ pub fn generate_prover_toml( /// Sets up Prover.toml files for all circuits. pub fn setup_circuits() -> Result<(), &'static str> { - for exp in INPUT_EXP { - let size = 1usize << exp; - let input_file = format!("{}/hash-input/input_2e{}.bin", TMP_DIR, exp); - let circuit_dir = format!("{}/sha256-bench-2e{}", CIRCUIT_ROOT, exp); + for size in SHA2_INPUTS { + let input_file = format!("{}/hash-input/input_{}.bin", TMP_DIR, size); + let circuit_dir = format!("{}/sha256-bench-{}", CIRCUIT_ROOT, size); let toml_path = format!("{}/Prover.toml", circuit_dir); generate_prover_toml(&toml_path, &input_file, size)?; @@ -103,9 +103,9 @@ pub fn setup() -> Result<(), &'static str> { Ok(()) } -pub fn prove(input_exp: u32) -> NoirProof { - let circuit_dir = format!("{}/sha256-bench-2e{}", CIRCUIT_ROOT, input_exp); - let circuit_path = format!("circuits/target/sha256_bench_2e{}.json", input_exp); +pub fn prove(input_num_bytes: usize) -> NoirProof { + let circuit_dir = format!("{}/sha256-bench-{}", CIRCUIT_ROOT, input_num_bytes); + let circuit_path = format!("circuits/target/sha256_bench_{}.json", input_num_bytes); let prover_toml_path = format!("{}/Prover.toml", circuit_dir); let proof_scheme = NoirProofScheme::from_file(&circuit_path).unwrap(); @@ -116,8 +116,8 @@ pub fn prove(input_exp: u32) -> NoirProof { proof } -pub fn verify(input_exp: u32, proof: NoirProof) { - let circuit_path = format!("circuits/target/sha256_bench_2e{}.json", input_exp); +pub fn verify(input_num_bytes: usize, proof: NoirProof) { + let circuit_path = format!("circuits/target/sha256_bench_{}.json", input_num_bytes); let proof_scheme = NoirProofScheme::from_file(&circuit_path).unwrap(); From 68c8005ae75d3cd5b2bcc741adb531ff2e42f4c0 Mon Sep 17 00:00:00 2001 From: Brechy Date: Thu, 7 Aug 2025 17:29:12 -0300 Subject: [PATCH 05/15] restructure provekit benchmark --- provekit/Cargo.toml | 4 - provekit/benches/prove_verify.rs | 93 +++++++++----- provekit/src/bin/measure.rs | 42 ------- provekit/src/lib.rs | 206 ++++++++++++++----------------- utils/src/bench.rs | 12 ++ 5 files changed, 168 insertions(+), 189 deletions(-) delete mode 100644 provekit/src/bin/measure.rs diff --git a/provekit/Cargo.toml b/provekit/Cargo.toml index 822e9d2..b92e494 100644 --- a/provekit/Cargo.toml +++ b/provekit/Cargo.toml @@ -12,7 +12,3 @@ noir-r1cs = { git = "https://github.com/worldfnd/ProveKit", branch = "main" } [[bench]] name = "prove_verify" harness = false - -[[bin]] -name = "provekit-measure" -path = "src/bin/measure.rs" diff --git a/provekit/benches/prove_verify.rs b/provekit/benches/prove_verify.rs index ca53856..065fc17 100644 --- a/provekit/benches/prove_verify.rs +++ b/provekit/benches/prove_verify.rs @@ -1,37 +1,68 @@ -use criterion::{BatchSize, Criterion, criterion_group, criterion_main}; -use provekit::{prove, setup, verify}; +use criterion::{BatchSize, Criterion, black_box, criterion_group, criterion_main}; +use provekit::{ProvekitSha256Benchmark, WORKSPACE_ROOT}; +use std::path::PathBuf; +use utils::bench::{SubMetrics, SubMetricsTable, measure_peak_memory}; -fn sha256_bench(c: &mut Criterion) { - let mut group = c.benchmark_group("sha256_bench"); +const INPUT_EXPONENTS: [u32; 1] = [11]; + +fn sha256_benchmarks(c: &mut Criterion) { + let (bench_harness, preprocessing_peak_memory) = + measure_peak_memory(|| ProvekitSha256Benchmark::new(&INPUT_EXPONENTS)); + + let mut all_metrics = Vec::new(); + + for &exp in INPUT_EXPONENTS.iter() { + let mut metrics = SubMetrics::new(1 << exp); + metrics.preprocessing_peak_memory = preprocessing_peak_memory; + + let package_name = format!("sha256_bench_2e{exp}"); + let circuit_path = PathBuf::from(WORKSPACE_ROOT) + .join("target") + .join(format!("{package_name}.json")); + let toml_path = PathBuf::from(WORKSPACE_ROOT) + .join("circuits/hash/sha256-provekit") + .join(format!("sha256-bench-2e{exp}")) + .join("Prover.toml"); + + metrics.preprocessing_size = std::fs::metadata(circuit_path) + .map(|m| m.len()) + .unwrap_or(0) as usize + + std::fs::metadata(toml_path).map(|m| m.len()).unwrap_or(0) as usize; + + let (proof, proving_peak_memory) = measure_peak_memory(|| bench_harness.run_prove(exp)); + metrics.proving_peak_memory = proving_peak_memory; + metrics.proof_size = proof.whir_r1cs_proof.transcript.len(); + + all_metrics.push(metrics); + } + + println!("{}", SubMetricsTable(all_metrics)); + + let mut group = c.benchmark_group("SHA256 Prove & Verify"); group.sample_size(10); - group.bench_function("sha256_bench_prove", |bench| { - bench.iter_batched( - || { - let _ = setup().unwrap(); - }, - || { - prove(2048); - }, - BatchSize::SmallInput, - ); - }); - - group.bench_function("sha256_bench_verify", |bench| { - bench.iter_batched( - || { - let _ = setup().unwrap(); - let proof = prove(2048); - proof - }, - |proof| { - verify(2048, proof); - }, - BatchSize::SmallInput, - ); - }); + for &exp in INPUT_EXPONENTS.iter() { + let input_size = 1 << exp; + let prove_id = format!("Prove ({} bytes)", input_size); + group.bench_function(prove_id, |bench| { + bench.iter(|| { + let proof = bench_harness.run_prove(exp); + black_box(proof); + }); + }); + + let verify_id = format!("Verify ({} bytes)", input_size); + group.bench_function(verify_id, |bench| { + bench.iter_batched( + || bench_harness.prepare_verify(exp), + |(proof, proof_scheme)| bench_harness.run_verify(&proof, proof_scheme).unwrap(), + BatchSize::SmallInput, + ); + }); + } + group.finish(); } -criterion_main!(sha256); -criterion_group!(sha256, sha256_bench); +criterion_group!(benches, sha256_benchmarks); +criterion_main!(benches); diff --git a/provekit/src/bin/measure.rs b/provekit/src/bin/measure.rs deleted file mode 100644 index af2b7bb..0000000 --- a/provekit/src/bin/measure.rs +++ /dev/null @@ -1,42 +0,0 @@ -use provekit::{CIRCUIT_ROOT, prove, setup}; -use utils::bench::{SubMetrics, measure_peak_memory, write_json_submetrics}; - -fn main() { - let json_file = "sha2_provekit_submetrics.json"; - - let input_num_bytes = 2048; - let metrics = benchmark_sha2(input_num_bytes); - - write_json_submetrics(json_file, &metrics); -} - -fn benchmark_sha2(input_num_bytes: usize) -> SubMetrics { - let mut metrics = SubMetrics::new(input_num_bytes); - - let (_, peak_memory) = measure_peak_memory(|| setup().unwrap()); - metrics.preprocessing_peak_memory = peak_memory; - println!( - "Preprocessing peak memory: {} GB", - peak_memory as f32 / (1024.0 * 1024.0 * 1024.0), - ); - - // Load the preprocessing files. - let circuit_dir = format!("{}/sha256-bench-{}", CIRCUIT_ROOT, input_num_bytes); - let circuit_path = format!("circuits/target/sha256_bench_{}.json", input_num_bytes); - let prover_toml_path = format!("{}/Prover.toml", circuit_dir); - - let proof_scheme_file_bytes = std::fs::read(&circuit_path).unwrap(); - let input_map_file_bytes = std::fs::read(&prover_toml_path).unwrap(); - metrics.preprocessing_size = proof_scheme_file_bytes.len() + input_map_file_bytes.len(); - - let (proof, peak_memory) = measure_peak_memory(|| prove(input_num_bytes)); - metrics.proving_peak_memory = peak_memory; - metrics.proof_size = proof.whir_r1cs_proof.transcript.len(); - - println!( - "Proving peak memory: {} GB", - peak_memory as f32 / (1024.0 * 1024.0 * 1024.0), - ); - - metrics -} diff --git a/provekit/src/lib.rs b/provekit/src/lib.rs index 56d6dd6..fd1d798 100644 --- a/provekit/src/lib.rs +++ b/provekit/src/lib.rs @@ -1,125 +1,107 @@ use noir_r1cs::{NoirProof, NoirProofScheme}; use rand::RngCore; -use std::fs::{self, File}; -use std::io::{Read, Write}; +use std::collections::HashMap; +use std::fs; +use std::path::PathBuf; use std::process::Command; -use std::time::Instant; -use utils::{ - bench::{Metrics, benchmark}, - metadata::SHA2_INPUTS, -}; -pub const TMP_DIR: &str = "tmp"; -pub const CIRCUIT_ROOT: &str = "circuits/hash/sha256-provekit"; +pub const WORKSPACE_ROOT: &str = "circuits"; +pub const CIRCUIT_SUB_PATH: &str = "hash/sha256-provekit"; -/// Generates random input files for hashing benchmarks. -pub fn generate_hash_inputs() -> Result<(), &'static str> { - let input_dir = format!("{}/hash-input", TMP_DIR); - fs::create_dir_all(&input_dir).map_err(|_| "Failed to create input directory")?; - - let mut rng = rand::thread_rng(); - - for size in SHA2_INPUTS { - let bin_path = format!("{}/input_{}.bin", input_dir, size); - - let mut data = vec![0u8; size]; - rng.fill_bytes(&mut data); - - let mut file = File::create(&bin_path).map_err(|_| "Failed to create input file")?; - file.write_all(&data) - .map_err(|_| "Failed to write input file")?; - } - - Ok(()) +/// Provekit benchmark harness for SHA256. +pub struct ProvekitSha256Benchmark { + proof_schemes: HashMap, + toml_paths: HashMap, } -/// Compiles all Noir circuits. -pub fn compile_all_circuits() -> Result<(), &'static str> { - let output = Command::new("nargo") - .args([ - "compile", - "--silence-warnings", - "--skip-brillig-constraints-check", - ]) - .current_dir("circuits") - .output() - .map_err(|_| "Failed to execute nargo")?; - - if !output.status.success() { - eprintln!("{}", String::from_utf8_lossy(&output.stderr)); - return Err("Compilation failed"); +impl ProvekitSha256Benchmark { + /// Compiles the circuits and creates a new benchmark harness. + pub fn new(exponents: &[u32]) -> Self { + let output = Command::new("nargo") + .args([ + "compile", + "--workspace", + "--silence-warnings", + "--skip-brillig-constraints-check", + ]) + .current_dir(WORKSPACE_ROOT) + .output() + .expect("Failed to run nargo compile"); + + if !output.status.success() { + panic!( + "Workspace compilation failed: {}", + String::from_utf8_lossy(&output.stderr) + ); + } + + let mut rng = rand::thread_rng(); + let workspace_path = PathBuf::from(WORKSPACE_ROOT); + let mut proof_schemes = HashMap::new(); + let mut toml_paths = HashMap::new(); + + for &exp in exponents { + let size = 1usize << exp; + let package_name = format!("sha256_bench_2e{exp}"); + let circuit_path = workspace_path + .join("target") + .join(format!("{package_name}.json")); + + let proof_scheme = NoirProofScheme::from_file(circuit_path.to_str().unwrap()) + .unwrap_or_else(|e| panic!("Failed to load proof scheme for exp {exp}: {e}")); + proof_schemes.insert(exp, proof_scheme); + + let dir_name = format!("sha256-bench-2e{exp}"); + let circuit_member_dir = workspace_path.join(CIRCUIT_SUB_PATH).join(dir_name); + fs::create_dir_all(&circuit_member_dir).expect("Failed to create circuit dir"); + + let mut data = vec![0u8; size]; + rng.fill_bytes(&mut data); + let toml_content = format!( + "input = [{}]\ninput_len = {size}", + data.iter() + .map(u8::to_string) + .collect::>() + .join(", "), + ); + + let toml_path = circuit_member_dir.join("Prover.toml"); + fs::write(&toml_path, toml_content).expect("Failed to write Prover.toml"); + toml_paths.insert(exp, toml_path); + } + + Self { + proof_schemes, + toml_paths, + } } - Ok(()) -} - -/// Generates a Prover.toml file from input data. -pub fn generate_prover_toml( - toml_path: &str, - input_file: &str, - size: usize, -) -> Result<(), &'static str> { - let mut file = File::open(input_file).map_err(|_| "Failed to open input file")?; - let mut buffer = Vec::new(); - file.read_to_end(&mut buffer) - .map_err(|_| "Failed to read input file")?; - - let content = format!( - "input = [\n{}\n]\ninput_len = {}\n", - buffer - .iter() - .map(|b| format!(" {}", b)) - .collect::>() - .join(",\n"), - size - ); - - fs::write(toml_path, content).map_err(|_| "Failed to write Prover.toml")?; - - Ok(()) -} - -/// Sets up Prover.toml files for all circuits. -pub fn setup_circuits() -> Result<(), &'static str> { - for size in SHA2_INPUTS { - let input_file = format!("{}/hash-input/input_{}.bin", TMP_DIR, size); - let circuit_dir = format!("{}/sha256-bench-{}", CIRCUIT_ROOT, size); - let toml_path = format!("{}/Prover.toml", circuit_dir); - - generate_prover_toml(&toml_path, &input_file, size)?; + /// Runs the proving algorithm. + pub fn run_prove(&self, input_exp: u32) -> NoirProof { + let proof_scheme = self.proof_schemes.get(&input_exp).unwrap(); + let toml_path = self.toml_paths.get(&input_exp).unwrap(); + let witness_map = proof_scheme + .read_witness(toml_path.to_str().unwrap()) + .expect("Failed to read witness"); + + proof_scheme + .prove(&witness_map) + .expect("Proof generation failed") } - Ok(()) -} - -/// Sets up the benchmark. -pub fn setup() -> Result<(), &'static str> { - fs::create_dir_all(TMP_DIR).map_err(|_| "Failed to create tmp directory")?; - - generate_hash_inputs()?; - compile_all_circuits()?; - setup_circuits()?; - - Ok(()) -} - -pub fn prove(input_num_bytes: usize) -> NoirProof { - let circuit_dir = format!("{}/sha256-bench-{}", CIRCUIT_ROOT, input_num_bytes); - let circuit_path = format!("circuits/target/sha256_bench_{}.json", input_num_bytes); - let prover_toml_path = format!("{}/Prover.toml", circuit_dir); - - let proof_scheme = NoirProofScheme::from_file(&circuit_path).unwrap(); - let input_map = proof_scheme.read_witness(&prover_toml_path).unwrap(); - - let proof = proof_scheme.prove(&input_map).unwrap(); - - proof -} - -pub fn verify(input_num_bytes: usize, proof: NoirProof) { - let circuit_path = format!("circuits/target/sha256_bench_{}.json", input_num_bytes); - - let proof_scheme = NoirProofScheme::from_file(&circuit_path).unwrap(); + /// Prepares inputs for verification. + pub fn prepare_verify(&self, input_exp: u32) -> (NoirProof, &NoirProofScheme) { + let proof_scheme = self.proof_schemes.get(&input_exp).unwrap(); + let proof = self.run_prove(input_exp); + (proof, proof_scheme) + } - proof_scheme.verify(&proof).unwrap(); + /// Runs the verification algorithm. + pub fn run_verify( + &self, + proof: &NoirProof, + proof_scheme: &NoirProofScheme, + ) -> Result<(), &'static str> { + proof_scheme.verify(proof).map_err(|_| "Proof is not valid") + } } diff --git a/utils/src/bench.rs b/utils/src/bench.rs index 7a974fb..48263da 100644 --- a/utils/src/bench.rs +++ b/utils/src/bench.rs @@ -157,6 +157,18 @@ impl SubMetrics { } } +pub struct SubMetricsTable(pub Vec); + +impl Display for SubMetricsTable { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + if self.0.is_empty() { + return Ok(()); + } + let mut table = Table::new(&self.0); + table.with(Style::modern()); + write!(f, "{table}") + } +} pub fn write_json_submetrics(output_path: &str, metrics: &SubMetrics) { let json = serde_json::to_string_pretty(metrics).unwrap(); std::fs::write(output_path, json).unwrap(); From e767bea07165fd256259d5fbef79dd45ff51556d Mon Sep 17 00:00:00 2001 From: Brechy Date: Thu, 7 Aug 2025 23:01:03 -0300 Subject: [PATCH 06/15] fix: ci --- .github/workflows/rust_benchmarks_parallel.yml | 6 ++++++ .github/workflows/rust_benchmarks_serial.yml | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/.github/workflows/rust_benchmarks_parallel.yml b/.github/workflows/rust_benchmarks_parallel.yml index 8abdff7..0f8b47c 100644 --- a/.github/workflows/rust_benchmarks_parallel.yml +++ b/.github/workflows/rust_benchmarks_parallel.yml @@ -189,6 +189,12 @@ jobs: if: ${{ contains(matrix.crate, 'powdr') }} run: rustup toolchain install nightly-2024-08-01 --component rust-src + - name: Install Noir + run: | + curl -L https://raw.githubusercontent.com/noir-lang/noirup/main/install | bash -s -- -y + echo "$HOME/.noir/bin" >> $GITHUB_PATH + ~/.noir/bin/noirup + - name: Run benches in ${{ matrix.crate }} run: | cd ${{ matrix.crate }} diff --git a/.github/workflows/rust_benchmarks_serial.yml b/.github/workflows/rust_benchmarks_serial.yml index 8db6ab7..ce86541 100644 --- a/.github/workflows/rust_benchmarks_serial.yml +++ b/.github/workflows/rust_benchmarks_serial.yml @@ -91,6 +91,12 @@ jobs: - name: Install nightly-2024-08-01 with rust-src for Powdr run: rustup toolchain install nightly-2024-08-01 --component rust-src + - name: Install Noir + run: | + curl -L https://raw.githubusercontent.com/noir-lang/noirup/main/install | bash -s -- -y + echo "$HOME/.noir/bin" >> $GITHUB_PATH + ~/.noir/bin/noirup + - name: Run workspace benchmarks run: cargo bench From 37c61ce1e94b7348bc69cf9300c1be6ec1fa8a8b Mon Sep 17 00:00:00 2001 From: Brechy Date: Thu, 7 Aug 2025 23:15:54 -0300 Subject: [PATCH 07/15] fix: ci --- .github/workflows/rust_benchmarks_parallel.yml | 9 ++++----- .github/workflows/rust_benchmarks_serial.yml | 9 ++++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/.github/workflows/rust_benchmarks_parallel.yml b/.github/workflows/rust_benchmarks_parallel.yml index 0f8b47c..66ed290 100644 --- a/.github/workflows/rust_benchmarks_parallel.yml +++ b/.github/workflows/rust_benchmarks_parallel.yml @@ -189,11 +189,10 @@ jobs: if: ${{ contains(matrix.crate, 'powdr') }} run: rustup toolchain install nightly-2024-08-01 --component rust-src - - name: Install Noir - run: | - curl -L https://raw.githubusercontent.com/noir-lang/noirup/main/install | bash -s -- -y - echo "$HOME/.noir/bin" >> $GITHUB_PATH - ~/.noir/bin/noirup + - name: Install Nargo + uses: noir-lang/noirup@v0.1.2 + with: + toolchain: stable - name: Run benches in ${{ matrix.crate }} run: | diff --git a/.github/workflows/rust_benchmarks_serial.yml b/.github/workflows/rust_benchmarks_serial.yml index ce86541..49f6c93 100644 --- a/.github/workflows/rust_benchmarks_serial.yml +++ b/.github/workflows/rust_benchmarks_serial.yml @@ -91,11 +91,10 @@ jobs: - name: Install nightly-2024-08-01 with rust-src for Powdr run: rustup toolchain install nightly-2024-08-01 --component rust-src - - name: Install Noir - run: | - curl -L https://raw.githubusercontent.com/noir-lang/noirup/main/install | bash -s -- -y - echo "$HOME/.noir/bin" >> $GITHUB_PATH - ~/.noir/bin/noirup + - name: Install Nargo + uses: noir-lang/noirup@v0.1.2 + with: + toolchain: stable - name: Run workspace benchmarks run: cargo bench From ef3ea161111a92f8d56016634ddf3f643ed6353a Mon Sep 17 00:00:00 2001 From: guorong009 Date: Fri, 8 Aug 2025 13:13:17 +0800 Subject: [PATCH 08/15] chore: update README & write submetrics to json file --- provekit/README.md | 6 ------ provekit/benches/prove_verify.rs | 6 +++++- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/provekit/README.md b/provekit/README.md index 4e2bda1..d79b5a9 100644 --- a/provekit/README.md +++ b/provekit/README.md @@ -8,9 +8,3 @@ This benchmark code is using the ProveKit of World Foundation(https://github.com ```bash cargo bench ``` - -Measure RAM footprint: - -```bash -cargo run -r --bin provekit-measure -``` diff --git a/provekit/benches/prove_verify.rs b/provekit/benches/prove_verify.rs index 065fc17..a58184b 100644 --- a/provekit/benches/prove_verify.rs +++ b/provekit/benches/prove_verify.rs @@ -1,11 +1,12 @@ use criterion::{BatchSize, Criterion, black_box, criterion_group, criterion_main}; use provekit::{ProvekitSha256Benchmark, WORKSPACE_ROOT}; use std::path::PathBuf; -use utils::bench::{SubMetrics, SubMetricsTable, measure_peak_memory}; +use utils::bench::{SubMetrics, SubMetricsTable, measure_peak_memory, write_json_submetrics}; const INPUT_EXPONENTS: [u32; 1] = [11]; fn sha256_benchmarks(c: &mut Criterion) { + // measure the SubMetrics let (bench_harness, preprocessing_peak_memory) = measure_peak_memory(|| ProvekitSha256Benchmark::new(&INPUT_EXPONENTS)); @@ -38,6 +39,9 @@ fn sha256_benchmarks(c: &mut Criterion) { println!("{}", SubMetricsTable(all_metrics)); + let json_path = "sha2_provekit_submetrics.json"; + write_json_submetrics(json_path, &all_metrics[0]); + let mut group = c.benchmark_group("SHA256 Prove & Verify"); group.sample_size(10); From d7997d2c19332b4abd7f5b01a09eb8ce53a8e41d Mon Sep 17 00:00:00 2001 From: Brechy Date: Fri, 8 Aug 2025 10:55:17 -0300 Subject: [PATCH 09/15] fix display --- provekit/benches/prove_verify.rs | 4 ++-- utils/src/bench.rs | 19 ++++++++----------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/provekit/benches/prove_verify.rs b/provekit/benches/prove_verify.rs index 065fc17..ab9d311 100644 --- a/provekit/benches/prove_verify.rs +++ b/provekit/benches/prove_verify.rs @@ -1,7 +1,7 @@ use criterion::{BatchSize, Criterion, black_box, criterion_group, criterion_main}; use provekit::{ProvekitSha256Benchmark, WORKSPACE_ROOT}; use std::path::PathBuf; -use utils::bench::{SubMetrics, SubMetricsTable, measure_peak_memory}; +use utils::bench::{SubMetrics, display_submetrics, measure_peak_memory}; const INPUT_EXPONENTS: [u32; 1] = [11]; @@ -36,7 +36,7 @@ fn sha256_benchmarks(c: &mut Criterion) { all_metrics.push(metrics); } - println!("{}", SubMetricsTable(all_metrics)); + println!("{}", display_submetrics(&all_metrics)); let mut group = c.benchmark_group("SHA256 Prove & Verify"); group.sample_size(10); diff --git a/utils/src/bench.rs b/utils/src/bench.rs index 48263da..91702d3 100644 --- a/utils/src/bench.rs +++ b/utils/src/bench.rs @@ -131,7 +131,7 @@ pub fn write_csv(out_path: &str, results: &[Metrics]) { } #[serde_as] -#[derive(Serialize, Tabled)] +#[derive(Serialize, Tabled, Clone, Copy)] pub struct SubMetrics { #[tabled(display_with = "display_bytes")] pub input_size: usize, @@ -157,18 +157,15 @@ impl SubMetrics { } } -pub struct SubMetricsTable(pub Vec); - -impl Display for SubMetricsTable { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - if self.0.is_empty() { - return Ok(()); - } - let mut table = Table::new(&self.0); - table.with(Style::modern()); - write!(f, "{table}") +pub fn display_submetrics(metrics: &[SubMetrics]) -> String { + if metrics.is_empty() { + return String::new(); } + let mut table = Table::new(metrics); + table.with(Style::modern()); + table.to_string() } + pub fn write_json_submetrics(output_path: &str, metrics: &SubMetrics) { let json = serde_json::to_string_pretty(metrics).unwrap(); std::fs::write(output_path, json).unwrap(); From 6321db81b9a7e38c7fe2a9c7ede1b7e8828ca153 Mon Sep 17 00:00:00 2001 From: Brechy Date: Fri, 8 Aug 2025 10:56:25 -0300 Subject: [PATCH 10/15] fix clippy --- binius/src/bin/measure_lookup.rs | 2 +- binius/src/bin/measure_no_lookup.rs | 2 +- plonky2/src/bin/measure.rs | 2 +- plonky3-powdr/src/bin/measure.rs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/binius/src/bin/measure_lookup.rs b/binius/src/bin/measure_lookup.rs index c81a651..9577b2d 100644 --- a/binius/src/bin/measure_lookup.rs +++ b/binius/src/bin/measure_lookup.rs @@ -24,7 +24,7 @@ fn benchmark_sha2(num_bytes: usize) -> Result { metrics.preprocessing_peak_memory = peak_memory; let mut buffer: Vec = Vec::new(); - let _ = constraint_system + constraint_system .serialize(&mut buffer, binius_utils::SerializationMode::CanonicalTower) .expect("Failed to serialize constraint system"); metrics.preprocessing_size = buffer.len(); diff --git a/binius/src/bin/measure_no_lookup.rs b/binius/src/bin/measure_no_lookup.rs index 5e9ee99..a589d63 100644 --- a/binius/src/bin/measure_no_lookup.rs +++ b/binius/src/bin/measure_no_lookup.rs @@ -24,7 +24,7 @@ fn benchmark_sha2(num_bytes: usize) -> Result { metrics.preprocessing_peak_memory = peak_memory; let mut buffer: Vec = Vec::new(); - let _ = constraint_system + constraint_system .serialize(&mut buffer, binius_utils::SerializationMode::CanonicalTower) .expect("Failed to serialize constraint system"); metrics.preprocessing_size = buffer.len(); diff --git a/plonky2/src/bin/measure.rs b/plonky2/src/bin/measure.rs index 49432c8..1847d97 100644 --- a/plonky2/src/bin/measure.rs +++ b/plonky2/src/bin/measure.rs @@ -19,7 +19,7 @@ fn main() { fn benchmark_sha2(num_bytes: usize) -> SubMetrics { let mut metrics = SubMetrics::new(num_bytes); - let ((data, pw), peak_memory) = measure_peak_memory(|| sha256_no_lookup_prepare()); + let ((data, pw), peak_memory) = measure_peak_memory(sha256_no_lookup_prepare); metrics.preprocessing_peak_memory = peak_memory; let gate_serializer = U32GateSerializer; diff --git a/plonky3-powdr/src/bin/measure.rs b/plonky3-powdr/src/bin/measure.rs index ac2cf46..959dae8 100644 --- a/plonky3-powdr/src/bin/measure.rs +++ b/plonky3-powdr/src/bin/measure.rs @@ -13,7 +13,7 @@ fn main() { fn benchmark_sha2(num_bytes: usize) -> SubMetrics { let mut metrics = SubMetrics::new(num_bytes); - let (mut pipeline, peak_memory) = measure_peak_memory(|| prepare_pipeline()); + let (mut pipeline, peak_memory) = measure_peak_memory(prepare_pipeline); metrics.preprocessing_peak_memory = peak_memory; println!( "Preprocessing peak memory: {} GB", From faba6e72817b3af412d0be73dc7303d604bb0471 Mon Sep 17 00:00:00 2001 From: Brechy Date: Fri, 8 Aug 2025 11:09:52 -0300 Subject: [PATCH 11/15] Add clippy and fmt to ci --- .github/workflows/rust_benchmarks_parallel.yml | 6 ++++++ .github/workflows/rust_benchmarks_serial.yml | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/.github/workflows/rust_benchmarks_parallel.yml b/.github/workflows/rust_benchmarks_parallel.yml index 66ed290..513ff52 100644 --- a/.github/workflows/rust_benchmarks_parallel.yml +++ b/.github/workflows/rust_benchmarks_parallel.yml @@ -63,6 +63,12 @@ jobs: - name: Install nightly-2024-08-01 with rust-src for Powdr run: rustup toolchain install nightly-2024-08-01 --component rust-src + - name: Clippy + run: cargo clippy --workspace --all-targets --all-features + + - name: Format + run: cargo fmt --all -- --check + - name: Build full workspace (release) env: GITHUB_TOKEN: ${{ secrets.GH_PAT }} # for ACIR (required by protoc-prebuilt) diff --git a/.github/workflows/rust_benchmarks_serial.yml b/.github/workflows/rust_benchmarks_serial.yml index 49f6c93..e498c22 100644 --- a/.github/workflows/rust_benchmarks_serial.yml +++ b/.github/workflows/rust_benchmarks_serial.yml @@ -48,6 +48,12 @@ jobs: - name: Install nightly-2024-08-01 with rust-src for Powdr run: rustup toolchain install nightly-2024-08-01 --component rust-src + - name: Clippy + run: cargo clippy --workspace --all-targets --all-features + + - name: Format + run: cargo fmt --all -- --check + - name: Build full workspace (release) env: GITHUB_TOKEN: ${{ secrets.GH_PAT }} # for ACIR (required by protoc-prebuilt) From 56accc30be8161e152b61bd71121e07aa744f81e Mon Sep 17 00:00:00 2001 From: Brechy Date: Fri, 8 Aug 2025 11:17:51 -0300 Subject: [PATCH 12/15] fix: clippy warnings --- plonky2/src/circuit.rs | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/plonky2/src/circuit.rs b/plonky2/src/circuit.rs index 564a03e..4d660f2 100644 --- a/plonky2/src/circuit.rs +++ b/plonky2/src/circuit.rs @@ -421,8 +421,8 @@ mod tests { #[test] fn test_sha256() -> Result<()> { let mut msg = vec![0; 128_usize]; - for i in 0..127 { - msg[i] = i as u8; + for (i, byte) in msg.iter_mut().enumerate().take(127) { + *byte = i as u8; } let msg_bits = array_to_bits(&msg); @@ -434,15 +434,15 @@ mod tests { let targets = make_circuits(&mut builder, len as u64); let mut pw = PartialWitness::new(); - for i in 0..len { - pw.set_bool_target(targets.message[i], msg_bits[i])?; + for (target, &bit) in targets.message.iter().zip(msg_bits.iter()).take(len) { + pw.set_bool_target(*target, bit)?; } - for i in 0..EXPECTED_RES.len() { - if EXPECTED_RES[i] == 1 { - builder.assert_one(targets.digest[i].target); + for (&expected, digest) in EXPECTED_RES.iter().zip(targets.digest.iter()) { + if expected == 1 { + builder.assert_one(digest.target); } else { - builder.assert_zero(targets.digest[i].target); + builder.assert_zero(digest.target); } } @@ -464,8 +464,8 @@ mod tests { #[should_panic] fn test_sha256_failure() { let mut msg = vec![0; 128_usize]; - for i in 0..127 { - msg[i] = i as u8; + for (i, byte) in msg.iter_mut().enumerate().take(127) { + *byte = i as u8; } let msg_bits = array_to_bits(&msg); @@ -477,18 +477,18 @@ mod tests { let targets = make_circuits(&mut builder, len as u64); let mut pw = PartialWitness::new(); - for i in 0..len { - pw.set_bool_target(targets.message[i], msg_bits[i]).unwrap(); + for (target, &bit) in targets.message.iter().zip(msg_bits.iter()).take(len) { + pw.set_bool_target(*target, bit).unwrap(); } let mut rng = rand::thread_rng(); let rnd = rng.gen_range(0..256); - for i in 0..EXPECTED_RES.len() { - let b = (i == rnd && EXPECTED_RES[i] != 1) || (i != rnd && EXPECTED_RES[i] == 1); + for (i, (&expected, digest)) in EXPECTED_RES.iter().zip(targets.digest.iter()).enumerate() { + let b = (i == rnd && expected != 1) || (i != rnd && expected == 1); if b { - builder.assert_one(targets.digest[i].target); + builder.assert_one(digest.target); } else { - builder.assert_zero(targets.digest[i].target); + builder.assert_zero(digest.target); } } From 750c754f0e9e0452f8a226592523caef156a1cb7 Mon Sep 17 00:00:00 2001 From: Brechy Date: Fri, 8 Aug 2025 11:25:31 -0300 Subject: [PATCH 13/15] remove comment --- provekit/benches/prove_verify.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/provekit/benches/prove_verify.rs b/provekit/benches/prove_verify.rs index 92f4d7c..31f1854 100644 --- a/provekit/benches/prove_verify.rs +++ b/provekit/benches/prove_verify.rs @@ -6,7 +6,6 @@ use utils::bench::{SubMetrics, display_submetrics, measure_peak_memory, write_js const INPUT_EXPONENTS: [u32; 1] = [11]; fn sha256_benchmarks(c: &mut Criterion) { - // measure the SubMetrics let (bench_harness, preprocessing_peak_memory) = measure_peak_memory(|| ProvekitSha256Benchmark::new(&INPUT_EXPONENTS)); From d2c9cd582871c68c2c2143ae8f7fc70013a28e2d Mon Sep 17 00:00:00 2001 From: Brechy Date: Fri, 8 Aug 2025 17:05:13 -0300 Subject: [PATCH 14/15] fix ci --- .github/workflows/rust_benchmarks_parallel.yml | 6 +++--- .github/workflows/rust_benchmarks_serial.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/rust_benchmarks_parallel.yml b/.github/workflows/rust_benchmarks_parallel.yml index 513ff52..d225985 100644 --- a/.github/workflows/rust_benchmarks_parallel.yml +++ b/.github/workflows/rust_benchmarks_parallel.yml @@ -63,9 +63,6 @@ jobs: - name: Install nightly-2024-08-01 with rust-src for Powdr run: rustup toolchain install nightly-2024-08-01 --component rust-src - - name: Clippy - run: cargo clippy --workspace --all-targets --all-features - - name: Format run: cargo fmt --all -- --check @@ -74,6 +71,9 @@ jobs: GITHUB_TOKEN: ${{ secrets.GH_PAT }} # for ACIR (required by protoc-prebuilt) run: cargo build --release --workspace + - name: Clippy + run: cargo clippy --workspace --all-targets --all-features + detect-crates: needs: prepare-cache runs-on: macos-latest diff --git a/.github/workflows/rust_benchmarks_serial.yml b/.github/workflows/rust_benchmarks_serial.yml index e498c22..c264ec8 100644 --- a/.github/workflows/rust_benchmarks_serial.yml +++ b/.github/workflows/rust_benchmarks_serial.yml @@ -48,9 +48,6 @@ jobs: - name: Install nightly-2024-08-01 with rust-src for Powdr run: rustup toolchain install nightly-2024-08-01 --component rust-src - - name: Clippy - run: cargo clippy --workspace --all-targets --all-features - - name: Format run: cargo fmt --all -- --check @@ -59,6 +56,9 @@ jobs: GITHUB_TOKEN: ${{ secrets.GH_PAT }} # for ACIR (required by protoc-prebuilt) run: cargo build --release --workspace + - name: Clippy + run: cargo clippy --workspace --all-targets --all-features + # ────────────────── 2. Rust workspace benchmarks ────────────────── bench-workspace: needs: prepare-cache From 34da331dae630b4c461ed78f51bd393e37e580f6 Mon Sep 17 00:00:00 2001 From: Brechy Date: Fri, 8 Aug 2025 19:44:14 -0300 Subject: [PATCH 15/15] fix noir version --- .github/workflows/rust_benchmarks_parallel.yml | 2 +- .github/workflows/rust_benchmarks_serial.yml | 2 +- .../circuits/hash/sha256-provekit/noir-native-sha256/Nargo.toml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/rust_benchmarks_parallel.yml b/.github/workflows/rust_benchmarks_parallel.yml index d225985..6368af9 100644 --- a/.github/workflows/rust_benchmarks_parallel.yml +++ b/.github/workflows/rust_benchmarks_parallel.yml @@ -196,7 +196,7 @@ jobs: run: rustup toolchain install nightly-2024-08-01 --component rust-src - name: Install Nargo - uses: noir-lang/noirup@v0.1.2 + uses: noir-lang/noirup@v0.1.4 with: toolchain: stable diff --git a/.github/workflows/rust_benchmarks_serial.yml b/.github/workflows/rust_benchmarks_serial.yml index c264ec8..4ee7ec5 100644 --- a/.github/workflows/rust_benchmarks_serial.yml +++ b/.github/workflows/rust_benchmarks_serial.yml @@ -98,7 +98,7 @@ jobs: run: rustup toolchain install nightly-2024-08-01 --component rust-src - name: Install Nargo - uses: noir-lang/noirup@v0.1.2 + uses: noir-lang/noirup@v0.1.4 with: toolchain: stable diff --git a/provekit/circuits/hash/sha256-provekit/noir-native-sha256/Nargo.toml b/provekit/circuits/hash/sha256-provekit/noir-native-sha256/Nargo.toml index 00c15c8..ea3417d 100644 --- a/provekit/circuits/hash/sha256-provekit/noir-native-sha256/Nargo.toml +++ b/provekit/circuits/hash/sha256-provekit/noir-native-sha256/Nargo.toml @@ -4,4 +4,4 @@ type = "lib" authors = ["Ryan Cao"] [dependencies] -sha256 = { tag = "v0.1.1", git = "https://github.com/noir-lang/sha256" } +sha256 = { tag = "v0.1.4", git = "https://github.com/noir-lang/sha256" }