30template <
class Curve = curve::BN254>
33 auto mock_commitment = Curve::AffineElement::one();
35 for (
size_t i = 0; i < num_commitments; ++i) {
36 for (
const fr& val : mock_commitment_frs) {
37 fields.emplace_back(val);
49template <
class FF = curve::BN254::ScalarField>
51 const size_t& num_elements,
54 for (
size_t i = 0; i < num_elements; ++i) {
57 fields.insert(fields.end(), field_elements.begin(), field_elements.end());
71 typename PublicInputs::Builder
builder;
72 PublicInputs::add_default(
builder);
75 populate_field_elements<fr>(proof, inner_public_inputs_size);
78 for (
const auto& pub :
builder.public_inputs()) {
79 proof.emplace_back(
builder.get_variable(pub));
95 populate_field_elements<FF>(proof, TOTAL_SIZE_SUMCHECK_UNIVARIATES);
119 HonkProof sumcheck_proof = create_mock_sumcheck_proof<Flavor>();
121 proof.insert(proof.end(), sumcheck_proof.begin(), sumcheck_proof.end());
128 HonkProof oink_proof = create_mock_oink_proof<Flavor, PublicInputs>(0);
129 HonkProof sumcheck_proof = create_mock_sumcheck_proof<Flavor>();
135 proof.reserve(oink_proof.size() + sumcheck_proof.size() + multilinear_batch_proof.size());
136 proof.insert(proof.end(), oink_proof.begin(), oink_proof.end());
137 proof.insert(proof.end(), sumcheck_proof.begin(), sumcheck_proof.end());
138 proof.insert(proof.end(), multilinear_batch_proof.begin(), multilinear_batch_proof.end());
152 populate_field_elements_for_mock_commitments<Curve>(proof, NUM_GEMINI_FOLD_COMMITMENTS);
156 populate_field_elements<FF>(proof, NUM_GEMINI_FOLD_EVALUATIONS);
160 populate_field_elements<FF>(proof, 1);
163 populate_field_elements<FF>(proof, 1);
168 populate_field_elements<FF>(proof, NUM_SMALL_IPA_EVALUATIONS);
172 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
174 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
193 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
196 populate_field_elements<FF>(proof, 1);
201 populate_field_elements<FF>(proof, TOTAL_SIZE_SUMCHECK_UNIVARIATES);
208 populate_field_elements<FF>(proof, 1);
211 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
214 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
217 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
220 populate_field_elements<FF>(proof, 1);
224 const size_t NUM_GEMINI_FOLD_COMMITMENTS = const_proof_log_n - 1;
225 populate_field_elements_for_mock_commitments<Curve>(proof, NUM_GEMINI_FOLD_COMMITMENTS);
228 const size_t NUM_GEMINI_FOLD_EVALUATIONS = const_proof_log_n;
229 populate_field_elements<FF>(proof, NUM_GEMINI_FOLD_EVALUATIONS);
233 populate_field_elements<FF>(proof, 1);
236 populate_field_elements<FF>(proof, 1);
241 populate_field_elements<FF>(proof, NUM_SMALL_IPA_EVALUATIONS);
245 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
247 populate_field_elements_for_mock_commitments<Curve>(proof, 1);
260 HonkProof oink_proof = create_mock_oink_proof<Flavor, PublicInputs>(inner_public_inputs_size);
261 HonkProof decider_proof = create_mock_decider_proof<Flavor>();
263 proof.reserve(oink_proof.size() + decider_proof.size());
264 proof.insert(proof.end(), oink_proof.begin(), oink_proof.end());
265 proof.insert(proof.end(), decider_proof.begin(), decider_proof.end());
267 if constexpr (HasIPAAccumulator<Flavor>) {
269 proof.insert(proof.end(), ipa_proof.begin(), ipa_proof.end());
280template <
typename Flavor>
282 size_t num_inner_public_inputs)
293 uint32_t a_idx =
builder.add_variable(
a);
299 uint32_t b_idx =
builder.add_variable(
b);
300 uint32_t c_idx =
builder.add_variable(c);
301 uint32_t d_idx =
builder.add_variable(d);
303 builder.create_big_add_gate({ a_idx, b_idx, c_idx, d_idx,
fr(1),
fr(1),
fr(1),
fr(-1),
fr(0) });
306 for (
size_t i = 0; i < num_inner_public_inputs; ++i) {
313 if constexpr (HasIPAAccumulator<Flavor>) {
315 auto [stdlib_opening_claim, ipa_proof] =
317 stdlib_opening_claim.set_public();
327 InnerProver prover(decider_pk,
vk);
328 auto honk_proof = prover.construct_proof();
329 return std::pair(honk_proof,
vk);
339 HonkProof proof = create_mock_oink_proof<Flavor, PublicInputs>();
342 populate_field_elements<fr>(proof, CONST_PG_LOG_N,
fr::zero());
345 size_t NUM_COEFF_COMBINER_QUOTIENT = computed_batched_extended_length<Flavor>() - NUM_INSTANCES;
346 populate_field_elements<fr>(proof, NUM_COEFF_COMBINER_QUOTIENT,
fr::zero());
359 proof.reserve(MERGE_PROOF_SIZE);
361 uint32_t mock_shift_size = 5;
364 populate_field_elements<fr>(proof, 1,
fr{ mock_shift_size });
368 const size_t NUM_TRANSCRIPT_ENTITIES = 8;
369 const size_t NUM_TRANSCRIPT_EVALUATIONS = 8;
392 HonkProof mega_proof = create_mock_honk_proof<MegaZKFlavor, stdlib::recursion::honk::HidingKernelIO<Builder>>(
393 inner_public_inputs_size);
398 ClientIVC::Proof civc_proof{ mega_proof, { merge_proof, eccvm_proof, translator_proof } };
420 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
423 populate_field_elements<FF>(proof, 1);
426 for (
size_t idx = 0; idx < CONST_ECCVM_LOG_N; idx++) {
427 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
428 populate_field_elements<FF>(proof, 2);
435 populate_field_elements<FF>(proof, 1);
438 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
441 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
444 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
447 populate_field_elements<FF>(proof, 1);
450 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof,
451 CONST_ECCVM_LOG_N - 1);
454 populate_field_elements<FF>(proof, CONST_ECCVM_LOG_N);
457 populate_field_elements<FF>(proof, NUM_SMALL_IPA_EVALUATIONS);
460 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
463 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
466 populate_field_elements<FF>(proof, 1);
469 populate_field_elements<FF>(proof, 1);
472 populate_field_elements<FF>(proof, 1);
475 populate_field_elements<FF>(proof, 1);
478 populate_field_elements<FF>(proof, 1);
481 populate_field_elements<FF>(proof, 1);
484 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
487 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
490 populate_field_elements<FF>(proof, 1);
493 populate_field_elements<FF>(proof, 1);
496 populate_field_elements<FF>(proof, 1);
499 populate_field_elements<FF>(proof, 1);
502 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
521 populate_field_elements_for_mock_commitments<curve::Grumpkin>(
522 proof, CONST_ECCVM_LOG_N + CONST_ECCVM_LOG_N);
525 populate_field_elements_for_mock_commitments<curve::Grumpkin>(proof, 1);
528 populate_field_elements<curve::BN254::BaseField>(proof, 1);
549 populate_field_elements<BF>(proof, 1);
552 populate_field_elements_for_mock_commitments<Curve>(proof,
556 proof.insert(proof.end(), decider_proof.begin(), decider_proof.end());
570template <
typename Flavor,
class PublicInputs>
572 const size_t pub_inputs_offset,
573 const size_t inner_public_inputs_size)
578 honk_verification_key->num_public_inputs = inner_public_inputs_size + PublicInputs::PUBLIC_INPUTS_SIZE;
579 honk_verification_key->pub_inputs_offset = pub_inputs_offset;
581 for (
auto& commitment : honk_verification_key->get_all()) {
582 commitment = curve::BN254::AffineElement::one();
585 return honk_verification_key;
599 create_mock_honk_vk<Flavor, stdlib::recursion::honk::DefaultIO<typename Flavor::CircuitBuilder>>(
601 verifier_instance->vk =
vk;
602 verifier_instance->is_complete =
true;
603 verifier_instance->gate_challenges = std::vector<FF>(
static_cast<size_t>(CONST_PG_LOG_N),
FF::random_element());
605 for (
auto& commitment : verifier_instance->witness_commitments.get_all()) {
606 commitment = curve::BN254::AffineElement::one();
609 return verifier_instance;
615template HonkProof create_mock_oink_proof<MegaFlavor, stdlib::recursion::honk::HidingKernelIO<MegaCircuitBuilder>>(
618template HonkProof create_mock_oink_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
620template HonkProof create_mock_oink_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
622template HonkProof create_mock_oink_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
624template HonkProof create_mock_oink_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
638template HonkProof create_mock_honk_proof<MegaFlavor, stdlib::recursion::honk::HidingKernelIO<MegaCircuitBuilder>>(
641template HonkProof create_mock_honk_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
643template HonkProof create_mock_honk_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<UltraCircuitBuilder>>(
645template HonkProof create_mock_honk_proof<UltraFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
647template HonkProof create_mock_honk_proof<UltraZKFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
660template HonkProof create_mock_pg_proof<MegaFlavor, stdlib::recursion::honk::HidingKernelIO<MegaCircuitBuilder>>();
662template HonkProof create_mock_hyper_nova_proof<MegaFlavor, stdlib::recursion::honk::DefaultIO<MegaCircuitBuilder>>(
670 const size_t,
const size_t,
const size_t);
673 const size_t,
const size_t,
const size_t);
695 const size_t,
const size_t,
const size_t);
#define BB_ASSERT_EQ(actual, expected,...)
typename Curve::ScalarField FF
static constexpr size_t NUM_ALL_ENTITIES
static constexpr size_t NUM_WITNESS_ENTITIES
static constexpr size_t PROOF_LENGTH_WITHOUT_PUB_INPUTS
static std::vector< fr > serialize_to_fields(const T &val)
Conversion from transcript values to bb::frs.
MergeProver::MergeProof MergeProof
IPA (inner product argument) commitment scheme class.
The verification key is responsible for storing the commitments to the precomputed (non-witness) poly...
MegaCircuitBuilder CircuitBuilder
static constexpr size_t NUM_ALL_ENTITIES
static constexpr bool HasZK
static constexpr size_t NUM_WITNESS_ENTITIES
static constexpr size_t VIRTUAL_LOG_N
static constexpr size_t BATCHED_RELATION_PARTIAL_LENGTH
Child class of MegaFlavor that runs with ZK Sumcheck. See more in Sumcheck Outline.
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 PROOF_LENGTH_WITHOUT_PUB_INPUTS
Child class of UltraFlavor that runs with ZK Sumcheck.
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 for structures that contain data parameterized by the fundamental polynomials of...
UltraKeccakFlavor::VerificationKey VerificationKey
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
A full proof for the IVC scheme containing a Mega proof showing correctness of the hiding circuit (wh...
std::vector< FF > to_field_elements() const
Serialize proof to field elements.
static field random_element(numeric::RNG *engine=nullptr) noexcept
static constexpr field zero()
static void add_default_to_public_inputs(Builder &builder)
Adds default public inputs to the builder.