Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
chonk.hpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: Complete, auditors: [Sergei], commit: }
3// external_1: { status: not started, auditors: [], commit: }
4// external_2: { status: not started, auditors: [], commit: }
5// =====================
6
7#pragma once
8
22#ifndef NDEBUG
24#endif
25#include <algorithm>
26
27namespace bb {
28
38class Chonk : public IVCBase {
39 // CHONK: "Client Honk" - An UltraHonk variant with incremental folding and delayed non-native arithmetic.
40
41 public:
45 using FF = Flavor::FF;
48 using Point = Flavor::Curve::AffineElement;
52 using ClientCircuit = MegaCircuitBuilder; // can only be Mega
57 // Recursive types
73 // Folding
82
105 enum class QUEUE_TYPE : uint8_t { OINK, HN, HN_TAIL, HN_FINAL, MEGA };
106
107 // An entry in the native verification queue
109 std::vector<FF> proof; // oink or HN
112 bool is_kernel = false;
113 };
114 using VerificationQueue = std::deque<VerifierInputs>;
115
116 // An entry in the stdlib verification queue
118 StdlibProof proof; // oink or HN
121 bool is_kernel = false;
122
123 // Explicit constructor needed for older libc++ (iOS SDK) compatibility with std::deque::emplace_back
125 std::shared_ptr<RecursiveVKAndHash> honk_vk_and_hash_,
126 QUEUE_TYPE type_,
127 bool is_kernel_)
128 : proof(std::move(proof_))
129 , honk_vk_and_hash(std::move(honk_vk_and_hash_))
130 , type(type_)
131 , is_kernel(is_kernel_)
132 {}
133 };
134 using StdlibVerificationQueue = std::deque<StdlibVerifierInputs>;
135
136 private:
137 // Transcript for Chonk prover (shared between Hiding kernel, Merge, ECCVM, and Translator)
138 std::shared_ptr<Transcript> transcript = std::make_shared<Transcript>();
139
140 // Transcript to be shared across the folding of K_{i-1} (kernel), A_{i} (app)
142
143 size_t num_circuits; // total number of circuits to be accumulated in the IVC
144 public:
145 size_t num_circuits_accumulated = 0; // number of circuits accumulated so far
146
147 ProverAccumulator prover_accumulator; // current HN prover accumulator instance
148
149 HonkProof decider_proof; // decider proof to be verified in the Hiding kernel
150
151 VerifierAccumulator recursive_verifier_native_accum; // native verifier accumulator used in recursive folding
152#ifndef NDEBUG
153 VerifierAccumulator native_verifier_accum; // native verifier accumulator used in prover folding
154 FF native_verifier_accum_hash; // hash of the native verifier accumulator when entering recursive verification
157#endif
158
159 // PARALLEL QUEUES: These two queues must stay synchronized.
160 // - verification_queue: Native proofs created by accumulate() (prover side)
161 // - stdlib_verification_queue: Circuit witnesses for complete_kernel_circuit_logic() (verifier side)
162 // The stdlib queue is populated from the native queue via instantiate_stdlib_verification_queue().
165
166 // Management of linking databus commitments between circuits in the IVC
168
170
171 size_t get_num_circuits() const { return num_circuits; }
172
173 // IVCBase interface
174 Goblin& get_goblin() override { return goblin; }
175 const Goblin& get_goblin() const override { return goblin; }
176
177 Chonk(size_t num_circuits);
178
180 const std::vector<std::shared_ptr<RecursiveVKAndHash>>& input_keys = {});
181
182 [[nodiscard("Pairing points should be accumulated")]] std::
185 ClientCircuit& circuit,
186 const StdlibVerifierInputs& verifier_inputs,
187 const std::optional<RecursiveVerifierAccumulator>& input_verifier_accumulator,
188 const TableCommitments& T_prev_commitments,
189 const std::shared_ptr<RecursiveTranscript>& accumulation_recursive_transcript);
190
191 // Complete the logic of a kernel circuit (e.g. HN/merge recursive verification, databus consistency checks)
193
202 void accumulate(ClientCircuit& circuit, const std::shared_ptr<MegaVerificationKey>& precomputed_vk) override;
203
205
207 static void hide_op_queue_content_in_tail(ClientCircuit& circuit);
209
215
216 private:
217#ifndef NDEBUG
224 void update_native_verifier_accumulator(const VerifierInputs& queue_entry,
225 const std::shared_ptr<Transcript>& verifier_transcript);
226
228 const std::shared_ptr<ProverInstance>& prover_instance,
229 const std::shared_ptr<MegaVerificationKey>& precomputed_vk);
230#endif
231
233 const std::shared_ptr<MegaVerificationKey>& verification_key);
234
236};
237
238} // namespace bb
Common transcript class for both parties. Stores the data for the current round, as well as the manif...
The IVC scheme used by the aztec client for private function execution.
Definition chonk.hpp:38
ProverAccumulator prover_accumulator
Definition chonk.hpp:147
Goblin & get_goblin() override
Definition chonk.hpp:174
void instantiate_stdlib_verification_queue(ClientCircuit &circuit, const std::vector< std::shared_ptr< RecursiveVKAndHash > > &input_keys={})
Instantiate a stdlib verification queue for use in the kernel completion logic.
Definition chonk.cpp:39
HonkProof construct_honk_proof_for_hiding_kernel(ClientCircuit &circuit, const std::shared_ptr< MegaVerificationKey > &verification_key)
Construct a zero-knowledge proof for the Hiding kernel, which recursively verifies the last folding,...
Definition chonk.cpp:532
std::shared_ptr< MegaZKFlavor::VKAndHash > get_hiding_kernel_vk_and_hash() const
Get the hiding kernel verification key and hash for Chonk verification.
Definition chonk.cpp:571
void complete_kernel_circuit_logic(ClientCircuit &circuit)
Append logic to complete a kernel circuit.
Definition chonk.cpp:240
std::tuple< std::optional< RecursiveVerifierAccumulator >, std::vector< PairingPoints >, TableCommitments > perform_recursive_verification_and_databus_consistency_checks(ClientCircuit &circuit, const StdlibVerifierInputs &verifier_inputs, const std::optional< RecursiveVerifierAccumulator > &input_verifier_accumulator, const TableCommitments &T_prev_commitments, const std::shared_ptr< RecursiveTranscript > &accumulation_recursive_transcript)
Populate the provided circuit with constraints for (1) recursive verification of the provided accumul...
Definition chonk.cpp:92
VerifierAccumulator native_verifier_accum
Definition chonk.hpp:153
void update_native_verifier_accumulator(const VerifierInputs &queue_entry, const std::shared_ptr< Transcript > &verifier_transcript)
Update native verifier accumulator. Useful for debugging.
Definition chonk.cpp:579
static void hide_op_queue_content_in_hiding(ClientCircuit &circuit)
Adds two random non-ops to the hiding kernel for zero-knowledge.
Definition chonk.cpp:522
std::array< RecursiveFlavor::Commitment, ClientCircuit::NUM_WIRES > TableCommitments
Definition chonk.hpp:72
DataBusDepot bus_depot
Definition chonk.hpp:167
std::shared_ptr< Transcript > transcript
Definition chonk.hpp:138
size_t num_circuits_accumulated
Definition chonk.hpp:145
Flavor::Commitment Commitment
Definition chonk.hpp:46
void debug_incoming_circuit(ClientCircuit &circuit, const std::shared_ptr< ProverInstance > &prover_instance, const std::shared_ptr< MegaVerificationKey > &precomputed_vk)
Definition chonk.cpp:628
HonkProof decider_proof
Definition chonk.hpp:149
Flavor::Curve::AffineElement Point
Definition chonk.hpp:48
FF native_verifier_accum_hash
Definition chonk.hpp:154
size_t get_num_circuits() const
Definition chonk.hpp:171
QUEUE_TYPE
Proof type determining recursive verification logic in kernel circuits.
Definition chonk.hpp:105
bool has_last_app_been_accumulated
Definition chonk.hpp:156
QUEUE_TYPE get_queue_type() const
Get queue type for the proof of a circuit about to be accumulated based on num circuits accumulated s...
Definition chonk.cpp:351
std::deque< StdlibVerifierInputs > StdlibVerificationQueue
Definition chonk.hpp:134
static void hide_op_queue_content_in_tail(ClientCircuit &circuit)
Adds three random non-ops to the tail kernel for zero-knowledge.
Definition chonk.cpp:510
ChonkProof prove()
Construct Chonk proof, which, if verified, fully establishes the correctness of RCG.
Definition chonk.cpp:554
RecursiveFlavor::FF StdlibFF
Definition chonk.hpp:59
VerifierAccumulator recursive_verifier_native_accum
Definition chonk.hpp:151
bool is_previous_circuit_a_kernel
Definition chonk.hpp:155
static void hide_op_queue_accumulation_result(ClientCircuit &circuit)
Add a hiding op with fully random Px, Py field elements to prevent information leakage in Translator ...
Definition chonk.cpp:498
RecursiveFlavor::Commitment RecursiveCommitment
Definition chonk.hpp:60
void accumulate(ClientCircuit &circuit, const std::shared_ptr< MegaVerificationKey > &precomputed_vk) override
Perform prover work for accumulation (e.g. HN folding, merge proving)
Definition chonk.cpp:391
MegaCircuitBuilder ClientCircuit
Definition chonk.hpp:52
const Goblin & get_goblin() const override
Definition chonk.hpp:175
size_t num_circuits
Definition chonk.hpp:143
std::deque< VerifierInputs > VerificationQueue
Definition chonk.hpp:114
VerificationQueue verification_queue
Definition chonk.hpp:163
Goblin goblin
Definition chonk.hpp:169
std::shared_ptr< Transcript > prover_accumulation_transcript
Definition chonk.hpp:141
StdlibVerificationQueue stdlib_verification_queue
Definition chonk.hpp:164
FixedVKAndHash_< PrecomputedEntities< Commitment >, BF, ECCVMHardcodedVKAndHash > VerificationKey
The verification key stores commitments to the precomputed polynomials used by the verifier.
Simple verification key class for fixed-size circuits (ECCVM, Translator, AVM).
Definition flavor.hpp:101
HyperNova decider prover. Produces final opening proof for the accumulated claim.
HyperNova decider verifier (native + recursive). Verifies final opening proof.
HyperNova folding prover. Folds circuit instances into accumulators, deferring PCS verification.
MultilinearBatchingProverClaim Accumulator
HyperNova folding verifier (native + recursive). Verifies folding proofs and maintains accumulators.
MultilinearBatchingVerifierClaim< Curve > Accumulator
Base class interface for IVC schemes.
Container for all witness polynomials used/constructed by the prover.
Curve::ScalarField FF
ProverPolynomials_< HasZK > ProverPolynomials
Curve::AffineElement Commitment
NativeVerificationKey_< PrecomputedEntities< Commitment >, Codec, HashFunction, CommitmentKey > VerificationKey
The verification key stores commitments to the precomputed (non-witness) polynomials used by the veri...
The recursive counterpart to the "native" Mega flavor.
StdlibTranscript< CircuitBuilder > Transcript
typename Curve::Element Commitment
StdlibVerificationKey_< CircuitBuilder, NativeFlavor::PrecomputedEntities< Commitment >, NativeFlavor::VerificationKey > VerificationKey
typename Curve::ScalarField FF
VKAndHash_< FF, VerificationKey > VKAndHash
MegaFlavor::WitnessEntities< Commitment > WitnessCommitments
A container for the witness commitments.
Base Native verification key class.
Definition flavor.hpp:135
Contains all the information required by a Honk prover to create a proof, constructed from a finalize...
A container for polynomials handles used by the prover.
Base Stdlib verification key class.
Definition flavor.hpp:371
FixedVKAndHash_< VKEntities< Commitment >, FF, TranslatorHardcodedVKAndHash > VerificationKey
The verification key stores commitments to the precomputed polynomials used by the verifier.
Wrapper holding a verification key and its precomputed hash.
Definition flavor.hpp:541
The VerifierInstance encapsulates all the necessary information for a Honk Verifier to verify a proof...
Manages the data that is propagated on the public inputs of an application/function circuit.
Manages the data that is propagated on the public inputs of a hiding kernel circuit.
Manages the data that is propagated on the public inputs of a kernel circuit.
DefaultIO< MegaCircuitBuilder > AppIO
The data that is propagated on the public inputs of an application/function circuit.
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
std::vector< fr > HonkProof
Definition proof.hpp:15
ChonkProof_< false > ChonkProof
BaseTranscript< FrCodec, bb::crypto::Poseidon2< bb::crypto::Poseidon2Bn254ScalarFieldParams > > NativeTranscript
MegaCircuitBuilder_< field< Bn254FrParams > > MegaCircuitBuilder
STL namespace.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
StdlibVerifierInputs(StdlibProof proof_, std::shared_ptr< RecursiveVKAndHash > honk_vk_and_hash_, QUEUE_TYPE type_, bool is_kernel_)
Definition chonk.hpp:124
std::shared_ptr< RecursiveVKAndHash > honk_vk_and_hash
Definition chonk.hpp:119
std::shared_ptr< MegaVerificationKey > honk_vk
Definition chonk.hpp:110
std::vector< FF > proof
Definition chonk.hpp:109
Prover's claim for multilinear batching - contains polynomials and their evaluation claims.
Verifier's claim for multilinear batching - contains commitments and evaluation claims.
An object storing two EC points that represent the inputs to a pairing check.