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}