Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
mock_verifier_inputs.test.cpp
Go to the documentation of this file.
4
5#include <gtest/gtest.h>
6
7using namespace acir_format;
8using namespace bb;
9
10class MockVerifierInputsTest : public ::testing::Test {
11 public:
13};
14
15// Static assertions for proof size constants that must stay in sync with Noir (constants.nr)
16// These constants are used by Noir protocol circuits and TypeScript
17
18// Public input component sizes (used in Noir)
19static_assert(PAIRING_POINTS_SIZE == 8, "PAIRING_POINTS_SIZE changed - update constants.nr");
20static_assert(GRUMPKIN_OPENING_CLAIM_SIZE == 6, "IPA_CLAIM_SIZE changed - update constants.nr");
21static_assert(HIDING_KERNEL_PUBLIC_INPUTS_SIZE == 28,
22 "HIDING_KERNEL_IO_PUBLIC_INPUTS_SIZE changed - update constants.nr");
23
24// Component proof lengths (used in Noir)
25static_assert(MERGE_PROOF_SIZE == 42, "MERGE_PROOF_SIZE changed - update constants.nr");
26static_assert(ECCVMFlavor::PROOF_LENGTH == 608, "ECCVM proof size changed - update constants.nr");
27static_assert(IPA_PROOF_LENGTH == 64, "IPA_PROOF_LENGTH changed - update constants.nr");
28static_assert(TranslatorFlavor::PROOF_LENGTH == 483, "Translator proof size changed - update constants.nr");
29
30// Full proof lengths (used in Noir)
31static_assert(
34 "RECURSIVE_PROOF_LENGTH changed - update constants.nr");
35static_assert(ChonkProof::PROOF_LENGTH == 1315, "CHONK_PROOF_LENGTH changed - update constants.nr");
37 "MultilinearBatching proof size changed - update constants.nr");
38
42TEST_F(MockVerifierInputsTest, MockMergeProofSize)
43{
45 EXPECT_EQ(merge_proof.size(), MERGE_PROOF_SIZE);
46}
47
51TEST_F(MockVerifierInputsTest, MockBatchMergeProofSize)
52{
53 HonkProof batch_merge_proof = create_mock_batch_merge_proof();
54 EXPECT_EQ(batch_merge_proof.size(), BATCH_MERGE_PROOF_SIZE);
55}
56
60TEST_F(MockVerifierInputsTest, MockPreIpaProofSize)
61{
62 HonkProof eccvm_proof = create_mock_eccvm_proof();
63 EXPECT_EQ(eccvm_proof.size(), ECCVMFlavor::PROOF_LENGTH);
64}
65
70{
71 HonkProof ipa_proof = create_mock_ipa_proof();
72 EXPECT_EQ(ipa_proof.size(), IPA_PROOF_LENGTH);
73}
74
78TEST_F(MockVerifierInputsTest, MockTranslatorProofSize)
79{
80 HonkProof translator_proof = create_mock_translator_proof();
81 EXPECT_EQ(translator_proof.size(), TranslatorFlavor::PROOF_LENGTH);
82}
83
87TEST_F(MockVerifierInputsTest, MockMegaOinkProofSize)
88{
89 using Flavor = MegaFlavor;
91 constexpr size_t OINK_LENGTH = ProofLength::Oink<Flavor>::LENGTH_WITHOUT_PUB_INPUTS;
92
93 HonkProof app_proof = create_mock_oink_proof<Flavor, stdlib::recursion::honk::AppIO>();
94 EXPECT_EQ(app_proof.size(), OINK_LENGTH + stdlib::recursion::honk::AppIO::PUBLIC_INPUTS_SIZE);
95
96 HonkProof kernel_proof = create_mock_oink_proof<Flavor, stdlib::recursion::honk::KernelIO>();
97 EXPECT_EQ(kernel_proof.size(), OINK_LENGTH + stdlib::recursion::honk::KernelIO::PUBLIC_INPUTS_SIZE);
98
99 HonkProof hiding_proof = create_mock_oink_proof<Flavor, stdlib::recursion::honk::HidingKernelIO<Builder>>();
100 EXPECT_EQ(hiding_proof.size(), OINK_LENGTH + stdlib::recursion::honk::HidingKernelIO<Builder>::PUBLIC_INPUTS_SIZE);
101}
102
106TEST_F(MockVerifierInputsTest, MockUltraOinkProofSize)
107{
108 {
109 using Flavor = UltraFlavor;
111 HonkProof proof = create_mock_oink_proof<Flavor, IO>();
112 EXPECT_EQ(proof.size(), ProofLength::Oink<Flavor>::LENGTH_WITHOUT_PUB_INPUTS + IO::PUBLIC_INPUTS_SIZE);
113 }
114 {
115 using Flavor = UltraZKFlavor;
117 HonkProof proof = create_mock_oink_proof<Flavor, IO>();
118 EXPECT_EQ(proof.size(), ProofLength::Oink<Flavor>::LENGTH_WITHOUT_PUB_INPUTS + IO::PUBLIC_INPUTS_SIZE);
119 }
120 {
121 using Flavor = UltraFlavor;
123 HonkProof proof = create_mock_oink_proof<Flavor, IO>();
124 EXPECT_EQ(proof.size(), ProofLength::Oink<Flavor>::LENGTH_WITHOUT_PUB_INPUTS + IO::PUBLIC_INPUTS_SIZE);
125 }
126}
127
131TEST_F(MockVerifierInputsTest, MockMegaHonkProofSize)
132{
133 using Flavor = MegaFlavor;
135 constexpr size_t HONK_LENGTH = ProofLength::Honk<Flavor>::LENGTH_WITHOUT_PUB_INPUTS(Flavor::VIRTUAL_LOG_N);
136
137 HonkProof app_proof = create_mock_honk_proof<Flavor, stdlib::recursion::honk::AppIO>();
138 EXPECT_EQ(app_proof.size(), HONK_LENGTH + stdlib::recursion::honk::AppIO::PUBLIC_INPUTS_SIZE);
139
140 HonkProof kernel_proof = create_mock_honk_proof<Flavor, stdlib::recursion::honk::KernelIO>();
141 EXPECT_EQ(kernel_proof.size(), HONK_LENGTH + stdlib::recursion::honk::KernelIO::PUBLIC_INPUTS_SIZE);
142
143 HonkProof hiding_proof = create_mock_honk_proof<Flavor, stdlib::recursion::honk::HidingKernelIO<Builder>>();
144 EXPECT_EQ(hiding_proof.size(), HONK_LENGTH + stdlib::recursion::honk::HidingKernelIO<Builder>::PUBLIC_INPUTS_SIZE);
145}
146
150TEST_F(MockVerifierInputsTest, MockUltraHonkProofSize)
151{
152 {
153 using Flavor = UltraFlavor;
155 HonkProof proof = create_mock_honk_proof<Flavor, IO>();
156 EXPECT_EQ(proof.size(),
157 ProofLength::Honk<Flavor>::LENGTH_WITHOUT_PUB_INPUTS(Flavor::VIRTUAL_LOG_N) + IO::PUBLIC_INPUTS_SIZE);
158 }
159 {
160 using Flavor = UltraZKFlavor;
162 HonkProof proof = create_mock_honk_proof<Flavor, IO>();
163 EXPECT_EQ(proof.size(),
164 ProofLength::Honk<Flavor>::LENGTH_WITHOUT_PUB_INPUTS(Flavor::VIRTUAL_LOG_N) + IO::PUBLIC_INPUTS_SIZE);
165 }
166 {
167 using Flavor = UltraFlavor;
169 HonkProof proof = create_mock_honk_proof<Flavor, IO>();
170 // RollupIO has HasIPA=true, so proof includes IPA_PROOF_LENGTH
171 constexpr size_t expected = ProofLength::Honk<Flavor>::LENGTH_WITHOUT_PUB_INPUTS(Flavor::VIRTUAL_LOG_N) +
172 IO::PUBLIC_INPUTS_SIZE + IPA_PROOF_LENGTH;
173 EXPECT_EQ(proof.size(), expected);
174 }
175}
176
177// TODO(@fcarreiro): Re-enable this test once proof size is fixed.
178TEST_F(MockVerifierInputsTest, DISABLED_MockAVMProofSize)
179{
180 const HonkProof avm_proof = create_mock_avm_proof_without_pub_inputs(/*add_padding=*/false);
181 EXPECT_EQ(avm_proof.size(), 16040);
182}
183
184TEST_F(MockVerifierInputsTest, MockAVMProofSizePadded)
185{
186 const HonkProof padded_avm_proof = create_mock_avm_proof_without_pub_inputs(/*add_padding=*/true);
187 EXPECT_EQ(padded_avm_proof.size(), 16400);
188}
189
193TEST_F(MockVerifierInputsTest, MockChonkProofSize)
194{
196 HonkProof chonk_proof = create_mock_chonk_proof<Builder>();
197 EXPECT_EQ(chonk_proof.size(), ChonkProof::PROOF_LENGTH);
198}
199
203TEST_F(MockVerifierInputsTest, MockMultilinearBatchingProofSize)
204{
207 EXPECT_EQ(batching_proof.size(), ProofLength::MultilinearBatching<Flavor>::LENGTH);
208}
static constexpr size_t PROOF_LENGTH
MergeProver::MergeProof MergeProof
Definition goblin.hpp:42
static constexpr size_t PROOF_LENGTH
static constexpr size_t VIRTUAL_LOG_N
Child class of UltraFlavor that runs with ZK Sumcheck.
Manages the data that is propagated on the public inputs of an application/function circuit.
Manages the data that is propagated on the public inputs of a hiding kernel circuit.
The data that is propagated on the public inputs of a rollup circuit.
Goblin::MergeProof create_mock_merge_proof()
Create a mock merge proof which has the correct structure but is not necessarily valid.
HonkProof create_mock_eccvm_proof()
Create a mock pre-ipa proof which has the correct structure but is not necessarily valid.
HonkProof create_mock_translator_proof()
Create a mock Translator proof which has the correct structure but is not necessarily valid.
HonkProof create_mock_batch_merge_proof()
Create a mock batch merge proof which has the correct structure but is not necessarily valid.
HonkProof create_mock_multilinear_batch_proof()
Create a mock multilinear batching sumcheck proof that has the correct structure but is not in genera...
HonkProof create_mock_avm_proof_without_pub_inputs(const bool add_padding)
Create a mock AVM proof without public inputs that has the correct structure but is not in general va...
HonkProof create_mock_ipa_proof()
Create a mock ipa proof which has the correct structure but is not necessarily valid.
std::filesystem::path bb_crs_path()
void init_file_crs_factory(const std::filesystem::path &path)
TEST_F(BoomerangGoblinRecursiveVerifierTests, graph_description_basic)
Construct and check a goblin recursive verification circuit.
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
std::vector< fr > HonkProof
Definition proof.hpp:15
MegaCircuitBuilder_< field< Bn254FrParams > > MegaCircuitBuilder
static constexpr size_t PROOF_LENGTH
Full Honk proof layout (used by UltraVerifier).
static constexpr size_t LENGTH_WITHOUT_PUB_INPUTS(size_t log_n)
MultilinearBatching proof layout (used by HyperNova folding).
Computes Oink proof length from flavor traits.