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