diff --git a/crates/cairo_verifier/src/circuit_analysis.rs b/crates/cairo_verifier/src/circuit_analysis.rs index 2071b1bb..637720c8 100644 --- a/crates/cairo_verifier/src/circuit_analysis.rs +++ b/crates/cairo_verifier/src/circuit_analysis.rs @@ -3,7 +3,7 @@ use std::ops::Deref; use circuits::circuit::{Add, BlakeGGate, Circuit, M31ToU32, Mul, PointwiseMul, Sub, TripleXor}; -use circuits::context::Var; +use circuits::context::DebugInfo; use circuits::ivalue::{IValue, qm31_from_u32s}; use hashbrown::{HashMap, HashSet}; use num_traits::{One, Zero}; @@ -545,7 +545,7 @@ fn validate_logup_summand( } /// Analyzes the circuit and writes the classified logup-sum summands to `summands.txt`. -pub fn analyze(circuit: &Circuit, debug_info: &HashMap) { +pub fn analyze(circuit: &Circuit, debug_info: &DebugInfo) { let c = build_analysis(circuit); let const_values = propagate_constants(&c); @@ -557,16 +557,16 @@ pub fn analyze(circuit: &Circuit, debug_info: &HashMap) { let ground = Ground { c: &c, const_values: &const_values, idiom: &idiom }; // Seed each challenge's `grounded` cache with its dependency closure. - let int_z = debug_info["interaction_z"].idx; + let int_z = debug_info.vars["interaction_z"].idx; let mut int_z_cache = ground.init_grounding_cache(int_z); - let composition_coef = debug_info["composition_polynomial_coeff"].idx; + let composition_coef = debug_info.vars["composition_polynomial_coeff"].idx; let mut composition_coef_cache = ground.init_grounding_cache(composition_coef); - let logup_sum = debug_info["logup_sum"].idx; + let logup_sum = debug_info.vars["logup_sum"].idx; let summands = find_summands(&c, &const_values, logup_sum); - let composition_eval = debug_info["composition_eval"].idx; + let composition_eval = debug_info.vars["composition_eval"].idx; let composition_vars = add_mul_cone(&c, &const_values, composition_eval); for s in summands { diff --git a/crates/circuits/src/context.rs b/crates/circuits/src/context.rs index 2f6592ba..16d3da53 100644 --- a/crates/circuits/src/context.rs +++ b/crates/circuits/src/context.rs @@ -86,8 +86,15 @@ pub struct Context { /// Debug only. If true, equality is asserted when adding the `eq` gate; if false, no /// assertion is made during construction and equality can be checked later at validation. pub assert_eq_on_eval: bool, - /// Debug only. A map from variable name to the corresponding [Var]. - pub debug_info: HashMap, + /// Debug only. Named variables for testing purposes. + pub debug_info: DebugInfo, +} + +/// Named variables for testing purposes. +#[derive(Default)] +pub struct DebugInfo { + /// A map from name to the corresponding [Var]. + pub vars: HashMap, } impl Context { @@ -264,7 +271,7 @@ impl Default for Context { guessed_vars: Some(vec![]), reserved_vars: vec![], assert_eq_on_eval: false, - debug_info: HashMap::new(), + debug_info: DebugInfo::default(), }; // Register zero, one, and u as the first constants. res.constant(QM31::zero()); diff --git a/crates/stark_verifier/src/verify.rs b/crates/stark_verifier/src/verify.rs index f79deac0..cc283dbc 100644 --- a/crates/stark_verifier/src/verify.rs +++ b/crates/stark_verifier/src/verify.rs @@ -42,7 +42,7 @@ pub fn validate_logup_sum( for claimed_sum in claimed_sums { logup_sum = eval!(context, (logup_sum) + (*claimed_sum)); } - context.debug_info.insert("logup_sum".into(), logup_sum); + context.debug_info.vars.insert("logup_sum".into(), logup_sum); eq(context, logup_sum, context.zero()); } @@ -89,8 +89,8 @@ pub fn verify( channel.pow(context, config.n_interaction_pow_bits, proof.interaction_pow_nonce); // Pick the interaction elements. let [interaction_z, interaction_alpha] = channel.draw_two_qm31s(context); - context.debug_info.insert("interaction_z".into(), interaction_z); - context.debug_info.insert("interaction_alpha".into(), interaction_alpha); + context.debug_info.vars.insert("interaction_z".into(), interaction_z); + context.debug_info.vars.insert("interaction_alpha".into(), interaction_alpha); let public_logup_sum = statement.public_logup_sum(context, [interaction_z, interaction_alpha]); validate_logup_sum(context, public_logup_sum, &proof.claimed_sums); @@ -100,7 +100,10 @@ pub fn verify( // Draw a random QM31 coefficient for the composition polynomial. let composition_polynomial_coeff = channel.draw_qm31(context); - context.debug_info.insert("composition_polynomial_coeff".into(), composition_polynomial_coeff); + context + .debug_info + .vars + .insert("composition_polynomial_coeff".into(), composition_polynomial_coeff); channel.mix_commitment(context, &proof.composition_polynomial_root); @@ -154,7 +157,7 @@ pub fn verify( n_instances_bits: &component_sizes_bits, }, ); - context.debug_info.insert("composition_eval".into(), composition_eval); + context.debug_info.vars.insert("composition_eval".into(), composition_eval); let expected_composition_eval = extract_expected_composition_eval( context, &proof.composition_eval_at_oods,