Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
get_env_var.test.cpp
Go to the documentation of this file.
1#include <gmock/gmock.h>
2#include <gtest/gtest.h>
3
4#include <cstdint>
5
15
16namespace bb::avm2::tracegen {
17namespace {
18
19using enum ::bb::avm2::WireOpCode;
21
23
24TEST(GetEnvVarTracegenTest, AddressEnvironmentVariable)
25{
26 TestTraceContainer trace;
27 ExecutionTraceBuilder builder;
28
29 Operand envvar_enum =
30 Operand::from_tag(ValueTag::U8, static_cast<uint8_t>(EnvironmentVariable::ADDRESS)); // enum value
31
32 builder.process_get_env_var_opcode(envvar_enum, default_output, trace, 0);
33
34 EXPECT_THAT(trace.as_rows(),
35 ElementsAre(AllOf(ROW_FIELD_EQ(execution_sel_execute_get_env_var, 1), // Should be set
36 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col0, 0), // No PI lookup
37 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col1, 0), // No PI lookup
38 ROW_FIELD_EQ(execution_envvar_pi_row_idx, 0), // No PI lookup
39 ROW_FIELD_EQ(execution_is_address, 1), // Should be set
40 ROW_FIELD_EQ(execution_is_sender, 0),
41 ROW_FIELD_EQ(execution_is_transactionfee, 0),
42 ROW_FIELD_EQ(execution_is_isstaticcall, 0),
43 ROW_FIELD_EQ(execution_is_l2gasleft, 0),
44 ROW_FIELD_EQ(execution_is_dagasleft, 0),
45 ROW_FIELD_EQ(execution_mem_tag_reg_0_, static_cast<uint8_t>(ValueTag::FF)))));
46}
47
48TEST(GetEnvVarTracegenTest, SenderEnvironmentVariable)
49{
50 TestTraceContainer trace;
51 ExecutionTraceBuilder builder;
52
53 Operand envvar_enum =
54 Operand::from_tag(ValueTag::U8, static_cast<uint8_t>(EnvironmentVariable::SENDER)); // enum value
55
56 builder.process_get_env_var_opcode(envvar_enum, default_output, trace, 0);
57
58 EXPECT_THAT(trace.as_rows(),
59 ElementsAre(AllOf(ROW_FIELD_EQ(execution_sel_execute_get_env_var, 1), // Should be set
60 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col0, 0), // No PI lookup
61 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col1, 0), // No PI lookup
62 ROW_FIELD_EQ(execution_envvar_pi_row_idx, 0), // No PI lookup
63 ROW_FIELD_EQ(execution_is_address, 0),
64 ROW_FIELD_EQ(execution_is_sender, 1), // Should be set
65 ROW_FIELD_EQ(execution_is_transactionfee, 0),
66 ROW_FIELD_EQ(execution_is_isstaticcall, 0),
67 ROW_FIELD_EQ(execution_is_l2gasleft, 0),
68 ROW_FIELD_EQ(execution_is_dagasleft, 0),
69 ROW_FIELD_EQ(execution_mem_tag_reg_0_, static_cast<uint8_t>(ValueTag::FF)))));
70}
71
72TEST(GetEnvVarTracegenTest, TransactionFeeEnvironmentVariable)
73{
74 TestTraceContainer trace;
75 ExecutionTraceBuilder builder;
76
77 Operand envvar_enum =
78 Operand::from_tag(ValueTag::U8, static_cast<uint8_t>(EnvironmentVariable::TRANSACTIONFEE)); // enum value
79
80 builder.process_get_env_var_opcode(envvar_enum, default_output, trace, 0);
81
82 EXPECT_THAT(trace.as_rows(),
83 ElementsAre(AllOf(ROW_FIELD_EQ(execution_sel_execute_get_env_var, 1), // Should be set
84 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col0, 0), // No PI lookup
85 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col1, 0), // No PI lookup
86 ROW_FIELD_EQ(execution_envvar_pi_row_idx, 0), // No PI lookup
87 ROW_FIELD_EQ(execution_is_address, 0),
88 ROW_FIELD_EQ(execution_is_sender, 0),
89 ROW_FIELD_EQ(execution_is_transactionfee, 1), // Should be set
90 ROW_FIELD_EQ(execution_is_isstaticcall, 0),
91 ROW_FIELD_EQ(execution_is_l2gasleft, 0),
92 ROW_FIELD_EQ(execution_is_dagasleft, 0))));
93}
94
95TEST(GetEnvVarTracegenTest, ChainIdEnvironmentVariable)
96{
97 TestTraceContainer trace;
98 ExecutionTraceBuilder builder;
99
100 Operand envvar_enum =
101 Operand::from_tag(ValueTag::U8, static_cast<uint8_t>(EnvironmentVariable::CHAINID)); // enum value
102
103 FF chain_id = FF(42);
105
106 builder.process_get_env_var_opcode(envvar_enum, output, trace, 0);
107
108 EXPECT_THAT(trace.as_rows(),
109 ElementsAre(AllOf(
110 ROW_FIELD_EQ(execution_sel_execute_get_env_var, 1), // Should be set
111 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col0, 1), // PI lookup required
112 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col1, 0), // No PI lookup
114 ROW_FIELD_EQ(execution_is_address, 0),
115 ROW_FIELD_EQ(execution_is_sender, 0),
116 ROW_FIELD_EQ(execution_is_transactionfee, 0),
117 ROW_FIELD_EQ(execution_is_isstaticcall, 0),
118 ROW_FIELD_EQ(execution_is_l2gasleft, 0),
119 ROW_FIELD_EQ(execution_is_dagasleft, 0),
120 ROW_FIELD_EQ(execution_value_from_pi, chain_id))));
121}
122
123TEST(GetEnvVarTracegenTest, VersionEnvironmentVariable)
124{
125 TestTraceContainer trace;
126 ExecutionTraceBuilder builder;
127
128 Operand envvar_enum =
129 Operand::from_tag(ValueTag::U8, static_cast<uint8_t>(EnvironmentVariable::VERSION)); // enum value
130
131 FF version = FF(42);
133
134 builder.process_get_env_var_opcode(envvar_enum, output, trace, 0);
135
136 EXPECT_THAT(
137 trace.as_rows(),
138 ElementsAre(AllOf(ROW_FIELD_EQ(execution_sel_execute_get_env_var, 1), // Should be set
139 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col0, 1), // PI lookup required
140 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col1, 0), // No PI lookup
142 ROW_FIELD_EQ(execution_is_address, 0),
143 ROW_FIELD_EQ(execution_is_sender, 0),
144 ROW_FIELD_EQ(execution_is_transactionfee, 0),
145 ROW_FIELD_EQ(execution_is_isstaticcall, 0),
146 ROW_FIELD_EQ(execution_is_l2gasleft, 0),
147 ROW_FIELD_EQ(execution_is_dagasleft, 0),
148 ROW_FIELD_EQ(execution_value_from_pi, version))));
149}
150
151TEST(GetEnvVarTracegenTest, BlockNumberEnvironmentVariable)
152{
153 TestTraceContainer trace;
154 ExecutionTraceBuilder builder;
155
156 Operand envvar_enum =
157 Operand::from_tag(ValueTag::U8, static_cast<uint8_t>(EnvironmentVariable::BLOCKNUMBER)); // enum value
158
159 uint32_t block_number = 42;
160 MemoryValue output = MemoryValue::from_tag(ValueTag::U32, block_number);
161 builder.process_get_env_var_opcode(envvar_enum, output, trace, 0);
162
163 EXPECT_THAT(trace.as_rows(),
164 ElementsAre(AllOf(
165 ROW_FIELD_EQ(execution_sel_execute_get_env_var, 1), // Should be set
166 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col0, 1), // PI lookup required
167 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col1, 0), // No PI lookup
169 ROW_FIELD_EQ(execution_is_address, 0),
170 ROW_FIELD_EQ(execution_is_sender, 0),
171 ROW_FIELD_EQ(execution_is_transactionfee, 0),
172 ROW_FIELD_EQ(execution_is_isstaticcall, 0),
173 ROW_FIELD_EQ(execution_is_l2gasleft, 0),
174 ROW_FIELD_EQ(execution_is_dagasleft, 0),
175 ROW_FIELD_EQ(execution_value_from_pi, block_number),
176 ROW_FIELD_EQ(execution_mem_tag_reg_0_, static_cast<uint8_t>(ValueTag::U32)))));
177}
178
179TEST(GetEnvVarTracegenTest, TimestampEnvironmentVariable)
180{
181 TestTraceContainer trace;
182 ExecutionTraceBuilder builder;
183
184 Operand envvar_enum =
185 Operand::from_tag(ValueTag::U8, static_cast<uint8_t>(EnvironmentVariable::TIMESTAMP)); // enum value
186
187 uint64_t timestamp = 42;
189 builder.process_get_env_var_opcode(envvar_enum, output, trace, 0);
190
191 EXPECT_THAT(trace.as_rows(),
192 ElementsAre(AllOf(
193 ROW_FIELD_EQ(execution_sel_execute_get_env_var, 1), // Should be set
194 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col0, 1), // PI lookup required
195 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col1, 0), // No PI lookup
197 ROW_FIELD_EQ(execution_is_address, 0),
198 ROW_FIELD_EQ(execution_is_sender, 0),
199 ROW_FIELD_EQ(execution_is_transactionfee, 0),
200 ROW_FIELD_EQ(execution_is_isstaticcall, 0),
201 ROW_FIELD_EQ(execution_is_l2gasleft, 0),
202 ROW_FIELD_EQ(execution_is_dagasleft, 0),
203 ROW_FIELD_EQ(execution_value_from_pi, timestamp))));
204}
205
206TEST(GetEnvVarTracegenTest, FeePerL2GasEnvironmentVariable)
207{
208 TestTraceContainer trace;
209 ExecutionTraceBuilder builder;
210
211 Operand envvar_enum =
212 Operand::from_tag(ValueTag::U8, static_cast<uint8_t>(EnvironmentVariable::BASEFEEPERL2GAS)); // enum value
213
214 uint128_t fee_per_l2_gas = 42;
215 MemoryValue output = MemoryValue::from_tag(ValueTag::U128, fee_per_l2_gas);
216 builder.process_get_env_var_opcode(envvar_enum, output, trace, 0);
217
218 EXPECT_THAT(trace.as_rows(),
219 ElementsAre(AllOf(
220 ROW_FIELD_EQ(execution_sel_execute_get_env_var, 1), // Should be set
221 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col0, 0), // No PI lookup
222 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col1, 1), // PI lookup required
224 ROW_FIELD_EQ(execution_is_address, 0),
225 ROW_FIELD_EQ(execution_is_sender, 0),
226 ROW_FIELD_EQ(execution_is_transactionfee, 0),
227 ROW_FIELD_EQ(execution_is_isstaticcall, 0),
228 ROW_FIELD_EQ(execution_is_l2gasleft, 0),
229 ROW_FIELD_EQ(execution_is_dagasleft, 0),
230 ROW_FIELD_EQ(execution_value_from_pi, fee_per_l2_gas),
231 ROW_FIELD_EQ(execution_mem_tag_reg_0_, static_cast<uint8_t>(ValueTag::U128)))));
232}
233
234TEST(GetEnvVarTracegenTest, FeePerDaGasEnvironmentVariable)
235{
236 TestTraceContainer trace;
237 ExecutionTraceBuilder builder;
238
239 Operand envvar_enum =
240 Operand::from_tag(ValueTag::U8, static_cast<uint8_t>(EnvironmentVariable::BASEFEEPERDAGAS)); // enum value
241
242 uint128_t fee_per_da_gas = 42;
243 MemoryValue output = MemoryValue::from_tag(ValueTag::U128, fee_per_da_gas);
244 builder.process_get_env_var_opcode(envvar_enum, output, trace, 0);
245
246 EXPECT_THAT(trace.as_rows(),
247 ElementsAre(AllOf(
248 ROW_FIELD_EQ(execution_sel_execute_get_env_var, 1), // Should be set
249 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col0, 1), // No PI lookup
250 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col1, 0), // PI lookup required
252 ROW_FIELD_EQ(execution_is_address, 0),
253 ROW_FIELD_EQ(execution_is_sender, 0),
254 ROW_FIELD_EQ(execution_is_transactionfee, 0),
255 ROW_FIELD_EQ(execution_is_isstaticcall, 0),
256 ROW_FIELD_EQ(execution_is_l2gasleft, 0),
257 ROW_FIELD_EQ(execution_is_dagasleft, 0),
258 ROW_FIELD_EQ(execution_value_from_pi, fee_per_da_gas))));
259}
260
261TEST(GetEnvVarTracegenTest, IsStaticCallEnvironmentVariable)
262{
263 TestTraceContainer trace;
264 ExecutionTraceBuilder builder;
265
266 Operand envvar_enum =
267 Operand::from_tag(ValueTag::U8, static_cast<uint8_t>(EnvironmentVariable::ISSTATICCALL)); // enum value
268
269 builder.process_get_env_var_opcode(envvar_enum, default_output, trace, 0);
270
271 EXPECT_THAT(trace.as_rows(),
272 ElementsAre(AllOf(ROW_FIELD_EQ(execution_sel_execute_get_env_var, 1), // Should be set
273 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col0, 0), // No PI lookup
274 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col1, 0), // No PI lookup
275 ROW_FIELD_EQ(execution_envvar_pi_row_idx, 0), // No PI lookup
276 ROW_FIELD_EQ(execution_is_address, 0),
277 ROW_FIELD_EQ(execution_is_sender, 0),
278 ROW_FIELD_EQ(execution_is_transactionfee, 0),
279 ROW_FIELD_EQ(execution_is_isstaticcall, 1), // Should be set
280 ROW_FIELD_EQ(execution_is_l2gasleft, 0),
281 ROW_FIELD_EQ(execution_is_dagasleft, 0),
282 ROW_FIELD_EQ(execution_value_from_pi, 0),
283 ROW_FIELD_EQ(execution_mem_tag_reg_0_, static_cast<uint8_t>(ValueTag::U1)))));
284}
285
286TEST(GetEnvVarTracegenTest, L2GasLeftEnvironmentVariable)
287{
288 TestTraceContainer trace;
289 ExecutionTraceBuilder builder;
290
291 Operand envvar_enum =
292 Operand::from_tag(ValueTag::U8, static_cast<uint8_t>(EnvironmentVariable::L2GASLEFT)); // enum value
293
294 builder.process_get_env_var_opcode(envvar_enum, default_output, trace, 0);
295
296 EXPECT_THAT(trace.as_rows(),
297 ElementsAre(AllOf(ROW_FIELD_EQ(execution_sel_execute_get_env_var, 1), // Should be set
298 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col0, 0), // No PI lookup
299 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col1, 0), // No PI lookup
300 ROW_FIELD_EQ(execution_envvar_pi_row_idx, 0), // No PI lookup
301 ROW_FIELD_EQ(execution_is_address, 0),
302 ROW_FIELD_EQ(execution_is_sender, 0),
303 ROW_FIELD_EQ(execution_is_transactionfee, 0),
304 ROW_FIELD_EQ(execution_is_isstaticcall, 0),
305 ROW_FIELD_EQ(execution_is_l2gasleft, 1), // Should be set
306 ROW_FIELD_EQ(execution_is_dagasleft, 0),
307 ROW_FIELD_EQ(execution_value_from_pi, 0))));
308}
309
310TEST(GetEnvVarTracegenTest, DaGasLeftEnvironmentVariable)
311{
312 TestTraceContainer trace;
313 ExecutionTraceBuilder builder;
314
315 Operand envvar_enum =
316 Operand::from_tag(ValueTag::U8, static_cast<uint8_t>(EnvironmentVariable::DAGASLEFT)); // enum value
317
318 builder.process_get_env_var_opcode(envvar_enum, default_output, trace, 0);
319
320 EXPECT_THAT(trace.as_rows(),
321 ElementsAre(AllOf(ROW_FIELD_EQ(execution_sel_execute_get_env_var, 1), // Should be set
322 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col0, 0), // No PI lookup
323 ROW_FIELD_EQ(execution_sel_envvar_pi_lookup_col1, 0), // No PI lookup
324 ROW_FIELD_EQ(execution_envvar_pi_row_idx, 0), // No PI lookup
325 ROW_FIELD_EQ(execution_is_address, 0),
326 ROW_FIELD_EQ(execution_is_sender, 0),
327 ROW_FIELD_EQ(execution_is_transactionfee, 0),
328 ROW_FIELD_EQ(execution_is_isstaticcall, 0),
329 ROW_FIELD_EQ(execution_is_l2gasleft, 0),
330 ROW_FIELD_EQ(execution_is_dagasleft, 1), // Should be set
331 ROW_FIELD_EQ(execution_value_from_pi, 0))));
332}
333
334} // namespace
335} // namespace bb::avm2::tracegen
#define AVM_PUBLIC_INPUTS_GLOBAL_VARIABLES_GAS_FEES_ROW_IDX
#define AVM_PUBLIC_INPUTS_GLOBAL_VARIABLES_BLOCK_NUMBER_ROW_IDX
#define AVM_PUBLIC_INPUTS_GLOBAL_VARIABLES_VERSION_ROW_IDX
#define AVM_PUBLIC_INPUTS_GLOBAL_VARIABLES_TIMESTAMP_ROW_IDX
#define AVM_PUBLIC_INPUTS_GLOBAL_VARIABLES_CHAIN_ID_ROW_IDX
static TaggedValue from_tag(ValueTag tag, FF value)
std::vector< AvmFullRowConstRef > as_rows() const
AluTraceBuilder builder
Definition alu.test.cpp:124
TestTraceContainer trace
#define ROW_FIELD_EQ(field_name, expression)
Definition macros.hpp:15
TaggedValue MemoryValue
AvmFlavorSettings::FF FF
Definition field.hpp:10
TEST(BoomerangMegaCircuitBuilder, BasicCircuit)
unsigned __int128 uint128_t
Definition serialize.hpp:44