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.
5
6#include <gtest/gtest.h>
7
8using namespace acir_format;
9using namespace bb;
10
11class MockVerifierInputsTest : public ::testing::Test {
12 public:
14};
15
16// Static assertions for proof size constants that must stay in sync with Noir (constants.nr)
17// These constants are used by Noir protocol circuits and TypeScript
18
19// Public input component sizes (used in Noir)
20static_assert(PAIRING_POINTS_SIZE == 8, "PAIRING_POINTS_SIZE changed - update constants.nr");
21static_assert(GRUMPKIN_OPENING_CLAIM_SIZE == 6, "IPA_CLAIM_SIZE changed - update constants.nr");
22static_assert(HIDING_KERNEL_PUBLIC_INPUTS_SIZE == 28,
23 "HIDING_KERNEL_IO_PUBLIC_INPUTS_SIZE changed - update constants.nr");
24
25// Component proof lengths (used in Noir)
26static_assert(MERGE_PROOF_SIZE == 42,
27 "MERGE_PROOF_SIZE changed - update CHONK_MERGE_PROOF_SIZE in constants.nr "
28 "and run `yarn remake-constants`");
29static_assert(ECCVMFlavor::PROOF_LENGTH == 608,
30 "ECCVM proof size changed - update CHONK_ECCVM_PROOF_LENGTH in constants.nr "
31 "and run `yarn remake-constants`");
32static_assert(IPA_PROOF_LENGTH == 64, "IPA_PROOF_LENGTH changed - update constants.nr");
33static_assert(TranslatorFlavor::PROOF_LENGTH == 483, "Translator proof size changed - update constants.nr");
34
35// Full proof lengths (used in Noir)
36static_assert(
39 "RECURSIVE_PROOF_LENGTH changed - update constants.nr");
40static_assert(ChonkProof::PROOF_LENGTH == 1349, "CHONK_PROOF_LENGTH changed - update constants.nr");
41static_assert(ChonkProof::HIDING_OINK_LENGTH == 108,
42 "ChonkProof::HIDING_OINK_LENGTH changed - update CHONK_HIDING_OINK_LENGTH in constants.nr "
43 "and run `yarn remake-constants`");
44static_assert(ChonkProof::JOINT_PROOF_LENGTH == 499,
45 "ChonkProof::JOINT_PROOF_LENGTH changed - update CHONK_JOINT_PROOF_LENGTH in constants.nr "
46 "and run `yarn remake-constants`");
48 "MEGA_VK_LENGTH_IN_FIELDS changed - update constants.nr");
50 "MegaZK VK size changed - update constants.nr");
52 "MultilinearBatching proof size changed - update constants.nr");
53
57TEST_F(MockVerifierInputsTest, MockMergeProofSize)
58{
60 EXPECT_EQ(merge_proof.size(), MERGE_PROOF_SIZE);
61}
62
66TEST_F(MockVerifierInputsTest, MockBatchMergeProofSize)
67{
68 HonkProof batch_merge_proof = create_mock_batch_merge_proof();
69 EXPECT_EQ(batch_merge_proof.size(), BATCH_MERGE_PROOF_SIZE);
70}
71
75TEST_F(MockVerifierInputsTest, MockPreIpaProofSize)
76{
77 HonkProof eccvm_proof = create_mock_eccvm_proof();
78 EXPECT_EQ(eccvm_proof.size(), ECCVMFlavor::PROOF_LENGTH);
79}
80
85{
86 HonkProof ipa_proof = create_mock_ipa_proof();
87 EXPECT_EQ(ipa_proof.size(), IPA_PROOF_LENGTH);
88}
89
93TEST_F(MockVerifierInputsTest, MockTranslatorProofSize)
94{
95 HonkProof translator_proof = create_mock_translator_proof();
96 EXPECT_EQ(translator_proof.size(), TranslatorFlavor::PROOF_LENGTH);
97}
98
102TEST_F(MockVerifierInputsTest, MockMegaOinkProofSize)
103{
104 using Flavor = MegaFlavor;
106 constexpr size_t OINK_LENGTH = ProofLength::Oink<Flavor>::LENGTH_WITHOUT_PUB_INPUTS;
107
108 HonkProof app_proof = create_mock_oink_proof<Flavor, stdlib::recursion::honk::AppIO>();
109 EXPECT_EQ(app_proof.size(), OINK_LENGTH + stdlib::recursion::honk::AppIO::PUBLIC_INPUTS_SIZE);
110
111 HonkProof kernel_proof = create_mock_oink_proof<Flavor, stdlib::recursion::honk::KernelIO>();
112 EXPECT_EQ(kernel_proof.size(), OINK_LENGTH + stdlib::recursion::honk::KernelIO::PUBLIC_INPUTS_SIZE);
113
114 HonkProof hiding_proof = create_mock_oink_proof<Flavor, stdlib::recursion::honk::HidingKernelIO<Builder>>();
115 EXPECT_EQ(hiding_proof.size(), OINK_LENGTH + stdlib::recursion::honk::HidingKernelIO<Builder>::PUBLIC_INPUTS_SIZE);
116}
117
121TEST_F(MockVerifierInputsTest, MockUltraOinkProofSize)
122{
123 {
124 using Flavor = UltraFlavor;
126 HonkProof proof = create_mock_oink_proof<Flavor, IO>();
127 EXPECT_EQ(proof.size(), ProofLength::Oink<Flavor>::LENGTH_WITHOUT_PUB_INPUTS + IO::PUBLIC_INPUTS_SIZE);
128 }
129 {
130 using Flavor = UltraZKFlavor;
132 HonkProof proof = create_mock_oink_proof<Flavor, IO>();
133 EXPECT_EQ(proof.size(), ProofLength::Oink<Flavor>::LENGTH_WITHOUT_PUB_INPUTS + IO::PUBLIC_INPUTS_SIZE);
134 }
135 {
136 using Flavor = UltraFlavor;
138 HonkProof proof = create_mock_oink_proof<Flavor, IO>();
139 EXPECT_EQ(proof.size(), ProofLength::Oink<Flavor>::LENGTH_WITHOUT_PUB_INPUTS + IO::PUBLIC_INPUTS_SIZE);
140 }
141}
142
146TEST_F(MockVerifierInputsTest, MockMegaHonkProofSize)
147{
148 using Flavor = MegaFlavor;
150 constexpr size_t HONK_LENGTH = ProofLength::Honk<Flavor>::LENGTH_WITHOUT_PUB_INPUTS(Flavor::VIRTUAL_LOG_N);
151
152 HonkProof app_proof = create_mock_honk_proof<Flavor, stdlib::recursion::honk::AppIO>();
153 EXPECT_EQ(app_proof.size(), HONK_LENGTH + stdlib::recursion::honk::AppIO::PUBLIC_INPUTS_SIZE);
154
155 HonkProof kernel_proof = create_mock_honk_proof<Flavor, stdlib::recursion::honk::KernelIO>();
156 EXPECT_EQ(kernel_proof.size(), HONK_LENGTH + stdlib::recursion::honk::KernelIO::PUBLIC_INPUTS_SIZE);
157
158 HonkProof hiding_proof = create_mock_honk_proof<Flavor, stdlib::recursion::honk::HidingKernelIO<Builder>>();
159 EXPECT_EQ(hiding_proof.size(), HONK_LENGTH + stdlib::recursion::honk::HidingKernelIO<Builder>::PUBLIC_INPUTS_SIZE);
160}
161
165TEST_F(MockVerifierInputsTest, MockUltraHonkProofSize)
166{
167 {
168 using Flavor = UltraFlavor;
170 HonkProof proof = create_mock_honk_proof<Flavor, IO>();
171 EXPECT_EQ(proof.size(),
172 ProofLength::Honk<Flavor>::LENGTH_WITHOUT_PUB_INPUTS(Flavor::VIRTUAL_LOG_N) + IO::PUBLIC_INPUTS_SIZE);
173 }
174 {
175 using Flavor = UltraZKFlavor;
177 HonkProof proof = create_mock_honk_proof<Flavor, IO>();
178 EXPECT_EQ(proof.size(),
179 ProofLength::Honk<Flavor>::LENGTH_WITHOUT_PUB_INPUTS(Flavor::VIRTUAL_LOG_N) + IO::PUBLIC_INPUTS_SIZE);
180 }
181 {
182 using Flavor = UltraFlavor;
184 HonkProof proof = create_mock_honk_proof<Flavor, IO>();
185 // RollupIO has HasIPA=true, so proof includes IPA_PROOF_LENGTH
186 constexpr size_t expected = ProofLength::Honk<Flavor>::LENGTH_WITHOUT_PUB_INPUTS(Flavor::VIRTUAL_LOG_N) +
187 IO::PUBLIC_INPUTS_SIZE + IPA_PROOF_LENGTH;
188 EXPECT_EQ(proof.size(), expected);
189 }
190}
191
192// TODO(@fcarreiro): Re-enable this test once proof size is fixed.
193TEST_F(MockVerifierInputsTest, DISABLED_MockAVMProofSize)
194{
195 const HonkProof avm_proof = create_mock_avm_proof_without_pub_inputs(/*add_padding=*/false);
196 EXPECT_EQ(avm_proof.size(), 16040);
197}
198
199TEST_F(MockVerifierInputsTest, MockAVMProofSizePadded)
200{
201 const HonkProof padded_avm_proof = create_mock_avm_proof_without_pub_inputs(/*add_padding=*/true);
202 EXPECT_EQ(padded_avm_proof.size(), 16400);
203}
204
208TEST_F(MockVerifierInputsTest, MockChonkProofSize)
209{
211 HonkProof chonk_proof = create_mock_chonk_proof<Builder>();
212 EXPECT_EQ(chonk_proof.size(), ChonkProof::PROOF_LENGTH);
213}
214
218TEST_F(MockVerifierInputsTest, MockMultilinearBatchingProofSize)
219{
222 EXPECT_EQ(batching_proof.size(), ProofLength::MultilinearBatching<Flavor>::LENGTH);
223}
static constexpr size_t PROOF_LENGTH
MergeProver::MergeProof MergeProof
Definition goblin.hpp:42
static constexpr size_t calc_num_data_types()
Calculate the number of field elements needed for serialization.
Definition flavor.hpp:200
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 JOINT_PROOF_LENGTH
static constexpr size_t PROOF_LENGTH
static constexpr size_t HIDING_OINK_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.