16template <
typename Flavor>
18 const std::shared_ptr<HonkVK>& honk_vk,
19 const std::shared_ptr<Transcript>& transcript)
20 : prover_instance(
std::move(prover_instance))
21 , transcript(transcript)
42 auto proof = transcript->export_proof();
45 if (!prover_instance->ipa_proof.empty()) {
46 BB_ASSERT_EQ(prover_instance->ipa_proof.size(),
static_cast<size_t>(IPA_PROOF_LENGTH));
47 proof.insert(proof.end(), prover_instance->ipa_proof.begin(), prover_instance->ipa_proof.end());
56 Flavor::USE_PADDING ? Flavor::VIRTUAL_LOG_N :
static_cast<size_t>(prover_instance->log_dyadic_size());
58 prover_instance->gate_challenges =
59 transcript->template get_dyadic_powers_of_challenge<FF>(
"Sumcheck:gate_challenge", virtual_log_n);
65 size_t key_size = prover_instance->polynomials.max_end_index();
69 key_size =
std::max(key_size,
size_t{ 1 } << (log_subgroup_size + 1));
75 vinfo(
"created oink proof");
80 generate_gate_challenges();
83 execute_sumcheck_iop();
84 vinfo(
"finished relation check rounds");
90 vinfo(
"finished PCS rounds");
95 return export_proof();
107 size_t polynomial_size = prover_instance->dyadic_size();
108 Sumcheck sumcheck(polynomial_size,
109 prover_instance->polynomials,
111 prover_instance->alpha,
112 prover_instance->gate_challenges,
113 prover_instance->relation_parameters,
119 zk_sumcheck_data =
ZKData(virtual_log_n, transcript, commitment_key);
120 sumcheck_output = sumcheck.prove(zk_sumcheck_data);
122 sumcheck_output = sumcheck.prove();
136 auto&
ck = commitment_key;
138 PolynomialBatcher polynomial_batcher(prover_instance->dyadic_size(), prover_instance->polynomials.max_end_index());
139 polynomial_batcher.set_unshifted(prover_instance->polynomials.get_unshifted());
140 polynomial_batcher.set_to_be_shifted_by_one(prover_instance->polynomials.get_to_be_shifted());
145 prover_instance->dyadic_size(), polynomial_batcher, sumcheck_output.challenge,
ck, transcript);
149 zk_sumcheck_data, sumcheck_output.challenge, sumcheck_output.claimed_libra_evaluation, transcript,
ck);
150 small_subgroup_ipa_prover.
prove();
154 sumcheck_output.challenge,
159 vinfo(
"executed multivariate-to-univariate reduction");
160 PCS::compute_opening_proof(
ck, prover_opening_claim, transcript);
161 vinfo(
"computed opening proof");
167#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(bool emit_alpha=true)
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
MemoryProfile GLOBAL_MEMORY_PROFILE
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.
void add_checkpoint(const std::string &stage)