Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
avm2_recursion_constraint.cpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: Completed, auditors: [Federico], commit: 0e37cb8}
3// external_1: { status: not started, auditors: [], commit: }
4// external_2: { status: not started, auditors: [], commit: }
5// =====================
6
8
10
11#include "barretenberg/aztec/aztec_constants.hpp"
24
25#include <cstddef>
26
27namespace acir_format {
28
29using namespace bb;
30
39 const RecursionConstraint& input)
40{
42
43 // Construct in-circuit representations of the proof and public inputs
44 const auto proof_fields = fields_from_witnesses(builder, input.proof);
45 const auto public_inputs_flattened = fields_from_witnesses(builder, input.public_inputs);
46
47 // Populate the proof fields with dummy values to prevent issues (e.g. points must be on curve).
48 if (builder.is_write_vk_mode()) {
50 }
51
52 // Execute the TwoLayerAvmRecursiveVerifier recursive verifier
54
55 auto output = verifier.verify_proof(proof_fields, bb::avm2::PublicInputs::flat_to_columns(public_inputs_flattened));
56 return { .points_accumulator = std::move(output.points_accumulator),
57 .triple_ipa_opening = std::move(output.triple_ipa_opening) };
58}
59
60} // namespace acir_format
#define BB_ASSERT_EQ(actual, expected,...)
Definition assert.hpp:83
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.
AluTraceBuilder builder
Definition alu.test.cpp:124
Base class templates shared across Honk flavors.
AvmRecursionConstraintOutput create_avm2_recursion_constraints_goblin(bb::UltraCircuitBuilder &builder, const RecursionConstraint &input)
Add constraints associated with recursive verification of an AVM2 proof using Goblin.
void populate_fields(Builder &builder, const std::vector< field_t< Builder > > &fields, const std::vector< bb::fr > &values)
========== WRITE_VK UTILITIES ========== ///
Definition utils.cpp:78
std::vector< field_t< Builder > > fields_from_witnesses(Builder &builder, std::span< const uint32_t > witness_indices)
========== ACIR TO BARRETENBERG ========== ///
Definition utils.cpp:16
HonkProof create_mock_avm_proof_without_pub_inputs()
Create a mock AVM proof without public inputs that has the correct structure but is not in general va...
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
RecursionConstraint struct contains information required to recursively verify a proof.
static std::vector< std::vector< FF_ > > flat_to_columns(const std::vector< FF_ > &input)
Definition avm_io.hpp:66
stdlib::recursion::PairingPoints< stdlib::bn254< UltraCircuitBuilder > > points_accumulator