@aztec/pxe 0.0.1-commit.fffb133c → 0.0.1-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dest/bin/check_oracle_version.js +5 -5
- package/dest/block_synchronizer/block_synchronizer.d.ts +10 -4
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +30 -6
- package/dest/config/package_info.js +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +66 -31
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +214 -75
- package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
- package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
- package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -7
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -11
- package/dest/contract_function_simulator/index.d.ts +2 -1
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +1 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +4 -6
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +8 -10
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +2 -2
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +2 -4
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +4 -7
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +6 -11
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +66 -47
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +9 -0
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +47 -0
- package/dest/contract_function_simulator/oracle/oracle.d.ts +78 -44
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +363 -114
- package/dest/contract_function_simulator/oracle/private_execution.js +5 -3
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +56 -86
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +123 -98
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +145 -70
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +435 -145
- package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
- package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
- package/dest/contract_function_simulator/pick_notes.js +20 -3
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.js +3 -0
- package/dest/contract_logging.d.ts +27 -0
- package/dest/contract_logging.d.ts.map +1 -0
- package/dest/contract_logging.js +38 -0
- package/dest/contract_sync/contract_sync_service.d.ts +45 -0
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
- package/dest/contract_sync/contract_sync_service.js +150 -0
- package/dest/contract_sync/helpers.d.ts +27 -0
- package/dest/contract_sync/helpers.d.ts.map +1 -0
- package/dest/contract_sync/{index.js → helpers.js} +16 -17
- package/dest/debug/pxe_debug_utils.d.ts +24 -10
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +28 -18
- package/dest/entrypoints/client/bundle/index.d.ts +3 -1
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +2 -0
- package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +24 -9
- package/dest/entrypoints/client/lazy/index.d.ts +3 -1
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +2 -0
- package/dest/entrypoints/client/lazy/utils.d.ts +3 -3
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +25 -10
- package/dest/entrypoints/pxe_creation_options.d.ts +8 -2
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/pxe_creation_options.js +3 -1
- package/dest/entrypoints/server/index.d.ts +5 -3
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +4 -2
- package/dest/entrypoints/server/utils.d.ts +2 -2
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +31 -11
- package/dest/events/event_service.d.ts +16 -8
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +46 -14
- package/dest/events/private_event_filter_validator.d.ts +3 -2
- package/dest/events/private_event_filter_validator.d.ts.map +1 -1
- package/dest/events/private_event_filter_validator.js +15 -0
- package/dest/hooks/authorize_utility_call.d.ts +37 -0
- package/dest/hooks/authorize_utility_call.d.ts.map +1 -0
- package/dest/hooks/authorize_utility_call.js +4 -0
- package/dest/hooks/execution_hooks.d.ts +42 -0
- package/dest/hooks/execution_hooks.d.ts.map +1 -0
- package/dest/hooks/execution_hooks.js +9 -0
- package/dest/hooks/index.d.ts +4 -0
- package/dest/hooks/index.d.ts.map +1 -0
- package/dest/hooks/index.js +1 -0
- package/dest/job_coordinator/job_coordinator.d.ts +3 -2
- package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
- package/dest/job_coordinator/job_coordinator.js +3 -2
- package/dest/logs/log_service.d.ts +10 -9
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +50 -85
- package/dest/messages/message_context_service.d.ts +17 -0
- package/dest/messages/message_context_service.d.ts.map +1 -0
- package/dest/messages/message_context_service.js +38 -0
- package/dest/notes/note_service.d.ts +29 -8
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +89 -65
- package/dest/notes_filter.d.ts +24 -0
- package/dest/notes_filter.d.ts.map +1 -0
- package/dest/notes_filter.js +4 -0
- package/dest/oracle_version.d.ts +4 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +20 -10
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
- package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
- package/dest/private_kernel/hints/index.d.ts +1 -1
- package/dest/private_kernel/hints/index.js +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +129 -68
- package/dest/private_kernel/hints/test_utils.d.ts +122 -0
- package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
- package/dest/private_kernel/hints/test_utils.js +203 -0
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +4 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +38 -19
- package/dest/private_kernel/private_kernel_oracle.d.ts +10 -6
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +26 -20
- package/dest/pxe.d.ts +87 -23
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +178 -119
- package/dest/storage/address_store/address_store.d.ts +1 -1
- package/dest/storage/address_store/address_store.d.ts.map +1 -1
- package/dest/storage/address_store/address_store.js +12 -11
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
- package/dest/storage/anchor_block_store/anchor_block_store.js +9 -2
- package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts +42 -0
- package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts.map +1 -0
- package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.js +93 -0
- package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts +15 -0
- package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts.map +1 -0
- package/dest/storage/backwards_compatibility_tests/schema_tests.js +588 -0
- package/dest/storage/backwards_compatibility_tests/store_spy.d.ts +19 -0
- package/dest/storage/backwards_compatibility_tests/store_spy.d.ts.map +1 -0
- package/dest/storage/backwards_compatibility_tests/store_spy.js +63 -0
- package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
- package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
- package/dest/storage/capsule_store/capsule_service.js +50 -0
- package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
- package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
- package/dest/storage/capsule_store/capsule_store.js +42 -36
- package/dest/storage/capsule_store/index.d.ts +2 -1
- package/dest/storage/capsule_store/index.d.ts.map +1 -1
- package/dest/storage/capsule_store/index.js +1 -0
- package/dest/storage/contract_store/contract_store.d.ts +42 -15
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +160 -73
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +13 -3
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +147 -107
- package/dest/storage/open_pxe_stores.d.ts +31 -0
- package/dest/storage/open_pxe_stores.d.ts.map +1 -0
- package/dest/storage/open_pxe_stores.js +26 -0
- package/dest/storage/private_event_store/private_event_store.d.ts +1 -1
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +87 -61
- package/dest/storage/private_event_store/stored_private_event.d.ts +4 -4
- package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -1
- package/dest/storage/private_event_store/stored_private_event.js +2 -2
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.js +31 -19
- package/dest/storage/tagging_store/sender_address_book_store.d.ts +1 -1
- package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_address_book_store.js +20 -14
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +29 -28
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +233 -137
- package/dest/tagging/get_all_logs_by_tags.d.ts +4 -4
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
- package/dest/tagging/get_all_logs_by_tags.js +20 -3
- package/dest/tagging/index.d.ts +6 -5
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +4 -3
- package/dest/tagging/persist_sender_tagging_index_ranges.d.ts +29 -0
- package/dest/tagging/persist_sender_tagging_index_ranges.d.ts.map +1 -0
- package/dest/tagging/persist_sender_tagging_index_ranges.js +42 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +56 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts.map +1 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.js +158 -0
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
- package/dest/tagging/reconcile_tagging_index_ranges.d.ts +36 -0
- package/dest/tagging/reconcile_tagging_index_ranges.d.ts.map +1 -0
- package/dest/tagging/reconcile_tagging_index_ranges.js +74 -0
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +5 -9
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +30 -13
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +13 -7
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +41 -10
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +6 -8
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +36 -24
- package/package.json +26 -16
- package/src/bin/check_oracle_version.ts +5 -5
- package/src/block_synchronizer/block_synchronizer.ts +45 -21
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/contract_function_simulator.ts +389 -134
- package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -14
- package/src/contract_function_simulator/index.ts +1 -0
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +9 -9
- package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +1 -1
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -5
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +4 -10
- package/src/contract_function_simulator/oracle/interfaces.ts +101 -62
- package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +104 -0
- package/src/contract_function_simulator/oracle/oracle.ts +464 -151
- package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +152 -191
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +709 -200
- package/src/contract_function_simulator/pick_notes.ts +22 -3
- package/src/contract_function_simulator/proxied_contract_data_source.ts +8 -1
- package/src/contract_logging.ts +52 -0
- package/src/contract_sync/contract_sync_service.ts +208 -0
- package/src/contract_sync/{index.ts → helpers.ts} +17 -29
- package/src/debug/pxe_debug_utils.ts +63 -19
- package/src/entrypoints/client/bundle/index.ts +2 -0
- package/src/entrypoints/client/bundle/utils.ts +19 -18
- package/src/entrypoints/client/lazy/index.ts +2 -0
- package/src/entrypoints/client/lazy/utils.ts +20 -18
- package/src/entrypoints/pxe_creation_options.ts +13 -1
- package/src/entrypoints/server/index.ts +4 -2
- package/src/entrypoints/server/utils.ts +25 -29
- package/src/events/event_service.ts +70 -24
- package/src/events/private_event_filter_validator.ts +21 -1
- package/src/hooks/authorize_utility_call.ts +40 -0
- package/src/hooks/execution_hooks.ts +48 -0
- package/src/hooks/index.ts +7 -0
- package/src/job_coordinator/job_coordinator.ts +4 -3
- package/src/logs/log_service.ts +88 -141
- package/src/messages/message_context_service.ts +45 -0
- package/src/notes/note_service.ts +124 -91
- package/src/notes_filter.ts +24 -0
- package/src/oracle_version.ts +20 -10
- package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
- package/src/private_kernel/hints/index.ts +1 -1
- package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +164 -117
- package/src/private_kernel/hints/test_utils.ts +325 -0
- package/src/private_kernel/private_kernel_execution_prover.ts +53 -22
- package/src/private_kernel/private_kernel_oracle.ts +36 -26
- package/src/pxe.ts +351 -168
- package/src/storage/address_store/address_store.ts +15 -15
- package/src/storage/anchor_block_store/anchor_block_store.ts +9 -1
- package/src/storage/backwards_compatibility_tests/__snapshots__/AddressStore.json +22 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/AnchorBlockStore.json +3 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/CapsuleStore.json +16 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/ContractStore.json +28 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/KeyStore.json +52 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +42 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +36 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/PrivateEventStore.json +44 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +18 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/SenderAddressBookStore.json +16 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +22 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +97 -0
- package/src/storage/backwards_compatibility_tests/kv_store_snapshot.ts +122 -0
- package/src/storage/backwards_compatibility_tests/schema_tests.ts +707 -0
- package/src/storage/backwards_compatibility_tests/store_spy.ts +73 -0
- package/src/storage/capsule_store/capsule_service.ts +90 -0
- package/src/storage/capsule_store/capsule_store.ts +52 -34
- package/src/storage/capsule_store/index.ts +1 -0
- package/src/storage/contract_store/contract_store.ts +193 -81
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +166 -132
- package/src/storage/open_pxe_stores.ts +47 -0
- package/src/storage/private_event_store/private_event_store.ts +106 -81
- package/src/storage/private_event_store/stored_private_event.ts +3 -3
- package/src/storage/tagging_store/recipient_tagging_store.ts +38 -24
- package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
- package/src/storage/tagging_store/sender_tagging_store.ts +287 -156
- package/src/tagging/get_all_logs_by_tags.ts +35 -7
- package/src/tagging/index.ts +5 -4
- package/src/tagging/persist_sender_tagging_index_ranges.ts +57 -0
- package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +236 -0
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
- package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +54 -18
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +44 -14
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +30 -29
- package/dest/contract_sync/index.d.ts +0 -23
- package/dest/contract_sync/index.d.ts.map +0 -1
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
- package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +0 -15
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +0 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +0 -99
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +0 -15
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +0 -1
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +0 -32
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -143
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -49
|
@@ -2,22 +2,27 @@ import {
|
|
|
2
2
|
AVM_EMITNOTEHASH_BASE_L2_GAS,
|
|
3
3
|
AVM_EMITNULLIFIER_BASE_L2_GAS,
|
|
4
4
|
AVM_SENDL2TOL1MSG_BASE_L2_GAS,
|
|
5
|
-
|
|
6
|
-
DA_GAS_PER_BYTE,
|
|
5
|
+
DA_GAS_PER_FIELD,
|
|
7
6
|
FIXED_AVM_STARTUP_L2_GAS,
|
|
8
|
-
FIXED_DA_GAS,
|
|
9
|
-
FIXED_L2_GAS,
|
|
10
7
|
L2_GAS_PER_CONTRACT_CLASS_LOG,
|
|
8
|
+
L2_GAS_PER_L2_TO_L1_MSG,
|
|
9
|
+
L2_GAS_PER_NOTE_HASH,
|
|
10
|
+
L2_GAS_PER_NULLIFIER,
|
|
11
11
|
L2_GAS_PER_PRIVATE_LOG,
|
|
12
12
|
MAX_CONTRACT_CLASS_LOGS_PER_TX,
|
|
13
13
|
MAX_ENQUEUED_CALLS_PER_TX,
|
|
14
14
|
MAX_L2_TO_L1_MSGS_PER_TX,
|
|
15
15
|
MAX_NOTE_HASHES_PER_TX,
|
|
16
|
+
MAX_NOTE_HASH_READ_REQUESTS_PER_TX,
|
|
16
17
|
MAX_NULLIFIERS_PER_TX,
|
|
18
|
+
MAX_NULLIFIER_READ_REQUESTS_PER_TX,
|
|
17
19
|
MAX_PRIVATE_LOGS_PER_TX,
|
|
20
|
+
MAX_TX_LIFETIME,
|
|
21
|
+
PRIVATE_TX_L2_GAS_OVERHEAD,
|
|
22
|
+
PUBLIC_TX_L2_GAS_OVERHEAD,
|
|
23
|
+
TX_DA_GAS_OVERHEAD,
|
|
18
24
|
} from '@aztec/constants';
|
|
19
25
|
import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection';
|
|
20
|
-
import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
|
|
21
26
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
22
27
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
23
28
|
import { Timer } from '@aztec/foundation/timer';
|
|
@@ -37,42 +42,59 @@ import type { FunctionCall } from '@aztec/stdlib/abi';
|
|
|
37
42
|
import { FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
|
|
38
43
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
39
44
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
45
|
+
import type { BlockParameter, L2TipsProvider } from '@aztec/stdlib/block';
|
|
40
46
|
import { Gas } from '@aztec/stdlib/gas';
|
|
41
47
|
import {
|
|
42
48
|
computeNoteHashNonce,
|
|
43
49
|
computeProtocolNullifier,
|
|
50
|
+
computeSiloedPrivateLogFirstField,
|
|
44
51
|
computeUniqueNoteHash,
|
|
45
52
|
siloNoteHash,
|
|
46
53
|
siloNullifier,
|
|
47
54
|
} from '@aztec/stdlib/hash';
|
|
48
55
|
import type { AztecNode } from '@aztec/stdlib/interfaces/server';
|
|
49
56
|
import {
|
|
57
|
+
ClaimedLengthArray,
|
|
50
58
|
PartialPrivateTailPublicInputsForPublic,
|
|
51
59
|
PartialPrivateTailPublicInputsForRollup,
|
|
52
60
|
type PrivateExecutionStep,
|
|
53
61
|
type PrivateKernelExecutionProofOutput,
|
|
54
62
|
PrivateKernelTailCircuitPublicInputs,
|
|
63
|
+
PrivateLogData,
|
|
55
64
|
PrivateToPublicAccumulatedData,
|
|
56
65
|
PrivateToRollupAccumulatedData,
|
|
57
66
|
PublicCallRequest,
|
|
67
|
+
ReadRequestActionEnum,
|
|
58
68
|
ScopedLogHash,
|
|
69
|
+
ScopedNoteHash,
|
|
70
|
+
ScopedNullifier,
|
|
71
|
+
ScopedReadRequest,
|
|
72
|
+
buildTransientDataHints,
|
|
73
|
+
getNoteHashReadRequestResetActions,
|
|
74
|
+
getNullifierReadRequestResetActions,
|
|
59
75
|
} from '@aztec/stdlib/kernel';
|
|
60
76
|
import { PrivateLog } from '@aztec/stdlib/logs';
|
|
61
77
|
import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
|
|
62
78
|
import { ChonkProof } from '@aztec/stdlib/proofs';
|
|
79
|
+
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
63
80
|
import {
|
|
64
81
|
BlockHeader,
|
|
65
82
|
CallContext,
|
|
66
83
|
HashedValues,
|
|
84
|
+
type OffchainEffect,
|
|
67
85
|
PrivateExecutionResult,
|
|
68
86
|
TxConstantData,
|
|
69
87
|
TxExecutionRequest,
|
|
70
88
|
collectNested,
|
|
89
|
+
collectNoteHashNullifierCounterMap,
|
|
71
90
|
getFinalMinRevertibleSideEffectCounter,
|
|
72
91
|
} from '@aztec/stdlib/tx';
|
|
73
92
|
|
|
93
|
+
import type { ContractSyncService } from '../contract_sync/contract_sync_service.js';
|
|
94
|
+
import type { ExecutionHooks } from '../hooks/index.js';
|
|
95
|
+
import type { MessageContextService } from '../messages/message_context_service.js';
|
|
74
96
|
import type { AddressStore } from '../storage/address_store/address_store.js';
|
|
75
|
-
import
|
|
97
|
+
import { CapsuleService } from '../storage/capsule_store/capsule_service.js';
|
|
76
98
|
import type { CapsuleStore } from '../storage/capsule_store/capsule_store.js';
|
|
77
99
|
import type { ContractStore } from '../storage/contract_store/contract_store.js';
|
|
78
100
|
import type { NoteStore } from '../storage/note_store/note_store.js';
|
|
@@ -89,52 +111,98 @@ import { executePrivateFunction } from './oracle/private_execution.js';
|
|
|
89
111
|
import { PrivateExecutionOracle } from './oracle/private_execution_oracle.js';
|
|
90
112
|
import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
|
|
91
113
|
|
|
114
|
+
/** Options for ContractFunctionSimulator.run. */
|
|
115
|
+
export type ContractSimulatorRunOpts = {
|
|
116
|
+
/** The address of the contract (should match request.origin). */
|
|
117
|
+
contractAddress: AztecAddress;
|
|
118
|
+
/** The function selector of the entry point. */
|
|
119
|
+
selector: FunctionSelector;
|
|
120
|
+
/** The address calling the function. Can be replaced to simulate a call from another contract or account. */
|
|
121
|
+
msgSender?: AztecAddress;
|
|
122
|
+
/** The block header to use as base state for this run. */
|
|
123
|
+
anchorBlockHeader: BlockHeader;
|
|
124
|
+
/** The address used as a tagging sender when emitting private logs. */
|
|
125
|
+
senderForTags?: AztecAddress;
|
|
126
|
+
/** The accounts whose notes we can access in this call. */
|
|
127
|
+
scopes: AztecAddress[];
|
|
128
|
+
/** The job ID for staged writes. */
|
|
129
|
+
jobId: string;
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
/** Args for ContractFunctionSimulator constructor. */
|
|
133
|
+
export type ContractFunctionSimulatorArgs = {
|
|
134
|
+
contractStore: ContractStore;
|
|
135
|
+
noteStore: NoteStore;
|
|
136
|
+
keyStore: KeyStore;
|
|
137
|
+
addressStore: AddressStore;
|
|
138
|
+
aztecNode: AztecNode;
|
|
139
|
+
l2TipsStore: L2TipsProvider;
|
|
140
|
+
senderTaggingStore: SenderTaggingStore;
|
|
141
|
+
recipientTaggingStore: RecipientTaggingStore;
|
|
142
|
+
senderAddressBookStore: SenderAddressBookStore;
|
|
143
|
+
capsuleStore: CapsuleStore;
|
|
144
|
+
privateEventStore: PrivateEventStore;
|
|
145
|
+
simulator: CircuitSimulator;
|
|
146
|
+
contractSyncService: ContractSyncService;
|
|
147
|
+
messageContextService: MessageContextService;
|
|
148
|
+
hooks?: ExecutionHooks;
|
|
149
|
+
};
|
|
150
|
+
|
|
92
151
|
/**
|
|
93
152
|
* The contract function simulator.
|
|
94
153
|
*/
|
|
95
154
|
export class ContractFunctionSimulator {
|
|
96
|
-
private log: Logger;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
155
|
+
private readonly log: Logger;
|
|
156
|
+
private readonly contractStore: ContractStore;
|
|
157
|
+
private readonly noteStore: NoteStore;
|
|
158
|
+
private readonly keyStore: KeyStore;
|
|
159
|
+
private readonly addressStore: AddressStore;
|
|
160
|
+
private readonly aztecNode: AztecNode;
|
|
161
|
+
private readonly l2TipsStore: L2TipsProvider;
|
|
162
|
+
private readonly senderTaggingStore: SenderTaggingStore;
|
|
163
|
+
private readonly recipientTaggingStore: RecipientTaggingStore;
|
|
164
|
+
private readonly senderAddressBookStore: SenderAddressBookStore;
|
|
165
|
+
private readonly capsuleStore: CapsuleStore;
|
|
166
|
+
private readonly privateEventStore: PrivateEventStore;
|
|
167
|
+
private readonly simulator: CircuitSimulator;
|
|
168
|
+
private readonly contractSyncService: ContractSyncService;
|
|
169
|
+
private readonly messageContextService: MessageContextService;
|
|
170
|
+
private readonly hooks: ExecutionHooks | undefined;
|
|
171
|
+
|
|
172
|
+
constructor(args: ContractFunctionSimulatorArgs) {
|
|
173
|
+
this.contractStore = args.contractStore;
|
|
174
|
+
this.noteStore = args.noteStore;
|
|
175
|
+
this.keyStore = args.keyStore;
|
|
176
|
+
this.addressStore = args.addressStore;
|
|
177
|
+
this.aztecNode = args.aztecNode;
|
|
178
|
+
this.l2TipsStore = args.l2TipsStore;
|
|
179
|
+
this.senderTaggingStore = args.senderTaggingStore;
|
|
180
|
+
this.recipientTaggingStore = args.recipientTaggingStore;
|
|
181
|
+
this.senderAddressBookStore = args.senderAddressBookStore;
|
|
182
|
+
this.capsuleStore = args.capsuleStore;
|
|
183
|
+
this.privateEventStore = args.privateEventStore;
|
|
184
|
+
this.simulator = args.simulator;
|
|
185
|
+
this.contractSyncService = args.contractSyncService;
|
|
186
|
+
this.messageContextService = args.messageContextService;
|
|
187
|
+
this.hooks = args.hooks;
|
|
112
188
|
this.log = createLogger('simulator');
|
|
113
189
|
}
|
|
114
190
|
|
|
115
191
|
/**
|
|
116
192
|
* Runs a private function.
|
|
117
193
|
* @param request - The transaction request.
|
|
118
|
-
* @param entryPointArtifact - The artifact of the entry point function.
|
|
119
|
-
* @param contractAddress - The address of the contract (should match request.origin)
|
|
120
|
-
* @param msgSender - The address calling the function. This can be replaced to simulate a call from another contract
|
|
121
|
-
* or a specific account.
|
|
122
|
-
* @param anchorBlockHeader - The block header to use as base state for this run.
|
|
123
|
-
* @param senderForTags - The address that is used as a tagging sender when emitting private logs. Returned from
|
|
124
|
-
* the `privateGetSenderForTags` oracle.
|
|
125
|
-
* @param scopes - The accounts whose notes we can access in this call. Currently optional and will default to all.
|
|
126
|
-
* @param jobId - The job ID for staged writes.
|
|
127
|
-
* @returns The result of the execution.
|
|
128
194
|
*/
|
|
129
195
|
public async run(
|
|
130
196
|
request: TxExecutionRequest,
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
197
|
+
{
|
|
198
|
+
contractAddress,
|
|
199
|
+
selector,
|
|
200
|
+
msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE),
|
|
201
|
+
anchorBlockHeader,
|
|
202
|
+
senderForTags,
|
|
203
|
+
scopes,
|
|
204
|
+
jobId,
|
|
205
|
+
}: ContractSimulatorRunOpts,
|
|
138
206
|
): Promise<PrivateExecutionResult> {
|
|
139
207
|
const simulatorSetupTimer = new Timer();
|
|
140
208
|
|
|
@@ -145,7 +213,7 @@ export class ContractFunctionSimulator {
|
|
|
145
213
|
}
|
|
146
214
|
|
|
147
215
|
if (request.origin !== contractAddress) {
|
|
148
|
-
|
|
216
|
+
throw new Error(
|
|
149
217
|
`Request origin does not match contract address in simulation. Request origin: ${request.origin}, contract address: ${contractAddress}`,
|
|
150
218
|
);
|
|
151
219
|
}
|
|
@@ -164,38 +232,40 @@ export class ContractFunctionSimulator {
|
|
|
164
232
|
const noteCache = new ExecutionNoteCache(protocolNullifier);
|
|
165
233
|
const taggingIndexCache = new ExecutionTaggingIndexCache();
|
|
166
234
|
|
|
167
|
-
const privateExecutionOracle = new PrivateExecutionOracle(
|
|
168
|
-
request.firstCallArgsHash,
|
|
169
|
-
request.txContext,
|
|
235
|
+
const privateExecutionOracle = new PrivateExecutionOracle({
|
|
236
|
+
argsHash: request.firstCallArgsHash,
|
|
237
|
+
txContext: request.txContext,
|
|
170
238
|
callContext,
|
|
171
239
|
anchorBlockHeader,
|
|
172
|
-
async call => {
|
|
173
|
-
await this.runUtility(call, [], anchorBlockHeader,
|
|
240
|
+
utilityExecutor: async (call, execScopes) => {
|
|
241
|
+
await this.runUtility(call, [], anchorBlockHeader, execScopes, jobId);
|
|
174
242
|
},
|
|
175
|
-
request.authWitnesses,
|
|
176
|
-
request.capsules,
|
|
177
|
-
HashedValuesCache.create(request.argsOfCalls),
|
|
243
|
+
authWitnesses: request.authWitnesses,
|
|
244
|
+
capsules: request.capsules,
|
|
245
|
+
executionCache: HashedValuesCache.create(request.argsOfCalls),
|
|
178
246
|
noteCache,
|
|
179
247
|
taggingIndexCache,
|
|
180
|
-
this.contractStore,
|
|
181
|
-
this.noteStore,
|
|
182
|
-
this.keyStore,
|
|
183
|
-
this.addressStore,
|
|
184
|
-
this.aztecNode,
|
|
185
|
-
this.
|
|
186
|
-
this.
|
|
187
|
-
this.
|
|
188
|
-
this.
|
|
189
|
-
this.
|
|
190
|
-
this.
|
|
248
|
+
contractStore: this.contractStore,
|
|
249
|
+
noteStore: this.noteStore,
|
|
250
|
+
keyStore: this.keyStore,
|
|
251
|
+
addressStore: this.addressStore,
|
|
252
|
+
aztecNode: this.aztecNode,
|
|
253
|
+
senderTaggingStore: this.senderTaggingStore,
|
|
254
|
+
recipientTaggingStore: this.recipientTaggingStore,
|
|
255
|
+
senderAddressBookStore: this.senderAddressBookStore,
|
|
256
|
+
capsuleService: new CapsuleService(this.capsuleStore, scopes),
|
|
257
|
+
privateEventStore: this.privateEventStore,
|
|
258
|
+
messageContextService: this.messageContextService,
|
|
259
|
+
contractSyncService: this.contractSyncService,
|
|
191
260
|
jobId,
|
|
192
|
-
0,
|
|
193
|
-
startSideEffectCounter,
|
|
194
|
-
undefined, // log
|
|
261
|
+
totalPublicCalldataCount: 0,
|
|
262
|
+
sideEffectCounter: startSideEffectCounter,
|
|
195
263
|
scopes,
|
|
196
264
|
senderForTags,
|
|
197
|
-
this.simulator,
|
|
198
|
-
|
|
265
|
+
simulator: this.simulator,
|
|
266
|
+
l2TipsStore: this.l2TipsStore,
|
|
267
|
+
hooks: this.hooks,
|
|
268
|
+
});
|
|
199
269
|
|
|
200
270
|
const setupTime = simulatorSetupTimer.ms();
|
|
201
271
|
|
|
@@ -224,7 +294,7 @@ export class ContractFunctionSimulator {
|
|
|
224
294
|
);
|
|
225
295
|
const publicFunctionsCalldata = await Promise.all(
|
|
226
296
|
publicCallRequests.map(async r => {
|
|
227
|
-
const calldata = await privateExecutionOracle.
|
|
297
|
+
const calldata = await privateExecutionOracle.getHashPreimage(r.calldataHash);
|
|
228
298
|
return new HashedValues(calldata, r.calldataHash);
|
|
229
299
|
}),
|
|
230
300
|
);
|
|
@@ -245,7 +315,6 @@ export class ContractFunctionSimulator {
|
|
|
245
315
|
}
|
|
246
316
|
}
|
|
247
317
|
|
|
248
|
-
// docs:start:execute_utility_function
|
|
249
318
|
/**
|
|
250
319
|
* Runs a utility function.
|
|
251
320
|
* @param call - The function call to execute.
|
|
@@ -259,34 +328,42 @@ export class ContractFunctionSimulator {
|
|
|
259
328
|
call: FunctionCall,
|
|
260
329
|
authwits: AuthWitness[],
|
|
261
330
|
anchorBlockHeader: BlockHeader,
|
|
262
|
-
scopes: AztecAddress[]
|
|
331
|
+
scopes: AztecAddress[],
|
|
263
332
|
jobId: string,
|
|
264
|
-
): Promise<Fr[]> {
|
|
333
|
+
): Promise<{ result: Fr[]; offchainEffects: OffchainEffect[] }> {
|
|
265
334
|
const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
|
|
266
335
|
|
|
267
336
|
if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
|
|
268
337
|
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
|
|
269
338
|
}
|
|
270
339
|
|
|
271
|
-
const
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
340
|
+
const utilityExecutor = async (syncCall: FunctionCall, execScopes: AztecAddress[]) => {
|
|
341
|
+
await this.runUtility(syncCall, [], anchorBlockHeader, execScopes, jobId);
|
|
342
|
+
};
|
|
343
|
+
|
|
344
|
+
const oracle = new UtilityExecutionOracle({
|
|
345
|
+
contractAddress: call.to,
|
|
346
|
+
authWitnesses: authwits,
|
|
347
|
+
capsules: [],
|
|
275
348
|
anchorBlockHeader,
|
|
276
|
-
this.contractStore,
|
|
277
|
-
this.noteStore,
|
|
278
|
-
this.keyStore,
|
|
279
|
-
this.addressStore,
|
|
280
|
-
this.aztecNode,
|
|
281
|
-
this.
|
|
282
|
-
this.
|
|
283
|
-
this.
|
|
284
|
-
this.
|
|
285
|
-
this.
|
|
349
|
+
contractStore: this.contractStore,
|
|
350
|
+
noteStore: this.noteStore,
|
|
351
|
+
keyStore: this.keyStore,
|
|
352
|
+
addressStore: this.addressStore,
|
|
353
|
+
aztecNode: this.aztecNode,
|
|
354
|
+
recipientTaggingStore: this.recipientTaggingStore,
|
|
355
|
+
senderAddressBookStore: this.senderAddressBookStore,
|
|
356
|
+
capsuleService: new CapsuleService(this.capsuleStore, scopes),
|
|
357
|
+
privateEventStore: this.privateEventStore,
|
|
358
|
+
messageContextService: this.messageContextService,
|
|
359
|
+
contractSyncService: this.contractSyncService,
|
|
360
|
+
l2TipsStore: this.l2TipsStore,
|
|
286
361
|
jobId,
|
|
287
|
-
undefined,
|
|
288
362
|
scopes,
|
|
289
|
-
|
|
363
|
+
simulator: this.simulator,
|
|
364
|
+
hooks: this.hooks,
|
|
365
|
+
utilityExecutor,
|
|
366
|
+
});
|
|
290
367
|
|
|
291
368
|
try {
|
|
292
369
|
this.log.verbose(`Executing utility function ${entryPointArtifact.name}`, {
|
|
@@ -310,13 +387,15 @@ export class ContractFunctionSimulator {
|
|
|
310
387
|
);
|
|
311
388
|
});
|
|
312
389
|
|
|
313
|
-
this.log.verbose(`Utility
|
|
314
|
-
return
|
|
390
|
+
this.log.verbose(`Utility execution for ${call.to}.${call.selector} completed`);
|
|
391
|
+
return {
|
|
392
|
+
result: witnessMapToFields(acirExecutionResult.returnWitness),
|
|
393
|
+
offchainEffects: oracle.getOffchainEffects(),
|
|
394
|
+
};
|
|
315
395
|
} catch (err) {
|
|
316
396
|
throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
|
|
317
397
|
}
|
|
318
398
|
}
|
|
319
|
-
// docs:end:execute_utility_function
|
|
320
399
|
|
|
321
400
|
/**
|
|
322
401
|
* Returns the execution statistics collected during the simulator run.
|
|
@@ -352,63 +431,82 @@ class OrderedSideEffect<T> {
|
|
|
352
431
|
* (allowing state overrides) and is much faster, while still generating a valid
|
|
353
432
|
* output that can be sent to the node for public simulation
|
|
354
433
|
* @param privateExecutionResult - The result of the private execution.
|
|
355
|
-
* @param
|
|
434
|
+
* @param debugFunctionNameGetter - A provider for contract data in order to get function names and debug info.
|
|
435
|
+
* @param node - AztecNode for verifying settled read requests against the note hash and nullifier trees.
|
|
356
436
|
* @param minRevertibleSideEffectCounterOverride - Optional override for the min revertible side effect counter.
|
|
357
437
|
* Used by TXE to simulate account contract behavior (setting the counter before app execution).
|
|
358
438
|
* @returns The simulated proving result.
|
|
359
439
|
*/
|
|
360
440
|
export async function generateSimulatedProvingResult(
|
|
361
441
|
privateExecutionResult: PrivateExecutionResult,
|
|
362
|
-
|
|
442
|
+
debugFunctionNameGetter: (contractAddress: AztecAddress, functionSelector: FunctionSelector) => Promise<string>,
|
|
443
|
+
node: AztecNode,
|
|
363
444
|
minRevertibleSideEffectCounterOverride?: number,
|
|
364
445
|
): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
|
|
365
|
-
const
|
|
366
|
-
const nullifiers: OrderedSideEffect<Fr>[] = [];
|
|
367
|
-
const taggedPrivateLogs: OrderedSideEffect<PrivateLog>[] = [];
|
|
446
|
+
const taggedPrivateLogs: OrderedSideEffect<PrivateLogData>[] = [];
|
|
368
447
|
const l2ToL1Messages: OrderedSideEffect<ScopedL2ToL1Message>[] = [];
|
|
369
448
|
const contractClassLogsHashes: OrderedSideEffect<ScopedLogHash>[] = [];
|
|
370
449
|
const publicCallRequests: OrderedSideEffect<PublicCallRequest>[] = [];
|
|
371
450
|
const executionSteps: PrivateExecutionStep[] = [];
|
|
372
451
|
|
|
452
|
+
// Unsiloed scoped arrays — used for squashing, read request verification,
|
|
453
|
+
// and siloed at the end only for the surviving items
|
|
454
|
+
const scopedNoteHashes: ScopedNoteHash[] = [];
|
|
455
|
+
const scopedNullifiers: ScopedNullifier[] = [];
|
|
456
|
+
|
|
457
|
+
// Read requests for verification
|
|
458
|
+
const noteHashReadRequests: ScopedReadRequest[] = [];
|
|
459
|
+
const nullifierReadRequests: ScopedReadRequest[] = [];
|
|
460
|
+
|
|
373
461
|
let publicTeardownCallRequest;
|
|
374
462
|
|
|
463
|
+
// We set expiration timestamp to anchor_block_timestamp + MAX_TX_LIFETIME (24h) just like kernels do
|
|
464
|
+
let expirationTimestamp =
|
|
465
|
+
privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader.globalVariables.timestamp +
|
|
466
|
+
BigInt(MAX_TX_LIFETIME);
|
|
467
|
+
|
|
468
|
+
let feePayer = AztecAddress.zero();
|
|
469
|
+
|
|
375
470
|
const executions = [privateExecutionResult.entrypoint];
|
|
376
471
|
|
|
377
472
|
while (executions.length !== 0) {
|
|
378
473
|
const execution = executions.shift()!;
|
|
379
474
|
executions.unshift(...execution!.nestedExecutionResults);
|
|
380
475
|
|
|
476
|
+
// Just like kernels we overwrite the default value if the call sets it.
|
|
477
|
+
const callExpirationTimestamp = execution.publicInputs.expirationTimestamp;
|
|
478
|
+
if (callExpirationTimestamp !== 0n && callExpirationTimestamp < expirationTimestamp) {
|
|
479
|
+
expirationTimestamp = callExpirationTimestamp;
|
|
480
|
+
}
|
|
481
|
+
|
|
381
482
|
const { contractAddress } = execution.publicInputs.callContext;
|
|
382
483
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
new OrderedSideEffect(await siloNoteHash(contractAddress, noteHash.value), noteHash.counter),
|
|
390
|
-
),
|
|
391
|
-
);
|
|
484
|
+
if (execution.publicInputs.isFeePayer) {
|
|
485
|
+
if (!feePayer.isZero()) {
|
|
486
|
+
throw new Error('Multiple fee payers found in private execution result');
|
|
487
|
+
}
|
|
488
|
+
feePayer = contractAddress;
|
|
489
|
+
}
|
|
392
490
|
|
|
393
|
-
|
|
394
|
-
execution.publicInputs.
|
|
491
|
+
scopedNoteHashes.push(
|
|
492
|
+
...execution.publicInputs.noteHashes
|
|
395
493
|
.getActiveItems()
|
|
396
|
-
.
|
|
397
|
-
|
|
398
|
-
new OrderedSideEffect(await siloNullifier(contractAddress, nullifier.value), nullifier.counter),
|
|
399
|
-
),
|
|
494
|
+
.filter(nh => !nh.isEmpty())
|
|
495
|
+
.map(nh => nh.scope(contractAddress)),
|
|
400
496
|
);
|
|
497
|
+
scopedNullifiers.push(...execution.publicInputs.nullifiers.getActiveItems().map(n => n.scope(contractAddress)));
|
|
401
498
|
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
499
|
+
taggedPrivateLogs.push(
|
|
500
|
+
...(await Promise.all(
|
|
501
|
+
execution.publicInputs.privateLogs.getActiveItems().map(async metadata => {
|
|
502
|
+
metadata.log.fields[0] = await computeSiloedPrivateLogFirstField(contractAddress, metadata.log.fields[0]);
|
|
503
|
+
return new OrderedSideEffect(metadata, metadata.counter);
|
|
504
|
+
}),
|
|
505
|
+
)),
|
|
407
506
|
);
|
|
408
507
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
nullifiers.push(...nullifiersFromExecution);
|
|
508
|
+
noteHashReadRequests.push(...execution.publicInputs.noteHashReadRequests.getActiveItems());
|
|
509
|
+
nullifierReadRequests.push(...execution.publicInputs.nullifierReadRequests.getActiveItems());
|
|
412
510
|
l2ToL1Messages.push(
|
|
413
511
|
...execution.publicInputs.l2ToL1Msgs
|
|
414
512
|
.getActiveItems()
|
|
@@ -437,7 +535,7 @@ export async function generateSimulatedProvingResult(
|
|
|
437
535
|
: execution.publicInputs.publicTeardownCallRequest;
|
|
438
536
|
|
|
439
537
|
executionSteps.push({
|
|
440
|
-
functionName: await
|
|
538
|
+
functionName: await debugFunctionNameGetter(
|
|
441
539
|
execution.publicInputs.callContext.contractAddress,
|
|
442
540
|
execution.publicInputs.callContext.functionSelector,
|
|
443
541
|
),
|
|
@@ -448,6 +546,47 @@ export async function generateSimulatedProvingResult(
|
|
|
448
546
|
});
|
|
449
547
|
}
|
|
450
548
|
|
|
549
|
+
const noteHashNullifierCounterMap = collectNoteHashNullifierCounterMap(privateExecutionResult);
|
|
550
|
+
const minRevertibleSideEffectCounter =
|
|
551
|
+
minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
|
|
552
|
+
|
|
553
|
+
const scopedNoteHashesCLA = new ClaimedLengthArray<ScopedNoteHash, typeof MAX_NOTE_HASHES_PER_TX>(
|
|
554
|
+
padArrayEnd(scopedNoteHashes, ScopedNoteHash.empty(), MAX_NOTE_HASHES_PER_TX),
|
|
555
|
+
scopedNoteHashes.length,
|
|
556
|
+
);
|
|
557
|
+
const scopedNullifiersCLA = new ClaimedLengthArray<ScopedNullifier, typeof MAX_NULLIFIERS_PER_TX>(
|
|
558
|
+
padArrayEnd(scopedNullifiers, ScopedNullifier.empty(), MAX_NULLIFIERS_PER_TX),
|
|
559
|
+
scopedNullifiers.length,
|
|
560
|
+
);
|
|
561
|
+
|
|
562
|
+
const { filteredNoteHashes, filteredNullifiers, filteredPrivateLogs } = squashTransientSideEffects(
|
|
563
|
+
taggedPrivateLogs,
|
|
564
|
+
scopedNoteHashesCLA,
|
|
565
|
+
scopedNullifiersCLA,
|
|
566
|
+
noteHashNullifierCounterMap,
|
|
567
|
+
minRevertibleSideEffectCounter,
|
|
568
|
+
);
|
|
569
|
+
|
|
570
|
+
await verifyReadRequests(
|
|
571
|
+
node,
|
|
572
|
+
await privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader.hash(),
|
|
573
|
+
noteHashReadRequests,
|
|
574
|
+
nullifierReadRequests,
|
|
575
|
+
scopedNoteHashesCLA,
|
|
576
|
+
scopedNullifiersCLA,
|
|
577
|
+
);
|
|
578
|
+
|
|
579
|
+
const siloedNoteHashes = await Promise.all(
|
|
580
|
+
filteredNoteHashes
|
|
581
|
+
.sort((a, b) => a.counter - b.counter)
|
|
582
|
+
.map(async nh => new OrderedSideEffect(await siloNoteHash(nh.contractAddress, nh.value), nh.counter)),
|
|
583
|
+
);
|
|
584
|
+
const siloedNullifiers = await Promise.all(
|
|
585
|
+
filteredNullifiers
|
|
586
|
+
.sort((a, b) => a.counter - b.counter)
|
|
587
|
+
.map(async n => new OrderedSideEffect(await siloNullifier(n.contractAddress, n.value), n.counter)),
|
|
588
|
+
);
|
|
589
|
+
|
|
451
590
|
const constantData = new TxConstantData(
|
|
452
591
|
privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader,
|
|
453
592
|
privateExecutionResult.entrypoint.publicInputs.txContext,
|
|
@@ -464,11 +603,9 @@ export async function generateSimulatedProvingResult(
|
|
|
464
603
|
const getEffect = <T>(orderedSideEffect: OrderedSideEffect<T>) => orderedSideEffect.sideEffect;
|
|
465
604
|
|
|
466
605
|
const isPrivateOnlyTx = privateExecutionResult.publicFunctionCalldata.length === 0;
|
|
467
|
-
const minRevertibleSideEffectCounter =
|
|
468
|
-
minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
|
|
469
606
|
|
|
470
607
|
const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(
|
|
471
|
-
|
|
608
|
+
siloedNullifiers,
|
|
472
609
|
minRevertibleSideEffectCounter,
|
|
473
610
|
);
|
|
474
611
|
const nonceGenerator = privateExecutionResult.firstNullifier;
|
|
@@ -482,7 +619,7 @@ export async function generateSimulatedProvingResult(
|
|
|
482
619
|
// We must make the note hashes unique by using the
|
|
483
620
|
// nonce generator and their index in the tx.
|
|
484
621
|
const uniqueNoteHashes = await Promise.all(
|
|
485
|
-
siloedNoteHashes.
|
|
622
|
+
siloedNoteHashes.map(async (orderedSideEffect, i) => {
|
|
486
623
|
const siloedNoteHash = orderedSideEffect.sideEffect;
|
|
487
624
|
const nonce = await computeNoteHashNonce(nonceGenerator, i);
|
|
488
625
|
const uniqueNoteHash = await computeUniqueNoteHash(nonce, siloedNoteHash);
|
|
@@ -497,18 +634,18 @@ export async function generateSimulatedProvingResult(
|
|
|
497
634
|
ScopedL2ToL1Message.empty(),
|
|
498
635
|
MAX_L2_TO_L1_MSGS_PER_TX,
|
|
499
636
|
),
|
|
500
|
-
padArrayEnd(
|
|
637
|
+
padArrayEnd(filteredPrivateLogs.sort(sortByCounter).map(getEffect), PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX),
|
|
501
638
|
padArrayEnd(
|
|
502
639
|
contractClassLogsHashes.sort(sortByCounter).map(getEffect),
|
|
503
640
|
ScopedLogHash.empty(),
|
|
504
641
|
MAX_CONTRACT_CLASS_LOGS_PER_TX,
|
|
505
642
|
),
|
|
506
643
|
);
|
|
507
|
-
gasUsed = meterGasUsed(accumulatedDataForRollup);
|
|
644
|
+
gasUsed = meterGasUsed(accumulatedDataForRollup, isPrivateOnlyTx);
|
|
508
645
|
inputsForRollup = new PartialPrivateTailPublicInputsForRollup(accumulatedDataForRollup);
|
|
509
646
|
} else {
|
|
510
647
|
const [nonRevertibleNoteHashes, revertibleNoteHashes] = splitOrderedSideEffects(
|
|
511
|
-
siloedNoteHashes
|
|
648
|
+
siloedNoteHashes,
|
|
512
649
|
minRevertibleSideEffectCounter,
|
|
513
650
|
);
|
|
514
651
|
const nonRevertibleUniqueNoteHashes = await Promise.all(
|
|
@@ -522,7 +659,7 @@ export async function generateSimulatedProvingResult(
|
|
|
522
659
|
minRevertibleSideEffectCounter,
|
|
523
660
|
);
|
|
524
661
|
const [nonRevertibleTaggedPrivateLogs, revertibleTaggedPrivateLogs] = splitOrderedSideEffects(
|
|
525
|
-
|
|
662
|
+
filteredPrivateLogs,
|
|
526
663
|
minRevertibleSideEffectCounter,
|
|
527
664
|
);
|
|
528
665
|
const [nonRevertibleContractClassLogHashes, revertibleContractClassLogHashes] = splitOrderedSideEffects(
|
|
@@ -551,9 +688,9 @@ export async function generateSimulatedProvingResult(
|
|
|
551
688
|
padArrayEnd(revertibleContractClassLogHashes, ScopedLogHash.empty(), MAX_CONTRACT_CLASS_LOGS_PER_TX),
|
|
552
689
|
padArrayEnd(revertiblePublicCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX),
|
|
553
690
|
);
|
|
554
|
-
gasUsed = meterGasUsed(revertibleData).add(meterGasUsed(nonRevertibleData));
|
|
691
|
+
gasUsed = meterGasUsed(revertibleData, isPrivateOnlyTx).add(meterGasUsed(nonRevertibleData, isPrivateOnlyTx));
|
|
555
692
|
if (publicTeardownCallRequest) {
|
|
556
|
-
gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
|
|
693
|
+
gasUsed = gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
|
|
557
694
|
}
|
|
558
695
|
|
|
559
696
|
inputsForPublic = new PartialPrivateTailPublicInputsForPublic(
|
|
@@ -565,9 +702,14 @@ export async function generateSimulatedProvingResult(
|
|
|
565
702
|
|
|
566
703
|
const publicInputs = new PrivateKernelTailCircuitPublicInputs(
|
|
567
704
|
constantData,
|
|
568
|
-
/*gasUsed=*/ gasUsed.add(
|
|
569
|
-
|
|
570
|
-
|
|
705
|
+
/*gasUsed=*/ gasUsed.add(
|
|
706
|
+
Gas.from({
|
|
707
|
+
l2Gas: isPrivateOnlyTx ? PRIVATE_TX_L2_GAS_OVERHEAD : PUBLIC_TX_L2_GAS_OVERHEAD,
|
|
708
|
+
daGas: TX_DA_GAS_OVERHEAD,
|
|
709
|
+
}),
|
|
710
|
+
),
|
|
711
|
+
/*feePayer=*/ feePayer,
|
|
712
|
+
/*expirationTimestamp=*/ expirationTimestamp,
|
|
571
713
|
hasPublicCalls ? inputsForPublic : undefined,
|
|
572
714
|
!hasPublicCalls ? inputsForRollup : undefined,
|
|
573
715
|
);
|
|
@@ -579,6 +721,116 @@ export async function generateSimulatedProvingResult(
|
|
|
579
721
|
};
|
|
580
722
|
}
|
|
581
723
|
|
|
724
|
+
/**
|
|
725
|
+
* Squashes transient note hashes and nullifiers, mimicking the behavior
|
|
726
|
+
* of the reset kernels. Returns the filtered (surviving) scoped items and private logs.
|
|
727
|
+
*/
|
|
728
|
+
function squashTransientSideEffects(
|
|
729
|
+
taggedPrivateLogs: OrderedSideEffect<PrivateLogData>[],
|
|
730
|
+
scopedNoteHashesCLA: ClaimedLengthArray<ScopedNoteHash, typeof MAX_NOTE_HASHES_PER_TX>,
|
|
731
|
+
scopedNullifiersCLA: ClaimedLengthArray<ScopedNullifier, typeof MAX_NULLIFIERS_PER_TX>,
|
|
732
|
+
noteHashNullifierCounterMap: Map<number, number>,
|
|
733
|
+
minRevertibleSideEffectCounter: number,
|
|
734
|
+
) {
|
|
735
|
+
const { numTransientData, hints: transientDataHints } = buildTransientDataHints(
|
|
736
|
+
scopedNoteHashesCLA,
|
|
737
|
+
scopedNullifiersCLA,
|
|
738
|
+
/*futureNoteHashReads=*/ [],
|
|
739
|
+
/*futureNullifierReads=*/ [],
|
|
740
|
+
/*futureLogs=*/ [],
|
|
741
|
+
noteHashNullifierCounterMap,
|
|
742
|
+
minRevertibleSideEffectCounter,
|
|
743
|
+
);
|
|
744
|
+
|
|
745
|
+
const squashedNoteHashCounters = new Set<number>();
|
|
746
|
+
const squashedNullifierCounters = new Set<number>();
|
|
747
|
+
for (let i = 0; i < numTransientData; i++) {
|
|
748
|
+
const hint = transientDataHints[i];
|
|
749
|
+
squashedNoteHashCounters.add(scopedNoteHashesCLA.array[hint.noteHashIndex].counter);
|
|
750
|
+
squashedNullifierCounters.add(scopedNullifiersCLA.array[hint.nullifierIndex].counter);
|
|
751
|
+
}
|
|
752
|
+
|
|
753
|
+
return {
|
|
754
|
+
filteredNoteHashes: scopedNoteHashesCLA.getActiveItems().filter(nh => !squashedNoteHashCounters.has(nh.counter)),
|
|
755
|
+
filteredNullifiers: scopedNullifiersCLA.getActiveItems().filter(n => !squashedNullifierCounters.has(n.counter)),
|
|
756
|
+
filteredPrivateLogs: taggedPrivateLogs
|
|
757
|
+
.filter(item => !squashedNoteHashCounters.has(item.sideEffect.noteHashCounter))
|
|
758
|
+
.map(item => new OrderedSideEffect(item.sideEffect.log, item.counter)),
|
|
759
|
+
};
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
/**
|
|
763
|
+
* Verifies settled read requests by checking membership in the note hash and nullifier trees
|
|
764
|
+
* at the tx's anchor block, mimicking the behavior of the kernels
|
|
765
|
+
*/
|
|
766
|
+
async function verifyReadRequests(
|
|
767
|
+
node: Pick<AztecNode, 'findLeavesIndexes'>,
|
|
768
|
+
anchorBlockHash: BlockParameter,
|
|
769
|
+
noteHashReadRequests: ScopedReadRequest[],
|
|
770
|
+
nullifierReadRequests: ScopedReadRequest[],
|
|
771
|
+
scopedNoteHashesCLA: ClaimedLengthArray<ScopedNoteHash, typeof MAX_NOTE_HASHES_PER_TX>,
|
|
772
|
+
scopedNullifiersCLA: ClaimedLengthArray<ScopedNullifier, typeof MAX_NULLIFIERS_PER_TX>,
|
|
773
|
+
) {
|
|
774
|
+
const noteHashReadRequestsCLA = new ClaimedLengthArray<ScopedReadRequest, typeof MAX_NOTE_HASH_READ_REQUESTS_PER_TX>(
|
|
775
|
+
padArrayEnd(noteHashReadRequests, ScopedReadRequest.empty(), MAX_NOTE_HASH_READ_REQUESTS_PER_TX),
|
|
776
|
+
noteHashReadRequests.length,
|
|
777
|
+
);
|
|
778
|
+
const nullifierReadRequestsCLA = new ClaimedLengthArray<ScopedReadRequest, typeof MAX_NULLIFIER_READ_REQUESTS_PER_TX>(
|
|
779
|
+
padArrayEnd(nullifierReadRequests, ScopedReadRequest.empty(), MAX_NULLIFIER_READ_REQUESTS_PER_TX),
|
|
780
|
+
nullifierReadRequests.length,
|
|
781
|
+
);
|
|
782
|
+
|
|
783
|
+
const noteHashResetActions = getNoteHashReadRequestResetActions(noteHashReadRequestsCLA, scopedNoteHashesCLA);
|
|
784
|
+
const nullifierResetActions = getNullifierReadRequestResetActions(nullifierReadRequestsCLA, scopedNullifiersCLA);
|
|
785
|
+
|
|
786
|
+
const settledNoteHashReads: { index: number; value: Fr }[] = [];
|
|
787
|
+
for (let i = 0; i < noteHashResetActions.actions.length; i++) {
|
|
788
|
+
if (noteHashResetActions.actions[i] === ReadRequestActionEnum.READ_AS_SETTLED) {
|
|
789
|
+
settledNoteHashReads.push({ index: i, value: noteHashReadRequests[i].value });
|
|
790
|
+
}
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
const settledNullifierReads: { index: number; value: Fr }[] = [];
|
|
794
|
+
for (let i = 0; i < nullifierResetActions.actions.length; i++) {
|
|
795
|
+
if (nullifierResetActions.actions[i] === ReadRequestActionEnum.READ_AS_SETTLED) {
|
|
796
|
+
settledNullifierReads.push({ index: i, value: nullifierReadRequests[i].value });
|
|
797
|
+
}
|
|
798
|
+
}
|
|
799
|
+
|
|
800
|
+
const [noteHashResults, nullifierResults] = await Promise.all([
|
|
801
|
+
settledNoteHashReads.length > 0
|
|
802
|
+
? node.findLeavesIndexes(
|
|
803
|
+
anchorBlockHash,
|
|
804
|
+
MerkleTreeId.NOTE_HASH_TREE,
|
|
805
|
+
settledNoteHashReads.map(({ value }) => value),
|
|
806
|
+
)
|
|
807
|
+
: [],
|
|
808
|
+
settledNullifierReads.length > 0
|
|
809
|
+
? node.findLeavesIndexes(
|
|
810
|
+
anchorBlockHash,
|
|
811
|
+
MerkleTreeId.NULLIFIER_TREE,
|
|
812
|
+
settledNullifierReads.map(({ value }) => value),
|
|
813
|
+
)
|
|
814
|
+
: [],
|
|
815
|
+
]);
|
|
816
|
+
|
|
817
|
+
for (let i = 0; i < settledNoteHashReads.length; i++) {
|
|
818
|
+
if (!noteHashResults[i]) {
|
|
819
|
+
throw new Error(
|
|
820
|
+
`Note hash read request at index ${settledNoteHashReads[i].index} is reading an unknown note hash: ${settledNoteHashReads[i].value}`,
|
|
821
|
+
);
|
|
822
|
+
}
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
for (let i = 0; i < settledNullifierReads.length; i++) {
|
|
826
|
+
if (!nullifierResults[i]) {
|
|
827
|
+
throw new Error(
|
|
828
|
+
`Nullifier read request at index ${settledNullifierReads[i].index} is reading an unknown nullifier: ${settledNullifierReads[i].value}`,
|
|
829
|
+
);
|
|
830
|
+
}
|
|
831
|
+
}
|
|
832
|
+
}
|
|
833
|
+
|
|
582
834
|
function splitOrderedSideEffects<T>(effects: OrderedSideEffect<T>[], minRevertibleSideEffectCounter: number) {
|
|
583
835
|
const revertibleSideEffects: T[] = [];
|
|
584
836
|
const nonRevertibleSideEffects: T[] = [];
|
|
@@ -592,21 +844,24 @@ function splitOrderedSideEffects<T>(effects: OrderedSideEffect<T>[], minRevertib
|
|
|
592
844
|
return [nonRevertibleSideEffects, revertibleSideEffects];
|
|
593
845
|
}
|
|
594
846
|
|
|
595
|
-
function meterGasUsed(data: PrivateToRollupAccumulatedData | PrivateToPublicAccumulatedData) {
|
|
847
|
+
function meterGasUsed(data: PrivateToRollupAccumulatedData | PrivateToPublicAccumulatedData, isPrivateOnlyTx: boolean) {
|
|
596
848
|
let meteredDAFields = 0;
|
|
597
849
|
let meteredL2Gas = 0;
|
|
598
850
|
|
|
599
851
|
const numNoteHashes = arrayNonEmptyLength(data.noteHashes, hash => hash.isEmpty());
|
|
600
852
|
meteredDAFields += numNoteHashes;
|
|
601
|
-
|
|
853
|
+
const noteHashBaseGas = isPrivateOnlyTx ? L2_GAS_PER_NOTE_HASH : AVM_EMITNOTEHASH_BASE_L2_GAS;
|
|
854
|
+
meteredL2Gas += numNoteHashes * noteHashBaseGas;
|
|
602
855
|
|
|
603
856
|
const numNullifiers = arrayNonEmptyLength(data.nullifiers, nullifier => nullifier.isEmpty());
|
|
604
857
|
meteredDAFields += numNullifiers;
|
|
605
|
-
|
|
858
|
+
const nullifierBaseGas = isPrivateOnlyTx ? L2_GAS_PER_NULLIFIER : AVM_EMITNULLIFIER_BASE_L2_GAS;
|
|
859
|
+
meteredL2Gas += numNullifiers * nullifierBaseGas;
|
|
606
860
|
|
|
607
861
|
const numL2toL1Messages = arrayNonEmptyLength(data.l2ToL1Msgs, msg => msg.isEmpty());
|
|
608
862
|
meteredDAFields += numL2toL1Messages;
|
|
609
|
-
|
|
863
|
+
const l2ToL1MessageBaseGas = isPrivateOnlyTx ? L2_GAS_PER_L2_TO_L1_MSG : AVM_SENDL2TOL1MSG_BASE_L2_GAS;
|
|
864
|
+
meteredL2Gas += numL2toL1Messages * l2ToL1MessageBaseGas;
|
|
610
865
|
|
|
611
866
|
const numPrivatelogs = arrayNonEmptyLength(data.privateLogs, log => log.isEmpty());
|
|
612
867
|
// Every private log emits its length as an additional field
|
|
@@ -621,7 +876,7 @@ function meterGasUsed(data: PrivateToRollupAccumulatedData | PrivateToPublicAccu
|
|
|
621
876
|
);
|
|
622
877
|
meteredL2Gas += numContractClassLogs * L2_GAS_PER_CONTRACT_CLASS_LOG;
|
|
623
878
|
|
|
624
|
-
const meteredDAGas = meteredDAFields *
|
|
879
|
+
const meteredDAGas = meteredDAFields * DA_GAS_PER_FIELD;
|
|
625
880
|
|
|
626
881
|
if ((data as PrivateToPublicAccumulatedData).publicCallRequests) {
|
|
627
882
|
const dataForPublic = data as PrivateToPublicAccumulatedData;
|