Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
goblin.cpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: Planned, auditors: [], commit: }
3// external_1: { status: not started, auditors: [], commit: }
4// external_2: { status: not started, auditors: [], commit: }
5// =====================
6
7#include "goblin.hpp"
8
20#include <utility>
21
22namespace bb {
23
24Goblin::Goblin(const std::shared_ptr<Transcript>& transcript)
25 : transcript(transcript)
26{}
27
28void Goblin::prove_merge(const std::shared_ptr<Transcript>& transcript, const MergeSettings merge_settings)
29{
30 BB_BENCH_NAME("Goblin::prove_merge");
31 MergeProver merge_prover{ op_queue, transcript, merge_settings };
32 merge_verification_queue.push_back(merge_prover.construct_proof());
33}
34
36{
37 BB_BENCH_NAME("Goblin::prove_eccvm");
38 ECCVMBuilder eccvm_builder(op_queue);
39 ECCVMProver eccvm_prover(eccvm_builder, transcript);
40 auto [eccvm_proof, opening_claim] = eccvm_prover.construct_proof();
41 goblin_proof.eccvm_proof = std::move(eccvm_proof);
42
43 // Compute IPA proof for the opening claim
44 auto ipa_transcript = std::make_shared<NativeTranscript>();
45 IPA_PCS::compute_opening_proof(eccvm_prover.key->commitment_key, opening_claim, ipa_transcript);
46 goblin_proof.ipa_proof = ipa_transcript->export_proof();
47
50}
51
53{
54 BB_BENCH_NAME("Goblin::prove_translator");
56 auto translator_key = std::make_shared<TranslatorProvingKey>(translator_builder);
57 TranslatorProver translator_prover(translator_key, transcript);
58 goblin_proof.translator_proof = translator_prover.construct_proof();
59}
60
62{
63 BB_BENCH_NAME("Goblin::prove");
64
65 prove_merge(transcript, MergeSettings::APPEND); // Use shared transcript for merge proving
66 info("Goblin: num ultra ops = ", op_queue->get_ultra_ops_count());
67
69 1U,
70 "Goblin::prove: merge_verification_queue should contain only a single proof at this stage.");
72
73 vinfo("prove eccvm...");
75 vinfo("finished eccvm proving.");
76 vinfo("prove translator...");
78 vinfo("finished translator proving.");
79 return goblin_proof;
80}
81
92 const RecursiveMergeCommitments& merge_commitments,
94 const MergeSettings merge_settings)
95{
97 const MergeProof& merge_proof = merge_verification_queue.front();
98 const stdlib::Proof<MegaBuilder> stdlib_merge_proof(builder, merge_proof);
99
100 MergeRecursiveVerifier merge_verifier{ merge_settings, transcript };
101 auto merge_result = merge_verifier.reduce_to_pairing_check(stdlib_merge_proof, merge_commitments);
102
103 merge_verification_queue.pop_front(); // remove the processed proof from the queue
104
105 return { merge_result.pairing_points, merge_result.merged_commitments };
106}
107
108} // namespace bb
#define BB_ASSERT(expression,...)
Definition assert.hpp:70
#define BB_ASSERT_EQ(actual, expected,...)
Definition assert.hpp:83
#define BB_BENCH_NAME(name)
Definition bb_bench.hpp:225
std::pair< Proof, OpeningClaim > construct_proof()
std::shared_ptr< ProvingKey > key
fq evaluation_challenge_x
Definition goblin.hpp:59
GoblinProof goblin_proof
Definition goblin.hpp:56
std::pair< PairingPoints, RecursiveTableCommitments > recursively_verify_merge(MegaBuilder &builder, const RecursiveMergeCommitments &merge_commitments, const std::shared_ptr< RecursiveTranscript > &transcript, const MergeSettings merge_settings=MergeSettings::PREPEND)
Recursively verify the next merge proof in the merge verification queue.
Definition goblin.cpp:90
void prove_eccvm()
Construct an ECCVM proof and IPA opening proof.
Definition goblin.cpp:35
fq translation_batching_challenge_v
Definition goblin.hpp:58
GoblinProof prove()
Constuct a full Goblin proof (ECCVM, Translator, merge)
Definition goblin.cpp:61
void prove_merge(const std::shared_ptr< Transcript > &transcript=std::make_shared< Transcript >(), const MergeSettings merge_settings=MergeSettings::PREPEND)
Construct a merge proof for the goblin ECC ops in the provided circuit; append the proof to the merge...
Definition goblin.cpp:28
Goblin(const std::shared_ptr< Transcript > &transcript=std::make_shared< Transcript >())
Definition goblin.cpp:24
std::shared_ptr< OpQueue > op_queue
Definition goblin.hpp:54
void prove_translator()
Construct a translator proof.
Definition goblin.cpp:52
MergeProver::MergeProof MergeProof
Definition goblin.hpp:40
bool avm_mode
Definition goblin.hpp:30
std::deque< MergeProof > merge_verification_queue
Definition goblin.hpp:62
std::shared_ptr< Transcript > transcript
Definition goblin.hpp:60
Prover class for the Goblin ECC op queue transcript merge protocol.
Unified verifier class for the Goblin ECC op queue transcript merge protocol.
ReductionResult reduce_to_pairing_check(const Proof &proof, const InputCommitments &input_commitments)
Reduce the merge proof to a pairing check.
TranslatorCircuitBuilder creates a circuit that evaluates the correctness of the evaluation of EccOpQ...
A simple wrapper around a vector of stdlib field elements representing a proof.
Definition proof.hpp:19
#define info(...)
Definition log.hpp:93
#define vinfo(...)
Definition log.hpp:94
AluTraceBuilder builder
Definition alu.test.cpp:124
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
MergeSettings
The MergeSettings define whether an current subtable will be added at the beginning (PREPEND) or at t...
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
HonkProof eccvm_proof
Definition types.hpp:23
HonkProof ipa_proof
Definition types.hpp:24
HonkProof merge_proof
Definition types.hpp:22
HonkProof translator_proof
Definition types.hpp:25