@aztec/pxe 0.0.1-commit.03f7ef2 → 0.0.1-commit.04852196a

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