23 const std::shared_ptr<Transcript>& transcript)
24 : transcript(transcript)
40 transcript->add_to_hash_buffer(
"vk_hash", vk_hash);
41 vinfo(
"Translator vk hash in prover: ", vk_hash);
48 key->proving_key->polynomials.accumulators_binary_limbs_1[RESULT_ROW],
49 key->proving_key->polynomials.accumulators_binary_limbs_2[RESULT_ROW],
50 key->proving_key->polynomials.accumulators_binary_limbs_3[RESULT_ROW] };
60 const std::string& label,
61 bool has_duplicates_hint)
63 transcript->send_to_verifier(label,
key->proving_key->commitment_key.commit(polynomial, has_duplicates_hint));
72 BB_BENCH_NAME(
"TranslatorProver::execute_wire_and_sorted_constraints_commitments_round");
75 const size_t circuit_size =
key->proving_key->circuit_size;
77 auto masking_commitment =
78 key->proving_key->commitment_key.commit(
key->proving_key->polynomials.gemini_masking_poly);
79 transcript->send_to_verifier(
"Gemini:masking_poly_comm", masking_commitment);
84 auto batch =
key->proving_key->commitment_key.start_batch();
85 for (
const auto& [wire, label] :
86 zip_view(
key->proving_key->polynomials.get_non_opqueue_wires_and_ordered_range_constraints(),
88 batch.add_to_batch(wire, label);
100 FF beta =
transcript->template get_challenge<FF>(
"beta");
101 FF gamma =
transcript->template get_challenge<FF>(
"gamma");
105 auto uint_evaluation_input =
uint256_t(
key->evaluation_input_x);
107 uint_evaluation_input.slice(NUM_LIMB_BITS, NUM_LIMB_BITS * 2),
108 uint_evaluation_input.slice(NUM_LIMB_BITS * 2, NUM_LIMB_BITS * 3),
109 uint_evaluation_input.slice(NUM_LIMB_BITS * 3, NUM_LIMB_BITS * 4),
110 uint_evaluation_input };
113 auto batching_challenge_v =
key->batching_challenge_v;
114 uint_batching_challenge_powers.emplace_back(batching_challenge_v);
115 auto running_power = batching_challenge_v * batching_challenge_v;
116 uint_batching_challenge_powers.emplace_back(running_power);
117 running_power *= batching_challenge_v;
118 uint_batching_challenge_powers.emplace_back(running_power);
119 running_power *= batching_challenge_v;
120 uint_batching_challenge_powers.emplace_back(running_power);
122 for (
size_t i = 0; i < 4; i++) {
124 uint_batching_challenge_powers[i].slice(0, NUM_LIMB_BITS),
125 uint_batching_challenge_powers[i].slice(NUM_LIMB_BITS, NUM_LIMB_BITS * 2),
126 uint_batching_challenge_powers[i].slice(NUM_LIMB_BITS * 2, NUM_LIMB_BITS * 3),
127 uint_batching_challenge_powers[i].slice(NUM_LIMB_BITS * 3, NUM_LIMB_BITS * 4),
128 uint_batching_challenge_powers[i]
148 const FF alpha =
transcript->template get_challenge<FF>(
"Sumcheck:alpha");
150 std::vector<FF> gate_challenges =
transcript->template get_dyadic_powers_of_challenge<FF>(
153 const size_t circuit_size =
key->proving_key->circuit_size;
155 Sumcheck sumcheck(circuit_size,
156 key->proving_key->polynomials,
163 const size_t log_subgroup_size =
static_cast<size_t>(
numeric::get_msb(Flavor::Curve::SUBGROUP_SIZE));
187 auto&
ck =
key->proving_key->commitment_key;
189 SmallSubgroupIPA small_subgroup_ipa_prover(
191 small_subgroup_ipa_prover.prove();
193 PolynomialBatcher polynomial_batcher(
key->proving_key->circuit_size);
196 polynomial_batcher.set_unshifted(
key->proving_key->polynomials.get_pcs_unshifted());
198 polynomial_batcher.set_to_be_shifted_by_one(
key->proving_key->polynomials.get_pcs_to_be_shifted());
206 small_subgroup_ipa_prover.get_witness_polynomials());
208 PCS::compute_opening_proof(
ck, prover_opening_claim,
transcript);
237 vinfo(
"computed opening proof");
249 return uint256_t(
key->proving_key->polynomials.accumulators_binary_limbs_0[RESULT_ROW]) +
250 (
uint256_t(
key->proving_key->polynomials.accumulators_binary_limbs_1[RESULT_ROW]) << 68) +
251 (
uint256_t(
key->proving_key->polynomials.accumulators_binary_limbs_2[RESULT_ROW]) << 136) +
252 (
uint256_t(
key->proving_key->polynomials.accumulators_binary_limbs_3[RESULT_ROW]) << 204);
#define BB_BENCH_NAME(name)
Simple verification key class for fixed-size circuits (ECCVM, Translator, AVM).
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.
static Polynomial random(size_t size, size_t start_index=0)
Polynomial p and an opening pair (r,v) such that p(r) = v.
static OpeningClaim prove(size_t 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 .
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.
uint256_t get_accumulated_result() const
Extract the accumulated result from the circuit.
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 ...
void commit_to_witness_polynomial(Polynomial &polynomial, const std::string &label, bool has_duplicates_hint=false)
Utility to commit to witness polynomial and send the commitment to verifier.
TranslatorFlavor::Curve Curve
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::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