Skip to content

Commit 222e5df

Browse files
feat: add provable params (#202)
towards INT-5601 --------- Co-authored-by: Jonathan Wang <[email protected]>
1 parent 40e0be8 commit 222e5df

File tree

9 files changed

+78
-26
lines changed

9 files changed

+78
-26
lines changed

crates/cuda-backend/examples/fibonacci.rs

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

5454
let airs = any_rap_arc_vec![air];
5555

56-
let gpu_engine = GpuBabyBearPoseidon2Engine::new(
57-
FriParameters::standard_with_100_bits_conjectured_security(LOG_BLOWUP),
58-
);
56+
let gpu_engine =
57+
GpuBabyBearPoseidon2Engine::new(FriParameters::standard_with_100_bits_security(LOG_BLOWUP));
5958
let gpu_trace = gpu_engine.device().transport_matrix_to_device(&cpu_trace);
6059

6160
let cpu_air_ctx = AirProvingContext::<CpuBackend<SC>>::simple(cpu_trace, public_values.clone());
@@ -72,9 +71,8 @@ fn main() {
7271

7372
// CPU // CPU
7473
println!("\nStarting CPU proof");
75-
let cpu_engine = BabyBearPoseidon2Engine::new(
76-
FriParameters::standard_with_100_bits_conjectured_security(LOG_BLOWUP),
77-
);
74+
let cpu_engine =
75+
BabyBearPoseidon2Engine::new(FriParameters::standard_with_100_bits_security(LOG_BLOWUP));
7876
let cpu_pk = cpu_engine.device().transport_pk_to_device(&pk_host);
7977
let cpu_proof = cpu_engine.prove(&cpu_pk, cpu_ctx);
8078
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
@@ -69,7 +69,7 @@ fn main() {
6969
// ----- CPU keygen once, shared by all threads -----
7070
let air = TestAir(KeccakAir {});
7171
let engine_cpu = BabyBearPoseidon2Engine::new(
72-
FriParameters::standard_with_100_bits_conjectured_security(LOG_BLOWUP),
72+
FriParameters::standard_with_100_bits_security(LOG_BLOWUP),
7373
);
7474

7575
let mut keygen_builder = engine_cpu.keygen_builder();
@@ -108,7 +108,7 @@ fn main() {
108108

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

114114
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-backend/tests/cached_lookup/instrumented.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use openvm_stark_backend::{
66
use openvm_stark_sdk::{
77
config::{
88
baby_bear_poseidon2::{self, engine_from_perm},
9-
fri_params::{standard_fri_params_with_100_bits_conjectured_security, SecurityParameters},
9+
fri_params::{standard_fri_params_with_100_bits_security, SecurityParameters},
1010
log_up_params::log_up_security_params_baby_bear_100_bits,
1111
},
1212
dummy_airs::interaction::dummy_interaction_air::DummyInteractionAir,
@@ -102,7 +102,7 @@ fn instrumented_verifier_comparison(
102102
#[ignore = "bench"]
103103
fn instrument_cached_trace_verifier() -> eyre::Result<()> {
104104
let fri_params = [1, 2, 3, 4]
105-
.map(standard_fri_params_with_100_bits_conjectured_security)
105+
.map(standard_fri_params_with_100_bits_security)
106106
.to_vec();
107107
let data_sizes = get_data_sizes();
108108

crates/stark-backend/tests/cached_lookup/prove.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ use openvm_stark_backend::{
1919
use openvm_stark_sdk::{
2020
config::{
2121
baby_bear_poseidon2::{engine_from_perm, random_perm},
22-
fri_params::{standard_fri_params_with_100_bits_conjectured_security, SecurityParameters},
22+
fri_params::{standard_fri_params_with_100_bits_security, SecurityParameters},
2323
log_up_params::log_up_security_params_baby_bear_100_bits,
2424
FriParameters,
2525
},
@@ -172,7 +172,7 @@ fn compare_provers(
172172
#[ignore = "bench"]
173173
fn bench_cached_trace_prover() -> eyre::Result<()> {
174174
let fri_params = [1, 2, 3, 4]
175-
.map(standard_fri_params_with_100_bits_conjectured_security)
175+
.map(standard_fri_params_with_100_bits_security)
176176
.to_vec();
177177
let data_sizes = get_data_sizes();
178178

crates/stark-sdk/examples/compute_quotient_dag.rs

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

56-
let engine = BabyBearPoseidon2Engine::new(
57-
FriParameters::standard_with_100_bits_conjectured_security(LOG_BLOWUP),
58-
);
56+
let engine =
57+
BabyBearPoseidon2Engine::new(FriParameters::standard_with_100_bits_security(LOG_BLOWUP));
5958
let mut keygen_builder = engine.keygen_builder();
6059
let _air_id = keygen_builder.add_air(Arc::new(air));
6160
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
@@ -44,9 +44,9 @@ fn main() {
4444
let mut rng = create_seeded_rng();
4545
let air = TestAir(KeccakAir {});
4646

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

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

Lines changed: 60 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,19 @@ impl FriParameters {
2626
}
2727

2828
pub fn standard_fast() -> Self {
29-
standard_fri_params_with_100_bits_conjectured_security(1)
29+
standard_fri_params_with_100_bits_security(1)
3030
}
3131

32+
#[deprecated(note = "use standard_with_100_bits_security instead")]
3233
pub fn standard_with_100_bits_conjectured_security(log_blowup: usize) -> Self {
34+
#[allow(deprecated)]
3335
standard_fri_params_with_100_bits_conjectured_security(log_blowup)
3436
}
3537

38+
pub fn standard_with_100_bits_security(log_blowup: usize) -> Self {
39+
standard_fri_params_with_100_bits_security(log_blowup)
40+
}
41+
3642
pub fn max_constraint_degree(&self) -> usize {
3743
(1 << self.log_blowup) + 1
3844
}
@@ -41,7 +47,7 @@ impl FriParameters {
4147
/// If the environment variable `OPENVM_FAST_TEST` is set to "1", then the parameters are **not
4248
/// secure** and meant for fast testing only.
4349
///
44-
/// In production, use `Self::standard_with_100_bits_conjectured_security` instead.
50+
/// In production, use `Self::standard_with_100_bits_security` instead.
4551
pub fn new_for_testing(log_blowup: usize) -> Self {
4652
if let Ok("1") = std::env::var("OPENVM_FAST_TEST").as_deref() {
4753
Self {
@@ -52,15 +58,65 @@ impl FriParameters {
5258
query_proof_of_work_bits: 0,
5359
}
5460
} else {
55-
Self::standard_with_100_bits_conjectured_security(log_blowup)
61+
Self::standard_with_100_bits_security(log_blowup)
5662
}
5763
}
5864
}
5965

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

0 commit comments

Comments
 (0)