Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
mock_verifier_inputs.cpp
Go to the documentation of this file.
11
12namespace acir_format {
13
14using namespace bb;
15
16template <class Curve>
17void populate_field_elements_for_mock_commitments(std::vector<fr>& fields, const size_t& num_commitments)
18{
19 auto mock_commitment = Curve::AffineElement::one();
20 std::vector<fr> mock_commitment_frs = FrCodec::serialize_to_fields(mock_commitment);
21 for (size_t i = 0; i < num_commitments; ++i) {
22 for (const fr& val : mock_commitment_frs) {
23 fields.emplace_back(val);
24 }
25 }
26}
27
28template <class FF>
29void populate_field_elements(std::vector<fr>& fields, const size_t& num_elements, std::optional<FF> value)
30{
31 for (size_t i = 0; i < num_elements; ++i) {
32 std::vector<fr> field_elements = value.has_value() ? FrCodec::serialize_to_fields(value.value())
34 fields.insert(fields.end(), field_elements.begin(), field_elements.end());
35 }
36}
37
38template <typename Flavor, class PublicInputs> HonkProof create_mock_oink_proof(const size_t acir_public_inputs_size)
39{
40 HonkProof proof;
41
42 // Populate mock public inputs
43 typename PublicInputs::Builder builder;
44 PublicInputs::add_default(builder);
45
46 // Populate the proof with as many public inputs as required from the ACIR constraints
47 populate_field_elements<fr>(proof, acir_public_inputs_size);
48
49 // Populate the proof with the public inputs added from barretenberg
50 for (const auto& pub : builder.public_inputs()) {
51 proof.emplace_back(builder.get_variable(pub));
52 }
53
54 // Populate mock witness polynomial commitments
56
57 return proof;
58}
59
60template <typename Flavor> HonkProof create_mock_sumcheck_proof()
61{
62 using FF = typename Flavor::FF;
63 HonkProof proof;
64
65 // Sumcheck univariates
66 const size_t TOTAL_SIZE_SUMCHECK_UNIVARIATES = Flavor::VIRTUAL_LOG_N * Flavor::BATCHED_RELATION_PARTIAL_LENGTH;
67 populate_field_elements<FF>(proof, TOTAL_SIZE_SUMCHECK_UNIVARIATES);
68
69 // Sumcheck multilinear evaluations
70 populate_field_elements<FF>(proof, Flavor::NUM_ALL_ENTITIES);
71
72 return proof;
73}
74
76{
78 constexpr_for<2, CHONK_MAX_CLAIMS_PER_KERNEL + 1, 1>([&]<size_t NumClaims>() {
79 if (num_claims == NumClaims) {
80 proof = create_mock_sumcheck_proof<MultilinearBatchingFlavor_<NumClaims>>();
81 }
82 });
83 BB_ASSERT(proof.has_value(), "Unmatched num_claims in create_mock_multilinear_batch_proof");
84
85 return proof.value();
86}
87
88template <typename Flavor, class PublicInputs> HonkProof create_mock_sumcheck_to_accumulator_proof()
89{
90 HonkProof oink_proof = create_mock_oink_proof<Flavor, PublicInputs>(/*acir_public_inputs_size=*/0);
91 HonkProof sumcheck_proof = create_mock_sumcheck_proof<Flavor>();
92
93 HonkProof proof;
94 proof.reserve(oink_proof.size() + sumcheck_proof.size());
95 proof.insert(proof.end(), oink_proof.begin(), oink_proof.end());
96 proof.insert(proof.end(), sumcheck_proof.begin(), sumcheck_proof.end());
97
98 return proof;
99}
100
101template <typename Flavor> HonkProof create_mock_pcs_proof()
102{
103 using FF = Flavor::FF;
104 using Curve = Flavor::Curve;
105 HonkProof proof;
106
107 // Gemini fold commitments
108 const size_t NUM_GEMINI_FOLD_COMMITMENTS = Flavor::VIRTUAL_LOG_N - 1;
109 populate_field_elements_for_mock_commitments<Curve>(proof, NUM_GEMINI_FOLD_COMMITMENTS);
110
111 // Gemini fold evaluations
112 const size_t NUM_GEMINI_FOLD_EVALUATIONS = Flavor::VIRTUAL_LOG_N;
113 populate_field_elements<FF>(proof, NUM_GEMINI_FOLD_EVALUATIONS);
114
115 if constexpr (Flavor::HasZK) {
116 // NUM_SMALL_IPA_TRANSCRIPT_EVALS libra evals
117 populate_field_elements<FF>(proof, NUM_SMALL_IPA_TRANSCRIPT_EVALS);
118 }
119
120 // Shplonk batched quotient commitment
121 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
122 // KZG quotient commitment
123 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
124
125 return proof;
126}
127
128template <typename Flavor> HonkProof create_mock_decider_proof()
129{
130 using FF = Flavor::FF;
131 using Curve = Flavor::Curve;
132 HonkProof proof;
133
134 constexpr size_t const_proof_log_n = []() {
136 return MEGA_AVM_LOG_N;
137 } else {
138 return Flavor::VIRTUAL_LOG_N;
139 }
140 }();
141
142 if constexpr (Flavor::HasZK) {
143 // Libra concatenation commitment
144 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
145
146 // Libra sum
147 populate_field_elements<FF>(proof, 1);
148 }
149
150 // Sumcheck univariates
151 const size_t TOTAL_SIZE_SUMCHECK_UNIVARIATES = const_proof_log_n * Flavor::BATCHED_RELATION_PARTIAL_LENGTH;
152 populate_field_elements<FF>(proof, TOTAL_SIZE_SUMCHECK_UNIVARIATES);
153
154 // Sumcheck multilinear evaluations
155 populate_field_elements<FF>(proof, Flavor::NUM_ALL_ENTITIES);
156
157 if constexpr (Flavor::HasZK) {
158 // Libra claimed evaluation
159 populate_field_elements<FF>(proof, 1);
160
161 // Libra grand sum commitment
162 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
163
164 // Libra quotient commitment
165 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
166 }
167
168 // Gemini fold commitments
169 const size_t NUM_GEMINI_FOLD_COMMITMENTS = const_proof_log_n - 1;
170 populate_field_elements_for_mock_commitments<Curve>(proof, NUM_GEMINI_FOLD_COMMITMENTS);
171
172 // Gemini fold evaluations
173 const size_t NUM_GEMINI_FOLD_EVALUATIONS = const_proof_log_n;
174 populate_field_elements<FF>(proof, NUM_GEMINI_FOLD_EVALUATIONS);
175
176 if constexpr (Flavor::HasZK) {
177 // NUM_SMALL_IPA_TRANSCRIPT_EVALS libra evals
178 populate_field_elements<FF>(proof, NUM_SMALL_IPA_TRANSCRIPT_EVALS);
179 }
180
181 // Shplonk batched quotient commitment
182 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
183 // KZG quotient commitment
184 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
185
186 return proof;
187}
188
189template <typename Flavor, class PublicInputs> HonkProof create_mock_honk_proof(const size_t acir_public_inputs_size)
190{
191 // Construct a Honk proof as the concatenation of an Oink proof and a Decider proof
192 HonkProof oink_proof = create_mock_oink_proof<Flavor, PublicInputs>(acir_public_inputs_size);
193 HonkProof decider_proof = create_mock_decider_proof<Flavor>();
194 HonkProof proof;
195 proof.reserve(oink_proof.size() + decider_proof.size());
196 proof.insert(proof.end(), oink_proof.begin(), oink_proof.end());
197 proof.insert(proof.end(), decider_proof.begin(), decider_proof.end());
198
199 if constexpr (PublicInputs::HasIPA) {
200 HonkProof ipa_proof = create_mock_ipa_proof();
201 proof.insert(proof.end(), ipa_proof.begin(), ipa_proof.end());
202 }
203 return proof;
204}
205
207{
208 constexpr size_t proof_length = bb::avm2::AvmFlavor::COMPUTED_AVM_PROOF_LENGTH_IN_FIELDS;
209 HonkProof oink_proof =
210 create_mock_oink_proof<bb::avm2::AvmFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
211 /*acir_public_inputs_size=*/0);
213
214 HonkProof proof;
215 proof.reserve(proof_length);
216 proof.insert(proof.end(),
217 oink_proof.begin() +
218 bb::DefaultIO::PUBLIC_INPUTS_SIZE, // Skip the Oink public inputs as they are not needed
219 oink_proof.end());
220 proof.insert(proof.end(), decider_proof.begin(), decider_proof.end());
221
222 BB_ASSERT_EQ(proof.size(), proof_length, "AVM mock proof length must match COMPUTED_AVM_PROOF_LENGTH_IN_FIELDS");
223
224 return proof;
225}
226
227template <typename Flavor, typename IO>
229 const size_t acir_public_inputs_size)
230{
232 using InnerProver = bb::UltraProver_<Flavor>;
234 using Builder = typename Flavor::CircuitBuilder;
235
236 // Construct a circuit with a single gate
238
242 fr d = a + b + c;
243
244 uint32_t a_idx = builder.add_variable(a);
245 uint32_t b_idx = builder.add_variable(b);
246 uint32_t c_idx = builder.add_variable(c);
247 uint32_t d_idx = builder.add_variable(d);
248
249 builder.create_big_add_gate({ a_idx, b_idx, c_idx, d_idx, fr(1), fr(1), fr(1), fr(-1), fr(0) });
250
251 // Add the public inputs
252 for (size_t i = 0; i < acir_public_inputs_size; ++i) {
253 builder.add_public_variable(fr::random_element());
254 }
255
256 IO::add_default(builder);
257
258 // prove the circuit constructed above
259 // Create the decider proving key
260 auto decider_pk = std::make_shared<ProverInstance>(builder);
261
262 // Construct the Ultra VK
263 auto vk = std::make_shared<VerificationKey>(decider_pk->get_precomputed());
264 InnerProver prover(decider_pk, vk);
265 auto honk_proof = prover.construct_proof();
266 return std::pair(honk_proof, vk);
267}
268
270{
271 Goblin::MergeProof proof;
272 proof.reserve(MERGE_PROOF_SIZE);
273
274 // Populate mock merged table commitments and batched degree check polynomial commitment
276
277 // Populate evaluations (3 * NUM_WIRES + 1: left, right, and merged tables, plus batched degree check polynomial)
278 populate_field_elements(proof, (3 * NUM_WIRES) + 1);
279
280 // Shplonk proof: commitment to the quotient
282
283 // KZG proof: commitment to W
285
286 BB_ASSERT_EQ(proof.size(), MERGE_PROOF_SIZE);
287
288 return proof;
289}
290
292{
293 HonkProof proof;
294
295 constexpr size_t MAX_MERGE_SIZE = Goblin::BatchMergeRecursiveVerifier::MAX_MERGE_SIZE;
296
297 // Commitments to the fixed-width list of subtables.
298 populate_field_elements_for_mock_commitments(proof, MAX_MERGE_SIZE * NUM_WIRES);
299
300 // Commitments to the ZK masking table.
302
303 // Number of real subtables. Keep it in [1, MAX_MERGE_SIZE] so recursive range checks can be constructed.
304 populate_field_elements<fr>(proof, 1, /*value=*/fr{ 1 });
305
306 // Shift sizes.
307 populate_field_elements<fr>(proof, 1, /*value=*/fr{ 2 });
308 populate_field_elements<fr>(proof, MAX_MERGE_SIZE - 1, /*value=*/fr{ 0 });
309
310 // Merged table commitments and degree-check polynomial commitment.
312
313 // Evaluations: C_i(kappa), optional ZK C_i(kappa), T(kappa), and G(kappa^{-1}).
314 const size_t num_evaluations = (MAX_MERGE_SIZE * NUM_WIRES) + NUM_WIRES + NUM_WIRES + 1;
315 populate_field_elements(proof, num_evaluations);
316
317 // Shplonk quotient commitment and KZG opening commitment.
319
320 return proof;
321}
322
331{
332 using FF = ECCVMFlavor::FF;
333 HonkProof proof;
334
335 // 1. NUM_WITNESS_ENTITIES + 1 commitments (includes gemini_masking_poly)
336 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, ECCVMFlavor::NUM_WITNESS_ENTITIES + 1);
337
338 // 2. Libra concatenation commitment
339 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments*/ 1);
340
341 // 3. Libra sum
342 populate_field_elements<FF>(proof, 1);
343
344 // 4. Sumcheck univariates commitments + 5. Sumcheck univariate evaluations
345 for (size_t idx = 0; idx < CONST_ECCVM_LOG_N; idx++) {
346 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments=*/1);
347 populate_field_elements<FF>(proof, /*num_elements=*/2);
348 }
349
350 // 6. ALL_ENTITIES sumcheck evaluations
351 populate_field_elements<FF>(proof, ECCVMFlavor::NUM_ALL_ENTITIES);
352
353 // 7. Libra evaluation
354 populate_field_elements<FF>(proof, 1);
355
356 // 8. Libra grand sum commitment
357 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments=*/1);
358
359 // 9. Libra quotient commitment
360 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments=*/1);
361
362 // 10. NUM_SMALL_IPA_TRANSCRIPT_EVALS libra evals
363 populate_field_elements<FF>(proof, NUM_SMALL_IPA_TRANSCRIPT_EVALS);
364
365 // 11. Translator concatenated masking term commitment
366 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments=*/1);
367
368 // 12. Translator op evaluation
369 populate_field_elements<FF>(proof, 1);
370
371 // 13. Translator Px evaluation
372 populate_field_elements<FF>(proof, 1);
373
374 // 14. Translator Py evaluation
375 populate_field_elements<FF>(proof, 1);
376
377 // 15. Translator z1 evaluation
378 populate_field_elements<FF>(proof, 1);
379
380 // 16. Translator z2 evaluation
381 populate_field_elements<FF>(proof, 1);
382
383 // 17. Translator concatenated masking term evaluation
384 populate_field_elements<FF>(proof, 1);
385
386 // 18. Translator grand sum commitment
387 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments=*/1);
388
389 // 19. Translator quotient commitment
390 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments=*/1);
391
392 // 20. Translator concatenation evaluation
393 populate_field_elements<FF>(proof, 1);
394
395 // 21. Translator grand sum shift evaluation
396 populate_field_elements<FF>(proof, 1);
397
398 // 22. Translator grand sum evaluation
399 populate_field_elements<FF>(proof, 1);
400
401 // 23. Translator quotient evaluation
402 populate_field_elements<FF>(proof, 1);
403
404 // 24. TripleIPA pow-tensor masking commitment
405 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments=*/1);
406
407 // 25. TripleIPA pow-tensor masking evaluation
408 populate_field_elements<FF>(proof, 1);
409
410 // 26. Shplonk
411 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments=*/1);
412
414
415 return proof;
416}
417
419{
420 HonkProof proof;
421
422 // Commitments to L and R for CONST_ECCVM_LOG_N round
423 populate_field_elements_for_mock_commitments<curve::Grumpkin>(
424 proof, /*num_commitments=*/CONST_ECCVM_LOG_N + CONST_ECCVM_LOG_N);
425
426 // Commitment to G_0
427 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments=*/1);
428
429 // a_0 evaluation (a_0 is in the base field of BN254)
430 populate_field_elements<curve::BN254::BaseField>(proof, 1);
431
432 BB_ASSERT_EQ(proof.size(), IPA_PROOF_LENGTH);
433
434 return proof;
435}
436
438{
439 using FF = ECCVMFlavor::FF;
440 HonkProof proof;
441
442 // TripleIPA cross sums
443 populate_field_elements<FF>(proof, 3);
444
445 // TripleIPA L and R round commitments
446 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments=*/2 * CONST_ECCVM_LOG_N);
447
448 // TripleIPA G_0 commitment
449 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments=*/1);
450
451 // TripleIPA a_0 evaluation
452 populate_field_elements<FF>(proof, 1);
453
455
456 return proof;
457}
458
460{
461 using Flavor = TranslatorFlavor;
462 using Curve = Flavor::Curve;
463 using FF = Flavor::FF;
464
465 HonkProof proof;
466
467 // 1. Gemini masking poly commitment
468 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
469
470 // 2. Wire commitments: concatenated(5) + ordered(5) = 10
471 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/Flavor::NUM_COMMITMENTS_IN_PROOF);
472
473 // 3. Z_PERM commitment
474 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
475
476 // 4. Libra concatenation commitment
477 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
478
479 // 5. Libra sum
480 populate_field_elements<FF>(proof, 1);
481
482 // 6. Sumcheck univariates
483 populate_field_elements<FF>(proof, Flavor::CONST_TRANSLATOR_LOG_N * Flavor::BATCHED_RELATION_PARTIAL_LENGTH);
484
485 // 7. Sumcheck evaluations (computable precomputed and reconstructed concat evals excluded)
486 populate_field_elements<FF>(proof, Flavor::NUM_SENT_EVALUATIONS);
487
488 // 8. Libra claimed evaluation
489 populate_field_elements<FF>(proof, 1);
490
491 // 9. Libra grand sum commitment
492 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
493
494 // 10. Libra quotient commitment
495 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
496
497 // 11-15. PCS proof (Gemini fold commitments/evaluations, libra evals, Shplonk, KZG)
498 HonkProof pcs_proof = create_mock_pcs_proof<Flavor>();
499 proof.insert(proof.end(), pcs_proof.begin(), pcs_proof.end());
500
501 BB_ASSERT_EQ(proof.size(), Flavor::PROOF_LENGTH);
502
503 return proof;
504}
505
515{
516 using TransFlavor = TranslatorFlavor;
517 using Curve = TransFlavor::Curve;
518 using FF = TransFlavor::FF;
519
520 HonkProof proof;
521
522 // === Translator Oink ===
523 // 1. Gemini masking poly commitment
524 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
525 // 2. Wire commitments: concatenated(5) + ordered(5) = 10
526 populate_field_elements_for_mock_commitments<Curve>(proof,
527 /*num_commitments=*/TransFlavor::NUM_COMMITMENTS_IN_PROOF);
528 // 3. Z_PERM commitment
529 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
530
531 // === Joint Sumcheck ===
532 // 4. Libra concatenation commitment
533 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
534 // 5. Libra sum
535 populate_field_elements<FF>(proof, 1);
536 // 6. Committed sumcheck rounds 0..JOINT_LOG_N-1 (commitment + 2 evals per round)
537 constexpr size_t JOINT_LOG_N = TransFlavor::CONST_TRANSLATOR_LOG_N;
538 for (size_t round = 0; round < JOINT_LOG_N; round++) {
539 // Minicircuit evaluations appear after round LOG_MINI_CIRCUIT_SIZE-1's data
540 if (round == TransFlavor::LOG_MINI_CIRCUIT_SIZE) {
541 populate_field_elements<FF>(proof, TransFlavor::NUM_MINICIRCUIT_EVALUATIONS);
542 }
543 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1); // round univariate comm
544 populate_field_elements<FF>(proof, 2); // evals at 0 and 1
545 }
546 // 7. MegaZK evaluations (sent after all sumcheck rounds)
547 populate_field_elements<FF>(proof, MegaZKFlavor::NUM_ALL_ENTITIES);
548 // 8. Translator full circuit evaluations (sent after all rounds)
549 populate_field_elements<FF>(proof, TransFlavor::NUM_FULL_CIRCUIT_EVALUATIONS);
550 // 9. Libra claimed evaluation
551 populate_field_elements<FF>(proof, 1);
552 // 10. Libra grand sum commitment
553 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
554 // 11. Libra quotient commitment
555 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
556
557 // === Joint PCS (same structure as standalone translator PCS, using JOINT_LOG_N = 17) ===
558 HonkProof pcs_proof = create_mock_pcs_proof<TransFlavor>();
559 proof.insert(proof.end(), pcs_proof.begin(), pcs_proof.end());
560
561 return proof;
562}
563
564template <typename Builder> HonkProof create_mock_chonk_proof(const size_t acir_public_inputs_size)
565{
566 // MegaZK Oink only (no decider — sumcheck+PCS are batched into the joint proof)
567 HonkProof hiding_oink =
568 create_mock_oink_proof<MegaZKFlavor, stdlib::recursion::honk::HidingKernelIO<Builder>>(acir_public_inputs_size);
570 HonkProof eccvm_proof{ create_mock_eccvm_proof() };
571 HonkProof triple_ipa_proof{ create_mock_triple_ipa_proof() };
572 // Batched joint proof: Translator Oink + joint sumcheck + joint PCS
574
575 ChonkProof chonk_proof{ std::move(hiding_oink),
576 std::move(merge_proof),
577 std::move(eccvm_proof),
578 std::move(triple_ipa_proof),
579 std::move(joint_proof) };
580 return chonk_proof.to_field_elements();
581}
582
583template <typename Flavor, class PublicInputs>
585 const size_t acir_public_inputs_size)
586{
587 // Set relevant VK metadata and commitments
588 auto honk_verification_key = std::make_shared<typename Flavor::VerificationKey>();
589 honk_verification_key->log_circuit_size = bb::numeric::get_msb(dyadic_size);
590 honk_verification_key->num_public_inputs = acir_public_inputs_size + PublicInputs::PUBLIC_INPUTS_SIZE;
591 honk_verification_key->pub_inputs_offset = NUM_ZERO_ROWS;
592
593 for (auto& commitment : honk_verification_key->get_all()) {
594 commitment = curve::BN254::AffineElement::one(); // arbitrary mock commitment
595 }
596
597 return honk_verification_key;
598}
599
600// Explicitly instantiate template functions
603template HonkProof create_mock_oink_proof<MegaFlavor, stdlib::recursion::honk::HidingKernelIO<MegaCircuitBuilder>>(
604 const size_t);
605template HonkProof create_mock_oink_proof<MegaZKFlavor, stdlib::recursion::honk::HidingKernelIO<UltraCircuitBuilder>>(
606 const size_t);
607template HonkProof create_mock_oink_proof<MegaZKFlavor, stdlib::recursion::honk::HidingKernelIO<MegaCircuitBuilder>>(
608 const size_t);
609
610template HonkProof create_mock_oink_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
611 const size_t);
612template HonkProof create_mock_oink_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
613 const size_t);
614template HonkProof create_mock_oink_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
615 const size_t);
616template HonkProof create_mock_oink_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
617 const size_t);
619
620template HonkProof create_mock_oink_proof<avm2::AvmFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
621 const size_t);
622
626
631
634template HonkProof create_mock_honk_proof<MegaFlavor, stdlib::recursion::honk::HidingKernelIO<MegaCircuitBuilder>>(
635 const size_t);
636
637template HonkProof create_mock_honk_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
638 const size_t);
639template HonkProof create_mock_honk_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
640 const size_t);
641template HonkProof create_mock_honk_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
642 const size_t);
643template HonkProof create_mock_honk_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
644 const size_t);
646
648construct_arbitrary_valid_honk_proof_and_vk<UltraFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
649 const size_t);
651construct_arbitrary_valid_honk_proof_and_vk<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
652 const size_t);
655
661
664
666 const size_t, const size_t);
669 const size_t, const size_t);
672 const size_t, const size_t);
675 const size_t, const size_t);
682
697 const size_t, const size_t);
698
699} // namespace acir_format
#define BB_ASSERT(expression,...)
Definition assert.hpp:70
#define BB_ASSERT_EQ(actual, expected,...)
Definition assert.hpp:83
static constexpr size_t MAX_MERGE_SIZE
static constexpr size_t PUBLIC_INPUTS_SIZE
typename Curve::ScalarField FF
static constexpr size_t NUM_ALL_ENTITIES
ECCVMCircuitBuilder CircuitBuilder
static constexpr size_t PROOF_LENGTH
static constexpr size_t TRIPLE_IPA_PROOF_LENGTH
static constexpr size_t NUM_WITNESS_ENTITIES
static std::vector< fr > serialize_to_fields(const T &val)
Conversion from transcript values to bb::frs.
MergeProver::MergeProof MergeProof
Definition goblin.hpp:42
Mega flavor specialized for Chonk app circuits.
Mega flavor specialized for Chonk kernel circuits.
Hiding-kernel-only Mega variant: runs with ZK Sumcheck and a reduced relation set.
Base Native verification key class.
Definition flavor.hpp:138
Contains all the information required by a Honk prover to create a proof, constructed from a finalize...
Child class of UltraFlavor that runs with ZK Sumcheck.
static constexpr size_t COMPUTED_AVM_PROOF_LENGTH_IN_FIELDS
Definition flavor.hpp:100
AvmFlavorSettings::FF FF
Definition flavor.hpp:43
FixedVKAndHash_< PrecomputedEntities< Commitment >, FF, typename constraining::AvmHardCodedVKAndHash > VerificationKey
Verification key of the AVM. It is fixed and reconstructed from precomputed values.
Definition flavor.hpp:213
static constexpr bool HasZK
Definition flavor.hpp:57
static constexpr size_t NUM_WITNESS_ENTITIES
Definition flavor.hpp:63
static constexpr size_t BATCHED_RELATION_PARTIAL_LENGTH
Definition flavor.hpp:91
static constexpr size_t NUM_ALL_ENTITIES
Definition flavor.hpp:66
AvmFlavorSettings::Curve Curve
Definition flavor.hpp:39
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.
The data that is propagated on the public inputs of a rollup circuit.
AluTraceBuilder builder
Definition alu.test.cpp:124
FF a
FF b
Base class templates shared across Honk flavors.
ProverInstance_< UltraKeccakFlavor > ProverInstance
template std::shared_ptr< MegaFlavor::VerificationKey > create_mock_honk_vk< MegaFlavor, stdlib::recursion::honk::AppIO >(const size_t, const size_t)
template HonkProof create_mock_chonk_proof< UltraCircuitBuilder >(const size_t)
HonkProof create_mock_multilinear_batch_proof(size_t num_claims)
Create a mock multilinear batching proof of the given width (number of batched claims) that has corre...
HonkProof create_mock_honk_proof(const size_t acir_public_inputs_size)
Create a mock honk proof that has the correct structure but is not in general valid.
HonkProof create_mock_oink_proof(const size_t acir_public_inputs_size)
Create a mock oink proof that has the correct structure but is not in general valid.
void populate_field_elements(std::vector< fr > &fields, const size_t &num_elements, std::optional< FF > value)
Helper to populate a field buffer with some number of field elements.
template HonkProof create_mock_decider_proof< UltraZKFlavor >()
HonkProof create_mock_chonk_proof(const size_t acir_public_inputs_size)
Create a mock Chonk proof which has the correct structure but is not necessarily valid.
template HonkProof create_mock_sumcheck_to_accumulator_proof< MegaFlavor, stdlib::recursion::honk::AppIO >()
template HonkProof create_mock_honk_proof< MegaFlavor, stdlib::recursion::honk::KernelIO >(const size_t)
Goblin::MergeProof create_mock_merge_proof()
Create a mock merge proof which has the correct structure but is not necessarily valid.
template HonkProof create_mock_pcs_proof< MegaKernelFlavor >()
HonkProof create_mock_eccvm_proof()
Create a mock pre-ipa proof which has the correct structure but is not necessarily valid.
HonkProof create_mock_translator_proof()
Create a mock Translator proof which has the correct structure but is not necessarily valid.
void populate_field_elements_for_mock_commitments(std::vector< fr > &fields, const size_t &num_commitments)
Helper to populate a field buffer with fields corresponding to some number of mock commitment values.
template HonkProof create_mock_decider_proof< avm2::AvmFlavor >()
template HonkProof create_mock_pcs_proof< MegaFlavor >()
template HonkProof create_mock_sumcheck_to_accumulator_proof< MegaFlavor, stdlib::recursion::honk::KernelIO >()
template HonkProof create_mock_honk_proof< UltraFlavor, stdlib::recursion::honk::RollupIO >(const size_t)
HonkProof create_mock_batch_merge_proof()
Create a mock batch merge proof which has the correct structure but is not necessarily valid.
template std::pair< HonkProof, std::shared_ptr< UltraFlavor::VerificationKey > > construct_arbitrary_valid_honk_proof_and_vk< UltraFlavor, stdlib::recursion::honk::RollupIO >(const size_t)
template HonkProof create_mock_oink_proof< MegaFlavor, stdlib::recursion::honk::AppIO >(const size_t)
HonkProof create_mock_triple_ipa_proof()
template HonkProof create_mock_honk_proof< MegaFlavor, stdlib::recursion::honk::AppIO >(const size_t)
HonkProof create_mock_decider_proof()
Create a mock decider proof that has the correct structure but is not in general valid.
template HonkProof create_mock_pcs_proof< TranslatorFlavor >()
template HonkProof create_mock_sumcheck_to_accumulator_proof< MegaKernelFlavor, stdlib::recursion::honk::KernelIO >()
template HonkProof create_mock_decider_proof< UltraFlavor >()
HonkProof create_mock_pcs_proof()
Create a mock PCS proof that has the correct structure but is not in general valid.
template HonkProof create_mock_chonk_proof< MegaCircuitBuilder >(const size_t)
HonkProof create_mock_batched_joint_proof()
Create a mock batched joint proof (Translator Oink + joint sumcheck + joint PCS).
HonkProof create_mock_sumcheck_proof()
Create a mock sumcheck proof that has the correct structure but is not in general valid.
HonkProof create_mock_sumcheck_to_accumulator_proof()
Create a mock proof turning an instance into an Hypernova accumulator that has the correct structure ...
HonkProof create_mock_avm_proof_without_pub_inputs()
Create a mock AVM proof without public inputs that has the correct structure but is not in general va...
template HonkProof create_mock_oink_proof< UltraFlavor, stdlib::recursion::honk::RollupIO >(const size_t)
template HonkProof create_mock_oink_proof< MegaFlavor, stdlib::recursion::honk::KernelIO >(const size_t)
std::pair< HonkProof, std::shared_ptr< typename Flavor::VerificationKey > > construct_arbitrary_valid_honk_proof_and_vk(const size_t acir_public_inputs_size)
Create a valid honk proof and vk for a circuit with a single big add gate. Adds random public inputs ...
std::shared_ptr< typename Flavor::VerificationKey > create_mock_honk_vk(const size_t dyadic_size, const size_t acir_public_inputs_size)
Create a mock VK that has the correct structure.
HonkProof create_mock_ipa_proof()
Create a mock ipa proof which has the correct structure but is not necessarily valid.
template HonkProof create_mock_decider_proof< MegaFlavor >()
AvmFlavorSettings::FF FF
Definition field.hpp:10
constexpr T get_msb(const T in)
Definition get_msb.hpp:50
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
constexpr size_t NUM_SMALL_IPA_TRANSCRIPT_EVALS
std::vector< fr > HonkProof
Definition proof.hpp:15
field< Bn254FrParams > fr
Definition fr.hpp:155
VerifierCommitmentKey< Curve > vk
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
std::vector< FF > to_field_elements() const
Serialize proof to field elements (native mode)
static field random_element(numeric::RNG *engine=nullptr) noexcept