1#include <gmock/gmock.h>
2#include <gtest/gtest.h>
16using ::testing::SizeIs;
18TEST(AvmInputsTest, Deserialization)
21 auto data =
read_file(
"../src/barretenberg/vm2/testing/avm_inputs.testdata.bin");
30TEST(AvmInputsTest, FormatTransformations)
32 using ::testing::AllOf;
33 using ::testing::ElementsAre;
36 auto as_cols = pi.to_columns();
46 EXPECT_EQ(as_cols, unflattened);
49TEST(AvmInputsTest, ValuesInColumns)
55 pi.global_variables.chain_id = 123;
56 pi.global_variables.version = 456;
57 pi.global_variables.block_number = 12345;
58 pi.global_variables.slot_number = 67890;
59 pi.global_variables.timestamp = 789000;
60 pi.global_variables.coinbase = 123123;
61 pi.global_variables.fee_recipient = 9876;
64 pi.global_variables.gas_fees.fee_per_da_gas = 111;
65 pi.global_variables.gas_fees.fee_per_l2_gas = 222;
68 pi.start_tree_snapshots.l1_to_l2_message_tree.root = 1000;
69 pi.start_tree_snapshots.l1_to_l2_message_tree.next_available_leaf_index = 2000;
70 pi.start_tree_snapshots.note_hash_tree.root = 3000;
71 pi.start_tree_snapshots.note_hash_tree.next_available_leaf_index = 4000;
72 pi.start_tree_snapshots.nullifier_tree.root = 5000;
73 pi.start_tree_snapshots.nullifier_tree.next_available_leaf_index = 6000;
74 pi.start_tree_snapshots.public_data_tree.root = 7000;
75 pi.start_tree_snapshots.public_data_tree.next_available_leaf_index = 8000;
78 pi.start_gas_used.da_gas = 100;
79 pi.start_gas_used.l2_gas = 200;
82 pi.gas_settings.gas_limits.da_gas = 1234;
83 pi.gas_settings.gas_limits.l2_gas = 5678;
84 pi.gas_settings.teardown_gas_limits.da_gas = 9012;
85 pi.gas_settings.teardown_gas_limits.l2_gas = 3456;
86 pi.gas_settings.max_fees_per_gas.fee_per_da_gas = 7890;
87 pi.gas_settings.max_fees_per_gas.fee_per_l2_gas = 1234;
88 pi.gas_settings.max_priority_fees_per_gas.fee_per_da_gas = 5678;
89 pi.gas_settings.max_priority_fees_per_gas.fee_per_l2_gas = 9012;
95 pi.public_call_request_array_lengths.setup_calls = 2;
96 pi.public_call_request_array_lengths.app_logic_calls = 3;
97 pi.public_call_request_array_lengths.teardown_call =
true;
100 pi.public_setup_call_requests[0].msg_sender = 1111;
101 pi.public_setup_call_requests[0].contract_address = 2222;
102 pi.public_setup_call_requests[0].is_static_call =
true;
103 pi.public_setup_call_requests[0].calldata_hash = 3333;
105 pi.public_app_logic_call_requests[1].msg_sender = 4444;
106 pi.public_app_logic_call_requests[1].contract_address = 5555;
107 pi.public_app_logic_call_requests[1].is_static_call =
false;
108 pi.public_app_logic_call_requests[1].calldata_hash = 6666;
110 pi.public_teardown_call_request.msg_sender = 7777;
111 pi.public_teardown_call_request.contract_address = 8888;
112 pi.public_teardown_call_request.is_static_call =
true;
113 pi.public_teardown_call_request.calldata_hash = 9999;
116 pi.previous_non_revertible_accumulated_data_array_lengths.note_hashes = 10;
117 pi.previous_non_revertible_accumulated_data_array_lengths.nullifiers = 20;
118 pi.previous_non_revertible_accumulated_data_array_lengths.l2_to_l1_msgs = 30;
120 pi.previous_revertible_accumulated_data_array_lengths.note_hashes = 40;
121 pi.previous_revertible_accumulated_data_array_lengths.nullifiers = 50;
122 pi.previous_revertible_accumulated_data_array_lengths.l2_to_l1_msgs = 60;
125 pi.previous_non_revertible_accumulated_data.l2_to_l1_msgs[0].message.recipient = 1234;
126 pi.previous_non_revertible_accumulated_data.l2_to_l1_msgs[0].message.content = 1357;
127 pi.previous_non_revertible_accumulated_data.l2_to_l1_msgs[0].contract_address = 3579;
130 pi.accumulated_data.note_hashes[2] = 54321;
131 pi.accumulated_data.nullifiers[3] = 98765;
134 pi.accumulated_data.l2_to_l1_msgs[1].message.recipient = 3333;
135 pi.accumulated_data.l2_to_l1_msgs[1].message.content = 7531;
136 pi.accumulated_data.l2_to_l1_msgs[1].contract_address = 9753;
139 std::vector<FF> public_log_fields;
140 public_log_fields.reserve(3);
141 for (
size_t j = 0; j < 3; ++j) {
142 public_log_fields.push_back(10000 + j);
144 pi.accumulated_data.public_logs.add_log({
145 .fields = public_log_fields,
146 .contract_address = 11223,
150 pi.accumulated_data.public_data_writes[1].leaf_slot = 5555;
151 pi.accumulated_data.public_data_writes[1].value = 6666;
154 pi.end_gas_used.da_gas = 5000;
155 pi.end_gas_used.l2_gas = 7000;
158 pi.end_tree_snapshots.l1_to_l2_message_tree.root = 10000;
159 pi.end_tree_snapshots.l1_to_l2_message_tree.next_available_leaf_index = 20000;
160 pi.end_tree_snapshots.note_hash_tree.root = 30000;
161 pi.end_tree_snapshots.note_hash_tree.next_available_leaf_index = 40000;
162 pi.end_tree_snapshots.nullifier_tree.root = 50000;
163 pi.end_tree_snapshots.nullifier_tree.next_available_leaf_index = 60000;
164 pi.end_tree_snapshots.public_data_tree.root = 70000;
165 pi.end_tree_snapshots.public_data_tree.next_available_leaf_index = 80000;
168 pi.transaction_fee = 9876;
171 pi.accumulated_data_array_lengths.note_hashes = 3;
172 pi.accumulated_data_array_lengths.nullifiers = 4;
173 pi.accumulated_data_array_lengths.l2_to_l1_msgs = 2;
174 pi.accumulated_data_array_lengths.public_data_writes = 5;
180 auto columns = pi.to_columns();
187 const size_t col0_offset = 0;
198 pi.global_variables.block_number);
200 pi.global_variables.slot_number);
203 pi.global_variables.fee_recipient);
205 pi.global_variables.gas_fees.fee_per_da_gas);
207 pi.global_variables.gas_fees.fee_per_l2_gas);
212 pi.start_tree_snapshots.l1_to_l2_message_tree.root);
214 pi.start_tree_snapshots.l1_to_l2_message_tree.next_available_leaf_index);
216 pi.start_tree_snapshots.note_hash_tree.root);
218 pi.start_tree_snapshots.note_hash_tree.next_available_leaf_index);
220 pi.start_tree_snapshots.nullifier_tree.root);
222 pi.start_tree_snapshots.nullifier_tree.next_available_leaf_index);
224 pi.start_tree_snapshots.public_data_tree.root);
226 pi.start_tree_snapshots.public_data_tree.next_available_leaf_index);
236 pi.gas_settings.teardown_gas_limits.da_gas);
238 pi.gas_settings.teardown_gas_limits.l2_gas);
240 pi.gas_settings.max_fees_per_gas.fee_per_da_gas);
242 pi.gas_settings.max_fees_per_gas.fee_per_l2_gas);
244 pi.gas_settings.max_priority_fees_per_gas.fee_per_da_gas);
246 pi.gas_settings.max_priority_fees_per_gas.fee_per_l2_gas);
253 pi.public_call_request_array_lengths.setup_calls);
255 pi.public_call_request_array_lengths.app_logic_calls);
257 static_cast<uint8_t
>(pi.public_call_request_array_lengths.teardown_call));
261 EXPECT_EQ(flat[col0_offset + setup_row], pi.public_setup_call_requests[0].msg_sender);
262 EXPECT_EQ(flat[col1_offset + setup_row], pi.public_setup_call_requests[0].contract_address);
263 EXPECT_EQ(flat[col2_offset + setup_row],
static_cast<uint8_t
>(pi.public_setup_call_requests[0].is_static_call));
264 EXPECT_EQ(flat[col3_offset + setup_row], pi.public_setup_call_requests[0].calldata_hash);
267 EXPECT_EQ(flat[col0_offset + app_logic_row], pi.public_app_logic_call_requests[1].msg_sender);
268 EXPECT_EQ(flat[col1_offset + app_logic_row], pi.public_app_logic_call_requests[1].contract_address);
269 EXPECT_EQ(flat[col2_offset + app_logic_row],
270 static_cast<uint8_t
>(pi.public_app_logic_call_requests[1].is_static_call));
271 EXPECT_EQ(flat[col3_offset + app_logic_row], pi.public_app_logic_call_requests[1].calldata_hash);
274 EXPECT_EQ(flat[col0_offset + teardown_row], pi.public_teardown_call_request.msg_sender);
275 EXPECT_EQ(flat[col1_offset + teardown_row], pi.public_teardown_call_request.contract_address);
276 EXPECT_EQ(flat[col2_offset + teardown_row],
static_cast<uint8_t
>(pi.public_teardown_call_request.is_static_call));
277 EXPECT_EQ(flat[col3_offset + teardown_row], pi.public_teardown_call_request.calldata_hash);
280 EXPECT_EQ(flat[col0_offset +
282 pi.previous_non_revertible_accumulated_data_array_lengths.note_hashes);
285 pi.previous_non_revertible_accumulated_data_array_lengths.nullifiers);
286 EXPECT_EQ(flat[col0_offset +
288 pi.previous_non_revertible_accumulated_data_array_lengths.l2_to_l1_msgs);
293 pi.previous_revertible_accumulated_data_array_lengths.note_hashes);
296 pi.previous_revertible_accumulated_data_array_lengths.nullifiers);
299 pi.previous_revertible_accumulated_data_array_lengths.l2_to_l1_msgs);
303 pi.accumulated_data_array_lengths.note_hashes);
305 pi.accumulated_data_array_lengths.nullifiers);
307 pi.accumulated_data_array_lengths.l2_to_l1_msgs);
309 pi.accumulated_data_array_lengths.public_data_writes);
313 EXPECT_EQ(flat[col0_offset + l2_to_l1_msg_row],
314 pi.previous_non_revertible_accumulated_data.l2_to_l1_msgs[0].message.recipient);
315 EXPECT_EQ(flat[col1_offset + l2_to_l1_msg_row],
316 pi.previous_non_revertible_accumulated_data.l2_to_l1_msgs[0].message.content);
317 EXPECT_EQ(flat[col2_offset + l2_to_l1_msg_row],
318 pi.previous_non_revertible_accumulated_data.l2_to_l1_msgs[0].contract_address);
322 pi.end_tree_snapshots.l1_to_l2_message_tree.root);
324 pi.end_tree_snapshots.l1_to_l2_message_tree.next_available_leaf_index);
326 pi.end_tree_snapshots.note_hash_tree.root);
328 pi.end_tree_snapshots.note_hash_tree.next_available_leaf_index);
336 pi.accumulated_data.note_hashes[2]);
338 pi.accumulated_data.nullifiers[3]);
342 EXPECT_EQ(flat[col0_offset + acc_l2_to_l1_msg_row], pi.accumulated_data.l2_to_l1_msgs[1].message.recipient);
343 EXPECT_EQ(flat[col1_offset + acc_l2_to_l1_msg_row], pi.accumulated_data.l2_to_l1_msgs[1].message.content);
344 EXPECT_EQ(flat[col2_offset + acc_l2_to_l1_msg_row], pi.accumulated_data.l2_to_l1_msgs[1].contract_address);
349 EXPECT_EQ(flat[col0_offset + public_logs_row], pi.accumulated_data.public_logs.length);
351 for (
size_t j = 0; j < 3; ++j) {
353 pi.accumulated_data.public_logs.payload[j]);
358 EXPECT_EQ(flat[col0_offset + public_data_write_row], pi.accumulated_data.public_data_writes[1].leaf_slot);
359 EXPECT_EQ(flat[col1_offset + public_data_write_row], pi.accumulated_data.public_data_writes[1].value);
#define AVM_PUBLIC_INPUTS_AVM_ACCUMULATED_DATA_ARRAY_LENGTHS_NOTE_HASHES_ROW_IDX
#define AVM_PUBLIC_INPUTS_PUBLIC_APP_LOGIC_CALL_REQUESTS_ROW_IDX
#define AVM_PUBLIC_INPUTS_GLOBAL_VARIABLES_GAS_FEES_ROW_IDX
#define AVM_PUBLIC_INPUTS_COLUMNS_COMBINED_LENGTH
#define AVM_PUBLIC_INPUTS_END_TREE_SNAPSHOTS_L1_TO_L2_MESSAGE_TREE_ROW_IDX
#define AVM_PUBLIC_INPUTS_PUBLIC_TEARDOWN_CALL_REQUEST_ROW_IDX
#define AVM_PUBLIC_INPUTS_FEE_PAYER_ROW_IDX
#define AVM_PUBLIC_INPUTS_AVM_ACCUMULATED_DATA_L2_TO_L1_MSGS_ROW_IDX
#define AVM_PUBLIC_INPUTS_GLOBAL_VARIABLES_FEE_RECIPIENT_ROW_IDX
#define AVM_PUBLIC_INPUTS_PREVIOUS_REVERTIBLE_ACCUMULATED_DATA_ARRAY_LENGTHS_NULLIFIERS_ROW_IDX
#define AVM_PUBLIC_INPUTS_PREVIOUS_REVERTIBLE_ACCUMULATED_DATA_ARRAY_LENGTHS_NOTE_HASHES_ROW_IDX
#define AVM_PUBLIC_INPUTS_PREVIOUS_REVERTIBLE_ACCUMULATED_DATA_ARRAY_LENGTHS_L2_TO_L1_MSGS_ROW_IDX
#define AVM_PUBLIC_INPUTS_GLOBAL_VARIABLES_COINBASE_ROW_IDX
#define AVM_PUBLIC_INPUTS_PREVIOUS_NON_REVERTIBLE_ACCUMULATED_DATA_L2_TO_L1_MSGS_ROW_IDX
#define AVM_PUBLIC_INPUTS_GAS_SETTINGS_TEARDOWN_GAS_LIMITS_ROW_IDX
#define FLAT_PUBLIC_LOGS_HEADER_LENGTH
#define AVM_PUBLIC_INPUTS_TRANSACTION_FEE_ROW_IDX
#define AVM_PUBLIC_INPUTS_AVM_ACCUMULATED_DATA_NULLIFIERS_ROW_IDX
#define AVM_PUBLIC_INPUTS_AVM_ACCUMULATED_DATA_ARRAY_LENGTHS_L2_TO_L1_MSGS_ROW_IDX
#define AVM_PUBLIC_INPUTS_END_GAS_USED_ROW_IDX
#define AVM_PUBLIC_INPUTS_AVM_ACCUMULATED_DATA_ARRAY_LENGTHS_NULLIFIERS_ROW_IDX
#define AVM_PUBLIC_INPUTS_AVM_ACCUMULATED_DATA_ARRAY_LENGTHS_PUBLIC_DATA_WRITES_ROW_IDX
#define AVM_PUBLIC_INPUTS_START_TREE_SNAPSHOTS_L1_TO_L2_MESSAGE_TREE_ROW_IDX
#define AVM_PUBLIC_INPUTS_GLOBAL_VARIABLES_BLOCK_NUMBER_ROW_IDX
#define AVM_PUBLIC_INPUTS_PUBLIC_SETUP_CALL_REQUESTS_ROW_IDX
#define AVM_PUBLIC_INPUTS_PUBLIC_CALL_REQUEST_ARRAY_LENGTHS_APP_LOGIC_CALLS_ROW_IDX
#define AVM_PUBLIC_INPUTS_PREVIOUS_NON_REVERTIBLE_ACCUMULATED_DATA_ARRAY_LENGTHS_NULLIFIERS_ROW_IDX
#define AVM_PUBLIC_INPUTS_START_TREE_SNAPSHOTS_NOTE_HASH_TREE_ROW_IDX
#define AVM_PUBLIC_INPUTS_AVM_ACCUMULATED_DATA_NOTE_HASHES_ROW_IDX
#define AVM_PUBLIC_INPUTS_END_TREE_SNAPSHOTS_NOTE_HASH_TREE_ROW_IDX
#define AVM_PUBLIC_INPUTS_GLOBAL_VARIABLES_SLOT_NUMBER_ROW_IDX
#define AVM_PUBLIC_INPUTS_GLOBAL_VARIABLES_VERSION_ROW_IDX
#define AVM_PUBLIC_INPUTS_START_TREE_SNAPSHOTS_PUBLIC_DATA_TREE_ROW_IDX
#define AVM_PUBLIC_INPUTS_REVERTED_ROW_IDX
#define AVM_PUBLIC_INPUTS_PUBLIC_CALL_REQUEST_ARRAY_LENGTHS_TEARDOWN_CALL_ROW_IDX
#define AVM_PUBLIC_INPUTS_GLOBAL_VARIABLES_TIMESTAMP_ROW_IDX
#define AVM_PUBLIC_INPUTS_PREVIOUS_NON_REVERTIBLE_ACCUMULATED_DATA_ARRAY_LENGTHS_L2_TO_L1_MSGS_ROW_IDX
#define AVM_PUBLIC_INPUTS_GAS_SETTINGS_MAX_FEES_PER_GAS_ROW_IDX
#define AVM_PUBLIC_INPUTS_START_TREE_SNAPSHOTS_NULLIFIER_TREE_ROW_IDX
#define AVM_PUBLIC_INPUTS_START_GAS_USED_ROW_IDX
#define AVM_PUBLIC_INPUTS_PUBLIC_CALL_REQUEST_ARRAY_LENGTHS_SETUP_CALLS_ROW_IDX
#define AVM_PUBLIC_INPUTS_PREVIOUS_NON_REVERTIBLE_ACCUMULATED_DATA_ARRAY_LENGTHS_NOTE_HASHES_ROW_IDX
#define AVM_PUBLIC_INPUTS_AVM_ACCUMULATED_DATA_PUBLIC_DATA_WRITES_ROW_IDX
#define AVM_PUBLIC_INPUTS_GLOBAL_VARIABLES_CHAIN_ID_ROW_IDX
#define AVM_PUBLIC_INPUTS_AVM_ACCUMULATED_DATA_PUBLIC_LOGS_ROW_IDX
#define AVM_NUM_PUBLIC_INPUT_COLUMNS
#define AVM_PUBLIC_INPUTS_GAS_SETTINGS_GAS_LIMITS_ROW_IDX
#define AVM_PUBLIC_INPUTS_GAS_SETTINGS_MAX_PRIORITY_FEES_PER_GAS_ROW_IDX
#define AVM_PUBLIC_INPUTS_COLUMNS_MAX_LENGTH
const std::vector< MemoryValue > data
std::pair< tracegen::TraceContainer, PublicInputs > get_minimal_trace_with_pi()
std::vector< uint8_t > read_file(const std::string &filename, size_t bytes=0)
TEST(BoomerangMegaCircuitBuilder, BasicCircuit)