Skip to content

Commit f559228

Browse files
committed
feat: add provable params
1 parent 7d1eb7f commit f559228

File tree

7 files changed

+70
-22
lines changed

7 files changed

+70
-22
lines changed

crates/cuda-backend/examples/fibonacci.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,8 @@ fn main() {
5555

5656
let airs = any_rap_arc_vec![air];
5757

58-
let gpu_engine = GpuBabyBearPoseidon2Engine::new(
59-
FriParameters::standard_with_100_bits_conjectured_security(LOG_BLOWUP),
60-
);
58+
let gpu_engine =
59+
GpuBabyBearPoseidon2Engine::new(FriParameters::standard_with_100_bits_security(LOG_BLOWUP));
6160
let gpu_trace = gpu_engine.device().transport_matrix_to_device(&cpu_trace);
6261

6362
let cpu_air_ctx = AirProvingContext::<CpuBackend<SC>>::simple(cpu_trace, public_values.clone());
@@ -74,9 +73,8 @@ fn main() {
7473

7574
// CPU // CPU
7675
println!("\nStarting CPU proof");
77-
let cpu_engine = BabyBearPoseidon2Engine::new(
78-
FriParameters::standard_with_100_bits_conjectured_security(LOG_BLOWUP),
79-
);
76+
let cpu_engine =
77+
BabyBearPoseidon2Engine::new(FriParameters::standard_with_100_bits_security(LOG_BLOWUP));
8078
let cpu_pk = cpu_engine.device().transport_pk_to_device(&pk_host);
8179
let cpu_proof = cpu_engine.prove(&cpu_pk, cpu_ctx);
8280
cpu_engine.verify(&vk, &cpu_proof).unwrap();

crates/cuda-backend/examples/keccakf.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ fn main() {
7070
// ----- CPU keygen once, shared by all threads -----
7171
let air = TestAir(KeccakAir {});
7272
let engine_cpu = BabyBearPoseidon2Engine::new(
73-
FriParameters::standard_with_100_bits_conjectured_security(LOG_BLOWUP),
73+
FriParameters::standard_with_100_bits_security(LOG_BLOWUP),
7474
);
7575

7676
let mut keygen_builder = engine_cpu.keygen_builder();
@@ -107,7 +107,7 @@ fn main() {
107107

108108
println!("[task {t}] Starting GPU proof");
109109
let engine_gpu = GpuBabyBearPoseidon2Engine::new(
110-
FriParameters::standard_with_100_bits_conjectured_security(LOG_BLOWUP),
110+
FriParameters::standard_with_100_bits_security(LOG_BLOWUP),
111111
);
112112

113113
let pk_dev = engine_gpu.device().transport_pk_to_device(&pk_host);

crates/cuda-backend/examples/trace_committer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ fn main() {
7777
let gpu_time = std::time::Instant::now();
7878
let gpu_device = GpuDevice::new(
7979
GpuConfig::new(
80-
FriParameters::standard_with_100_bits_conjectured_security(log_blowup),
80+
FriParameters::standard_with_100_bits_security(log_blowup),
8181
shift,
8282
),
8383
None,

crates/stark-sdk/examples/compute_quotient_dag.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,8 @@ fn main() {
5454
let mut rng = create_seeded_rng();
5555
let air = TestAir(KeccakAir {});
5656

57-
let engine = BabyBearPoseidon2Engine::new(
58-
FriParameters::standard_with_100_bits_conjectured_security(LOG_BLOWUP),
59-
);
57+
let engine =
58+
BabyBearPoseidon2Engine::new(FriParameters::standard_with_100_bits_security(LOG_BLOWUP));
6059
let mut keygen_builder = engine.keygen_builder();
6160
let _air_id = keygen_builder.add_air(Arc::new(air));
6261
let pk = keygen_builder.generate_pk();

crates/stark-sdk/examples/interactions.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,8 @@ type Val = BabyBear;
2222
fn main() {
2323
setup_tracing();
2424

25-
let engine = BabyBearPoseidon2Engine::new(
26-
FriParameters::standard_with_100_bits_conjectured_security(LOG_BLOWUP),
27-
);
25+
let engine =
26+
BabyBearPoseidon2Engine::new(FriParameters::standard_with_100_bits_security(LOG_BLOWUP));
2827
let mut keygen_builder = engine.keygen_builder();
2928

3029
let sender_air = DummyInteractionAir::new(1, true, 0);

crates/stark-sdk/examples/keccakf.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ fn main() {
4545
let mut rng = create_seeded_rng();
4646
let air = TestAir(KeccakAir {});
4747

48-
let engine = BabyBearPoseidon2Engine::new(
49-
FriParameters::standard_with_100_bits_conjectured_security(LOG_BLOWUP),
50-
);
48+
let engine = BabyBearPoseidon2Engine::new(FriParameters::standard_with_100_bits_security(
49+
LOG_BLOWUP,
50+
));
5151
let mut keygen_builder = engine.keygen_builder();
5252
let air_id = keygen_builder.add_air(Arc::new(air));
5353
let pk = keygen_builder.generate_pk();

crates/stark-sdk/src/config/fri_params.rs

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,19 @@ impl FriParameters {
2424
}
2525

2626
pub fn standard_fast() -> Self {
27-
standard_fri_params_with_100_bits_conjectured_security(1)
27+
standard_fri_params_with_100_bits_security(1)
2828
}
2929

30+
#[deprecated(note = "use standard_with_100_bits_security instead")]
3031
pub fn standard_with_100_bits_conjectured_security(log_blowup: usize) -> Self {
32+
#[allow(deprecated)]
3133
standard_fri_params_with_100_bits_conjectured_security(log_blowup)
3234
}
3335

36+
pub fn standard_with_100_bits_security(log_blowup: usize) -> Self {
37+
standard_fri_params_with_100_bits_security(log_blowup)
38+
}
39+
3440
pub fn max_constraint_degree(&self) -> usize {
3541
(1 << self.log_blowup) + 1
3642
}
@@ -39,7 +45,7 @@ impl FriParameters {
3945
/// If the environment variable `OPENVM_FAST_TEST` is set to "1", then the parameters are **not
4046
/// secure** and meant for fast testing only.
4147
///
42-
/// In production, use `Self::standard_with_100_bits_conjectured_security` instead.
48+
/// In production, use `Self::standard_with_100_bits_security` instead.
4349
pub fn new_for_testing(log_blowup: usize) -> Self {
4450
if let Ok("1") = std::env::var("OPENVM_FAST_TEST").as_deref() {
4551
Self {
@@ -49,15 +55,61 @@ impl FriParameters {
4955
proof_of_work_bits: 0,
5056
}
5157
} else {
52-
Self::standard_with_100_bits_conjectured_security(log_blowup)
58+
Self::standard_with_100_bits_security(log_blowup)
5359
}
5460
}
5561
}
5662

63+
/// Pre-defined FRI parameters with 100 bits of provable security, meaning we do
64+
/// not rely on any conjectures about Reed–Solomon codes (e.g., about proximity
65+
/// gaps) or the ethSTARK Toy Problem Conjecture.
66+
///
67+
/// The value `num_queries` is chosen so that the verifier accepts a δ-far
68+
/// codeword for δ = (1 - 2**(-log_blowup)) with probability at most 2^{-80}.
69+
/// I.e., we target the unique-decoding radius. We require 20 PoW bits
70+
/// just before the query phase begins to boost the soundness to 100 bits.
71+
///
72+
/// Assumes that:
73+
/// - the challenge field has size at least 2^123
74+
/// - for `log_blowup = 1`, multi-FRI will be run with at most width 30000 at any level
75+
/// - for `log_blowup > 1`, multi-FRI will be run with at most width 2000 at any level
76+
pub fn standard_fri_params_with_100_bits_security(log_blowup: usize) -> FriParameters {
77+
let fri_params = match log_blowup {
78+
1 => FriParameters {
79+
log_blowup,
80+
log_final_poly_len: 0,
81+
num_queries: 193,
82+
proof_of_work_bits: 20,
83+
},
84+
2 => FriParameters {
85+
log_blowup,
86+
log_final_poly_len: 0,
87+
num_queries: 118,
88+
proof_of_work_bits: 20,
89+
},
90+
3 => FriParameters {
91+
log_blowup,
92+
log_final_poly_len: 0,
93+
num_queries: 97,
94+
proof_of_work_bits: 20,
95+
},
96+
4 => FriParameters {
97+
log_blowup,
98+
log_final_poly_len: 0,
99+
num_queries: 88,
100+
proof_of_work_bits: 20,
101+
},
102+
_ => todo!("No standard FRI params defined for log blowup {log_blowup}",),
103+
};
104+
tracing::debug!("FRI parameters | log_blowup: {log_blowup:<2} | num_queries: {:<2} | proof_of_work_bits: {:<2}", fri_params.num_queries, fri_params.proof_of_work_bits);
105+
fri_params
106+
}
107+
57108
/// Pre-defined FRI parameters with 100 bits of conjectured security.
58109
/// Security bits calculated following ethSTARK (<https://eprint.iacr.org/2021/582.pdf>) 5.10.1 eq (19)
59110
///
60111
/// Assumes that the challenge field used as more than 100 bits.
112+
#[deprecated(note = "use standard_fri_params_with_100_bits_security instead")]
61113
pub fn standard_fri_params_with_100_bits_conjectured_security(log_blowup: usize) -> FriParameters {
62114
let fri_params = match log_blowup {
63115
// plonky2 standard fast config uses num_queries=84: https://github.com/0xPolygonZero/plonky2/blob/41dc325e61ab8d4c0491e68e667c35a4e8173ffa/starky/src/config.rs#L49
@@ -109,7 +161,7 @@ impl SecurityParameters {
109161
}
110162
pub fn standard_100_bits_with_fri_log_blowup(log_blowup: usize) -> Self {
111163
Self {
112-
fri_params: FriParameters::standard_with_100_bits_conjectured_security(log_blowup),
164+
fri_params: FriParameters::standard_with_100_bits_security(log_blowup),
113165
log_up_params: log_up_security_params_baby_bear_100_bits(),
114166
}
115167
}

0 commit comments

Comments
 (0)