Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
flavor.cpp
Go to the documentation of this file.
1#include "flavor.hpp"
3
4namespace bb::avm2 {
5
6AvmFlavor::ProverPolynomials::ProverPolynomials(ProvingKey& proving_key)
7{
8 for (auto [prover_poly, key_poly] : zip_view(this->get_unshifted(), proving_key.get_all())) {
10 prover_poly = key_poly.share();
11 }
12 for (auto [prover_poly, key_poly] : zip_view(this->get_shifted(), proving_key.get_to_be_shifted())) {
13 BB_ASSERT_EQ(flavor_get_label(*this, prover_poly), (flavor_get_label(proving_key, key_poly) + "_shift"));
14 prover_poly = key_poly.shifted();
15 }
16}
17
18void AvmFlavor::Transcript::deserialize_full_transcript()
19{
20 size_t num_frs_read = 0;
21
22 for (auto& commitment : commitments) {
23 commitment = deserialize_from_buffer<Commitment>(proof_data, num_frs_read);
24 }
25
26 for (size_t i = 0; i < log_circuit_size; ++i) {
27 sumcheck_univariates.emplace_back(deserialize_from_buffer<bb::Univariate<FF, BATCHED_RELATION_PARTIAL_LENGTH>>(
28 Transcript::proof_data, num_frs_read));
29 }
30
31 sumcheck_evaluations =
32 deserialize_from_buffer<std::array<FF, NUM_ALL_ENTITIES>>(Transcript::proof_data, num_frs_read);
33
34 for (size_t i = 0; i < log_circuit_size - 1; ++i) {
35 gemini_fold_comms.push_back(deserialize_from_buffer<Commitment>(proof_data, num_frs_read));
36 }
37
38 for (size_t i = 0; i < log_circuit_size; ++i) {
39 gemini_fold_evals.push_back(deserialize_from_buffer<FF>(proof_data, num_frs_read));
40 }
41
42 shplonk_q_comm = deserialize_from_buffer<Commitment>(proof_data, num_frs_read);
43
44 kzg_w_comm = deserialize_from_buffer<Commitment>(proof_data, num_frs_read);
45}
46
47void AvmFlavor::Transcript::serialize_full_transcript()
48{
49 size_t old_proof_length = proof_data.size();
51
52 for (const auto& commitment : commitments) {
53 serialize_to_buffer(commitment, Transcript::proof_data);
54 }
55
56 for (size_t i = 0; i < log_circuit_size; ++i) {
57 serialize_to_buffer(sumcheck_univariates[i], Transcript::proof_data);
58 }
59
60 serialize_to_buffer(sumcheck_evaluations, Transcript::proof_data);
61
62 for (size_t i = 0; i < log_circuit_size - 1; ++i) {
63 serialize_to_buffer(gemini_fold_comms[i], proof_data);
64 }
65
66 for (size_t i = 0; i < log_circuit_size; ++i) {
67 serialize_to_buffer(gemini_fold_evals[i], proof_data);
68 }
69
70 serialize_to_buffer(shplonk_q_comm, proof_data);
71 serialize_to_buffer(kzg_w_comm, proof_data);
72
73 // sanity check to make sure we generate the same length of proof as before.
74 BB_ASSERT_EQ(proof_data.size(), old_proof_length);
75}
76
78{
79 // Storage is only needed after the first partial evaluation, hence polynomials of size (n / 2)
80 for (auto& poly : get_all()) {
81 poly = Polynomial(circuit_size / 2);
82 }
83}
84
86 size_t circuit_size)
87{
88 for (auto [poly, full_poly] : zip_view(get_all(), full_polynomials.get_all())) {
89 // After the initial sumcheck round, the new size is CEIL(size/2).
90 size_t desired_size = full_poly.end_index() / 2 + full_poly.end_index() % 2;
91 poly = Polynomial(desired_size, circuit_size / 2);
92 }
93}
94
96 : commitment_key(circuit_size + 1) {
97 // The proving key's polynomials are not allocated here because they are later overwritten
98 // AvmComposer::compute_witness(). We should probably refactor this flow.
99 };
100
106std::vector<AvmFlavor::FF> AvmFlavor::VerificationKey::to_field_elements() const
107{
108 std::vector<FF> elements;
109
110 for (auto const& comm : get_all()) {
111 std::vector<FF> comm_as_fields = field_conversion::convert_to_bn254_frs(comm);
112 elements.insert(elements.end(), comm_as_fields.begin(), comm_as_fields.end());
113 }
114 return elements;
115}
116
117} // namespace bb::avm2
#define BB_ASSERT_EQ(actual, expected,...)
Definition assert.hpp:59
A univariate polynomial represented by its values on {domain_start, domain_start + 1,...
DataType & get(ColumnAndShifts c)
Definition flavor.hpp:195
A container for the prover polynomials handles.
Definition flavor.hpp:296
AvmFlavorSettings::Polynomial Polynomial
Definition flavor.hpp:35
std::vector< bb::fr > convert_to_bn254_frs(const T &val)
Conversion from transcript values to bb::frs.
std::string flavor_get_label(Container &&container, const Element &element)
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13