@aztec/pxe 0.0.1-commit.4d79d1f2d → 0.0.1-commit.4d9804df
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 +41 -112
- package/dest/bin/index.d.ts +2 -0
- package/dest/bin/index.d.ts.map +1 -0
- package/dest/bin/index.js +1 -0
- package/dest/bin/oracle_version_helpers.d.ts +34 -0
- package/dest/bin/oracle_version_helpers.d.ts.map +1 -0
- package/dest/bin/oracle_version_helpers.js +46 -0
- package/dest/block_synchronizer/block_stream_source.d.ts +10 -0
- package/dest/block_synchronizer/block_stream_source.d.ts.map +1 -0
- package/dest/block_synchronizer/block_stream_source.js +37 -0
- package/dest/block_synchronizer/block_synchronizer.d.ts +23 -15
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +84 -28
- package/dest/config/index.d.ts +9 -2
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +14 -15
- package/dest/config/package_info.js +1 -1
- package/dest/contract/contract_class_service.d.ts +31 -0
- package/dest/contract/contract_class_service.d.ts.map +1 -0
- package/dest/contract/contract_class_service.js +68 -0
- package/dest/contract/contract_sync_service.d.ts +48 -0
- package/dest/contract/contract_sync_service.d.ts.map +1 -0
- package/dest/contract/contract_sync_service.js +116 -0
- package/dest/contract/helpers.d.ts +7 -0
- package/dest/contract/helpers.d.ts.map +1 -0
- package/dest/contract/helpers.js +20 -0
- package/dest/contract/skip_sync_contracts.d.ts +11 -0
- package/dest/contract/skip_sync_contracts.d.ts.map +1 -0
- package/dest/contract/skip_sync_contracts.js +18 -0
- package/dest/contract_function_simulator/anchored_contract_data.d.ts +36 -0
- package/dest/contract_function_simulator/anchored_contract_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/anchored_contract_data.js +54 -0
- package/dest/contract_function_simulator/aztec_node_read_cache.d.ts +39 -0
- package/dest/contract_function_simulator/aztec_node_read_cache.d.ts.map +1 -0
- package/dest/contract_function_simulator/aztec_node_read_cache.js +60 -0
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +34 -20
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +210 -74
- 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 +4 -10
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_note_cache.js +8 -28
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -11
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -15
- package/dest/contract_function_simulator/index.d.ts +26 -5
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +11 -3
- package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts +29 -0
- package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/bounded_vec.js +30 -0
- package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts +9 -0
- package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/contract_class_log_data.js +1 -0
- package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts +7 -0
- package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/embedded_curve_point.js +1 -0
- package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts +37 -0
- package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/ephemeral_array.js +59 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +3 -4
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +9 -10
- package/dest/contract_function_simulator/noir-structs/fact.d.ts +16 -0
- package/dest/contract_function_simulator/noir-structs/fact.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/fact.js +6 -0
- package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts +27 -0
- package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/fact_collection.js +31 -0
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +19 -10
- 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 +12 -24
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +11 -9
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +2 -63
- package/dest/contract_function_simulator/noir-structs/note_data.d.ts +27 -0
- package/dest/contract_function_simulator/noir-structs/note_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/note_data.js +3 -0
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +3 -5
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/note_validation_request.js +8 -12
- package/dest/contract_function_simulator/noir-structs/option.d.ts +59 -0
- package/dest/contract_function_simulator/noir-structs/option.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/option.js +67 -0
- package/dest/contract_function_simulator/noir-structs/origin_block.d.ts +11 -0
- package/dest/contract_function_simulator/noir-structs/origin_block.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/origin_block.js +5 -0
- package/dest/contract_function_simulator/noir-structs/pending_tagged_log.d.ts +11 -0
- package/dest/contract_function_simulator/noir-structs/pending_tagged_log.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/pending_tagged_log.js +4 -0
- package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts +8 -0
- package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/provided_secret.js +1 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts +28 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.js +50 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts +19 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tx.js +9 -0
- package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts +15 -0
- package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/tx_effect_data.js +5 -0
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +6 -11
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/utility_context.js +1 -20
- package/dest/contract_function_simulator/oracle/acir_callback.d.ts +21 -0
- package/dest/contract_function_simulator/oracle/acir_callback.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/acir_callback.js +115 -0
- package/dest/contract_function_simulator/oracle/index.d.ts +2 -13
- 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 +15 -98
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/interfaces.js +2 -2
- package/dest/contract_function_simulator/oracle/legacy_oracle_registry.d.ts +39 -0
- package/dest/contract_function_simulator/oracle/legacy_oracle_registry.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/legacy_oracle_registry.js +107 -0
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -14
- 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 -24
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +2 -2
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.js +2 -2
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts +139 -0
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/oracle_registry.js +1016 -0
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +274 -0
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.js +1243 -0
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +7 -6
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +62 -76
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +210 -122
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +178 -80
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +573 -174
- package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
- package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
- package/dest/contract_function_simulator/pick_notes.js +20 -3
- package/dest/contract_function_simulator/transient_array_service.d.ts +31 -0
- package/dest/contract_function_simulator/transient_array_service.d.ts.map +1 -0
- package/dest/contract_function_simulator/transient_array_service.js +62 -0
- package/dest/contract_logging.d.ts +27 -0
- package/dest/contract_logging.d.ts.map +1 -0
- package/dest/contract_logging.js +38 -0
- package/dest/debug/pxe_debug_utils.d.ts +5 -9
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +4 -10
- package/dest/entrypoints/client/bundle/index.d.ts +4 -1
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +3 -0
- package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +27 -8
- package/dest/entrypoints/client/lazy/index.d.ts +4 -1
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +3 -0
- package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +27 -8
- package/dest/entrypoints/client/store.d.ts +14 -0
- package/dest/entrypoints/client/store.d.ts.map +1 -0
- package/dest/entrypoints/client/store.js +42 -0
- package/dest/entrypoints/pxe_creation_options.d.ts +16 -2
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/pxe_creation_options.js +3 -1
- package/dest/entrypoints/server/index.d.ts +8 -3
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +6 -2
- package/dest/entrypoints/server/store.d.ts +18 -0
- package/dest/entrypoints/server/store.d.ts.map +1 -0
- package/dest/entrypoints/server/store.js +28 -0
- package/dest/entrypoints/server/utils.d.ts +4 -3
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +28 -8
- package/dest/error_enriching.d.ts +5 -3
- package/dest/error_enriching.d.ts.map +1 -1
- package/dest/error_enriching.js +13 -11
- package/dest/events/event_service.d.ts +15 -6
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +44 -11
- package/dest/events/private_event_filter_validator.d.ts +3 -2
- package/dest/events/private_event_filter_validator.d.ts.map +1 -1
- package/dest/events/private_event_filter_validator.js +15 -0
- package/dest/hooks/authorize_utility_call.d.ts +41 -0
- package/dest/hooks/authorize_utility_call.d.ts.map +1 -0
- package/dest/hooks/authorize_utility_call.js +4 -0
- package/dest/hooks/execution_hooks.d.ts +62 -0
- package/dest/hooks/execution_hooks.d.ts.map +1 -0
- package/dest/hooks/execution_hooks.js +9 -0
- package/dest/hooks/index.d.ts +5 -0
- package/dest/hooks/index.d.ts.map +1 -0
- package/dest/hooks/index.js +2 -0
- package/dest/hooks/resolve_custom_request.d.ts +23 -0
- package/dest/hooks/resolve_custom_request.d.ts.map +1 -0
- package/dest/hooks/resolve_custom_request.js +3 -0
- package/dest/hooks/resolve_tagging_secret_strategy.d.ts +50 -0
- package/dest/hooks/resolve_tagging_secret_strategy.d.ts.map +1 -0
- package/dest/hooks/resolve_tagging_secret_strategy.js +3 -0
- package/dest/logs/log_service.d.ts +14 -11
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +195 -81
- package/dest/messages/tx_resolver_service.d.ts +17 -0
- package/dest/messages/tx_resolver_service.d.ts.map +1 -0
- package/dest/messages/tx_resolver_service.js +60 -0
- package/dest/notes/note_service.d.ts +28 -6
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +84 -59
- package/dest/notes_filter.d.ts +24 -0
- package/dest/notes_filter.d.ts.map +1 -0
- package/dest/notes_filter.js +4 -0
- package/dest/oracle_version.d.ts +4 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +20 -10
- package/dest/private_kernel/batch_planner.d.ts +47 -0
- package/dest/private_kernel/batch_planner.d.ts.map +1 -0
- package/dest/private_kernel/batch_planner.js +104 -0
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
- package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
- package/dest/private_kernel/hints/index.d.ts +1 -1
- package/dest/private_kernel/hints/index.js +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +135 -70
- package/dest/private_kernel/hints/test_utils.d.ts +122 -0
- package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
- package/dest/private_kernel/hints/test_utils.js +202 -0
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +6 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +208 -86
- package/dest/private_kernel/private_kernel_oracle.d.ts +17 -11
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +47 -29
- package/dest/pxe.d.ts +178 -61
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +377 -220
- package/dest/storage/allowed_scopes.d.ts +6 -0
- package/dest/storage/allowed_scopes.d.ts.map +1 -0
- package/dest/storage/allowed_scopes.js +7 -0
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -6
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
- package/dest/storage/anchor_block_store/anchor_block_store.js +9 -7
- package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts +42 -0
- package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts.map +1 -0
- package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.js +93 -0
- package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts +15 -0
- package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts.map +1 -0
- package/dest/storage/backwards_compatibility_tests/schema_tests.js +671 -0
- package/dest/storage/backwards_compatibility_tests/store_spy.d.ts +19 -0
- package/dest/storage/backwards_compatibility_tests/store_spy.d.ts.map +1 -0
- package/dest/storage/backwards_compatibility_tests/store_spy.js +63 -0
- package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
- package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
- package/dest/storage/capsule_store/capsule_service.js +47 -0
- package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
- package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
- package/dest/storage/capsule_store/capsule_store.js +36 -28
- package/dest/storage/capsule_store/index.d.ts +2 -1
- package/dest/storage/capsule_store/index.d.ts.map +1 -1
- package/dest/storage/capsule_store/index.js +1 -0
- package/dest/storage/contract_store/contract_store.d.ts +63 -33
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +178 -130
- package/dest/storage/fact_store/fact_service.d.ts +22 -0
- package/dest/storage/fact_store/fact_service.d.ts.map +1 -0
- package/dest/storage/fact_store/fact_service.js +45 -0
- package/dest/storage/fact_store/fact_store.d.ts +95 -0
- package/dest/storage/fact_store/fact_store.d.ts.map +1 -0
- package/dest/storage/fact_store/fact_store.js +408 -0
- package/dest/storage/fact_store/fact_store_keys.d.ts +34 -0
- package/dest/storage/fact_store/fact_store_keys.d.ts.map +1 -0
- package/dest/storage/fact_store/fact_store_keys.js +50 -0
- package/dest/storage/fact_store/index.d.ts +6 -0
- package/dest/storage/fact_store/index.d.ts.map +1 -0
- package/dest/storage/fact_store/index.js +4 -0
- package/dest/storage/fact_store/origin_state.d.ts +59 -0
- package/dest/storage/fact_store/origin_state.d.ts.map +1 -0
- package/dest/storage/fact_store/origin_state.js +60 -0
- package/dest/storage/fact_store/stored_fact.d.ts +32 -0
- package/dest/storage/fact_store/stored_fact.d.ts.map +1 -0
- package/dest/storage/fact_store/stored_fact.js +64 -0
- package/dest/storage/index.d.ts +3 -2
- package/dest/storage/index.d.ts.map +1 -1
- package/dest/storage/index.js +2 -1
- package/dest/storage/metadata.d.ts +2 -2
- package/dest/storage/metadata.d.ts.map +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +44 -34
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +199 -170
- package/dest/storage/note_store/stored_note.d.ts +3 -8
- package/dest/storage/note_store/stored_note.d.ts.map +1 -1
- package/dest/storage/note_store/stored_note.js +4 -20
- package/dest/storage/open_pxe_stores.d.ts +35 -0
- package/dest/storage/open_pxe_stores.d.ts.map +1 -0
- package/dest/storage/open_pxe_stores.js +29 -0
- package/dest/storage/private_event_store/private_event_store.d.ts +13 -16
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +43 -43
- package/dest/storage/private_event_store/stored_private_event.js +1 -1
- package/dest/storage/store_identity.d.ts +35 -0
- package/dest/storage/store_identity.d.ts.map +1 -0
- package/dest/storage/store_identity.js +44 -0
- package/dest/storage/tagging_store/index.d.ts +2 -2
- package/dest/storage/tagging_store/index.d.ts.map +1 -1
- package/dest/storage/tagging_store/index.js +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +45 -28
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +182 -119
- package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts +51 -0
- package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts.map +1 -0
- package/dest/storage/tagging_store/tagging_secret_sources_store.js +105 -0
- package/dest/tagging/constants.d.ts +3 -2
- package/dest/tagging/constants.d.ts.map +1 -1
- package/dest/tagging/constants.js +28 -10
- package/dest/tagging/get_all_logs_by_tags.d.ts +34 -10
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
- package/dest/tagging/get_all_logs_by_tags.js +45 -32
- package/dest/tagging/index.d.ts +7 -6
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +5 -4
- package/dest/tagging/persist_sender_tagging_index_ranges.d.ts +29 -0
- package/dest/tagging/persist_sender_tagging_index_ranges.d.ts.map +1 -0
- package/dest/tagging/persist_sender_tagging_index_ranges.js +42 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +74 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts.map +1 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.js +238 -0
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +3 -3
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
- package/dest/tagging/reconcile_tagging_index_ranges.d.ts +36 -0
- package/dest/tagging/reconcile_tagging_index_ranges.d.ts.map +1 -0
- package/dest/tagging/reconcile_tagging_index_ranges.js +74 -0
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -9
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +32 -14
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +13 -7
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +41 -10
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -7
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +41 -25
- package/dest/tagging/testing/tag_query_test_utils.d.ts +6 -0
- package/dest/tagging/testing/tag_query_test_utils.d.ts.map +1 -0
- package/dest/tagging/testing/tag_query_test_utils.js +10 -0
- package/package.json +20 -17
- package/src/bin/check_oracle_version.ts +46 -135
- package/src/bin/index.ts +1 -0
- package/src/bin/oracle_version_helpers.ts +54 -0
- package/src/block_synchronizer/block_stream_source.ts +42 -0
- package/src/block_synchronizer/block_synchronizer.ts +102 -39
- package/src/config/index.ts +16 -9
- package/src/config/package_info.ts +1 -1
- package/src/contract/contract_class_service.ts +83 -0
- package/src/contract/contract_sync_service.ts +176 -0
- package/src/contract/helpers.ts +35 -0
- package/src/contract/skip_sync_contracts.ts +23 -0
- package/src/contract_function_simulator/anchored_contract_data.ts +74 -0
- package/src/contract_function_simulator/aztec_node_read_cache.ts +89 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +375 -104
- package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
- package/src/contract_function_simulator/execution_note_cache.ts +8 -29
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -18
- package/src/contract_function_simulator/index.ts +89 -4
- package/src/contract_function_simulator/noir-structs/bounded_vec.ts +43 -0
- package/src/contract_function_simulator/noir-structs/contract_class_log_data.ts +9 -0
- package/src/contract_function_simulator/noir-structs/embedded_curve_point.ts +4 -0
- package/src/contract_function_simulator/noir-structs/ephemeral_array.ts +66 -0
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +10 -9
- package/src/contract_function_simulator/noir-structs/fact.ts +13 -0
- package/src/contract_function_simulator/noir-structs/fact_collection.ts +64 -0
- package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +27 -20
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +14 -64
- package/src/contract_function_simulator/noir-structs/note_data.ts +27 -0
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +6 -11
- package/src/contract_function_simulator/noir-structs/option.ts +75 -0
- package/src/contract_function_simulator/noir-structs/origin_block.ts +8 -0
- package/src/contract_function_simulator/noir-structs/pending_tagged_log.ts +12 -0
- package/src/contract_function_simulator/noir-structs/provided_secret.ts +5 -0
- package/src/contract_function_simulator/noir-structs/resolved_tagging_strategy.ts +66 -0
- package/src/contract_function_simulator/noir-structs/resolved_tx.ts +19 -0
- package/src/contract_function_simulator/noir-structs/tx_effect_data.ts +16 -0
- package/src/contract_function_simulator/noir-structs/utility_context.ts +5 -17
- package/src/contract_function_simulator/oracle/acir_callback.ts +154 -0
- package/src/contract_function_simulator/oracle/index.ts +1 -15
- package/src/contract_function_simulator/oracle/interfaces.ts +11 -176
- package/src/contract_function_simulator/oracle/legacy_oracle_registry.ts +147 -0
- package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +6 -21
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +3 -3
- package/src/contract_function_simulator/oracle/oracle_registry.ts +710 -0
- package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +1052 -0
- package/src/contract_function_simulator/oracle/private_execution.ts +6 -7
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +259 -153
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +880 -264
- package/src/contract_function_simulator/pick_notes.ts +22 -3
- package/src/contract_function_simulator/transient_array_service.ts +91 -0
- package/src/contract_logging.ts +52 -0
- package/src/debug/pxe_debug_utils.ts +9 -16
- package/src/entrypoints/client/bundle/index.ts +3 -0
- package/src/entrypoints/client/bundle/utils.ts +32 -8
- package/src/entrypoints/client/lazy/index.ts +3 -0
- package/src/entrypoints/client/lazy/utils.ts +32 -8
- package/src/entrypoints/client/store.ts +54 -0
- package/src/entrypoints/pxe_creation_options.ts +21 -1
- package/src/entrypoints/server/index.ts +8 -2
- package/src/entrypoints/server/store.ts +47 -0
- package/src/entrypoints/server/utils.ts +45 -14
- package/src/error_enriching.ts +27 -11
- package/src/events/event_service.ts +69 -21
- package/src/events/private_event_filter_validator.ts +21 -1
- package/src/hooks/authorize_utility_call.ts +44 -0
- package/src/hooks/execution_hooks.ts +68 -0
- package/src/hooks/index.ts +13 -0
- package/src/hooks/resolve_custom_request.ts +24 -0
- package/src/hooks/resolve_tagging_secret_strategy.ts +60 -0
- package/src/logs/log_service.ts +234 -145
- package/src/messages/tx_resolver_service.ts +69 -0
- package/src/notes/note_service.ts +121 -86
- package/src/notes_filter.ts +24 -0
- package/src/oracle_version.ts +20 -10
- package/src/private_kernel/batch_planner.ts +168 -0
- package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
- package/src/private_kernel/hints/index.ts +1 -1
- package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +176 -119
- package/src/private_kernel/hints/test_utils.ts +318 -0
- package/src/private_kernel/private_kernel_execution_prover.ts +341 -120
- package/src/private_kernel/private_kernel_oracle.ts +65 -36
- package/src/pxe.ts +597 -255
- package/src/storage/allowed_scopes.ts +14 -0
- package/src/storage/anchor_block_store/anchor_block_store.ts +9 -7
- package/src/storage/backwards_compatibility_tests/__snapshots__/AddressStore.json +22 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/AnchorBlockStore.json +3 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/CapsuleStore.json +16 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/ContractStore.json +28 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/FactStore.json +40 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/KeyStore.json +52 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +40 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +56 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/PrivateEventStore.json +44 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +26 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +30 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/TaggingSecretSourcesStore.json +30 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +117 -0
- package/src/storage/backwards_compatibility_tests/kv_store_snapshot.ts +122 -0
- package/src/storage/backwards_compatibility_tests/schema_tests.ts +803 -0
- package/src/storage/backwards_compatibility_tests/store_spy.ts +73 -0
- package/src/storage/capsule_store/capsule_service.ts +85 -0
- package/src/storage/capsule_store/capsule_store.ts +44 -26
- package/src/storage/capsule_store/index.ts +1 -0
- package/src/storage/contract_store/contract_store.ts +236 -165
- package/src/storage/fact_store/fact_service.ts +69 -0
- package/src/storage/fact_store/fact_store.ts +487 -0
- package/src/storage/fact_store/fact_store_keys.ts +75 -0
- package/src/storage/fact_store/index.ts +15 -0
- package/src/storage/fact_store/origin_state.ts +84 -0
- package/src/storage/fact_store/stored_fact.ts +80 -0
- package/src/storage/index.ts +2 -1
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +230 -190
- package/src/storage/note_store/stored_note.ts +5 -27
- package/src/storage/open_pxe_stores.ts +52 -0
- package/src/storage/private_event_store/private_event_store.ts +52 -54
- package/src/storage/private_event_store/stored_private_event.ts +1 -1
- package/src/storage/store_identity.ts +72 -0
- package/src/storage/tagging_store/index.ts +1 -1
- package/src/storage/tagging_store/recipient_tagging_store.ts +5 -5
- package/src/storage/tagging_store/sender_tagging_store.ts +235 -141
- package/src/storage/tagging_store/tagging_secret_sources_store.ts +138 -0
- package/src/tagging/constants.ts +30 -10
- package/src/tagging/get_all_logs_by_tags.ts +87 -35
- package/src/tagging/index.ts +6 -5
- package/src/tagging/persist_sender_tagging_index_ranges.ts +57 -0
- package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +358 -0
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +4 -4
- package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +52 -17
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +44 -14
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +31 -27
- package/src/tagging/testing/tag_query_test_utils.ts +11 -0
- package/dest/contract_function_simulator/oracle/oracle.d.ts +0 -60
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +0 -1
- package/dest/contract_function_simulator/oracle/oracle.js +0 -368
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +0 -6
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +0 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.js +0 -80
- package/dest/contract_sync/contract_sync_service.d.ts +0 -42
- package/dest/contract_sync/contract_sync_service.d.ts.map +0 -1
- package/dest/contract_sync/contract_sync_service.js +0 -97
- package/dest/contract_sync/helpers.d.ts +0 -28
- package/dest/contract_sync/helpers.d.ts.map +0 -1
- package/dest/contract_sync/helpers.js +0 -55
- 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/storage/tagging_store/sender_address_book_store.d.ts +0 -14
- package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +0 -1
- package/dest/storage/tagging_store/sender_address_book_store.js +0 -36
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +0 -15
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +0 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +0 -99
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +0 -15
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +0 -1
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +0 -32
- package/src/contract_function_simulator/oracle/oracle.ts +0 -637
- package/src/contract_function_simulator/proxied_contract_data_source.ts +0 -83
- package/src/contract_sync/contract_sync_service.ts +0 -145
- package/src/contract_sync/helpers.ts +0 -93
- package/src/storage/tagging_store/sender_address_book_store.ts +0 -48
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -143
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -49
|
@@ -1,24 +1,30 @@
|
|
|
1
|
+
import { CircuitKind } from '@aztec/bb.js';
|
|
1
2
|
import {
|
|
2
3
|
AVM_EMITNOTEHASH_BASE_L2_GAS,
|
|
3
4
|
AVM_EMITNULLIFIER_BASE_L2_GAS,
|
|
4
5
|
AVM_SENDL2TOL1MSG_BASE_L2_GAS,
|
|
5
|
-
|
|
6
|
-
DA_GAS_PER_BYTE,
|
|
6
|
+
DA_GAS_PER_FIELD,
|
|
7
7
|
FIXED_AVM_STARTUP_L2_GAS,
|
|
8
|
-
FIXED_DA_GAS,
|
|
9
|
-
FIXED_L2_GAS,
|
|
10
|
-
GeneratorIndex,
|
|
11
8
|
L2_GAS_PER_CONTRACT_CLASS_LOG,
|
|
9
|
+
L2_GAS_PER_L2_TO_L1_MSG,
|
|
10
|
+
L2_GAS_PER_NOTE_HASH,
|
|
11
|
+
L2_GAS_PER_NULLIFIER,
|
|
12
12
|
L2_GAS_PER_PRIVATE_LOG,
|
|
13
13
|
MAX_CONTRACT_CLASS_LOGS_PER_TX,
|
|
14
14
|
MAX_ENQUEUED_CALLS_PER_TX,
|
|
15
15
|
MAX_L2_TO_L1_MSGS_PER_TX,
|
|
16
16
|
MAX_NOTE_HASHES_PER_TX,
|
|
17
|
+
MAX_NOTE_HASH_READ_REQUESTS_PER_TX,
|
|
17
18
|
MAX_NULLIFIERS_PER_TX,
|
|
19
|
+
MAX_NULLIFIER_READ_REQUESTS_PER_TX,
|
|
18
20
|
MAX_PRIVATE_LOGS_PER_TX,
|
|
21
|
+
MAX_TX_LIFETIME,
|
|
22
|
+
PRIVATE_TX_L2_GAS_OVERHEAD,
|
|
23
|
+
PUBLIC_DATA_WRITE_LENGTH,
|
|
24
|
+
PUBLIC_TX_L2_GAS_OVERHEAD,
|
|
25
|
+
TX_DA_GAS_OVERHEAD,
|
|
19
26
|
} from '@aztec/constants';
|
|
20
27
|
import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection';
|
|
21
|
-
import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
|
|
22
28
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
23
29
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
24
30
|
import { Timer } from '@aztec/foundation/timer';
|
|
@@ -38,72 +44,91 @@ import type { FunctionCall } from '@aztec/stdlib/abi';
|
|
|
38
44
|
import { FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
|
|
39
45
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
40
46
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
47
|
+
import type { BlockParameter, L2TipsProvider } from '@aztec/stdlib/block';
|
|
41
48
|
import { Gas } from '@aztec/stdlib/gas';
|
|
42
49
|
import {
|
|
43
50
|
computeNoteHashNonce,
|
|
44
51
|
computeProtocolNullifier,
|
|
52
|
+
computeSiloedPrivateLogFirstField,
|
|
45
53
|
computeUniqueNoteHash,
|
|
46
54
|
siloNoteHash,
|
|
47
55
|
siloNullifier,
|
|
48
56
|
} from '@aztec/stdlib/hash';
|
|
49
57
|
import type { AztecNode } from '@aztec/stdlib/interfaces/server';
|
|
50
58
|
import {
|
|
59
|
+
ClaimedLengthArray,
|
|
51
60
|
PartialPrivateTailPublicInputsForPublic,
|
|
52
61
|
PartialPrivateTailPublicInputsForRollup,
|
|
53
62
|
type PrivateExecutionStep,
|
|
54
63
|
type PrivateKernelExecutionProofOutput,
|
|
55
64
|
PrivateKernelTailCircuitPublicInputs,
|
|
65
|
+
PrivateLogData,
|
|
56
66
|
PrivateToPublicAccumulatedData,
|
|
57
67
|
PrivateToRollupAccumulatedData,
|
|
58
68
|
PublicCallRequest,
|
|
69
|
+
ReadRequestActionEnum,
|
|
59
70
|
ScopedLogHash,
|
|
71
|
+
ScopedNoteHash,
|
|
72
|
+
ScopedNullifier,
|
|
73
|
+
ScopedReadRequest,
|
|
74
|
+
buildTransientDataHints,
|
|
75
|
+
getNoteHashReadRequestResetActions,
|
|
76
|
+
getNullifierReadRequestResetActions,
|
|
60
77
|
} from '@aztec/stdlib/kernel';
|
|
61
78
|
import { PrivateLog } from '@aztec/stdlib/logs';
|
|
62
79
|
import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
|
|
63
80
|
import { ChonkProof } from '@aztec/stdlib/proofs';
|
|
81
|
+
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
64
82
|
import {
|
|
65
83
|
BlockHeader,
|
|
66
84
|
CallContext,
|
|
85
|
+
type ContractOverrides,
|
|
67
86
|
HashedValues,
|
|
87
|
+
type OffchainEffect,
|
|
68
88
|
PrivateExecutionResult,
|
|
69
89
|
TxConstantData,
|
|
70
90
|
TxExecutionRequest,
|
|
71
91
|
collectNested,
|
|
92
|
+
collectNoteHashNullifierCounterMap,
|
|
72
93
|
getFinalMinRevertibleSideEffectCounter,
|
|
73
94
|
} from '@aztec/stdlib/tx';
|
|
74
95
|
|
|
75
|
-
import type {
|
|
96
|
+
import type { ContractClassService } from '../contract/contract_class_service.js';
|
|
97
|
+
import type { ContractSyncService } from '../contract/contract_sync_service.js';
|
|
98
|
+
import type { ExecutionHooks } from '../hooks/index.js';
|
|
99
|
+
import type { TxResolverService } from '../messages/tx_resolver_service.js';
|
|
76
100
|
import type { AddressStore } from '../storage/address_store/address_store.js';
|
|
101
|
+
import { CapsuleService } from '../storage/capsule_store/capsule_service.js';
|
|
77
102
|
import type { CapsuleStore } from '../storage/capsule_store/capsule_store.js';
|
|
78
103
|
import type { ContractStore } from '../storage/contract_store/contract_store.js';
|
|
104
|
+
import { FactService } from '../storage/fact_store/index.js';
|
|
105
|
+
import type { FactStore } from '../storage/fact_store/index.js';
|
|
79
106
|
import type { NoteStore } from '../storage/note_store/note_store.js';
|
|
80
107
|
import type { PrivateEventStore } from '../storage/private_event_store/private_event_store.js';
|
|
81
108
|
import type { RecipientTaggingStore } from '../storage/tagging_store/recipient_tagging_store.js';
|
|
82
|
-
import type { SenderAddressBookStore } from '../storage/tagging_store/sender_address_book_store.js';
|
|
83
109
|
import type { SenderTaggingStore } from '../storage/tagging_store/sender_tagging_store.js';
|
|
110
|
+
import type { TaggingSecretSourcesStore } from '../storage/tagging_store/tagging_secret_sources_store.js';
|
|
111
|
+
import { AnchoredContractData } from './anchored_contract_data.js';
|
|
84
112
|
import type { BenchmarkedNode } from './benchmarked_node.js';
|
|
85
113
|
import { ExecutionNoteCache } from './execution_note_cache.js';
|
|
86
114
|
import { ExecutionTaggingIndexCache } from './execution_tagging_index_cache.js';
|
|
87
115
|
import { HashedValuesCache } from './hashed_values_cache.js';
|
|
88
|
-
import {
|
|
116
|
+
import { buildACIRCallback } from './oracle/acir_callback.js';
|
|
89
117
|
import { executePrivateFunction } from './oracle/private_execution.js';
|
|
90
118
|
import { PrivateExecutionOracle } from './oracle/private_execution_oracle.js';
|
|
91
119
|
import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
|
|
120
|
+
import { TransientArrayService } from './transient_array_service.js';
|
|
92
121
|
|
|
93
122
|
/** Options for ContractFunctionSimulator.run. */
|
|
94
123
|
export type ContractSimulatorRunOpts = {
|
|
95
|
-
/** The address of the contract (should match request.origin). */
|
|
96
|
-
contractAddress: AztecAddress;
|
|
97
|
-
/** The function selector of the entry point. */
|
|
98
|
-
selector: FunctionSelector;
|
|
99
124
|
/** The address calling the function. Can be replaced to simulate a call from another contract or account. */
|
|
100
125
|
msgSender?: AztecAddress;
|
|
101
126
|
/** The block header to use as base state for this run. */
|
|
102
127
|
anchorBlockHeader: BlockHeader;
|
|
103
128
|
/** The address used as a tagging sender when emitting private logs. */
|
|
104
129
|
senderForTags?: AztecAddress;
|
|
105
|
-
/** The accounts whose notes we can access in this call.
|
|
106
|
-
scopes
|
|
130
|
+
/** The accounts whose notes we can access in this call. */
|
|
131
|
+
scopes: AztecAddress[];
|
|
107
132
|
/** The job ID for staged writes. */
|
|
108
133
|
jobId: string;
|
|
109
134
|
};
|
|
@@ -111,17 +136,24 @@ export type ContractSimulatorRunOpts = {
|
|
|
111
136
|
/** Args for ContractFunctionSimulator constructor. */
|
|
112
137
|
export type ContractFunctionSimulatorArgs = {
|
|
113
138
|
contractStore: ContractStore;
|
|
139
|
+
contractClassService: ContractClassService;
|
|
140
|
+
/** Per-simulation contract overrides. */
|
|
141
|
+
overrides?: ContractOverrides;
|
|
114
142
|
noteStore: NoteStore;
|
|
115
143
|
keyStore: KeyStore;
|
|
116
144
|
addressStore: AddressStore;
|
|
117
145
|
aztecNode: AztecNode;
|
|
146
|
+
l2TipsStore: L2TipsProvider;
|
|
118
147
|
senderTaggingStore: SenderTaggingStore;
|
|
119
148
|
recipientTaggingStore: RecipientTaggingStore;
|
|
120
|
-
|
|
149
|
+
taggingSecretSourcesStore: TaggingSecretSourcesStore;
|
|
121
150
|
capsuleStore: CapsuleStore;
|
|
151
|
+
factStore: FactStore;
|
|
122
152
|
privateEventStore: PrivateEventStore;
|
|
123
153
|
simulator: CircuitSimulator;
|
|
124
154
|
contractSyncService: ContractSyncService;
|
|
155
|
+
txResolver: TxResolverService;
|
|
156
|
+
hooks?: ExecutionHooks;
|
|
125
157
|
};
|
|
126
158
|
|
|
127
159
|
/**
|
|
@@ -130,31 +162,43 @@ export type ContractFunctionSimulatorArgs = {
|
|
|
130
162
|
export class ContractFunctionSimulator {
|
|
131
163
|
private readonly log: Logger;
|
|
132
164
|
private readonly contractStore: ContractStore;
|
|
165
|
+
private readonly contractClassService: ContractClassService;
|
|
166
|
+
private readonly overrides: ContractOverrides | undefined;
|
|
133
167
|
private readonly noteStore: NoteStore;
|
|
134
168
|
private readonly keyStore: KeyStore;
|
|
135
169
|
private readonly addressStore: AddressStore;
|
|
136
170
|
private readonly aztecNode: AztecNode;
|
|
171
|
+
private readonly l2TipsStore: L2TipsProvider;
|
|
137
172
|
private readonly senderTaggingStore: SenderTaggingStore;
|
|
138
173
|
private readonly recipientTaggingStore: RecipientTaggingStore;
|
|
139
|
-
private readonly
|
|
174
|
+
private readonly taggingSecretSourcesStore: TaggingSecretSourcesStore;
|
|
140
175
|
private readonly capsuleStore: CapsuleStore;
|
|
176
|
+
private readonly factStore: FactStore;
|
|
141
177
|
private readonly privateEventStore: PrivateEventStore;
|
|
142
178
|
private readonly simulator: CircuitSimulator;
|
|
143
179
|
private readonly contractSyncService: ContractSyncService;
|
|
180
|
+
private readonly txResolver: TxResolverService;
|
|
181
|
+
private readonly hooks: ExecutionHooks | undefined;
|
|
144
182
|
|
|
145
183
|
constructor(args: ContractFunctionSimulatorArgs) {
|
|
146
184
|
this.contractStore = args.contractStore;
|
|
185
|
+
this.contractClassService = args.contractClassService;
|
|
186
|
+
this.overrides = args.overrides;
|
|
147
187
|
this.noteStore = args.noteStore;
|
|
148
188
|
this.keyStore = args.keyStore;
|
|
149
189
|
this.addressStore = args.addressStore;
|
|
150
190
|
this.aztecNode = args.aztecNode;
|
|
191
|
+
this.l2TipsStore = args.l2TipsStore;
|
|
151
192
|
this.senderTaggingStore = args.senderTaggingStore;
|
|
152
193
|
this.recipientTaggingStore = args.recipientTaggingStore;
|
|
153
|
-
this.
|
|
194
|
+
this.taggingSecretSourcesStore = args.taggingSecretSourcesStore;
|
|
154
195
|
this.capsuleStore = args.capsuleStore;
|
|
196
|
+
this.factStore = args.factStore;
|
|
155
197
|
this.privateEventStore = args.privateEventStore;
|
|
156
198
|
this.simulator = args.simulator;
|
|
157
199
|
this.contractSyncService = args.contractSyncService;
|
|
200
|
+
this.txResolver = args.txResolver;
|
|
201
|
+
this.hooks = args.hooks;
|
|
158
202
|
this.log = createLogger('simulator');
|
|
159
203
|
}
|
|
160
204
|
|
|
@@ -165,9 +209,7 @@ export class ContractFunctionSimulator {
|
|
|
165
209
|
public async run(
|
|
166
210
|
request: TxExecutionRequest,
|
|
167
211
|
{
|
|
168
|
-
|
|
169
|
-
selector,
|
|
170
|
-
msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE),
|
|
212
|
+
msgSender = AztecAddress.NULL_MSG_SENDER,
|
|
171
213
|
anchorBlockHeader,
|
|
172
214
|
senderForTags,
|
|
173
215
|
scopes,
|
|
@@ -176,18 +218,30 @@ export class ContractFunctionSimulator {
|
|
|
176
218
|
): Promise<PrivateExecutionResult> {
|
|
177
219
|
const simulatorSetupTimer = new Timer();
|
|
178
220
|
|
|
179
|
-
const
|
|
221
|
+
const contractAddress = request.origin;
|
|
180
222
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
223
|
+
const anchoredContractData = new AnchoredContractData(
|
|
224
|
+
this.contractStore,
|
|
225
|
+
this.contractClassService,
|
|
226
|
+
anchorBlockHeader,
|
|
227
|
+
this.overrides,
|
|
228
|
+
);
|
|
184
229
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
230
|
+
const entryPointArtifact = await anchoredContractData.getFunctionArtifactWithDebugMetadata(
|
|
231
|
+
contractAddress,
|
|
232
|
+
request.functionSelector,
|
|
233
|
+
);
|
|
234
|
+
if (!entryPointArtifact) {
|
|
235
|
+
throw new Error(
|
|
236
|
+
`Cannot run function ${request.functionSelector} on ${contractAddress}: the contract is not registered. ` +
|
|
237
|
+
`Register it via wallet.registerContract(...).`,
|
|
188
238
|
);
|
|
189
239
|
}
|
|
190
240
|
|
|
241
|
+
if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
|
|
242
|
+
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
|
|
243
|
+
}
|
|
244
|
+
|
|
191
245
|
// reserve the first side effect for the tx hash (inserted by the private kernel)
|
|
192
246
|
const startSideEffectCounter = 2;
|
|
193
247
|
|
|
@@ -202,9 +256,15 @@ export class ContractFunctionSimulator {
|
|
|
202
256
|
const noteCache = new ExecutionNoteCache(protocolNullifier);
|
|
203
257
|
const taggingIndexCache = new ExecutionTaggingIndexCache();
|
|
204
258
|
|
|
259
|
+
// One shared transient store for the whole execution tree rooted at this transaction. Threaded into every child
|
|
260
|
+
// private oracle and inherited by nested utility frames, so that frames of the same contract see each other's
|
|
261
|
+
// transient arrays, then discarded when run() returns.
|
|
262
|
+
const transientArrayService = new TransientArrayService();
|
|
263
|
+
|
|
205
264
|
const privateExecutionOracle = new PrivateExecutionOracle({
|
|
206
265
|
argsHash: request.firstCallArgsHash,
|
|
207
266
|
txContext: request.txContext,
|
|
267
|
+
txRequestSalt: request.salt,
|
|
208
268
|
callContext,
|
|
209
269
|
anchorBlockHeader,
|
|
210
270
|
utilityExecutor: async (call, execScopes) => {
|
|
@@ -215,16 +275,18 @@ export class ContractFunctionSimulator {
|
|
|
215
275
|
executionCache: HashedValuesCache.create(request.argsOfCalls),
|
|
216
276
|
noteCache,
|
|
217
277
|
taggingIndexCache,
|
|
218
|
-
|
|
278
|
+
anchoredContractData,
|
|
219
279
|
noteStore: this.noteStore,
|
|
220
280
|
keyStore: this.keyStore,
|
|
221
281
|
addressStore: this.addressStore,
|
|
222
282
|
aztecNode: this.aztecNode,
|
|
223
283
|
senderTaggingStore: this.senderTaggingStore,
|
|
224
284
|
recipientTaggingStore: this.recipientTaggingStore,
|
|
225
|
-
|
|
226
|
-
|
|
285
|
+
taggingSecretSourcesStore: this.taggingSecretSourcesStore,
|
|
286
|
+
capsuleService: new CapsuleService(this.capsuleStore, scopes),
|
|
287
|
+
factService: new FactService(this.factStore, scopes),
|
|
227
288
|
privateEventStore: this.privateEventStore,
|
|
289
|
+
txResolver: this.txResolver,
|
|
228
290
|
contractSyncService: this.contractSyncService,
|
|
229
291
|
jobId,
|
|
230
292
|
totalPublicCalldataCount: 0,
|
|
@@ -232,6 +294,9 @@ export class ContractFunctionSimulator {
|
|
|
232
294
|
scopes,
|
|
233
295
|
senderForTags,
|
|
234
296
|
simulator: this.simulator,
|
|
297
|
+
l2TipsStore: this.l2TipsStore,
|
|
298
|
+
hooks: this.hooks,
|
|
299
|
+
transientArrayService,
|
|
235
300
|
});
|
|
236
301
|
|
|
237
302
|
const setupTime = simulatorSetupTimer.ms();
|
|
@@ -250,7 +315,6 @@ export class ContractFunctionSimulator {
|
|
|
250
315
|
);
|
|
251
316
|
const simulatorTeardownTimer = new Timer();
|
|
252
317
|
|
|
253
|
-
noteCache.finish();
|
|
254
318
|
const firstNullifierHint = noteCache.getNonceGenerator();
|
|
255
319
|
|
|
256
320
|
const publicCallRequests = collectNested([executionResult], r =>
|
|
@@ -261,7 +325,7 @@ export class ContractFunctionSimulator {
|
|
|
261
325
|
);
|
|
262
326
|
const publicFunctionsCalldata = await Promise.all(
|
|
263
327
|
publicCallRequests.map(async r => {
|
|
264
|
-
const calldata = await privateExecutionOracle.
|
|
328
|
+
const calldata = await privateExecutionOracle.getHashPreimage(r.calldataHash);
|
|
265
329
|
return new HashedValues(calldata, r.calldataHash);
|
|
266
330
|
}),
|
|
267
331
|
);
|
|
@@ -282,45 +346,71 @@ export class ContractFunctionSimulator {
|
|
|
282
346
|
}
|
|
283
347
|
}
|
|
284
348
|
|
|
285
|
-
// docs:start:execute_utility_function
|
|
286
349
|
/**
|
|
287
350
|
* Runs a utility function.
|
|
288
351
|
* @param call - The function call to execute.
|
|
289
|
-
* @param authwits - Authentication witnesses required for the function call.
|
|
290
|
-
* @param anchorBlockHeader - The block header to use as base state for this run.
|
|
291
|
-
* @param scopes - Optional array of account addresses whose notes can be accessed in this call. Defaults to all
|
|
292
|
-
* accounts if not specified.
|
|
293
352
|
* @returns A return value of the utility function in a form as returned by the simulator (Noir fields)
|
|
294
353
|
*/
|
|
295
354
|
public async runUtility(
|
|
296
355
|
call: FunctionCall,
|
|
297
356
|
authwits: AuthWitness[],
|
|
298
357
|
anchorBlockHeader: BlockHeader,
|
|
299
|
-
scopes: AztecAddress[]
|
|
358
|
+
scopes: AztecAddress[],
|
|
300
359
|
jobId: string,
|
|
301
|
-
): Promise<Fr[]> {
|
|
302
|
-
const
|
|
360
|
+
): Promise<{ result: Fr[]; offchainEffects: OffchainEffect[] }> {
|
|
361
|
+
const anchoredContractData = new AnchoredContractData(
|
|
362
|
+
this.contractStore,
|
|
363
|
+
this.contractClassService,
|
|
364
|
+
anchorBlockHeader,
|
|
365
|
+
this.overrides,
|
|
366
|
+
);
|
|
367
|
+
|
|
368
|
+
const entryPointArtifact = await anchoredContractData.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
|
|
369
|
+
if (!entryPointArtifact) {
|
|
370
|
+
throw new Error(
|
|
371
|
+
`Cannot run function ${call.selector} on ${call.to}: the contract is not registered. ` +
|
|
372
|
+
`Register it via wallet.registerContract(...).`,
|
|
373
|
+
);
|
|
374
|
+
}
|
|
303
375
|
|
|
304
376
|
if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
|
|
305
377
|
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
|
|
306
378
|
}
|
|
307
379
|
|
|
380
|
+
const utilityExecutor = async (syncCall: FunctionCall, execScopes: AztecAddress[]) => {
|
|
381
|
+
await this.runUtility(syncCall, [], anchorBlockHeader, execScopes, jobId);
|
|
382
|
+
};
|
|
383
|
+
|
|
308
384
|
const oracle = new UtilityExecutionOracle({
|
|
309
|
-
|
|
385
|
+
callContext: CallContext.from({
|
|
386
|
+
msgSender: AztecAddress.NULL_MSG_SENDER,
|
|
387
|
+
contractAddress: call.to,
|
|
388
|
+
functionSelector: call.selector,
|
|
389
|
+
isStaticCall: true,
|
|
390
|
+
}),
|
|
310
391
|
authWitnesses: authwits,
|
|
311
392
|
capsules: [],
|
|
312
393
|
anchorBlockHeader,
|
|
313
|
-
|
|
394
|
+
anchoredContractData,
|
|
314
395
|
noteStore: this.noteStore,
|
|
315
396
|
keyStore: this.keyStore,
|
|
316
397
|
addressStore: this.addressStore,
|
|
317
398
|
aztecNode: this.aztecNode,
|
|
318
399
|
recipientTaggingStore: this.recipientTaggingStore,
|
|
319
|
-
|
|
320
|
-
|
|
400
|
+
taggingSecretSourcesStore: this.taggingSecretSourcesStore,
|
|
401
|
+
capsuleService: new CapsuleService(this.capsuleStore, scopes),
|
|
402
|
+
factService: new FactService(this.factStore, scopes),
|
|
321
403
|
privateEventStore: this.privateEventStore,
|
|
404
|
+
txResolver: this.txResolver,
|
|
405
|
+
contractSyncService: this.contractSyncService,
|
|
406
|
+
l2TipsStore: this.l2TipsStore,
|
|
322
407
|
jobId,
|
|
323
408
|
scopes,
|
|
409
|
+
simulator: this.simulator,
|
|
410
|
+
hooks: this.hooks,
|
|
411
|
+
utilityExecutor,
|
|
412
|
+
// Execution-tree root (top-level utility run or contract sync): own store; nested frames inherit it.
|
|
413
|
+
transientArrayService: new TransientArrayService(),
|
|
324
414
|
});
|
|
325
415
|
|
|
326
416
|
try {
|
|
@@ -331,7 +421,7 @@ export class ContractFunctionSimulator {
|
|
|
331
421
|
|
|
332
422
|
const initialWitness = toACVMWitness(0, call.args);
|
|
333
423
|
const acirExecutionResult = await this.simulator
|
|
334
|
-
.executeUserCircuit(initialWitness, entryPointArtifact,
|
|
424
|
+
.executeUserCircuit(initialWitness, entryPointArtifact, buildACIRCallback(oracle))
|
|
335
425
|
.catch((err: Error) => {
|
|
336
426
|
err.message = resolveAssertionMessageFromError(err, entryPointArtifact);
|
|
337
427
|
throw new ExecutionError(
|
|
@@ -345,13 +435,15 @@ export class ContractFunctionSimulator {
|
|
|
345
435
|
);
|
|
346
436
|
});
|
|
347
437
|
|
|
348
|
-
this.log.verbose(`Utility
|
|
349
|
-
return
|
|
438
|
+
this.log.verbose(`Utility execution for ${call.to}.${call.selector} completed`);
|
|
439
|
+
return {
|
|
440
|
+
result: witnessMapToFields(acirExecutionResult.returnWitness),
|
|
441
|
+
offchainEffects: oracle.getOffchainEffects(),
|
|
442
|
+
};
|
|
350
443
|
} catch (err) {
|
|
351
444
|
throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
|
|
352
445
|
}
|
|
353
446
|
}
|
|
354
|
-
// docs:end:execute_utility_function
|
|
355
447
|
|
|
356
448
|
/**
|
|
357
449
|
* Returns the execution statistics collected during the simulator run.
|
|
@@ -387,7 +479,8 @@ class OrderedSideEffect<T> {
|
|
|
387
479
|
* (allowing state overrides) and is much faster, while still generating a valid
|
|
388
480
|
* output that can be sent to the node for public simulation
|
|
389
481
|
* @param privateExecutionResult - The result of the private execution.
|
|
390
|
-
* @param
|
|
482
|
+
* @param debugFunctionNameGetter - A provider for contract data in order to get function names and debug info.
|
|
483
|
+
* @param node - AztecNode for verifying settled read requests against the note hash and nullifier trees.
|
|
391
484
|
* @param minRevertibleSideEffectCounterOverride - Optional override for the min revertible side effect counter.
|
|
392
485
|
* Used by TXE to simulate account contract behavior (setting the counter before app execution).
|
|
393
486
|
* @returns The simulated proving result.
|
|
@@ -395,58 +488,73 @@ class OrderedSideEffect<T> {
|
|
|
395
488
|
export async function generateSimulatedProvingResult(
|
|
396
489
|
privateExecutionResult: PrivateExecutionResult,
|
|
397
490
|
debugFunctionNameGetter: (contractAddress: AztecAddress, functionSelector: FunctionSelector) => Promise<string>,
|
|
491
|
+
node: AztecNode,
|
|
398
492
|
minRevertibleSideEffectCounterOverride?: number,
|
|
399
493
|
): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
|
|
400
|
-
const
|
|
401
|
-
const nullifiers: OrderedSideEffect<Fr>[] = [];
|
|
402
|
-
const taggedPrivateLogs: OrderedSideEffect<PrivateLog>[] = [];
|
|
494
|
+
const taggedPrivateLogs: OrderedSideEffect<PrivateLogData>[] = [];
|
|
403
495
|
const l2ToL1Messages: OrderedSideEffect<ScopedL2ToL1Message>[] = [];
|
|
404
496
|
const contractClassLogsHashes: OrderedSideEffect<ScopedLogHash>[] = [];
|
|
405
497
|
const publicCallRequests: OrderedSideEffect<PublicCallRequest>[] = [];
|
|
406
498
|
const executionSteps: PrivateExecutionStep[] = [];
|
|
407
499
|
|
|
500
|
+
// Unsiloed scoped arrays — used for squashing, read request verification,
|
|
501
|
+
// and siloed at the end only for the surviving items
|
|
502
|
+
const scopedNoteHashes: ScopedNoteHash[] = [];
|
|
503
|
+
const scopedNullifiers: ScopedNullifier[] = [];
|
|
504
|
+
|
|
505
|
+
// Read requests for verification
|
|
506
|
+
const noteHashReadRequests: ScopedReadRequest[] = [];
|
|
507
|
+
const nullifierReadRequests: ScopedReadRequest[] = [];
|
|
508
|
+
|
|
408
509
|
let publicTeardownCallRequest;
|
|
409
510
|
|
|
511
|
+
// We set expiration timestamp to anchor_block_timestamp + MAX_TX_LIFETIME (24h) just like kernels do
|
|
512
|
+
let expirationTimestamp =
|
|
513
|
+
privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader.globalVariables.timestamp +
|
|
514
|
+
BigInt(MAX_TX_LIFETIME);
|
|
515
|
+
|
|
516
|
+
let feePayer = AztecAddress.zero();
|
|
517
|
+
|
|
410
518
|
const executions = [privateExecutionResult.entrypoint];
|
|
411
519
|
|
|
412
520
|
while (executions.length !== 0) {
|
|
413
521
|
const execution = executions.shift()!;
|
|
414
522
|
executions.unshift(...execution!.nestedExecutionResults);
|
|
415
523
|
|
|
524
|
+
// Just like kernels we overwrite the default value if the call sets it.
|
|
525
|
+
const callExpirationTimestamp = execution.publicInputs.expirationTimestamp;
|
|
526
|
+
if (callExpirationTimestamp !== 0n && callExpirationTimestamp < expirationTimestamp) {
|
|
527
|
+
expirationTimestamp = callExpirationTimestamp;
|
|
528
|
+
}
|
|
529
|
+
|
|
416
530
|
const { contractAddress } = execution.publicInputs.callContext;
|
|
417
531
|
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
new OrderedSideEffect(await siloNoteHash(contractAddress, noteHash.value), noteHash.counter),
|
|
425
|
-
),
|
|
426
|
-
);
|
|
532
|
+
if (execution.publicInputs.isFeePayer) {
|
|
533
|
+
if (!feePayer.isZero()) {
|
|
534
|
+
throw new Error('Multiple fee payers found in private execution result');
|
|
535
|
+
}
|
|
536
|
+
feePayer = contractAddress;
|
|
537
|
+
}
|
|
427
538
|
|
|
428
|
-
|
|
429
|
-
execution.publicInputs.
|
|
539
|
+
scopedNoteHashes.push(
|
|
540
|
+
...execution.publicInputs.noteHashes
|
|
430
541
|
.getActiveItems()
|
|
431
|
-
.
|
|
432
|
-
|
|
433
|
-
new OrderedSideEffect(await siloNullifier(contractAddress, nullifier.value), nullifier.counter),
|
|
434
|
-
),
|
|
542
|
+
.filter(nh => !nh.isEmpty())
|
|
543
|
+
.map(nh => nh.scope(contractAddress)),
|
|
435
544
|
);
|
|
545
|
+
scopedNullifiers.push(...execution.publicInputs.nullifiers.getActiveItems().map(n => n.scope(contractAddress)));
|
|
436
546
|
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
[contractAddress, metadata.log.fields[0]
|
|
441
|
-
|
|
442
|
-
)
|
|
443
|
-
|
|
444
|
-
}),
|
|
547
|
+
taggedPrivateLogs.push(
|
|
548
|
+
...(await Promise.all(
|
|
549
|
+
execution.publicInputs.privateLogs.getActiveItems().map(async metadata => {
|
|
550
|
+
metadata.log.fields[0] = await computeSiloedPrivateLogFirstField(contractAddress, metadata.log.fields[0]);
|
|
551
|
+
return new OrderedSideEffect(metadata, metadata.counter);
|
|
552
|
+
}),
|
|
553
|
+
)),
|
|
445
554
|
);
|
|
446
555
|
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
nullifiers.push(...nullifiersFromExecution);
|
|
556
|
+
noteHashReadRequests.push(...execution.publicInputs.noteHashReadRequests.getActiveItems());
|
|
557
|
+
nullifierReadRequests.push(...execution.publicInputs.nullifierReadRequests.getActiveItems());
|
|
450
558
|
l2ToL1Messages.push(
|
|
451
559
|
...execution.publicInputs.l2ToL1Msgs
|
|
452
560
|
.getActiveItems()
|
|
@@ -480,12 +588,54 @@ export async function generateSimulatedProvingResult(
|
|
|
480
588
|
execution.publicInputs.callContext.functionSelector,
|
|
481
589
|
),
|
|
482
590
|
timings: execution.profileResult?.timings ?? { witgen: 0, oracles: {} },
|
|
591
|
+
kind: CircuitKind.App,
|
|
483
592
|
bytecode: execution.acir,
|
|
484
593
|
vk: execution.vk,
|
|
485
594
|
witness: execution.partialWitness,
|
|
486
595
|
});
|
|
487
596
|
}
|
|
488
597
|
|
|
598
|
+
const noteHashNullifierCounterMap = collectNoteHashNullifierCounterMap(privateExecutionResult);
|
|
599
|
+
const minRevertibleSideEffectCounter =
|
|
600
|
+
minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
|
|
601
|
+
|
|
602
|
+
const scopedNoteHashesCLA = new ClaimedLengthArray<ScopedNoteHash, typeof MAX_NOTE_HASHES_PER_TX>(
|
|
603
|
+
padArrayEnd(scopedNoteHashes, ScopedNoteHash.empty(), MAX_NOTE_HASHES_PER_TX),
|
|
604
|
+
scopedNoteHashes.length,
|
|
605
|
+
);
|
|
606
|
+
const scopedNullifiersCLA = new ClaimedLengthArray<ScopedNullifier, typeof MAX_NULLIFIERS_PER_TX>(
|
|
607
|
+
padArrayEnd(scopedNullifiers, ScopedNullifier.empty(), MAX_NULLIFIERS_PER_TX),
|
|
608
|
+
scopedNullifiers.length,
|
|
609
|
+
);
|
|
610
|
+
|
|
611
|
+
const { filteredNoteHashes, filteredNullifiers, filteredPrivateLogs } = squashTransientSideEffects(
|
|
612
|
+
taggedPrivateLogs,
|
|
613
|
+
scopedNoteHashesCLA,
|
|
614
|
+
scopedNullifiersCLA,
|
|
615
|
+
noteHashNullifierCounterMap,
|
|
616
|
+
minRevertibleSideEffectCounter,
|
|
617
|
+
);
|
|
618
|
+
|
|
619
|
+
await verifyReadRequests(
|
|
620
|
+
node,
|
|
621
|
+
await privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader.hash(),
|
|
622
|
+
noteHashReadRequests,
|
|
623
|
+
nullifierReadRequests,
|
|
624
|
+
scopedNoteHashesCLA,
|
|
625
|
+
scopedNullifiersCLA,
|
|
626
|
+
);
|
|
627
|
+
|
|
628
|
+
const siloedNoteHashes = await Promise.all(
|
|
629
|
+
filteredNoteHashes
|
|
630
|
+
.sort((a, b) => a.counter - b.counter)
|
|
631
|
+
.map(async nh => new OrderedSideEffect(await siloNoteHash(nh.contractAddress, nh.value), nh.counter)),
|
|
632
|
+
);
|
|
633
|
+
const siloedNullifiers = await Promise.all(
|
|
634
|
+
filteredNullifiers
|
|
635
|
+
.sort((a, b) => a.counter - b.counter)
|
|
636
|
+
.map(async n => new OrderedSideEffect(await siloNullifier(n.contractAddress, n.value), n.counter)),
|
|
637
|
+
);
|
|
638
|
+
|
|
489
639
|
const constantData = new TxConstantData(
|
|
490
640
|
privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader,
|
|
491
641
|
privateExecutionResult.entrypoint.publicInputs.txContext,
|
|
@@ -502,25 +652,23 @@ export async function generateSimulatedProvingResult(
|
|
|
502
652
|
const getEffect = <T>(orderedSideEffect: OrderedSideEffect<T>) => orderedSideEffect.sideEffect;
|
|
503
653
|
|
|
504
654
|
const isPrivateOnlyTx = privateExecutionResult.publicFunctionCalldata.length === 0;
|
|
505
|
-
const minRevertibleSideEffectCounter =
|
|
506
|
-
minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
|
|
507
655
|
|
|
508
656
|
const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(
|
|
509
|
-
|
|
657
|
+
siloedNullifiers,
|
|
510
658
|
minRevertibleSideEffectCounter,
|
|
511
659
|
);
|
|
660
|
+
// The protocol nullifier is the nonce generator and the tx's first nullifier. It is injected by the
|
|
661
|
+
// init kernel (at counter 1, index 0) rather than emitted by any private call, so it is absent from
|
|
662
|
+
// the executed nullifiers above. Mirror the kernel here by prepending it as the first non-revertible
|
|
663
|
+
// nullifier.
|
|
512
664
|
const nonceGenerator = privateExecutionResult.firstNullifier;
|
|
513
|
-
|
|
514
|
-
nonRevertibleNullifiers.push(nonceGenerator);
|
|
515
|
-
} else if (!nonRevertibleNullifiers[0].equals(nonceGenerator)) {
|
|
516
|
-
throw new Error('The first non revertible nullifier should be equal to the nonce generator. This is a bug!');
|
|
517
|
-
}
|
|
665
|
+
nonRevertibleNullifiers.unshift(nonceGenerator);
|
|
518
666
|
|
|
519
667
|
if (isPrivateOnlyTx) {
|
|
520
668
|
// We must make the note hashes unique by using the
|
|
521
669
|
// nonce generator and their index in the tx.
|
|
522
670
|
const uniqueNoteHashes = await Promise.all(
|
|
523
|
-
siloedNoteHashes.
|
|
671
|
+
siloedNoteHashes.map(async (orderedSideEffect, i) => {
|
|
524
672
|
const siloedNoteHash = orderedSideEffect.sideEffect;
|
|
525
673
|
const nonce = await computeNoteHashNonce(nonceGenerator, i);
|
|
526
674
|
const uniqueNoteHash = await computeUniqueNoteHash(nonce, siloedNoteHash);
|
|
@@ -535,18 +683,18 @@ export async function generateSimulatedProvingResult(
|
|
|
535
683
|
ScopedL2ToL1Message.empty(),
|
|
536
684
|
MAX_L2_TO_L1_MSGS_PER_TX,
|
|
537
685
|
),
|
|
538
|
-
padArrayEnd(
|
|
686
|
+
padArrayEnd(filteredPrivateLogs.sort(sortByCounter).map(getEffect), PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX),
|
|
539
687
|
padArrayEnd(
|
|
540
688
|
contractClassLogsHashes.sort(sortByCounter).map(getEffect),
|
|
541
689
|
ScopedLogHash.empty(),
|
|
542
690
|
MAX_CONTRACT_CLASS_LOGS_PER_TX,
|
|
543
691
|
),
|
|
544
692
|
);
|
|
545
|
-
gasUsed = meterGasUsed(accumulatedDataForRollup);
|
|
693
|
+
gasUsed = meterGasUsed(accumulatedDataForRollup, isPrivateOnlyTx);
|
|
546
694
|
inputsForRollup = new PartialPrivateTailPublicInputsForRollup(accumulatedDataForRollup);
|
|
547
695
|
} else {
|
|
548
696
|
const [nonRevertibleNoteHashes, revertibleNoteHashes] = splitOrderedSideEffects(
|
|
549
|
-
siloedNoteHashes
|
|
697
|
+
siloedNoteHashes,
|
|
550
698
|
minRevertibleSideEffectCounter,
|
|
551
699
|
);
|
|
552
700
|
const nonRevertibleUniqueNoteHashes = await Promise.all(
|
|
@@ -560,7 +708,7 @@ export async function generateSimulatedProvingResult(
|
|
|
560
708
|
minRevertibleSideEffectCounter,
|
|
561
709
|
);
|
|
562
710
|
const [nonRevertibleTaggedPrivateLogs, revertibleTaggedPrivateLogs] = splitOrderedSideEffects(
|
|
563
|
-
|
|
711
|
+
filteredPrivateLogs,
|
|
564
712
|
minRevertibleSideEffectCounter,
|
|
565
713
|
);
|
|
566
714
|
const [nonRevertibleContractClassLogHashes, revertibleContractClassLogHashes] = splitOrderedSideEffects(
|
|
@@ -589,9 +737,9 @@ export async function generateSimulatedProvingResult(
|
|
|
589
737
|
padArrayEnd(revertibleContractClassLogHashes, ScopedLogHash.empty(), MAX_CONTRACT_CLASS_LOGS_PER_TX),
|
|
590
738
|
padArrayEnd(revertiblePublicCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX),
|
|
591
739
|
);
|
|
592
|
-
gasUsed = meterGasUsed(revertibleData).add(meterGasUsed(nonRevertibleData));
|
|
740
|
+
gasUsed = meterGasUsed(revertibleData, isPrivateOnlyTx).add(meterGasUsed(nonRevertibleData, isPrivateOnlyTx));
|
|
593
741
|
if (publicTeardownCallRequest) {
|
|
594
|
-
gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
|
|
742
|
+
gasUsed = gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
|
|
595
743
|
}
|
|
596
744
|
|
|
597
745
|
inputsForPublic = new PartialPrivateTailPublicInputsForPublic(
|
|
@@ -603,9 +751,14 @@ export async function generateSimulatedProvingResult(
|
|
|
603
751
|
|
|
604
752
|
const publicInputs = new PrivateKernelTailCircuitPublicInputs(
|
|
605
753
|
constantData,
|
|
606
|
-
/*gasUsed=*/ gasUsed.add(
|
|
607
|
-
|
|
608
|
-
|
|
754
|
+
/*gasUsed=*/ gasUsed.add(
|
|
755
|
+
Gas.from({
|
|
756
|
+
l2Gas: isPrivateOnlyTx ? PRIVATE_TX_L2_GAS_OVERHEAD : PUBLIC_TX_L2_GAS_OVERHEAD,
|
|
757
|
+
daGas: TX_DA_GAS_OVERHEAD,
|
|
758
|
+
}),
|
|
759
|
+
),
|
|
760
|
+
/*feePayer=*/ feePayer,
|
|
761
|
+
/*expirationTimestamp=*/ expirationTimestamp,
|
|
609
762
|
hasPublicCalls ? inputsForPublic : undefined,
|
|
610
763
|
!hasPublicCalls ? inputsForRollup : undefined,
|
|
611
764
|
);
|
|
@@ -617,6 +770,116 @@ export async function generateSimulatedProvingResult(
|
|
|
617
770
|
};
|
|
618
771
|
}
|
|
619
772
|
|
|
773
|
+
/**
|
|
774
|
+
* Squashes transient note hashes and nullifiers, mimicking the behavior
|
|
775
|
+
* of the reset kernels. Returns the filtered (surviving) scoped items and private logs.
|
|
776
|
+
*/
|
|
777
|
+
function squashTransientSideEffects(
|
|
778
|
+
taggedPrivateLogs: OrderedSideEffect<PrivateLogData>[],
|
|
779
|
+
scopedNoteHashesCLA: ClaimedLengthArray<ScopedNoteHash, typeof MAX_NOTE_HASHES_PER_TX>,
|
|
780
|
+
scopedNullifiersCLA: ClaimedLengthArray<ScopedNullifier, typeof MAX_NULLIFIERS_PER_TX>,
|
|
781
|
+
noteHashNullifierCounterMap: Map<number, number>,
|
|
782
|
+
minRevertibleSideEffectCounter: number,
|
|
783
|
+
) {
|
|
784
|
+
const { numTransientData, hints: transientDataHints } = buildTransientDataHints(
|
|
785
|
+
scopedNoteHashesCLA,
|
|
786
|
+
scopedNullifiersCLA,
|
|
787
|
+
/*futureNoteHashReads=*/ [],
|
|
788
|
+
/*futureNullifierReads=*/ [],
|
|
789
|
+
/*futureLogs=*/ [],
|
|
790
|
+
noteHashNullifierCounterMap,
|
|
791
|
+
minRevertibleSideEffectCounter,
|
|
792
|
+
);
|
|
793
|
+
|
|
794
|
+
const squashedNoteHashCounters = new Set<number>();
|
|
795
|
+
const squashedNullifierCounters = new Set<number>();
|
|
796
|
+
for (let i = 0; i < numTransientData; i++) {
|
|
797
|
+
const hint = transientDataHints[i];
|
|
798
|
+
squashedNoteHashCounters.add(scopedNoteHashesCLA.array[hint.noteHashIndex].counter);
|
|
799
|
+
squashedNullifierCounters.add(scopedNullifiersCLA.array[hint.nullifierIndex].counter);
|
|
800
|
+
}
|
|
801
|
+
|
|
802
|
+
return {
|
|
803
|
+
filteredNoteHashes: scopedNoteHashesCLA.getActiveItems().filter(nh => !squashedNoteHashCounters.has(nh.counter)),
|
|
804
|
+
filteredNullifiers: scopedNullifiersCLA.getActiveItems().filter(n => !squashedNullifierCounters.has(n.counter)),
|
|
805
|
+
filteredPrivateLogs: taggedPrivateLogs
|
|
806
|
+
.filter(item => !squashedNoteHashCounters.has(item.sideEffect.noteHashCounter))
|
|
807
|
+
.map(item => new OrderedSideEffect(item.sideEffect.log, item.counter)),
|
|
808
|
+
};
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
/**
|
|
812
|
+
* Verifies settled read requests by checking membership in the note hash and nullifier trees
|
|
813
|
+
* at the tx's anchor block, mimicking the behavior of the kernels
|
|
814
|
+
*/
|
|
815
|
+
async function verifyReadRequests(
|
|
816
|
+
node: Pick<AztecNode, 'findLeavesIndexes'>,
|
|
817
|
+
anchorBlockHash: BlockParameter,
|
|
818
|
+
noteHashReadRequests: ScopedReadRequest[],
|
|
819
|
+
nullifierReadRequests: ScopedReadRequest[],
|
|
820
|
+
scopedNoteHashesCLA: ClaimedLengthArray<ScopedNoteHash, typeof MAX_NOTE_HASHES_PER_TX>,
|
|
821
|
+
scopedNullifiersCLA: ClaimedLengthArray<ScopedNullifier, typeof MAX_NULLIFIERS_PER_TX>,
|
|
822
|
+
) {
|
|
823
|
+
const noteHashReadRequestsCLA = new ClaimedLengthArray<ScopedReadRequest, typeof MAX_NOTE_HASH_READ_REQUESTS_PER_TX>(
|
|
824
|
+
padArrayEnd(noteHashReadRequests, ScopedReadRequest.empty(), MAX_NOTE_HASH_READ_REQUESTS_PER_TX),
|
|
825
|
+
noteHashReadRequests.length,
|
|
826
|
+
);
|
|
827
|
+
const nullifierReadRequestsCLA = new ClaimedLengthArray<ScopedReadRequest, typeof MAX_NULLIFIER_READ_REQUESTS_PER_TX>(
|
|
828
|
+
padArrayEnd(nullifierReadRequests, ScopedReadRequest.empty(), MAX_NULLIFIER_READ_REQUESTS_PER_TX),
|
|
829
|
+
nullifierReadRequests.length,
|
|
830
|
+
);
|
|
831
|
+
|
|
832
|
+
const noteHashResetActions = getNoteHashReadRequestResetActions(noteHashReadRequestsCLA, scopedNoteHashesCLA);
|
|
833
|
+
const nullifierResetActions = getNullifierReadRequestResetActions(nullifierReadRequestsCLA, scopedNullifiersCLA);
|
|
834
|
+
|
|
835
|
+
const settledNoteHashReads: { index: number; value: Fr }[] = [];
|
|
836
|
+
for (let i = 0; i < noteHashResetActions.actions.length; i++) {
|
|
837
|
+
if (noteHashResetActions.actions[i] === ReadRequestActionEnum.READ_AS_SETTLED) {
|
|
838
|
+
settledNoteHashReads.push({ index: i, value: noteHashReadRequests[i].value });
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
const settledNullifierReads: { index: number; value: Fr }[] = [];
|
|
843
|
+
for (let i = 0; i < nullifierResetActions.actions.length; i++) {
|
|
844
|
+
if (nullifierResetActions.actions[i] === ReadRequestActionEnum.READ_AS_SETTLED) {
|
|
845
|
+
settledNullifierReads.push({ index: i, value: nullifierReadRequests[i].value });
|
|
846
|
+
}
|
|
847
|
+
}
|
|
848
|
+
|
|
849
|
+
const [noteHashResults, nullifierResults] = await Promise.all([
|
|
850
|
+
settledNoteHashReads.length > 0
|
|
851
|
+
? node.findLeavesIndexes(
|
|
852
|
+
anchorBlockHash,
|
|
853
|
+
MerkleTreeId.NOTE_HASH_TREE,
|
|
854
|
+
settledNoteHashReads.map(({ value }) => value),
|
|
855
|
+
)
|
|
856
|
+
: [],
|
|
857
|
+
settledNullifierReads.length > 0
|
|
858
|
+
? node.findLeavesIndexes(
|
|
859
|
+
anchorBlockHash,
|
|
860
|
+
MerkleTreeId.NULLIFIER_TREE,
|
|
861
|
+
settledNullifierReads.map(({ value }) => value),
|
|
862
|
+
)
|
|
863
|
+
: [],
|
|
864
|
+
]);
|
|
865
|
+
|
|
866
|
+
for (let i = 0; i < settledNoteHashReads.length; i++) {
|
|
867
|
+
if (!noteHashResults[i]) {
|
|
868
|
+
throw new Error(
|
|
869
|
+
`Note hash read request at index ${settledNoteHashReads[i].index} is reading an unknown note hash: ${settledNoteHashReads[i].value}`,
|
|
870
|
+
);
|
|
871
|
+
}
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
for (let i = 0; i < settledNullifierReads.length; i++) {
|
|
875
|
+
if (!nullifierResults[i]) {
|
|
876
|
+
throw new Error(
|
|
877
|
+
`Nullifier read request at index ${settledNullifierReads[i].index} is reading an unknown nullifier: ${settledNullifierReads[i].value}`,
|
|
878
|
+
);
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
}
|
|
882
|
+
|
|
620
883
|
function splitOrderedSideEffects<T>(effects: OrderedSideEffect<T>[], minRevertibleSideEffectCounter: number) {
|
|
621
884
|
const revertibleSideEffects: T[] = [];
|
|
622
885
|
const nonRevertibleSideEffects: T[] = [];
|
|
@@ -630,21 +893,24 @@ function splitOrderedSideEffects<T>(effects: OrderedSideEffect<T>[], minRevertib
|
|
|
630
893
|
return [nonRevertibleSideEffects, revertibleSideEffects];
|
|
631
894
|
}
|
|
632
895
|
|
|
633
|
-
function meterGasUsed(data: PrivateToRollupAccumulatedData | PrivateToPublicAccumulatedData) {
|
|
896
|
+
function meterGasUsed(data: PrivateToRollupAccumulatedData | PrivateToPublicAccumulatedData, isPrivateOnlyTx: boolean) {
|
|
634
897
|
let meteredDAFields = 0;
|
|
635
898
|
let meteredL2Gas = 0;
|
|
636
899
|
|
|
637
900
|
const numNoteHashes = arrayNonEmptyLength(data.noteHashes, hash => hash.isEmpty());
|
|
638
901
|
meteredDAFields += numNoteHashes;
|
|
639
|
-
|
|
902
|
+
const noteHashBaseGas = isPrivateOnlyTx ? L2_GAS_PER_NOTE_HASH : AVM_EMITNOTEHASH_BASE_L2_GAS;
|
|
903
|
+
meteredL2Gas += numNoteHashes * noteHashBaseGas;
|
|
640
904
|
|
|
641
905
|
const numNullifiers = arrayNonEmptyLength(data.nullifiers, nullifier => nullifier.isEmpty());
|
|
642
906
|
meteredDAFields += numNullifiers;
|
|
643
|
-
|
|
907
|
+
const nullifierBaseGas = isPrivateOnlyTx ? L2_GAS_PER_NULLIFIER : AVM_EMITNULLIFIER_BASE_L2_GAS;
|
|
908
|
+
meteredL2Gas += numNullifiers * nullifierBaseGas;
|
|
644
909
|
|
|
645
910
|
const numL2toL1Messages = arrayNonEmptyLength(data.l2ToL1Msgs, msg => msg.isEmpty());
|
|
646
911
|
meteredDAFields += numL2toL1Messages;
|
|
647
|
-
|
|
912
|
+
const l2ToL1MessageBaseGas = isPrivateOnlyTx ? L2_GAS_PER_L2_TO_L1_MSG : AVM_SENDL2TOL1MSG_BASE_L2_GAS;
|
|
913
|
+
meteredL2Gas += numL2toL1Messages * l2ToL1MessageBaseGas;
|
|
648
914
|
|
|
649
915
|
const numPrivatelogs = arrayNonEmptyLength(data.privateLogs, log => log.isEmpty());
|
|
650
916
|
// Every private log emits its length as an additional field
|
|
@@ -652,14 +918,19 @@ function meterGasUsed(data: PrivateToRollupAccumulatedData | PrivateToPublicAccu
|
|
|
652
918
|
meteredL2Gas += numPrivatelogs * L2_GAS_PER_PRIVATE_LOG;
|
|
653
919
|
|
|
654
920
|
const numContractClassLogs = arrayNonEmptyLength(data.contractClassLogsHashes, log => log.isEmpty());
|
|
655
|
-
// Every contract class log emits its
|
|
921
|
+
// Every contract class log emits its contract address as an additional field
|
|
656
922
|
meteredDAFields += data.contractClassLogsHashes.reduce(
|
|
657
|
-
(acc, log) => (!log.isEmpty() ? acc + log.logHash.length +
|
|
923
|
+
(acc, log) => (!log.isEmpty() ? acc + log.logHash.length + 1 : acc),
|
|
658
924
|
0,
|
|
659
925
|
);
|
|
660
926
|
meteredL2Gas += numContractClassLogs * L2_GAS_PER_CONTRACT_CLASS_LOG;
|
|
661
927
|
|
|
662
|
-
|
|
928
|
+
if (isPrivateOnlyTx) {
|
|
929
|
+
// The public data write that the private tx base rollup always performs to update the fee payer's balance.
|
|
930
|
+
meteredDAFields += PUBLIC_DATA_WRITE_LENGTH;
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
const meteredDAGas = meteredDAFields * DA_GAS_PER_FIELD;
|
|
663
934
|
|
|
664
935
|
if ((data as PrivateToPublicAccumulatedData).publicCallRequests) {
|
|
665
936
|
const dataForPublic = data as PrivateToPublicAccumulatedData;
|