diff --git a/plonky2/src/plonk/circuit_builder.rs b/plonky2/src/plonk/circuit_builder.rs index 9f97251a..9da07a2e 100644 --- a/plonky2/src/plonk/circuit_builder.rs +++ b/plonky2/src/plonk/circuit_builder.rs @@ -2,6 +2,7 @@ use std::cmp::max; use std::collections::{BTreeMap, HashMap, HashSet}; use std::time::Instant; +use itertools::Itertools; use log::{debug, info, Level}; use plonky2_field::cosets::get_unique_coset_shifts; use plonky2_field::extension::{Extendable, FieldExtension}; @@ -95,9 +96,9 @@ impl, const D: usize> CircuitBuilder { context_log: ContextTree::new(), generators: Vec::new(), constants_to_targets: HashMap::new(), + targets_to_constants: HashMap::new(), base_arithmetic_results: HashMap::new(), arithmetic_results: HashMap::new(), - targets_to_constants: HashMap::new(), current_slots: HashMap::new(), constant_generators: Vec::new(), }; @@ -665,6 +666,9 @@ impl, const D: usize> CircuitBuilder { .constants_to_targets .clone() .into_iter() + // We need to enumerate constants_to_targets in some deterministic order to ensure that + // building a circuit is deterministic. + .sorted_by_key(|(c, _t)| c.to_canonical_u64()) .zip(self.constant_generators.clone()) { // Set the constant in the constant polynomial.