Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions crates/cairo_verifier/src/circuit_analysis.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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};
Expand Down Expand Up @@ -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<String, Var>) {
pub fn analyze(circuit: &Circuit, debug_info: &DebugInfo) {
let c = build_analysis(circuit);
let const_values = propagate_constants(&c);

Expand All @@ -557,16 +557,16 @@ pub fn analyze(circuit: &Circuit, debug_info: &HashMap<String, Var>) {
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 {
Expand Down
13 changes: 10 additions & 3 deletions crates/circuits/src/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,15 @@ pub struct Context<Value: IValue> {
/// 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<String, Var>,
/// 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<String, Var>,
}

impl<Value: IValue> Context<Value> {
Expand Down Expand Up @@ -264,7 +271,7 @@ impl<Value: IValue> Default for Context<Value> {
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());
Expand Down
13 changes: 8 additions & 5 deletions crates/stark_verifier/src/verify.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}

Expand Down Expand Up @@ -89,8 +89,8 @@ pub fn verify<Value: IValue>(
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);
Expand All @@ -100,7 +100,10 @@ pub fn verify<Value: IValue>(

// 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);

Expand Down Expand Up @@ -154,7 +157,7 @@ pub fn verify<Value: IValue>(
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,
Expand Down
Loading