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.
3
4#include <gtest/gtest.h>
5
6using namespace acir_format;
7using namespace bb;
8
9class MockVerifierInputsTest : public ::testing::Test {
10 public:
12};
13
14// Static assertions for proof size constants that must stay in sync with Noir (constants.nr)
15// These constants are used by Noir protocol circuits and TypeScript
16
17// Public input component sizes (used in Noir)
18static_assert(PAIRING_POINTS_SIZE == 8, "PAIRING_POINTS_SIZE changed - update constants.nr");
19static_assert(GRUMPKIN_OPENING_CLAIM_SIZE == 6, "IPA_CLAIM_SIZE changed - update constants.nr");
20static_assert(HIDING_KERNEL_PUBLIC_INPUTS_SIZE == 28,
21 "HIDING_KERNEL_IO_PUBLIC_INPUTS_SIZE changed - update constants.nr");
22
23// Component proof lengths (used in Noir)
24static_assert(MERGE_PROOF_SIZE == 42, "MERGE_PROOF_SIZE changed - update constants.nr");
25static_assert(ECCVMFlavor::PROOF_LENGTH == 608, "ECCVM proof size changed - update constants.nr");
26static_assert(IPA_PROOF_LENGTH == 64, "IPA_PROOF_LENGTH changed - update constants.nr");
27static_assert(TranslatorFlavor::PROOF_LENGTH == 483, "Translator proof size changed - update constants.nr");
28
29// Full proof lengths (used in Noir)
30static_assert(
33 "RECURSIVE_PROOF_LENGTH changed - update constants.nr");
34static_assert(ChonkProof::PROOF_LENGTH == 1632, "CHONK_PROOF_LENGTH changed - update constants.nr");
36 "MultilinearBatching proof size changed - update constants.nr");
37
41TEST_F(MockVerifierInputsTest, MockMergeProofSize)
42{
44 EXPECT_EQ(merge_proof.size(), MERGE_PROOF_SIZE);
45}
46
50TEST_F(MockVerifierInputsTest, MockPreIpaProofSize)
51{
52 HonkProof eccvm_proof = create_mock_eccvm_proof();
53 EXPECT_EQ(eccvm_proof.size(), ECCVMFlavor::PROOF_LENGTH);
54}
55
60{
61 HonkProof ipa_proof = create_mock_ipa_proof();
62 EXPECT_EQ(ipa_proof.size(), IPA_PROOF_LENGTH);
63}
64
68TEST_F(MockVerifierInputsTest, MockTranslatorProofSize)
69{
70 HonkProof translator_proof = create_mock_translator_proof();
71 EXPECT_EQ(translator_proof.size(), TranslatorFlavor::PROOF_LENGTH);
72}
73
77TEST_F(MockVerifierInputsTest, MockMegaOinkProofSize)
78{
79 using Flavor = MegaFlavor;
81 constexpr size_t OINK_LENGTH = ProofLength::Oink<Flavor>::LENGTH_WITHOUT_PUB_INPUTS;
82
83 HonkProof app_proof = create_mock_oink_proof<Flavor, stdlib::recursion::honk::AppIO>();
84 EXPECT_EQ(app_proof.size(), OINK_LENGTH + stdlib::recursion::honk::AppIO::PUBLIC_INPUTS_SIZE);
85
86 HonkProof kernel_proof = create_mock_oink_proof<Flavor, stdlib::recursion::honk::KernelIO>();
87 EXPECT_EQ(kernel_proof.size(), OINK_LENGTH + stdlib::recursion::honk::KernelIO::PUBLIC_INPUTS_SIZE);
88
89 HonkProof hiding_proof = create_mock_oink_proof<Flavor, stdlib::recursion::honk::HidingKernelIO<Builder>>();
90 EXPECT_EQ(hiding_proof.size(), OINK_LENGTH + stdlib::recursion::honk::HidingKernelIO<Builder>::PUBLIC_INPUTS_SIZE);
91}
92
96TEST_F(MockVerifierInputsTest, MockUltraOinkProofSize)
97{
98 {
99 using Flavor = UltraFlavor;
101 HonkProof proof = create_mock_oink_proof<Flavor, IO>();
102 EXPECT_EQ(proof.size(), ProofLength::Oink<Flavor>::LENGTH_WITHOUT_PUB_INPUTS + IO::PUBLIC_INPUTS_SIZE);
103 }
104 {
105 using Flavor = UltraZKFlavor;
107 HonkProof proof = create_mock_oink_proof<Flavor, IO>();
108 EXPECT_EQ(proof.size(), ProofLength::Oink<Flavor>::LENGTH_WITHOUT_PUB_INPUTS + IO::PUBLIC_INPUTS_SIZE);
109 }
110 {
111 using Flavor = UltraFlavor;
113 HonkProof proof = create_mock_oink_proof<Flavor, IO>();
114 EXPECT_EQ(proof.size(), ProofLength::Oink<Flavor>::LENGTH_WITHOUT_PUB_INPUTS + IO::PUBLIC_INPUTS_SIZE);
115 }
116}
117
121TEST_F(MockVerifierInputsTest, MockMegaHonkProofSize)
122{
123 using Flavor = MegaFlavor;
125 constexpr size_t HONK_LENGTH = ProofLength::Honk<Flavor>::LENGTH_WITHOUT_PUB_INPUTS(Flavor::VIRTUAL_LOG_N);
126
127 HonkProof app_proof = create_mock_honk_proof<Flavor, stdlib::recursion::honk::AppIO>();
128 EXPECT_EQ(app_proof.size(), HONK_LENGTH + stdlib::recursion::honk::AppIO::PUBLIC_INPUTS_SIZE);
129
130 HonkProof kernel_proof = create_mock_honk_proof<Flavor, stdlib::recursion::honk::KernelIO>();
131 EXPECT_EQ(kernel_proof.size(), HONK_LENGTH + stdlib::recursion::honk::KernelIO::PUBLIC_INPUTS_SIZE);
132
133 HonkProof hiding_proof = create_mock_honk_proof<Flavor, stdlib::recursion::honk::HidingKernelIO<Builder>>();
134 EXPECT_EQ(hiding_proof.size(), HONK_LENGTH + stdlib::recursion::honk::HidingKernelIO<Builder>::PUBLIC_INPUTS_SIZE);
135}
136
140TEST_F(MockVerifierInputsTest, MockUltraHonkProofSize)
141{
142 {
143 using Flavor = UltraFlavor;
145 HonkProof proof = create_mock_honk_proof<Flavor, IO>();
146 EXPECT_EQ(proof.size(),
147 ProofLength::Honk<Flavor>::LENGTH_WITHOUT_PUB_INPUTS(Flavor::VIRTUAL_LOG_N) + IO::PUBLIC_INPUTS_SIZE);
148 }
149 {
150 using Flavor = UltraZKFlavor;
152 HonkProof proof = create_mock_honk_proof<Flavor, IO>();
153 EXPECT_EQ(proof.size(),
154 ProofLength::Honk<Flavor>::LENGTH_WITHOUT_PUB_INPUTS(Flavor::VIRTUAL_LOG_N) + IO::PUBLIC_INPUTS_SIZE);
155 }
156 {
157 using Flavor = UltraFlavor;
159 HonkProof proof = create_mock_honk_proof<Flavor, IO>();
160 // RollupIO has HasIPA=true, so proof includes IPA_PROOF_LENGTH
161 constexpr size_t expected = ProofLength::Honk<Flavor>::LENGTH_WITHOUT_PUB_INPUTS(Flavor::VIRTUAL_LOG_N) +
162 IO::PUBLIC_INPUTS_SIZE + IPA_PROOF_LENGTH;
163 EXPECT_EQ(proof.size(), expected);
164 }
165}
166
167// TODO(@fcarreiro): Re-enable this test once proof size is fixed.
168TEST_F(MockVerifierInputsTest, DISABLED_MockAVMProofSize)
169{
170 const HonkProof avm_proof = create_mock_avm_proof_without_pub_inputs(/*add_padding=*/false);
171 EXPECT_EQ(avm_proof.size(), 16040);
172}
173
174TEST_F(MockVerifierInputsTest, MockAVMProofSizePadded)
175{
176 const HonkProof padded_avm_proof = create_mock_avm_proof_without_pub_inputs(/*add_padding=*/true);
177 EXPECT_EQ(padded_avm_proof.size(), 16400);
178}
179
183TEST_F(MockVerifierInputsTest, MockChonkProofSize)
184{
186 HonkProof chonk_proof = create_mock_chonk_proof<Builder>();
187 EXPECT_EQ(chonk_proof.size(), ChonkProof::PROOF_LENGTH);
188}
189
193TEST_F(MockVerifierInputsTest, MockMultilinearBatchingProofSize)
194{
197 EXPECT_EQ(batching_proof.size(), ProofLength::MultilinearBatching<Flavor>::LENGTH);
198}
static constexpr size_t PROOF_LENGTH
MergeProver::MergeProof MergeProof
Definition goblin.hpp:40
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_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
The size of a Chonk proof with backend-added public inputs: HidingKernelIO.
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.