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 <array>
30#include <cstdint>
31#include <utility>
32#include <vector>
33
34namespace acir_format {
35
36using WitnessVector = std::vector<bb::fr>;
37
45 std::vector<size_t> logic_constraints;
46 std::vector<size_t> range_constraints;
47 std::vector<size_t> aes128_constraints;
48 std::vector<size_t> sha256_compression;
49 std::vector<size_t> ecdsa_k1_constraints;
50 std::vector<size_t> ecdsa_r1_constraints;
51 std::vector<size_t> blake2s_constraints;
52 std::vector<size_t> blake3_constraints;
53 std::vector<size_t> keccak_permutations;
54 std::vector<size_t> poseidon2_constraints;
55 std::vector<size_t> multi_scalar_mul_constraints;
56 std::vector<size_t> ec_add_constraints;
57 std::vector<size_t> honk_recursion_constraints;
58 std::vector<size_t> avm_recursion_constraints;
59 std::vector<size_t> hn_recursion_constraints;
60 std::vector<size_t> chonk_recursion_constraints;
61 std::vector<size_t> quad_constraints;
62 std::vector<size_t> big_quad_constraints;
63 std::vector<size_t> bilinear_constraints;
65 // Multiple opcode indices per block:
67
69 AcirFormatOriginalOpcodeIndices const& rhs) = default;
70};
71
85struct AcirFormat {
86 uint32_t max_witness_index = 0;
88
89 std::vector<uint32_t> public_inputs;
90
107 std::vector<QuadConstraint> quad_constraints;
112
113 // Number of gates added to the circuit per original opcode.
114 // Has length equal to num_acir_opcodes.
115 std::vector<size_t> gates_per_opcode;
116
117 // Indices of the original opcode that originated each constraint in AcirFormat.
119
120 friend bool operator==(AcirFormat const& lhs, AcirFormat const& rhs) = default;
121};
122
131
143 // An IVC instance; needed to construct a circuit from IVC recursion constraints
144 std::shared_ptr<bb::Chonk> ivc = nullptr;
145
147 false; // Boolean describing whether the circuit should propagate an IPA claim or not. If `True`, the circuit
148 // should propagate an IPA claim. In our codebase, circuits that propagate IPA claims are the ones whose
149 // proof is constructed/verified using Rollup flavors.
151};
152
160template <typename Builder>
162
167template <typename Builder>
168void build_constraints(Builder& builder, AcirFormat& constraints, const ProgramMetadata& metadata);
169
170} // 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
bb::VectorAffineElementPushSpan< BaseParams > lhs
bb::VectorAffineElementPushSpan< BaseParams > rhs
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< BatchedEqCheckConstraint > batched_eq_check_constraints
std::vector< Keccakf1600 > keccak_permutations
std::vector< BilinearConstraint > bilinear_constraints
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::array< size_t, 2 > > batched_eq_check_constraints
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::Chonk > ivc