Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
protogalaxy_prover.hpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: not started, auditors: [], date: YYYY-MM-DD }
3// external_1: { status: not started, auditors: [], date: YYYY-MM-DD }
4// external_2: { status: not started, auditors: [], date: YYYY-MM-DD }
5// =====================
6
7#pragma once
15
16namespace bb {
17
18// TODO(https://github.com/AztecProtocol/barretenberg/issues/1437): Change template params back to ProverInstances
19template <IsUltraOrMegaHonk Flavor> class ProtogalaxyProver_ {
20 public:
21 static constexpr size_t NUM_SUBRELATIONS = Flavor::NUM_SUBRELATIONS;
22 static constexpr size_t EXTENDED_LENGTH = computed_extended_length<Flavor>();
23 static constexpr size_t BATCHED_EXTENDED_LENGTH = computed_batched_extended_length<Flavor>();
24
27 using FF = typename Flavor::FF;
29 using TupleOfTuplesOfUnivariates = typename Flavor::template ProtogalaxyTupleOfTuplesOfUnivariates<NUM_INSTANCES>;
31 bb::RelationParameters<Univariate<FF, EXTENDED_LENGTH, 0, /*skip_count=*/SKIP_COUNT>>;
33
37
40
44
45 // the state updated and carried forward beween rounds
46 std::shared_ptr<Transcript> transcript = std::make_shared<Transcript>();
47 std::shared_ptr<ProverInstance> accumulator;
49 std::vector<FF> deltas;
54
56
57 ProtogalaxyProver_() = default;
59 const VerifierInstances& verifier_insts,
60 const std::shared_ptr<Transcript>& transcript,
62 : prover_insts_to_fold(prover_insts)
63 , verifier_insts_to_fold(verifier_insts)
66 , pg_internal(trace_usage_tracker)
67 {}
68
77 void run_oink_prover_on_one_incomplete_instance(std::shared_ptr<ProverInstance>,
78 std::shared_ptr<VerifierInstance>,
79 const std::string& domain_separator);
80
87
97
104 combiner_quotient_round(const std::vector<FF>& gate_challenges,
105 const std::vector<FF>& deltas,
106 const ProverInstances& instances);
107
115 void update_target_sum_and_fold(const ProverInstances& instances,
118 const UnivariateRelationParameters& univariate_relation_parameters,
120
127 BB_PROFILE FoldingResult<Flavor> prove();
128
129 private:
134 size_t get_max_dyadic_size() const
135 {
136 return std::ranges::max(prover_insts_to_fold | std::views::transform([](const auto& inst) {
137 return inst != nullptr ? inst->dyadic_size() : 0;
138 }));
139 }
140};
141} // namespace bb
Curve::ScalarField FF
bb::CommitmentKey< Curve > CommitmentKey
static constexpr size_t NUM_SUBRELATIONS
NativeTranscript Transcript
Structured polynomial class that represents the coefficients 'a' of a_0 + a_1 x .....
Univariate< FF, BATCHED_EXTENDED_LENGTH, NUM_INSTANCES > CombinerQuotient
std::shared_ptr< ProverInstance > accumulator
std::array< std::shared_ptr< ProverInstance >, NUM_INSTANCES > ProverInstances
BB_PROFILE FoldingResult< Flavor > prove()
Execute the folding prover.
UnivariateSubrelationSeparators alphas
std::tuple< std::vector< FF >, UnivariateSubrelationSeparators, UnivariateRelationParameters, FF, CombinerQuotient > combiner_quotient_round(const std::vector< FF > &gate_challenges, const std::vector< FF > &deltas, const ProverInstances &instances)
Steps 6 - 11 of the paper.
UnivariateRelationParameters relation_parameters
static constexpr size_t BATCHED_EXTENDED_LENGTH
static constexpr size_t NUM_SUBRELATIONS
typename Flavor::template ProtogalaxyTupleOfTuplesOfUnivariates< NUM_INSTANCES > TupleOfTuplesOfUnivariates
CombinerQuotient combiner_quotient
ProtogalaxyProver_()=default
typename Flavor::Transcript Transcript
void run_oink_prover_on_one_incomplete_instance(std::shared_ptr< ProverInstance >, std::shared_ptr< VerifierInstance >, const std::string &domain_separator)
For each Prover instance derived from a circuit, prior to folding, we need to complete the computatio...
std::array< std::shared_ptr< VerifierInstance >, NUM_INSTANCES > VerifierInstances
std::shared_ptr< Transcript > transcript
ProtogalaxyProver_(const ProverInstances &prover_insts, const VerifierInstances &verifier_insts, const std::shared_ptr< Transcript > &transcript, ExecutionTraceUsageTracker trace_usage_tracker=ExecutionTraceUsageTracker{})
void run_oink_prover_on_each_incomplete_instance()
Create inputs to folding protocol (an Oink interaction).
bb::RelationParameters< Univariate< FF, EXTENDED_LENGTH, 0, SKIP_COUNT > > UnivariateRelationParameters
VerifierInstances verifier_insts_to_fold
typename Flavor::CommitmentKey CommitmentKey
static constexpr size_t EXTENDED_LENGTH
std::tuple< std::vector< FF >, Polynomial< FF > > perturbator_round(const std::shared_ptr< const ProverInstance > &accumulator)
Steps 2 - 5 of the paper.
size_t get_max_dyadic_size() const
Get the maximum dyadic circuit size among all prover instances.
std::array< Univariate< FF, BATCHED_EXTENDED_LENGTH >, NUM_SUBRELATIONS - 1 > UnivariateSubrelationSeparators
void update_target_sum_and_fold(const ProverInstances &instances, const CombinerQuotient &combiner_quotient, const UnivariateSubrelationSeparators &alphas, const UnivariateRelationParameters &univariate_relation_parameters, const FF &perturbator_evaluation)
Steps 12 - 13 of the paper plus the prover folding work.
ProverInstances prover_insts_to_fold
A purely static class (never add state to this!) consisting of functions used by the Protogalaxy prov...
A ProverInstance is normally constructed from a finalized circuit and it contains all the information...
The VerifierInstance encapsulates all the necessary information for a Mega Honk Verifier to verify a ...
typename Flavor::Polynomial Polynomial
#define BB_PROFILE
Entry point for Barretenberg command-line interface.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
Tracks the cumulative usage of the execution trace across a series of circuits.