mirror of
https://github.com/arnaucube/Nova.git
synced 2026-01-12 00:51:28 +01:00
Improve performance of recursive (#163)
* Improve performance of recursive * Fix the test after rebase * Fix CI/CD warnings * Update benchmark to work with new interface of RecursiveSNARK * Fix example to make sure step 1 is correct * refactor: Removes unneeded pass-by value in verification - Update function arguments to use borrowing instead of passing ownership * Resolve the conflict with upstream branch * refactor: Avoid extra input cloning in RecursiveSNARK::new * Update criterion to 0.5.1 to prevent the panic with its plot * Fix benchmark issue with new recursive_snark instance * Fix CI/CD warning with * refactor: Make mutation easier to observe - Utilize mutable references to Points for better memory management * chore: Downgrade clippy dependency for compatibility --------- Co-authored-by: François Garillot <francois@garillot.net>
This commit is contained in:
@@ -172,7 +172,7 @@ fn main() {
|
||||
G2,
|
||||
MinRootCircuit<<G1 as Group>::Scalar>,
|
||||
TrivialTestCircuit<<G2 as Group>::Scalar>,
|
||||
>::setup(circuit_primary, circuit_secondary.clone());
|
||||
>::setup(circuit_primary.clone(), circuit_secondary.clone());
|
||||
println!("PublicParams::setup, took {:?} ", start.elapsed());
|
||||
|
||||
println!(
|
||||
@@ -218,15 +218,20 @@ fn main() {
|
||||
type C2 = TrivialTestCircuit<<G2 as Group>::Scalar>;
|
||||
// produce a recursive SNARK
|
||||
println!("Generating a RecursiveSNARK...");
|
||||
let mut recursive_snark: Option<RecursiveSNARK<G1, G2, C1, C2>> = None;
|
||||
let mut recursive_snark: RecursiveSNARK<G1, G2, C1, C2> = RecursiveSNARK::<G1, G2, C1, C2>::new(
|
||||
&pp,
|
||||
&minroot_circuits[0],
|
||||
&circuit_secondary,
|
||||
z0_primary.clone(),
|
||||
z0_secondary.clone(),
|
||||
);
|
||||
|
||||
for (i, circuit_primary) in minroot_circuits.iter().take(num_steps).enumerate() {
|
||||
let start = Instant::now();
|
||||
let res = RecursiveSNARK::prove_step(
|
||||
let res = recursive_snark.prove_step(
|
||||
&pp,
|
||||
recursive_snark,
|
||||
circuit_primary.clone(),
|
||||
circuit_secondary.clone(),
|
||||
circuit_primary,
|
||||
&circuit_secondary,
|
||||
z0_primary.clone(),
|
||||
z0_secondary.clone(),
|
||||
);
|
||||
@@ -237,16 +242,12 @@ fn main() {
|
||||
res.is_ok(),
|
||||
start.elapsed()
|
||||
);
|
||||
recursive_snark = Some(res.unwrap());
|
||||
}
|
||||
|
||||
assert!(recursive_snark.is_some());
|
||||
let recursive_snark = recursive_snark.unwrap();
|
||||
|
||||
// verify the recursive SNARK
|
||||
println!("Verifying a RecursiveSNARK...");
|
||||
let start = Instant::now();
|
||||
let res = recursive_snark.verify(&pp, num_steps, z0_primary.clone(), z0_secondary.clone());
|
||||
let res = recursive_snark.verify(&pp, num_steps, &z0_primary, &z0_secondary);
|
||||
println!(
|
||||
"RecursiveSNARK::verify: {:?}, took {:?}",
|
||||
res.is_ok(),
|
||||
|
||||
Reference in New Issue
Block a user