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
123 using StdlibVerificationQueue = std::deque<StdlibVerifierInputs>;
124
125 private:
126 // Transcript for Chonk prover (shared between Hiding kernel, Merge, ECCVM, and Translator)
127 std::shared_ptr<Transcript> transcript = std::make_shared<Transcript>();
128
129 // Transcript to be shared across the folding of K_{i-1} (kernel), A_{i} (app)
131
132 size_t num_circuits; // total number of circuits to be accumulated in the IVC
133 public:
134 size_t num_circuits_accumulated = 0; // number of circuits accumulated so far
135
136 ProverAccumulator prover_accumulator; // current HN prover accumulator instance
137
138 HonkProof decider_proof; // decider proof to be verified in the Hiding kernel
139
140 VerifierAccumulator recursive_verifier_native_accum; // native verifier accumulator used in recursive folding
141#ifndef NDEBUG
142 VerifierAccumulator native_verifier_accum; // native verifier accumulator used in prover folding
143 FF native_verifier_accum_hash; // hash of the native verifier accumulator when entering recursive verification
144#endif
145
146 // PARALLEL QUEUES: These two queues must stay synchronized.
147 // - verification_queue: Native proofs created by accumulate() (prover side)
148 // - stdlib_verification_queue: Circuit witnesses for complete_kernel_circuit_logic() (verifier side)
149 // The stdlib queue is populated from the native queue via instantiate_stdlib_verification_queue().
152
153 // Management of linking databus commitments between circuits in the IVC
155
157
159
160 size_t get_num_circuits() const { return num_circuits; }
161
162 // IVCBase interface
163 Goblin& get_goblin() override { return goblin; }
164 const Goblin& get_goblin() const override { return goblin; }
165
166 Chonk(size_t num_circuits);
167
169 const std::vector<std::shared_ptr<RecursiveVKAndHash>>& input_keys = {});
170
171 [[nodiscard("Pairing points should be accumulated")]] std::
174 ClientCircuit& circuit,
175 const StdlibVerifierInputs& verifier_inputs,
176 const std::optional<RecursiveVerifierAccumulator>& input_verifier_accumulator,
177 const TableCommitments& T_prev_commitments,
178 const std::shared_ptr<RecursiveTranscript>& accumulation_recursive_transcript);
179
180 // Complete the logic of a kernel circuit (e.g. HN/merge recursive verification, databus consistency checks)
182
191 void accumulate(ClientCircuit& circuit, const std::shared_ptr<MegaVerificationKey>& precomputed_vk) override;
192
194
196 static void hide_op_queue_content_in_tail(ClientCircuit& circuit);
198
204
205 private:
206#ifndef NDEBUG
213 void update_native_verifier_accumulator(const VerifierInputs& queue_entry,
214 const std::shared_ptr<Transcript>& verifier_transcript);
215
217 const std::shared_ptr<ProverInstance>& prover_instance,
218 const std::shared_ptr<MegaVerificationKey>& precomputed_vk);
219#endif
220
222 const std::shared_ptr<MegaVerificationKey>& verification_key);
223
225};
226
227} // 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:136
Goblin & get_goblin() override
Definition chonk.hpp:163
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:45
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:530
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:564
void complete_kernel_circuit_logic(ClientCircuit &circuit)
Append logic to complete a kernel circuit.
Definition chonk.cpp:246
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:98
VerifierAccumulator native_verifier_accum
Definition chonk.hpp:142
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:572
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:520
std::array< RecursiveFlavor::Commitment, ClientCircuit::NUM_WIRES > TableCommitments
Definition chonk.hpp:72
DataBusDepot bus_depot
Definition chonk.hpp:154
std::shared_ptr< Transcript > transcript
Definition chonk.hpp:127
size_t num_circuits_accumulated
Definition chonk.hpp:134
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:615
HonkProof decider_proof
Definition chonk.hpp:138
Flavor::Curve::AffineElement Point
Definition chonk.hpp:48
FF native_verifier_accum_hash
Definition chonk.hpp:143
size_t get_num_circuits() const
Definition chonk.hpp:160
QUEUE_TYPE
Proof type determining recursive verification logic in kernel circuits.
Definition chonk.hpp:105
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:357
std::deque< StdlibVerifierInputs > StdlibVerificationQueue
Definition chonk.hpp:123
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:508
ChonkProof prove()
Construct Chonk proof, which, if verified, fully establishes the correctness of RCG.
Definition chonk.cpp:547
RecursiveFlavor::FF StdlibFF
Definition chonk.hpp:59
VerifierAccumulator recursive_verifier_native_accum
Definition chonk.hpp:140
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:496
RecursiveFlavor::Commitment RecursiveCommitment
Definition chonk.hpp:60
MegaFlavor::CommitmentKey bn254_commitment_key
Definition chonk.hpp:156
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:397
MegaCircuitBuilder ClientCircuit
Definition chonk.hpp:52
const Goblin & get_goblin() const override
Definition chonk.hpp:164
size_t num_circuits
Definition chonk.hpp:132
std::deque< VerifierInputs > VerificationQueue
Definition chonk.hpp:114
VerificationQueue verification_queue
Definition chonk.hpp:150
Goblin goblin
Definition chonk.hpp:158
std::shared_ptr< Transcript > prover_accumulation_transcript
Definition chonk.hpp:130
StdlibVerificationQueue stdlib_verification_queue
Definition chonk.hpp:151
CommitmentKey object over a pairing group 𝔾₁.
The verification key is responsible for storing the commitments to the precomputed (non-witnessk) pol...
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.
A container for the prover polynomials handles.
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 is responsible for storing the commitments to the precomputed (non-witness) poly...
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:141
A ProverInstance is normally constructed from a finalized circuit and it contains all the information...
Base Stdlib verification key class.
Definition flavor.hpp:353
The verification key is responsible for storing the commitments to the precomputed (non-witnessk) pol...
Wrapper holding a verification key and its precomputed hash.
Definition flavor.hpp:521
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
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
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
An object storing two EC points that represent the inputs to a pairing check.