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"
19#include "proof_surgeon.hpp"
20
21#include <gtest/gtest.h>
22#include <vector>
23
24using namespace acir_format;
25using namespace bb;
26
27template <typename Flavor> class MockVerifierInputsTest : public ::testing::Test {
28 public:
30};
31
32using FlavorTypes = testing::Types<MegaFlavor, UltraFlavor, UltraZKFlavor, UltraRollupFlavor>;
33
35
39TEST(MockVerifierInputsTest, MockMergeProofSize)
40{
41 size_t CURRENT_MERGE_PROOF_SIZE = 42;
42 EXPECT_EQ(CURRENT_MERGE_PROOF_SIZE, MERGE_PROOF_SIZE) << "The length of the Merge proof changed.";
43
45 EXPECT_EQ(merge_proof.size(), MERGE_PROOF_SIZE);
46}
47
51TEST(MockVerifierInputsTest, MockPreIpaProofSize)
52{
53 size_t CURRENT_ECCVM_PROOF_SIZE = 608;
54 EXPECT_EQ(ECCVMFlavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS, CURRENT_ECCVM_PROOF_SIZE)
55 << "The length of the Pre-IPA proof changed.";
56
57 HonkProof eccvm_proof = create_mock_eccvm_proof();
58 EXPECT_EQ(eccvm_proof.size(), ECCVMFlavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS);
59}
60
64TEST(MockVerifierInputsTest, MockIPAProofSize)
65{
66 size_t CURRENT_IPA_PROOF_SIZE = 64;
67 EXPECT_EQ(IPA_PROOF_LENGTH, CURRENT_IPA_PROOF_SIZE) << "The length of the IPA proof changed.";
68
69 HonkProof ipa_proof = create_mock_ipa_proof();
70 EXPECT_EQ(ipa_proof.size(), IPA_PROOF_LENGTH);
71}
72
76TEST(MockVerifierInputsTest, MockTranslatorProofSize)
77{
78 size_t CURRENT_TRANSLATOR_PROOF_SIZE = 786;
79 EXPECT_EQ(TranslatorFlavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS, CURRENT_TRANSLATOR_PROOF_SIZE)
80 << "The length of the Translator proof changed.";
81
82 HonkProof translator_proof = create_mock_translator_proof();
83 EXPECT_EQ(translator_proof.size(), TranslatorFlavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS);
84}
85
90TEST(MockVerifierInputsTest, MockMegaOinkProofSize)
91{
92 using Flavor = MegaFlavor;
94
95 size_t CURRENT_OINK_PROOF_SIZE_WITHOUT_PUB_INPUTS = 96;
96 EXPECT_EQ(Flavor::OINK_PROOF_LENGTH_WITHOUT_PUB_INPUTS, CURRENT_OINK_PROOF_SIZE_WITHOUT_PUB_INPUTS)
97 << "The length of the Mega Oink proof changed.";
98
99 {
100 // AppIO
101 const size_t NUM_PUBLIC_INPUTS = stdlib::recursion::honk::AppIO::PUBLIC_INPUTS_SIZE;
102 HonkProof honk_proof = create_mock_oink_proof<Flavor, stdlib::recursion::honk::AppIO>();
103 EXPECT_EQ(honk_proof.size(), Flavor::OINK_PROOF_LENGTH_WITHOUT_PUB_INPUTS + NUM_PUBLIC_INPUTS);
104 }
105
106 {
107 // KernelIO
108 const size_t NUM_PUBLIC_INPUTS = stdlib::recursion::honk::KernelIO::PUBLIC_INPUTS_SIZE;
109 HonkProof honk_proof = create_mock_oink_proof<Flavor, stdlib::recursion::honk::KernelIO>();
110 EXPECT_EQ(honk_proof.size(), Flavor::OINK_PROOF_LENGTH_WITHOUT_PUB_INPUTS + NUM_PUBLIC_INPUTS);
111 }
112
113 {
114 // HidingKernelIO
116 HonkProof honk_proof = create_mock_oink_proof<Flavor, stdlib::recursion::honk::HidingKernelIO<Builder>>();
117 EXPECT_EQ(honk_proof.size(), Flavor::OINK_PROOF_LENGTH_WITHOUT_PUB_INPUTS + NUM_PUBLIC_INPUTS);
118 }
119}
120
125TYPED_TEST(MockVerifierInputsTest, MockUltraOinkProofSize)
126{
127 using Flavor = TypeParam;
132
134 // Base Ultra flavors have 8 witness entities, ZK flavors have 9 (includes gemini_masking_poly)
135 size_t CURRENT_OINK_PROOF_SIZE_WITHOUT_PUB_INPUTS = Flavor::HasZK ? 36 : 32;
136 EXPECT_EQ(Flavor::OINK_PROOF_LENGTH_WITHOUT_PUB_INPUTS, CURRENT_OINK_PROOF_SIZE_WITHOUT_PUB_INPUTS)
137 << "The length of the Ultra Oink proof changed.";
138
139 const size_t NUM_PUBLIC_INPUTS = IO::PUBLIC_INPUTS_SIZE;
140 HonkProof honk_proof = create_mock_oink_proof<Flavor, IO>();
141 EXPECT_EQ(honk_proof.size(), Flavor::OINK_PROOF_LENGTH_WITHOUT_PUB_INPUTS + NUM_PUBLIC_INPUTS);
142 } else {
143 GTEST_SKIP();
144 }
145}
146
151TYPED_TEST(MockVerifierInputsTest, MockDeciderProofSize)
152{
153 using Flavor = TypeParam;
154
156 size_t CURRENT_DECIDER_ULTRAZK_PROOF_SIZE = IsMegaFlavor<Flavor> ? 337 : 409;
157 EXPECT_EQ(Flavor::DECIDER_PROOF_LENGTH(), CURRENT_DECIDER_ULTRAZK_PROOF_SIZE)
158 << "The length of the Decider UltraZK proof changed.";
159
160 HonkProof honk_proof = create_mock_decider_proof<Flavor>();
161 EXPECT_EQ(honk_proof.size(), Flavor::DECIDER_PROOF_LENGTH());
162 } else {
163 GTEST_SKIP();
164 }
165}
166
171TEST(MockVerifierInputsTest, MockMegaHonkProofSize)
172{
173 using Flavor = MegaFlavor;
175
176 // If this value changes, we need to update the corresponding constants in noir and in yarn-project. Also, we need
177 // to update the Prover.toml file for rollup-tx-private to reflect the new length of the MegaHonk proof.
178 size_t CURRENT_MEGA_PROOF_SIZE_WITHOUT_PUB_INPUTS = 433;
179 EXPECT_EQ(Flavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS(), CURRENT_MEGA_PROOF_SIZE_WITHOUT_PUB_INPUTS)
180 << "The length of the Mega Honk proof changed.";
181
182 {
183 // AppIO
184 const size_t NUM_PUBLIC_INPUTS = stdlib::recursion::honk::AppIO::PUBLIC_INPUTS_SIZE;
185 HonkProof honk_proof = create_mock_honk_proof<Flavor, stdlib::recursion::honk::AppIO>();
186 EXPECT_EQ(honk_proof.size(), Flavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS() + NUM_PUBLIC_INPUTS);
187 }
188
189 {
190 // KernelIO
191 const size_t NUM_PUBLIC_INPUTS = stdlib::recursion::honk::KernelIO::PUBLIC_INPUTS_SIZE;
192 HonkProof honk_proof = create_mock_honk_proof<Flavor, stdlib::recursion::honk::KernelIO>();
193 EXPECT_EQ(honk_proof.size(), Flavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS() + NUM_PUBLIC_INPUTS);
194 }
195
196 {
197 // HidingKernelIO
199 HonkProof honk_proof = create_mock_honk_proof<Flavor, stdlib::recursion::honk::HidingKernelIO<Builder>>();
200 EXPECT_EQ(honk_proof.size(), Flavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS() + NUM_PUBLIC_INPUTS);
201 }
202}
203
208TYPED_TEST(MockVerifierInputsTest, MockUltraHonkProofSize)
209{
210 using Flavor = TypeParam;
215
217 // If this value changes, we need to update the corresponding constants in noir and in yarn-project. Also, we
218 // need to update the relevant Prover.toml files to reflect the new length of the Ultra Honk proof.
219 size_t CURRENT_ULTRA_HONK_PROOF_SIZE_WITHOUT_PUB_INPUTS = 0;
221 CURRENT_ULTRA_HONK_PROOF_SIZE_WITHOUT_PUB_INPUTS = 441;
222 } else if constexpr (std::is_same_v<Flavor, UltraRollupFlavor>) {
223 CURRENT_ULTRA_HONK_PROOF_SIZE_WITHOUT_PUB_INPUTS = 505;
224 } else if constexpr (std::is_same_v<Flavor, UltraZKFlavor>) {
225 CURRENT_ULTRA_HONK_PROOF_SIZE_WITHOUT_PUB_INPUTS = 492;
226 }
227 const size_t NUM_PUBLIC_INPUTS = IO::PUBLIC_INPUTS_SIZE;
228 HonkProof honk_proof = create_mock_honk_proof<Flavor, IO>();
229 EXPECT_EQ(honk_proof.size(), Flavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS() + NUM_PUBLIC_INPUTS);
230 EXPECT_EQ(Flavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS(), CURRENT_ULTRA_HONK_PROOF_SIZE_WITHOUT_PUB_INPUTS)
231 << "The length of the Ultra Honk proof changed.";
232 } else {
233 GTEST_SKIP();
234 }
235}
236
241TEST(MockVerifierInputsTest, MockChonkProofSize)
242{
244
245 // If this value changes, we need to update the corresponding constants in noir and in yarn-project. Also, we need
246 // to update the Prover.toml file for rollup-tx-private to reflect the new length of the Chonk proof.
247 size_t CURRENT_CHONK_PROOF_SIZE_WITHOUT_PUB_INPUTS = 1907;
248 HonkProof chonk_proof = create_mock_chonk_proof<Builder>();
249 EXPECT_EQ(chonk_proof.size(), Chonk::Proof::PROOF_LENGTH());
250 EXPECT_EQ(chonk_proof.size(),
251 CURRENT_CHONK_PROOF_SIZE_WITHOUT_PUB_INPUTS +
253 << "The length of the Chonk proof changed.";
254}
255
259TEST(MockVerifierInputsTest, MockMultilinearBatchingProofSize)
260{
261 size_t CURRENT_MULTILINEAR_BATCHING_PROOF_SIZE_WITHOUT_PUB_INPUTS = 121;
263 EXPECT_EQ(batching_proof.size(), MultilinearBatchingFlavor::PROOF_LENGTH_WITHOUT_PUB_INPUTS());
264 EXPECT_EQ(batching_proof.size(), CURRENT_MULTILINEAR_BATCHING_PROOF_SIZE_WITHOUT_PUB_INPUTS)
265 << "The length of the MultiLinearBatching proof changed.";
266}
static constexpr bool HasZK
ECCVMCircuitBuilder CircuitBuilder
static constexpr size_t PROOF_LENGTH_WITHOUT_PUB_INPUTS
MergeProver::MergeProof MergeProof
Definition goblin.hpp:35
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()
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(size_t virtual_log_n=MegaZKFlavor::VIRTUAL_LOG_N)
The size of a Chonk proof with backend-added public inputs: HidingKernelIO.
Definition chonk.hpp:116