38 uint32_t a_idx = circuit_builder.add_public_variable(
a);
42 uint32_t b_idx = circuit_builder.add_variable(
b);
43 uint32_t c_idx = circuit_builder.add_variable(c);
44 uint32_t d_idx = circuit_builder.add_variable(d);
45 for (
size_t i = 0; i < 16; i++) {
46 circuit_builder.create_add_gate({ a_idx, b_idx, c_idx, 1, 1, -1, 0 });
47 circuit_builder.create_add_gate({ d_idx, c_idx, a_idx, 1, -1, -1, 0 });
52 uint32_t e_idx = circuit_builder.add_variable(e);
54 uint32_t zero_idx = circuit_builder.zero_idx();
55 circuit_builder.create_big_add_gate({ a_idx, b_idx, c_idx, d_idx, -1, -1, -1, -1, 0 },
true);
56 circuit_builder.create_big_add_gate({ zero_idx, zero_idx, zero_idx, e_idx, 0, 0, 0, 0, 0 },
false);
66 .
slice(plookup::fixed_base::table::BITS_PER_LO_SCALAR,
67 plookup::fixed_base::table::BITS_PER_LO_SCALAR + plookup::fixed_base::table::BITS_PER_HI_SCALAR);
69 const auto input_hi_index = circuit_builder.add_variable(
FF(input_hi));
70 const auto input_lo_index = circuit_builder.add_variable(
FF(input_lo));
72 const auto sequence_data_hi =
74 const auto sequence_data_lo =
77 circuit_builder.create_gates_from_plookup_accumulators(
78 plookup::MultiTableId::FIXED_BASE_LEFT_HI, sequence_data_hi, input_hi_index);
79 circuit_builder.create_gates_from_plookup_accumulators(
80 plookup::MultiTableId::FIXED_BASE_LEFT_LO, sequence_data_lo, input_lo_index);
87 auto a_idx = circuit_builder.add_variable(
FF(0));
88 auto b_idx = circuit_builder.add_variable(
FF(1));
89 auto c_idx = circuit_builder.add_variable(
FF(2));
90 auto d_idx = circuit_builder.add_variable(
FF(3));
91 circuit_builder.create_sort_constraint({ a_idx, b_idx, c_idx, d_idx });
98 uint32_t ram_values[8]{
105 size_t ram_id = circuit_builder.create_RAM_array(8);
107 for (
size_t i = 0; i < 8; ++i) {
108 circuit_builder.init_RAM_element(ram_id, i, ram_values[i]);
111 auto a_idx = circuit_builder.read_RAM_array(ram_id, circuit_builder.add_variable(
FF(5)));
112 EXPECT_EQ(a_idx != ram_values[5],
true);
114 auto b_idx = circuit_builder.read_RAM_array(ram_id, circuit_builder.add_variable(
FF(4)));
115 auto c_idx = circuit_builder.read_RAM_array(ram_id, circuit_builder.add_variable(
FF(1)));
117 circuit_builder.write_RAM_array(ram_id, circuit_builder.add_variable(
FF(4)), circuit_builder.add_variable(
FF(500)));
118 auto d_idx = circuit_builder.read_RAM_array(ram_id, circuit_builder.add_variable(
FF(4)));
120 EXPECT_EQ(circuit_builder.get_variable(d_idx), 500);
123 const auto e_value = circuit_builder.get_variable(a_idx) + circuit_builder.get_variable(b_idx) +
124 circuit_builder.get_variable(c_idx) + circuit_builder.get_variable(d_idx);
125 auto e_idx = circuit_builder.add_variable(e_value);
127 circuit_builder.create_big_add_gate({ a_idx, b_idx, c_idx, d_idx, -1, -1, -1, -1, 0 },
true);
128 circuit_builder.create_big_add_gate(
130 circuit_builder.zero_idx(),
131 circuit_builder.zero_idx(),
132 circuit_builder.zero_idx(),
151 uint32_t x1 = circuit_builder.add_variable(p1.
x);
152 uint32_t y1 = circuit_builder.add_variable(p1.
y);
153 uint32_t x2 = circuit_builder.add_variable(p2.
x);
154 uint32_t y2 = circuit_builder.add_variable(p2.
y);
155 uint32_t x3 = circuit_builder.add_variable(p3.
x);
156 uint32_t y3 = circuit_builder.add_variable(p3.
y);
158 circuit_builder.create_ecc_add_gate({ x1, y1, x2, y2, x3, y3, -1 });
199 create_some_add_gates<Flavor>(
builder);
200 create_some_lookup_gates<Flavor>(
builder);
201 create_some_delta_range_constraint_gates<Flavor>(
builder);
202 create_some_elliptic_curve_addition_gates<Flavor>(
builder);
203 create_some_RAM_gates<Flavor>(
builder);
212 for (
auto selector : prover_inst->polynomials.get_gate_selectors()) {
216 auto& prover_polynomials = prover_inst->polynomials;
217 auto params = prover_inst->relation_parameters;
220 EXPECT_TRUE(relation_failures.empty());
232 create_some_add_gates<Flavor>(
builder);
233 create_some_lookup_gates<Flavor>(
builder);
234 create_some_delta_range_constraint_gates<Flavor>(
builder);
235 create_some_elliptic_curve_addition_gates<Flavor>(
builder);
236 create_some_RAM_gates<Flavor>(
builder);
237 create_some_ecc_op_queue_gates<Flavor>(
builder);
246 for (
auto selector : prover_inst->polynomials.get_gate_selectors()) {
251 for (
auto selector : prover_inst->polynomials.get_databus_entities()) {
254 auto& prover_polynomials = prover_inst->polynomials;
255 auto params = prover_inst->relation_parameters;
258 EXPECT_TRUE(relation_failures.empty());
ReadData< bb::fr > get_lookup_accumulators(const MultiTableId id, const fr &key_a, const fr &key_b, const bool is_2_to_1_lookup)
Given a table ID and the key(s) for a key-value lookup, return the lookup accumulators.