Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
chonk_batch_verifier.hpp
Go to the documentation of this file.
1#pragma once
2#ifndef __wasm__
7
8#include <atomic>
9#include <condition_variable>
10#include <deque>
11#include <functional>
12#include <mutex>
13#include <thread>
14#include <vector>
15
16namespace bb {
17
28 public:
29 using ResultCallback = std::function<void(VerifyResult)>;
30
34 struct ReduceResult {
35 uint64_t request_id = 0;
38 bool all_checks_passed = false;
39 std::string error_message;
40 std::chrono::steady_clock::time_point enqueue_time;
41 double reduce_ms = 0;
42 };
43
44 ChonkBatchVerifier() = default;
46
49
58 uint32_t num_cores,
59 uint32_t batch_size,
60 ResultCallback on_result);
61
65 void enqueue(VerifyRequest request);
66
70 void stop();
71
72 private:
73 void coordinator_loop();
75 bool batch_check(const std::vector<ReduceResult>& results, const std::vector<size_t>& indices);
77 std::vector<size_t> indices,
78 uint32_t depth,
79 std::chrono::steady_clock::time_point reduce_start);
80 void emit_ok(const std::vector<ReduceResult>& results,
81 const std::vector<size_t>& indices,
82 std::chrono::steady_clock::time_point reduce_start,
83 double ipa_ms,
84 uint32_t depth);
85
86 static double ms_since(std::chrono::steady_clock::time_point t)
87 {
88 return std::chrono::duration<double, std::milli>(std::chrono::steady_clock::now() - t).count();
89 }
90 static double ms_between(std::chrono::steady_clock::time_point from, std::chrono::steady_clock::time_point to)
91 {
92 return std::chrono::duration<double, std::milli>(to - from).count();
93 }
94
96 uint32_t num_cores_ = 1;
97 uint32_t batch_size_ = 8;
99
100 std::mutex mutex_;
103 bool shutdown_ = false;
105};
106
107} // namespace bb
108#endif // __wasm__
Asynchronous batch verifier for Chonk IVC proofs.
std::vector< ReduceResult > parallel_reduce(const std::vector< VerifyRequest > &batch)
void bisect(std::vector< ReduceResult > &results, std::vector< size_t > indices, uint32_t depth, std::chrono::steady_clock::time_point reduce_start)
static double ms_between(std::chrono::steady_clock::time_point from, std::chrono::steady_clock::time_point to)
ChonkBatchVerifier & operator=(const ChonkBatchVerifier &)=delete
ChonkBatchVerifier(const ChonkBatchVerifier &)=delete
std::function< void(VerifyResult)> ResultCallback
void emit_ok(const std::vector< ReduceResult > &results, const std::vector< size_t > &indices, std::chrono::steady_clock::time_point reduce_start, double ipa_ms, uint32_t depth)
bool batch_check(const std::vector< ReduceResult > &results, const std::vector< size_t > &indices)
static double ms_since(std::chrono::steady_clock::time_point t)
std::vector< std::shared_ptr< MegaZKFlavor::VKAndHash > > vks_
std::deque< VerifyRequest > queue_
void enqueue(VerifyRequest request)
Enqueue a proof for verification.
std::condition_variable cv_
void stop()
Stop the processor, flushing remaining proofs.
ChonkBatchVerifier()=default
void start(std::vector< std::shared_ptr< MegaZKFlavor::VKAndHash > > vks, uint32_t num_cores, uint32_t batch_size, ResultCallback on_result)
Start the coordinator thread.
Unverified claim (C,r,v) for some witness polynomial p(X) such that.
Definition claim.hpp:55
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
std::vector< fr > HonkProof
Definition proof.hpp:15
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
Per-proof result from the reduce phase.
std::chrono::steady_clock::time_point enqueue_time
OpeningClaim< curve::Grumpkin > ipa_claim
A request to verify a single Chonk proof.
Result of verifying a single proof within a batch.