1use crate::circuit_hash::CircuitHashType;
2use serde::{Deserialize, Serialize};
3pub mod global_config;
4
5#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq)]
8pub enum ClaimAggregationStrategy {
9 Interpolative,
11 RLC,
13}
14
15#[derive(Serialize, Deserialize, Debug, Clone)]
19pub struct GKRCircuitProverConfig {
20 lazy_beta_evals: bool,
24
25 circuit_description_hash_type: CircuitHashType,
28
29 claim_agg_strategy: ClaimAggregationStrategy,
32
33 claim_agg_constant_column_optimization: bool,
38
39 hyrax_input_layer_batch_opening: bool,
42
43 enable_bit_packing: bool,
52}
53
54impl GKRCircuitProverConfig {
55 pub fn memory_optimized_default() -> Self {
60 Self {
61 lazy_beta_evals: true,
62 circuit_description_hash_type: CircuitHashType::Sha3_256,
63 claim_agg_strategy: ClaimAggregationStrategy::Interpolative,
64 claim_agg_constant_column_optimization: true,
65 hyrax_input_layer_batch_opening: true,
66 enable_bit_packing: true,
67 }
68 }
69
70 pub fn runtime_optimized_default() -> Self {
72 Self {
73 lazy_beta_evals: false,
74 circuit_description_hash_type: CircuitHashType::Sha3_256,
75 claim_agg_strategy: ClaimAggregationStrategy::RLC,
76 claim_agg_constant_column_optimization: true,
77 hyrax_input_layer_batch_opening: true,
78 enable_bit_packing: false,
79 }
80 }
81
82 pub const fn hyrax_compatible_runtime_optimized_default() -> Self {
90 Self {
91 lazy_beta_evals: false,
92 circuit_description_hash_type: CircuitHashType::Sha3_256,
93 claim_agg_strategy: ClaimAggregationStrategy::RLC,
94 claim_agg_constant_column_optimization: false,
95 hyrax_input_layer_batch_opening: true,
96 enable_bit_packing: false,
97 }
98 }
99
100 pub const fn hyrax_compatible_memory_optimized_default() -> Self {
108 Self {
109 lazy_beta_evals: true,
110 circuit_description_hash_type: CircuitHashType::Sha3_256,
111 claim_agg_strategy: ClaimAggregationStrategy::RLC,
112 claim_agg_constant_column_optimization: false,
113 hyrax_input_layer_batch_opening: true,
114 enable_bit_packing: true,
115 }
116 }
117
118 pub fn new(
120 lazy_beta_evals: bool,
121 circuit_description_hash_type: CircuitHashType,
122 claim_agg_strategy: ClaimAggregationStrategy,
123 claim_agg_constant_column_optimization: bool,
124 hyrax_input_layer_batch_opening: bool,
125 enable_bit_packing: bool,
126 ) -> Self {
127 Self {
128 lazy_beta_evals,
129 circuit_description_hash_type,
130 claim_agg_strategy,
131 claim_agg_constant_column_optimization,
132 hyrax_input_layer_batch_opening,
133 enable_bit_packing,
134 }
135 }
136
137 pub fn set_lazy_beta_evals(&mut self, updated_lazy_beta_evals: bool) {
139 self.lazy_beta_evals = updated_lazy_beta_evals;
140 }
141
142 pub fn set_claim_agg_strategy(&mut self, updated_claim_agg_strategy: ClaimAggregationStrategy) {
144 self.claim_agg_strategy = updated_claim_agg_strategy;
145 }
146
147 pub fn set_circuit_description_hash_type(
149 &mut self,
150 updated_circuit_description_hash_type: CircuitHashType,
151 ) {
152 self.circuit_description_hash_type = updated_circuit_description_hash_type;
153 }
154
155 pub fn set_claim_agg_constant_column_optimization(
157 &mut self,
158 updated_claim_agg_constant_column_optimization: bool,
159 ) {
160 self.claim_agg_constant_column_optimization =
161 updated_claim_agg_constant_column_optimization;
162 }
163
164 pub fn set_enable_bit_packing(&mut self, updated_enable_bit_packing: bool) {
166 self.enable_bit_packing = updated_enable_bit_packing;
167 }
168
169 pub fn get_lazy_beta_evals(&self) -> bool {
171 self.lazy_beta_evals
172 }
173
174 pub fn get_claim_agg_strategy(&self) -> ClaimAggregationStrategy {
176 self.claim_agg_strategy
177 }
178
179 pub fn get_circuit_description_hash_type(&self) -> CircuitHashType {
181 self.circuit_description_hash_type
182 }
183
184 pub fn get_claim_agg_constant_column_optimization(&self) -> bool {
186 self.claim_agg_constant_column_optimization
187 }
188
189 pub fn get_hyrax_batch_opening(&self) -> bool {
191 self.hyrax_input_layer_batch_opening
192 }
193
194 pub fn get_enable_bit_packing(&self) -> bool {
196 self.enable_bit_packing
197 }
198}
199
200#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
203pub struct GKRCircuitVerifierConfig {
204 lazy_beta_evals: bool,
208
209 circuit_description_hash_type: CircuitHashType,
212
213 claim_agg_strategy: ClaimAggregationStrategy,
216
217 claim_agg_constant_column_optimization: bool,
222}
223
224impl GKRCircuitVerifierConfig {
225 pub fn new_from_prover_config(
228 prover_config: &GKRCircuitProverConfig,
229 verifier_lazy_beta_evals: bool,
230 ) -> Self {
231 Self {
232 lazy_beta_evals: verifier_lazy_beta_evals,
233 claim_agg_strategy: prover_config.claim_agg_strategy,
234 circuit_description_hash_type: prover_config.circuit_description_hash_type,
235 claim_agg_constant_column_optimization: prover_config
236 .claim_agg_constant_column_optimization,
237 }
238 }
239
240 pub const fn new(
242 lazy_beta_evals: bool,
243 circuit_description_hash_type: CircuitHashType,
244 claim_agg_strategy: ClaimAggregationStrategy,
245 claim_agg_constant_column_optimization: bool,
246 ) -> Self {
247 Self {
248 lazy_beta_evals,
249 circuit_description_hash_type,
250 claim_agg_strategy,
251 claim_agg_constant_column_optimization,
252 }
253 }
254
255 pub fn new_from_proof_config(
258 proof_config: &ProofConfig,
259 verifier_lazy_beta_evals: bool,
260 ) -> Self {
261 Self {
262 lazy_beta_evals: verifier_lazy_beta_evals,
263 claim_agg_strategy: proof_config.claim_agg_strategy,
264 claim_agg_constant_column_optimization: proof_config
265 .claim_agg_constant_column_optimization,
266 circuit_description_hash_type: proof_config.circuit_description_hash_type,
267 }
268 }
269
270 pub const fn hyrax_compatible_runtime_optimized_default() -> Self {
276 Self {
277 lazy_beta_evals: false,
278 circuit_description_hash_type: CircuitHashType::Sha3_256,
279 claim_agg_strategy: ClaimAggregationStrategy::RLC,
280 claim_agg_constant_column_optimization: false,
281 }
282 }
283
284 pub fn set_lazy_beta_evals(&mut self, updated_lazy_beta_evals: bool) {
286 self.lazy_beta_evals = updated_lazy_beta_evals;
287 }
288
289 pub fn set_claim_agg_strategy(&mut self, updated_claim_agg_strategy: ClaimAggregationStrategy) {
291 self.claim_agg_strategy = updated_claim_agg_strategy;
292 }
293
294 pub fn set_circuit_description_hash_type(
296 &mut self,
297 updated_circuit_description_hash_type: CircuitHashType,
298 ) {
299 self.circuit_description_hash_type = updated_circuit_description_hash_type;
300 }
301
302 pub fn set_claim_agg_constant_column_optimization(
304 &mut self,
305 updated_claim_agg_constant_column_optimization: bool,
306 ) {
307 self.claim_agg_constant_column_optimization =
308 updated_claim_agg_constant_column_optimization;
309 }
310
311 pub fn get_lazy_beta_evals(&self) -> bool {
313 self.lazy_beta_evals
314 }
315
316 pub fn get_claim_agg_strategy(&self) -> ClaimAggregationStrategy {
318 self.claim_agg_strategy
319 }
320
321 pub fn get_circuit_description_hash_type(&self) -> CircuitHashType {
323 self.circuit_description_hash_type
324 }
325
326 pub fn get_claim_agg_constant_column_optimization(&self) -> bool {
328 self.claim_agg_constant_column_optimization
329 }
330}
331
332#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
338pub struct ProofConfig {
339 circuit_description_hash_type: CircuitHashType,
342
343 claim_agg_strategy: ClaimAggregationStrategy,
346
347 claim_agg_constant_column_optimization: bool,
352}
353impl ProofConfig {
354 pub fn new_from_prover_config(prover_config: &GKRCircuitProverConfig) -> Self {
360 Self {
361 circuit_description_hash_type: prover_config.circuit_description_hash_type,
362 claim_agg_strategy: prover_config.claim_agg_strategy,
363 claim_agg_constant_column_optimization: prover_config
364 .claim_agg_constant_column_optimization,
365 }
366 }
367
368 pub fn set_claim_agg_strategy(&mut self, updated_claim_agg_strategy: ClaimAggregationStrategy) {
370 self.claim_agg_strategy = updated_claim_agg_strategy;
371 }
372
373 pub fn set_circuit_description_hash_type(
375 &mut self,
376 updated_circuit_description_hash_type: CircuitHashType,
377 ) {
378 self.circuit_description_hash_type = updated_circuit_description_hash_type;
379 }
380
381 pub fn set_claim_agg_constant_column_optimization(
383 &mut self,
384 updated_claim_agg_constant_column_optimization: bool,
385 ) {
386 self.claim_agg_constant_column_optimization =
387 updated_claim_agg_constant_column_optimization;
388 }
389
390 pub fn get_claim_agg_strategy(&self) -> ClaimAggregationStrategy {
392 self.claim_agg_strategy
393 }
394
395 pub fn get_circuit_description_hash_type(&self) -> CircuitHashType {
397 self.circuit_description_hash_type
398 }
399
400 pub fn get_claim_agg_constant_column_optimization(&self) -> bool {
402 self.claim_agg_constant_column_optimization
403 }
404}