@aztec/pxe 0.0.1-commit.a072138 → 0.0.1-commit.a4600f49
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 +45 -111
- 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 +51 -0
- package/dest/bin/oracle_version_helpers.d.ts.map +1 -0
- package/dest/bin/oracle_version_helpers.js +254 -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 -13
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +90 -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_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/contract_function_simulator.d.ts +72 -34
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +264 -92
- 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 +12 -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 +43 -0
- package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts +21 -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 +50 -0
- package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts +14 -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 +74 -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 +136 -0
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/oracle_registry.js +989 -0
- package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +222 -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 +82 -96
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +258 -114
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +192 -81
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +574 -182
- 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 +14 -15
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +16 -21
- package/dest/entrypoints/client/bundle/index.d.ts +3 -1
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +2 -0
- package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +28 -7
- package/dest/entrypoints/client/lazy/index.d.ts +3 -1
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +2 -0
- package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +28 -7
- 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 +7 -3
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +5 -2
- package/dest/entrypoints/server/utils.d.ts +4 -3
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +28 -6
- 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 +1 -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 +48 -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 +13 -11
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +189 -91
- 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 +55 -0
- package/dest/notes/note_service.d.ts +27 -5
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +83 -58
- package/dest/notes_filter.d.ts +24 -0
- package/dest/notes_filter.d.ts.map +1 -0
- package/dest/notes_filter.js +4 -0
- package/dest/oracle_version.d.ts +4 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +20 -10
- package/dest/private_kernel/batch_planner.d.ts +47 -0
- package/dest/private_kernel/batch_planner.d.ts.map +1 -0
- package/dest/private_kernel/batch_planner.js +104 -0
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
- package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
- package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
- package/dest/private_kernel/hints/index.d.ts +1 -1
- package/dest/private_kernel/hints/index.js +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +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 +228 -66
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +407 -227
- 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 +647 -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 +182 -134
- 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 +57 -0
- package/dest/storage/fact_store/origin_state.d.ts.map +1 -0
- package/dest/storage/fact_store/origin_state.js +53 -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 -35
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +202 -171
- 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/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 +29 -28
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +141 -115
- package/dest/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 +2 -2
- package/dest/tagging/constants.d.ts.map +1 -1
- package/dest/tagging/constants.js +5 -8
- package/dest/tagging/get_all_logs_by_tags.d.ts +34 -10
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
- package/dest/tagging/get_all_logs_by_tags.js +45 -32
- package/dest/tagging/index.d.ts +6 -5
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +4 -3
- package/dest/tagging/persist_sender_tagging_index_ranges.d.ts +29 -0
- package/dest/tagging/persist_sender_tagging_index_ranges.d.ts.map +1 -0
- package/dest/tagging/persist_sender_tagging_index_ranges.js +42 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +69 -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 +203 -0
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +3 -3
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
- package/dest/tagging/reconcile_tagging_index_ranges.d.ts +36 -0
- package/dest/tagging/reconcile_tagging_index_ranges.d.ts.map +1 -0
- package/dest/tagging/reconcile_tagging_index_ranges.js +74 -0
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -9
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +32 -14
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +13 -7
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +41 -10
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -7
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +37 -25
- package/package.json +29 -17
- package/src/bin/check_oracle_version.ts +51 -133
- package/src/bin/index.ts +5 -0
- package/src/bin/oracle_version_helpers.ts +311 -0
- package/src/block_synchronizer/block_stream_source.ts +42 -0
- package/src/block_synchronizer/block_synchronizer.ts +106 -37
- 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_function_simulator/anchored_contract_data.ts +74 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +465 -156
- 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 +69 -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 +58 -0
- package/src/contract_function_simulator/noir-structs/resolved_tx.ts +53 -0
- package/src/contract_function_simulator/noir-structs/tx_effect_data.ts +15 -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 +120 -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 +689 -0
- package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +964 -0
- package/src/contract_function_simulator/oracle/private_execution.ts +6 -7
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +314 -214
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +882 -258
- 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 +47 -25
- package/src/entrypoints/client/bundle/index.ts +2 -0
- package/src/entrypoints/client/bundle/utils.ts +28 -8
- package/src/entrypoints/client/lazy/index.ts +2 -0
- package/src/entrypoints/client/lazy/utils.ts +28 -8
- package/src/entrypoints/pxe_creation_options.ts +21 -1
- package/src/entrypoints/server/index.ts +7 -2
- package/src/entrypoints/server/utils.ts +31 -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 +12 -0
- package/src/hooks/resolve_custom_request.ts +24 -0
- package/src/hooks/resolve_tagging_secret_strategy.ts +57 -0
- package/src/logs/log_service.ts +227 -156
- package/src/messages/tx_resolver_service.ts +69 -0
- package/src/notes/note_service.ts +120 -85
- package/src/notes_filter.ts +24 -0
- package/src/oracle_version.ts +20 -10
- package/src/private_kernel/batch_planner.ts +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 +699 -298
- 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 +18 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +22 -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 +774 -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 +240 -169
- 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 +14 -0
- package/src/storage/fact_store/origin_state.ts +75 -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 +234 -191
- 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/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 +185 -138
- package/src/storage/tagging_store/tagging_secret_sources_store.ts +138 -0
- package/src/tagging/constants.ts +6 -8
- package/src/tagging/get_all_logs_by_tags.ts +87 -35
- package/src/tagging/index.ts +5 -4
- package/src/tagging/persist_sender_tagging_index_ranges.ts +57 -0
- package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +301 -0
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +4 -4
- package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +52 -17
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +44 -14
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +27 -27
- package/dest/contract_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 -356
- 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/index.d.ts +0 -23
- package/dest/contract_sync/index.d.ts.map +0 -1
- package/dest/contract_sync/index.js +0 -54
- 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 -630
- package/src/contract_function_simulator/proxied_contract_data_source.ts +0 -83
- package/src/contract_sync/index.ts +0 -98
- 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,117 +44,204 @@ 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
|
|
|
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';
|
|
75
100
|
import type { AddressStore } from '../storage/address_store/address_store.js';
|
|
101
|
+
import { CapsuleService } from '../storage/capsule_store/capsule_service.js';
|
|
76
102
|
import type { CapsuleStore } from '../storage/capsule_store/capsule_store.js';
|
|
77
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';
|
|
78
106
|
import type { NoteStore } from '../storage/note_store/note_store.js';
|
|
79
107
|
import type { PrivateEventStore } from '../storage/private_event_store/private_event_store.js';
|
|
80
108
|
import type { RecipientTaggingStore } from '../storage/tagging_store/recipient_tagging_store.js';
|
|
81
|
-
import type { SenderAddressBookStore } from '../storage/tagging_store/sender_address_book_store.js';
|
|
82
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';
|
|
83
112
|
import type { BenchmarkedNode } from './benchmarked_node.js';
|
|
84
113
|
import { ExecutionNoteCache } from './execution_note_cache.js';
|
|
85
114
|
import { ExecutionTaggingIndexCache } from './execution_tagging_index_cache.js';
|
|
86
115
|
import { HashedValuesCache } from './hashed_values_cache.js';
|
|
87
|
-
import {
|
|
116
|
+
import { buildACIRCallback } from './oracle/acir_callback.js';
|
|
88
117
|
import { executePrivateFunction } from './oracle/private_execution.js';
|
|
89
118
|
import { PrivateExecutionOracle } from './oracle/private_execution_oracle.js';
|
|
90
119
|
import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
|
|
120
|
+
import { TransientArrayService } from './transient_array_service.js';
|
|
121
|
+
|
|
122
|
+
/** Options for ContractFunctionSimulator.run. */
|
|
123
|
+
export type ContractSimulatorRunOpts = {
|
|
124
|
+
/** The address calling the function. Can be replaced to simulate a call from another contract or account. */
|
|
125
|
+
msgSender?: AztecAddress;
|
|
126
|
+
/** The block header to use as base state for this run. */
|
|
127
|
+
anchorBlockHeader: BlockHeader;
|
|
128
|
+
/** The address used as a tagging sender when emitting private logs. */
|
|
129
|
+
senderForTags?: AztecAddress;
|
|
130
|
+
/** The accounts whose notes we can access in this call. */
|
|
131
|
+
scopes: AztecAddress[];
|
|
132
|
+
/** The job ID for staged writes. */
|
|
133
|
+
jobId: string;
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
/** Args for ContractFunctionSimulator constructor. */
|
|
137
|
+
export type ContractFunctionSimulatorArgs = {
|
|
138
|
+
contractStore: ContractStore;
|
|
139
|
+
contractClassService: ContractClassService;
|
|
140
|
+
/** Per-simulation contract overrides. */
|
|
141
|
+
overrides?: ContractOverrides;
|
|
142
|
+
noteStore: NoteStore;
|
|
143
|
+
keyStore: KeyStore;
|
|
144
|
+
addressStore: AddressStore;
|
|
145
|
+
aztecNode: AztecNode;
|
|
146
|
+
l2TipsStore: L2TipsProvider;
|
|
147
|
+
senderTaggingStore: SenderTaggingStore;
|
|
148
|
+
recipientTaggingStore: RecipientTaggingStore;
|
|
149
|
+
taggingSecretSourcesStore: TaggingSecretSourcesStore;
|
|
150
|
+
capsuleStore: CapsuleStore;
|
|
151
|
+
factStore: FactStore;
|
|
152
|
+
privateEventStore: PrivateEventStore;
|
|
153
|
+
simulator: CircuitSimulator;
|
|
154
|
+
contractSyncService: ContractSyncService;
|
|
155
|
+
txResolver: TxResolverService;
|
|
156
|
+
hooks?: ExecutionHooks;
|
|
157
|
+
};
|
|
91
158
|
|
|
92
159
|
/**
|
|
93
160
|
* The contract function simulator.
|
|
94
161
|
*/
|
|
95
162
|
export class ContractFunctionSimulator {
|
|
96
|
-
private log: Logger;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
163
|
+
private readonly log: Logger;
|
|
164
|
+
private readonly contractStore: ContractStore;
|
|
165
|
+
private readonly contractClassService: ContractClassService;
|
|
166
|
+
private readonly overrides: ContractOverrides | undefined;
|
|
167
|
+
private readonly noteStore: NoteStore;
|
|
168
|
+
private readonly keyStore: KeyStore;
|
|
169
|
+
private readonly addressStore: AddressStore;
|
|
170
|
+
private readonly aztecNode: AztecNode;
|
|
171
|
+
private readonly l2TipsStore: L2TipsProvider;
|
|
172
|
+
private readonly senderTaggingStore: SenderTaggingStore;
|
|
173
|
+
private readonly recipientTaggingStore: RecipientTaggingStore;
|
|
174
|
+
private readonly taggingSecretSourcesStore: TaggingSecretSourcesStore;
|
|
175
|
+
private readonly capsuleStore: CapsuleStore;
|
|
176
|
+
private readonly factStore: FactStore;
|
|
177
|
+
private readonly privateEventStore: PrivateEventStore;
|
|
178
|
+
private readonly simulator: CircuitSimulator;
|
|
179
|
+
private readonly contractSyncService: ContractSyncService;
|
|
180
|
+
private readonly txResolver: TxResolverService;
|
|
181
|
+
private readonly hooks: ExecutionHooks | undefined;
|
|
182
|
+
|
|
183
|
+
constructor(args: ContractFunctionSimulatorArgs) {
|
|
184
|
+
this.contractStore = args.contractStore;
|
|
185
|
+
this.contractClassService = args.contractClassService;
|
|
186
|
+
this.overrides = args.overrides;
|
|
187
|
+
this.noteStore = args.noteStore;
|
|
188
|
+
this.keyStore = args.keyStore;
|
|
189
|
+
this.addressStore = args.addressStore;
|
|
190
|
+
this.aztecNode = args.aztecNode;
|
|
191
|
+
this.l2TipsStore = args.l2TipsStore;
|
|
192
|
+
this.senderTaggingStore = args.senderTaggingStore;
|
|
193
|
+
this.recipientTaggingStore = args.recipientTaggingStore;
|
|
194
|
+
this.taggingSecretSourcesStore = args.taggingSecretSourcesStore;
|
|
195
|
+
this.capsuleStore = args.capsuleStore;
|
|
196
|
+
this.factStore = args.factStore;
|
|
197
|
+
this.privateEventStore = args.privateEventStore;
|
|
198
|
+
this.simulator = args.simulator;
|
|
199
|
+
this.contractSyncService = args.contractSyncService;
|
|
200
|
+
this.txResolver = args.txResolver;
|
|
201
|
+
this.hooks = args.hooks;
|
|
111
202
|
this.log = createLogger('simulator');
|
|
112
203
|
}
|
|
113
204
|
|
|
114
205
|
/**
|
|
115
206
|
* Runs a private function.
|
|
116
207
|
* @param request - The transaction request.
|
|
117
|
-
* @param entryPointArtifact - The artifact of the entry point function.
|
|
118
|
-
* @param contractAddress - The address of the contract (should match request.origin)
|
|
119
|
-
* @param msgSender - The address calling the function. This can be replaced to simulate a call from another contract
|
|
120
|
-
* or a specific account.
|
|
121
|
-
* @param anchorBlockHeader - The block header to use as base state for this run.
|
|
122
|
-
* @param senderForTags - The address that is used as a tagging sender when emitting private logs. Returned from
|
|
123
|
-
* the `privateGetSenderForTags` oracle.
|
|
124
|
-
* @param scopes - The accounts whose notes we can access in this call. Currently optional and will default to all.
|
|
125
|
-
* @param jobId - The job ID for staged writes.
|
|
126
|
-
* @returns The result of the execution.
|
|
127
208
|
*/
|
|
128
209
|
public async run(
|
|
129
210
|
request: TxExecutionRequest,
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
211
|
+
{
|
|
212
|
+
msgSender = AztecAddress.NULL_MSG_SENDER,
|
|
213
|
+
anchorBlockHeader,
|
|
214
|
+
senderForTags,
|
|
215
|
+
scopes,
|
|
216
|
+
jobId,
|
|
217
|
+
}: ContractSimulatorRunOpts,
|
|
137
218
|
): Promise<PrivateExecutionResult> {
|
|
138
219
|
const simulatorSetupTimer = new Timer();
|
|
139
220
|
|
|
140
|
-
const
|
|
221
|
+
const contractAddress = request.origin;
|
|
141
222
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
223
|
+
const anchoredContractData = new AnchoredContractData(
|
|
224
|
+
this.contractStore,
|
|
225
|
+
this.contractClassService,
|
|
226
|
+
anchorBlockHeader,
|
|
227
|
+
this.overrides,
|
|
228
|
+
);
|
|
145
229
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
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(...).`,
|
|
149
238
|
);
|
|
150
239
|
}
|
|
151
240
|
|
|
241
|
+
if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
|
|
242
|
+
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
|
|
243
|
+
}
|
|
244
|
+
|
|
152
245
|
// reserve the first side effect for the tx hash (inserted by the private kernel)
|
|
153
246
|
const startSideEffectCounter = 2;
|
|
154
247
|
|
|
@@ -163,37 +256,48 @@ export class ContractFunctionSimulator {
|
|
|
163
256
|
const noteCache = new ExecutionNoteCache(protocolNullifier);
|
|
164
257
|
const taggingIndexCache = new ExecutionTaggingIndexCache();
|
|
165
258
|
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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
|
+
|
|
264
|
+
const privateExecutionOracle = new PrivateExecutionOracle({
|
|
265
|
+
argsHash: request.firstCallArgsHash,
|
|
266
|
+
txContext: request.txContext,
|
|
267
|
+
txRequestSalt: request.salt,
|
|
169
268
|
callContext,
|
|
170
269
|
anchorBlockHeader,
|
|
171
|
-
async call => {
|
|
172
|
-
await this.runUtility(call, [], anchorBlockHeader,
|
|
270
|
+
utilityExecutor: async (call, execScopes) => {
|
|
271
|
+
await this.runUtility(call, [], anchorBlockHeader, execScopes, jobId);
|
|
173
272
|
},
|
|
174
|
-
request.authWitnesses,
|
|
175
|
-
request.capsules,
|
|
176
|
-
HashedValuesCache.create(request.argsOfCalls),
|
|
273
|
+
authWitnesses: request.authWitnesses,
|
|
274
|
+
capsules: request.capsules,
|
|
275
|
+
executionCache: HashedValuesCache.create(request.argsOfCalls),
|
|
177
276
|
noteCache,
|
|
178
277
|
taggingIndexCache,
|
|
179
|
-
|
|
180
|
-
this.noteStore,
|
|
181
|
-
this.keyStore,
|
|
182
|
-
this.addressStore,
|
|
183
|
-
this.aztecNode,
|
|
184
|
-
this.senderTaggingStore,
|
|
185
|
-
this.recipientTaggingStore,
|
|
186
|
-
this.
|
|
187
|
-
this.capsuleStore,
|
|
188
|
-
this.
|
|
278
|
+
anchoredContractData,
|
|
279
|
+
noteStore: this.noteStore,
|
|
280
|
+
keyStore: this.keyStore,
|
|
281
|
+
addressStore: this.addressStore,
|
|
282
|
+
aztecNode: this.aztecNode,
|
|
283
|
+
senderTaggingStore: this.senderTaggingStore,
|
|
284
|
+
recipientTaggingStore: this.recipientTaggingStore,
|
|
285
|
+
taggingSecretSourcesStore: this.taggingSecretSourcesStore,
|
|
286
|
+
capsuleService: new CapsuleService(this.capsuleStore, scopes),
|
|
287
|
+
factService: new FactService(this.factStore, scopes),
|
|
288
|
+
privateEventStore: this.privateEventStore,
|
|
289
|
+
txResolver: this.txResolver,
|
|
290
|
+
contractSyncService: this.contractSyncService,
|
|
189
291
|
jobId,
|
|
190
|
-
0,
|
|
191
|
-
startSideEffectCounter,
|
|
192
|
-
undefined, // log
|
|
292
|
+
totalPublicCalldataCount: 0,
|
|
293
|
+
sideEffectCounter: startSideEffectCounter,
|
|
193
294
|
scopes,
|
|
194
295
|
senderForTags,
|
|
195
|
-
this.simulator,
|
|
196
|
-
|
|
296
|
+
simulator: this.simulator,
|
|
297
|
+
l2TipsStore: this.l2TipsStore,
|
|
298
|
+
hooks: this.hooks,
|
|
299
|
+
transientArrayService,
|
|
300
|
+
});
|
|
197
301
|
|
|
198
302
|
const setupTime = simulatorSetupTimer.ms();
|
|
199
303
|
|
|
@@ -211,7 +315,6 @@ export class ContractFunctionSimulator {
|
|
|
211
315
|
);
|
|
212
316
|
const simulatorTeardownTimer = new Timer();
|
|
213
317
|
|
|
214
|
-
noteCache.finish();
|
|
215
318
|
const firstNullifierHint = noteCache.getNonceGenerator();
|
|
216
319
|
|
|
217
320
|
const publicCallRequests = collectNested([executionResult], r =>
|
|
@@ -222,7 +325,7 @@ export class ContractFunctionSimulator {
|
|
|
222
325
|
);
|
|
223
326
|
const publicFunctionsCalldata = await Promise.all(
|
|
224
327
|
publicCallRequests.map(async r => {
|
|
225
|
-
const calldata = await privateExecutionOracle.
|
|
328
|
+
const calldata = await privateExecutionOracle.getHashPreimage(r.calldataHash);
|
|
226
329
|
return new HashedValues(calldata, r.calldataHash);
|
|
227
330
|
}),
|
|
228
331
|
);
|
|
@@ -243,47 +346,72 @@ export class ContractFunctionSimulator {
|
|
|
243
346
|
}
|
|
244
347
|
}
|
|
245
348
|
|
|
246
|
-
// docs:start:execute_utility_function
|
|
247
349
|
/**
|
|
248
350
|
* Runs a utility function.
|
|
249
351
|
* @param call - The function call to execute.
|
|
250
|
-
* @param authwits - Authentication witnesses required for the function call.
|
|
251
|
-
* @param anchorBlockHeader - The block header to use as base state for this run.
|
|
252
|
-
* @param scopes - Optional array of account addresses whose notes can be accessed in this call. Defaults to all
|
|
253
|
-
* accounts if not specified.
|
|
254
352
|
* @returns A return value of the utility function in a form as returned by the simulator (Noir fields)
|
|
255
353
|
*/
|
|
256
354
|
public async runUtility(
|
|
257
355
|
call: FunctionCall,
|
|
258
356
|
authwits: AuthWitness[],
|
|
259
357
|
anchorBlockHeader: BlockHeader,
|
|
260
|
-
scopes: AztecAddress[]
|
|
358
|
+
scopes: AztecAddress[],
|
|
261
359
|
jobId: string,
|
|
262
|
-
): Promise<Fr[]> {
|
|
263
|
-
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
|
+
}
|
|
264
375
|
|
|
265
376
|
if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
|
|
266
377
|
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
|
|
267
378
|
}
|
|
268
379
|
|
|
269
|
-
const
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
380
|
+
const utilityExecutor = async (syncCall: FunctionCall, execScopes: AztecAddress[]) => {
|
|
381
|
+
await this.runUtility(syncCall, [], anchorBlockHeader, execScopes, jobId);
|
|
382
|
+
};
|
|
383
|
+
|
|
384
|
+
const oracle = new UtilityExecutionOracle({
|
|
385
|
+
callContext: CallContext.from({
|
|
386
|
+
msgSender: AztecAddress.NULL_MSG_SENDER,
|
|
387
|
+
contractAddress: call.to,
|
|
388
|
+
functionSelector: call.selector,
|
|
389
|
+
isStaticCall: true,
|
|
390
|
+
}),
|
|
391
|
+
authWitnesses: authwits,
|
|
392
|
+
capsules: [],
|
|
273
393
|
anchorBlockHeader,
|
|
274
|
-
|
|
275
|
-
this.noteStore,
|
|
276
|
-
this.keyStore,
|
|
277
|
-
this.addressStore,
|
|
278
|
-
this.aztecNode,
|
|
279
|
-
this.recipientTaggingStore,
|
|
280
|
-
this.
|
|
281
|
-
this.capsuleStore,
|
|
282
|
-
this.
|
|
394
|
+
anchoredContractData,
|
|
395
|
+
noteStore: this.noteStore,
|
|
396
|
+
keyStore: this.keyStore,
|
|
397
|
+
addressStore: this.addressStore,
|
|
398
|
+
aztecNode: this.aztecNode,
|
|
399
|
+
recipientTaggingStore: this.recipientTaggingStore,
|
|
400
|
+
taggingSecretSourcesStore: this.taggingSecretSourcesStore,
|
|
401
|
+
capsuleService: new CapsuleService(this.capsuleStore, scopes),
|
|
402
|
+
factService: new FactService(this.factStore, scopes),
|
|
403
|
+
privateEventStore: this.privateEventStore,
|
|
404
|
+
txResolver: this.txResolver,
|
|
405
|
+
contractSyncService: this.contractSyncService,
|
|
406
|
+
l2TipsStore: this.l2TipsStore,
|
|
283
407
|
jobId,
|
|
284
|
-
undefined,
|
|
285
408
|
scopes,
|
|
286
|
-
|
|
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(),
|
|
414
|
+
});
|
|
287
415
|
|
|
288
416
|
try {
|
|
289
417
|
this.log.verbose(`Executing utility function ${entryPointArtifact.name}`, {
|
|
@@ -293,7 +421,7 @@ export class ContractFunctionSimulator {
|
|
|
293
421
|
|
|
294
422
|
const initialWitness = toACVMWitness(0, call.args);
|
|
295
423
|
const acirExecutionResult = await this.simulator
|
|
296
|
-
.executeUserCircuit(initialWitness, entryPointArtifact,
|
|
424
|
+
.executeUserCircuit(initialWitness, entryPointArtifact, buildACIRCallback(oracle))
|
|
297
425
|
.catch((err: Error) => {
|
|
298
426
|
err.message = resolveAssertionMessageFromError(err, entryPointArtifact);
|
|
299
427
|
throw new ExecutionError(
|
|
@@ -307,13 +435,15 @@ export class ContractFunctionSimulator {
|
|
|
307
435
|
);
|
|
308
436
|
});
|
|
309
437
|
|
|
310
|
-
this.log.verbose(`Utility
|
|
311
|
-
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
|
+
};
|
|
312
443
|
} catch (err) {
|
|
313
444
|
throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
|
|
314
445
|
}
|
|
315
446
|
}
|
|
316
|
-
// docs:end:execute_utility_function
|
|
317
447
|
|
|
318
448
|
/**
|
|
319
449
|
* Returns the execution statistics collected during the simulator run.
|
|
@@ -349,66 +479,82 @@ class OrderedSideEffect<T> {
|
|
|
349
479
|
* (allowing state overrides) and is much faster, while still generating a valid
|
|
350
480
|
* output that can be sent to the node for public simulation
|
|
351
481
|
* @param privateExecutionResult - The result of the private execution.
|
|
352
|
-
* @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.
|
|
353
484
|
* @param minRevertibleSideEffectCounterOverride - Optional override for the min revertible side effect counter.
|
|
354
485
|
* Used by TXE to simulate account contract behavior (setting the counter before app execution).
|
|
355
486
|
* @returns The simulated proving result.
|
|
356
487
|
*/
|
|
357
488
|
export async function generateSimulatedProvingResult(
|
|
358
489
|
privateExecutionResult: PrivateExecutionResult,
|
|
359
|
-
|
|
490
|
+
debugFunctionNameGetter: (contractAddress: AztecAddress, functionSelector: FunctionSelector) => Promise<string>,
|
|
491
|
+
node: AztecNode,
|
|
360
492
|
minRevertibleSideEffectCounterOverride?: number,
|
|
361
493
|
): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
|
|
362
|
-
const
|
|
363
|
-
const nullifiers: OrderedSideEffect<Fr>[] = [];
|
|
364
|
-
const taggedPrivateLogs: OrderedSideEffect<PrivateLog>[] = [];
|
|
494
|
+
const taggedPrivateLogs: OrderedSideEffect<PrivateLogData>[] = [];
|
|
365
495
|
const l2ToL1Messages: OrderedSideEffect<ScopedL2ToL1Message>[] = [];
|
|
366
496
|
const contractClassLogsHashes: OrderedSideEffect<ScopedLogHash>[] = [];
|
|
367
497
|
const publicCallRequests: OrderedSideEffect<PublicCallRequest>[] = [];
|
|
368
498
|
const executionSteps: PrivateExecutionStep[] = [];
|
|
369
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
|
+
|
|
370
509
|
let publicTeardownCallRequest;
|
|
371
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
|
+
|
|
372
518
|
const executions = [privateExecutionResult.entrypoint];
|
|
373
519
|
|
|
374
520
|
while (executions.length !== 0) {
|
|
375
521
|
const execution = executions.shift()!;
|
|
376
522
|
executions.unshift(...execution!.nestedExecutionResults);
|
|
377
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
|
+
|
|
378
530
|
const { contractAddress } = execution.publicInputs.callContext;
|
|
379
531
|
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
new OrderedSideEffect(await siloNoteHash(contractAddress, noteHash.value), noteHash.counter),
|
|
387
|
-
),
|
|
388
|
-
);
|
|
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
|
+
}
|
|
389
538
|
|
|
390
|
-
|
|
391
|
-
execution.publicInputs.
|
|
539
|
+
scopedNoteHashes.push(
|
|
540
|
+
...execution.publicInputs.noteHashes
|
|
392
541
|
.getActiveItems()
|
|
393
|
-
.
|
|
394
|
-
|
|
395
|
-
new OrderedSideEffect(await siloNullifier(contractAddress, nullifier.value), nullifier.counter),
|
|
396
|
-
),
|
|
542
|
+
.filter(nh => !nh.isEmpty())
|
|
543
|
+
.map(nh => nh.scope(contractAddress)),
|
|
397
544
|
);
|
|
545
|
+
scopedNullifiers.push(...execution.publicInputs.nullifiers.getActiveItems().map(n => n.scope(contractAddress)));
|
|
398
546
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
[contractAddress, metadata.log.fields[0]
|
|
403
|
-
|
|
404
|
-
)
|
|
405
|
-
|
|
406
|
-
}),
|
|
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
|
+
)),
|
|
407
554
|
);
|
|
408
555
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
nullifiers.push(...nullifiersFromExecution);
|
|
556
|
+
noteHashReadRequests.push(...execution.publicInputs.noteHashReadRequests.getActiveItems());
|
|
557
|
+
nullifierReadRequests.push(...execution.publicInputs.nullifierReadRequests.getActiveItems());
|
|
412
558
|
l2ToL1Messages.push(
|
|
413
559
|
...execution.publicInputs.l2ToL1Msgs
|
|
414
560
|
.getActiveItems()
|
|
@@ -437,17 +583,59 @@ export async function generateSimulatedProvingResult(
|
|
|
437
583
|
: execution.publicInputs.publicTeardownCallRequest;
|
|
438
584
|
|
|
439
585
|
executionSteps.push({
|
|
440
|
-
functionName: await
|
|
586
|
+
functionName: await debugFunctionNameGetter(
|
|
441
587
|
execution.publicInputs.callContext.contractAddress,
|
|
442
588
|
execution.publicInputs.callContext.functionSelector,
|
|
443
589
|
),
|
|
444
590
|
timings: execution.profileResult?.timings ?? { witgen: 0, oracles: {} },
|
|
591
|
+
kind: CircuitKind.App,
|
|
445
592
|
bytecode: execution.acir,
|
|
446
593
|
vk: execution.vk,
|
|
447
594
|
witness: execution.partialWitness,
|
|
448
595
|
});
|
|
449
596
|
}
|
|
450
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
|
+
|
|
451
639
|
const constantData = new TxConstantData(
|
|
452
640
|
privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader,
|
|
453
641
|
privateExecutionResult.entrypoint.publicInputs.txContext,
|
|
@@ -464,25 +652,23 @@ export async function generateSimulatedProvingResult(
|
|
|
464
652
|
const getEffect = <T>(orderedSideEffect: OrderedSideEffect<T>) => orderedSideEffect.sideEffect;
|
|
465
653
|
|
|
466
654
|
const isPrivateOnlyTx = privateExecutionResult.publicFunctionCalldata.length === 0;
|
|
467
|
-
const minRevertibleSideEffectCounter =
|
|
468
|
-
minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
|
|
469
655
|
|
|
470
656
|
const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(
|
|
471
|
-
|
|
657
|
+
siloedNullifiers,
|
|
472
658
|
minRevertibleSideEffectCounter,
|
|
473
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.
|
|
474
664
|
const nonceGenerator = privateExecutionResult.firstNullifier;
|
|
475
|
-
|
|
476
|
-
nonRevertibleNullifiers.push(nonceGenerator);
|
|
477
|
-
} else if (!nonRevertibleNullifiers[0].equals(nonceGenerator)) {
|
|
478
|
-
throw new Error('The first non revertible nullifier should be equal to the nonce generator. This is a bug!');
|
|
479
|
-
}
|
|
665
|
+
nonRevertibleNullifiers.unshift(nonceGenerator);
|
|
480
666
|
|
|
481
667
|
if (isPrivateOnlyTx) {
|
|
482
668
|
// We must make the note hashes unique by using the
|
|
483
669
|
// nonce generator and their index in the tx.
|
|
484
670
|
const uniqueNoteHashes = await Promise.all(
|
|
485
|
-
siloedNoteHashes.
|
|
671
|
+
siloedNoteHashes.map(async (orderedSideEffect, i) => {
|
|
486
672
|
const siloedNoteHash = orderedSideEffect.sideEffect;
|
|
487
673
|
const nonce = await computeNoteHashNonce(nonceGenerator, i);
|
|
488
674
|
const uniqueNoteHash = await computeUniqueNoteHash(nonce, siloedNoteHash);
|
|
@@ -497,18 +683,18 @@ export async function generateSimulatedProvingResult(
|
|
|
497
683
|
ScopedL2ToL1Message.empty(),
|
|
498
684
|
MAX_L2_TO_L1_MSGS_PER_TX,
|
|
499
685
|
),
|
|
500
|
-
padArrayEnd(
|
|
686
|
+
padArrayEnd(filteredPrivateLogs.sort(sortByCounter).map(getEffect), PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX),
|
|
501
687
|
padArrayEnd(
|
|
502
688
|
contractClassLogsHashes.sort(sortByCounter).map(getEffect),
|
|
503
689
|
ScopedLogHash.empty(),
|
|
504
690
|
MAX_CONTRACT_CLASS_LOGS_PER_TX,
|
|
505
691
|
),
|
|
506
692
|
);
|
|
507
|
-
gasUsed = meterGasUsed(accumulatedDataForRollup);
|
|
693
|
+
gasUsed = meterGasUsed(accumulatedDataForRollup, isPrivateOnlyTx);
|
|
508
694
|
inputsForRollup = new PartialPrivateTailPublicInputsForRollup(accumulatedDataForRollup);
|
|
509
695
|
} else {
|
|
510
696
|
const [nonRevertibleNoteHashes, revertibleNoteHashes] = splitOrderedSideEffects(
|
|
511
|
-
siloedNoteHashes
|
|
697
|
+
siloedNoteHashes,
|
|
512
698
|
minRevertibleSideEffectCounter,
|
|
513
699
|
);
|
|
514
700
|
const nonRevertibleUniqueNoteHashes = await Promise.all(
|
|
@@ -522,7 +708,7 @@ export async function generateSimulatedProvingResult(
|
|
|
522
708
|
minRevertibleSideEffectCounter,
|
|
523
709
|
);
|
|
524
710
|
const [nonRevertibleTaggedPrivateLogs, revertibleTaggedPrivateLogs] = splitOrderedSideEffects(
|
|
525
|
-
|
|
711
|
+
filteredPrivateLogs,
|
|
526
712
|
minRevertibleSideEffectCounter,
|
|
527
713
|
);
|
|
528
714
|
const [nonRevertibleContractClassLogHashes, revertibleContractClassLogHashes] = splitOrderedSideEffects(
|
|
@@ -551,9 +737,9 @@ export async function generateSimulatedProvingResult(
|
|
|
551
737
|
padArrayEnd(revertibleContractClassLogHashes, ScopedLogHash.empty(), MAX_CONTRACT_CLASS_LOGS_PER_TX),
|
|
552
738
|
padArrayEnd(revertiblePublicCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX),
|
|
553
739
|
);
|
|
554
|
-
gasUsed = meterGasUsed(revertibleData).add(meterGasUsed(nonRevertibleData));
|
|
740
|
+
gasUsed = meterGasUsed(revertibleData, isPrivateOnlyTx).add(meterGasUsed(nonRevertibleData, isPrivateOnlyTx));
|
|
555
741
|
if (publicTeardownCallRequest) {
|
|
556
|
-
gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
|
|
742
|
+
gasUsed = gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
|
|
557
743
|
}
|
|
558
744
|
|
|
559
745
|
inputsForPublic = new PartialPrivateTailPublicInputsForPublic(
|
|
@@ -565,9 +751,14 @@ export async function generateSimulatedProvingResult(
|
|
|
565
751
|
|
|
566
752
|
const publicInputs = new PrivateKernelTailCircuitPublicInputs(
|
|
567
753
|
constantData,
|
|
568
|
-
/*gasUsed=*/ gasUsed.add(
|
|
569
|
-
|
|
570
|
-
|
|
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,
|
|
571
762
|
hasPublicCalls ? inputsForPublic : undefined,
|
|
572
763
|
!hasPublicCalls ? inputsForRollup : undefined,
|
|
573
764
|
);
|
|
@@ -579,6 +770,116 @@ export async function generateSimulatedProvingResult(
|
|
|
579
770
|
};
|
|
580
771
|
}
|
|
581
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
|
+
|
|
582
883
|
function splitOrderedSideEffects<T>(effects: OrderedSideEffect<T>[], minRevertibleSideEffectCounter: number) {
|
|
583
884
|
const revertibleSideEffects: T[] = [];
|
|
584
885
|
const nonRevertibleSideEffects: T[] = [];
|
|
@@ -592,21 +893,24 @@ function splitOrderedSideEffects<T>(effects: OrderedSideEffect<T>[], minRevertib
|
|
|
592
893
|
return [nonRevertibleSideEffects, revertibleSideEffects];
|
|
593
894
|
}
|
|
594
895
|
|
|
595
|
-
function meterGasUsed(data: PrivateToRollupAccumulatedData | PrivateToPublicAccumulatedData) {
|
|
896
|
+
function meterGasUsed(data: PrivateToRollupAccumulatedData | PrivateToPublicAccumulatedData, isPrivateOnlyTx: boolean) {
|
|
596
897
|
let meteredDAFields = 0;
|
|
597
898
|
let meteredL2Gas = 0;
|
|
598
899
|
|
|
599
900
|
const numNoteHashes = arrayNonEmptyLength(data.noteHashes, hash => hash.isEmpty());
|
|
600
901
|
meteredDAFields += numNoteHashes;
|
|
601
|
-
|
|
902
|
+
const noteHashBaseGas = isPrivateOnlyTx ? L2_GAS_PER_NOTE_HASH : AVM_EMITNOTEHASH_BASE_L2_GAS;
|
|
903
|
+
meteredL2Gas += numNoteHashes * noteHashBaseGas;
|
|
602
904
|
|
|
603
905
|
const numNullifiers = arrayNonEmptyLength(data.nullifiers, nullifier => nullifier.isEmpty());
|
|
604
906
|
meteredDAFields += numNullifiers;
|
|
605
|
-
|
|
907
|
+
const nullifierBaseGas = isPrivateOnlyTx ? L2_GAS_PER_NULLIFIER : AVM_EMITNULLIFIER_BASE_L2_GAS;
|
|
908
|
+
meteredL2Gas += numNullifiers * nullifierBaseGas;
|
|
606
909
|
|
|
607
910
|
const numL2toL1Messages = arrayNonEmptyLength(data.l2ToL1Msgs, msg => msg.isEmpty());
|
|
608
911
|
meteredDAFields += numL2toL1Messages;
|
|
609
|
-
|
|
912
|
+
const l2ToL1MessageBaseGas = isPrivateOnlyTx ? L2_GAS_PER_L2_TO_L1_MSG : AVM_SENDL2TOL1MSG_BASE_L2_GAS;
|
|
913
|
+
meteredL2Gas += numL2toL1Messages * l2ToL1MessageBaseGas;
|
|
610
914
|
|
|
611
915
|
const numPrivatelogs = arrayNonEmptyLength(data.privateLogs, log => log.isEmpty());
|
|
612
916
|
// Every private log emits its length as an additional field
|
|
@@ -614,14 +918,19 @@ function meterGasUsed(data: PrivateToRollupAccumulatedData | PrivateToPublicAccu
|
|
|
614
918
|
meteredL2Gas += numPrivatelogs * L2_GAS_PER_PRIVATE_LOG;
|
|
615
919
|
|
|
616
920
|
const numContractClassLogs = arrayNonEmptyLength(data.contractClassLogsHashes, log => log.isEmpty());
|
|
617
|
-
// Every contract class log emits its
|
|
921
|
+
// Every contract class log emits its contract address as an additional field
|
|
618
922
|
meteredDAFields += data.contractClassLogsHashes.reduce(
|
|
619
|
-
(acc, log) => (!log.isEmpty() ? acc + log.logHash.length +
|
|
923
|
+
(acc, log) => (!log.isEmpty() ? acc + log.logHash.length + 1 : acc),
|
|
620
924
|
0,
|
|
621
925
|
);
|
|
622
926
|
meteredL2Gas += numContractClassLogs * L2_GAS_PER_CONTRACT_CLASS_LOG;
|
|
623
927
|
|
|
624
|
-
|
|
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;
|
|
625
934
|
|
|
626
935
|
if ((data as PrivateToPublicAccumulatedData).publicCallRequests) {
|
|
627
936
|
const dataForPublic = data as PrivateToPublicAccumulatedData;
|