openvm_static_verifier/
config.rs1use halo2_base::gates::circuit::BaseCircuitParams;
2use serde::{Deserialize, Serialize};
3
4pub const STATIC_VERIFIER_NUM_ADVICE_COLS: usize = 1;
5pub const STATIC_VERIFIER_LOOKUP_ADVICE_COLS: usize = 1;
6
7pub const DEFAULT_HALO2_VERIFIER_K: usize = 23;
8pub const ONCHAIN_VERIFIER_NUM_INSTANCE_COLS: usize = 1;
9
10#[derive(Clone, Copy, Debug, Serialize, Deserialize)]
11pub struct StaticVerifierShape {
12 pub k: usize,
13 pub lookup_bits: usize,
14 pub minimum_rows: usize,
15 pub instance_columns: usize,
16}
17
18impl Default for StaticVerifierShape {
19 fn default() -> Self {
20 Self {
21 k: DEFAULT_HALO2_VERIFIER_K,
22 lookup_bits: DEFAULT_HALO2_VERIFIER_K - 1,
23 minimum_rows: 20,
24 instance_columns: 1,
25 }
26 }
27}
28
29impl StaticVerifierShape {
30 pub fn assert_onchain_verifier_supported(&self) {
33 assert_eq!(
34 self.instance_columns, ONCHAIN_VERIFIER_NUM_INSTANCE_COLS,
35 "OpenVM on-chain verifier supports exactly {ONCHAIN_VERIFIER_NUM_INSTANCE_COLS} instance column, got {}",
36 self.instance_columns
37 );
38 }
39
40 pub fn expected_phase0_params(&self) -> BaseCircuitParams {
41 BaseCircuitParams {
42 k: self.k,
43 num_advice_per_phase: vec![STATIC_VERIFIER_NUM_ADVICE_COLS],
44 num_fixed: 1,
45 num_lookup_advice_per_phase: vec![STATIC_VERIFIER_LOOKUP_ADVICE_COLS],
46 lookup_bits: Some(self.lookup_bits),
47 num_instance_columns: self.instance_columns,
48 }
49 }
50}