@aztec/pxe 0.0.1-commit.6d3c34e → 0.0.1-commit.7cf39cb55
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 +55 -34
- package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
- package/dest/contract_function_simulator/contract_function_simulator.js +193 -79
- 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 +90 -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 +131 -109
- package/dest/contract_sync/contract_sync_service.d.ts +42 -0
- package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
- package/dest/contract_sync/contract_sync_service.js +97 -0
- package/dest/contract_sync/helpers.d.ts +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 +27 -29
- 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 +74 -58
- package/dest/pxe.d.ts.map +1 -1
- package/dest/pxe.js +100 -114
- 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 +50 -52
- package/dest/storage/note_store/note_store.d.ts.map +1 -1
- package/dest/storage/note_store/note_store.js +284 -263
- package/dest/storage/note_store/stored_note.d.ts +16 -0
- package/dest/storage/note_store/stored_note.d.ts.map +1 -0
- package/dest/storage/note_store/stored_note.js +43 -0
- package/dest/storage/private_event_store/private_event_store.d.ts +43 -8
- package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
- package/dest/storage/private_event_store/private_event_store.js +226 -111
- package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
- package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
- package/dest/storage/private_event_store/stored_private_event.js +56 -0
- package/dest/storage/tagging_store/recipient_tagging_store.d.ts +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 +341 -139
- 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 +125 -103
- package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +195 -116
- package/src/contract_sync/contract_sync_service.ts +145 -0
- package/src/contract_sync/helpers.ts +93 -0
- package/src/debug/pxe_debug_utils.ts +61 -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 +38 -29
- 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 +205 -183
- 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 -319
- 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,93 @@ 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
|
+
let hasAccess = false;
|
|
134
|
+
for (let i = 0; i < this.scopes.length && !hasAccess; i++) {
|
|
135
|
+
if (await this.keyStore.accountHasKey(this.scopes[i], pkMHash)) {
|
|
136
|
+
hasAccess = true;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (!hasAccess) {
|
|
140
|
+
throw new Error(`Key validation request denied: no scoped account has a key with hash ${pkMHash.toString()}.`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
99
143
|
return this.keyStore.getKeyValidationRequest(pkMHash, this.contractAddress);
|
|
100
144
|
}
|
|
101
145
|
|
|
102
146
|
/**
|
|
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
|
|
147
|
+
* Fetches the index and sibling path of a leaf at a given block from the note hash tree.
|
|
148
|
+
* @param anchorBlockHash - The hash of a block that contains the note hash tree root in which to find the membership
|
|
149
|
+
* witness.
|
|
150
|
+
* @param noteHash - The note hash to find in the note hash tree.
|
|
151
|
+
* @returns The membership witness containing the leaf index and sibling path
|
|
108
152
|
*/
|
|
109
|
-
public
|
|
110
|
-
|
|
111
|
-
|
|
153
|
+
public utilityGetNoteHashMembershipWitness(
|
|
154
|
+
anchorBlockHash: BlockHash,
|
|
155
|
+
noteHash: Fr,
|
|
156
|
+
): Promise<MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT> | undefined> {
|
|
157
|
+
return this.aztecNode.getNoteHashMembershipWitness(anchorBlockHash, noteHash);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Fetches the index and sibling path of a block hash in the archive tree.
|
|
162
|
+
*
|
|
163
|
+
* Block hashes are the leaves of the archive tree. Each time a new block is added to the chain,
|
|
164
|
+
* its block hash is appended as a new leaf to the archive tree.
|
|
165
|
+
*
|
|
166
|
+
* @param anchorBlockHash - The hash of a block that contains the archive tree root in which to find the membership
|
|
167
|
+
* witness.
|
|
168
|
+
* @param blockHash - The block hash to find in the archive tree.
|
|
169
|
+
* @returns The membership witness containing the leaf index and sibling path
|
|
170
|
+
*/
|
|
171
|
+
public utilityGetBlockHashMembershipWitness(
|
|
172
|
+
anchorBlockHash: BlockHash,
|
|
173
|
+
blockHash: BlockHash,
|
|
174
|
+
): Promise<MembershipWitness<typeof ARCHIVE_HEIGHT> | undefined> {
|
|
175
|
+
return this.aztecNode.getBlockHashMembershipWitness(anchorBlockHash, blockHash);
|
|
112
176
|
}
|
|
113
177
|
|
|
114
178
|
/**
|
|
115
179
|
* Returns a nullifier membership witness for a given nullifier at a given block.
|
|
116
|
-
* @param
|
|
180
|
+
* @param blockHash - The block hash at which to get the index.
|
|
117
181
|
* @param nullifier - Nullifier we try to find witness for.
|
|
118
182
|
* @returns The nullifier membership witness (if found).
|
|
119
183
|
*/
|
|
120
|
-
public
|
|
121
|
-
|
|
184
|
+
public utilityGetNullifierMembershipWitness(
|
|
185
|
+
blockHash: BlockHash,
|
|
122
186
|
nullifier: Fr,
|
|
123
187
|
): Promise<NullifierMembershipWitness | undefined> {
|
|
124
|
-
return
|
|
188
|
+
return this.aztecNode.getNullifierMembershipWitness(blockHash, nullifier);
|
|
125
189
|
}
|
|
126
190
|
|
|
127
191
|
/**
|
|
128
192
|
* Returns a low nullifier membership witness for a given nullifier at a given block.
|
|
129
|
-
* @param
|
|
193
|
+
* @param blockHash - The block hash at which to get the index.
|
|
130
194
|
* @param nullifier - Nullifier we try to find the low nullifier witness for.
|
|
131
195
|
* @returns The low nullifier membership witness (if found).
|
|
132
196
|
* @remarks Low nullifier witness can be used to perform a nullifier non-inclusion proof by leveraging the "linked
|
|
133
197
|
* list structure" of leaves and proving that a lower nullifier is pointing to a bigger next value than the nullifier
|
|
134
198
|
* we are trying to prove non-inclusion for.
|
|
135
199
|
*/
|
|
136
|
-
public
|
|
137
|
-
|
|
200
|
+
public utilityGetLowNullifierMembershipWitness(
|
|
201
|
+
blockHash: BlockHash,
|
|
138
202
|
nullifier: Fr,
|
|
139
203
|
): Promise<NullifierMembershipWitness | undefined> {
|
|
140
|
-
|
|
141
|
-
return await treeMembershipService.getLowNullifierMembershipWitness(blockNumber, nullifier);
|
|
204
|
+
return this.aztecNode.getLowNullifierMembershipWitness(blockHash, nullifier);
|
|
142
205
|
}
|
|
143
206
|
|
|
144
207
|
/**
|
|
145
208
|
* Returns a public data tree witness for a given leaf slot at a given block.
|
|
146
|
-
* @param
|
|
209
|
+
* @param blockHash - The block hash at which to get the index.
|
|
147
210
|
* @param leafSlot - The slot of the public data tree to get the witness for.
|
|
148
211
|
* @returns - The witness
|
|
149
212
|
*/
|
|
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);
|
|
213
|
+
public utilityGetPublicDataWitness(blockHash: BlockHash, leafSlot: Fr): Promise<PublicDataWitness | undefined> {
|
|
214
|
+
return this.aztecNode.getPublicDataWitness(blockHash, leafSlot);
|
|
156
215
|
}
|
|
157
216
|
|
|
158
217
|
/**
|
|
@@ -161,26 +220,25 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
161
220
|
* @returns Block extracted from a block with block number `blockNumber`.
|
|
162
221
|
*/
|
|
163
222
|
public async utilityGetBlockHeader(blockNumber: BlockNumber): Promise<BlockHeader | undefined> {
|
|
164
|
-
const anchorBlockNumber =
|
|
223
|
+
const anchorBlockNumber = this.anchorBlockHeader.getBlockNumber();
|
|
165
224
|
if (blockNumber > anchorBlockNumber) {
|
|
166
225
|
throw new Error(`Block number ${blockNumber} is higher than current block ${anchorBlockNumber}`);
|
|
167
226
|
}
|
|
168
227
|
|
|
169
228
|
const block = await this.aztecNode.getBlock(blockNumber);
|
|
170
|
-
return block?.
|
|
229
|
+
return block?.header;
|
|
171
230
|
}
|
|
172
231
|
|
|
173
232
|
/**
|
|
174
233
|
* Retrieve the complete address associated to a given address.
|
|
175
234
|
* @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.
|
|
235
|
+
* @returns A complete address associated with the input address, or `undefined` if not registered.
|
|
178
236
|
*/
|
|
179
|
-
public
|
|
180
|
-
return this.getCompleteAddress(account);
|
|
237
|
+
public utilityTryGetPublicKeysAndPartialAddress(account: AztecAddress): Promise<CompleteAddress | undefined> {
|
|
238
|
+
return this.addressStore.getCompleteAddress(account);
|
|
181
239
|
}
|
|
182
240
|
|
|
183
|
-
protected async
|
|
241
|
+
protected async getCompleteAddressOrFail(account: AztecAddress): Promise<CompleteAddress> {
|
|
184
242
|
const completeAddress = await this.addressStore.getCompleteAddress(account);
|
|
185
243
|
if (!completeAddress) {
|
|
186
244
|
throw new Error(
|
|
@@ -257,7 +315,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
257
315
|
offset: number,
|
|
258
316
|
status: NoteStatus,
|
|
259
317
|
): Promise<NoteData[]> {
|
|
260
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.
|
|
318
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
261
319
|
|
|
262
320
|
const dbNotes = await noteService.getNotes(this.contractAddress, owner, storageSlot, status, this.scopes);
|
|
263
321
|
return pickNotes<NoteData>(dbNotes, {
|
|
@@ -281,10 +339,14 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
281
339
|
* @returns A boolean indicating whether the nullifier exists in the tree or not.
|
|
282
340
|
*/
|
|
283
341
|
public async utilityCheckNullifierExists(innerNullifier: Fr) {
|
|
284
|
-
const nullifier = await
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
342
|
+
const [nullifier, anchorBlockHash] = await Promise.all([
|
|
343
|
+
siloNullifier(this.contractAddress, innerNullifier!),
|
|
344
|
+
this.anchorBlockHeader.hash(),
|
|
345
|
+
]);
|
|
346
|
+
const [leafIndex] = await this.aztecNode.findLeavesIndexes(anchorBlockHash, MerkleTreeId.NULLIFIER_TREE, [
|
|
347
|
+
nullifier,
|
|
348
|
+
]);
|
|
349
|
+
return leafIndex?.data !== undefined;
|
|
288
350
|
}
|
|
289
351
|
|
|
290
352
|
/**
|
|
@@ -296,70 +358,82 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
296
358
|
* @returns The l1 to l2 membership witness (index of message in the tree and sibling path).
|
|
297
359
|
*/
|
|
298
360
|
public async utilityGetL1ToL2MembershipWitness(contractAddress: AztecAddress, messageHash: Fr, secret: Fr) {
|
|
299
|
-
const
|
|
300
|
-
|
|
361
|
+
const [messageIndex, siblingPath] = await getNonNullifiedL1ToL2MessageWitness(
|
|
362
|
+
this.aztecNode,
|
|
301
363
|
contractAddress,
|
|
302
364
|
messageHash,
|
|
303
365
|
secret,
|
|
304
366
|
);
|
|
305
367
|
|
|
306
|
-
// Assuming messageIndex is what you intended to use for the index in MessageLoadOracleInputs
|
|
307
368
|
return new MessageLoadOracleInputs(messageIndex, siblingPath);
|
|
308
369
|
}
|
|
309
370
|
|
|
310
371
|
/**
|
|
311
372
|
* Read the public storage data.
|
|
373
|
+
* @param blockHash - The block hash to read storage at.
|
|
312
374
|
* @param contractAddress - The address to read storage from.
|
|
313
375
|
* @param startStorageSlot - The starting storage slot.
|
|
314
|
-
* @param blockNumber - The block number to read storage at.
|
|
315
376
|
* @param numberOfElements - Number of elements to read from the starting storage slot.
|
|
316
377
|
*/
|
|
317
378
|
public async utilityStorageRead(
|
|
379
|
+
blockHash: BlockHash,
|
|
318
380
|
contractAddress: AztecAddress,
|
|
319
381
|
startStorageSlot: Fr,
|
|
320
|
-
blockNumber: BlockNumber,
|
|
321
382
|
numberOfElements: number,
|
|
322
383
|
) {
|
|
323
|
-
const
|
|
324
|
-
|
|
384
|
+
const slots = Array(numberOfElements)
|
|
385
|
+
.fill(0)
|
|
386
|
+
.map((_, i) => new Fr(startStorageSlot.value + BigInt(i)));
|
|
325
387
|
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
388
|
+
const values = await Promise.all(
|
|
389
|
+
slots.map(storageSlot => this.aztecNode.getPublicStorageAt(blockHash, contractAddress, storageSlot)),
|
|
390
|
+
);
|
|
391
|
+
|
|
392
|
+
this.log.debug(
|
|
393
|
+
`Oracle storage read: slots=[${slots.map(slot => slot.toString()).join(', ')}] address=${contractAddress.toString()} values=[${values.join(', ')}]`,
|
|
394
|
+
);
|
|
331
395
|
|
|
332
|
-
this.log.debug(
|
|
333
|
-
`Oracle storage read: slot=${storageSlot.toString()} address-${contractAddress.toString()} value=${value}`,
|
|
334
|
-
);
|
|
335
|
-
values.push(value);
|
|
336
|
-
}
|
|
337
396
|
return values;
|
|
338
397
|
}
|
|
339
398
|
|
|
340
|
-
|
|
399
|
+
/**
|
|
400
|
+
* Returns a per-contract logger whose output is prefixed with `contract_log::<name>(<addrAbbrev>)`.
|
|
401
|
+
*/
|
|
402
|
+
async #getContractLogger(): Promise<Logger> {
|
|
403
|
+
if (!this.contractLogger) {
|
|
404
|
+
const addrAbbrev = this.contractAddress.toString().slice(0, 10);
|
|
405
|
+
const name = await this.contractStore.getDebugContractName(this.contractAddress);
|
|
406
|
+
const module = name ? `contract_log::${name}(${addrAbbrev})` : `contract_log::${addrAbbrev}`;
|
|
407
|
+
// Purpose of instanceId is to distinguish logs from different instances of the same component. It makes sense
|
|
408
|
+
// to re-use jobId as instanceId here as executions of different PXE jobs are isolated.
|
|
409
|
+
this.contractLogger = createLogger(module, { instanceId: this.jobId });
|
|
410
|
+
}
|
|
411
|
+
return this.contractLogger;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
public async utilityLog(level: number, message: string, fields: Fr[]): Promise<void> {
|
|
341
415
|
if (!LogLevels[level]) {
|
|
342
|
-
throw new Error(`Invalid
|
|
416
|
+
throw new Error(`Invalid log level: ${level}`);
|
|
343
417
|
}
|
|
344
418
|
const levelName = LogLevels[level];
|
|
345
|
-
this
|
|
419
|
+
const logger = await this.#getContractLogger();
|
|
420
|
+
logger[levelName](`${applyStringFormatting(message, fields)}`);
|
|
346
421
|
}
|
|
347
422
|
|
|
348
423
|
public async utilityFetchTaggedLogs(pendingTaggedLogArrayBaseSlot: Fr) {
|
|
349
424
|
const logService = new LogService(
|
|
350
425
|
this.aztecNode,
|
|
351
|
-
this.
|
|
426
|
+
this.anchorBlockHeader,
|
|
352
427
|
this.keyStore,
|
|
353
428
|
this.capsuleStore,
|
|
354
429
|
this.recipientTaggingStore,
|
|
355
430
|
this.senderAddressBookStore,
|
|
356
431
|
this.addressStore,
|
|
432
|
+
this.jobId,
|
|
433
|
+
this.log.getBindings(),
|
|
357
434
|
);
|
|
358
435
|
|
|
359
|
-
await logService.
|
|
360
|
-
|
|
361
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockStore);
|
|
362
|
-
await noteService.syncNoteNullifiers(this.contractAddress);
|
|
436
|
+
await logService.fetchTaggedLogs(this.contractAddress, pendingTaggedLogArrayBaseSlot, this.scopes);
|
|
363
437
|
}
|
|
364
438
|
|
|
365
439
|
/**
|
|
@@ -372,12 +446,12 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
372
446
|
* @param noteValidationRequestsArrayBaseSlot - The base slot of capsule array containing note validation requests.
|
|
373
447
|
* @param eventValidationRequestsArrayBaseSlot - The base slot of capsule array containing event validation requests.
|
|
374
448
|
*/
|
|
375
|
-
public async
|
|
449
|
+
public async utilityValidateAndStoreEnqueuedNotesAndEvents(
|
|
376
450
|
contractAddress: AztecAddress,
|
|
377
451
|
noteValidationRequestsArrayBaseSlot: Fr,
|
|
378
452
|
eventValidationRequestsArrayBaseSlot: Fr,
|
|
379
453
|
) {
|
|
380
|
-
// TODO(#10727): allow other contracts to
|
|
454
|
+
// TODO(#10727): allow other contracts to store notes
|
|
381
455
|
if (!this.contractAddress.equals(contractAddress)) {
|
|
382
456
|
throw new Error(`Got a note validation request from ${contractAddress}, expected ${this.contractAddress}`);
|
|
383
457
|
}
|
|
@@ -385,16 +459,16 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
385
459
|
// We read all note and event validation requests and process them all concurrently. This makes the process much
|
|
386
460
|
// faster as we don't need to wait for the network round-trip.
|
|
387
461
|
const noteValidationRequests = (
|
|
388
|
-
await this.capsuleStore.readCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot)
|
|
462
|
+
await this.capsuleStore.readCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot, this.jobId)
|
|
389
463
|
).map(NoteValidationRequest.fromFields);
|
|
390
464
|
|
|
391
465
|
const eventValidationRequests = (
|
|
392
|
-
await this.capsuleStore.readCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot)
|
|
466
|
+
await this.capsuleStore.readCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, this.jobId)
|
|
393
467
|
).map(EventValidationRequest.fromFields);
|
|
394
468
|
|
|
395
|
-
const noteService = new NoteService(this.noteStore, this.aztecNode, this.
|
|
396
|
-
const
|
|
397
|
-
noteService.
|
|
469
|
+
const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
|
|
470
|
+
const noteStorePromises = noteValidationRequests.map(request =>
|
|
471
|
+
noteService.validateAndStoreNote(
|
|
398
472
|
request.contractAddress,
|
|
399
473
|
request.owner,
|
|
400
474
|
request.storageSlot,
|
|
@@ -408,9 +482,9 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
408
482
|
),
|
|
409
483
|
);
|
|
410
484
|
|
|
411
|
-
const eventService = new EventService(this.
|
|
412
|
-
const
|
|
413
|
-
eventService.
|
|
485
|
+
const eventService = new EventService(this.anchorBlockHeader, this.aztecNode, this.privateEventStore, this.jobId);
|
|
486
|
+
const eventStorePromises = eventValidationRequests.map(request =>
|
|
487
|
+
eventService.validateAndStoreEvent(
|
|
414
488
|
request.contractAddress,
|
|
415
489
|
request.eventTypeId,
|
|
416
490
|
request.randomness,
|
|
@@ -421,11 +495,11 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
421
495
|
),
|
|
422
496
|
);
|
|
423
497
|
|
|
424
|
-
await Promise.all([...
|
|
498
|
+
await Promise.all([...noteStorePromises, ...eventStorePromises]);
|
|
425
499
|
|
|
426
500
|
// Requests are cleared once we're done.
|
|
427
|
-
await this.capsuleStore.setCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot, []);
|
|
428
|
-
await this.capsuleStore.setCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, []);
|
|
501
|
+
await this.capsuleStore.setCapsuleArray(contractAddress, noteValidationRequestsArrayBaseSlot, [], this.jobId);
|
|
502
|
+
await this.capsuleStore.setCapsuleArray(contractAddress, eventValidationRequestsArrayBaseSlot, [], this.jobId);
|
|
429
503
|
}
|
|
430
504
|
|
|
431
505
|
public async utilityBulkRetrieveLogs(
|
|
@@ -441,29 +515,32 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
441
515
|
// We read all log retrieval requests and process them all concurrently. This makes the process much faster as we
|
|
442
516
|
// don't need to wait for the network round-trip.
|
|
443
517
|
const logRetrievalRequests = (
|
|
444
|
-
await this.capsuleStore.readCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot)
|
|
518
|
+
await this.capsuleStore.readCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot, this.jobId)
|
|
445
519
|
).map(LogRetrievalRequest.fromFields);
|
|
446
520
|
|
|
447
521
|
const logService = new LogService(
|
|
448
522
|
this.aztecNode,
|
|
449
|
-
this.
|
|
523
|
+
this.anchorBlockHeader,
|
|
450
524
|
this.keyStore,
|
|
451
525
|
this.capsuleStore,
|
|
452
526
|
this.recipientTaggingStore,
|
|
453
527
|
this.senderAddressBookStore,
|
|
454
528
|
this.addressStore,
|
|
529
|
+
this.jobId,
|
|
530
|
+
this.log.getBindings(),
|
|
455
531
|
);
|
|
456
532
|
|
|
457
533
|
const maybeLogRetrievalResponses = await logService.bulkRetrieveLogs(logRetrievalRequests);
|
|
458
534
|
|
|
459
535
|
// Requests are cleared once we're done.
|
|
460
|
-
await this.capsuleStore.setCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot, []);
|
|
536
|
+
await this.capsuleStore.setCapsuleArray(contractAddress, logRetrievalRequestsArrayBaseSlot, [], this.jobId);
|
|
461
537
|
|
|
462
538
|
// The responses are stored as Option<LogRetrievalResponse> in a second CapsuleArray.
|
|
463
539
|
await this.capsuleStore.setCapsuleArray(
|
|
464
540
|
contractAddress,
|
|
465
541
|
logRetrievalResponsesArrayBaseSlot,
|
|
466
542
|
maybeLogRetrievalResponses.map(LogRetrievalResponse.toSerializedOption),
|
|
543
|
+
this.jobId,
|
|
467
544
|
);
|
|
468
545
|
}
|
|
469
546
|
|
|
@@ -472,7 +549,8 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
472
549
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
473
550
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
474
551
|
}
|
|
475
|
-
|
|
552
|
+
this.capsuleStore.storeCapsule(this.contractAddress, slot, capsule, this.jobId);
|
|
553
|
+
return Promise.resolve();
|
|
476
554
|
}
|
|
477
555
|
|
|
478
556
|
public async utilityLoadCapsule(contractAddress: AztecAddress, slot: Fr): Promise<Fr[] | null> {
|
|
@@ -483,7 +561,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
483
561
|
return (
|
|
484
562
|
// TODO(#12425): On the following line, the pertinent capsule gets overshadowed by the transient one. Tackle this.
|
|
485
563
|
this.capsules.find(c => c.contractAddress.equals(contractAddress) && c.storageSlot.equals(slot))?.data ??
|
|
486
|
-
(await this.capsuleStore.loadCapsule(this.contractAddress, slot))
|
|
564
|
+
(await this.capsuleStore.loadCapsule(this.contractAddress, slot, this.jobId))
|
|
487
565
|
);
|
|
488
566
|
}
|
|
489
567
|
|
|
@@ -492,7 +570,8 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
492
570
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
493
571
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
494
572
|
}
|
|
495
|
-
|
|
573
|
+
this.capsuleStore.deleteCapsule(this.contractAddress, slot, this.jobId);
|
|
574
|
+
return Promise.resolve();
|
|
496
575
|
}
|
|
497
576
|
|
|
498
577
|
public utilityCopyCapsule(
|
|
@@ -505,7 +584,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
505
584
|
// TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
|
|
506
585
|
throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
|
|
507
586
|
}
|
|
508
|
-
return this.capsuleStore.copyCapsule(this.contractAddress, srcSlot, dstSlot, numEntries);
|
|
587
|
+
return this.capsuleStore.copyCapsule(this.contractAddress, srcSlot, dstSlot, numEntries, this.jobId);
|
|
509
588
|
}
|
|
510
589
|
|
|
511
590
|
// TODO(#11849): consider replacing this oracle with a pure Noir implementation of aes decryption.
|
|
@@ -526,7 +605,7 @@ export class UtilityExecutionOracle implements IMiscOracle, IUtilityExecutionOra
|
|
|
526
605
|
|
|
527
606
|
protected async getSharedSecret(address: AztecAddress, ephPk: Point): Promise<Point> {
|
|
528
607
|
// TODO(#12656): return an app-siloed secret
|
|
529
|
-
const recipientCompleteAddress = await this.
|
|
608
|
+
const recipientCompleteAddress = await this.getCompleteAddressOrFail(address);
|
|
530
609
|
const ivskM = await this.keyStore.getMasterSecretKey(
|
|
531
610
|
recipientCompleteAddress.publicKeys.masterIncomingViewingPublicKey,
|
|
532
611
|
);
|