config option to turn off randomizing unused wires (makes debugging easier as it becomes deterministic)

if you turn it off apparently you have something like a 10^-13 chance of the proof failing, and since it's deterministic (unless zero knowledge), it will always fail.

remark: now it's off by default. Don't forget to turn it back in production
This commit is contained in:
Balazs Komuves 2024-12-04 23:08:52 +01:00
parent 356aefb686
commit 99aac4dd08
No known key found for this signature in database
GPG Key ID: F63B7AEF18435562
3 changed files with 14 additions and 1 deletions

View File

@ -1095,7 +1095,12 @@ impl<F: RichField + Extendable<D>, const D: usize> CircuitBuilder<F, D> {
{
self.connect(hash_part, Target::wire(pi_gate, wire))
}
self.randomize_unused_pi_wires(pi_gate);
// See <https://github.com/0xPolygonZero/plonky2/issues/456>
// however randomization makes debugging harder as runs are not deterministic
if self.config.randomize_unused_wires {
self.randomize_unused_pi_wires(pi_gate);
}
// Place LUT-related gates.
self.add_all_lookups();

View File

@ -80,6 +80,9 @@ pub struct CircuitConfig {
/// A boolean to activate the zero-knowledge property. When this is set to `false`, proofs *may*
/// leak additional information.
pub zero_knowledge: bool,
/// See <https://github.com/0xPolygonZero/plonky2/issues/456>
/// Can be turned off for deterministic results
pub randomize_unused_wires: bool,
/// A cap on the quotient polynomial's degree factor. The actual degree factor is derived
/// systematically, but will never exceed this value.
pub max_quotient_degree_factor: usize,
@ -107,6 +110,7 @@ impl CircuitConfig {
security_bits: 100,
num_challenges: 2,
zero_knowledge: false,
randomize_unused_wires: false,
max_quotient_degree_factor: 8,
fri_config: FriConfig {
rate_bits: 3,

View File

@ -661,6 +661,7 @@ pub trait Read {
let max_quotient_degree_factor = self.read_usize()?;
let use_base_arithmetic_gate = self.read_bool()?;
let zero_knowledge = self.read_bool()?;
let randomize_unused_wires = self.read_bool()?;
let fri_config = self.read_fri_config()?;
Ok(CircuitConfig {
@ -672,6 +673,7 @@ pub trait Read {
max_quotient_degree_factor,
use_base_arithmetic_gate,
zero_knowledge,
randomize_unused_wires,
fri_config,
})
}
@ -1696,6 +1698,7 @@ pub trait Write {
max_quotient_degree_factor,
use_base_arithmetic_gate,
zero_knowledge,
randomize_unused_wires,
fri_config,
} = config;
@ -1707,6 +1710,7 @@ pub trait Write {
self.write_usize(*max_quotient_degree_factor)?;
self.write_bool(*use_base_arithmetic_gate)?;
self.write_bool(*zero_knowledge)?;
self.write_bool(*randomize_unused_wires)?;
self.write_fri_config(fri_config)?;
Ok(())