16 auto mock_commitment = Curve::AffineElement::one();
18 for (
size_t i = 0; i < num_commitments; ++i) {
19 for (
const fr& val : mock_commitment_frs) {
20 fields.emplace_back(val);
28 for (
size_t i = 0; i < num_elements; ++i) {
31 fields.insert(fields.end(), field_elements.begin(), field_elements.end());
40 typename PublicInputs::Builder
builder;
41 PublicInputs::add_default(
builder);
44 populate_field_elements<fr>(proof, acir_public_inputs_size);
47 for (
const auto& pub :
builder.public_inputs()) {
48 proof.emplace_back(
builder.get_variable(pub));
64 populate_field_elements<FF>(proof, TOTAL_SIZE_SUMCHECK_UNIVARIATES);
82 populate_field_elements<FF>(proof, Flavor::VIRTUAL_LOG_N);
85 populate_field_elements<FF>(proof, Flavor::NUM_ACCUMULATOR_EVALUATIONS);
88 HonkProof sumcheck_proof = create_mock_sumcheck_proof<Flavor>();
90 proof.insert(proof.end(), sumcheck_proof.begin(), sumcheck_proof.end());
97 HonkProof oink_proof = create_mock_oink_proof<Flavor, PublicInputs>(0);
98 HonkProof sumcheck_proof = create_mock_sumcheck_proof<Flavor>();
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());
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);
123 const size_t NUM_GEMINI_FOLD_EVALUATIONS = Flavor::VIRTUAL_LOG_N;
124 populate_field_elements<FF>(proof, NUM_GEMINI_FOLD_EVALUATIONS);
128 populate_field_elements<FF>(proof, NUM_SMALL_IPA_EVALUATIONS);
132 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
134 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
145 constexpr size_t const_proof_log_n = []() {
147 return MEGA_AVM_LOG_N;
149 return Flavor::VIRTUAL_LOG_N;
155 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
158 populate_field_elements<FF>(proof, 1);
163 populate_field_elements<FF>(proof, TOTAL_SIZE_SUMCHECK_UNIVARIATES);
170 populate_field_elements<FF>(proof, 1);
173 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
176 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
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);
184 const size_t NUM_GEMINI_FOLD_EVALUATIONS = const_proof_log_n;
185 populate_field_elements<FF>(proof, NUM_GEMINI_FOLD_EVALUATIONS);
189 populate_field_elements<FF>(proof, NUM_SMALL_IPA_EVALUATIONS);
193 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
195 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
203 HonkProof oink_proof = create_mock_oink_proof<Flavor, PublicInputs>(acir_public_inputs_size);
204 HonkProof decider_proof = create_mock_decider_proof<Flavor>();
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());
210 if constexpr (PublicInputs::HasIPA) {
212 proof.insert(proof.end(), ipa_proof.begin(), ipa_proof.end());
219 size_t proof_length =
223 create_mock_oink_proof<bb::avm2::AvmFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
228 proof.reserve(proof_length);
229 proof.insert(proof.end(),
233 proof.insert(proof.end(), decider_proof.begin(), decider_proof.end());
236 proof.resize(proof_length, 0);
241template <
typename Flavor,
typename IO>
243 const size_t acir_public_inputs_size)
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);
263 builder.create_big_add_gate({ a_idx, b_idx, c_idx, d_idx,
fr(1),
fr(1),
fr(1),
fr(-1),
fr(0) });
266 for (
size_t i = 0; i < acir_public_inputs_size; ++i) {
278 InnerProver prover(decider_pk,
vk);
279 auto honk_proof = prover.construct_proof();
280 return std::pair(honk_proof,
vk);
286 proof.reserve(MERGE_PROOF_SIZE);
288 uint32_t mock_shift_size = 5;
291 populate_field_elements<fr>(proof, 1,
fr{ mock_shift_size });
324 populate_field_elements<fr>(proof, 1,
fr{ 1 });
327 populate_field_elements<fr>(proof, 1,
fr{ 2 });
328 populate_field_elements<fr>(proof, MAX_MERGE_SIZE - 1,
fr{ 0 });
334 const size_t num_evaluations = (MAX_MERGE_SIZE * NUM_WIRES) + NUM_WIRES + NUM_WIRES + 1;
359 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
362 populate_field_elements<FF>(proof, 1);
365 for (
size_t idx = 0; idx < CONST_ECCVM_LOG_N; idx++) {
366 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
367 populate_field_elements<FF>(proof, 2);
374 populate_field_elements<FF>(proof, 1);
377 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
380 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
383 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof,
384 CONST_ECCVM_LOG_N - 1);
387 populate_field_elements<FF>(proof, CONST_ECCVM_LOG_N);
390 populate_field_elements<FF>(proof, NUM_SMALL_IPA_EVALUATIONS);
393 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
396 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
399 populate_field_elements<FF>(proof, 1);
402 populate_field_elements<FF>(proof, 1);
405 populate_field_elements<FF>(proof, 1);
408 populate_field_elements<FF>(proof, 1);
411 populate_field_elements<FF>(proof, 1);
414 populate_field_elements<FF>(proof, 1);
417 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
420 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
423 populate_field_elements<FF>(proof, 1);
426 populate_field_elements<FF>(proof, 1);
429 populate_field_elements<FF>(proof, 1);
432 populate_field_elements<FF>(proof, 1);
435 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
447 populate_field_elements_for_mock_commitments<curve::Grumpkin>(
448 proof, CONST_ECCVM_LOG_N + CONST_ECCVM_LOG_N);
451 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
454 populate_field_elements<curve::BN254::BaseField>(proof, 1);
470 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
473 populate_field_elements_for_mock_commitments<Curve>(proof, Flavor::NUM_COMMITMENTS_IN_PROOF);
476 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
479 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
482 populate_field_elements<FF>(proof, 1);
488 populate_field_elements<FF>(proof, Flavor::NUM_SENT_EVALUATIONS);
491 populate_field_elements<FF>(proof, 1);
494 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
497 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
500 HonkProof pcs_proof = create_mock_pcs_proof<Flavor>();
501 proof.insert(proof.end(), pcs_proof.begin(), pcs_proof.end());
519 using Curve = TransFlavor::Curve;
520 using FF = TransFlavor::FF;
526 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
528 populate_field_elements_for_mock_commitments<Curve>(proof,
529 TransFlavor::NUM_COMMITMENTS_IN_PROOF);
531 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
535 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
537 populate_field_elements<FF>(proof, 1);
539 constexpr size_t JOINT_LOG_N = TransFlavor::CONST_TRANSLATOR_LOG_N;
540 for (
size_t round = 0; round < JOINT_LOG_N; round++) {
542 if (round == TransFlavor::LOG_MINI_CIRCUIT_SIZE) {
543 populate_field_elements<FF>(proof, TransFlavor::NUM_MINICIRCUIT_EVALUATIONS);
545 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
546 populate_field_elements<FF>(proof, 2);
549 populate_field_elements<FF>(proof, MegaZKFlavor::NUM_ALL_ENTITIES);
551 populate_field_elements<FF>(proof, TransFlavor::NUM_FULL_CIRCUIT_EVALUATIONS);
553 populate_field_elements<FF>(proof, 1);
555 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
557 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
560 HonkProof pcs_proof = create_mock_pcs_proof<TransFlavor>();
561 proof.insert(proof.end(), pcs_proof.begin(), pcs_proof.end());
570 create_mock_oink_proof<MegaZKFlavor, stdlib::recursion::honk::HidingKernelIO<Builder>>(acir_public_inputs_size);
585template <
typename Flavor,
class PublicInputs>
587 const size_t acir_public_inputs_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;
595 for (
auto& commitment : honk_verification_key->get_all()) {
596 commitment = curve::BN254::AffineElement::one();
599 return honk_verification_key;
605template HonkProof create_mock_oink_proof<MegaFlavor, stdlib::recursion::honk::HidingKernelIO<MegaCircuitBuilder>>(
607template HonkProof create_mock_oink_proof<MegaZKFlavor, stdlib::recursion::honk::HidingKernelIO<UltraCircuitBuilder>>(
609template HonkProof create_mock_oink_proof<MegaZKFlavor, stdlib::recursion::honk::HidingKernelIO<MegaCircuitBuilder>>(
612template HonkProof create_mock_oink_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
614template HonkProof create_mock_oink_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
616template HonkProof create_mock_oink_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
618template HonkProof create_mock_oink_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
622template HonkProof create_mock_oink_proof<avm2::AvmFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
635template HonkProof create_mock_honk_proof<MegaFlavor, stdlib::recursion::honk::HidingKernelIO<MegaCircuitBuilder>>(
638template HonkProof create_mock_honk_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
640template HonkProof create_mock_honk_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
642template HonkProof create_mock_honk_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
644template HonkProof create_mock_honk_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
649construct_arbitrary_valid_honk_proof_and_vk<UltraFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
652construct_arbitrary_valid_honk_proof_and_vk<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
664 const size_t,
const size_t);
667 const size_t,
const size_t);
689 const size_t,
const size_t);
#define BB_ASSERT_EQ(actual, expected,...)
#define BB_ASSERT_LTE(left, right,...)
#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
Child class of MegaFlavor that runs with ZK Sumcheck.
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.
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