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