18 const std::shared_ptr<Transcript>& transcript)
19 : transcript(transcript)
23 if (!
key->proving_key->commitment_key.initialized()) {
37 transcript->add_to_hash_buffer(
"vk_hash", vk_hash);
38 vinfo(
"Translator vk hash in prover: ", vk_hash);
44 const auto accumulated_result =
45 BF(
uint256_t(
key->proving_key->polynomials.accumulators_binary_limbs_0[RESULT_ROW]) +
46 uint256_t(
key->proving_key->polynomials.accumulators_binary_limbs_1[RESULT_ROW]) * SHIFT +
47 uint256_t(
key->proving_key->polynomials.accumulators_binary_limbs_2[RESULT_ROW]) * SHIFTx2 +
48 uint256_t(
key->proving_key->polynomials.accumulators_binary_limbs_3[RESULT_ROW]) * SHIFTx3);
51 key->proving_key->polynomials.accumulators_binary_limbs_1[RESULT_ROW],
52 key->proving_key->polynomials.accumulators_binary_limbs_2[RESULT_ROW],
53 key->proving_key->polynomials.accumulators_binary_limbs_3[RESULT_ROW] };
55 transcript->send_to_verifier(
"accumulated_result", accumulated_result);
66 transcript->send_to_verifier(label,
key->proving_key->commitment_key.commit(polynomial));
76 for (
const auto& [wire, label] :
83 for (
const auto& [ordered_range_constraint, label] :
84 zip_view(
key->proving_key->polynomials.get_ordered_range_constraints(),
97 FF beta =
transcript->template get_challenge<FF>(
"beta");
98 FF gamma =
transcript->template get_challenge<FF>(
"gamma");
102 auto uint_evaluation_input =
uint256_t(
key->evaluation_input_x);
104 uint_evaluation_input.slice(NUM_LIMB_BITS, NUM_LIMB_BITS * 2),
105 uint_evaluation_input.slice(NUM_LIMB_BITS * 2, NUM_LIMB_BITS * 3),
106 uint_evaluation_input.slice(NUM_LIMB_BITS * 3, NUM_LIMB_BITS * 4),
107 uint_evaluation_input };
110 auto batching_challenge_v =
key->batching_challenge_v;
111 uint_batching_challenge_powers.emplace_back(batching_challenge_v);
112 auto running_power = batching_challenge_v * batching_challenge_v;
113 uint_batching_challenge_powers.emplace_back(running_power);
114 running_power *= batching_challenge_v;
115 uint_batching_challenge_powers.emplace_back(running_power);
116 running_power *= batching_challenge_v;
117 uint_batching_challenge_powers.emplace_back(running_power);
119 for (
size_t i = 0; i < 4; i++) {
121 uint_batching_challenge_powers[i].slice(0, NUM_LIMB_BITS),
122 uint_batching_challenge_powers[i].slice(NUM_LIMB_BITS, NUM_LIMB_BITS * 2),
123 uint_batching_challenge_powers[i].slice(NUM_LIMB_BITS * 2, NUM_LIMB_BITS * 3),
124 uint_batching_challenge_powers[i].slice(NUM_LIMB_BITS * 3, NUM_LIMB_BITS * 4),
125 uint_batching_challenge_powers[i]
144 const FF alpha =
transcript->template get_challenge<FF>(
"Sumcheck:alpha");
147 for (
size_t idx = 0; idx < gate_challenges.size(); idx++) {
151 const size_t circuit_size =
key->proving_key->circuit_size;
153 Sumcheck sumcheck(circuit_size,
154 key->proving_key->polynomials,
161 const size_t log_subgroup_size =
static_cast<size_t>(
numeric::get_msb(Flavor::Curve::SUBGROUP_SIZE));
186 auto&
ck =
key->proving_key->commitment_key;
187 if (!
ck.initialized()) {
191 SmallSubgroupIPA small_subgroup_ipa_prover(
193 small_subgroup_ipa_prover.prove();
195 PolynomialBatcher polynomial_batcher(
key->proving_key->circuit_size);
196 polynomial_batcher.set_unshifted(
key->proving_key->polynomials.get_unshifted_without_interleaved());
197 polynomial_batcher.set_to_be_shifted_by_one(
key->proving_key->polynomials.get_to_be_shifted());
198 polynomial_batcher.set_interleaved(
key->proving_key->polynomials.get_interleaved(),
199 key->proving_key->polynomials.get_groups_to_be_interleaved());
207 small_subgroup_ipa_prover.get_witness_polynomials());
209 PCS::compute_opening_proof(
ck, prover_opening_claim,
transcript);
243 vinfo(
"computed opening proof");
Class responsible for computation of the batched multilinear polynomials required by the Gemini proto...
Unverified claim (C,r,v) for some witness polynomial p(X) such that.
Polynomial p and an opening pair (r,v) such that p(r) = v.
static OpeningClaim prove(const FF circuit_size, PolynomialBatcher &polynomial_batcher, std::span< FF > multilinear_challenge, const CommitmentKey< Curve > &commitment_key, const std::shared_ptr< Transcript > &transcript, const std::array< Polynomial, NUM_SMALL_IPA_EVALUATIONS > &libra_polynomials={}, const std::vector< Polynomial > &sumcheck_round_univariates={}, const std::vector< std::array< FF, 3 > > &sumcheck_round_evaluations={})
A Curve-agnostic ZK protocol to prove inner products of small vectors.
The implementation of the sumcheck Prover for statements of the form for multilinear polynomials .
The verification key is responsible for storing the commitments to the precomputed (non-witnessk) pol...
static constexpr size_t CONST_TRANSLATOR_LOG_N
static constexpr size_t NUM_LIMB_BITS
static constexpr size_t RESULT_ROW
CommitmentLabels commitment_labels
typename Flavor::CommitmentKey CommitmentKey
BB_PROFILE void execute_relation_check_rounds()
Run Sumcheck resulting in u = (u_1,...,u_d) challenges and all evaluations at u being calculated.
BB_PROFILE void execute_preamble_round()
Add circuit size and values used in the relations to the transcript.
void commit_to_witness_polynomial(Polynomial &polynomial, const std::string &label)
Utility to commit to witness polynomial and send the commitment to verifier.
TranslatorProver(const std::shared_ptr< TranslatorProvingKey > &key, const std::shared_ptr< Transcript > &transcript)
BB_PROFILE void execute_grand_product_computation_round()
Compute permutation product polynomial and commitments.
std::shared_ptr< TranslatorProvingKey > key
bb::RelationParameters< FF > relation_parameters
std::shared_ptr< Transcript > transcript
HonkProof construct_proof()
ZKSumcheckData< Flavor > ZKData
BB_PROFILE void execute_wire_and_sorted_constraints_commitments_round()
Compute commitments to wires and ordered range constraints.
SumcheckOutput< Flavor > sumcheck_output
typename Flavor::Polynomial Polynomial
BB_PROFILE void execute_pcs_rounds()
Produce a univariate opening claim for the sumcheck multivariate evalutions and a batched univariate ...
constexpr T get_msb(const T in)
Entry point for Barretenberg command-line interface.
std::vector< fr > HonkProof
CommitmentKey< Curve > ck
VerifierCommitmentKey< Curve > vk
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
std::string to_string(bb::avm2::ValueTag tag)
#define PROFILE_THIS_NAME(name)
std::array< std::array< T, NUM_BINARY_LIMBS_IN_GOBLIN_TRANSLATOR+NUM_NATIVE_LIMBS_IN_GOBLIN_TRANSLATOR >, NUM_CHALLENGE_POWERS_IN_GOBLIN_TRANSLATOR > batching_challenge_v
std::array< T, NUM_BINARY_LIMBS_IN_GOBLIN_TRANSLATOR > accumulated_result
std::array< T, NUM_BINARY_LIMBS_IN_GOBLIN_TRANSLATOR+NUM_NATIVE_LIMBS_IN_GOBLIN_TRANSLATOR > evaluation_input_x