use super::StandardComposer;
use crate::commitment_scheme::kzg10::PublicParameters;
use crate::error::Error;
use crate::proof_system::{Prover, Verifier};
use dusk_bls12_381::BlsScalar;
pub(crate) fn dummy_gadget(n: usize, composer: &mut StandardComposer) {
let one = BlsScalar::one();
let var_one = composer.add_input(one);
for _ in 0..n {
composer.big_add(
var_one.into(),
var_one.into(),
None,
BlsScalar::zero(),
None,
);
}
}
pub(crate) fn gadget_tester(
gadget: fn(composer: &mut StandardComposer),
n: usize,
) -> Result<(), Error> {
let public_parameters =
PublicParameters::setup(2 * n, &mut rand::thread_rng())?;
let (proof, public_inputs) = {
let mut prover = Prover::new(b"demo");
prover.key_transcript(b"key", b"additional seed information");
gadget(&mut prover.mut_cs());
let (ck, _) = public_parameters
.trim(2 * prover.cs.circuit_size().next_power_of_two())?;
prover.preprocess(&ck)?;
let public_inputs = prover.cs.construct_dense_pi_vec();
(prover.prove(&ck)?, public_inputs)
};
let mut verifier = Verifier::new(b"demo");
verifier.key_transcript(b"key", b"additional seed information");
gadget(&mut verifier.mut_cs());
let (ck, vk) = public_parameters
.trim(verifier.cs.circuit_size().next_power_of_two())?;
verifier.preprocess(&ck)?;
verifier.verify(&proof, &vk, &public_inputs)
}