Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
goblin_recursive_verifier.cpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: not started, auditors: [], date: YYYY-MM-DD }
3// external_1: { status: not started, auditors: [], date: YYYY-MM-DD }
4// external_2: { status: not started, auditors: [], date: YYYY-MM-DD }
5// =====================
6
8
10
19 const MergeCommitments& merge_commitments,
20 const MergeSettings merge_settings)
21{
22 GoblinStdlibProof stdlib_proof(*builder, proof);
23 return verify(stdlib_proof, merge_commitments, merge_settings);
24}
25
34 const MergeCommitments& merge_commitments,
35 const MergeSettings merge_settings)
36{
37 // Verify the final merge step
38 MergeVerifier merge_verifier{ merge_settings, transcript };
39 auto [merge_pairing_points, merged_table_commitments, degree_check_verified, concatenation_check_passed] =
40 merge_verifier.verify_proof(proof.merge_proof, merge_commitments);
41 vinfo("Merge Verifier: degree check identity passed", degree_check_verified);
42 vinfo("Merge Verifier: concatenation identity passed", concatenation_check_passed);
43 // Run the ECCVM recursive verifier
44 ECCVMRecursiveVerifier eccvm_verifier{ transcript, proof.eccvm_proof };
45 auto opening_claim = eccvm_verifier.verify_proof();
46
47 // Run the Translator recursive verifier
48 // Get translation data from ECCVM verifier
50 auto translator_input = eccvm_verifier.get_translator_input_data();
51 // Pass merge commitments as op queue wire commitments (they represent the same data)
52 PairingPoints<bn254<Builder>> translator_pairing_points =
53 translator_verifier.verify_proof(proof.translator_proof,
54 translator_input.evaluation_challenge_x,
55 translator_input.batching_challenge_v,
56 translator_input.accumulated_result,
57 merged_table_commitments);
58
59 translator_pairing_points.aggregate(merge_pairing_points);
60
61 return { translator_pairing_points, opening_claim, proof.ipa_proof };
62}
63} // namespace bb::stdlib::recursion::honk
Unified ECCVM verifier class for both native and recursive verification.
Unified verifier class for the Goblin ECC op queue transcript merge protocol.
VerificationResult verify_proof(const Proof &proof, const InputCommitments &input_commitments)
Verify the merge proof.
GoblinRecursiveVerifierOutput verify(const GoblinProof &, const MergeCommitments &merge_commitments, const MergeSettings merge_settings=MergeSettings::PREPEND)
Creates a circuit that executes the ECCVM, Translator and Merge verifiers.
#define vinfo(...)
Definition log.hpp:80
MergeSettings
The MergeSettings define whether an current subtable will be added at the beginning (PREPEND) or at t...
std::shared_ptr< TranslatorVerificationKey > translator_verification_key
Definition goblin.hpp:66
An object storing two EC points that represent the inputs to a pairing check.
void aggregate(PairingPoints const &other)
Compute a linear combination of the present pairing points with an input set of pairing points.