Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
bb::ECCOpQueue Class Reference

Used to construct execution trace representations of elliptic curve operations. More...

#include <ecc_op_queue.hpp>

Public Member Functions

 ECCOpQueue ()
 Instantiate an initial ECC op subtable.
 
void initialize_new_subtable ()
 Initialize a new subtable for eccvm and ultra ops with the given merge settings.
 
void merge (MergeSettings settings=MergeSettings::PREPEND, std::optional< size_t > ultra_fixed_offset=std::nullopt)
 
std::array< Polynomial< Fr >, ULTRA_TABLE_WIDTHconstruct_ultra_ops_table_columns () const
 
std::array< Polynomial< Fr >, ULTRA_TABLE_WIDTHconstruct_previous_ultra_ops_table_columns () const
 
std::array< Polynomial< Fr >, ULTRA_TABLE_WIDTHconstruct_current_ultra_ops_subtable_columns () const
 
void construct_full_eccvm_ops_table ()
 
void construct_full_ultra_ops_table ()
 
size_t get_ultra_ops_table_num_rows () const
 
size_t get_current_ultra_ops_subtable_num_rows () const
 
size_t get_previous_ultra_ops_table_num_rows () const
 
std::vector< ECCVMOperation > & get_eccvm_ops ()
 
std::vector< UltraOp > & get_ultra_ops ()
 
size_t get_num_msm_rows () const
 Get the number of rows in the 'msm' column section, for all msms in the circuit.
 
size_t get_num_rows () const
 Get the number of rows for the current ECCVM circuit.
 
uint32_t get_number_of_muls () const
 get number of muls for the current ECCVM circuit
 
void set_eccvm_ops_for_fuzzing (std::vector< ECCVMOperation > &eccvm_ops_in)
 A fuzzing only method for setting eccvm ops directly.
 
void add_erroneous_equality_op_for_testing ()
 A testing only method that adds an erroneous equality op to the eccvm ops.
 
void empty_row_for_testing ()
 Write empty row to queue.
 
Point get_accumulator ()
 
UltraOp add_accumulate (const Point &to_add)
 Write point addition op to queue and natively perform addition.
 
UltraOp mul_accumulate (const Point &to_mul, const Fr &scalar)
 Write multiply and add op to queue and natively perform operation.
 
UltraOp no_op_ultra_only ()
 Writes a no op (i.e. two zero rows) to the ultra ops table but adds no eccvm operations.
 
UltraOp random_op_ultra_only ()
 Writes randomness to the ultra ops table but adds no eccvm operations.
 
UltraOp eq_and_reset ()
 Write equality op using internal accumulator point.
 

Private Types

using Curve = curve::BN254
 
using Point = Curve::AffineElement
 
using Fr = Curve::ScalarField
 
using Fq = Curve::BaseField
 

Private Member Functions

void append_eccvm_op (const ECCVMOperation &op)
 Append an eccvm operation to the eccvm ops table; update the eccvm row tracker.
 
UltraOp construct_and_populate_ultra_ops (EccOpCode op_code, const Point &point, const Fr &scalar=Fr::zero())
 Given an ecc operation and its inputs, decompose into ultra format and populate ultra_ops.
 

Private Attributes

Point point_at_infinity = Curve::Group::affine_point_at_infinity
 
Point accumulator = point_at_infinity
 
EccvmOpsTable eccvm_ops_table
 
UltraEccOpsTable ultra_ops_table
 
std::vector< ECCVMOperationeccvm_ops_reconstructed
 
std::vector< UltraOpultra_ops_reconstructed
 
EccvmRowTracker eccvm_row_tracker
 

Static Private Attributes

static constexpr size_t ULTRA_TABLE_WIDTH = UltraEccOpsTable::TABLE_WIDTH
 

Detailed Description

Used to construct execution trace representations of elliptic curve operations.

Constructs and stores tables of ECC operations in two formats: the ECCVM format and the Ultra-arithmetization (width-4) format. The ECCVM format is used to construct the execution trace for the ECCVM circuit, while the Ultra-arithmetization is used in the Mega circuits and the Translator VM. Both tables are constructed via successive pre-pending of subtables of the same format, where each subtable represents the operations of a single circuit. TODO(https://github.com/AztecProtocol/barretenberg/issues/1267): consider possible efficiency improvements

Definition at line 25 of file ecc_op_queue.hpp.

Member Typedef Documentation

◆ Curve

Definition at line 26 of file ecc_op_queue.hpp.

◆ Fq

Definition at line 29 of file ecc_op_queue.hpp.

◆ Fr

Definition at line 28 of file ecc_op_queue.hpp.

◆ Point

Definition at line 27 of file ecc_op_queue.hpp.

Constructor & Destructor Documentation

◆ ECCOpQueue()

bb::ECCOpQueue::ECCOpQueue ( )
inline

Instantiate an initial ECC op subtable.

Definition at line 54 of file ecc_op_queue.hpp.

Member Function Documentation

◆ add_accumulate()

UltraOp bb::ECCOpQueue::add_accumulate ( const Point to_add)
inline

Write point addition op to queue and natively perform addition.

Parameters
to_add

Definition at line 173 of file ecc_op_queue.hpp.

◆ add_erroneous_equality_op_for_testing()

void bb::ECCOpQueue::add_erroneous_equality_op_for_testing ( )
inline

A testing only method that adds an erroneous equality op to the eccvm ops.

May be used to ensure that ECCVM responds as expected when encountering a bad op

Definition at line 149 of file ecc_op_queue.hpp.

◆ append_eccvm_op()

void bb::ECCOpQueue::append_eccvm_op ( const ECCVMOperation op)
inlineprivate

Append an eccvm operation to the eccvm ops table; update the eccvm row tracker.

Definition at line 270 of file ecc_op_queue.hpp.

◆ construct_and_populate_ultra_ops()

UltraOp bb::ECCOpQueue::construct_and_populate_ultra_ops ( EccOpCode  op_code,
const Point point,
const Fr scalar = Fr::zero() 
)
inlineprivate

Given an ecc operation and its inputs, decompose into ultra format and populate ultra_ops.

Parameters
op_code
point
scalar
Returns
UltraOp

Definition at line 283 of file ecc_op_queue.hpp.

◆ construct_current_ultra_ops_subtable_columns()

std::array< Polynomial< Fr >, ULTRA_TABLE_WIDTH > bb::ECCOpQueue::construct_current_ultra_ops_subtable_columns ( ) const
inline

Definition at line 85 of file ecc_op_queue.hpp.

◆ construct_full_eccvm_ops_table()

void bb::ECCOpQueue::construct_full_eccvm_ops_table ( )
inline

Definition at line 91 of file ecc_op_queue.hpp.

◆ construct_full_ultra_ops_table()

void bb::ECCOpQueue::construct_full_ultra_ops_table ( )
inline

Definition at line 94 of file ecc_op_queue.hpp.

◆ construct_previous_ultra_ops_table_columns()

std::array< Polynomial< Fr >, ULTRA_TABLE_WIDTH > bb::ECCOpQueue::construct_previous_ultra_ops_table_columns ( ) const
inline

Definition at line 79 of file ecc_op_queue.hpp.

◆ construct_ultra_ops_table_columns()

std::array< Polynomial< Fr >, ULTRA_TABLE_WIDTH > bb::ECCOpQueue::construct_ultra_ops_table_columns ( ) const
inline

Definition at line 73 of file ecc_op_queue.hpp.

◆ empty_row_for_testing()

void bb::ECCOpQueue::empty_row_for_testing ( )
inline

Write empty row to queue.

Warning
This is for testing purposes only. Currently no valid use case.

Definition at line 160 of file ecc_op_queue.hpp.

◆ eq_and_reset()

UltraOp bb::ECCOpQueue::eq_and_reset ( )
inline

Write equality op using internal accumulator point.

Returns
current internal accumulator point (prior to reset to 0)

Definition at line 253 of file ecc_op_queue.hpp.

◆ get_accumulator()

Point bb::ECCOpQueue::get_accumulator ( )
inline

Definition at line 166 of file ecc_op_queue.hpp.

◆ get_current_ultra_ops_subtable_num_rows()

size_t bb::ECCOpQueue::get_current_ultra_ops_subtable_num_rows ( ) const
inline

Definition at line 97 of file ecc_op_queue.hpp.

◆ get_eccvm_ops()

std::vector< ECCVMOperation > & bb::ECCOpQueue::get_eccvm_ops ( )
inline

Definition at line 104 of file ecc_op_queue.hpp.

◆ get_num_msm_rows()

size_t bb::ECCOpQueue::get_num_msm_rows ( ) const
inline

Get the number of rows in the 'msm' column section, for all msms in the circuit.

Definition at line 123 of file ecc_op_queue.hpp.

◆ get_num_rows()

size_t bb::ECCOpQueue::get_num_rows ( ) const
inline

Get the number of rows for the current ECCVM circuit.

Definition at line 128 of file ecc_op_queue.hpp.

◆ get_number_of_muls()

uint32_t bb::ECCOpQueue::get_number_of_muls ( ) const
inline

get number of muls for the current ECCVM circuit

Definition at line 133 of file ecc_op_queue.hpp.

◆ get_previous_ultra_ops_table_num_rows()

size_t bb::ECCOpQueue::get_previous_ultra_ops_table_num_rows ( ) const
inline

Definition at line 98 of file ecc_op_queue.hpp.

◆ get_ultra_ops()

std::vector< UltraOp > & bb::ECCOpQueue::get_ultra_ops ( )
inline

Definition at line 112 of file ecc_op_queue.hpp.

◆ get_ultra_ops_table_num_rows()

size_t bb::ECCOpQueue::get_ultra_ops_table_num_rows ( ) const
inline

Definition at line 96 of file ecc_op_queue.hpp.

◆ initialize_new_subtable()

void bb::ECCOpQueue::initialize_new_subtable ( )
inline

Initialize a new subtable for eccvm and ultra ops with the given merge settings.

Definition at line 60 of file ecc_op_queue.hpp.

◆ merge()

void bb::ECCOpQueue::merge ( MergeSettings  settings = MergeSettings::PREPEND,
std::optional< size_t >  ultra_fixed_offset = std::nullopt 
)
inline

Definition at line 66 of file ecc_op_queue.hpp.

◆ mul_accumulate()

UltraOp bb::ECCOpQueue::mul_accumulate ( const Point to_mul,
const Fr scalar 
)
inline

Write multiply and add op to queue and natively perform operation.

Parameters
to_add

Definition at line 190 of file ecc_op_queue.hpp.

◆ no_op_ultra_only()

UltraOp bb::ECCOpQueue::no_op_ultra_only ( )
inline

Writes a no op (i.e. two zero rows) to the ultra ops table but adds no eccvm operations.

We want to be able to add zero rows (and, eventually, random rows https://github.com/AztecProtocol/barretenberg/issues/1360) to the ultra ops table without affecting the operations in the ECCVM.

Definition at line 218 of file ecc_op_queue.hpp.

◆ random_op_ultra_only()

UltraOp bb::ECCOpQueue::random_op_ultra_only ( )
inline

Writes randomness to the ultra ops table but adds no eccvm operations.

This method is used to add randomness to the ultra ops table with the aim of randomising the commitment and evaluations of its corresponding columns

Returns
UltraOp

Definition at line 232 of file ecc_op_queue.hpp.

◆ set_eccvm_ops_for_fuzzing()

void bb::ECCOpQueue::set_eccvm_ops_for_fuzzing ( std::vector< ECCVMOperation > &  eccvm_ops_in)
inline

A fuzzing only method for setting eccvm ops directly.

Definition at line 139 of file ecc_op_queue.hpp.

Member Data Documentation

◆ accumulator

Point bb::ECCOpQueue::accumulator = point_at_infinity
private

Definition at line 34 of file ecc_op_queue.hpp.

◆ eccvm_ops_reconstructed

std::vector<ECCVMOperation> bb::ECCOpQueue::eccvm_ops_reconstructed
private

Definition at line 41 of file ecc_op_queue.hpp.

◆ eccvm_ops_table

EccvmOpsTable bb::ECCOpQueue::eccvm_ops_table
private

Definition at line 36 of file ecc_op_queue.hpp.

◆ eccvm_row_tracker

EccvmRowTracker bb::ECCOpQueue::eccvm_row_tracker
private

Definition at line 48 of file ecc_op_queue.hpp.

◆ point_at_infinity

Point bb::ECCOpQueue::point_at_infinity = Curve::Group::affine_point_at_infinity
private

Definition at line 31 of file ecc_op_queue.hpp.

◆ ultra_ops_reconstructed

std::vector<UltraOp> bb::ECCOpQueue::ultra_ops_reconstructed
private

Definition at line 45 of file ecc_op_queue.hpp.

◆ ultra_ops_table

UltraEccOpsTable bb::ECCOpQueue::ultra_ops_table
private

Definition at line 37 of file ecc_op_queue.hpp.

◆ ULTRA_TABLE_WIDTH

constexpr size_t bb::ECCOpQueue::ULTRA_TABLE_WIDTH = UltraEccOpsTable::TABLE_WIDTH
staticconstexprprivate

Definition at line 30 of file ecc_op_queue.hpp.


The documentation for this class was generated from the following file: