@aztec/pxe 0.0.1-commit.7d4e6cd → 0.0.1-commit.87a0206

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 +8 -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 +36 -26
  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 +16 -12
  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 +11 -9
  35. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  36. package/dest/contract_function_simulator/oracle/oracle.js +64 -41
  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 +13 -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 +23 -11
  43. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +37 -24
  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 +88 -84
  46. package/dest/contract_sync/contract_sync_service.d.ts +41 -0
  47. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
  48. package/dest/contract_sync/contract_sync_service.js +82 -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 +12 -6
  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 +13 -7
  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 +19 -8
  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 +23 -20
  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 +19 -37
  100. package/dest/pxe.d.ts.map +1 -1
  101. package/dest/pxe.js +67 -86
  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 +51 -52
  117. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  118. package/dest/storage/note_store/note_store.js +285 -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 +39 -30
  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 +21 -11
  170. package/src/contract_function_simulator/oracle/note_packing_utils.ts +10 -10
  171. package/src/contract_function_simulator/oracle/oracle.ts +76 -44
  172. package/src/contract_function_simulator/oracle/private_execution.ts +1 -67
  173. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +37 -13
  174. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +112 -91
  175. package/src/contract_sync/contract_sync_service.ts +129 -0
  176. package/src/contract_sync/helpers.ts +93 -0
  177. package/src/debug/pxe_debug_utils.ts +60 -17
  178. package/src/entrypoints/client/bundle/utils.ts +7 -14
  179. package/src/entrypoints/client/lazy/utils.ts +8 -14
  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 +15 -19
  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 +34 -16
  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 +111 -118
  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 -318
  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
@@ -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);
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[],
161
+ [blockHash]: ACVMField[],
162
+ ): Promise<(ACVMField | ACVMField[])[]> {
163
+ const parsedAnchorBlockHash = BlockHash.fromString(anchorBlockHash);
164
+ const parsedBlockHash = BlockHash.fromString(blockHash);
148
165
 
149
- const witness = await this.handlerAsUtility().utilityGetMembershipWitness(
150
- BlockNumber(parsedBlockNumber),
151
- parsedTreeId,
152
- parsedLeafValue,
166
+ const witness = await this.handlerAsUtility().utilityGetBlockHashMembershipWitness(
167
+ parsedAnchorBlockHash,
168
+ parsedBlockHash,
153
169
  );
154
170
  if (!witness) {
155
171
  throw new Error(
156
- `Leaf ${leafValue} not found in the tree ${MerkleTreeId[parsedTreeId]} at block ${parsedBlockNumber}.`,
172
+ `Block hash ${parsedBlockHash.toString()} not found in the archive tree at anchor block ${parsedAnchorBlockHash.toString()}.`,
157
173
  );
158
174
  }
159
- return [toACVMField(witness[0]), witness.slice(1).map(toACVMField)];
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
  }
@@ -231,12 +248,19 @@ export class Oracle {
231
248
  return [witness.map(toACVMField)];
232
249
  }
233
250
 
234
- async utilityGetPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<ACVMField[][]> {
251
+ async utilityTryGetPublicKeysAndPartialAddress([address]: ACVMField[]): Promise<(ACVMField | ACVMField[])[]> {
235
252
  const parsedAddress = AztecAddress.fromField(Fr.fromString(address));
236
- const { publicKeys, partialAddress } =
237
- await this.handlerAsUtility().utilityGetPublicKeysAndPartialAddress(parsedAddress);
253
+ const result = await this.handlerAsUtility().utilityTryGetPublicKeysAndPartialAddress(parsedAddress);
238
254
 
239
- 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
+ }
240
264
  }
241
265
 
242
266
  async utilityGetNotes(
@@ -257,7 +281,7 @@ export class Oracle {
257
281
  [offset]: ACVMField[],
258
282
  [status]: ACVMField[],
259
283
  [maxNotes]: ACVMField[],
260
- [packedRetrievedNoteLength]: ACVMField[],
284
+ [packedHintedNoteLength]: ACVMField[],
261
285
  ): Promise<(ACVMField | ACVMField[])[]> {
262
286
  // Parse Option<AztecAddress>: ownerSome is 0 for None, 1 for Some
263
287
  const owner = Fr.fromString(ownerSome).toNumber() === 1 ? AztecAddress.fromString(ownerValue) : undefined;
@@ -279,25 +303,25 @@ export class Oracle {
279
303
  +status,
280
304
  );
281
305
 
282
- const returnDataAsArrayOfPackedRetrievedNotes = noteDatas.map(noteData =>
283
- packAsRetrievedNote({
306
+ const returnDataAsArrayOfPackedHintedNotes = noteDatas.map(noteData =>
307
+ packAsHintedNote({
284
308
  contractAddress: noteData.contractAddress,
285
309
  owner: noteData.owner,
286
310
  randomness: noteData.randomness,
287
311
  storageSlot: noteData.storageSlot,
288
312
  noteNonce: noteData.noteNonce,
289
- index: noteData.index,
313
+ isPending: noteData.isPending,
290
314
  note: noteData.note,
291
315
  }),
292
316
  );
293
317
 
294
318
  // Now we convert each sub-array to an array of ACVMField
295
- const returnDataAsArrayOfACVMFieldArrays = returnDataAsArrayOfPackedRetrievedNotes.map(subArray =>
319
+ const returnDataAsArrayOfACVMFieldArrays = returnDataAsArrayOfPackedHintedNotes.map(subArray =>
296
320
  subArray.map(toACVMField),
297
321
  );
298
322
 
299
323
  // At last we convert the array of arrays to a bounded vec of arrays
300
- return arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfACVMFieldArrays, +maxNotes, +packedRetrievedNoteLength);
324
+ return arrayOfArraysToBoundedVecOfArrays(returnDataAsArrayOfACVMFieldArrays, +maxNotes, +packedHintedNoteLength);
301
325
  }
302
326
 
303
327
  privateNotifyCreatedNote(
@@ -339,6 +363,14 @@ export class Oracle {
339
363
  return [];
340
364
  }
341
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
+
342
374
  async utilityCheckNullifierExists([innerNullifier]: ACVMField[]): Promise<ACVMField[]> {
343
375
  const exists = await this.handlerAsUtility().utilityCheckNullifierExists(Fr.fromString(innerNullifier));
344
376
  return [toACVMField(exists)];
@@ -358,15 +390,15 @@ export class Oracle {
358
390
  }
359
391
 
360
392
  async utilityStorageRead(
393
+ [blockHash]: ACVMField[],
361
394
  [contractAddress]: ACVMField[],
362
395
  [startStorageSlot]: ACVMField[],
363
- [blockNumber]: ACVMField[],
364
396
  [numberOfElements]: ACVMField[],
365
397
  ): Promise<ACVMField[][]> {
366
398
  const values = await this.handlerAsUtility().utilityStorageRead(
399
+ BlockHash.fromString(blockHash),
367
400
  new AztecAddress(Fr.fromString(contractAddress)),
368
401
  Fr.fromString(startStorageSlot),
369
- BlockNumber(+blockNumber),
370
402
  +numberOfElements,
371
403
  );
372
404
  return [values.map(toACVMField)];
@@ -476,12 +508,12 @@ export class Oracle {
476
508
  return [];
477
509
  }
478
510
 
479
- async utilityValidateEnqueuedNotesAndEvents(
511
+ async utilityValidateAndStoreEnqueuedNotesAndEvents(
480
512
  [contractAddress]: ACVMField[],
481
513
  [noteValidationRequestsArrayBaseSlot]: ACVMField[],
482
514
  [eventValidationRequestsArrayBaseSlot]: ACVMField[],
483
515
  ): Promise<ACVMField[]> {
484
- await this.handlerAsUtility().utilityValidateEnqueuedNotesAndEvents(
516
+ await this.handlerAsUtility().utilityValidateAndStoreEnqueuedNotesAndEvents(
485
517
  AztecAddress.fromString(contractAddress),
486
518
  Fr.fromString(noteValidationRequestsArrayBaseSlot),
487
519
  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 type { ContractSyncService } from '../../contract_sync/contract_sync_service.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,12 +88,12 @@ 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,
95
94
  capsuleStore: CapsuleStore,
96
95
  privateEventStore: PrivateEventStore,
96
+ private readonly contractSyncService: ContractSyncService,
97
97
  jobId: string,
98
98
  private totalPublicCalldataCount: number = 0,
99
99
  protected sideEffectCounter: number = 0,
@@ -112,7 +112,6 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
112
112
  keyStore,
113
113
  addressStore,
114
114
  aztecNode,
115
- anchorBlockStore,
116
115
  recipientTaggingStore,
117
116
  senderAddressBookStore,
118
117
  capsuleStore,
@@ -244,7 +243,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
244
243
  sender: AztecAddress,
245
244
  recipient: AztecAddress,
246
245
  ) {
247
- const senderCompleteAddress = await this.getCompleteAddress(sender);
246
+ const senderCompleteAddress = await this.getCompleteAddressOrFail(sender);
248
247
  const senderIvsk = await this.keyStore.getMasterIncomingViewingSecretKey(sender);
249
248
  return DirectionalAppTaggingSecret.compute(
250
249
  senderCompleteAddress,
@@ -265,9 +264,16 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
265
264
  // This is a tagging secret we've not yet used in this tx, so first sync our store to make sure its indices
266
265
  // are up to date. We do this here because this store is not synced as part of the global sync because
267
266
  // 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);
267
+ await syncSenderTaggingIndexes(
268
+ secret,
269
+ this.contractAddress,
270
+ this.aztecNode,
271
+ this.senderTaggingStore,
272
+ await this.anchorBlockHeader.hash(),
273
+ this.jobId,
274
+ );
275
+
276
+ const lastUsedIndex = await this.senderTaggingStore.getLastUsedIndex(secret, this.jobId);
271
277
  // If lastUsedIndex is undefined, we've never used this secret, so start from 0
272
278
  // Otherwise, the next index to use is one past the last used index
273
279
  return lastUsedIndex === undefined ? 0 : lastUsedIndex + 1;
@@ -356,7 +362,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
356
362
 
357
363
  const pendingNullifiers = this.noteCache.getNullifiers(this.callContext.contractAddress);
358
364
 
359
- const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockStore);
365
+ const noteService = new NoteService(this.noteStore, this.aztecNode, this.anchorBlockHeader, this.jobId);
360
366
  const dbNotes = await noteService.getNotes(
361
367
  this.callContext.contractAddress,
362
368
  owner,
@@ -428,6 +434,7 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
428
434
  note,
429
435
  siloedNullifier: undefined, // Siloed nullifier cannot be known for newly created note.
430
436
  noteHash,
437
+ isPending: true, // This note has just been created and hence is not settled yet.
431
438
  },
432
439
  counter,
433
440
  );
@@ -462,6 +469,19 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
462
469
  return this.noteCache.nullifierCreated(this.callContext.contractAddress, innerNullifier);
463
470
  }
464
471
 
472
+ /**
473
+ * Check if a nullifier has been emitted in the same transaction, i.e. if privateNotifyCreatedNullifier has been
474
+ * called for this inner nullifier from the contract with the specified address.
475
+ * @param innerNullifier - The inner nullifier to check.
476
+ * @param contractAddress - Address of the contract that emitted the nullifier.
477
+ * @returns A boolean indicating whether the nullifier is pending or not.
478
+ */
479
+ public async privateIsNullifierPending(innerNullifier: Fr, contractAddress: AztecAddress): Promise<boolean> {
480
+ const siloedNullifier = await siloNullifier(contractAddress, innerNullifier);
481
+ const isNullifierPending = this.noteCache.getNullifiers(contractAddress).has(siloedNullifier.toBigInt());
482
+ return Promise.resolve(isNullifierPending);
483
+ }
484
+
465
485
  /**
466
486
  * Emit a contract class log.
467
487
  * This fn exists because we only carry a poseidon hash through the kernels, and need to
@@ -518,9 +538,13 @@ export class PrivateExecutionOracle extends UtilityExecutionOracle implements IP
518
538
 
519
539
  isStaticCall = isStaticCall || this.callContext.isStaticCall;
520
540
 
521
- await verifyCurrentClassId(targetContractAddress, this.aztecNode, this.contractStore, this.anchorBlockHeader);
522
-
523
- await this.contractStore.syncPrivateState(targetContractAddress, functionSelector, this.utilityExecutor);
541
+ await this.contractSyncService.ensureContractSynced(
542
+ targetContractAddress,
543
+ functionSelector,
544
+ this.utilityExecutor,
545
+ this.anchorBlockHeader,
546
+ this.jobId,
547
+ );
524
548
 
525
549
  const targetArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(
526
550
  targetContractAddress,
@@ -547,12 +571,12 @@ 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,
554
577
  this.capsuleStore,
555
578
  this.privateEventStore,
579
+ this.contractSyncService,
556
580
  this.jobId,
557
581
  this.totalPublicCalldataCount,
558
582
  sideEffectCounter,