@aztec/pxe 3.0.3 → 4.0.0-devnet.1-patch.0

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 (369) hide show
  1. package/dest/bin/check_oracle_version.js +1 -1
  2. package/dest/block_synchronizer/block_synchronizer.d.ts +45 -0
  3. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -0
  4. package/dest/block_synchronizer/block_synchronizer.js +153 -0
  5. package/dest/block_synchronizer/index.d.ts +2 -0
  6. package/dest/block_synchronizer/index.d.ts.map +1 -0
  7. package/dest/block_synchronizer/index.js +1 -0
  8. package/dest/config/index.d.ts +6 -4
  9. package/dest/config/index.d.ts.map +1 -1
  10. package/dest/config/index.js +17 -0
  11. package/dest/config/package_info.js +1 -1
  12. package/dest/contract_function_simulator/benchmarked_node.d.ts +9 -0
  13. package/dest/contract_function_simulator/benchmarked_node.d.ts.map +1 -0
  14. package/dest/contract_function_simulator/benchmarked_node.js +77 -0
  15. package/dest/contract_function_simulator/contract_function_simulator.d.ts +41 -13
  16. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  17. package/dest/contract_function_simulator/contract_function_simulator.js +73 -32
  18. package/dest/contract_function_simulator/execution_note_cache.d.ts +18 -9
  19. package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
  20. package/dest/contract_function_simulator/execution_note_cache.js +45 -28
  21. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +1 -1
  22. package/dest/contract_function_simulator/execution_tagging_index_cache.js +1 -1
  23. package/dest/contract_function_simulator/index.d.ts +2 -2
  24. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  25. package/dest/contract_function_simulator/index.js +1 -1
  26. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +4 -3
  27. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  28. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +6 -3
  29. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +4 -3
  30. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -1
  31. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +7 -6
  32. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +1 -1
  33. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +1 -1
  34. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +4 -10
  35. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
  36. package/dest/contract_function_simulator/noir-structs/utility_context.js +7 -18
  37. package/dest/contract_function_simulator/oracle/interfaces.d.ts +19 -16
  38. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  39. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -1
  40. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
  41. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +6 -6
  42. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
  43. package/dest/contract_function_simulator/oracle/note_packing_utils.js +8 -8
  44. package/dest/contract_function_simulator/oracle/oracle.d.ts +11 -9
  45. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  46. package/dest/contract_function_simulator/oracle/oracle.js +70 -47
  47. package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -28
  48. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  49. package/dest/contract_function_simulator/oracle/private_execution.js +1 -37
  50. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +31 -22
  51. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  52. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +39 -43
  53. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +84 -29
  54. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  55. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +198 -71
  56. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +4 -4
  57. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
  58. package/dest/contract_function_simulator/proxied_contract_data_source.js +23 -5
  59. package/dest/contract_sync/contract_sync_service.d.ts +41 -0
  60. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
  61. package/dest/contract_sync/contract_sync_service.js +82 -0
  62. package/dest/contract_sync/helpers.d.ts +28 -0
  63. package/dest/contract_sync/helpers.d.ts.map +1 -0
  64. package/dest/contract_sync/helpers.js +55 -0
  65. package/dest/debug/pxe_debug_utils.d.ts +44 -0
  66. package/dest/debug/pxe_debug_utils.d.ts.map +1 -0
  67. package/dest/debug/pxe_debug_utils.js +48 -0
  68. package/dest/entrypoints/client/bundle/index.d.ts +1 -2
  69. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  70. package/dest/entrypoints/client/bundle/index.js +0 -1
  71. package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
  72. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  73. package/dest/entrypoints/client/bundle/utils.js +22 -7
  74. package/dest/entrypoints/client/lazy/index.d.ts +1 -2
  75. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  76. package/dest/entrypoints/client/lazy/index.js +0 -1
  77. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  78. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  79. package/dest/entrypoints/client/lazy/utils.js +23 -8
  80. package/dest/entrypoints/pxe_creation_options.d.ts +5 -3
  81. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  82. package/dest/entrypoints/server/index.d.ts +4 -2
  83. package/dest/entrypoints/server/index.d.ts.map +1 -1
  84. package/dest/entrypoints/server/index.js +3 -1
  85. package/dest/entrypoints/server/utils.d.ts +1 -1
  86. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  87. package/dest/entrypoints/server/utils.js +30 -15
  88. package/dest/error_enriching.d.ts +4 -4
  89. package/dest/error_enriching.d.ts.map +1 -1
  90. package/dest/error_enriching.js +6 -6
  91. package/dest/events/event_service.d.ts +15 -0
  92. package/dest/events/event_service.d.ts.map +1 -0
  93. package/dest/events/event_service.js +44 -0
  94. package/dest/events/private_event_filter_validator.d.ts +6 -5
  95. package/dest/events/private_event_filter_validator.d.ts.map +1 -1
  96. package/dest/events/private_event_filter_validator.js +5 -6
  97. package/dest/job_coordinator/job_coordinator.d.ts +75 -0
  98. package/dest/job_coordinator/job_coordinator.d.ts.map +1 -0
  99. package/dest/job_coordinator/job_coordinator.js +94 -0
  100. package/dest/logs/log_service.d.ts +28 -0
  101. package/dest/logs/log_service.d.ts.map +1 -0
  102. package/dest/logs/log_service.js +123 -0
  103. package/dest/notes/index.d.ts +2 -0
  104. package/dest/notes/index.d.ts.map +1 -0
  105. package/dest/notes/index.js +1 -0
  106. package/dest/notes/note_service.d.ts +48 -0
  107. package/dest/notes/note_service.d.ts.map +1 -0
  108. package/dest/notes/note_service.js +147 -0
  109. package/dest/oracle_version.d.ts +3 -3
  110. package/dest/oracle_version.d.ts.map +1 -1
  111. package/dest/oracle_version.js +4 -3
  112. package/dest/private_kernel/hints/index.d.ts +2 -2
  113. package/dest/private_kernel/hints/index.d.ts.map +1 -1
  114. package/dest/private_kernel/hints/index.js +1 -1
  115. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +28 -0
  116. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
  117. package/dest/private_kernel/hints/{build_private_kernel_reset_private_inputs.js → private_kernel_reset_private_inputs_builder.js} +13 -7
  118. package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
  119. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  120. package/dest/private_kernel/private_kernel_execution_prover.js +6 -7
  121. package/dest/private_kernel/private_kernel_oracle.d.ts +24 -28
  122. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  123. package/dest/private_kernel/private_kernel_oracle.js +90 -2
  124. package/dest/pxe.d.ts +44 -69
  125. package/dest/pxe.d.ts.map +1 -1
  126. package/dest/pxe.js +199 -210
  127. package/dest/storage/address_store/address_store.d.ts +11 -0
  128. package/dest/storage/address_store/address_store.d.ts.map +1 -0
  129. package/dest/storage/{address_data_provider/address_data_provider.js → address_store/address_store.js} +13 -12
  130. package/dest/storage/address_store/index.d.ts +2 -0
  131. package/dest/storage/address_store/index.d.ts.map +1 -0
  132. package/dest/storage/address_store/index.js +1 -0
  133. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +17 -0
  134. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -0
  135. package/dest/storage/{sync_data_provider/sync_data_provider.js → anchor_block_store/anchor_block_store.js} +10 -10
  136. package/dest/storage/{sync_data_provider → anchor_block_store}/index.d.ts +2 -2
  137. package/dest/storage/anchor_block_store/index.d.ts.map +1 -0
  138. package/dest/storage/anchor_block_store/index.js +1 -0
  139. package/dest/storage/capsule_store/capsule_store.d.ts +72 -0
  140. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -0
  141. package/dest/storage/capsule_store/capsule_store.js +253 -0
  142. package/dest/storage/capsule_store/index.d.ts +2 -0
  143. package/dest/storage/capsule_store/index.d.ts.map +1 -0
  144. package/dest/storage/capsule_store/index.js +1 -0
  145. package/dest/storage/{contract_data_provider/contract_data_provider.d.ts → contract_store/contract_store.d.ts} +6 -4
  146. package/dest/storage/contract_store/contract_store.d.ts.map +1 -0
  147. package/dest/storage/{contract_data_provider/contract_data_provider.js → contract_store/contract_store.js} +56 -16
  148. package/dest/storage/contract_store/index.d.ts +2 -0
  149. package/dest/storage/contract_store/index.d.ts.map +1 -0
  150. package/dest/storage/contract_store/index.js +1 -0
  151. package/dest/storage/{contract_data_provider → contract_store}/private_functions_tree.d.ts +1 -1
  152. package/dest/storage/contract_store/private_functions_tree.d.ts.map +1 -0
  153. package/dest/storage/index.d.ts +8 -8
  154. package/dest/storage/index.d.ts.map +1 -1
  155. package/dest/storage/index.js +7 -7
  156. package/dest/storage/metadata.d.ts +1 -1
  157. package/dest/storage/metadata.js +1 -1
  158. package/dest/storage/note_store/index.d.ts +3 -0
  159. package/dest/storage/note_store/index.d.ts.map +1 -0
  160. package/dest/storage/note_store/index.js +2 -0
  161. package/dest/storage/note_store/note_store.d.ts +83 -0
  162. package/dest/storage/note_store/note_store.d.ts.map +1 -0
  163. package/dest/storage/note_store/note_store.js +344 -0
  164. package/dest/storage/note_store/stored_note.d.ts +16 -0
  165. package/dest/storage/note_store/stored_note.d.ts.map +1 -0
  166. package/dest/storage/note_store/stored_note.js +43 -0
  167. package/dest/storage/private_event_store/private_event_store.d.ts +91 -0
  168. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -0
  169. package/dest/storage/private_event_store/private_event_store.js +273 -0
  170. package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
  171. package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
  172. package/dest/storage/private_event_store/stored_private_event.js +56 -0
  173. package/dest/storage/tagging_store/index.d.ts +4 -0
  174. package/dest/storage/tagging_store/index.d.ts.map +1 -0
  175. package/dest/storage/tagging_store/index.js +3 -0
  176. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +28 -0
  177. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -0
  178. package/dest/storage/tagging_store/recipient_tagging_store.js +111 -0
  179. package/dest/storage/tagging_store/sender_address_book_store.d.ts +14 -0
  180. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -0
  181. package/dest/storage/tagging_store/sender_address_book_store.js +36 -0
  182. package/dest/storage/tagging_store/sender_tagging_store.d.ts +77 -0
  183. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -0
  184. package/dest/storage/tagging_store/sender_tagging_store.js +348 -0
  185. package/dest/tagging/constants.d.ts +2 -2
  186. package/dest/tagging/constants.d.ts.map +1 -1
  187. package/dest/tagging/constants.js +10 -2
  188. package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
  189. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
  190. package/dest/tagging/get_all_logs_by_tags.js +46 -0
  191. package/dest/tagging/index.d.ts +16 -6
  192. package/dest/tagging/index.d.ts.map +1 -1
  193. package/dest/tagging/index.js +15 -5
  194. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +15 -0
  195. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -0
  196. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +99 -0
  197. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +12 -0
  198. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -0
  199. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +20 -0
  200. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +15 -0
  201. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -0
  202. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +32 -0
  203. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +21 -0
  204. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -0
  205. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +74 -0
  206. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +11 -0
  207. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -0
  208. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +29 -0
  209. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +21 -0
  210. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -0
  211. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +60 -0
  212. package/package.json +27 -18
  213. package/src/bin/check_oracle_version.ts +1 -0
  214. package/src/block_synchronizer/block_synchronizer.ts +178 -0
  215. package/src/block_synchronizer/index.ts +1 -0
  216. package/src/config/index.ts +17 -3
  217. package/src/config/package_info.ts +1 -1
  218. package/src/contract_function_simulator/benchmarked_node.ts +103 -0
  219. package/src/contract_function_simulator/contract_function_simulator.ts +116 -33
  220. package/src/contract_function_simulator/execution_note_cache.ts +44 -25
  221. package/src/contract_function_simulator/execution_tagging_index_cache.ts +1 -1
  222. package/src/contract_function_simulator/index.ts +1 -1
  223. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +5 -1
  224. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +5 -4
  225. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +1 -1
  226. package/src/contract_function_simulator/noir-structs/utility_context.ts +6 -25
  227. package/src/contract_function_simulator/oracle/interfaces.ts +24 -15
  228. package/src/contract_function_simulator/oracle/note_packing_utils.ts +10 -10
  229. package/src/contract_function_simulator/oracle/oracle.ts +82 -50
  230. package/src/contract_function_simulator/oracle/private_execution.ts +1 -68
  231. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +118 -56
  232. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +289 -87
  233. package/src/contract_function_simulator/proxied_contract_data_source.ts +24 -7
  234. package/src/contract_sync/contract_sync_service.ts +129 -0
  235. package/src/contract_sync/helpers.ts +93 -0
  236. package/src/debug/pxe_debug_utils.ts +91 -0
  237. package/src/entrypoints/client/bundle/index.ts +0 -1
  238. package/src/entrypoints/client/bundle/utils.ts +15 -16
  239. package/src/entrypoints/client/lazy/index.ts +0 -1
  240. package/src/entrypoints/client/lazy/utils.ts +16 -17
  241. package/src/entrypoints/pxe_creation_options.ts +4 -2
  242. package/src/entrypoints/server/index.ts +3 -1
  243. package/src/entrypoints/server/utils.ts +26 -34
  244. package/src/error_enriching.ts +7 -15
  245. package/src/events/event_service.ts +71 -0
  246. package/src/events/private_event_filter_validator.ts +4 -5
  247. package/src/job_coordinator/job_coordinator.ts +150 -0
  248. package/src/logs/log_service.ts +220 -0
  249. package/src/notes/index.ts +1 -0
  250. package/src/notes/note_service.ts +195 -0
  251. package/src/oracle_version.ts +4 -3
  252. package/src/private_kernel/hints/index.ts +1 -1
  253. package/src/private_kernel/hints/{build_private_kernel_reset_private_inputs.ts → private_kernel_reset_private_inputs_builder.ts} +33 -22
  254. package/src/private_kernel/private_kernel_execution_prover.ts +9 -8
  255. package/src/private_kernel/private_kernel_oracle.ts +116 -36
  256. package/src/pxe.ts +281 -260
  257. package/src/storage/{address_data_provider/address_data_provider.ts → address_store/address_store.ts} +16 -16
  258. package/src/storage/address_store/index.ts +1 -0
  259. package/src/storage/{sync_data_provider/sync_data_provider.ts → anchor_block_store/anchor_block_store.ts} +10 -12
  260. package/src/storage/anchor_block_store/index.ts +1 -0
  261. package/src/storage/capsule_store/capsule_store.ts +315 -0
  262. package/src/storage/capsule_store/index.ts +1 -0
  263. package/src/storage/{contract_data_provider/contract_data_provider.ts → contract_store/contract_store.ts} +66 -13
  264. package/src/storage/contract_store/index.ts +1 -0
  265. package/src/storage/index.ts +7 -7
  266. package/src/storage/metadata.ts +1 -1
  267. package/src/storage/note_store/index.ts +2 -0
  268. package/src/storage/note_store/note_store.ts +415 -0
  269. package/src/storage/note_store/stored_note.ts +48 -0
  270. package/src/storage/private_event_store/private_event_store.ts +384 -0
  271. package/src/storage/private_event_store/stored_private_event.ts +73 -0
  272. package/src/storage/tagging_store/index.ts +3 -0
  273. package/src/storage/tagging_store/recipient_tagging_store.ts +139 -0
  274. package/src/storage/tagging_store/sender_address_book_store.ts +48 -0
  275. package/src/storage/tagging_store/sender_tagging_store.ts +429 -0
  276. package/src/tagging/constants.ts +10 -2
  277. package/src/tagging/get_all_logs_by_tags.ts +68 -0
  278. package/src/tagging/index.ts +18 -5
  279. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +143 -0
  280. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +34 -0
  281. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +49 -0
  282. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +99 -0
  283. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +36 -0
  284. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +84 -0
  285. package/dest/contract_function_simulator/execution_data_provider.d.ts +0 -268
  286. package/dest/contract_function_simulator/execution_data_provider.d.ts.map +0 -1
  287. package/dest/contract_function_simulator/execution_data_provider.js +0 -14
  288. package/dest/contract_function_simulator/proxied_node.d.ts +0 -9
  289. package/dest/contract_function_simulator/proxied_node.d.ts.map +0 -1
  290. package/dest/contract_function_simulator/proxied_node.js +0 -27
  291. package/dest/contract_function_simulator/pxe_oracle_interface.d.ts +0 -124
  292. package/dest/contract_function_simulator/pxe_oracle_interface.d.ts.map +0 -1
  293. package/dest/contract_function_simulator/pxe_oracle_interface.js +0 -727
  294. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +0 -28
  295. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
  296. package/dest/private_kernel/private_kernel_oracle_impl.d.ts +0 -46
  297. package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +0 -1
  298. package/dest/private_kernel/private_kernel_oracle_impl.js +0 -86
  299. package/dest/storage/address_data_provider/address_data_provider.d.ts +0 -11
  300. package/dest/storage/address_data_provider/address_data_provider.d.ts.map +0 -1
  301. package/dest/storage/address_data_provider/index.d.ts +0 -2
  302. package/dest/storage/address_data_provider/index.d.ts.map +0 -1
  303. package/dest/storage/address_data_provider/index.js +0 -1
  304. package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts +0 -25
  305. package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts.map +0 -1
  306. package/dest/storage/capsule_data_provider/capsule_data_provider.js +0 -118
  307. package/dest/storage/capsule_data_provider/index.d.ts +0 -2
  308. package/dest/storage/capsule_data_provider/index.d.ts.map +0 -1
  309. package/dest/storage/capsule_data_provider/index.js +0 -1
  310. package/dest/storage/contract_data_provider/contract_data_provider.d.ts.map +0 -1
  311. package/dest/storage/contract_data_provider/index.d.ts +0 -2
  312. package/dest/storage/contract_data_provider/index.d.ts.map +0 -1
  313. package/dest/storage/contract_data_provider/index.js +0 -1
  314. package/dest/storage/contract_data_provider/private_functions_tree.d.ts.map +0 -1
  315. package/dest/storage/note_data_provider/index.d.ts +0 -3
  316. package/dest/storage/note_data_provider/index.d.ts.map +0 -1
  317. package/dest/storage/note_data_provider/index.js +0 -2
  318. package/dest/storage/note_data_provider/note_data_provider.d.ts +0 -84
  319. package/dest/storage/note_data_provider/note_data_provider.d.ts.map +0 -1
  320. package/dest/storage/note_data_provider/note_data_provider.js +0 -322
  321. package/dest/storage/private_event_data_provider/private_event_data_provider.d.ts +0 -51
  322. package/dest/storage/private_event_data_provider/private_event_data_provider.d.ts.map +0 -1
  323. package/dest/storage/private_event_data_provider/private_event_data_provider.js +0 -115
  324. package/dest/storage/sync_data_provider/index.d.ts.map +0 -1
  325. package/dest/storage/sync_data_provider/index.js +0 -1
  326. package/dest/storage/sync_data_provider/sync_data_provider.d.ts +0 -11
  327. package/dest/storage/sync_data_provider/sync_data_provider.d.ts.map +0 -1
  328. package/dest/storage/tagging_data_provider/index.d.ts +0 -2
  329. package/dest/storage/tagging_data_provider/index.d.ts.map +0 -1
  330. package/dest/storage/tagging_data_provider/index.js +0 -1
  331. package/dest/storage/tagging_data_provider/tagging_data_provider.d.ts +0 -40
  332. package/dest/storage/tagging_data_provider/tagging_data_provider.d.ts.map +0 -1
  333. package/dest/storage/tagging_data_provider/tagging_data_provider.js +0 -89
  334. package/dest/synchronizer/index.d.ts +0 -2
  335. package/dest/synchronizer/index.d.ts.map +0 -1
  336. package/dest/synchronizer/index.js +0 -1
  337. package/dest/synchronizer/synchronizer.d.ts +0 -36
  338. package/dest/synchronizer/synchronizer.d.ts.map +0 -1
  339. package/dest/synchronizer/synchronizer.js +0 -102
  340. package/dest/tagging/siloed_tag.d.ts +0 -14
  341. package/dest/tagging/siloed_tag.d.ts.map +0 -1
  342. package/dest/tagging/siloed_tag.js +0 -20
  343. package/dest/tagging/tag.d.ts +0 -12
  344. package/dest/tagging/tag.d.ts.map +0 -1
  345. package/dest/tagging/tag.js +0 -17
  346. package/dest/tagging/utils.d.ts +0 -18
  347. package/dest/tagging/utils.d.ts.map +0 -1
  348. package/dest/tagging/utils.js +0 -24
  349. package/src/contract_function_simulator/execution_data_provider.ts +0 -343
  350. package/src/contract_function_simulator/proxied_node.ts +0 -33
  351. package/src/contract_function_simulator/pxe_oracle_interface.ts +0 -1055
  352. package/src/private_kernel/private_kernel_oracle_impl.ts +0 -133
  353. package/src/storage/address_data_provider/index.ts +0 -1
  354. package/src/storage/capsule_data_provider/capsule_data_provider.ts +0 -147
  355. package/src/storage/capsule_data_provider/index.ts +0 -1
  356. package/src/storage/contract_data_provider/index.ts +0 -1
  357. package/src/storage/note_data_provider/index.ts +0 -2
  358. package/src/storage/note_data_provider/note_data_provider.ts +0 -412
  359. package/src/storage/private_event_data_provider/private_event_data_provider.ts +0 -162
  360. package/src/storage/sync_data_provider/index.ts +0 -1
  361. package/src/storage/tagging_data_provider/index.ts +0 -1
  362. package/src/storage/tagging_data_provider/tagging_data_provider.ts +0 -120
  363. package/src/synchronizer/index.ts +0 -1
  364. package/src/synchronizer/synchronizer.ts +0 -121
  365. package/src/tagging/siloed_tag.ts +0 -22
  366. package/src/tagging/tag.ts +0 -16
  367. package/src/tagging/utils.ts +0 -31
  368. /package/dest/storage/{contract_data_provider → contract_store}/private_functions_tree.js +0 -0
  369. /package/src/storage/{contract_data_provider → contract_store}/private_functions_tree.ts +0 -0
package/src/pxe.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { PrivateEventFilter } from '@aztec/aztec.js/wallet';
2
+ import { BlockNumber } from '@aztec/foundation/branded-types';
2
3
  import { Fr } from '@aztec/foundation/curves/bn254';
3
- import { type Logger, createLogger } from '@aztec/foundation/log';
4
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
4
5
  import { SerialQueue } from '@aztec/foundation/queue';
5
6
  import { Timer } from '@aztec/foundation/timer';
6
7
  import { KeyStore } from '@aztec/key-store';
@@ -12,32 +13,27 @@ import {
12
13
  type ContractArtifact,
13
14
  EventSelector,
14
15
  FunctionCall,
15
- FunctionSelector,
16
16
  FunctionType,
17
17
  decodeFunctionSignature,
18
- encodeArguments,
19
18
  } from '@aztec/stdlib/abi';
20
19
  import type { AuthWitness } from '@aztec/stdlib/auth-witness';
21
20
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
22
21
  import {
23
22
  CompleteAddress,
24
- type ContractClassWithId,
25
23
  type ContractInstanceWithAddress,
26
24
  type PartialAddress,
27
25
  computeContractAddressFromInstance,
28
26
  getContractClassFromArtifact,
29
27
  } from '@aztec/stdlib/contract';
30
28
  import { SimulationError } from '@aztec/stdlib/errors';
31
- import { computeProtocolNullifier, siloNullifier } from '@aztec/stdlib/hash';
32
29
  import type { AztecNode, PrivateKernelProver } from '@aztec/stdlib/interfaces/client';
33
30
  import type {
34
31
  PrivateExecutionStep,
35
32
  PrivateKernelExecutionProofOutput,
36
33
  PrivateKernelTailCircuitPublicInputs,
37
34
  } from '@aztec/stdlib/kernel';
38
- import type { NotesFilter } from '@aztec/stdlib/note';
39
- import { NoteDao } from '@aztec/stdlib/note';
40
35
  import {
36
+ BlockHeader,
41
37
  type ContractOverrides,
42
38
  type InTx,
43
39
  PrivateExecutionResult,
@@ -56,30 +52,34 @@ import {
56
52
 
57
53
  import { inspect } from 'util';
58
54
 
55
+ import { BlockSynchronizer } from './block_synchronizer/index.js';
59
56
  import type { PXEConfig } from './config/index.js';
57
+ import { BenchmarkedNodeFactory } from './contract_function_simulator/benchmarked_node.js';
60
58
  import {
61
59
  ContractFunctionSimulator,
62
60
  generateSimulatedProvingResult,
63
61
  } from './contract_function_simulator/contract_function_simulator.js';
64
- import { readCurrentClassId } from './contract_function_simulator/oracle/private_execution.js';
65
- import { ProxiedContractDataProviderFactory } from './contract_function_simulator/proxied_contract_data_source.js';
66
- import { ProxiedNodeFactory } from './contract_function_simulator/proxied_node.js';
67
- import { PXEOracleInterface } from './contract_function_simulator/pxe_oracle_interface.js';
62
+ import { ProxiedContractStoreFactory } from './contract_function_simulator/proxied_contract_data_source.js';
63
+ import { ContractSyncService } from './contract_sync/contract_sync_service.js';
64
+ import { readCurrentClassId } from './contract_sync/helpers.js';
65
+ import { PXEDebugUtils } from './debug/pxe_debug_utils.js';
68
66
  import { enrichPublicSimulationError, enrichSimulationError } from './error_enriching.js';
69
67
  import { PrivateEventFilterValidator } from './events/private_event_filter_validator.js';
68
+ import { JobCoordinator } from './job_coordinator/job_coordinator.js';
70
69
  import {
71
70
  PrivateKernelExecutionProver,
72
71
  type PrivateKernelExecutionProverConfig,
73
72
  } from './private_kernel/private_kernel_execution_prover.js';
74
- import { PrivateKernelOracleImpl } from './private_kernel/private_kernel_oracle_impl.js';
75
- import { AddressDataProvider } from './storage/address_data_provider/address_data_provider.js';
76
- import { CapsuleDataProvider } from './storage/capsule_data_provider/capsule_data_provider.js';
77
- import { ContractDataProvider } from './storage/contract_data_provider/contract_data_provider.js';
78
- import { NoteDataProvider } from './storage/note_data_provider/note_data_provider.js';
79
- import { PrivateEventDataProvider } from './storage/private_event_data_provider/private_event_data_provider.js';
80
- import { SyncDataProvider } from './storage/sync_data_provider/sync_data_provider.js';
81
- import { TaggingDataProvider } from './storage/tagging_data_provider/tagging_data_provider.js';
82
- import { Synchronizer } from './synchronizer/index.js';
73
+ import { PrivateKernelOracle } from './private_kernel/private_kernel_oracle.js';
74
+ import { AddressStore } from './storage/address_store/address_store.js';
75
+ import { AnchorBlockStore } from './storage/anchor_block_store/anchor_block_store.js';
76
+ import { CapsuleStore } from './storage/capsule_store/capsule_store.js';
77
+ import { ContractStore } from './storage/contract_store/contract_store.js';
78
+ import { NoteStore } from './storage/note_store/note_store.js';
79
+ import { PrivateEventStore } from './storage/private_event_store/private_event_store.js';
80
+ import { RecipientTaggingStore } from './storage/tagging_store/recipient_tagging_store.js';
81
+ import { SenderAddressBookStore } from './storage/tagging_store/sender_address_book_store.js';
82
+ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store.js';
83
83
 
84
84
  export type PackedPrivateEvent = InTx & {
85
85
  packedEvent: Fr[];
@@ -93,21 +93,26 @@ export type PackedPrivateEvent = InTx & {
93
93
  export class PXE {
94
94
  private constructor(
95
95
  private node: AztecNode,
96
- private synchronizer: Synchronizer,
96
+ private blockStateSynchronizer: BlockSynchronizer,
97
97
  private keyStore: KeyStore,
98
- private contractDataProvider: ContractDataProvider,
99
- private noteDataProvider: NoteDataProvider,
100
- private capsuleDataProvider: CapsuleDataProvider,
101
- private syncDataProvider: SyncDataProvider,
102
- private taggingDataProvider: TaggingDataProvider,
103
- private addressDataProvider: AddressDataProvider,
104
- private privateEventDataProvider: PrivateEventDataProvider,
98
+ private contractStore: ContractStore,
99
+ private noteStore: NoteStore,
100
+ private capsuleStore: CapsuleStore,
101
+ private anchorBlockStore: AnchorBlockStore,
102
+ private senderTaggingStore: SenderTaggingStore,
103
+ private senderAddressBookStore: SenderAddressBookStore,
104
+ private recipientTaggingStore: RecipientTaggingStore,
105
+ private addressStore: AddressStore,
106
+ private privateEventStore: PrivateEventStore,
107
+ private contractSyncService: ContractSyncService,
105
108
  private simulator: CircuitSimulator,
106
109
  private proverEnabled: boolean,
107
110
  private proofCreator: PrivateKernelProver,
108
111
  private protocolContractsProvider: ProtocolContractsProvider,
109
112
  private log: Logger,
110
113
  private jobQueue: SerialQueue,
114
+ private jobCoordinator: JobCoordinator,
115
+ public debug: PXEDebugUtils,
111
116
  ) {}
112
117
 
113
118
  /**
@@ -126,50 +131,87 @@ export class PXE {
126
131
  config: PXEConfig,
127
132
  loggerOrSuffix?: string | Logger,
128
133
  ) {
134
+ // Extract bindings from the logger, or use empty bindings if a string suffix is provided.
135
+ const bindings: LoggerBindings | undefined =
136
+ loggerOrSuffix && typeof loggerOrSuffix !== 'string' ? loggerOrSuffix.getBindings() : undefined;
137
+
129
138
  const log =
130
139
  !loggerOrSuffix || typeof loggerOrSuffix === 'string'
131
140
  ? createLogger(loggerOrSuffix ? `pxe:service:${loggerOrSuffix}` : `pxe:service`)
132
141
  : loggerOrSuffix;
133
142
 
134
143
  const proverEnabled = !!config.proverEnabled;
135
- const addressDataProvider = new AddressDataProvider(store);
136
- const privateEventDataProvider = new PrivateEventDataProvider(store);
137
- const contractDataProvider = new ContractDataProvider(store);
138
- const noteDataProvider = await NoteDataProvider.create(store);
139
- const syncDataProvider = new SyncDataProvider(store);
140
- const taggingDataProvider = new TaggingDataProvider(store);
141
- const capsuleDataProvider = new CapsuleDataProvider(store);
144
+ const addressStore = new AddressStore(store);
145
+ const privateEventStore = new PrivateEventStore(store);
146
+ const contractStore = new ContractStore(store);
147
+ const noteStore = new NoteStore(store);
148
+ const anchorBlockStore = new AnchorBlockStore(store);
149
+ const senderTaggingStore = new SenderTaggingStore(store);
150
+ const senderAddressBookStore = new SenderAddressBookStore(store);
151
+ const recipientTaggingStore = new RecipientTaggingStore(store);
152
+ const capsuleStore = new CapsuleStore(store);
142
153
  const keyStore = new KeyStore(store);
143
154
  const tipsStore = new L2TipsKVStore(store, 'pxe');
144
- const synchronizer = new Synchronizer(
155
+ const contractSyncService = new ContractSyncService(
156
+ node,
157
+ contractStore,
158
+ noteStore,
159
+ createLogger('pxe:contract_sync', bindings),
160
+ );
161
+ const synchronizer = new BlockSynchronizer(
145
162
  node,
146
- syncDataProvider,
147
- noteDataProvider,
148
- taggingDataProvider,
163
+ store,
164
+ anchorBlockStore,
165
+ noteStore,
166
+ privateEventStore,
149
167
  tipsStore,
168
+ contractSyncService,
150
169
  config,
151
- loggerOrSuffix,
170
+ bindings,
152
171
  );
153
172
 
173
+ const jobCoordinator = new JobCoordinator(store, bindings);
174
+ jobCoordinator.registerStores([
175
+ capsuleStore,
176
+ senderTaggingStore,
177
+ recipientTaggingStore,
178
+ privateEventStore,
179
+ noteStore,
180
+ contractSyncService,
181
+ ]);
182
+
183
+ const debugUtils = new PXEDebugUtils(contractSyncService, noteStore, synchronizer, anchorBlockStore);
184
+
154
185
  const jobQueue = new SerialQueue();
155
186
 
156
187
  const pxe = new PXE(
157
188
  node,
158
189
  synchronizer,
159
190
  keyStore,
160
- contractDataProvider,
161
- noteDataProvider,
162
- capsuleDataProvider,
163
- syncDataProvider,
164
- taggingDataProvider,
165
- addressDataProvider,
166
- privateEventDataProvider,
191
+ contractStore,
192
+ noteStore,
193
+ capsuleStore,
194
+ anchorBlockStore,
195
+ senderTaggingStore,
196
+ senderAddressBookStore,
197
+ recipientTaggingStore,
198
+ addressStore,
199
+ privateEventStore,
200
+ contractSyncService,
167
201
  simulator,
168
202
  proverEnabled,
169
203
  proofCreator,
170
204
  protocolContractsProvider,
171
205
  log,
172
206
  jobQueue,
207
+ jobCoordinator,
208
+ debugUtils,
209
+ );
210
+
211
+ debugUtils.setPXEHelpers(
212
+ pxe.#putInJobQueue.bind(pxe),
213
+ pxe.#getSimulatorForTx.bind(pxe),
214
+ pxe.#simulateUtility.bind(pxe),
173
215
  );
174
216
 
175
217
  pxe.jobQueue.start();
@@ -183,19 +225,22 @@ export class PXE {
183
225
  // Internal methods
184
226
 
185
227
  #getSimulatorForTx(overrides?: { contracts?: ContractOverrides }) {
186
- const pxeOracleInterface = new PXEOracleInterface(
187
- ProxiedNodeFactory.create(this.node),
228
+ const proxyContractStore = ProxiedContractStoreFactory.create(this.contractStore, overrides?.contracts);
229
+
230
+ return new ContractFunctionSimulator(
231
+ proxyContractStore,
232
+ this.noteStore,
188
233
  this.keyStore,
189
- ProxiedContractDataProviderFactory.create(this.contractDataProvider, overrides?.contracts),
190
- this.noteDataProvider,
191
- this.capsuleDataProvider,
192
- this.syncDataProvider,
193
- this.taggingDataProvider,
194
- this.addressDataProvider,
195
- this.privateEventDataProvider,
196
- this.log,
234
+ this.addressStore,
235
+ BenchmarkedNodeFactory.create(this.node),
236
+ this.senderTaggingStore,
237
+ this.recipientTaggingStore,
238
+ this.senderAddressBookStore,
239
+ this.capsuleStore,
240
+ this.privateEventStore,
241
+ this.simulator,
242
+ this.contractSyncService,
197
243
  );
198
- return new ContractFunctionSimulator(pxeOracleInterface, this.simulator);
199
244
  }
200
245
 
201
246
  #contextualizeError(err: Error, ...context: string[]): Error {
@@ -218,7 +263,7 @@ export class PXE {
218
263
  *
219
264
  * Useful for tasks that cannot run concurrently, such as contract function simulation.
220
265
  */
221
- #putInJobQueue<T>(fn: () => Promise<T>): Promise<T> {
266
+ #putInJobQueue<T>(fn: (jobId: string) => Promise<T>): Promise<T> {
222
267
  // TODO(#12636): relax the conditions under which we forbid concurrency.
223
268
  if (this.jobQueue.length() != 0) {
224
269
  this.log.warn(
@@ -226,7 +271,22 @@ export class PXE {
226
271
  );
227
272
  }
228
273
 
229
- return this.jobQueue.put(fn);
274
+ return this.jobQueue.put(async () => {
275
+ const jobId = this.jobCoordinator.beginJob();
276
+ this.log.verbose(`Beginning job ${jobId}`);
277
+
278
+ try {
279
+ const result = await fn(jobId);
280
+ this.log.verbose(`Committing job ${jobId}`);
281
+
282
+ await this.jobCoordinator.commitJob(jobId);
283
+ return result;
284
+ } catch (err) {
285
+ this.log.verbose(`Aborting job ${jobId}`);
286
+ await this.jobCoordinator.abortJob(jobId);
287
+ throw err;
288
+ }
289
+ });
230
290
  }
231
291
 
232
292
  async #registerProtocolContracts() {
@@ -234,76 +294,51 @@ export class PXE {
234
294
  for (const name of protocolContractNames) {
235
295
  const { address, contractClass, instance, artifact } =
236
296
  await this.protocolContractsProvider.getProtocolContractArtifact(name);
237
- await this.contractDataProvider.addContractArtifact(contractClass.id, artifact);
238
- await this.contractDataProvider.addContractInstance(instance);
297
+ await this.contractStore.addContractArtifact(contractClass.id, artifact);
298
+ await this.contractStore.addContractInstance(instance);
239
299
  registered[name] = address.toString();
240
300
  }
241
301
  this.log.verbose(`Registered protocol contracts in pxe`, registered);
242
302
  }
243
303
 
244
- async #isContractClassPubliclyRegistered(id: Fr): Promise<boolean> {
245
- return !!(await this.node.getContractClass(id));
246
- }
247
-
248
- async #isContractPublished(address: AztecAddress): Promise<boolean> {
249
- return !!(await this.node.getContract(address));
250
- }
251
-
252
- async #isContractInitialized(address: AztecAddress): Promise<boolean> {
253
- const initNullifier = await siloNullifier(address, address.toField());
254
- return !!(await this.node.getNullifierMembershipWitness('latest', initNullifier));
255
- }
256
-
257
- async #getFunctionCall(functionName: string, args: any[], to: AztecAddress): Promise<FunctionCall> {
258
- const contract = await this.contractDataProvider.getContract(to);
259
- if (!contract) {
260
- throw new Error(
261
- `Unknown contract ${to}: add it to PXE by calling server.addContracts(...).\nSee docs for context: https://docs.aztec.network/developers/resources/debugging/aztecnr-errors#unknown-contract-0x0-add-it-to-pxe-by-calling-serveraddcontracts`,
262
- );
263
- }
264
-
265
- const functionDao = contract.functions.find(f => f.name === functionName);
266
- if (!functionDao) {
267
- throw new Error(`Unknown function ${functionName} in contract ${contract.name}.`);
268
- }
269
-
270
- return {
271
- name: functionDao.name,
272
- args: encodeArguments(functionDao, args),
273
- selector: await FunctionSelector.fromNameAndParameters(functionDao.name, functionDao.parameters),
274
- type: functionDao.functionType,
275
- to,
276
- hideMsgSender: false,
277
- isStatic: functionDao.isStatic,
278
- returnTypes: functionDao.returnTypes,
279
- };
280
- }
281
-
282
304
  // Executes the entrypoint private function, as well as all nested private
283
305
  // functions that might arise.
284
306
  async #executePrivate(
285
307
  contractFunctionSimulator: ContractFunctionSimulator,
286
308
  txRequest: TxExecutionRequest,
287
- scopes?: AztecAddress[],
309
+ scopes: AztecAddress[] | undefined,
310
+ jobId: string,
288
311
  ): Promise<PrivateExecutionResult> {
289
312
  const { origin: contractAddress, functionSelector } = txRequest;
290
313
 
291
314
  try {
315
+ const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
316
+
317
+ await this.contractSyncService.ensureContractSynced(
318
+ contractAddress,
319
+ functionSelector,
320
+ privateSyncCall => this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
321
+ anchorBlockHeader,
322
+ jobId,
323
+ );
324
+
292
325
  const result = await contractFunctionSimulator.run(
293
326
  txRequest,
294
327
  contractAddress,
295
328
  functionSelector,
296
329
  undefined,
330
+ anchorBlockHeader,
297
331
  // The sender for tags is set by contracts, typically by an account
298
332
  // contract entrypoint
299
333
  undefined, // senderForTags
300
334
  scopes,
335
+ jobId,
301
336
  );
302
337
  this.log.debug(`Private simulation completed for ${contractAddress.toString()}:${functionSelector}`);
303
338
  return result;
304
339
  } catch (err) {
305
340
  if (err instanceof SimulationError) {
306
- await enrichSimulationError(err, this.contractDataProvider, this.log);
341
+ await enrichSimulationError(err, this.contractStore, this.log);
307
342
  }
308
343
  throw err;
309
344
  }
@@ -316,19 +351,22 @@ export class PXE {
316
351
  * @param authWitnesses - Authentication witnesses required for the function call.
317
352
  * @param scopes - Optional array of account addresses whose notes can be accessed in this call. Defaults to all
318
353
  * accounts if not specified.
354
+ * @param jobId - The job ID for staged writes.
319
355
  * @returns The simulation result containing the outputs of the utility function.
320
356
  */
321
357
  async #simulateUtility(
322
358
  contractFunctionSimulator: ContractFunctionSimulator,
323
359
  call: FunctionCall,
324
- authWitnesses?: AuthWitness[],
325
- scopes?: AztecAddress[],
360
+ authWitnesses: AuthWitness[] | undefined,
361
+ scopes: AztecAddress[] | undefined,
362
+ jobId: string,
326
363
  ) {
327
364
  try {
328
- return contractFunctionSimulator.runUtility(call, authWitnesses ?? [], scopes);
365
+ const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
366
+ return contractFunctionSimulator.runUtility(call, authWitnesses ?? [], anchorBlockHeader, scopes, jobId);
329
367
  } catch (err) {
330
368
  if (err instanceof SimulationError) {
331
- await enrichSimulationError(err, this.contractDataProvider, this.log);
369
+ await enrichSimulationError(err, this.contractStore, this.log);
332
370
  }
333
371
  throw err;
334
372
  }
@@ -352,7 +390,7 @@ export class PXE {
352
390
  } catch (err) {
353
391
  if (err instanceof SimulationError) {
354
392
  try {
355
- await enrichPublicSimulationError(err, this.contractDataProvider, this.log);
393
+ await enrichPublicSimulationError(err, this.contractStore, this.log);
356
394
  } catch (enrichErr) {
357
395
  this.log.error(`Failed to enrich public simulation error: ${enrichErr}`);
358
396
  }
@@ -378,85 +416,45 @@ export class PXE {
378
416
  privateExecutionResult: PrivateExecutionResult,
379
417
  config: PrivateKernelExecutionProverConfig,
380
418
  ): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
381
- const simulationAnchorBlock = privateExecutionResult.getSimulationAnchorBlockNumber();
382
- const kernelOracle = new PrivateKernelOracleImpl(
383
- this.contractDataProvider,
384
- this.keyStore,
385
- this.node,
386
- simulationAnchorBlock,
419
+ const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
420
+ const anchorBlockHash = await anchorBlockHeader.hash();
421
+ const kernelOracle = new PrivateKernelOracle(this.contractStore, this.keyStore, this.node, anchorBlockHash);
422
+ const kernelTraceProver = new PrivateKernelExecutionProver(
423
+ kernelOracle,
424
+ proofCreator,
425
+ !this.proverEnabled,
426
+ this.log.getBindings(),
387
427
  );
388
- const kernelTraceProver = new PrivateKernelExecutionProver(kernelOracle, proofCreator, !this.proverEnabled);
389
428
  this.log.debug(`Executing kernel trace prover (${JSON.stringify(config)})...`);
390
429
  return await kernelTraceProver.proveWithKernels(txExecutionRequest.toTxRequest(), privateExecutionResult, config);
391
430
  }
392
431
 
393
432
  // Public API
394
433
 
395
- public getContractInstance(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined> {
396
- return this.contractDataProvider.getContractInstance(address);
434
+ /**
435
+ * Returns the block header up to which the PXE has synced.
436
+ * @returns The synced block header
437
+ */
438
+ public getSyncedBlockHeader(): Promise<BlockHeader> {
439
+ return this.anchorBlockStore.getBlockHeader();
397
440
  }
398
441
 
399
442
  /**
400
- * Returns the contract class metadata given a contract class id.
401
- * The metadata consists of its contract class, whether it has been publicly registered, and its artifact.
402
- * @remark - it queries the node to check whether the contract class with the given id has been publicly registered.
403
- * @param id - Identifier of the class.
404
- * @param includeArtifact - Identifier of the class.
405
- * @returns - It returns the contract class metadata, with the artifact field being optional, and will only be returned if true is passed in
406
- * for `includeArtifact`
407
- * TODO(@spalladino): The PXE actually holds artifacts and not classes, what should we return? Also,
408
- * should the pxe query the node for contract public info, and merge it with its own definitions?
409
- * TODO(@spalladino): This method is strictly needed to decide whether to publicly register a class or not
410
- * during a public deployment. We probably want a nicer and more general API for this, but it'll have to
411
- * do for the time being.
443
+ * Returns the contract instance for a given address, if it's registered in the PXE.
444
+ * @param address - The contract address.
445
+ * @returns The contract instance if found, undefined otherwise.
412
446
  */
413
- public async getContractClassMetadata(
414
- id: Fr,
415
- includeArtifact: boolean = false,
416
- ): Promise<{
417
- contractClass: ContractClassWithId | undefined;
418
- isContractClassPubliclyRegistered: boolean;
419
- artifact: ContractArtifact | undefined;
420
- }> {
421
- const artifact = await this.contractDataProvider.getContractArtifact(id);
422
- if (!artifact) {
423
- this.log.warn(`No artifact found for contract class ${id.toString()} when looking for its metadata`);
424
- }
425
-
426
- return {
427
- contractClass: artifact && (await getContractClassFromArtifact(artifact)),
428
- isContractClassPubliclyRegistered: await this.#isContractClassPubliclyRegistered(id),
429
- artifact: includeArtifact ? artifact : undefined,
430
- };
447
+ public getContractInstance(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined> {
448
+ return this.contractStore.getContractInstance(address);
431
449
  }
432
450
 
433
451
  /**
434
- * Returns the contract metadata given an address.
435
- * The metadata consists of its contract instance, which includes the contract class identifier,
436
- * initialization hash, deployment salt, and public keys hash; whether the contract instance has been initialized;
437
- * and whether the contract instance with the given address has been publicly deployed.
438
- * @remark - it queries the node to check whether the contract instance has been initialized / publicly deployed through a node.
439
- * This query is not dependent on the PXE.
440
- * @param address - The address that the contract instance resides at.
441
- * @returns - It returns the contract metadata
442
- * TODO(@spalladino): Should we return the public keys in plain as well here?
452
+ * Returns the contract artifact for a given contract class id, if it's registered in the PXE.
453
+ * @param id - Identifier of the contract class.
454
+ * @returns The contract artifact if found, undefined otherwise.
443
455
  */
444
- public async getContractMetadata(address: AztecAddress): Promise<{
445
- contractInstance: ContractInstanceWithAddress | undefined;
446
- isContractInitialized: boolean;
447
- isContractPublished: boolean;
448
- }> {
449
- let instance;
450
- try {
451
- instance = await this.contractDataProvider.getContractInstance(address);
452
- } catch {
453
- this.log.warn(`No instance found for contract ${address.toString()} when looking for its metadata`);
454
- }
455
- return {
456
- contractInstance: instance,
457
- isContractInitialized: await this.#isContractInitialized(address),
458
- isContractPublished: await this.#isContractPublished(address),
459
- };
456
+ public async getContractArtifact(id: Fr): Promise<ContractArtifact | undefined> {
457
+ return await this.contractStore.getContractArtifact(id);
460
458
  }
461
459
 
462
460
  /**
@@ -480,56 +478,57 @@ export class PXE {
480
478
  this.log.debug(`Registered account\n ${accountCompleteAddress.toReadableString()}`);
481
479
  }
482
480
 
483
- await this.addressDataProvider.addCompleteAddress(accountCompleteAddress);
484
- await this.noteDataProvider.addScope(accountCompleteAddress.address);
481
+ await this.addressStore.addCompleteAddress(accountCompleteAddress);
485
482
  return accountCompleteAddress;
486
483
  }
487
484
 
488
485
  /**
489
- * Registers a user contact in PXE.
486
+ * Registers a sender in this PXE.
490
487
  *
491
- * Once a new contact is registered, the PXE will be able to receive notes tagged from this contact.
492
- * Will do nothing if the account is already registered.
488
+ * After registering a new sender, the PXE will sync private logs that are tagged with this sender's address.
489
+ * Will do nothing if the address is already registered.
493
490
  *
494
- * @param address - Address of the user to add to the address book
495
- * @returns The address address of the account.
491
+ * @param sender - Address of the sender to register.
492
+ * @returns The address of the sender.
493
+ * TODO: It's strange that we return the address here and I (benesjan) think we should drop the return value.
496
494
  */
497
- public async registerSender(address: AztecAddress): Promise<AztecAddress> {
495
+ public async registerSender(sender: AztecAddress): Promise<AztecAddress> {
498
496
  const accounts = await this.keyStore.getAccounts();
499
- if (accounts.includes(address)) {
500
- this.log.info(`Sender:\n "${address.toString()}"\n already registered.`);
501
- return address;
497
+ if (accounts.includes(sender)) {
498
+ this.log.info(`Sender:\n "${sender.toString()}"\n already registered.`);
499
+ return sender;
502
500
  }
503
501
 
504
- const wasAdded = await this.taggingDataProvider.addSenderAddress(address);
502
+ const wasAdded = await this.senderAddressBookStore.addSender(sender);
505
503
 
506
504
  if (wasAdded) {
507
- this.log.info(`Added sender:\n ${address.toString()}`);
505
+ this.log.info(`Added sender:\n ${sender.toString()}`);
508
506
  } else {
509
- this.log.info(`Sender:\n "${address.toString()}"\n already registered.`);
507
+ this.log.info(`Sender:\n "${sender.toString()}"\n already registered.`);
510
508
  }
511
509
 
512
- return address;
510
+ return sender;
513
511
  }
514
512
 
515
513
  /**
516
- * Retrieves the addresses stored as senders on this PXE.
517
- * @returns An array of the senders on this PXE.
514
+ * Retrieves senders registered in this PXE.
515
+ * @returns Senders registered in this PXE.
518
516
  */
519
517
  public getSenders(): Promise<AztecAddress[]> {
520
- return this.taggingDataProvider.getSenderAddresses();
518
+ return this.senderAddressBookStore.getSenders();
521
519
  }
522
520
 
523
521
  /**
524
- * Removes a sender in the address book.
522
+ * Removes a sender registered in this PXE.
523
+ * @param sender - The address of the sender to remove.
525
524
  */
526
- public async removeSender(address: AztecAddress): Promise<void> {
527
- const wasRemoved = await this.taggingDataProvider.removeSenderAddress(address);
525
+ public async removeSender(sender: AztecAddress): Promise<void> {
526
+ const wasRemoved = await this.senderAddressBookStore.removeSender(sender);
528
527
 
529
528
  if (wasRemoved) {
530
- this.log.info(`Removed sender:\n ${address.toString()}`);
529
+ this.log.info(`Removed sender:\n ${sender.toString()}`);
531
530
  } else {
532
- this.log.info(`Sender:\n "${address.toString()}"\n not in address book.`);
531
+ this.log.info(`Sender:\n "${sender.toString()}"\n not registered in PXE.`);
533
532
  }
534
533
  }
535
534
 
@@ -539,7 +538,7 @@ export class PXE {
539
538
  */
540
539
  public async getRegisteredAccounts(): Promise<CompleteAddress[]> {
541
540
  // Get complete addresses of both the recipients and the accounts
542
- const completeAddresses = await this.addressDataProvider.getCompleteAddresses();
541
+ const completeAddresses = await this.addressStore.getCompleteAddresses();
543
542
  // Filter out the addresses not corresponding to accounts
544
543
  const accounts = await this.keyStore.getAccounts();
545
544
  return completeAddresses.filter(completeAddress =>
@@ -554,7 +553,7 @@ export class PXE {
554
553
  */
555
554
  public async registerContractClass(artifact: ContractArtifact): Promise<void> {
556
555
  const { id: contractClassId } = await getContractClassFromArtifact(artifact);
557
- await this.contractDataProvider.addContractArtifact(contractClassId, artifact);
556
+ await this.contractStore.addContractArtifact(contractClassId, artifact);
558
557
  this.log.info(`Added contract class ${artifact.name} with id ${contractClassId}`);
559
558
  }
560
559
 
@@ -583,7 +582,7 @@ export class PXE {
583
582
  if (!computedAddress.equals(instance.address)) {
584
583
  throw new Error('Added a contract in which the address does not match the contract instance.');
585
584
  }
586
- await this.contractDataProvider.addContractArtifact(contractClass.id, artifact);
585
+ await this.contractStore.addContractArtifact(contractClass.id, artifact);
587
586
 
588
587
  const publicFunctionSignatures = artifact.functions
589
588
  .filter(fn => fn.functionType === FunctionType.PUBLIC)
@@ -591,7 +590,7 @@ export class PXE {
591
590
  await this.node.registerContractFunctionSignatures(publicFunctionSignatures);
592
591
  } else {
593
592
  // Otherwise, make sure there is an artifact already registered for that class id
594
- artifact = await this.contractDataProvider.getContractArtifact(instance.currentContractClassId);
593
+ artifact = await this.contractStore.getContractArtifact(instance.currentContractClassId);
595
594
  if (!artifact) {
596
595
  throw new Error(
597
596
  `Artifact not found when registering an instance. Contract class: ${instance.currentContractClassId}.`,
@@ -599,7 +598,7 @@ export class PXE {
599
598
  }
600
599
  }
601
600
 
602
- await this.contractDataProvider.addContractInstance(instance);
601
+ await this.contractStore.addContractInstance(instance);
603
602
  this.log.info(
604
603
  `Added contract ${artifact.name} at ${instance.address.toString()} with class ${instance.currentContractClassId}`,
605
604
  );
@@ -618,27 +617,21 @@ export class PXE {
618
617
  // We disable concurrently updating contracts to avoid concurrently syncing with the node, or changing a contract's
619
618
  // class while we're simulating it.
620
619
  return this.#putInJobQueue(async () => {
621
- const currentInstance = await this.contractDataProvider.getContractInstance(contractAddress);
620
+ const currentInstance = await this.contractStore.getContractInstance(contractAddress);
622
621
  if (!currentInstance) {
623
622
  throw new Error(`Instance not found when updating a contract. Contract address: ${contractAddress}.`);
624
623
  }
625
624
  const contractClass = await getContractClassFromArtifact(artifact);
626
- await this.synchronizer.sync();
625
+ await this.blockStateSynchronizer.sync();
627
626
 
628
- const header = await this.syncDataProvider.getBlockHeader();
627
+ const header = await this.anchorBlockStore.getBlockHeader();
629
628
 
630
- const currentClassId = await readCurrentClassId(
631
- contractAddress,
632
- currentInstance,
633
- this.node,
634
- header.globalVariables.blockNumber,
635
- header.globalVariables.timestamp,
636
- );
629
+ const currentClassId = await readCurrentClassId(contractAddress, currentInstance, this.node, header);
637
630
  if (!contractClass.id.equals(currentClassId)) {
638
631
  throw new Error('Could not update contract to a class different from the current one.');
639
632
  }
640
633
 
641
- await this.contractDataProvider.addContractArtifact(contractClass.id, artifact);
634
+ await this.contractStore.addContractArtifact(contractClass.id, artifact);
642
635
 
643
636
  const publicFunctionSignatures = artifact.functions
644
637
  .filter(fn => fn.functionType === FunctionType.PUBLIC)
@@ -646,7 +639,7 @@ export class PXE {
646
639
  await this.node.registerContractFunctionSignatures(publicFunctionSignatures);
647
640
 
648
641
  currentInstance.currentContractClassId = contractClass.id;
649
- await this.contractDataProvider.addContractInstance(currentInstance);
642
+ await this.contractStore.addContractInstance(currentInstance);
650
643
  this.log.info(`Updated contract ${artifact.name} at ${contractAddress.toString()} to class ${contractClass.id}`);
651
644
  });
652
645
  }
@@ -656,26 +649,7 @@ export class PXE {
656
649
  * @returns An array of contracts addresses registered on this PXE.
657
650
  */
658
651
  public getContracts(): Promise<AztecAddress[]> {
659
- return this.contractDataProvider.getContractsAddresses();
660
- }
661
-
662
- /**
663
- * A debugging utility to get notes based on the provided filter.
664
- *
665
- * Note that this should not be used in production code because the structure of notes is considered to be
666
- * an implementation detail of contracts. This is only meant to be used for debugging purposes. If you need to obtain
667
- * note-related information in production code, please implement a custom utility function on your contract and call
668
- * that function instead (e.g. `get_balance(owner: AztecAddress) -> u128` utility function on a Token contract).
669
- *
670
- * @param filter - The filter to apply to the notes.
671
- * @returns The requested notes.
672
- */
673
- public async getNotes(filter: NotesFilter): Promise<NoteDao[]> {
674
- // We need to manually trigger private state sync to have a guarantee that all the notes are available.
675
- const call = await this.#getFunctionCall('sync_private_state', [], filter.contractAddress);
676
- await this.simulateUtility(call);
677
-
678
- return this.noteDataProvider.getNotes(filter);
652
+ return this.contractStore.getContractsAddresses();
679
653
  }
680
654
 
681
655
  /**
@@ -691,14 +665,14 @@ export class PXE {
691
665
  let privateExecutionResult: PrivateExecutionResult;
692
666
  // We disable proving concurrently mostly out of caution, since it accesses some of our stores. Proving is so
693
667
  // computationally demanding that it'd be rare for someone to try to do it concurrently regardless.
694
- return this.#putInJobQueue(async () => {
668
+ return this.#putInJobQueue(async jobId => {
695
669
  const totalTimer = new Timer();
696
670
  try {
697
671
  const syncTimer = new Timer();
698
- await this.synchronizer.sync();
672
+ await this.blockStateSynchronizer.sync();
699
673
  const syncTime = syncTimer.ms();
700
674
  const contractFunctionSimulator = this.#getSimulatorForTx();
701
- privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest);
675
+ privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest, undefined, jobId);
702
676
 
703
677
  const {
704
678
  publicInputs,
@@ -735,14 +709,22 @@ export class PXE {
735
709
  nodeRPCCalls: contractFunctionSimulator?.getStats().nodeRPCCalls,
736
710
  });
737
711
 
712
+ // While not strictly necessary to store tagging cache contents in the DB since we sync tagging indexes from
713
+ // chain before sending new logs, the sync can only see logs already included in blocks. If we send another
714
+ // transaction before this one is included in a block from this PXE, and that transaction contains a log with
715
+ // a tag derived from the same secret, we would reuse the tag and the transactions would be linked. Hence
716
+ // storing the tags here prevents linkage of txs sent from the same PXE.
738
717
  const preTagsUsedInTheTx = privateExecutionResult.entrypoint.preTags;
739
718
  if (preTagsUsedInTheTx.length > 0) {
740
- await this.taggingDataProvider.setLastUsedIndexesAsSender(preTagsUsedInTheTx);
741
- this.log.debug(`Stored used pre tags as sender for the tx`, {
719
+ // TODO(benesjan): The following is an expensive operation. Figure out a way to avoid it.
720
+ const txHash = (await txProvingResult.toTx()).txHash;
721
+
722
+ await this.senderTaggingStore.storePendingIndexes(preTagsUsedInTheTx, txHash, jobId);
723
+ this.log.debug(`Stored used pre-tags as sender for the tx`, {
742
724
  preTagsUsedInTheTx,
743
725
  });
744
726
  } else {
745
- this.log.debug(`No pre tags used in the tx`);
727
+ this.log.debug(`No pre-tags used in the tx`);
746
728
  }
747
729
 
748
730
  return txProvingResult;
@@ -767,7 +749,7 @@ export class PXE {
767
749
  skipProofGeneration: boolean = true,
768
750
  ): Promise<TxProfileResult> {
769
751
  // We disable concurrent profiles for consistency with simulateTx.
770
- return this.#putInJobQueue(async () => {
752
+ return this.#putInJobQueue(async jobId => {
771
753
  const totalTimer = new Timer();
772
754
  try {
773
755
  const txInfo = {
@@ -783,11 +765,16 @@ export class PXE {
783
765
  txInfo,
784
766
  );
785
767
  const syncTimer = new Timer();
786
- await this.synchronizer.sync();
768
+ await this.blockStateSynchronizer.sync();
787
769
  const syncTime = syncTimer.ms();
788
770
 
789
771
  const contractFunctionSimulator = this.#getSimulatorForTx();
790
- const privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest);
772
+ const privateExecutionResult = await this.#executePrivate(
773
+ contractFunctionSimulator,
774
+ txRequest,
775
+ undefined,
776
+ jobId,
777
+ );
791
778
 
792
779
  const { executionSteps, timings: { proving } = {} } = await this.#prove(
793
780
  txRequest,
@@ -867,7 +854,7 @@ export class PXE {
867
854
  // We disable concurrent simulations since those might execute oracles which read and write to the PXE stores (e.g.
868
855
  // to the capsules), and we need to prevent concurrent runs from interfering with one another (e.g. attempting to
869
856
  // delete the same read value, or reading values that another simulation is currently modifying).
870
- return this.#putInJobQueue(async () => {
857
+ return this.#putInJobQueue(async jobId => {
871
858
  try {
872
859
  const totalTimer = new Timer();
873
860
  const txInfo = {
@@ -883,31 +870,32 @@ export class PXE {
883
870
  txInfo,
884
871
  );
885
872
  const syncTimer = new Timer();
886
- await this.synchronizer.sync();
873
+ await this.blockStateSynchronizer.sync();
887
874
  const syncTime = syncTimer.ms();
888
875
 
889
876
  const contractFunctionSimulator = this.#getSimulatorForTx(overrides);
890
877
  // Temporary: in case there are overrides, we have to skip the kernels or validations
891
878
  // will fail. Consider handing control to the user/wallet on whether they want to run them
892
879
  // or not.
893
- const skipKernels = overrides?.contracts !== undefined && Object.keys(overrides.contracts ?? {}).length > 0;
880
+ const overriddenContracts = overrides?.contracts ? new Set(Object.keys(overrides.contracts)) : undefined;
881
+ const hasOverriddenContracts = overriddenContracts !== undefined && overriddenContracts.size > 0;
882
+ const skipKernels = hasOverriddenContracts;
883
+
884
+ // Set overridden contracts on the sync service so it knows to skip syncing them
885
+ if (hasOverriddenContracts) {
886
+ this.contractSyncService.setOverriddenContracts(jobId, overriddenContracts);
887
+ }
894
888
 
895
889
  // Execution of private functions only; no proving, and no kernel logic.
896
- const privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest, scopes);
890
+ const privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest, scopes, jobId);
897
891
 
898
892
  let publicInputs: PrivateKernelTailCircuitPublicInputs | undefined;
899
893
  let executionSteps: PrivateExecutionStep[] = [];
900
894
 
901
895
  if (skipKernels) {
902
- // According to the protocol rules, the nonce generator for the note hashes
903
- // can either be the first nullifier in the tx or the protocol nullifier if there are none.
904
- const nonceGenerator = privateExecutionResult.firstNullifier.equals(Fr.ZERO)
905
- ? await computeProtocolNullifier(await txRequest.toTxRequest().hash())
906
- : privateExecutionResult.firstNullifier;
907
896
  ({ publicInputs, executionSteps } = await generateSimulatedProvingResult(
908
897
  privateExecutionResult,
909
- nonceGenerator,
910
- this.contractDataProvider,
898
+ (addr, sel) => this.contractStore.getDebugFunctionName(addr, sel),
911
899
  ));
912
900
  } else {
913
901
  // Kernel logic, plus proving of all private functions and kernels.
@@ -1008,15 +996,31 @@ export class PXE {
1008
996
  // We disable concurrent simulations since those might execute oracles which read and write to the PXE stores (e.g.
1009
997
  // to the capsules), and we need to prevent concurrent runs from interfering with one another (e.g. attempting to
1010
998
  // delete the same read value, or reading values that another simulation is currently modifying).
1011
- return this.#putInJobQueue(async () => {
999
+ return this.#putInJobQueue(async jobId => {
1012
1000
  try {
1013
1001
  const totalTimer = new Timer();
1014
1002
  const syncTimer = new Timer();
1015
- await this.synchronizer.sync();
1003
+ await this.blockStateSynchronizer.sync();
1016
1004
  const syncTime = syncTimer.ms();
1017
1005
  const functionTimer = new Timer();
1018
1006
  const contractFunctionSimulator = this.#getSimulatorForTx();
1019
- const executionResult = await this.#simulateUtility(contractFunctionSimulator, call, authwits ?? [], scopes);
1007
+
1008
+ const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
1009
+ await this.contractSyncService.ensureContractSynced(
1010
+ call.to,
1011
+ call.selector,
1012
+ privateSyncCall => this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
1013
+ anchorBlockHeader,
1014
+ jobId,
1015
+ );
1016
+
1017
+ const executionResult = await this.#simulateUtility(
1018
+ contractFunctionSimulator,
1019
+ call,
1020
+ authwits ?? [],
1021
+ scopes,
1022
+ jobId,
1023
+ );
1020
1024
  const functionTime = functionTimer.ms();
1021
1025
 
1022
1026
  const totalTime = totalTimer.ms();
@@ -1061,17 +1065,34 @@ export class PXE {
1061
1065
  eventSelector: EventSelector,
1062
1066
  filter: PrivateEventFilter,
1063
1067
  ): Promise<PackedPrivateEvent[]> {
1064
- // We need to manually trigger private state sync to have a guarantee that all the events are available.
1065
- const call = await this.#getFunctionCall('sync_private_state', [], filter.contractAddress);
1066
- await this.simulateUtility(call);
1068
+ let anchorBlockNumber: BlockNumber;
1069
+
1070
+ await this.#putInJobQueue(async jobId => {
1071
+ await this.blockStateSynchronizer.sync();
1072
+
1073
+ const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
1074
+ anchorBlockNumber = anchorBlockHeader.getBlockNumber();
1075
+
1076
+ const contractFunctionSimulator = this.#getSimulatorForTx();
1077
+
1078
+ await this.contractSyncService.ensureContractSynced(
1079
+ filter.contractAddress,
1080
+ null,
1081
+ async privateSyncCall =>
1082
+ await this.#simulateUtility(contractFunctionSimulator, privateSyncCall, [], undefined, jobId),
1083
+ anchorBlockHeader,
1084
+ jobId,
1085
+ );
1086
+ });
1067
1087
 
1068
- const sanitizedFilter = await new PrivateEventFilterValidator(this.syncDataProvider).validate(filter);
1088
+ // anchorBlockNumber is set during the job and fixed to whatever it is after a block sync
1089
+ const sanitizedFilter = new PrivateEventFilterValidator(anchorBlockNumber!).validate(filter);
1069
1090
 
1070
- this.log.error(
1091
+ this.log.debug(
1071
1092
  `Getting private events for ${sanitizedFilter.contractAddress.toString()} from ${sanitizedFilter.fromBlock} to ${sanitizedFilter.toBlock}`,
1072
1093
  );
1073
1094
 
1074
- return this.privateEventDataProvider.getPrivateEvents(eventSelector, sanitizedFilter);
1095
+ return this.privateEventStore.getPrivateEvents(eventSelector, sanitizedFilter);
1075
1096
  }
1076
1097
 
1077
1098
  /**