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);
68 size_t key_size = prover_instance->polynomials.max_end_index();
73 key_size =
std::max(key_size,
size_t{ 1 } << (log_subgroup_size + 1));
79 vinfo(
"created oink proof");
81 generate_gate_challenges();
84 execute_sumcheck_iop();
85 vinfo(
"finished relation check rounds");
88 vinfo(
"finished PCS rounds");
90 return export_proof();
102 size_t polynomial_size = prover_instance->dyadic_size();
103 Sumcheck sumcheck(polynomial_size,
104 prover_instance->polynomials,
106 prover_instance->alpha,
107 prover_instance->gate_challenges,
108 prover_instance->relation_parameters,
113 sumcheck_output = sumcheck.prove(zk_sumcheck_data);
115 sumcheck_output = sumcheck.prove();
128 auto&
ck = commitment_key;
130 PolynomialBatcher polynomial_batcher(prover_instance->dyadic_size(), prover_instance->polynomials.max_end_index());
131 polynomial_batcher.set_unshifted(prover_instance->polynomials.get_unshifted());
132 polynomial_batcher.set_to_be_shifted_by_one(prover_instance->polynomials.get_to_be_shifted());
137 prover_instance->dyadic_size(), polynomial_batcher, sumcheck_output.challenge,
ck, transcript);
141 zk_sumcheck_data, sumcheck_output.challenge, sumcheck_output.claimed_libra_evaluation, transcript,
ck);
142 small_subgroup_ipa_prover.
prove();
146 sumcheck_output.challenge,
151 vinfo(
"executed multivariate-to-univariate reduction");
152 PCS::compute_opening_proof(
ck, prover_opening_claim, transcript);
153 vinfo(
"computed opening proof");
159#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.