19namespace proof_compression_detail {
30template <
typename ScalarFn,
typename CommitmentFn>
31static constexpr void walk_mega_zk_oink_proof(ScalarFn&& process_scalar,
32 CommitmentFn&& process_commitment,
33 size_t num_public_inputs)
36 for (
size_t i = 0; i < num_public_inputs; i++) {
49template <
typename ScalarFn,
typename CommitmentFn>
50static constexpr void walk_merge_proof(ScalarFn&& process_scalar, CommitmentFn&& process_commitment)
53 for (
size_t i = 0; i < 4; i++) {
59 for (
size_t i = 0; i < 13; i++) {
73template <
typename ScalarFn,
typename CommitmentFn>
74static constexpr void walk_eccvm_proof(ScalarFn&& process_scalar, CommitmentFn&& process_commitment)
76 constexpr size_t log_n = CONST_ECCVM_LOG_N;
80 for (
size_t i = 0; i < num_witness; i++) {
88 for (
size_t i = 0; i < log_n; i++) {
100 process_commitment();
101 process_commitment();
109 process_commitment();
111 for (
size_t i = 0; i < NUM_TRANSLATION_EVALUATIONS; i++) {
117 process_commitment();
118 process_commitment();
125 process_commitment();
128 process_commitment();
134template <
typename ScalarFn,
typename CommitmentFn>
135static constexpr void walk_ipa_proof(ScalarFn&& process_scalar, CommitmentFn&& process_commitment)
138 for (
size_t i = 0; i < 3; i++) {
142 for (
size_t i = 0; i < CONST_ECCVM_LOG_N; i++) {
143 process_commitment();
144 process_commitment();
147 process_commitment();
158template <
typename ScalarFn,
typename CommitmentFn>
159static constexpr void walk_joint_proof(ScalarFn&& process_scalar, CommitmentFn&& process_commitment)
164 process_commitment();
167 process_commitment();
170 process_commitment();
174 process_commitment();
179 for (
size_t round = 0; round < JOINT_LOG_N; round++) {
186 process_commitment();
205 process_commitment();
206 process_commitment();
210 for (
size_t i = 0; i < JOINT_LOG_N - 1; i++) {
211 process_commitment();
214 for (
size_t i = 0; i < JOINT_LOG_N; i++) {
222 process_commitment();
223 process_commitment();
230template <
typename BN254ScalarFn,
typename BN254CommFn,
typename GrumpkinScalarFn,
typename GrumpkinCommFn>
231static constexpr void walk_chonk_proof(BN254ScalarFn&& bn254_scalar,
232 BN254CommFn&& bn254_comm,
233 GrumpkinScalarFn&& grumpkin_scalar,
234 GrumpkinCommFn&& grumpkin_comm,
235 size_t mega_num_public_inputs)
237 walk_mega_zk_oink_proof(bn254_scalar, bn254_comm, mega_num_public_inputs);
238 walk_merge_proof(bn254_scalar, bn254_comm);
239 walk_eccvm_proof(grumpkin_scalar, grumpkin_comm);
240 walk_ipa_proof(grumpkin_scalar, grumpkin_comm);
241 walk_joint_proof(bn254_scalar, bn254_comm);
250static constexpr size_t BN254_FRS_PER_SCALAR = 1;
251static constexpr size_t BN254_FRS_PER_COMM = 4;
252static constexpr size_t GRUMPKIN_FRS_PER_SCALAR = 2;
253static constexpr size_t GRUMPKIN_FRS_PER_COMM = 2;
265template <
typename WalkFn>
static constexpr WalkCounts count_walk(WalkFn walk)
268 walk([&] { ++counts.scalars; }, [&] { ++counts.commitments; });
272template <
typename WalkFn>
static constexpr size_t count_bn254_frs(WalkFn walk)
274 return count_walk(walk).
field_elements(BN254_FRS_PER_SCALAR, BN254_FRS_PER_COMM);
277template <
typename WalkFn>
static constexpr size_t count_grumpkin_frs(WalkFn walk)
279 return count_walk(walk).
field_elements(GRUMPKIN_FRS_PER_SCALAR, GRUMPKIN_FRS_PER_COMM);
282static constexpr size_t EXPECTED_HIDING_OINK_FRS =
283 count_bn254_frs([](
auto&& scalar,
auto&& commitment) { walk_mega_zk_oink_proof(scalar, commitment, 0); });
286static constexpr size_t EXPECTED_MERGE_FRS =
287 count_bn254_frs([](
auto&& scalar,
auto&& commitment) { walk_merge_proof(scalar, commitment); });
288static_assert(EXPECTED_MERGE_FRS == MERGE_PROOF_SIZE);
290static constexpr size_t EXPECTED_ECCVM_FRS =
291 count_grumpkin_frs([](
auto&& scalar,
auto&& commitment) { walk_eccvm_proof(scalar, commitment); });
294static constexpr size_t EXPECTED_IPA_FRS =
295 count_grumpkin_frs([](
auto&& scalar,
auto&& commitment) { walk_ipa_proof(scalar, commitment); });
298static constexpr size_t EXPECTED_JOINT_FRS =
299 count_bn254_frs([](
auto&& scalar,
auto&& commitment) { walk_joint_proof(scalar, commitment); });
302static_assert(EXPECTED_HIDING_OINK_FRS + EXPECTED_MERGE_FRS + EXPECTED_ECCVM_FRS + EXPECTED_IPA_FRS +
303 EXPECTED_JOINT_FRS ==