Skip to content
Snippets Groups Projects
Verified Commit 0784f294 authored by STEVAN Antoine's avatar STEVAN Antoine :crab:
Browse files

add a manual benchmark to measure the commit

parent 8c91c6d8
No related branches found
No related tags found
1 merge request!69work on the benchmarks
use std::time::Instant;
use ark_ec::CurveGroup;
use ark_ff::PrimeField;
use ark_poly::{univariate::DensePolynomial, DenseUVPolynomial};
use ark_std::{ops::Div, rand::RngCore};
use komodo::zk;
use rand::rngs::ThreadRng;
fn run<F, G, P, R>(degrees: &Vec<usize>, curve: &str)
where
F: PrimeField,
G: CurveGroup<ScalarField = F>,
P: DenseUVPolynomial<F>,
R: RngCore,
for<'a, 'b> &'a P: Div<&'b P, Output = P>,
{
eprintln!("curve: {}", curve);
let rng = &mut rand::thread_rng();
let max_degree = *degrees.iter().max().unwrap_or(&0);
eprint!("building trusted setup for degree {}... ", max_degree);
let setup = zk::setup::<_, F, G>(max_degree, rng).unwrap();
eprintln!("done");
for (i, degree) in degrees.iter().enumerate() {
eprint!(" d: {} [{}/{}]\r", degree, i + 1, degrees.len());
let polynomial = P::rand(*degree, rng);
let start_time = Instant::now();
let _ = zk::commit(&setup, &polynomial);
let end_time = Instant::now();
println!(
"{}: {} -> {}",
curve,
degree,
end_time.duration_since(start_time).as_nanos()
);
}
eprintln!("");
}
/// ## example
/// ```rust
/// measure!(ark_pallas, degrees, G1=Projective, name="PALLAS");
/// ```
/// will produce
/// ```rust
/// run::<ark_pallas::Fr, ark_pallas::Projective, DensePolynomial<ark_pallas::Fr>, ThreadRng>(&degrees, "PALLAS");
/// ```
macro_rules! measure {
($c:ident, $d:ident, G1=$g:ident, name=$n:expr) => {
run::<$c::Fr, $c::$g, DensePolynomial<$c::Fr>, ThreadRng>(&$d, $n);
};
}
fn main() {
let n = 20;
let mut degrees = Vec::with_capacity(n);
let mut cur = 1;
for _ in 1..n {
degrees.push(cur);
cur *= 2;
}
measure!(ark_pallas, degrees, G1 = Projective, name = "PALLAS");
measure!(
ark_bls12_381,
degrees,
G1 = G1Projective,
name = "BLS12-381"
);
measure!(ark_bn254, degrees, G1 = G1Projective, name = "BN-254");
measure!(ark_secp256k1, degrees, G1 = Projective, name = "SECP256-K1");
measure!(ark_secp256r1, degrees, G1 = Projective, name = "SECP256-R1");
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment