2#ifndef DISABLE_AZTEC_VM
20#include <gtest/gtest.h>
57 const bool verified = prover.
verify(proof, public_inputs, vk_data);
58 EXPECT_TRUE(verified) <<
"native proof verification failed";
63 proof.insert(proof.begin(), 0);
64 return { proof, verification_key, public_inputs_flat };
78 for (
const auto& inner_circuit_data : inner_circuits) {
79 const std::vector<fr> key_witnesses = inner_circuit_data.verification_key->to_field_elements();
80 const std::vector<fr> proof_witnesses = inner_circuit_data.proof;
81 const std::vector<fr> public_inputs_witnesses = inner_circuit_data.public_inputs_flat;
84 .
key = add_to_witness_and_track_indices<bb::fr>(witness, key_witnesses),
85 .proof = add_to_witness_and_track_indices<bb::fr>(witness, proof_witnesses),
86 .public_inputs = add_to_witness_and_track_indices<bb::fr>(witness, public_inputs_witnesses),
90 avm_recursion_constraints.push_back(avm_recursion_constraint);
93 std::vector<size_t> avm_recursion_opcode_indices(avm_recursion_constraints.size());
94 std::iota(avm_recursion_opcode_indices.begin(), avm_recursion_opcode_indices.end(), 0);
97 constraint_system.
varnum =
static_cast<uint32_t
>(witness.size());
98 constraint_system.
num_acir_opcodes =
static_cast<uint32_t
>(avm_recursion_constraints.size());
116 layer_1_circuits.push_back(create_inner_circuit_data());
117 AcirProgram avm_verifier_program = construct_avm_verifier_program(layer_1_circuits);
119 auto layer_2_circuit =
create_circuit(avm_verifier_program, metadata);
121 info(
"circuit gates = ", layer_2_circuit.get_estimated_num_finalized_gates());
125 OuterProver prover(prover_instance, verification_key);
126 info(
"prover gates = ", prover_instance->dyadic_size());
127 auto proof = prover.construct_proof();
129 OuterVerifier verifier(verification_key, ipa_verification_key);
130 bool result = verifier.template verify_proof<bb::RollupIO>(proof, prover_instance->ipa_proof).result;
149 AcirProgram avm_verifier_program = construct_avm_verifier_program({ avm_prover_output });
151 auto layer_2_circuit =
create_circuit(avm_verifier_program, metadata);
153 info(
"circuit gates = ", layer_2_circuit.get_estimated_num_finalized_gates());
157 OuterProver prover(prover_instance, expected_vk);
158 info(
"prover gates = ", prover_instance->dyadic_size());
161 auto proof = prover.construct_proof();
163 OuterVerifier verifier(expected_vk, ipa_verification_key);
165 bool result = verifier.template verify_proof<bb::RollupIO>(proof, prover_instance->ipa_proof).result;
172 AcirProgram avm_verifier_program = construct_avm_verifier_program({ avm_prover_output });
175 avm_verifier_program.
witness.clear();
177 auto layer_2_circuit =
create_circuit(avm_verifier_program, metadata);
179 info(
"circuit gates = ", layer_2_circuit.get_estimated_num_finalized_gates());
183 OuterProver prover(prover_instance, actual_vk);
184 info(
"prover gates = ", prover_instance->dyadic_size());
188 EXPECT_EQ(*actual_vk.get(), *expected_vk.get());
static void SetUpTestSuite()
static AcirProgram construct_avm_verifier_program(const std::vector< InnerCircuitData > &inner_circuits)
Create a circuit that recursively verifies one or more inner avm2 circuits.
static InnerCircuitData create_inner_circuit_data()
A ProverInstance is normally constructed from a finalized circuit and it contains all the information...
The verification key is responsible for storing the commitments to the precomputed (non-witnessk) pol...
Representation of the Grumpkin Verifier Commitment Key inside a bn254 circuit.
bool verify(const Proof &proof, const PublicInputs &pi, const VkData &vk_data)
std::pair< Proof, VkData > prove(tracegen::TraceContainer &&trace)
static std::shared_ptr< AvmVerifier::VerificationKey > create_verification_key(const VkData &vk_data)
std::pair< tracegen::TraceContainer, PublicInputs > get_minimal_trace_with_pi()
std::filesystem::path bb_crs_path()
void init_file_crs_factory(const std::filesystem::path &path)
TEST_F(BoomerangGoblinRecursiveVerifierTests, graph_description_basic)
Construct and check a goblin recursive verification circuit.
Entry point for Barretenberg command-line interface.
std::vector< T, bb::ContainerSlabAllocator< T > > SlabVector
A vector that uses the slab allocator.
UltraCircuitBuilder_< UltraExecutionTraceBlocks > UltraCircuitBuilder
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
std::shared_ptr< AvmFlavor::VerificationKey > verification_key
AvmProvingHelper::Proof proof
std::vector< FF > public_inputs_flat