Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
gate_data.hpp
Go to the documentation of this file.
1
// === AUDIT STATUS ===
2
// internal: { status: Complete, auditors: [Luke], commit: }
3
// external_1: { status: not started, auditors: [], commit: }
4
// external_2: { status: not started, auditors: [], commit: }
5
// =====================
6
7
#pragma once
8
#include "
barretenberg/ecc/curves/bn254/fr.hpp
"
9
#include <cstdint>
10
11
namespace
bb
{
12
13
// 3-wire addition gate: a*a_scaling + b*b_scaling + c*c_scaling + const_scaling = 0
14
template
<
typename
FF>
struct
add_triple_
{
15
uint32_t
a
;
16
uint32_t
b
;
17
uint32_t
c
;
18
FF
a_scaling
;
19
FF
b_scaling
;
20
FF
c_scaling
;
21
FF
const_scaling
;
22
};
23
24
// 4-wire addition gate: a*a_scaling + b*b_scaling + c*c_scaling + d*d_scaling + const_scaling = 0
25
template
<
typename
FF>
struct
add_quad_
{
26
uint32_t
a
;
27
uint32_t
b
;
28
uint32_t
c
;
29
uint32_t
d
;
30
FF
a_scaling
;
31
FF
b_scaling
;
32
FF
c_scaling
;
33
FF
d_scaling
;
34
FF
const_scaling
;
35
};
36
37
// 4-wire mul-add gate: a*b*mul_scaling + a*a_scaling + b*b_scaling + c*c_scaling + d*d_scaling + const_scaling = 0
38
template
<
typename
FF>
struct
mul_quad_
{
39
uint32_t
a
;
40
uint32_t
b
;
41
uint32_t
c
;
42
uint32_t
d
;
43
FF
mul_scaling
;
44
FF
a_scaling
;
45
FF
b_scaling
;
46
FF
c_scaling
;
47
FF
d_scaling
;
48
FF
const_scaling
;
49
};
50
51
// Bilinear / batched-eq gate (Mega flavors only; see relations/bilinear_or_batched_eq_check_relation.hpp).
52
// Two row-modes, each populating a different set of wires + selectors:
53
// - Bilinear: enforces q_m·a·b + q_5·a·c + q_l·a + q_r·b + q_o·c + q_4·d + q_c = 0.
54
// Wires are (a, b, c, d): two products sharing wire a, on the pairs (a, b) and (a, c), a
55
// linear term on each wire, and a constant. Wire d appears only in its linear term.
56
// - BatchedEq: enforces q_l·a + q_r·b + q_c = 0 (batched-eq-half-1)
57
// and q_o·c + q_4·d + q_m = 0 (batched-eq-half-2).
58
enum class
BilinearBatchedEqMode
: uint8_t {
Bilinear
,
BatchedEq
};
59
60
template
<
typename
FF>
struct
bilinear_batched_eq_gate_
{
61
BilinearBatchedEqMode
mode
;
62
uint32_t
a
;
63
uint32_t
b
;
64
uint32_t
c
;
65
uint32_t
d
;
66
FF
q_l
;
67
FF
q_r
;
68
FF
q_o
;
69
FF
q_4
;
70
FF
q_c
;
// batched-eq-half-1 constant in BatchedEq mode
71
FF
q_m
;
// first product (a·b) selector in Bilinear mode; batched-eq-half-2 constant in BatchedEq mode
72
FF
q_5
;
// second product (a·c) selector in Bilinear mode; unused (0) in BatchedEq mode
73
};
74
75
// Arithmetic gate with standard selector naming: q_m*a*b + q_l*a + q_r*b + q_o*c + q_c = 0
76
template
<
typename
FF>
struct
arithmetic_triple_
{
77
uint32_t
a
;
78
uint32_t
b
;
79
uint32_t
c
;
80
FF
q_m
;
81
FF
q_l
;
82
FF
q_r
;
83
FF
q_o
;
84
FF
q_c
;
85
86
friend
bool
operator==
(
arithmetic_triple_<FF>
const
&
lhs
,
arithmetic_triple_<FF>
const
&
rhs
) =
default
;
87
};
88
89
using
arithmetic_triple
=
arithmetic_triple_<bb::fr>
;
90
91
// Goblin ECCVM operation: stores op type, point coordinates (split into limbs), and scalar
92
struct
ecc_op_tuple
{
93
uint32_t
op
;
94
uint32_t
x_lo
;
95
uint32_t
x_hi
;
96
uint32_t
y_lo
;
97
uint32_t
y_hi
;
98
uint32_t
z_1
;
99
uint32_t
z_2
;
100
bool
return_is_infinity
;
101
};
102
103
// Embedded curve point addition/subtraction: (x1, y1) ± (x2, y2) = (x3, y3)
104
struct
ecc_add_gate_
{
105
uint32_t
x1
;
106
uint32_t
y1
;
107
uint32_t
x2
;
108
uint32_t
y2
;
109
uint32_t
x3
;
110
uint32_t
y3
;
111
bool
is_addition
;
// else, subtraction
112
};
113
114
// Embedded curve point doubling: 2 * (x1, y1) = (x3, y3)
115
template
<
typename
FF>
struct
ecc_dbl_gate_
{
116
uint32_t
x1
;
117
uint32_t
y1
;
118
uint32_t
x3
;
119
uint32_t
y3
;
120
};
121
122
// Databus lookup gate: reads value at index from kernel_calldata/returndata
123
template
<
typename
FF>
struct
databus_lookup_gate_
{
124
uint32_t
index
;
125
uint32_t
value
;
126
};
127
128
// External gate data for poseidon2 external round
129
template
<
typename
FF>
struct
poseidon2_external_gate_
{
130
uint32_t
a
;
131
uint32_t
b
;
132
uint32_t
c
;
133
uint32_t
d
;
134
size_t
round_idx
;
135
};
136
137
// Initial linear layer gate for Poseidon2. Wires hold the raw permutation input; the next row
138
// holds M_E * input and is consumed by the first external-round gate.
139
template
<
typename
FF>
struct
poseidon2_initial_external_gate_
{
140
uint32_t
a
;
141
uint32_t
b
;
142
uint32_t
c
;
143
uint32_t
d
;
144
};
145
146
// Internal gate data for poseidon2 internal round
147
template
<
typename
FF>
struct
poseidon2_internal_gate_
{
148
uint32_t
a
;
149
uint32_t
b
;
150
uint32_t
c
;
151
uint32_t
d
;
152
size_t
round_idx
;
153
};
154
155
// K=4 compressed internal-round gate: processes FOUR consecutive internal rounds per row.
156
// Wires: a = state[0] at round 4i+0, b = state[0] at round 4i+1,
157
// c = state[0] at round 4i+2, d = state[0] at round 4i+3.
158
// (s_1, s_2, s_3) at row start are reconstructed inside the relation via a 3x3 Vandermonde solve.
159
//
160
// Round constants on the row (see Poseidon2QuadInternalRelationImpl):
161
// q_l, q_r, q_o, q_4 = c_{4i}, c_{4i+1}, c_{4i+2}, c_{4i+3} // this quad's 4 S-box constants
162
// q_m, q_c, q_5 = c_{4(i+1)}, c_{4(i+1)+1}, c_{4(i+1)+2} // next quad's first 3 constants
163
// // (unused on terminal row)
164
template
<
typename
FF>
struct
poseidon2_quad_internal_gate_
{
165
uint32_t
a
;
// state[0] at round 4i+0
166
uint32_t
b
;
// state[0] at round 4i+1
167
uint32_t
c
;
// state[0] at round 4i+2
168
uint32_t
d
;
// state[0] at round 4i+3
169
size_t
round_idx_start
;
// absolute round_constants index of round 4i (this quad's 1st round)
170
size_t
next_pair_start
;
// absolute round_constants index of round 4(i+1) (next quad's 1st round);
171
// ignored when is_terminal = true
172
bool
is_terminal
;
// true on the last compressed row (successor is standard-encoded)
173
};
174
175
// Entry transition gate: standard-encoded state (s_0, s_1, s_2, s_3) at round `round_idx_start`
176
// whose successor is the first K=4 compressed row. The relation forces the successor's
177
// w_r_shift, w_o_shift, w_4_shift to state[0] at rounds start+1, start+2, start+3 respectively.
178
//
179
// Round constants on the row:
180
// q_l, q_r, q_o = c_{start}, c_{start+1}, c_{start+2} (first 3 internal round constants)
181
// q_4, q_m, q_c, q_5 = 0 (unused)
182
template
<
typename
FF>
struct
poseidon2_transition_entry_gate_
{
183
uint32_t
a
;
// s_0
184
uint32_t
b
;
// s_1
185
uint32_t
c
;
// s_2
186
uint32_t
d
;
// s_3
187
size_t
round_idx_start
;
// absolute round_constants index of the first internal round
188
};
189
}
// namespace bb
fr.hpp
bb
Entry point for Barretenberg command-line interface.
Definition
api.hpp:5
bb::BilinearBatchedEqMode
BilinearBatchedEqMode
Definition
gate_data.hpp:58
bb::BilinearBatchedEqMode::Bilinear
@ Bilinear
bb::BilinearBatchedEqMode::BatchedEq
@ BatchedEq
lhs
bb::VectorAffineElementPushSpan< BaseParams > lhs
Definition
scalar_multiplication_fast.cpp:174
rhs
bb::VectorAffineElementPushSpan< BaseParams > rhs
Definition
scalar_multiplication_fast.cpp:175
bb::add_quad_
Definition
gate_data.hpp:25
bb::add_quad_::a
uint32_t a
Definition
gate_data.hpp:26
bb::add_quad_::b
uint32_t b
Definition
gate_data.hpp:27
bb::add_quad_::const_scaling
FF const_scaling
Definition
gate_data.hpp:34
bb::add_quad_::a_scaling
FF a_scaling
Definition
gate_data.hpp:30
bb::add_quad_::c_scaling
FF c_scaling
Definition
gate_data.hpp:32
bb::add_quad_::d
uint32_t d
Definition
gate_data.hpp:29
bb::add_quad_::b_scaling
FF b_scaling
Definition
gate_data.hpp:31
bb::add_quad_::c
uint32_t c
Definition
gate_data.hpp:28
bb::add_quad_::d_scaling
FF d_scaling
Definition
gate_data.hpp:33
bb::add_triple_
Definition
gate_data.hpp:14
bb::add_triple_::a
uint32_t a
Definition
gate_data.hpp:15
bb::add_triple_::const_scaling
FF const_scaling
Definition
gate_data.hpp:21
bb::add_triple_::b_scaling
FF b_scaling
Definition
gate_data.hpp:19
bb::add_triple_::c_scaling
FF c_scaling
Definition
gate_data.hpp:20
bb::add_triple_::c
uint32_t c
Definition
gate_data.hpp:17
bb::add_triple_::a_scaling
FF a_scaling
Definition
gate_data.hpp:18
bb::add_triple_::b
uint32_t b
Definition
gate_data.hpp:16
bb::arithmetic_triple_
Definition
gate_data.hpp:76
bb::arithmetic_triple_::q_m
FF q_m
Definition
gate_data.hpp:80
bb::arithmetic_triple_::q_o
FF q_o
Definition
gate_data.hpp:83
bb::arithmetic_triple_::q_r
FF q_r
Definition
gate_data.hpp:82
bb::arithmetic_triple_::q_c
FF q_c
Definition
gate_data.hpp:84
bb::arithmetic_triple_::c
uint32_t c
Definition
gate_data.hpp:79
bb::arithmetic_triple_::operator==
friend bool operator==(arithmetic_triple_< FF > const &lhs, arithmetic_triple_< FF > const &rhs)=default
bb::arithmetic_triple_::a
uint32_t a
Definition
gate_data.hpp:77
bb::arithmetic_triple_::q_l
FF q_l
Definition
gate_data.hpp:81
bb::arithmetic_triple_::b
uint32_t b
Definition
gate_data.hpp:78
bb::bilinear_batched_eq_gate_
Definition
gate_data.hpp:60
bb::bilinear_batched_eq_gate_::q_o
FF q_o
Definition
gate_data.hpp:68
bb::bilinear_batched_eq_gate_::q_m
FF q_m
Definition
gate_data.hpp:71
bb::bilinear_batched_eq_gate_::q_5
FF q_5
Definition
gate_data.hpp:72
bb::bilinear_batched_eq_gate_::mode
BilinearBatchedEqMode mode
Definition
gate_data.hpp:61
bb::bilinear_batched_eq_gate_::q_4
FF q_4
Definition
gate_data.hpp:69
bb::bilinear_batched_eq_gate_::q_c
FF q_c
Definition
gate_data.hpp:70
bb::bilinear_batched_eq_gate_::c
uint32_t c
Definition
gate_data.hpp:64
bb::bilinear_batched_eq_gate_::q_l
FF q_l
Definition
gate_data.hpp:66
bb::bilinear_batched_eq_gate_::b
uint32_t b
Definition
gate_data.hpp:63
bb::bilinear_batched_eq_gate_::a
uint32_t a
Definition
gate_data.hpp:62
bb::bilinear_batched_eq_gate_::d
uint32_t d
Definition
gate_data.hpp:65
bb::bilinear_batched_eq_gate_::q_r
FF q_r
Definition
gate_data.hpp:67
bb::databus_lookup_gate_
Definition
gate_data.hpp:123
bb::databus_lookup_gate_::value
uint32_t value
Definition
gate_data.hpp:125
bb::databus_lookup_gate_::index
uint32_t index
Definition
gate_data.hpp:124
bb::ecc_add_gate_
Definition
gate_data.hpp:104
bb::ecc_add_gate_::y3
uint32_t y3
Definition
gate_data.hpp:110
bb::ecc_add_gate_::is_addition
bool is_addition
Definition
gate_data.hpp:111
bb::ecc_add_gate_::y1
uint32_t y1
Definition
gate_data.hpp:106
bb::ecc_add_gate_::x2
uint32_t x2
Definition
gate_data.hpp:107
bb::ecc_add_gate_::y2
uint32_t y2
Definition
gate_data.hpp:108
bb::ecc_add_gate_::x1
uint32_t x1
Definition
gate_data.hpp:105
bb::ecc_add_gate_::x3
uint32_t x3
Definition
gate_data.hpp:109
bb::ecc_dbl_gate_
Definition
gate_data.hpp:115
bb::ecc_dbl_gate_::x1
uint32_t x1
Definition
gate_data.hpp:116
bb::ecc_dbl_gate_::y1
uint32_t y1
Definition
gate_data.hpp:117
bb::ecc_dbl_gate_::x3
uint32_t x3
Definition
gate_data.hpp:118
bb::ecc_dbl_gate_::y3
uint32_t y3
Definition
gate_data.hpp:119
bb::ecc_op_tuple
Definition
gate_data.hpp:92
bb::ecc_op_tuple::y_hi
uint32_t y_hi
Definition
gate_data.hpp:97
bb::ecc_op_tuple::return_is_infinity
bool return_is_infinity
Definition
gate_data.hpp:100
bb::ecc_op_tuple::x_hi
uint32_t x_hi
Definition
gate_data.hpp:95
bb::ecc_op_tuple::y_lo
uint32_t y_lo
Definition
gate_data.hpp:96
bb::ecc_op_tuple::x_lo
uint32_t x_lo
Definition
gate_data.hpp:94
bb::ecc_op_tuple::op
uint32_t op
Definition
gate_data.hpp:93
bb::ecc_op_tuple::z_1
uint32_t z_1
Definition
gate_data.hpp:98
bb::ecc_op_tuple::z_2
uint32_t z_2
Definition
gate_data.hpp:99
bb::field< bb::Bn254FrParams >
bb::mul_quad_
Definition
gate_data.hpp:38
bb::mul_quad_::b
uint32_t b
Definition
gate_data.hpp:40
bb::mul_quad_::const_scaling
FF const_scaling
Definition
gate_data.hpp:48
bb::mul_quad_::a
uint32_t a
Definition
gate_data.hpp:39
bb::mul_quad_::mul_scaling
FF mul_scaling
Definition
gate_data.hpp:43
bb::mul_quad_::c_scaling
FF c_scaling
Definition
gate_data.hpp:46
bb::mul_quad_::d_scaling
FF d_scaling
Definition
gate_data.hpp:47
bb::mul_quad_::d
uint32_t d
Definition
gate_data.hpp:42
bb::mul_quad_::b_scaling
FF b_scaling
Definition
gate_data.hpp:45
bb::mul_quad_::a_scaling
FF a_scaling
Definition
gate_data.hpp:44
bb::mul_quad_::c
uint32_t c
Definition
gate_data.hpp:41
bb::poseidon2_external_gate_
Definition
gate_data.hpp:129
bb::poseidon2_external_gate_::a
uint32_t a
Definition
gate_data.hpp:130
bb::poseidon2_external_gate_::d
uint32_t d
Definition
gate_data.hpp:133
bb::poseidon2_external_gate_::round_idx
size_t round_idx
Definition
gate_data.hpp:134
bb::poseidon2_external_gate_::c
uint32_t c
Definition
gate_data.hpp:132
bb::poseidon2_external_gate_::b
uint32_t b
Definition
gate_data.hpp:131
bb::poseidon2_initial_external_gate_
Definition
gate_data.hpp:139
bb::poseidon2_initial_external_gate_::a
uint32_t a
Definition
gate_data.hpp:140
bb::poseidon2_initial_external_gate_::c
uint32_t c
Definition
gate_data.hpp:142
bb::poseidon2_initial_external_gate_::d
uint32_t d
Definition
gate_data.hpp:143
bb::poseidon2_initial_external_gate_::b
uint32_t b
Definition
gate_data.hpp:141
bb::poseidon2_internal_gate_
Definition
gate_data.hpp:147
bb::poseidon2_internal_gate_::a
uint32_t a
Definition
gate_data.hpp:148
bb::poseidon2_internal_gate_::d
uint32_t d
Definition
gate_data.hpp:151
bb::poseidon2_internal_gate_::c
uint32_t c
Definition
gate_data.hpp:150
bb::poseidon2_internal_gate_::round_idx
size_t round_idx
Definition
gate_data.hpp:152
bb::poseidon2_internal_gate_::b
uint32_t b
Definition
gate_data.hpp:149
bb::poseidon2_quad_internal_gate_
Definition
gate_data.hpp:164
bb::poseidon2_quad_internal_gate_::a
uint32_t a
Definition
gate_data.hpp:165
bb::poseidon2_quad_internal_gate_::next_pair_start
size_t next_pair_start
Definition
gate_data.hpp:170
bb::poseidon2_quad_internal_gate_::c
uint32_t c
Definition
gate_data.hpp:167
bb::poseidon2_quad_internal_gate_::b
uint32_t b
Definition
gate_data.hpp:166
bb::poseidon2_quad_internal_gate_::d
uint32_t d
Definition
gate_data.hpp:168
bb::poseidon2_quad_internal_gate_::round_idx_start
size_t round_idx_start
Definition
gate_data.hpp:169
bb::poseidon2_quad_internal_gate_::is_terminal
bool is_terminal
Definition
gate_data.hpp:172
bb::poseidon2_transition_entry_gate_
Definition
gate_data.hpp:182
bb::poseidon2_transition_entry_gate_::d
uint32_t d
Definition
gate_data.hpp:186
bb::poseidon2_transition_entry_gate_::a
uint32_t a
Definition
gate_data.hpp:183
bb::poseidon2_transition_entry_gate_::c
uint32_t c
Definition
gate_data.hpp:185
bb::poseidon2_transition_entry_gate_::b
uint32_t b
Definition
gate_data.hpp:184
bb::poseidon2_transition_entry_gate_::round_idx_start
size_t round_idx_start
Definition
gate_data.hpp:187
src
barretenberg
honk
execution_trace
gate_data.hpp
Generated by
1.9.8