@aztec/pxe 0.0.1-commit.72dcdcda8 → 0.0.1-commit.7689c7f
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.d.ts +12 -2
- package/dest/bin/check_oracle_version.d.ts.map +1 -1
- package/dest/bin/check_oracle_version.js +31 -25
- 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/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 +62 -0
- package/dest/block_synchronizer/block_synchronizer.d.ts +6 -2
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +30 -10
- package/dest/config/index.d.ts +8 -2
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +13 -15
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +16 -5
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +53 -18
- 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_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 +4 -1
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +3 -0
- package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts +48 -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 +45 -0
- package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +4 -6
- 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 +8 -9
- package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +13 -3
- 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 +35 -4
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +2 -2
- 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 -4
- package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +4 -7
- 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 +6 -10
- package/dest/contract_function_simulator/noir-structs/option.d.ts +61 -0
- package/dest/contract_function_simulator/noir-structs/option.d.ts.map +1 -0
- package/dest/contract_function_simulator/noir-structs/option.js +62 -0
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +67 -51
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- 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.d.ts +74 -45
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +471 -287
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts +147 -0
- package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -0
- package/dest/contract_function_simulator/oracle/oracle_registry.js +1199 -0
- package/dest/contract_function_simulator/oracle/private_execution.js +5 -3
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +44 -70
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +94 -97
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +112 -67
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +395 -141
- 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/proxied_contract_data_source.d.ts +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
- package/dest/contract_function_simulator/proxied_contract_data_source.js +35 -64
- package/dest/contract_logging.d.ts +9 -4
- package/dest/contract_logging.d.ts.map +1 -1
- package/dest/contract_logging.js +21 -6
- package/dest/contract_sync/contract_sync_service.d.ts +7 -8
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -1
- package/dest/contract_sync/contract_sync_service.js +87 -49
- package/dest/contract_sync/helpers.d.ts +2 -4
- package/dest/contract_sync/helpers.d.ts.map +1 -1
- package/dest/contract_sync/helpers.js +12 -14
- package/dest/debug/pxe_debug_utils.d.ts +3 -8
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +0 -6
- package/dest/entrypoints/client/bundle/index.d.ts +1 -2
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +0 -1
- 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 +13 -5
- package/dest/entrypoints/client/lazy/index.d.ts +1 -2
- package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
- package/dest/entrypoints/client/lazy/index.js +0 -1
- 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 +13 -5
- package/dest/entrypoints/pxe_creation_options.d.ts +9 -1
- 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 +3 -3
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +2 -2
- package/dest/entrypoints/server/utils.d.ts +4 -3
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +13 -5
- 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 +42 -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 +4 -0
- package/dest/hooks/index.d.ts.map +1 -0
- package/dest/hooks/index.js +1 -0
- package/dest/logs/log_service.d.ts +9 -9
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +122 -72
- package/dest/messages/message_context_service.d.ts +17 -0
- package/dest/messages/message_context_service.d.ts.map +1 -0
- package/dest/messages/message_context_service.js +38 -0
- package/dest/notes/note_service.d.ts +27 -6
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +80 -56
- package/dest/notes_filter.d.ts +2 -3
- package/dest/notes_filter.d.ts.map +1 -1
- 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/private_kernel_reset_private_inputs_builder.js +1 -1
- package/dest/private_kernel/hints/test_utils.d.ts +1 -1
- package/dest/private_kernel/hints/test_utils.d.ts.map +1 -1
- package/dest/private_kernel/hints/test_utils.js +2 -3
- 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 +152 -59
- package/dest/private_kernel/private_kernel_oracle.d.ts +10 -10
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +24 -22
- package/dest/pxe.d.ts +59 -10
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +154 -93
- package/dest/storage/anchor_block_store/anchor_block_store.js +1 -1
- 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 +591 -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 +50 -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 +1 -1
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +9 -26
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +1 -1
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +2 -2
- package/dest/storage/open_pxe_stores.d.ts +33 -0
- package/dest/storage/open_pxe_stores.d.ts.map +1 -0
- package/dest/storage/open_pxe_stores.js +27 -0
- package/dest/storage/private_event_store/private_event_store.d.ts +1 -1
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +3 -0
- package/dest/storage/private_event_store/stored_private_event.js +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +29 -28
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +141 -115
- package/dest/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 +36 -37
- 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 +56 -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 +163 -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/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 -5
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +29 -10
- 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 -4
- 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 +26 -13
- package/package.json +20 -17
- package/src/bin/check_oracle_version.ts +41 -31
- package/src/bin/index.ts +1 -0
- package/src/block_synchronizer/block_stream_source.ts +81 -0
- package/src/block_synchronizer/block_synchronizer.ts +33 -11
- package/src/config/index.ts +15 -9
- package/src/contract_function_simulator/contract_function_simulator.ts +82 -22
- package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -18
- package/src/contract_function_simulator/index.ts +3 -0
- package/src/contract_function_simulator/noir-structs/bounded_vec.ts +55 -0
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +10 -9
- package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +36 -3
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -5
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +5 -10
- package/src/contract_function_simulator/noir-structs/option.ts +69 -0
- package/src/contract_function_simulator/oracle/interfaces.ts +85 -72
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +3 -3
- package/src/contract_function_simulator/oracle/oracle.ts +558 -484
- package/src/contract_function_simulator/oracle/oracle_registry.ts +904 -0
- package/src/contract_function_simulator/oracle/private_execution.ts +4 -4
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +119 -132
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +543 -221
- package/src/contract_function_simulator/pick_notes.ts +22 -3
- package/src/contract_function_simulator/proxied_contract_data_source.ts +41 -64
- package/src/contract_logging.ts +18 -5
- package/src/contract_sync/contract_sync_service.ts +120 -83
- package/src/contract_sync/helpers.ts +13 -25
- package/src/debug/pxe_debug_utils.ts +3 -11
- package/src/entrypoints/client/bundle/index.ts +0 -1
- package/src/entrypoints/client/bundle/utils.ts +10 -5
- package/src/entrypoints/client/lazy/index.ts +0 -1
- package/src/entrypoints/client/lazy/utils.ts +10 -5
- package/src/entrypoints/pxe_creation_options.ts +14 -0
- package/src/entrypoints/server/index.ts +2 -2
- package/src/entrypoints/server/utils.ts +15 -6
- 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 +48 -0
- package/src/hooks/index.ts +7 -0
- package/src/logs/log_service.ts +153 -134
- package/src/messages/message_context_service.ts +45 -0
- package/src/notes/note_service.ts +119 -85
- package/src/notes_filter.ts +1 -3
- package/src/oracle_version.ts +20 -10
- package/src/private_kernel/batch_planner.ts +169 -0
- package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +1 -1
- package/src/private_kernel/hints/test_utils.ts +2 -9
- package/src/private_kernel/private_kernel_execution_prover.ts +240 -82
- package/src/private_kernel/private_kernel_oracle.ts +35 -25
- package/src/pxe.ts +262 -98
- package/src/storage/anchor_block_store/anchor_block_store.ts +1 -1
- 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__/KeyStore.json +52 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +46 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +36 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/PrivateEventStore.json +44 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +18 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/SenderAddressBookStore.json +16 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +22 -0
- package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +97 -0
- package/src/storage/backwards_compatibility_tests/kv_store_snapshot.ts +122 -0
- package/src/storage/backwards_compatibility_tests/schema_tests.ts +712 -0
- package/src/storage/backwards_compatibility_tests/store_spy.ts +73 -0
- package/src/storage/capsule_store/capsule_service.ts +90 -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 +14 -35
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +2 -5
- package/src/storage/open_pxe_stores.ts +49 -0
- package/src/storage/private_event_store/private_event_store.ts +4 -0
- package/src/storage/private_event_store/stored_private_event.ts +1 -1
- package/src/storage/tagging_store/recipient_tagging_store.ts +5 -9
- package/src/storage/tagging_store/sender_tagging_store.ts +185 -138
- package/src/tagging/get_all_logs_by_tags.ts +78 -50
- 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 +240 -0
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
- package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +52 -12
- 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 +23 -14
- package/dest/access_scopes.d.ts +0 -9
- package/dest/access_scopes.d.ts.map +0 -1
- package/dest/access_scopes.js +0 -6
- 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 -33
- package/src/access_scopes.ts +0 -9
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -140
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -44
package/dest/pxe.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pxe.d.ts","sourceRoot":"","sources":["../src/pxe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,KAAK,MAAM,EAAqC,MAAM,uBAAuB,CAAC;AAIvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"pxe.d.ts","sourceRoot":"","sources":["../src/pxe.ts"],"names":[],"mappings":"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"}
|
package/dest/pxe.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import { BlockNumber } from '@aztec/foundation/branded-types';
|
|
1
2
|
import { createLogger } from '@aztec/foundation/log';
|
|
2
3
|
import { SerialQueue } from '@aztec/foundation/queue';
|
|
3
4
|
import { Timer } from '@aztec/foundation/timer';
|
|
4
|
-
import { KeyStore } from '@aztec/key-store';
|
|
5
|
-
import { L2TipsKVStore } from '@aztec/kv-store/stores';
|
|
6
5
|
import { protocolContractNames } from '@aztec/protocol-contracts';
|
|
7
6
|
import { FunctionType, decodeFunctionSignature } from '@aztec/stdlib/abi';
|
|
7
|
+
import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/stdlib/block';
|
|
8
8
|
import { computeContractAddressFromInstance, getContractClassFromArtifact } from '@aztec/stdlib/contract';
|
|
9
9
|
import { SimulationError } from '@aztec/stdlib/errors';
|
|
10
10
|
import { PrivateSimulationResult, TxProfileResult, TxProvingResult, TxSimulationResult } from '@aztec/stdlib/tx';
|
|
@@ -20,17 +20,11 @@ import { PXEDebugUtils } from './debug/pxe_debug_utils.js';
|
|
|
20
20
|
import { enrichPublicSimulationError, enrichSimulationError } from './error_enriching.js';
|
|
21
21
|
import { PrivateEventFilterValidator } from './events/private_event_filter_validator.js';
|
|
22
22
|
import { JobCoordinator } from './job_coordinator/job_coordinator.js';
|
|
23
|
+
import { MessageContextService } from './messages/message_context_service.js';
|
|
23
24
|
import { PrivateKernelExecutionProver } from './private_kernel/private_kernel_execution_prover.js';
|
|
24
25
|
import { PrivateKernelOracle } from './private_kernel/private_kernel_oracle.js';
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
27
|
-
import { CapsuleStore } from './storage/capsule_store/capsule_store.js';
|
|
28
|
-
import { ContractStore } from './storage/contract_store/contract_store.js';
|
|
29
|
-
import { NoteStore } from './storage/note_store/note_store.js';
|
|
30
|
-
import { PrivateEventStore } from './storage/private_event_store/private_event_store.js';
|
|
31
|
-
import { RecipientTaggingStore } from './storage/tagging_store/recipient_tagging_store.js';
|
|
32
|
-
import { SenderAddressBookStore } from './storage/tagging_store/sender_address_book_store.js';
|
|
33
|
-
import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store.js';
|
|
26
|
+
import { openPxeStores } from './storage/open_pxe_stores.js';
|
|
27
|
+
import { persistSenderTaggingIndexRangesForTx } from './tagging/index.js';
|
|
34
28
|
/**
|
|
35
29
|
* Private eXecution Environment (PXE) is a library used by wallets to simulate private phase of transactions and to
|
|
36
30
|
* manage private state of users.
|
|
@@ -49,15 +43,20 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
49
43
|
addressStore;
|
|
50
44
|
privateEventStore;
|
|
51
45
|
contractSyncService;
|
|
46
|
+
messageContextService;
|
|
47
|
+
l2TipsStore;
|
|
52
48
|
simulator;
|
|
53
49
|
proverEnabled;
|
|
50
|
+
autoSync;
|
|
54
51
|
proofCreator;
|
|
55
52
|
protocolContractsProvider;
|
|
53
|
+
preloadedContractsProvider;
|
|
56
54
|
log;
|
|
57
55
|
jobQueue;
|
|
58
56
|
jobCoordinator;
|
|
59
57
|
debug;
|
|
60
|
-
|
|
58
|
+
hooks;
|
|
59
|
+
constructor(node, db, blockStateSynchronizer, keyStore, contractStore, noteStore, capsuleStore, anchorBlockStore, senderTaggingStore, senderAddressBookStore, recipientTaggingStore, addressStore, privateEventStore, contractSyncService, messageContextService, l2TipsStore, simulator, proverEnabled, autoSync, proofCreator, protocolContractsProvider, preloadedContractsProvider, log, jobQueue, jobCoordinator, debug, hooks){
|
|
61
60
|
this.node = node;
|
|
62
61
|
this.db = db;
|
|
63
62
|
this.blockStateSynchronizer = blockStateSynchronizer;
|
|
@@ -72,14 +71,19 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
72
71
|
this.addressStore = addressStore;
|
|
73
72
|
this.privateEventStore = privateEventStore;
|
|
74
73
|
this.contractSyncService = contractSyncService;
|
|
74
|
+
this.messageContextService = messageContextService;
|
|
75
|
+
this.l2TipsStore = l2TipsStore;
|
|
75
76
|
this.simulator = simulator;
|
|
76
77
|
this.proverEnabled = proverEnabled;
|
|
78
|
+
this.autoSync = autoSync;
|
|
77
79
|
this.proofCreator = proofCreator;
|
|
78
80
|
this.protocolContractsProvider = protocolContractsProvider;
|
|
81
|
+
this.preloadedContractsProvider = preloadedContractsProvider;
|
|
79
82
|
this.log = log;
|
|
80
83
|
this.jobQueue = jobQueue;
|
|
81
84
|
this.jobCoordinator = jobCoordinator;
|
|
82
85
|
this.debug = debug;
|
|
86
|
+
this.hooks = hooks;
|
|
83
87
|
}
|
|
84
88
|
/**
|
|
85
89
|
* Creates an instance of a PXE by instantiating all the necessary data providers and services.
|
|
@@ -87,25 +91,23 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
87
91
|
* can be contacted.
|
|
88
92
|
*
|
|
89
93
|
* @returns A promise that resolves PXE is ready to be used.
|
|
90
|
-
*/ static async create({ node, store, proofCreator, simulator, protocolContractsProvider, config, loggerOrSuffix }) {
|
|
94
|
+
*/ static async create({ node, store, proofCreator, simulator, protocolContractsProvider, preloadedContractsProvider, config, loggerOrSuffix, hooks }) {
|
|
91
95
|
// Extract bindings from the logger, or use empty bindings if a string suffix is provided.
|
|
92
96
|
const bindings = loggerOrSuffix && typeof loggerOrSuffix !== 'string' ? loggerOrSuffix.getBindings() : undefined;
|
|
93
97
|
const log = !loggerOrSuffix || typeof loggerOrSuffix === 'string' ? createLogger(loggerOrSuffix ? `pxe:service:${loggerOrSuffix}` : `pxe:service`) : loggerOrSuffix;
|
|
94
98
|
const info = await node.getNodeInfo();
|
|
99
|
+
// Source the genesis block hash from the node so PXE's L2BlockStream agrees with the node's
|
|
100
|
+
// archiver on the dynamic initial header hash. Without this the tip store would fall back to
|
|
101
|
+
// the static `GENESIS_BLOCK_HEADER_HASH` constant, which only matches deployments with the
|
|
102
|
+
// default empty genesis (timestamp 0, no prefilled public data) and diverges otherwise — the
|
|
103
|
+
// sync at block 0 would then get stuck in `areBlockHashesEqualAt` and abort. If the node does
|
|
104
|
+
// not return a genesis block (older node or test fixture) we fall back to the static constant.
|
|
105
|
+
const initialBlockHash = (await node.getBlock(BlockNumber.ZERO))?.hash ?? GENESIS_BLOCK_HEADER_HASH;
|
|
95
106
|
const proverEnabled = config.proverEnabled !== undefined ? config.proverEnabled : info.realProofs;
|
|
96
|
-
const addressStore =
|
|
97
|
-
const privateEventStore = new PrivateEventStore(store);
|
|
98
|
-
const contractStore = new ContractStore(store);
|
|
99
|
-
const noteStore = new NoteStore(store);
|
|
100
|
-
const anchorBlockStore = new AnchorBlockStore(store);
|
|
101
|
-
const senderTaggingStore = new SenderTaggingStore(store);
|
|
102
|
-
const senderAddressBookStore = new SenderAddressBookStore(store);
|
|
103
|
-
const recipientTaggingStore = new RecipientTaggingStore(store);
|
|
104
|
-
const capsuleStore = new CapsuleStore(store);
|
|
105
|
-
const keyStore = new KeyStore(store);
|
|
106
|
-
const tipsStore = new L2TipsKVStore(store, 'pxe');
|
|
107
|
+
const { addressStore, privateEventStore, contractStore, noteStore, anchorBlockStore, senderTaggingStore, senderAddressBookStore, recipientTaggingStore, capsuleStore, keyStore, l2TipsStore } = openPxeStores(store, initialBlockHash);
|
|
107
108
|
const contractSyncService = new ContractSyncService(node, contractStore, noteStore, createLogger('pxe:contract_sync', bindings));
|
|
108
|
-
const
|
|
109
|
+
const messageContextService = new MessageContextService(node);
|
|
110
|
+
const synchronizer = new BlockSynchronizer(node, store, anchorBlockStore, noteStore, privateEventStore, l2TipsStore, contractSyncService, config, bindings);
|
|
109
111
|
const jobCoordinator = new JobCoordinator(store, bindings);
|
|
110
112
|
jobCoordinator.registerStores([
|
|
111
113
|
capsuleStore,
|
|
@@ -117,10 +119,13 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
117
119
|
]);
|
|
118
120
|
const debugUtils = new PXEDebugUtils(contractSyncService, noteStore, synchronizer, anchorBlockStore);
|
|
119
121
|
const jobQueue = new SerialQueue();
|
|
120
|
-
const pxe = new PXE(node, store, synchronizer, keyStore, contractStore, noteStore, capsuleStore, anchorBlockStore, senderTaggingStore, senderAddressBookStore, recipientTaggingStore, addressStore, privateEventStore, contractSyncService, simulator, proverEnabled, proofCreator, protocolContractsProvider, log, jobQueue, jobCoordinator, debugUtils);
|
|
122
|
+
const pxe = new PXE(node, store, synchronizer, keyStore, contractStore, noteStore, capsuleStore, anchorBlockStore, senderTaggingStore, senderAddressBookStore, recipientTaggingStore, addressStore, privateEventStore, contractSyncService, messageContextService, l2TipsStore, simulator, proverEnabled, config.autoSync, proofCreator, protocolContractsProvider, preloadedContractsProvider, log, jobQueue, jobCoordinator, debugUtils, hooks);
|
|
121
123
|
debugUtils.setPXEHelpers(pxe.#putInJobQueue.bind(pxe), pxe.#getSimulatorForTx.bind(pxe), pxe.#executeUtility.bind(pxe));
|
|
122
124
|
pxe.jobQueue.start();
|
|
123
|
-
await
|
|
125
|
+
await Promise.all([
|
|
126
|
+
pxe.#registerProtocolContracts(),
|
|
127
|
+
pxe.#registerPreloadedContracts()
|
|
128
|
+
]);
|
|
124
129
|
log.info(`Started PXE connected to chain ${info.l1ChainId} version ${info.rollupVersion}`);
|
|
125
130
|
return pxe;
|
|
126
131
|
}
|
|
@@ -133,13 +138,16 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
133
138
|
keyStore: this.keyStore,
|
|
134
139
|
addressStore: this.addressStore,
|
|
135
140
|
aztecNode: BenchmarkedNodeFactory.create(this.node),
|
|
141
|
+
l2TipsStore: this.l2TipsStore,
|
|
136
142
|
senderTaggingStore: this.senderTaggingStore,
|
|
137
143
|
recipientTaggingStore: this.recipientTaggingStore,
|
|
138
144
|
senderAddressBookStore: this.senderAddressBookStore,
|
|
139
145
|
capsuleStore: this.capsuleStore,
|
|
140
146
|
privateEventStore: this.privateEventStore,
|
|
141
147
|
simulator: this.simulator,
|
|
142
|
-
contractSyncService: this.contractSyncService
|
|
148
|
+
contractSyncService: this.contractSyncService,
|
|
149
|
+
messageContextService: this.messageContextService,
|
|
150
|
+
hooks: this.hooks
|
|
143
151
|
});
|
|
144
152
|
}
|
|
145
153
|
#contextualizeError(err, ...context) {
|
|
@@ -181,28 +189,40 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
181
189
|
});
|
|
182
190
|
}
|
|
183
191
|
async #registerProtocolContracts() {
|
|
184
|
-
const registered = {
|
|
185
|
-
for (const name of protocolContractNames){
|
|
192
|
+
const registered = Object.fromEntries(await Promise.all(protocolContractNames.map(async (name)=>{
|
|
186
193
|
const { address, instance, artifact } = await this.protocolContractsProvider.getProtocolContractArtifact(name);
|
|
187
194
|
await this.contractStore.addContractArtifact(artifact);
|
|
188
195
|
await this.contractStore.addContractInstance(instance);
|
|
189
|
-
|
|
190
|
-
|
|
196
|
+
return [
|
|
197
|
+
name,
|
|
198
|
+
address.toString()
|
|
199
|
+
];
|
|
200
|
+
})));
|
|
191
201
|
this.log.verbose(`Registered protocol contracts in pxe`, registered);
|
|
192
202
|
}
|
|
203
|
+
async #registerPreloadedContracts() {
|
|
204
|
+
const contracts = await this.preloadedContractsProvider.getPreloadedContracts();
|
|
205
|
+
await Promise.all(contracts.map(({ instance, artifact })=>this.registerContract({
|
|
206
|
+
instance,
|
|
207
|
+
artifact
|
|
208
|
+
})));
|
|
209
|
+
this.log.verbose(`Registered preloaded contracts in pxe`, {
|
|
210
|
+
contracts: contracts.map(({ instance })=>instance.address.toString())
|
|
211
|
+
});
|
|
212
|
+
}
|
|
193
213
|
// Executes the entrypoint private function, as well as all nested private
|
|
194
214
|
// functions that might arise.
|
|
195
|
-
async #executePrivate(contractFunctionSimulator, txRequest, scopes, jobId) {
|
|
215
|
+
async #executePrivate({ contractFunctionSimulator, txRequest, anchorBlockHeader, scopes, jobId, senderForTags }) {
|
|
196
216
|
const { origin: contractAddress, functionSelector } = txRequest;
|
|
197
217
|
try {
|
|
198
|
-
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
199
218
|
await this.contractSyncService.ensureContractSynced(contractAddress, functionSelector, (privateSyncCall, execScopes)=>this.#executeUtility(contractFunctionSimulator, privateSyncCall, [], execScopes, jobId), anchorBlockHeader, jobId, scopes);
|
|
200
219
|
const result = await contractFunctionSimulator.run(txRequest, {
|
|
201
220
|
contractAddress,
|
|
202
221
|
selector: functionSelector,
|
|
203
222
|
anchorBlockHeader,
|
|
204
223
|
scopes,
|
|
205
|
-
jobId
|
|
224
|
+
jobId,
|
|
225
|
+
senderForTags
|
|
206
226
|
});
|
|
207
227
|
this.log.debug(`Private simulation completed for ${contractAddress.toString()}:${functionSelector}`);
|
|
208
228
|
return result;
|
|
@@ -225,7 +245,11 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
225
245
|
*/ async #executeUtility(contractFunctionSimulator, call, authWitnesses, scopes, jobId) {
|
|
226
246
|
try {
|
|
227
247
|
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
228
|
-
|
|
248
|
+
const { result, offchainEffects } = await contractFunctionSimulator.runUtility(call, authWitnesses ?? [], anchorBlockHeader, scopes, jobId);
|
|
249
|
+
return {
|
|
250
|
+
result,
|
|
251
|
+
offchainEffects
|
|
252
|
+
};
|
|
229
253
|
} catch (err) {
|
|
230
254
|
if (err instanceof SimulationError) {
|
|
231
255
|
await enrichSimulationError(err, this.contractStore, this.log);
|
|
@@ -238,11 +262,11 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
238
262
|
* This allows to catch public execution errors before submitting the transaction.
|
|
239
263
|
* It can also be used for estimating gas in the future.
|
|
240
264
|
* @param tx - The transaction to be simulated.
|
|
241
|
-
*/ async #simulatePublicCalls(tx, skipFeeEnforcement) {
|
|
265
|
+
*/ async #simulatePublicCalls(tx, skipFeeEnforcement, overrides) {
|
|
242
266
|
// Simulating public calls can throw if the TX fails in a phase that doesn't allow reverts (setup)
|
|
243
267
|
// Or return as reverted if it fails in a phase that allows reverts (app logic, teardown)
|
|
244
268
|
try {
|
|
245
|
-
const result = await this.node.simulatePublicCalls(tx, skipFeeEnforcement);
|
|
269
|
+
const result = await this.node.simulatePublicCalls(tx, skipFeeEnforcement, overrides);
|
|
246
270
|
if (result.revertReason) {
|
|
247
271
|
throw result.revertReason;
|
|
248
272
|
}
|
|
@@ -268,20 +292,36 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
268
292
|
* @param privateExecutionResult - The result of the private execution
|
|
269
293
|
* @param config - The configuration for the kernel execution prover.
|
|
270
294
|
* @returns An object that contains the output of the kernel execution, including the ChonkProof if proving is enabled.
|
|
271
|
-
*/ async #prove(txExecutionRequest, proofCreator, privateExecutionResult, config) {
|
|
272
|
-
const
|
|
273
|
-
const anchorBlockHash = await anchorBlockHeader.hash();
|
|
274
|
-
const kernelOracle = new PrivateKernelOracle(this.contractStore, this.keyStore, this.node, anchorBlockHash);
|
|
295
|
+
*/ async #prove(txExecutionRequest, proofCreator, privateExecutionResult, anchorBlockHeader, config) {
|
|
296
|
+
const kernelOracle = new PrivateKernelOracle(this.contractStore, this.keyStore, this.node, anchorBlockHeader);
|
|
275
297
|
const kernelTraceProver = new PrivateKernelExecutionProver(kernelOracle, proofCreator, !this.proverEnabled, this.log.getBindings());
|
|
276
298
|
this.log.debug(`Executing kernel trace prover (${JSON.stringify(config)})...`);
|
|
277
299
|
return await kernelTraceProver.proveWithKernels(txExecutionRequest.toTxRequest(), privateExecutionResult, config);
|
|
278
300
|
}
|
|
301
|
+
/**
|
|
302
|
+
* Syncs with the node only when `autoSync` is enabled.
|
|
303
|
+
* When `autoSync` is disabled, callers (typically a wallet) are
|
|
304
|
+
* responsible for invoking `pxe.sync()` at the right granularity.
|
|
305
|
+
*/ async #maybeSync() {
|
|
306
|
+
if (this.autoSync) {
|
|
307
|
+
await this.blockStateSynchronizer.sync();
|
|
308
|
+
}
|
|
309
|
+
}
|
|
279
310
|
// Public API
|
|
280
311
|
/**
|
|
312
|
+
* Triggers a sync of PXE state with the node, regardless of the `autoSync` config flag. Use this to
|
|
313
|
+
* batch syncs across composite flows when `autoSync` is disabled (e.g. one sync per simulate+send
|
|
314
|
+
* instead of one per inner PXE call). Serialized through the job queue.
|
|
315
|
+
*/ sync() {
|
|
316
|
+
return this.#putInJobQueue(()=>this.blockStateSynchronizer.sync());
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
281
319
|
* Returns the block header up to which the PXE has synced.
|
|
282
320
|
* @returns The synced block header
|
|
283
321
|
*/ getSyncedBlockHeader() {
|
|
284
|
-
return this
|
|
322
|
+
return this.#putInJobQueue(()=>{
|
|
323
|
+
return this.anchorBlockStore.getBlockHeader();
|
|
324
|
+
});
|
|
285
325
|
}
|
|
286
326
|
/**
|
|
287
327
|
* Returns the contract instance for a given address, if it's registered in the PXE.
|
|
@@ -309,7 +349,7 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
309
349
|
*/ async registerAccount(secretKey, partialAddress) {
|
|
310
350
|
const accounts = await this.keyStore.getAccounts();
|
|
311
351
|
const accountCompleteAddress = await this.keyStore.addAccount(secretKey, partialAddress);
|
|
312
|
-
if (accounts.
|
|
352
|
+
if (accounts.some((a)=>a.equals(accountCompleteAddress.address))) {
|
|
313
353
|
this.log.info(`Account:\n "${accountCompleteAddress.address.toString()}"\n already registered.`);
|
|
314
354
|
return accountCompleteAddress;
|
|
315
355
|
} else {
|
|
@@ -329,14 +369,20 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
329
369
|
* @returns The address of the sender.
|
|
330
370
|
* TODO: It's strange that we return the address here and I (benesjan) think we should drop the return value.
|
|
331
371
|
*/ async registerSender(sender) {
|
|
372
|
+
if (!await sender.isValid()) {
|
|
373
|
+
throw new Error(`Address ${sender} is not valid: it does not correspond to a point on the Grumpkin curve. Cannot register it as a sender.`);
|
|
374
|
+
}
|
|
332
375
|
const accounts = await this.keyStore.getAccounts();
|
|
333
|
-
if (accounts.
|
|
376
|
+
if (accounts.some((a)=>a.equals(sender))) {
|
|
334
377
|
this.log.info(`Sender:\n "${sender.toString()}"\n already registered.`);
|
|
335
378
|
return sender;
|
|
336
379
|
}
|
|
337
380
|
const wasAdded = await this.senderAddressBookStore.addSender(sender);
|
|
338
381
|
if (wasAdded) {
|
|
339
382
|
this.log.info(`Added sender:\n ${sender.toString()}`);
|
|
383
|
+
// Wipe the entire sync cache: the new sender's tagged logs could contain notes/events for any contract, so
|
|
384
|
+
// all contracts must re-sync to discover them. Queued to avoid wiping while a job is in flight.
|
|
385
|
+
await this.#putInJobQueue(()=>Promise.resolve(this.contractSyncService.wipe()));
|
|
340
386
|
} else {
|
|
341
387
|
this.log.info(`Sender:\n "${sender.toString()}"\n already registered.`);
|
|
342
388
|
}
|
|
@@ -399,7 +445,9 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
399
445
|
}
|
|
400
446
|
await this.contractStore.addContractArtifact(artifact, contractClass);
|
|
401
447
|
const publicFunctionSignatures = artifact.functions.filter((fn)=>fn.functionType === FunctionType.PUBLIC).map((fn)=>decodeFunctionSignature(fn.name, fn.parameters));
|
|
402
|
-
|
|
448
|
+
if (publicFunctionSignatures.length > 0) {
|
|
449
|
+
await this.node.registerContractFunctionSignatures(publicFunctionSignatures);
|
|
450
|
+
}
|
|
403
451
|
} else {
|
|
404
452
|
// Otherwise, make sure there is an artifact already registered for that class id
|
|
405
453
|
artifact = await this.contractStore.getContractArtifact(instance.currentContractClassId);
|
|
@@ -427,14 +475,16 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
427
475
|
throw new Error(`Instance not found when updating a contract. Contract address: ${contractAddress}.`);
|
|
428
476
|
}
|
|
429
477
|
const contractClass = await getContractClassFromArtifact(artifact);
|
|
430
|
-
await this
|
|
478
|
+
await this.#maybeSync();
|
|
431
479
|
const header = await this.anchorBlockStore.getBlockHeader();
|
|
432
480
|
const currentClassId = await readCurrentClassId(contractAddress, currentInstance, this.node, header);
|
|
433
481
|
if (!contractClass.id.equals(currentClassId)) {
|
|
434
482
|
throw new Error('Could not update contract to a class different from the current one.');
|
|
435
483
|
}
|
|
436
484
|
const publicFunctionSignatures = artifact.functions.filter((fn)=>fn.functionType === FunctionType.PUBLIC).map((fn)=>decodeFunctionSignature(fn.name, fn.parameters));
|
|
437
|
-
|
|
485
|
+
if (publicFunctionSignatures.length > 0) {
|
|
486
|
+
await this.node.registerContractFunctionSignatures(publicFunctionSignatures);
|
|
487
|
+
}
|
|
438
488
|
currentInstance.currentContractClassId = contractClass.id;
|
|
439
489
|
await Promise.all([
|
|
440
490
|
this.contractStore.addContractArtifact(artifact, contractClass),
|
|
@@ -458,7 +508,7 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
458
508
|
* @returns A result containing the proof and public inputs of the tail circuit.
|
|
459
509
|
* @throws If contract code not found, or public simulation reverts.
|
|
460
510
|
* Also throws if simulatePublic is true and public simulation reverts.
|
|
461
|
-
*/ proveTx(txRequest, scopes) {
|
|
511
|
+
*/ proveTx(txRequest, { scopes, senderForTags }) {
|
|
462
512
|
let privateExecutionResult;
|
|
463
513
|
// We disable proving concurrently mostly out of caution, since it accesses some of our stores. Proving is so
|
|
464
514
|
// computationally demanding that it'd be rare for someone to try to do it concurrently regardless.
|
|
@@ -466,11 +516,19 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
466
516
|
const totalTimer = new Timer();
|
|
467
517
|
try {
|
|
468
518
|
const syncTimer = new Timer();
|
|
469
|
-
await this
|
|
519
|
+
await this.#maybeSync();
|
|
520
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
470
521
|
const syncTime = syncTimer.ms();
|
|
471
522
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
472
|
-
privateExecutionResult = await this.#executePrivate(
|
|
473
|
-
|
|
523
|
+
privateExecutionResult = await this.#executePrivate({
|
|
524
|
+
contractFunctionSimulator,
|
|
525
|
+
txRequest,
|
|
526
|
+
anchorBlockHeader,
|
|
527
|
+
scopes,
|
|
528
|
+
jobId,
|
|
529
|
+
senderForTags
|
|
530
|
+
});
|
|
531
|
+
const { publicInputs, chonkProof, executionSteps, timings: { proving } = {} } = await this.#prove(txRequest, this.proofCreator, privateExecutionResult, anchorBlockHeader, {
|
|
474
532
|
simulate: false,
|
|
475
533
|
skipFeeEnforcement: false,
|
|
476
534
|
profileMode: 'none'
|
|
@@ -495,22 +553,13 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
495
553
|
timings,
|
|
496
554
|
nodeRPCCalls: contractFunctionSimulator?.getStats().nodeRPCCalls
|
|
497
555
|
});
|
|
498
|
-
//
|
|
499
|
-
//
|
|
500
|
-
//
|
|
501
|
-
//
|
|
502
|
-
//
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
// TODO(benesjan): The following is an expensive operation. Figure out a way to avoid it.
|
|
506
|
-
const txHash = (await txProvingResult.toTx()).txHash;
|
|
507
|
-
await this.senderTaggingStore.storePendingIndexes(preTagsUsedInTheTx, txHash, jobId);
|
|
508
|
-
this.log.debug(`Stored used pre-tags as sender for the tx`, {
|
|
509
|
-
preTagsUsedInTheTx
|
|
510
|
-
});
|
|
511
|
-
} else {
|
|
512
|
-
this.log.debug(`No pre-tags used in the tx`);
|
|
513
|
-
}
|
|
556
|
+
// We keep track of which tagging indices we've used in this tx so that we don't repeat them in future txs
|
|
557
|
+
// (which would link them) without having to rely on this tx being mined (and us seeing the indices being used
|
|
558
|
+
// onchain).
|
|
559
|
+
// Note that this must happen _after_ proving as it requires the proof's public inputs, from which the kernels
|
|
560
|
+
// may have removed some logs due to note-nullifier squashing - this may lead to range of tagging indices we've
|
|
561
|
+
// actually used to being reduced.
|
|
562
|
+
await persistSenderTaggingIndexRangesForTx(this.senderTaggingStore, privateExecutionResult.entrypoint.taggingIndexRanges, publicInputs, ()=>txProvingResult.getTxHash(), jobId, this.log);
|
|
514
563
|
return txProvingResult;
|
|
515
564
|
} catch (err) {
|
|
516
565
|
throw this.#contextualizeError(err, inspect(txRequest), inspect(privateExecutionResult));
|
|
@@ -522,7 +571,7 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
522
571
|
* @param txRequest - An authenticated tx request ready for simulation.
|
|
523
572
|
* @returns A trace of the program execution with gate counts.
|
|
524
573
|
* @throws If the code for the functions executed in this transaction have not been made available via `addContracts`.
|
|
525
|
-
*/ profileTx(txRequest, { profileMode, skipProofGeneration = true, scopes }) {
|
|
574
|
+
*/ profileTx(txRequest, { profileMode, skipProofGeneration = true, scopes, senderForTags }) {
|
|
526
575
|
// We disable concurrent profiles for consistency with simulateTx.
|
|
527
576
|
return this.#putInJobQueue(async (jobId)=>{
|
|
528
577
|
const totalTimer = new Timer();
|
|
@@ -537,11 +586,19 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
537
586
|
};
|
|
538
587
|
this.log.info(`Profiling transaction execution request to ${txRequest.functionSelector} at ${txRequest.origin}`, txInfo);
|
|
539
588
|
const syncTimer = new Timer();
|
|
540
|
-
await this
|
|
589
|
+
await this.#maybeSync();
|
|
590
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
541
591
|
const syncTime = syncTimer.ms();
|
|
542
592
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
543
|
-
const privateExecutionResult = await this.#executePrivate(
|
|
544
|
-
|
|
593
|
+
const privateExecutionResult = await this.#executePrivate({
|
|
594
|
+
contractFunctionSimulator,
|
|
595
|
+
txRequest,
|
|
596
|
+
anchorBlockHeader,
|
|
597
|
+
scopes,
|
|
598
|
+
jobId,
|
|
599
|
+
senderForTags
|
|
600
|
+
});
|
|
601
|
+
const { executionSteps, timings: { proving } = {} } = await this.#prove(txRequest, this.proofCreator, privateExecutionResult, anchorBlockHeader, {
|
|
545
602
|
simulate: skipProofGeneration,
|
|
546
603
|
skipFeeEnforcement: false,
|
|
547
604
|
profileMode
|
|
@@ -591,7 +648,7 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
591
648
|
* Also throws if simulatePublic is true and public simulation reverts.
|
|
592
649
|
*
|
|
593
650
|
* TODO(#7456) Prevent msgSender being defined here for the first call
|
|
594
|
-
*/ simulateTx(txRequest, { simulatePublic, skipTxValidation = false, skipFeeEnforcement = false, overrides, scopes }) {
|
|
651
|
+
*/ simulateTx(txRequest, { simulatePublic, skipTxValidation = false, skipFeeEnforcement = false, skipKernels = true, overrides, scopes, senderForTags }) {
|
|
595
652
|
// We disable concurrent simulations since those might execute oracles which read and write to the PXE stores (e.g.
|
|
596
653
|
// to the capsules), and we need to prevent concurrent runs from interfering with one another (e.g. attempting to
|
|
597
654
|
// delete the same read value, or reading values that another simulation is currently modifying).
|
|
@@ -608,28 +665,29 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
608
665
|
};
|
|
609
666
|
this.log.info(`Simulating transaction execution request to ${txRequest.functionSelector} at ${txRequest.origin}`, txInfo);
|
|
610
667
|
const syncTimer = new Timer();
|
|
611
|
-
await this
|
|
668
|
+
await this.#maybeSync();
|
|
669
|
+
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
612
670
|
const syncTime = syncTimer.ms();
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
// will fail. Consider handing control to the user/wallet on whether they want to run them
|
|
616
|
-
// or not.
|
|
617
|
-
const overriddenContracts = overrides?.contracts ? new Set(Object.keys(overrides.contracts)) : undefined;
|
|
618
|
-
const hasOverriddenContracts = overriddenContracts !== undefined && overriddenContracts.size > 0;
|
|
619
|
-
const skipKernels = hasOverriddenContracts;
|
|
620
|
-
// Set overridden contracts on the sync service so it knows to skip syncing them
|
|
621
|
-
if (hasOverriddenContracts) {
|
|
622
|
-
this.contractSyncService.setOverriddenContracts(jobId, overriddenContracts);
|
|
671
|
+
if (overrides?.contracts && Object.keys(overrides.contracts).length > 0 && !skipKernels) {
|
|
672
|
+
throw new Error('Simulating with overridden contracts is not compatible with kernel execution. Please set skipKernels to true when simulating with overridden contracts.');
|
|
623
673
|
}
|
|
674
|
+
const contractFunctionSimulator = this.#getSimulatorForTx(overrides);
|
|
624
675
|
// Execution of private functions only; no proving, and no kernel logic.
|
|
625
|
-
const privateExecutionResult = await this.#executePrivate(
|
|
676
|
+
const privateExecutionResult = await this.#executePrivate({
|
|
677
|
+
contractFunctionSimulator,
|
|
678
|
+
txRequest,
|
|
679
|
+
anchorBlockHeader,
|
|
680
|
+
scopes,
|
|
681
|
+
jobId,
|
|
682
|
+
senderForTags
|
|
683
|
+
});
|
|
626
684
|
let publicInputs;
|
|
627
685
|
let executionSteps = [];
|
|
628
686
|
if (skipKernels) {
|
|
629
687
|
({ publicInputs, executionSteps } = await generateSimulatedProvingResult(privateExecutionResult, (addr, sel)=>this.contractStore.getDebugFunctionName(addr, sel), this.node));
|
|
630
688
|
} else {
|
|
631
689
|
// Kernel logic, plus proving of all private functions and kernels.
|
|
632
|
-
({ publicInputs, executionSteps } = await this.#prove(txRequest, this.proofCreator, privateExecutionResult, {
|
|
690
|
+
({ publicInputs, executionSteps } = await this.#prove(txRequest, this.proofCreator, privateExecutionResult, anchorBlockHeader, {
|
|
633
691
|
simulate: true,
|
|
634
692
|
skipFeeEnforcement,
|
|
635
693
|
profileMode: 'none'
|
|
@@ -641,7 +699,7 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
641
699
|
let publicOutput;
|
|
642
700
|
if (simulatePublic && publicInputs.forPublic) {
|
|
643
701
|
const publicSimulationTimer = new Timer();
|
|
644
|
-
publicOutput = await this.#simulatePublicCalls(simulatedTx, skipFeeEnforcement);
|
|
702
|
+
publicOutput = await this.#simulatePublicCalls(simulatedTx, skipFeeEnforcement, overrides);
|
|
645
703
|
publicSimulationTime = publicSimulationTimer.ms();
|
|
646
704
|
if (publicOutput?.debugLogs?.length) {
|
|
647
705
|
await displayDebugLogs(publicOutput.debugLogs, (addr)=>this.contractStore.getDebugContractName(addr));
|
|
@@ -690,7 +748,7 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
690
748
|
nodeRPCCalls: simulatorStats.nodeRPCCalls
|
|
691
749
|
});
|
|
692
750
|
} catch (err) {
|
|
693
|
-
throw this.#contextualizeError(err, inspect(txRequest), `simulatePublic=${simulatePublic}`, `skipTxValidation=${skipTxValidation}`, `scopes=${scopes
|
|
751
|
+
throw this.#contextualizeError(err, inspect(txRequest), `simulatePublic=${simulatePublic}`, `skipTxValidation=${skipTxValidation}`, `scopes=${scopes.map((s)=>s.toString()).join(', ')}`);
|
|
694
752
|
}
|
|
695
753
|
});
|
|
696
754
|
}
|
|
@@ -698,7 +756,7 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
698
756
|
* Executes a contract utility function.
|
|
699
757
|
* @param call - The function call containing the function details, arguments, and target contract address.
|
|
700
758
|
*/ executeUtility(call, { authwits, scopes } = {
|
|
701
|
-
scopes:
|
|
759
|
+
scopes: []
|
|
702
760
|
}) {
|
|
703
761
|
// We disable concurrent executions since those might execute oracles which read and write to the PXE stores (e.g.
|
|
704
762
|
// to the capsules), and we need to prevent concurrent runs from interfering with one another (e.g. attempting to
|
|
@@ -707,13 +765,13 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
707
765
|
try {
|
|
708
766
|
const totalTimer = new Timer();
|
|
709
767
|
const syncTimer = new Timer();
|
|
710
|
-
await this
|
|
768
|
+
await this.#maybeSync();
|
|
711
769
|
const syncTime = syncTimer.ms();
|
|
712
770
|
const functionTimer = new Timer();
|
|
713
771
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
714
772
|
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
715
773
|
await this.contractSyncService.ensureContractSynced(call.to, call.selector, (privateSyncCall, execScopes)=>this.#executeUtility(contractFunctionSimulator, privateSyncCall, [], execScopes, jobId), anchorBlockHeader, jobId, scopes);
|
|
716
|
-
const executionResult = await this.#executeUtility(contractFunctionSimulator, call, authwits ?? [], scopes, jobId);
|
|
774
|
+
const { result: executionResult, offchainEffects } = await this.#executeUtility(contractFunctionSimulator, call, authwits ?? [], scopes, jobId);
|
|
717
775
|
const functionTime = functionTimer.ms();
|
|
718
776
|
const totalTime = totalTimer.ms();
|
|
719
777
|
const perFunction = [
|
|
@@ -731,6 +789,8 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
731
789
|
const simulationStats = contractFunctionSimulator.getStats();
|
|
732
790
|
return {
|
|
733
791
|
result: executionResult,
|
|
792
|
+
offchainEffects,
|
|
793
|
+
anchorBlockTimestamp: anchorBlockHeader.globalVariables.timestamp,
|
|
734
794
|
stats: {
|
|
735
795
|
timings,
|
|
736
796
|
nodeRPCCalls: simulationStats.nodeRPCCalls
|
|
@@ -739,7 +799,7 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
739
799
|
} catch (err) {
|
|
740
800
|
const { to, name, args } = call;
|
|
741
801
|
const stringifiedArgs = args.map((arg)=>arg.toString()).join(', ');
|
|
742
|
-
throw this.#contextualizeError(err, `executeUtility ${to}:${name}(${stringifiedArgs})`, `scopes=${scopes
|
|
802
|
+
throw this.#contextualizeError(err, `executeUtility ${to}:${name}(${stringifiedArgs})`, `scopes=${scopes.map((s)=>s.toString()).join(', ')}`);
|
|
743
803
|
}
|
|
744
804
|
});
|
|
745
805
|
}
|
|
@@ -758,7 +818,7 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
758
818
|
*/ async getPrivateEvents(eventSelector, filter) {
|
|
759
819
|
let anchorBlockNumber;
|
|
760
820
|
await this.#putInJobQueue(async (jobId)=>{
|
|
761
|
-
await this
|
|
821
|
+
await this.#maybeSync();
|
|
762
822
|
const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
|
|
763
823
|
anchorBlockNumber = anchorBlockHeader.getBlockNumber();
|
|
764
824
|
const contractFunctionSimulator = this.#getSimulatorForTx();
|
|
@@ -773,6 +833,7 @@ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store
|
|
|
773
833
|
* Stops the PXE's job queue and closes the backing store.
|
|
774
834
|
*/ async stop() {
|
|
775
835
|
await this.jobQueue.end();
|
|
836
|
+
await this.blockStateSynchronizer.stop();
|
|
776
837
|
await this.db.close();
|
|
777
838
|
}
|
|
778
839
|
}
|
|
@@ -17,7 +17,7 @@ export class AnchorBlockStore {
|
|
|
17
17
|
await this.#synchronizedHeader.set(header.toBuffer());
|
|
18
18
|
}
|
|
19
19
|
async getBlockHeader() {
|
|
20
|
-
const headerBuffer = await this.#synchronizedHeader.getAsync();
|
|
20
|
+
const headerBuffer = await this.#store.transactionAsync(()=>this.#synchronizedHeader.getAsync());
|
|
21
21
|
if (!headerBuffer) {
|
|
22
22
|
throw new Error(`Trying to get block header with a not-yet-synchronized PXE - this should never happen`);
|
|
23
23
|
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { AztecAsyncArray, AztecAsyncMap, AztecAsyncSingleton, Key } from '@aztec/kv-store';
|
|
2
|
+
/**
|
|
3
|
+
* This file contains helpers that produce stable, snapshot-friendly text representations of our kv-stores'
|
|
4
|
+
* contents (map / multimap / array / singleton). Used by the backwards compatibility tests in this directory to
|
|
5
|
+
* fingerprint the bytes PXE persists.
|
|
6
|
+
*
|
|
7
|
+
* Each backwards compatibility schema scenario test follows the same shape:
|
|
8
|
+
*
|
|
9
|
+
* 1. drive the production write path through the store class's public API.
|
|
10
|
+
* 2. re-open the underlying kv-store by name, bypassing the store abstraction layer (eg:
|
|
11
|
+
* `kvStore.openMap<K, Buffer>('foo')`) and snapshot it via the helpers below.
|
|
12
|
+
* 3. compare fresh snapshots with committed ones.
|
|
13
|
+
*
|
|
14
|
+
* Why text rather than buffers: Jest snapshots are stored as JS literals; `Buffer` instances render as the verbose
|
|
15
|
+
* `Buffer <01 02 03>` form, which clutters `.snap` files and resists clean diffs. Each collection's contents are
|
|
16
|
+
* normalized into strings before being fed to `toMatchSnapshot()`.
|
|
17
|
+
*/
|
|
18
|
+
/** A single map/multimap entry, rendered as strings for stable snapshotting. */
|
|
19
|
+
export type MapEntry = {
|
|
20
|
+
key: string;
|
|
21
|
+
value: string;
|
|
22
|
+
};
|
|
23
|
+
/** A single array entry, rendered as a string for stable snapshotting. */
|
|
24
|
+
export type ArrayEntry = {
|
|
25
|
+
index: number;
|
|
26
|
+
value: string;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Returns every entry of the given map (or multimap), with both keys and values rendered as strings, sorted by key
|
|
30
|
+
* with value as a tiebreaker.
|
|
31
|
+
*/
|
|
32
|
+
export declare function snapshotMap<K extends Key, V>(map: AztecAsyncMap<K, V>): Promise<MapEntry[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Returns the contents of `array` paired with their numeric indices, in insertion order.
|
|
35
|
+
*
|
|
36
|
+
* Unlike {@link snapshotMap}, no sort: arrays are inherently ordered by index and that order *is* part of the schema.
|
|
37
|
+
* The `index` field is preserved on each entry so any unintended reorder shows up in the diff.
|
|
38
|
+
*/
|
|
39
|
+
export declare function snapshotArray<V>(array: AztecAsyncArray<V>): Promise<ArrayEntry[]>;
|
|
40
|
+
/** Returns the singleton's value rendered as a string, or `null` if unset. */
|
|
41
|
+
export declare function snapshotSingleton<V>(singleton: AztecAsyncSingleton<V>): Promise<string | null>;
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3Zfc3RvcmVfc25hcHNob3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdG9yYWdlL2JhY2t3YXJkc19jb21wYXRpYmlsaXR5X3Rlc3RzL2t2X3N0b3JlX3NuYXBzaG90LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEc7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsZ0ZBQWdGO0FBQ2hGLE1BQU0sTUFBTSxRQUFRLEdBQUc7SUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDO0lBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQTtDQUFFLENBQUM7QUFFdEQsMEVBQTBFO0FBQzFFLE1BQU0sTUFBTSxVQUFVLEdBQUc7SUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDO0lBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQTtDQUFFLENBQUM7QUFFMUQ7OztHQUdHO0FBQ0gsd0JBQXNCLFdBQVcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FNakc7QUFFRDs7Ozs7R0FLRztBQUNILHdCQUFzQixhQUFhLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBT3ZGO0FBRUQsOEVBQThFO0FBQzlFLHdCQUFzQixpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBR3BHIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kv_store_snapshot.d.ts","sourceRoot":"","sources":["../../../src/storage/backwards_compatibility_tests/kv_store_snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,mBAAmB,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEhG;;;;;;;;;;;;;;;GAeG;AAEH,gFAAgF;AAChF,MAAM,MAAM,QAAQ,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtD,0EAA0E;AAC1E,MAAM,MAAM,UAAU,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D;;;GAGG;AACH,wBAAsB,WAAW,CAAC,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAMjG;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAOvF;AAED,8EAA8E;AAC9E,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGpG"}
|