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, std::make_shared<Transcript>());
39 prover.prove();
40 }
41
42 // Store data generated by Oink prover
43 auto alpha = prover_instance->alpha;
44 auto gate_challenges = prover_instance->gate_challenges;
45 auto w4 = prover_instance->polynomials.w_4;
46 auto lookup_read_counts = prover_instance->polynomials.lookup_read_counts;
47 auto lookup_read_tag = prover_instance->polynomials.lookup_read_tags;
48 auto lookup_inverse = prover_instance->polynomials.lookup_inverses;
49 auto z_perm = prover_instance->polynomials.z_perm;
50 auto databus_inverses = prover_instance->polynomials.get_databus_inverses().get_copy();
51
52 {
53 // Run OinkProver for the second time
54 OinkProver prover(prover_instance, verification_key, std::make_shared<Transcript>());
55 prover.prove();
56 }
57
58 // Check that the data hasn't changed
59 BB_ASSERT_EQ(prover_instance->alpha, alpha);
60
61 for (auto [new_challenge, old_challenge] : zip_view(prover_instance->gate_challenges, gate_challenges)) {
62 BB_ASSERT_EQ(new_challenge, old_challenge);
63 };
64 BB_ASSERT_EQ(prover_instance->polynomials.w_4, w4);
65 BB_ASSERT_EQ(prover_instance->polynomials.lookup_read_counts, lookup_read_counts);
66 BB_ASSERT_EQ(prover_instance->polynomials.lookup_read_tags, lookup_read_tag);
67 BB_ASSERT_EQ(prover_instance->polynomials.lookup_inverses, lookup_inverse);
68 BB_ASSERT_EQ(prover_instance->polynomials.z_perm, z_perm);
69 for (auto [new_databus, old_databus] :
70 zip_view(prover_instance->polynomials.get_databus_inverses().get_copy(), databus_inverses)) {
71 BB_ASSERT_EQ(new_databus, old_databus);
72 };
73}
74
75TEST_F(OinkTests, OinkProverCommitments)
76{
77 Builder circuit;
78 circuit.add_ultra_and_mega_gates_to_ensure_all_polys_are_non_zero(); // Ensure all polys are non-zero
79 auto prover_instance = std::make_shared<ProverInstance>(circuit);
80 auto verification_key = std::make_shared<VerificationKey>(prover_instance->get_precomputed());
81 auto vk_and_hash = std::make_shared<typename Flavor::VKAndHash>(verification_key);
82 auto verifier_instance = std::make_shared<VerifierInstance>(vk_and_hash);
83
84 OinkProver prover(prover_instance, verification_key, std::make_shared<Transcript>());
85 prover.prove();
86 HonkProof proof = prover.export_proof();
87
88 Flavor::VerifierCommitments prover_commitments(verification_key, prover_instance->commitments);
89
90 auto transcript = std::make_shared<Transcript>();
91 transcript->load_proof(proof);
92 OinkVerifier verifier(verifier_instance, transcript, verification_key->num_public_inputs);
93 verifier.verify();
94
95 Flavor::VerifierCommitments verifier_commitments(verifier_instance->get_vk(),
96 verifier_instance->witness_commitments);
97
98 for (auto [prover_comm, verifier_comm, label] : zip_view(
99 prover_commitments.get_all(), verifier_commitments.get_all(), Flavor::VerifierCommitments::get_labels())) {
100 EXPECT_EQ(prover_comm, verifier_comm) << "Mismatch in commitments " << label;
101 }
102}
#define BB_ASSERT_EQ(actual, expected,...)
Definition assert.hpp:83
static void SetUpTestSuite()
Common transcript class for both parties. Stores the data for the current round, as well as the manif...
BaseTranscript< Codec, HashFunction > Transcript
MegaCircuitBuilder CircuitBuilder
NativeVerificationKey_< PrecomputedEntities< Commitment >, Codec, HashFunction, CommitmentKey > VerificationKey
The verification key stores commitments to the precomputed (non-witness) polynomials used by the veri...
Base Native verification key class.
Definition flavor.hpp:135
Executes the "Oink" phase of the Honk proving protocol: the initial rounds that commit to witness dat...
void prove(bool emit_alpha=true)
Commit to witnesses, compute relation parameters, and prepare for Sumcheck.
Proof export_proof()
Export the Oink proof.
Verifier counterpart to OinkProver: receives witness commitments, computes relation parameters,...
void verify(bool emit_alpha=true)
Receive witness commitments, compute relation parameters, and prepare for Sumcheck.
Contains all the information required by a Honk prover to create a proof, constructed from a finalize...
The VerifierInstance encapsulates all the necessary information for a Honk Verifier to verify a proof...
std::filesystem::path bb_crs_path()
void init_file_crs_factory(const std::filesystem::path &path)
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
std::vector< fr > HonkProof
Definition proof.hpp:15
TEST_F(IPATest, ChallengesAreZero)
Definition ipa.test.cpp:155
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13