@aztec/pxe 0.0.1-commit.e3c1de76 → 0.0.1-commit.e57c76e
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 +43 -99
- package/dest/bin/index.d.ts +2 -0
- package/dest/bin/index.d.ts.map +1 -0
- package/dest/bin/index.js +1 -0
- package/dest/bin/oracle_version_helpers.d.ts +26 -0
- package/dest/bin/oracle_version_helpers.d.ts.map +1 -0
- package/dest/bin/oracle_version_helpers.js +93 -0
- package/dest/block_synchronizer/block_stream_source.d.ts +10 -0
- package/dest/block_synchronizer/block_stream_source.d.ts.map +1 -0
- package/dest/block_synchronizer/block_stream_source.js +62 -0
- package/dest/block_synchronizer/block_synchronizer.d.ts +9 -3
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +37 -11
- package/dest/config/index.d.ts +8 -2
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +13 -15
- package/dest/config/package_info.js +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +66 -29
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +216 -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_note_cache.d.ts +2 -2
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -11
- 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 -15
- package/dest/contract_function_simulator/index.d.ts +14 -2
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +11 -0
- package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts +48 -0
- package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/bounded_vec.js +45 -0
- package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts +37 -0
- package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/ephemeral_array.js +59 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +3 -4
- 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 -9
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +13 -3
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +35 -4
- 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_data.d.ts +27 -0
- package/dest/contract_function_simulator/noir-structs/note_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/note_data.js +3 -0
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +3 -5
- 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 -10
- package/dest/contract_function_simulator/noir-structs/option.d.ts +61 -0
- package/dest/contract_function_simulator/noir-structs/option.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/option.js +62 -0
- package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts +11 -0
- package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/provided_secret.js +24 -0
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +16 -98
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/interfaces.js +2 -2
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +2 -2
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.js +2 -2
- package/dest/contract_function_simulator/oracle/oracle.d.ts +75 -46
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +471 -275
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts +127 -0
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/oracle_registry.js +786 -0
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +139 -0
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.js +560 -0
- package/dest/contract_function_simulator/oracle/private_execution.js +5 -3
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +68 -95
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +141 -110
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +156 -76
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +450 -166
- 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 +35 -64
- 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 +42 -0
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
- package/dest/contract_sync/contract_sync_service.js +135 -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 +14 -15
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +16 -21
- 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 +21 -5
- 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 +2 -2
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +21 -5
- package/dest/entrypoints/pxe_creation_options.d.ts +9 -1
- 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 +4 -3
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +21 -5
- package/dest/events/event_service.d.ts +15 -6
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +44 -11
- 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 +41 -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/logs/log_service.d.ts +9 -8
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +131 -84
- 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 +55 -0
- package/dest/notes/note_service.d.ts +27 -5
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +83 -58
- 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/batch_planner.d.ts +47 -0
- package/dest/private_kernel/batch_planner.d.ts.map +1 -0
- package/dest/private_kernel/batch_planner.js +104 -0
- 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 +130 -69
- 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 +202 -0
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +6 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +166 -65
- package/dest/private_kernel/private_kernel_oracle.d.ts +15 -11
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +31 -25
- package/dest/pxe.d.ts +120 -24
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +231 -134
- package/dest/storage/anchor_block_store/anchor_block_store.js +1 -1
- 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 +591 -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 +36 -28
- 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 +146 -87
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +3 -3
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +6 -4
- package/dest/storage/open_pxe_stores.d.ts +33 -0
- package/dest/storage/open_pxe_stores.d.ts.map +1 -0
- package/dest/storage/open_pxe_stores.js +27 -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 +3 -0
- package/dest/storage/private_event_store/stored_private_event.js +1 -1
- 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/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 +141 -115
- package/dest/tagging/get_all_logs_by_tags.d.ts +34 -10
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
- package/dest/tagging/get_all_logs_by_tags.js +45 -32
- 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 +163 -0
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +3 -3
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -1
- 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 +4 -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 +32 -14
- 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 +5 -7
- 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 +37 -25
- package/package.json +29 -17
- package/src/bin/check_oracle_version.ts +49 -122
- package/src/bin/index.ts +1 -0
- package/src/bin/oracle_version_helpers.ts +121 -0
- package/src/block_synchronizer/block_stream_source.ts +81 -0
- package/src/block_synchronizer/block_synchronizer.ts +39 -11
- package/src/config/index.ts +15 -9
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/contract_function_simulator.ts +391 -136
- package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
- package/src/contract_function_simulator/execution_note_cache.ts +1 -1
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -18
- package/src/contract_function_simulator/index.ts +51 -1
- package/src/contract_function_simulator/noir-structs/bounded_vec.ts +55 -0
- package/src/contract_function_simulator/noir-structs/ephemeral_array.ts +66 -0
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +9 -8
- package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +36 -3
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -5
- package/src/contract_function_simulator/noir-structs/note_data.ts +27 -0
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +4 -9
- package/src/contract_function_simulator/noir-structs/option.ts +69 -0
- package/src/contract_function_simulator/noir-structs/provided_secret.ts +27 -0
- package/src/contract_function_simulator/oracle/interfaces.ts +12 -176
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +3 -3
- package/src/contract_function_simulator/oracle/oracle.ts +564 -473
- package/src/contract_function_simulator/oracle/oracle_registry.ts +585 -0
- package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +553 -0
- package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +173 -205
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +664 -245
- package/src/contract_function_simulator/pick_notes.ts +22 -3
- package/src/contract_function_simulator/proxied_contract_data_source.ts +41 -64
- package/src/contract_logging.ts +52 -0
- package/src/contract_sync/contract_sync_service.ts +189 -0
- package/src/contract_sync/{index.ts → helpers.ts} +17 -29
- package/src/debug/pxe_debug_utils.ts +47 -25
- package/src/entrypoints/client/bundle/index.ts +2 -0
- package/src/entrypoints/client/bundle/utils.ts +19 -6
- package/src/entrypoints/client/lazy/index.ts +2 -0
- package/src/entrypoints/client/lazy/utils.ts +19 -6
- package/src/entrypoints/pxe_creation_options.ts +14 -0
- package/src/entrypoints/server/index.ts +4 -2
- package/src/entrypoints/server/utils.ts +22 -13
- package/src/events/event_service.ts +69 -21
- package/src/events/private_event_filter_validator.ts +21 -1
- package/src/hooks/authorize_utility_call.ts +44 -0
- package/src/hooks/execution_hooks.ts +48 -0
- package/src/hooks/index.ts +7 -0
- package/src/logs/log_service.ts +162 -145
- package/src/messages/message_context_service.ts +62 -0
- package/src/notes/note_service.ts +120 -85
- package/src/notes_filter.ts +24 -0
- package/src/oracle_version.ts +20 -10
- package/src/private_kernel/batch_planner.ts +169 -0
- 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 +165 -118
- package/src/private_kernel/hints/test_utils.ts +318 -0
- package/src/private_kernel/private_kernel_execution_prover.ts +254 -89
- package/src/private_kernel/private_kernel_oracle.ts +42 -32
- package/src/pxe.ts +416 -181
- package/src/storage/anchor_block_store/anchor_block_store.ts +1 -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 +46 -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 +712 -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 +44 -26
- package/src/storage/capsule_store/index.ts +1 -0
- package/src/storage/contract_store/contract_store.ts +182 -104
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +9 -5
- package/src/storage/open_pxe_stores.ts +49 -0
- package/src/storage/private_event_store/private_event_store.ts +4 -0
- package/src/storage/private_event_store/stored_private_event.ts +1 -1
- package/src/storage/tagging_store/recipient_tagging_store.ts +5 -5
- package/src/storage/tagging_store/sender_tagging_store.ts +185 -138
- package/src/tagging/get_all_logs_by_tags.ts +87 -35
- 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 +240 -0
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +4 -4
- package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +52 -17
- 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 +27 -27
- 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,23 +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
|
-
GeneratorIndex,
|
|
11
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,
|
|
12
11
|
L2_GAS_PER_PRIVATE_LOG,
|
|
13
12
|
MAX_CONTRACT_CLASS_LOGS_PER_TX,
|
|
14
13
|
MAX_ENQUEUED_CALLS_PER_TX,
|
|
15
14
|
MAX_L2_TO_L1_MSGS_PER_TX,
|
|
16
15
|
MAX_NOTE_HASHES_PER_TX,
|
|
16
|
+
MAX_NOTE_HASH_READ_REQUESTS_PER_TX,
|
|
17
17
|
MAX_NULLIFIERS_PER_TX,
|
|
18
|
+
MAX_NULLIFIER_READ_REQUESTS_PER_TX,
|
|
18
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,
|
|
19
24
|
} from '@aztec/constants';
|
|
20
25
|
import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection';
|
|
21
|
-
import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
|
|
22
26
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
23
27
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
24
28
|
import { Timer } from '@aztec/foundation/timer';
|
|
@@ -38,41 +42,59 @@ import type { FunctionCall } from '@aztec/stdlib/abi';
|
|
|
38
42
|
import { FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
|
|
39
43
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
40
44
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
45
|
+
import type { BlockParameter, L2TipsProvider } from '@aztec/stdlib/block';
|
|
41
46
|
import { Gas } from '@aztec/stdlib/gas';
|
|
42
47
|
import {
|
|
43
48
|
computeNoteHashNonce,
|
|
44
49
|
computeProtocolNullifier,
|
|
50
|
+
computeSiloedPrivateLogFirstField,
|
|
45
51
|
computeUniqueNoteHash,
|
|
46
52
|
siloNoteHash,
|
|
47
53
|
siloNullifier,
|
|
48
54
|
} from '@aztec/stdlib/hash';
|
|
49
55
|
import type { AztecNode } from '@aztec/stdlib/interfaces/server';
|
|
50
56
|
import {
|
|
57
|
+
ClaimedLengthArray,
|
|
51
58
|
PartialPrivateTailPublicInputsForPublic,
|
|
52
59
|
PartialPrivateTailPublicInputsForRollup,
|
|
53
60
|
type PrivateExecutionStep,
|
|
54
61
|
type PrivateKernelExecutionProofOutput,
|
|
55
62
|
PrivateKernelTailCircuitPublicInputs,
|
|
63
|
+
PrivateLogData,
|
|
56
64
|
PrivateToPublicAccumulatedData,
|
|
57
65
|
PrivateToRollupAccumulatedData,
|
|
58
66
|
PublicCallRequest,
|
|
67
|
+
ReadRequestActionEnum,
|
|
59
68
|
ScopedLogHash,
|
|
69
|
+
ScopedNoteHash,
|
|
70
|
+
ScopedNullifier,
|
|
71
|
+
ScopedReadRequest,
|
|
72
|
+
buildTransientDataHints,
|
|
73
|
+
getNoteHashReadRequestResetActions,
|
|
74
|
+
getNullifierReadRequestResetActions,
|
|
60
75
|
} from '@aztec/stdlib/kernel';
|
|
61
76
|
import { PrivateLog } from '@aztec/stdlib/logs';
|
|
62
77
|
import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
|
|
63
78
|
import { ChonkProof } from '@aztec/stdlib/proofs';
|
|
79
|
+
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
64
80
|
import {
|
|
65
81
|
BlockHeader,
|
|
66
82
|
CallContext,
|
|
67
83
|
HashedValues,
|
|
84
|
+
type OffchainEffect,
|
|
68
85
|
PrivateExecutionResult,
|
|
69
86
|
TxConstantData,
|
|
70
87
|
TxExecutionRequest,
|
|
71
88
|
collectNested,
|
|
89
|
+
collectNoteHashNullifierCounterMap,
|
|
72
90
|
getFinalMinRevertibleSideEffectCounter,
|
|
73
91
|
} from '@aztec/stdlib/tx';
|
|
74
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';
|
|
75
96
|
import type { AddressStore } from '../storage/address_store/address_store.js';
|
|
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,51 +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
|
-
|
|
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;
|
|
111
188
|
this.log = createLogger('simulator');
|
|
112
189
|
}
|
|
113
190
|
|
|
114
191
|
/**
|
|
115
192
|
* Runs a private function.
|
|
116
193
|
* @param request - The transaction request.
|
|
117
|
-
* @param entryPointArtifact - The artifact of the entry point function.
|
|
118
|
-
* @param contractAddress - The address of the contract (should match request.origin)
|
|
119
|
-
* @param msgSender - The address calling the function. This can be replaced to simulate a call from another contract
|
|
120
|
-
* or a specific account.
|
|
121
|
-
* @param anchorBlockHeader - The block header to use as base state for this run.
|
|
122
|
-
* @param senderForTags - The address that is used as a tagging sender when emitting private logs. Returned from
|
|
123
|
-
* the `privateGetSenderForTags` oracle.
|
|
124
|
-
* @param scopes - The accounts whose notes we can access in this call. Currently optional and will default to all.
|
|
125
|
-
* @param jobId - The job ID for staged writes.
|
|
126
|
-
* @returns The result of the execution.
|
|
127
194
|
*/
|
|
128
195
|
public async run(
|
|
129
196
|
request: TxExecutionRequest,
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
197
|
+
{
|
|
198
|
+
contractAddress,
|
|
199
|
+
selector,
|
|
200
|
+
msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE),
|
|
201
|
+
anchorBlockHeader,
|
|
202
|
+
senderForTags,
|
|
203
|
+
scopes,
|
|
204
|
+
jobId,
|
|
205
|
+
}: ContractSimulatorRunOpts,
|
|
137
206
|
): Promise<PrivateExecutionResult> {
|
|
138
207
|
const simulatorSetupTimer = new Timer();
|
|
139
208
|
|
|
@@ -144,7 +213,7 @@ export class ContractFunctionSimulator {
|
|
|
144
213
|
}
|
|
145
214
|
|
|
146
215
|
if (request.origin !== contractAddress) {
|
|
147
|
-
|
|
216
|
+
throw new Error(
|
|
148
217
|
`Request origin does not match contract address in simulation. Request origin: ${request.origin}, contract address: ${contractAddress}`,
|
|
149
218
|
);
|
|
150
219
|
}
|
|
@@ -163,37 +232,40 @@ export class ContractFunctionSimulator {
|
|
|
163
232
|
const noteCache = new ExecutionNoteCache(protocolNullifier);
|
|
164
233
|
const taggingIndexCache = new ExecutionTaggingIndexCache();
|
|
165
234
|
|
|
166
|
-
const privateExecutionOracle = new PrivateExecutionOracle(
|
|
167
|
-
request.firstCallArgsHash,
|
|
168
|
-
request.txContext,
|
|
235
|
+
const privateExecutionOracle = new PrivateExecutionOracle({
|
|
236
|
+
argsHash: request.firstCallArgsHash,
|
|
237
|
+
txContext: request.txContext,
|
|
169
238
|
callContext,
|
|
170
239
|
anchorBlockHeader,
|
|
171
|
-
async call => {
|
|
172
|
-
await this.runUtility(call, [], anchorBlockHeader,
|
|
240
|
+
utilityExecutor: async (call, execScopes) => {
|
|
241
|
+
await this.runUtility(call, [], anchorBlockHeader, execScopes, jobId);
|
|
173
242
|
},
|
|
174
|
-
request.authWitnesses,
|
|
175
|
-
request.capsules,
|
|
176
|
-
HashedValuesCache.create(request.argsOfCalls),
|
|
243
|
+
authWitnesses: request.authWitnesses,
|
|
244
|
+
capsules: request.capsules,
|
|
245
|
+
executionCache: HashedValuesCache.create(request.argsOfCalls),
|
|
177
246
|
noteCache,
|
|
178
247
|
taggingIndexCache,
|
|
179
|
-
this.contractStore,
|
|
180
|
-
this.noteStore,
|
|
181
|
-
this.keyStore,
|
|
182
|
-
this.addressStore,
|
|
183
|
-
this.aztecNode,
|
|
184
|
-
this.senderTaggingStore,
|
|
185
|
-
this.recipientTaggingStore,
|
|
186
|
-
this.senderAddressBookStore,
|
|
187
|
-
this.capsuleStore,
|
|
188
|
-
this.privateEventStore,
|
|
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,
|
|
189
260
|
jobId,
|
|
190
|
-
0,
|
|
191
|
-
startSideEffectCounter,
|
|
192
|
-
undefined, // log
|
|
261
|
+
totalPublicCalldataCount: 0,
|
|
262
|
+
sideEffectCounter: startSideEffectCounter,
|
|
193
263
|
scopes,
|
|
194
264
|
senderForTags,
|
|
195
|
-
this.simulator,
|
|
196
|
-
|
|
265
|
+
simulator: this.simulator,
|
|
266
|
+
l2TipsStore: this.l2TipsStore,
|
|
267
|
+
hooks: this.hooks,
|
|
268
|
+
});
|
|
197
269
|
|
|
198
270
|
const setupTime = simulatorSetupTimer.ms();
|
|
199
271
|
|
|
@@ -222,7 +294,7 @@ export class ContractFunctionSimulator {
|
|
|
222
294
|
);
|
|
223
295
|
const publicFunctionsCalldata = await Promise.all(
|
|
224
296
|
publicCallRequests.map(async r => {
|
|
225
|
-
const calldata = await privateExecutionOracle.
|
|
297
|
+
const calldata = await privateExecutionOracle.getHashPreimage(r.calldataHash);
|
|
226
298
|
return new HashedValues(calldata, r.calldataHash);
|
|
227
299
|
}),
|
|
228
300
|
);
|
|
@@ -243,7 +315,6 @@ export class ContractFunctionSimulator {
|
|
|
243
315
|
}
|
|
244
316
|
}
|
|
245
317
|
|
|
246
|
-
// docs:start:execute_utility_function
|
|
247
318
|
/**
|
|
248
319
|
* Runs a utility function.
|
|
249
320
|
* @param call - The function call to execute.
|
|
@@ -257,33 +328,42 @@ export class ContractFunctionSimulator {
|
|
|
257
328
|
call: FunctionCall,
|
|
258
329
|
authwits: AuthWitness[],
|
|
259
330
|
anchorBlockHeader: BlockHeader,
|
|
260
|
-
scopes: AztecAddress[]
|
|
331
|
+
scopes: AztecAddress[],
|
|
261
332
|
jobId: string,
|
|
262
|
-
): Promise<Fr[]> {
|
|
333
|
+
): Promise<{ result: Fr[]; offchainEffects: OffchainEffect[] }> {
|
|
263
334
|
const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
|
|
264
335
|
|
|
265
336
|
if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
|
|
266
337
|
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
|
|
267
338
|
}
|
|
268
339
|
|
|
269
|
-
const
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
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: [],
|
|
273
348
|
anchorBlockHeader,
|
|
274
|
-
this.contractStore,
|
|
275
|
-
this.noteStore,
|
|
276
|
-
this.keyStore,
|
|
277
|
-
this.addressStore,
|
|
278
|
-
this.aztecNode,
|
|
279
|
-
this.recipientTaggingStore,
|
|
280
|
-
this.senderAddressBookStore,
|
|
281
|
-
this.capsuleStore,
|
|
282
|
-
this.privateEventStore,
|
|
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,
|
|
283
361
|
jobId,
|
|
284
|
-
undefined,
|
|
285
362
|
scopes,
|
|
286
|
-
|
|
363
|
+
simulator: this.simulator,
|
|
364
|
+
hooks: this.hooks,
|
|
365
|
+
utilityExecutor,
|
|
366
|
+
});
|
|
287
367
|
|
|
288
368
|
try {
|
|
289
369
|
this.log.verbose(`Executing utility function ${entryPointArtifact.name}`, {
|
|
@@ -307,13 +387,15 @@ export class ContractFunctionSimulator {
|
|
|
307
387
|
);
|
|
308
388
|
});
|
|
309
389
|
|
|
310
|
-
this.log.verbose(`Utility
|
|
311
|
-
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
|
+
};
|
|
312
395
|
} catch (err) {
|
|
313
396
|
throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
|
|
314
397
|
}
|
|
315
398
|
}
|
|
316
|
-
// docs:end:execute_utility_function
|
|
317
399
|
|
|
318
400
|
/**
|
|
319
401
|
* Returns the execution statistics collected during the simulator run.
|
|
@@ -349,66 +431,82 @@ class OrderedSideEffect<T> {
|
|
|
349
431
|
* (allowing state overrides) and is much faster, while still generating a valid
|
|
350
432
|
* output that can be sent to the node for public simulation
|
|
351
433
|
* @param privateExecutionResult - The result of the private execution.
|
|
352
|
-
* @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.
|
|
353
436
|
* @param minRevertibleSideEffectCounterOverride - Optional override for the min revertible side effect counter.
|
|
354
437
|
* Used by TXE to simulate account contract behavior (setting the counter before app execution).
|
|
355
438
|
* @returns The simulated proving result.
|
|
356
439
|
*/
|
|
357
440
|
export async function generateSimulatedProvingResult(
|
|
358
441
|
privateExecutionResult: PrivateExecutionResult,
|
|
359
|
-
|
|
442
|
+
debugFunctionNameGetter: (contractAddress: AztecAddress, functionSelector: FunctionSelector) => Promise<string>,
|
|
443
|
+
node: AztecNode,
|
|
360
444
|
minRevertibleSideEffectCounterOverride?: number,
|
|
361
445
|
): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
|
|
362
|
-
const
|
|
363
|
-
const nullifiers: OrderedSideEffect<Fr>[] = [];
|
|
364
|
-
const taggedPrivateLogs: OrderedSideEffect<PrivateLog>[] = [];
|
|
446
|
+
const taggedPrivateLogs: OrderedSideEffect<PrivateLogData>[] = [];
|
|
365
447
|
const l2ToL1Messages: OrderedSideEffect<ScopedL2ToL1Message>[] = [];
|
|
366
448
|
const contractClassLogsHashes: OrderedSideEffect<ScopedLogHash>[] = [];
|
|
367
449
|
const publicCallRequests: OrderedSideEffect<PublicCallRequest>[] = [];
|
|
368
450
|
const executionSteps: PrivateExecutionStep[] = [];
|
|
369
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
|
+
|
|
370
461
|
let publicTeardownCallRequest;
|
|
371
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
|
+
|
|
372
470
|
const executions = [privateExecutionResult.entrypoint];
|
|
373
471
|
|
|
374
472
|
while (executions.length !== 0) {
|
|
375
473
|
const execution = executions.shift()!;
|
|
376
474
|
executions.unshift(...execution!.nestedExecutionResults);
|
|
377
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
|
+
|
|
378
482
|
const { contractAddress } = execution.publicInputs.callContext;
|
|
379
483
|
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
new OrderedSideEffect(await siloNoteHash(contractAddress, noteHash.value), noteHash.counter),
|
|
387
|
-
),
|
|
388
|
-
);
|
|
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
|
+
}
|
|
389
490
|
|
|
390
|
-
|
|
391
|
-
execution.publicInputs.
|
|
491
|
+
scopedNoteHashes.push(
|
|
492
|
+
...execution.publicInputs.noteHashes
|
|
392
493
|
.getActiveItems()
|
|
393
|
-
.
|
|
394
|
-
|
|
395
|
-
new OrderedSideEffect(await siloNullifier(contractAddress, nullifier.value), nullifier.counter),
|
|
396
|
-
),
|
|
494
|
+
.filter(nh => !nh.isEmpty())
|
|
495
|
+
.map(nh => nh.scope(contractAddress)),
|
|
397
496
|
);
|
|
497
|
+
scopedNullifiers.push(...execution.publicInputs.nullifiers.getActiveItems().map(n => n.scope(contractAddress)));
|
|
398
498
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
[contractAddress, metadata.log.fields[0]
|
|
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
|
|
@@ -614,14 +869,14 @@ function meterGasUsed(data: PrivateToRollupAccumulatedData | PrivateToPublicAccu
|
|
|
614
869
|
meteredL2Gas += numPrivatelogs * L2_GAS_PER_PRIVATE_LOG;
|
|
615
870
|
|
|
616
871
|
const numContractClassLogs = arrayNonEmptyLength(data.contractClassLogsHashes, log => log.isEmpty());
|
|
617
|
-
// Every contract class log emits its
|
|
872
|
+
// Every contract class log emits its contract address as an additional field
|
|
618
873
|
meteredDAFields += data.contractClassLogsHashes.reduce(
|
|
619
|
-
(acc, log) => (!log.isEmpty() ? acc + log.logHash.length +
|
|
874
|
+
(acc, log) => (!log.isEmpty() ? acc + log.logHash.length + 1 : acc),
|
|
620
875
|
0,
|
|
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;
|