@aztec/pxe 0.0.1-commit.96bb3f7 → 0.0.1-commit.a072138

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 (226) 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 +66 -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 +6 -10
  12. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  13. package/dest/contract_function_simulator/contract_function_simulator.js +33 -25
  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 +15 -11
  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 +10 -8
  35. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  36. package/dest/contract_function_simulator/oracle/oracle.js +44 -33
  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 +11 -3
  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 +22 -10
  43. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +33 -20
  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 +78 -76
  46. package/dest/contract_sync/index.d.ts +23 -0
  47. package/dest/contract_sync/index.d.ts.map +1 -0
  48. package/dest/contract_sync/index.js +54 -0
  49. package/dest/debug/pxe_debug_utils.d.ts +16 -6
  50. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  51. package/dest/debug/pxe_debug_utils.js +20 -10
  52. package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
  53. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  54. package/dest/entrypoints/client/bundle/utils.js +12 -6
  55. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  56. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  57. package/dest/entrypoints/client/lazy/utils.js +13 -7
  58. package/dest/entrypoints/pxe_creation_options.d.ts +3 -2
  59. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  60. package/dest/entrypoints/server/index.d.ts +3 -1
  61. package/dest/entrypoints/server/index.d.ts.map +1 -1
  62. package/dest/entrypoints/server/index.js +2 -0
  63. package/dest/entrypoints/server/utils.d.ts +1 -1
  64. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  65. package/dest/entrypoints/server/utils.js +19 -8
  66. package/dest/events/event_service.d.ts +6 -6
  67. package/dest/events/event_service.d.ts.map +1 -1
  68. package/dest/events/event_service.js +19 -22
  69. package/dest/events/private_event_filter_validator.d.ts +5 -5
  70. package/dest/events/private_event_filter_validator.d.ts.map +1 -1
  71. package/dest/events/private_event_filter_validator.js +5 -6
  72. package/dest/job_coordinator/job_coordinator.d.ts +3 -2
  73. package/dest/job_coordinator/job_coordinator.d.ts.map +1 -1
  74. package/dest/job_coordinator/job_coordinator.js +3 -2
  75. package/dest/logs/log_service.d.ts +6 -4
  76. package/dest/logs/log_service.d.ts.map +1 -1
  77. package/dest/logs/log_service.js +21 -16
  78. package/dest/notes/note_service.d.ts +7 -7
  79. package/dest/notes/note_service.d.ts.map +1 -1
  80. package/dest/notes/note_service.js +31 -36
  81. package/dest/oracle_version.d.ts +3 -3
  82. package/dest/oracle_version.d.ts.map +1 -1
  83. package/dest/oracle_version.js +4 -3
  84. package/dest/private_kernel/hints/index.d.ts +2 -2
  85. package/dest/private_kernel/hints/index.d.ts.map +1 -1
  86. package/dest/private_kernel/hints/index.js +1 -1
  87. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +28 -0
  88. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
  89. package/dest/private_kernel/hints/{build_private_kernel_reset_private_inputs.js → private_kernel_reset_private_inputs_builder.js} +12 -6
  90. package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
  91. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  92. package/dest/private_kernel/private_kernel_execution_prover.js +3 -3
  93. package/dest/private_kernel/private_kernel_oracle.d.ts +23 -28
  94. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  95. package/dest/private_kernel/private_kernel_oracle.js +90 -2
  96. package/dest/pxe.d.ts +7 -36
  97. package/dest/pxe.d.ts.map +1 -1
  98. package/dest/pxe.js +43 -83
  99. package/dest/storage/address_store/address_store.d.ts +1 -1
  100. package/dest/storage/address_store/address_store.d.ts.map +1 -1
  101. package/dest/storage/address_store/address_store.js +12 -11
  102. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -1
  103. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
  104. package/dest/storage/anchor_block_store/anchor_block_store.js +8 -1
  105. package/dest/storage/capsule_store/capsule_store.d.ts +24 -9
  106. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  107. package/dest/storage/capsule_store/capsule_store.js +130 -23
  108. package/dest/storage/contract_store/contract_store.d.ts +1 -2
  109. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  110. package/dest/storage/contract_store/contract_store.js +22 -25
  111. package/dest/storage/metadata.d.ts +1 -1
  112. package/dest/storage/metadata.js +1 -1
  113. package/dest/storage/note_store/note_store.d.ts +51 -52
  114. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  115. package/dest/storage/note_store/note_store.js +282 -263
  116. package/dest/storage/note_store/stored_note.d.ts +16 -0
  117. package/dest/storage/note_store/stored_note.d.ts.map +1 -0
  118. package/dest/storage/note_store/stored_note.js +43 -0
  119. package/dest/storage/private_event_store/private_event_store.d.ts +43 -8
  120. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  121. package/dest/storage/private_event_store/private_event_store.js +226 -111
  122. package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
  123. package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
  124. package/dest/storage/private_event_store/stored_private_event.js +56 -0
  125. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +15 -8
  126. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  127. package/dest/storage/tagging_store/recipient_tagging_store.js +88 -19
  128. package/dest/storage/tagging_store/sender_address_book_store.d.ts +1 -1
  129. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -1
  130. package/dest/storage/tagging_store/sender_address_book_store.js +20 -14
  131. package/dest/storage/tagging_store/sender_tagging_store.d.ts +19 -9
  132. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  133. package/dest/storage/tagging_store/sender_tagging_store.js +252 -100
  134. package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
  135. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
  136. package/dest/tagging/get_all_logs_by_tags.js +46 -0
  137. package/dest/tagging/index.d.ts +2 -1
  138. package/dest/tagging/index.d.ts.map +1 -1
  139. package/dest/tagging/index.js +1 -0
  140. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +3 -2
  141. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  142. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +6 -6
  143. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +3 -2
  144. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
  145. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +5 -2
  146. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +3 -2
  147. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  148. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +7 -7
  149. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +1 -1
  150. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  151. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +5 -8
  152. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -2
  153. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  154. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +10 -5
  155. package/package.json +18 -18
  156. package/src/bin/check_oracle_version.ts +1 -0
  157. package/src/block_synchronizer/block_synchronizer.ts +85 -33
  158. package/src/config/index.ts +14 -0
  159. package/src/contract_function_simulator/benchmarked_node.ts +103 -0
  160. package/src/contract_function_simulator/contract_function_simulator.ts +34 -28
  161. package/src/contract_function_simulator/execution_note_cache.ts +44 -25
  162. package/src/contract_function_simulator/index.ts +1 -1
  163. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +1 -1
  164. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +1 -1
  165. package/src/contract_function_simulator/noir-structs/utility_context.ts +6 -25
  166. package/src/contract_function_simulator/oracle/interfaces.ts +20 -10
  167. package/src/contract_function_simulator/oracle/note_packing_utils.ts +10 -10
  168. package/src/contract_function_simulator/oracle/oracle.ts +65 -40
  169. package/src/contract_function_simulator/oracle/private_execution.ts +1 -67
  170. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +35 -12
  171. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +100 -82
  172. package/src/contract_sync/index.ts +98 -0
  173. package/src/debug/pxe_debug_utils.ts +26 -11
  174. package/src/entrypoints/client/bundle/utils.ts +7 -14
  175. package/src/entrypoints/client/lazy/utils.ts +8 -14
  176. package/src/entrypoints/pxe_creation_options.ts +2 -1
  177. package/src/entrypoints/server/index.ts +2 -0
  178. package/src/entrypoints/server/utils.ts +15 -19
  179. package/src/events/event_service.ts +17 -25
  180. package/src/events/private_event_filter_validator.ts +3 -5
  181. package/src/job_coordinator/job_coordinator.ts +4 -3
  182. package/src/logs/log_service.ts +32 -14
  183. package/src/notes/note_service.ts +38 -43
  184. package/src/oracle_version.ts +4 -3
  185. package/src/private_kernel/hints/index.ts +1 -1
  186. package/src/private_kernel/hints/{build_private_kernel_reset_private_inputs.ts → private_kernel_reset_private_inputs_builder.ts} +32 -20
  187. package/src/private_kernel/private_kernel_execution_prover.ts +7 -4
  188. package/src/private_kernel/private_kernel_oracle.ts +116 -37
  189. package/src/pxe.ts +77 -118
  190. package/src/storage/address_store/address_store.ts +15 -15
  191. package/src/storage/anchor_block_store/anchor_block_store.ts +8 -0
  192. package/src/storage/capsule_store/capsule_store.ts +159 -23
  193. package/src/storage/contract_store/contract_store.ts +22 -31
  194. package/src/storage/metadata.ts +1 -1
  195. package/src/storage/note_store/note_store.ts +317 -318
  196. package/src/storage/note_store/stored_note.ts +48 -0
  197. package/src/storage/private_event_store/private_event_store.ts +292 -124
  198. package/src/storage/private_event_store/stored_private_event.ts +73 -0
  199. package/src/storage/tagging_store/recipient_tagging_store.ts +106 -20
  200. package/src/storage/tagging_store/sender_address_book_store.ts +20 -14
  201. package/src/storage/tagging_store/sender_tagging_store.ts +293 -108
  202. package/src/tagging/get_all_logs_by_tags.ts +68 -0
  203. package/src/tagging/index.ts +1 -0
  204. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +16 -5
  205. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +7 -1
  206. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +9 -6
  207. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +5 -17
  208. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +16 -4
  209. package/dest/contract_function_simulator/proxied_node.d.ts +0 -9
  210. package/dest/contract_function_simulator/proxied_node.d.ts.map +0 -1
  211. package/dest/contract_function_simulator/proxied_node.js +0 -27
  212. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +0 -28
  213. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
  214. package/dest/private_kernel/private_kernel_oracle_impl.d.ts +0 -46
  215. package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +0 -1
  216. package/dest/private_kernel/private_kernel_oracle_impl.js +0 -85
  217. package/dest/public_storage/public_storage_service.d.ts +0 -24
  218. package/dest/public_storage/public_storage_service.d.ts.map +0 -1
  219. package/dest/public_storage/public_storage_service.js +0 -26
  220. package/dest/tree_membership/tree_membership_service.d.ts +0 -52
  221. package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
  222. package/dest/tree_membership/tree_membership_service.js +0 -84
  223. package/src/contract_function_simulator/proxied_node.ts +0 -33
  224. package/src/private_kernel/private_kernel_oracle_impl.ts +0 -127
  225. package/src/public_storage/public_storage_service.ts +0 -33
  226. package/src/tree_membership/tree_membership_service.ts +0 -112
@@ -12,11 +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 { BlockHash } from '@aztec/stdlib/block';
15
16
  import { ContractClassLog, ContractClassLogFields } from '@aztec/stdlib/logs';
16
- import { MerkleTreeId } from '@aztec/stdlib/trees';
17
17
 
18
18
  import type { IMiscOracle, IPrivateExecutionOracle, IUtilityExecutionOracle } from './interfaces.js';
19
- import { packAsRetrievedNote } from './note_packing_utils.js';
19
+ import { packAsHintedNote } from './note_packing_utils.js';
20
20
 
21
21
  export class UnavailableOracleError extends Error {
22
22
  constructor(oracleName: string) {
@@ -137,77 +137,94 @@ export class Oracle {
137
137
  ].map(toACVMField);
138
138
  }
139
139
 
140
- async utilityGetMembershipWitness(
141
- [blockNumber]: ACVMField[],
142
- [treeId]: ACVMField[],
143
- [leafValue]: ACVMField[],
140
+ async utilityGetNoteHashMembershipWitness(
141
+ [anchorBlockHash]: ACVMField[],
142
+ [noteHash]: ACVMField[],
144
143
  ): Promise<(ACVMField | ACVMField[])[]> {
145
- const parsedBlockNumber = Fr.fromString(blockNumber).toNumber();
146
- const parsedTreeId = Fr.fromString(treeId).toNumber();
147
- const parsedLeafValue = Fr.fromString(leafValue);
144
+ const parsedAnchorBlockHash = BlockHash.fromString(anchorBlockHash);
145
+ const parsedNoteHash = Fr.fromString(noteHash);
148
146
 
149
- const witness = await this.handlerAsUtility().utilityGetMembershipWitness(
150
- BlockNumber(parsedBlockNumber),
151
- parsedTreeId,
152
- parsedLeafValue,
147
+ const witness = await this.handlerAsUtility().utilityGetNoteHashMembershipWitness(
148
+ parsedAnchorBlockHash,
149
+ parsedNoteHash,
153
150
  );
154
151
  if (!witness) {
155
152
  throw new Error(
156
- `Leaf ${leafValue} not found in the tree ${MerkleTreeId[parsedTreeId]} at block ${parsedBlockNumber}.`,
153
+ `Note hash ${noteHash} not found in the note hash tree at anchor block hash ${parsedAnchorBlockHash.toString()}.`,
157
154
  );
158
155
  }
159
- return [toACVMField(witness[0]), witness.slice(1).map(toACVMField)];
156
+ return witness.toNoirRepresentation();
157
+ }
158
+
159
+ async utilityGetBlockHashMembershipWitness(
160
+ [anchorBlockHash]: ACVMField[],
161
+ [blockHash]: ACVMField[],
162
+ ): Promise<(ACVMField | ACVMField[])[]> {
163
+ const parsedAnchorBlockHash = BlockHash.fromString(anchorBlockHash);
164
+ const parsedBlockHash = BlockHash.fromString(blockHash);
165
+
166
+ const witness = await this.handlerAsUtility().utilityGetBlockHashMembershipWitness(
167
+ parsedAnchorBlockHash,
168
+ parsedBlockHash,
169
+ );
170
+ if (!witness) {
171
+ throw new Error(
172
+ `Block hash ${parsedBlockHash.toString()} not found in the archive tree at anchor block ${parsedAnchorBlockHash.toString()}.`,
173
+ );
174
+ }
175
+ return witness.toNoirRepresentation();
160
176
  }
161
177
 
162
178
  async utilityGetNullifierMembershipWitness(
163
- [blockNumber]: ACVMField[],
179
+ [blockHash]: ACVMField[],
164
180
  [nullifier]: ACVMField[], // nullifier, we try to find the witness for (to prove inclusion)
165
181
  ): Promise<(ACVMField | ACVMField[])[]> {
166
- const parsedBlockNumber = Fr.fromString(blockNumber).toNumber();
182
+ const parsedBlockHash = BlockHash.fromString(blockHash);
167
183
  const parsedNullifier = Fr.fromString(nullifier);
168
184
 
169
185
  const witness = await this.handlerAsUtility().utilityGetNullifierMembershipWitness(
170
- BlockNumber(parsedBlockNumber),
186
+ parsedBlockHash,
171
187
  parsedNullifier,
172
188
  );
173
189
  if (!witness) {
174
- throw new Error(`Nullifier witness not found for nullifier ${parsedNullifier} at block ${parsedBlockNumber}.`);
190
+ throw new Error(
191
+ `Nullifier witness not found for nullifier ${parsedNullifier} at block hash ${parsedBlockHash.toString()}.`,
192
+ );
175
193
  }
176
194
  return witness.toNoirRepresentation();
177
195
  }
178
196
 
179
197
  async utilityGetLowNullifierMembershipWitness(
180
- [blockNumber]: ACVMField[],
198
+ [blockHash]: ACVMField[],
181
199
  [nullifier]: ACVMField[], // nullifier, we try to find the low nullifier witness for (to prove non-inclusion)
182
200
  ): Promise<(ACVMField | ACVMField[])[]> {
183
- const parsedBlockNumber = Fr.fromString(blockNumber).toNumber();
201
+ const parsedBlockHash = BlockHash.fromString(blockHash);
184
202
  const parsedNullifier = Fr.fromString(nullifier);
185
203
 
186
204
  const witness = await this.handlerAsUtility().utilityGetLowNullifierMembershipWitness(
187
- BlockNumber(parsedBlockNumber),
205
+ parsedBlockHash,
188
206
  parsedNullifier,
189
207
  );
190
208
  if (!witness) {
191
209
  throw new Error(
192
- `Low nullifier witness not found for nullifier ${parsedNullifier} at block ${parsedBlockNumber}.`,
210
+ `Low nullifier witness not found for nullifier ${parsedNullifier} at block hash ${parsedBlockHash.toString()}.`,
193
211
  );
194
212
  }
195
213
  return witness.toNoirRepresentation();
196
214
  }
197
215
 
198
216
  async utilityGetPublicDataWitness(
199
- [blockNumber]: ACVMField[],
217
+ [blockHash]: ACVMField[],
200
218
  [leafSlot]: ACVMField[],
201
219
  ): Promise<(ACVMField | ACVMField[])[]> {
202
- const parsedBlockNumber = Fr.fromString(blockNumber).toNumber();
220
+ const parsedBlockHash = BlockHash.fromString(blockHash);
203
221
  const parsedLeafSlot = Fr.fromString(leafSlot);
204
222
 
205
- const witness = await this.handlerAsUtility().utilityGetPublicDataWitness(
206
- BlockNumber(parsedBlockNumber),
207
- parsedLeafSlot,
208
- );
223
+ const witness = await this.handlerAsUtility().utilityGetPublicDataWitness(parsedBlockHash, parsedLeafSlot);
209
224
  if (!witness) {
210
- throw new Error(`Public data witness not found for slot ${parsedLeafSlot} at block ${parsedBlockNumber}.`);
225
+ throw new Error(
226
+ `Public data witness not found for slot ${parsedLeafSlot} at block hash ${parsedBlockHash.toString()}.`,
227
+ );
211
228
  }
212
229
  return witness.toNoirRepresentation();
213
230
  }
@@ -257,7 +274,7 @@ export class Oracle {
257
274
  [offset]: ACVMField[],
258
275
  [status]: ACVMField[],
259
276
  [maxNotes]: ACVMField[],
260
- [packedRetrievedNoteLength]: ACVMField[],
277
+ [packedHintedNoteLength]: ACVMField[],
261
278
  ): Promise<(ACVMField | ACVMField[])[]> {
262
279
  // Parse Option<AztecAddress>: ownerSome is 0 for None, 1 for Some
263
280
  const owner = Fr.fromString(ownerSome).toNumber() === 1 ? AztecAddress.fromString(ownerValue) : undefined;
@@ -279,25 +296,25 @@ export class Oracle {
279
296
  +status,
280
297
  );
281
298
 
282
- const returnDataAsArrayOfPackedRetrievedNotes = noteDatas.map(noteData =>
283
- packAsRetrievedNote({
299
+ const returnDataAsArrayOfPackedHintedNotes = noteDatas.map(noteData =>
300
+ packAsHintedNote({
284
301
  contractAddress: noteData.contractAddress,
285
302
  owner: noteData.owner,
286
303
  randomness: noteData.randomness,
287
304
  storageSlot: noteData.storageSlot,
288
305
  noteNonce: noteData.noteNonce,
289
- index: noteData.index,
306
+ isPending: noteData.isPending,
290
307
  note: noteData.note,
291
308
  }),
292
309
  );
293
310
 
294
311
  // Now we convert each sub-array to an array of ACVMField
295
- const returnDataAsArrayOfACVMFieldArrays = returnDataAsArrayOfPackedRetrievedNotes.map(subArray =>
312
+ const returnDataAsArrayOfACVMFieldArrays = returnDataAsArrayOfPackedHintedNotes.map(subArray =>
296
313
  subArray.map(toACVMField),
297
314
  );
298
315
 
299
316
  // At last we convert the array of arrays to a bounded vec of arrays
300
- return arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfACVMFieldArrays, +maxNotes, +packedRetrievedNoteLength);
317
+ return arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfACVMFieldArrays, +maxNotes, +packedHintedNoteLength);
301
318
  }
302
319
 
303
320
  privateNotifyCreatedNote(
@@ -339,6 +356,14 @@ export class Oracle {
339
356
  return [];
340
357
  }
341
358
 
359
+ async privateIsNullifierPending([innerNullifier]: ACVMField[], [contractAddress]: ACVMField[]): Promise<ACVMField[]> {
360
+ const isPending = await this.handlerAsPrivate().privateIsNullifierPending(
361
+ Fr.fromString(innerNullifier),
362
+ AztecAddress.fromString(contractAddress),
363
+ );
364
+ return [toACVMField(isPending)];
365
+ }
366
+
342
367
  async utilityCheckNullifierExists([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
343
368
  const exists = await this.handlerAsUtility().utilityCheckNullifierExists(Fr.fromString(innerNullifier));
344
369
  return [toACVMField(exists)];
@@ -358,15 +383,15 @@ export class Oracle {
358
383
  }
359
384
 
360
385
  async utilityStorageRead(
386
+ [blockHash]: ACVMField[],
361
387
  [contractAddress]: ACVMField[],
362
388
  [startStorageSlot]: ACVMField[],
363
- [blockNumber]: ACVMField[],
364
389
  [numberOfElements]: ACVMField[],
365
390
  ): Promise<ACVMField[][]> {
366
391
  const values = await this.handlerAsUtility().utilityStorageRead(
392
+ BlockHash.fromString(blockHash),
367
393
  new AztecAddress(Fr.fromString(contractAddress)),
368
394
  Fr.fromString(startStorageSlot),
369
- BlockNumber(+blockNumber),
370
395
  +numberOfElements,
371
396
  );
372
397
  return [values.map(toACVMField)];
@@ -476,12 +501,12 @@ export class Oracle {
476
501
  return [];
477
502
  }
478
503
 
479
- async utilityValidateEnqueuedNotesAndEvents(
504
+ async utilityValidateAndStoreEnqueuedNotesAndEvents(
480
505
  [contractAddress]: ACVMField[],
481
506
  [noteValidationRequestsArrayBaseSlot]: ACVMField[],
482
507
  [eventValidationRequestsArrayBaseSlot]: ACVMField[],
483
508
  ): Promise<ACVMField[]> {
484
- await this.handlerAsUtility().utilityValidateEnqueuedNotesAndEvents(
509
+ await this.handlerAsUtility().utilityValidateAndStoreEnqueuedNotesAndEvents(
485
510
  AztecAddress.fromString(contractAddress),
486
511
  Fr.fromString(noteValidationRequestsArrayBaseSlot),
487
512
  Fr.fromString(eventValidationRequestsArrayBaseSlot),
@@ -1,9 +1,7 @@
1
1
  import { PRIVATE_CIRCUIT_PUBLIC_INPUTS_LENGTH, PRIVATE_CONTEXT_INPUTS_LENGTH } from '@aztec/constants';
2
- import { BlockNumber } from '@aztec/foundation/branded-types';
3
2
  import { Fr } from '@aztec/foundation/curves/bn254';
4
3
  import { createLogger } from '@aztec/foundation/log';
5
4
  import { Timer } from '@aztec/foundation/timer';
6
- import { ProtocolContractAddress } from '@aztec/protocol-contracts';
7
5
  import {
8
6
  type ACVMWitness,
9
7
  type CircuitSimulator,
@@ -19,15 +17,10 @@ import {
19
17
  countArgumentsSize,
20
18
  } from '@aztec/stdlib/abi';
21
19
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
22
- import type { ContractInstance } from '@aztec/stdlib/contract';
23
- import { DelayedPublicMutableValues, DelayedPublicMutableValuesWithHash } from '@aztec/stdlib/delayed-public-mutable';
24
- import type { AztecNode } from '@aztec/stdlib/interfaces/client';
25
20
  import { PrivateCircuitPublicInputs } from '@aztec/stdlib/kernel';
26
21
  import type { CircuitWitnessGenerationStats } from '@aztec/stdlib/stats';
27
- import { BlockHeader, PrivateCallExecutionResult } from '@aztec/stdlib/tx';
28
- import type { UInt64 } from '@aztec/stdlib/types';
22
+ import { PrivateCallExecutionResult } from '@aztec/stdlib/tx';
29
23
 
30
- import { ContractStore } from '../../storage/contract_store/index.js';
31
24
  import { Oracle } from './oracle.js';
32
25
  import type { PrivateExecutionOracle } from './private_execution_oracle.js';
33
26
 
@@ -146,62 +139,3 @@ export function extractPrivateCircuitPublicInputs(
146
139
  }
147
140
  return PrivateCircuitPublicInputs.fromFields(returnData);
148
141
  }
149
-
150
- /**
151
- * Read the current class id of a contract from the execution data provider or AztecNode. If not found, class id
152
- * from the instance is used.
153
- * @param contractAddress - The address of the contract to read the class id for.
154
- * @param instance - The instance of the contract.
155
- * @param executionStore - The execution data provider.
156
- * @param blockNumber - The block number at which to load the DelayedPublicMutable storing the class id.
157
- * @param timestamp - The timestamp at which to obtain the class id from the DelayedPublicMutable.
158
- * @returns The current class id.
159
- */
160
- export async function readCurrentClassId(
161
- contractAddress: AztecAddress,
162
- instance: ContractInstance,
163
- aztecNode: AztecNode,
164
- blockNumber: BlockNumber,
165
- timestamp: UInt64,
166
- ) {
167
- const { delayedPublicMutableSlot } = await DelayedPublicMutableValuesWithHash.getContractUpdateSlots(contractAddress);
168
- const delayedPublicMutableValues = await DelayedPublicMutableValues.readFromTree(delayedPublicMutableSlot, slot =>
169
- aztecNode.getPublicStorageAt(blockNumber, ProtocolContractAddress.ContractInstanceRegistry, slot),
170
- );
171
- let currentClassId = delayedPublicMutableValues.svc.getCurrentAt(timestamp)[0];
172
- if (currentClassId.isZero()) {
173
- currentClassId = instance.originalContractClassId;
174
- }
175
- return currentClassId;
176
- }
177
-
178
- /**
179
- * Verify that the current class id of a contract obtained from AztecNode is the same as the one in contract data
180
- * provider (i.e. PXE's own storage).
181
- * @param header - The header of the block at which to verify the current class id. If not provided, the anchor block
182
- * header of the execution data provider is used.
183
- */
184
- export async function verifyCurrentClassId(
185
- contractAddress: AztecAddress,
186
- aztecNode: AztecNode,
187
- contractStore: ContractStore,
188
- header: BlockHeader,
189
- ) {
190
- const instance = await contractStore.getContractInstance(contractAddress);
191
- if (!instance) {
192
- throw new Error(`No contract instance found for address ${contractAddress.toString()}`);
193
- }
194
-
195
- const currentClassId = await readCurrentClassId(
196
- contractAddress,
197
- instance,
198
- aztecNode,
199
- header.globalVariables.blockNumber,
200
- header.globalVariables.timestamp,
201
- );
202
- if (!instance.currentContractClassId.equals(currentClassId)) {
203
- throw new Error(
204
- `Contract ${contractAddress} is outdated, current class id is ${currentClassId}, local class id is ${instance.currentContractClassId}`,
205
- );
206
- }
207
- }
@@ -30,9 +30,9 @@ import {
30
30
  type TxContext,
31
31
  } from '@aztec/stdlib/tx';
32
32
 
33
+ import { ensureContractSynced } from '../../contract_sync/index.js';
33
34
  import { NoteService } from '../../notes/note_service.js';
34
35
  import type { AddressStore } from '../../storage/address_store/address_store.js';
35
- import type { AnchorBlockStore } from '../../storage/anchor_block_store/anchor_block_store.js';
36
36
  import type { CapsuleStore } from '../../storage/capsule_store/capsule_store.js';
37
37
  import type { ContractStore } from '../../storage/contract_store/contract_store.js';
38
38
  import type { NoteStore } from '../../storage/note_store/note_store.js';
@@ -46,7 +46,7 @@ import { ExecutionTaggingIndexCache } from '../execution_tagging_index_cache.js'
46
46
  import type { HashedValuesCache } from '../hashed_values_cache.js';
47
47
  import { pickNotes } from '../pick_notes.js';
48
48
  import type { IPrivateExecutionOracle, NoteData } from './interfaces.js';
49
- import { executePrivateFunction, verifyCurrentClassId } from './private_execution.js';
49
+ import { executePrivateFunction } from './private_execution.js';
50
50
  import { UtilityExecutionOracle } from './utility_execution_oracle.js';
51
51
 
52
52
  /**
@@ -88,7 +88,6 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
88
88
  keyStore: KeyStore,
89
89
  addressStore: AddressStore,
90
90
  aztecNode: AztecNode,
91
- anchorBlockStore: AnchorBlockStore,
92
91
  private readonly senderTaggingStore: SenderTaggingStore,
93
92
  recipientTaggingStore: RecipientTaggingStore,
94
93
  senderAddressBookStore: SenderAddressBookStore,
@@ -112,7 +111,6 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
112
111
  keyStore,
113
112
  addressStore,
114
113
  aztecNode,
115
- anchorBlockStore,
116
114
  recipientTaggingStore,
117
115
  senderAddressBookStore,
118
116
  capsuleStore,
@@ -265,9 +263,16 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
265
263
  // This is a tagging secret we've not yet used in this tx, so first sync our store to make sure its indices
266
264
  // are up to date. We do this here because this store is not synced as part of the global sync because
267
265
  // that'd be wasteful as most tagging secrets are not used in each tx.
268
- await syncSenderTaggingIndexes(secret, this.contractAddress, this.aztecNode, this.senderTaggingStore);
269
-
270
- const lastUsedIndex = await this.senderTaggingStore.getLastUsedIndex(secret);
266
+ await syncSenderTaggingIndexes(
267
+ secret,
268
+ this.contractAddress,
269
+ this.aztecNode,
270
+ this.senderTaggingStore,
271
+ await this.anchorBlockHeader.hash(),
272
+ this.jobId,
273
+ );
274
+
275
+ const lastUsedIndex = await this.senderTaggingStore.getLastUsedIndex(secret, this.jobId);
271
276
  // If lastUsedIndex is undefined, we've never used this secret, so start from 0
272
277
  // Otherwise, the next index to use is one past the last used index
273
278
  return lastUsedIndex === undefined ? 0 : lastUsedIndex + 1;
@@ -356,7 +361,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
356
361
 
357
362
  const pendingNullifiers = this.noteCache.getNullifiers(this.callContext.contractAddress);
358
363
 
359
- const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockStore);
364
+ const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
360
365
  const dbNotes = await noteService.getNotes(
361
366
  this.callContext.contractAddress,
362
367
  owner,
@@ -428,6 +433,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
428
433
  note,
429
434
  siloedNullifier: undefined, // Siloed nullifier cannot be known for newly created note.
430
435
  noteHash,
436
+ isPending: true, // This note has just been created and hence is not settled yet.
431
437
  },
432
438
  counter,
433
439
  );
@@ -462,6 +468,19 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
462
468
  return this.noteCache.nullifierCreated(this.callContext.contractAddress, innerNullifier);
463
469
  }
464
470
 
471
+ /**
472
+ * Check if a nullifier has been emitted in the same transaction, i.e. if privateNotifyCreatedNullifier has been
473
+ * called for this inner nullifier from the contract with the specified address.
474
+ * @param innerNullifier - The inner nullifier to check.
475
+ * @param contractAddress - Address of the contract that emitted the nullifier.
476
+ * @returns A boolean indicating whether the nullifier is pending or not.
477
+ */
478
+ public async privateIsNullifierPending(innerNullifier: Fr, contractAddress: AztecAddress): Promise<boolean> {
479
+ const siloedNullifier = await siloNullifier(contractAddress, innerNullifier);
480
+ const isNullifierPending = this.noteCache.getNullifiers(contractAddress).has(siloedNullifier.toBigInt());
481
+ return Promise.resolve(isNullifierPending);
482
+ }
483
+
465
484
  /**
466
485
  * Emit a contract class log.
467
486
  * This fn exists because we only carry a poseidon hash through the kernels, and need to
@@ -518,9 +537,14 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
518
537
 
519
538
  isStaticCall = isStaticCall || this.callContext.isStaticCall;
520
539
 
521
- await verifyCurrentClassId(targetContractAddress, this.aztecNode, this.contractStore, this.anchorBlockHeader);
522
-
523
- await this.contractStore.syncPrivateState(targetContractAddress, functionSelector, this.utilityExecutor);
540
+ await ensureContractSynced(
541
+ targetContractAddress,
542
+ functionSelector,
543
+ this.utilityExecutor,
544
+ this.aztecNode,
545
+ this.contractStore,
546
+ this.anchorBlockHeader,
547
+ );
524
548
 
525
549
  const targetArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(
526
550
  targetContractAddress,
@@ -547,7 +571,6 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
547
571
  this.keyStore,
548
572
  this.addressStore,
549
573
  this.aztecNode,
550
- this.anchorBlockStore,
551
574
  this.senderTaggingStore,
552
575
  this.recipientTaggingStore,
553
576
  this.senderAddressBookStore,