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
18
19namespace bb {
20
26template <typename Flavor_> class ProverInstance_ {
27 public:
28 using Flavor = Flavor_;
29 using FF = typename Flavor::FF;
30
31 // The number of rows reserved at the top of the trace for row-disabling / ZK masking.
32 static constexpr size_t TRACE_OFFSET = Flavor::TRACE_OFFSET;
33
34 private:
37 using WitnessCommitments = typename Flavor::WitnessCommitments;
39 MetaData metadata; // circuit size and public inputs metadata
40 // index of the last constrained wire in the execution trace; initialize to size_t::max to indicate uninitialized
41 size_t final_active_wire_idx{ std::numeric_limits<size_t>::max() };
42
43 public:
44 std::vector<FF> public_inputs;
45 ProverPolynomials polynomials; // the multilinear polynomials used by the prover
47 FF alpha; // challenge whose powers batch subrelation contributions during Sumcheck
49 std::vector<FF> gate_challenges;
50
51 HonkProof ipa_proof; // utilized for rollup proofs (IO::HasIPA)
52
53 std::vector<uint32_t> memory_read_records;
54 std::vector<uint32_t> memory_write_records;
55
56 size_t dyadic_size() const { return metadata.dyadic_size; }
57 size_t log_dyadic_size() const { return numeric::get_msb(dyadic_size()); }
58 size_t pub_inputs_offset() const { return metadata.pub_inputs_offset; }
65 {
66 BB_ASSERT(final_active_wire_idx != std::numeric_limits<size_t>::max(),
67 "final_active_wire_idx has not been initialized");
69 }
70
71 Flavor::PrecomputedData get_precomputed()
72 {
73 return typename Flavor::PrecomputedData{ polynomials.get_precomputed(), metadata };
74 }
75
76 ProverInstance_(Circuit& circuit);
77
78 ProverInstance_() = default;
83 ~ProverInstance_() = default;
84
85 private:
87 size_t trace_active_range_size() const { return get_final_active_wire_idx() + 1; }
88
90
91 void allocate_wires();
92
94
96
97 void allocate_selectors(const Circuit&);
98
100
102 requires IsMegaFlavor<Flavor>;
103
105 requires HasDataBus<Flavor>;
106
108 requires HasDataBus<Flavor>;
109
111
112 void populate_memory_records(const Circuit& circuit);
113};
114
115} // 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
void construct_lookup_polynomials(Circuit &circuit)
static constexpr size_t TRACE_OFFSET
size_t compute_dyadic_size(Circuit &)
Compute the minimum dyadic (power-of-2) circuit size.
ProverInstance_ & operator=(ProverInstance_ &&)=delete
RelationParameters< FF > relation_parameters
size_t get_final_active_wire_idx() const
size_t log_dyadic_size() const
void allocate_ecc_op_polynomials(const Circuit &)
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()
void allocate_table_lookup_polynomials(const Circuit &)
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
void populate_memory_records(const Circuit &circuit)
Copy RAM/ROM record of reads and writes from the circuit to the instance.
ProverInstance_ & operator=(const ProverInstance_ &)=delete
typename Flavor::FF FF
void construct_databus_polynomials(Circuit &)
Populate the per-bus databus polynomials (values and read counts) and the identity polynomial.
typename Flavor::ProverPolynomials ProverPolynomials
void allocate_databus_polynomials(const Circuit &)
typename Flavor::Polynomial Polynomial
size_t num_public_inputs() const
std::vector< FF > gate_challenges
~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:74
size_t pub_inputs_offset
Definition flavor.hpp:78
size_t num_public_inputs
Definition flavor.hpp:77
size_t dyadic_size
Definition flavor.hpp:76
Container for parameters used by the grand product (permutation, lookup) Honk relations.