Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
bb::CircuitBuilderBase< FF_ > Class Template Referenceabstract

#include <circuit_builder_base.hpp>

Public Types

using FF = FF_
 
using EmbeddedCurve = std::conditional_t< std::same_as< FF, bb::g1::Fq >, curve::BN254, curve::Grumpkin >
 

Public Member Functions

 CircuitBuilderBase (size_t size_hint=0, bool has_dummy_witnesses=false)
 
 CircuitBuilderBase (const CircuitBuilderBase &other)=default
 
 CircuitBuilderBase (CircuitBuilderBase &&other) noexcept=default
 
CircuitBuilderBaseoperator= (const CircuitBuilderBase &other)=default
 
CircuitBuilderBaseoperator= (CircuitBuilderBase &&other) noexcept=default
 
virtual ~CircuitBuilderBase ()=default
 
bool operator== (const CircuitBuilderBase &other) const =default
 
virtual size_t get_num_finalized_gates () const
 
virtual size_t get_estimated_num_finalized_gates () const
 
virtual void print_num_estimated_finalized_gates () const
 
virtual size_t get_num_variables () const
 
virtual void create_add_gate (const add_triple_< FF > &in)=0
 
virtual void create_mul_gate (const mul_triple_< FF > &in)=0
 
virtual void create_bool_gate (const uint32_t a)=0
 
virtual void create_poly_gate (const poly_triple_< FF > &in)=0
 
virtual size_t get_num_constant_gates () const =0
 
const std::vector< FF > & get_variables () const
 
uint32_t get_first_variable_in_class (uint32_t index) const
 
void update_real_variable_indices (uint32_t index, uint32_t new_real_index)
 
FF get_variable (const uint32_t index) const
 Get the value of the variable v_{index}.
 
void set_variable (const uint32_t index, const FF &value)
 Set the value of the variable pointed to by a witness index.
 
const FFget_variable_reference (const uint32_t index) const
 
uint32_t get_public_input_index (const uint32_t witness_index) const
 
FF get_public_input (const uint32_t index) const
 
const std::vector< uint32_t > & public_inputs () const
 
void finalize_public_inputs ()
 Set the public_inputs_finalized_ to true to prevent any new public inputs from being added.
 
void initialize_public_inputs (const std::vector< uint32_t > &public_inputs)
 Directly initialize the public inputs vector.
 
virtual uint32_t add_variable (const FF &in)
 
virtual void set_variable_name (uint32_t index, const std::string &name)
 
virtual void update_variable_names (uint32_t index)
 
virtual msgpack::sbuffer export_circuit ()
 
virtual uint32_t add_public_variable (const FF &in)
 
virtual uint32_t set_public_input (uint32_t witness_index)
 Make a witness variable public.
 
virtual void assert_equal (uint32_t a_idx, uint32_t b_idx, std::string const &msg="assert_equal")
 
size_t get_circuit_subgroup_size (size_t num_gates) const
 
size_t num_public_inputs () const
 
void assert_valid_variables (const std::vector< uint32_t > &variable_indices)
 
bool failed () const
 
const std::string & err () const
 
void set_err (std::string msg)
 
void failure (std::string msg)
 

Public Attributes

size_t num_gates = 0
 
bool has_dummy_witnesses = false
 
std::unordered_map< uint32_t, std::string > variable_names
 
std::vector< uint32_t > next_var_index
 
std::vector< uint32_t > prev_var_index
 
std::vector< uint32_t > real_variable_index
 
std::vector< uint32_t > real_variable_tags
 
uint32_t current_tag = DUMMY_TAG
 
std::map< uint32_t, uint32_t > tau
 
bool is_recursive_circuit = false
 
bool _failed = false
 
std::string _err
 
uint32_t zero_idx = 0
 
uint32_t one_idx = 1
 

Static Public Attributes

static constexpr uint32_t REAL_VARIABLE = UINT32_MAX - 1
 
static constexpr uint32_t FIRST_VARIABLE_IN_CLASS = UINT32_MAX - 2
 

Private Attributes

std::vector< FFvariables
 
std::vector< uint32_t > public_inputs_
 
bool public_inputs_finalized_ = false
 

Detailed Description

template<typename FF_>
class bb::CircuitBuilderBase< FF_ >

Definition at line 22 of file circuit_builder_base.hpp.

Member Typedef Documentation

◆ EmbeddedCurve

template<typename FF_ >
using bb::CircuitBuilderBase< FF_ >::EmbeddedCurve = std::conditional_t<std::same_as<FF, bb::g1::Fq>, curve::BN254, curve::Grumpkin>

Definition at line 25 of file circuit_builder_base.hpp.

◆ FF

template<typename FF_ >
using bb::CircuitBuilderBase< FF_ >::FF = FF_

Definition at line 24 of file circuit_builder_base.hpp.

Constructor & Destructor Documentation

◆ CircuitBuilderBase() [1/3]

template<typename FF_ >
bb::CircuitBuilderBase< FF_ >::CircuitBuilderBase ( size_t  size_hint = 0,
bool  has_dummy_witnesses = false 
)

Definition at line 14 of file circuit_builder_base_impl.hpp.

◆ CircuitBuilderBase() [2/3]

template<typename FF_ >
bb::CircuitBuilderBase< FF_ >::CircuitBuilderBase ( const CircuitBuilderBase< FF_ > &  other)
default

◆ CircuitBuilderBase() [3/3]

template<typename FF_ >
bb::CircuitBuilderBase< FF_ >::CircuitBuilderBase ( CircuitBuilderBase< FF_ > &&  other)
defaultnoexcept

◆ ~CircuitBuilderBase()

template<typename FF_ >
virtual bb::CircuitBuilderBase< FF_ >::~CircuitBuilderBase ( )
virtualdefault

Member Function Documentation

◆ add_public_variable()

template<typename FF_ >
uint32_t bb::CircuitBuilderBase< FF_ >::add_public_variable ( const FF in)
virtual

Add a public variable to variables

The only difference between this and add_variable is that here it is also added to the public_inputs vector

Parameters
inThe value of the variable
Returns
The index of the new variable in the variables vector

Definition at line 146 of file circuit_builder_base_impl.hpp.

◆ add_variable()

template<typename FF_ >
uint32_t bb::CircuitBuilderBase< FF_ >::add_variable ( const FF in)
virtual

Add a variable to variables

Parameters
inThe value of the variable
Returns
The index of the new variable in the variables vector

Definition at line 83 of file circuit_builder_base_impl.hpp.

◆ assert_equal()

template<typename FF >
void bb::CircuitBuilderBase< FF >::assert_equal ( uint32_t  a_idx,
uint32_t  b_idx,
std::string const &  msg = "assert_equal" 
)
virtual

Join variable class b to variable class a.

Parameters
a_variable_idxIndex of a variable in class a.
b_variable_idxIndex of a variable in class b.
msgClass tag.

Definition at line 179 of file circuit_builder_base_impl.hpp.

◆ assert_valid_variables()

template<typename FF_ >
void bb::CircuitBuilderBase< FF_ >::assert_valid_variables ( const std::vector< uint32_t > &  variable_indices)

Definition at line 213 of file circuit_builder_base_impl.hpp.

◆ create_add_gate()

template<typename FF_ >
virtual void bb::CircuitBuilderBase< FF_ >::create_add_gate ( const add_triple_< FF > &  in)
pure virtual

◆ create_bool_gate()

template<typename FF_ >
virtual void bb::CircuitBuilderBase< FF_ >::create_bool_gate ( const uint32_t  a)
pure virtual

◆ create_mul_gate()

template<typename FF_ >
virtual void bb::CircuitBuilderBase< FF_ >::create_mul_gate ( const mul_triple_< FF > &  in)
pure virtual

◆ create_poly_gate()

template<typename FF_ >
virtual void bb::CircuitBuilderBase< FF_ >::create_poly_gate ( const poly_triple_< FF > &  in)
pure virtual

◆ err()

template<typename FF_ >
const std::string & bb::CircuitBuilderBase< FF_ >::err ( ) const

Definition at line 225 of file circuit_builder_base_impl.hpp.

◆ export_circuit()

template<typename FF_ >
msgpack::sbuffer bb::CircuitBuilderBase< FF_ >::export_circuit ( )
virtual

Export the existing circuit as msgpack compatible buffer.

Returns
msgpack compatible buffer

Reimplemented in bb::UltraCircuitBuilder_< ExecutionTrace_ >, and bb::UltraCircuitBuilder_< MegaExecutionTraceBlocks >.

Definition at line 140 of file circuit_builder_base_impl.hpp.

◆ failed()

template<typename FF_ >
bool bb::CircuitBuilderBase< FF_ >::failed ( ) const

Definition at line 220 of file circuit_builder_base_impl.hpp.

◆ failure()

template<typename FF_ >
void bb::CircuitBuilderBase< FF_ >::failure ( std::string  msg)

Definition at line 235 of file circuit_builder_base_impl.hpp.

◆ finalize_public_inputs()

template<typename FF_ >
void bb::CircuitBuilderBase< FF_ >::finalize_public_inputs ( )
inline

Set the public_inputs_finalized_ to true to prevent any new public inputs from being added.

This is used, for example, for special internal public inputs (like pairing inputs) which we want to ensure are placed at the end of the public inputs vector.

Definition at line 167 of file circuit_builder_base.hpp.

◆ get_circuit_subgroup_size()

template<typename FF_ >
size_t bb::CircuitBuilderBase< FF_ >::get_circuit_subgroup_size ( size_t  num_gates) const

Definition at line 131 of file circuit_builder_base_impl.hpp.

◆ get_estimated_num_finalized_gates()

template<typename FF_ >
size_t bb::CircuitBuilderBase< FF_ >::get_estimated_num_finalized_gates ( ) const
virtual

◆ get_first_variable_in_class()

template<typename FF_ >
uint32_t bb::CircuitBuilderBase< FF_ >::get_first_variable_in_class ( uint32_t  index) const

Get the index of the first variable in class.

Parameters
indexThe index of the variable you want to look up.
Returns
The index of the first variable in the same class as the submitted index.

Definition at line 45 of file circuit_builder_base_impl.hpp.

◆ get_num_constant_gates()

template<typename FF_ >
virtual size_t bb::CircuitBuilderBase< FF_ >::get_num_constant_gates ( ) const
pure virtual

◆ get_num_finalized_gates()

template<typename FF_ >
size_t bb::CircuitBuilderBase< FF_ >::get_num_finalized_gates ( ) const
virtual

◆ get_num_variables()

template<typename FF_ >
size_t bb::CircuitBuilderBase< FF_ >::get_num_variables ( ) const
virtual

Definition at line 40 of file circuit_builder_base_impl.hpp.

◆ get_public_input()

template<typename FF_ >
CircuitBuilderBase< FF_ >::FF bb::CircuitBuilderBase< FF_ >::get_public_input ( const uint32_t  index) const

Definition at line 77 of file circuit_builder_base_impl.hpp.

◆ get_public_input_index()

template<typename FF_ >
uint32_t bb::CircuitBuilderBase< FF_ >::get_public_input_index ( const uint32_t  witness_index) const

Definition at line 63 of file circuit_builder_base_impl.hpp.

◆ get_variable()

template<typename FF_ >
FF bb::CircuitBuilderBase< FF_ >::get_variable ( const uint32_t  index) const
inline

Get the value of the variable v_{index}.

Parameters
indexThe index of the variable.
Returns
The value of the variable.

Definition at line 119 of file circuit_builder_base.hpp.

◆ get_variable_reference()

template<typename FF_ >
const FF & bb::CircuitBuilderBase< FF_ >::get_variable_reference ( const uint32_t  index) const
inline

Get a reference to the variable v_{index}.

We need this function for check_circuit functions.

Parameters
indexThe index of the variable.
Returns
The value of the variable.

Definition at line 150 of file circuit_builder_base.hpp.

◆ get_variables()

template<typename FF_ >
const std::vector< FF > & bb::CircuitBuilderBase< FF_ >::get_variables ( ) const
inline

Definition at line 95 of file circuit_builder_base.hpp.

◆ initialize_public_inputs()

template<typename FF_ >
void bb::CircuitBuilderBase< FF_ >::initialize_public_inputs ( const std::vector< uint32_t > &  public_inputs)
inline

Directly initialize the public inputs vector.

Used e.g. in the case of a circuit generated from ACIR where some public input indices are known at the time of circuit construction.

Definition at line 175 of file circuit_builder_base.hpp.

◆ num_public_inputs()

template<typename FF_ >
size_t bb::CircuitBuilderBase< FF_ >::num_public_inputs ( ) const
inline

Definition at line 232 of file circuit_builder_base.hpp.

◆ operator=() [1/2]

template<typename FF_ >
CircuitBuilderBase & bb::CircuitBuilderBase< FF_ >::operator= ( CircuitBuilderBase< FF_ > &&  other)
defaultnoexcept

◆ operator=() [2/2]

template<typename FF_ >
CircuitBuilderBase & bb::CircuitBuilderBase< FF_ >::operator= ( const CircuitBuilderBase< FF_ > &  other)
default

◆ operator==()

template<typename FF_ >
bool bb::CircuitBuilderBase< FF_ >::operator== ( const CircuitBuilderBase< FF_ > &  other) const
default

◆ print_num_estimated_finalized_gates()

template<typename FF_ >
void bb::CircuitBuilderBase< FF_ >::print_num_estimated_finalized_gates ( ) const
virtual

◆ public_inputs()

template<typename FF_ >
const std::vector< uint32_t > & bb::CircuitBuilderBase< FF_ >::public_inputs ( ) const
inline

Definition at line 160 of file circuit_builder_base.hpp.

◆ set_err()

template<typename FF_ >
void bb::CircuitBuilderBase< FF_ >::set_err ( std::string  msg)

Definition at line 230 of file circuit_builder_base_impl.hpp.

◆ set_public_input()

template<typename FF_ >
uint32_t bb::CircuitBuilderBase< FF_ >::set_public_input ( uint32_t  witness_index)
virtual

Make a witness variable public.

Parameters
witness_indexThe index of the witness.
Returns
uint32_t The index of the witness in the public inputs vector.

Definition at line 154 of file circuit_builder_base_impl.hpp.

◆ set_variable()

template<typename FF_ >
void bb::CircuitBuilderBase< FF_ >::set_variable ( const uint32_t  index,
const FF value 
)
inline

Set the value of the variable pointed to by a witness index.

The witness value pointed to by a witness index is determined by the mapping of the input witness index to the corresponding "real variable index" which may agree with the input index or it may point to a different location within the variables array due to copy contraints that have been imposed, e.g. by assert_equal.

Note
This has the same effect on the resulting circuit as assert_equal(add_variable(value), index) but has the benefit of not adding an additional variable to the circuit unnecessarily.
Parameters
index
value

Definition at line 136 of file circuit_builder_base.hpp.

◆ set_variable_name()

template<typename FF_ >
void bb::CircuitBuilderBase< FF_ >::set_variable_name ( uint32_t  index,
const std::string &  name 
)
virtual

Assign a name to a variable(equivalence class). Should be one name per equivalence class.

Parameters
indexIndex of the variable you want to name.
nameName of the variable.

Definition at line 94 of file circuit_builder_base_impl.hpp.

◆ update_real_variable_indices()

template<typename FF_ >
void bb::CircuitBuilderBase< FF_ >::update_real_variable_indices ( uint32_t  index,
uint32_t  new_real_index 
)

Update all variables from index in equivalence class to have real variable new_real_index.

Parameters
indexThe index of a variable in the class we're updating.
new_real_indexThe index of the real variable to update to.

Definition at line 54 of file circuit_builder_base_impl.hpp.

◆ update_variable_names()

template<typename FF_ >
void bb::CircuitBuilderBase< FF_ >::update_variable_names ( uint32_t  index)
virtual

After assert_equal() merge two class names if present. Preserves the first name in class.

Parameters
indexIndex of the variable you have previously named and used in assert_equal.

Definition at line 106 of file circuit_builder_base_impl.hpp.

Member Data Documentation

◆ _err

template<typename FF_ >
std::string bb::CircuitBuilderBase< FF_ >::_err

Definition at line 67 of file circuit_builder_base.hpp.

◆ _failed

template<typename FF_ >
bool bb::CircuitBuilderBase< FF_ >::_failed = false

Definition at line 66 of file circuit_builder_base.hpp.

◆ current_tag

template<typename FF_ >
uint32_t bb::CircuitBuilderBase< FF_ >::current_tag = DUMMY_TAG

Definition at line 53 of file circuit_builder_base.hpp.

◆ FIRST_VARIABLE_IN_CLASS

template<typename FF_ >
constexpr uint32_t bb::CircuitBuilderBase< FF_ >::FIRST_VARIABLE_IN_CLASS = UINT32_MAX - 2
staticconstexpr

Definition at line 69 of file circuit_builder_base.hpp.

◆ has_dummy_witnesses

template<typename FF_ >
bool bb::CircuitBuilderBase< FF_ >::has_dummy_witnesses = false

Definition at line 38 of file circuit_builder_base.hpp.

◆ is_recursive_circuit

template<typename FF_ >
bool bb::CircuitBuilderBase< FF_ >::is_recursive_circuit = false

Definition at line 64 of file circuit_builder_base.hpp.

◆ next_var_index

template<typename FF_ >
std::vector<uint32_t> bb::CircuitBuilderBase< FF_ >::next_var_index

Definition at line 43 of file circuit_builder_base.hpp.

◆ num_gates

template<typename FF_ >
size_t bb::CircuitBuilderBase< FF_ >::num_gates = 0

Definition at line 36 of file circuit_builder_base.hpp.

◆ one_idx

template<typename FF_ >
uint32_t bb::CircuitBuilderBase< FF_ >::one_idx = 1

Definition at line 87 of file circuit_builder_base.hpp.

◆ prev_var_index

template<typename FF_ >
std::vector<uint32_t> bb::CircuitBuilderBase< FF_ >::prev_var_index

Definition at line 45 of file circuit_builder_base.hpp.

◆ public_inputs_

template<typename FF_ >
std::vector<uint32_t> bb::CircuitBuilderBase< FF_ >::public_inputs_
private

Definition at line 31 of file circuit_builder_base.hpp.

◆ public_inputs_finalized_

template<typename FF_ >
bool bb::CircuitBuilderBase< FF_ >::public_inputs_finalized_ = false
private

Definition at line 33 of file circuit_builder_base.hpp.

◆ REAL_VARIABLE

template<typename FF_ >
constexpr uint32_t bb::CircuitBuilderBase< FF_ >::REAL_VARIABLE = UINT32_MAX - 1
staticconstexpr

Definition at line 68 of file circuit_builder_base.hpp.

◆ real_variable_index

template<typename FF_ >
std::vector<uint32_t> bb::CircuitBuilderBase< FF_ >::real_variable_index

Definition at line 51 of file circuit_builder_base.hpp.

◆ real_variable_tags

template<typename FF_ >
std::vector<uint32_t> bb::CircuitBuilderBase< FF_ >::real_variable_tags

Definition at line 52 of file circuit_builder_base.hpp.

◆ tau

template<typename FF_ >
std::map<uint32_t, uint32_t> bb::CircuitBuilderBase< FF_ >::tau

Definition at line 57 of file circuit_builder_base.hpp.

◆ variable_names

template<typename FF_ >
std::unordered_map<uint32_t, std::string> bb::CircuitBuilderBase< FF_ >::variable_names

Definition at line 40 of file circuit_builder_base.hpp.

◆ variables

template<typename FF_ >
std::vector<FF> bb::CircuitBuilderBase< FF_ >::variables
private

Definition at line 29 of file circuit_builder_base.hpp.

◆ zero_idx

template<typename FF_ >
uint32_t bb::CircuitBuilderBase< FF_ >::zero_idx = 0

Definition at line 86 of file circuit_builder_base.hpp.


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