2#include "barretenberg/ecc/curves/bn254/bn254.hpp"
3#include "barretenberg/ecc/curves/grumpkin/grumpkin.hpp"
4#include "barretenberg/proof_system/types/circuit_type.hpp"
5#include "barretenberg/proof_system/types/merkle_hash_type.hpp"
6#include "barretenberg/proof_system/types/pedersen_commitment_type.hpp"
7#include "circuit_builder_base.hpp"
10namespace proof_system {
15 static constexpr size_t NUM_WIRES = Arithmetization::NUM_WIRES;
17 static constexpr size_t program_width = Arithmetization::NUM_WIRES;
18 static constexpr size_t num_selectors = Arithmetization::NUM_SELECTORS;
19 std::vector<std::string> selector_names = Arithmetization::selector_names;
21 static constexpr std::string_view NAME_STRING =
"StandardArithmetization";
22 static constexpr CircuitType CIRCUIT_TYPE = CircuitType::STANDARD;
23 static constexpr merkle::HashType merkle_hash_type = merkle::HashType::FIXED_BASE_PEDERSEN;
24 static constexpr pedersen::CommitmentType commitment_type = pedersen::CommitmentType::FIXED_BASE_PEDERSEN;
26 std::array<std::vector<uint32_t, barretenberg::ContainerSlabAllocator<uint32_t>>, NUM_WIRES> wires;
29 using WireVector = std::vector<uint32_t, barretenberg::ContainerSlabAllocator<uint32_t>>;
30 using SelectorVector = std::vector<FF, barretenberg::ContainerSlabAllocator<FF>>;
32 WireVector& w_l() {
return std::get<0>(wires); };
33 WireVector& w_r() {
return std::get<1>(wires); };
34 WireVector& w_o() {
return std::get<2>(wires); };
36 const WireVector& w_l()
const {
return std::get<0>(wires); };
37 const WireVector& w_r()
const {
return std::get<1>(wires); };
38 const WireVector& w_o()
const {
return std::get<2>(wires); };
40 SelectorVector& q_m() {
return this->selectors.q_m(); };
41 SelectorVector& q_1() {
return this->selectors.q_1(); };
42 SelectorVector& q_2() {
return this->selectors.q_2(); };
43 SelectorVector& q_3() {
return this->selectors.q_3(); };
44 SelectorVector& q_c() {
return this->selectors.q_c(); };
46 const SelectorVector& q_m()
const {
return this->selectors.q_m(); };
47 const SelectorVector& q_1()
const {
return this->selectors.q_1(); };
48 const SelectorVector& q_2()
const {
return this->selectors.q_2(); };
49 const SelectorVector& q_3()
const {
return this->selectors.q_3(); };
50 const SelectorVector& q_c()
const {
return this->selectors.q_c(); };
52 static constexpr size_t UINT_LOG2_BASE = 2;
57 std::map<FF, uint32_t> constant_variable_indices;
62 selectors.reserve(size_hint);
63 w_l().reserve(size_hint);
64 w_r().reserve(size_hint);
65 w_o().reserve(size_hint);
70 this->zero_idx = put_constant_variable(FF::zero());
72 this->one_idx = put_constant_variable(FF::one());
75 create_poly_gate({ this->one_idx, this->one_idx, this->one_idx, 1, 1, 1, 1, -4 });
83 constant_variable_indices = other.constant_variable_indices;
85 selectors = other.selectors;
90 void assert_equal_constant(uint32_t
const a_idx, FF
const& b, std::string
const& msg =
"assert equal constant");
97 void create_big_add_gate_with_bit_extraction(
const add_quad_<FF>& in);
103 void create_fixed_group_add_gate_final(
const add_quad_<FF>& in);
108 void fix_witness(
const uint32_t witness_index,
const FF& witness_value);
110 std::vector<uint32_t> decompose_into_base4_accumulators(
const uint32_t witness_index,
111 const size_t num_bits,
112 std::string
const& msg =
"create_range_constraint");
114 void create_range_constraint(
const uint32_t variable_index,
115 const size_t num_bits,
116 std::string
const& msg =
"create_range_constraint")
118 decompose_into_base4_accumulators(variable_index, num_bits, msg);
123 const size_t num_bits,
129 uint32_t put_constant_variable(
const FF& variable);
131 size_t get_num_constant_gates()
const override {
return 0; }
138 struct CircuitSchema {
140 std::vector<uint32_t> public_inps;
141 std::unordered_map<uint32_t, std::string> vars_of_interest;
142 std::vector<FF> variables;
143 std::vector<std::vector<FF>> selectors;
144 std::vector<std::vector<uint32_t>> wires;
145 MSGPACK_FIELDS(modulus, public_inps, vars_of_interest, variables, selectors, wires);
Definition: circuit_builder_base.hpp:14
Definition: standard_circuit_builder.hpp:12
void create_poly_gate(const poly_triple_< FF > &in) override
Definition: standard_circuit_builder.cpp:230
msgpack::sbuffer export_circuit() override
Definition: standard_circuit_builder.cpp:519
bool check_circuit()
Definition: standard_circuit_builder.cpp:494
void create_bool_gate(const uint32_t a) override
Definition: standard_circuit_builder.cpp:208
void create_balanced_add_gate(const add_quad_< FF > &in)
Definition: standard_circuit_builder.cpp:64
void create_big_add_gate(const add_quad_< FF > &in)
Definition: standard_circuit_builder.cpp:43
void create_mul_gate(const mul_triple_< FF > &in) override
Definition: standard_circuit_builder.cpp:186
void create_add_gate(const add_triple_< FF > &in) override
Definition: standard_circuit_builder.cpp:20
Definition: gate_data.hpp:115
Definition: gate_data.hpp:20
Definition: gate_data.hpp:10
Definition: gate_data.hpp:99
Definition: gate_data.hpp:109
Definition: gate_data.hpp:31
Definition: gate_data.hpp:43
Definition: gate_data.hpp:51