@aztec/pxe 0.0.1-commit.d431d1c → 0.0.1-commit.d58ff9d0
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 +40 -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 +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 +26 -14
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +128 -26
- package/dest/config/index.d.ts +11 -2
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +18 -2
- package/dest/config/package_info.js +1 -1
- package/dest/contract/contract_class_service.d.ts +31 -0
- package/dest/contract/contract_class_service.d.ts.map +1 -0
- package/dest/contract/contract_class_service.js +68 -0
- package/dest/contract/contract_sync_service.d.ts +48 -0
- package/dest/contract/contract_sync_service.d.ts.map +1 -0
- package/dest/contract/contract_sync_service.js +116 -0
- package/dest/contract/helpers.d.ts +7 -0
- package/dest/contract/helpers.d.ts.map +1 -0
- package/dest/contract/helpers.js +20 -0
- package/dest/contract/skip_sync_contracts.d.ts +11 -0
- package/dest/contract/skip_sync_contracts.d.ts.map +1 -0
- package/dest/contract/skip_sync_contracts.js +18 -0
- package/dest/contract_function_simulator/anchored_contract_data.d.ts +36 -0
- package/dest/contract_function_simulator/anchored_contract_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/anchored_contract_data.js +54 -0
- package/dest/contract_function_simulator/aztec_node_read_cache.d.ts +39 -0
- package/dest/contract_function_simulator/aztec_node_read_cache.d.ts.map +1 -0
- package/dest/contract_function_simulator/aztec_node_read_cache.js +60 -0
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +72 -36
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +265 -98
- package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
- package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
- package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
- package/dest/contract_function_simulator/execution_note_cache.d.ts +4 -10
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_note_cache.js +8 -28
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -11
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -15
- package/dest/contract_function_simulator/index.d.ts +26 -5
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +11 -3
- package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts +29 -0
- package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/bounded_vec.js +30 -0
- package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts +9 -0
- package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/contract_class_log_data.js +1 -0
- package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts +7 -0
- package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/embedded_curve_point.js +1 -0
- package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts +37 -0
- package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/ephemeral_array.js +59 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +4 -5
- 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 +10 -11
- 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 +4 -6
- 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 +9 -13
- 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 -95
- 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 +2 -22
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +7 -43
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +88 -95
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +268 -116
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +215 -86
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +625 -204
- 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 +19 -10
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +22 -17
- 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 +45 -12
- 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 +3 -3
- package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/utils.js +46 -13
- 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 +18 -3
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/pxe_creation_options.js +3 -1
- package/dest/entrypoints/server/index.d.ts +8 -2
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +6 -1
- 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 +54 -15
- 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 +16 -8
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +46 -14
- 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/job_coordinator/job_coordinator.d.ts +3 -2
- package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
- package/dest/job_coordinator/job_coordinator.js +3 -2
- package/dest/logs/log_service.d.ts +17 -13
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +201 -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 +60 -0
- package/dest/notes/note_service.d.ts +31 -9
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +95 -70
- package/dest/notes_filter.d.ts +24 -0
- package/dest/notes_filter.d.ts.map +1 -0
- package/dest/notes_filter.js +4 -0
- package/dest/oracle_version.d.ts +4 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +20 -9
- package/dest/private_kernel/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 +7 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +209 -87
- 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 +418 -231
- 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 +12 -11
- 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 +12 -1
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
- package/dest/storage/anchor_block_store/anchor_block_store.js +12 -3
- 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 +42 -36
- 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 -34
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +191 -146
- package/dest/storage/fact_store/fact_service.d.ts +22 -0
- package/dest/storage/fact_store/fact_service.d.ts.map +1 -0
- package/dest/storage/fact_store/fact_service.js +45 -0
- package/dest/storage/fact_store/fact_store.d.ts +95 -0
- package/dest/storage/fact_store/fact_store.d.ts.map +1 -0
- package/dest/storage/fact_store/fact_store.js +408 -0
- package/dest/storage/fact_store/fact_store_keys.d.ts +34 -0
- package/dest/storage/fact_store/fact_store_keys.d.ts.map +1 -0
- package/dest/storage/fact_store/fact_store_keys.js +50 -0
- package/dest/storage/fact_store/index.d.ts +6 -0
- package/dest/storage/fact_store/index.d.ts.map +1 -0
- package/dest/storage/fact_store/index.js +4 -0
- package/dest/storage/fact_store/origin_state.d.ts +59 -0
- package/dest/storage/fact_store/origin_state.d.ts.map +1 -0
- package/dest/storage/fact_store/origin_state.js +60 -0
- package/dest/storage/fact_store/stored_fact.d.ts +32 -0
- package/dest/storage/fact_store/stored_fact.d.ts.map +1 -0
- package/dest/storage/fact_store/stored_fact.js +64 -0
- package/dest/storage/index.d.ts +3 -2
- package/dest/storage/index.d.ts.map +1 -1
- package/dest/storage/index.js +2 -1
- package/dest/storage/metadata.d.ts +2 -2
- package/dest/storage/metadata.d.ts.map +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +63 -56
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +321 -266
- package/dest/storage/note_store/stored_note.d.ts +11 -0
- package/dest/storage/note_store/stored_note.d.ts.map +1 -0
- package/dest/storage/note_store/stored_note.js +27 -0
- 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 +26 -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 +214 -163
- package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
- package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
- package/dest/storage/private_event_store/stored_private_event.js +56 -0
- package/dest/storage/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/recipient_tagging_store.js +31 -19
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +45 -28
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +270 -137
- package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts +51 -0
- package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts.map +1 -0
- package/dest/storage/tagging_store/tagging_secret_sources_store.js +105 -0
- package/dest/tagging/constants.d.ts +3 -2
- package/dest/tagging/constants.d.ts.map +1 -1
- package/dest/tagging/constants.js +28 -10
- package/dest/tagging/get_all_logs_by_tags.d.ts +48 -0
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
- package/dest/tagging/get_all_logs_by_tags.js +59 -0
- package/dest/tagging/index.d.ts +8 -6
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +6 -4
- package/dest/tagging/persist_sender_tagging_index_ranges.d.ts +29 -0
- package/dest/tagging/persist_sender_tagging_index_ranges.d.ts.map +1 -0
- package/dest/tagging/persist_sender_tagging_index_ranges.js +42 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +74 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts.map +1 -0
- package/dest/tagging/recipient_sync/sync_tagged_private_logs.js +238 -0
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +3 -3
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
- package/dest/tagging/reconcile_tagging_index_ranges.d.ts +36 -0
- package/dest/tagging/reconcile_tagging_index_ranges.d.ts.map +1 -0
- package/dest/tagging/reconcile_tagging_index_ranges.js +74 -0
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +5 -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 +44 -16
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +6 -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 +46 -27
- 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 +29 -17
- package/src/bin/check_oracle_version.ts +46 -134
- 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 +154 -48
- package/src/config/index.ts +22 -1
- package/src/config/package_info.ts +1 -1
- package/src/contract/contract_class_service.ts +83 -0
- package/src/contract/contract_sync_service.ts +176 -0
- package/src/contract/helpers.ts +35 -0
- package/src/contract/skip_sync_contracts.ts +23 -0
- package/src/contract_function_simulator/anchored_contract_data.ts +74 -0
- package/src/contract_function_simulator/aztec_node_read_cache.ts +89 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +463 -162
- package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
- package/src/contract_function_simulator/execution_note_cache.ts +8 -29
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -18
- package/src/contract_function_simulator/index.ts +89 -4
- package/src/contract_function_simulator/noir-structs/bounded_vec.ts +43 -0
- package/src/contract_function_simulator/noir-structs/contract_class_log_data.ts +9 -0
- package/src/contract_function_simulator/noir-structs/embedded_curve_point.ts +4 -0
- package/src/contract_function_simulator/noir-structs/ephemeral_array.ts +66 -0
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +11 -10
- 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 +7 -12
- 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 -167
- 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 +7 -67
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +340 -213
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +966 -275
- 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 +55 -18
- package/src/entrypoints/client/bundle/index.ts +3 -0
- package/src/entrypoints/client/bundle/utils.ts +46 -21
- package/src/entrypoints/client/lazy/index.ts +3 -0
- package/src/entrypoints/client/lazy/utils.ts +48 -22
- package/src/entrypoints/client/store.ts +54 -0
- package/src/entrypoints/pxe_creation_options.ts +23 -2
- package/src/entrypoints/server/index.ts +8 -1
- package/src/entrypoints/server/store.ts +47 -0
- package/src/entrypoints/server/utils.ts +61 -34
- package/src/error_enriching.ts +27 -11
- package/src/events/event_service.ts +70 -24
- 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/job_coordinator/job_coordinator.ts +4 -3
- package/src/logs/log_service.ts +248 -152
- package/src/messages/tx_resolver_service.ts +69 -0
- package/src/notes/note_service.ts +137 -101
- package/src/notes_filter.ts +24 -0
- package/src/oracle_version.ts +20 -9
- 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 +347 -123
- package/src/private_kernel/private_kernel_oracle.ts +65 -36
- package/src/pxe.ts +732 -297
- package/src/storage/address_store/address_store.ts +15 -15
- package/src/storage/allowed_scopes.ts +14 -0
- package/src/storage/anchor_block_store/anchor_block_store.ts +12 -2
- 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 +52 -34
- package/src/storage/capsule_store/index.ts +1 -0
- package/src/storage/contract_store/contract_store.ts +247 -185
- package/src/storage/fact_store/fact_service.ts +69 -0
- package/src/storage/fact_store/fact_store.ts +487 -0
- package/src/storage/fact_store/fact_store_keys.ts +75 -0
- package/src/storage/fact_store/index.ts +15 -0
- package/src/storage/fact_store/origin_state.ts +84 -0
- package/src/storage/fact_store/stored_fact.ts +80 -0
- package/src/storage/index.ts +2 -1
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +363 -324
- package/src/storage/note_store/stored_note.ts +26 -0
- package/src/storage/open_pxe_stores.ts +52 -0
- package/src/storage/private_event_store/private_event_store.ts +268 -210
- package/src/storage/private_event_store/stored_private_event.ts +73 -0
- 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 +34 -24
- package/src/storage/tagging_store/sender_tagging_store.ts +333 -155
- package/src/storage/tagging_store/tagging_secret_sources_store.ts +138 -0
- package/src/tagging/constants.ts +30 -10
- package/src/tagging/get_all_logs_by_tags.ts +120 -0
- package/src/tagging/index.ts +7 -5
- package/src/tagging/persist_sender_tagging_index_ranges.ts +57 -0
- package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +358 -0
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +4 -4
- package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +54 -17
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +47 -29
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +42 -29
- package/src/tagging/testing/tag_query_test_utils.ts +11 -0
- package/dest/contract_function_simulator/oracle/oracle.d.ts +0 -58
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +0 -1
- package/dest/contract_function_simulator/oracle/oracle.js +0 -346
- 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/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 -30
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +0 -14
- 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 -14
- 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 -29
- package/dest/tree_membership/tree_membership_service.d.ts +0 -50
- package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
- package/dest/tree_membership/tree_membership_service.js +0 -75
- package/src/contract_function_simulator/oracle/oracle.ts +0 -607
- package/src/contract_function_simulator/proxied_contract_data_source.ts +0 -83
- package/src/storage/tagging_store/sender_address_book_store.ts +0 -42
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -133
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -43
- package/src/tree_membership/tree_membership_service.ts +0 -97
|
@@ -1,23 +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
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,
|
|
11
12
|
L2_GAS_PER_PRIVATE_LOG,
|
|
12
13
|
MAX_CONTRACT_CLASS_LOGS_PER_TX,
|
|
13
14
|
MAX_ENQUEUED_CALLS_PER_TX,
|
|
14
15
|
MAX_L2_TO_L1_MSGS_PER_TX,
|
|
15
16
|
MAX_NOTE_HASHES_PER_TX,
|
|
17
|
+
MAX_NOTE_HASH_READ_REQUESTS_PER_TX,
|
|
16
18
|
MAX_NULLIFIERS_PER_TX,
|
|
19
|
+
MAX_NULLIFIER_READ_REQUESTS_PER_TX,
|
|
17
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,
|
|
18
26
|
} from '@aztec/constants';
|
|
19
27
|
import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection';
|
|
20
|
-
import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
|
|
21
28
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
22
29
|
import { type Logger, createLogger } from '@aztec/foundation/log';
|
|
23
30
|
import { Timer } from '@aztec/foundation/timer';
|
|
@@ -37,125 +44,204 @@ import type { FunctionCall } from '@aztec/stdlib/abi';
|
|
|
37
44
|
import { FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
|
|
38
45
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
39
46
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
47
|
+
import type { BlockParameter, L2TipsProvider } from '@aztec/stdlib/block';
|
|
40
48
|
import { Gas } from '@aztec/stdlib/gas';
|
|
41
49
|
import {
|
|
42
50
|
computeNoteHashNonce,
|
|
43
51
|
computeProtocolNullifier,
|
|
52
|
+
computeSiloedPrivateLogFirstField,
|
|
44
53
|
computeUniqueNoteHash,
|
|
45
54
|
siloNoteHash,
|
|
46
55
|
siloNullifier,
|
|
47
56
|
} from '@aztec/stdlib/hash';
|
|
48
57
|
import type { AztecNode } from '@aztec/stdlib/interfaces/server';
|
|
49
58
|
import {
|
|
59
|
+
ClaimedLengthArray,
|
|
50
60
|
PartialPrivateTailPublicInputsForPublic,
|
|
51
61
|
PartialPrivateTailPublicInputsForRollup,
|
|
52
62
|
type PrivateExecutionStep,
|
|
53
63
|
type PrivateKernelExecutionProofOutput,
|
|
54
64
|
PrivateKernelTailCircuitPublicInputs,
|
|
65
|
+
PrivateLogData,
|
|
55
66
|
PrivateToPublicAccumulatedData,
|
|
56
67
|
PrivateToRollupAccumulatedData,
|
|
57
68
|
PublicCallRequest,
|
|
69
|
+
ReadRequestActionEnum,
|
|
58
70
|
ScopedLogHash,
|
|
71
|
+
ScopedNoteHash,
|
|
72
|
+
ScopedNullifier,
|
|
73
|
+
ScopedReadRequest,
|
|
74
|
+
buildTransientDataHints,
|
|
75
|
+
getNoteHashReadRequestResetActions,
|
|
76
|
+
getNullifierReadRequestResetActions,
|
|
59
77
|
} from '@aztec/stdlib/kernel';
|
|
60
78
|
import { PrivateLog } from '@aztec/stdlib/logs';
|
|
61
79
|
import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
|
|
62
80
|
import { ChonkProof } from '@aztec/stdlib/proofs';
|
|
81
|
+
import { MerkleTreeId } from '@aztec/stdlib/trees';
|
|
63
82
|
import {
|
|
64
83
|
BlockHeader,
|
|
65
84
|
CallContext,
|
|
85
|
+
type ContractOverrides,
|
|
66
86
|
HashedValues,
|
|
87
|
+
type OffchainEffect,
|
|
67
88
|
PrivateExecutionResult,
|
|
68
89
|
TxConstantData,
|
|
69
90
|
TxExecutionRequest,
|
|
70
91
|
collectNested,
|
|
92
|
+
collectNoteHashNullifierCounterMap,
|
|
71
93
|
getFinalMinRevertibleSideEffectCounter,
|
|
72
94
|
} from '@aztec/stdlib/tx';
|
|
73
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';
|
|
74
100
|
import type { AddressStore } from '../storage/address_store/address_store.js';
|
|
75
|
-
import
|
|
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 {
|
|
88
|
-
import { executePrivateFunction
|
|
116
|
+
import { buildACIRCallback } from './oracle/acir_callback.js';
|
|
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
|
-
|
|
111
|
-
|
|
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;
|
|
112
202
|
this.log = createLogger('simulator');
|
|
113
203
|
}
|
|
114
204
|
|
|
115
205
|
/**
|
|
116
206
|
* Runs a private function.
|
|
117
207
|
* @param request - The transaction request.
|
|
118
|
-
* @param entryPointArtifact - The artifact of the entry point function.
|
|
119
|
-
* @param contractAddress - The address of the contract (should match request.origin)
|
|
120
|
-
* @param msgSender - The address calling the function. This can be replaced to simulate a call from another contract
|
|
121
|
-
* or a specific account.
|
|
122
|
-
* @param anchorBlockHeader - The block header to use as base state for this run.
|
|
123
|
-
* @param senderForTags - The address that is used as a tagging sender when emitting private logs. Returned from
|
|
124
|
-
* the `privateGetSenderForTags` oracle.
|
|
125
|
-
* @param scopes - The accounts whose notes we can access in this call. Currently optional and will default to all.
|
|
126
|
-
* @param jobId - The job ID for staged writes.
|
|
127
|
-
* @returns The result of the execution.
|
|
128
208
|
*/
|
|
129
209
|
public async run(
|
|
130
210
|
request: TxExecutionRequest,
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
211
|
+
{
|
|
212
|
+
msgSender = AztecAddress.NULL_MSG_SENDER,
|
|
213
|
+
anchorBlockHeader,
|
|
214
|
+
senderForTags,
|
|
215
|
+
scopes,
|
|
216
|
+
jobId,
|
|
217
|
+
}: ContractSimulatorRunOpts,
|
|
138
218
|
): Promise<PrivateExecutionResult> {
|
|
139
219
|
const simulatorSetupTimer = new Timer();
|
|
140
220
|
|
|
141
|
-
|
|
142
|
-
this.runUtility(privateSyncCall, [], anchorBlockHeader, scopes, jobId),
|
|
143
|
-
);
|
|
221
|
+
const contractAddress = request.origin;
|
|
144
222
|
|
|
145
|
-
|
|
223
|
+
const anchoredContractData = new AnchoredContractData(
|
|
224
|
+
this.contractStore,
|
|
225
|
+
this.contractClassService,
|
|
226
|
+
anchorBlockHeader,
|
|
227
|
+
this.overrides,
|
|
228
|
+
);
|
|
146
229
|
|
|
147
|
-
const entryPointArtifact = await
|
|
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(...).`,
|
|
238
|
+
);
|
|
239
|
+
}
|
|
148
240
|
|
|
149
241
|
if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
|
|
150
242
|
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
|
|
151
243
|
}
|
|
152
244
|
|
|
153
|
-
if (request.origin !== contractAddress) {
|
|
154
|
-
this.log.warn(
|
|
155
|
-
`Request origin does not match contract address in simulation. Request origin: ${request.origin}, contract address: ${contractAddress}`,
|
|
156
|
-
);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
245
|
// reserve the first side effect for the tx hash (inserted by the private kernel)
|
|
160
246
|
const startSideEffectCounter = 2;
|
|
161
247
|
|
|
@@ -170,38 +256,48 @@ export class ContractFunctionSimulator {
|
|
|
170
256
|
const noteCache = new ExecutionNoteCache(protocolNullifier);
|
|
171
257
|
const taggingIndexCache = new ExecutionTaggingIndexCache();
|
|
172
258
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
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,
|
|
176
268
|
callContext,
|
|
177
269
|
anchorBlockHeader,
|
|
178
|
-
async call => {
|
|
179
|
-
await this.runUtility(call, [], anchorBlockHeader,
|
|
270
|
+
utilityExecutor: async (call, execScopes) => {
|
|
271
|
+
await this.runUtility(call, [], anchorBlockHeader, execScopes, jobId);
|
|
180
272
|
},
|
|
181
|
-
request.authWitnesses,
|
|
182
|
-
request.capsules,
|
|
183
|
-
HashedValuesCache.create(request.argsOfCalls),
|
|
273
|
+
authWitnesses: request.authWitnesses,
|
|
274
|
+
capsules: request.capsules,
|
|
275
|
+
executionCache: HashedValuesCache.create(request.argsOfCalls),
|
|
184
276
|
noteCache,
|
|
185
277
|
taggingIndexCache,
|
|
186
|
-
|
|
187
|
-
this.noteStore,
|
|
188
|
-
this.keyStore,
|
|
189
|
-
this.addressStore,
|
|
190
|
-
this.aztecNode,
|
|
191
|
-
this.
|
|
192
|
-
this.
|
|
193
|
-
this.
|
|
194
|
-
this.
|
|
195
|
-
this.
|
|
196
|
-
this.privateEventStore,
|
|
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,
|
|
197
291
|
jobId,
|
|
198
|
-
0,
|
|
199
|
-
startSideEffectCounter,
|
|
200
|
-
undefined, // log
|
|
292
|
+
totalPublicCalldataCount: 0,
|
|
293
|
+
sideEffectCounter: startSideEffectCounter,
|
|
201
294
|
scopes,
|
|
202
295
|
senderForTags,
|
|
203
|
-
this.simulator,
|
|
204
|
-
|
|
296
|
+
simulator: this.simulator,
|
|
297
|
+
l2TipsStore: this.l2TipsStore,
|
|
298
|
+
hooks: this.hooks,
|
|
299
|
+
transientArrayService,
|
|
300
|
+
});
|
|
205
301
|
|
|
206
302
|
const setupTime = simulatorSetupTimer.ms();
|
|
207
303
|
|
|
@@ -219,7 +315,6 @@ export class ContractFunctionSimulator {
|
|
|
219
315
|
);
|
|
220
316
|
const simulatorTeardownTimer = new Timer();
|
|
221
317
|
|
|
222
|
-
noteCache.finish();
|
|
223
318
|
const firstNullifierHint = noteCache.getNonceGenerator();
|
|
224
319
|
|
|
225
320
|
const publicCallRequests = collectNested([executionResult], r =>
|
|
@@ -230,7 +325,7 @@ export class ContractFunctionSimulator {
|
|
|
230
325
|
);
|
|
231
326
|
const publicFunctionsCalldata = await Promise.all(
|
|
232
327
|
publicCallRequests.map(async r => {
|
|
233
|
-
const calldata = await privateExecutionOracle.
|
|
328
|
+
const calldata = await privateExecutionOracle.getHashPreimage(r.calldataHash);
|
|
234
329
|
return new HashedValues(calldata, r.calldataHash);
|
|
235
330
|
}),
|
|
236
331
|
);
|
|
@@ -251,50 +346,72 @@ export class ContractFunctionSimulator {
|
|
|
251
346
|
}
|
|
252
347
|
}
|
|
253
348
|
|
|
254
|
-
// docs:start:execute_utility_function
|
|
255
349
|
/**
|
|
256
350
|
* Runs a utility function.
|
|
257
351
|
* @param call - The function call to execute.
|
|
258
|
-
* @param authwits - Authentication witnesses required for the function call.
|
|
259
|
-
* @param anchorBlockHeader - The block header to use as base state for this run.
|
|
260
|
-
* @param scopes - Optional array of account addresses whose notes can be accessed in this call. Defaults to all
|
|
261
|
-
* accounts if not specified.
|
|
262
352
|
* @returns A return value of the utility function in a form as returned by the simulator (Noir fields)
|
|
263
353
|
*/
|
|
264
354
|
public async runUtility(
|
|
265
355
|
call: FunctionCall,
|
|
266
356
|
authwits: AuthWitness[],
|
|
267
357
|
anchorBlockHeader: BlockHeader,
|
|
268
|
-
scopes: AztecAddress[]
|
|
358
|
+
scopes: AztecAddress[],
|
|
269
359
|
jobId: string,
|
|
270
|
-
): Promise<Fr[]> {
|
|
271
|
-
|
|
360
|
+
): Promise<{ result: Fr[]; offchainEffects: OffchainEffect[] }> {
|
|
361
|
+
const anchoredContractData = new AnchoredContractData(
|
|
362
|
+
this.contractStore,
|
|
363
|
+
this.contractClassService,
|
|
364
|
+
anchorBlockHeader,
|
|
365
|
+
this.overrides,
|
|
366
|
+
);
|
|
272
367
|
|
|
273
|
-
const entryPointArtifact = await
|
|
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
|
+
}
|
|
274
375
|
|
|
275
376
|
if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
|
|
276
377
|
throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
|
|
277
378
|
}
|
|
278
379
|
|
|
279
|
-
const
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
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: [],
|
|
283
393
|
anchorBlockHeader,
|
|
284
|
-
|
|
285
|
-
this.noteStore,
|
|
286
|
-
this.keyStore,
|
|
287
|
-
this.addressStore,
|
|
288
|
-
this.aztecNode,
|
|
289
|
-
this.
|
|
290
|
-
this.
|
|
291
|
-
this.
|
|
292
|
-
this.
|
|
293
|
-
this.privateEventStore,
|
|
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,
|
|
294
407
|
jobId,
|
|
295
|
-
undefined,
|
|
296
408
|
scopes,
|
|
297
|
-
|
|
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
|
+
});
|
|
298
415
|
|
|
299
416
|
try {
|
|
300
417
|
this.log.verbose(`Executing utility function ${entryPointArtifact.name}`, {
|
|
@@ -304,7 +421,7 @@ export class ContractFunctionSimulator {
|
|
|
304
421
|
|
|
305
422
|
const initialWitness = toACVMWitness(0, call.args);
|
|
306
423
|
const acirExecutionResult = await this.simulator
|
|
307
|
-
.executeUserCircuit(initialWitness, entryPointArtifact,
|
|
424
|
+
.executeUserCircuit(initialWitness, entryPointArtifact, buildACIRCallback(oracle))
|
|
308
425
|
.catch((err: Error) => {
|
|
309
426
|
err.message = resolveAssertionMessageFromError(err, entryPointArtifact);
|
|
310
427
|
throw new ExecutionError(
|
|
@@ -318,13 +435,15 @@ export class ContractFunctionSimulator {
|
|
|
318
435
|
);
|
|
319
436
|
});
|
|
320
437
|
|
|
321
|
-
this.log.verbose(`Utility
|
|
322
|
-
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
|
+
};
|
|
323
443
|
} catch (err) {
|
|
324
444
|
throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
|
|
325
445
|
}
|
|
326
446
|
}
|
|
327
|
-
// docs:end:execute_utility_function
|
|
328
447
|
|
|
329
448
|
/**
|
|
330
449
|
* Returns the execution statistics collected during the simulator run.
|
|
@@ -360,63 +479,82 @@ class OrderedSideEffect<T> {
|
|
|
360
479
|
* (allowing state overrides) and is much faster, while still generating a valid
|
|
361
480
|
* output that can be sent to the node for public simulation
|
|
362
481
|
* @param privateExecutionResult - The result of the private execution.
|
|
363
|
-
* @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.
|
|
364
484
|
* @param minRevertibleSideEffectCounterOverride - Optional override for the min revertible side effect counter.
|
|
365
485
|
* Used by TXE to simulate account contract behavior (setting the counter before app execution).
|
|
366
486
|
* @returns The simulated proving result.
|
|
367
487
|
*/
|
|
368
488
|
export async function generateSimulatedProvingResult(
|
|
369
489
|
privateExecutionResult: PrivateExecutionResult,
|
|
370
|
-
|
|
490
|
+
debugFunctionNameGetter: (contractAddress: AztecAddress, functionSelector: FunctionSelector) => Promise<string>,
|
|
491
|
+
node: AztecNode,
|
|
371
492
|
minRevertibleSideEffectCounterOverride?: number,
|
|
372
493
|
): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
|
|
373
|
-
const
|
|
374
|
-
const nullifiers: OrderedSideEffect<Fr>[] = [];
|
|
375
|
-
const taggedPrivateLogs: OrderedSideEffect<PrivateLog>[] = [];
|
|
494
|
+
const taggedPrivateLogs: OrderedSideEffect<PrivateLogData>[] = [];
|
|
376
495
|
const l2ToL1Messages: OrderedSideEffect<ScopedL2ToL1Message>[] = [];
|
|
377
496
|
const contractClassLogsHashes: OrderedSideEffect<ScopedLogHash>[] = [];
|
|
378
497
|
const publicCallRequests: OrderedSideEffect<PublicCallRequest>[] = [];
|
|
379
498
|
const executionSteps: PrivateExecutionStep[] = [];
|
|
380
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
|
+
|
|
381
509
|
let publicTeardownCallRequest;
|
|
382
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
|
+
|
|
383
518
|
const executions = [privateExecutionResult.entrypoint];
|
|
384
519
|
|
|
385
520
|
while (executions.length !== 0) {
|
|
386
521
|
const execution = executions.shift()!;
|
|
387
522
|
executions.unshift(...execution!.nestedExecutionResults);
|
|
388
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
|
+
|
|
389
530
|
const { contractAddress } = execution.publicInputs.callContext;
|
|
390
531
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
new OrderedSideEffect(await siloNoteHash(contractAddress, noteHash.value), noteHash.counter),
|
|
398
|
-
),
|
|
399
|
-
);
|
|
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
|
+
}
|
|
400
538
|
|
|
401
|
-
|
|
402
|
-
execution.publicInputs.
|
|
539
|
+
scopedNoteHashes.push(
|
|
540
|
+
...execution.publicInputs.noteHashes
|
|
403
541
|
.getActiveItems()
|
|
404
|
-
.
|
|
405
|
-
|
|
406
|
-
new OrderedSideEffect(await siloNullifier(contractAddress, nullifier.value), nullifier.counter),
|
|
407
|
-
),
|
|
542
|
+
.filter(nh => !nh.isEmpty())
|
|
543
|
+
.map(nh => nh.scope(contractAddress)),
|
|
408
544
|
);
|
|
545
|
+
scopedNullifiers.push(...execution.publicInputs.nullifiers.getActiveItems().map(n => n.scope(contractAddress)));
|
|
409
546
|
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
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
|
+
)),
|
|
415
554
|
);
|
|
416
555
|
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
nullifiers.push(...nullifiersFromExecution);
|
|
556
|
+
noteHashReadRequests.push(...execution.publicInputs.noteHashReadRequests.getActiveItems());
|
|
557
|
+
nullifierReadRequests.push(...execution.publicInputs.nullifierReadRequests.getActiveItems());
|
|
420
558
|
l2ToL1Messages.push(
|
|
421
559
|
...execution.publicInputs.l2ToL1Msgs
|
|
422
560
|
.getActiveItems()
|
|
@@ -445,17 +583,59 @@ export async function generateSimulatedProvingResult(
|
|
|
445
583
|
: execution.publicInputs.publicTeardownCallRequest;
|
|
446
584
|
|
|
447
585
|
executionSteps.push({
|
|
448
|
-
functionName: await
|
|
586
|
+
functionName: await debugFunctionNameGetter(
|
|
449
587
|
execution.publicInputs.callContext.contractAddress,
|
|
450
588
|
execution.publicInputs.callContext.functionSelector,
|
|
451
589
|
),
|
|
452
590
|
timings: execution.profileResult?.timings ?? { witgen: 0, oracles: {} },
|
|
591
|
+
kind: CircuitKind.App,
|
|
453
592
|
bytecode: execution.acir,
|
|
454
593
|
vk: execution.vk,
|
|
455
594
|
witness: execution.partialWitness,
|
|
456
595
|
});
|
|
457
596
|
}
|
|
458
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
|
+
|
|
459
639
|
const constantData = new TxConstantData(
|
|
460
640
|
privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader,
|
|
461
641
|
privateExecutionResult.entrypoint.publicInputs.txContext,
|
|
@@ -472,25 +652,23 @@ export async function generateSimulatedProvingResult(
|
|
|
472
652
|
const getEffect = <T>(orderedSideEffect: OrderedSideEffect<T>) => orderedSideEffect.sideEffect;
|
|
473
653
|
|
|
474
654
|
const isPrivateOnlyTx = privateExecutionResult.publicFunctionCalldata.length === 0;
|
|
475
|
-
const minRevertibleSideEffectCounter =
|
|
476
|
-
minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
|
|
477
655
|
|
|
478
656
|
const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(
|
|
479
|
-
|
|
657
|
+
siloedNullifiers,
|
|
480
658
|
minRevertibleSideEffectCounter,
|
|
481
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.
|
|
482
664
|
const nonceGenerator = privateExecutionResult.firstNullifier;
|
|
483
|
-
|
|
484
|
-
nonRevertibleNullifiers.push(nonceGenerator);
|
|
485
|
-
} else if (!nonRevertibleNullifiers[0].equals(nonceGenerator)) {
|
|
486
|
-
throw new Error('The first non revertible nullifier should be equal to the nonce generator. This is a bug!');
|
|
487
|
-
}
|
|
665
|
+
nonRevertibleNullifiers.unshift(nonceGenerator);
|
|
488
666
|
|
|
489
667
|
if (isPrivateOnlyTx) {
|
|
490
668
|
// We must make the note hashes unique by using the
|
|
491
669
|
// nonce generator and their index in the tx.
|
|
492
670
|
const uniqueNoteHashes = await Promise.all(
|
|
493
|
-
siloedNoteHashes.
|
|
671
|
+
siloedNoteHashes.map(async (orderedSideEffect, i) => {
|
|
494
672
|
const siloedNoteHash = orderedSideEffect.sideEffect;
|
|
495
673
|
const nonce = await computeNoteHashNonce(nonceGenerator, i);
|
|
496
674
|
const uniqueNoteHash = await computeUniqueNoteHash(nonce, siloedNoteHash);
|
|
@@ -505,18 +683,18 @@ export async function generateSimulatedProvingResult(
|
|
|
505
683
|
ScopedL2ToL1Message.empty(),
|
|
506
684
|
MAX_L2_TO_L1_MSGS_PER_TX,
|
|
507
685
|
),
|
|
508
|
-
padArrayEnd(
|
|
686
|
+
padArrayEnd(filteredPrivateLogs.sort(sortByCounter).map(getEffect), PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX),
|
|
509
687
|
padArrayEnd(
|
|
510
688
|
contractClassLogsHashes.sort(sortByCounter).map(getEffect),
|
|
511
689
|
ScopedLogHash.empty(),
|
|
512
690
|
MAX_CONTRACT_CLASS_LOGS_PER_TX,
|
|
513
691
|
),
|
|
514
692
|
);
|
|
515
|
-
gasUsed = meterGasUsed(accumulatedDataForRollup);
|
|
693
|
+
gasUsed = meterGasUsed(accumulatedDataForRollup, isPrivateOnlyTx);
|
|
516
694
|
inputsForRollup = new PartialPrivateTailPublicInputsForRollup(accumulatedDataForRollup);
|
|
517
695
|
} else {
|
|
518
696
|
const [nonRevertibleNoteHashes, revertibleNoteHashes] = splitOrderedSideEffects(
|
|
519
|
-
siloedNoteHashes
|
|
697
|
+
siloedNoteHashes,
|
|
520
698
|
minRevertibleSideEffectCounter,
|
|
521
699
|
);
|
|
522
700
|
const nonRevertibleUniqueNoteHashes = await Promise.all(
|
|
@@ -530,7 +708,7 @@ export async function generateSimulatedProvingResult(
|
|
|
530
708
|
minRevertibleSideEffectCounter,
|
|
531
709
|
);
|
|
532
710
|
const [nonRevertibleTaggedPrivateLogs, revertibleTaggedPrivateLogs] = splitOrderedSideEffects(
|
|
533
|
-
|
|
711
|
+
filteredPrivateLogs,
|
|
534
712
|
minRevertibleSideEffectCounter,
|
|
535
713
|
);
|
|
536
714
|
const [nonRevertibleContractClassLogHashes, revertibleContractClassLogHashes] = splitOrderedSideEffects(
|
|
@@ -559,9 +737,9 @@ export async function generateSimulatedProvingResult(
|
|
|
559
737
|
padArrayEnd(revertibleContractClassLogHashes, ScopedLogHash.empty(), MAX_CONTRACT_CLASS_LOGS_PER_TX),
|
|
560
738
|
padArrayEnd(revertiblePublicCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX),
|
|
561
739
|
);
|
|
562
|
-
gasUsed = meterGasUsed(revertibleData).add(meterGasUsed(nonRevertibleData));
|
|
740
|
+
gasUsed = meterGasUsed(revertibleData, isPrivateOnlyTx).add(meterGasUsed(nonRevertibleData, isPrivateOnlyTx));
|
|
563
741
|
if (publicTeardownCallRequest) {
|
|
564
|
-
gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
|
|
742
|
+
gasUsed = gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
|
|
565
743
|
}
|
|
566
744
|
|
|
567
745
|
inputsForPublic = new PartialPrivateTailPublicInputsForPublic(
|
|
@@ -573,9 +751,14 @@ export async function generateSimulatedProvingResult(
|
|
|
573
751
|
|
|
574
752
|
const publicInputs = new PrivateKernelTailCircuitPublicInputs(
|
|
575
753
|
constantData,
|
|
576
|
-
/*gasUsed=*/ gasUsed.add(
|
|
577
|
-
|
|
578
|
-
|
|
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,
|
|
579
762
|
hasPublicCalls ? inputsForPublic : undefined,
|
|
580
763
|
!hasPublicCalls ? inputsForRollup : undefined,
|
|
581
764
|
);
|
|
@@ -587,6 +770,116 @@ export async function generateSimulatedProvingResult(
|
|
|
587
770
|
};
|
|
588
771
|
}
|
|
589
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
|
+
|
|
590
883
|
function splitOrderedSideEffects<T>(effects: OrderedSideEffect<T>[], minRevertibleSideEffectCounter: number) {
|
|
591
884
|
const revertibleSideEffects: T[] = [];
|
|
592
885
|
const nonRevertibleSideEffects: T[] = [];
|
|
@@ -600,21 +893,24 @@ function splitOrderedSideEffects<T>(effects: OrderedSideEffect<T>[], minRevertib
|
|
|
600
893
|
return [nonRevertibleSideEffects, revertibleSideEffects];
|
|
601
894
|
}
|
|
602
895
|
|
|
603
|
-
function meterGasUsed(data: PrivateToRollupAccumulatedData | PrivateToPublicAccumulatedData) {
|
|
896
|
+
function meterGasUsed(data: PrivateToRollupAccumulatedData | PrivateToPublicAccumulatedData, isPrivateOnlyTx: boolean) {
|
|
604
897
|
let meteredDAFields = 0;
|
|
605
898
|
let meteredL2Gas = 0;
|
|
606
899
|
|
|
607
900
|
const numNoteHashes = arrayNonEmptyLength(data.noteHashes, hash => hash.isEmpty());
|
|
608
901
|
meteredDAFields += numNoteHashes;
|
|
609
|
-
|
|
902
|
+
const noteHashBaseGas = isPrivateOnlyTx ? L2_GAS_PER_NOTE_HASH : AVM_EMITNOTEHASH_BASE_L2_GAS;
|
|
903
|
+
meteredL2Gas += numNoteHashes * noteHashBaseGas;
|
|
610
904
|
|
|
611
905
|
const numNullifiers = arrayNonEmptyLength(data.nullifiers, nullifier => nullifier.isEmpty());
|
|
612
906
|
meteredDAFields += numNullifiers;
|
|
613
|
-
|
|
907
|
+
const nullifierBaseGas = isPrivateOnlyTx ? L2_GAS_PER_NULLIFIER : AVM_EMITNULLIFIER_BASE_L2_GAS;
|
|
908
|
+
meteredL2Gas += numNullifiers * nullifierBaseGas;
|
|
614
909
|
|
|
615
910
|
const numL2toL1Messages = arrayNonEmptyLength(data.l2ToL1Msgs, msg => msg.isEmpty());
|
|
616
911
|
meteredDAFields += numL2toL1Messages;
|
|
617
|
-
|
|
912
|
+
const l2ToL1MessageBaseGas = isPrivateOnlyTx ? L2_GAS_PER_L2_TO_L1_MSG : AVM_SENDL2TOL1MSG_BASE_L2_GAS;
|
|
913
|
+
meteredL2Gas += numL2toL1Messages * l2ToL1MessageBaseGas;
|
|
618
914
|
|
|
619
915
|
const numPrivatelogs = arrayNonEmptyLength(data.privateLogs, log => log.isEmpty());
|
|
620
916
|
// Every private log emits its length as an additional field
|
|
@@ -622,14 +918,19 @@ function meterGasUsed(data: PrivateToRollupAccumulatedData | PrivateToPublicAccu
|
|
|
622
918
|
meteredL2Gas += numPrivatelogs * L2_GAS_PER_PRIVATE_LOG;
|
|
623
919
|
|
|
624
920
|
const numContractClassLogs = arrayNonEmptyLength(data.contractClassLogsHashes, log => log.isEmpty());
|
|
625
|
-
// Every contract class log emits its
|
|
921
|
+
// Every contract class log emits its contract address as an additional field
|
|
626
922
|
meteredDAFields += data.contractClassLogsHashes.reduce(
|
|
627
|
-
(acc, log) => (!log.isEmpty() ? acc + log.logHash.length +
|
|
923
|
+
(acc, log) => (!log.isEmpty() ? acc + log.logHash.length + 1 : acc),
|
|
628
924
|
0,
|
|
629
925
|
);
|
|
630
926
|
meteredL2Gas += numContractClassLogs * L2_GAS_PER_CONTRACT_CLASS_LOG;
|
|
631
927
|
|
|
632
|
-
|
|
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;
|
|
633
934
|
|
|
634
935
|
if ((data as PrivateToPublicAccumulatedData).publicCallRequests) {
|
|
635
936
|
const dataForPublic = data as PrivateToPublicAccumulatedData;
|