Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
chonk.bench.cpp
Go to the documentation of this file.
1
6#include <benchmark/benchmark.h>
7#include <chrono>
8
13
14using namespace benchmark;
15using namespace bb;
16
17namespace {
18
22class ChonkBench : public benchmark::Fixture {
23 public:
24 // Number of function circuits to accumulate (based on Zac's target numbers)
25 static constexpr size_t NUM_ITERATIONS_MEDIUM_COMPLEXITY = 5;
26
27 void SetUp([[maybe_unused]] const ::benchmark::State& state) override
28 {
30 }
31};
32
36BENCHMARK_DEFINE_F(ChonkBench, VerificationOnly)(benchmark::State& state)
37{
38 size_t NUM_APP_CIRCUITS = 1;
39 auto precomputed_vks = precompute_vks(NUM_APP_CIRCUITS);
40 auto [proof, vk_and_hash] = accumulate_and_prove_with_precomputed_vks(NUM_APP_CIRCUITS, precomputed_vks);
41
42 for (auto _ : state) {
43 ChonkNativeVerifier verifier(vk_and_hash);
44 benchmark::DoNotOptimize(verifier.verify(proof));
45 }
46}
47
51BENCHMARK_DEFINE_F(ChonkBench, Full)(benchmark::State& state)
52{
53 size_t NUM_APP_CIRCUITS = static_cast<size_t>(state.range(0));
54 auto precomputed_vks = precompute_vks(NUM_APP_CIRCUITS);
55
56 for (auto _ : state) {
58 accumulate_and_prove_with_precomputed_vks(NUM_APP_CIRCUITS, precomputed_vks);
59 }
60}
61
65BENCHMARK_DEFINE_F(ChonkBench, ProofCompress)(benchmark::State& state)
66{
67 size_t NUM_APP_CIRCUITS = 1;
68 auto precomputed_vks = precompute_vks(NUM_APP_CIRCUITS);
69 auto [proof, vk_and_hash] = accumulate_and_prove_with_precomputed_vks(NUM_APP_CIRCUITS, precomputed_vks);
70
71 for (auto _ : state) {
72 benchmark::DoNotOptimize(ProofCompressor::compress_chonk_proof(proof));
73 }
74}
75
79BENCHMARK_DEFINE_F(ChonkBench, ProofDecompress)(benchmark::State& state)
80{
81 size_t NUM_APP_CIRCUITS = 1;
82 auto precomputed_vks = precompute_vks(NUM_APP_CIRCUITS);
83 auto [proof, vk_and_hash] = accumulate_and_prove_with_precomputed_vks(NUM_APP_CIRCUITS, precomputed_vks);
84
85 auto compressed = ProofCompressor::compress_chonk_proof(proof);
86 size_t mega_num_pub_inputs = proof.mega_proof.size() - ChonkProof::HIDING_KERNEL_PROOF_LENGTH_WITHOUT_PUBLIC_INPUTS;
87
88 for (auto _ : state) {
89 benchmark::DoNotOptimize(ProofCompressor::decompress_chonk_proof(compressed, mega_num_pub_inputs));
90 }
91}
92
93#define ARGS Arg(ChonkBench::NUM_ITERATIONS_MEDIUM_COMPLEXITY)->Arg(2)
94
95BENCHMARK_REGISTER_F(ChonkBench, Full)->Unit(benchmark::kMillisecond)->ARGS;
96BENCHMARK_REGISTER_F(ChonkBench, VerificationOnly)->Unit(benchmark::kMillisecond);
97BENCHMARK_REGISTER_F(ChonkBench, ProofCompress)->Unit(benchmark::kMillisecond);
98BENCHMARK_REGISTER_F(ChonkBench, ProofDecompress)->Unit(benchmark::kMillisecond);
99
100} // namespace
101
BENCHMARK_MAIN()
Verifier for Chonk IVC proofs (both native and recursive).
static std::vector< uint8_t > compress_chonk_proof(const ChonkProof &proof)
static ChonkProof decompress_chonk_proof(const std::vector< uint8_t > &compressed, size_t mega_num_public_inputs)
#define GOOGLE_BB_BENCH_REPORTER(state)
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
std::pair< ChonkProof, std::shared_ptr< MegaZKFlavor::VKAndHash > > accumulate_and_prove_with_precomputed_vks(size_t num_app_circuits, auto &precomputed_vks, const bool large_first_app=true)
Perform a specified number of circuit accumulation rounds.
std::vector< std::shared_ptr< typename MegaFlavor::VerificationKey > > precompute_vks(const size_t num_app_circuits, const bool large_first_app=true)
static constexpr size_t HIDING_KERNEL_PROOF_LENGTH_WITHOUT_PUBLIC_INPUTS