Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
acir_format.hpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: Complete, auditors: [Federico], commit: 2094fd1467dd9a94803b2c5007cf60ac357aa7d2 }
3// external_1: { status: not started, auditors: [], commit: }
4// external_2: { status: not started, auditors: [], commit: }
5// =====================
6
7#pragma once
11
15#include "blake3_constraint.hpp"
16#include "block_constraint.hpp"
18#include "ec_operations.hpp"
19#include "ecdsa_constraints.hpp"
22#include "keccak_constraint.hpp"
23#include "logic_constraint.hpp"
24#include "multi_scalar_mul.hpp"
26#include "range_constraint.hpp"
28#include "sha256_constraint.hpp"
29#include <cstdint>
30#include <utility>
31#include <vector>
32
33namespace acir_format {
34
35using WitnessVector = std::vector<bb::fr>;
36
44 std::vector<size_t> logic_constraints;
45 std::vector<size_t> range_constraints;
46 std::vector<size_t> aes128_constraints;
47 std::vector<size_t> sha256_compression;
48 std::vector<size_t> ecdsa_k1_constraints;
49 std::vector<size_t> ecdsa_r1_constraints;
50 std::vector<size_t> blake2s_constraints;
51 std::vector<size_t> blake3_constraints;
52 std::vector<size_t> keccak_permutations;
53 std::vector<size_t> poseidon2_constraints;
54 std::vector<size_t> multi_scalar_mul_constraints;
55 std::vector<size_t> ec_add_constraints;
56 std::vector<size_t> honk_recursion_constraints;
57 std::vector<size_t> avm_recursion_constraints;
58 std::vector<size_t> hn_recursion_constraints;
59 std::vector<size_t> chonk_recursion_constraints;
60 std::vector<size_t> quad_constraints;
61 std::vector<size_t> big_quad_constraints;
62 // Multiple opcode indices per block:
64
66 AcirFormatOriginalOpcodeIndices const& rhs) = default;
67};
68
82struct AcirFormat {
83 uint32_t max_witness_index = 0;
85
86 std::vector<uint32_t> public_inputs;
87
104 std::vector<QuadConstraint> quad_constraints;
107
108 // Number of gates added to the circuit per original opcode.
109 // Has length equal to num_acir_opcodes.
110 std::vector<size_t> gates_per_opcode;
111
112 // Indices of the original opcode that originated each constraint in AcirFormat.
114
115 friend bool operator==(AcirFormat const& lhs, AcirFormat const& rhs) = default;
116};
117
126
138 // An IVC instance; needed to construct a circuit from IVC recursion constraints
139 std::shared_ptr<bb::IVCBase> ivc = nullptr;
140
142 false; // Boolean describing whether the circuit should propagate an IPA claim or not. If `True`, the circuit
143 // should propagate an IPA claim. In our codebase, circuits that propagate IPA claims are the ones whose
144 // proof is constructed/verified using Rollup flavors.
146};
147
155template <typename Builder>
157
162template <typename Builder>
163void build_constraints(Builder& builder, AcirFormat& constraints, const ProgramMetadata& metadata);
164
165} // namespace acir_format
AluTraceBuilder builder
Definition alu.test.cpp:124
std::vector< bb::fr > WitnessVector
void build_constraints(Builder &builder, AcirFormat &constraints, const ProgramMetadata &metadata)
Add to the builder the constraints contained in an AcirFormat instance.
UltraCircuitBuilder create_circuit(AcirProgram &program, const ProgramMetadata &metadata)
Specialization for creating an Ultra circuit from an acir program.
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
Barretenberg's representation of ACIR constraints.
std::vector< MultiScalarMul > multi_scalar_mul_constraints
std::vector< Blake2sConstraint > blake2s_constraints
friend bool operator==(AcirFormat const &lhs, AcirFormat const &rhs)=default
std::vector< Sha256Compression > sha256_compression
std::vector< Poseidon2Constraint > poseidon2_constraints
std::vector< LogicConstraint > logic_constraints
std::vector< EcAdd > ec_add_constraints
std::vector< QuadConstraint > quad_constraints
std::vector< Keccakf1600 > keccak_permutations
std::vector< RecursionConstraint > honk_recursion_constraints
std::vector< Blake3Constraint > blake3_constraints
std::vector< EcdsaConstraint > ecdsa_r1_constraints
std::vector< RangeConstraint > range_constraints
std::vector< BigQuadConstraint > big_quad_constraints
std::vector< AES128Constraint > aes128_constraints
AcirFormatOriginalOpcodeIndices original_opcode_indices
std::vector< BlockConstraint > block_constraints
std::vector< EcdsaConstraint > ecdsa_k1_constraints
std::vector< RecursionConstraint > hn_recursion_constraints
std::vector< uint32_t > public_inputs
std::vector< size_t > gates_per_opcode
std::vector< RecursionConstraint > avm_recursion_constraints
std::vector< RecursionConstraint > chonk_recursion_constraints
Indices of the original opcode that originated each constraint in AcirFormat.
std::vector< std::vector< size_t > > block_constraints
friend bool operator==(AcirFormatOriginalOpcodeIndices const &lhs, AcirFormatOriginalOpcodeIndices const &rhs)=default
Struct containing both the constraints to be added to the circuit and the witness vector.
Metadata required to create a circuit.
std::shared_ptr< bb::IVCBase > ivc