arnaucube
arnaucube/sonobe-light-btcPublic Self-hosted repository
sonobe-light-btc/src/utils.rs
src/utils.rsRaw
 1use crate::BTCBlockCheckerFCircuit;
 2use ark_bn254::{constraints::GVar, Bn254, Fr, G1Projective as Projective};
 3use ark_grumpkin::{constraints::GVar as GVar2, Projective as Projective2};
 4use ark_poly_commit::kzg10::VerifierKey as KZGVerifierKey;
 5use folding_schemes::{
 6    commitment::{
 7        kzg::{ProverKey as KZGProverKey, KZG},
 8        pedersen::Pedersen,
 9        CommitmentScheme,
10    },
11    folding::nova::{get_cs_params_len, ProverParams},
12    transcript::poseidon::poseidon_test_config,
13};
14
15pub fn setup(
16    circuit: BTCBlockCheckerFCircuit<Fr>,
17) -> (
18    ProverParams<Projective, Projective2, KZG<'static, Bn254>, Pedersen<Projective2>>,
19    KZGVerifierKey<Bn254>,
20) {
21    let mut rng = ark_std::test_rng();
22    let poseidon_config = poseidon_test_config::<Fr>();
23
24    let (cs_len, cf_cs_len) =
25        get_cs_params_len::<Projective, GVar, Projective2, GVar2, BTCBlockCheckerFCircuit<Fr>>(
26            &poseidon_config,
27            circuit,
28        )
29        .unwrap();
30
31    let (kzg_pk, kzg_vk): (KZGProverKey<Projective>, KZGVerifierKey<Bn254>) =
32        KZG::<Bn254>::setup(&mut rng, cs_len).unwrap();
33    let (cf_pedersen_params, _) = Pedersen::<Projective2>::setup(&mut rng, cf_cs_len).unwrap();
34
35    (
36        ProverParams::<Projective, Projective2, KZG<Bn254>, Pedersen<Projective2>> {
37            poseidon_config: poseidon_config.clone(),
38            cs_params: kzg_pk.clone(),
39            cf_cs_params: cf_pedersen_params,
40        },
41        kzg_vk,
42    )
43}