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