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 <unordered_set>
15#include <vector>
16
17namespace bb {
18
29 public:
30 using ResultCallback = std::function<void(VerifyResult)>;
31 static constexpr size_t MAX_QUEUE_SIZE = 1024;
32
36 struct ReduceResult {
37 uint64_t request_id = 0;
40 bool all_checks_passed = false;
41 std::string error_message;
42 std::chrono::steady_clock::time_point enqueue_time;
43 double reduce_ms = 0;
44 };
45
46 ChonkBatchVerifier() = default;
48
51
60 uint32_t num_cores,
61 uint32_t batch_size,
62 ResultCallback on_result);
63
67 void enqueue(VerifyRequest request);
68
72 void stop();
73
74 private:
75 void coordinator_loop();
76 void dispatch(VerifyResult result);
78 bool batch_check(const std::vector<ReduceResult>& results, const std::vector<size_t>& indices);
80 std::vector<size_t> indices,
81 uint32_t depth,
82 std::chrono::steady_clock::time_point reduce_start);
83 void emit_ok(const std::vector<ReduceResult>& results,
84 const std::vector<size_t>& indices,
85 std::chrono::steady_clock::time_point reduce_start,
86 double ipa_ms,
87 uint32_t depth);
88
89 static double ms_since(std::chrono::steady_clock::time_point t)
90 {
91 return std::chrono::duration<double, std::milli>(std::chrono::steady_clock::now() - t).count();
92 }
93 static double ms_between(std::chrono::steady_clock::time_point from, std::chrono::steady_clock::time_point to)
94 {
95 return std::chrono::duration<double, std::milli>(to - from).count();
96 }
97
99 uint32_t num_cores_ = 1;
100 uint32_t batch_size_ = 8;
102
103 std::mutex mutex_;
107 std::unordered_set<uint64_t> in_flight_ids_;
108 bool running_ = false;
109 bool shutdown_ = false;
110 bool stopping_ = false;
112};
113
114} // namespace bb
115#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)
void dispatch(VerifyResult result)
bool batch_check(const std::vector< ReduceResult > &results, const std::vector< size_t > &indices)
std::condition_variable stopped_cv_
static double ms_since(std::chrono::steady_clock::time_point t)
static constexpr size_t MAX_QUEUE_SIZE
std::vector< std::shared_ptr< MegaZKFlavor::VKAndHash > > vks_
std::deque< VerifyRequest > queue_
std::unordered_set< uint64_t > in_flight_ids_
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.