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 <optional>
14#include <thread>
15#include <unordered_set>
16#include <vector>
17
18namespace bb {
19
30 public:
31 using ResultCallback = std::function<void(VerifyResult)>;
32 static constexpr size_t MAX_QUEUE_SIZE = 1024;
33
47
48 ChonkBatchVerifier() = default;
50
53
62 uint32_t num_cores,
63 uint32_t batch_size,
64 ResultCallback on_result);
65
69 void enqueue(VerifyRequest request);
70
74 void stop();
75
76 private:
77 void coordinator_loop();
80 bool batch_check(const std::vector<ReduceResult>& results, const std::vector<size_t>& indices);
82 std::vector<size_t> indices,
83 uint32_t depth,
84 std::chrono::steady_clock::time_point reduce_start);
85 void emit_ok(const std::vector<ReduceResult>& results,
86 const std::vector<size_t>& indices,
87 std::chrono::steady_clock::time_point reduce_start,
88 double pcs_ms,
89 uint32_t depth);
90
91 static double ms_since(std::chrono::steady_clock::time_point t)
92 {
93 return std::chrono::duration<double, std::milli>(std::chrono::steady_clock::now() - t).count();
94 }
95 static double ms_between(std::chrono::steady_clock::time_point from, std::chrono::steady_clock::time_point to)
96 {
97 return std::chrono::duration<double, std::milli>(to - from).count();
98 }
99
101 uint32_t num_cores_ = 1;
102 uint32_t batch_size_ = 8;
104
105 std::mutex mutex_;
109 std::unordered_set<uint64_t> in_flight_ids_;
110 bool running_ = false;
111 bool shutdown_ = false;
112 bool stopping_ = false;
114};
115
116} // namespace bb
117#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 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.
void emit_ok(const std::vector< ReduceResult > &results, const std::vector< size_t > &indices, std::chrono::steady_clock::time_point reduce_start, double pcs_ms, uint32_t depth)
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.
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
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
typename ECCVMVerifier::DeferredTripleIpaOpening DeferredTripleIpaOpening
std::optional< DeferredTripleIpaOpening > triple_ipa_opening
A request to verify a single Chonk proof.
Result of verifying a single proof within a batch.
VectorField result