|
| ecc_op_tuple | queue_ecc_add_accum (const g1::affine_element &point) |
| | Add simple point addition operation to the op queue and add corresponding gates.
|
| |
| ecc_op_tuple | queue_ecc_mul_accum (const g1::affine_element &point, const FF &scalar, bool in_finalize=false) |
| | Add point mul-then-accumulate operation to the op queue and add corresponding gates.
|
| |
| ecc_op_tuple | queue_ecc_eq (bool in_finalize=true) |
| | Add point equality operation to the op queue based on the value of the internal accumulator and add corresponding gates.
|
| |
| ecc_op_tuple | queue_ecc_no_op () |
| | Logic for a no-op operation.
|
| |
| void | queue_ecc_random_op () |
| | Mechanism for populating two rows with randomness. This "operation" doesn't return a tuple representing the indices of the ecc op values because it should never be used in subsequent logic.
|
| |
| void | queue_ecc_hiding_op (const curve::BN254::BaseField &Px, const curve::BN254::BaseField &Py) |
| | Add a hiding op with random (possibly non-curve) Px, Py values to the op queue and circuit.
|
| |
| | MegaCircuitBuilder_ (const size_t size_hint=0, std::shared_ptr< ECCOpQueue > op_queue_in=std::make_shared< ECCOpQueue >(), bool is_write_vk_mode=false) |
| |
| | MegaCircuitBuilder_ (std::shared_ptr< ECCOpQueue > op_queue_in) |
| |
| | MegaCircuitBuilder_ (std::shared_ptr< ECCOpQueue > op_queue_in, const std::vector< FF > &witness_values, const std::vector< uint32_t > &public_inputs, const bool is_write_vk_mode) |
| | Constructor from data generated from ACIR.
|
| |
| uint32_t | get_ecc_op_idx (const EccOpCode &op_code) |
| | Convert op code to the witness index for the corresponding op index in the builder.
|
| |
| void | finalize_circuit (const bool ensure_nonzero) |
| |
| void | add_ultra_and_mega_gates_to_ensure_all_polys_are_non_zero () |
| | Ensure all polynomials have at least one non-zero coefficient to avoid commiting to the zero-polynomial. This only adds gates for the Goblin polynomials. Most polynomials are handled via the Ultra method, which should be done by a separate call to the Ultra builder's non zero polynomial gates method.
|
| |
| void | add_mega_gates_to_ensure_all_polys_are_non_zero () |
| | Ensure all polynomials have at least one non-zero coefficient to avoid commiting to the zero-polynomial. This only adds gates for the Goblin polynomials. Most polynomials are handled via the Ultra method, which should be done by a separate call to the Ultra builder's non zero polynomial gates method.
|
| |
| size_t | get_num_constant_gates () const override |
| |
| void | add_public_calldata (const uint32_t &in) |
| | Add a witness variable to the public calldata.
|
| |
| void | add_public_secondary_calldata (const uint32_t &in) |
| | Add a witness variable to secondary_calldata.
|
| |
| void | add_public_return_data (const uint32_t &in) |
| | Add a witness variable to the public return_data.
|
| |
| uint32_t | read_bus_vector (BusId bus_idx, const uint32_t &read_idx_witness_idx) |
| | Read from a databus column.
|
| |
| uint32_t | read_calldata (const uint32_t &read_idx_witness_idx) |
| | Read from calldata and create a corresponding databus read gate.
|
| |
| uint32_t | read_secondary_calldata (const uint32_t &read_idx_witness_idx) |
| | Read from secondary_calldata and create a corresponding databus read gate.
|
| |
| uint32_t | read_return_data (const uint32_t &read_idx_witness_idx) |
| | Read from return_data and create a corresponding databus read gate.
|
| |
| void | append_to_bus_vector (const BusId bus_idx, const uint32_t &witness_idx) |
| |
| const BusVector & | get_calldata () const |
| |
| const BusVector & | get_secondary_calldata () const |
| |
| const BusVector & | get_return_data () const |
| |
| std::string | hash () const |
| | Compute a hash of the circuit.
|
| |
| void | populate_public_inputs_block () |
| | Copy the public input idx data into the public inputs trace block.
|
| |
| void | process_non_native_field_multiplications () |
| | Iterates over the cached_non_native_field_multiplication objects, removes duplicates, and instantiates the corresponding constraints.
|
| |
| | UltraCircuitBuilder_ (const size_t size_hint=0, bool is_write_vk_mode=false) |
| |
| | UltraCircuitBuilder_ (const size_t size_hint, const std::vector< FF > &witness_values, const std::vector< uint32_t > &public_inputs, const bool is_write_vk_mode) |
| | Constructor from data generated from ACIR.
|
| |
| | UltraCircuitBuilder_ (const UltraCircuitBuilder_ &other)=default |
| |
| | UltraCircuitBuilder_ (UltraCircuitBuilder_ &&other)=default |
| |
| UltraCircuitBuilder_ & | operator= (const UltraCircuitBuilder_ &other)=default |
| |
| UltraCircuitBuilder_ & | operator= (UltraCircuitBuilder_ &&other)=default |
| |
| | ~UltraCircuitBuilder_ () override=default |
| |
| void | check_selector_length_consistency () |
| | Debug helper method for ensuring all selectors have the same size.
|
| |
| void | finalize_circuit (const bool ensure_nonzero) |
| |
| void | add_gates_to_ensure_all_polys_are_non_zero () |
| | Ensure all polynomials have at least one non-zero coefficient to avoid commiting to the zero-polynomial.
|
| |
| void | create_add_gate (const add_triple_< FF > &in) |
| | Create an addition gate, where in.a * in.a_scaling + in.b * in.b_scaling + in.c * in.c_scaling + in.const_scaling = 0.
|
| |
| void | create_big_mul_add_gate (const mul_quad_< FF > &in, const bool use_next_gate_w_4=false) |
| | Create a big multiplication-addition gate, where in.a * in.b * in.mul_scaling + in.a * in.a_scaling + in.b * in.b_scaling + in.c * in.c_scaling + in.d * in.d_scaling + in.const_scaling = 0. If include_next_gate_w_4 is enabled, then this sum also adds the value of the 4-th witness at the next index.
|
| |
| void | create_big_add_gate (const add_quad_< FF > &in, const bool use_next_gate_w_4=false) |
| | Create a big addition gate, where in.a * in.a_scaling + in.b * in.b_scaling + in.c * in.c_scaling + in.d * in.d_scaling + in.const_scaling = 0. If include_next_gate_w_4 is enabled, then the sum also adds the value of the 4-th witness at the next index.
|
| |
| void | create_bool_gate (const uint32_t a) |
| | Generate an arithmetic gate equivalent to x^2 - x = 0, which forces x to be 0 or 1.
|
| |
| void | create_arithmetic_gate (const arithmetic_triple_< FF > &in) |
| | A plonk gate with disabled (set to zero) fourth wire. q_m * a * b + q_1 * a + q_2 * b + q_3.
|
| |
| void | create_ecc_add_gate (const ecc_add_gate_< FF > &in) |
| | Create an elliptic curve addition gate.
|
| |
| void | create_ecc_dbl_gate (const ecc_dbl_gate_< FF > &in) |
| | Create an elliptic curve doubling gate.
|
| |
| void | fix_witness (const uint32_t witness_index, const FF &witness_value) |
| | Add a gate equating a particular witness to a constant, fixing its value.
|
| |
| void | create_new_range_constraint (const uint32_t variable_index, const uint64_t target_range, std::string const msg="create_new_range_constraint") |
| | Constrain a variable to a range.
|
| |
| void | create_range_constraint (const uint32_t variable_index, const size_t num_bits, std::string const &msg) |
| |
| uint32_t | put_constant_variable (const FF &variable) |
| |
| size_t | get_num_constant_gates () const override |
| |
| size_t | get_num_finalized_gates () const override |
| | Get the number of gates in a finalized circuit.
|
| |
| size_t | get_num_finalized_gates_inefficient (bool ensure_nonzero=true) const |
| | Get the number of gates in the finalized version of the circuit.
|
| |
| size_t | get_tables_size () const |
| | Get combined size of all tables used in circuit.
|
| |
| size_t | get_finalized_total_circuit_size () const |
| | Get the actual finalized size of a circuit. Assumes the circuit is finalized already.
|
| |
| void | assert_equal_constant (const uint32_t a_idx, const FF &b, std::string const &msg="assert equal constant") |
| |
| plookup::BasicTable & | get_table (const plookup::BasicTableId id) |
| | Get the basic table with provided ID from the set of tables for the present circuit; create it if it doesnt yet exist.
|
| |
| plookup::MultiTable & | get_multitable (const plookup::MultiTableId id) |
| |
| const std::deque< plookup::BasicTable > & | get_lookup_tables () const |
| |
| std::deque< plookup::BasicTable > & | get_lookup_tables () |
| |
| size_t | get_num_lookup_tables () const |
| |
| plookup::ReadData< uint32_t > | create_gates_from_plookup_accumulators (const plookup::MultiTableId &id, const plookup::ReadData< FF > &read_values, const uint32_t key_a_index, std::optional< uint32_t > key_b_index=std::nullopt) |
| | Create gates from pre-computed accumulator values which simultaneously establish individual basic-table lookups and the reconstruction of the desired result from those components.
|
| |
| std::vector< uint32_t > | decompose_into_default_range (const uint32_t variable_index, const uint64_t num_bits, const uint64_t target_range_bitnum=DEFAULT_PLOOKUP_RANGE_BITNUM, std::string const &msg="decompose_into_default_range") |
| |
| void | create_unconstrained_gate (auto &block, const uint32_t &idx_1, const uint32_t &idx_2, const uint32_t &idx_3, const uint32_t &idx_4) |
| | Create a gate with no constraints but with possibly non-trivial wire values.
|
| |
| void | create_unconstrained_gates (const std::vector< uint32_t > &variable_index) |
| |
| void | create_sort_constraint (const std::vector< uint32_t > &variable_index) |
| |
| void | create_sort_constraint_with_edges (const std::vector< uint32_t > &variable_index, const FF &, const FF &) |
| |
| void | assign_tag (const uint32_t variable_index, const uint32_t tag) |
| |
| void | set_tau_at_index (const uint32_t tag_index, const uint32_t tau_index) |
| | Set the tau(tag_index) = tau_index.
|
| |
| void | set_tau_transposition (const uint32_t tag_index_1, const uint32_t tag_index_2) |
| | Add a transposition to tau.
|
| |
| uint32_t | get_new_tag () |
| |
| RangeList | create_range_list (const uint64_t target_range) |
| |
| void | process_range_list (RangeList &list) |
| |
| void | process_range_lists () |
| |
| void | apply_memory_selectors (const MEMORY_SELECTORS type) |
| | Enable the memory gate of particular type.
|
| |
| void | apply_nnf_selectors (const NNF_SELECTORS type) |
| | Enable the nnf gate of particular type.
|
| |
| void | range_constrain_two_limbs (const uint32_t lo_idx, const uint32_t hi_idx, const size_t lo_limb_bits=DEFAULT_NON_NATIVE_FIELD_LIMB_BITS, const size_t hi_limb_bits=DEFAULT_NON_NATIVE_FIELD_LIMB_BITS, std::string const &msg="range_constrain_two_limbs") |
| |
| std::array< uint32_t, 2 > | evaluate_non_native_field_multiplication (const non_native_multiplication_witnesses< FF > &input) |
| | Create gates for a full non-native field multiplication identity a * b = q * p + r.
|
| |
| std::array< uint32_t, 2 > | queue_partial_non_native_field_multiplication (const non_native_partial_multiplication_witnesses< FF > &input) |
| | Queue the addition of gates constraining the limb-multiplication part of a non native field mul.
|
| |
| std::array< uint32_t, 5 > | evaluate_non_native_field_subtraction (add_simple limb0, add_simple limb1, add_simple limb2, add_simple limb3, std::tuple< uint32_t, uint32_t, FF > limbp) |
| | Construct gates for non-native field subtraction.
|
| |
| std::array< uint32_t, 5 > | evaluate_non_native_field_addition (add_simple limb0, add_simple limb1, add_simple limb2, add_simple limb3, std::tuple< uint32_t, uint32_t, FF > limbp) |
| | Construct gates for non-native field addition.
|
| |
| size_t | create_ROM_array (const size_t array_size) |
| | Create a new read-only memory region (a.k.a. ROM table)
|
| |
| void | set_ROM_element (const size_t rom_id, const size_t index_value, const uint32_t value_witness) |
| | Initialize a rom cell to equal value_witness
|
| |
| void | set_ROM_element_pair (const size_t rom_id, const size_t index_value, const std::array< uint32_t, 2 > &value_witnesses) |
| | Initialize a ROM array element with a pair of witness values.
|
| |
| uint32_t | read_ROM_array (const size_t rom_id, const uint32_t index_witness) |
| | Read a single element from ROM.
|
| |
| std::array< uint32_t, 2 > | read_ROM_array_pair (const size_t rom_id, const uint32_t index_witness) |
| | Read a pair of elements from ROM.
|
| |
| size_t | create_RAM_array (const size_t array_size) |
| | Create a new updatable memory region.
|
| |
| void | init_RAM_element (const size_t ram_id, const size_t index_value, const uint32_t value_witness) |
| | Initialize a RAM cell to equal value_witness
|
| |
| uint32_t | read_RAM_array (const size_t ram_id, const uint32_t index_witness) |
| |
| void | write_RAM_array (const size_t ram_id, const uint32_t index_witness, const uint32_t value_witness) |
| |
| void | create_poseidon2_external_gate (const poseidon2_external_gate_< FF > &in) |
| | Poseidon2 external round gate, activates the q_poseidon2_external selector and relation.
|
| |
| void | create_poseidon2_internal_gate (const poseidon2_internal_gate_< FF > &in) |
| | Poseidon2 internal round gate, activates the q_poseidon2_internal selector and relation.
|
| |
| const std::vector< uint32_t > & | get_used_witnesses () const |
| |
| const std::unordered_set< uint32_t > & | get_finalize_witnesses () const |
| |
| void | update_used_witnesses (uint32_t var_idx) |
| | Add a witness index to the boomerang exclusion list.
|
| |
| void | update_used_witnesses (const std::vector< uint32_t > &used_indices) |
| | Add a list of witness indices to the boomerang exclusion list.
|
| |
| void | update_finalize_witnesses (uint32_t var_idx) |
| | Add a witness index to the finalize exclusion list.
|
| |
| void | update_finalize_witnesses (const std::vector< uint32_t > &finalize_indices) |
| | Add a list of witness indices to the finalize exclusion list.
|
| |
| msgpack::sbuffer | export_circuit () override |
| |
| | CircuitBuilderBase (size_t size_hint=0, bool is_write_vk_mode=false) |
| |
| | CircuitBuilderBase (const CircuitBuilderBase &other)=default |
| |
| | CircuitBuilderBase (CircuitBuilderBase &&other) noexcept=default |
| |
| CircuitBuilderBase & | operator= (const CircuitBuilderBase &other)=default |
| |
| CircuitBuilderBase & | operator= (CircuitBuilderBase &&other) noexcept=default |
| |
| virtual | ~CircuitBuilderBase ()=default |
| |
| bool | operator== (const CircuitBuilderBase &other) const=default |
| |
| virtual size_t | get_num_variables () const |
| |
| size_t | num_gates () const |
| |
| void | increment_num_gates (size_t count=1) |
| |
| const std::unordered_map< uint32_t, uint32_t > & | tau () const |
| |
| uint32_t | zero_idx () const |
| |
| const std::vector< FF > & | get_variables () const |
| |
| 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 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) |
| | Add a variable to variables.
|
| |
| uint32_t | add_variable (const OT &in)=delete |
| |
| virtual uint32_t | add_public_variable (const FF &in) |
| | Add a public variable to variables.
|
| |
| uint32_t | add_public_variable (const OT &in)=delete |
| |
| 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 |
| |
| virtual void | set_variable_name (uint32_t index, const std::string &name) |
| | Assign a name to a variable (equivalence class)
|
| |
| bool | failed () const |
| |
| const std::string & | err () const |
| |
| void | failure (std::string msg) |
| |
| bool | is_write_vk_mode () const |
| |