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.
2#include "acir_format.hpp"
18
19#include <gtest/gtest.h>
20#include <vector>
21
22using namespace acir_format;
23using namespace bb;
24
25template <typename Flavor> class MockVerifierInputsTest : public ::testing::Test {
26 public:
28};
29
30using FlavorTypes = testing::Types<MegaFlavor, UltraFlavor, UltraZKFlavor, UltraRollupFlavor>;
31
33
37TEST(MockVerifierInputsTest, MockMergeProofSize)
38{
39 size_t CURRENT_MERGE_PROOF_SIZE = 42;
40 EXPECT_EQ(CURRENT_MERGE_PROOF_SIZE, MERGE_PROOF_SIZE) << "The length of the Merge proof changed.";
41
43 EXPECT_EQ(merge_proof.size(), MERGE_PROOF_SIZE);
44}
45
49TEST(MockVerifierInputsTest, MockPreIpaProofSize)
50{
51 size_t CURRENT_ECCVM_PROOF_SIZE = 608;
52 EXPECT_EQ(ECCVMFlavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS, CURRENT_ECCVM_PROOF_SIZE)
53 << "The length of the Pre-IPA proof changed.";
54
55 HonkProof eccvm_proof = create_mock_eccvm_proof();
56 EXPECT_EQ(eccvm_proof.size(), ECCVMFlavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS);
57}
58
62TEST(MockVerifierInputsTest, MockIPAProofSize)
63{
64 size_t CURRENT_IPA_PROOF_SIZE = 64;
65 EXPECT_EQ(IPA_PROOF_LENGTH, CURRENT_IPA_PROOF_SIZE) << "The length of the IPA proof changed.";
66
67 HonkProof ipa_proof = create_mock_ipa_proof();
68 EXPECT_EQ(ipa_proof.size(), IPA_PROOF_LENGTH);
69}
70
74TEST(MockVerifierInputsTest, MockTranslatorProofSize)
75{
76 size_t CURRENT_TRANSLATOR_PROOF_SIZE = 786;
77 EXPECT_EQ(TranslatorFlavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS, CURRENT_TRANSLATOR_PROOF_SIZE)
78 << "The length of the Translator proof changed.";
79
80 HonkProof translator_proof = create_mock_translator_proof();
81 EXPECT_EQ(translator_proof.size(), TranslatorFlavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS);
82}
83
88TEST(MockVerifierInputsTest, MockMegaOinkProofSize)
89{
90 using Flavor = MegaFlavor;
92
93 size_t CURRENT_OINK_PROOF_SIZE_WITHOUT_PUB_INPUTS = 96;
94 EXPECT_EQ(Flavor::OINK_PROOF_LENGTH_WITHOUT_PUB_INPUTS, CURRENT_OINK_PROOF_SIZE_WITHOUT_PUB_INPUTS)
95 << "The length of the Mega Oink proof changed.";
96
97 {
98 // AppIO
99 const size_t NUM_PUBLIC_INPUTS = stdlib::recursion::honk::AppIO::PUBLIC_INPUTS_SIZE;
100 HonkProof honk_proof = create_mock_oink_proof<Flavor, stdlib::recursion::honk::AppIO>();
101 EXPECT_EQ(honk_proof.size(), Flavor::OINK_PROOF_LENGTH_WITHOUT_PUB_INPUTS + NUM_PUBLIC_INPUTS);
102 }
103
104 {
105 // KernelIO
106 const size_t NUM_PUBLIC_INPUTS = stdlib::recursion::honk::KernelIO::PUBLIC_INPUTS_SIZE;
107 HonkProof honk_proof = create_mock_oink_proof<Flavor, stdlib::recursion::honk::KernelIO>();
108 EXPECT_EQ(honk_proof.size(), Flavor::OINK_PROOF_LENGTH_WITHOUT_PUB_INPUTS + NUM_PUBLIC_INPUTS);
109 }
110
111 {
112 // HidingKernelIO
114 HonkProof honk_proof = create_mock_oink_proof<Flavor, stdlib::recursion::honk::HidingKernelIO<Builder>>();
115 EXPECT_EQ(honk_proof.size(), Flavor::OINK_PROOF_LENGTH_WITHOUT_PUB_INPUTS + NUM_PUBLIC_INPUTS);
116 }
117}
118
123TYPED_TEST(MockVerifierInputsTest, MockUltraOinkProofSize)
124{
125 using Flavor = TypeParam;
130
132 // Base Ultra flavors have 8 witness entities, ZK flavors have 9 (includes gemini_masking_poly)
133 size_t CURRENT_OINK_PROOF_SIZE_WITHOUT_PUB_INPUTS = Flavor::HasZK ? 36 : 32;
134 EXPECT_EQ(Flavor::OINK_PROOF_LENGTH_WITHOUT_PUB_INPUTS, CURRENT_OINK_PROOF_SIZE_WITHOUT_PUB_INPUTS)
135 << "The length of the Ultra Oink proof changed.";
136
137 const size_t NUM_PUBLIC_INPUTS = IO::PUBLIC_INPUTS_SIZE;
138 HonkProof honk_proof = create_mock_oink_proof<Flavor, IO>();
139 EXPECT_EQ(honk_proof.size(), Flavor::OINK_PROOF_LENGTH_WITHOUT_PUB_INPUTS + NUM_PUBLIC_INPUTS);
140 } else {
141 GTEST_SKIP();
142 }
143}
144
149TYPED_TEST(MockVerifierInputsTest, MockDeciderProofSize)
150{
151 using Flavor = TypeParam;
152
154 size_t CURRENT_DECIDER_ULTRAZK_PROOF_SIZE = IsMegaFlavor<Flavor> ? 337 : 409;
155 EXPECT_EQ(Flavor::DECIDER_PROOF_LENGTH(), CURRENT_DECIDER_ULTRAZK_PROOF_SIZE)
156 << "The length of the Decider UltraZK proof changed.";
157
158 HonkProof honk_proof = create_mock_decider_proof<Flavor>();
159 EXPECT_EQ(honk_proof.size(), Flavor::DECIDER_PROOF_LENGTH());
160 } else {
161 GTEST_SKIP();
162 }
163}
164
169TEST(MockVerifierInputsTest, MockMegaHonkProofSize)
170{
171 using Flavor = MegaFlavor;
173
174 // If this value changes, we need to update the corresponding constants in noir and in yarn-project. Also, we need
175 // to update the Prover.toml file for rollup-tx-private to reflect the new length of the MegaHonk proof.
176 size_t CURRENT_MEGA_PROOF_SIZE_WITHOUT_PUB_INPUTS = 433;
177 EXPECT_EQ(Flavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS(), CURRENT_MEGA_PROOF_SIZE_WITHOUT_PUB_INPUTS)
178 << "The length of the Mega Honk proof changed.";
179
180 {
181 // AppIO
182 const size_t NUM_PUBLIC_INPUTS = stdlib::recursion::honk::AppIO::PUBLIC_INPUTS_SIZE;
183 HonkProof honk_proof = create_mock_honk_proof<Flavor, stdlib::recursion::honk::AppIO>();
184 EXPECT_EQ(honk_proof.size(), Flavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS() + NUM_PUBLIC_INPUTS);
185 }
186
187 {
188 // KernelIO
189 const size_t NUM_PUBLIC_INPUTS = stdlib::recursion::honk::KernelIO::PUBLIC_INPUTS_SIZE;
190 HonkProof honk_proof = create_mock_honk_proof<Flavor, stdlib::recursion::honk::KernelIO>();
191 EXPECT_EQ(honk_proof.size(), Flavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS() + NUM_PUBLIC_INPUTS);
192 }
193
194 {
195 // HidingKernelIO
197 HonkProof honk_proof = create_mock_honk_proof<Flavor, stdlib::recursion::honk::HidingKernelIO<Builder>>();
198 EXPECT_EQ(honk_proof.size(), Flavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS() + NUM_PUBLIC_INPUTS);
199 }
200}
201
206TYPED_TEST(MockVerifierInputsTest, MockUltraHonkProofSize)
207{
208 using Flavor = TypeParam;
213
215 // If this value changes, we need to update the corresponding constants in noir and in yarn-project. Also, we
216 // need to update the relevant Prover.toml files to reflect the new length of the Ultra Honk proof.
217 size_t CURRENT_ULTRA_HONK_PROOF_SIZE_WITHOUT_PUB_INPUTS = 0;
219 CURRENT_ULTRA_HONK_PROOF_SIZE_WITHOUT_PUB_INPUTS = 441;
220 } else if constexpr (std::is_same_v<Flavor, UltraRollupFlavor>) {
221 CURRENT_ULTRA_HONK_PROOF_SIZE_WITHOUT_PUB_INPUTS = 505;
222 } else if constexpr (std::is_same_v<Flavor, UltraZKFlavor>) {
223 CURRENT_ULTRA_HONK_PROOF_SIZE_WITHOUT_PUB_INPUTS = 492;
224 }
225 const size_t NUM_PUBLIC_INPUTS = IO::PUBLIC_INPUTS_SIZE;
226 HonkProof honk_proof = create_mock_honk_proof<Flavor, IO>();
227 EXPECT_EQ(honk_proof.size(), Flavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS() + NUM_PUBLIC_INPUTS);
228 EXPECT_EQ(Flavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS(), CURRENT_ULTRA_HONK_PROOF_SIZE_WITHOUT_PUB_INPUTS)
229 << "The length of the Ultra Honk proof changed.";
230 } else {
231 GTEST_SKIP();
232 }
233}
234
239TEST(MockVerifierInputsTest, MockChonkProofSize)
240{
242
243 // If this value changes, we need to update the corresponding constants in noir and in yarn-project. Also, we need
244 // to update the Prover.toml file for rollup-tx-private to reflect the new length of the Chonk proof.
245 size_t CURRENT_CHONK_PROOF_SIZE_WITHOUT_PUB_INPUTS = 1907;
246 HonkProof chonk_proof = create_mock_chonk_proof<Builder>();
247 EXPECT_EQ(chonk_proof.size(), ChonkProof::PROOF_LENGTH);
248 EXPECT_EQ(chonk_proof.size(),
249 CURRENT_CHONK_PROOF_SIZE_WITHOUT_PUB_INPUTS +
251 << "The length of the Chonk proof changed.";
252}
253
257TEST(MockVerifierInputsTest, MockMultilinearBatchingProofSize)
258{
259 size_t CURRENT_MULTILINEAR_BATCHING_PROOF_SIZE_WITHOUT_PUB_INPUTS = 121;
261 EXPECT_EQ(batching_proof.size(), MultilinearBatchingFlavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS());
262 EXPECT_EQ(batching_proof.size(), CURRENT_MULTILINEAR_BATCHING_PROOF_SIZE_WITHOUT_PUB_INPUTS)
263 << "The length of the MultiLinearBatching proof changed.";
264}
static constexpr bool HasZK
ECCVMCircuitBuilder CircuitBuilder
static constexpr size_t PROOF_LENGTH_WITHOUT_PUB_INPUTS
MergeProver::MergeProof MergeProof
Definition goblin.hpp:34
static constexpr size_t PROOF_LENGTH_WITHOUT_PUB_INPUTS()
static constexpr size_t PROOF_LENGTH_WITHOUT_PUB_INPUTS
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.
testing::Types< MegaFlavor, UltraFlavor, UltraZKFlavor, UltraRollupFlavor > FlavorTypes
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_multilinear_batch_proof()
Create a mock multilinear batching sumcheck proof that has the correct structure but is not in genera...
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)
TYPED_TEST_SUITE(BoomerangRecursiveVerifierTest, Flavors)
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
std::vector< fr > HonkProof
Definition proof.hpp:15
TYPED_TEST(ShpleminiTest, CorrectnessOfMultivariateClaimBatching)
TEST(BoomerangMegaCircuitBuilder, BasicCircuit)
MegaCircuitBuilder_< field< Bn254FrParams > > MegaCircuitBuilder
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
static constexpr size_t PROOF_LENGTH
The size of a Chonk proof with backend-added public inputs: HidingKernelIO.