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