19 auto mock_commitment = Curve::AffineElement::one();
21 for (
size_t i = 0; i < num_commitments; ++i) {
22 for (
const fr& val : mock_commitment_frs) {
23 fields.emplace_back(val);
31 for (
size_t i = 0; i < num_elements; ++i) {
34 fields.insert(fields.end(), field_elements.begin(), field_elements.end());
43 typename PublicInputs::Builder
builder;
44 PublicInputs::add_default(
builder);
47 populate_field_elements<fr>(proof, acir_public_inputs_size);
50 for (
const auto& pub :
builder.public_inputs()) {
51 proof.emplace_back(
builder.get_variable(pub));
67 populate_field_elements<FF>(proof, TOTAL_SIZE_SUMCHECK_UNIVARIATES);
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>>();
83 BB_ASSERT(proof.has_value(),
"Unmatched num_claims in create_mock_multilinear_batch_proof");
90 HonkProof oink_proof = create_mock_oink_proof<Flavor, PublicInputs>(0);
91 HonkProof sumcheck_proof = create_mock_sumcheck_proof<Flavor>();
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());
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);
112 const size_t NUM_GEMINI_FOLD_EVALUATIONS = Flavor::VIRTUAL_LOG_N;
113 populate_field_elements<FF>(proof, NUM_GEMINI_FOLD_EVALUATIONS);
121 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
123 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
134 constexpr size_t const_proof_log_n = []() {
136 return MEGA_AVM_LOG_N;
138 return Flavor::VIRTUAL_LOG_N;
144 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
147 populate_field_elements<FF>(proof, 1);
152 populate_field_elements<FF>(proof, TOTAL_SIZE_SUMCHECK_UNIVARIATES);
159 populate_field_elements<FF>(proof, 1);
162 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
165 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
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);
173 const size_t NUM_GEMINI_FOLD_EVALUATIONS = const_proof_log_n;
174 populate_field_elements<FF>(proof, NUM_GEMINI_FOLD_EVALUATIONS);
182 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
184 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
192 HonkProof oink_proof = create_mock_oink_proof<Flavor, PublicInputs>(acir_public_inputs_size);
193 HonkProof decider_proof = create_mock_decider_proof<Flavor>();
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());
199 if constexpr (PublicInputs::HasIPA) {
201 proof.insert(proof.end(), ipa_proof.begin(), ipa_proof.end());
210 create_mock_oink_proof<bb::avm2::AvmFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
215 proof.reserve(proof_length);
216 proof.insert(proof.end(),
220 proof.insert(proof.end(), decider_proof.begin(), decider_proof.end());
222 BB_ASSERT_EQ(proof.size(), proof_length,
"AVM mock proof length must match COMPUTED_AVM_PROOF_LENGTH_IN_FIELDS");
227template <
typename Flavor,
typename IO>
229 const size_t acir_public_inputs_size)
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);
249 builder.create_big_add_gate({ a_idx, b_idx, c_idx, d_idx,
fr(1),
fr(1),
fr(1),
fr(-1),
fr(0) });
252 for (
size_t i = 0; i < acir_public_inputs_size; ++i) {
264 InnerProver prover(decider_pk,
vk);
265 auto honk_proof = prover.construct_proof();
266 return std::pair(honk_proof,
vk);
272 proof.reserve(MERGE_PROOF_SIZE);
304 populate_field_elements<fr>(proof, 1,
fr{ 1 });
307 populate_field_elements<fr>(proof, 1,
fr{ 2 });
308 populate_field_elements<fr>(proof, MAX_MERGE_SIZE - 1,
fr{ 0 });
314 const size_t num_evaluations = (MAX_MERGE_SIZE * NUM_WIRES) + NUM_WIRES + NUM_WIRES + 1;
339 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
342 populate_field_elements<FF>(proof, 1);
345 for (
size_t idx = 0; idx < CONST_ECCVM_LOG_N; idx++) {
346 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
347 populate_field_elements<FF>(proof, 2);
354 populate_field_elements<FF>(proof, 1);
357 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
360 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
366 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
369 populate_field_elements<FF>(proof, 1);
372 populate_field_elements<FF>(proof, 1);
375 populate_field_elements<FF>(proof, 1);
378 populate_field_elements<FF>(proof, 1);
381 populate_field_elements<FF>(proof, 1);
384 populate_field_elements<FF>(proof, 1);
387 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
390 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
393 populate_field_elements<FF>(proof, 1);
396 populate_field_elements<FF>(proof, 1);
399 populate_field_elements<FF>(proof, 1);
402 populate_field_elements<FF>(proof, 1);
405 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
408 populate_field_elements<FF>(proof, 1);
411 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
423 populate_field_elements_for_mock_commitments<curve::Grumpkin>(
424 proof, CONST_ECCVM_LOG_N + CONST_ECCVM_LOG_N);
427 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
430 populate_field_elements<curve::BN254::BaseField>(proof, 1);
443 populate_field_elements<FF>(proof, 3);
446 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 2 * CONST_ECCVM_LOG_N);
449 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
452 populate_field_elements<FF>(proof, 1);
468 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
471 populate_field_elements_for_mock_commitments<Curve>(proof, Flavor::NUM_COMMITMENTS_IN_PROOF);
474 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
477 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
480 populate_field_elements<FF>(proof, 1);
486 populate_field_elements<FF>(proof, Flavor::NUM_SENT_EVALUATIONS);
489 populate_field_elements<FF>(proof, 1);
492 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
495 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
498 HonkProof pcs_proof = create_mock_pcs_proof<Flavor>();
499 proof.insert(proof.end(), pcs_proof.begin(), pcs_proof.end());
517 using Curve = TransFlavor::Curve;
518 using FF = TransFlavor::FF;
524 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
526 populate_field_elements_for_mock_commitments<Curve>(proof,
527 TransFlavor::NUM_COMMITMENTS_IN_PROOF);
529 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
533 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
535 populate_field_elements<FF>(proof, 1);
537 constexpr size_t JOINT_LOG_N = TransFlavor::CONST_TRANSLATOR_LOG_N;
538 for (
size_t round = 0; round < JOINT_LOG_N; round++) {
540 if (round == TransFlavor::LOG_MINI_CIRCUIT_SIZE) {
541 populate_field_elements<FF>(proof, TransFlavor::NUM_MINICIRCUIT_EVALUATIONS);
543 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
544 populate_field_elements<FF>(proof, 2);
547 populate_field_elements<FF>(proof, MegaZKFlavor::NUM_ALL_ENTITIES);
549 populate_field_elements<FF>(proof, TransFlavor::NUM_FULL_CIRCUIT_EVALUATIONS);
551 populate_field_elements<FF>(proof, 1);
553 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
555 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
558 HonkProof pcs_proof = create_mock_pcs_proof<TransFlavor>();
559 proof.insert(proof.end(), pcs_proof.begin(), pcs_proof.end());
568 create_mock_oink_proof<MegaZKFlavor, stdlib::recursion::honk::HidingKernelIO<Builder>>(acir_public_inputs_size);
583template <
typename Flavor,
class PublicInputs>
585 const size_t acir_public_inputs_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;
593 for (
auto& commitment : honk_verification_key->get_all()) {
594 commitment = curve::BN254::AffineElement::one();
597 return honk_verification_key;
603template HonkProof create_mock_oink_proof<MegaFlavor, stdlib::recursion::honk::HidingKernelIO<MegaCircuitBuilder>>(
605template HonkProof create_mock_oink_proof<MegaZKFlavor, stdlib::recursion::honk::HidingKernelIO<UltraCircuitBuilder>>(
607template HonkProof create_mock_oink_proof<MegaZKFlavor, stdlib::recursion::honk::HidingKernelIO<MegaCircuitBuilder>>(
610template HonkProof create_mock_oink_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
612template HonkProof create_mock_oink_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
614template HonkProof create_mock_oink_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
616template HonkProof create_mock_oink_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
620template HonkProof create_mock_oink_proof<avm2::AvmFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
634template HonkProof create_mock_honk_proof<MegaFlavor, stdlib::recursion::honk::HidingKernelIO<MegaCircuitBuilder>>(
637template HonkProof create_mock_honk_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
639template HonkProof create_mock_honk_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
641template HonkProof create_mock_honk_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
643template HonkProof create_mock_honk_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
648construct_arbitrary_valid_honk_proof_and_vk<UltraFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
651construct_arbitrary_valid_honk_proof_and_vk<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
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);
697 const size_t,
const size_t);
#define BB_ASSERT(expression,...)
#define BB_ASSERT_EQ(actual, expected,...)
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
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.
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
FixedVKAndHash_< PrecomputedEntities< Commitment >, FF, typename constraining::AvmHardCodedVKAndHash > VerificationKey
Verification key of the AVM. It is fixed and reconstructed from precomputed values.
static constexpr bool HasZK
static constexpr size_t NUM_WITNESS_ENTITIES
static constexpr size_t BATCHED_RELATION_PARTIAL_LENGTH
static constexpr size_t NUM_ALL_ENTITIES
AvmFlavorSettings::Curve Curve
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.
Base class templates shared across Honk flavors.
ProverInstance_< UltraKeccakFlavor > ProverInstance
constexpr T get_msb(const T in)
Entry point for Barretenberg command-line interface.
constexpr size_t NUM_SMALL_IPA_TRANSCRIPT_EVALS
std::vector< fr > HonkProof
field< Bn254FrParams > fr
VerifierCommitmentKey< Curve > vk
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
std::vector< FF > to_field_elements() const
Serialize proof to field elements (native mode)
static field random_element(numeric::RNG *engine=nullptr) noexcept