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