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.
8
9namespace acir_format {
10
11using namespace bb;
12
13template <class Curve>
14void populate_field_elements_for_mock_commitments(std::vector<fr>& fields, const size_t& num_commitments)
15{
16 auto mock_commitment = Curve::AffineElement::one();
17 std::vector<fr> mock_commitment_frs = FrCodec::serialize_to_fields(mock_commitment);
18 for (size_t i = 0; i < num_commitments; ++i) {
19 for (const fr& val : mock_commitment_frs) {
20 fields.emplace_back(val);
21 }
22 }
23}
24
25template <class FF>
26void populate_field_elements(std::vector<fr>& fields, const size_t& num_elements, std::optional<FF> value)
27{
28 for (size_t i = 0; i < num_elements; ++i) {
29 std::vector<fr> field_elements = value.has_value() ? FrCodec::serialize_to_fields(value.value())
31 fields.insert(fields.end(), field_elements.begin(), field_elements.end());
32 }
33}
34
35template <typename Flavor, class PublicInputs> HonkProof create_mock_oink_proof(const size_t acir_public_inputs_size)
36{
37 HonkProof proof;
38
39 // Populate mock public inputs
40 typename PublicInputs::Builder builder;
41 PublicInputs::add_default(builder);
42
43 // Populate the proof with as many public inputs as required from the ACIR constraints
44 populate_field_elements<fr>(proof, acir_public_inputs_size);
45
46 // Populate the proof with the public inputs added from barretenberg
47 for (const auto& pub : builder.public_inputs()) {
48 proof.emplace_back(builder.get_variable(pub));
49 }
50
51 // Populate mock witness polynomial commitments
53
54 return proof;
55}
56
57template <typename Flavor> HonkProof create_mock_sumcheck_proof()
58{
59 using FF = typename Flavor::FF;
60 HonkProof proof;
61
62 // Sumcheck univariates
63 const size_t TOTAL_SIZE_SUMCHECK_UNIVARIATES = Flavor::VIRTUAL_LOG_N * Flavor::BATCHED_RELATION_PARTIAL_LENGTH;
64 populate_field_elements<FF>(proof, TOTAL_SIZE_SUMCHECK_UNIVARIATES);
65
66 // Sumcheck multilinear evaluations
67 populate_field_elements<FF>(proof, Flavor::NUM_ALL_ENTITIES);
68
69 return proof;
70}
71
73{
75 using FF = typename Flavor::FF;
76 HonkProof proof;
77
78 // Populate mock accumulator commitments (non_shifted + shifted)
79 populate_field_elements_for_mock_commitments(proof, Flavor::NUM_ACCUMULATOR_COMMITMENTS);
80
81 // Accumulator multivariate challenges
82 populate_field_elements<FF>(proof, Flavor::VIRTUAL_LOG_N);
83
84 // Accumulator polynomial evaluations (non_shifted + shifted)
85 populate_field_elements<FF>(proof, Flavor::NUM_ACCUMULATOR_EVALUATIONS);
86
87 // Sumcheck proof
88 HonkProof sumcheck_proof = create_mock_sumcheck_proof<Flavor>();
89
90 proof.insert(proof.end(), sumcheck_proof.begin(), sumcheck_proof.end());
91
92 return proof;
93}
94
95template <typename Flavor, class PublicInputs> HonkProof create_mock_hyper_nova_proof(bool include_fold)
96{
97 HonkProof oink_proof = create_mock_oink_proof<Flavor, PublicInputs>(/*acir_public_inputs_size=*/0);
98 HonkProof sumcheck_proof = create_mock_sumcheck_proof<Flavor>();
99 HonkProof multilinear_batch_proof;
100 if (include_fold) {
101 multilinear_batch_proof = create_mock_multilinear_batch_proof();
102 }
103 HonkProof proof;
104 proof.reserve(oink_proof.size() + sumcheck_proof.size() + multilinear_batch_proof.size());
105 proof.insert(proof.end(), oink_proof.begin(), oink_proof.end());
106 proof.insert(proof.end(), sumcheck_proof.begin(), sumcheck_proof.end());
107 proof.insert(proof.end(), multilinear_batch_proof.begin(), multilinear_batch_proof.end());
108
109 return proof;
110}
111
112template <typename Flavor> HonkProof create_mock_pcs_proof()
113{
114 using FF = Flavor::FF;
115 using Curve = Flavor::Curve;
116 HonkProof proof;
117
118 // Gemini fold commitments
119 const size_t NUM_GEMINI_FOLD_COMMITMENTS = Flavor::VIRTUAL_LOG_N - 1;
120 populate_field_elements_for_mock_commitments<Curve>(proof, NUM_GEMINI_FOLD_COMMITMENTS);
121
122 // Gemini fold evaluations
123 const size_t NUM_GEMINI_FOLD_EVALUATIONS = Flavor::VIRTUAL_LOG_N;
124 populate_field_elements<FF>(proof, NUM_GEMINI_FOLD_EVALUATIONS);
125
126 if constexpr (Flavor::HasZK) {
127 // NUM_SMALL_IPA_EVALUATIONS libra evals
128 populate_field_elements<FF>(proof, NUM_SMALL_IPA_EVALUATIONS);
129 }
130
131 // Shplonk batched quotient commitment
132 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
133 // KZG quotient commitment
134 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
135
136 return proof;
137}
138
139template <typename Flavor> HonkProof create_mock_decider_proof()
140{
141 using FF = Flavor::FF;
142 using Curve = Flavor::Curve;
143 HonkProof proof;
144
145 constexpr size_t const_proof_log_n = []() {
147 return MEGA_AVM_LOG_N;
148 } else {
149 return Flavor::VIRTUAL_LOG_N;
150 }
151 }();
152
153 if constexpr (Flavor::HasZK) {
154 // Libra concatenation commitment
155 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
156
157 // Libra sum
158 populate_field_elements<FF>(proof, 1);
159 }
160
161 // Sumcheck univariates
162 const size_t TOTAL_SIZE_SUMCHECK_UNIVARIATES = const_proof_log_n * Flavor::BATCHED_RELATION_PARTIAL_LENGTH;
163 populate_field_elements<FF>(proof, TOTAL_SIZE_SUMCHECK_UNIVARIATES);
164
165 // Sumcheck multilinear evaluations
166 populate_field_elements<FF>(proof, Flavor::NUM_ALL_ENTITIES);
167
168 if constexpr (Flavor::HasZK) {
169 // Libra claimed evaluation
170 populate_field_elements<FF>(proof, 1);
171
172 // Libra grand sum commitment
173 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
174
175 // Libra quotient commitment
176 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
177 }
178
179 // Gemini fold commitments
180 const size_t NUM_GEMINI_FOLD_COMMITMENTS = const_proof_log_n - 1;
181 populate_field_elements_for_mock_commitments<Curve>(proof, NUM_GEMINI_FOLD_COMMITMENTS);
182
183 // Gemini fold evaluations
184 const size_t NUM_GEMINI_FOLD_EVALUATIONS = const_proof_log_n;
185 populate_field_elements<FF>(proof, NUM_GEMINI_FOLD_EVALUATIONS);
186
187 if constexpr (Flavor::HasZK) {
188 // NUM_SMALL_IPA_EVALUATIONS libra evals
189 populate_field_elements<FF>(proof, NUM_SMALL_IPA_EVALUATIONS);
190 }
191
192 // Shplonk batched quotient commitment
193 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
194 // KZG quotient commitment
195 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
196
197 return proof;
198}
199
200template <typename Flavor, class PublicInputs> HonkProof create_mock_honk_proof(const size_t acir_public_inputs_size)
201{
202 // Construct a Honk proof as the concatenation of an Oink proof and a Decider proof
203 HonkProof oink_proof = create_mock_oink_proof<Flavor, PublicInputs>(acir_public_inputs_size);
204 HonkProof decider_proof = create_mock_decider_proof<Flavor>();
205 HonkProof proof;
206 proof.reserve(oink_proof.size() + decider_proof.size());
207 proof.insert(proof.end(), oink_proof.begin(), oink_proof.end());
208 proof.insert(proof.end(), decider_proof.begin(), decider_proof.end());
209
210 if constexpr (PublicInputs::HasIPA) {
211 HonkProof ipa_proof = create_mock_ipa_proof();
212 proof.insert(proof.end(), ipa_proof.begin(), ipa_proof.end());
213 }
214 return proof;
215}
216
218{
219 size_t proof_length =
221 // Construct an AVM proof as the padded concatenation of an Oink proof and a Decider proof
222 HonkProof oink_proof =
223 create_mock_oink_proof<bb::avm2::AvmFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
224 /*acir_public_inputs_size=*/0);
226
227 HonkProof proof;
228 proof.reserve(proof_length);
229 proof.insert(proof.end(),
230 oink_proof.begin() +
231 bb::DefaultIO::PUBLIC_INPUTS_SIZE, // Skip the Oink public inputs as they are not needed
232 oink_proof.end());
233 proof.insert(proof.end(), decider_proof.begin(), decider_proof.end());
234
235 BB_ASSERT_LTE(proof.size(), proof_length); // Sanity check
236 proof.resize(proof_length, 0); // Pad the proof to the required length (if needed)
237
238 return proof;
239}
240
241template <typename Flavor, typename IO>
243 const size_t acir_public_inputs_size)
244{
246 using InnerProver = bb::UltraProver_<Flavor>;
248 using Builder = typename Flavor::CircuitBuilder;
249
250 // Construct a circuit with a single gate
252
256 fr d = a + b + c;
257
258 uint32_t a_idx = builder.add_variable(a);
259 uint32_t b_idx = builder.add_variable(b);
260 uint32_t c_idx = builder.add_variable(c);
261 uint32_t d_idx = builder.add_variable(d);
262
263 builder.create_big_add_gate({ a_idx, b_idx, c_idx, d_idx, fr(1), fr(1), fr(1), fr(-1), fr(0) });
264
265 // Add the public inputs
266 for (size_t i = 0; i < acir_public_inputs_size; ++i) {
267 builder.add_public_variable(fr::random_element());
268 }
269
270 IO::add_default(builder);
271
272 // prove the circuit constructed above
273 // Create the decider proving key
274 auto decider_pk = std::make_shared<ProverInstance>(builder);
275
276 // Construct the Ultra VK
277 auto vk = std::make_shared<VerificationKey>(decider_pk->get_precomputed());
278 InnerProver prover(decider_pk, vk);
279 auto honk_proof = prover.construct_proof();
280 return std::pair(honk_proof, vk);
281}
282
284{
285 Goblin::MergeProof proof;
286 proof.reserve(MERGE_PROOF_SIZE);
287
288 uint32_t mock_shift_size = 5; // Must be smaller than 32, otherwise pow raises an error
289
290 // Populate mock shift size
291 populate_field_elements<fr>(proof, 1, /*value=*/fr{ mock_shift_size });
292
293 // Populate mock merged table commitments and batched degree check polynomial commitment
295
296 // Populate evaluations (3 * NUM_WIRES + 1: left, right, and merged tables, plus batched degree check polynomial)
297 populate_field_elements(proof, 13);
298
299 // Shplonk proof: commitment to the quotient
301
302 // KZG proof: commitment to W
304
305 BB_ASSERT_EQ(proof.size(), MERGE_PROOF_SIZE);
306
307 return proof;
308}
309
311{
312 HonkProof proof;
313
314 constexpr size_t NUM_WIRES = Goblin::BatchMergeRecursiveVerifier::NUM_WIRES;
315 constexpr size_t MAX_MERGE_SIZE = Goblin::BatchMergeRecursiveVerifier::MAX_MERGE_SIZE;
316
317 // Commitments to the fixed-width list of subtables.
318 populate_field_elements_for_mock_commitments(proof, MAX_MERGE_SIZE * NUM_WIRES);
319
320 // Commitments to the ZK masking table.
322
323 // Number of real subtables. Keep it in [1, MAX_MERGE_SIZE] so recursive range checks can be constructed.
324 populate_field_elements<fr>(proof, 1, /*value=*/fr{ 1 });
325
326 // Shift sizes.
327 populate_field_elements<fr>(proof, 1, /*value=*/fr{ 2 });
328 populate_field_elements<fr>(proof, MAX_MERGE_SIZE - 1, /*value=*/fr{ 0 });
329
330 // Merged table commitments and degree-check polynomial commitment.
332
333 // Evaluations: C_i(kappa), optional ZK C_i(kappa), T(kappa), and G(kappa^{-1}).
334 const size_t num_evaluations = (MAX_MERGE_SIZE * NUM_WIRES) + NUM_WIRES + NUM_WIRES + 1;
335 populate_field_elements(proof, num_evaluations);
336
337 // Shplonk quotient commitment and KZG opening commitment.
339
340 return proof;
341}
342
351{
352 using FF = ECCVMFlavor::FF;
353 HonkProof proof;
354
355 // 1. NUM_WITNESS_ENTITIES + 1 commitments (includes gemini_masking_poly)
356 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, ECCVMFlavor::NUM_WITNESS_ENTITIES + 1);
357
358 // 2. Libra concatenation commitment
359 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments*/ 1);
360
361 // 3. Libra sum
362 populate_field_elements<FF>(proof, 1);
363
364 // 4. Sumcheck univariates commitments + 5. Sumcheck univariate evaluations
365 for (size_t idx = 0; idx < CONST_ECCVM_LOG_N; idx++) {
366 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments=*/1);
367 populate_field_elements<FF>(proof, /*num_elements=*/2);
368 }
369
370 // 6. ALL_ENTITIES sumcheck evaluations
371 populate_field_elements<FF>(proof, ECCVMFlavor::NUM_ALL_ENTITIES);
372
373 // 7. Libra evaluation
374 populate_field_elements<FF>(proof, 1);
375
376 // 8. Libra grand sum commitment
377 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments=*/1);
378
379 // 9. Libra quotient commitment
380 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments=*/1);
381
382 // 10. Gemini fold commitments
383 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof,
384 /*num_commitments=*/CONST_ECCVM_LOG_N - 1);
385
386 // 11. Gemini evaluations
387 populate_field_elements<FF>(proof, CONST_ECCVM_LOG_N);
388
389 // 12. NUM_SMALL_IPA_EVALUATIONS libra evals
390 populate_field_elements<FF>(proof, NUM_SMALL_IPA_EVALUATIONS);
391
392 // 13. Shplonk
393 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments=*/1);
394
395 // 14. Translator concatenated masking term commitment
396 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments=*/1);
397
398 // 15. Translator op evaluation
399 populate_field_elements<FF>(proof, 1);
400
401 // 16. Translator Px evaluation
402 populate_field_elements<FF>(proof, 1);
403
404 // 17. Translator Py evaluation
405 populate_field_elements<FF>(proof, 1);
406
407 // 18. Translator z1 evaluation
408 populate_field_elements<FF>(proof, 1);
409
410 // 19. Translator z2 evaluation
411 populate_field_elements<FF>(proof, 1);
412
413 // 20. Translator concatenated masking term evaluation
414 populate_field_elements<FF>(proof, 1);
415
416 // 21. Translator grand sum commitment
417 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments=*/1);
418
419 // 22. Translator quotient commitment
420 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments=*/1);
421
422 // 23. Translator concatenation evaluation
423 populate_field_elements<FF>(proof, 1);
424
425 // 24. Translator grand sum shift evaluation
426 populate_field_elements<FF>(proof, 1);
427
428 // 25. Translator grand sum evaluation
429 populate_field_elements<FF>(proof, 1);
430
431 // 26. Translator quotient evaluation
432 populate_field_elements<FF>(proof, 1);
433
434 // 27. Shplonk
435 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments=*/1);
436
438
439 return proof;
440}
441
443{
444 HonkProof proof;
445
446 // Commitments to L and R for CONST_ECCVM_LOG_N round
447 populate_field_elements_for_mock_commitments<curve::Grumpkin>(
448 proof, /*num_commitments=*/CONST_ECCVM_LOG_N + CONST_ECCVM_LOG_N);
449
450 // Commitment to G_0
451 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, /*num_commitments=*/1);
452
453 // a_0 evaluation (a_0 is in the base field of BN254)
454 populate_field_elements<curve::BN254::BaseField>(proof, 1);
455
456 BB_ASSERT_EQ(proof.size(), IPA_PROOF_LENGTH);
457
458 return proof;
459}
460
462{
463 using Flavor = TranslatorFlavor;
464 using Curve = Flavor::Curve;
465 using FF = Flavor::FF;
466
467 HonkProof proof;
468
469 // 1. Gemini masking poly commitment
470 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
471
472 // 2. Wire commitments: concatenated(5) + ordered(5) = 10
473 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/Flavor::NUM_COMMITMENTS_IN_PROOF);
474
475 // 3. Z_PERM commitment
476 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
477
478 // 4. Libra concatenation commitment
479 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
480
481 // 5. Libra sum
482 populate_field_elements<FF>(proof, 1);
483
484 // 6. Sumcheck univariates
485 populate_field_elements<FF>(proof, Flavor::CONST_TRANSLATOR_LOG_N * Flavor::BATCHED_RELATION_PARTIAL_LENGTH);
486
487 // 7. Sumcheck evaluations (computable precomputed and reconstructed concat evals excluded)
488 populate_field_elements<FF>(proof, Flavor::NUM_SENT_EVALUATIONS);
489
490 // 8. Libra claimed evaluation
491 populate_field_elements<FF>(proof, 1);
492
493 // 9. Libra grand sum commitment
494 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
495
496 // 10. Libra quotient commitment
497 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
498
499 // 11-15. PCS proof (Gemini fold commitments/evaluations, libra evals, Shplonk, KZG)
500 HonkProof pcs_proof = create_mock_pcs_proof<Flavor>();
501 proof.insert(proof.end(), pcs_proof.begin(), pcs_proof.end());
502
503 BB_ASSERT_EQ(proof.size(), Flavor::PROOF_LENGTH);
504
505 return proof;
506}
507
517{
518 using TransFlavor = TranslatorFlavor;
519 using Curve = TransFlavor::Curve;
520 using FF = TransFlavor::FF;
521
522 HonkProof proof;
523
524 // === Translator Oink ===
525 // 1. Gemini masking poly commitment
526 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
527 // 2. Wire commitments: concatenated(5) + ordered(5) = 10
528 populate_field_elements_for_mock_commitments<Curve>(proof,
529 /*num_commitments=*/TransFlavor::NUM_COMMITMENTS_IN_PROOF);
530 // 3. Z_PERM commitment
531 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
532
533 // === Joint Sumcheck ===
534 // 4. Libra concatenation commitment
535 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
536 // 5. Libra sum
537 populate_field_elements<FF>(proof, 1);
538 // 6. Committed sumcheck rounds 0..JOINT_LOG_N-1 (commitment + 2 evals per round)
539 constexpr size_t JOINT_LOG_N = TransFlavor::CONST_TRANSLATOR_LOG_N;
540 for (size_t round = 0; round < JOINT_LOG_N; round++) {
541 // Minicircuit evaluations appear after round LOG_MINI_CIRCUIT_SIZE-1's data
542 if (round == TransFlavor::LOG_MINI_CIRCUIT_SIZE) {
543 populate_field_elements<FF>(proof, TransFlavor::NUM_MINICIRCUIT_EVALUATIONS);
544 }
545 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1); // round univariate comm
546 populate_field_elements<FF>(proof, 2); // evals at 0 and 1
547 }
548 // 7. MegaZK evaluations (sent after all sumcheck rounds)
549 populate_field_elements<FF>(proof, MegaZKFlavor::NUM_ALL_ENTITIES);
550 // 8. Translator full circuit evaluations (sent after all rounds)
551 populate_field_elements<FF>(proof, TransFlavor::NUM_FULL_CIRCUIT_EVALUATIONS);
552 // 9. Libra claimed evaluation
553 populate_field_elements<FF>(proof, 1);
554 // 10. Libra grand sum commitment
555 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
556 // 11. Libra quotient commitment
557 populate_field_elements_for_mock_commitments<Curve>(proof, /*num_commitments=*/1);
558
559 // === Joint PCS (same structure as standalone translator PCS, using JOINT_LOG_N = 17) ===
560 HonkProof pcs_proof = create_mock_pcs_proof<TransFlavor>();
561 proof.insert(proof.end(), pcs_proof.begin(), pcs_proof.end());
562
563 return proof;
564}
565
566template <typename Builder> HonkProof create_mock_chonk_proof(const size_t acir_public_inputs_size)
567{
568 // MegaZK Oink only (no decider — sumcheck+PCS are batched into the joint proof)
569 HonkProof hiding_oink =
570 create_mock_oink_proof<MegaZKFlavor, stdlib::recursion::honk::HidingKernelIO<Builder>>(acir_public_inputs_size);
572 HonkProof eccvm_proof{ create_mock_eccvm_proof() };
573 HonkProof ipa_proof = create_mock_ipa_proof();
574 // Batched joint proof: Translator Oink + joint sumcheck + joint PCS
576
577 ChonkProof chonk_proof{ std::move(hiding_oink),
578 std::move(merge_proof),
579 std::move(eccvm_proof),
580 std::move(ipa_proof),
581 std::move(joint_proof) };
582 return chonk_proof.to_field_elements();
583}
584
585template <typename Flavor, class PublicInputs>
587 const size_t acir_public_inputs_size)
588{
589 // Set relevant VK metadata and commitments
590 auto honk_verification_key = std::make_shared<typename Flavor::VerificationKey>();
591 honk_verification_key->log_circuit_size = bb::numeric::get_msb(dyadic_size);
592 honk_verification_key->num_public_inputs = acir_public_inputs_size + PublicInputs::PUBLIC_INPUTS_SIZE;
593 honk_verification_key->pub_inputs_offset = NUM_ZERO_ROWS;
594
595 for (auto& commitment : honk_verification_key->get_all()) {
596 commitment = curve::BN254::AffineElement::one(); // arbitrary mock commitment
597 }
598
599 return honk_verification_key;
600}
601
602// Explicitly instantiate template functions
605template HonkProof create_mock_oink_proof<MegaFlavor, stdlib::recursion::honk::HidingKernelIO<MegaCircuitBuilder>>(
606 const size_t);
607template HonkProof create_mock_oink_proof<MegaZKFlavor, stdlib::recursion::honk::HidingKernelIO<UltraCircuitBuilder>>(
608 const size_t);
609template HonkProof create_mock_oink_proof<MegaZKFlavor, stdlib::recursion::honk::HidingKernelIO<MegaCircuitBuilder>>(
610 const size_t);
611
612template HonkProof create_mock_oink_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
613 const size_t);
614template HonkProof create_mock_oink_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
615 const size_t);
616template HonkProof create_mock_oink_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
617 const size_t);
618template HonkProof create_mock_oink_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
619 const size_t);
621
622template HonkProof create_mock_oink_proof<avm2::AvmFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
623 const size_t);
624
627
632
635template HonkProof create_mock_honk_proof<MegaFlavor, stdlib::recursion::honk::HidingKernelIO<MegaCircuitBuilder>>(
636 const size_t);
637
638template HonkProof create_mock_honk_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
639 const size_t);
640template HonkProof create_mock_honk_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
641 const size_t);
642template HonkProof create_mock_honk_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
643 const size_t);
644template HonkProof create_mock_honk_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
645 const size_t);
647
649construct_arbitrary_valid_honk_proof_and_vk<UltraFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
650 const size_t);
652construct_arbitrary_valid_honk_proof_and_vk<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
653 const size_t);
656
659
662
664 const size_t, const size_t);
667 const size_t, const size_t);
674
689 const size_t, const size_t);
690
691} // namespace acir_format
#define BB_ASSERT_EQ(actual, expected,...)
Definition assert.hpp:83
#define BB_ASSERT_LTE(left, right,...)
Definition assert.hpp:158
#define AVM_V2_PROOF_LENGTH_IN_FIELDS_PADDED
static constexpr size_t NUM_WIRES
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 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
Child class of MegaFlavor that runs with ZK Sumcheck.
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...
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:227
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_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_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.
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.
template HonkProof create_mock_hyper_nova_proof< MegaFlavor, stdlib::recursion::honk::AppIO >(bool)
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_hyper_nova_proof< MegaFlavor, stdlib::recursion::honk::KernelIO >(bool)
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_hyper_nova_proof(bool include_fold)
Create a mock Hypernova proof that has the correct structure but is not in general valid.
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.
HonkProof create_mock_multilinear_batch_proof()
Create a mock multilinear batching sumcheck proof that has the correct structure but is not in genera...
template HonkProof create_mock_pcs_proof< TranslatorFlavor >()
HonkProof create_mock_avm_proof_without_pub_inputs(const bool add_padding)
Create a mock AVM proof without public inputs that has the correct structure but is not in general va...
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.
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
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