4#include "../relation_definitions_fwd.hpp"
5#include "barretenberg/commitment_schemes/kzg/kzg.hpp"
6#include "barretenberg/ecc/curves/bn254/g1.hpp"
7#include "barretenberg/polynomials/barycentric.hpp"
8#include "barretenberg/polynomials/univariate.hpp"
11#include "barretenberg/flavor/flavor_macros.hpp"
12#include "barretenberg/polynomials/evaluation_domain.hpp"
13#include "barretenberg/polynomials/polynomial.hpp"
14#include "barretenberg/relations/generated/AvmMini/avm_mini.hpp"
15#include "barretenberg/relations/generated/AvmMini/mem_trace.hpp"
16#include "barretenberg/transcript/transcript.hpp"
24 using G1 = Curve::Group;
27 using FF = G1::subgroup_field;
29 using PolynomialHandle = std::span<FF>;
30 using GroupElement = G1::element;
31 using Commitment = G1::affine_element;
32 using CommitmentHandle = G1::affine_element;
36 static constexpr size_t NUM_PRECOMPUTED_ENTITIES = 2;
37 static constexpr size_t NUM_WITNESS_ENTITIES = 20;
38 static constexpr size_t NUM_WIRES = NUM_WITNESS_ENTITIES + NUM_PRECOMPUTED_ENTITIES;
41 static constexpr size_t NUM_ALL_ENTITIES = 25;
45 static constexpr size_t MAX_PARTIAL_RELATION_LENGTH = compute_max_partial_relation_length<Relations>();
50 static constexpr size_t BATCHED_RELATION_PARTIAL_LENGTH = MAX_PARTIAL_RELATION_LENGTH + 1;
51 static constexpr size_t NUM_RELATIONS = std::tuple_size<Relations>::value;
53 template <
size_t NUM_INSTANCES>
54 using ProtogalaxyTupleOfTuplesOfUnivariates =
55 decltype(create_protogalaxy_tuple_of_tuples_of_univariates<Relations, NUM_INSTANCES>());
56 using SumcheckTupleOfTuplesOfUnivariates =
decltype(create_sumcheck_tuple_of_tuples_of_univariates<Relations>());
57 using TupleOfArraysOfValues =
decltype(create_tuple_of_arrays_of_values<Relations>());
59 static constexpr bool has_zero_row =
true;
64 using DataType = DataType_;
66 DEFINE_FLAVOR_MEMBERS(DataType, avmMini_clk, avmMini_first)
81 template <
typename DataType>
class WitnessEntities {
83 DEFINE_FLAVOR_MEMBERS(DataType,
88 memTrace_m_lastAccess,
108 memTrace_m_clk, memTrace_m_sub_clk, memTrace_m_addr, memTrace_m_val, memTrace_m_lastAccess,
109 memTrace_m_rw, avmMini_subop, avmMini_ia, avmMini_ib, avmMini_ic,
110 avmMini_mem_op_a, avmMini_mem_op_b, avmMini_mem_op_c, avmMini_rwa, avmMini_rwb,
111 avmMini_rwc, avmMini_mem_idx_a, avmMini_mem_idx_b, avmMini_mem_idx_c, avmMini_last,
119 template <
typename DataType>
class AllEntities {
121 DEFINE_FLAVOR_MEMBERS(DataType,
128 memTrace_m_lastAccess,
145 memTrace_m_addr_shift,
146 memTrace_m_val_shift)
157 memTrace_m_lastAccess,
174 memTrace_m_addr_shift,
175 memTrace_m_val_shift,
189 memTrace_m_lastAccess,
223 memTrace_m_addr_shift,
224 memTrace_m_val_shift,
247 std::array<PolynomialHandle, 0> get_table_column_wires() {
return {}; };
252 using FoldedPolynomials = AllEntities<std::vector<FF>>;
256 using Base = AllEntities<FF>;
272 [[nodiscard]]
size_t get_polynomial_size()
const {
return avmMini_clk.size(); }
286 using RowPolynomials = AllEntities<FF>;
294 for (
auto& poly : get_all()) {
304 template <
size_t LENGTH>
using ProverUnivariates = AllEntities<barretenberg::Univariate<FF, LENGTH>>;
313 using Base = AllEntities<std::string>;
317 : AllEntities<std::string>()
319 Base::avmMini_clk =
"avmMini_clk";
320 Base::avmMini_first =
"avmMini_first";
321 Base::memTrace_m_clk =
"memTrace_m_clk";
322 Base::memTrace_m_sub_clk =
"memTrace_m_sub_clk";
323 Base::memTrace_m_addr =
"memTrace_m_addr";
324 Base::memTrace_m_val =
"memTrace_m_val";
325 Base::memTrace_m_lastAccess =
"memTrace_m_lastAccess";
326 Base::memTrace_m_rw =
"memTrace_m_rw";
327 Base::avmMini_subop =
"avmMini_subop";
328 Base::avmMini_ia =
"avmMini_ia";
329 Base::avmMini_ib =
"avmMini_ib";
330 Base::avmMini_ic =
"avmMini_ic";
331 Base::avmMini_mem_op_a =
"avmMini_mem_op_a";
332 Base::avmMini_mem_op_b =
"avmMini_mem_op_b";
333 Base::avmMini_mem_op_c =
"avmMini_mem_op_c";
334 Base::avmMini_rwa =
"avmMini_rwa";
335 Base::avmMini_rwb =
"avmMini_rwb";
336 Base::avmMini_rwc =
"avmMini_rwc";
337 Base::avmMini_mem_idx_a =
"avmMini_mem_idx_a";
338 Base::avmMini_mem_idx_b =
"avmMini_mem_idx_b";
339 Base::avmMini_mem_idx_c =
"avmMini_mem_idx_c";
340 Base::avmMini_last =
"avmMini_last";
346 using Base = AllEntities<Commitment>;
351 avmMini_clk = verification_key->avmMini_clk;
352 avmMini_first = verification_key->avmMini_first;
358 uint32_t circuit_size;
360 Commitment memTrace_m_clk;
361 Commitment memTrace_m_sub_clk;
362 Commitment memTrace_m_addr;
363 Commitment memTrace_m_val;
364 Commitment memTrace_m_lastAccess;
365 Commitment memTrace_m_rw;
366 Commitment avmMini_subop;
367 Commitment avmMini_ia;
368 Commitment avmMini_ib;
369 Commitment avmMini_ic;
370 Commitment avmMini_mem_op_a;
371 Commitment avmMini_mem_op_b;
372 Commitment avmMini_mem_op_c;
373 Commitment avmMini_rwa;
374 Commitment avmMini_rwb;
375 Commitment avmMini_rwc;
376 Commitment avmMini_mem_idx_a;
377 Commitment avmMini_mem_idx_b;
378 Commitment avmMini_mem_idx_c;
379 Commitment avmMini_last;
381 std::vector<barretenberg::Univariate<FF, BATCHED_RELATION_PARTIAL_LENGTH>> sumcheck_univariates;
382 std::array<FF, NUM_ALL_ENTITIES> sumcheck_evaluations;
383 std::vector<Commitment> zm_cq_comms;
384 Commitment zm_cq_comm;
385 Commitment zm_pi_comm;
393 void deserialize_full_transcript()
395 size_t num_bytes_read = 0;
396 circuit_size = deserialize_from_buffer<uint32_t>(proof_data, num_bytes_read);
397 size_t log_n = numeric::get_msb(circuit_size);
399 memTrace_m_clk = deserialize_from_buffer<Commitment>(Transcript::proof_data, num_bytes_read);
400 memTrace_m_sub_clk = deserialize_from_buffer<Commitment>(Transcript::proof_data, num_bytes_read);
401 memTrace_m_addr = deserialize_from_buffer<Commitment>(Transcript::proof_data, num_bytes_read);
402 memTrace_m_val = deserialize_from_buffer<Commitment>(Transcript::proof_data, num_bytes_read);
403 memTrace_m_lastAccess = deserialize_from_buffer<Commitment>(Transcript::proof_data, num_bytes_read);
404 memTrace_m_rw = deserialize_from_buffer<Commitment>(Transcript::proof_data, num_bytes_read);
405 avmMini_subop = deserialize_from_buffer<Commitment>(Transcript::proof_data, num_bytes_read);
406 avmMini_ia = deserialize_from_buffer<Commitment>(Transcript::proof_data, num_bytes_read);
407 avmMini_ib = deserialize_from_buffer<Commitment>(Transcript::proof_data, num_bytes_read);
408 avmMini_ic = deserialize_from_buffer<Commitment>(Transcript::proof_data, num_bytes_read);
409 avmMini_mem_op_a = deserialize_from_buffer<Commitment>(Transcript::proof_data, num_bytes_read);
410 avmMini_mem_op_b = deserialize_from_buffer<Commitment>(Transcript::proof_data, num_bytes_read);
411 avmMini_mem_op_c = deserialize_from_buffer<Commitment>(Transcript::proof_data, num_bytes_read);
412 avmMini_rwa = deserialize_from_buffer<Commitment>(Transcript::proof_data, num_bytes_read);
413 avmMini_rwb = deserialize_from_buffer<Commitment>(Transcript::proof_data, num_bytes_read);
414 avmMini_rwc = deserialize_from_buffer<Commitment>(Transcript::proof_data, num_bytes_read);
415 avmMini_mem_idx_a = deserialize_from_buffer<Commitment>(Transcript::proof_data, num_bytes_read);
416 avmMini_mem_idx_b = deserialize_from_buffer<Commitment>(Transcript::proof_data, num_bytes_read);
417 avmMini_mem_idx_c = deserialize_from_buffer<Commitment>(Transcript::proof_data, num_bytes_read);
418 avmMini_last = deserialize_from_buffer<Commitment>(Transcript::proof_data, num_bytes_read);
420 for (
size_t i = 0; i < log_n; ++i) {
421 sumcheck_univariates.emplace_back(
423 Transcript::proof_data, num_bytes_read));
425 sumcheck_evaluations =
426 deserialize_from_buffer<std::array<FF, NUM_ALL_ENTITIES>>(Transcript::proof_data, num_bytes_read);
427 for (
size_t i = 0; i < log_n; ++i) {
428 zm_cq_comms.push_back(deserialize_from_buffer<Commitment>(proof_data, num_bytes_read));
430 zm_cq_comm = deserialize_from_buffer<Commitment>(proof_data, num_bytes_read);
431 zm_pi_comm = deserialize_from_buffer<Commitment>(proof_data, num_bytes_read);
434 void serialize_full_transcript()
436 size_t old_proof_length = proof_data.size();
437 Transcript::proof_data.clear();
438 size_t log_n = numeric::get_msb(circuit_size);
442 serialize_to_buffer<Commitment>(memTrace_m_clk, Transcript::proof_data);
443 serialize_to_buffer<Commitment>(memTrace_m_sub_clk, Transcript::proof_data);
444 serialize_to_buffer<Commitment>(memTrace_m_addr, Transcript::proof_data);
445 serialize_to_buffer<Commitment>(memTrace_m_val, Transcript::proof_data);
446 serialize_to_buffer<Commitment>(memTrace_m_lastAccess, Transcript::proof_data);
447 serialize_to_buffer<Commitment>(memTrace_m_rw, Transcript::proof_data);
448 serialize_to_buffer<Commitment>(avmMini_subop, Transcript::proof_data);
449 serialize_to_buffer<Commitment>(avmMini_ia, Transcript::proof_data);
450 serialize_to_buffer<Commitment>(avmMini_ib, Transcript::proof_data);
451 serialize_to_buffer<Commitment>(avmMini_ic, Transcript::proof_data);
452 serialize_to_buffer<Commitment>(avmMini_mem_op_a, Transcript::proof_data);
453 serialize_to_buffer<Commitment>(avmMini_mem_op_b, Transcript::proof_data);
454 serialize_to_buffer<Commitment>(avmMini_mem_op_c, Transcript::proof_data);
455 serialize_to_buffer<Commitment>(avmMini_rwa, Transcript::proof_data);
456 serialize_to_buffer<Commitment>(avmMini_rwb, Transcript::proof_data);
457 serialize_to_buffer<Commitment>(avmMini_rwc, Transcript::proof_data);
458 serialize_to_buffer<Commitment>(avmMini_mem_idx_a, Transcript::proof_data);
459 serialize_to_buffer<Commitment>(avmMini_mem_idx_b, Transcript::proof_data);
460 serialize_to_buffer<Commitment>(avmMini_mem_idx_c, Transcript::proof_data);
461 serialize_to_buffer<Commitment>(avmMini_last, Transcript::proof_data);
463 for (
size_t i = 0; i < log_n; ++i) {
467 for (
size_t i = 0; i < log_n; ++i) {
474 ASSERT(proof_data.size() == old_proof_length);
A template class for a reference vector. Behaves as if std::vector<T&> was possible.
Definition: ref_vector.hpp:20
Definition: polynomial.hpp:12
A univariate polynomial represented by its values on {domain_start, domain_start + 1,...
Definition: univariate.hpp:23
The templates defined herein facilitate sharing the relation arithmetic between the prover and the ve...
Definition: relation_types.hpp:121
Common transcript class for both parties. Stores the data for the current round, as well as the manif...
Definition: transcript.hpp:62
T deserialize_from_buffer(const Proof &proof_data, size_t &offset) const
Deserializes the bytes starting at offset into the typed element and returns that element.
Definition: transcript.hpp:180
void serialize_to_buffer(const T &element, Proof &proof_data)
Serializes object and appends it to proof_data.
Definition: transcript.hpp:166
Definition: AvmMini_flavor.hpp:254
Definition: AvmMini_flavor.hpp:311
Definition: AvmMini_flavor.hpp:288
A container for the prover polynomials handles.
Definition: AvmMini_flavor.hpp:263
AllValues get_row(size_t row_idx) const
Returns the evaluations of all prover polynomials at one point on the boolean hypercube,...
Definition: AvmMini_flavor.hpp:277
Definition: AvmMini_flavor.hpp:231
Definition: AvmMini_flavor.hpp:356
Definition: AvmMini_flavor.hpp:344
Definition: AvmMini_flavor.hpp:21
ProverUnivariates< MAX_PARTIAL_RELATION_LENGTH > ExtendedEdges
A container for univariates produced during the hot loop in sumcheck.
Definition: AvmMini_flavor.hpp:309
AllEntities< barretenberg::Univariate< FF, LENGTH > > ProverUnivariates
A container for univariates used during Protogalaxy folding and sumcheck.
Definition: AvmMini_flavor.hpp:304
Base class template containing circuit-specifying data.
Definition: flavor.hpp:85
Base proving key class.
Definition: flavor.hpp:101
CommitmentKey object over a pairing group 𝔾₁.
Definition: commitment_key.hpp:35
Definition: verification_key.hpp:25
Definition: zip_view.hpp:159
Base class templates for structures that contain data parameterized by the fundamental polynomials of...
Defines particular circuit builder types expected to be used for circuit construction in stdlib and c...
Definition: claim.hpp:6