Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
ultra_execution_trace.hpp
Go to the documentation of this file.
1// === AUDIT STATUS ===
2// internal: { status: not started, auditors: [], date: YYYY-MM-DD }
3// external_1: { status: not started, auditors: [], date: YYYY-MM-DD }
4// external_2: { status: not started, auditors: [], date: YYYY-MM-DD }
5// =====================
6
7#pragma once
8
14
15namespace bb {
16
17class UltraTraceBlock : public ExecutionTraceBlock<fr, 4> {
18 public:
19 virtual Selector<fr>& q_lookup() { return zero_selectors[0]; };
20 virtual Selector<fr>& q_arith() { return zero_selectors[1]; }
21 virtual Selector<fr>& q_delta_range() { return zero_selectors[2]; }
22 virtual Selector<fr>& q_elliptic() { return zero_selectors[3]; }
23 virtual Selector<fr>& q_memory() { return zero_selectors[4]; }
24 virtual Selector<fr>& q_nnf() { return zero_selectors[5]; }
27
29 {
30 return RefVector{ q_m(),
31 q_c(),
32 q_1(),
33 q_2(),
34 q_3(),
35 q_4(),
36 q_lookup(),
37 q_arith(),
39 q_elliptic(),
40 q_memory(),
41 q_nnf(),
44 }
45
49 virtual void set_gate_selector([[maybe_unused]] const fr& value) {}
50
51 private:
53};
54
56
58 public:
59 SelectorType& q_lookup() override { return gate_selector; }
60
61 void set_gate_selector(const fr& value) override
62 {
63 gate_selector.emplace_back(value);
64 q_arith().emplace_back(0);
65 q_delta_range().emplace_back(0);
66 q_elliptic().emplace_back(0);
67 q_memory().emplace_back(0);
68 q_nnf().emplace_back(0);
69 q_poseidon2_external().emplace_back(0);
70 q_poseidon2_internal().emplace_back(0);
71 }
72
73 private:
75};
76
78 public:
79 SelectorType& q_arith() override { return gate_selector; }
80
81 void set_gate_selector(const fr& value) override
82 {
83 q_lookup().emplace_back(0);
84 gate_selector.emplace_back(value);
85 q_delta_range().emplace_back(0);
86 q_elliptic().emplace_back(0);
87 q_memory().emplace_back(0);
88 q_nnf().emplace_back(0);
89 q_poseidon2_external().emplace_back(0);
90 q_poseidon2_internal().emplace_back(0);
91 }
92
93 private:
95};
96
98 public:
100
101 void set_gate_selector(const fr& value) override
102 {
103 q_lookup().emplace_back(0);
104 q_arith().emplace_back(0);
105 gate_selector.emplace_back(value);
106 q_elliptic().emplace_back(0);
107 q_memory().emplace_back(0);
108 q_nnf().emplace_back(0);
109 q_poseidon2_external().emplace_back(0);
110 q_poseidon2_internal().emplace_back(0);
111 }
112
113 private:
115};
116
118 public:
119 SelectorType& q_elliptic() override { return gate_selector; }
120
121 void set_gate_selector(const fr& value) override
122 {
123 q_lookup().emplace_back(0);
124 q_arith().emplace_back(0);
125 q_delta_range().emplace_back(0);
126 gate_selector.emplace_back(value);
127 q_memory().emplace_back(0);
128 q_nnf().emplace_back(0);
129 q_poseidon2_external().emplace_back(0);
130 q_poseidon2_internal().emplace_back(0);
131 }
132
133 private:
135};
136
138 public:
139 SelectorType& q_memory() override { return gate_selector; }
140
141 void set_gate_selector(const fr& value) override
142 {
143 q_lookup().emplace_back(0);
144 q_arith().emplace_back(0);
145 q_delta_range().emplace_back(0);
146 q_elliptic().emplace_back(0);
147 gate_selector.emplace_back(value);
148 q_nnf().emplace_back(0);
149 q_poseidon2_external().emplace_back(0);
150 q_poseidon2_internal().emplace_back(0);
151 }
152
153 private:
155};
156
158 public:
159 SelectorType& q_nnf() override { return gate_selector; }
160
161 void set_gate_selector(const fr& value) override
162 {
163 q_lookup().emplace_back(0);
164 q_arith().emplace_back(0);
165 q_delta_range().emplace_back(0);
166 q_elliptic().emplace_back(0);
167 q_memory().emplace_back(0);
168 gate_selector.emplace_back(value);
169 q_poseidon2_external().emplace_back(0);
170 q_poseidon2_internal().emplace_back(0);
171 }
172
173 private:
175};
176
178 public:
180
181 void set_gate_selector(const fr& value) override
182 {
183 q_lookup().emplace_back(0);
184 q_arith().emplace_back(0);
185 q_delta_range().emplace_back(0);
186 q_elliptic().emplace_back(0);
187 q_memory().emplace_back(0);
188 q_nnf().emplace_back(0);
189 gate_selector.emplace_back(value);
190 q_poseidon2_internal().emplace_back(0);
191 }
192
193 private:
195};
196
198 public:
200
201 void set_gate_selector(const fr& value) override
202 {
203 q_lookup().emplace_back(0);
204 q_arith().emplace_back(0);
205 q_delta_range().emplace_back(0);
206 q_elliptic().emplace_back(0);
207 q_memory().emplace_back(0);
208 q_nnf().emplace_back(0);
209 q_poseidon2_external().emplace_back(0);
210 gate_selector.emplace_back(value);
211 }
212
213 private:
215};
216
275
277
278 public:
279 static constexpr size_t NUM_WIRES = UltraTraceBlock::NUM_WIRES;
280 using FF = fr;
281
283
285 {
286 uint32_t offset = 1; // start at 1 because the 0th row is unused for selectors for Honk
287 for (auto& block : this->get()) {
288 block.trace_offset_ = offset;
289 offset += static_cast<uint32_t>(block.size());
290 }
291 }
292
293 void summarize() const
294 {
295 info("Gate blocks summary:");
296 info("pub inputs :\t", this->pub_inputs.size());
297 info("lookups :\t", this->lookup.size());
298 info("arithmetic :\t", this->arithmetic.size());
299 info("delta range:\t", this->delta_range.size());
300 info("elliptic :\t", this->elliptic.size());
301 info("memory :\t", this->memory.size());
302 info("nnf :\t", this->nnf.size());
303 info("poseidon ext :\t", this->poseidon2_external.size());
304 info("poseidon int :\t", this->poseidon2_internal.size());
305 }
306
307 // Get cumulative size of all blocks
309 {
310 size_t total_size(0);
311 for (const auto& block : this->get()) {
312 total_size += block.size();
313 }
314 return total_size;
315 }
316
317 bool operator==(const UltraExecutionTraceBlocks& other) const = default;
318};
319
320} // namespace bb
Basic structure for storing gate data in a builder.
A template class for a reference array. Behaves as if std::array<T&, N> was possible.
Definition ref_array.hpp:22
A template class for a reference vector. Behaves as if std::vector<T&> was possible.
Abstract interface for a generic selector.
Selector backed by a slab allocator vector.
bool operator==(const UltraExecutionTraceBlocks &other) const =default
SlabVectorSelector< fr > gate_selector
void set_gate_selector(const fr &value) override
Default implementation does nothing.
SelectorType & q_arith() override
virtual Selector< fr > & q_lookup()
virtual Selector< fr > & q_poseidon2_internal()
virtual Selector< fr > & q_elliptic()
RefVector< Selector< fr > > get_selectors() override
virtual void set_gate_selector(const fr &value)
Default implementation does nothing.
virtual Selector< fr > & q_arith()
virtual Selector< fr > & q_poseidon2_external()
virtual Selector< fr > & q_nnf()
virtual Selector< fr > & q_delta_range()
std::array< ZeroSelector< fr >, 8 > zero_selectors
virtual Selector< fr > & q_memory()
SlabVectorSelector< fr > gate_selector
SelectorType & q_delta_range() override
void set_gate_selector(const fr &value) override
Default implementation does nothing.
void set_gate_selector(const fr &value) override
Default implementation does nothing.
SlabVectorSelector< fr > gate_selector
SelectorType & q_elliptic() override
SelectorType & q_lookup() override
void set_gate_selector(const fr &value) override
Default implementation does nothing.
SlabVectorSelector< fr > gate_selector
void set_gate_selector(const fr &value) override
Default implementation does nothing.
SelectorType & q_memory() override
SlabVectorSelector< fr > gate_selector
void set_gate_selector(const fr &value) override
Default implementation does nothing.
void set_gate_selector(const fr &value) override
Default implementation does nothing.
void set_gate_selector(const fr &value) override
Default implementation does nothing.
void info(Args... args)
Definition log.hpp:75
ssize_t offset
Definition engine.cpp:36
Entry point for Barretenberg command-line interface.
Definition api.hpp:5
field< Bn254FrParams > fr
Definition fr.hpp:174
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
Defines the circuit block types for the Ultra arithmetization.
UltraTracePublicInputBlock pub_inputs
UltraTraceDeltaRangeBlock delta_range
UltraTraceArithmeticBlock arithmetic
UltraTraceNonNativeFieldBlock nnf
UltraTraceEllipticBlock elliptic
static constexpr size_t NUM_BLOCKS
UltraTracePoseidon2ExternalBlock poseidon2_external
bool operator==(const UltraTraceBlockData &other) const =default
UltraTracePoseidon2InternalBlock poseidon2_internal