Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
oink_prover.test.cpp
Go to the documentation of this file.
6
7#include <gtest/gtest.h>
8
9using namespace bb;
10
24
29TEST_F(OinkTests, OinkProverIsDeterministic)
30{
31 Builder circuit;
32 circuit.add_ultra_and_mega_gates_to_ensure_all_polys_are_non_zero(); // Ensure all polys are non-zero
33 auto prover_instance = std::make_shared<ProverInstance>(circuit);
34 auto verification_key = std::make_shared<VerificationKey>(prover_instance->get_precomputed());
35
36 {
37 // Run OinkProver for the first time
38 OinkProver prover(prover_instance, verification_key);
39 prover.prove();
40 }
41
42 // Store data generated by Oink prover
43 auto alphas = prover_instance->alphas;
44 auto relation_parameters = prover_instance->relation_parameters;
45 auto gate_challenges = prover_instance->gate_challenges;
46 auto w4 = prover_instance->polynomials.w_4;
47 auto lookup_read_counts = prover_instance->polynomials.lookup_read_counts;
48 auto lookup_read_tag = prover_instance->polynomials.lookup_read_tags;
49 auto lookup_inverse = prover_instance->polynomials.lookup_inverses;
50 auto z_perm = prover_instance->polynomials.z_perm;
51 auto databus_inverses = prover_instance->polynomials.get_databus_inverses().get_copy();
52
53 {
54 // Run OinkProver for the second time
55 OinkProver prover(prover_instance, verification_key);
56 prover.prove();
57 }
58
59 // Check that the data hasn't changed
60 for (auto [new_alpha, old_alpha] : zip_view(prover_instance->alphas, alphas)) {
61 BB_ASSERT_EQ(new_alpha, old_alpha);
62 };
63 for (auto [new_parameter, old_parameter] :
64 zip_view(prover_instance->relation_parameters.get_to_fold(), relation_parameters.get_to_fold())) {
65 BB_ASSERT_EQ(new_parameter, old_parameter);
66 };
67 for (auto [new_challenge, old_challenge] : zip_view(prover_instance->gate_challenges, gate_challenges)) {
68 BB_ASSERT_EQ(new_challenge, old_challenge);
69 };
70 BB_ASSERT_EQ(prover_instance->polynomials.w_4, w4);
71 BB_ASSERT_EQ(prover_instance->polynomials.lookup_read_counts, lookup_read_counts);
72 BB_ASSERT_EQ(prover_instance->polynomials.lookup_read_tags, lookup_read_tag);
73 BB_ASSERT_EQ(prover_instance->polynomials.lookup_inverses, lookup_inverse);
74 BB_ASSERT_EQ(prover_instance->polynomials.z_perm, z_perm);
75 for (auto [new_databus, old_databus] :
76 zip_view(prover_instance->polynomials.get_databus_inverses().get_copy(), databus_inverses)) {
77 BB_ASSERT_EQ(new_databus, old_databus);
78 };
79}
80
81TEST_F(OinkTests, OinkProverCommitments)
82{
83 Builder circuit;
84 circuit.add_ultra_and_mega_gates_to_ensure_all_polys_are_non_zero(); // Ensure all polys are non-zero
85 auto prover_instance = std::make_shared<ProverInstance>(circuit);
86 auto verification_key = std::make_shared<VerificationKey>(prover_instance->get_precomputed());
87 auto verifier_instance = std::make_shared<VerifierInstance>(verification_key);
88
89 OinkProver prover(prover_instance, verification_key);
90 prover.prove();
91 HonkProof proof = prover.export_proof();
92
93 Flavor::VerifierCommitments prover_commitments(verification_key, prover_instance->commitments);
94
95 auto transcript = std::make_shared<Transcript>();
96 OinkVerifier verifier(verifier_instance, transcript);
97 transcript->load_proof(proof);
98 verifier.verify();
99
100 Flavor::VerifierCommitments verifier_commitments(verifier_instance->vk, verifier_instance->witness_commitments);
101
102 for (auto [prover_comm, verifier_comm, label] : zip_view(
103 prover_commitments.get_all(), verifier_commitments.get_all(), Flavor::VerifierCommitments::get_labels())) {
104 EXPECT_EQ(prover_comm, verifier_comm) << "Mismatch in commitments " << label;
105 }
106}
#define BB_ASSERT_EQ(actual, expected,...)
Definition assert.hpp:88
OinkProver< Flavor > OinkProver
OinkVerifier< Flavor > OinkVerifier
static void SetUpTestSuite()
Common transcript class for both parties. Stores the data for the current round, as well as the manif...
The verification key is responsible for storing the commitments to the precomputed (non-witness) poly...
NativeTranscript Transcript
MegaCircuitBuilder CircuitBuilder
Class for all the oink rounds, which are shared between the folding prover and ultra prover.
Proof export_proof()
Export the Oink proof.
void prove()
Oink Prover function that runs all the rounds of the verifier.
Verifier class for all the presumcheck rounds, which are shared between the folding verifier and ultr...
void verify()
Oink Verifier function that runs all the rounds of the verifier.
A ProverInstance is normally constructed from a finalized circuit and it contains all the information...
The VerifierInstance encapsulates all the necessary information for a Mega Honk Verifier to verify a ...
std::filesystem::path bb_crs_path()
void init_file_crs_factory(const std::filesystem::path &path)
Entry point for Barretenberg command-line interface.
std::vector< fr > HonkProof
Definition proof.hpp:15
TEST_F(IPATest, ChallengesAreZero)
Definition ipa.test.cpp:188
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13