Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
prover_instance.hpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: Completed, auditors: [Sergei], commit: }
3// external_1: { status: not started, auditors: [], commit: }
4// external_2: { status: not started, auditors: [], commit: }
5// =====================
6
7#pragma once
19
20namespace bb {
21
27template <typename Flavor_> class ProverInstance_ {
28 public:
29 using Flavor = Flavor_;
30 using FF = typename Flavor::FF;
31
32 // The number of rows reserved at the top of the trace for row-disabling / ZK masking.
33 static constexpr size_t TRACE_OFFSET = Flavor::TRACE_OFFSET;
34
35 private:
38 using WitnessCommitments = typename Flavor::WitnessCommitments;
40 MetaData metadata; // circuit size and public inputs metadata
41 // index of the last constrained wire in the execution trace; initialize to size_t::max to indicate uninitialized
42 size_t final_active_wire_idx{ std::numeric_limits<size_t>::max() };
43
44 public:
45 std::vector<FF> public_inputs;
46 ProverPolynomials polynomials; // the multilinear polynomials used by the prover
48 FF alpha; // challenge whose powers batch subrelation contributions during Sumcheck
50 std::vector<FF> gate_challenges;
51
52 HonkProof ipa_proof; // utilized for rollup proofs (IO::HasIPA)
53
54 std::vector<uint32_t> memory_read_records;
55 std::vector<uint32_t> memory_write_records;
56 std::vector<uint32_t> rom_logup_records;
57
58 size_t dyadic_size() const { return metadata.dyadic_size; }
59 size_t log_dyadic_size() const { return numeric::get_msb(dyadic_size()); }
60 size_t pub_inputs_offset() const { return metadata.pub_inputs_offset; }
67 {
68 BB_ASSERT(final_active_wire_idx != std::numeric_limits<size_t>::max(),
69 "final_active_wire_idx has not been initialized");
71 }
72
73 Flavor::PrecomputedData get_precomputed()
74 {
75 return typename Flavor::PrecomputedData{ polynomials.get_precomputed(), metadata };
76 }
77
78 ProverInstance_(Circuit& circuit);
79
80 ProverInstance_() = default;
85 ~ProverInstance_() = default;
86
87 private:
89 size_t trace_active_range_size() const { return get_final_active_wire_idx() + 1; }
90
92
93 void allocate_wires();
94
96
98
99 void allocate_selectors(const Circuit&);
100
102 requires(Flavor::HasLogDerivLookup);
103
104 void allocate_ecc_op_polynomials(const Circuit&)
105 requires Flavor::HasEccOpQueue;
106
107 void allocate_databus_polynomials(const Circuit&)
108 requires Flavor::HasDataBus;
109
110 void construct_databus_polynomials(Circuit&)
111 requires Flavor::HasDataBus;
112
114 requires(Flavor::HasLogDerivLookup);
115
116 void populate_memory_records(const Circuit& circuit);
117};
118
119} // namespace bb
#define BB_ASSERT(expression,...)
Definition assert.hpp:70
#define BB_ASSERT_EQ(actual, expected,...)
Definition assert.hpp:83
A container for the prover polynomials.
typename Curve::ScalarField FF
ECCVMCircuitBuilder CircuitBuilder
bb::Polynomial< FF > Polynomial
static constexpr size_t TRACE_OFFSET
Contains all the information required by a Honk prover to create a proof, constructed from a finalize...
size_t pub_inputs_offset() const
ProverInstance_(ProverInstance_ &&)=delete
std::vector< uint32_t > memory_write_records
void allocate_selectors(const Circuit &)
Flavor::PrecomputedData get_precomputed()
ProverInstance_()=default
static constexpr size_t TRACE_OFFSET
size_t compute_dyadic_size(Circuit &)
Compute the minimum dyadic (power-of-2) circuit size.
void allocate_table_lookup_polynomials(const Circuit &)
ProverInstance_ & operator=(ProverInstance_ &&)=delete
RelationParameters< FF > relation_parameters
size_t get_final_active_wire_idx() const
void populate_memory_records(const Circuit &circuit)
size_t log_dyadic_size() const
ProverPolynomials polynomials
size_t trace_active_range_size() const
Get the size of the active trace range (0 to the final active wire index)
void allocate_permutation_argument_polynomials()
typename Flavor::WitnessCommitments WitnessCommitments
size_t dyadic_size() const
std::vector< FF > public_inputs
WitnessCommitments commitments
std::vector< uint32_t > memory_read_records
ProverInstance_(const ProverInstance_ &)=delete
typename Flavor::CircuitBuilder Circuit
ProverInstance_ & operator=(const ProverInstance_ &)=delete
std::vector< uint32_t > rom_logup_records
typename Flavor::FF FF
typename Flavor::ProverPolynomials ProverPolynomials
typename Flavor::Polynomial Polynomial
size_t num_public_inputs() const
std::vector< FF > gate_challenges
void allocate_ecc_op_polynomials(const Circuit &) void allocate_databus_polynomials(const Circuit &) Flavor void construct_databus_polynomials(Circuit &) Flavor void construct_lookup_polynomials(Circuit &circuit)
~ProverInstance_()=default
Base class templates shared across Honk flavors.
constexpr T get_msb(const T in)
Definition get_msb.hpp:50
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
std::vector< fr > HonkProof
Definition proof.hpp:15
Dyadic trace size and public inputs metadata; Common between prover and verifier keys.
Definition flavor.hpp:77
size_t pub_inputs_offset
Definition flavor.hpp:81
size_t num_public_inputs
Definition flavor.hpp:80
size_t dyadic_size
Definition flavor.hpp:79
Container for parameters used by the grand product (permutation, lookup) Honk relations.