-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrun_setup.rs
97 lines (84 loc) · 2.8 KB
/
run_setup.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
use ark_ec::pairing::Pairing;
use ark_ff::FftField;
use ark_poly::{
univariate::DensePolynomial, DenseUVPolynomial, EvaluationDomain, GeneralEvaluationDomain,
};
use mock_cq_setup::{
compute_g_powers, compute_qs, compute_tau_powers, deserialize_vec, lagrange_commitments,
lagrange_openings_commitments_at_zero,
};
use std::env;
use std::time::Instant;
// Given N, runs the setup
fn run<E: Pairing>(n: usize, tau: E::ScalarField, table_path: &str) {
let now = Instant::now();
let powers_of_tau = compute_tau_powers(tau, n);
let elapsed_time = now.elapsed();
println!(
"Running compute_tau_powers() took {} seconds.",
elapsed_time.as_secs()
);
let now = Instant::now();
let _ = lagrange_commitments::<E::G1>(tau, n as u64);
let elapsed_time = now.elapsed();
println!(
"Running lagrange_commitments() took {} seconds.",
elapsed_time.as_secs()
);
let now = Instant::now();
let _ = lagrange_openings_commitments_at_zero::<E::G1>(tau, n);
let elapsed_time = now.elapsed();
println!(
"Running lagrange_openings_commitments_at_zero() took {} seconds.",
elapsed_time.as_secs()
);
let now = Instant::now();
let _ = compute_g_powers::<E::G1>(tau, n);
let elapsed_time = now.elapsed();
println!(
"Running compute_g_powers G1() took {} seconds.",
elapsed_time.as_secs()
);
let now = Instant::now();
let _ = compute_g_powers::<E::G2>(tau, n + 1);
let elapsed_time = now.elapsed();
println!(
"Running compute_g_powers G2() took {} seconds.",
elapsed_time.as_secs()
);
let now = Instant::now();
let t = read_table::<E::ScalarField>(table_path);
let domain = GeneralEvaluationDomain::<E::ScalarField>::new(n).unwrap();
let _ = compute_qs::<E>(&t, &domain, &powers_of_tau);
let elapsed_time = now.elapsed();
println!(
"Running compute_qs took {} seconds.",
elapsed_time.as_secs()
);
}
fn read_table<F: FftField>(path: &str) -> DensePolynomial<F> {
let table_coeffs = deserialize_vec::<F>(path);
DensePolynomial::from_coefficients_vec(table_coeffs)
}
fn parse_args<F: FftField>() -> (u64, F, String) {
let args: Vec<String> = env::args().collect();
let to_u64 = |arg: &String| -> u64 {
match arg.parse::<u64>() {
Ok(arg) => arg,
Err(_) => {
panic!("Failed to parse argument as u64.");
}
}
};
let k = to_u64(&args[1]);
let tau = to_u64(&args[2]);
let n = 1 << k;
let tau = F::from(tau);
(n, tau, args[3].clone())
}
use ark_bn254::{Bn254, Fr};
// cargo run --bin run_setup {k} {tau} -- --features=parallel
fn main() {
let (n, tau, table_path) = parse_args::<Fr>();
run::<Bn254>(n as usize, tau, table_path.as_str());
}