68 std::shared_ptr<MegaAvmFlavor::VerificationKey>
mega_vk;
117 using MegaRecursiveVKAndHash = MegaAvmRecursiveFlavor::VKAndHash;
127 mega_vk_and_hash->vk->fix_witness();
128 mega_vk_and_hash->hash.fix_witness();
130 MegaAvmRecursiveVerifier mega_verifier(mega_vk_and_hash, transcript);
132 auto mega_verifier_output = mega_verifier.verify_proof(mega_proof);
137 auto goblin_verifier_output = goblin_verifier.reduce_to_pairing_check_and_ipa_opening();
140 mega_verifier_output.points_accumulator.aggregate(goblin_verifier_output.translator_pairing_points);
144 const UltraFF computed_transcript_hash =
146 mega_verifier_output.transcript_hash.assert_equal(computed_transcript_hash);
152 output.
ipa_claim = goblin_verifier_output.ipa_claim;
153 output.
ipa_proof = goblin_verifier_output.ipa_proof;
183 mega_proving_key->log_dyadic_size(),
185 "AVMRecursiveVerifier: circuit size exceeded current upper bound. If expected, bump MEGA_AVM_LOG_N");
187 MegaAvmProver mega_prover(mega_proving_key, mega_vk, transcript);
188 HonkProof mega_proof = mega_prover.construct_proof();
195 .mega_proof = mega_proof,
196 .goblin_proof = goblin_proof,
217 for (
const auto& public_input_column : public_inputs) {
220 for (
const auto& public_input : public_input_column) {
221 inner_public_input_column.push_back(
MegaFF::from_witness(&inner_builder, public_input.get_value()));
223 inner_public_inputs.push_back(
std::move(inner_public_input_column));
230 MegaPairingPoints points_accumulator = recursive_verifier.verify_proof(inner_stdlib_proof, inner_public_inputs);
234 const MegaFF transcript_hash = recursive_verifier.hash_avm_transcript(inner_stdlib_proof);
238 inputs.transcript_hash = transcript_hash;
239 inputs.pairing_inputs = points_accumulator;
#define BB_ASSERT_LTE(left, right,...)
#define AVM_NUM_PUBLIC_INPUT_COLUMNS
#define AVM_PUBLIC_INPUTS_COLUMNS_MAX_LENGTH
Specialization of Goblin for the AVM.
GoblinAvmProof prove()
Constuct a full GoblinAvm proof (ECCVM, Translator)
std::shared_ptr< Transcript > transcript
Recursive flavor for verifying proofs produced with MegaAvmFlavor.
NativeVerificationKey_< PrecomputedEntities< Commitment >, Codec, HashFunction, CommitmentKey > VerificationKey
The verification key is responsible for storing the commitments to the precomputed (non-witness) poly...
A ProverInstance is normally constructed from a finalized circuit and it contains all the information...
static stdlib::field_t< Builder > hash_avm_transcript(Builder &builder, const stdlib::Proof< Builder > &stdlib_proof, const std::vector< std::vector< stdlib::field_t< Builder > > > &public_inputs)
Construct a transcript replicating the operations performed on the AVM transcript during proof verifi...
Recursive verifier of AVM2 proofs that utilizes the Goblin mechanism for efficient EC operations.
TwoLayerAvmRecursiveVerifierOutput verify_proof(const stdlib::Proof< UltraCircuitBuilder > &stdlib_proof, const std::vector< std::vector< UltraFF > > &public_inputs) const
Recursively verify an AVM proof using Goblin and two layers of recursive verification.
TwoLayerAvmRecursiveVerifier(UltraCircuitBuilder &builder)
static void construct_inner_recursive_verification_circuit(MegaCircuitBuilder &inner_builder, const stdlib::Proof< UltraCircuitBuilder > &stdlib_proof, const std::vector< std::vector< UltraFF > > &public_inputs)
Construct the inner recursive verification circuit for the AVM2 recursive verifier.
static InnerProverOutput construct_and_prove_inner_recursive_verification_circuit(const stdlib::Proof< UltraCircuitBuilder > &stdlib_proof, const std::vector< std::vector< UltraFF > > &public_inputs)
Construct and prove the inner Mega-arithmetized AVM recursive verifier circuit.
stdlib::recursion::honk::UltraRecursiveVerifierOutput< UltraCircuitBuilder > TwoLayerAvmRecursiveVerifierOutput
TwoLayerAvmRecursiveVerifierOutput construct_outer_recursive_verification_circuit(const stdlib::Proof< UltraCircuitBuilder > &stdlib_proof, const std::vector< std::vector< UltraFF > > &public_inputs, const InnerProverOutput &inner_output) const
Construct the outer circuit which recursively verifies a Mega proof and a Goblin proof.
UltraCircuitBuilder * outer_builder
A simple wrapper around a vector of stdlib field elements representing a proof.
HonkProof get_value() const
static field_t from_witness(Builder *ctx, const bb::fr &input)
The data that is propagated on the public inputs of the inner GoblinAvmRecursiveVerifier circuit.
std::vector< fr > HonkProof
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
GoblinAvmProof goblin_proof
std::shared_ptr< MegaAvmFlavor::VerificationKey > mega_vk
An object storing two EC points that represent the inputs to a pairing check.
uint32_t set_public()
Set the witness indices for the limbs of the pairing points to public.
Output type for recursive ultra verification.
OpeningClaim< grumpkin< Builder > > ipa_claim
PairingPoints< Curve > points_accumulator
stdlib::Proof< Builder > ipa_proof