20 auto mock_commitment = Curve::AffineElement::one();
22 for (
size_t i = 0; i < num_commitments; ++i) {
23 for (
const fr& val : mock_commitment_frs) {
24 fields.emplace_back(val);
32 for (
size_t i = 0; i < num_elements; ++i) {
35 fields.insert(fields.end(), field_elements.begin(), field_elements.end());
44 typename PublicInputs::Builder
builder;
45 PublicInputs::add_default(
builder);
48 populate_field_elements<fr>(proof, acir_public_inputs_size);
51 for (
const auto& pub :
builder.public_inputs()) {
52 proof.emplace_back(
builder.get_variable(pub));
68 populate_field_elements<FF>(proof, TOTAL_SIZE_SUMCHECK_UNIVARIATES);
86 populate_field_elements<FF>(proof, Flavor::VIRTUAL_LOG_N);
92 HonkProof sumcheck_proof = create_mock_sumcheck_proof<Flavor>();
94 proof.insert(proof.end(), sumcheck_proof.begin(), sumcheck_proof.end());
101 HonkProof oink_proof = create_mock_oink_proof<Flavor, PublicInputs>(0);
102 HonkProof sumcheck_proof = create_mock_sumcheck_proof<Flavor>();
108 proof.reserve(oink_proof.size() + sumcheck_proof.size() + multilinear_batch_proof.size());
109 proof.insert(proof.end(), oink_proof.begin(), oink_proof.end());
110 proof.insert(proof.end(), sumcheck_proof.begin(), sumcheck_proof.end());
111 proof.insert(proof.end(), multilinear_batch_proof.begin(), multilinear_batch_proof.end());
124 const size_t NUM_GEMINI_FOLD_COMMITMENTS = Flavor::VIRTUAL_LOG_N - 1;
125 populate_field_elements_for_mock_commitments<Curve>(proof, NUM_GEMINI_FOLD_COMMITMENTS);
128 const size_t NUM_GEMINI_FOLD_EVALUATIONS = Flavor::VIRTUAL_LOG_N;
129 populate_field_elements<FF>(proof, NUM_GEMINI_FOLD_EVALUATIONS);
133 populate_field_elements<FF>(proof, 1);
136 populate_field_elements<FF>(proof, 1);
141 populate_field_elements<FF>(proof, NUM_SMALL_IPA_EVALUATIONS);
145 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
147 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
158 constexpr size_t const_proof_log_n = Flavor::VIRTUAL_LOG_N;
162 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
165 populate_field_elements<FF>(proof, 1);
170 populate_field_elements<FF>(proof, TOTAL_SIZE_SUMCHECK_UNIVARIATES);
177 populate_field_elements<FF>(proof, 1);
180 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
183 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
187 const size_t NUM_GEMINI_FOLD_COMMITMENTS = const_proof_log_n - 1;
188 populate_field_elements_for_mock_commitments<Curve>(proof, NUM_GEMINI_FOLD_COMMITMENTS);
191 const size_t NUM_GEMINI_FOLD_EVALUATIONS = const_proof_log_n;
192 populate_field_elements<FF>(proof, NUM_GEMINI_FOLD_EVALUATIONS);
196 populate_field_elements<FF>(proof, 1);
199 populate_field_elements<FF>(proof, 1);
204 populate_field_elements<FF>(proof, NUM_SMALL_IPA_EVALUATIONS);
208 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
210 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
218 HonkProof oink_proof = create_mock_oink_proof<Flavor, PublicInputs>(acir_public_inputs_size);
219 HonkProof decider_proof = create_mock_decider_proof<Flavor>();
221 proof.reserve(oink_proof.size() + decider_proof.size());
222 proof.insert(proof.end(), oink_proof.begin(), oink_proof.end());
223 proof.insert(proof.end(), decider_proof.begin(), decider_proof.end());
225 if constexpr (HasIPAAccumulator<Flavor>) {
227 proof.insert(proof.end(), ipa_proof.begin(), ipa_proof.end());
232template <
typename Flavor>
234 const size_t acir_public_inputs_size)
249 uint32_t a_idx =
builder.add_variable(
a);
250 uint32_t b_idx =
builder.add_variable(
b);
251 uint32_t c_idx =
builder.add_variable(c);
252 uint32_t d_idx =
builder.add_variable(d);
254 builder.create_big_add_gate({ a_idx, b_idx, c_idx, d_idx,
fr(1),
fr(1),
fr(1),
fr(-1),
fr(0) });
257 for (
size_t i = 0; i < acir_public_inputs_size; ++i) {
262 if constexpr (HasIPAAccumulator<Flavor>) {
274 InnerProver prover(decider_pk,
vk);
275 auto honk_proof = prover.construct_proof();
276 return std::pair(honk_proof,
vk);
282 proof.reserve(MERGE_PROOF_SIZE);
284 uint32_t mock_shift_size = 5;
287 populate_field_elements<fr>(proof, 1,
fr{ mock_shift_size });
322 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
325 populate_field_elements<FF>(proof, 1);
328 for (
size_t idx = 0; idx < CONST_ECCVM_LOG_N; idx++) {
329 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
330 populate_field_elements<FF>(proof, 2);
337 populate_field_elements<FF>(proof, 1);
340 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
343 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
346 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof,
347 CONST_ECCVM_LOG_N - 1);
350 populate_field_elements<FF>(proof, CONST_ECCVM_LOG_N);
353 populate_field_elements<FF>(proof, NUM_SMALL_IPA_EVALUATIONS);
356 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
359 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
362 populate_field_elements<FF>(proof, 1);
365 populate_field_elements<FF>(proof, 1);
368 populate_field_elements<FF>(proof, 1);
371 populate_field_elements<FF>(proof, 1);
374 populate_field_elements<FF>(proof, 1);
377 populate_field_elements<FF>(proof, 1);
380 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
383 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
386 populate_field_elements<FF>(proof, 1);
389 populate_field_elements<FF>(proof, 1);
392 populate_field_elements<FF>(proof, 1);
395 populate_field_elements<FF>(proof, 1);
398 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
410 populate_field_elements_for_mock_commitments<curve::Grumpkin>(
411 proof, CONST_ECCVM_LOG_N + CONST_ECCVM_LOG_N);
414 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
417 populate_field_elements<curve::BN254::BaseField>(proof, 1);
432 populate_field_elements_for_mock_commitments<Curve>(proof,
438 proof.insert(proof.end(), decider_proof.begin(), decider_proof.end());
450 create_mock_honk_proof<MegaZKFlavor, stdlib::recursion::honk::HidingKernelIO<Builder>>(acir_public_inputs_size);
456 ChonkProof chonk_proof{ mega_proof,
GoblinProof{ merge_proof, eccvm_proof, ipa_proof, translator_proof } };
457 proof = chonk_proof.to_field_elements();
462template <
typename Flavor,
class PublicInputs>
464 const size_t pub_inputs_offset,
465 const size_t acir_public_inputs_size)
470 honk_verification_key->num_public_inputs = acir_public_inputs_size + PublicInputs::PUBLIC_INPUTS_SIZE;
471 honk_verification_key->pub_inputs_offset = pub_inputs_offset;
473 for (
auto& commitment : honk_verification_key->get_all()) {
474 commitment = curve::BN254::AffineElement::one();
477 return honk_verification_key;
483template HonkProof create_mock_oink_proof<MegaFlavor, stdlib::recursion::honk::HidingKernelIO<MegaCircuitBuilder>>(
486template HonkProof create_mock_oink_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
488template HonkProof create_mock_oink_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
490template HonkProof create_mock_oink_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
492template HonkProof create_mock_oink_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
506template HonkProof create_mock_honk_proof<MegaFlavor, stdlib::recursion::honk::HidingKernelIO<MegaCircuitBuilder>>(
509template HonkProof create_mock_honk_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
511template HonkProof create_mock_honk_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
513template HonkProof create_mock_honk_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
515template HonkProof create_mock_honk_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
533 const size_t,
const size_t,
const size_t);
536 const size_t,
const size_t,
const size_t);
558 const size_t,
const size_t,
const size_t);
#define BB_ASSERT_EQ(actual, expected,...)
The verification key is responsible for storing the commitments to the precomputed (non-witnessk) pol...
static constexpr bool HasZK
typename Curve::ScalarField FF
static constexpr size_t NUM_ALL_ENTITIES
ECCVMCircuitBuilder CircuitBuilder
static constexpr size_t NUM_WITNESS_ENTITIES
static constexpr size_t PROOF_LENGTH_WITHOUT_PUB_INPUTS
static constexpr size_t BATCHED_RELATION_PARTIAL_LENGTH
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. See more in Sumcheck Outline.
Base Native verification key class.
A ProverInstance is normally constructed from a finalized circuit and it contains all the information...
static constexpr size_t NUM_WITNESS_ENTITIES
static constexpr size_t NUM_OP_QUEUE_WIRES
static constexpr size_t PROOF_LENGTH_WITHOUT_PUB_INPUTS
UltraRollupFlavor extends UltraFlavor with IPA proof support.
Child class of UltraFlavor that runs with ZK Sumcheck.
Manages the data that is propagated on the public inputs of an application/function circuit.
static void add_default(Builder &builder)
Add default public inputs when they are not present.
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.
static void add_default(Builder &builder)
Add default public inputs when they are not present.
Base class templates for structures that contain data parameterized by the fundamental polynomials of...
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
static field random_element(numeric::RNG *engine=nullptr) noexcept