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