From b4b8ee5820b9b668721f652e0e4e6301d5e937b5 Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Thu, 18 Dec 2025 17:05:18 -0500 Subject: [PATCH 01/21] fix [skip ci] --- .gitignore | 1 + ceno_recursion/src/aggregation/mod.rs | 4 +- .../src/basefold_verifier/verifier.rs | 17 +++++++-- ceno_recursion/src/zkvm_verifier/binding.rs | 2 +- ceno_recursion/src/zkvm_verifier/verifier.rs | 27 ++++++++++---- ceno_zkvm/src/scheme/verifier.rs | 37 +++++++++++++++++++ 6 files changed, 74 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index b09cba9c7..580459d0e 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ proptest-regressions/ # ceno serialized files *.bin +*.json diff --git a/ceno_recursion/src/aggregation/mod.rs b/ceno_recursion/src/aggregation/mod.rs index 27d6288c0..0325eaa78 100644 --- a/ceno_recursion/src/aggregation/mod.rs +++ b/ceno_recursion/src/aggregation/mod.rs @@ -793,7 +793,7 @@ mod tests { } #[test] - #[ignore = "need to generate proof first"] + // #[ignore = "need to generate proof first"] pub fn test_single() { let stack_size = 256 * 1024 * 1024; // 64 MB @@ -806,7 +806,7 @@ mod tests { } #[test] - #[ignore = "need to generate proof first"] + // #[ignore = "need to generate proof first"] pub fn test_single_rust_verifier() { let stack_size = 256 * 1024 * 1024; // 64 MB diff --git a/ceno_recursion/src/basefold_verifier/verifier.rs b/ceno_recursion/src/basefold_verifier/verifier.rs index 485ed505f..f06196ec7 100644 --- a/ceno_recursion/src/basefold_verifier/verifier.rs +++ b/ceno_recursion/src/basefold_verifier/verifier.rs @@ -71,6 +71,7 @@ pub fn batch_verify( builder.assign(&running_coeff, running_coeff * batch_coeff); }); + /* _debug // The max num var and max width are provided by the prover and not guaranteed to be correct. // Check that // 1. max_num_var is greater than or equal to every num var (same for width); @@ -87,17 +88,21 @@ pub fn batch_verify( // num_var is always smaller than 32. builder.range_check_var(diff, 5); builder.assign(&diff_product_num_var, diff_product_num_var * diff); - let diff: Var = builder.eval(max_width - opening.point_and_evals.evals.len()); // width is always smaller than 2^14. builder.range_check_var(diff, 14); builder.assign(&diff_product_width, diff_product_width * diff); }); }); + + */ // Check that at least one num_var is equal to max_num_var let zero: Var = builder.eval(C::N::ZERO); - builder.assert_eq::>(diff_product_num_var, zero); - builder.assert_eq::>(diff_product_width, zero); + + // _debug + // builder.assert_eq::>(diff_product_num_var, zero); + // builder.assert_eq::>(diff_product_width, zero); + let num_rounds: Var = builder.eval(max_num_var - Usize::from(get_basecode_msg_size_log())); @@ -122,6 +127,8 @@ pub fn batch_verify( }); }); + + iter_zip!(builder, proof.final_message).for_each(|ptr_vec_sumcheck_message, builder| { // Each final message should contain a single element, since the final // message size log is assumed to be zero @@ -155,10 +162,14 @@ pub fn batch_verify( proof, rounds, }; + + + /* _debug builder.cycle_tracker_end("prior query phase"); builder.cycle_tracker_start("query phase"); batch_verifier_query_phase(builder, input); builder.cycle_tracker_end("query phase"); + */ } #[cfg(test)] diff --git a/ceno_recursion/src/zkvm_verifier/binding.rs b/ceno_recursion/src/zkvm_verifier/binding.rs index 50de33315..f59917ef3 100644 --- a/ceno_recursion/src/zkvm_verifier/binding.rs +++ b/ceno_recursion/src/zkvm_verifier/binding.rs @@ -189,7 +189,7 @@ impl Hintable for ZKVMProofInput { .filter(|proof| !proof.fixed_in_evals.is_empty()) .map(|proof| proof.fixed_in_evals.len()) .collect::>(); - let max_num_var = witin_num_vars.iter().copied().max().unwrap_or(0); + let max_num_var = witin_num_vars.iter().chain(fixed_num_vars.iter()).copied().map(|n| ceil_log2(n)).max().unwrap_or(0); let max_width = witin_max_widths .iter() .chain(fixed_max_widths.iter()) diff --git a/ceno_recursion/src/zkvm_verifier/verifier.rs b/ceno_recursion/src/zkvm_verifier/verifier.rs index e521186f7..5f73fccf0 100644 --- a/ceno_recursion/src/zkvm_verifier/verifier.rs +++ b/ceno_recursion/src/zkvm_verifier/verifier.rs @@ -29,6 +29,7 @@ use crate::{ EccQuarkProofVariable, GKRProofVariable, LayerProofVariable, SelectorContextVariable, SepticExtensionVariable, SepticPointVariable, SumcheckLayerProofVariable, }, + basefold_verifier::verifier::batch_verify, }; use ceno_zkvm::structs::{ComposedConstrainSystem, VerifyingKey, ZKVMVerifyingKey}; use ff_ext::BabyBearExt4; @@ -466,15 +467,25 @@ pub fn verify_zkvm_proof>( }); } + + // _debug - // batch_verify( - // builder, - // zkvm_proof_input.max_num_var, - // zkvm_proof_input.max_width, - // rounds, - // zkvm_proof_input.pcs_proof, - // &mut challenger, - // ); + builder.print_debug(997); + builder.print_v(zkvm_proof_input.max_num_var); + + batch_verify( + builder, + zkvm_proof_input.max_num_var, + zkvm_proof_input.max_width, + rounds, + zkvm_proof_input.pcs_proof, + &mut challenger, + ); + + + + + let empty_arr: Array> = builder.dyn_array(0); let initial_global_state = eval_ceno_expr_with_instance( diff --git a/ceno_zkvm/src/scheme/verifier.rs b/ceno_zkvm/src/scheme/verifier.rs index a65a9f165..1dc8b549d 100644 --- a/ceno_zkvm/src/scheme/verifier.rs +++ b/ceno_zkvm/src/scheme/verifier.rs @@ -41,6 +41,9 @@ use sumcheck::{ use transcript::{ForkableTranscript, Transcript}; use witness::next_pow2_instance_padding; +// _debug +use std::fs; + pub struct ZKVMVerifier> { pub vk: ZKVMVerifyingKey, } @@ -90,6 +93,9 @@ impl> ZKVMVerifier transcripts: Vec>, expect_halt: bool, ) -> Result { + // _debug + println!("=> verify_proofs_halt"); + assert!(!vm_proofs.is_empty()); let num_proofs = vm_proofs.len(); let (_end_pc, shard_ec_sum) = vm_proofs @@ -148,6 +154,9 @@ impl> ZKVMVerifier vm_proof: ZKVMProof, mut transcript: impl ForkableTranscript, ) -> Result, ZKVMError> { + // _debug + println!("=> verify_proof_validity"); + // main invariant between opcode circuits and table circuits let mut prod_r = E::ONE; let mut prod_w = E::ONE; @@ -396,6 +405,31 @@ impl> ZKVMVerifier { rounds.push((fixed_commit.clone(), fixed_openings)); } + + // _debug + let s = serde_json::to_string_pretty(&vm_proof.opening_proof).unwrap(); + fs::write("opening_proof.json", s).expect("write opening proof"); + + // _debug + println!("batch_verify"); + let max_num_var = rounds + .iter() + .map(|(commit, openings)| { + let max_num_var = openings + .iter() + .map(|(num_vars, _)| *num_vars) + .max() + .unwrap(); + // assert_eq!( + // commit.log2_max_codeword_size, + // max_num_var + Spec::get_rate_log() + // ); + max_num_var + }) + .max() + .unwrap(); + println!("=> max_num_var: {:?}", max_num_var); + PCS::batch_verify( &self.vk.vp, rounds, @@ -404,6 +438,9 @@ impl> ZKVMVerifier ) .map_err(ZKVMError::PCSError)?; + + + let initial_global_state = eval_by_expr_with_instance( &[], &[], From 5cd6b58135a30564fba73de1f3d3a2b7c94edbcc Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Sat, 20 Dec 2025 21:50:52 -0500 Subject: [PATCH 02/21] add debug flags --- .../src/basefold_verifier/query_phase.rs | 41 +++++++++++++++++-- .../src/basefold_verifier/verifier.rs | 3 -- ceno_recursion/src/zkvm_verifier/verifier.rs | 7 ---- 3 files changed, 38 insertions(+), 13 deletions(-) diff --git a/ceno_recursion/src/basefold_verifier/query_phase.rs b/ceno_recursion/src/basefold_verifier/query_phase.rs index 6064731c7..49c1b3313 100644 --- a/ceno_recursion/src/basefold_verifier/query_phase.rs +++ b/ceno_recursion/src/basefold_verifier/query_phase.rs @@ -325,7 +325,8 @@ pub(crate) fn batch_verifier_query_phase( builder: &mut Builder, input: QueryPhaseVerifierInputVariable, ) { - let inv_2 = builder.constant(C::F::from_canonical_u32(0x3c000001)); + + let inv_2: Felt = builder.constant(C::F::from_canonical_u32(0x3c000001)); let two_adic_generators_inverses: Array> = builder.dyn_array(28); for (index, val) in [ 0x1usize, 0x78000000, 0x67055c21, 0x5ee99486, 0xbb4c4e4, 0x2d4cc4da, 0x669d6090, @@ -340,7 +341,7 @@ pub(crate) fn batch_verifier_query_phase( builder.set_value(&two_adic_generators_inverses, index, generator_inverse); } let zero: Ext = builder.constant(C::EF::ZERO); - let zero_flag = builder.constant(C::N::ZERO); + let zero_flag: Var = builder.constant(C::N::ZERO); let two: Var = builder.constant(C::N::TWO); let two_felt: Felt = builder.constant(C::F::TWO); @@ -531,6 +532,7 @@ pub(crate) fn batch_verifier_query_phase( ); let all_zeros_slice = all_zeros.slice(builder, 0, width.clone()); + /* _debug let low = builder.fri_single_reduced_opening_eval( alpha, opened_values.id.get_var(), @@ -563,7 +565,9 @@ pub(crate) fn batch_verifier_query_phase( let permuted_j = builder.iter_ptr_get(&round.perm, ptr_vec[3]); // let permuted_j = j; builder.set_value(&perm_opened_values, permuted_j, mat_j); + */ }); + // i >>= (log2_max_codeword_size - commit.log2_max_codeword_size); let bits_shift: Var = builder.eval(log2_max_codeword_size - round.commit.log2_max_codeword_size); @@ -577,10 +581,14 @@ pub(crate) fn batch_verifier_query_phase( opened_values: perm_opened_values, proof: opening_proof, }; + + /* _debug mmcs_verify_batch(builder, mmcs_verifier_input); + */ }, ); builder.cycle_tracker_end("Batching and first FRI round"); + let opening_ext = query.commit_phase_openings; // fold 1st codeword @@ -605,6 +613,7 @@ pub(crate) fn batch_verifier_query_phase( inv_2, ); + // check commit phases let commits = &input.proof.commits; builder.assert_eq::>(commits.len(), opening_ext.len()); @@ -679,7 +688,10 @@ pub(crate) fn batch_verifier_query_phase( opened_values, proof, }; + + /* _debug ext_mmcs_verify_batch::(builder, ext_mmcs_verifier_input); + */ let r = builder.get(&input.fold_challenges, i_plus_one); let left = builder.get(&leafs, 0); @@ -689,6 +701,7 @@ pub(crate) fn batch_verifier_query_phase( builder.assign(&folded, new_folded); builder.assign(&i, i_plus_one); }); + builder.cycle_tracker_end("FRI rounds"); // assert that final_value[i] = folded let final_idx: Var = builder.constant(C::N::ZERO); @@ -703,9 +716,14 @@ pub(crate) fn batch_verifier_query_phase( ); }); let final_value = builder.get(&final_codeword.values, final_idx); + + /* _debug builder.assert_eq::>(final_value, folded); + */ }, ); + + // 1. check initial claim match with first round sumcheck value let batch_coeffs_offset: Var = builder.constant(C::N::ZERO); let expected_sum: Ext = builder.constant(C::EF::ZERO); @@ -753,6 +771,8 @@ pub(crate) fn batch_verifier_query_phase( builder.assert_eq::>(left, right); }); + + // 3. check final evaluation are correct let final_evals = builder .get(&input.proof.sumcheck_proof, fold_len_minus_one) @@ -762,10 +782,17 @@ pub(crate) fn batch_verifier_query_phase( let right: Ext = builder.constant(C::EF::ZERO); let one: Var = builder.constant(C::N::ONE); let j: Var = builder.constant(C::N::ZERO); + + /* _debug // \sum_i eq(p, [r,i]) * f(r,i) iter_zip!(builder, input.rounds,).for_each(|ptr_vec, builder| { let round = builder.iter_ptr_get(&input.rounds, ptr_vec[0]); // TODO: filter out openings with num_var >= get_basecode_msg_size_log::() + + // _debug + // builder.print_debug(617); + // builder.print_v(round.openings.len().get_var()); + iter_zip!(builder, round.openings).for_each(|ptr_vec, builder| { let opening = builder.iter_ptr_get(&round.openings, ptr_vec[0]); let point_and_evals = &opening.point_and_evals; @@ -775,6 +802,11 @@ pub(crate) fn batch_verifier_query_phase( builder.eval(point.fs.len() - Usize::from(get_basecode_msg_size_log())); let final_message = builder.get(&input.proof.final_message, j); + // _debug + // builder.print_debug(618); + // builder.print_v(j); + // builder.print_v(final_message.len().get_var()); + // coeff is the eq polynomial evaluated at the first challenge.len() variables let ylo = builder.eval(input.fold_challenges.len() - num_vars_evaluated); let coeff = eq_eval_with_index( @@ -791,15 +823,18 @@ pub(crate) fn batch_verifier_query_phase( // We always assume that num_vars_evaluated is equal to p.len() // so that the above sum only has one item and the final evaluation vector has only one element. builder.assert_eq::>(final_message.len(), one); + let final_message = builder.get(&final_message, 0); let dot_prod: Ext = builder.eval(final_message * coeff); + builder.assign(&right, right + dot_prod); - builder.assign(&j, j + Usize::from(1)); }); }); + builder.assert_eq::>(j, input.proof.final_message.len()); builder.assert_eq::>(left, right); + */ } #[cfg(test)] diff --git a/ceno_recursion/src/basefold_verifier/verifier.rs b/ceno_recursion/src/basefold_verifier/verifier.rs index f06196ec7..4d465f18e 100644 --- a/ceno_recursion/src/basefold_verifier/verifier.rs +++ b/ceno_recursion/src/basefold_verifier/verifier.rs @@ -163,13 +163,10 @@ pub fn batch_verify( rounds, }; - - /* _debug builder.cycle_tracker_end("prior query phase"); builder.cycle_tracker_start("query phase"); batch_verifier_query_phase(builder, input); builder.cycle_tracker_end("query phase"); - */ } #[cfg(test)] diff --git a/ceno_recursion/src/zkvm_verifier/verifier.rs b/ceno_recursion/src/zkvm_verifier/verifier.rs index 5f73fccf0..d9bead0e7 100644 --- a/ceno_recursion/src/zkvm_verifier/verifier.rs +++ b/ceno_recursion/src/zkvm_verifier/verifier.rs @@ -467,8 +467,6 @@ pub fn verify_zkvm_proof>( }); } - - // _debug builder.print_debug(997); builder.print_v(zkvm_proof_input.max_num_var); @@ -482,11 +480,6 @@ pub fn verify_zkvm_proof>( &mut challenger, ); - - - - - let empty_arr: Array> = builder.dyn_array(0); let initial_global_state = eval_ceno_expr_with_instance( builder, From 19e9f1e6130d07f84ece2a2eeec73165e637f910 Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Sun, 21 Dec 2025 18:41:02 -0500 Subject: [PATCH 03/21] organize debug flags [skip ci] --- Cargo.lock | 209 +++++++++--------- Cargo.toml | 32 ++- .../src/basefold_verifier/query_phase.rs | 22 +- .../src/basefold_verifier/verifier.rs | 14 +- ceno_recursion/src/zkvm_verifier/verifier.rs | 4 - 5 files changed, 131 insertions(+), 150 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 492100629..24a3cfc93 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -957,10 +957,10 @@ dependencies = [ "ceno_zkvm", "clap", "console", - "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "ff_ext 0.1.0", "get_dir", "gkr_iop", - "mpcs 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "mpcs 0.1.0", "openvm-circuit", "openvm-continuations", "openvm-cuda-backend", @@ -1073,10 +1073,10 @@ dependencies = [ "ceno_rt", "ceno_syscall", "elf", - "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "ff_ext 0.1.0", "itertools 0.13.0", "k256 0.13.4 (git+https://github.com/scroll-tech/elliptic-curves?branch=ceno%2Fk256-13.4)", - "multilinear_extensions 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "multilinear_extensions 0.1.0", "num", "num-derive", "num-traits", @@ -1126,11 +1126,11 @@ dependencies = [ "ceno_host", "ceno_zkvm", "clap", - "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "ff_ext 0.1.0", "gkr_iop", "itertools 0.13.0", - "mpcs 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", - "multilinear_extensions 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "mpcs 0.1.0", + "multilinear_extensions 0.1.0", "openvm", "openvm-circuit", "openvm-continuations", @@ -1144,18 +1144,18 @@ dependencies = [ "openvm-sdk", "openvm-stark-backend", "openvm-stark-sdk", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "p3 0.1.0", "parse-size", "rand 0.8.5", "serde", "serde_json", - "sumcheck 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "sumcheck 0.1.0", "tracing", "tracing-forest", "tracing-subscriber", - "transcript 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", - "whir 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", - "witness 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "transcript 0.1.0", + "whir 0.1.0", + "witness 0.1.0", ] [[package]] @@ -1197,20 +1197,20 @@ dependencies = [ "cudarc", "derive", "either", - "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "ff_ext 0.1.0", "generic-array 1.2.0", "generic_static", "gkr_iop", "glob", "itertools 0.13.0", "metrics", - "mpcs 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", - "multilinear_extensions 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "mpcs 0.1.0", + "multilinear_extensions 0.1.0", "ndarray", "num", "num-bigint 0.4.6", "once_cell", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "p3 0.1.0", "parse-size", "pprof2", "prettytable-rs", @@ -1223,7 +1223,7 @@ dependencies = [ "sp1-curves", "strum", "strum_macros", - "sumcheck 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "sumcheck 0.1.0", "tempfile", "tikv-jemalloc-ctl", "tikv-jemallocator", @@ -1231,10 +1231,10 @@ dependencies = [ "tracing", "tracing-forest", "tracing-subscriber", - "transcript 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "transcript 0.1.0", "typenum", - "whir 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", - "witness 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "whir 0.1.0", + "witness 0.1.0", ] [[package]] @@ -2233,10 +2233,9 @@ dependencies = [ [[package]] name = "ff_ext" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15#9be620b18900138d0b89569759fc2b3b9451b49e" dependencies = [ "once_cell", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "p3 0.1.0", "rand_core 0.6.4", "serde", ] @@ -2244,10 +2243,10 @@ dependencies = [ [[package]] name = "ff_ext" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18#f53336217179d70df37852fc850b786d4bc82f15" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15#9be620b18900138d0b89569759fc2b3b9451b49e" dependencies = [ "once_cell", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", "rand_core 0.6.4", "serde", ] @@ -2414,18 +2413,18 @@ dependencies = [ "cuda_hal", "cudarc", "either", - "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "ff_ext 0.1.0", "itertools 0.13.0", - "mpcs 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", - "multilinear_extensions 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "mpcs 0.1.0", + "multilinear_extensions 0.1.0", "once_cell", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "p3 0.1.0", "rand 0.8.5", "rayon", "serde", "strum", "strum_macros", - "sumcheck 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "sumcheck 0.1.0", "thiserror 2.0.12", "thread_local", "tikv-jemalloc-ctl", @@ -2433,8 +2432,8 @@ dependencies = [ "tracing", "tracing-forest", "tracing-subscriber", - "transcript 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", - "witness 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "transcript 0.1.0", + "witness 0.1.0", ] [[package]] @@ -3248,60 +3247,58 @@ dependencies = [ [[package]] name = "mpcs" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15#9be620b18900138d0b89569759fc2b3b9451b49e" dependencies = [ "bincode 1.3.3", "clap", - "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "ff_ext 0.1.0", "itertools 0.13.0", - "multilinear_extensions 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "multilinear_extensions 0.1.0", "num-integer", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "p3 0.1.0", "rand 0.8.5", "rand_chacha 0.3.1", "rayon", "serde", - "sumcheck 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "sumcheck 0.1.0", "tracing", "tracing-subscriber", - "transcript 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", - "whir 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", - "witness 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "transcript 0.1.0", + "whir 0.1.0", + "witness 0.1.0", ] [[package]] name = "mpcs" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18#f53336217179d70df37852fc850b786d4bc82f15" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15#9be620b18900138d0b89569759fc2b3b9451b49e" dependencies = [ "bincode 1.3.3", "clap", - "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", "itertools 0.13.0", - "multilinear_extensions 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "multilinear_extensions 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", "num-integer", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", "rand 0.8.5", "rand_chacha 0.3.1", "rayon", "serde", - "sumcheck 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "sumcheck 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", "tracing", "tracing-subscriber", - "transcript 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", - "whir 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", - "witness 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "transcript 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "whir 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "witness 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", ] [[package]] name = "multilinear_extensions" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15#9be620b18900138d0b89569759fc2b3b9451b49e" dependencies = [ "either", - "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "ff_ext 0.1.0", "itertools 0.13.0", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "p3 0.1.0", "rand 0.8.5", "rayon", "serde", @@ -3311,12 +3308,12 @@ dependencies = [ [[package]] name = "multilinear_extensions" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18#f53336217179d70df37852fc850b786d4bc82f15" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15#9be620b18900138d0b89569759fc2b3b9451b49e" dependencies = [ "either", - "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", "itertools 0.13.0", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", "rand 0.8.5", "rayon", "serde", @@ -4606,7 +4603,6 @@ dependencies = [ [[package]] name = "p3" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15#9be620b18900138d0b89569759fc2b3b9451b49e" dependencies = [ "p3-air", "p3-baby-bear", @@ -4631,7 +4627,7 @@ dependencies = [ [[package]] name = "p3" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18#f53336217179d70df37852fc850b786d4bc82f15" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15#9be620b18900138d0b89569759fc2b3b9451b49e" dependencies = [ "p3-air", "p3-baby-bear", @@ -5199,20 +5195,19 @@ dependencies = [ [[package]] name = "poseidon" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15#9be620b18900138d0b89569759fc2b3b9451b49e" dependencies = [ - "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "ff_ext 0.1.0", + "p3 0.1.0", "serde", ] [[package]] name = "poseidon" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18#f53336217179d70df37852fc850b786d4bc82f15" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15#9be620b18900138d0b89569759fc2b3b9451b49e" dependencies = [ - "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", "serde", ] @@ -6231,16 +6226,15 @@ dependencies = [ [[package]] name = "sp1-curves" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18#f53336217179d70df37852fc850b786d4bc82f15" dependencies = [ "cfg-if", "dashu", "elliptic-curve", - "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "ff_ext 0.1.0", "generic-array 1.2.0", "itertools 0.13.0", "k256 0.13.4 (registry+https://github.com/rust-lang/crates.io-index)", - "multilinear_extensions 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "multilinear_extensions 0.1.0", "num", "p256", "p3-field", @@ -6356,46 +6350,44 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "sumcheck" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15#9be620b18900138d0b89569759fc2b3b9451b49e" dependencies = [ "either", - "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "ff_ext 0.1.0", "itertools 0.13.0", - "multilinear_extensions 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "multilinear_extensions 0.1.0", + "p3 0.1.0", "rayon", "serde", - "sumcheck_macro 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "sumcheck_macro 0.1.0", "thiserror 1.0.69", "tracing", - "transcript 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "transcript 0.1.0", ] [[package]] name = "sumcheck" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18#f53336217179d70df37852fc850b786d4bc82f15" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15#9be620b18900138d0b89569759fc2b3b9451b49e" dependencies = [ "either", - "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", "itertools 0.13.0", - "multilinear_extensions 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "multilinear_extensions 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", "rayon", "serde", - "sumcheck_macro 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "sumcheck_macro 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", "thiserror 1.0.69", "tracing", - "transcript 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "transcript 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", ] [[package]] name = "sumcheck_macro" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15#9be620b18900138d0b89569759fc2b3b9451b49e" dependencies = [ "itertools 0.13.0", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "p3 0.1.0", "proc-macro2", "quote", "rand 0.8.5", @@ -6405,10 +6397,10 @@ dependencies = [ [[package]] name = "sumcheck_macro" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18#f53336217179d70df37852fc850b786d4bc82f15" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15#9be620b18900138d0b89569759fc2b3b9451b49e" dependencies = [ "itertools 0.13.0", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", "proc-macro2", "quote", "rand 0.8.5", @@ -6827,23 +6819,22 @@ dependencies = [ [[package]] name = "transcript" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15#9be620b18900138d0b89569759fc2b3b9451b49e" dependencies = [ - "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "ff_ext 0.1.0", "itertools 0.13.0", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", - "poseidon 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "p3 0.1.0", + "poseidon 0.1.0", ] [[package]] name = "transcript" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18#f53336217179d70df37852fc850b786d4bc82f15" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15#9be620b18900138d0b89569759fc2b3b9451b49e" dependencies = [ - "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", "itertools 0.13.0", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", - "poseidon 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "poseidon 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", ] [[package]] @@ -7132,47 +7123,46 @@ dependencies = [ [[package]] name = "whir" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15#9be620b18900138d0b89569759fc2b3b9451b49e" dependencies = [ "bincode 1.3.3", "clap", "derive_more 1.0.0", - "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "ff_ext 0.1.0", "itertools 0.14.0", - "multilinear_extensions 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "multilinear_extensions 0.1.0", + "p3 0.1.0", "rand 0.8.5", "rand_chacha 0.3.1", "rayon", "serde", - "sumcheck 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "sumcheck 0.1.0", "tracing", - "transcript 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "transcript 0.1.0", "transpose", - "witness 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "witness 0.1.0", ] [[package]] name = "whir" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18#f53336217179d70df37852fc850b786d4bc82f15" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15#9be620b18900138d0b89569759fc2b3b9451b49e" dependencies = [ "bincode 1.3.3", "clap", "derive_more 1.0.0", - "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", "itertools 0.14.0", - "multilinear_extensions 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "multilinear_extensions 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", "rand 0.8.5", "rand_chacha 0.3.1", "rayon", "serde", - "sumcheck 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "sumcheck 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", "tracing", - "transcript 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "transcript 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", "transpose", - "witness 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "witness 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", ] [[package]] @@ -7442,11 +7432,10 @@ dependencies = [ [[package]] name = "witness" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15#9be620b18900138d0b89569759fc2b3b9451b49e" dependencies = [ - "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", - "multilinear_extensions 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "ff_ext 0.1.0", + "multilinear_extensions 0.1.0", + "p3 0.1.0", "rand 0.8.5", "rayon", "tracing", @@ -7455,11 +7444,11 @@ dependencies = [ [[package]] name = "witness" version = "0.1.0" -source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18#f53336217179d70df37852fc850b786d4bc82f15" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15#9be620b18900138d0b89569759fc2b3b9451b49e" dependencies = [ - "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", - "multilinear_extensions 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", - "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.18)", + "ff_ext 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "multilinear_extensions 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", + "p3 0.1.0 (git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.15)", "rand 0.8.5", "rayon", "tracing", diff --git a/Cargo.toml b/Cargo.toml index 602780a75..ecfe6bf6a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,16 +25,28 @@ version = "0.1.0" [workspace.dependencies] ceno_crypto_primitives = { git = "https://github.com/scroll-tech/ceno-patch.git", package = "ceno_crypto_primitives", branch = "main" } ceno_syscall = { git = "https://github.com/scroll-tech/ceno-patch.git", package = "ceno_syscall", branch = "main" } -ff_ext = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "ff_ext", tag = "v1.0.0-alpha.18" } -mpcs = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "mpcs", tag = "v1.0.0-alpha.18" } -multilinear_extensions = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "multilinear_extensions", tag = "v1.0.0-alpha.18" } -p3 = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "p3", tag = "v1.0.0-alpha.18" } -poseidon = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "poseidon", tag = "v1.0.0-alpha.18" } -sp1-curves = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "sp1-curves", tag = "v1.0.0-alpha.18" } -sumcheck = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "sumcheck", tag = "v1.0.0-alpha.18" } -transcript = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "transcript", tag = "v1.0.0-alpha.18" } -whir = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "whir", tag = "v1.0.0-alpha.18" } -witness = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "witness", tag = "v1.0.0-alpha.18" } + +# ff_ext = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "ff_ext", tag = "v1.0.0-alpha.18" } +# mpcs = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "mpcs", tag = "v1.0.0-alpha.18" } +# multilinear_extensions = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "multilinear_extensions", tag = "v1.0.0-alpha.18" } +# p3 = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "p3", tag = "v1.0.0-alpha.18" } +# poseidon = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "poseidon", tag = "v1.0.0-alpha.18" } +# sp1-curves = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "sp1-curves", tag = "v1.0.0-alpha.18" } +# sumcheck = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "sumcheck", tag = "v1.0.0-alpha.18" } +# transcript = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "transcript", tag = "v1.0.0-alpha.18" } +# whir = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "whir", tag = "v1.0.0-alpha.18" } +# witness = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "witness", tag = "v1.0.0-alpha.18" } + +ff_ext = { path = "../gkr-backend/crates/ff_ext", package = "ff_ext" } +mpcs = { path = "../gkr-backend/crates/mpcs", package = "mpcs" } +multilinear_extensions = { path = "../gkr-backend/crates/multilinear_extensions", package = "multilinear_extensions" } +p3 = { path = "../gkr-backend/crates/p3", package = "p3" } +poseidon = { path = "../gkr-backend/crates/poseidon", package = "poseidon" } +sp1-curves = { path = "../gkr-backend/crates/curves", package = "sp1-curves" } +sumcheck = { path = "../gkr-backend/crates/sumcheck", package = "sumcheck" } +transcript = { path = "../gkr-backend/crates/transcript", package = "transcript" } +whir = { path = "../gkr-backend/crates/whir", package = "whir" } +witness = { path = "../gkr-backend/crates/witness", package = "witness" } anyhow = { version = "1.0", default-features = false } bincode = "1" diff --git a/ceno_recursion/src/basefold_verifier/query_phase.rs b/ceno_recursion/src/basefold_verifier/query_phase.rs index 49c1b3313..5d274a2af 100644 --- a/ceno_recursion/src/basefold_verifier/query_phase.rs +++ b/ceno_recursion/src/basefold_verifier/query_phase.rs @@ -325,7 +325,6 @@ pub(crate) fn batch_verifier_query_phase( builder: &mut Builder, input: QueryPhaseVerifierInputVariable, ) { - let inv_2: Felt = builder.constant(C::F::from_canonical_u32(0x3c000001)); let two_adic_generators_inverses: Array> = builder.dyn_array(28); for (index, val) in [ @@ -406,6 +405,7 @@ pub(crate) fn batch_verifier_query_phase( // by the `fri_single_reduced_opening_eval` chip. let opened_values_buffer: Array>> = builder.dyn_array(round.openings.len()); + let log2_heights = builder.dyn_array(round.openings.len()); let minus_alpha_offsets = builder.dyn_array(round.openings.len()); let dimensions = builder.dyn_array(round.openings.len()); @@ -505,6 +505,9 @@ pub(crate) fn batch_verifier_query_phase( let opening_proof = batch_opening.opening_proof; let round_context = builder.iter_ptr_get(&rounds_context, ptr_vec[2]); + + // _TODO: Iteration looping count is incorrect + // _TODO: 5 zipped arrays have different length iter_zip!( builder, round_context.log2_heights, @@ -531,8 +534,8 @@ pub(crate) fn batch_verifier_query_phase( opened_values_buffer.len(), ); - let all_zeros_slice = all_zeros.slice(builder, 0, width.clone()); /* _debug + let all_zeros_slice = all_zeros.slice(builder, 0, width.clone()); let low = builder.fri_single_reduced_opening_eval( alpha, opened_values.id.get_var(), @@ -558,6 +561,7 @@ pub(crate) fn batch_verifier_query_phase( builder.assign(&codeword_acc.high, codeword_acc.high + codeword.high); builder.set_value(&reduced_codeword_by_height, log2_height, codeword_acc); + */ // reorder opened values according to the permutation let mat_j = @@ -565,7 +569,6 @@ pub(crate) fn batch_verifier_query_phase( let permuted_j = builder.iter_ptr_get(&round.perm, ptr_vec[3]); // let permuted_j = j; builder.set_value(&perm_opened_values, permuted_j, mat_j); - */ }); // i >>= (log2_max_codeword_size - commit.log2_max_codeword_size); @@ -612,7 +615,6 @@ pub(crate) fn batch_verifier_query_phase( coeff, inv_2, ); - // check commit phases let commits = &input.proof.commits; @@ -723,7 +725,6 @@ pub(crate) fn batch_verifier_query_phase( }, ); - // 1. check initial claim match with first round sumcheck value let batch_coeffs_offset: Var = builder.constant(C::N::ZERO); let expected_sum: Ext = builder.constant(C::EF::ZERO); @@ -771,8 +772,6 @@ pub(crate) fn batch_verifier_query_phase( builder.assert_eq::>(left, right); }); - - // 3. check final evaluation are correct let final_evals = builder .get(&input.proof.sumcheck_proof, fold_len_minus_one) @@ -789,10 +788,6 @@ pub(crate) fn batch_verifier_query_phase( let round = builder.iter_ptr_get(&input.rounds, ptr_vec[0]); // TODO: filter out openings with num_var >= get_basecode_msg_size_log::() - // _debug - // builder.print_debug(617); - // builder.print_v(round.openings.len().get_var()); - iter_zip!(builder, round.openings).for_each(|ptr_vec, builder| { let opening = builder.iter_ptr_get(&round.openings, ptr_vec[0]); let point_and_evals = &opening.point_and_evals; @@ -802,11 +797,6 @@ pub(crate) fn batch_verifier_query_phase( builder.eval(point.fs.len() - Usize::from(get_basecode_msg_size_log())); let final_message = builder.get(&input.proof.final_message, j); - // _debug - // builder.print_debug(618); - // builder.print_v(j); - // builder.print_v(final_message.len().get_var()); - // coeff is the eq polynomial evaluated at the first challenge.len() variables let ylo = builder.eval(input.fold_challenges.len() - num_vars_evaluated); let coeff = eq_eval_with_index( diff --git a/ceno_recursion/src/basefold_verifier/verifier.rs b/ceno_recursion/src/basefold_verifier/verifier.rs index 4d465f18e..f34c1a653 100644 --- a/ceno_recursion/src/basefold_verifier/verifier.rs +++ b/ceno_recursion/src/basefold_verifier/verifier.rs @@ -71,7 +71,7 @@ pub fn batch_verify( builder.assign(&running_coeff, running_coeff * batch_coeff); }); - /* _debug + /* _debug: // The max num var and max width are provided by the prover and not guaranteed to be correct. // Check that // 1. max_num_var is greater than or equal to every num var (same for width); @@ -94,16 +94,12 @@ pub fn batch_verify( builder.assign(&diff_product_width, diff_product_width * diff); }); }); - - */ - // Check that at least one num_var is equal to max_num_var - let zero: Var = builder.eval(C::N::ZERO); - - // _debug // builder.assert_eq::>(diff_product_num_var, zero); // builder.assert_eq::>(diff_product_width, zero); - + */ + // Check that at least one num_var is equal to max_num_var + let zero: Var = builder.eval(C::N::ZERO); let num_rounds: Var = builder.eval(max_num_var - Usize::from(get_basecode_msg_size_log())); @@ -127,8 +123,6 @@ pub fn batch_verify( }); }); - - iter_zip!(builder, proof.final_message).for_each(|ptr_vec_sumcheck_message, builder| { // Each final message should contain a single element, since the final // message size log is assumed to be zero diff --git a/ceno_recursion/src/zkvm_verifier/verifier.rs b/ceno_recursion/src/zkvm_verifier/verifier.rs index d9bead0e7..40955c5d4 100644 --- a/ceno_recursion/src/zkvm_verifier/verifier.rs +++ b/ceno_recursion/src/zkvm_verifier/verifier.rs @@ -467,10 +467,6 @@ pub fn verify_zkvm_proof>( }); } - // _debug - builder.print_debug(997); - builder.print_v(zkvm_proof_input.max_num_var); - batch_verify( builder, zkvm_proof_input.max_num_var, From 55ed048ea7f184e7494570d8412f5f79c4c5d108 Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Fri, 2 Jan 2026 23:39:03 -0500 Subject: [PATCH 04/21] dependency [skip ci] --- Cargo.lock | 47 -------------------- Cargo.toml | 31 ++++++++----- ceno_recursion/src/zkvm_verifier/verifier.rs | 16 +++---- 3 files changed, 29 insertions(+), 65 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3c6656a73..537376bb8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3620,7 +3620,6 @@ checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" [[package]] name = "openvm" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "bytemuck", "num-bigint 0.4.6", @@ -3633,7 +3632,6 @@ dependencies = [ [[package]] name = "openvm-algebra-circuit" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -3662,7 +3660,6 @@ dependencies = [ [[package]] name = "openvm-algebra-complex-macros" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-macros-common", "quote", @@ -3672,7 +3669,6 @@ dependencies = [ [[package]] name = "openvm-algebra-guest" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "halo2curves-axiom", "num-bigint 0.4.6", @@ -3688,7 +3684,6 @@ dependencies = [ [[package]] name = "openvm-algebra-moduli-macros" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "num-bigint 0.4.6", "num-prime", @@ -3700,7 +3695,6 @@ dependencies = [ [[package]] name = "openvm-algebra-transpiler" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-algebra-guest", "openvm-instructions", @@ -3714,7 +3708,6 @@ dependencies = [ [[package]] name = "openvm-bigint-circuit" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -3737,7 +3730,6 @@ dependencies = [ [[package]] name = "openvm-bigint-guest" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-platform", "strum_macros", @@ -3746,7 +3738,6 @@ dependencies = [ [[package]] name = "openvm-bigint-transpiler" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-bigint-guest", "openvm-instructions", @@ -3761,7 +3752,6 @@ dependencies = [ [[package]] name = "openvm-build" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "cargo_metadata 0.18.1", "eyre", @@ -3773,7 +3763,6 @@ dependencies = [ [[package]] name = "openvm-circuit" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "backtrace", "cfg-if", @@ -3812,7 +3801,6 @@ dependencies = [ [[package]] name = "openvm-circuit-derive" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "itertools 0.14.0", "proc-macro2", @@ -3823,7 +3811,6 @@ dependencies = [ [[package]] name = "openvm-circuit-primitives" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "derive-new 0.6.0", "itertools 0.14.0", @@ -3841,7 +3828,6 @@ dependencies = [ [[package]] name = "openvm-circuit-primitives-derive" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "itertools 0.14.0", "quote", @@ -3851,7 +3837,6 @@ dependencies = [ [[package]] name = "openvm-continuations" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "derivative", "openvm-circuit", @@ -3921,7 +3906,6 @@ dependencies = [ [[package]] name = "openvm-custom-insn" version = "0.1.0" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "proc-macro2", "quote", @@ -3931,7 +3915,6 @@ dependencies = [ [[package]] name = "openvm-ecc-circuit" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -3960,7 +3943,6 @@ dependencies = [ [[package]] name = "openvm-ecc-guest" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "ecdsa 0.16.9 (registry+https://github.com/rust-lang/crates.io-index)", "elliptic-curve", @@ -3979,7 +3961,6 @@ dependencies = [ [[package]] name = "openvm-ecc-sw-macros" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-macros-common", "quote", @@ -3989,7 +3970,6 @@ dependencies = [ [[package]] name = "openvm-ecc-transpiler" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-ecc-guest", "openvm-instructions", @@ -4003,7 +3983,6 @@ dependencies = [ [[package]] name = "openvm-instructions" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "backtrace", "derive-new 0.6.0", @@ -4020,7 +3999,6 @@ dependencies = [ [[package]] name = "openvm-instructions-derive" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "quote", "syn 2.0.111", @@ -4029,7 +4007,6 @@ dependencies = [ [[package]] name = "openvm-keccak256-circuit" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -4054,7 +4031,6 @@ dependencies = [ [[package]] name = "openvm-keccak256-guest" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-platform", ] @@ -4062,7 +4038,6 @@ dependencies = [ [[package]] name = "openvm-keccak256-transpiler" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-instructions", "openvm-instructions-derive", @@ -4076,7 +4051,6 @@ dependencies = [ [[package]] name = "openvm-macros-common" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "syn 2.0.111", ] @@ -4084,7 +4058,6 @@ dependencies = [ [[package]] name = "openvm-mod-circuit-builder" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "itertools 0.14.0", "num-bigint 0.4.6", @@ -4102,7 +4075,6 @@ dependencies = [ [[package]] name = "openvm-native-circuit" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -4133,7 +4105,6 @@ dependencies = [ [[package]] name = "openvm-native-compiler" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "backtrace", "itertools 0.14.0", @@ -4155,7 +4126,6 @@ dependencies = [ [[package]] name = "openvm-native-compiler-derive" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "quote", "syn 2.0.111", @@ -4164,7 +4134,6 @@ dependencies = [ [[package]] name = "openvm-native-recursion" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "cfg-if", "itertools 0.14.0", @@ -4188,7 +4157,6 @@ dependencies = [ [[package]] name = "openvm-native-transpiler" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-instructions", "openvm-transpiler", @@ -4198,7 +4166,6 @@ dependencies = [ [[package]] name = "openvm-pairing-circuit" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -4227,7 +4194,6 @@ dependencies = [ [[package]] name = "openvm-pairing-guest" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "halo2curves-axiom", "hex-literal", @@ -4248,7 +4214,6 @@ dependencies = [ [[package]] name = "openvm-pairing-transpiler" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-instructions", "openvm-pairing-guest", @@ -4261,7 +4226,6 @@ dependencies = [ [[package]] name = "openvm-platform" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "libm", "openvm-custom-insn", @@ -4271,7 +4235,6 @@ dependencies = [ [[package]] name = "openvm-poseidon2-air" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "derivative", "lazy_static", @@ -4289,7 +4252,6 @@ dependencies = [ [[package]] name = "openvm-rv32-adapters" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "derive-new 0.6.0", "itertools 0.14.0", @@ -4306,7 +4268,6 @@ dependencies = [ [[package]] name = "openvm-rv32im-circuit" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -4329,7 +4290,6 @@ dependencies = [ [[package]] name = "openvm-rv32im-guest" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-custom-insn", "p3-field", @@ -4339,7 +4299,6 @@ dependencies = [ [[package]] name = "openvm-rv32im-transpiler" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-instructions", "openvm-instructions-derive", @@ -4355,7 +4314,6 @@ dependencies = [ [[package]] name = "openvm-sdk" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "bitcode", "bon", @@ -4409,7 +4367,6 @@ dependencies = [ [[package]] name = "openvm-sha256-air" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-circuit-primitives", "openvm-stark-backend", @@ -4420,7 +4377,6 @@ dependencies = [ [[package]] name = "openvm-sha256-circuit" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -4443,7 +4399,6 @@ dependencies = [ [[package]] name = "openvm-sha256-guest" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-platform", ] @@ -4451,7 +4406,6 @@ dependencies = [ [[package]] name = "openvm-sha256-transpiler" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-instructions", "openvm-instructions-derive", @@ -4530,7 +4484,6 @@ dependencies = [ [[package]] name = "openvm-transpiler" version = "1.4.1" -source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "elf", "eyre", diff --git a/Cargo.toml b/Cargo.toml index 1bd47b81a..1a364e479 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -103,16 +103,27 @@ ceno_gpu = { git = "https://github.com/scroll-tech/ceno-gpu-mock.git", package = cudarc = { version = "0.17.3", features = ["driver", "cuda-version-from-build-system"] } # ceno-recursion dependencies -openvm = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -openvm-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -openvm-continuations = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -openvm-instructions = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -openvm-native-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -openvm-native-compiler = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -openvm-native-compiler-derive = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -openvm-native-recursion = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -openvm-rv32im-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -openvm-sdk = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } +# openvm = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } +# openvm-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } +# openvm-continuations = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } +# openvm-instructions = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } +# openvm-native-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } +# openvm-native-compiler = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } +# openvm-native-compiler-derive = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } +# openvm-native-recursion = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } +# openvm-rv32im-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } +# openvm-sdk = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } + +openvm = { path = "../openvm-scroll-tech/crates/toolchain/openvm", default-features = false } +openvm-circuit = { path = "../openvm-scroll-tech/crates/vm", default-features = false } +openvm-continuations = { path = "../openvm-scroll-tech/crates/continuations", default-features = false } +openvm-instructions = { path = "../openvm-scroll-tech/crates/toolchain/instructions", default-features = false } +openvm-native-circuit = { path = "../openvm-scroll-tech/extensions/native/circuit", default-features = false } +openvm-native-compiler = { path = "../openvm-scroll-tech/extensions/native/compiler", default-features = false } +openvm-native-compiler-derive = { path = "../openvm-scroll-tech/extensions/native/compiler/derive", default-features = false } +openvm-native-recursion = { path = "../openvm-scroll-tech/extensions/native/recursion", default-features = false } +openvm-rv32im-circuit = { path = "../openvm-scroll-tech/extensions/rv32im/circuit", default-features = false } +openvm-sdk = { path = "../openvm-scroll-tech/crates/sdk", default-features = false } openvm-cuda-backend = { git = "https://github.com/openvm-org/stark-backend.git", tag = "v1.2.1", default-features = false } openvm-stark-backend = { git = "https://github.com/openvm-org/stark-backend.git", tag = "v1.2.1", default-features = false } diff --git a/ceno_recursion/src/zkvm_verifier/verifier.rs b/ceno_recursion/src/zkvm_verifier/verifier.rs index ab51583de..728c2467f 100644 --- a/ceno_recursion/src/zkvm_verifier/verifier.rs +++ b/ceno_recursion/src/zkvm_verifier/verifier.rs @@ -467,14 +467,14 @@ pub fn verify_zkvm_proof>( }); } - batch_verify( - builder, - zkvm_proof_input.max_num_var, - zkvm_proof_input.max_width, - rounds, - zkvm_proof_input.pcs_proof, - &mut challenger, - ); + // batch_verify( + // builder, + // zkvm_proof_input.max_num_var, + // zkvm_proof_input.max_width, + // rounds, + // zkvm_proof_input.pcs_proof, + // &mut challenger, + // ); let empty_arr: Array> = builder.dyn_array(0); let initial_global_state = eval_ceno_expr_with_instance( From 9d15c1d0d8d1560e8f06d185f7fd9d0e02b0dffa Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Sat, 3 Jan 2026 00:37:10 -0500 Subject: [PATCH 05/21] Recover constraints --- ceno_recursion/src/basefold_verifier/verifier.rs | 10 +++++----- ceno_recursion/src/zkvm_verifier/verifier.rs | 16 ++++++++-------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/ceno_recursion/src/basefold_verifier/verifier.rs b/ceno_recursion/src/basefold_verifier/verifier.rs index f34c1a653..e72d7d6e8 100644 --- a/ceno_recursion/src/basefold_verifier/verifier.rs +++ b/ceno_recursion/src/basefold_verifier/verifier.rs @@ -71,7 +71,6 @@ pub fn batch_verify( builder.assign(&running_coeff, running_coeff * batch_coeff); }); - /* _debug: // The max num var and max width are provided by the prover and not guaranteed to be correct. // Check that // 1. max_num_var is greater than or equal to every num var (same for width); @@ -94,12 +93,11 @@ pub fn batch_verify( builder.assign(&diff_product_width, diff_product_width * diff); }); }); - // builder.assert_eq::>(diff_product_num_var, zero); - // builder.assert_eq::>(diff_product_width, zero); - */ + let zero: Var = builder.eval(C::N::ZERO); + builder.assert_eq::>(diff_product_num_var, zero); + builder.assert_eq::>(diff_product_width, zero); // Check that at least one num_var is equal to max_num_var - let zero: Var = builder.eval(C::N::ZERO); let num_rounds: Var = builder.eval(max_num_var - Usize::from(get_basecode_msg_size_log())); @@ -157,10 +155,12 @@ pub fn batch_verify( rounds, }; + /* _debug builder.cycle_tracker_end("prior query phase"); builder.cycle_tracker_start("query phase"); batch_verifier_query_phase(builder, input); builder.cycle_tracker_end("query phase"); + */ } #[cfg(test)] diff --git a/ceno_recursion/src/zkvm_verifier/verifier.rs b/ceno_recursion/src/zkvm_verifier/verifier.rs index 728c2467f..ab51583de 100644 --- a/ceno_recursion/src/zkvm_verifier/verifier.rs +++ b/ceno_recursion/src/zkvm_verifier/verifier.rs @@ -467,14 +467,14 @@ pub fn verify_zkvm_proof>( }); } - // batch_verify( - // builder, - // zkvm_proof_input.max_num_var, - // zkvm_proof_input.max_width, - // rounds, - // zkvm_proof_input.pcs_proof, - // &mut challenger, - // ); + batch_verify( + builder, + zkvm_proof_input.max_num_var, + zkvm_proof_input.max_width, + rounds, + zkvm_proof_input.pcs_proof, + &mut challenger, + ); let empty_arr: Array> = builder.dyn_array(0); let initial_global_state = eval_ceno_expr_with_instance( From 2e9eb4f76f7cc65cb17741a286282e9d59677f3e Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Sat, 3 Jan 2026 03:25:26 -0500 Subject: [PATCH 06/21] debug flags [skip ci] --- Cargo.lock | 1 + .../src/basefold_verifier/query_phase.rs | 23 +++++++++++++++---- .../src/basefold_verifier/verifier.rs | 3 --- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7ba22196c..1153b2d87 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3248,6 +3248,7 @@ dependencies = [ "rand_chacha 0.3.1", "rayon", "serde", + "serde_json", "sumcheck", "tracing", "tracing-subscriber", diff --git a/ceno_recursion/src/basefold_verifier/query_phase.rs b/ceno_recursion/src/basefold_verifier/query_phase.rs index 5d274a2af..0c5106703 100644 --- a/ceno_recursion/src/basefold_verifier/query_phase.rs +++ b/ceno_recursion/src/basefold_verifier/query_phase.rs @@ -15,7 +15,7 @@ use serde::Deserialize; use super::{basefold::*, extension_mmcs::*, mmcs::*, rs::*, utils::*}; use crate::{ - arithmetics::eq_eval_with_index, + arithmetics::{_print_ext_arr, _print_felt_arr, eq_eval_with_index}, tower_verifier::{binding::*, program::interpolate_uni_poly}, }; @@ -691,9 +691,24 @@ pub(crate) fn batch_verifier_query_phase( proof, }; - /* _debug - ext_mmcs_verify_batch::(builder, ext_mmcs_verifier_input); - */ + + // _debug + // builder.print_debug(9970); + // _print_felt_arr(builder, &commit.value); + // builder.print_debug(101); + // builder.print_debug(val); + // builder.range(0, idx_pair.len()).for_each(|idx_vec, builder| { + // let i = builder.get(&idx_pair, idx_vec[0]); + // builder.print_v(i); + // }); + // builder.print_debug(100); + // let ovals = builder.get(&ext_mmcs_verifier_input.opened_values, 0).clone(); + // _print_ext_arr(builder, &ovals); + + + // /* _debug + // ext_mmcs_verify_batch::(builder, ext_mmcs_verifier_input); + // */ let r = builder.get(&input.fold_challenges, i_plus_one); let left = builder.get(&leafs, 0); diff --git a/ceno_recursion/src/basefold_verifier/verifier.rs b/ceno_recursion/src/basefold_verifier/verifier.rs index e72d7d6e8..76dbfef54 100644 --- a/ceno_recursion/src/basefold_verifier/verifier.rs +++ b/ceno_recursion/src/basefold_verifier/verifier.rs @@ -154,13 +154,10 @@ pub fn batch_verify( proof, rounds, }; - - /* _debug builder.cycle_tracker_end("prior query phase"); builder.cycle_tracker_start("query phase"); batch_verifier_query_phase(builder, input); builder.cycle_tracker_end("query phase"); - */ } #[cfg(test)] From b1f343a3475a1f017ffabfb1d70470a2a6e8bd68 Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Sat, 3 Jan 2026 06:36:18 -0500 Subject: [PATCH 07/21] correct alignment [skip ci] --- .../src/basefold_verifier/query_phase.rs | 461 +++++++++++------- ceno_recursion/src/zkvm_verifier/verifier.rs | 2 + 2 files changed, 298 insertions(+), 165 deletions(-) diff --git a/ceno_recursion/src/basefold_verifier/query_phase.rs b/ceno_recursion/src/basefold_verifier/query_phase.rs index 0c5106703..15422e2ff 100644 --- a/ceno_recursion/src/basefold_verifier/query_phase.rs +++ b/ceno_recursion/src/basefold_verifier/query_phase.rs @@ -394,79 +394,81 @@ pub(crate) fn batch_verifier_query_phase( input.fold_challenges.len(), ); - let rounds_context: Array> = builder.dyn_array(input.rounds.len()); - let batch_coeffs_offset: Var = builder.constant(C::N::ZERO); - - builder.cycle_tracker_start("Construct round context"); - iter_zip!(builder, input.rounds, rounds_context).for_each(|ptr_vec, builder| { - let round = builder.iter_ptr_get(&input.rounds, ptr_vec[0]); - // This buffer is not initialized here in providing the context. - // It will be initialized later (once for each query) in the loop over queries, - // by the `fri_single_reduced_opening_eval` chip. - let opened_values_buffer: Array>> = - builder.dyn_array(round.openings.len()); - - let log2_heights = builder.dyn_array(round.openings.len()); - let minus_alpha_offsets = builder.dyn_array(round.openings.len()); - let dimensions = builder.dyn_array(round.openings.len()); - - iter_zip!( - builder, - opened_values_buffer, - log2_heights, - round.openings, - minus_alpha_offsets, - ) - .for_each(|ptr_vec, builder| { - let opening = builder.iter_ptr_get(&round.openings, ptr_vec[2]); - let log2_height: Var = - builder.eval(opening.num_var + Usize::from(get_rate_log() - 1)); - builder.iter_ptr_set(&log2_heights, ptr_vec[1], log2_height); - let width = opening.point_and_evals.evals.len(); - - let opened_value_len: Var = builder.eval(width.clone() * two); - let opened_value_buffer = builder.dyn_array(opened_value_len); - builder.iter_ptr_set( - &opened_values_buffer, - ptr_vec[0], - opened_value_buffer.clone(), - ); - - let alpha_offset = builder.get(&input.batch_coeffs, batch_coeffs_offset); - // Will need to negate the values of low and high - // because `fri_single_reduced_opening_eval` is - // computing \sum_i alpha^i (0 - opened_value[i]). - // We want \sum_i alpha^(i + offset) opened_value[i] - // Let's negate it here. - builder.assign(&alpha_offset, -alpha_offset); - builder.iter_ptr_set(&minus_alpha_offsets, ptr_vec[3], alpha_offset); - builder.assign(&batch_coeffs_offset, batch_coeffs_offset + width.clone()); - }); - - // TODO: ensure that perm is indeed a permutation of 0, ..., opened_values.len()-1 - // Note that this should be done outside the loop over queries - - // reorder (opened values, dimension) according to the permutation - builder - .range(0, round.openings.len()) - .for_each(|j_vec, builder| { - let height_j = builder.get(&log2_heights, j_vec[0]); - let permuted_j = builder.get(&round.perm, j_vec[0]); - // let permuted_j = j; - builder.set_value(&dimensions, permuted_j, height_j); - }); - // TODO: ensure that dimensions is indeed sorted decreasingly - // Note that this should be done outside the loop over queries - - let round_context = RoundContextVariable { - opened_values_buffer, - log2_heights, - minus_alpha_offsets, - dimensions, - }; - builder.iter_ptr_set(&rounds_context, ptr_vec[1], round_context); - }); - builder.cycle_tracker_end("Construct round context"); + // _debug + // let rounds_context: Array> = builder.dyn_array(input.rounds.len()); + // let batch_coeffs_offset: Var = builder.constant(C::N::ZERO); + + // _debug + // builder.cycle_tracker_start("Construct round context"); + // iter_zip!(builder, input.rounds, rounds_context).for_each(|ptr_vec, builder| { + // let round = builder.iter_ptr_get(&input.rounds, ptr_vec[0]); + // // This buffer is not initialized here in providing the context. + // // It will be initialized later (once for each query) in the loop over queries, + // // by the `fri_single_reduced_opening_eval` chip. + // let opened_values_buffer: Array>> = + // builder.dyn_array(round.openings.len()); + + // let log2_heights = builder.dyn_array(round.openings.len()); + // let minus_alpha_offsets = builder.dyn_array(round.openings.len()); + // let dimensions = builder.dyn_array(round.openings.len()); + + // iter_zip!( + // builder, + // opened_values_buffer, + // log2_heights, + // round.openings, + // minus_alpha_offsets, + // ) + // .for_each(|ptr_vec, builder| { + // let opening = builder.iter_ptr_get(&round.openings, ptr_vec[2]); + // let log2_height: Var = + // builder.eval(opening.num_var + Usize::from(get_rate_log() - 1)); + // builder.iter_ptr_set(&log2_heights, ptr_vec[1], log2_height); + // let width = opening.point_and_evals.evals.len(); + + // let opened_value_len: Var = builder.eval(width.clone() * two); + // let opened_value_buffer = builder.dyn_array(opened_value_len); + // builder.iter_ptr_set( + // &opened_values_buffer, + // ptr_vec[0], + // opened_value_buffer.clone(), + // ); + + // let alpha_offset = builder.get(&input.batch_coeffs, batch_coeffs_offset); + // // Will need to negate the values of low and high + // // because `fri_single_reduced_opening_eval` is + // // computing \sum_i alpha^i (0 - opened_value[i]). + // // We want \sum_i alpha^(i + offset) opened_value[i] + // // Let's negate it here. + // builder.assign(&alpha_offset, -alpha_offset); + // builder.iter_ptr_set(&minus_alpha_offsets, ptr_vec[3], alpha_offset); + // builder.assign(&batch_coeffs_offset, batch_coeffs_offset + width.clone()); + // }); + + // // TODO: ensure that perm is indeed a permutation of 0, ..., opened_values.len()-1 + // // Note that this should be done outside the loop over queries + + // // reorder (opened values, dimension) according to the permutation + // builder + // .range(0, round.openings.len()) + // .for_each(|j_vec, builder| { + // let height_j = builder.get(&log2_heights, j_vec[0]); + // let permuted_j = builder.get(&round.perm, j_vec[0]); + // // let permuted_j = j; + // builder.set_value(&dimensions, permuted_j, height_j); + // }); + // // TODO: ensure that dimensions is indeed sorted decreasingly + // // Note that this should be done outside the loop over queries + + // let round_context = RoundContextVariable { + // opened_values_buffer, + // log2_heights, + // minus_alpha_offsets, + // dimensions, + // }; + // builder.iter_ptr_set(&rounds_context, ptr_vec[1], round_context); + // }); + // builder.cycle_tracker_end("Construct round context"); iter_zip!(builder, input.indices, input.proof.query_opening_proof).for_each( |ptr_vec, builder| { @@ -496,100 +498,229 @@ pub(crate) fn batch_verifier_query_phase( let query = builder.iter_ptr_get(&input.proof.query_opening_proof, ptr_vec[1]); builder.cycle_tracker_start("Batching and first FRI round"); - iter_zip!(builder, query.input_proofs, input.rounds, rounds_context).for_each( - |ptr_vec, builder| { - let batch_opening = builder.iter_ptr_get(&query.input_proofs, ptr_vec[0]); - let round = builder.iter_ptr_get(&input.rounds, ptr_vec[1]); - let opened_values = batch_opening.opened_values; - let perm_opened_values = builder.dyn_array(opened_values.length.clone()); - let opening_proof = batch_opening.opening_proof; - - let round_context = builder.iter_ptr_get(&rounds_context, ptr_vec[2]); - - // _TODO: Iteration looping count is incorrect - // _TODO: 5 zipped arrays have different length - iter_zip!( - builder, - round_context.log2_heights, - round_context.minus_alpha_offsets, - round_context.opened_values_buffer, - round.perm, - round.openings, - ) - .for_each(|ptr_vec, builder| { - let opened_values_buffer = - builder.iter_ptr_get(&round_context.opened_values_buffer, ptr_vec[2]); - let log2_height: Var = - builder.iter_ptr_get(&round_context.log2_heights, ptr_vec[0]); - // The linear combination is by (alpha^offset, ..., alpha^(offset+width-1)), which is equal to - // alpha^offset * (1, ..., alpha^(width-1)) - let minus_alpha_offset = - builder.iter_ptr_get(&round_context.minus_alpha_offsets, ptr_vec[1]); - let opening = builder.iter_ptr_get(&round.openings, ptr_vec[4]); - let width = opening.point_and_evals.evals.len(); - let low_values = opened_values_buffer.slice(builder, 0, width.clone()); - let high_values = opened_values_buffer.slice( - builder, - width.clone(), - opened_values_buffer.len(), - ); - - /* _debug - let all_zeros_slice = all_zeros.slice(builder, 0, width.clone()); - let low = builder.fri_single_reduced_opening_eval( - alpha, - opened_values.id.get_var(), - zero_flag, - &low_values, - &all_zeros_slice, - ); - let high = builder.fri_single_reduced_opening_eval( - alpha, - opened_values.id.get_var(), - zero_flag, - &high_values, - &all_zeros_slice, - ); - builder.assign(&low, low * minus_alpha_offset); - builder.assign(&high, high * minus_alpha_offset); - - let codeword: PackedCodeword = PackedCodeword { low, high }; - let codeword_acc = builder.get(&reduced_codeword_by_height, log2_height); - - // reduced_openings[log2_height] += codeword - builder.assign(&codeword_acc.low, codeword_acc.low + codeword.low); - builder.assign(&codeword_acc.high, codeword_acc.high + codeword.high); - - builder.set_value(&reduced_codeword_by_height, log2_height, codeword_acc); - */ - - // reorder opened values according to the permutation - let mat_j = - builder.iter_ptr_get(&round_context.opened_values_buffer, ptr_vec[2]); - let permuted_j = builder.iter_ptr_get(&round.perm, ptr_vec[3]); - // let permuted_j = j; - builder.set_value(&perm_opened_values, permuted_j, mat_j); + + let batch_coeffs_offset: Var = builder.constant(C::N::ZERO); + builder.range(0, input.rounds.len()).for_each(|idx_vec, builder| { + let batch_opening = builder.get(&query.input_proofs, idx_vec[0]); + let round = builder.get(&input.rounds, idx_vec[0]); + let opened_values = batch_opening.opened_values; + // let perm_opened_values = builder.dyn_array(opened_values.length.clone()); + let opening_proof = batch_opening.opening_proof; + + // let opened_values_buffer: Array>> = + // builder.dyn_array(round.openings.len()); + // let log2_heights = builder.dyn_array(round.openings.len()); + // let minus_alpha_offsets = builder.dyn_array(round.openings.len()); + // let dimensions = builder.dyn_array(round.openings.len()); + let opening_idxes: Array> = builder.dyn_array(round.openings.len()); + + // _debug + // builder.print_debug(747); + let opened_values_offset: Var = builder.constant(C::N::ZERO); + builder.range(0, round.openings.len()).for_each(|i_vec, builder| { + let opening = builder.get(&round.openings, i_vec[0]); + + builder.if_ne(opening.num_var, zero_flag).then(|builder| { + builder.set(&opening_idxes, opened_values_offset, i_vec[0]); + // let log2_height: Var = builder.eval(opening.num_var + Usize::from(get_rate_log() - 1)); + // builder.set(&log2_heights, opened_values_offset, log2_height); + // let width = opening.point_and_evals.evals.len(); + + // _debug + // builder.print_v(opening.num_var); + + // let opening = builder.iter_ptr_get(&round.openings, ptr_vec[2]); + // let log2_height: Var = + // builder.eval(opening.num_var + Usize::from(get_rate_log() - 1)); + // builder.iter_ptr_set(&log2_heights, ptr_vec[1], log2_height); + // let width = opening.point_and_evals.evals.len(); + + // let opened_value_len: Var = builder.eval(width.clone() * two); + // let opened_value_buffer = builder.dyn_array(opened_value_len); + // builder.iter_ptr_set( + // &opened_values_buffer, + // ptr_vec[0], + // opened_value_buffer.clone(), + // ); + + // let alpha_offset = builder.get(&input.batch_coeffs, batch_coeffs_offset); + // // Will need to negate the values of low and high + // // because `fri_single_reduced_opening_eval` is + // // computing \sum_i alpha^i (0 - opened_value[i]). + // // We want \sum_i alpha^(i + offset) opened_value[i] + // // Let's negate it here. + // builder.assign(&alpha_offset, -alpha_offset); + // builder.iter_ptr_set(&minus_alpha_offsets, ptr_vec[3], alpha_offset); + // builder.assign(&batch_coeffs_offset, batch_coeffs_offset + width.clone()); + // }); + + // // TODO: ensure that perm is indeed a permutation of 0, ..., opened_values.len()-1 + // // Note that this should be done outside the loop over queries + + // // reorder (opened values, dimension) according to the permutation + // builder + // .range(0, round.openings.len()) + // .for_each(|j_vec, builder| { + // let height_j = builder.get(&log2_heights, j_vec[0]); + // let permuted_j = builder.get(&round.perm, j_vec[0]); + // // let permuted_j = j; + // builder.set_value(&dimensions, permuted_j, height_j); + // }); + + builder.assign(&opened_values_offset, opened_values_offset + Usize::from(1)); }); + }); + // builder.print_debug(747); - // i >>= (log2_max_codeword_size - commit.log2_max_codeword_size); - let bits_shift: Var = - builder.eval(log2_max_codeword_size - round.commit.log2_max_codeword_size); - let reduced_idx_bits = idx_bits.slice(builder, bits_shift, idx_bits.len()); - - // verify input mmcs - let mmcs_verifier_input = MmcsVerifierInputVariable { - commit: round.commit.commit.clone(), - dimensions: round_context.dimensions, - index_bits: reduced_idx_bits, - opened_values: perm_opened_values, - proof: opening_proof, - }; - - /* _debug - mmcs_verify_batch(builder, mmcs_verifier_input); - */ - }, - ); + builder.range(0, opened_values.length).for_each(|i_vec, builder| { + let i = i_vec[0]; + let opening_idx = builder.get(&opening_idxes, i_vec[0]); + let opening = builder.get(&round.openings, opening_idx); + // let opened_values_buffer = builder.get(&round_context.opened_values_buffer, i); + let log2_height: Var = builder.eval(opening.num_var + Usize::from(get_rate_log() - 1)); + + // The linear combination is by (alpha^offset, ..., alpha^(offset+width-1)), which is equal to + // alpha^offset * (1, ..., alpha^(width-1)) + // let minus_alpha_offset = + // builder.get(&round_context.minus_alpha_offsets, i); + let width = opening.point_and_evals.evals.len(); + + // let low_values = opened_values_buffer.slice(builder, 0, width.clone()); + // let high_values = opened_values_buffer.slice( + // builder, + // width.clone(), + // opened_values_buffer.len(), + // ); + + let end: Var = builder.eval(batch_coeffs_offset.clone() + width.clone()); + let batch_coeffs = &input.batch_coeffs.slice(builder, batch_coeffs_offset, end); + builder.assign(&batch_coeffs_offset, end); + + // _debug + // let lo0 = builder.get(&low_values, 0); + // let hi0 = builder.get(&high_values, 0); + let coeff0 = builder.get(&batch_coeffs, 0); + builder.print_debug(999999); + builder.print_e(coeff0); + // builder.print_f(lo0); + // builder.print_f(hi0); + builder.print_v(log2_height); + }); + + // i >>= (log2_max_codeword_size - commit.log2_max_codeword_size); + let bits_shift: Var = + builder.eval(log2_max_codeword_size - round.commit.log2_max_codeword_size); + let reduced_idx_bits = idx_bits.slice(builder, bits_shift, idx_bits.len()); + + /* _debug + // verify input mmcs + let mmcs_verifier_input = MmcsVerifierInputVariable { + commit: round.commit.commit.clone(), + dimensions: round_context.dimensions, + index_bits: reduced_idx_bits, + opened_values: perm_opened_values, + proof: opening_proof, + }; + + mmcs_verify_batch(builder, mmcs_verifier_input); + */ + }); + + // iter_zip!(builder, query.input_proofs, input.rounds, rounds_context).for_each( + // |ptr_vec, builder| { + // let batch_opening = builder.iter_ptr_get(&query.input_proofs, ptr_vec[0]); + // let round = builder.iter_ptr_get(&input.rounds, ptr_vec[1]); + // let opened_values = batch_opening.opened_values; + // let perm_opened_values = builder.dyn_array(opened_values.length.clone()); + // let opening_proof = batch_opening.opening_proof; + // let round_context = builder.iter_ptr_get(&rounds_context, ptr_vec[2]); + + // /* _debug + // // _TODO: Iteration looping count is incorrect + // // _TODO: 5 zipped arrays have different length + // iter_zip!( + // builder, + // round_context.log2_heights, + // round_context.minus_alpha_offsets, + // round_context.opened_values_buffer, + // round.perm, + // round.openings, + // ) + // .for_each(|ptr_vec, builder| { + // let opened_values_buffer = + // builder.iter_ptr_get(&round_context.opened_values_buffer, ptr_vec[2]); + // let log2_height: Var = + // builder.iter_ptr_get(&round_context.log2_heights, ptr_vec[0]); + // // The linear combination is by (alpha^offset, ..., alpha^(offset+width-1)), which is equal to + // // alpha^offset * (1, ..., alpha^(width-1)) + // let minus_alpha_offset = + // builder.iter_ptr_get(&round_context.minus_alpha_offsets, ptr_vec[1]); + // let opening = builder.iter_ptr_get(&round.openings, ptr_vec[4]); + // let width = opening.point_and_evals.evals.len(); + // let low_values = opened_values_buffer.slice(builder, 0, width.clone()); + // let high_values = opened_values_buffer.slice( + // builder, + // width.clone(), + // opened_values_buffer.len(), + // ); + + // /* _debug + // let all_zeros_slice = all_zeros.slice(builder, 0, width.clone()); + // let low = builder.fri_single_reduced_opening_eval( + // alpha, + // opened_values.id.get_var(), + // zero_flag, + // &low_values, + // &all_zeros_slice, + // ); + // let high = builder.fri_single_reduced_opening_eval( + // alpha, + // opened_values.id.get_var(), + // zero_flag, + // &high_values, + // &all_zeros_slice, + // ); + // builder.assign(&low, low * minus_alpha_offset); + // builder.assign(&high, high * minus_alpha_offset); + + // let codeword: PackedCodeword = PackedCodeword { low, high }; + // let codeword_acc = builder.get(&reduced_codeword_by_height, log2_height); + + // // reduced_openings[log2_height] += codeword + // builder.assign(&codeword_acc.low, codeword_acc.low + codeword.low); + // builder.assign(&codeword_acc.high, codeword_acc.high + codeword.high); + + // builder.set_value(&reduced_codeword_by_height, log2_height, codeword_acc); + // */ + + // // reorder opened values according to the permutation + // let mat_j = + // builder.iter_ptr_get(&round_context.opened_values_buffer, ptr_vec[2]); + // let permuted_j = builder.iter_ptr_get(&round.perm, ptr_vec[3]); + // // let permuted_j = j; + // builder.set_value(&perm_opened_values, permuted_j, mat_j); + // }); + // */ + + // // i >>= (log2_max_codeword_size - commit.log2_max_codeword_size); + // let bits_shift: Var = + // builder.eval(log2_max_codeword_size - round.commit.log2_max_codeword_size); + // let reduced_idx_bits = idx_bits.slice(builder, bits_shift, idx_bits.len()); + + // // verify input mmcs + // let mmcs_verifier_input = MmcsVerifierInputVariable { + // commit: round.commit.commit.clone(), + // dimensions: round_context.dimensions, + // index_bits: reduced_idx_bits, + // opened_values: perm_opened_values, + // proof: opening_proof, + // }; + + // /* _debug + // mmcs_verify_batch(builder, mmcs_verifier_input); + // */ + // }, + // ); builder.cycle_tracker_end("Batching and first FRI round"); let opening_ext = query.commit_phase_openings; diff --git a/ceno_recursion/src/zkvm_verifier/verifier.rs b/ceno_recursion/src/zkvm_verifier/verifier.rs index ab51583de..b67c3df60 100644 --- a/ceno_recursion/src/zkvm_verifier/verifier.rs +++ b/ceno_recursion/src/zkvm_verifier/verifier.rs @@ -467,6 +467,8 @@ pub fn verify_zkvm_proof>( }); } + // _debug + builder.print_debug(666666); batch_verify( builder, zkvm_proof_input.max_num_var, From cb52691e4737b24b1376efbf23dea4651b4f0182 Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Sun, 4 Jan 2026 02:58:01 -0500 Subject: [PATCH 08/21] organize context [skip ci] --- .../src/basefold_verifier/query_phase.rs | 125 ++++++++---------- 1 file changed, 52 insertions(+), 73 deletions(-) diff --git a/ceno_recursion/src/basefold_verifier/query_phase.rs b/ceno_recursion/src/basefold_verifier/query_phase.rs index 15422e2ff..6c3c9d39e 100644 --- a/ceno_recursion/src/basefold_verifier/query_phase.rs +++ b/ceno_recursion/src/basefold_verifier/query_phase.rs @@ -498,113 +498,92 @@ pub(crate) fn batch_verifier_query_phase( let query = builder.iter_ptr_get(&input.proof.query_opening_proof, ptr_vec[1]); builder.cycle_tracker_start("Batching and first FRI round"); - let batch_coeffs_offset: Var = builder.constant(C::N::ZERO); builder.range(0, input.rounds.len()).for_each(|idx_vec, builder| { let batch_opening = builder.get(&query.input_proofs, idx_vec[0]); let round = builder.get(&input.rounds, idx_vec[0]); let opened_values = batch_opening.opened_values; - // let perm_opened_values = builder.dyn_array(opened_values.length.clone()); + let perm_opened_values = builder.dyn_array(opened_values.length.clone()); let opening_proof = batch_opening.opening_proof; - - // let opened_values_buffer: Array>> = - // builder.dyn_array(round.openings.len()); - // let log2_heights = builder.dyn_array(round.openings.len()); - // let minus_alpha_offsets = builder.dyn_array(round.openings.len()); - // let dimensions = builder.dyn_array(round.openings.len()); let opening_idxes: Array> = builder.dyn_array(round.openings.len()); - - // _debug - // builder.print_debug(747); let opened_values_offset: Var = builder.constant(C::N::ZERO); builder.range(0, round.openings.len()).for_each(|i_vec, builder| { let opening = builder.get(&round.openings, i_vec[0]); builder.if_ne(opening.num_var, zero_flag).then(|builder| { builder.set(&opening_idxes, opened_values_offset, i_vec[0]); - // let log2_height: Var = builder.eval(opening.num_var + Usize::from(get_rate_log() - 1)); - // builder.set(&log2_heights, opened_values_offset, log2_height); - // let width = opening.point_and_evals.evals.len(); - - // _debug - // builder.print_v(opening.num_var); - - // let opening = builder.iter_ptr_get(&round.openings, ptr_vec[2]); - // let log2_height: Var = - // builder.eval(opening.num_var + Usize::from(get_rate_log() - 1)); - // builder.iter_ptr_set(&log2_heights, ptr_vec[1], log2_height); - // let width = opening.point_and_evals.evals.len(); - - // let opened_value_len: Var = builder.eval(width.clone() * two); - // let opened_value_buffer = builder.dyn_array(opened_value_len); - // builder.iter_ptr_set( - // &opened_values_buffer, - // ptr_vec[0], - // opened_value_buffer.clone(), - // ); - - // let alpha_offset = builder.get(&input.batch_coeffs, batch_coeffs_offset); - // // Will need to negate the values of low and high - // // because `fri_single_reduced_opening_eval` is - // // computing \sum_i alpha^i (0 - opened_value[i]). - // // We want \sum_i alpha^(i + offset) opened_value[i] - // // Let's negate it here. - // builder.assign(&alpha_offset, -alpha_offset); - // builder.iter_ptr_set(&minus_alpha_offsets, ptr_vec[3], alpha_offset); - // builder.assign(&batch_coeffs_offset, batch_coeffs_offset + width.clone()); - // }); - - // // TODO: ensure that perm is indeed a permutation of 0, ..., opened_values.len()-1 - // // Note that this should be done outside the loop over queries - - // // reorder (opened values, dimension) according to the permutation - // builder - // .range(0, round.openings.len()) - // .for_each(|j_vec, builder| { - // let height_j = builder.get(&log2_heights, j_vec[0]); - // let permuted_j = builder.get(&round.perm, j_vec[0]); - // // let permuted_j = j; - // builder.set_value(&dimensions, permuted_j, height_j); - // }); - builder.assign(&opened_values_offset, opened_values_offset + Usize::from(1)); }); }); - // builder.print_debug(747); + let dimensions: Array> = builder.dyn_array(opened_values.length.clone()); - builder.range(0, opened_values.length).for_each(|i_vec, builder| { + builder.range(0, opened_values.length.clone()).for_each(|i_vec, builder| { let i = i_vec[0]; let opening_idx = builder.get(&opening_idxes, i_vec[0]); let opening = builder.get(&round.openings, opening_idx); - // let opened_values_buffer = builder.get(&round_context.opened_values_buffer, i); let log2_height: Var = builder.eval(opening.num_var + Usize::from(get_rate_log() - 1)); // The linear combination is by (alpha^offset, ..., alpha^(offset+width-1)), which is equal to // alpha^offset * (1, ..., alpha^(width-1)) - // let minus_alpha_offset = - // builder.get(&round_context.minus_alpha_offsets, i); let width = opening.point_and_evals.evals.len(); - - // let low_values = opened_values_buffer.slice(builder, 0, width.clone()); - // let high_values = opened_values_buffer.slice( - // builder, - // width.clone(), - // opened_values_buffer.len(), - // ); + let opened_value_len: Var = builder.eval(width.clone() * two); + let opened_values_buffer = builder.dyn_array(opened_value_len); + let alpha_offset = builder.get(&input.batch_coeffs, batch_coeffs_offset); + let minus_alpha_offset: Ext = builder.eval(-alpha_offset); + + let low_values = opened_values_buffer.slice(builder, 0, width.clone()); + let high_values = opened_values_buffer.slice( + builder, + width.clone(), + opened_values_buffer.len(), + ); let end: Var = builder.eval(batch_coeffs_offset.clone() + width.clone()); let batch_coeffs = &input.batch_coeffs.slice(builder, batch_coeffs_offset, end); builder.assign(&batch_coeffs_offset, end); + let all_zeros_slice = all_zeros.slice(builder, 0, width.clone()); + let low = builder.fri_single_reduced_opening_eval( + alpha, + opened_values.id.get_var(), + zero_flag, + &low_values, + &all_zeros_slice, + ); + let high = builder.fri_single_reduced_opening_eval( + alpha, + opened_values.id.get_var(), + zero_flag, + &high_values, + &all_zeros_slice, + ); + + builder.assign(&low, low * minus_alpha_offset); + builder.assign(&high, high * minus_alpha_offset); + + let codeword: PackedCodeword = PackedCodeword { low, high }; + let codeword_acc = builder.get(&reduced_codeword_by_height, log2_height); + + // reduced_openings[log2_height] += codeword + builder.assign(&codeword_acc.low, codeword_acc.low + codeword.low); + builder.assign(&codeword_acc.high, codeword_acc.high + codeword.high); + builder.set_value(&reduced_codeword_by_height, log2_height, codeword_acc); + + // reorder opened values according to the permutation + let permuted_j = builder.iter_ptr_get(&round.perm, i); + // let permuted_j = j; + builder.set_value(&perm_opened_values, permuted_j, opened_values_buffer); + builder.set_value(&dimensions, permuted_j, log2_height); + // _debug // let lo0 = builder.get(&low_values, 0); // let hi0 = builder.get(&high_values, 0); - let coeff0 = builder.get(&batch_coeffs, 0); - builder.print_debug(999999); - builder.print_e(coeff0); + // let coeff0 = builder.get(&batch_coeffs, 0); + // builder.print_debug(999999); + // builder.print_e(coeff0); // builder.print_f(lo0); // builder.print_f(hi0); - builder.print_v(log2_height); + // builder.print_v(log2_height); }); // i >>= (log2_max_codeword_size - commit.log2_max_codeword_size); @@ -616,7 +595,7 @@ pub(crate) fn batch_verifier_query_phase( // verify input mmcs let mmcs_verifier_input = MmcsVerifierInputVariable { commit: round.commit.commit.clone(), - dimensions: round_context.dimensions, + dimensions, index_bits: reduced_idx_bits, opened_values: perm_opened_values, proof: opening_proof, From 02989a38d05ea0685945b80990fb44ac2d347e6e Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Sun, 4 Jan 2026 03:06:02 -0500 Subject: [PATCH 09/21] remove context step [skip ci] --- .../src/basefold_verifier/query_phase.rs | 185 +----------------- 1 file changed, 1 insertion(+), 184 deletions(-) diff --git a/ceno_recursion/src/basefold_verifier/query_phase.rs b/ceno_recursion/src/basefold_verifier/query_phase.rs index 6c3c9d39e..d6511db47 100644 --- a/ceno_recursion/src/basefold_verifier/query_phase.rs +++ b/ceno_recursion/src/basefold_verifier/query_phase.rs @@ -394,82 +394,6 @@ pub(crate) fn batch_verifier_query_phase( input.fold_challenges.len(), ); - // _debug - // let rounds_context: Array> = builder.dyn_array(input.rounds.len()); - // let batch_coeffs_offset: Var = builder.constant(C::N::ZERO); - - // _debug - // builder.cycle_tracker_start("Construct round context"); - // iter_zip!(builder, input.rounds, rounds_context).for_each(|ptr_vec, builder| { - // let round = builder.iter_ptr_get(&input.rounds, ptr_vec[0]); - // // This buffer is not initialized here in providing the context. - // // It will be initialized later (once for each query) in the loop over queries, - // // by the `fri_single_reduced_opening_eval` chip. - // let opened_values_buffer: Array>> = - // builder.dyn_array(round.openings.len()); - - // let log2_heights = builder.dyn_array(round.openings.len()); - // let minus_alpha_offsets = builder.dyn_array(round.openings.len()); - // let dimensions = builder.dyn_array(round.openings.len()); - - // iter_zip!( - // builder, - // opened_values_buffer, - // log2_heights, - // round.openings, - // minus_alpha_offsets, - // ) - // .for_each(|ptr_vec, builder| { - // let opening = builder.iter_ptr_get(&round.openings, ptr_vec[2]); - // let log2_height: Var = - // builder.eval(opening.num_var + Usize::from(get_rate_log() - 1)); - // builder.iter_ptr_set(&log2_heights, ptr_vec[1], log2_height); - // let width = opening.point_and_evals.evals.len(); - - // let opened_value_len: Var = builder.eval(width.clone() * two); - // let opened_value_buffer = builder.dyn_array(opened_value_len); - // builder.iter_ptr_set( - // &opened_values_buffer, - // ptr_vec[0], - // opened_value_buffer.clone(), - // ); - - // let alpha_offset = builder.get(&input.batch_coeffs, batch_coeffs_offset); - // // Will need to negate the values of low and high - // // because `fri_single_reduced_opening_eval` is - // // computing \sum_i alpha^i (0 - opened_value[i]). - // // We want \sum_i alpha^(i + offset) opened_value[i] - // // Let's negate it here. - // builder.assign(&alpha_offset, -alpha_offset); - // builder.iter_ptr_set(&minus_alpha_offsets, ptr_vec[3], alpha_offset); - // builder.assign(&batch_coeffs_offset, batch_coeffs_offset + width.clone()); - // }); - - // // TODO: ensure that perm is indeed a permutation of 0, ..., opened_values.len()-1 - // // Note that this should be done outside the loop over queries - - // // reorder (opened values, dimension) according to the permutation - // builder - // .range(0, round.openings.len()) - // .for_each(|j_vec, builder| { - // let height_j = builder.get(&log2_heights, j_vec[0]); - // let permuted_j = builder.get(&round.perm, j_vec[0]); - // // let permuted_j = j; - // builder.set_value(&dimensions, permuted_j, height_j); - // }); - // // TODO: ensure that dimensions is indeed sorted decreasingly - // // Note that this should be done outside the loop over queries - - // let round_context = RoundContextVariable { - // opened_values_buffer, - // log2_heights, - // minus_alpha_offsets, - // dimensions, - // }; - // builder.iter_ptr_set(&rounds_context, ptr_vec[1], round_context); - // }); - // builder.cycle_tracker_end("Construct round context"); - iter_zip!(builder, input.indices, input.proof.query_opening_proof).for_each( |ptr_vec, builder| { // TODO: change type of input.indices to be `Array>>` @@ -571,19 +495,8 @@ pub(crate) fn batch_verifier_query_phase( // reorder opened values according to the permutation let permuted_j = builder.iter_ptr_get(&round.perm, i); - // let permuted_j = j; builder.set_value(&perm_opened_values, permuted_j, opened_values_buffer); builder.set_value(&dimensions, permuted_j, log2_height); - - // _debug - // let lo0 = builder.get(&low_values, 0); - // let hi0 = builder.get(&high_values, 0); - // let coeff0 = builder.get(&batch_coeffs, 0); - // builder.print_debug(999999); - // builder.print_e(coeff0); - // builder.print_f(lo0); - // builder.print_f(hi0); - // builder.print_v(log2_height); }); // i >>= (log2_max_codeword_size - commit.log2_max_codeword_size); @@ -591,7 +504,6 @@ pub(crate) fn batch_verifier_query_phase( builder.eval(log2_max_codeword_size - round.commit.log2_max_codeword_size); let reduced_idx_bits = idx_bits.slice(builder, bits_shift, idx_bits.len()); - /* _debug // verify input mmcs let mmcs_verifier_input = MmcsVerifierInputVariable { commit: round.commit.commit.clone(), @@ -601,105 +513,10 @@ pub(crate) fn batch_verifier_query_phase( proof: opening_proof, }; + /* _debug mmcs_verify_batch(builder, mmcs_verifier_input); */ }); - - // iter_zip!(builder, query.input_proofs, input.rounds, rounds_context).for_each( - // |ptr_vec, builder| { - // let batch_opening = builder.iter_ptr_get(&query.input_proofs, ptr_vec[0]); - // let round = builder.iter_ptr_get(&input.rounds, ptr_vec[1]); - // let opened_values = batch_opening.opened_values; - // let perm_opened_values = builder.dyn_array(opened_values.length.clone()); - // let opening_proof = batch_opening.opening_proof; - // let round_context = builder.iter_ptr_get(&rounds_context, ptr_vec[2]); - - // /* _debug - // // _TODO: Iteration looping count is incorrect - // // _TODO: 5 zipped arrays have different length - // iter_zip!( - // builder, - // round_context.log2_heights, - // round_context.minus_alpha_offsets, - // round_context.opened_values_buffer, - // round.perm, - // round.openings, - // ) - // .for_each(|ptr_vec, builder| { - // let opened_values_buffer = - // builder.iter_ptr_get(&round_context.opened_values_buffer, ptr_vec[2]); - // let log2_height: Var = - // builder.iter_ptr_get(&round_context.log2_heights, ptr_vec[0]); - // // The linear combination is by (alpha^offset, ..., alpha^(offset+width-1)), which is equal to - // // alpha^offset * (1, ..., alpha^(width-1)) - // let minus_alpha_offset = - // builder.iter_ptr_get(&round_context.minus_alpha_offsets, ptr_vec[1]); - // let opening = builder.iter_ptr_get(&round.openings, ptr_vec[4]); - // let width = opening.point_and_evals.evals.len(); - // let low_values = opened_values_buffer.slice(builder, 0, width.clone()); - // let high_values = opened_values_buffer.slice( - // builder, - // width.clone(), - // opened_values_buffer.len(), - // ); - - // /* _debug - // let all_zeros_slice = all_zeros.slice(builder, 0, width.clone()); - // let low = builder.fri_single_reduced_opening_eval( - // alpha, - // opened_values.id.get_var(), - // zero_flag, - // &low_values, - // &all_zeros_slice, - // ); - // let high = builder.fri_single_reduced_opening_eval( - // alpha, - // opened_values.id.get_var(), - // zero_flag, - // &high_values, - // &all_zeros_slice, - // ); - // builder.assign(&low, low * minus_alpha_offset); - // builder.assign(&high, high * minus_alpha_offset); - - // let codeword: PackedCodeword = PackedCodeword { low, high }; - // let codeword_acc = builder.get(&reduced_codeword_by_height, log2_height); - - // // reduced_openings[log2_height] += codeword - // builder.assign(&codeword_acc.low, codeword_acc.low + codeword.low); - // builder.assign(&codeword_acc.high, codeword_acc.high + codeword.high); - - // builder.set_value(&reduced_codeword_by_height, log2_height, codeword_acc); - // */ - - // // reorder opened values according to the permutation - // let mat_j = - // builder.iter_ptr_get(&round_context.opened_values_buffer, ptr_vec[2]); - // let permuted_j = builder.iter_ptr_get(&round.perm, ptr_vec[3]); - // // let permuted_j = j; - // builder.set_value(&perm_opened_values, permuted_j, mat_j); - // }); - // */ - - // // i >>= (log2_max_codeword_size - commit.log2_max_codeword_size); - // let bits_shift: Var = - // builder.eval(log2_max_codeword_size - round.commit.log2_max_codeword_size); - // let reduced_idx_bits = idx_bits.slice(builder, bits_shift, idx_bits.len()); - - // // verify input mmcs - // let mmcs_verifier_input = MmcsVerifierInputVariable { - // commit: round.commit.commit.clone(), - // dimensions: round_context.dimensions, - // index_bits: reduced_idx_bits, - // opened_values: perm_opened_values, - // proof: opening_proof, - // }; - - // /* _debug - // mmcs_verify_batch(builder, mmcs_verifier_input); - // */ - // }, - // ); builder.cycle_tracker_end("Batching and first FRI round"); let opening_ext = query.commit_phase_openings; From 68e10045e0069897faca563c8a6d9911f6d749c3 Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Sun, 4 Jan 2026 03:13:00 -0500 Subject: [PATCH 10/21] adjust debug [skip ci] --- .../src/basefold_verifier/query_phase.rs | 28 +++++-------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/ceno_recursion/src/basefold_verifier/query_phase.rs b/ceno_recursion/src/basefold_verifier/query_phase.rs index d6511db47..e376f689e 100644 --- a/ceno_recursion/src/basefold_verifier/query_phase.rs +++ b/ceno_recursion/src/basefold_verifier/query_phase.rs @@ -618,24 +618,9 @@ pub(crate) fn batch_verifier_query_phase( proof, }; - - // _debug - // builder.print_debug(9970); - // _print_felt_arr(builder, &commit.value); - // builder.print_debug(101); - // builder.print_debug(val); - // builder.range(0, idx_pair.len()).for_each(|idx_vec, builder| { - // let i = builder.get(&idx_pair, idx_vec[0]); - // builder.print_v(i); - // }); - // builder.print_debug(100); - // let ovals = builder.get(&ext_mmcs_verifier_input.opened_values, 0).clone(); - // _print_ext_arr(builder, &ovals); - - - // /* _debug - // ext_mmcs_verify_batch::(builder, ext_mmcs_verifier_input); - // */ + /* _debug + ext_mmcs_verify_batch::(builder, ext_mmcs_verifier_input); + */ let r = builder.get(&input.fold_challenges, i_plus_one); let left = builder.get(&leafs, 0); @@ -726,7 +711,7 @@ pub(crate) fn batch_verifier_query_phase( /* _debug // \sum_i eq(p, [r,i]) * f(r,i) - iter_zip!(builder, input.rounds,).for_each(|ptr_vec, builder| { + iter_zip!(builder, input.rounds).for_each(|ptr_vec, builder| { let round = builder.iter_ptr_get(&input.rounds, ptr_vec[0]); // TODO: filter out openings with num_var >= get_basecode_msg_size_log::() @@ -764,8 +749,9 @@ pub(crate) fn batch_verifier_query_phase( }); }); - builder.assert_eq::>(j, input.proof.final_message.len()); - builder.assert_eq::>(left, right); + // _debug + // builder.assert_eq::>(j, input.proof.final_message.len()); + // builder.assert_eq::>(left, right); */ } From 840e4319df1068e878091bef464a7e904c316dcb Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Sun, 4 Jan 2026 03:24:21 -0500 Subject: [PATCH 11/21] add assertion --- .../src/basefold_verifier/query_phase.rs | 87 ++++++++++--------- 1 file changed, 45 insertions(+), 42 deletions(-) diff --git a/ceno_recursion/src/basefold_verifier/query_phase.rs b/ceno_recursion/src/basefold_verifier/query_phase.rs index e376f689e..b85d75fd7 100644 --- a/ceno_recursion/src/basefold_verifier/query_phase.rs +++ b/ceno_recursion/src/basefold_verifier/query_phase.rs @@ -659,17 +659,20 @@ pub(crate) fn batch_verifier_query_phase( let round = builder.iter_ptr_get(&input.rounds, ptr_vec[0]); iter_zip!(builder, round.openings).for_each(|ptr_vec, builder| { let opening = builder.iter_ptr_get(&round.openings, ptr_vec[0]); + // TODO: filter out openings with num_var >= get_basecode_msg_size_log::() - let var_diff: Var = builder.eval(input.max_num_var.get_var() - opening.num_var); - let scalar_var = pow_2(builder, var_diff); - let scalar = builder.unsafe_cast_var_to_felt(scalar_var); - iter_zip!(builder, opening.point_and_evals.evals).for_each(|ptr_vec, builder| { - let eval = builder.iter_ptr_get(&opening.point_and_evals.evals, ptr_vec[0]); - let coeff = builder.get(&input.batch_coeffs, batch_coeffs_offset); - let val: Ext = builder.eval(eval * coeff * scalar); - builder.assign(&expected_sum, expected_sum + val); - builder.assign(&batch_coeffs_offset, batch_coeffs_offset + Usize::from(1)); - }); + builder.if_ne(opening.num_var, zero_flag).then(|builder| { + let var_diff: Var = builder.eval(input.max_num_var.get_var() - opening.num_var); + let scalar_var = pow_2(builder, var_diff); + let scalar = builder.unsafe_cast_var_to_felt(scalar_var); + iter_zip!(builder, opening.point_and_evals.evals).for_each(|ptr_vec, builder| { + let eval = builder.iter_ptr_get(&opening.point_and_evals.evals, ptr_vec[0]); + let coeff = builder.get(&input.batch_coeffs, batch_coeffs_offset); + let val: Ext = builder.eval(eval * coeff * scalar); + builder.assign(&expected_sum, expected_sum + val); + builder.assign(&batch_coeffs_offset, batch_coeffs_offset + Usize::from(1)); + }); + }); }); }); let sum: Ext = { @@ -709,7 +712,6 @@ pub(crate) fn batch_verifier_query_phase( let one: Var = builder.constant(C::N::ONE); let j: Var = builder.constant(C::N::ZERO); - /* _debug // \sum_i eq(p, [r,i]) * f(r,i) iter_zip!(builder, input.rounds).for_each(|ptr_vec, builder| { let round = builder.iter_ptr_get(&input.rounds, ptr_vec[0]); @@ -717,42 +719,43 @@ pub(crate) fn batch_verifier_query_phase( iter_zip!(builder, round.openings).for_each(|ptr_vec, builder| { let opening = builder.iter_ptr_get(&round.openings, ptr_vec[0]); - let point_and_evals = &opening.point_and_evals; - let point = &point_and_evals.point; - let num_vars_evaluated: Var = - builder.eval(point.fs.len() - Usize::from(get_basecode_msg_size_log())); - let final_message = builder.get(&input.proof.final_message, j); - - // coeff is the eq polynomial evaluated at the first challenge.len() variables - let ylo = builder.eval(input.fold_challenges.len() - num_vars_evaluated); - let coeff = eq_eval_with_index( - builder, - &point.fs, - &input.fold_challenges, - Usize::from(0), - Usize::Var(ylo), - Usize::Var(num_vars_evaluated), - ); + builder.if_ne(opening.num_var, zero_flag).then(|builder| { + let point_and_evals = &opening.point_and_evals; + let point = &point_and_evals.point; + + let num_vars_evaluated: Var = + builder.eval(point.fs.len() - Usize::from(get_basecode_msg_size_log())); + let final_message = builder.get(&input.proof.final_message, j); + + // coeff is the eq polynomial evaluated at the first challenge.len() variables + let ylo = builder.eval(input.fold_challenges.len() - num_vars_evaluated); + let coeff = eq_eval_with_index( + builder, + &point.fs, + &input.fold_challenges, + Usize::from(0), + Usize::Var(ylo), + Usize::Var(num_vars_evaluated), + ); - // compute \sum_i eq(p[..num_vars_evaluated], r) * eq(p[num_vars_evaluated..], i) * f(r,i) - // - // We always assume that num_vars_evaluated is equal to p.len() - // so that the above sum only has one item and the final evaluation vector has only one element. - builder.assert_eq::>(final_message.len(), one); - - let final_message = builder.get(&final_message, 0); - let dot_prod: Ext = builder.eval(final_message * coeff); - - builder.assign(&right, right + dot_prod); - builder.assign(&j, j + Usize::from(1)); + // compute \sum_i eq(p[..num_vars_evaluated], r) * eq(p[num_vars_evaluated..], i) * f(r,i) + // + // We always assume that num_vars_evaluated is equal to p.len() + // so that the above sum only has one item and the final evaluation vector has only one element. + builder.assert_eq::>(final_message.len(), one); + + let final_message = builder.get(&final_message, 0); + let dot_prod: Ext = builder.eval(final_message * coeff); + + builder.assign(&right, right + dot_prod); + builder.assign(&j, j + Usize::from(1)); + }); }); }); - // _debug - // builder.assert_eq::>(j, input.proof.final_message.len()); - // builder.assert_eq::>(left, right); - */ + builder.assert_eq::>(j, input.proof.final_message.len()); + builder.assert_eq::>(left, right); } #[cfg(test)] From 5261a45a5b106f88044d568514e414a1d8bf9492 Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Sun, 4 Jan 2026 03:28:13 -0500 Subject: [PATCH 12/21] recover assertion [skip ci] --- ceno_recursion/src/basefold_verifier/query_phase.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ceno_recursion/src/basefold_verifier/query_phase.rs b/ceno_recursion/src/basefold_verifier/query_phase.rs index b85d75fd7..08fe94c38 100644 --- a/ceno_recursion/src/basefold_verifier/query_phase.rs +++ b/ceno_recursion/src/basefold_verifier/query_phase.rs @@ -645,10 +645,8 @@ pub(crate) fn batch_verifier_query_phase( ); }); let final_value = builder.get(&final_codeword.values, final_idx); - - /* _debug + builder.assert_eq::>(final_value, folded); - */ }, ); From d17384a85a04d8478eafd57d593e48323c302753 Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Sun, 4 Jan 2026 03:32:17 -0500 Subject: [PATCH 13/21] recover assertion [skip ci] --- ceno_recursion/src/basefold_verifier/query_phase.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/ceno_recursion/src/basefold_verifier/query_phase.rs b/ceno_recursion/src/basefold_verifier/query_phase.rs index 08fe94c38..8f67ecd6c 100644 --- a/ceno_recursion/src/basefold_verifier/query_phase.rs +++ b/ceno_recursion/src/basefold_verifier/query_phase.rs @@ -618,9 +618,7 @@ pub(crate) fn batch_verifier_query_phase( proof, }; - /* _debug ext_mmcs_verify_batch::(builder, ext_mmcs_verifier_input); - */ let r = builder.get(&input.fold_challenges, i_plus_one); let left = builder.get(&leafs, 0); @@ -645,7 +643,7 @@ pub(crate) fn batch_verifier_query_phase( ); }); let final_value = builder.get(&final_codeword.values, final_idx); - + builder.assert_eq::>(final_value, folded); }, ); From 8d6dd2be4b3b6e19123638bf047f427d14acc915 Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Sun, 4 Jan 2026 03:40:43 -0500 Subject: [PATCH 14/21] remove debug flags [skip ci] --- ceno_recursion/src/zkvm_verifier/verifier.rs | 2 - ceno_zkvm/src/scheme/verifier.rs | 42 -------------------- 2 files changed, 44 deletions(-) diff --git a/ceno_recursion/src/zkvm_verifier/verifier.rs b/ceno_recursion/src/zkvm_verifier/verifier.rs index b67c3df60..ab51583de 100644 --- a/ceno_recursion/src/zkvm_verifier/verifier.rs +++ b/ceno_recursion/src/zkvm_verifier/verifier.rs @@ -467,8 +467,6 @@ pub fn verify_zkvm_proof>( }); } - // _debug - builder.print_debug(666666); batch_verify( builder, zkvm_proof_input.max_num_var, diff --git a/ceno_zkvm/src/scheme/verifier.rs b/ceno_zkvm/src/scheme/verifier.rs index 37a5b7342..d5ed4e28d 100644 --- a/ceno_zkvm/src/scheme/verifier.rs +++ b/ceno_zkvm/src/scheme/verifier.rs @@ -43,9 +43,6 @@ use sumcheck::{ use transcript::{ForkableTranscript, Transcript}; use witness::next_pow2_instance_padding; -// _debug -use std::fs; - pub struct ZKVMVerifier> { pub vk: ZKVMVerifyingKey, } @@ -95,9 +92,6 @@ impl> ZKVMVerifier transcripts: Vec>, expect_halt: bool, ) -> Result { - // _debug - println!("=> verify_proofs_halt"); - assert!(!vm_proofs.is_empty()); let num_proofs = vm_proofs.len(); let (_end_pc, _end_heap_addr, shard_ec_sum) = vm_proofs @@ -142,14 +136,8 @@ impl> ZKVMVerifier let next_heap_addr_end: u32 = heap_addr_start_u32 + heap_len * WORD_SIZE as u32; // add to shard ec sum - // _debug - // println!("=> shard pi: {:?}", vm_proof.pi_evals.clone()); let shard_ec = self.verify_proof_validity(shard_id, vm_proof, transcript)?; - // println!("=> start_ec_sum: {:?}", shard_ec_sum); - // println!("=> shard_ec: {:?}", shard_ec); - // shard_ec_sum = shard_ec_sum + self.verify_proof_validity(shard_id, vm_proof, transcript)?; shard_ec_sum = shard_ec_sum + shard_ec; - // println!("=> new_ec_sum: {:?}", shard_ec_sum); Ok((Some(end_pc), Some(next_heap_addr_end), shard_ec_sum)) })?; @@ -169,9 +157,6 @@ impl> ZKVMVerifier vm_proof: ZKVMProof, mut transcript: impl ForkableTranscript, ) -> Result, ZKVMError> { - // _debug - println!("=> verify_proof_validity"); - // main invariant between opcode circuits and table circuits let mut prod_r = E::ONE; let mut prod_w = E::ONE; @@ -421,30 +406,6 @@ impl> ZKVMVerifier rounds.push((fixed_commit.clone(), fixed_openings)); } - // _debug - let s = serde_json::to_string_pretty(&vm_proof.opening_proof).unwrap(); - fs::write("opening_proof.json", s).expect("write opening proof"); - - // _debug - println!("batch_verify"); - let max_num_var = rounds - .iter() - .map(|(commit, openings)| { - let max_num_var = openings - .iter() - .map(|(num_vars, _)| *num_vars) - .max() - .unwrap(); - // assert_eq!( - // commit.log2_max_codeword_size, - // max_num_var + Spec::get_rate_log() - // ); - max_num_var - }) - .max() - .unwrap(); - println!("=> max_num_var: {:?}", max_num_var); - PCS::batch_verify( &self.vk.vp, rounds, @@ -453,9 +414,6 @@ impl> ZKVMVerifier ) .map_err(ZKVMError::PCSError)?; - - - let initial_global_state = eval_by_expr_with_instance( &[], &[], From 4a8e66417ea2ea4325023511193d7205969cc1d9 Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Sun, 4 Jan 2026 18:45:47 -0500 Subject: [PATCH 15/21] adjust debug flags --- .../src/basefold_verifier/query_phase.rs | 220 ++++++++++-------- ceno_recursion/src/zkvm_verifier/binding.rs | 8 +- ceno_recursion/src/zkvm_verifier/verifier.rs | 2 +- 3 files changed, 130 insertions(+), 100 deletions(-) diff --git a/ceno_recursion/src/basefold_verifier/query_phase.rs b/ceno_recursion/src/basefold_verifier/query_phase.rs index 8f67ecd6c..bfc649b61 100644 --- a/ceno_recursion/src/basefold_verifier/query_phase.rs +++ b/ceno_recursion/src/basefold_verifier/query_phase.rs @@ -423,100 +423,123 @@ pub(crate) fn batch_verifier_query_phase( builder.cycle_tracker_start("Batching and first FRI round"); let batch_coeffs_offset: Var = builder.constant(C::N::ZERO); - builder.range(0, input.rounds.len()).for_each(|idx_vec, builder| { - let batch_opening = builder.get(&query.input_proofs, idx_vec[0]); - let round = builder.get(&input.rounds, idx_vec[0]); - let opened_values = batch_opening.opened_values; - let perm_opened_values = builder.dyn_array(opened_values.length.clone()); - let opening_proof = batch_opening.opening_proof; - let opening_idxes: Array> = builder.dyn_array(round.openings.len()); - let opened_values_offset: Var = builder.constant(C::N::ZERO); - builder.range(0, round.openings.len()).for_each(|i_vec, builder| { - let opening = builder.get(&round.openings, i_vec[0]); - - builder.if_ne(opening.num_var, zero_flag).then(|builder| { - builder.set(&opening_idxes, opened_values_offset, i_vec[0]); - builder.assign(&opened_values_offset, opened_values_offset + Usize::from(1)); - }); - }); - let dimensions: Array> = builder.dyn_array(opened_values.length.clone()); - - builder.range(0, opened_values.length.clone()).for_each(|i_vec, builder| { - let i = i_vec[0]; - let opening_idx = builder.get(&opening_idxes, i_vec[0]); - let opening = builder.get(&round.openings, opening_idx); - let log2_height: Var = builder.eval(opening.num_var + Usize::from(get_rate_log() - 1)); - - // The linear combination is by (alpha^offset, ..., alpha^(offset+width-1)), which is equal to - // alpha^offset * (1, ..., alpha^(width-1)) - let width = opening.point_and_evals.evals.len(); - let opened_value_len: Var = builder.eval(width.clone() * two); - let opened_values_buffer = builder.dyn_array(opened_value_len); - let alpha_offset = builder.get(&input.batch_coeffs, batch_coeffs_offset); - let minus_alpha_offset: Ext = builder.eval(-alpha_offset); - - let low_values = opened_values_buffer.slice(builder, 0, width.clone()); - let high_values = opened_values_buffer.slice( - builder, - width.clone(), - opened_values_buffer.len(), - ); - - let end: Var = builder.eval(batch_coeffs_offset.clone() + width.clone()); - let batch_coeffs = &input.batch_coeffs.slice(builder, batch_coeffs_offset, end); - builder.assign(&batch_coeffs_offset, end); - - let all_zeros_slice = all_zeros.slice(builder, 0, width.clone()); - let low = builder.fri_single_reduced_opening_eval( - alpha, - opened_values.id.get_var(), - zero_flag, - &low_values, - &all_zeros_slice, - ); - let high = builder.fri_single_reduced_opening_eval( - alpha, - opened_values.id.get_var(), - zero_flag, - &high_values, - &all_zeros_slice, - ); - - builder.assign(&low, low * minus_alpha_offset); - builder.assign(&high, high * minus_alpha_offset); - - let codeword: PackedCodeword = PackedCodeword { low, high }; - let codeword_acc = builder.get(&reduced_codeword_by_height, log2_height); - - // reduced_openings[log2_height] += codeword - builder.assign(&codeword_acc.low, codeword_acc.low + codeword.low); - builder.assign(&codeword_acc.high, codeword_acc.high + codeword.high); - builder.set_value(&reduced_codeword_by_height, log2_height, codeword_acc); - - // reorder opened values according to the permutation - let permuted_j = builder.iter_ptr_get(&round.perm, i); - builder.set_value(&perm_opened_values, permuted_j, opened_values_buffer); - builder.set_value(&dimensions, permuted_j, log2_height); + builder + .range(0, input.rounds.len()) + .for_each(|idx_vec, builder| { + let batch_opening = builder.get(&query.input_proofs, idx_vec[0]); + let round = builder.get(&input.rounds, idx_vec[0]); + let opened_values = batch_opening.opened_values; + let perm_opened_values = builder.dyn_array(opened_values.length.clone()); + let opening_proof = batch_opening.opening_proof; + let opening_idxes: Array> = + builder.dyn_array(round.openings.len()); + let opened_values_offset: Var = builder.constant(C::N::ZERO); + builder + .range(0, round.openings.len()) + .for_each(|i_vec, builder| { + let opening = builder.get(&round.openings, i_vec[0]); + + builder.if_ne(opening.num_var, zero_flag).then(|builder| { + builder.set(&opening_idxes, opened_values_offset, i_vec[0]); + builder.assign( + &opened_values_offset, + opened_values_offset + Usize::from(1), + ); + }); + }); + let dimensions: Array> = + builder.dyn_array(opened_values.length.clone()); + + builder + .range(0, opened_values.length.clone()) + .for_each(|i_vec, builder| { + let i = i_vec[0]; + let opening_idx = builder.get(&opening_idxes, i_vec[0]); + let opening = builder.get(&round.openings, opening_idx); + let log2_height: Var = + builder.eval(opening.num_var + Usize::from(get_rate_log() - 1)); + + // The linear combination is by (alpha^offset, ..., alpha^(offset+width-1)), which is equal to + // alpha^offset * (1, ..., alpha^(width-1)) + let width = opening.point_and_evals.evals.len(); + let opened_value_len: Var = builder.eval(width.clone() * two); + let opened_values_buffer = builder.dyn_array(opened_value_len); + let alpha_offset = + builder.get(&input.batch_coeffs, batch_coeffs_offset); + let minus_alpha_offset: Ext = builder.eval(-alpha_offset); + + let low_values = opened_values_buffer.slice(builder, 0, width.clone()); + let high_values = opened_values_buffer.slice( + builder, + width.clone(), + opened_values_buffer.len(), + ); + + let end: Var = + builder.eval(batch_coeffs_offset.clone() + width.clone()); + let batch_coeffs = + &input.batch_coeffs.slice(builder, batch_coeffs_offset, end); + builder.assign(&batch_coeffs_offset, end); + + let all_zeros_slice = all_zeros.slice(builder, 0, width.clone()); + let low = builder.fri_single_reduced_opening_eval( + alpha, + opened_values.id.get_var(), + zero_flag, + &low_values, + &all_zeros_slice, + ); + let high = builder.fri_single_reduced_opening_eval( + alpha, + opened_values.id.get_var(), + zero_flag, + &high_values, + &all_zeros_slice, + ); + + builder.assign(&low, low * minus_alpha_offset); + builder.assign(&high, high * minus_alpha_offset); + + let codeword: PackedCodeword = PackedCodeword { low, high }; + let codeword_acc = + builder.get(&reduced_codeword_by_height, log2_height); + + // reduced_openings[log2_height] += codeword + builder.assign(&codeword_acc.low, codeword_acc.low + codeword.low); + builder.assign(&codeword_acc.high, codeword_acc.high + codeword.high); + builder.set_value( + &reduced_codeword_by_height, + log2_height, + codeword_acc, + ); + + // reorder opened values according to the permutation + let permuted_j = builder.iter_ptr_get(&round.perm, i); + builder.set_value( + &perm_opened_values, + permuted_j, + opened_values_buffer, + ); + builder.set_value(&dimensions, permuted_j, log2_height); + }); + + // i >>= (log2_max_codeword_size - commit.log2_max_codeword_size); + let bits_shift: Var = + builder.eval(log2_max_codeword_size - round.commit.log2_max_codeword_size); + let reduced_idx_bits = idx_bits.slice(builder, bits_shift, idx_bits.len()); + + // verify input mmcs + let mmcs_verifier_input = MmcsVerifierInputVariable { + commit: round.commit.commit.clone(), + dimensions, + index_bits: reduced_idx_bits, + opened_values: perm_opened_values, + proof: opening_proof, + }; + + // _debug + // mmcs_verify_batch(builder, mmcs_verifier_input); }); - - // i >>= (log2_max_codeword_size - commit.log2_max_codeword_size); - let bits_shift: Var = - builder.eval(log2_max_codeword_size - round.commit.log2_max_codeword_size); - let reduced_idx_bits = idx_bits.slice(builder, bits_shift, idx_bits.len()); - - // verify input mmcs - let mmcs_verifier_input = MmcsVerifierInputVariable { - commit: round.commit.commit.clone(), - dimensions, - index_bits: reduced_idx_bits, - opened_values: perm_opened_values, - proof: opening_proof, - }; - - /* _debug - mmcs_verify_batch(builder, mmcs_verifier_input); - */ - }); builder.cycle_tracker_end("Batching and first FRI round"); let opening_ext = query.commit_phase_openings; @@ -542,7 +565,7 @@ pub(crate) fn batch_verifier_query_phase( coeff, inv_2, ); - + // check commit phases let commits = &input.proof.commits; builder.assert_eq::>(commits.len(), opening_ext.len()); @@ -658,7 +681,8 @@ pub(crate) fn batch_verifier_query_phase( // TODO: filter out openings with num_var >= get_basecode_msg_size_log::() builder.if_ne(opening.num_var, zero_flag).then(|builder| { - let var_diff: Var = builder.eval(input.max_num_var.get_var() - opening.num_var); + let var_diff: Var = + builder.eval(input.max_num_var.get_var() - opening.num_var); let scalar_var = pow_2(builder, var_diff); let scalar = builder.unsafe_cast_var_to_felt(scalar_var); iter_zip!(builder, opening.point_and_evals.evals).for_each(|ptr_vec, builder| { @@ -668,7 +692,7 @@ pub(crate) fn batch_verifier_query_phase( builder.assign(&expected_sum, expected_sum + val); builder.assign(&batch_coeffs_offset, batch_coeffs_offset + Usize::from(1)); }); - }); + }); }); }); let sum: Ext = { @@ -740,10 +764,10 @@ pub(crate) fn batch_verifier_query_phase( // We always assume that num_vars_evaluated is equal to p.len() // so that the above sum only has one item and the final evaluation vector has only one element. builder.assert_eq::>(final_message.len(), one); - + let final_message = builder.get(&final_message, 0); let dot_prod: Ext = builder.eval(final_message * coeff); - + builder.assign(&right, right + dot_prod); builder.assign(&j, j + Usize::from(1)); }); diff --git a/ceno_recursion/src/zkvm_verifier/binding.rs b/ceno_recursion/src/zkvm_verifier/binding.rs index f59917ef3..0915658aa 100644 --- a/ceno_recursion/src/zkvm_verifier/binding.rs +++ b/ceno_recursion/src/zkvm_verifier/binding.rs @@ -189,7 +189,13 @@ impl Hintable for ZKVMProofInput { .filter(|proof| !proof.fixed_in_evals.is_empty()) .map(|proof| proof.fixed_in_evals.len()) .collect::>(); - let max_num_var = witin_num_vars.iter().chain(fixed_num_vars.iter()).copied().map(|n| ceil_log2(n)).max().unwrap_or(0); + let max_num_var = witin_num_vars + .iter() + .chain(fixed_num_vars.iter()) + .copied() + .map(|n| ceil_log2(n)) + .max() + .unwrap_or(0); let max_width = witin_max_widths .iter() .chain(fixed_max_widths.iter()) diff --git a/ceno_recursion/src/zkvm_verifier/verifier.rs b/ceno_recursion/src/zkvm_verifier/verifier.rs index ab51583de..2a99262dd 100644 --- a/ceno_recursion/src/zkvm_verifier/verifier.rs +++ b/ceno_recursion/src/zkvm_verifier/verifier.rs @@ -20,6 +20,7 @@ use crate::{ arr_product, build_eq_x_r_vec_sequential, concat, dot_product as ext_dot_product, eq_eval_less_or_equal_than, gen_alpha_pows, nested_product, }, + basefold_verifier::verifier::batch_verify, tower_verifier::{ binding::{PointAndEvalVariable, PointVariable}, program::{iop_verifier_state_verify, verify_tower_proof}, @@ -29,7 +30,6 @@ use crate::{ EccQuarkProofVariable, GKRProofVariable, LayerProofVariable, SelectorContextVariable, SepticExtensionVariable, SepticPointVariable, SumcheckLayerProofVariable, }, - basefold_verifier::verifier::batch_verify, }; use ceno_zkvm::structs::{ComposedConstrainSystem, VerifyingKey, ZKVMVerifyingKey}; use ff_ext::BabyBearExt4; From 829c835656f6e237b701746e12ec4a660e884f5c Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Sun, 4 Jan 2026 19:42:09 -0500 Subject: [PATCH 16/21] Restore tests --- Cargo.lock | 197 +++++++++++------- Cargo.toml | 62 ++---- ceno_recursion/src/aggregation/mod.rs | 4 +- .../src/basefold_verifier/query_phase.rs | 3 +- ceno_recursion/src/zkvm_verifier/binding.rs | 2 +- 5 files changed, 151 insertions(+), 117 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e8e6c0a50..03cd2de55 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -190,7 +190,7 @@ checksum = "64b728d511962dda67c1bc7ea7c03736ec275ed2cf4c35d9585298ac9ccf3b73" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -229,7 +229,7 @@ dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -444,7 +444,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62945a2f7e6de02a31fe400aa489f0e0f5b2502e69f95f853adb82a96c7a6b60" dependencies = [ "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -482,7 +482,7 @@ dependencies = [ "num-traits", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -542,7 +542,7 @@ checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -605,7 +605,7 @@ checksum = "ffdcb70bdbc4d478427380519163274ac86e52916e10f0a8889adf0f96d3fee7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -650,9 +650,9 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "base64ct" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e050f626429857a27ddccb31e0aca21356bfa709c04041aefddac081a8f068a" +checksum = "7d809780667f4410e7c41b07f52439b94d2bdf8528eeedc287fa38d3b7f95d82" [[package]] name = "bincode" @@ -719,7 +719,7 @@ checksum = "238b90427dfad9da4a9abd60f3ec1cdee6b80454bde49ed37f1781dd8e9dc7f9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -845,7 +845,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -868,7 +868,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -900,7 +900,7 @@ checksum = "f9abbd1bc6865053c427f7198e6af43bfdedc55ab791faed4fbd361d789575ff" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -1337,7 +1337,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -1659,7 +1659,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -1673,7 +1673,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -1684,7 +1684,7 @@ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ "darling_core 0.20.11", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -1695,7 +1695,7 @@ checksum = "d38308df82d1080de0afee5d069fa14b0326a88c14f15c5ccda35b4a6c414c81" dependencies = [ "darling_core 0.21.3", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -1847,7 +1847,7 @@ checksum = "d150dea618e920167e5973d70ae6ece4385b7164e0d799fe7c122dd0a5d912ad" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -1858,7 +1858,7 @@ checksum = "2cdc8d50f426189eef89dac62fabfa0abb27d5cc008f25bf4156a0203325becc" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -1879,7 +1879,7 @@ dependencies = [ "darling 0.20.11", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -1889,7 +1889,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab63b0e2bf4d5928aff72e83a7dace85d7bba5fe12dcc3c5a572d78caffd3f3c" dependencies = [ "derive_builder_core", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -1918,7 +1918,7 @@ checksum = "cb7330aeadfbe296029522e6c40f315320aba36fc43a5b3632f3795348f3bd22" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", "unicode-xid", ] @@ -1932,7 +1932,7 @@ dependencies = [ "proc-macro2", "quote", "rustc_version 0.4.1", - "syn 2.0.112", + "syn 2.0.113", "unicode-xid", ] @@ -1986,7 +1986,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -2052,7 +2052,7 @@ dependencies = [ "enum-ordinalize", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -2120,7 +2120,7 @@ checksum = "8ca9601fb2d62598ee17836250842873a413586e5d7ed88b356e38ddbb0ec631" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -2132,7 +2132,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -2252,6 +2252,7 @@ dependencies = [ [[package]] name = "ff_ext" version = "0.1.0" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.19#eb292fef68831ba85e6553a56cacbf770ea9d122" dependencies = [ "once_cell", "p3", @@ -2397,7 +2398,7 @@ dependencies = [ "proc-macro-error2", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -2841,7 +2842,7 @@ checksum = "a0eb5a3343abf848c0984fe4604b2b105da9539376e24fc0a3b0007411ae4fd9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -3033,9 +3034,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.178" +version = "0.2.179" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37c93d8daa9d8a012fd8ab92f088405fb202ea0b6ab73ee2482ae66af4f42091" +checksum = "c5a2d376baa530d1238d133232d15e239abad80d05838b4b59354e5268af431f" [[package]] name = "libgit2-sys" @@ -3237,6 +3238,7 @@ dependencies = [ [[package]] name = "mpcs" version = "0.1.0" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.19#eb292fef68831ba85e6553a56cacbf770ea9d122" dependencies = [ "bincode 1.3.3", "clap", @@ -3249,7 +3251,6 @@ dependencies = [ "rand_chacha 0.3.1", "rayon", "serde", - "serde_json", "sumcheck", "tracing", "tracing-subscriber", @@ -3261,6 +3262,7 @@ dependencies = [ [[package]] name = "multilinear_extensions" version = "0.1.0" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.19#eb292fef68831ba85e6553a56cacbf770ea9d122" dependencies = [ "either", "ff_ext", @@ -3376,7 +3378,7 @@ checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -3521,7 +3523,7 @@ checksum = "ff32365de1b6743cb203b710788263c44a03de03802daf96092f2da4fe6ba4d7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -3589,6 +3591,7 @@ checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" [[package]] name = "openvm" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "bytemuck", "num-bigint 0.4.6", @@ -3601,6 +3604,7 @@ dependencies = [ [[package]] name = "openvm-algebra-circuit" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -3629,15 +3633,17 @@ dependencies = [ [[package]] name = "openvm-algebra-complex-macros" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-macros-common", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] name = "openvm-algebra-guest" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "halo2curves-axiom", "num-bigint 0.4.6", @@ -3653,17 +3659,19 @@ dependencies = [ [[package]] name = "openvm-algebra-moduli-macros" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "num-bigint 0.4.6", "num-prime", "openvm-macros-common", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] name = "openvm-algebra-transpiler" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-algebra-guest", "openvm-instructions", @@ -3677,6 +3685,7 @@ dependencies = [ [[package]] name = "openvm-bigint-circuit" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -3699,6 +3708,7 @@ dependencies = [ [[package]] name = "openvm-bigint-guest" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-platform", "strum_macros", @@ -3707,6 +3717,7 @@ dependencies = [ [[package]] name = "openvm-bigint-transpiler" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-bigint-guest", "openvm-instructions", @@ -3721,6 +3732,7 @@ dependencies = [ [[package]] name = "openvm-build" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "cargo_metadata 0.18.1", "eyre", @@ -3732,6 +3744,7 @@ dependencies = [ [[package]] name = "openvm-circuit" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "backtrace", "cfg-if", @@ -3770,16 +3783,18 @@ dependencies = [ [[package]] name = "openvm-circuit-derive" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "itertools 0.14.0", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] name = "openvm-circuit-primitives" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "derive-new 0.6.0", "itertools 0.14.0", @@ -3797,15 +3812,17 @@ dependencies = [ [[package]] name = "openvm-circuit-primitives-derive" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "itertools 0.14.0", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] name = "openvm-continuations" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "derivative", "openvm-circuit", @@ -3875,15 +3892,17 @@ dependencies = [ [[package]] name = "openvm-custom-insn" version = "0.1.0" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] name = "openvm-ecc-circuit" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -3912,6 +3931,7 @@ dependencies = [ [[package]] name = "openvm-ecc-guest" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "ecdsa 0.16.9 (registry+https://github.com/rust-lang/crates.io-index)", "elliptic-curve", @@ -3930,15 +3950,17 @@ dependencies = [ [[package]] name = "openvm-ecc-sw-macros" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-macros-common", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] name = "openvm-ecc-transpiler" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-ecc-guest", "openvm-instructions", @@ -3952,6 +3974,7 @@ dependencies = [ [[package]] name = "openvm-instructions" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "backtrace", "derive-new 0.6.0", @@ -3968,14 +3991,16 @@ dependencies = [ [[package]] name = "openvm-instructions-derive" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] name = "openvm-keccak256-circuit" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -4000,6 +4025,7 @@ dependencies = [ [[package]] name = "openvm-keccak256-guest" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-platform", ] @@ -4007,6 +4033,7 @@ dependencies = [ [[package]] name = "openvm-keccak256-transpiler" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-instructions", "openvm-instructions-derive", @@ -4020,13 +4047,15 @@ dependencies = [ [[package]] name = "openvm-macros-common" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ - "syn 2.0.112", + "syn 2.0.113", ] [[package]] name = "openvm-mod-circuit-builder" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "itertools 0.14.0", "num-bigint 0.4.6", @@ -4044,6 +4073,7 @@ dependencies = [ [[package]] name = "openvm-native-circuit" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -4074,6 +4104,7 @@ dependencies = [ [[package]] name = "openvm-native-compiler" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "backtrace", "itertools 0.14.0", @@ -4095,14 +4126,16 @@ dependencies = [ [[package]] name = "openvm-native-compiler-derive" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] name = "openvm-native-recursion" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "cfg-if", "itertools 0.14.0", @@ -4126,6 +4159,7 @@ dependencies = [ [[package]] name = "openvm-native-transpiler" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-instructions", "openvm-transpiler", @@ -4135,6 +4169,7 @@ dependencies = [ [[package]] name = "openvm-pairing-circuit" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -4163,6 +4198,7 @@ dependencies = [ [[package]] name = "openvm-pairing-guest" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "halo2curves-axiom", "hex-literal", @@ -4183,6 +4219,7 @@ dependencies = [ [[package]] name = "openvm-pairing-transpiler" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-instructions", "openvm-pairing-guest", @@ -4195,6 +4232,7 @@ dependencies = [ [[package]] name = "openvm-platform" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "libm", "openvm-custom-insn", @@ -4204,6 +4242,7 @@ dependencies = [ [[package]] name = "openvm-poseidon2-air" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "derivative", "lazy_static", @@ -4221,6 +4260,7 @@ dependencies = [ [[package]] name = "openvm-rv32-adapters" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "derive-new 0.6.0", "itertools 0.14.0", @@ -4237,6 +4277,7 @@ dependencies = [ [[package]] name = "openvm-rv32im-circuit" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -4259,6 +4300,7 @@ dependencies = [ [[package]] name = "openvm-rv32im-guest" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-custom-insn", "p3-field", @@ -4268,6 +4310,7 @@ dependencies = [ [[package]] name = "openvm-rv32im-transpiler" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-instructions", "openvm-instructions-derive", @@ -4283,6 +4326,7 @@ dependencies = [ [[package]] name = "openvm-sdk" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "bitcode", "bon", @@ -4336,6 +4380,7 @@ dependencies = [ [[package]] name = "openvm-sha256-air" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-circuit-primitives", "openvm-stark-backend", @@ -4346,6 +4391,7 @@ dependencies = [ [[package]] name = "openvm-sha256-circuit" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "cfg-if", "derive-new 0.6.0", @@ -4368,6 +4414,7 @@ dependencies = [ [[package]] name = "openvm-sha256-guest" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-platform", ] @@ -4375,6 +4422,7 @@ dependencies = [ [[package]] name = "openvm-sha256-transpiler" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "openvm-instructions", "openvm-instructions-derive", @@ -4453,6 +4501,7 @@ dependencies = [ [[package]] name = "openvm-transpiler" version = "1.4.1" +source = "git+https://github.com/scroll-tech/openvm.git?branch=feat%2Fv1.4.1-scroll-ext#ac5d1b48b46fc37981f56ed943fa4ae6fb580827" dependencies = [ "elf", "eyre", @@ -4487,6 +4536,7 @@ dependencies = [ [[package]] name = "p3" version = "0.1.0" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.19#eb292fef68831ba85e6553a56cacbf770ea9d122" dependencies = [ "p3-air", "p3-baby-bear", @@ -4892,7 +4942,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -4977,9 +5027,9 @@ checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" [[package]] name = "pest" -version = "2.8.4" +version = "2.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbcfd20a6d4eeba40179f05735784ad32bdaef05ce8e8af05f180d45bb3e7e22" +checksum = "2c9eb05c21a464ea704b53158d358a31e6425db2f63a1a7312268b05fe2b75f7" dependencies = [ "memchr", "ucd-trie", @@ -5053,6 +5103,7 @@ dependencies = [ [[package]] name = "poseidon" version = "0.1.0" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.19#eb292fef68831ba85e6553a56cacbf770ea9d122" dependencies = [ "ff_ext", "p3", @@ -5112,7 +5163,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b" dependencies = [ "proc-macro2", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -5187,7 +5238,7 @@ dependencies = [ "proc-macro-error-attr2", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -5431,7 +5482,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -5712,7 +5763,7 @@ dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -5864,7 +5915,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -5917,7 +5968,7 @@ dependencies = [ "darling 0.21.3", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -6004,6 +6055,7 @@ dependencies = [ [[package]] name = "sp1-curves" version = "0.1.0" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.19#eb292fef68831ba85e6553a56cacbf770ea9d122" dependencies = [ "cfg-if", "dashu", @@ -6087,7 +6139,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -6128,6 +6180,7 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "sumcheck" version = "0.1.0" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.19#eb292fef68831ba85e6553a56cacbf770ea9d122" dependencies = [ "either", "ff_ext", @@ -6145,13 +6198,14 @@ dependencies = [ [[package]] name = "sumcheck_macro" version = "0.1.0" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.19#eb292fef68831ba85e6553a56cacbf770ea9d122" dependencies = [ "itertools 0.13.0", "p3", "proc-macro2", "quote", "rand 0.8.5", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -6190,9 +6244,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.112" +version = "2.0.113" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21f182278bf2d2bcb3c88b1b08a37df029d71ce3d3ae26168e3c653b213b99d4" +checksum = "678faa00651c9eb72dd2020cbdf275d92eccb2400d568e419efdd64838145cb4" dependencies = [ "proc-macro2", "quote", @@ -6207,7 +6261,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -6266,7 +6320,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -6277,7 +6331,7 @@ checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -6492,7 +6546,7 @@ checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -6550,6 +6604,7 @@ dependencies = [ [[package]] name = "transcript" version = "0.1.0" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.19#eb292fef68831ba85e6553a56cacbf770ea9d122" dependencies = [ "ff_ext", "itertools 0.13.0", @@ -6809,7 +6864,7 @@ dependencies = [ "bumpalo", "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", "wasm-bindgen-shared", ] @@ -6835,6 +6890,7 @@ dependencies = [ [[package]] name = "whir" version = "0.1.0" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.19#eb292fef68831ba85e6553a56cacbf770ea9d122" dependencies = [ "bincode 1.3.3", "clap", @@ -6906,7 +6962,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -6917,7 +6973,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -7127,6 +7183,7 @@ checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" [[package]] name = "witness" version = "0.1.0" +source = "git+https://github.com/scroll-tech/gkr-backend.git?tag=v1.0.0-alpha.19#eb292fef68831ba85e6553a56cacbf770ea9d122" dependencies = [ "ff_ext", "multilinear_extensions", @@ -7170,7 +7227,7 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", "synstructure", ] @@ -7191,7 +7248,7 @@ checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -7211,7 +7268,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", "synstructure", ] @@ -7232,7 +7289,7 @@ checksum = "85a5b4158499876c763cb03bc4e49185d3cccbabb15b33c627f7884f43db852e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -7265,7 +7322,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.112", + "syn 2.0.113", ] [[package]] @@ -7296,6 +7353,6 @@ dependencies = [ [[package]] name = "zmij" -version = "1.0.8" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317f17ff091ac4515f17cc7a190d2769a8c9a96d227de5d64b500b01cda8f2cd" +checksum = "30e0d8dffbae3d840f64bda38e28391faef673a7b5a6017840f2a106c8145868" diff --git a/Cargo.toml b/Cargo.toml index 4f0be7757..ec839acac 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -27,27 +27,16 @@ version = "0.1.0" ceno_crypto_primitives = { git = "https://github.com/scroll-tech/ceno-patch.git", package = "ceno_crypto_primitives", branch = "main" } ceno_syscall = { git = "https://github.com/scroll-tech/ceno-patch.git", package = "ceno_syscall", branch = "main" } -# ff_ext = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "ff_ext", tag = "v1.0.0-alpha.18" } -# mpcs = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "mpcs", tag = "v1.0.0-alpha.18" } -# multilinear_extensions = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "multilinear_extensions", tag = "v1.0.0-alpha.18" } -# p3 = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "p3", tag = "v1.0.0-alpha.18" } -# poseidon = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "poseidon", tag = "v1.0.0-alpha.18" } -# sp1-curves = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "sp1-curves", tag = "v1.0.0-alpha.18" } -# sumcheck = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "sumcheck", tag = "v1.0.0-alpha.18" } -# transcript = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "transcript", tag = "v1.0.0-alpha.18" } -# whir = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "whir", tag = "v1.0.0-alpha.18" } -# witness = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "witness", tag = "v1.0.0-alpha.18" } - -ff_ext = { path = "../gkr-backend/crates/ff_ext", package = "ff_ext" } -mpcs = { path = "../gkr-backend/crates/mpcs", package = "mpcs" } -multilinear_extensions = { path = "../gkr-backend/crates/multilinear_extensions", package = "multilinear_extensions" } -p3 = { path = "../gkr-backend/crates/p3", package = "p3" } -poseidon = { path = "../gkr-backend/crates/poseidon", package = "poseidon" } -sp1-curves = { path = "../gkr-backend/crates/curves", package = "sp1-curves" } -sumcheck = { path = "../gkr-backend/crates/sumcheck", package = "sumcheck" } -transcript = { path = "../gkr-backend/crates/transcript", package = "transcript" } -whir = { path = "../gkr-backend/crates/whir", package = "whir" } -witness = { path = "../gkr-backend/crates/witness", package = "witness" } +ff_ext = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "ff_ext", tag = "v1.0.0-alpha.19" } +mpcs = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "mpcs", tag = "v1.0.0-alpha.19" } +multilinear_extensions = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "multilinear_extensions", tag = "v1.0.0-alpha.19" } +p3 = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "p3", tag = "v1.0.0-alpha.19" } +poseidon = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "poseidon", tag = "v1.0.0-alpha.19" } +sp1-curves = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "sp1-curves", tag = "v1.0.0-alpha.19" } +sumcheck = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "sumcheck", tag = "v1.0.0-alpha.19" } +transcript = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "transcript", tag = "v1.0.0-alpha.19" } +whir = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "whir", tag = "v1.0.0-alpha.19" } +witness = { git = "https://github.com/scroll-tech/gkr-backend.git", package = "witness", tag = "v1.0.0-alpha.19" } anyhow = { version = "1.0", default-features = false } bincode = "1" @@ -103,27 +92,16 @@ ceno_gpu = { git = "https://github.com/scroll-tech/ceno-gpu-mock.git", package = cudarc = { version = "0.17.3", features = ["driver", "cuda-version-from-build-system"] } # ceno-recursion dependencies -# openvm = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -# openvm-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -# openvm-continuations = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -# openvm-instructions = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -# openvm-native-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -# openvm-native-compiler = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -# openvm-native-compiler-derive = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -# openvm-native-recursion = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -# openvm-rv32im-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } -# openvm-sdk = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } - -openvm = { path = "../openvm-scroll-tech/crates/toolchain/openvm", default-features = false } -openvm-circuit = { path = "../openvm-scroll-tech/crates/vm", default-features = false } -openvm-continuations = { path = "../openvm-scroll-tech/crates/continuations", default-features = false } -openvm-instructions = { path = "../openvm-scroll-tech/crates/toolchain/instructions", default-features = false } -openvm-native-circuit = { path = "../openvm-scroll-tech/extensions/native/circuit", default-features = false } -openvm-native-compiler = { path = "../openvm-scroll-tech/extensions/native/compiler", default-features = false } -openvm-native-compiler-derive = { path = "../openvm-scroll-tech/extensions/native/compiler/derive", default-features = false } -openvm-native-recursion = { path = "../openvm-scroll-tech/extensions/native/recursion", default-features = false } -openvm-rv32im-circuit = { path = "../openvm-scroll-tech/extensions/rv32im/circuit", default-features = false } -openvm-sdk = { path = "../openvm-scroll-tech/crates/sdk", default-features = false } +openvm = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } +openvm-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } +openvm-continuations = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } +openvm-instructions = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } +openvm-native-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } +openvm-native-compiler = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } +openvm-native-compiler-derive = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } +openvm-native-recursion = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } +openvm-rv32im-circuit = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } +openvm-sdk = { git = "https://github.com/scroll-tech/openvm.git", branch = "feat/v1.4.1-scroll-ext", default-features = false } openvm-cuda-backend = { git = "https://github.com/openvm-org/stark-backend.git", tag = "v1.2.1", default-features = false } openvm-stark-backend = { git = "https://github.com/openvm-org/stark-backend.git", tag = "v1.2.1", default-features = false } diff --git a/ceno_recursion/src/aggregation/mod.rs b/ceno_recursion/src/aggregation/mod.rs index 0325eaa78..27d6288c0 100644 --- a/ceno_recursion/src/aggregation/mod.rs +++ b/ceno_recursion/src/aggregation/mod.rs @@ -793,7 +793,7 @@ mod tests { } #[test] - // #[ignore = "need to generate proof first"] + #[ignore = "need to generate proof first"] pub fn test_single() { let stack_size = 256 * 1024 * 1024; // 64 MB @@ -806,7 +806,7 @@ mod tests { } #[test] - // #[ignore = "need to generate proof first"] + #[ignore = "need to generate proof first"] pub fn test_single_rust_verifier() { let stack_size = 256 * 1024 * 1024; // 64 MB diff --git a/ceno_recursion/src/basefold_verifier/query_phase.rs b/ceno_recursion/src/basefold_verifier/query_phase.rs index bfc649b61..1f964af49 100644 --- a/ceno_recursion/src/basefold_verifier/query_phase.rs +++ b/ceno_recursion/src/basefold_verifier/query_phase.rs @@ -475,8 +475,7 @@ pub(crate) fn batch_verifier_query_phase( opened_values_buffer.len(), ); - let end: Var = - builder.eval(batch_coeffs_offset.clone() + width.clone()); + let end: Var = builder.eval(batch_coeffs_offset + width.clone()); let batch_coeffs = &input.batch_coeffs.slice(builder, batch_coeffs_offset, end); builder.assign(&batch_coeffs_offset, end); diff --git a/ceno_recursion/src/zkvm_verifier/binding.rs b/ceno_recursion/src/zkvm_verifier/binding.rs index 0915658aa..08cb1adf5 100644 --- a/ceno_recursion/src/zkvm_verifier/binding.rs +++ b/ceno_recursion/src/zkvm_verifier/binding.rs @@ -193,7 +193,7 @@ impl Hintable for ZKVMProofInput { .iter() .chain(fixed_num_vars.iter()) .copied() - .map(|n| ceil_log2(n)) + .map(ceil_log2) .max() .unwrap_or(0); let max_width = witin_max_widths From ed5d7acebd4547383edc09a6938b2078eb7d7ad4 Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Sun, 4 Jan 2026 19:59:07 -0500 Subject: [PATCH 17/21] Adjust comments: --- ceno_recursion/src/basefold_verifier/query_phase.rs | 10 +--------- ceno_recursion/src/basefold_verifier/verifier.rs | 2 +- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/ceno_recursion/src/basefold_verifier/query_phase.rs b/ceno_recursion/src/basefold_verifier/query_phase.rs index 1f964af49..0a27f7e2d 100644 --- a/ceno_recursion/src/basefold_verifier/query_phase.rs +++ b/ceno_recursion/src/basefold_verifier/query_phase.rs @@ -15,7 +15,7 @@ use serde::Deserialize; use super::{basefold::*, extension_mmcs::*, mmcs::*, rs::*, utils::*}; use crate::{ - arithmetics::{_print_ext_arr, _print_felt_arr, eq_eval_with_index}, + arithmetics::eq_eval_with_index, tower_verifier::{binding::*, program::interpolate_uni_poly}, }; @@ -639,7 +639,6 @@ pub(crate) fn batch_verifier_query_phase( opened_values, proof, }; - ext_mmcs_verify_batch::(builder, ext_mmcs_verifier_input); let r = builder.get(&input.fold_challenges, i_plus_one); @@ -650,7 +649,6 @@ pub(crate) fn batch_verifier_query_phase( builder.assign(&folded, new_folded); builder.assign(&i, i_plus_one); }); - builder.cycle_tracker_end("FRI rounds"); // assert that final_value[i] = folded let final_idx: Var = builder.constant(C::N::ZERO); @@ -665,11 +663,9 @@ pub(crate) fn batch_verifier_query_phase( ); }); let final_value = builder.get(&final_codeword.values, final_idx); - builder.assert_eq::>(final_value, folded); }, ); - // 1. check initial claim match with first round sumcheck value let batch_coeffs_offset: Var = builder.constant(C::N::ZERO); let expected_sum: Ext = builder.constant(C::EF::ZERO); @@ -677,7 +673,6 @@ pub(crate) fn batch_verifier_query_phase( let round = builder.iter_ptr_get(&input.rounds, ptr_vec[0]); iter_zip!(builder, round.openings).for_each(|ptr_vec, builder| { let opening = builder.iter_ptr_get(&round.openings, ptr_vec[0]); - // TODO: filter out openings with num_var >= get_basecode_msg_size_log::() builder.if_ne(opening.num_var, zero_flag).then(|builder| { let var_diff: Var = @@ -730,12 +725,10 @@ pub(crate) fn batch_verifier_query_phase( let right: Ext = builder.constant(C::EF::ZERO); let one: Var = builder.constant(C::N::ONE); let j: Var = builder.constant(C::N::ZERO); - // \sum_i eq(p, [r,i]) * f(r,i) iter_zip!(builder, input.rounds).for_each(|ptr_vec, builder| { let round = builder.iter_ptr_get(&input.rounds, ptr_vec[0]); // TODO: filter out openings with num_var >= get_basecode_msg_size_log::() - iter_zip!(builder, round.openings).for_each(|ptr_vec, builder| { let opening = builder.iter_ptr_get(&round.openings, ptr_vec[0]); @@ -772,7 +765,6 @@ pub(crate) fn batch_verifier_query_phase( }); }); }); - builder.assert_eq::>(j, input.proof.final_message.len()); builder.assert_eq::>(left, right); } diff --git a/ceno_recursion/src/basefold_verifier/verifier.rs b/ceno_recursion/src/basefold_verifier/verifier.rs index 76dbfef54..cb380b068 100644 --- a/ceno_recursion/src/basefold_verifier/verifier.rs +++ b/ceno_recursion/src/basefold_verifier/verifier.rs @@ -93,11 +93,11 @@ pub fn batch_verify( builder.assign(&diff_product_width, diff_product_width * diff); }); }); + // Check that at least one num_var is equal to max_num_var let zero: Var = builder.eval(C::N::ZERO); builder.assert_eq::>(diff_product_num_var, zero); builder.assert_eq::>(diff_product_width, zero); - // Check that at least one num_var is equal to max_num_var let num_rounds: Var = builder.eval(max_num_var - Usize::from(get_basecode_msg_size_log())); From 69d3fbe2dd279b96093993c1a64a196ed1629b41 Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Mon, 5 Jan 2026 03:44:15 -0500 Subject: [PATCH 18/21] fix non-first shard --- .../src/basefold_verifier/query_phase.rs | 7 +++++-- ceno_recursion/src/zkvm_verifier/verifier.rs | 20 +++++++++---------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/ceno_recursion/src/basefold_verifier/query_phase.rs b/ceno_recursion/src/basefold_verifier/query_phase.rs index 0a27f7e2d..555b55593 100644 --- a/ceno_recursion/src/basefold_verifier/query_phase.rs +++ b/ceno_recursion/src/basefold_verifier/query_phase.rs @@ -434,6 +434,7 @@ pub(crate) fn batch_verifier_query_phase( let opening_idxes: Array> = builder.dyn_array(round.openings.len()); let opened_values_offset: Var = builder.constant(C::N::ZERO); + builder .range(0, round.openings.len()) .for_each(|i_vec, builder| { @@ -447,13 +448,14 @@ pub(crate) fn batch_verifier_query_phase( ); }); }); + let dimensions: Array> = builder.dyn_array(opened_values.length.clone()); builder .range(0, opened_values.length.clone()) .for_each(|i_vec, builder| { - let i = i_vec[0]; + let i = i_vec[0]; let opening_idx = builder.get(&opening_idxes, i_vec[0]); let opening = builder.get(&round.openings, opening_idx); let log2_height: Var = @@ -540,7 +542,7 @@ pub(crate) fn batch_verifier_query_phase( // mmcs_verify_batch(builder, mmcs_verifier_input); }); builder.cycle_tracker_end("Batching and first FRI round"); - + let opening_ext = query.commit_phase_openings; // fold 1st codeword @@ -666,6 +668,7 @@ pub(crate) fn batch_verifier_query_phase( builder.assert_eq::>(final_value, folded); }, ); + // 1. check initial claim match with first round sumcheck value let batch_coeffs_offset: Var = builder.constant(C::N::ZERO); let expected_sum: Ext = builder.constant(C::EF::ZERO); diff --git a/ceno_recursion/src/zkvm_verifier/verifier.rs b/ceno_recursion/src/zkvm_verifier/verifier.rs index 2a99262dd..9377e14a1 100644 --- a/ceno_recursion/src/zkvm_verifier/verifier.rs +++ b/ceno_recursion/src/zkvm_verifier/verifier.rs @@ -413,10 +413,10 @@ pub fn verify_zkvm_proof>( }, ); - if let Some(fixed_commit) = vk.fixed_commit.as_ref() { - builder - .if_eq(zkvm_proof_input.shard_id.clone(), Usize::from(0)) - .then(|builder| { + builder + .if_eq(zkvm_proof_input.shard_id.clone(), Usize::from(0)) + .then_or_else(|builder| { + if let Some(fixed_commit) = vk.fixed_commit.as_ref() { let commit: crate::basefold_verifier::hash::Hash = fixed_commit.commit().into(); let commit_array: Array> = builder.dyn_array(commit.value.len()); @@ -438,11 +438,9 @@ pub fn verify_zkvm_proof>( perm: zkvm_proof_input.fixed_perm.clone(), }, ); - }); - } else if let Some(fixed_commit) = vk.fixed_no_omc_init_commit.as_ref() { - builder - .if_ne(zkvm_proof_input.shard_id.clone(), Usize::from(0)) - .then(|builder| { + } + }, |builder| { + if let Some(fixed_commit) = vk.fixed_no_omc_init_commit.as_ref(){ let commit: crate::basefold_verifier::hash::Hash = fixed_commit.commit().into(); let commit_array: Array> = builder.dyn_array(commit.value.len()); @@ -464,8 +462,8 @@ pub fn verify_zkvm_proof>( perm: zkvm_proof_input.fixed_perm.clone(), }, ); - }); - } + } + }); batch_verify( builder, From 4ecef4cd0b814ff797758f1ebf6a68c8be1b102b Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Mon, 5 Jan 2026 03:48:35 -0500 Subject: [PATCH 19/21] fmt --- .../src/basefold_verifier/query_phase.rs | 4 +- ceno_recursion/src/zkvm_verifier/verifier.rs | 85 ++++++++++--------- 2 files changed, 46 insertions(+), 43 deletions(-) diff --git a/ceno_recursion/src/basefold_verifier/query_phase.rs b/ceno_recursion/src/basefold_verifier/query_phase.rs index 555b55593..6a7c4dc4e 100644 --- a/ceno_recursion/src/basefold_verifier/query_phase.rs +++ b/ceno_recursion/src/basefold_verifier/query_phase.rs @@ -455,7 +455,7 @@ pub(crate) fn batch_verifier_query_phase( builder .range(0, opened_values.length.clone()) .for_each(|i_vec, builder| { - let i = i_vec[0]; + let i = i_vec[0]; let opening_idx = builder.get(&opening_idxes, i_vec[0]); let opening = builder.get(&round.openings, opening_idx); let log2_height: Var = @@ -542,7 +542,7 @@ pub(crate) fn batch_verifier_query_phase( // mmcs_verify_batch(builder, mmcs_verifier_input); }); builder.cycle_tracker_end("Batching and first FRI round"); - + let opening_ext = query.commit_phase_openings; // fold 1st codeword diff --git a/ceno_recursion/src/zkvm_verifier/verifier.rs b/ceno_recursion/src/zkvm_verifier/verifier.rs index 9377e14a1..9f90f4161 100644 --- a/ceno_recursion/src/zkvm_verifier/verifier.rs +++ b/ceno_recursion/src/zkvm_verifier/verifier.rs @@ -415,55 +415,58 @@ pub fn verify_zkvm_proof>( builder .if_eq(zkvm_proof_input.shard_id.clone(), Usize::from(0)) - .then_or_else(|builder| { - if let Some(fixed_commit) = vk.fixed_commit.as_ref() { - let commit: crate::basefold_verifier::hash::Hash = fixed_commit.commit().into(); - let commit_array: Array> = builder.dyn_array(commit.value.len()); + .then_or_else( + |builder| { + if let Some(fixed_commit) = vk.fixed_commit.as_ref() { + let commit: crate::basefold_verifier::hash::Hash = fixed_commit.commit().into(); + let commit_array: Array> = builder.dyn_array(commit.value.len()); - let log2_max_codeword_size: Var = builder.constant( - C::N::from_canonical_usize(fixed_commit.log2_max_codeword_size), - ); + let log2_max_codeword_size: Var = builder.constant( + C::N::from_canonical_usize(fixed_commit.log2_max_codeword_size), + ); - builder.set( - &rounds, - 1, - RoundVariable { - commit: BasefoldCommitmentVariable { - commit: MmcsCommitmentVariable { - value: commit_array, + builder.set( + &rounds, + 1, + RoundVariable { + commit: BasefoldCommitmentVariable { + commit: MmcsCommitmentVariable { + value: commit_array, + }, + log2_max_codeword_size: log2_max_codeword_size.into(), }, - log2_max_codeword_size: log2_max_codeword_size.into(), + openings: fixed_openings.clone(), + perm: zkvm_proof_input.fixed_perm.clone(), }, - openings: fixed_openings.clone(), - perm: zkvm_proof_input.fixed_perm.clone(), - }, - ); - } - }, |builder| { - if let Some(fixed_commit) = vk.fixed_no_omc_init_commit.as_ref(){ - let commit: crate::basefold_verifier::hash::Hash = fixed_commit.commit().into(); - let commit_array: Array> = builder.dyn_array(commit.value.len()); + ); + } + }, + |builder| { + if let Some(fixed_commit) = vk.fixed_no_omc_init_commit.as_ref() { + let commit: crate::basefold_verifier::hash::Hash = fixed_commit.commit().into(); + let commit_array: Array> = builder.dyn_array(commit.value.len()); - let log2_max_codeword_size: Var = builder.constant( - C::N::from_canonical_usize(fixed_commit.log2_max_codeword_size), - ); + let log2_max_codeword_size: Var = builder.constant( + C::N::from_canonical_usize(fixed_commit.log2_max_codeword_size), + ); - builder.set( - &rounds, - 1, - RoundVariable { - commit: BasefoldCommitmentVariable { - commit: MmcsCommitmentVariable { - value: commit_array, + builder.set( + &rounds, + 1, + RoundVariable { + commit: BasefoldCommitmentVariable { + commit: MmcsCommitmentVariable { + value: commit_array, + }, + log2_max_codeword_size: log2_max_codeword_size.into(), }, - log2_max_codeword_size: log2_max_codeword_size.into(), + openings: fixed_openings.clone(), + perm: zkvm_proof_input.fixed_perm.clone(), }, - openings: fixed_openings.clone(), - perm: zkvm_proof_input.fixed_perm.clone(), - }, - ); - } - }); + ); + } + }, + ); batch_verify( builder, From ab7bede938a2fb38b4c6a9570d009edf97b89c55 Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Tue, 6 Jan 2026 19:15:27 -0500 Subject: [PATCH 20/21] correct permutation --- Cargo.lock | 36 +++++++++---------- .../src/basefold_verifier/query_phase.rs | 4 +-- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 03cd2de55..5dbc0d4a3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -58,9 +58,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "alloy-consensus" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3dcd2b4e208ce5477de90ccdcbd4bde2c8fb06af49a443974e92bb8f2c5e93f" +checksum = "41e46a465e50a339a817070ec23f06eb3fc9fbb8af71612868367b875a9d49e3" dependencies = [ "alloy-eips", "alloy-primitives", @@ -122,9 +122,9 @@ dependencies = [ [[package]] name = "alloy-eips" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6847d641141b92a1557094aa6c236cbe49c06fb24144d4a21fe6acb970c15888" +checksum = "707337efeb051ddbaece17a73eaec5150945a5a5541112f4146508248edc2e40" dependencies = [ "alloy-eip2124", "alloy-eip2930", @@ -195,9 +195,9 @@ dependencies = [ [[package]] name = "alloy-serde" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "067b718d2e6ac1bb889341fcc7a250cfa49bcd3ba4f23923f1c1eb1f2b10cb7c" +checksum = "a438ce4cd49ec4bc213868c1fe94f2fe103d4c3f22f6a42073db974f9c0962da" dependencies = [ "alloy-primitives", "serde", @@ -222,9 +222,9 @@ dependencies = [ [[package]] name = "alloy-tx-macros" -version = "1.2.1" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04950a13cc4209d8e9b78f306e87782466bad8538c94324702d061ff03e211c9" +checksum = "99dac443033e83b14f68fac56e8c27e76421f1253729574197ceccd06598f3ef" dependencies = [ "darling 0.21.3", "proc-macro2", @@ -5243,9 +5243,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.104" +version = "1.0.105" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9695f8df41bb4f3d222c95a67532365f569318332d03d5f3f67f37b20e6ebdf0" +checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7" dependencies = [ "unicode-ident", ] @@ -5301,9 +5301,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.42" +version = "1.0.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a338cc41d27e6cc6dce6cefc13a0729dfbb81c262b1f519331575dd80ef3067f" +checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a" dependencies = [ "proc-macro2", ] @@ -5920,9 +5920,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.148" +version = "1.0.149" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3084b546a1dd6289475996f182a22aba973866ea8e8b02c51d9f46b1336a22da" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" dependencies = [ "itoa", "memchr", @@ -6700,9 +6700,9 @@ checksum = "6d49784317cd0d1ee7ec5c716dd598ec5b4483ea832a2dced265471cc0f690ae" [[package]] name = "url" -version = "2.5.7" +version = "2.5.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" dependencies = [ "form_urlencoded", "idna", @@ -7353,6 +7353,6 @@ dependencies = [ [[package]] name = "zmij" -version = "1.0.10" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30e0d8dffbae3d840f64bda38e28391faef673a7b5a6017840f2a106c8145868" +checksum = "2fc5a66a20078bf1251bde995aa2fdcc4b800c70b5d92dd2c62abc5c60f679f8" diff --git a/ceno_recursion/src/basefold_verifier/query_phase.rs b/ceno_recursion/src/basefold_verifier/query_phase.rs index 6a7c4dc4e..e26c3f9fb 100644 --- a/ceno_recursion/src/basefold_verifier/query_phase.rs +++ b/ceno_recursion/src/basefold_verifier/query_phase.rs @@ -457,7 +457,7 @@ pub(crate) fn batch_verifier_query_phase( .for_each(|i_vec, builder| { let i = i_vec[0]; let opening_idx = builder.get(&opening_idxes, i_vec[0]); - let opening = builder.get(&round.openings, opening_idx); + let opening = builder.get(&round.openings, opening_idx.clone()); let log2_height: Var = builder.eval(opening.num_var + Usize::from(get_rate_log() - 1)); @@ -515,7 +515,7 @@ pub(crate) fn batch_verifier_query_phase( ); // reorder opened values according to the permutation - let permuted_j = builder.iter_ptr_get(&round.perm, i); + let permuted_j = builder.get(&round.perm, opening_idx); builder.set_value( &perm_opened_values, permuted_j, From 6d9a2835ce66a677f99d80e5c659ad08de77a08d Mon Sep 17 00:00:00 2001 From: Ray Gao Date: Tue, 6 Jan 2026 19:50:38 -0500 Subject: [PATCH 21/21] clippy --- ceno_recursion/src/basefold_verifier/query_phase.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ceno_recursion/src/basefold_verifier/query_phase.rs b/ceno_recursion/src/basefold_verifier/query_phase.rs index e26c3f9fb..21a535e79 100644 --- a/ceno_recursion/src/basefold_verifier/query_phase.rs +++ b/ceno_recursion/src/basefold_verifier/query_phase.rs @@ -457,7 +457,7 @@ pub(crate) fn batch_verifier_query_phase( .for_each(|i_vec, builder| { let i = i_vec[0]; let opening_idx = builder.get(&opening_idxes, i_vec[0]); - let opening = builder.get(&round.openings, opening_idx.clone()); + let opening = builder.get(&round.openings, opening_idx); let log2_height: Var = builder.eval(opening.num_var + Usize::from(get_rate_log() - 1));