Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
avm_io.cpp
Go to the documentation of this file.
2
3#include <vector>
4
7
8namespace bb::avm2 {
9namespace {
10
15
16void set_snapshot_in_cols(const AppendOnlyTreeSnapshot& snapshot, std::vector<std::vector<FF>>& cols, size_t row_idx)
17{
18 cols[0][row_idx] = snapshot.root;
19 cols[1][row_idx] = snapshot.next_available_leaf_index;
20}
21
22void set_gas_in_cols(const Gas& gas, std::vector<std::vector<FF>>& cols, size_t row_idx)
23{
24 cols[0][row_idx] = gas.da_gas;
25 cols[1][row_idx] = gas.l2_gas;
26}
27
28void set_gas_fees_in_cols(const GasFees& gas_fees, std::vector<std::vector<FF>>& cols, size_t row_idx)
29{
30 cols[0][row_idx] = gas_fees.fee_per_da_gas;
31 cols[1][row_idx] = gas_fees.fee_per_l2_gas;
32}
33
34void set_public_call_request_in_cols(const PublicCallRequest& request,
35 std::vector<std::vector<FF>>& cols,
36 size_t row_idx)
37{
38 cols[0][row_idx] = request.msg_sender;
39 cols[1][row_idx] = request.contract_address;
40 cols[2][row_idx] = static_cast<uint8_t>(request.is_static_call);
41 cols[3][row_idx] = request.calldata_hash;
42}
43
44void set_public_call_request_array_in_cols(const std::array<PublicCallRequest, MAX_ENQUEUED_CALLS_PER_TX>& requests,
45 std::vector<std::vector<FF>>& cols,
46 size_t array_start_row_idx)
47{
48 for (size_t i = 0; i < requests.size(); ++i) {
49 size_t row = array_start_row_idx + i;
50 set_public_call_request_in_cols(requests[i], cols, row);
51 }
52}
53
54template <size_t SIZE>
55void set_field_array_in_cols(const std::array<FF, SIZE>& arr,
56 std::vector<std::vector<FF>>& cols,
57 size_t array_start_row_idx)
58{
59 for (size_t i = 0; i < arr.size(); ++i) {
60 size_t row = array_start_row_idx + i;
61 cols[0][row] = arr[i];
62 }
63}
64
65template <size_t SIZE>
66void set_l2_to_l1_msg_array_in_cols(const std::array<ScopedL2ToL1Message, SIZE>& arr,
67 std::vector<std::vector<FF>>& cols,
68 size_t array_start_row_idx)
69{
70 for (size_t i = 0; i < arr.size(); ++i) {
71 size_t row = array_start_row_idx + i;
72 cols[0][row] = arr[i].message.recipient;
73 cols[1][row] = arr[i].message.content;
74 cols[2][row] = arr[i].contract_address;
75 }
76}
77
78void set_public_logs_in_cols(const PublicLogs& public_logs,
79 std::vector<std::vector<FF>>& cols,
80 size_t array_start_row_idx)
81{
82 // Header
83 cols[0][array_start_row_idx] = public_logs.length;
84 // Payload
85 for (size_t i = 0; i < public_logs.length; ++i) {
86 cols[0][array_start_row_idx + i + FLAT_PUBLIC_LOGS_HEADER_LENGTH] = public_logs.payload[i];
87 }
88}
89
90template <size_t SIZE>
91void set_public_data_writes_in_cols(const std::array<PublicDataWrite, SIZE>& writes,
92 std::vector<std::vector<FF>>& cols,
93 size_t array_start_row_idx)
94{
95 for (size_t i = 0; i < writes.size(); ++i) {
96 size_t row = array_start_row_idx + i;
97 cols[0][row] = writes[i].leaf_slot;
98 cols[1][row] = writes[i].value;
99 }
100}
101
102void set_protocol_contracts_in_cols(const ProtocolContracts& protocol_contracts,
103 std::vector<std::vector<FF>>& cols,
104 size_t protocol_contracts_start_row_idx)
105{
106 set_field_array_in_cols(protocol_contracts.derived_addresses, cols, protocol_contracts_start_row_idx);
107}
108
109} // anonymous namespace
110
114
115PublicInputs PublicInputs::from(const std::vector<uint8_t>& data)
116{
118 msgpack::unpack(reinterpret_cast<const char*>(data.data()), data.size()).get().convert(inputs);
119 return inputs;
120}
121
122AvmProvingInputs AvmProvingInputs::from(const std::vector<uint8_t>& data)
123{
125 msgpack::unpack(reinterpret_cast<const char*>(data.data()), data.size()).get().convert(inputs);
126 return inputs;
127}
128
130{
132 msgpack::unpack(reinterpret_cast<const char*>(data.data()), data.size()).get().convert(inputs);
133 return inputs;
134}
135
139
140// WARNING: If updating this columns conversion, you must also update columns serialization
141// in the Noir `AvmCircuitPublicInputs` struct in avm_circuit_public_inputs.nr
143{
145 std::vector<FF>(AVM_PUBLIC_INPUTS_COLUMNS_MAX_LENGTH, FF(0)));
146
147 // Global variables
156
157 // Protocol contracts
158 set_protocol_contracts_in_cols(protocol_contracts, cols, AVM_PUBLIC_INPUTS_PROTOCOL_CONTRACTS_ROW_IDX);
159
160 // Start tree snapshots
161 set_snapshot_in_cols(start_tree_snapshots.l1_to_l2_message_tree,
162 cols,
164 set_snapshot_in_cols(
166 set_snapshot_in_cols(
168 set_snapshot_in_cols(
170
171 // Start gas used
173
174 // Gas settings
178 set_gas_fees_in_cols(
180
181 // Effective gas fees
183
184 // Fee payer
186
187 // Prover id
189
190 // Public Call Request Array Lengths
197
198 // Setup, app logic, and teardown call requests
199 set_public_call_request_array_in_cols(
201 set_public_call_request_array_in_cols(
203 set_public_call_request_in_cols(
205
206 // Previous non-revertible accumulated data array lengths
213
214 // Previous revertible accumulated data array lengths
221
222 // Previous non-revertible accumulated data
224 cols,
227 cols,
229 set_l2_to_l1_msg_array_in_cols(previous_non_revertible_accumulated_data.l2_to_l1_msgs,
230 cols,
232
233 // Previous revertible accumulated data
235 cols,
237 set_field_array_in_cols(previous_revertible_accumulated_data.nullifiers,
238 cols,
240 set_l2_to_l1_msg_array_in_cols(previous_revertible_accumulated_data.l2_to_l1_msgs,
241 cols,
243
244 // End tree snapshots
245 set_snapshot_in_cols(end_tree_snapshots.l1_to_l2_message_tree,
246 cols,
248 set_snapshot_in_cols(
250 set_snapshot_in_cols(
252 set_snapshot_in_cols(
254
255 // End gas used
257
258 // Accumulated Data Array Lengths
267
268 // Accumulated data
269 set_field_array_in_cols(
271 set_field_array_in_cols(
273 set_l2_to_l1_msg_array_in_cols(
275 set_public_logs_in_cols(
277 set_public_data_writes_in_cols(
279
280 // Transaction fee
282
283 // Reverted
284 cols[0][AVM_PUBLIC_INPUTS_REVERTED_ROW_IDX] = static_cast<uint8_t>(reverted);
285
286 return cols;
287}
288
289std::vector<FF> PublicInputs::columns_to_flat(std::vector<std::vector<FF>> const& columns)
290{
291 std::vector<FF> flat;
292 for (const auto& col : columns) {
293 if (col.size() != AVM_PUBLIC_INPUTS_COLUMNS_MAX_LENGTH) {
294 throw std::invalid_argument("Public inputs column size does not match the expected max length.");
295 }
296 flat.insert(flat.end(), col.begin(), col.end());
297 }
298 return flat;
299}
300
301} // namespace bb::avm2
#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_END_TREE_SNAPSHOTS_L1_TO_L2_MESSAGE_TREE_ROW_IDX
#define AVM_PUBLIC_INPUTS_EFFECTIVE_GAS_FEES_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_NON_REVERTIBLE_ACCUMULATED_DATA_NULLIFIERS_ROW_IDX
#define AVM_PUBLIC_INPUTS_PROTOCOL_CONTRACTS_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_PREVIOUS_REVERTIBLE_ACCUMULATED_DATA_L2_TO_L1_MSGS_ROW_IDX
#define AVM_PUBLIC_INPUTS_PREVIOUS_NON_REVERTIBLE_ACCUMULATED_DATA_NOTE_HASHES_ROW_IDX
#define AVM_PUBLIC_INPUTS_AVM_ACCUMULATED_DATA_ARRAY_LENGTHS_NULLIFIERS_ROW_IDX
#define AVM_PUBLIC_INPUTS_PROVER_ID_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_END_TREE_SNAPSHOTS_NULLIFIER_TREE_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_PREVIOUS_REVERTIBLE_ACCUMULATED_DATA_NOTE_HASHES_ROW_IDX
#define AVM_PUBLIC_INPUTS_PREVIOUS_REVERTIBLE_ACCUMULATED_DATA_NULLIFIERS_ROW_IDX
#define AVM_PUBLIC_INPUTS_COLUMNS_MAX_LENGTH
#define AVM_PUBLIC_INPUTS_END_TREE_SNAPSHOTS_PUBLIC_DATA_TREE_ROW_IDX
const std::vector< MemoryValue > data
AvmProvingInputs inputs
AvmFlavorSettings::FF FF
Definition field.hpp:10
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
std::array< FF, MAX_NULLIFIERS_PER_TX > nullifiers
std::array< PublicDataWrite, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX > public_data_writes
std::array< ScopedL2ToL1Message, MAX_L2_TO_L1_MSGS_PER_TX > l2_to_l1_msgs
std::array< FF, MAX_NOTE_HASHES_PER_TX > note_hashes
static AvmFastSimulationInputs from(const std::vector< uint8_t > &data)
Definition avm_io.cpp:129
static AvmProvingInputs from(const std::vector< uint8_t > &data)
Definition avm_io.cpp:122
std::array< FF, MAX_NOTE_HASHES_PER_TX > note_hashes
std::array< ScopedL2ToL1Message, MAX_L2_TO_L1_MSGS_PER_TX > l2_to_l1_msgs
std::array< FF, MAX_NULLIFIERS_PER_TX > nullifiers
PublicCallRequest public_teardown_call_request
Definition avm_io.hpp:40
PrivateToAvmAccumulatedDataArrayLengths previous_non_revertible_accumulated_data_array_lengths
Definition avm_io.hpp:41
static std::vector< FF > columns_to_flat(std::vector< std::vector< FF > > const &columns)
Definition avm_io.cpp:289
TreeSnapshots end_tree_snapshots
Definition avm_io.hpp:47
PrivateToAvmAccumulatedData previous_non_revertible_accumulated_data
Definition avm_io.hpp:43
std::vector< std::vector< FF > > to_columns() const
Serialization to columns.
Definition avm_io.cpp:142
GasSettings gas_settings
Definition avm_io.hpp:33
GlobalVariables global_variables
Definition avm_io.hpp:29
static PublicInputs from(const std::vector< uint8_t > &data)
Msgpack deserialization.
Definition avm_io.cpp:115
GasFees effective_gas_fees
Definition avm_io.hpp:34
PublicCallRequestArrayLengths public_call_request_array_lengths
Definition avm_io.hpp:37
AztecAddress fee_payer
Definition avm_io.hpp:35
TreeSnapshots start_tree_snapshots
Definition avm_io.hpp:31
std::array< PublicCallRequest, MAX_ENQUEUED_CALLS_PER_TX > public_app_logic_call_requests
Definition avm_io.hpp:39
ProtocolContracts protocol_contracts
Definition avm_io.hpp:30
AvmAccumulatedDataArrayLengths accumulated_data_array_lengths
Definition avm_io.hpp:49
PrivateToAvmAccumulatedDataArrayLengths previous_revertible_accumulated_data_array_lengths
Definition avm_io.hpp:42
std::array< PublicCallRequest, MAX_ENQUEUED_CALLS_PER_TX > public_setup_call_requests
Definition avm_io.hpp:38
AvmAccumulatedData accumulated_data
Definition avm_io.hpp:50
PrivateToAvmAccumulatedData previous_revertible_accumulated_data
Definition avm_io.hpp:44
AppendOnlyTreeSnapshot public_data_tree
AppendOnlyTreeSnapshot l1_to_l2_message_tree
AppendOnlyTreeSnapshot nullifier_tree
AppendOnlyTreeSnapshot note_hash_tree