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_crypto_primitives::sponge::poseidon::PoseidonConfig;
 4use ark_grumpkin::{constraints::GVar as GVar2, Projective as Projective2};
 5use ark_poly_commit::kzg10::VerifierKey as KZGVerifierKey;
 6use folding_schemes::{
 7    commitment::{
 8        kzg::{ProverKey as KZGProverKey, KZG},
 9        pedersen::Pedersen,
10        CommitmentScheme,
11    },
12    folding::nova::{get_cs_params_len, ProverParams},
13    transcript::poseidon::poseidon_test_config,
14};
15
16pub fn setup(
17    circuit: BTCBlockCheckerFCircuit<Fr>,
18) -> (
19    ProverParams<Projective, Projective2, KZG<'static, Bn254>, Pedersen<Projective2>>,
20    PoseidonConfig<Fr>,
21    KZGVerifierKey<Bn254>,
22) {
23    let mut rng = ark_std::test_rng();
24    let poseidon_config = poseidon_test_config::<Fr>();
25
26    let (cs_len, cf_cs_len) =
27        get_cs_params_len::<Projective, GVar, Projective2, GVar2, BTCBlockCheckerFCircuit<Fr>>(
28            &poseidon_config,
29            circuit,
30        )
31        .unwrap();
32
33    let (kzg_pk, kzg_vk): (KZGProverKey<Projective>, KZGVerifierKey<Bn254>) =
34        KZG::<Bn254>::setup(&mut rng, cs_len).unwrap();
35    let (cf_pedersen_params, _) = Pedersen::<Projective2>::setup(&mut rng, cf_cs_len).unwrap();
36
37    (
38        ProverParams::<Projective, Projective2, KZG<Bn254>, Pedersen<Projective2>> {
39            poseidon_config: poseidon_config.clone(),
40            cs_params: kzg_pk.clone(),
41            cf_cs_params: cf_pedersen_params,
42        },
43        poseidon_config,
44        kzg_vk,
45    )
46}