Skip to content

Commit 8b0c281

Browse files
zlangleyjonathanpwang
authored andcommitted
feat: add provable params
1 parent 40e0be8 commit 8b0c281

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
@@ -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-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: 56 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,61 @@ 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+
proof_of_work_bits: 20,
86+
},
87+
2 => FriParameters {
88+
log_blowup,
89+
log_final_poly_len: 0,
90+
num_queries: 118,
91+
proof_of_work_bits: 20,
92+
},
93+
3 => FriParameters {
94+
log_blowup,
95+
log_final_poly_len: 0,
96+
num_queries: 97,
97+
proof_of_work_bits: 20,
98+
},
99+
4 => FriParameters {
100+
log_blowup,
101+
log_final_poly_len: 0,
102+
num_queries: 88,
103+
proof_of_work_bits: 20,
104+
},
105+
_ => todo!("No standard FRI params defined for log blowup {log_blowup}",),
106+
};
107+
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);
108+
fri_params
109+
}
110+
60111
/// Pre-defined FRI parameters with 100 bits of conjectured security.
61112
/// Security bits calculated following ethSTARK (<https://eprint.iacr.org/2021/582.pdf>) 5.10.1 eq (19)
62113
///
63114
/// Assumes that the challenge field used as more than 100 bits.
115+
#[deprecated(note = "use standard_fri_params_with_100_bits_security instead")]
64116
pub fn standard_fri_params_with_100_bits_conjectured_security(log_blowup: usize) -> FriParameters {
65117
let fri_params = match log_blowup {
66118
// plonky2 standard fast config uses num_queries=84: https://github.com/0xPolygonZero/plonky2/blob/41dc325e61ab8d4c0491e68e667c35a4e8173ffa/starky/src/config.rs#L49
@@ -116,7 +168,7 @@ impl SecurityParameters {
116168
}
117169
pub fn standard_100_bits_with_fri_log_blowup(log_blowup: usize) -> Self {
118170
Self {
119-
fri_params: FriParameters::standard_with_100_bits_conjectured_security(log_blowup),
171+
fri_params: FriParameters::standard_with_100_bits_security(log_blowup),
120172
log_up_params: log_up_security_params_baby_bear_100_bits(),
121173
}
122174
}

0 commit comments

Comments
 (0)