40 uint32_t a_idx = circuit_builder.add_public_variable(
a);
44 uint32_t b_idx = circuit_builder.add_variable(
b);
45 uint32_t c_idx = circuit_builder.add_variable(c);
46 uint32_t d_idx = circuit_builder.add_variable(d);
47 for (
size_t i = 0; i < 16; i++) {
48 circuit_builder.create_add_gate({ a_idx, b_idx, c_idx, 1, 1, -1, 0 });
49 circuit_builder.create_add_gate({ d_idx, c_idx, a_idx, 1, -1, -1, 0 });
54 uint32_t e_idx = circuit_builder.add_variable(e);
56 uint32_t zero_idx = circuit_builder.zero_idx();
57 circuit_builder.create_big_add_gate({ a_idx, b_idx, c_idx, d_idx, -1, -1, -1, -1, 0 },
true);
58 circuit_builder.create_big_add_gate({ zero_idx, zero_idx, zero_idx, e_idx, 0, 0, 0, 0, 0 },
false);
68 .
slice(plookup::fixed_base::table::BITS_PER_LO_SCALAR,
69 plookup::fixed_base::table::BITS_PER_LO_SCALAR + plookup::fixed_base::table::BITS_PER_HI_SCALAR);
71 const auto input_hi_index = circuit_builder.add_variable(
FF(input_hi));
72 const auto input_lo_index = circuit_builder.add_variable(
FF(input_lo));
74 const auto sequence_data_hi =
76 const auto sequence_data_lo =
79 circuit_builder.create_gates_from_plookup_accumulators(
80 plookup::MultiTableId::FIXED_BASE_LEFT_HI, sequence_data_hi, input_hi_index);
81 circuit_builder.create_gates_from_plookup_accumulators(
82 plookup::MultiTableId::FIXED_BASE_LEFT_LO, sequence_data_lo, input_lo_index);
89 auto a_idx = circuit_builder.add_variable(
FF(0));
90 auto b_idx = circuit_builder.add_variable(
FF(1));
91 auto c_idx = circuit_builder.add_variable(
FF(2));
92 auto d_idx = circuit_builder.add_variable(
FF(3));
93 circuit_builder.enforce_small_deltas({ a_idx, b_idx, c_idx, d_idx });
100 uint32_t ram_values[8]{
107 size_t ram_id = circuit_builder.create_RAM_array(8);
109 for (
size_t i = 0; i < 8; ++i) {
110 circuit_builder.init_RAM_element(ram_id, i, ram_values[i]);
113 auto a_idx = circuit_builder.read_RAM_array(ram_id, circuit_builder.add_variable(
FF(5)));
114 EXPECT_EQ(a_idx != ram_values[5],
true);
116 auto b_idx = circuit_builder.read_RAM_array(ram_id, circuit_builder.add_variable(
FF(4)));
117 auto c_idx = circuit_builder.read_RAM_array(ram_id, circuit_builder.add_variable(
FF(1)));
119 circuit_builder.write_RAM_array(ram_id, circuit_builder.add_variable(
FF(4)), circuit_builder.add_variable(
FF(500)));
120 auto d_idx = circuit_builder.read_RAM_array(ram_id, circuit_builder.add_variable(
FF(4)));
122 EXPECT_EQ(circuit_builder.get_variable(d_idx), 500);
125 const auto e_value = circuit_builder.get_variable(a_idx) + circuit_builder.get_variable(b_idx) +
126 circuit_builder.get_variable(c_idx) + circuit_builder.get_variable(d_idx);
127 auto e_idx = circuit_builder.add_variable(e_value);
129 circuit_builder.create_big_add_gate({ a_idx, b_idx, c_idx, d_idx, -1, -1, -1, -1, 0 },
true);
130 circuit_builder.create_big_add_gate(
132 circuit_builder.zero_idx(),
133 circuit_builder.zero_idx(),
134 circuit_builder.zero_idx(),
153 uint32_t x1 = circuit_builder.add_variable(p1.
x);
154 uint32_t y1 = circuit_builder.add_variable(p1.
y);
155 uint32_t x2 = circuit_builder.add_variable(p2.
x);
156 uint32_t y2 = circuit_builder.add_variable(p2.
y);
157 uint32_t x3 = circuit_builder.add_variable(p3.
x);
158 uint32_t y3 = circuit_builder.add_variable(p3.
y);
160 circuit_builder.create_ecc_add_gate({ x1, y1, x2, y2, x3, y3,
false });
179 requires HasDataBus<Flavor>
183 builder.add_public_calldata(BusId::KERNEL_CALLDATA, val);
185 for (
size_t app_idx = 0; app_idx < MAX_APPS_PER_KERNEL; ++app_idx) {
186 auto bus_id =
static_cast<BusId>(
static_cast<size_t>(BusId::APP_CALLDATA) + app_idx);
187 builder.add_public_calldata(bus_id, val);
190 builder.add_public_return_data(val);
242 create_some_add_gates<Flavor>(
builder);
243 create_some_lookup_gates<Flavor>(
builder);
244 create_some_delta_range_constraint_gates<Flavor>(
builder);
245 create_some_elliptic_curve_addition_gates<Flavor>(
builder);
246 create_some_RAM_gates<Flavor>(
builder);
247 create_some_non_native_field_gates<Flavor>(
builder);
248 create_some_poseidon2_gates<Flavor>(
builder);
254 complete_prover_instance_for_test<Flavor>(prover_inst);
257 for (
auto selector : prover_inst->polynomials.get_gate_selectors()) {
261 auto& prover_polynomials = prover_inst->polynomials;
262 auto params = prover_inst->relation_parameters;
265 EXPECT_TRUE(relation_failures.empty());
277 create_some_add_gates<Flavor>(
builder);
278 create_some_lookup_gates<Flavor>(
builder);
279 create_some_delta_range_constraint_gates<Flavor>(
builder);
280 create_some_elliptic_curve_addition_gates<Flavor>(
builder);
281 create_some_RAM_gates<Flavor>(
builder);
282 create_some_ecc_op_queue_gates<Flavor>(
builder);
283 create_some_databus_gates<Flavor>(
builder);
284 create_some_non_native_field_gates<Flavor>(
builder);
285 create_some_poseidon2_gates<Flavor>(
builder);
291 complete_prover_instance_for_test<Flavor>(prover_inst);
294 for (
auto selector : prover_inst->polynomials.get_gate_selectors()) {
299 for (
auto poly : prover_inst->polynomials.get_databus_inverses()) {
303 auto& prover_polynomials = prover_inst->polynomials;
304 auto params = prover_inst->relation_parameters;
307 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.