@aztec/pxe 0.0.1-commit.7d4e6cd → 0.0.1-commit.7ffbba4
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/access_scopes.d.ts +9 -0
- package/dest/access_scopes.d.ts.map +1 -0
- package/dest/access_scopes.js +6 -0
- package/dest/bin/check_oracle_version.js +1 -1
- package/dest/block_synchronizer/block_synchronizer.d.ts +11 -5
- package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
- package/dest/block_synchronizer/block_synchronizer.js +72 -21
- package/dest/config/index.d.ts +4 -2
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +18 -1
- package/dest/config/package_info.js +1 -1
- package/dest/contract_function_simulator/benchmarked_node.d.ts +9 -0
- package/dest/contract_function_simulator/benchmarked_node.d.ts.map +1 -0
- package/dest/contract_function_simulator/benchmarked_node.js +77 -0
- package/dest/contract_function_simulator/contract_function_simulator.d.ts +57 -35
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +201 -87
- package/dest/contract_function_simulator/execution_note_cache.d.ts +18 -9
- package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_note_cache.js +45 -28
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +5 -5
- package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
- package/dest/contract_function_simulator/execution_tagging_index_cache.js +3 -3
- package/dest/contract_function_simulator/index.d.ts +2 -2
- package/dest/contract_function_simulator/index.d.ts.map +1 -1
- package/dest/contract_function_simulator/index.js +1 -1
- 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 +6 -5
- package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +1 -1
- 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 +1 -3
- 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 +4 -6
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +4 -10
- package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
- package/dest/contract_function_simulator/noir-structs/utility_context.js +7 -18
- package/dest/contract_function_simulator/oracle/interfaces.d.ts +54 -47
- package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -1
- package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +6 -6
- package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/note_packing_utils.js +8 -8
- package/dest/contract_function_simulator/oracle/oracle.d.ts +43 -42
- package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/oracle.js +175 -114
- package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -26
- package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution.js +1 -36
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +61 -66
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +113 -75
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +90 -55
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +156 -136
- package/dest/contract_logging.d.ts +22 -0
- package/dest/contract_logging.d.ts.map +1 -0
- package/dest/contract_logging.js +23 -0
- package/dest/contract_sync/contract_sync_service.d.ts +43 -0
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
- package/dest/contract_sync/contract_sync_service.js +97 -0
- package/dest/contract_sync/helpers.d.ts +29 -0
- package/dest/contract_sync/helpers.d.ts.map +1 -0
- package/dest/contract_sync/helpers.js +55 -0
- package/dest/debug/pxe_debug_utils.d.ts +24 -10
- package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
- package/dest/debug/pxe_debug_utils.js +28 -17
- package/dest/entrypoints/client/bundle/index.d.ts +4 -1
- package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/index.js +3 -0
- package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
- package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
- package/dest/entrypoints/client/bundle/utils.js +21 -7
- 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 +22 -8
- package/dest/entrypoints/pxe_creation_options.d.ts +3 -2
- package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
- package/dest/entrypoints/server/index.d.ts +5 -1
- package/dest/entrypoints/server/index.d.ts.map +1 -1
- package/dest/entrypoints/server/index.js +4 -0
- package/dest/entrypoints/server/utils.d.ts +1 -1
- package/dest/entrypoints/server/utils.d.ts.map +1 -1
- package/dest/entrypoints/server/utils.js +28 -9
- package/dest/events/event_service.d.ts +6 -6
- package/dest/events/event_service.d.ts.map +1 -1
- package/dest/events/event_service.js +19 -22
- package/dest/events/private_event_filter_validator.d.ts +5 -5
- package/dest/events/private_event_filter_validator.d.ts.map +1 -1
- package/dest/events/private_event_filter_validator.js +5 -6
- package/dest/job_coordinator/job_coordinator.d.ts +3 -2
- package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
- package/dest/job_coordinator/job_coordinator.js +3 -2
- package/dest/logs/log_service.d.ts +8 -5
- package/dest/logs/log_service.d.ts.map +1 -1
- package/dest/logs/log_service.js +31 -33
- package/dest/notes/note_service.d.ts +10 -9
- package/dest/notes/note_service.d.ts.map +1 -1
- package/dest/notes/note_service.js +34 -38
- package/dest/notes_filter.d.ts +25 -0
- package/dest/notes_filter.d.ts.map +1 -0
- package/dest/notes_filter.js +4 -0
- package/dest/oracle_version.d.ts +3 -3
- package/dest/oracle_version.d.ts.map +1 -1
- package/dest/oracle_version.js +5 -4
- 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 +3 -3
- package/dest/private_kernel/hints/index.d.ts.map +1 -1
- package/dest/private_kernel/hints/index.js +2 -2
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +29 -0
- package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
- package/dest/private_kernel/hints/{build_private_kernel_reset_private_inputs.js → private_kernel_reset_private_inputs_builder.js} +140 -73
- 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 +203 -0
- package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
- package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_execution_prover.js +22 -14
- package/dest/private_kernel/private_kernel_oracle.d.ts +23 -24
- package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
- package/dest/private_kernel/private_kernel_oracle.js +94 -2
- package/dest/pxe.d.ts +77 -59
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +132 -136
- package/dest/storage/address_store/address_store.d.ts +1 -1
- package/dest/storage/address_store/address_store.d.ts.map +1 -1
- package/dest/storage/address_store/address_store.js +12 -11
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
- package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
- package/dest/storage/anchor_block_store/anchor_block_store.js +8 -1
- package/dest/storage/capsule_store/capsule_store.d.ts +24 -9
- package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
- package/dest/storage/capsule_store/capsule_store.js +130 -23
- package/dest/storage/contract_store/contract_store.d.ts +42 -16
- package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
- package/dest/storage/contract_store/contract_store.js +157 -84
- package/dest/storage/metadata.d.ts +1 -1
- package/dest/storage/metadata.js +1 -1
- package/dest/storage/note_store/note_store.d.ts +50 -51
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +284 -263
- package/dest/storage/note_store/stored_note.d.ts +16 -0
- package/dest/storage/note_store/stored_note.d.ts.map +1 -0
- package/dest/storage/note_store/stored_note.js +43 -0
- package/dest/storage/private_event_store/private_event_store.d.ts +43 -8
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +226 -111
- package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
- package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
- package/dest/storage/private_event_store/stored_private_event.js +56 -0
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +16 -9
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/recipient_tagging_store.js +88 -19
- package/dest/storage/tagging_store/sender_address_book_store.d.ts +1 -1
- package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_address_book_store.js +20 -14
- package/dest/storage/tagging_store/sender_tagging_store.d.ts +20 -10
- package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
- package/dest/storage/tagging_store/sender_tagging_store.js +253 -101
- package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
- package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
- package/dest/tagging/get_all_logs_by_tags.js +60 -0
- package/dest/tagging/index.d.ts +3 -2
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +2 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +5 -5
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +11 -11
- package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +7 -7
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
- package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +16 -12
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +5 -8
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
- package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +8 -11
- package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +1 -1
- 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 +5 -8
- package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +7 -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 +23 -19
- package/package.json +27 -18
- package/src/access_scopes.ts +9 -0
- package/src/bin/check_oracle_version.ts +1 -0
- package/src/block_synchronizer/block_synchronizer.ts +91 -33
- package/src/config/index.ts +15 -1
- package/src/config/package_info.ts +1 -1
- package/src/contract_function_simulator/benchmarked_node.ts +103 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +352 -151
- package/src/contract_function_simulator/execution_note_cache.ts +44 -25
- package/src/contract_function_simulator/execution_tagging_index_cache.ts +5 -5
- package/src/contract_function_simulator/index.ts +1 -1
- package/src/contract_function_simulator/noir-structs/event_validation_request.ts +9 -6
- package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +1 -4
- package/src/contract_function_simulator/noir-structs/note_validation_request.ts +4 -7
- package/src/contract_function_simulator/noir-structs/utility_context.ts +6 -25
- package/src/contract_function_simulator/oracle/interfaces.ts +63 -59
- package/src/contract_function_simulator/oracle/note_packing_utils.ts +10 -10
- package/src/contract_function_simulator/oracle/oracle.ts +195 -163
- package/src/contract_function_simulator/oracle/private_execution.ts +2 -68
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +154 -169
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +229 -153
- package/src/contract_logging.ts +39 -0
- package/src/contract_sync/contract_sync_service.ts +152 -0
- package/src/contract_sync/helpers.ts +98 -0
- package/src/debug/pxe_debug_utils.ts +63 -18
- package/src/entrypoints/client/bundle/index.ts +3 -0
- package/src/entrypoints/client/bundle/utils.ts +16 -15
- package/src/entrypoints/client/lazy/index.ts +3 -0
- package/src/entrypoints/client/lazy/utils.ts +17 -15
- package/src/entrypoints/pxe_creation_options.ts +2 -1
- package/src/entrypoints/server/index.ts +4 -0
- package/src/entrypoints/server/utils.ts +22 -26
- package/src/events/event_service.ts +17 -25
- package/src/events/private_event_filter_validator.ts +3 -5
- package/src/job_coordinator/job_coordinator.ts +4 -3
- package/src/logs/log_service.ts +51 -40
- package/src/notes/note_service.ts +41 -45
- package/src/notes_filter.ts +26 -0
- package/src/oracle_version.ts +5 -4
- 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 +2 -2
- package/src/private_kernel/hints/{build_private_kernel_reset_private_inputs.ts → private_kernel_reset_private_inputs_builder.ts} +195 -136
- package/src/private_kernel/hints/test_utils.ts +325 -0
- package/src/private_kernel/private_kernel_execution_prover.ts +26 -16
- package/src/private_kernel/private_kernel_oracle.ts +116 -37
- package/src/pxe.ts +243 -213
- package/src/storage/address_store/address_store.ts +15 -15
- package/src/storage/anchor_block_store/anchor_block_store.ts +8 -0
- package/src/storage/capsule_store/capsule_store.ts +159 -23
- package/src/storage/contract_store/contract_store.ts +186 -96
- package/src/storage/metadata.ts +1 -1
- package/src/storage/note_store/note_store.ts +326 -320
- package/src/storage/note_store/stored_note.ts +48 -0
- package/src/storage/private_event_store/private_event_store.ts +292 -124
- package/src/storage/private_event_store/stored_private_event.ts +73 -0
- package/src/storage/tagging_store/recipient_tagging_store.ts +111 -21
- package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
- package/src/storage/tagging_store/sender_tagging_store.ts +296 -111
- package/src/tagging/get_all_logs_by_tags.ts +92 -0
- package/src/tagging/index.ts +2 -1
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +22 -14
- package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +17 -16
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +12 -14
- package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +5 -17
- package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +26 -23
- package/dest/contract_function_simulator/proxied_node.d.ts +0 -9
- package/dest/contract_function_simulator/proxied_node.d.ts.map +0 -1
- package/dest/contract_function_simulator/proxied_node.js +0 -27
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +0 -28
- package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
- 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/private_kernel/private_kernel_oracle_impl.d.ts +0 -46
- package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +0 -1
- package/dest/private_kernel/private_kernel_oracle_impl.js +0 -85
- package/dest/public_storage/public_storage_service.d.ts +0 -24
- package/dest/public_storage/public_storage_service.d.ts.map +0 -1
- package/dest/public_storage/public_storage_service.js +0 -26
- package/dest/tree_membership/tree_membership_service.d.ts +0 -52
- package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
- package/dest/tree_membership/tree_membership_service.js +0 -84
- package/src/contract_function_simulator/proxied_node.ts +0 -33
- package/src/private_kernel/private_kernel_oracle_impl.ts +0 -127
- package/src/public_storage/public_storage_service.ts +0 -33
- package/src/tree_membership/tree_membership_service.ts +0 -112
|
@@ -1,35 +1,38 @@
|
|
|
1
|
+
import type { ARCHIVE_HEIGHT, NOTE_HASH_TREE_HEIGHT } from '@aztec/constants';
|
|
1
2
|
import type { BlockNumber } from '@aztec/foundation/branded-types';
|
|
2
3
|
import { Aes128 } from '@aztec/foundation/crypto/aes128';
|
|
3
4
|
import { Fr } from '@aztec/foundation/curves/bn254';
|
|
4
5
|
import { Point } from '@aztec/foundation/curves/grumpkin';
|
|
5
|
-
import { LogLevels,
|
|
6
|
+
import { LogLevels, type Logger, createLogger } from '@aztec/foundation/log';
|
|
7
|
+
import type { MembershipWitness } from '@aztec/foundation/trees';
|
|
6
8
|
import type { KeyStore } from '@aztec/key-store';
|
|
7
9
|
import type { AuthWitness } from '@aztec/stdlib/auth-witness';
|
|
8
10
|
import { AztecAddress } from '@aztec/stdlib/aztec-address';
|
|
9
|
-
import
|
|
11
|
+
import { BlockHash } from '@aztec/stdlib/block';
|
|
12
|
+
import type { CompleteAddress, ContractInstance, PartialAddress } from '@aztec/stdlib/contract';
|
|
10
13
|
import { siloNullifier } from '@aztec/stdlib/hash';
|
|
11
14
|
import type { AztecNode } from '@aztec/stdlib/interfaces/server';
|
|
12
15
|
import type { KeyValidationRequest } from '@aztec/stdlib/kernel';
|
|
13
|
-
import { computeAddressSecret } from '@aztec/stdlib/keys';
|
|
16
|
+
import { type PublicKeys, computeAddressSecret } from '@aztec/stdlib/keys';
|
|
14
17
|
import { deriveEcdhSharedSecret } from '@aztec/stdlib/logs';
|
|
18
|
+
import { getNonNullifiedL1ToL2MessageWitness } from '@aztec/stdlib/messaging';
|
|
15
19
|
import type { NoteStatus } from '@aztec/stdlib/note';
|
|
16
20
|
import { MerkleTreeId, type NullifierMembershipWitness, PublicDataWitness } from '@aztec/stdlib/trees';
|
|
17
21
|
import type { BlockHeader, Capsule } from '@aztec/stdlib/tx';
|
|
18
22
|
|
|
23
|
+
import type { AccessScopes } from '../../access_scopes.js';
|
|
24
|
+
import { createContractLogger, logContractMessage } from '../../contract_logging.js';
|
|
19
25
|
import { EventService } from '../../events/event_service.js';
|
|
20
26
|
import { LogService } from '../../logs/log_service.js';
|
|
21
27
|
import { NoteService } from '../../notes/note_service.js';
|
|
22
28
|
import { ORACLE_VERSION } from '../../oracle_version.js';
|
|
23
|
-
import { PublicStorageService } from '../../public_storage/public_storage_service.js';
|
|
24
29
|
import type { AddressStore } from '../../storage/address_store/address_store.js';
|
|
25
|
-
import type { AnchorBlockStore } from '../../storage/anchor_block_store/anchor_block_store.js';
|
|
26
30
|
import type { CapsuleStore } from '../../storage/capsule_store/capsule_store.js';
|
|
27
31
|
import type { ContractStore } from '../../storage/contract_store/contract_store.js';
|
|
28
32
|
import type { NoteStore } from '../../storage/note_store/note_store.js';
|
|
29
33
|
import type { PrivateEventStore } from '../../storage/private_event_store/private_event_store.js';
|
|
30
34
|
import type { RecipientTaggingStore } from '../../storage/tagging_store/recipient_tagging_store.js';
|
|
31
35
|
import type { SenderAddressBookStore } from '../../storage/tagging_store/sender_address_book_store.js';
|
|
32
|
-
import { TreeMembershipService } from '../../tree_membership/tree_membership_service.js';
|
|
33
36
|
import { EventValidationRequest } from '../noir-structs/event_validation_request.js';
|
|
34
37
|
import { LogRetrievalRequest } from '../noir-structs/log_retrieval_request.js';
|
|
35
38
|
import { LogRetrievalResponse } from '../noir-structs/log_retrieval_response.js';
|
|
@@ -39,6 +42,27 @@ import { pickNotes } from '../pick_notes.js';
|
|
|
39
42
|
import type { IMiscOracle, IUtilityExecutionOracle, NoteData } from './interfaces.js';
|
|
40
43
|
import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
|
|
41
44
|
|
|
45
|
+
/** Args for UtilityExecutionOracle constructor. */
|
|
46
|
+
export type UtilityExecutionOracleArgs = {
|
|
47
|
+
contractAddress: AztecAddress;
|
|
48
|
+
/** List of transient auth witnesses to be used during this simulation */
|
|
49
|
+
authWitnesses: AuthWitness[];
|
|
50
|
+
capsules: Capsule[]; // TODO(#12425): Rename to transientCapsules
|
|
51
|
+
anchorBlockHeader: BlockHeader;
|
|
52
|
+
contractStore: ContractStore;
|
|
53
|
+
noteStore: NoteStore;
|
|
54
|
+
keyStore: KeyStore;
|
|
55
|
+
addressStore: AddressStore;
|
|
56
|
+
aztecNode: AztecNode;
|
|
57
|
+
recipientTaggingStore: RecipientTaggingStore;
|
|
58
|
+
senderAddressBookStore: SenderAddressBookStore;
|
|
59
|
+
capsuleStore: CapsuleStore;
|
|
60
|
+
privateEventStore: PrivateEventStore;
|
|
61
|
+
jobId: string;
|
|
62
|
+
log?: ReturnType<typeof createLogger>;
|
|
63
|
+
scopes: AccessScopes;
|
|
64
|
+
};
|
|
65
|
+
|
|
42
66
|
/**
|
|
43
67
|
* The oracle for an execution of utility contract functions.
|
|
44
68
|
*/
|
|
@@ -46,47 +70,56 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
46
70
|
isMisc = true as const;
|
|
47
71
|
isUtility = true as const;
|
|
48
72
|
|
|
49
|
-
private
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
+
private contractLogger: Logger | undefined;
|
|
74
|
+
|
|
75
|
+
protected readonly contractAddress: AztecAddress;
|
|
76
|
+
protected readonly authWitnesses: AuthWitness[];
|
|
77
|
+
protected readonly capsules: Capsule[];
|
|
78
|
+
protected readonly anchorBlockHeader: BlockHeader;
|
|
79
|
+
protected readonly contractStore: ContractStore;
|
|
80
|
+
protected readonly noteStore: NoteStore;
|
|
81
|
+
protected readonly keyStore: KeyStore;
|
|
82
|
+
protected readonly addressStore: AddressStore;
|
|
83
|
+
protected readonly aztecNode: AztecNode;
|
|
84
|
+
protected readonly recipientTaggingStore: RecipientTaggingStore;
|
|
85
|
+
protected readonly senderAddressBookStore: SenderAddressBookStore;
|
|
86
|
+
protected readonly capsuleStore: CapsuleStore;
|
|
87
|
+
protected readonly privateEventStore: PrivateEventStore;
|
|
88
|
+
protected readonly jobId: string;
|
|
89
|
+
protected logger: ReturnType<typeof createLogger>;
|
|
90
|
+
protected readonly scopes: AccessScopes;
|
|
91
|
+
|
|
92
|
+
constructor(args: UtilityExecutionOracleArgs) {
|
|
93
|
+
this.contractAddress = args.contractAddress;
|
|
94
|
+
this.authWitnesses = args.authWitnesses;
|
|
95
|
+
this.capsules = args.capsules;
|
|
96
|
+
this.anchorBlockHeader = args.anchorBlockHeader;
|
|
97
|
+
this.contractStore = args.contractStore;
|
|
98
|
+
this.noteStore = args.noteStore;
|
|
99
|
+
this.keyStore = args.keyStore;
|
|
100
|
+
this.addressStore = args.addressStore;
|
|
101
|
+
this.aztecNode = args.aztecNode;
|
|
102
|
+
this.recipientTaggingStore = args.recipientTaggingStore;
|
|
103
|
+
this.senderAddressBookStore = args.senderAddressBookStore;
|
|
104
|
+
this.capsuleStore = args.capsuleStore;
|
|
105
|
+
this.privateEventStore = args.privateEventStore;
|
|
106
|
+
this.jobId = args.jobId;
|
|
107
|
+
this.logger = args.log ?? createLogger('simulator:client_view_context');
|
|
108
|
+
this.scopes = args.scopes;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
public assertCompatibleOracleVersion(version: number): void {
|
|
73
112
|
if (version !== ORACLE_VERSION) {
|
|
74
113
|
throw new Error(`Incompatible oracle version. Expected version ${ORACLE_VERSION}, got ${version}.`);
|
|
75
114
|
}
|
|
76
115
|
}
|
|
77
116
|
|
|
78
|
-
public
|
|
117
|
+
public getRandomField(): Fr {
|
|
79
118
|
return Fr.random();
|
|
80
119
|
}
|
|
81
120
|
|
|
82
|
-
public
|
|
83
|
-
return UtilityContext.
|
|
84
|
-
blockNumber: this.anchorBlockHeader.globalVariables.blockNumber,
|
|
85
|
-
timestamp: this.anchorBlockHeader.globalVariables.timestamp,
|
|
86
|
-
contractAddress: this.contractAddress,
|
|
87
|
-
version: this.anchorBlockHeader.globalVariables.version,
|
|
88
|
-
chainId: this.anchorBlockHeader.globalVariables.chainId,
|
|
89
|
-
});
|
|
121
|
+
public getUtilityContext(): UtilityContext {
|
|
122
|
+
return new UtilityContext(this.anchorBlockHeader, this.contractAddress);
|
|
90
123
|
}
|
|
91
124
|
|
|
92
125
|
/**
|
|
@@ -94,65 +127,93 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
94
127
|
* @param pkMHash - The master public key hash.
|
|
95
128
|
* @returns A Promise that resolves to nullifier keys.
|
|
96
129
|
* @throws If the keys are not registered in the key store.
|
|
130
|
+
* @throws If scopes are defined and the account is not in the scopes.
|
|
97
131
|
*/
|
|
98
|
-
public
|
|
132
|
+
public async getKeyValidationRequest(pkMHash: Fr): Promise<KeyValidationRequest> {
|
|
133
|
+
// If scopes are defined, check that the key belongs to an account in the scopes.
|
|
134
|
+
if (this.scopes !== 'ALL_SCOPES' && this.scopes.length > 0) {
|
|
135
|
+
let hasAccess = false;
|
|
136
|
+
for (let i = 0; i < this.scopes.length && !hasAccess; i++) {
|
|
137
|
+
if (await this.keyStore.accountHasKey(this.scopes[i], pkMHash)) {
|
|
138
|
+
hasAccess = true;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
if (!hasAccess) {
|
|
142
|
+
throw new Error(`Key validation request denied: no scoped account has a key with hash ${pkMHash.toString()}.`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
99
145
|
return this.keyStore.getKeyValidationRequest(pkMHash, this.contractAddress);
|
|
100
146
|
}
|
|
101
147
|
|
|
102
148
|
/**
|
|
103
|
-
* Fetches the index and sibling path of a leaf at a given block from
|
|
104
|
-
* @param
|
|
105
|
-
*
|
|
106
|
-
* @param
|
|
107
|
-
* @returns The index and sibling path
|
|
149
|
+
* Fetches the index and sibling path of a leaf at a given block from the note hash tree.
|
|
150
|
+
* @param anchorBlockHash - The hash of a block that contains the note hash tree root in which to find the membership
|
|
151
|
+
* witness.
|
|
152
|
+
* @param noteHash - The note hash to find in the note hash tree.
|
|
153
|
+
* @returns The membership witness containing the leaf index and sibling path
|
|
108
154
|
*/
|
|
109
|
-
public
|
|
110
|
-
|
|
111
|
-
|
|
155
|
+
public getNoteHashMembershipWitness(
|
|
156
|
+
anchorBlockHash: BlockHash,
|
|
157
|
+
noteHash: Fr,
|
|
158
|
+
): Promise<MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT> | undefined> {
|
|
159
|
+
return this.aztecNode.getNoteHashMembershipWitness(anchorBlockHash, noteHash);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Fetches the index and sibling path of a block hash in the archive tree.
|
|
164
|
+
*
|
|
165
|
+
* Block hashes are the leaves of the archive tree. Each time a new block is added to the chain,
|
|
166
|
+
* its block hash is appended as a new leaf to the archive tree.
|
|
167
|
+
*
|
|
168
|
+
* @param anchorBlockHash - The hash of a block that contains the archive tree root in which to find the membership
|
|
169
|
+
* witness.
|
|
170
|
+
* @param blockHash - The block hash to find in the archive tree.
|
|
171
|
+
* @returns The membership witness containing the leaf index and sibling path
|
|
172
|
+
*/
|
|
173
|
+
public getBlockHashMembershipWitness(
|
|
174
|
+
anchorBlockHash: BlockHash,
|
|
175
|
+
blockHash: BlockHash,
|
|
176
|
+
): Promise<MembershipWitness<typeof ARCHIVE_HEIGHT> | undefined> {
|
|
177
|
+
return this.aztecNode.getBlockHashMembershipWitness(anchorBlockHash, blockHash);
|
|
112
178
|
}
|
|
113
179
|
|
|
114
180
|
/**
|
|
115
181
|
* Returns a nullifier membership witness for a given nullifier at a given block.
|
|
116
|
-
* @param
|
|
182
|
+
* @param blockHash - The block hash at which to get the index.
|
|
117
183
|
* @param nullifier - Nullifier we try to find witness for.
|
|
118
184
|
* @returns The nullifier membership witness (if found).
|
|
119
185
|
*/
|
|
120
|
-
public
|
|
121
|
-
|
|
186
|
+
public getNullifierMembershipWitness(
|
|
187
|
+
blockHash: BlockHash,
|
|
122
188
|
nullifier: Fr,
|
|
123
189
|
): Promise<NullifierMembershipWitness | undefined> {
|
|
124
|
-
return
|
|
190
|
+
return this.aztecNode.getNullifierMembershipWitness(blockHash, nullifier);
|
|
125
191
|
}
|
|
126
192
|
|
|
127
193
|
/**
|
|
128
194
|
* Returns a low nullifier membership witness for a given nullifier at a given block.
|
|
129
|
-
* @param
|
|
195
|
+
* @param blockHash - The block hash at which to get the index.
|
|
130
196
|
* @param nullifier - Nullifier we try to find the low nullifier witness for.
|
|
131
197
|
* @returns The low nullifier membership witness (if found).
|
|
132
198
|
* @remarks Low nullifier witness can be used to perform a nullifier non-inclusion proof by leveraging the "linked
|
|
133
199
|
* list structure" of leaves and proving that a lower nullifier is pointing to a bigger next value than the nullifier
|
|
134
200
|
* we are trying to prove non-inclusion for.
|
|
135
201
|
*/
|
|
136
|
-
public
|
|
137
|
-
|
|
202
|
+
public getLowNullifierMembershipWitness(
|
|
203
|
+
blockHash: BlockHash,
|
|
138
204
|
nullifier: Fr,
|
|
139
205
|
): Promise<NullifierMembershipWitness | undefined> {
|
|
140
|
-
|
|
141
|
-
return await treeMembershipService.getLowNullifierMembershipWitness(blockNumber, nullifier);
|
|
206
|
+
return this.aztecNode.getLowNullifierMembershipWitness(blockHash, nullifier);
|
|
142
207
|
}
|
|
143
208
|
|
|
144
209
|
/**
|
|
145
210
|
* Returns a public data tree witness for a given leaf slot at a given block.
|
|
146
|
-
* @param
|
|
211
|
+
* @param blockHash - The block hash at which to get the index.
|
|
147
212
|
* @param leafSlot - The slot of the public data tree to get the witness for.
|
|
148
213
|
* @returns - The witness
|
|
149
214
|
*/
|
|
150
|
-
public
|
|
151
|
-
|
|
152
|
-
leafSlot: Fr,
|
|
153
|
-
): Promise<PublicDataWitness | undefined> {
|
|
154
|
-
const treeMembershipService = new TreeMembershipService(this.aztecNode, this.anchorBlockStore);
|
|
155
|
-
return await treeMembershipService.getPublicDataWitness(blockNumber, leafSlot);
|
|
215
|
+
public getPublicDataWitness(blockHash: BlockHash, leafSlot: Fr): Promise<PublicDataWitness | undefined> {
|
|
216
|
+
return this.aztecNode.getPublicDataWitness(blockHash, leafSlot);
|
|
156
217
|
}
|
|
157
218
|
|
|
158
219
|
/**
|
|
@@ -160,27 +221,32 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
160
221
|
* @param blockNumber - The number of a block of which to get the block header.
|
|
161
222
|
* @returns Block extracted from a block with block number `blockNumber`.
|
|
162
223
|
*/
|
|
163
|
-
public async
|
|
164
|
-
const anchorBlockNumber =
|
|
224
|
+
public async getBlockHeader(blockNumber: BlockNumber): Promise<BlockHeader | undefined> {
|
|
225
|
+
const anchorBlockNumber = this.anchorBlockHeader.getBlockNumber();
|
|
165
226
|
if (blockNumber > anchorBlockNumber) {
|
|
166
227
|
throw new Error(`Block number ${blockNumber} is higher than current block ${anchorBlockNumber}`);
|
|
167
228
|
}
|
|
168
229
|
|
|
169
230
|
const block = await this.aztecNode.getBlock(blockNumber);
|
|
170
|
-
return block?.
|
|
231
|
+
return block?.header;
|
|
171
232
|
}
|
|
172
233
|
|
|
173
234
|
/**
|
|
174
|
-
* Retrieve the
|
|
235
|
+
* Retrieve the public keys and partial address associated to a given address.
|
|
175
236
|
* @param account - The account address.
|
|
176
|
-
* @returns
|
|
177
|
-
* @throws An error if the account is not registered in the database.
|
|
237
|
+
* @returns The public keys and partial address, or `undefined` if the account is not registered.
|
|
178
238
|
*/
|
|
179
|
-
public
|
|
180
|
-
|
|
239
|
+
public async tryGetPublicKeysAndPartialAddress(
|
|
240
|
+
account: AztecAddress,
|
|
241
|
+
): Promise<{ publicKeys: PublicKeys; partialAddress: PartialAddress } | undefined> {
|
|
242
|
+
const completeAddress = await this.addressStore.getCompleteAddress(account);
|
|
243
|
+
if (!completeAddress) {
|
|
244
|
+
return undefined;
|
|
245
|
+
}
|
|
246
|
+
return { publicKeys: completeAddress.publicKeys, partialAddress: completeAddress.partialAddress };
|
|
181
247
|
}
|
|
182
248
|
|
|
183
|
-
protected async
|
|
249
|
+
protected async getCompleteAddressOrFail(account: AztecAddress): Promise<CompleteAddress> {
|
|
184
250
|
const completeAddress = await this.addressStore.getCompleteAddress(account);
|
|
185
251
|
if (!completeAddress) {
|
|
186
252
|
throw new Error(
|
|
@@ -196,11 +262,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
196
262
|
* @param address - Address.
|
|
197
263
|
* @returns A contract instance.
|
|
198
264
|
*/
|
|
199
|
-
public
|
|
200
|
-
return this.getContractInstance(address);
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
protected async getContractInstance(address: AztecAddress): Promise<ContractInstance> {
|
|
265
|
+
public async getContractInstance(address: AztecAddress): Promise<ContractInstance> {
|
|
204
266
|
const instance = await this.contractStore.getContractInstance(address);
|
|
205
267
|
if (!instance) {
|
|
206
268
|
throw new Error(`No contract instance found for address ${address.toString()}`);
|
|
@@ -214,7 +276,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
214
276
|
* @param messageHash - Hash of the message to authenticate.
|
|
215
277
|
* @returns Authentication witness for the requested message hash.
|
|
216
278
|
*/
|
|
217
|
-
public
|
|
279
|
+
public getAuthWitness(messageHash: Fr): Promise<Fr[] | undefined> {
|
|
218
280
|
return Promise.resolve(this.authWitnesses.find(w => w.requestHash.equals(messageHash))?.witness);
|
|
219
281
|
}
|
|
220
282
|
|
|
@@ -240,7 +302,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
240
302
|
* @param status - The status of notes to fetch.
|
|
241
303
|
* @returns Array of note data.
|
|
242
304
|
*/
|
|
243
|
-
public async
|
|
305
|
+
public async getNotes(
|
|
244
306
|
owner: AztecAddress | undefined,
|
|
245
307
|
storageSlot: Fr,
|
|
246
308
|
numSelects: number,
|
|
@@ -257,7 +319,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
257
319
|
offset: number,
|
|
258
320
|
status: NoteStatus,
|
|
259
321
|
): Promise<NoteData[]> {
|
|
260
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.
|
|
322
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
261
323
|
|
|
262
324
|
const dbNotes = await noteService.getNotes(this.contractAddress, owner, storageSlot, status, this.scopes);
|
|
263
325
|
return pickNotes<NoteData>(dbNotes, {
|
|
@@ -280,11 +342,15 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
280
342
|
* @param innerNullifier - The inner nullifier.
|
|
281
343
|
* @returns A boolean indicating whether the nullifier exists in the tree or not.
|
|
282
344
|
*/
|
|
283
|
-
public async
|
|
284
|
-
const nullifier = await
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
345
|
+
public async checkNullifierExists(innerNullifier: Fr) {
|
|
346
|
+
const [nullifier, anchorBlockHash] = await Promise.all([
|
|
347
|
+
siloNullifier(this.contractAddress, innerNullifier!),
|
|
348
|
+
this.anchorBlockHeader.hash(),
|
|
349
|
+
]);
|
|
350
|
+
const [leafIndex] = await this.aztecNode.findLeavesIndexes(anchorBlockHash, MerkleTreeId.NULLIFIER_TREE, [
|
|
351
|
+
nullifier,
|
|
352
|
+
]);
|
|
353
|
+
return leafIndex?.data !== undefined;
|
|
288
354
|
}
|
|
289
355
|
|
|
290
356
|
/**
|
|
@@ -295,71 +361,83 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
295
361
|
* @dev Contract address and secret are only used to compute the nullifier to get non-nullified messages
|
|
296
362
|
* @returns The l1 to l2 membership witness (index of message in the tree and sibling path).
|
|
297
363
|
*/
|
|
298
|
-
public async
|
|
299
|
-
const
|
|
300
|
-
|
|
364
|
+
public async getL1ToL2MembershipWitness(contractAddress: AztecAddress, messageHash: Fr, secret: Fr) {
|
|
365
|
+
const [messageIndex, siblingPath] = await getNonNullifiedL1ToL2MessageWitness(
|
|
366
|
+
this.aztecNode,
|
|
301
367
|
contractAddress,
|
|
302
368
|
messageHash,
|
|
303
369
|
secret,
|
|
304
370
|
);
|
|
305
371
|
|
|
306
|
-
// Assuming messageIndex is what you intended to use for the index in MessageLoadOracleInputs
|
|
307
372
|
return new MessageLoadOracleInputs(messageIndex, siblingPath);
|
|
308
373
|
}
|
|
309
374
|
|
|
310
375
|
/**
|
|
311
376
|
* Read the public storage data.
|
|
377
|
+
* @param blockHash - The block hash to read storage at.
|
|
312
378
|
* @param contractAddress - The address to read storage from.
|
|
313
379
|
* @param startStorageSlot - The starting storage slot.
|
|
314
|
-
* @param blockNumber - The block number to read storage at.
|
|
315
380
|
* @param numberOfElements - Number of elements to read from the starting storage slot.
|
|
316
381
|
*/
|
|
317
|
-
public async
|
|
382
|
+
public async storageRead(
|
|
383
|
+
blockHash: BlockHash,
|
|
318
384
|
contractAddress: AztecAddress,
|
|
319
385
|
startStorageSlot: Fr,
|
|
320
|
-
blockNumber: BlockNumber,
|
|
321
386
|
numberOfElements: number,
|
|
322
387
|
) {
|
|
323
|
-
const
|
|
324
|
-
|
|
388
|
+
const slots = Array(numberOfElements)
|
|
389
|
+
.fill(0)
|
|
390
|
+
.map((_, i) => new Fr(startStorageSlot.value + BigInt(i)));
|
|
391
|
+
|
|
392
|
+
const values = await Promise.all(
|
|
393
|
+
slots.map(storageSlot => this.aztecNode.getPublicStorageAt(blockHash, contractAddress, storageSlot)),
|
|
394
|
+
);
|
|
325
395
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
396
|
+
this.logger.debug(
|
|
397
|
+
`Oracle storage read: slots=[${slots.map(slot => slot.toString()).join(', ')}] address=${contractAddress.toString()} values=[${values.join(', ')}]`,
|
|
398
|
+
);
|
|
399
|
+
|
|
400
|
+
return values;
|
|
401
|
+
}
|
|
331
402
|
|
|
332
|
-
|
|
333
|
-
|
|
403
|
+
/**
|
|
404
|
+
* Returns a per-contract logger whose output is prefixed with `contract_log::<name>(<addrAbbrev>)`.
|
|
405
|
+
*/
|
|
406
|
+
async #getContractLogger(): Promise<Logger> {
|
|
407
|
+
if (!this.contractLogger) {
|
|
408
|
+
// Purpose of instanceId is to distinguish logs from different instances of the same component. It makes sense
|
|
409
|
+
// to re-use jobId as instanceId here as executions of different PXE jobs are isolated.
|
|
410
|
+
this.contractLogger = await createContractLogger(
|
|
411
|
+
this.contractAddress,
|
|
412
|
+
addr => this.contractStore.getDebugContractName(addr),
|
|
413
|
+
{ instanceId: this.jobId },
|
|
334
414
|
);
|
|
335
|
-
values.push(value);
|
|
336
415
|
}
|
|
337
|
-
return
|
|
416
|
+
return this.contractLogger;
|
|
338
417
|
}
|
|
339
418
|
|
|
340
|
-
public
|
|
419
|
+
public async log(level: number, message: string, fields: Fr[]): Promise<void> {
|
|
341
420
|
if (!LogLevels[level]) {
|
|
342
|
-
throw new Error(`Invalid
|
|
421
|
+
throw new Error(`Invalid log level: ${level}`);
|
|
343
422
|
}
|
|
344
|
-
const
|
|
345
|
-
|
|
423
|
+
const logger = await this.#getContractLogger();
|
|
424
|
+
logContractMessage(logger, LogLevels[level], message, fields);
|
|
346
425
|
}
|
|
347
426
|
|
|
348
|
-
public async
|
|
427
|
+
public async fetchTaggedLogs(pendingTaggedLogArrayBaseSlot: Fr) {
|
|
349
428
|
const logService = new LogService(
|
|
350
429
|
this.aztecNode,
|
|
351
|
-
this.
|
|
430
|
+
this.anchorBlockHeader,
|
|
352
431
|
this.keyStore,
|
|
353
432
|
this.capsuleStore,
|
|
354
433
|
this.recipientTaggingStore,
|
|
355
434
|
this.senderAddressBookStore,
|
|
356
435
|
this.addressStore,
|
|
436
|
+
this.jobId,
|
|
437
|
+
this.logger.getBindings(),
|
|
357
438
|
);
|
|
358
439
|
|
|
359
|
-
await logService.
|
|
360
|
-
|
|
361
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockStore);
|
|
362
|
-
await noteService.syncNoteNullifiers(this.contractAddress);
|
|
440
|
+
await logService.fetchTaggedLogs(this.contractAddress, pendingTaggedLogArrayBaseSlot, this.scopes);
|
|
363
441
|
}
|
|
364
442
|
|
|
365
443
|
/**
|
|
@@ -372,12 +450,14 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
372
450
|
* @param noteValidationRequestsArrayBaseSlot - The base slot of capsule array containing note validation requests.
|
|
373
451
|
* @param eventValidationRequestsArrayBaseSlot - The base slot of capsule array containing event validation requests.
|
|
374
452
|
*/
|
|
375
|
-
public async
|
|
453
|
+
public async validateAndStoreEnqueuedNotesAndEvents(
|
|
376
454
|
contractAddress: AztecAddress,
|
|
377
455
|
noteValidationRequestsArrayBaseSlot: Fr,
|
|
378
456
|
eventValidationRequestsArrayBaseSlot: Fr,
|
|
457
|
+
maxNotePackedLen: number,
|
|
458
|
+
maxEventSerializedLen: number,
|
|
379
459
|
) {
|
|
380
|
-
// TODO(#10727): allow other contracts to
|
|
460
|
+
// TODO(#10727): allow other contracts to store notes
|
|
381
461
|
if (!this.contractAddress.equals(contractAddress)) {
|
|
382
462
|
throw new Error(`Got a note validation request from ${contractAddress}, expected ${this.contractAddress}`);
|
|
383
463
|
}
|
|
@@ -385,16 +465,16 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
385
465
|
// We read all note and event validation requests and process them all concurrently. This makes the process much
|
|
386
466
|
// faster as we don't need to wait for the network round-trip.
|
|
387
467
|
const noteValidationRequests = (
|
|
388
|
-
await this.capsuleStore.readCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot)
|
|
389
|
-
).map(NoteValidationRequest.fromFields);
|
|
468
|
+
await this.capsuleStore.readCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot, this.jobId)
|
|
469
|
+
).map(fields => NoteValidationRequest.fromFields(fields, maxNotePackedLen));
|
|
390
470
|
|
|
391
471
|
const eventValidationRequests = (
|
|
392
|
-
await this.capsuleStore.readCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot)
|
|
393
|
-
).map(EventValidationRequest.fromFields);
|
|
472
|
+
await this.capsuleStore.readCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, this.jobId)
|
|
473
|
+
).map(fields => EventValidationRequest.fromFields(fields, maxEventSerializedLen));
|
|
394
474
|
|
|
395
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.
|
|
396
|
-
const
|
|
397
|
-
noteService.
|
|
475
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
476
|
+
const noteStorePromises = noteValidationRequests.map(request =>
|
|
477
|
+
noteService.validateAndStoreNote(
|
|
398
478
|
request.contractAddress,
|
|
399
479
|
request.owner,
|
|
400
480
|
request.storageSlot,
|
|
@@ -408,9 +488,9 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
408
488
|
),
|
|
409
489
|
);
|
|
410
490
|
|
|
411
|
-
const eventService = new EventService(this.
|
|
412
|
-
const
|
|
413
|
-
eventService.
|
|
491
|
+
const eventService = new EventService(this.anchorBlockHeader, this.aztecNode, this.privateEventStore, this.jobId);
|
|
492
|
+
const eventStorePromises = eventValidationRequests.map(request =>
|
|
493
|
+
eventService.validateAndStoreEvent(
|
|
414
494
|
request.contractAddress,
|
|
415
495
|
request.eventTypeId,
|
|
416
496
|
request.randomness,
|
|
@@ -421,14 +501,14 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
421
501
|
),
|
|
422
502
|
);
|
|
423
503
|
|
|
424
|
-
await Promise.all([...
|
|
504
|
+
await Promise.all([...noteStorePromises, ...eventStorePromises]);
|
|
425
505
|
|
|
426
506
|
// Requests are cleared once we're done.
|
|
427
|
-
await this.capsuleStore.setCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot, []);
|
|
428
|
-
await this.capsuleStore.setCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, []);
|
|
507
|
+
await this.capsuleStore.setCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot, [], this.jobId);
|
|
508
|
+
await this.capsuleStore.setCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, [], this.jobId);
|
|
429
509
|
}
|
|
430
510
|
|
|
431
|
-
public async
|
|
511
|
+
public async bulkRetrieveLogs(
|
|
432
512
|
contractAddress: AztecAddress,
|
|
433
513
|
logRetrievalRequestsArrayBaseSlot: Fr,
|
|
434
514
|
logRetrievalResponsesArrayBaseSlot: Fr,
|
|
@@ -441,41 +521,45 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
441
521
|
// We read all log retrieval requests and process them all concurrently. This makes the process much faster as we
|
|
442
522
|
// don't need to wait for the network round-trip.
|
|
443
523
|
const logRetrievalRequests = (
|
|
444
|
-
await this.capsuleStore.readCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot)
|
|
524
|
+
await this.capsuleStore.readCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot, this.jobId)
|
|
445
525
|
).map(LogRetrievalRequest.fromFields);
|
|
446
526
|
|
|
447
527
|
const logService = new LogService(
|
|
448
528
|
this.aztecNode,
|
|
449
|
-
this.
|
|
529
|
+
this.anchorBlockHeader,
|
|
450
530
|
this.keyStore,
|
|
451
531
|
this.capsuleStore,
|
|
452
532
|
this.recipientTaggingStore,
|
|
453
533
|
this.senderAddressBookStore,
|
|
454
534
|
this.addressStore,
|
|
535
|
+
this.jobId,
|
|
536
|
+
this.logger.getBindings(),
|
|
455
537
|
);
|
|
456
538
|
|
|
457
539
|
const maybeLogRetrievalResponses = await logService.bulkRetrieveLogs(logRetrievalRequests);
|
|
458
540
|
|
|
459
541
|
// Requests are cleared once we're done.
|
|
460
|
-
await this.capsuleStore.setCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot, []);
|
|
542
|
+
await this.capsuleStore.setCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot, [], this.jobId);
|
|
461
543
|
|
|
462
544
|
// The responses are stored as Option<LogRetrievalResponse> in a second CapsuleArray.
|
|
463
545
|
await this.capsuleStore.setCapsuleArray(
|
|
464
546
|
contractAddress,
|
|
465
547
|
logRetrievalResponsesArrayBaseSlot,
|
|
466
548
|
maybeLogRetrievalResponses.map(LogRetrievalResponse.toSerializedOption),
|
|
549
|
+
this.jobId,
|
|
467
550
|
);
|
|
468
551
|
}
|
|
469
552
|
|
|
470
|
-
public
|
|
553
|
+
public storeCapsule(contractAddress: AztecAddress, slot: Fr, capsule: Fr[]): Promise<void> {
|
|
471
554
|
if (!contractAddress.equals(this.contractAddress)) {
|
|
472
555
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
473
556
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
474
557
|
}
|
|
475
|
-
|
|
558
|
+
this.capsuleStore.storeCapsule(this.contractAddress, slot, capsule, this.jobId);
|
|
559
|
+
return Promise.resolve();
|
|
476
560
|
}
|
|
477
561
|
|
|
478
|
-
public async
|
|
562
|
+
public async loadCapsule(contractAddress: AztecAddress, slot: Fr): Promise<Fr[] | null> {
|
|
479
563
|
if (!contractAddress.equals(this.contractAddress)) {
|
|
480
564
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
481
565
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
@@ -483,33 +567,29 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
483
567
|
return (
|
|
484
568
|
// TODO(#12425): On the following line, the pertinent capsule gets overshadowed by the transient one. Tackle this.
|
|
485
569
|
this.capsules.find(c => c.contractAddress.equals(contractAddress) && c.storageSlot.equals(slot))?.data ??
|
|
486
|
-
(await this.capsuleStore.loadCapsule(this.contractAddress, slot))
|
|
570
|
+
(await this.capsuleStore.loadCapsule(this.contractAddress, slot, this.jobId))
|
|
487
571
|
);
|
|
488
572
|
}
|
|
489
573
|
|
|
490
|
-
public
|
|
574
|
+
public deleteCapsule(contractAddress: AztecAddress, slot: Fr): Promise<void> {
|
|
491
575
|
if (!contractAddress.equals(this.contractAddress)) {
|
|
492
576
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
493
577
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
494
578
|
}
|
|
495
|
-
|
|
579
|
+
this.capsuleStore.deleteCapsule(this.contractAddress, slot, this.jobId);
|
|
580
|
+
return Promise.resolve();
|
|
496
581
|
}
|
|
497
582
|
|
|
498
|
-
public
|
|
499
|
-
contractAddress: AztecAddress,
|
|
500
|
-
srcSlot: Fr,
|
|
501
|
-
dstSlot: Fr,
|
|
502
|
-
numEntries: number,
|
|
503
|
-
): Promise<void> {
|
|
583
|
+
public copyCapsule(contractAddress: AztecAddress, srcSlot: Fr, dstSlot: Fr, numEntries: number): Promise<void> {
|
|
504
584
|
if (!contractAddress.equals(this.contractAddress)) {
|
|
505
585
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
506
586
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
507
587
|
}
|
|
508
|
-
return this.capsuleStore.copyCapsule(this.contractAddress, srcSlot, dstSlot, numEntries);
|
|
588
|
+
return this.capsuleStore.copyCapsule(this.contractAddress, srcSlot, dstSlot, numEntries, this.jobId);
|
|
509
589
|
}
|
|
510
590
|
|
|
511
591
|
// TODO(#11849): consider replacing this oracle with a pure Noir implementation of aes decryption.
|
|
512
|
-
public
|
|
592
|
+
public aes128Decrypt(ciphertext: Buffer, iv: Buffer, symKey: Buffer): Promise<Buffer> {
|
|
513
593
|
const aes128 = new Aes128();
|
|
514
594
|
return aes128.decryptBufferCBC(ciphertext, iv, symKey);
|
|
515
595
|
}
|
|
@@ -520,13 +600,9 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
520
600
|
* @param ephPk - The ephemeral public key to get the secret for.
|
|
521
601
|
* @returns The secret for the given address.
|
|
522
602
|
*/
|
|
523
|
-
public
|
|
524
|
-
return this.getSharedSecret(address, ephPk);
|
|
525
|
-
}
|
|
526
|
-
|
|
527
|
-
protected async getSharedSecret(address: AztecAddress, ephPk: Point): Promise<Point> {
|
|
603
|
+
public async getSharedSecret(address: AztecAddress, ephPk: Point): Promise<Point> {
|
|
528
604
|
// TODO(#12656): return an app-siloed secret
|
|
529
|
-
const recipientCompleteAddress = await this.
|
|
605
|
+
const recipientCompleteAddress = await this.getCompleteAddressOrFail(address);
|
|
530
606
|
const ivskM = await this.keyStore.getMasterSecretKey(
|
|
531
607
|
recipientCompleteAddress.publicKeys.masterIncomingViewingPublicKey,
|
|
532
608
|
);
|