34template <
typename Builder>
39 if (collect_gates_per_opcode) {
49 constexpr size_t GATES_PER_BIG_QUAD_HINT = 4;
50 constexpr size_t GATES_PER_SMALL_RANGE_HINT = 3;
51 constexpr size_t ARITH_RESERVE_SLACK = 1024;
52 constexpr size_t BLOCK_RESERVE_FLOOR = 512;
59 builder.blocks.memory.reserve(BLOCK_RESERVE_FLOOR);
60 builder.blocks.nnf.reserve(BLOCK_RESERVE_FLOOR);
65 for (
auto [constraint, opcode_idx] :
77 for (
auto [big_constraint, opcode_idx] :
87 "Bilinear constraints should only be present when using MegaCircuitBuilder.");
90 for (
auto [constraint, opcode_idx] :
100 "BatchedEq constraints should only be present when using MegaCircuitBuilder.");
103 for (
auto [constraint, opcode_idx] :
117 for (
const auto& [constraint, opcode_idx] :
120 builder, constraint.a, constraint.b, constraint.result, constraint.num_bits, constraint.is_xor_gate);
128 for (
const auto& [constraint, opcode_idx] :
134 msg = std::format(
"acir_format::build_constraints: range constraint at opcode index {} failed",
137 builder.create_dyadic_range_constraint(constraint.witness, constraint.num_bits, msg);
145 for (
const auto& [constraint, opcode_idx] :
155 for (
const auto& [constraint, opcode_idx] :
165 for (
const auto& [constraint, opcode_idx] :
167 create_ecdsa_verify_constraints<stdlib::secp256k1<Builder>>(
builder, constraint);
175 for (
const auto& [constraint, opcode_idx] :
177 create_ecdsa_verify_constraints<stdlib::secp256r1<Builder>>(
builder, constraint);
184 for (
const auto& [constraint, opcode_idx] :
194 for (
const auto& [constraint, opcode_idx] :
204 for (
const auto& [constraint, opcode_idx] :
214 for (
const auto& [constraint, opcode_idx] :
224 for (
const auto& [constraint, opcode_idx] :
235 for (
const auto& [constraint, opcode_idx] :
245 for (
const auto& [constraint, opcode_indices] :
248 if (collect_gates_per_opcode) {
251 size_t avg_gates_per_opcode = gate_counter.compute_diff() / opcode_indices.size();
252 for (
size_t opcode_index : opcode_indices) {
268 { constraints.honk_recursion_constraints, constraints.original_opcode_indices.honk_recursion_constraints },
270 { constraints.avm_recursion_constraints, constraints.original_opcode_indices.avm_recursion_constraints },
272 { constraints.hn_recursion_constraints, constraints.original_opcode_indices.hn_recursion_constraints },
274 { constraints.chonk_recursion_constraints, constraints.original_opcode_indices.chonk_recursion_constraints });
291 const bool is_write_vk_mode = witness.empty();
293 if (!is_write_vk_mode) {
296 "ACIR witness size (" << witness.size() <<
") does not match max witness index + 1 ("
307 vinfo(
"Created circuit");
323 const bool is_write_vk_mode = witness.empty();
325 if (!is_write_vk_mode) {
328 "ACIR witness size (" << witness.size() <<
") does not match max witness index + 1 ("
342 vinfo(
"Created circuit");
#define BB_ASSERT(expression,...)
#define BB_ASSERT_EQ(actual, expected,...)
#define BB_BENCH_ONLY_NAME(name)
Shared type definitions for the Barretenberg RPC API.
constexpr uint64_t get_msb() const
Base class templates shared across Honk flavors.
Entry point for Barretenberg command-line interface.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
StdlibCodec for in-circuit (recursive) verification transcript handling.