34 auto a = FF::random_element();
37 uint32_t a_idx = circuit_builder.add_public_variable(
a);
38 FF b = FF::random_element();
41 uint32_t b_idx = circuit_builder.add_variable(
b);
42 uint32_t c_idx = circuit_builder.add_variable(c);
43 uint32_t d_idx = circuit_builder.add_variable(d);
44 for (
size_t i = 0; i < 16; i++) {
45 circuit_builder.create_add_gate({ a_idx, b_idx, c_idx, 1, 1, -1, 0 });
46 circuit_builder.create_add_gate({ d_idx, c_idx, a_idx, 1, -1, -1, 0 });
51 uint32_t e_idx = circuit_builder.add_variable(e);
53 uint32_t zero_idx = circuit_builder.zero_idx;
54 circuit_builder.create_big_add_gate({ a_idx, b_idx, c_idx, d_idx, -1, -1, -1, -1, 0 },
true);
55 circuit_builder.create_big_add_gate({ zero_idx, zero_idx, zero_idx, e_idx, 0, 0, 0, 0, 0 },
false);
62 auto pedersen_input_value = FF::random_element();
65 .
slice(plookup::fixed_base::table::BITS_PER_LO_SCALAR,
66 plookup::fixed_base::table::BITS_PER_LO_SCALAR + plookup::fixed_base::table::BITS_PER_HI_SCALAR);
68 const auto input_hi_index = circuit_builder.add_variable(input_hi);
69 const auto input_lo_index = circuit_builder.add_variable(input_lo);
71 const auto sequence_data_hi =
73 const auto sequence_data_lo =
76 circuit_builder.create_gates_from_plookup_accumulators(
77 plookup::MultiTableId::FIXED_BASE_LEFT_HI, sequence_data_hi, input_hi_index);
78 circuit_builder.create_gates_from_plookup_accumulators(
79 plookup::MultiTableId::FIXED_BASE_LEFT_LO, sequence_data_lo, input_lo_index);
86 auto a_idx = circuit_builder.add_variable(
FF(0));
87 auto b_idx = circuit_builder.add_variable(
FF(1));
88 auto c_idx = circuit_builder.add_variable(
FF(2));
89 auto d_idx = circuit_builder.add_variable(
FF(3));
90 circuit_builder.create_sort_constraint({ a_idx, b_idx, c_idx, d_idx });
97 uint32_t ram_values[8]{
98 circuit_builder.add_variable(FF::random_element()), circuit_builder.add_variable(FF::random_element()),
99 circuit_builder.add_variable(FF::random_element()), circuit_builder.add_variable(FF::random_element()),
100 circuit_builder.add_variable(FF::random_element()), circuit_builder.add_variable(FF::random_element()),
101 circuit_builder.add_variable(FF::random_element()), circuit_builder.add_variable(FF::random_element()),
104 size_t ram_id = circuit_builder.create_RAM_array(8);
106 for (
size_t i = 0; i < 8; ++i) {
107 circuit_builder.init_RAM_element(ram_id, i, ram_values[i]);
110 auto a_idx = circuit_builder.read_RAM_array(ram_id, circuit_builder.add_variable(5));
111 EXPECT_EQ(a_idx != ram_values[5],
true);
113 auto b_idx = circuit_builder.read_RAM_array(ram_id, circuit_builder.add_variable(4));
114 auto c_idx = circuit_builder.read_RAM_array(ram_id, circuit_builder.add_variable(1));
116 circuit_builder.write_RAM_array(ram_id, circuit_builder.add_variable(4), circuit_builder.add_variable(500));
117 auto d_idx = circuit_builder.read_RAM_array(ram_id, circuit_builder.add_variable(4));
119 EXPECT_EQ(circuit_builder.get_variable(d_idx), 500);
122 const auto e_value = circuit_builder.get_variable(a_idx) + circuit_builder.get_variable(b_idx) +
123 circuit_builder.get_variable(c_idx) + circuit_builder.get_variable(d_idx);
124 auto e_idx = circuit_builder.add_variable(e_value);
126 circuit_builder.create_big_add_gate({ a_idx, b_idx, c_idx, d_idx, -1, -1, -1, -1, 0 },
true);
127 circuit_builder.create_big_add_gate(
129 circuit_builder.zero_idx,
130 circuit_builder.zero_idx,
131 circuit_builder.zero_idx,
150 uint32_t x1 = circuit_builder.add_variable(p1.
x);
151 uint32_t y1 = circuit_builder.add_variable(p1.
y);
152 uint32_t x2 = circuit_builder.add_variable(p2.
x);
153 uint32_t y2 = circuit_builder.add_variable(p2.
y);
154 uint32_t x3 = circuit_builder.add_variable(p3.
x);
155 uint32_t y3 = circuit_builder.add_variable(p3.
y);
157 circuit_builder.create_ecc_add_gate({ x1, y1, x2, y2, x3, y3, -1 });
198 create_some_add_gates<Flavor>(
builder);
199 create_some_lookup_gates<Flavor>(
builder);
200 create_some_delta_range_constraint_gates<Flavor>(
builder);
201 create_some_elliptic_curve_addition_gates<Flavor>(
builder);
202 create_some_RAM_gates<Flavor>(
builder);
211 for (
auto selector : decider_pk->polynomials.get_gate_selectors()) {
215 auto& prover_polynomials = decider_pk->polynomials;
216 auto params = decider_pk->relation_parameters;
230 create_some_add_gates<Flavor>(
builder);
231 create_some_lookup_gates<Flavor>(
builder);
232 create_some_delta_range_constraint_gates<Flavor>(
builder);
233 create_some_elliptic_curve_addition_gates<Flavor>(
builder);
234 create_some_RAM_gates<Flavor>(
builder);
235 create_some_ecc_op_queue_gates<Flavor>(
builder);
244 for (
auto selector : decider_pk->polynomials.get_gate_selectors()) {
249 for (
auto selector : decider_pk->polynomials.get_databus_entities()) {
252 auto& prover_polynomials = decider_pk->polynomials;
253 auto params = decider_pk->relation_parameters;
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.