28 template <
typename Builder>
32 for (
size_t i = 0; i < num_gates; ++i) {
37 uint32_t a_idx =
builder.add_public_variable(
a);
38 uint32_t b_idx =
builder.add_variable(
b);
39 uint32_t c_idx =
builder.add_variable(c);
40 uint32_t d_idx =
builder.add_variable(d);
42 builder.create_big_add_gate({ a_idx, b_idx, c_idx, d_idx,
FF(1),
FF(1),
FF(1),
FF(-1),
FF(0) });
54 for (
size_t i = 0; i < num_gates; ++i) {
59 uint32_t a_idx =
builder.add_variable(
a);
60 uint32_t b_idx =
builder.add_variable(
b);
61 uint32_t c_idx =
builder.add_variable(c);
62 uint32_t d_idx =
builder.add_variable(d);
64 builder.create_big_add_gate({ a_idx, b_idx, c_idx, d_idx,
FF(1),
FF(1),
FF(1),
FF(-1),
FF(0) });
80 for (
size_t i = 0; i < num_iterations; ++i) {
82 uint32_t left_value =
engine.get_random_uint32();
83 uint32_t right_value =
engine.get_random_uint32();
88 auto left_idx =
builder.add_variable(left);
89 auto right_idx =
builder.add_variable(right);
93 builder.create_gates_from_plookup_accumulators(UINT32_XOR, accumulators, left_idx, right_idx);
109 size_t ram_id =
builder.create_RAM_array(3);
111 for (
size_t i = 0; i < 3; ++i) {
112 builder.init_RAM_element(ram_id, i, ram_values[i]);
115 auto val_idx_1 =
builder.read_RAM_array(ram_id,
builder.add_variable(1));
116 auto val_idx_2 =
builder.read_RAM_array(ram_id,
builder.add_variable(2));
117 auto val_idx_3 =
builder.read_RAM_array(ram_id,
builder.add_variable(0));
138 template <
typename Builder>
140 const size_t target_log2_dyadic_size = 4,
141 bool include_public_inputs =
true)
143 const size_t target_dyadic_size = 1 << target_log2_dyadic_size;
144 const size_t num_preamble_gates =
builder.num_gates;
148 if (include_public_inputs && target_dyadic_size > num_preamble_gates) {
158 static constexpr size_t OFFSET_HACK = 10;
161 BB_ASSERT_GT(target_dyadic_size, OFFSET_HACK + num_preamble_gates);
162 size_t num_gates_to_add = target_dyadic_size - OFFSET_HACK - 1 - num_preamble_gates;
#define BB_ASSERT_GTE(left, right,...)
#define BB_ASSERT_GT(left, right,...)
static void add_RAM_gates(Builder &builder)
Add some simple RAM (memory) gates for testing memory read/write functionality.
static void add_arithmetic_gates_with_public_inputs(Builder &builder, const size_t num_gates=4)
Add a specified number of arithmetic gates (with public inputs) to the provided circuit.
Curve::AffineElement Point
static void add_lookup_gates(Builder &builder, size_t num_iterations=1)
Add lookup gates using the uint32 XOR lookup table (table size 4096)
static void construct_arithmetic_circuit(Builder &builder, const size_t target_log2_dyadic_size=4, bool include_public_inputs=true)
Populate a builder with a specified number of arithmetic gates; includes a PI.
static void construct_goblin_ecc_op_circuit(MegaCircuitBuilder &builder)
Populate a builder with some arbitrary goblinized ECC ops, one of each type.
static void add_arithmetic_gates(Builder &builder, const size_t num_gates=4)
Add a specified number of arithmetic gates to the provided circuit.
typename Group::affine_element AffineElement
RNG & get_debug_randomness(bool reset, std::uint_fast64_t seed)
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.
Entry point for Barretenberg command-line interface.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
BB_INLINE constexpr field to_montgomery_form() const noexcept
static field random_element(numeric::RNG *engine=nullptr) noexcept