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 private:
34 using WitnessCommitments = typename Flavor::WitnessCommitments;
36 MetaData metadata; // circuit size and public inputs metadata
37 // index of the last constrained wire in the execution trace; initialize to size_t::max to indicate uninitialized
38 size_t final_active_wire_idx{ std::numeric_limits<size_t>::max() };
39
40 public:
41 std::vector<FF> public_inputs;
42 ProverPolynomials polynomials; // the multilinear polynomials used by the prover
44 FF alpha; // challenge whose powers batch subrelation contributions during Sumcheck
46 std::vector<FF> gate_challenges;
47
48 HonkProof ipa_proof; // utilized for rollup proofs (IO::HasIPA)
49
50 std::vector<uint32_t> memory_read_records;
51 std::vector<uint32_t> memory_write_records;
52
53 size_t dyadic_size() const { return metadata.dyadic_size; }
54 size_t log_dyadic_size() const { return numeric::get_msb(dyadic_size()); }
55 size_t pub_inputs_offset() const { return metadata.pub_inputs_offset; }
62 {
63 BB_ASSERT(final_active_wire_idx != std::numeric_limits<size_t>::max(),
64 "final_active_wire_idx has not been initialized");
66 }
67
68 Flavor::PrecomputedData get_precomputed()
69 {
70 return typename Flavor::PrecomputedData{ polynomials.get_precomputed(), metadata };
71 }
72
73 ProverInstance_(Circuit& circuit);
74
75 ProverInstance_() = default;
80 ~ProverInstance_() = default;
81
82 private:
84 size_t trace_active_range_size() const { return get_final_active_wire_idx() + 1; }
85
87
88 void allocate_wires();
89
91
93
94 void allocate_selectors(const Circuit&);
95
97
99 requires IsMegaFlavor<Flavor>;
100
102 requires HasDataBus<Flavor>;
103
105 requires HasDataBus<Flavor>;
106
108
109 void populate_memory_records(const Circuit& circuit);
110};
111
112} // 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
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)
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 databus polynomials (calldata, secondary_calldata, return_data) and their read counts/ta...
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:49
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.