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
8
#include "
aes128_constraint.hpp
"
9
#include "
avm2_recursion_constraint.hpp
"
10
#include "
barretenberg/circuit_checker/circuit_checker.hpp
"
11
12
#include "
arithmetic_constraints.hpp
"
13
#include "
barretenberg/chonk/chonk.hpp
"
14
#include "
blake2s_constraint.hpp
"
15
#include "
blake3_constraint.hpp
"
16
#include "
block_constraint.hpp
"
17
#include "
chonk_recursion_constraints.hpp
"
18
#include "
ec_operations.hpp
"
19
#include "
ecdsa_constraints.hpp
"
20
#include "
honk_recursion_constraint.hpp
"
21
#include "
hypernova_recursion_constraint.hpp
"
22
#include "
keccak_constraint.hpp
"
23
#include "
logic_constraint.hpp
"
24
#include "
multi_scalar_mul.hpp
"
25
#include "
poseidon2_constraint.hpp
"
26
#include "
range_constraint.hpp
"
27
#include "
recursion_constraint.hpp
"
28
#include "
sha256_constraint.hpp
"
29
#include <cstdint>
30
#include <utility>
31
#include <vector>
32
33
namespace
acir_format
{
34
35
using
WitnessVector
= std::vector<bb::fr>;
36
43
struct
AcirFormatOriginalOpcodeIndices
{
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:
63
std::vector<std::vector<size_t>
>
block_constraints
;
64
65
friend
bool
operator==
(
AcirFormatOriginalOpcodeIndices
const
& lhs,
66
AcirFormatOriginalOpcodeIndices
const
& rhs) =
default
;
67
};
68
82
struct
AcirFormat
{
83
uint32_t
max_witness_index
= 0;
84
uint32_t
num_acir_opcodes
;
85
86
std::vector<uint32_t>
public_inputs
;
87
88
std::vector<LogicConstraint>
logic_constraints
;
89
std::vector<RangeConstraint>
range_constraints
;
90
std::vector<AES128Constraint>
aes128_constraints
;
91
std::vector<Sha256Compression>
sha256_compression
;
92
std::vector<EcdsaConstraint>
ecdsa_k1_constraints
;
93
std::vector<EcdsaConstraint>
ecdsa_r1_constraints
;
94
std::vector<Blake2sConstraint>
blake2s_constraints
;
95
std::vector<Blake3Constraint>
blake3_constraints
;
96
std::vector<Keccakf1600>
keccak_permutations
;
97
std::vector<Poseidon2Constraint>
poseidon2_constraints
;
98
std::vector<MultiScalarMul>
multi_scalar_mul_constraints
;
99
std::vector<EcAdd>
ec_add_constraints
;
100
std::vector<RecursionConstraint>
honk_recursion_constraints
;
101
std::vector<RecursionConstraint>
avm_recursion_constraints
;
102
std::vector<RecursionConstraint>
hn_recursion_constraints
;
103
std::vector<RecursionConstraint>
chonk_recursion_constraints
;
104
std::vector<QuadConstraint>
quad_constraints
;
105
std::vector<BigQuadConstraint>
big_quad_constraints
;
106
std::vector<BlockConstraint>
block_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.
113
AcirFormatOriginalOpcodeIndices
original_opcode_indices
;
114
115
friend
bool
operator==
(
AcirFormat
const
& lhs,
AcirFormat
const
& rhs) =
default
;
116
};
117
122
struct
AcirProgram
{
123
AcirFormat
constraints
;
124
WitnessVector
witness
;
125
};
126
137
struct
ProgramMetadata
{
138
// An IVC instance; needed to construct a circuit from IVC recursion constraints
139
std::shared_ptr<bb::IVCBase>
ivc
=
nullptr
;
140
141
bool
has_ipa_claim
=
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.
145
bool
collect_gates_per_opcode
=
false
;
146
};
147
155
template
<
typename
Builder>
156
Builder
create_circuit
(
AcirProgram
& program,
const
ProgramMetadata
& metadata =
ProgramMetadata
{});
157
162
template
<
typename
Builder>
163
void
build_constraints
(
Builder
&
builder
, AcirFormat& constraints,
const
ProgramMetadata& metadata);
164
165
}
// namespace acir_format
aes128_constraint.hpp
arithmetic_constraints.hpp
blake2s_constraint.hpp
blake3_constraint.hpp
block_constraint.hpp
chonk.hpp
chonk_recursion_constraints.hpp
circuit_checker.hpp
bb::ECCVMCircuitBuilder
Definition
eccvm_circuit_builder.hpp:24
builder
AluTraceBuilder builder
Definition
alu.test.cpp:124
ec_operations.hpp
ecdsa_constraints.hpp
honk_recursion_constraint.hpp
hypernova_recursion_constraint.hpp
keccak_constraint.hpp
logic_constraint.hpp
multi_scalar_mul.hpp
acir_format
Definition
acir_format.cpp:30
acir_format::WitnessVector
std::vector< bb::fr > WitnessVector
Definition
acir_format.hpp:35
acir_format::build_constraints
void build_constraints(Builder &builder, AcirFormat &constraints, const ProgramMetadata &metadata)
Add to the builder the constraints contained in an AcirFormat instance.
Definition
acir_format.cpp:35
acir_format::create_circuit
UltraCircuitBuilder create_circuit(AcirProgram &program, const ProgramMetadata &metadata)
Specialization for creating an Ultra circuit from an acir program.
Definition
acir_format.cpp:190
std::get
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition
tuple.hpp:13
poseidon2_constraint.hpp
range_constraint.hpp
recursion_constraint.hpp
sha256_constraint.hpp
acir_format::AcirFormat
Barretenberg's representation of ACIR constraints.
Definition
acir_format.hpp:82
acir_format::AcirFormat::multi_scalar_mul_constraints
std::vector< MultiScalarMul > multi_scalar_mul_constraints
Definition
acir_format.hpp:98
acir_format::AcirFormat::blake2s_constraints
std::vector< Blake2sConstraint > blake2s_constraints
Definition
acir_format.hpp:94
acir_format::AcirFormat::operator==
friend bool operator==(AcirFormat const &lhs, AcirFormat const &rhs)=default
acir_format::AcirFormat::sha256_compression
std::vector< Sha256Compression > sha256_compression
Definition
acir_format.hpp:91
acir_format::AcirFormat::poseidon2_constraints
std::vector< Poseidon2Constraint > poseidon2_constraints
Definition
acir_format.hpp:97
acir_format::AcirFormat::logic_constraints
std::vector< LogicConstraint > logic_constraints
Definition
acir_format.hpp:88
acir_format::AcirFormat::ec_add_constraints
std::vector< EcAdd > ec_add_constraints
Definition
acir_format.hpp:99
acir_format::AcirFormat::quad_constraints
std::vector< QuadConstraint > quad_constraints
Definition
acir_format.hpp:104
acir_format::AcirFormat::max_witness_index
uint32_t max_witness_index
Definition
acir_format.hpp:83
acir_format::AcirFormat::keccak_permutations
std::vector< Keccakf1600 > keccak_permutations
Definition
acir_format.hpp:96
acir_format::AcirFormat::honk_recursion_constraints
std::vector< RecursionConstraint > honk_recursion_constraints
Definition
acir_format.hpp:100
acir_format::AcirFormat::blake3_constraints
std::vector< Blake3Constraint > blake3_constraints
Definition
acir_format.hpp:95
acir_format::AcirFormat::ecdsa_r1_constraints
std::vector< EcdsaConstraint > ecdsa_r1_constraints
Definition
acir_format.hpp:93
acir_format::AcirFormat::range_constraints
std::vector< RangeConstraint > range_constraints
Definition
acir_format.hpp:89
acir_format::AcirFormat::big_quad_constraints
std::vector< BigQuadConstraint > big_quad_constraints
Definition
acir_format.hpp:105
acir_format::AcirFormat::aes128_constraints
std::vector< AES128Constraint > aes128_constraints
Definition
acir_format.hpp:90
acir_format::AcirFormat::original_opcode_indices
AcirFormatOriginalOpcodeIndices original_opcode_indices
Definition
acir_format.hpp:113
acir_format::AcirFormat::block_constraints
std::vector< BlockConstraint > block_constraints
Definition
acir_format.hpp:106
acir_format::AcirFormat::ecdsa_k1_constraints
std::vector< EcdsaConstraint > ecdsa_k1_constraints
Definition
acir_format.hpp:92
acir_format::AcirFormat::hn_recursion_constraints
std::vector< RecursionConstraint > hn_recursion_constraints
Definition
acir_format.hpp:102
acir_format::AcirFormat::public_inputs
std::vector< uint32_t > public_inputs
Definition
acir_format.hpp:86
acir_format::AcirFormat::gates_per_opcode
std::vector< size_t > gates_per_opcode
Definition
acir_format.hpp:110
acir_format::AcirFormat::avm_recursion_constraints
std::vector< RecursionConstraint > avm_recursion_constraints
Definition
acir_format.hpp:101
acir_format::AcirFormat::chonk_recursion_constraints
std::vector< RecursionConstraint > chonk_recursion_constraints
Definition
acir_format.hpp:103
acir_format::AcirFormat::num_acir_opcodes
uint32_t num_acir_opcodes
Definition
acir_format.hpp:84
acir_format::AcirFormatOriginalOpcodeIndices
Indices of the original opcode that originated each constraint in AcirFormat.
Definition
acir_format.hpp:43
acir_format::AcirFormatOriginalOpcodeIndices::logic_constraints
std::vector< size_t > logic_constraints
Definition
acir_format.hpp:44
acir_format::AcirFormatOriginalOpcodeIndices::honk_recursion_constraints
std::vector< size_t > honk_recursion_constraints
Definition
acir_format.hpp:56
acir_format::AcirFormatOriginalOpcodeIndices::multi_scalar_mul_constraints
std::vector< size_t > multi_scalar_mul_constraints
Definition
acir_format.hpp:54
acir_format::AcirFormatOriginalOpcodeIndices::range_constraints
std::vector< size_t > range_constraints
Definition
acir_format.hpp:45
acir_format::AcirFormatOriginalOpcodeIndices::block_constraints
std::vector< std::vector< size_t > > block_constraints
Definition
acir_format.hpp:63
acir_format::AcirFormatOriginalOpcodeIndices::big_quad_constraints
std::vector< size_t > big_quad_constraints
Definition
acir_format.hpp:61
acir_format::AcirFormatOriginalOpcodeIndices::ec_add_constraints
std::vector< size_t > ec_add_constraints
Definition
acir_format.hpp:55
acir_format::AcirFormatOriginalOpcodeIndices::ecdsa_r1_constraints
std::vector< size_t > ecdsa_r1_constraints
Definition
acir_format.hpp:49
acir_format::AcirFormatOriginalOpcodeIndices::operator==
friend bool operator==(AcirFormatOriginalOpcodeIndices const &lhs, AcirFormatOriginalOpcodeIndices const &rhs)=default
acir_format::AcirFormatOriginalOpcodeIndices::chonk_recursion_constraints
std::vector< size_t > chonk_recursion_constraints
Definition
acir_format.hpp:59
acir_format::AcirFormatOriginalOpcodeIndices::blake2s_constraints
std::vector< size_t > blake2s_constraints
Definition
acir_format.hpp:50
acir_format::AcirFormatOriginalOpcodeIndices::sha256_compression
std::vector< size_t > sha256_compression
Definition
acir_format.hpp:47
acir_format::AcirFormatOriginalOpcodeIndices::blake3_constraints
std::vector< size_t > blake3_constraints
Definition
acir_format.hpp:51
acir_format::AcirFormatOriginalOpcodeIndices::ecdsa_k1_constraints
std::vector< size_t > ecdsa_k1_constraints
Definition
acir_format.hpp:48
acir_format::AcirFormatOriginalOpcodeIndices::avm_recursion_constraints
std::vector< size_t > avm_recursion_constraints
Definition
acir_format.hpp:57
acir_format::AcirFormatOriginalOpcodeIndices::aes128_constraints
std::vector< size_t > aes128_constraints
Definition
acir_format.hpp:46
acir_format::AcirFormatOriginalOpcodeIndices::quad_constraints
std::vector< size_t > quad_constraints
Definition
acir_format.hpp:60
acir_format::AcirFormatOriginalOpcodeIndices::keccak_permutations
std::vector< size_t > keccak_permutations
Definition
acir_format.hpp:52
acir_format::AcirFormatOriginalOpcodeIndices::poseidon2_constraints
std::vector< size_t > poseidon2_constraints
Definition
acir_format.hpp:53
acir_format::AcirFormatOriginalOpcodeIndices::hn_recursion_constraints
std::vector< size_t > hn_recursion_constraints
Definition
acir_format.hpp:58
acir_format::AcirProgram
Struct containing both the constraints to be added to the circuit and the witness vector.
Definition
acir_format.hpp:122
acir_format::AcirProgram::witness
WitnessVector witness
Definition
acir_format.hpp:124
acir_format::AcirProgram::constraints
AcirFormat constraints
Definition
acir_format.hpp:123
acir_format::ProgramMetadata
Metadata required to create a circuit.
Definition
acir_format.hpp:137
acir_format::ProgramMetadata::has_ipa_claim
bool has_ipa_claim
Definition
acir_format.hpp:141
acir_format::ProgramMetadata::collect_gates_per_opcode
bool collect_gates_per_opcode
Definition
acir_format.hpp:145
acir_format::ProgramMetadata::ivc
std::shared_ptr< bb::IVCBase > ivc
Definition
acir_format.hpp:139
avm2_recursion_constraint.hpp
src
barretenberg
dsl
acir_format
acir_format.hpp
Generated by
1.9.8