@aztec/pxe 0.0.1-commit.f295ac2 → 0.0.1-commit.f8ca9b2f3

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 (187) hide show
  1. package/dest/bin/check_oracle_version.js +1 -1
  2. package/dest/block_synchronizer/block_synchronizer.d.ts +9 -5
  3. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  4. package/dest/block_synchronizer/block_synchronizer.js +62 -16
  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/contract_function_simulator.d.ts +50 -28
  9. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  10. package/dest/contract_function_simulator/contract_function_simulator.js +71 -40
  11. package/dest/contract_function_simulator/index.d.ts +2 -2
  12. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  13. package/dest/contract_function_simulator/index.js +1 -1
  14. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +1 -1
  15. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +1 -1
  16. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +1 -1
  17. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +1 -1
  18. package/dest/contract_function_simulator/oracle/interfaces.d.ts +15 -12
  19. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  20. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +4 -4
  21. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
  22. package/dest/contract_function_simulator/oracle/note_packing_utils.js +4 -4
  23. package/dest/contract_function_simulator/oracle/oracle.d.ts +8 -6
  24. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  25. package/dest/contract_function_simulator/oracle/oracle.js +56 -34
  26. package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -22
  27. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  28. package/dest/contract_function_simulator/oracle/private_execution.js +0 -37
  29. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +43 -36
  30. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  31. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +79 -23
  32. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +61 -30
  33. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  34. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +103 -86
  35. package/dest/contract_sync/contract_sync_service.d.ts +41 -0
  36. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
  37. package/dest/contract_sync/contract_sync_service.js +82 -0
  38. package/dest/contract_sync/helpers.d.ts +28 -0
  39. package/dest/contract_sync/helpers.d.ts.map +1 -0
  40. package/dest/contract_sync/helpers.js +55 -0
  41. package/dest/debug/pxe_debug_utils.d.ts +22 -9
  42. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  43. package/dest/debug/pxe_debug_utils.js +28 -17
  44. package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
  45. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  46. package/dest/entrypoints/client/bundle/utils.js +21 -7
  47. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  48. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  49. package/dest/entrypoints/client/lazy/utils.js +22 -8
  50. package/dest/entrypoints/pxe_creation_options.d.ts +3 -2
  51. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  52. package/dest/entrypoints/server/index.d.ts +2 -1
  53. package/dest/entrypoints/server/index.d.ts.map +1 -1
  54. package/dest/entrypoints/server/index.js +1 -0
  55. package/dest/entrypoints/server/utils.d.ts +1 -1
  56. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  57. package/dest/entrypoints/server/utils.js +28 -9
  58. package/dest/events/event_service.d.ts +5 -6
  59. package/dest/events/event_service.d.ts.map +1 -1
  60. package/dest/events/event_service.js +6 -7
  61. package/dest/job_coordinator/job_coordinator.d.ts +3 -2
  62. package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
  63. package/dest/job_coordinator/job_coordinator.js +3 -2
  64. package/dest/logs/log_service.d.ts +6 -5
  65. package/dest/logs/log_service.d.ts.map +1 -1
  66. package/dest/logs/log_service.js +20 -19
  67. package/dest/notes/note_service.d.ts +6 -6
  68. package/dest/notes/note_service.d.ts.map +1 -1
  69. package/dest/notes/note_service.js +14 -14
  70. package/dest/oracle_version.d.ts +3 -3
  71. package/dest/oracle_version.d.ts.map +1 -1
  72. package/dest/oracle_version.js +4 -3
  73. package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
  74. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  75. package/dest/private_kernel/private_kernel_execution_prover.js +2 -2
  76. package/dest/private_kernel/private_kernel_oracle.d.ts +3 -3
  77. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  78. package/dest/pxe.d.ts +64 -22
  79. package/dest/pxe.d.ts.map +1 -1
  80. package/dest/pxe.js +74 -45
  81. package/dest/storage/address_store/address_store.d.ts +1 -1
  82. package/dest/storage/address_store/address_store.d.ts.map +1 -1
  83. package/dest/storage/address_store/address_store.js +12 -11
  84. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
  85. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
  86. package/dest/storage/anchor_block_store/anchor_block_store.js +8 -1
  87. package/dest/storage/capsule_store/capsule_store.js +6 -8
  88. package/dest/storage/contract_store/contract_store.d.ts +1 -2
  89. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  90. package/dest/storage/contract_store/contract_store.js +27 -30
  91. package/dest/storage/metadata.d.ts +1 -1
  92. package/dest/storage/metadata.js +1 -1
  93. package/dest/storage/note_store/note_store.d.ts +48 -50
  94. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  95. package/dest/storage/note_store/note_store.js +279 -252
  96. package/dest/storage/note_store/stored_note.d.ts +16 -0
  97. package/dest/storage/note_store/stored_note.d.ts.map +1 -0
  98. package/dest/storage/note_store/stored_note.js +43 -0
  99. package/dest/storage/private_event_store/private_event_store.d.ts +17 -4
  100. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  101. package/dest/storage/private_event_store/private_event_store.js +198 -147
  102. package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
  103. package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
  104. package/dest/storage/private_event_store/stored_private_event.js +56 -0
  105. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +1 -1
  106. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  107. package/dest/storage/tagging_store/recipient_tagging_store.js +31 -19
  108. package/dest/storage/tagging_store/sender_address_book_store.d.ts +1 -1
  109. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -1
  110. package/dest/storage/tagging_store/sender_address_book_store.js +20 -14
  111. package/dest/storage/tagging_store/sender_tagging_store.d.ts +1 -1
  112. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  113. package/dest/storage/tagging_store/sender_tagging_store.js +183 -113
  114. package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
  115. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
  116. package/dest/tagging/get_all_logs_by_tags.js +46 -0
  117. package/dest/tagging/index.d.ts +2 -1
  118. package/dest/tagging/index.d.ts.map +1 -1
  119. package/dest/tagging/index.js +1 -0
  120. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +3 -2
  121. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  122. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +2 -2
  123. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +3 -2
  124. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
  125. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +5 -2
  126. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +3 -2
  127. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  128. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +2 -2
  129. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +1 -1
  130. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  131. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +5 -8
  132. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +3 -2
  133. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  134. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +7 -4
  135. package/package.json +25 -16
  136. package/src/bin/check_oracle_version.ts +1 -0
  137. package/src/block_synchronizer/block_synchronizer.ts +76 -33
  138. package/src/config/index.ts +14 -0
  139. package/src/contract_function_simulator/contract_function_simulator.ts +116 -86
  140. package/src/contract_function_simulator/index.ts +1 -1
  141. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +1 -1
  142. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +1 -1
  143. package/src/contract_function_simulator/oracle/interfaces.ts +20 -11
  144. package/src/contract_function_simulator/oracle/note_packing_utils.ts +4 -4
  145. package/src/contract_function_simulator/oracle/oracle.ts +62 -32
  146. package/src/contract_function_simulator/oracle/private_execution.ts +1 -60
  147. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +113 -102
  148. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +165 -95
  149. package/src/contract_sync/contract_sync_service.ts +129 -0
  150. package/src/contract_sync/helpers.ts +93 -0
  151. package/src/debug/pxe_debug_utils.ts +60 -17
  152. package/src/entrypoints/client/bundle/utils.ts +16 -15
  153. package/src/entrypoints/client/lazy/utils.ts +17 -15
  154. package/src/entrypoints/pxe_creation_options.ts +2 -1
  155. package/src/entrypoints/server/index.ts +1 -0
  156. package/src/entrypoints/server/utils.ts +22 -26
  157. package/src/events/event_service.ts +5 -7
  158. package/src/job_coordinator/job_coordinator.ts +4 -3
  159. package/src/logs/log_service.ts +31 -15
  160. package/src/notes/note_service.ts +21 -20
  161. package/src/oracle_version.ts +4 -3
  162. package/src/private_kernel/private_kernel_execution_prover.ts +6 -3
  163. package/src/private_kernel/private_kernel_oracle.ts +2 -2
  164. package/src/pxe.ts +165 -75
  165. package/src/storage/address_store/address_store.ts +15 -15
  166. package/src/storage/anchor_block_store/anchor_block_store.ts +8 -0
  167. package/src/storage/capsule_store/capsule_store.ts +8 -8
  168. package/src/storage/contract_store/contract_store.ts +26 -35
  169. package/src/storage/metadata.ts +1 -1
  170. package/src/storage/note_store/note_store.ts +318 -318
  171. package/src/storage/note_store/stored_note.ts +48 -0
  172. package/src/storage/private_event_store/private_event_store.ts +250 -190
  173. package/src/storage/private_event_store/stored_private_event.ts +73 -0
  174. package/src/storage/tagging_store/recipient_tagging_store.ts +31 -21
  175. package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
  176. package/src/storage/tagging_store/sender_tagging_store.ts +210 -126
  177. package/src/tagging/get_all_logs_by_tags.ts +68 -0
  178. package/src/tagging/index.ts +1 -0
  179. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +11 -1
  180. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +7 -1
  181. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +3 -1
  182. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +5 -17
  183. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +12 -3
  184. package/dest/tree_membership/tree_membership_service.d.ts +0 -50
  185. package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
  186. package/dest/tree_membership/tree_membership_service.js +0 -75
  187. package/src/tree_membership/tree_membership_service.ts +0 -97
@@ -7,6 +7,7 @@ import {
7
7
  FIXED_AVM_STARTUP_L2_GAS,
8
8
  FIXED_DA_GAS,
9
9
  FIXED_L2_GAS,
10
+ GeneratorIndex,
10
11
  L2_GAS_PER_CONTRACT_CLASS_LOG,
11
12
  L2_GAS_PER_PRIVATE_LOG,
12
13
  MAX_CONTRACT_CLASS_LOGS_PER_TX,
@@ -17,7 +18,7 @@ import {
17
18
  MAX_PRIVATE_LOGS_PER_TX,
18
19
  } from '@aztec/constants';
19
20
  import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection';
20
- import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
21
+ import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
21
22
  import { Fr } from '@aztec/foundation/curves/bn254';
22
23
  import { type Logger, createLogger } from '@aztec/foundation/log';
23
24
  import { Timer } from '@aztec/foundation/timer';
@@ -71,8 +72,8 @@ import {
71
72
  getFinalMinRevertibleSideEffectCounter,
72
73
  } from '@aztec/stdlib/tx';
73
74
 
75
+ import type { ContractSyncService } from '../contract_sync/contract_sync_service.js';
74
76
  import type { AddressStore } from '../storage/address_store/address_store.js';
75
- import type { AnchorBlockStore } from '../storage/anchor_block_store/anchor_block_store.js';
76
77
  import type { CapsuleStore } from '../storage/capsule_store/capsule_store.js';
77
78
  import type { ContractStore } from '../storage/contract_store/contract_store.js';
78
79
  import type { NoteStore } from '../storage/note_store/note_store.js';
@@ -85,65 +86,96 @@ import { ExecutionNoteCache } from './execution_note_cache.js';
85
86
  import { ExecutionTaggingIndexCache } from './execution_tagging_index_cache.js';
86
87
  import { HashedValuesCache } from './hashed_values_cache.js';
87
88
  import { Oracle } from './oracle/oracle.js';
88
- import { executePrivateFunction, verifyCurrentClassId } from './oracle/private_execution.js';
89
+ import { executePrivateFunction } from './oracle/private_execution.js';
89
90
  import { PrivateExecutionOracle } from './oracle/private_execution_oracle.js';
90
91
  import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
91
92
 
93
+ /** Options for ContractFunctionSimulator.run. */
94
+ export type ContractSimulatorRunOpts = {
95
+ /** The address of the contract (should match request.origin). */
96
+ contractAddress: AztecAddress;
97
+ /** The function selector of the entry point. */
98
+ selector: FunctionSelector;
99
+ /** The address calling the function. Can be replaced to simulate a call from another contract or account. */
100
+ msgSender?: AztecAddress;
101
+ /** The block header to use as base state for this run. */
102
+ anchorBlockHeader: BlockHeader;
103
+ /** The address used as a tagging sender when emitting private logs. */
104
+ senderForTags?: AztecAddress;
105
+ /** The accounts whose notes we can access in this call. Defaults to all. */
106
+ scopes?: AztecAddress[];
107
+ /** The job ID for staged writes. */
108
+ jobId: string;
109
+ };
110
+
111
+ /** Args for ContractFunctionSimulator constructor. */
112
+ export type ContractFunctionSimulatorArgs = {
113
+ contractStore: ContractStore;
114
+ noteStore: NoteStore;
115
+ keyStore: KeyStore;
116
+ addressStore: AddressStore;
117
+ aztecNode: AztecNode;
118
+ senderTaggingStore: SenderTaggingStore;
119
+ recipientTaggingStore: RecipientTaggingStore;
120
+ senderAddressBookStore: SenderAddressBookStore;
121
+ capsuleStore: CapsuleStore;
122
+ privateEventStore: PrivateEventStore;
123
+ simulator: CircuitSimulator;
124
+ contractSyncService: ContractSyncService;
125
+ };
126
+
92
127
  /**
93
128
  * The contract function simulator.
94
129
  */
95
130
  export class ContractFunctionSimulator {
96
- private log: Logger;
97
-
98
- constructor(
99
- private contractStore: ContractStore,
100
- private noteStore: NoteStore,
101
- private keyStore: KeyStore,
102
- private addressStore: AddressStore,
103
- private aztecNode: AztecNode,
104
- private anchorBlockStore: AnchorBlockStore,
105
- private senderTaggingStore: SenderTaggingStore,
106
- private recipientTaggingStore: RecipientTaggingStore,
107
- private senderAddressBookStore: SenderAddressBookStore,
108
- private capsuleStore: CapsuleStore,
109
- private privateEventStore: PrivateEventStore,
110
- private simulator: CircuitSimulator,
111
- ) {
131
+ private readonly log: Logger;
132
+ private readonly contractStore: ContractStore;
133
+ private readonly noteStore: NoteStore;
134
+ private readonly keyStore: KeyStore;
135
+ private readonly addressStore: AddressStore;
136
+ private readonly aztecNode: AztecNode;
137
+ private readonly senderTaggingStore: SenderTaggingStore;
138
+ private readonly recipientTaggingStore: RecipientTaggingStore;
139
+ private readonly senderAddressBookStore: SenderAddressBookStore;
140
+ private readonly capsuleStore: CapsuleStore;
141
+ private readonly privateEventStore: PrivateEventStore;
142
+ private readonly simulator: CircuitSimulator;
143
+ private readonly contractSyncService: ContractSyncService;
144
+
145
+ constructor(args: ContractFunctionSimulatorArgs) {
146
+ this.contractStore = args.contractStore;
147
+ this.noteStore = args.noteStore;
148
+ this.keyStore = args.keyStore;
149
+ this.addressStore = args.addressStore;
150
+ this.aztecNode = args.aztecNode;
151
+ this.senderTaggingStore = args.senderTaggingStore;
152
+ this.recipientTaggingStore = args.recipientTaggingStore;
153
+ this.senderAddressBookStore = args.senderAddressBookStore;
154
+ this.capsuleStore = args.capsuleStore;
155
+ this.privateEventStore = args.privateEventStore;
156
+ this.simulator = args.simulator;
157
+ this.contractSyncService = args.contractSyncService;
112
158
  this.log = createLogger('simulator');
113
159
  }
114
160
 
115
161
  /**
116
162
  * Runs a private function.
117
163
  * @param request - The transaction request.
118
- * @param entryPointArtifact - The artifact of the entry point function.
119
- * @param contractAddress - The address of the contract (should match request.origin)
120
- * @param msgSender - The address calling the function. This can be replaced to simulate a call from another contract
121
- * or a specific account.
122
- * @param anchorBlockHeader - The block header to use as base state for this run.
123
- * @param senderForTags - The address that is used as a tagging sender when emitting private logs. Returned from
124
- * the `privateGetSenderForTags` oracle.
125
- * @param scopes - The accounts whose notes we can access in this call. Currently optional and will default to all.
126
- * @param jobId - The job ID for staged writes.
127
- * @returns The result of the execution.
128
164
  */
129
165
  public async run(
130
166
  request: TxExecutionRequest,
131
- contractAddress: AztecAddress,
132
- selector: FunctionSelector,
133
- msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE),
134
- anchorBlockHeader: BlockHeader,
135
- senderForTags: AztecAddress | undefined,
136
- scopes: AztecAddress[] | undefined,
137
- jobId: string,
167
+ {
168
+ contractAddress,
169
+ selector,
170
+ msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE),
171
+ anchorBlockHeader,
172
+ senderForTags,
173
+ scopes,
174
+ jobId,
175
+ }: ContractSimulatorRunOpts,
138
176
  ): Promise<PrivateExecutionResult> {
139
177
  const simulatorSetupTimer = new Timer();
140
178
 
141
- await this.contractStore.syncPrivateState(contractAddress, selector, privateSyncCall =>
142
- this.runUtility(privateSyncCall, [], anchorBlockHeader, scopes, jobId),
143
- );
144
-
145
- await verifyCurrentClassId(contractAddress, this.aztecNode, this.contractStore, anchorBlockHeader);
146
-
147
179
  const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(contractAddress, selector);
148
180
 
149
181
  if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
@@ -170,38 +202,37 @@ export class ContractFunctionSimulator {
170
202
  const noteCache = new ExecutionNoteCache(protocolNullifier);
171
203
  const taggingIndexCache = new ExecutionTaggingIndexCache();
172
204
 
173
- const privateExecutionOracle = new PrivateExecutionOracle(
174
- request.firstCallArgsHash,
175
- request.txContext,
205
+ const privateExecutionOracle = new PrivateExecutionOracle({
206
+ argsHash: request.firstCallArgsHash,
207
+ txContext: request.txContext,
176
208
  callContext,
177
209
  anchorBlockHeader,
178
- async call => {
210
+ utilityExecutor: async call => {
179
211
  await this.runUtility(call, [], anchorBlockHeader, scopes, jobId);
180
212
  },
181
- request.authWitnesses,
182
- request.capsules,
183
- HashedValuesCache.create(request.argsOfCalls),
213
+ authWitnesses: request.authWitnesses,
214
+ capsules: request.capsules,
215
+ executionCache: HashedValuesCache.create(request.argsOfCalls),
184
216
  noteCache,
185
217
  taggingIndexCache,
186
- this.contractStore,
187
- this.noteStore,
188
- this.keyStore,
189
- this.addressStore,
190
- this.aztecNode,
191
- this.anchorBlockStore,
192
- this.senderTaggingStore,
193
- this.recipientTaggingStore,
194
- this.senderAddressBookStore,
195
- this.capsuleStore,
196
- this.privateEventStore,
218
+ contractStore: this.contractStore,
219
+ noteStore: this.noteStore,
220
+ keyStore: this.keyStore,
221
+ addressStore: this.addressStore,
222
+ aztecNode: this.aztecNode,
223
+ senderTaggingStore: this.senderTaggingStore,
224
+ recipientTaggingStore: this.recipientTaggingStore,
225
+ senderAddressBookStore: this.senderAddressBookStore,
226
+ capsuleStore: this.capsuleStore,
227
+ privateEventStore: this.privateEventStore,
228
+ contractSyncService: this.contractSyncService,
197
229
  jobId,
198
- 0, // totalPublicArgsCount
199
- startSideEffectCounter,
200
- undefined, // log
230
+ totalPublicCalldataCount: 0,
231
+ sideEffectCounter: startSideEffectCounter,
201
232
  scopes,
202
233
  senderForTags,
203
- this.simulator,
204
- );
234
+ simulator: this.simulator,
235
+ });
205
236
 
206
237
  const setupTime = simulatorSetupTimer.ms();
207
238
 
@@ -268,33 +299,29 @@ export class ContractFunctionSimulator {
268
299
  scopes: AztecAddress[] | undefined,
269
300
  jobId: string,
270
301
  ): Promise<Fr[]> {
271
- await verifyCurrentClassId(call.to, this.aztecNode, this.contractStore, anchorBlockHeader);
272
-
273
302
  const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
274
303
 
275
304
  if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
276
305
  throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
277
306
  }
278
307
 
279
- const oracle = new UtilityExecutionOracle(
280
- call.to,
281
- authwits,
282
- [],
308
+ const oracle = new UtilityExecutionOracle({
309
+ contractAddress: call.to,
310
+ authWitnesses: authwits,
311
+ capsules: [],
283
312
  anchorBlockHeader,
284
- this.contractStore,
285
- this.noteStore,
286
- this.keyStore,
287
- this.addressStore,
288
- this.aztecNode,
289
- this.anchorBlockStore,
290
- this.recipientTaggingStore,
291
- this.senderAddressBookStore,
292
- this.capsuleStore,
293
- this.privateEventStore,
313
+ contractStore: this.contractStore,
314
+ noteStore: this.noteStore,
315
+ keyStore: this.keyStore,
316
+ addressStore: this.addressStore,
317
+ aztecNode: this.aztecNode,
318
+ recipientTaggingStore: this.recipientTaggingStore,
319
+ senderAddressBookStore: this.senderAddressBookStore,
320
+ capsuleStore: this.capsuleStore,
321
+ privateEventStore: this.privateEventStore,
294
322
  jobId,
295
- undefined,
296
323
  scopes,
297
- );
324
+ });
298
325
 
299
326
  try {
300
327
  this.log.verbose(`Executing utility function ${entryPointArtifact.name}`, {
@@ -367,7 +394,7 @@ class OrderedSideEffect<T> {
367
394
  */
368
395
  export async function generateSimulatedProvingResult(
369
396
  privateExecutionResult: PrivateExecutionResult,
370
- contractStore: ContractStore,
397
+ debugFunctionNameGetter: (contractAddress: AztecAddress, functionSelector: FunctionSelector) => Promise<string>,
371
398
  minRevertibleSideEffectCounterOverride?: number,
372
399
  ): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
373
400
  const siloedNoteHashes: OrderedSideEffect<Fr>[] = [];
@@ -409,7 +436,10 @@ export async function generateSimulatedProvingResult(
409
436
 
410
437
  const privateLogsFromExecution = await Promise.all(
411
438
  execution.publicInputs.privateLogs.getActiveItems().map(async metadata => {
412
- metadata.log.fields[0] = await poseidon2Hash([contractAddress, metadata.log.fields[0]]);
439
+ metadata.log.fields[0] = await poseidon2HashWithSeparator(
440
+ [contractAddress, metadata.log.fields[0]],
441
+ GeneratorIndex.PRIVATE_LOG_FIRST_FIELD,
442
+ );
413
443
  return new OrderedSideEffect(metadata.log, metadata.counter);
414
444
  }),
415
445
  );
@@ -445,7 +475,7 @@ export async function generateSimulatedProvingResult(
445
475
  : execution.publicInputs.publicTeardownCallRequest;
446
476
 
447
477
  executionSteps.push({
448
- functionName: await contractStore.getDebugFunctionName(
478
+ functionName: await debugFunctionNameGetter(
449
479
  execution.publicInputs.callContext.contractAddress,
450
480
  execution.publicInputs.callContext.functionSelector,
451
481
  ),
@@ -9,5 +9,5 @@ export { PrivateExecutionOracle } from './oracle/private_execution_oracle.js';
9
9
  export { Oracle } from './oracle/oracle.js';
10
10
  export { executePrivateFunction, extractPrivateCircuitPublicInputs } from './oracle/private_execution.js';
11
11
  export { generateSimulatedProvingResult } from './contract_function_simulator.js';
12
- export { packAsRetrievedNote } from './oracle/note_packing_utils.js';
12
+ export { packAsHintedNote } from './oracle/note_packing_utils.js';
13
13
  export { UtilityContext } from './noir-structs/utility_context.js';
@@ -8,7 +8,7 @@ import { TxHash } from '@aztec/stdlib/tx';
8
8
  const MAX_EVENT_SERIALIZED_LEN = 12;
9
9
 
10
10
  /**
11
- * Intermediate struct used to perform batch event validation by PXE. The `utilityValidateEnqueuedNotesAndEvents` oracle
11
+ * Intermediate struct used to perform batch event validation by PXE. The `utilityValidateAndStoreEnqueuedNotesAndEvents` oracle
12
12
  * expects for values of this type to be stored in a `CapsuleArray`.
13
13
  */
14
14
  export class EventValidationRequest {
@@ -7,7 +7,7 @@ import { TxHash } from '@aztec/stdlib/tx';
7
7
  export const MAX_NOTE_PACKED_LEN = 10;
8
8
 
9
9
  /**
10
- * Intermediate struct used to perform batch note validation by PXE. The `utilityValidateEnqueuedNotesAndEvents` oracle
10
+ * Intermediate struct used to perform batch note validation by PXE. The `utilityValidateAndStoreEnqueuedNotesAndEvents` oracle
11
11
  * expects for values of this type to be stored in a `CapsuleArray`.
12
12
  */
13
13
  export class NoteValidationRequest {
@@ -1,15 +1,16 @@
1
- import type { L1_TO_L2_MSG_TREE_HEIGHT } from '@aztec/constants';
1
+ import type { ARCHIVE_HEIGHT, L1_TO_L2_MSG_TREE_HEIGHT, NOTE_HASH_TREE_HEIGHT } from '@aztec/constants';
2
2
  import type { BlockNumber } from '@aztec/foundation/branded-types';
3
3
  import { Fr } from '@aztec/foundation/curves/bn254';
4
4
  import { Point } from '@aztec/foundation/curves/grumpkin';
5
+ import { MembershipWitness } from '@aztec/foundation/trees';
5
6
  import type { FunctionSelector, NoteSelector } from '@aztec/stdlib/abi';
6
7
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
7
- import { L2BlockHash } from '@aztec/stdlib/block';
8
+ import { BlockHash } from '@aztec/stdlib/block';
8
9
  import type { CompleteAddress, ContractInstance } from '@aztec/stdlib/contract';
9
10
  import type { KeyValidationRequest } from '@aztec/stdlib/kernel';
10
11
  import type { ContractClassLog, Tag } from '@aztec/stdlib/logs';
11
12
  import type { Note, NoteStatus } from '@aztec/stdlib/note';
12
- import { type MerkleTreeId, type NullifierMembershipWitness, PublicDataWitness } from '@aztec/stdlib/trees';
13
+ import { type NullifierMembershipWitness, PublicDataWitness } from '@aztec/stdlib/trees';
13
14
  import type { BlockHeader } from '@aztec/stdlib/tx';
14
15
 
15
16
  import type { UtilityContext } from '../noir-structs/utility_context.js';
@@ -53,7 +54,7 @@ export interface IMiscOracle {
53
54
 
54
55
  utilityGetRandomField(): Fr;
55
56
  utilityAssertCompatibleOracleVersion(version: number): void;
56
- utilityDebugLog(level: number, message: string, fields: Fr[]): void;
57
+ utilityLog(level: number, message: string, fields: Fr[]): Promise<void>;
57
58
  }
58
59
 
59
60
  /**
@@ -66,18 +67,25 @@ export interface IUtilityExecutionOracle {
66
67
  utilityGetUtilityContext(): UtilityContext;
67
68
  utilityGetKeyValidationRequest(pkMHash: Fr): Promise<KeyValidationRequest>;
68
69
  utilityGetContractInstance(address: AztecAddress): Promise<ContractInstance>;
69
- utilityGetMembershipWitness(blockHash: L2BlockHash, treeId: MerkleTreeId, leafValue: Fr): Promise<Fr[] | undefined>;
70
+ utilityGetNoteHashMembershipWitness(
71
+ anchorBlockHash: BlockHash,
72
+ noteHash: Fr,
73
+ ): Promise<MembershipWitness<typeof NOTE_HASH_TREE_HEIGHT> | undefined>;
74
+ utilityGetBlockHashMembershipWitness(
75
+ anchorBlockHash: BlockHash,
76
+ blockHash: BlockHash,
77
+ ): Promise<MembershipWitness<typeof ARCHIVE_HEIGHT> | undefined>;
70
78
  utilityGetNullifierMembershipWitness(
71
- blockHash: L2BlockHash,
79
+ anchorBlockHash: BlockHash,
72
80
  nullifier: Fr,
73
81
  ): Promise<NullifierMembershipWitness | undefined>;
74
- utilityGetPublicDataWitness(blockHash: L2BlockHash, leafSlot: Fr): Promise<PublicDataWitness | undefined>;
82
+ utilityGetPublicDataWitness(anchorBlockHash: BlockHash, leafSlot: Fr): Promise<PublicDataWitness | undefined>;
75
83
  utilityGetLowNullifierMembershipWitness(
76
- blockHash: L2BlockHash,
84
+ anchorBlockHash: BlockHash,
77
85
  nullifier: Fr,
78
86
  ): Promise<NullifierMembershipWitness | undefined>;
79
87
  utilityGetBlockHeader(blockNumber: BlockNumber): Promise<BlockHeader | undefined>;
80
- utilityGetPublicKeysAndPartialAddress(account: AztecAddress): Promise<CompleteAddress>;
88
+ utilityTryGetPublicKeysAndPartialAddress(account: AztecAddress): Promise<CompleteAddress | undefined>;
81
89
  utilityGetAuthWitness(messageHash: Fr): Promise<Fr[] | undefined>;
82
90
  utilityGetNotes(
83
91
  owner: AztecAddress | undefined,
@@ -103,13 +111,13 @@ export interface IUtilityExecutionOracle {
103
111
  secret: Fr,
104
112
  ): Promise<MessageLoadOracleInputs<typeof L1_TO_L2_MSG_TREE_HEIGHT>>;
105
113
  utilityStorageRead(
106
- blockHash: L2BlockHash,
114
+ anchorBlockHash: BlockHash,
107
115
  contractAddress: AztecAddress,
108
116
  startStorageSlot: Fr,
109
117
  numberOfElements: number,
110
118
  ): Promise<Fr[]>;
111
119
  utilityFetchTaggedLogs(pendingTaggedLogArrayBaseSlot: Fr): Promise<void>;
112
- utilityValidateEnqueuedNotesAndEvents(
120
+ utilityValidateAndStoreEnqueuedNotesAndEvents(
113
121
  contractAddress: AztecAddress,
114
122
  noteValidationRequestsArrayBaseSlot: Fr,
115
123
  eventValidationRequestsArrayBaseSlot: Fr,
@@ -147,6 +155,7 @@ export interface IPrivateExecutionOracle {
147
155
  ): void;
148
156
  privateNotifyNullifiedNote(innerNullifier: Fr, noteHash: Fr, counter: number): Promise<void>;
149
157
  privateNotifyCreatedNullifier(innerNullifier: Fr): Promise<void>;
158
+ privateIsNullifierPending(innerNullifier: Fr, contractAddress: AztecAddress): Promise<boolean>;
150
159
  privateNotifyCreatedContractClassLog(log: ContractClassLog, counter: number): void;
151
160
  privateCallPrivateFunction(
152
161
  targetContractAddress: AztecAddress,
@@ -18,10 +18,10 @@ function fromRawData(nonzeroNoteHashCounter: boolean, maybeNoteNonce: Fr): { sta
18
18
  }
19
19
 
20
20
  /**
21
- * Packs a note in a format that is compatible with the default Packable implementation of the retrieved note.
21
+ * Packs a note in a format that is compatible with the default Packable implementation of the hinted note.
22
22
  *
23
23
  * @dev Unlike the default Packable implementation, this function first constructs the note metadata from the inputs
24
- * and only after that it packs the retrieved note. Hence it doesn't map one to one with `RetrievedNote::pack()`.
24
+ * and only after that it packs the hinted note. Hence it doesn't map one to one with `HintedNote::pack()`.
25
25
  *
26
26
  * @param contractAddress - The address of the contract that owns the note
27
27
  * @param owner - The owner of the note
@@ -32,7 +32,7 @@ function fromRawData(nonzeroNoteHashCounter: boolean, maybeNoteNonce: Fr): { sta
32
32
  * @param note - The note content containing the actual note data
33
33
  * @returns The packed note as an array of field elements
34
34
  */
35
- export function packAsRetrievedNote({
35
+ export function packAsHintedNote({
36
36
  contractAddress,
37
37
  owner,
38
38
  randomness,
@@ -52,7 +52,7 @@ export function packAsRetrievedNote({
52
52
  // If the note is pending it means it has a non-zero note hash counter associated with it.
53
53
  const nonZeroNoteHashCounter = isPending;
54
54
 
55
- // To pack the note as retrieved note we first need to reconstruct the note metadata.
55
+ // To pack the note as hinted note we first need to reconstruct the note metadata.
56
56
  const noteMetadata = fromRawData(nonZeroNoteHashCounter, noteNonce);
57
57
 
58
58
  // Pack in order: note, contract_address, owner, randomness, storage_slot, metadata (stage, maybe_note_nonce)
@@ -12,12 +12,11 @@ import {
12
12
  } from '@aztec/simulator/client';
13
13
  import { FunctionSelector, NoteSelector } from '@aztec/stdlib/abi';
14
14
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
15
- import { L2BlockHash } from '@aztec/stdlib/block';
15
+ import { BlockHash } from '@aztec/stdlib/block';
16
16
  import { ContractClassLog, ContractClassLogFields } from '@aztec/stdlib/logs';
17
- import { MerkleTreeId } from '@aztec/stdlib/trees';
18
17
 
19
18
  import type { IMiscOracle, IPrivateExecutionOracle, IUtilityExecutionOracle } from './interfaces.js';
20
- import { packAsRetrievedNote } from './note_packing_utils.js';
19
+ import { packAsHintedNote } from './note_packing_utils.js';
21
20
 
22
21
  export class UnavailableOracleError extends Error {
23
22
  constructor(oracleName: string) {
@@ -138,33 +137,49 @@ export class Oracle {
138
137
  ].map(toACVMField);
139
138
  }
140
139
 
141
- async utilityGetMembershipWitness(
140
+ async utilityGetNoteHashMembershipWitness(
141
+ [anchorBlockHash]: ACVMField[],
142
+ [noteHash]: ACVMField[],
143
+ ): Promise<(ACVMField | ACVMField[])[]> {
144
+ const parsedAnchorBlockHash = BlockHash.fromString(anchorBlockHash);
145
+ const parsedNoteHash = Fr.fromString(noteHash);
146
+
147
+ const witness = await this.handlerAsUtility().utilityGetNoteHashMembershipWitness(
148
+ parsedAnchorBlockHash,
149
+ parsedNoteHash,
150
+ );
151
+ if (!witness) {
152
+ throw new Error(
153
+ `Note hash ${noteHash} not found in the note hash tree at anchor block hash ${parsedAnchorBlockHash.toString()}.`,
154
+ );
155
+ }
156
+ return witness.toNoirRepresentation();
157
+ }
158
+
159
+ async utilityGetBlockHashMembershipWitness(
160
+ [anchorBlockHash]: ACVMField[],
142
161
  [blockHash]: ACVMField[],
143
- [treeId]: ACVMField[],
144
- [leafValue]: ACVMField[],
145
162
  ): Promise<(ACVMField | ACVMField[])[]> {
146
- const parsedBlockHash = L2BlockHash.fromString(blockHash);
147
- const parsedTreeId = Fr.fromString(treeId).toNumber();
148
- const parsedLeafValue = Fr.fromString(leafValue);
163
+ const parsedAnchorBlockHash = BlockHash.fromString(anchorBlockHash);
164
+ const parsedBlockHash = BlockHash.fromString(blockHash);
149
165
 
150
- const witness = await this.handlerAsUtility().utilityGetMembershipWitness(
166
+ const witness = await this.handlerAsUtility().utilityGetBlockHashMembershipWitness(
167
+ parsedAnchorBlockHash,
151
168
  parsedBlockHash,
152
- parsedTreeId,
153
- parsedLeafValue,
154
169
  );
155
170
  if (!witness) {
156
171
  throw new Error(
157
- `Leaf ${leafValue} not found in the tree ${MerkleTreeId[parsedTreeId]} at block hash ${parsedBlockHash.toString()}.`,
172
+ `Block hash ${parsedBlockHash.toString()} not found in the archive tree at anchor block ${parsedAnchorBlockHash.toString()}.`,
158
173
  );
159
174
  }
160
- return [toACVMField(witness[0]), witness.slice(1).map(toACVMField)];
175
+ return witness.toNoirRepresentation();
161
176
  }
162
177
 
163
178
  async utilityGetNullifierMembershipWitness(
164
179
  [blockHash]: ACVMField[],
165
180
  [nullifier]: ACVMField[], // nullifier, we try to find the witness for (to prove inclusion)
166
181
  ): Promise<(ACVMField | ACVMField[])[]> {
167
- const parsedBlockHash = L2BlockHash.fromString(blockHash);
182
+ const parsedBlockHash = BlockHash.fromString(blockHash);
168
183
  const parsedNullifier = Fr.fromString(nullifier);
169
184
 
170
185
  const witness = await this.handlerAsUtility().utilityGetNullifierMembershipWitness(
@@ -183,7 +198,7 @@ export class Oracle {
183
198
  [blockHash]: ACVMField[],
184
199
  [nullifier]: ACVMField[], // nullifier, we try to find the low nullifier witness for (to prove non-inclusion)
185
200
  ): Promise<(ACVMField | ACVMField[])[]> {
186
- const parsedBlockHash = L2BlockHash.fromString(blockHash);
201
+ const parsedBlockHash = BlockHash.fromString(blockHash);
187
202
  const parsedNullifier = Fr.fromString(nullifier);
188
203
 
189
204
  const witness = await this.handlerAsUtility().utilityGetLowNullifierMembershipWitness(
@@ -202,7 +217,7 @@ export class Oracle {
202
217
  [blockHash]: ACVMField[],
203
218
  [leafSlot]: ACVMField[],
204
219
  ): Promise<(ACVMField | ACVMField[])[]> {
205
- const parsedBlockHash = L2BlockHash.fromString(blockHash);
220
+ const parsedBlockHash = BlockHash.fromString(blockHash);
206
221
  const parsedLeafSlot = Fr.fromString(leafSlot);
207
222
 
208
223
  const witness = await this.handlerAsUtility().utilityGetPublicDataWitness(parsedBlockHash, parsedLeafSlot);
@@ -233,12 +248,19 @@ export class Oracle {
233
248
  return [witness.map(toACVMField)];
234
249
  }
235
250
 
236
- async utilityGetPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<ACVMField[][]> {
251
+ async utilityTryGetPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<(ACVMField | ACVMField[])[]> {
237
252
  const parsedAddress = AztecAddress.fromField(Fr.fromString(address));
238
- const { publicKeys, partialAddress } =
239
- await this.handlerAsUtility().utilityGetPublicKeysAndPartialAddress(parsedAddress);
253
+ const result = await this.handlerAsUtility().utilityTryGetPublicKeysAndPartialAddress(parsedAddress);
240
254
 
241
- return [[...publicKeys.toFields(), partialAddress].map(toACVMField)];
255
+ // We are going to return a Noir Option struct to represent the possibility of null values. Options are a struct
256
+ // with two fields: `some` (a boolean) and `value` (a field array in this case).
257
+ if (result === undefined) {
258
+ // No data was found so we set `some` to 0 and pad `value` with zeros get the correct return size.
259
+ return [toACVMField(0), Array(13).fill(toACVMField(0))];
260
+ } else {
261
+ // Data was found so we set `some` to 1 and return it along with `value`.
262
+ return [toACVMField(1), [...result.publicKeys.toFields(), result.partialAddress].map(toACVMField)];
263
+ }
242
264
  }
243
265
 
244
266
  async utilityGetNotes(
@@ -259,7 +281,7 @@ export class Oracle {
259
281
  [offset]: ACVMField[],
260
282
  [status]: ACVMField[],
261
283
  [maxNotes]: ACVMField[],
262
- [packedRetrievedNoteLength]: ACVMField[],
284
+ [packedHintedNoteLength]: ACVMField[],
263
285
  ): Promise<(ACVMField | ACVMField[])[]> {
264
286
  // Parse Option<AztecAddress>: ownerSome is 0 for None, 1 for Some
265
287
  const owner = Fr.fromString(ownerSome).toNumber() === 1 ? AztecAddress.fromString(ownerValue) : undefined;
@@ -281,8 +303,8 @@ export class Oracle {
281
303
  +status,
282
304
  );
283
305
 
284
- const returnDataAsArrayOfPackedRetrievedNotes = noteDatas.map(noteData =>
285
- packAsRetrievedNote({
306
+ const returnDataAsArrayOfPackedHintedNotes = noteDatas.map(noteData =>
307
+ packAsHintedNote({
286
308
  contractAddress: noteData.contractAddress,
287
309
  owner: noteData.owner,
288
310
  randomness: noteData.randomness,
@@ -294,12 +316,12 @@ export class Oracle {
294
316
  );
295
317
 
296
318
  // Now we convert each sub-array to an array of ACVMField
297
- const returnDataAsArrayOfACVMFieldArrays = returnDataAsArrayOfPackedRetrievedNotes.map(subArray =>
319
+ const returnDataAsArrayOfACVMFieldArrays = returnDataAsArrayOfPackedHintedNotes.map(subArray =>
298
320
  subArray.map(toACVMField),
299
321
  );
300
322
 
301
323
  // At last we convert the array of arrays to a bounded vec of arrays
302
- return arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfACVMFieldArrays, +maxNotes, +packedRetrievedNoteLength);
324
+ return arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfACVMFieldArrays, +maxNotes, +packedHintedNoteLength);
303
325
  }
304
326
 
305
327
  privateNotifyCreatedNote(
@@ -341,6 +363,14 @@ export class Oracle {
341
363
  return [];
342
364
  }
343
365
 
366
+ async privateIsNullifierPending([innerNullifier]: ACVMField[], [contractAddress]: ACVMField[]): Promise<ACVMField[]> {
367
+ const isPending = await this.handlerAsPrivate().privateIsNullifierPending(
368
+ Fr.fromString(innerNullifier),
369
+ AztecAddress.fromString(contractAddress),
370
+ );
371
+ return [toACVMField(isPending)];
372
+ }
373
+
344
374
  async utilityCheckNullifierExists([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
345
375
  const exists = await this.handlerAsUtility().utilityCheckNullifierExists(Fr.fromString(innerNullifier));
346
376
  return [toACVMField(exists)];
@@ -366,7 +396,7 @@ export class Oracle {
366
396
  [numberOfElements]: ACVMField[],
367
397
  ): Promise<ACVMField[][]> {
368
398
  const values = await this.handlerAsUtility().utilityStorageRead(
369
- L2BlockHash.fromString(blockHash),
399
+ BlockHash.fromString(blockHash),
370
400
  new AztecAddress(Fr.fromString(contractAddress)),
371
401
  Fr.fromString(startStorageSlot),
372
402
  +numberOfElements,
@@ -387,7 +417,7 @@ export class Oracle {
387
417
  return Promise.resolve([]);
388
418
  }
389
419
 
390
- utilityDebugLog(
420
+ async utilityLog(
391
421
  level: ACVMField[],
392
422
  message: ACVMField[],
393
423
  _ignoredFieldsSize: ACVMField[],
@@ -396,8 +426,8 @@ export class Oracle {
396
426
  const levelFr = Fr.fromString(level[0]);
397
427
  const messageStr = message.map(acvmField => String.fromCharCode(Fr.fromString(acvmField).toNumber())).join('');
398
428
  const fieldsFr = fields.map(Fr.fromString);
399
- this.handlerAsMisc().utilityDebugLog(levelFr.toNumber(), messageStr, fieldsFr);
400
- return Promise.resolve([]);
429
+ await this.handlerAsMisc().utilityLog(levelFr.toNumber(), messageStr, fieldsFr);
430
+ return [];
401
431
  }
402
432
 
403
433
  // This function's name is directly hardcoded in `circuit_recorder.ts`. Don't forget to update it there if you
@@ -478,12 +508,12 @@ export class Oracle {
478
508
  return [];
479
509
  }
480
510
 
481
- async utilityValidateEnqueuedNotesAndEvents(
511
+ async utilityValidateAndStoreEnqueuedNotesAndEvents(
482
512
  [contractAddress]: ACVMField[],
483
513
  [noteValidationRequestsArrayBaseSlot]: ACVMField[],
484
514
  [eventValidationRequestsArrayBaseSlot]: ACVMField[],
485
515
  ): Promise<ACVMField[]> {
486
- await this.handlerAsUtility().utilityValidateEnqueuedNotesAndEvents(
516
+ await this.handlerAsUtility().utilityValidateAndStoreEnqueuedNotesAndEvents(
487
517
  AztecAddress.fromString(contractAddress),
488
518
  Fr.fromString(noteValidationRequestsArrayBaseSlot),
489
519
  Fr.fromString(eventValidationRequestsArrayBaseSlot),