@aztec/pxe 0.0.1-commit.7d4e6cd → 0.0.1-commit.858058eac
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 +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 +3 -1
- package/dest/config/index.d.ts.map +1 -1
- package/dest/config/index.js +17 -0
- 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 +53 -33
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +95 -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 +1 -1
- package/dest/contract_function_simulator/noir-structs/event_validation_request.js +1 -1
- 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 +0 -35
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +43 -35
- package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
- package/dest/contract_function_simulator/oracle/private_execution_oracle.js +82 -25
- package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +65 -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 +126 -109
- 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 +21 -7
- 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 +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 +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 +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} +12 -6
- 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 +3 -3
- package/dest/private_kernel/private_kernel_oracle.d.ts +23 -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 +70 -57
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +96 -111
- 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 +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 +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 +252 -100
- 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 +2 -1
- package/dest/tagging/index.d.ts.map +1 -1
- package/dest/tagging/index.js +1 -0
- 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 +6 -6
- 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 +7 -7
- 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 +91 -33
- package/src/config/index.ts +14 -0
- package/src/contract_function_simulator/benchmarked_node.ts +103 -0
- package/src/contract_function_simulator/contract_function_simulator.ts +143 -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 +1 -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 -67
- package/src/contract_function_simulator/oracle/private_execution_oracle.ts +116 -104
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +190 -116
- 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 +16 -15
- package/src/entrypoints/client/lazy/utils.ts +17 -15
- package/src/entrypoints/pxe_creation_options.ts +2 -1
- package/src/entrypoints/server/index.ts +2 -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 +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} +32 -20
- package/src/private_kernel/private_kernel_execution_prover.ts +7 -4
- package/src/private_kernel/private_kernel_oracle.ts +116 -37
- package/src/pxe.ts +191 -173
- 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 +292 -124
- 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 +293 -108
- package/src/tagging/get_all_logs_by_tags.ts +68 -0
- package/src/tagging/index.ts +1 -0
- package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +16 -5
- package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +7 -1
- package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +9 -6
- 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 +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 -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,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,28 +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
|
-
|
|
70
|
-
|
|
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
|
+
}
|
|
71
108
|
|
|
72
109
|
public utilityAssertCompatibleOracleVersion(version: number): void {
|
|
73
110
|
if (version !== ORACLE_VERSION) {
|
|
@@ -80,13 +117,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
80
117
|
}
|
|
81
118
|
|
|
82
119
|
public utilityGetUtilityContext(): UtilityContext {
|
|
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
|
-
});
|
|
120
|
+
return new UtilityContext(this.anchorBlockHeader, this.contractAddress);
|
|
90
121
|
}
|
|
91
122
|
|
|
92
123
|
/**
|
|
@@ -94,65 +125,88 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
94
125
|
* @param pkMHash - The master public key hash.
|
|
95
126
|
* @returns A Promise that resolves to nullifier keys.
|
|
96
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.
|
|
97
129
|
*/
|
|
98
|
-
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
|
+
}
|
|
99
138
|
return this.keyStore.getKeyValidationRequest(pkMHash, this.contractAddress);
|
|
100
139
|
}
|
|
101
140
|
|
|
102
141
|
/**
|
|
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
|
|
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
|
|
108
147
|
*/
|
|
109
|
-
public
|
|
110
|
-
|
|
111
|
-
|
|
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
|
|
165
|
+
*/
|
|
166
|
+
public utilityGetBlockHashMembershipWitness(
|
|
167
|
+
anchorBlockHash: BlockHash,
|
|
168
|
+
blockHash: BlockHash,
|
|
169
|
+
): Promise<MembershipWitness<typeof ARCHIVE_HEIGHT> | undefined> {
|
|
170
|
+
return this.aztecNode.getBlockHashMembershipWitness(anchorBlockHash, blockHash);
|
|
112
171
|
}
|
|
113
172
|
|
|
114
173
|
/**
|
|
115
174
|
* Returns a nullifier membership witness for a given nullifier at a given block.
|
|
116
|
-
* @param
|
|
175
|
+
* @param blockHash - The block hash at which to get the index.
|
|
117
176
|
* @param nullifier - Nullifier we try to find witness for.
|
|
118
177
|
* @returns The nullifier membership witness (if found).
|
|
119
178
|
*/
|
|
120
|
-
public
|
|
121
|
-
|
|
179
|
+
public utilityGetNullifierMembershipWitness(
|
|
180
|
+
blockHash: BlockHash,
|
|
122
181
|
nullifier: Fr,
|
|
123
182
|
): Promise<NullifierMembershipWitness | undefined> {
|
|
124
|
-
return
|
|
183
|
+
return this.aztecNode.getNullifierMembershipWitness(blockHash, nullifier);
|
|
125
184
|
}
|
|
126
185
|
|
|
127
186
|
/**
|
|
128
187
|
* Returns a low nullifier membership witness for a given nullifier at a given block.
|
|
129
|
-
* @param
|
|
188
|
+
* @param blockHash - The block hash at which to get the index.
|
|
130
189
|
* @param nullifier - Nullifier we try to find the low nullifier witness for.
|
|
131
190
|
* @returns The low nullifier membership witness (if found).
|
|
132
191
|
* @remarks Low nullifier witness can be used to perform a nullifier non-inclusion proof by leveraging the "linked
|
|
133
192
|
* list structure" of leaves and proving that a lower nullifier is pointing to a bigger next value than the nullifier
|
|
134
193
|
* we are trying to prove non-inclusion for.
|
|
135
194
|
*/
|
|
136
|
-
public
|
|
137
|
-
|
|
195
|
+
public utilityGetLowNullifierMembershipWitness(
|
|
196
|
+
blockHash: BlockHash,
|
|
138
197
|
nullifier: Fr,
|
|
139
198
|
): Promise<NullifierMembershipWitness | undefined> {
|
|
140
|
-
|
|
141
|
-
return await treeMembershipService.getLowNullifierMembershipWitness(blockNumber, nullifier);
|
|
199
|
+
return this.aztecNode.getLowNullifierMembershipWitness(blockHash, nullifier);
|
|
142
200
|
}
|
|
143
201
|
|
|
144
202
|
/**
|
|
145
203
|
* Returns a public data tree witness for a given leaf slot at a given block.
|
|
146
|
-
* @param
|
|
204
|
+
* @param blockHash - The block hash at which to get the index.
|
|
147
205
|
* @param leafSlot - The slot of the public data tree to get the witness for.
|
|
148
206
|
* @returns - The witness
|
|
149
207
|
*/
|
|
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);
|
|
208
|
+
public utilityGetPublicDataWitness(blockHash: BlockHash, leafSlot: Fr): Promise<PublicDataWitness | undefined> {
|
|
209
|
+
return this.aztecNode.getPublicDataWitness(blockHash, leafSlot);
|
|
156
210
|
}
|
|
157
211
|
|
|
158
212
|
/**
|
|
@@ -161,26 +215,25 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
161
215
|
* @returns Block extracted from a block with block number `blockNumber`.
|
|
162
216
|
*/
|
|
163
217
|
public async utilityGetBlockHeader(blockNumber: BlockNumber): Promise<BlockHeader | undefined> {
|
|
164
|
-
const anchorBlockNumber =
|
|
218
|
+
const anchorBlockNumber = this.anchorBlockHeader.getBlockNumber();
|
|
165
219
|
if (blockNumber > anchorBlockNumber) {
|
|
166
220
|
throw new Error(`Block number ${blockNumber} is higher than current block ${anchorBlockNumber}`);
|
|
167
221
|
}
|
|
168
222
|
|
|
169
223
|
const block = await this.aztecNode.getBlock(blockNumber);
|
|
170
|
-
return block?.
|
|
224
|
+
return block?.header;
|
|
171
225
|
}
|
|
172
226
|
|
|
173
227
|
/**
|
|
174
228
|
* Retrieve the complete address associated to a given address.
|
|
175
229
|
* @param account - The account address.
|
|
176
|
-
* @returns A complete address associated with the input address.
|
|
177
|
-
* @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.
|
|
178
231
|
*/
|
|
179
|
-
public
|
|
180
|
-
return this.getCompleteAddress(account);
|
|
232
|
+
public utilityTryGetPublicKeysAndPartialAddress(account: AztecAddress): Promise<CompleteAddress | undefined> {
|
|
233
|
+
return this.addressStore.getCompleteAddress(account);
|
|
181
234
|
}
|
|
182
235
|
|
|
183
|
-
protected async
|
|
236
|
+
protected async getCompleteAddressOrFail(account: AztecAddress): Promise<CompleteAddress> {
|
|
184
237
|
const completeAddress = await this.addressStore.getCompleteAddress(account);
|
|
185
238
|
if (!completeAddress) {
|
|
186
239
|
throw new Error(
|
|
@@ -257,7 +310,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
257
310
|
offset: number,
|
|
258
311
|
status: NoteStatus,
|
|
259
312
|
): Promise<NoteData[]> {
|
|
260
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.
|
|
313
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
261
314
|
|
|
262
315
|
const dbNotes = await noteService.getNotes(this.contractAddress, owner, storageSlot, status, this.scopes);
|
|
263
316
|
return pickNotes<NoteData>(dbNotes, {
|
|
@@ -281,10 +334,14 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
281
334
|
* @returns A boolean indicating whether the nullifier exists in the tree or not.
|
|
282
335
|
*/
|
|
283
336
|
public async utilityCheckNullifierExists(innerNullifier: Fr) {
|
|
284
|
-
const nullifier = await
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
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;
|
|
288
345
|
}
|
|
289
346
|
|
|
290
347
|
/**
|
|
@@ -296,70 +353,82 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
296
353
|
* @returns The l1 to l2 membership witness (index of message in the tree and sibling path).
|
|
297
354
|
*/
|
|
298
355
|
public async utilityGetL1ToL2MembershipWitness(contractAddress: AztecAddress, messageHash: Fr, secret: Fr) {
|
|
299
|
-
const
|
|
300
|
-
|
|
356
|
+
const [messageIndex, siblingPath] = await getNonNullifiedL1ToL2MessageWitness(
|
|
357
|
+
this.aztecNode,
|
|
301
358
|
contractAddress,
|
|
302
359
|
messageHash,
|
|
303
360
|
secret,
|
|
304
361
|
);
|
|
305
362
|
|
|
306
|
-
// Assuming messageIndex is what you intended to use for the index in MessageLoadOracleInputs
|
|
307
363
|
return new MessageLoadOracleInputs(messageIndex, siblingPath);
|
|
308
364
|
}
|
|
309
365
|
|
|
310
366
|
/**
|
|
311
367
|
* Read the public storage data.
|
|
368
|
+
* @param blockHash - The block hash to read storage at.
|
|
312
369
|
* @param contractAddress - The address to read storage from.
|
|
313
370
|
* @param startStorageSlot - The starting storage slot.
|
|
314
|
-
* @param blockNumber - The block number to read storage at.
|
|
315
371
|
* @param numberOfElements - Number of elements to read from the starting storage slot.
|
|
316
372
|
*/
|
|
317
373
|
public async utilityStorageRead(
|
|
374
|
+
blockHash: BlockHash,
|
|
318
375
|
contractAddress: AztecAddress,
|
|
319
376
|
startStorageSlot: Fr,
|
|
320
|
-
blockNumber: BlockNumber,
|
|
321
377
|
numberOfElements: number,
|
|
322
378
|
) {
|
|
323
|
-
const
|
|
324
|
-
|
|
379
|
+
const slots = Array(numberOfElements)
|
|
380
|
+
.fill(0)
|
|
381
|
+
.map((_, i) => new Fr(startStorageSlot.value + BigInt(i)));
|
|
325
382
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
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
|
+
);
|
|
331
390
|
|
|
332
|
-
this.log.debug(
|
|
333
|
-
`Oracle storage read: slot=${storageSlot.toString()} address-${contractAddress.toString()} value=${value}`,
|
|
334
|
-
);
|
|
335
|
-
values.push(value);
|
|
336
|
-
}
|
|
337
391
|
return values;
|
|
338
392
|
}
|
|
339
393
|
|
|
340
|
-
|
|
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> {
|
|
341
410
|
if (!LogLevels[level]) {
|
|
342
|
-
throw new Error(`Invalid
|
|
411
|
+
throw new Error(`Invalid log level: ${level}`);
|
|
343
412
|
}
|
|
344
413
|
const levelName = LogLevels[level];
|
|
345
|
-
this
|
|
414
|
+
const logger = await this.#getContractLogger();
|
|
415
|
+
logger[levelName](`${applyStringFormatting(message, fields)}`);
|
|
346
416
|
}
|
|
347
417
|
|
|
348
418
|
public async utilityFetchTaggedLogs(pendingTaggedLogArrayBaseSlot: Fr) {
|
|
349
419
|
const logService = new LogService(
|
|
350
420
|
this.aztecNode,
|
|
351
|
-
this.
|
|
421
|
+
this.anchorBlockHeader,
|
|
352
422
|
this.keyStore,
|
|
353
423
|
this.capsuleStore,
|
|
354
424
|
this.recipientTaggingStore,
|
|
355
425
|
this.senderAddressBookStore,
|
|
356
426
|
this.addressStore,
|
|
427
|
+
this.jobId,
|
|
428
|
+
this.log.getBindings(),
|
|
357
429
|
);
|
|
358
430
|
|
|
359
|
-
await logService.
|
|
360
|
-
|
|
361
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockStore);
|
|
362
|
-
await noteService.syncNoteNullifiers(this.contractAddress);
|
|
431
|
+
await logService.fetchTaggedLogs(this.contractAddress, pendingTaggedLogArrayBaseSlot, this.scopes);
|
|
363
432
|
}
|
|
364
433
|
|
|
365
434
|
/**
|
|
@@ -372,12 +441,12 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
372
441
|
* @param noteValidationRequestsArrayBaseSlot - The base slot of capsule array containing note validation requests.
|
|
373
442
|
* @param eventValidationRequestsArrayBaseSlot - The base slot of capsule array containing event validation requests.
|
|
374
443
|
*/
|
|
375
|
-
public async
|
|
444
|
+
public async utilityValidateAndStoreEnqueuedNotesAndEvents(
|
|
376
445
|
contractAddress: AztecAddress,
|
|
377
446
|
noteValidationRequestsArrayBaseSlot: Fr,
|
|
378
447
|
eventValidationRequestsArrayBaseSlot: Fr,
|
|
379
448
|
) {
|
|
380
|
-
// TODO(#10727): allow other contracts to
|
|
449
|
+
// TODO(#10727): allow other contracts to store notes
|
|
381
450
|
if (!this.contractAddress.equals(contractAddress)) {
|
|
382
451
|
throw new Error(`Got a note validation request from ${contractAddress}, expected ${this.contractAddress}`);
|
|
383
452
|
}
|
|
@@ -385,16 +454,16 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
385
454
|
// We read all note and event validation requests and process them all concurrently. This makes the process much
|
|
386
455
|
// faster as we don't need to wait for the network round-trip.
|
|
387
456
|
const noteValidationRequests = (
|
|
388
|
-
await this.capsuleStore.readCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot)
|
|
457
|
+
await this.capsuleStore.readCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot, this.jobId)
|
|
389
458
|
).map(NoteValidationRequest.fromFields);
|
|
390
459
|
|
|
391
460
|
const eventValidationRequests = (
|
|
392
|
-
await this.capsuleStore.readCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot)
|
|
461
|
+
await this.capsuleStore.readCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, this.jobId)
|
|
393
462
|
).map(EventValidationRequest.fromFields);
|
|
394
463
|
|
|
395
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.
|
|
396
|
-
const
|
|
397
|
-
noteService.
|
|
464
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
465
|
+
const noteStorePromises = noteValidationRequests.map(request =>
|
|
466
|
+
noteService.validateAndStoreNote(
|
|
398
467
|
request.contractAddress,
|
|
399
468
|
request.owner,
|
|
400
469
|
request.storageSlot,
|
|
@@ -408,9 +477,9 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
408
477
|
),
|
|
409
478
|
);
|
|
410
479
|
|
|
411
|
-
const eventService = new EventService(this.
|
|
412
|
-
const
|
|
413
|
-
eventService.
|
|
480
|
+
const eventService = new EventService(this.anchorBlockHeader, this.aztecNode, this.privateEventStore, this.jobId);
|
|
481
|
+
const eventStorePromises = eventValidationRequests.map(request =>
|
|
482
|
+
eventService.validateAndStoreEvent(
|
|
414
483
|
request.contractAddress,
|
|
415
484
|
request.eventTypeId,
|
|
416
485
|
request.randomness,
|
|
@@ -421,11 +490,11 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
421
490
|
),
|
|
422
491
|
);
|
|
423
492
|
|
|
424
|
-
await Promise.all([...
|
|
493
|
+
await Promise.all([...noteStorePromises, ...eventStorePromises]);
|
|
425
494
|
|
|
426
495
|
// Requests are cleared once we're done.
|
|
427
|
-
await this.capsuleStore.setCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot, []);
|
|
428
|
-
await this.capsuleStore.setCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, []);
|
|
496
|
+
await this.capsuleStore.setCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot, [], this.jobId);
|
|
497
|
+
await this.capsuleStore.setCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, [], this.jobId);
|
|
429
498
|
}
|
|
430
499
|
|
|
431
500
|
public async utilityBulkRetrieveLogs(
|
|
@@ -441,29 +510,32 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
441
510
|
// We read all log retrieval requests and process them all concurrently. This makes the process much faster as we
|
|
442
511
|
// don't need to wait for the network round-trip.
|
|
443
512
|
const logRetrievalRequests = (
|
|
444
|
-
await this.capsuleStore.readCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot)
|
|
513
|
+
await this.capsuleStore.readCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot, this.jobId)
|
|
445
514
|
).map(LogRetrievalRequest.fromFields);
|
|
446
515
|
|
|
447
516
|
const logService = new LogService(
|
|
448
517
|
this.aztecNode,
|
|
449
|
-
this.
|
|
518
|
+
this.anchorBlockHeader,
|
|
450
519
|
this.keyStore,
|
|
451
520
|
this.capsuleStore,
|
|
452
521
|
this.recipientTaggingStore,
|
|
453
522
|
this.senderAddressBookStore,
|
|
454
523
|
this.addressStore,
|
|
524
|
+
this.jobId,
|
|
525
|
+
this.log.getBindings(),
|
|
455
526
|
);
|
|
456
527
|
|
|
457
528
|
const maybeLogRetrievalResponses = await logService.bulkRetrieveLogs(logRetrievalRequests);
|
|
458
529
|
|
|
459
530
|
// Requests are cleared once we're done.
|
|
460
|
-
await this.capsuleStore.setCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot, []);
|
|
531
|
+
await this.capsuleStore.setCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot, [], this.jobId);
|
|
461
532
|
|
|
462
533
|
// The responses are stored as Option<LogRetrievalResponse> in a second CapsuleArray.
|
|
463
534
|
await this.capsuleStore.setCapsuleArray(
|
|
464
535
|
contractAddress,
|
|
465
536
|
logRetrievalResponsesArrayBaseSlot,
|
|
466
537
|
maybeLogRetrievalResponses.map(LogRetrievalResponse.toSerializedOption),
|
|
538
|
+
this.jobId,
|
|
467
539
|
);
|
|
468
540
|
}
|
|
469
541
|
|
|
@@ -472,7 +544,8 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
472
544
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
473
545
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
474
546
|
}
|
|
475
|
-
|
|
547
|
+
this.capsuleStore.storeCapsule(this.contractAddress, slot, capsule, this.jobId);
|
|
548
|
+
return Promise.resolve();
|
|
476
549
|
}
|
|
477
550
|
|
|
478
551
|
public async utilityLoadCapsule(contractAddress: AztecAddress, slot: Fr): Promise<Fr[] | null> {
|
|
@@ -483,7 +556,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
483
556
|
return (
|
|
484
557
|
// TODO(#12425): On the following line, the pertinent capsule gets overshadowed by the transient one. Tackle this.
|
|
485
558
|
this.capsules.find(c => c.contractAddress.equals(contractAddress) && c.storageSlot.equals(slot))?.data ??
|
|
486
|
-
(await this.capsuleStore.loadCapsule(this.contractAddress, slot))
|
|
559
|
+
(await this.capsuleStore.loadCapsule(this.contractAddress, slot, this.jobId))
|
|
487
560
|
);
|
|
488
561
|
}
|
|
489
562
|
|
|
@@ -492,7 +565,8 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
492
565
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
493
566
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
494
567
|
}
|
|
495
|
-
|
|
568
|
+
this.capsuleStore.deleteCapsule(this.contractAddress, slot, this.jobId);
|
|
569
|
+
return Promise.resolve();
|
|
496
570
|
}
|
|
497
571
|
|
|
498
572
|
public utilityCopyCapsule(
|
|
@@ -505,7 +579,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
505
579
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
506
580
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
507
581
|
}
|
|
508
|
-
return this.capsuleStore.copyCapsule(this.contractAddress, srcSlot, dstSlot, numEntries);
|
|
582
|
+
return this.capsuleStore.copyCapsule(this.contractAddress, srcSlot, dstSlot, numEntries, this.jobId);
|
|
509
583
|
}
|
|
510
584
|
|
|
511
585
|
// TODO(#11849): consider replacing this oracle with a pure Noir implementation of aes decryption.
|
|
@@ -526,7 +600,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
526
600
|
|
|
527
601
|
protected async getSharedSecret(address: AztecAddress, ephPk: Point): Promise<Point> {
|
|
528
602
|
// TODO(#12656): return an app-siloed secret
|
|
529
|
-
const recipientCompleteAddress = await this.
|
|
603
|
+
const recipientCompleteAddress = await this.getCompleteAddressOrFail(address);
|
|
530
604
|
const ivskM = await this.keyStore.getMasterSecretKey(
|
|
531
605
|
recipientCompleteAddress.publicKeys.masterIncomingViewingPublicKey,
|
|
532
606
|
);
|