1use std::path::Path;
2
3use openvm_stark_backend::{SystemParams, WhirProximityStrategy};
4use openvm_stark_sdk::config::{params_with_100_bits_security, RECURSION_MAX_CONSTRAINT_DEGREE};
5use serde::Serialize;
6
7#[derive(Serialize, Default)]
8struct ParamSet {
9 app: Option<SystemParams>,
10 leaf: Option<SystemParams>,
11 internal: Option<SystemParams>,
12 root: Option<SystemParams>,
13}
14
15fn main() {
16 let output_dir = std::env::args()
17 .nth(1)
18 .unwrap_or_else(|| env!("CARGO_MANIFEST_DIR").to_string());
19 generate_interesting_internal_params(&output_dir);
20 generate_interesting_root_params(&output_dir);
21}
22
23fn generate_interesting_internal_params(output_dir: impl AsRef<Path>) {
24 let w_stack = 512;
25 let make_internal_params =
26 |max_log_height, k_whir, log_blowup, l_skip, pow_bits, folding_pow_bits| -> SystemParams {
27 let n_stack = max_log_height - l_skip;
28 let proximity = WhirProximityStrategy::ListDecoding { m: 2 };
29 params_with_100_bits_security(
30 log_blowup,
31 l_skip,
32 n_stack,
33 w_stack,
34 folding_pow_bits,
35 pow_bits,
36 proximity,
37 RECURSION_MAX_CONSTRAINT_DEGREE,
38 pow_bits,
39 k_whir,
40 )
41 };
42 let make_root_params = |root_w_stack| -> SystemParams {
45 let max_log_height = 20;
46 let l_skip = 2;
47 let n_stack = max_log_height - l_skip;
48 let log_blowup = 4;
49 let k_whir = 4;
50 let proximity = WhirProximityStrategy::ListDecoding { m: 1 };
51 let pow_bits = 20;
52 params_with_100_bits_security(
53 log_blowup,
54 l_skip,
55 n_stack,
56 root_w_stack,
57 pow_bits,
58 pow_bits,
59 proximity,
60 RECURSION_MAX_CONSTRAINT_DEGREE,
61 pow_bits,
62 k_whir,
63 )
64 };
65 let make_param =
66 |max_log_height, k_whir, log_blowup, l_skip, pow_bits, folding_pow_bits| ParamSet {
67 internal: Some(make_internal_params(
68 max_log_height,
69 k_whir,
70 log_blowup,
71 l_skip,
72 pow_bits,
73 folding_pow_bits,
74 )),
75 ..Default::default()
76 };
77 let make_param_with_root =
78 |max_log_height, k_whir, log_blowup, l_skip, pow_bits, folding_pow_bits, root_w_stack| {
79 ParamSet {
80 internal: Some(make_internal_params(
81 max_log_height,
82 k_whir,
83 log_blowup,
84 l_skip,
85 pow_bits,
86 folding_pow_bits,
87 )),
88 root: Some(make_root_params(root_w_stack)),
89 ..Default::default()
90 }
91 };
92 let no_root_params = vec![
93 make_param(19, 3, 2, 1, 20, 18),
95 make_param(19, 3, 2, 2, 20, 18),
96 make_param(19, 3, 2, 3, 20, 18),
97 make_param(19, 3, 2, 4, 20, 18),
98 make_param(19, 3, 2, 5, 20, 18),
99 make_param(19, 3, 3, 1, 20, 18),
101 make_param(19, 3, 3, 2, 20, 18),
102 make_param(19, 3, 3, 3, 20, 18),
103 make_param(19, 3, 3, 4, 20, 18),
104 make_param(19, 3, 3, 5, 20, 18),
105 make_param(19, 4, 2, 1, 20, 18),
107 make_param(19, 4, 2, 2, 20, 18),
108 make_param(19, 4, 2, 3, 20, 18),
109 make_param(19, 4, 2, 4, 20, 18),
110 make_param(19, 4, 2, 5, 20, 18),
111 make_param(19, 4, 3, 1, 20, 18),
113 make_param(19, 4, 3, 2, 20, 18),
114 make_param(19, 4, 3, 3, 20, 18),
115 make_param(19, 4, 3, 4, 20, 18),
116 make_param(19, 4, 3, 5, 20, 18),
117 make_param(20, 4, 1, 1, 20, 18),
119 make_param(20, 4, 1, 2, 20, 18),
120 make_param(20, 4, 1, 3, 20, 18),
121 make_param(20, 4, 1, 4, 20, 18),
122 make_param(20, 4, 1, 5, 20, 18),
123 make_param(20, 4, 2, 1, 20, 18),
125 make_param(20, 4, 2, 2, 20, 18),
126 make_param(20, 4, 2, 3, 20, 18),
127 make_param(20, 4, 2, 4, 20, 18),
128 make_param(20, 4, 2, 5, 20, 18),
129 ];
130 let root_params = vec![
131 make_param_with_root(19, 4, 3, 1, 20, 18, 18),
133 make_param_with_root(19, 4, 3, 2, 20, 18, 18),
134 make_param_with_root(19, 4, 3, 3, 20, 18, 18),
135 make_param_with_root(19, 4, 3, 4, 20, 18, 18),
136 make_param_with_root(19, 4, 3, 5, 20, 18, 18),
137 ];
138
139 let tests_dir = output_dir.as_ref();
140 let no_root_path = tests_dir.join("internal_sweep_no_root.json");
141 serde_json::to_writer_pretty(
142 std::fs::File::create(&no_root_path).expect("failed to create internal_sweep_no_root.json"),
143 &no_root_params,
144 )
145 .expect("failed to write internal_sweep_no_root.json");
146 println!(
147 "wrote {} entries to {}",
148 no_root_params.len(),
149 no_root_path.display()
150 );
151
152 let root_path = tests_dir.join("internal_sweep_root.json");
153 serde_json::to_writer_pretty(
154 std::fs::File::create(&root_path).expect("failed to create internal_sweep_root.json"),
155 &root_params,
156 )
157 .expect("failed to write internal_sweep_root.json");
158 println!(
159 "wrote {} entries to {}",
160 root_params.len(),
161 root_path.display()
162 );
163}
164
165fn generate_interesting_root_params(output_dir: impl AsRef<Path>) {
166 let max_log_height = 20;
167 let w_stack = 18;
168 let make_param = |k_whir, log_blowup, l_skip, pow_bits| {
169 let n_stack = max_log_height - l_skip;
170 let proximity = WhirProximityStrategy::ListDecoding { m: 1 };
171 let root = params_with_100_bits_security(
172 log_blowup,
173 l_skip,
174 n_stack,
175 w_stack,
176 pow_bits,
177 pow_bits,
178 proximity,
179 RECURSION_MAX_CONSTRAINT_DEGREE,
180 pow_bits,
181 k_whir,
182 );
183 ParamSet {
184 root: Some(root),
185 ..Default::default()
186 }
187 };
188 let good_params = vec![
189 make_param(4, 2, 1, 20),
191 make_param(4, 2, 4, 20),
192 make_param(4, 2, 5, 20),
193 make_param(4, 3, 1, 20),
194 make_param(4, 3, 2, 20),
195 make_param(4, 3, 3, 20),
196 make_param(4, 3, 5, 20),
197 make_param(3, 4, 1, 20),
199 make_param(3, 4, 2, 20),
200 make_param(3, 4, 4, 20),
201 make_param(3, 3, 1, 20),
202 make_param(3, 3, 3, 20),
203 make_param(3, 3, 5, 20),
204 make_param(4, 4, 2, 15),
206 make_param(4, 4, 2, 18),
207 ];
208
209 let output_path = output_dir.as_ref().join("root_params.json");
210 let file = std::fs::File::create(&output_path).expect("failed to create root_params.json");
211 serde_json::to_writer_pretty(file, &good_params).expect("failed to write root_params.json");
212 println!(
213 "wrote {} good params to {}",
214 good_params.len(),
215 output_path.display()
216 );
217}