53 using ClaimBatch = ClaimBatcher::Batch;
68 for (
auto [comm, label] :
zip_view(commitments.get_wires(), commitment_labels.get_wires())) {
69 comm =
transcript->template receive_from_prover<Commitment>(label);
73 const auto [beta, gamma] =
transcript->template get_challenges<FF>(
"beta",
"gamma");
75 auto beta_sqr = beta * beta;
77 relation_parameters.
gamma = gamma;
78 relation_parameters.
beta = beta;
79 relation_parameters.
beta_sqr = beta * beta;
80 relation_parameters.
beta_cube = beta_sqr * beta;
82 gamma * (gamma + beta_sqr) * (gamma + beta_sqr + beta_sqr) * (gamma + beta_sqr + beta_sqr + beta_sqr);
86 commitments.lookup_inverses =
87 transcript->template receive_from_prover<Commitment>(commitment_labels.lookup_inverses);
88 commitments.z_perm =
transcript->template receive_from_prover<Commitment>(commitment_labels.z_perm);
93 const FF alpha =
transcript->template get_challenge<FF>(
"Sumcheck:alpha");
94 Sumcheck sumcheck(
transcript, alpha, CONST_ECCVM_LOG_N);
96 std::vector<FF> gate_challenges(CONST_ECCVM_LOG_N);
97 for (
size_t idx = 0; idx < gate_challenges.size(); idx++) {
104 libra_commitments[0] =
transcript->template receive_from_prover<Commitment>(
"Libra:concatenation_commitment");
106 auto sumcheck_output = sumcheck.verify(relation_parameters, gate_challenges);
108 libra_commitments[1] =
transcript->template receive_from_prover<Commitment>(
"Libra:grand_sum_commitment");
109 libra_commitments[2] =
transcript->template receive_from_prover<Commitment>(
"Libra:quotient_commitment");
113 bool consistency_checked =
true;
114 ClaimBatcher claim_batcher{
115 .unshifted = ClaimBatch{ commitments.get_unshifted(), sumcheck_output.claimed_evaluations.get_unshifted() },
116 .shifted = ClaimBatch{ commitments.get_to_be_shifted(), sumcheck_output.claimed_evaluations.get_shifted() }
123 std::ranges::fill(padding_indicator_array, one);
126 Shplemini::compute_batch_opening_claim(padding_indicator_array,
128 sumcheck_output.challenge,
129 key->pcs_verification_key.get_g1_identity(),
133 &consistency_checked,
135 sumcheck_output.claimed_libra_evaluation,
136 sumcheck_output.round_univariate_commitments,
137 sumcheck_output.round_univariate_evaluations);
140 const OpeningClaim multivariate_to_univariate_opening_claim =
141 PCS::reduce_batch_opening_claim(sumcheck_batch_opening_claims);
144 const std::vector<Commitment> translation_commitments = { commitments.transcript_op,
145 commitments.transcript_Px,
146 commitments.transcript_Py,
147 commitments.transcript_z1,
148 commitments.transcript_z2 };
157 return { batch_opening_claim, proof.
ipa_proof };
182 transcript->template receive_from_prover<Commitment>(
"Translation:concatenated_masking_term_commitment");
189 eval =
transcript->template receive_from_prover<FF>(label);
200 transcript->template receive_from_prover<Commitment>(
"Translation:grand_sum_commitment");
202 transcript->template receive_from_prover<Commitment>(
"Translation:quotient_commitment");
206 const FF small_ipa_evaluation_challenge =
207 transcript->template get_challenge<FF>(
"Translation:small_ipa_evaluation_challenge");
211 SmallIPA::evaluation_points(small_ipa_evaluation_challenge);
214 for (
size_t idx = 0; idx < NUM_SMALL_IPA_EVALUATIONS; idx++) {
215 small_ipa_evaluations[idx] =
transcript->template receive_from_prover<FF>(labels[idx]);
216 opening_claims[idx] = { { evaluation_points[idx], small_ipa_evaluations[idx] },
217 small_ipa_commitments.
get_all()[idx] };
221 SmallIPA::check_eccvm_evaluations_consistency(small_ipa_evaluations,
222 small_ipa_evaluation_challenge,
231 std::vector<FF> batching_challenges = {
FF::one() };
232 for (
size_t idx = 1; idx < NUM_TRANSLATION_EVALUATIONS; ++idx) {
234 batching_challenges.emplace_back(batching_scalar);
241 batched_commitment };
void compute_translation_opening_claims(const std::vector< Commitment > &translation_commitments)
To link the ECCVM Transcript wires op, Px, Py, z1, and z2 to the accumulator computed by the translat...