15template <
typename Flavor>
17 const std::shared_ptr<HonkVK>& honk_vk,
18 const std::shared_ptr<Transcript>& transcript)
19 : prover_instance(
std::move(prover_instance))
20 , transcript(transcript)
41 auto proof = transcript->export_proof();
44 if (!prover_instance->ipa_proof.empty()) {
45 BB_ASSERT_EQ(prover_instance->ipa_proof.size(),
static_cast<size_t>(IPA_PROOF_LENGTH));
46 proof.insert(proof.end(), prover_instance->ipa_proof.begin(), prover_instance->ipa_proof.end());
55 Flavor::USE_PADDING ? Flavor::VIRTUAL_LOG_N :
static_cast<size_t>(prover_instance->log_dyadic_size());
57 prover_instance->gate_challenges =
58 transcript->template get_dyadic_powers_of_challenge<FF>(
"Sumcheck:gate_challenge", virtual_log_n);
63 size_t key_size = prover_instance->dyadic_size();
66 key_size =
std::max(key_size,
size_t{ 1 } << (log_subgroup_size + 1));
72 vinfo(
"created oink proof");
74 generate_gate_challenges();
77 execute_sumcheck_iop();
78 vinfo(
"finished relation check rounds");
81 vinfo(
"finished PCS rounds");
83 return export_proof();
95 size_t polynomial_size = prover_instance->dyadic_size();
96 Sumcheck sumcheck(polynomial_size,
97 prover_instance->polynomials,
99 prover_instance->alpha,
100 prover_instance->gate_challenges,
101 prover_instance->relation_parameters,
106 sumcheck_output = sumcheck.prove(zk_sumcheck_data);
108 sumcheck_output = sumcheck.prove();
121 auto&
ck = commitment_key;
123 PolynomialBatcher polynomial_batcher(prover_instance->dyadic_size());
124 polynomial_batcher.set_unshifted(prover_instance->polynomials.get_unshifted());
125 polynomial_batcher.set_to_be_shifted_by_one(prover_instance->polynomials.get_to_be_shifted());
130 prover_instance->dyadic_size(), polynomial_batcher, sumcheck_output.challenge,
ck, transcript);
134 zk_sumcheck_data, sumcheck_output.challenge, sumcheck_output.claimed_libra_evaluation, transcript,
ck);
135 small_subgroup_ipa_prover.
prove();
139 sumcheck_output.challenge,
144 vinfo(
"executed multivariate-to-univariate reduction");
145 PCS::compute_opening_proof(
ck, prover_opening_claim, transcript);
146 vinfo(
"computed opening proof");
152#ifdef STARKNET_GARAGA_FLAVORS
#define BB_ASSERT_EQ(actual, expected,...)
#define BB_BENCH_NAME(name)
static constexpr bool HasZK
static constexpr bool USE_PADDING
Class responsible for computation of the batched multilinear polynomials required by the Gemini proto...
Executes the "Oink" phase of the Honk proving protocol: the initial rounds that commit to witness dat...
void prove()
Commit to witnesses, compute relation parameters, and prepare for Sumcheck.
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(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.
std::array< bb::Polynomial< FF >, NUM_SMALL_IPA_EVALUATIONS > get_witness_polynomials() const
void prove()
Compute the derived witnesses and and commit to them.
The implementation of the sumcheck Prover for statements of the form for multilinear polynomials .
UltraProver_(std::shared_ptr< ProverInstance >, const std::shared_ptr< HonkVK > &, const std::shared_ptr< Transcript > &transcript=std::make_shared< Transcript >())
BB_PROFILE void generate_gate_challenges()
BB_PROFILE void execute_pcs()
Reduce the sumcheck multivariate evaluations to a single univariate opening claim via Shplemini,...
typename Transcript::Proof Proof
BB_PROFILE void execute_sumcheck_iop()
Run Sumcheck to establish that ∑_i pow(\vec{β*})f_i(ω) = 0, producing sumcheck round challenges u = (...
typename Flavor::CommitmentKey CommitmentKey
Proof export_proof()
Export the complete proof, including IPA proof for rollup circuits.
static constexpr size_t SUBGROUP_SIZE
constexpr T get_msb(const T in)
Entry point for Barretenberg command-line interface.
CommitmentKey< Curve > ck
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
This structure is created to contain various polynomials and constants required by ZK Sumcheck.