Skip to content

Commit 3048a14

Browse files
authored
chore(bb): Make goblin a proper source module (#13580)
- Also, don't just display one error in the IDE
1 parent 498d433 commit 3048a14

File tree

8 files changed

+115
-124
lines changed

8 files changed

+115
-124
lines changed

barretenberg/cpp/.clangd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
CompileFlags: # Tweak the parse settings
2-
Remove: -fconstexpr-ops-limit=*
2+
Remove: -fconstexpr-ops-limit=* -Wfatal-errors
33
---
44
# Applies all barretenberg source files
55
If:

barretenberg/cpp/src/barretenberg/benchmark/simulator_bench/simulator.bench.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#include "barretenberg/goblin/goblin.hpp"
22
#include "barretenberg/goblin/mock_circuits.hpp"
33
#include "barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp"
4+
#include "barretenberg/ultra_honk/ultra_prover.hpp"
5+
#include "barretenberg/ultra_honk/ultra_verifier.hpp"
46
#include <benchmark/benchmark.h>
57

68
using namespace benchmark;

barretenberg/cpp/src/barretenberg/client_ivc/client_ivc.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@
55
#include "barretenberg/plonk_honk_shared/execution_trace/execution_trace_usage_tracker.hpp"
66
#include "barretenberg/protogalaxy/protogalaxy_prover.hpp"
77
#include "barretenberg/protogalaxy/protogalaxy_verifier.hpp"
8+
#include "barretenberg/stdlib/goblin_verifier/merge_recursive_verifier.hpp"
89
#include "barretenberg/stdlib/honk_verifier/decider_recursive_verifier.hpp"
910
#include "barretenberg/stdlib/primitives/databus/databus.hpp"
1011
#include "barretenberg/ultra_honk/decider_keys.hpp"
1112
#include "barretenberg/ultra_honk/decider_prover.hpp"
1213
#include "barretenberg/ultra_honk/decider_verifier.hpp"
14+
#include "barretenberg/ultra_honk/ultra_prover.hpp"
15+
#include "barretenberg/ultra_honk/ultra_verifier.hpp"
1316
#include <algorithm>
1417

1518
namespace bb {
Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,94 @@
1-
// NB: This file is here so that goblin_objects will be created
1+
#include "goblin.hpp"
2+
#include "barretenberg/eccvm/eccvm_verifier.hpp"
3+
#include "barretenberg/stdlib_circuit_builders/mock_circuits.hpp"
4+
#include "barretenberg/translator_vm/translator_prover.hpp"
5+
#include "barretenberg/translator_vm/translator_proving_key.hpp"
6+
#include "barretenberg/translator_vm/translator_verifier.hpp"
7+
#include "barretenberg/ultra_honk/merge_verifier.hpp"
8+
9+
namespace bb {
10+
11+
Goblin::Goblin(const std::shared_ptr<CommitmentKey<curve::BN254>>& bn254_commitment_key)
12+
: commitment_key(bn254_commitment_key)
13+
{}
14+
15+
Goblin::MergeProof Goblin::prove_merge(MegaBuilder& circuit_builder)
16+
{
17+
PROFILE_THIS_NAME("Goblin::merge");
18+
if (circuit_builder.blocks.ecc_op.size() == 0) {
19+
MockCircuits::construct_goblin_ecc_op_circuit(circuit_builder);
20+
}
21+
22+
MergeProver merge_prover{ circuit_builder.op_queue, commitment_key };
23+
merge_proof = merge_prover.construct_proof();
24+
return merge_proof;
25+
}
26+
27+
void Goblin::prove_eccvm()
28+
{
29+
ECCVMBuilder eccvm_builder(op_queue);
30+
ECCVMProver eccvm_prover(eccvm_builder);
31+
goblin_proof.eccvm_proof = eccvm_prover.construct_proof();
32+
33+
translation_batching_challenge_v = eccvm_prover.batching_challenge_v;
34+
evaluation_challenge_x = eccvm_prover.evaluation_challenge_x;
35+
transcript = eccvm_prover.transcript;
36+
goblin_proof.translation_evaluations = eccvm_prover.translation_evaluations;
37+
}
38+
39+
void Goblin::prove_translator()
40+
{
41+
PROFILE_THIS_NAME("Create TranslatorBuilder and TranslatorProver");
42+
TranslatorBuilder translator_builder(translation_batching_challenge_v, evaluation_challenge_x, op_queue);
43+
auto translator_key = std::make_shared<TranslatorProvingKey>(translator_builder, commitment_key);
44+
TranslatorProver translator_prover(translator_key, transcript);
45+
goblin_proof.translator_proof = translator_prover.construct_proof();
46+
}
47+
48+
GoblinProof Goblin::prove(MergeProof merge_proof_in)
49+
{
50+
PROFILE_THIS_NAME("Goblin::prove");
51+
52+
info("Constructing a Goblin proof with num ultra ops = ", op_queue->get_ultra_ops_table_num_rows());
53+
54+
goblin_proof.merge_proof = merge_proof_in.empty() ? std::move(merge_proof) : std::move(merge_proof_in);
55+
{
56+
PROFILE_THIS_NAME("prove_eccvm");
57+
vinfo("prove eccvm...");
58+
prove_eccvm();
59+
vinfo("finished eccvm proving.");
60+
}
61+
{
62+
PROFILE_THIS_NAME("prove_translator");
63+
vinfo("prove translator...");
64+
prove_translator();
65+
vinfo("finished translator proving.");
66+
}
67+
return goblin_proof;
68+
}
69+
70+
bool Goblin::verify(const GoblinProof& proof)
71+
{
72+
MergeVerifier merge_verifier;
73+
bool merge_verified = merge_verifier.verify_proof(proof.merge_proof);
74+
75+
ECCVMVerifier eccvm_verifier{};
76+
bool eccvm_verified = eccvm_verifier.verify_proof(proof.eccvm_proof);
77+
78+
TranslatorVerifier translator_verifier(eccvm_verifier.transcript);
79+
80+
bool accumulator_construction_verified = translator_verifier.verify_proof(
81+
proof.translator_proof, eccvm_verifier.evaluation_challenge_x, eccvm_verifier.batching_challenge_v);
82+
83+
bool translation_verified = translator_verifier.verify_translation(proof.translation_evaluations,
84+
eccvm_verifier.translation_masking_term_eval);
85+
86+
vinfo("merge verified?: ", merge_verified);
87+
vinfo("eccvm verified?: ", eccvm_verified);
88+
vinfo("accumulator construction_verified?: ", accumulator_construction_verified);
89+
vinfo("translation verified?: ", translation_verified);
90+
91+
return merge_verified && eccvm_verified && accumulator_construction_verified && translation_verified;
92+
}
93+
94+
} // namespace bb
Lines changed: 10 additions & 122 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,14 @@
1+
// goblin.hpp
12
#pragma once
23

3-
#include "barretenberg/eccvm/eccvm_circuit_builder.hpp"
4+
#include "barretenberg/eccvm/eccvm_flavor.hpp"
45
#include "barretenberg/eccvm/eccvm_prover.hpp"
5-
#include "barretenberg/eccvm/eccvm_trace_checker.hpp"
6-
#include "barretenberg/eccvm/eccvm_verifier.hpp"
7-
#include "barretenberg/goblin/mock_circuits.hpp"
86
#include "barretenberg/goblin/types.hpp"
9-
#include "barretenberg/plonk_honk_shared/proving_key_inspector.hpp"
10-
#include "barretenberg/polynomials/polynomial.hpp"
11-
#include "barretenberg/stdlib/goblin_verifier/merge_recursive_verifier.hpp"
12-
#include "barretenberg/stdlib_circuit_builders/mega_circuit_builder.hpp"
137
#include "barretenberg/stdlib_circuit_builders/mega_flavor.hpp"
148
#include "barretenberg/translator_vm/translator_circuit_builder.hpp"
15-
#include "barretenberg/translator_vm/translator_prover.hpp"
16-
#include "barretenberg/translator_vm/translator_verifier.hpp"
9+
#include "barretenberg/translator_vm/translator_flavor.hpp"
10+
#include "barretenberg/ultra_honk/decider_proving_key.hpp"
1711
#include "barretenberg/ultra_honk/merge_prover.hpp"
18-
#include "barretenberg/ultra_honk/merge_verifier.hpp"
19-
#include "barretenberg/ultra_honk/ultra_prover.hpp"
20-
#include "barretenberg/ultra_honk/ultra_verifier.hpp"
2112

2213
namespace bb {
2314

@@ -55,120 +46,17 @@ class Goblin {
5546
std::make_shared<TranslatorVerificationKey>();
5647
};
5748

58-
Goblin(const std::shared_ptr<CommitmentKey<curve::BN254>>& bn254_commitment_key = nullptr)
59-
: commitment_key(bn254_commitment_key)
60-
{}
49+
Goblin(const std::shared_ptr<CommitmentKey<curve::BN254>>& bn254_commitment_key = nullptr);
6150

62-
/**
63-
* @brief Construct a merge proof for the goblin ECC ops in the provided circuit
64-
*
65-
* @param circuit_builder
66-
*/
67-
MergeProof prove_merge(MegaBuilder& circuit_builder)
68-
{
69-
PROFILE_THIS_NAME("Goblin::merge");
70-
// TODO(https://github.com/AztecProtocol/barretenberg/issues/993): Some circuits (particularly on the first call
71-
// to accumulate) may not have any goblin ecc ops prior to the call to merge(), so the commitment to the new
72-
// contribution (C_t_shift) in the merge prover will be the point at infinity. (Note: Some dummy ops are added
73-
// in 'add_gates_to_ensure...' but not until proving_key construction which comes later). See issue for ideas
74-
// about how to resolve.
75-
if (circuit_builder.blocks.ecc_op.size() == 0) {
76-
MockCircuits::construct_goblin_ecc_op_circuit(circuit_builder); // Add some arbitrary goblin ECC ops
77-
}
51+
MergeProof prove_merge(MegaBuilder& circuit_builder);
7852

79-
MergeProver merge_prover{ circuit_builder.op_queue, commitment_key };
80-
merge_proof = merge_prover.construct_proof();
81-
return merge_proof;
82-
};
83-
84-
/**
85-
* @brief Construct an ECCVM proof and the translation polynomial evaluations
86-
*/
87-
void prove_eccvm()
88-
{
89-
ECCVMBuilder eccvm_builder(op_queue);
90-
ECCVMProver eccvm_prover(eccvm_builder);
91-
goblin_proof.eccvm_proof = eccvm_prover.construct_proof();
92-
93-
translation_batching_challenge_v = eccvm_prover.batching_challenge_v;
94-
evaluation_challenge_x = eccvm_prover.evaluation_challenge_x;
95-
transcript = eccvm_prover.transcript;
96-
goblin_proof.translation_evaluations = eccvm_prover.translation_evaluations;
97-
}
98-
99-
/**
100-
* @brief Construct a translator proof
101-
*
102-
*/
103-
void prove_translator()
104-
{
105-
PROFILE_THIS_NAME("Create TranslatorBuilder and TranslatorProver");
106-
TranslatorBuilder translator_builder(translation_batching_challenge_v, evaluation_challenge_x, op_queue);
107-
auto translator_key = std::make_shared<TranslatorProvingKey>(translator_builder, commitment_key);
108-
TranslatorProver translator_prover(translator_key, transcript);
109-
goblin_proof.translator_proof = translator_prover.construct_proof();
110-
}
111-
112-
/**
113-
* @brief Constuct a full Goblin proof (ECCVM, Translator, merge)
114-
* @details The merge proof is assumed to already have been constucted in the last accumulate step. It is simply
115-
* moved into the final proof here.
116-
*
117-
* @return Proof
118-
*/
119-
GoblinProof prove(MergeProof merge_proof_in = {})
120-
{
121-
122-
PROFILE_THIS_NAME("Goblin::prove");
123-
124-
info("Constructing a Goblin proof with num ultra ops = ", op_queue->get_ultra_ops_table_num_rows());
53+
void prove_eccvm();
12554

126-
goblin_proof.merge_proof = merge_proof_in.empty() ? std::move(merge_proof) : std::move(merge_proof_in);
127-
{
128-
PROFILE_THIS_NAME("prove_eccvm");
129-
vinfo("prove eccvm...");
130-
prove_eccvm();
131-
vinfo("finished eccvm proving.");
132-
}
133-
{
134-
PROFILE_THIS_NAME("prove_translator");
135-
vinfo("prove translator...");
136-
prove_translator();
137-
vinfo("finished translator proving.");
138-
}
139-
return goblin_proof;
140-
};
141-
142-
/**
143-
* @brief Verify a full Goblin proof (ECCVM, Translator, merge)
144-
*
145-
* @param proof
146-
* @return true
147-
* @return false
148-
*/
149-
static bool verify(const GoblinProof& proof)
150-
{
151-
MergeVerifier merge_verifier;
152-
bool merge_verified = merge_verifier.verify_proof(proof.merge_proof);
153-
154-
ECCVMVerifier eccvm_verifier{};
155-
bool eccvm_verified = eccvm_verifier.verify_proof(proof.eccvm_proof);
156-
157-
TranslatorVerifier translator_verifier(eccvm_verifier.transcript);
55+
void prove_translator();
15856

159-
bool accumulator_construction_verified = translator_verifier.verify_proof(
160-
proof.translator_proof, eccvm_verifier.evaluation_challenge_x, eccvm_verifier.batching_challenge_v);
57+
GoblinProof prove(MergeProof merge_proof_in = {});
16158

162-
bool translation_verified = translator_verifier.verify_translation(
163-
proof.translation_evaluations, eccvm_verifier.translation_masking_term_eval);
164-
165-
vinfo("merge verified?: ", merge_verified);
166-
vinfo("eccvm verified?: ", eccvm_verified);
167-
vinfo("accumulator construction_verified?: ", accumulator_construction_verified);
168-
vinfo("translation verified?: ", translation_verified);
169-
170-
return merge_verified && eccvm_verified && accumulator_construction_verified && translation_verified;
171-
};
59+
static bool verify(const GoblinProof& proof);
17260
};
17361

17462
} // namespace bb

barretenberg/cpp/src/barretenberg/stdlib/goblin_verifier/goblin_recursion.test.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
#include "barretenberg/goblin/mock_circuits.hpp"
33
#include "barretenberg/stdlib_circuit_builders/mega_circuit_builder.hpp"
44
#include "barretenberg/stdlib_circuit_builders/ultra_circuit_builder.hpp"
5+
#include "barretenberg/ultra_honk/ultra_prover.hpp"
6+
#include "barretenberg/ultra_honk/ultra_verifier.hpp"
57

68
#include <gtest/gtest.h>
79

barretenberg/cpp/src/barretenberg/stdlib/goblin_verifier/goblin_recursive_verifier.test.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include "barretenberg/common/test.hpp"
44
#include "barretenberg/goblin/goblin.hpp"
55
#include "barretenberg/stdlib/honk_verifier/ultra_verification_keys_comparator.hpp"
6+
#include "barretenberg/stdlib_circuit_builders/mock_circuits.hpp"
67
#include "barretenberg/ultra_honk/ultra_prover.hpp"
78
#include "barretenberg/ultra_honk/ultra_verifier.hpp"
89

barretenberg/cpp/src/barretenberg/vm2/constraining/recursion/goblin_avm_recursive_verifier.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
#include "barretenberg/goblin/goblin.hpp"
55
#include "barretenberg/stdlib/goblin_verifier/goblin_recursive_verifier.hpp"
66
#include "barretenberg/stdlib/hash/poseidon2/poseidon2.hpp"
7+
#include "barretenberg/stdlib/honk_verifier/ultra_recursive_verifier.hpp"
78
#include "barretenberg/stdlib_circuit_builders/mega_flavor.hpp"
9+
#include "barretenberg/stdlib_circuit_builders/mega_recursive_flavor.hpp"
810
#include "barretenberg/ultra_honk/ultra_prover.hpp"
911
#include "barretenberg/ultra_honk/ultra_verifier.hpp"
1012
#include "barretenberg/vm2/constraining/recursion/recursive_flavor.hpp"

0 commit comments

Comments
 (0)