@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.
Files changed (230) hide show
  1. package/dest/bin/check_oracle_version.js +1 -1
  2. package/dest/block_synchronizer/block_synchronizer.d.ts +11 -5
  3. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  4. package/dest/block_synchronizer/block_synchronizer.js +72 -21
  5. package/dest/config/index.d.ts +3 -1
  6. package/dest/config/index.d.ts.map +1 -1
  7. package/dest/config/index.js +17 -0
  8. package/dest/contract_function_simulator/benchmarked_node.d.ts +9 -0
  9. package/dest/contract_function_simulator/benchmarked_node.d.ts.map +1 -0
  10. package/dest/contract_function_simulator/benchmarked_node.js +77 -0
  11. package/dest/contract_function_simulator/contract_function_simulator.d.ts +55 -34
  12. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  13. package/dest/contract_function_simulator/contract_function_simulator.js +193 -79
  14. package/dest/contract_function_simulator/execution_note_cache.d.ts +18 -9
  15. package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
  16. package/dest/contract_function_simulator/execution_note_cache.js +45 -28
  17. package/dest/contract_function_simulator/index.d.ts +2 -2
  18. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  19. package/dest/contract_function_simulator/index.js +1 -1
  20. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +1 -1
  21. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +1 -1
  22. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +1 -1
  23. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +1 -1
  24. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +4 -10
  25. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
  26. package/dest/contract_function_simulator/noir-structs/utility_context.js +7 -18
  27. package/dest/contract_function_simulator/oracle/interfaces.d.ts +17 -13
  28. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  29. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -1
  30. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
  31. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +6 -6
  32. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
  33. package/dest/contract_function_simulator/oracle/note_packing_utils.js +8 -8
  34. package/dest/contract_function_simulator/oracle/oracle.d.ts +12 -10
  35. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  36. package/dest/contract_function_simulator/oracle/oracle.js +67 -44
  37. package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -26
  38. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  39. package/dest/contract_function_simulator/oracle/private_execution.js +0 -35
  40. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +43 -35
  41. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  42. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +90 -25
  43. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +65 -33
  44. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  45. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +131 -109
  46. package/dest/contract_sync/contract_sync_service.d.ts +42 -0
  47. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
  48. package/dest/contract_sync/contract_sync_service.js +97 -0
  49. package/dest/contract_sync/helpers.d.ts +28 -0
  50. package/dest/contract_sync/helpers.d.ts.map +1 -0
  51. package/dest/contract_sync/helpers.js +55 -0
  52. package/dest/debug/pxe_debug_utils.d.ts +22 -9
  53. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  54. package/dest/debug/pxe_debug_utils.js +28 -17
  55. package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
  56. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  57. package/dest/entrypoints/client/bundle/utils.js +21 -7
  58. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  59. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  60. package/dest/entrypoints/client/lazy/utils.js +22 -8
  61. package/dest/entrypoints/pxe_creation_options.d.ts +3 -2
  62. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  63. package/dest/entrypoints/server/index.d.ts +3 -1
  64. package/dest/entrypoints/server/index.d.ts.map +1 -1
  65. package/dest/entrypoints/server/index.js +2 -0
  66. package/dest/entrypoints/server/utils.d.ts +1 -1
  67. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  68. package/dest/entrypoints/server/utils.js +28 -9
  69. package/dest/events/event_service.d.ts +6 -6
  70. package/dest/events/event_service.d.ts.map +1 -1
  71. package/dest/events/event_service.js +19 -22
  72. package/dest/events/private_event_filter_validator.d.ts +5 -5
  73. package/dest/events/private_event_filter_validator.d.ts.map +1 -1
  74. package/dest/events/private_event_filter_validator.js +5 -6
  75. package/dest/job_coordinator/job_coordinator.d.ts +3 -2
  76. package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
  77. package/dest/job_coordinator/job_coordinator.js +3 -2
  78. package/dest/logs/log_service.d.ts +7 -5
  79. package/dest/logs/log_service.d.ts.map +1 -1
  80. package/dest/logs/log_service.js +27 -29
  81. package/dest/notes/note_service.d.ts +7 -7
  82. package/dest/notes/note_service.d.ts.map +1 -1
  83. package/dest/notes/note_service.js +31 -36
  84. package/dest/oracle_version.d.ts +3 -3
  85. package/dest/oracle_version.d.ts.map +1 -1
  86. package/dest/oracle_version.js +4 -3
  87. package/dest/private_kernel/hints/index.d.ts +2 -2
  88. package/dest/private_kernel/hints/index.d.ts.map +1 -1
  89. package/dest/private_kernel/hints/index.js +1 -1
  90. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +28 -0
  91. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
  92. package/dest/private_kernel/hints/{build_private_kernel_reset_private_inputs.js → private_kernel_reset_private_inputs_builder.js} +12 -6
  93. package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
  94. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  95. package/dest/private_kernel/private_kernel_execution_prover.js +3 -3
  96. package/dest/private_kernel/private_kernel_oracle.d.ts +23 -28
  97. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  98. package/dest/private_kernel/private_kernel_oracle.js +90 -2
  99. package/dest/pxe.d.ts +74 -58
  100. package/dest/pxe.d.ts.map +1 -1
  101. package/dest/pxe.js +100 -114
  102. package/dest/storage/address_store/address_store.d.ts +1 -1
  103. package/dest/storage/address_store/address_store.d.ts.map +1 -1
  104. package/dest/storage/address_store/address_store.js +12 -11
  105. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
  106. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
  107. package/dest/storage/anchor_block_store/anchor_block_store.js +8 -1
  108. package/dest/storage/capsule_store/capsule_store.d.ts +24 -9
  109. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  110. package/dest/storage/capsule_store/capsule_store.js +130 -23
  111. package/dest/storage/contract_store/contract_store.d.ts +1 -2
  112. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  113. package/dest/storage/contract_store/contract_store.js +27 -30
  114. package/dest/storage/metadata.d.ts +1 -1
  115. package/dest/storage/metadata.js +1 -1
  116. package/dest/storage/note_store/note_store.d.ts +50 -52
  117. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  118. package/dest/storage/note_store/note_store.js +284 -263
  119. package/dest/storage/note_store/stored_note.d.ts +16 -0
  120. package/dest/storage/note_store/stored_note.d.ts.map +1 -0
  121. package/dest/storage/note_store/stored_note.js +43 -0
  122. package/dest/storage/private_event_store/private_event_store.d.ts +43 -8
  123. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  124. package/dest/storage/private_event_store/private_event_store.js +226 -111
  125. package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
  126. package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
  127. package/dest/storage/private_event_store/stored_private_event.js +56 -0
  128. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +15 -8
  129. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  130. package/dest/storage/tagging_store/recipient_tagging_store.js +88 -19
  131. package/dest/storage/tagging_store/sender_address_book_store.d.ts +1 -1
  132. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -1
  133. package/dest/storage/tagging_store/sender_address_book_store.js +20 -14
  134. package/dest/storage/tagging_store/sender_tagging_store.d.ts +19 -9
  135. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  136. package/dest/storage/tagging_store/sender_tagging_store.js +252 -100
  137. package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
  138. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
  139. package/dest/tagging/get_all_logs_by_tags.js +46 -0
  140. package/dest/tagging/index.d.ts +2 -1
  141. package/dest/tagging/index.d.ts.map +1 -1
  142. package/dest/tagging/index.js +1 -0
  143. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +3 -2
  144. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  145. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +6 -6
  146. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +3 -2
  147. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
  148. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +5 -2
  149. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +3 -2
  150. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  151. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +7 -7
  152. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +1 -1
  153. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  154. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +5 -8
  155. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -2
  156. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  157. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +10 -5
  158. package/package.json +27 -18
  159. package/src/bin/check_oracle_version.ts +1 -0
  160. package/src/block_synchronizer/block_synchronizer.ts +91 -33
  161. package/src/config/index.ts +14 -0
  162. package/src/contract_function_simulator/benchmarked_node.ts +103 -0
  163. package/src/contract_function_simulator/contract_function_simulator.ts +341 -139
  164. package/src/contract_function_simulator/execution_note_cache.ts +44 -25
  165. package/src/contract_function_simulator/index.ts +1 -1
  166. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +1 -1
  167. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +1 -1
  168. package/src/contract_function_simulator/noir-structs/utility_context.ts +6 -25
  169. package/src/contract_function_simulator/oracle/interfaces.ts +22 -12
  170. package/src/contract_function_simulator/oracle/note_packing_utils.ts +10 -10
  171. package/src/contract_function_simulator/oracle/oracle.ts +79 -47
  172. package/src/contract_function_simulator/oracle/private_execution.ts +1 -67
  173. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +125 -103
  174. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +195 -116
  175. package/src/contract_sync/contract_sync_service.ts +145 -0
  176. package/src/contract_sync/helpers.ts +93 -0
  177. package/src/debug/pxe_debug_utils.ts +61 -17
  178. package/src/entrypoints/client/bundle/utils.ts +16 -15
  179. package/src/entrypoints/client/lazy/utils.ts +17 -15
  180. package/src/entrypoints/pxe_creation_options.ts +2 -1
  181. package/src/entrypoints/server/index.ts +2 -0
  182. package/src/entrypoints/server/utils.ts +22 -26
  183. package/src/events/event_service.ts +17 -25
  184. package/src/events/private_event_filter_validator.ts +3 -5
  185. package/src/job_coordinator/job_coordinator.ts +4 -3
  186. package/src/logs/log_service.ts +38 -29
  187. package/src/notes/note_service.ts +38 -43
  188. package/src/oracle_version.ts +4 -3
  189. package/src/private_kernel/hints/index.ts +1 -1
  190. package/src/private_kernel/hints/{build_private_kernel_reset_private_inputs.ts → private_kernel_reset_private_inputs_builder.ts} +32 -20
  191. package/src/private_kernel/private_kernel_execution_prover.ts +7 -4
  192. package/src/private_kernel/private_kernel_oracle.ts +116 -37
  193. package/src/pxe.ts +205 -183
  194. package/src/storage/address_store/address_store.ts +15 -15
  195. package/src/storage/anchor_block_store/anchor_block_store.ts +8 -0
  196. package/src/storage/capsule_store/capsule_store.ts +159 -23
  197. package/src/storage/contract_store/contract_store.ts +26 -35
  198. package/src/storage/metadata.ts +1 -1
  199. package/src/storage/note_store/note_store.ts +321 -319
  200. package/src/storage/note_store/stored_note.ts +48 -0
  201. package/src/storage/private_event_store/private_event_store.ts +292 -124
  202. package/src/storage/private_event_store/stored_private_event.ts +73 -0
  203. package/src/storage/tagging_store/recipient_tagging_store.ts +106 -20
  204. package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
  205. package/src/storage/tagging_store/sender_tagging_store.ts +293 -108
  206. package/src/tagging/get_all_logs_by_tags.ts +68 -0
  207. package/src/tagging/index.ts +1 -0
  208. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +16 -5
  209. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +7 -1
  210. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +9 -6
  211. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +5 -17
  212. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +16 -4
  213. package/dest/contract_function_simulator/proxied_node.d.ts +0 -9
  214. package/dest/contract_function_simulator/proxied_node.d.ts.map +0 -1
  215. package/dest/contract_function_simulator/proxied_node.js +0 -27
  216. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +0 -28
  217. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
  218. package/dest/private_kernel/private_kernel_oracle_impl.d.ts +0 -46
  219. package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +0 -1
  220. package/dest/private_kernel/private_kernel_oracle_impl.js +0 -85
  221. package/dest/public_storage/public_storage_service.d.ts +0 -24
  222. package/dest/public_storage/public_storage_service.d.ts.map +0 -1
  223. package/dest/public_storage/public_storage_service.js +0 -26
  224. package/dest/tree_membership/tree_membership_service.d.ts +0 -52
  225. package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
  226. package/dest/tree_membership/tree_membership_service.js +0 -84
  227. package/src/contract_function_simulator/proxied_node.ts +0 -33
  228. package/src/private_kernel/private_kernel_oracle_impl.ts +0 -127
  229. package/src/public_storage/public_storage_service.ts +0 -33
  230. 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 aztecNrDebugLog = createLogger('aztec-nr:debug_log');
50
-
51
- constructor(
52
- protected readonly contractAddress: AztecAddress,
53
- /** List of transient auth witnesses to be used during this simulation */
54
- protected readonly authWitnesses: AuthWitness[],
55
- protected readonly capsules: Capsule[], // TODO(#12425): Rename to transientCapsules
56
- protected readonly anchorBlockHeader: BlockHeader,
57
- protected readonly contractStore: ContractStore,
58
- protected readonly noteStore: NoteStore,
59
- protected readonly keyStore: KeyStore,
60
- protected readonly addressStore: AddressStore,
61
- protected readonly aztecNode: AztecNode,
62
- protected readonly anchorBlockStore: AnchorBlockStore,
63
- protected readonly recipientTaggingStore: RecipientTaggingStore,
64
- protected readonly senderAddressBookStore: SenderAddressBookStore,
65
- protected readonly capsuleStore: CapsuleStore,
66
- protected readonly privateEventStore: PrivateEventStore,
67
- protected readonly jobId: string,
68
- protected log = createLogger('simulator:client_view_context'),
69
- protected readonly scopes?: AztecAddress[],
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.from({
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 a given tree.
104
- * @param blockNumber - The block number at which to get the membership witness.
105
- * @param treeId - Id of the tree to get the sibling path from.
106
- * @param leafValue - The leaf value
107
- * @returns The index and sibling path concatenated [index, 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 utilityGetMembershipWitness(blockNumber: BlockNumber, treeId: MerkleTreeId, leafValue: Fr): Promise<Fr[]> {
110
- const treeMembershipService = new TreeMembershipService(this.aztecNode, this.anchorBlockStore);
111
- return treeMembershipService.getMembershipWitness(blockNumber, treeId, leafValue);
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 blockNumber - The block number at which to get the index.
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 async utilityGetNullifierMembershipWitness(
121
- blockNumber: BlockNumber,
184
+ public utilityGetNullifierMembershipWitness(
185
+ blockHash: BlockHash,
122
186
  nullifier: Fr,
123
187
  ): Promise<NullifierMembershipWitness | undefined> {
124
- return await this.aztecNode.getNullifierMembershipWitness(blockNumber, nullifier);
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 blockNumber - The block number at which to get the index.
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 async utilityGetLowNullifierMembershipWitness(
137
- blockNumber: BlockNumber,
200
+ public utilityGetLowNullifierMembershipWitness(
201
+ blockHash: BlockHash,
138
202
  nullifier: Fr,
139
203
  ): Promise<NullifierMembershipWitness | undefined> {
140
- const treeMembershipService = new TreeMembershipService(this.aztecNode, this.anchorBlockStore);
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 blockNumber - The block number at which to get the index.
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 async utilityGetPublicDataWitness(
151
- blockNumber: BlockNumber,
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 = (await this.anchorBlockStore.getBlockHeader()).getBlockNumber();
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?.getBlockHeader() || undefined;
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 utilityGetPublicKeysAndPartialAddress(account: AztecAddress): Promise<CompleteAddress> {
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 getCompleteAddress(account: AztecAddress): Promise<CompleteAddress> {
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.anchorBlockStore);
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 siloNullifier(this.contractAddress, innerNullifier!);
285
- const treeMembershipService = new TreeMembershipService(this.aztecNode, this.anchorBlockStore);
286
- const index = await treeMembershipService.getNullifierIndex(nullifier);
287
- return index !== undefined;
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 treeMembershipService = new TreeMembershipService(this.aztecNode, this.anchorBlockStore);
300
- const [messageIndex, siblingPath] = await treeMembershipService.getL1ToL2MembershipWitness(
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 values = [];
324
- const publicStorageService = new PublicStorageService(this.anchorBlockStore, this.aztecNode);
384
+ const slots = Array(numberOfElements)
385
+ .fill(0)
386
+ .map((_, i) => new Fr(startStorageSlot.value + BigInt(i)));
325
387
 
326
- // TODO: why do we serialize these requests? This should probably a single call
327
- // Privacy considerations?
328
- for (let i = 0n; i < numberOfElements; i++) {
329
- const storageSlot = new Fr(startStorageSlot.value + i);
330
- const value = await publicStorageService.getPublicStorageAt(blockNumber, contractAddress, storageSlot);
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
- public utilityDebugLog(level: number, message: string, fields: Fr[]): void {
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 debug log level: ${level}`);
416
+ throw new Error(`Invalid log level: ${level}`);
343
417
  }
344
418
  const levelName = LogLevels[level];
345
- this.aztecNrDebugLog[levelName](`${applyStringFormatting(message, fields)}`);
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.anchorBlockStore,
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.syncTaggedLogs(this.contractAddress, pendingTaggedLogArrayBaseSlot, this.scopes);
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 utilityValidateEnqueuedNotesAndEvents(
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 deliver notes
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.anchorBlockStore);
396
- const noteDeliveries = noteValidationRequests.map(request =>
397
- noteService.deliverNote(
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.anchorBlockStore, this.aztecNode, this.privateEventStore);
412
- const eventDeliveries = eventValidationRequests.map(request =>
413
- eventService.deliverEvent(
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([...noteDeliveries, ...eventDeliveries]);
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.anchorBlockStore,
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
- return this.capsuleStore.storeCapsule(this.contractAddress, slot, capsule);
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
- return this.capsuleStore.deleteCapsule(this.contractAddress, slot);
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.getCompleteAddress(address);
608
+ const recipientCompleteAddress = await this.getCompleteAddressOrFail(address);
530
609
  const ivskM = await this.keyStore.getMasterSecretKey(
531
610
  recipientCompleteAddress.publicKeys.masterIncomingViewingPublicKey,
532
611
  );