Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
eccvm.bench.cpp
Go to the documentation of this file.
1#include <benchmark/benchmark.h>
2
9
10using namespace benchmark;
11using namespace bb;
12
16
17namespace {
18
19Builder generate_trace(size_t target_num_gates)
20{
22 using G1 = typename Flavor::CycleGroup;
23 using Fr = typename G1::Fr;
24
25 auto generators = get_precomputed_generators<G1, "test generators", 2>();
26
27 typename G1::element a = generators[0];
28 typename G1::element b = generators[1];
31
32 // Each loop adds 163 gates. Note: builder.get_estimated_num_finalized_gates() is very expensive here (bug?) and
33 // it's actually painful to use a `while` loop
34 size_t num_iterations = target_num_gates / 163;
35 for (size_t _ = 0; _ < num_iterations; _++) {
36 op_queue->add_accumulate(a);
37 op_queue->mul_accumulate(a, x);
38 op_queue->mul_accumulate(b, x);
39 op_queue->mul_accumulate(b, y);
40 op_queue->add_accumulate(a);
41 op_queue->mul_accumulate(b, x);
42 op_queue->eq_and_reset();
43 op_queue->merge();
44 }
45
47 op_queue->append_hiding_op(Fq::random_element(), Fq::random_element());
48
49 Builder builder{ op_queue };
50 return builder;
51}
52
53void eccvm_generate_prover(State& state) noexcept
54{
55
56 size_t target_num_gates = 1 << static_cast<size_t>(state.range(0));
57 for (auto _ : state) {
58 Builder builder = generate_trace(target_num_gates);
59 std::shared_ptr<Transcript> prover_transcript = std::make_shared<Transcript>();
60 ECCVMProver prover(builder, prover_transcript);
61 };
62}
63
64void eccvm_prove(State& state) noexcept
65{
66
67 size_t target_num_gates = 1 << static_cast<size_t>(state.range(0));
68 Builder builder = generate_trace(target_num_gates);
69 std::shared_ptr<Transcript> prover_transcript = std::make_shared<Transcript>();
70 ECCVMProver prover(builder, prover_transcript);
71 for (auto _ : state) {
72 auto [proof, opening_claim] = prover.construct_proof();
73 auto ipa_transcript = std::make_shared<Transcript>();
74 IPA<Flavor::Curve>::compute_opening_proof(prover.key->commitment_key, opening_claim, ipa_transcript);
75 };
76}
77
78void eccvm_ipa(State& state) noexcept
79{
80 size_t target_num_gates = 1 << static_cast<size_t>(state.range(0));
81 Builder builder = generate_trace(target_num_gates);
82 std::shared_ptr<Transcript> prover_transcript = std::make_shared<Transcript>();
83 ECCVMProver prover(builder, prover_transcript);
84 auto [proof, opening_claim] = prover.construct_proof();
85 for (auto _ : state) {
86 auto ipa_transcript = std::make_shared<Transcript>();
87 IPA<Flavor::Curve>::compute_opening_proof(prover.key->commitment_key, opening_claim, ipa_transcript);
88 };
89}
90
91BENCHMARK(eccvm_generate_prover)->Unit(kMillisecond)->DenseRange(12, CONST_ECCVM_LOG_N);
92BENCHMARK(eccvm_prove)->Unit(kMillisecond)->DenseRange(12, CONST_ECCVM_LOG_N);
93BENCHMARK(eccvm_ipa)->Unit(kMillisecond)->DenseRange(12, CONST_ECCVM_LOG_N);
94} // namespace
95
96int main(int argc, char** argv)
97{
99 benchmark::Initialize(&argc, argv);
100 benchmark::RunSpecifiedBenchmarks();
101 benchmark::Shutdown();
102 return 0;
103}
Common transcript class for both parties. Stores the data for the current round, as well as the manif...
BaseTranscript< Codec, HashFunction > Transcript
std::pair< Proof, OpeningClaim > construct_proof()
std::shared_ptr< ProvingKey > key
IPA (inner product argument) commitment scheme class.
Definition ipa.hpp:86
bb::fq BaseField
Definition bn254.hpp:19
AluTraceBuilder builder
Definition alu.test.cpp:124
FF a
FF b
int main(int argc, char **argv)
std::filesystem::path bb_crs_path()
void init_file_crs_factory(const std::filesystem::path &path)
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
constexpr std::span< const typename Group::affine_element > get_precomputed_generators()
BENCHMARK(bench_commit_structured_random_poly< curve::BN254 >) -> Unit(benchmark::kMillisecond)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
Curve::AffineElement G1
static field random_element(numeric::RNG *engine=nullptr) noexcept