3#include "barretenberg/ecc/curves/bn254/bn254.hpp"
4#include "barretenberg/proof_system/circuit_builder/eccvm/eccvm_builder_types.hpp"
6namespace proof_system {
8enum EccOpCode { NULL_OP, ADD_ACCUM, MUL_ACCUM, EQUALITY };
20 using Point = Curve::AffineElement;
23 Point point_at_infinity = Curve::Group::affine_point_at_infinity;
26 Point accumulator = point_at_infinity;
30 std::vector<ECCVMOperation> raw_ops;
31 std::array<std::vector<Fr>, 4> ultra_ops;
33 size_t current_ultra_ops_size = 0;
34 size_t previous_ultra_ops_size = 0;
36 std::array<Point, 4> ultra_ops_commitments;
37 std::array<Point, 4> previous_ultra_ops_commitments;
39 Point get_accumulator() {
return accumulator; }
49 previous_ultra_ops_size = current_ultra_ops_size;
50 current_ultra_ops_size = ultra_ops[0].size();
53 [[nodiscard]]
size_t get_previous_size()
const {
return previous_ultra_ops_size; }
54 [[nodiscard]]
size_t get_current_size()
const {
return current_ultra_ops_size; }
56 void set_commitment_data(std::array<Point, 4>& commitments)
58 previous_ultra_ops_commitments = ultra_ops_commitments;
59 ultra_ops_commitments = commitments;
69 std::vector<std::span<Fr>> result;
70 result.reserve(ultra_ops.size());
71 for (
auto& entry : ultra_ops) {
72 result.emplace_back(entry);
84 std::vector<std::span<Fr>> result;
85 result.reserve(ultra_ops.size());
87 for (
auto& entry : ultra_ops) {
88 result.emplace_back(entry.begin(), previous_ultra_ops_size);
105 std::array<Point, 4> mock_op_queue_commitments;
106 for (
size_t idx = 0; idx < 4; idx++) {
107 auto mock_data = Fr::random_element();
108 this->ultra_ops[idx].emplace_back(mock_data);
109 mock_op_queue_commitments[idx] = Point::one() * mock_data;
114 this->set_commitment_data(mock_op_queue_commitments);
125 accumulator = accumulator + to_add;
133 .base_point = to_add,
136 .mul_scalar_full = 0,
148 accumulator = accumulator + to_mul * scalar;
153 auto converted = scalar.from_montgomery_form();
155 z1 = z1.to_montgomery_form();
156 z2 = z2.to_montgomery_form();
162 .base_point = to_mul,
165 .mul_scalar_full = scalar,
176 auto expected = accumulator;
177 accumulator.self_set_infinity();
184 .base_point = expected,
187 .mul_scalar_full = 0,
204 .base_point = point_at_infinity,
207 .mul_scalar_full = 0,
Used to construct execution trace representations of elliptic curve operations.
Definition: ecc_op_queue.hpp:18
std::vector< std::span< Fr > > get_previous_aggregate_transcript()
Get a 'view' of the previous ultra ops object.
Definition: ecc_op_queue.hpp:82
void empty_row()
Write empty row to queue.
Definition: ecc_op_queue.hpp:197
void add_accumulate(const Point &to_add)
Write point addition op to queue and natively perform addition.
Definition: ecc_op_queue.hpp:122
void set_size_data()
Set the current and previous size of the ultra_ops transcript.
Definition: ecc_op_queue.hpp:47
void populate_with_mock_initital_data()
TESTING PURPOSES ONLY: Populate ECC op queue with mock data as stand in for "previous circuit" in tes...
Definition: ecc_op_queue.hpp:102
std::vector< std::span< Fr > > get_aggregate_transcript()
Get a 'view' of the current ultra ops object.
Definition: ecc_op_queue.hpp:67
Point eq()
Write equality op using internal accumulator point.
Definition: ecc_op_queue.hpp:174
void mul_accumulate(const Point &to_mul, const Fr &scalar)
Write multiply and add op to queue and natively perform operation.
Definition: ecc_op_queue.hpp:145
static void split_into_endomorphism_scalars(const field &k, field &k1, field &k2)
Definition: field_declarations.hpp:320
Definition: eccvm_builder_types.hpp:15