@aztec/pxe 0.0.1-commit.03f7ef2 → 0.0.1-commit.0658669b3

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 (373) hide show
  1. package/dest/access_scopes.d.ts +9 -0
  2. package/dest/access_scopes.d.ts.map +1 -0
  3. package/dest/access_scopes.js +6 -0
  4. package/dest/bin/check_oracle_version.js +1 -1
  5. package/dest/block_synchronizer/block_synchronizer.d.ts +17 -11
  6. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  7. package/dest/block_synchronizer/block_synchronizer.js +80 -34
  8. package/dest/config/index.d.ts +3 -1
  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 +65 -40
  16. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  17. package/dest/contract_function_simulator/contract_function_simulator.js +209 -89
  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/index.d.ts +2 -2
  22. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  23. package/dest/contract_function_simulator/index.js +1 -1
  24. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +4 -3
  25. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  26. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +7 -4
  27. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +3 -3
  28. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  29. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +2 -2
  30. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +4 -10
  31. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
  32. package/dest/contract_function_simulator/noir-structs/utility_context.js +7 -18
  33. package/dest/contract_function_simulator/oracle/interfaces.d.ts +17 -13
  34. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  35. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -1
  36. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
  37. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +6 -6
  38. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
  39. package/dest/contract_function_simulator/oracle/note_packing_utils.js +8 -8
  40. package/dest/contract_function_simulator/oracle/oracle.d.ts +12 -10
  41. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  42. package/dest/contract_function_simulator/oracle/oracle.js +67 -44
  43. package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -26
  44. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  45. package/dest/contract_function_simulator/oracle/private_execution.js +1 -37
  46. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +46 -46
  47. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  48. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +88 -56
  49. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +82 -48
  50. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  51. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +141 -120
  52. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +4 -4
  53. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
  54. package/dest/contract_function_simulator/proxied_contract_data_source.js +5 -5
  55. package/dest/contract_logging.d.ts +22 -0
  56. package/dest/contract_logging.d.ts.map +1 -0
  57. package/dest/contract_logging.js +23 -0
  58. package/dest/contract_sync/contract_sync_service.d.ts +43 -0
  59. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
  60. package/dest/contract_sync/contract_sync_service.js +97 -0
  61. package/dest/contract_sync/helpers.d.ts +29 -0
  62. package/dest/contract_sync/helpers.d.ts.map +1 -0
  63. package/dest/contract_sync/helpers.js +55 -0
  64. package/dest/debug/pxe_debug_utils.d.ts +26 -12
  65. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  66. package/dest/debug/pxe_debug_utils.js +30 -19
  67. package/dest/entrypoints/client/bundle/index.d.ts +4 -1
  68. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  69. package/dest/entrypoints/client/bundle/index.js +3 -0
  70. package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
  71. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  72. package/dest/entrypoints/client/bundle/utils.js +31 -8
  73. package/dest/entrypoints/client/lazy/index.d.ts +4 -1
  74. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  75. package/dest/entrypoints/client/lazy/index.js +3 -0
  76. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  77. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  78. package/dest/entrypoints/client/lazy/utils.js +32 -9
  79. package/dest/entrypoints/pxe_creation_options.d.ts +5 -3
  80. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  81. package/dest/entrypoints/server/index.d.ts +5 -1
  82. package/dest/entrypoints/server/index.d.ts.map +1 -1
  83. package/dest/entrypoints/server/index.js +4 -0
  84. package/dest/entrypoints/server/utils.d.ts +1 -1
  85. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  86. package/dest/entrypoints/server/utils.js +39 -16
  87. package/dest/error_enriching.d.ts +4 -4
  88. package/dest/error_enriching.d.ts.map +1 -1
  89. package/dest/error_enriching.js +6 -6
  90. package/dest/events/event_service.d.ts +8 -8
  91. package/dest/events/event_service.d.ts.map +1 -1
  92. package/dest/events/event_service.js +21 -24
  93. package/dest/events/private_event_filter_validator.d.ts +6 -6
  94. package/dest/events/private_event_filter_validator.d.ts.map +1 -1
  95. package/dest/events/private_event_filter_validator.js +5 -6
  96. package/dest/job_coordinator/job_coordinator.d.ts +75 -0
  97. package/dest/job_coordinator/job_coordinator.d.ts.map +1 -0
  98. package/dest/job_coordinator/job_coordinator.js +94 -0
  99. package/dest/logs/log_service.d.ts +18 -32
  100. package/dest/logs/log_service.d.ts.map +1 -1
  101. package/dest/logs/log_service.js +76 -197
  102. package/dest/notes/note_service.d.ts +13 -12
  103. package/dest/notes/note_service.d.ts.map +1 -1
  104. package/dest/notes/note_service.js +42 -46
  105. package/dest/notes_filter.d.ts +25 -0
  106. package/dest/notes_filter.d.ts.map +1 -0
  107. package/dest/notes_filter.js +4 -0
  108. package/dest/oracle_version.d.ts +3 -3
  109. package/dest/oracle_version.d.ts.map +1 -1
  110. package/dest/oracle_version.js +4 -3
  111. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
  112. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
  113. package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
  114. package/dest/private_kernel/hints/index.d.ts +3 -3
  115. package/dest/private_kernel/hints/index.d.ts.map +1 -1
  116. package/dest/private_kernel/hints/index.js +2 -2
  117. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +29 -0
  118. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
  119. package/dest/private_kernel/hints/{build_private_kernel_reset_private_inputs.js → private_kernel_reset_private_inputs_builder.js} +141 -74
  120. package/dest/private_kernel/hints/test_utils.d.ts +122 -0
  121. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
  122. package/dest/private_kernel/hints/test_utils.js +203 -0
  123. package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
  124. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  125. package/dest/private_kernel/private_kernel_execution_prover.js +24 -17
  126. package/dest/private_kernel/private_kernel_oracle.d.ts +24 -24
  127. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  128. package/dest/private_kernel/private_kernel_oracle.js +94 -2
  129. package/dest/pxe.d.ts +85 -66
  130. package/dest/pxe.d.ts.map +1 -1
  131. package/dest/pxe.js +203 -185
  132. package/dest/storage/address_store/address_store.d.ts +11 -0
  133. package/dest/storage/address_store/address_store.d.ts.map +1 -0
  134. package/dest/storage/{address_data_provider/address_data_provider.js → address_store/address_store.js} +13 -12
  135. package/dest/storage/address_store/index.d.ts +2 -0
  136. package/dest/storage/address_store/index.d.ts.map +1 -0
  137. package/dest/storage/address_store/index.js +1 -0
  138. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +17 -0
  139. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -0
  140. package/dest/storage/{anchor_block_data_provider/anchor_block_data_provider.js → anchor_block_store/anchor_block_store.js} +9 -2
  141. package/dest/storage/anchor_block_store/index.d.ts +2 -0
  142. package/dest/storage/anchor_block_store/index.d.ts.map +1 -0
  143. package/dest/storage/anchor_block_store/index.js +1 -0
  144. package/dest/storage/capsule_store/capsule_store.d.ts +72 -0
  145. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -0
  146. package/dest/storage/capsule_store/capsule_store.js +253 -0
  147. package/dest/storage/capsule_store/index.d.ts +2 -0
  148. package/dest/storage/capsule_store/index.d.ts.map +1 -0
  149. package/dest/storage/capsule_store/index.js +1 -0
  150. package/dest/storage/contract_store/contract_store.d.ts +93 -0
  151. package/dest/storage/contract_store/contract_store.d.ts.map +1 -0
  152. package/dest/storage/contract_store/contract_store.js +309 -0
  153. package/dest/storage/contract_store/index.d.ts +2 -0
  154. package/dest/storage/contract_store/index.d.ts.map +1 -0
  155. package/dest/storage/contract_store/index.js +1 -0
  156. package/dest/storage/{contract_data_provider → contract_store}/private_functions_tree.d.ts +1 -1
  157. package/dest/storage/contract_store/private_functions_tree.d.ts.map +1 -0
  158. package/dest/storage/index.d.ts +8 -8
  159. package/dest/storage/index.d.ts.map +1 -1
  160. package/dest/storage/index.js +7 -7
  161. package/dest/storage/metadata.d.ts +1 -1
  162. package/dest/storage/metadata.js +1 -1
  163. package/dest/storage/note_store/index.d.ts +3 -0
  164. package/dest/storage/note_store/index.d.ts.map +1 -0
  165. package/dest/storage/note_store/index.js +2 -0
  166. package/dest/storage/note_store/note_store.d.ts +83 -0
  167. package/dest/storage/note_store/note_store.d.ts.map +1 -0
  168. package/dest/storage/note_store/note_store.js +343 -0
  169. package/dest/storage/note_store/stored_note.d.ts +16 -0
  170. package/dest/storage/note_store/stored_note.d.ts.map +1 -0
  171. package/dest/storage/note_store/stored_note.js +43 -0
  172. package/dest/storage/private_event_store/private_event_store.d.ts +91 -0
  173. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -0
  174. package/dest/storage/private_event_store/private_event_store.js +273 -0
  175. package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
  176. package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
  177. package/dest/storage/private_event_store/stored_private_event.js +56 -0
  178. package/dest/storage/tagging_store/index.d.ts +4 -0
  179. package/dest/storage/tagging_store/index.d.ts.map +1 -0
  180. package/dest/storage/tagging_store/index.js +3 -0
  181. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +28 -0
  182. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -0
  183. package/dest/storage/tagging_store/recipient_tagging_store.js +111 -0
  184. package/dest/storage/tagging_store/sender_address_book_store.d.ts +14 -0
  185. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -0
  186. package/dest/storage/tagging_store/sender_address_book_store.js +36 -0
  187. package/dest/storage/{tagging_data_provider/sender_tagging_data_provider.d.ts → tagging_store/sender_tagging_store.d.ts} +19 -9
  188. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -0
  189. package/dest/storage/tagging_store/sender_tagging_store.js +348 -0
  190. package/dest/tagging/constants.d.ts +2 -2
  191. package/dest/tagging/constants.d.ts.map +1 -1
  192. package/dest/tagging/constants.js +10 -3
  193. package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
  194. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
  195. package/dest/tagging/get_all_logs_by_tags.js +60 -0
  196. package/dest/tagging/index.d.ts +15 -3
  197. package/dest/tagging/index.d.ts.map +1 -1
  198. package/dest/tagging/index.js +14 -2
  199. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +4 -3
  200. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -1
  201. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +12 -12
  202. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
  203. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +3 -2
  204. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -1
  205. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +5 -2
  206. package/dest/tagging/{sync → sender_sync}/sync_sender_tagging_indexes.d.ts +4 -4
  207. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -0
  208. package/dest/tagging/{sync → sender_sync}/sync_sender_tagging_indexes.js +8 -23
  209. package/dest/tagging/{sync → sender_sync}/utils/get_status_change_of_pending.d.ts +1 -1
  210. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -0
  211. package/dest/tagging/{sync → sender_sync}/utils/get_status_change_of_pending.js +5 -8
  212. package/dest/tagging/{sync → sender_sync}/utils/load_and_store_new_tagging_indexes.d.ts +7 -4
  213. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -0
  214. package/dest/tagging/{sync → sender_sync}/utils/load_and_store_new_tagging_indexes.js +12 -7
  215. package/package.json +27 -18
  216. package/src/access_scopes.ts +9 -0
  217. package/src/bin/check_oracle_version.ts +1 -0
  218. package/src/block_synchronizer/block_synchronizer.ts +99 -46
  219. package/src/config/index.ts +14 -0
  220. package/src/config/package_info.ts +1 -1
  221. package/src/contract_function_simulator/benchmarked_node.ts +103 -0
  222. package/src/contract_function_simulator/contract_function_simulator.ts +363 -153
  223. package/src/contract_function_simulator/execution_note_cache.ts +44 -25
  224. package/src/contract_function_simulator/index.ts +1 -1
  225. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +6 -2
  226. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +2 -2
  227. package/src/contract_function_simulator/noir-structs/utility_context.ts +6 -25
  228. package/src/contract_function_simulator/oracle/interfaces.ts +22 -12
  229. package/src/contract_function_simulator/oracle/note_packing_utils.ts +10 -10
  230. package/src/contract_function_simulator/oracle/oracle.ts +79 -47
  231. package/src/contract_function_simulator/oracle/private_execution.ts +1 -69
  232. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +121 -135
  233. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +217 -132
  234. package/src/contract_function_simulator/proxied_contract_data_source.ts +7 -7
  235. package/src/contract_logging.ts +39 -0
  236. package/src/contract_sync/contract_sync_service.ts +152 -0
  237. package/src/contract_sync/helpers.ts +98 -0
  238. package/src/debug/pxe_debug_utils.ts +65 -20
  239. package/src/entrypoints/client/bundle/index.ts +3 -0
  240. package/src/entrypoints/client/bundle/utils.ts +23 -16
  241. package/src/entrypoints/client/lazy/index.ts +3 -0
  242. package/src/entrypoints/client/lazy/utils.ts +24 -17
  243. package/src/entrypoints/pxe_creation_options.ts +4 -2
  244. package/src/entrypoints/server/index.ts +4 -0
  245. package/src/entrypoints/server/utils.ts +33 -41
  246. package/src/error_enriching.ts +7 -15
  247. package/src/events/event_service.ts +22 -28
  248. package/src/events/private_event_filter_validator.ts +4 -6
  249. package/src/job_coordinator/job_coordinator.ts +150 -0
  250. package/src/logs/log_service.ts +118 -274
  251. package/src/notes/note_service.ts +45 -49
  252. package/src/notes_filter.ts +26 -0
  253. package/src/oracle_version.ts +4 -3
  254. package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
  255. package/src/private_kernel/hints/index.ts +2 -2
  256. package/src/private_kernel/hints/{build_private_kernel_reset_private_inputs.ts → private_kernel_reset_private_inputs_builder.ts} +196 -138
  257. package/src/private_kernel/hints/test_utils.ts +325 -0
  258. package/src/private_kernel/private_kernel_execution_prover.ts +27 -19
  259. package/src/private_kernel/private_kernel_oracle.ts +116 -36
  260. package/src/pxe.ts +331 -257
  261. package/src/storage/{address_data_provider/address_data_provider.ts → address_store/address_store.ts} +16 -16
  262. package/src/storage/address_store/index.ts +1 -0
  263. package/src/storage/{anchor_block_data_provider/anchor_block_data_provider.ts → anchor_block_store/anchor_block_store.ts} +9 -1
  264. package/src/storage/anchor_block_store/index.ts +1 -0
  265. package/src/storage/capsule_store/capsule_store.ts +315 -0
  266. package/src/storage/capsule_store/index.ts +1 -0
  267. package/src/storage/contract_store/contract_store.ts +429 -0
  268. package/src/storage/contract_store/index.ts +1 -0
  269. package/src/storage/index.ts +7 -7
  270. package/src/storage/metadata.ts +1 -1
  271. package/src/storage/note_store/index.ts +2 -0
  272. package/src/storage/note_store/note_store.ts +418 -0
  273. package/src/storage/note_store/stored_note.ts +48 -0
  274. package/src/storage/private_event_store/private_event_store.ts +384 -0
  275. package/src/storage/private_event_store/stored_private_event.ts +73 -0
  276. package/src/storage/tagging_store/index.ts +3 -0
  277. package/src/storage/tagging_store/recipient_tagging_store.ts +139 -0
  278. package/src/storage/tagging_store/sender_address_book_store.ts +48 -0
  279. package/src/storage/tagging_store/sender_tagging_store.ts +429 -0
  280. package/src/tagging/constants.ts +10 -3
  281. package/src/tagging/get_all_logs_by_tags.ts +92 -0
  282. package/src/tagging/index.ts +17 -2
  283. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +27 -13
  284. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
  285. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +7 -1
  286. package/src/tagging/{sync → sender_sync}/sync_sender_tagging_indexes.ts +12 -25
  287. package/src/tagging/{sync → sender_sync}/utils/get_status_change_of_pending.ts +5 -13
  288. package/src/tagging/{sync → sender_sync}/utils/load_and_store_new_tagging_indexes.ts +19 -7
  289. package/dest/contract_function_simulator/proxied_node.d.ts +0 -9
  290. package/dest/contract_function_simulator/proxied_node.d.ts.map +0 -1
  291. package/dest/contract_function_simulator/proxied_node.js +0 -27
  292. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +0 -28
  293. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
  294. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
  295. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.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/public_storage/public_storage_service.d.ts +0 -24
  300. package/dest/public_storage/public_storage_service.d.ts.map +0 -1
  301. package/dest/public_storage/public_storage_service.js +0 -26
  302. package/dest/storage/address_data_provider/address_data_provider.d.ts +0 -11
  303. package/dest/storage/address_data_provider/address_data_provider.d.ts.map +0 -1
  304. package/dest/storage/address_data_provider/index.d.ts +0 -2
  305. package/dest/storage/address_data_provider/index.d.ts.map +0 -1
  306. package/dest/storage/address_data_provider/index.js +0 -1
  307. package/dest/storage/anchor_block_data_provider/anchor_block_data_provider.d.ts +0 -9
  308. package/dest/storage/anchor_block_data_provider/anchor_block_data_provider.d.ts.map +0 -1
  309. package/dest/storage/anchor_block_data_provider/index.d.ts +0 -2
  310. package/dest/storage/anchor_block_data_provider/index.d.ts.map +0 -1
  311. package/dest/storage/anchor_block_data_provider/index.js +0 -1
  312. package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts +0 -57
  313. package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts.map +0 -1
  314. package/dest/storage/capsule_data_provider/capsule_data_provider.js +0 -146
  315. package/dest/storage/capsule_data_provider/index.d.ts +0 -2
  316. package/dest/storage/capsule_data_provider/index.d.ts.map +0 -1
  317. package/dest/storage/capsule_data_provider/index.js +0 -1
  318. package/dest/storage/contract_data_provider/contract_data_provider.d.ts +0 -66
  319. package/dest/storage/contract_data_provider/contract_data_provider.d.ts.map +0 -1
  320. package/dest/storage/contract_data_provider/contract_data_provider.js +0 -224
  321. package/dest/storage/contract_data_provider/index.d.ts +0 -2
  322. package/dest/storage/contract_data_provider/index.d.ts.map +0 -1
  323. package/dest/storage/contract_data_provider/index.js +0 -1
  324. package/dest/storage/contract_data_provider/private_functions_tree.d.ts.map +0 -1
  325. package/dest/storage/note_data_provider/index.d.ts +0 -3
  326. package/dest/storage/note_data_provider/index.d.ts.map +0 -1
  327. package/dest/storage/note_data_provider/index.js +0 -2
  328. package/dest/storage/note_data_provider/note_data_provider.d.ts +0 -84
  329. package/dest/storage/note_data_provider/note_data_provider.d.ts.map +0 -1
  330. package/dest/storage/note_data_provider/note_data_provider.js +0 -322
  331. package/dest/storage/private_event_data_provider/private_event_data_provider.d.ts +0 -51
  332. package/dest/storage/private_event_data_provider/private_event_data_provider.d.ts.map +0 -1
  333. package/dest/storage/private_event_data_provider/private_event_data_provider.js +0 -115
  334. package/dest/storage/tagging_data_provider/index.d.ts +0 -3
  335. package/dest/storage/tagging_data_provider/index.d.ts.map +0 -1
  336. package/dest/storage/tagging_data_provider/index.js +0 -2
  337. package/dest/storage/tagging_data_provider/recipient_tagging_data_provider.d.ts +0 -31
  338. package/dest/storage/tagging_data_provider/recipient_tagging_data_provider.d.ts.map +0 -1
  339. package/dest/storage/tagging_data_provider/recipient_tagging_data_provider.js +0 -65
  340. package/dest/storage/tagging_data_provider/sender_tagging_data_provider.d.ts.map +0 -1
  341. package/dest/storage/tagging_data_provider/sender_tagging_data_provider.js +0 -196
  342. package/dest/tagging/recipient_sync/new_recipient_tagging_data_provider.d.ts +0 -21
  343. package/dest/tagging/recipient_sync/new_recipient_tagging_data_provider.d.ts.map +0 -1
  344. package/dest/tagging/recipient_sync/new_recipient_tagging_data_provider.js +0 -42
  345. package/dest/tagging/sync/sync_sender_tagging_indexes.d.ts.map +0 -1
  346. package/dest/tagging/sync/utils/get_status_change_of_pending.d.ts.map +0 -1
  347. package/dest/tagging/sync/utils/load_and_store_new_tagging_indexes.d.ts.map +0 -1
  348. package/dest/tagging/utils.d.ts +0 -18
  349. package/dest/tagging/utils.d.ts.map +0 -1
  350. package/dest/tagging/utils.js +0 -25
  351. package/dest/tree_membership/tree_membership_service.d.ts +0 -52
  352. package/dest/tree_membership/tree_membership_service.d.ts.map +0 -1
  353. package/dest/tree_membership/tree_membership_service.js +0 -84
  354. package/src/contract_function_simulator/proxied_node.ts +0 -33
  355. package/src/private_kernel/private_kernel_oracle_impl.ts +0 -133
  356. package/src/public_storage/public_storage_service.ts +0 -33
  357. package/src/storage/address_data_provider/index.ts +0 -1
  358. package/src/storage/anchor_block_data_provider/index.ts +0 -1
  359. package/src/storage/capsule_data_provider/capsule_data_provider.ts +0 -179
  360. package/src/storage/capsule_data_provider/index.ts +0 -1
  361. package/src/storage/contract_data_provider/contract_data_provider.ts +0 -319
  362. package/src/storage/contract_data_provider/index.ts +0 -1
  363. package/src/storage/note_data_provider/index.ts +0 -2
  364. package/src/storage/note_data_provider/note_data_provider.ts +0 -412
  365. package/src/storage/private_event_data_provider/private_event_data_provider.ts +0 -162
  366. package/src/storage/tagging_data_provider/index.ts +0 -2
  367. package/src/storage/tagging_data_provider/recipient_tagging_data_provider.ts +0 -86
  368. package/src/storage/tagging_data_provider/sender_tagging_data_provider.ts +0 -244
  369. package/src/tagging/recipient_sync/new_recipient_tagging_data_provider.ts +0 -53
  370. package/src/tagging/utils.ts +0 -32
  371. package/src/tree_membership/tree_membership_service.ts +0 -112
  372. /package/dest/storage/{contract_data_provider → contract_store}/private_functions_tree.js +0 -0
  373. /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';
@@ -19,14 +20,12 @@ import type { AuthWitness } from '@aztec/stdlib/auth-witness';
19
20
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
20
21
  import {
21
22
  CompleteAddress,
22
- type ContractClassWithId,
23
23
  type ContractInstanceWithAddress,
24
24
  type PartialAddress,
25
25
  computeContractAddressFromInstance,
26
26
  getContractClassFromArtifact,
27
27
  } from '@aztec/stdlib/contract';
28
28
  import { SimulationError } from '@aztec/stdlib/errors';
29
- import { computeProtocolNullifier, siloNullifier } from '@aztec/stdlib/hash';
30
29
  import type { AztecNode, PrivateKernelProver } from '@aztec/stdlib/interfaces/client';
31
30
  import type {
32
31
  PrivateExecutionStep,
@@ -34,6 +33,7 @@ import type {
34
33
  PrivateKernelTailCircuitPublicInputs,
35
34
  } from '@aztec/stdlib/kernel';
36
35
  import {
36
+ BlockHeader,
37
37
  type ContractOverrides,
38
38
  type InTx,
39
39
  PrivateExecutionResult,
@@ -47,41 +47,97 @@ import {
47
47
  TxProfileResult,
48
48
  TxProvingResult,
49
49
  TxSimulationResult,
50
- UtilitySimulationResult,
50
+ UtilityExecutionResult,
51
51
  } from '@aztec/stdlib/tx';
52
52
 
53
53
  import { inspect } from 'util';
54
54
 
55
+ import type { AccessScopes } from './access_scopes.js';
55
56
  import { BlockSynchronizer } from './block_synchronizer/index.js';
56
57
  import type { PXEConfig } from './config/index.js';
58
+ import { BenchmarkedNodeFactory } from './contract_function_simulator/benchmarked_node.js';
57
59
  import {
58
60
  ContractFunctionSimulator,
59
61
  generateSimulatedProvingResult,
60
62
  } from './contract_function_simulator/contract_function_simulator.js';
61
- import { readCurrentClassId } from './contract_function_simulator/oracle/private_execution.js';
62
- import { ProxiedContractDataProviderFactory } from './contract_function_simulator/proxied_contract_data_source.js';
63
+ import { ProxiedContractStoreFactory } from './contract_function_simulator/proxied_contract_data_source.js';
64
+ import { displayDebugLogs } from './contract_logging.js';
65
+ import { ContractSyncService } from './contract_sync/contract_sync_service.js';
66
+ import { readCurrentClassId } from './contract_sync/helpers.js';
63
67
  import { PXEDebugUtils } from './debug/pxe_debug_utils.js';
64
68
  import { enrichPublicSimulationError, enrichSimulationError } from './error_enriching.js';
65
69
  import { PrivateEventFilterValidator } from './events/private_event_filter_validator.js';
70
+ import { JobCoordinator } from './job_coordinator/job_coordinator.js';
66
71
  import {
67
72
  PrivateKernelExecutionProver,
68
73
  type PrivateKernelExecutionProverConfig,
69
74
  } from './private_kernel/private_kernel_execution_prover.js';
70
- import { PrivateKernelOracleImpl } from './private_kernel/private_kernel_oracle_impl.js';
71
- import { AddressDataProvider } from './storage/address_data_provider/address_data_provider.js';
72
- import { AnchorBlockDataProvider } from './storage/anchor_block_data_provider/anchor_block_data_provider.js';
73
- import { CapsuleDataProvider } from './storage/capsule_data_provider/capsule_data_provider.js';
74
- import { ContractDataProvider } from './storage/contract_data_provider/contract_data_provider.js';
75
- import { NoteDataProvider } from './storage/note_data_provider/note_data_provider.js';
76
- import { PrivateEventDataProvider } from './storage/private_event_data_provider/private_event_data_provider.js';
77
- import { RecipientTaggingDataProvider } from './storage/tagging_data_provider/recipient_tagging_data_provider.js';
78
- import { SenderTaggingDataProvider } from './storage/tagging_data_provider/sender_tagging_data_provider.js';
75
+ import { PrivateKernelOracle } from './private_kernel/private_kernel_oracle.js';
76
+ import { AddressStore } from './storage/address_store/address_store.js';
77
+ import { AnchorBlockStore } from './storage/anchor_block_store/anchor_block_store.js';
78
+ import { CapsuleStore } from './storage/capsule_store/capsule_store.js';
79
+ import { ContractStore } from './storage/contract_store/contract_store.js';
80
+ import { NoteStore } from './storage/note_store/note_store.js';
81
+ import { PrivateEventStore } from './storage/private_event_store/private_event_store.js';
82
+ import { RecipientTaggingStore } from './storage/tagging_store/recipient_tagging_store.js';
83
+ import { SenderAddressBookStore } from './storage/tagging_store/sender_address_book_store.js';
84
+ import { SenderTaggingStore } from './storage/tagging_store/sender_tagging_store.js';
79
85
 
80
86
  export type PackedPrivateEvent = InTx & {
81
87
  packedEvent: Fr[];
82
88
  eventSelector: EventSelector;
83
89
  };
84
90
 
91
+ /** Options for PXE.profileTx. */
92
+ export type ProfileTxOpts = {
93
+ /** The profiling mode to use. */
94
+ profileMode: 'full' | 'execution-steps' | 'gates';
95
+ /** If true, proof generation is skipped during profiling. Defaults to true. */
96
+ skipProofGeneration?: boolean;
97
+ /** Addresses whose private state and keys are accessible during private execution. */
98
+ scopes: AccessScopes;
99
+ };
100
+
101
+ /** Options for PXE.simulateTx. */
102
+ export type SimulateTxOpts = {
103
+ /** Whether to simulate the public part of the transaction. */
104
+ simulatePublic: boolean;
105
+ /** If false, this function throws if the transaction is unable to be included in a block at the current state. */
106
+ skipTxValidation?: boolean;
107
+ /** If false, fees are enforced. */
108
+ skipFeeEnforcement?: boolean;
109
+ /** State overrides for the simulation, such as contract instances and artifacts. */
110
+ overrides?: SimulationOverrides;
111
+ /** Addresses whose private state and keys are accessible during private execution */
112
+ scopes: AccessScopes;
113
+ };
114
+
115
+ /** Options for PXE.executeUtility. */
116
+ export type ExecuteUtilityOpts = {
117
+ /** The authentication witnesses required for the function call. */
118
+ authwits?: AuthWitness[];
119
+ /** The accounts whose notes we can access in this call */
120
+ scopes: AccessScopes;
121
+ };
122
+
123
+ /** Args for PXE.create. */
124
+ export type PXECreateArgs = {
125
+ /** The Aztec node to connect to. */
126
+ node: AztecNode;
127
+ /** The key-value store for persisting PXE state. */
128
+ store: AztecAsyncKVStore;
129
+ /** The prover for generating private kernel proofs. */
130
+ proofCreator: PrivateKernelProver;
131
+ /** The circuit simulator for executing ACIR circuits. */
132
+ simulator: CircuitSimulator;
133
+ /** Provider for protocol contract artifacts and instances. */
134
+ protocolContractsProvider: ProtocolContractsProvider;
135
+ /** PXE configuration options. */
136
+ config: PXEConfig;
137
+ /** Optional logger instance or string suffix for the logger name. */
138
+ loggerOrSuffix?: string | Logger;
139
+ };
140
+
85
141
  /**
86
142
  * Private eXecution Environment (PXE) is a library used by wallets to simulate private phase of transactions and to
87
143
  * manage private state of users.
@@ -91,20 +147,23 @@ export class PXE {
91
147
  private node: AztecNode,
92
148
  private blockStateSynchronizer: BlockSynchronizer,
93
149
  private keyStore: KeyStore,
94
- private contractDataProvider: ContractDataProvider,
95
- private noteDataProvider: NoteDataProvider,
96
- private capsuleDataProvider: CapsuleDataProvider,
97
- private anchorBlockDataProvider: AnchorBlockDataProvider,
98
- private senderTaggingDataProvider: SenderTaggingDataProvider,
99
- private recipientTaggingDataProvider: RecipientTaggingDataProvider,
100
- private addressDataProvider: AddressDataProvider,
101
- private privateEventDataProvider: PrivateEventDataProvider,
150
+ private contractStore: ContractStore,
151
+ private noteStore: NoteStore,
152
+ private capsuleStore: CapsuleStore,
153
+ private anchorBlockStore: AnchorBlockStore,
154
+ private senderTaggingStore: SenderTaggingStore,
155
+ private senderAddressBookStore: SenderAddressBookStore,
156
+ private recipientTaggingStore: RecipientTaggingStore,
157
+ private addressStore: AddressStore,
158
+ private privateEventStore: PrivateEventStore,
159
+ private contractSyncService: ContractSyncService,
102
160
  private simulator: CircuitSimulator,
103
161
  private proverEnabled: boolean,
104
162
  private proofCreator: PrivateKernelProver,
105
163
  private protocolContractsProvider: ProtocolContractsProvider,
106
164
  private log: Logger,
107
165
  private jobQueue: SerialQueue,
166
+ private jobCoordinator: JobCoordinator,
108
167
  public debug: PXEDebugUtils,
109
168
  ) {}
110
169
 
@@ -115,42 +174,67 @@ export class PXE {
115
174
  *
116
175
  * @returns A promise that resolves PXE is ready to be used.
117
176
  */
118
- public static async create(
119
- node: AztecNode,
120
- store: AztecAsyncKVStore,
121
- proofCreator: PrivateKernelProver,
122
- simulator: CircuitSimulator,
123
- protocolContractsProvider: ProtocolContractsProvider,
124
- config: PXEConfig,
125
- loggerOrSuffix?: string | Logger,
126
- ) {
177
+ public static async create({
178
+ node,
179
+ store,
180
+ proofCreator,
181
+ simulator,
182
+ protocolContractsProvider,
183
+ config,
184
+ loggerOrSuffix,
185
+ }: PXECreateArgs) {
186
+ // Extract bindings from the logger, or use empty bindings if a string suffix is provided.
187
+ const bindings: LoggerBindings | undefined =
188
+ loggerOrSuffix && typeof loggerOrSuffix !== 'string' ? loggerOrSuffix.getBindings() : undefined;
189
+
127
190
  const log =
128
191
  !loggerOrSuffix || typeof loggerOrSuffix === 'string'
129
192
  ? createLogger(loggerOrSuffix ? `pxe:service:${loggerOrSuffix}` : `pxe:service`)
130
193
  : loggerOrSuffix;
131
194
 
132
- const proverEnabled = !!config.proverEnabled;
133
- const addressDataProvider = new AddressDataProvider(store);
134
- const privateEventDataProvider = new PrivateEventDataProvider(store);
135
- const contractDataProvider = new ContractDataProvider(store);
136
- const noteDataProvider = await NoteDataProvider.create(store);
137
- const anchorBlockDataProvider = new AnchorBlockDataProvider(store);
138
- const senderTaggingDataProvider = new SenderTaggingDataProvider(store);
139
- const recipientTaggingDataProvider = new RecipientTaggingDataProvider(store);
140
- const capsuleDataProvider = new CapsuleDataProvider(store);
195
+ const info = await node.getNodeInfo();
196
+
197
+ const proverEnabled = config.proverEnabled !== undefined ? config.proverEnabled : info.realProofs;
198
+ const addressStore = new AddressStore(store);
199
+ const privateEventStore = new PrivateEventStore(store);
200
+ const contractStore = new ContractStore(store);
201
+ const noteStore = new NoteStore(store);
202
+ const anchorBlockStore = new AnchorBlockStore(store);
203
+ const senderTaggingStore = new SenderTaggingStore(store);
204
+ const senderAddressBookStore = new SenderAddressBookStore(store);
205
+ const recipientTaggingStore = new RecipientTaggingStore(store);
206
+ const capsuleStore = new CapsuleStore(store);
141
207
  const keyStore = new KeyStore(store);
142
208
  const tipsStore = new L2TipsKVStore(store, 'pxe');
209
+ const contractSyncService = new ContractSyncService(
210
+ node,
211
+ contractStore,
212
+ noteStore,
213
+ createLogger('pxe:contract_sync', bindings),
214
+ );
143
215
  const synchronizer = new BlockSynchronizer(
144
216
  node,
145
- anchorBlockDataProvider,
146
- noteDataProvider,
147
- recipientTaggingDataProvider,
217
+ store,
218
+ anchorBlockStore,
219
+ noteStore,
220
+ privateEventStore,
148
221
  tipsStore,
222
+ contractSyncService,
149
223
  config,
150
- loggerOrSuffix,
224
+ bindings,
151
225
  );
152
226
 
153
- const debugUtils = new PXEDebugUtils(contractDataProvider, noteDataProvider);
227
+ const jobCoordinator = new JobCoordinator(store, bindings);
228
+ jobCoordinator.registerStores([
229
+ capsuleStore,
230
+ senderTaggingStore,
231
+ recipientTaggingStore,
232
+ privateEventStore,
233
+ noteStore,
234
+ contractSyncService,
235
+ ]);
236
+
237
+ const debugUtils = new PXEDebugUtils(contractSyncService, noteStore, synchronizer, anchorBlockStore);
154
238
 
155
239
  const jobQueue = new SerialQueue();
156
240
 
@@ -158,29 +242,35 @@ export class PXE {
158
242
  node,
159
243
  synchronizer,
160
244
  keyStore,
161
- contractDataProvider,
162
- noteDataProvider,
163
- capsuleDataProvider,
164
- anchorBlockDataProvider,
165
- senderTaggingDataProvider,
166
- recipientTaggingDataProvider,
167
- addressDataProvider,
168
- privateEventDataProvider,
245
+ contractStore,
246
+ noteStore,
247
+ capsuleStore,
248
+ anchorBlockStore,
249
+ senderTaggingStore,
250
+ senderAddressBookStore,
251
+ recipientTaggingStore,
252
+ addressStore,
253
+ privateEventStore,
254
+ contractSyncService,
169
255
  simulator,
170
256
  proverEnabled,
171
257
  proofCreator,
172
258
  protocolContractsProvider,
173
259
  log,
174
260
  jobQueue,
261
+ jobCoordinator,
175
262
  debugUtils,
176
263
  );
177
264
 
178
- debugUtils.setPXE(pxe);
265
+ debugUtils.setPXEHelpers(
266
+ pxe.#putInJobQueue.bind(pxe),
267
+ pxe.#getSimulatorForTx.bind(pxe),
268
+ pxe.#executeUtility.bind(pxe),
269
+ );
179
270
 
180
271
  pxe.jobQueue.start();
181
272
 
182
273
  await pxe.#registerProtocolContracts();
183
- const info = await node.getNodeInfo();
184
274
  log.info(`Started PXE connected to chain ${info.l1ChainId} version ${info.rollupVersion}`);
185
275
  return pxe;
186
276
  }
@@ -188,24 +278,22 @@ export class PXE {
188
278
  // Internal methods
189
279
 
190
280
  #getSimulatorForTx(overrides?: { contracts?: ContractOverrides }) {
191
- const proxyContractDataProvider = ProxiedContractDataProviderFactory.create(
192
- this.contractDataProvider,
193
- overrides?.contracts,
194
- );
195
-
196
- return new ContractFunctionSimulator(
197
- proxyContractDataProvider,
198
- this.noteDataProvider,
199
- this.keyStore,
200
- this.addressDataProvider,
201
- this.node,
202
- this.anchorBlockDataProvider,
203
- this.senderTaggingDataProvider,
204
- this.recipientTaggingDataProvider,
205
- this.capsuleDataProvider,
206
- this.privateEventDataProvider,
207
- this.simulator,
208
- );
281
+ const proxyContractStore = ProxiedContractStoreFactory.create(this.contractStore, overrides?.contracts);
282
+
283
+ return new ContractFunctionSimulator({
284
+ contractStore: proxyContractStore,
285
+ noteStore: this.noteStore,
286
+ keyStore: this.keyStore,
287
+ addressStore: this.addressStore,
288
+ aztecNode: BenchmarkedNodeFactory.create(this.node),
289
+ senderTaggingStore: this.senderTaggingStore,
290
+ recipientTaggingStore: this.recipientTaggingStore,
291
+ senderAddressBookStore: this.senderAddressBookStore,
292
+ capsuleStore: this.capsuleStore,
293
+ privateEventStore: this.privateEventStore,
294
+ simulator: this.simulator,
295
+ contractSyncService: this.contractSyncService,
296
+ });
209
297
  }
210
298
 
211
299
  #contextualizeError(err: Error, ...context: string[]): Error {
@@ -228,7 +316,7 @@ export class PXE {
228
316
  *
229
317
  * Useful for tasks that cannot run concurrently, such as contract function simulation.
230
318
  */
231
- #putInJobQueue<T>(fn: () => Promise<T>): Promise<T> {
319
+ #putInJobQueue<T>(fn: (jobId: string) => Promise<T>): Promise<T> {
232
320
  // TODO(#12636): relax the conditions under which we forbid concurrency.
233
321
  if (this.jobQueue.length() != 0) {
234
322
  this.log.warn(
@@ -236,88 +324,98 @@ export class PXE {
236
324
  );
237
325
  }
238
326
 
239
- return this.jobQueue.put(fn);
327
+ return this.jobQueue.put(async () => {
328
+ const jobId = this.jobCoordinator.beginJob();
329
+ this.log.verbose(`Beginning job ${jobId}`);
330
+
331
+ try {
332
+ const result = await fn(jobId);
333
+ this.log.verbose(`Committing job ${jobId}`);
334
+
335
+ await this.jobCoordinator.commitJob(jobId);
336
+ return result;
337
+ } catch (err) {
338
+ this.log.verbose(`Aborting job ${jobId}`);
339
+ await this.jobCoordinator.abortJob(jobId);
340
+ throw err;
341
+ }
342
+ });
240
343
  }
241
344
 
242
345
  async #registerProtocolContracts() {
243
346
  const registered: Record<string, string> = {};
244
347
  for (const name of protocolContractNames) {
245
- const { address, contractClass, instance, artifact } =
246
- await this.protocolContractsProvider.getProtocolContractArtifact(name);
247
- await this.contractDataProvider.addContractArtifact(contractClass.id, artifact);
248
- await this.contractDataProvider.addContractInstance(instance);
348
+ const { address, instance, artifact } = await this.protocolContractsProvider.getProtocolContractArtifact(name);
349
+ await this.contractStore.addContractArtifact(artifact);
350
+ await this.contractStore.addContractInstance(instance);
249
351
  registered[name] = address.toString();
250
352
  }
251
353
  this.log.verbose(`Registered protocol contracts in pxe`, registered);
252
354
  }
253
355
 
254
- async #isContractClassPubliclyRegistered(id: Fr): Promise<boolean> {
255
- return !!(await this.node.getContractClass(id));
256
- }
257
-
258
- async #isContractPublished(address: AztecAddress): Promise<boolean> {
259
- return !!(await this.node.getContract(address));
260
- }
261
-
262
- async #isContractInitialized(address: AztecAddress): Promise<boolean> {
263
- const initNullifier = await siloNullifier(address, address.toField());
264
- return !!(await this.node.getNullifierMembershipWitness('latest', initNullifier));
265
- }
266
-
267
356
  // Executes the entrypoint private function, as well as all nested private
268
357
  // functions that might arise.
269
358
  async #executePrivate(
270
359
  contractFunctionSimulator: ContractFunctionSimulator,
271
360
  txRequest: TxExecutionRequest,
272
- scopes?: AztecAddress[],
361
+ scopes: AccessScopes,
362
+ jobId: string,
273
363
  ): Promise<PrivateExecutionResult> {
274
364
  const { origin: contractAddress, functionSelector } = txRequest;
275
365
 
276
366
  try {
277
- const anchorBlockHeader = await this.anchorBlockDataProvider.getBlockHeader();
367
+ const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
278
368
 
279
- const result = await contractFunctionSimulator.run(
280
- txRequest,
369
+ await this.contractSyncService.ensureContractSynced(
281
370
  contractAddress,
282
371
  functionSelector,
283
- undefined,
372
+ (privateSyncCall, execScopes) =>
373
+ this.#executeUtility(contractFunctionSimulator, privateSyncCall, [], execScopes, jobId),
284
374
  anchorBlockHeader,
285
- // The sender for tags is set by contracts, typically by an account
286
- // contract entrypoint
287
- undefined, // senderForTags
375
+ jobId,
288
376
  scopes,
289
377
  );
378
+
379
+ const result = await contractFunctionSimulator.run(txRequest, {
380
+ contractAddress,
381
+ selector: functionSelector,
382
+ anchorBlockHeader,
383
+ scopes,
384
+ jobId,
385
+ });
290
386
  this.log.debug(`Private simulation completed for ${contractAddress.toString()}:${functionSelector}`);
291
387
  return result;
292
388
  } catch (err) {
293
389
  if (err instanceof SimulationError) {
294
- await enrichSimulationError(err, this.contractDataProvider, this.log);
390
+ await enrichSimulationError(err, this.contractStore, this.log);
295
391
  }
296
392
  throw err;
297
393
  }
298
394
  }
299
395
 
300
396
  /**
301
- * Simulate a utility function call on the given contract.
397
+ * Execute a utility function call on the given contract.
302
398
  * @param contractFunctionSimulator - The simulator to use for the function call.
303
399
  * @param call - The function call to execute.
304
400
  * @param authWitnesses - Authentication witnesses required for the function call.
305
401
  * @param scopes - Optional array of account addresses whose notes can be accessed in this call. Defaults to all
306
402
  * accounts if not specified.
307
- * @returns The simulation result containing the outputs of the utility function.
403
+ * @param jobId - The job ID for staged writes.
404
+ * @returns The execution result containing the outputs of the utility function.
308
405
  */
309
- async #simulateUtility(
406
+ async #executeUtility(
310
407
  contractFunctionSimulator: ContractFunctionSimulator,
311
408
  call: FunctionCall,
312
- authWitnesses?: AuthWitness[],
313
- scopes?: AztecAddress[],
409
+ authWitnesses: AuthWitness[] | undefined,
410
+ scopes: AccessScopes,
411
+ jobId: string,
314
412
  ) {
315
413
  try {
316
- const anchorBlockHeader = await this.anchorBlockDataProvider.getBlockHeader();
317
- return contractFunctionSimulator.runUtility(call, authWitnesses ?? [], anchorBlockHeader, scopes);
414
+ const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
415
+ return contractFunctionSimulator.runUtility(call, authWitnesses ?? [], anchorBlockHeader, scopes, jobId);
318
416
  } catch (err) {
319
417
  if (err instanceof SimulationError) {
320
- await enrichSimulationError(err, this.contractDataProvider, this.log);
418
+ await enrichSimulationError(err, this.contractStore, this.log);
321
419
  }
322
420
  throw err;
323
421
  }
@@ -341,7 +439,7 @@ export class PXE {
341
439
  } catch (err) {
342
440
  if (err instanceof SimulationError) {
343
441
  try {
344
- await enrichPublicSimulationError(err, this.contractDataProvider, this.log);
442
+ await enrichPublicSimulationError(err, this.contractStore, this.log);
345
443
  } catch (enrichErr) {
346
444
  this.log.error(`Failed to enrich public simulation error: ${enrichErr}`);
347
445
  }
@@ -367,85 +465,45 @@ export class PXE {
367
465
  privateExecutionResult: PrivateExecutionResult,
368
466
  config: PrivateKernelExecutionProverConfig,
369
467
  ): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
370
- const simulationAnchorBlock = privateExecutionResult.getSimulationAnchorBlockNumber();
371
- const kernelOracle = new PrivateKernelOracleImpl(
372
- this.contractDataProvider,
373
- this.keyStore,
374
- this.node,
375
- simulationAnchorBlock,
468
+ const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
469
+ const anchorBlockHash = await anchorBlockHeader.hash();
470
+ const kernelOracle = new PrivateKernelOracle(this.contractStore, this.keyStore, this.node, anchorBlockHash);
471
+ const kernelTraceProver = new PrivateKernelExecutionProver(
472
+ kernelOracle,
473
+ proofCreator,
474
+ !this.proverEnabled,
475
+ this.log.getBindings(),
376
476
  );
377
- const kernelTraceProver = new PrivateKernelExecutionProver(kernelOracle, proofCreator, !this.proverEnabled);
378
477
  this.log.debug(`Executing kernel trace prover (${JSON.stringify(config)})...`);
379
478
  return await kernelTraceProver.proveWithKernels(txExecutionRequest.toTxRequest(), privateExecutionResult, config);
380
479
  }
381
480
 
382
481
  // Public API
383
482
 
384
- public getContractInstance(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined> {
385
- return this.contractDataProvider.getContractInstance(address);
483
+ /**
484
+ * Returns the block header up to which the PXE has synced.
485
+ * @returns The synced block header
486
+ */
487
+ public getSyncedBlockHeader(): Promise<BlockHeader> {
488
+ return this.anchorBlockStore.getBlockHeader();
386
489
  }
387
490
 
388
491
  /**
389
- * Returns the contract class metadata given a contract class id.
390
- * The metadata consists of its contract class, whether it has been publicly registered, and its artifact.
391
- * @remark - it queries the node to check whether the contract class with the given id has been publicly registered.
392
- * @param id - Identifier of the class.
393
- * @param includeArtifact - Identifier of the class.
394
- * @returns - It returns the contract class metadata, with the artifact field being optional, and will only be returned if true is passed in
395
- * for `includeArtifact`
396
- * TODO(@spalladino): The PXE actually holds artifacts and not classes, what should we return? Also,
397
- * should the pxe query the node for contract public info, and merge it with its own definitions?
398
- * TODO(@spalladino): This method is strictly needed to decide whether to publicly register a class or not
399
- * during a public deployment. We probably want a nicer and more general API for this, but it'll have to
400
- * do for the time being.
492
+ * Returns the contract instance for a given address, if it's registered in the PXE.
493
+ * @param address - The contract address.
494
+ * @returns The contract instance if found, undefined otherwise.
401
495
  */
402
- public async getContractClassMetadata(
403
- id: Fr,
404
- includeArtifact: boolean = false,
405
- ): Promise<{
406
- contractClass: ContractClassWithId | undefined;
407
- isContractClassPubliclyRegistered: boolean;
408
- artifact: ContractArtifact | undefined;
409
- }> {
410
- const artifact = await this.contractDataProvider.getContractArtifact(id);
411
- if (!artifact) {
412
- this.log.warn(`No artifact found for contract class ${id.toString()} when looking for its metadata`);
413
- }
414
-
415
- return {
416
- contractClass: artifact && (await getContractClassFromArtifact(artifact)),
417
- isContractClassPubliclyRegistered: await this.#isContractClassPubliclyRegistered(id),
418
- artifact: includeArtifact ? artifact : undefined,
419
- };
496
+ public getContractInstance(address: AztecAddress): Promise<ContractInstanceWithAddress | undefined> {
497
+ return this.contractStore.getContractInstance(address);
420
498
  }
421
499
 
422
500
  /**
423
- * Returns the contract metadata given an address.
424
- * The metadata consists of its contract instance, which includes the contract class identifier,
425
- * initialization hash, deployment salt, and public keys hash; whether the contract instance has been initialized;
426
- * and whether the contract instance with the given address has been publicly deployed.
427
- * @remark - it queries the node to check whether the contract instance has been initialized / publicly deployed through a node.
428
- * This query is not dependent on the PXE.
429
- * @param address - The address that the contract instance resides at.
430
- * @returns - It returns the contract metadata
431
- * TODO(@spalladino): Should we return the public keys in plain as well here?
501
+ * Returns the contract artifact for a given contract class id, if it's registered in the PXE.
502
+ * @param id - Identifier of the contract class.
503
+ * @returns The contract artifact if found, undefined otherwise.
432
504
  */
433
- public async getContractMetadata(address: AztecAddress): Promise<{
434
- contractInstance: ContractInstanceWithAddress | undefined;
435
- isContractInitialized: boolean;
436
- isContractPublished: boolean;
437
- }> {
438
- let instance;
439
- try {
440
- instance = await this.contractDataProvider.getContractInstance(address);
441
- } catch {
442
- this.log.warn(`No instance found for contract ${address.toString()} when looking for its metadata`);
443
- }
444
- return {
445
- contractInstance: instance,
446
- isContractInitialized: await this.#isContractInitialized(address),
447
- isContractPublished: await this.#isContractPublished(address),
448
- };
505
+ public async getContractArtifact(id: Fr): Promise<ContractArtifact | undefined> {
506
+ return await this.contractStore.getContractArtifact(id);
449
507
  }
450
508
 
451
509
  /**
@@ -469,8 +527,7 @@ export class PXE {
469
527
  this.log.debug(`Registered account\n ${accountCompleteAddress.toReadableString()}`);
470
528
  }
471
529
 
472
- await this.addressDataProvider.addCompleteAddress(accountCompleteAddress);
473
- await this.noteDataProvider.addScope(accountCompleteAddress.address);
530
+ await this.addressStore.addCompleteAddress(accountCompleteAddress);
474
531
  return accountCompleteAddress;
475
532
  }
476
533
 
@@ -491,7 +548,7 @@ export class PXE {
491
548
  return sender;
492
549
  }
493
550
 
494
- const wasAdded = await this.recipientTaggingDataProvider.addSenderAddress(sender);
551
+ const wasAdded = await this.senderAddressBookStore.addSender(sender);
495
552
 
496
553
  if (wasAdded) {
497
554
  this.log.info(`Added sender:\n ${sender.toString()}`);
@@ -507,7 +564,7 @@ export class PXE {
507
564
  * @returns Senders registered in this PXE.
508
565
  */
509
566
  public getSenders(): Promise<AztecAddress[]> {
510
- return this.recipientTaggingDataProvider.getSenderAddresses();
567
+ return this.senderAddressBookStore.getSenders();
511
568
  }
512
569
 
513
570
  /**
@@ -515,7 +572,7 @@ export class PXE {
515
572
  * @param sender - The address of the sender to remove.
516
573
  */
517
574
  public async removeSender(sender: AztecAddress): Promise<void> {
518
- const wasRemoved = await this.recipientTaggingDataProvider.removeSenderAddress(sender);
575
+ const wasRemoved = await this.senderAddressBookStore.removeSender(sender);
519
576
 
520
577
  if (wasRemoved) {
521
578
  this.log.info(`Removed sender:\n ${sender.toString()}`);
@@ -530,7 +587,7 @@ export class PXE {
530
587
  */
531
588
  public async getRegisteredAccounts(): Promise<CompleteAddress[]> {
532
589
  // Get complete addresses of both the recipients and the accounts
533
- const completeAddresses = await this.addressDataProvider.getCompleteAddresses();
590
+ const completeAddresses = await this.addressStore.getCompleteAddresses();
534
591
  // Filter out the addresses not corresponding to accounts
535
592
  const accounts = await this.keyStore.getAccounts();
536
593
  return completeAddresses.filter(completeAddress =>
@@ -544,8 +601,7 @@ export class PXE {
544
601
  * @param artifact - The build artifact for the contract class.
545
602
  */
546
603
  public async registerContractClass(artifact: ContractArtifact): Promise<void> {
547
- const { id: contractClassId } = await getContractClassFromArtifact(artifact);
548
- await this.contractDataProvider.addContractArtifact(contractClassId, artifact);
604
+ const contractClassId = await this.contractStore.addContractArtifact(artifact);
549
605
  this.log.info(`Added contract class ${artifact.name} with id ${contractClassId}`);
550
606
  }
551
607
 
@@ -564,17 +620,17 @@ export class PXE {
564
620
  if (artifact) {
565
621
  // If the user provides an artifact, validate it against the expected class id and register it
566
622
  const contractClass = await getContractClassFromArtifact(artifact);
567
- const contractClassId = contractClass.id;
568
- if (!contractClassId.equals(instance.currentContractClassId)) {
623
+ if (!contractClass.id.equals(instance.currentContractClassId)) {
569
624
  throw new Error(
570
- `Artifact does not match expected class id (computed ${contractClassId} but instance refers to ${instance.currentContractClassId})`,
625
+ `Artifact does not match expected class id (computed ${contractClass.id} but instance refers to ${instance.currentContractClassId})`,
571
626
  );
572
627
  }
573
628
  const computedAddress = await computeContractAddressFromInstance(instance);
574
629
  if (!computedAddress.equals(instance.address)) {
575
630
  throw new Error('Added a contract in which the address does not match the contract instance.');
576
631
  }
577
- await this.contractDataProvider.addContractArtifact(contractClass.id, artifact);
632
+
633
+ await this.contractStore.addContractArtifact(artifact, contractClass);
578
634
 
579
635
  const publicFunctionSignatures = artifact.functions
580
636
  .filter(fn => fn.functionType === FunctionType.PUBLIC)
@@ -582,7 +638,7 @@ export class PXE {
582
638
  await this.node.registerContractFunctionSignatures(publicFunctionSignatures);
583
639
  } else {
584
640
  // Otherwise, make sure there is an artifact already registered for that class id
585
- artifact = await this.contractDataProvider.getContractArtifact(instance.currentContractClassId);
641
+ artifact = await this.contractStore.getContractArtifact(instance.currentContractClassId);
586
642
  if (!artifact) {
587
643
  throw new Error(
588
644
  `Artifact not found when registering an instance. Contract class: ${instance.currentContractClassId}.`,
@@ -590,7 +646,7 @@ export class PXE {
590
646
  }
591
647
  }
592
648
 
593
- await this.contractDataProvider.addContractInstance(instance);
649
+ await this.contractStore.addContractInstance(instance);
594
650
  this.log.info(
595
651
  `Added contract ${artifact.name} at ${instance.address.toString()} with class ${instance.currentContractClassId}`,
596
652
  );
@@ -609,35 +665,30 @@ export class PXE {
609
665
  // We disable concurrently updating contracts to avoid concurrently syncing with the node, or changing a contract's
610
666
  // class while we're simulating it.
611
667
  return this.#putInJobQueue(async () => {
612
- const currentInstance = await this.contractDataProvider.getContractInstance(contractAddress);
668
+ const currentInstance = await this.contractStore.getContractInstance(contractAddress);
613
669
  if (!currentInstance) {
614
670
  throw new Error(`Instance not found when updating a contract. Contract address: ${contractAddress}.`);
615
671
  }
616
672
  const contractClass = await getContractClassFromArtifact(artifact);
617
673
  await this.blockStateSynchronizer.sync();
618
674
 
619
- const header = await this.anchorBlockDataProvider.getBlockHeader();
675
+ const header = await this.anchorBlockStore.getBlockHeader();
620
676
 
621
- const currentClassId = await readCurrentClassId(
622
- contractAddress,
623
- currentInstance,
624
- this.node,
625
- header.globalVariables.blockNumber,
626
- header.globalVariables.timestamp,
627
- );
677
+ const currentClassId = await readCurrentClassId(contractAddress, currentInstance, this.node, header);
628
678
  if (!contractClass.id.equals(currentClassId)) {
629
679
  throw new Error('Could not update contract to a class different from the current one.');
630
680
  }
631
681
 
632
- await this.contractDataProvider.addContractArtifact(contractClass.id, artifact);
633
-
634
682
  const publicFunctionSignatures = artifact.functions
635
683
  .filter(fn => fn.functionType === FunctionType.PUBLIC)
636
684
  .map(fn => decodeFunctionSignature(fn.name, fn.parameters));
637
685
  await this.node.registerContractFunctionSignatures(publicFunctionSignatures);
638
686
 
639
687
  currentInstance.currentContractClassId = contractClass.id;
640
- await this.contractDataProvider.addContractInstance(currentInstance);
688
+ await Promise.all([
689
+ this.contractStore.addContractArtifact(artifact, contractClass),
690
+ this.contractStore.addContractInstance(currentInstance),
691
+ ]);
641
692
  this.log.info(`Updated contract ${artifact.name} at ${contractAddress.toString()} to class ${contractClass.id}`);
642
693
  });
643
694
  }
@@ -647,7 +698,7 @@ export class PXE {
647
698
  * @returns An array of contracts addresses registered on this PXE.
648
699
  */
649
700
  public getContracts(): Promise<AztecAddress[]> {
650
- return this.contractDataProvider.getContractsAddresses();
701
+ return this.contractStore.getContractsAddresses();
651
702
  }
652
703
 
653
704
  /**
@@ -655,22 +706,23 @@ export class PXE {
655
706
  * (where validators prove the public portion).
656
707
  *
657
708
  * @param txRequest - An authenticated tx request ready for proving
709
+ * @param scopes - Addresses whose private state and keys are accessible during private execution.
658
710
  * @returns A result containing the proof and public inputs of the tail circuit.
659
711
  * @throws If contract code not found, or public simulation reverts.
660
712
  * Also throws if simulatePublic is true and public simulation reverts.
661
713
  */
662
- public proveTx(txRequest: TxExecutionRequest): Promise<TxProvingResult> {
714
+ public proveTx(txRequest: TxExecutionRequest, scopes: AztecAddress[]): Promise<TxProvingResult> {
663
715
  let privateExecutionResult: PrivateExecutionResult;
664
716
  // We disable proving concurrently mostly out of caution, since it accesses some of our stores. Proving is so
665
717
  // computationally demanding that it'd be rare for someone to try to do it concurrently regardless.
666
- return this.#putInJobQueue(async () => {
718
+ return this.#putInJobQueue(async jobId => {
667
719
  const totalTimer = new Timer();
668
720
  try {
669
721
  const syncTimer = new Timer();
670
722
  await this.blockStateSynchronizer.sync();
671
723
  const syncTime = syncTimer.ms();
672
724
  const contractFunctionSimulator = this.#getSimulatorForTx();
673
- privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest);
725
+ privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest, scopes, jobId);
674
726
 
675
727
  const {
676
728
  publicInputs,
@@ -717,7 +769,7 @@ export class PXE {
717
769
  // TODO(benesjan): The following is an expensive operation. Figure out a way to avoid it.
718
770
  const txHash = (await txProvingResult.toTx()).txHash;
719
771
 
720
- await this.senderTaggingDataProvider.storePendingIndexes(preTagsUsedInTheTx, txHash);
772
+ await this.senderTaggingStore.storePendingIndexes(preTagsUsedInTheTx, txHash, jobId);
721
773
  this.log.debug(`Stored used pre-tags as sender for the tx`, {
722
774
  preTagsUsedInTheTx,
723
775
  });
@@ -734,20 +786,16 @@ export class PXE {
734
786
 
735
787
  /**
736
788
  * Profiles a transaction, reporting gate counts (unless disabled) and returns an execution trace.
737
- *
738
- * @param txRequest - An authenticated tx request ready for simulation
739
- * @param msgSender - (Optional) The message sender to use for the simulation.
740
- * @param skipTxValidation - (Optional) If false, this function throws if the transaction is unable to be included in a block at the current state.
789
+ * @param txRequest - An authenticated tx request ready for simulation.
741
790
  * @returns A trace of the program execution with gate counts.
742
791
  * @throws If the code for the functions executed in this transaction have not been made available via `addContracts`.
743
792
  */
744
793
  public profileTx(
745
794
  txRequest: TxExecutionRequest,
746
- profileMode: 'full' | 'execution-steps' | 'gates',
747
- skipProofGeneration: boolean = true,
795
+ { profileMode, skipProofGeneration = true, scopes }: ProfileTxOpts,
748
796
  ): Promise<TxProfileResult> {
749
797
  // We disable concurrent profiles for consistency with simulateTx.
750
- return this.#putInJobQueue(async () => {
798
+ return this.#putInJobQueue(async jobId => {
751
799
  const totalTimer = new Timer();
752
800
  try {
753
801
  const txInfo = {
@@ -767,7 +815,7 @@ export class PXE {
767
815
  const syncTime = syncTimer.ms();
768
816
 
769
817
  const contractFunctionSimulator = this.#getSimulatorForTx();
770
- const privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest);
818
+ const privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest, scopes, jobId);
771
819
 
772
820
  const { executionSteps, timings: { proving } = {} } = await this.#prove(
773
821
  txRequest,
@@ -824,12 +872,7 @@ export class PXE {
824
872
  * In that case, the transaction returned is only potentially ready to be sent to the network for execution.
825
873
  *
826
874
  *
827
- * @param txRequest - An authenticated tx request ready for simulation
828
- * @param simulatePublic - Whether to simulate the public part of the transaction.
829
- * @param skipTxValidation - (Optional) If false, this function throws if the transaction is unable to be included in a block at the current state.
830
- * @param skipFeeEnforcement - (Optional) If false, fees are enforced.
831
- * @param overrides - (Optional) State overrides for the simulation, such as msgSender, contract instances and artifacts.
832
- * @param scopes - (Optional) The accounts whose notes we can access in this call. Currently optional and will default to all.
875
+ * @param txRequest - An authenticated tx request ready for simulation.
833
876
  * @returns A simulated transaction result object that includes public and private return values.
834
877
  * @throws If the code for the functions executed in this transaction have not been made available via `addContracts`.
835
878
  * Also throws if simulatePublic is true and public simulation reverts.
@@ -838,16 +881,12 @@ export class PXE {
838
881
  */
839
882
  public simulateTx(
840
883
  txRequest: TxExecutionRequest,
841
- simulatePublic: boolean,
842
- skipTxValidation: boolean = false,
843
- skipFeeEnforcement: boolean = false,
844
- overrides?: SimulationOverrides,
845
- scopes?: AztecAddress[],
884
+ { simulatePublic, skipTxValidation = false, skipFeeEnforcement = false, overrides, scopes }: SimulateTxOpts,
846
885
  ): Promise<TxSimulationResult> {
847
886
  // We disable concurrent simulations since those might execute oracles which read and write to the PXE stores (e.g.
848
887
  // to the capsules), and we need to prevent concurrent runs from interfering with one another (e.g. attempting to
849
888
  // delete the same read value, or reading values that another simulation is currently modifying).
850
- return this.#putInJobQueue(async () => {
889
+ return this.#putInJobQueue(async jobId => {
851
890
  try {
852
891
  const totalTimer = new Timer();
853
892
  const txInfo = {
@@ -870,24 +909,26 @@ export class PXE {
870
909
  // Temporary: in case there are overrides, we have to skip the kernels or validations
871
910
  // will fail. Consider handing control to the user/wallet on whether they want to run them
872
911
  // or not.
873
- const skipKernels = overrides?.contracts !== undefined && Object.keys(overrides.contracts ?? {}).length > 0;
912
+ const overriddenContracts = overrides?.contracts ? new Set(Object.keys(overrides.contracts)) : undefined;
913
+ const hasOverriddenContracts = overriddenContracts !== undefined && overriddenContracts.size > 0;
914
+ const skipKernels = hasOverriddenContracts;
915
+
916
+ // Set overridden contracts on the sync service so it knows to skip syncing them
917
+ if (hasOverriddenContracts) {
918
+ this.contractSyncService.setOverriddenContracts(jobId, overriddenContracts);
919
+ }
874
920
 
875
921
  // Execution of private functions only; no proving, and no kernel logic.
876
- const privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest, scopes);
922
+ const privateExecutionResult = await this.#executePrivate(contractFunctionSimulator, txRequest, scopes, jobId);
877
923
 
878
924
  let publicInputs: PrivateKernelTailCircuitPublicInputs | undefined;
879
925
  let executionSteps: PrivateExecutionStep[] = [];
880
926
 
881
927
  if (skipKernels) {
882
- // According to the protocol rules, the nonce generator for the note hashes
883
- // can either be the first nullifier in the tx or the protocol nullifier if there are none.
884
- const nonceGenerator = privateExecutionResult.firstNullifier.equals(Fr.ZERO)
885
- ? await computeProtocolNullifier(await txRequest.toTxRequest().hash())
886
- : privateExecutionResult.firstNullifier;
887
928
  ({ publicInputs, executionSteps } = await generateSimulatedProvingResult(
888
929
  privateExecutionResult,
889
- nonceGenerator,
890
- this.contractDataProvider,
930
+ (addr, sel) => this.contractStore.getDebugFunctionName(addr, sel),
931
+ this.node,
891
932
  ));
892
933
  } else {
893
934
  // Kernel logic, plus proving of all private functions and kernels.
@@ -906,6 +947,9 @@ export class PXE {
906
947
  const publicSimulationTimer = new Timer();
907
948
  publicOutput = await this.#simulatePublicCalls(simulatedTx, skipFeeEnforcement);
908
949
  publicSimulationTime = publicSimulationTimer.ms();
950
+ if (publicOutput?.debugLogs?.length) {
951
+ await displayDebugLogs(publicOutput.debugLogs, addr => this.contractStore.getDebugContractName(addr));
952
+ }
909
953
  }
910
954
 
911
955
  let validationTime: number | undefined;
@@ -965,30 +1009,24 @@ export class PXE {
965
1009
  inspect(txRequest),
966
1010
  `simulatePublic=${simulatePublic}`,
967
1011
  `skipTxValidation=${skipTxValidation}`,
968
- `scopes=${scopes?.map(s => s.toString()).join(', ') ?? 'undefined'}`,
1012
+ `scopes=${scopes === 'ALL_SCOPES' ? scopes : scopes.map(s => s.toString()).join(', ')}`,
969
1013
  );
970
1014
  }
971
1015
  });
972
1016
  }
973
1017
 
974
1018
  /**
975
- * Simulate the execution of a contract utility function.
976
- *
1019
+ * Executes a contract utility function.
977
1020
  * @param call - The function call containing the function details, arguments, and target contract address.
978
- * @param authwits - (Optional) The authentication witnesses required for the function call.
979
- * @param scopes - (Optional) The accounts whose notes we can access in this call. Currently optional and will
980
- * default to all.
981
- * @returns The result of the utility function call, structured based on the function ABI.
982
1021
  */
983
- public simulateUtility(
1022
+ public executeUtility(
984
1023
  call: FunctionCall,
985
- authwits?: AuthWitness[],
986
- scopes?: AztecAddress[],
987
- ): Promise<UtilitySimulationResult> {
988
- // We disable concurrent simulations since those might execute oracles which read and write to the PXE stores (e.g.
1024
+ { authwits, scopes }: ExecuteUtilityOpts = { scopes: 'ALL_SCOPES' },
1025
+ ): Promise<UtilityExecutionResult> {
1026
+ // We disable concurrent executions since those might execute oracles which read and write to the PXE stores (e.g.
989
1027
  // to the capsules), and we need to prevent concurrent runs from interfering with one another (e.g. attempting to
990
- // delete the same read value, or reading values that another simulation is currently modifying).
991
- return this.#putInJobQueue(async () => {
1028
+ // delete the same read value, or reading values that another execution is currently modifying).
1029
+ return this.#putInJobQueue(async jobId => {
992
1030
  try {
993
1031
  const totalTimer = new Timer();
994
1032
  const syncTimer = new Timer();
@@ -996,7 +1034,25 @@ export class PXE {
996
1034
  const syncTime = syncTimer.ms();
997
1035
  const functionTimer = new Timer();
998
1036
  const contractFunctionSimulator = this.#getSimulatorForTx();
999
- const executionResult = await this.#simulateUtility(contractFunctionSimulator, call, authwits ?? [], scopes);
1037
+
1038
+ const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
1039
+ await this.contractSyncService.ensureContractSynced(
1040
+ call.to,
1041
+ call.selector,
1042
+ (privateSyncCall, execScopes) =>
1043
+ this.#executeUtility(contractFunctionSimulator, privateSyncCall, [], execScopes, jobId),
1044
+ anchorBlockHeader,
1045
+ jobId,
1046
+ scopes,
1047
+ );
1048
+
1049
+ const executionResult = await this.#executeUtility(
1050
+ contractFunctionSimulator,
1051
+ call,
1052
+ authwits ?? [],
1053
+ scopes,
1054
+ jobId,
1055
+ );
1000
1056
  const functionTime = functionTimer.ms();
1001
1057
 
1002
1058
  const totalTime = totalTimer.ms();
@@ -1017,8 +1073,8 @@ export class PXE {
1017
1073
  const stringifiedArgs = args.map(arg => arg.toString()).join(', ');
1018
1074
  throw this.#contextualizeError(
1019
1075
  err,
1020
- `simulateUtility ${to}:${name}(${stringifiedArgs})`,
1021
- `scopes=${scopes?.map(s => s.toString()).join(', ') ?? 'undefined'}`,
1076
+ `executeUtility ${to}:${name}(${stringifiedArgs})`,
1077
+ `scopes=${scopes === 'ALL_SCOPES' ? scopes : scopes.map(s => s.toString()).join(', ')}`,
1022
1078
  );
1023
1079
  }
1024
1080
  });
@@ -1041,17 +1097,35 @@ export class PXE {
1041
1097
  eventSelector: EventSelector,
1042
1098
  filter: PrivateEventFilter,
1043
1099
  ): Promise<PackedPrivateEvent[]> {
1044
- // We need to manually trigger private state sync to have a guarantee that all the events are available.
1045
- const call = await this.contractDataProvider.getFunctionCall('sync_private_state', [], filter.contractAddress);
1046
- await this.simulateUtility(call);
1100
+ let anchorBlockNumber: BlockNumber;
1101
+
1102
+ await this.#putInJobQueue(async jobId => {
1103
+ await this.blockStateSynchronizer.sync();
1104
+
1105
+ const anchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
1106
+ anchorBlockNumber = anchorBlockHeader.getBlockNumber();
1107
+
1108
+ const contractFunctionSimulator = this.#getSimulatorForTx();
1109
+
1110
+ await this.contractSyncService.ensureContractSynced(
1111
+ filter.contractAddress,
1112
+ null,
1113
+ async (privateSyncCall, execScopes) =>
1114
+ await this.#executeUtility(contractFunctionSimulator, privateSyncCall, [], execScopes, jobId),
1115
+ anchorBlockHeader,
1116
+ jobId,
1117
+ filter.scopes,
1118
+ );
1119
+ });
1047
1120
 
1048
- const sanitizedFilter = await new PrivateEventFilterValidator(this.anchorBlockDataProvider).validate(filter);
1121
+ // anchorBlockNumber is set during the job and fixed to whatever it is after a block sync
1122
+ const sanitizedFilter = new PrivateEventFilterValidator(anchorBlockNumber!).validate(filter);
1049
1123
 
1050
1124
  this.log.debug(
1051
1125
  `Getting private events for ${sanitizedFilter.contractAddress.toString()} from ${sanitizedFilter.fromBlock} to ${sanitizedFilter.toBlock}`,
1052
1126
  );
1053
1127
 
1054
- return this.privateEventDataProvider.getPrivateEvents(eventSelector, sanitizedFilter);
1128
+ return this.privateEventStore.getPrivateEvents(eventSelector, sanitizedFilter);
1055
1129
  }
1056
1130
 
1057
1131
  /**