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
146#endif
147
148 // PARALLEL QUEUES: These two queues must stay synchronized.
149 // - verification_queue: Native proofs created by accumulate() (prover side)
150 // - stdlib_verification_queue: Circuit witnesses for complete_kernel_circuit_logic() (verifier side)
151 // The stdlib queue is populated from the native queue via instantiate_stdlib_verification_queue().
154
155 // Management of linking databus commitments between circuits in the IVC
157
159
161
162 size_t get_num_circuits() const { return num_circuits; }
163
164 // IVCBase interface
165 Goblin& get_goblin() override { return goblin; }
166 const Goblin& get_goblin() const override { return goblin; }
167
168 Chonk(size_t num_circuits);
169
171 const std::vector<std::shared_ptr<RecursiveVKAndHash>>& input_keys = {});
172
173 [[nodiscard("Pairing points should be accumulated")]] std::
176 ClientCircuit& circuit,
177 const StdlibVerifierInputs& verifier_inputs,
178 const std::optional<RecursiveVerifierAccumulator>& input_verifier_accumulator,
179 const TableCommitments& T_prev_commitments,
180 const std::shared_ptr<RecursiveTranscript>& accumulation_recursive_transcript);
181
182 // Complete the logic of a kernel circuit (e.g. HN/merge recursive verification, databus consistency checks)
184
193 void accumulate(ClientCircuit& circuit, const std::shared_ptr<MegaVerificationKey>& precomputed_vk) override;
194
196
198 static void hide_op_queue_content_in_tail(ClientCircuit& circuit);
200
206
207 private:
208#ifndef NDEBUG
215 void update_native_verifier_accumulator(const VerifierInputs& queue_entry,
216 const std::shared_ptr<Transcript>& verifier_transcript);
217
219 const std::shared_ptr<ProverInstance>& prover_instance,
220 const std::shared_ptr<MegaVerificationKey>& precomputed_vk);
221#endif
222
224 const std::shared_ptr<MegaVerificationKey>& verification_key);
225
227};
228
229} // 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:165
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:535
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:569
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:577
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:525
std::array< RecursiveFlavor::Commitment, ClientCircuit::NUM_WIRES > TableCommitments
Definition chonk.hpp:72
DataBusDepot bus_depot
Definition chonk.hpp:156
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:626
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:162
QUEUE_TYPE
Proof type determining recursive verification logic in kernel circuits.
Definition chonk.hpp:105
bool has_last_app_been_accumulated
Definition chonk.hpp:145
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:513
ChonkProof prove()
Construct Chonk proof, which, if verified, fully establishes the correctness of RCG.
Definition chonk.cpp:552
RecursiveFlavor::FF StdlibFF
Definition chonk.hpp:59
VerifierAccumulator recursive_verifier_native_accum
Definition chonk.hpp:140
bool is_previous_circuit_a_kernel
Definition chonk.hpp:144
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:501
RecursiveFlavor::Commitment RecursiveCommitment
Definition chonk.hpp:60
MegaFlavor::CommitmentKey bn254_commitment_key
Definition chonk.hpp:158
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:166
size_t num_circuits
Definition chonk.hpp:132
std::deque< VerifierInputs > VerificationQueue
Definition chonk.hpp:114
VerificationQueue verification_queue
Definition chonk.hpp:152
Goblin goblin
Definition chonk.hpp:160
std::shared_ptr< Transcript > prover_accumulation_transcript
Definition chonk.hpp:130
StdlibVerificationQueue stdlib_verification_queue
Definition chonk.hpp:153
CommitmentKey object over a pairing group 𝔾₁.
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).
Definition flavor.hpp:136
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:172
A ProverInstance is normally constructed from a finalized circuit and it contains all the information...
Base Stdlib verification key class.
Definition flavor.hpp:425
FixedVKAndHash_< PrecomputedEntities< 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:593
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
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.