diff --git a/evm/src/lookup.rs b/evm/src/lookup.rs index 1c25700b..b886e736 100644 --- a/evm/src/lookup.rs +++ b/evm/src/lookup.rs @@ -1,4 +1,5 @@ use itertools::Itertools; +use num_bigint::BigUint; use plonky2::field::batch_util::batch_add_inplace; use plonky2::field::extension::{Extendable, FieldExtension}; use plonky2::field::packed::PackedField; @@ -49,6 +50,10 @@ pub(crate) fn lookup_helper_columns( constraint_degree, 3, "TODO: Allow other constraint degrees." ); + + let num_total_logup_entries = trace_poly_values[0].values.len() * lookup.columns.len(); + assert!(BigUint::from(num_total_logup_entries) < F::characteristic()); + let num_helper_columns = lookup.num_helper_columns(constraint_degree); let mut helper_columns: Vec> = Vec::with_capacity(num_helper_columns); @@ -123,7 +128,7 @@ where } /// Constraints for the logUp lookup argument. -pub(crate) fn eval_lookups_checks( +pub(crate) fn eval_packed_lookups_generic( stark: &S, lookups: &[Lookup], vars: StarkEvaluationVars, @@ -180,7 +185,7 @@ pub struct LookupCheckVarsTarget { pub(crate) challenges: Vec, } -pub(crate) fn eval_lookups_checks_circuit< +pub(crate) fn eval_ext_lookups_circuit< F: RichField + Extendable, S: Stark, const D: usize, diff --git a/evm/src/recursive_verifier.rs b/evm/src/recursive_verifier.rs index 6abd61e7..3539f35b 100644 --- a/evm/src/recursive_verifier.rs +++ b/evm/src/recursive_verifier.rs @@ -352,6 +352,7 @@ where &proof_target, &challenges, &ctl_vars, + &ctl_challenges_target, inner_config, ); @@ -395,6 +396,7 @@ fn verify_stark_proof_with_challenges_circuit< proof: &StarkProofTarget, challenges: &StarkProofChallengesTarget, ctl_vars: &[CtlCheckVarsTarget], + ctl_challenges: &GrandProductChallengeSet, inner_config: &StarkConfig, ) where C::Hasher: AlgebraicHasher, @@ -435,9 +437,10 @@ fn verify_stark_proof_with_challenges_circuit< let num_lookup_columns = stark.num_lookup_helper_columns(inner_config); let lookup_challenges = (num_lookup_columns > 0).then(|| { - ctl_vars + ctl_challenges + .challenges .iter() - .map(|ch| ch.challenges.beta) + .map(|ch| ch.beta) .collect::>() }); diff --git a/evm/src/vanishing_poly.rs b/evm/src/vanishing_poly.rs index 21d36167..a3951120 100644 --- a/evm/src/vanishing_poly.rs +++ b/evm/src/vanishing_poly.rs @@ -9,7 +9,7 @@ use crate::cross_table_lookup::{ CtlCheckVarsTarget, }; use crate::lookup::{ - eval_lookups_checks, eval_lookups_checks_circuit, Lookup, LookupCheckVars, + eval_ext_lookups_circuit, eval_packed_lookups_generic, Lookup, LookupCheckVars, LookupCheckVarsTarget, }; use crate::stark::Stark; @@ -30,7 +30,13 @@ pub(crate) fn eval_vanishing_poly( { stark.eval_packed_generic(vars, consumer); if let Some(lookup_vars) = lookup_vars { - eval_lookups_checks::(stark, lookups, vars, lookup_vars, consumer); + eval_packed_lookups_generic::( + stark, + lookups, + vars, + lookup_vars, + consumer, + ); } eval_cross_table_lookup_checks::(vars, ctl_vars, consumer); } @@ -49,7 +55,7 @@ pub(crate) fn eval_vanishing_poly_circuit( { stark.eval_ext_circuit(builder, vars, consumer); if let Some(lookup_vars) = lookup_vars { - eval_lookups_checks_circuit::(builder, stark, vars, lookup_vars, consumer); + eval_ext_lookups_circuit::(builder, stark, vars, lookup_vars, consumer); } eval_cross_table_lookup_checks_circuit::(builder, vars, ctl_vars, consumer); }