@aztec/pxe 0.0.1-commit.d3ec352c → 0.0.1-commit.e61ad554

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 (379) hide show
  1. package/dest/bin/check_oracle_version.js +105 -15
  2. package/dest/block_synchronizer/block_synchronizer.d.ts +43 -0
  3. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -0
  4. package/dest/block_synchronizer/block_synchronizer.js +147 -0
  5. package/dest/block_synchronizer/index.d.ts +2 -0
  6. package/dest/block_synchronizer/index.d.ts.map +1 -0
  7. package/dest/block_synchronizer/index.js +1 -0
  8. package/dest/config/index.d.ts +6 -4
  9. package/dest/config/index.d.ts.map +1 -1
  10. package/dest/config/index.js +17 -0
  11. package/dest/config/package_info.js +1 -1
  12. package/dest/contract_function_simulator/benchmarked_node.d.ts +9 -0
  13. package/dest/contract_function_simulator/benchmarked_node.d.ts.map +1 -0
  14. package/dest/contract_function_simulator/benchmarked_node.js +77 -0
  15. package/dest/contract_function_simulator/contract_function_simulator.d.ts +42 -14
  16. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  17. package/dest/contract_function_simulator/contract_function_simulator.js +71 -30
  18. package/dest/contract_function_simulator/execution_note_cache.d.ts +21 -12
  19. package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
  20. package/dest/contract_function_simulator/execution_note_cache.js +48 -31
  21. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +1 -1
  22. package/dest/contract_function_simulator/execution_tagging_index_cache.js +1 -1
  23. package/dest/contract_function_simulator/hashed_values_cache.d.ts +2 -2
  24. package/dest/contract_function_simulator/hashed_values_cache.d.ts.map +1 -1
  25. package/dest/contract_function_simulator/index.d.ts +2 -2
  26. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  27. package/dest/contract_function_simulator/index.js +1 -1
  28. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +5 -4
  29. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  30. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +6 -3
  31. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +5 -4
  32. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -1
  33. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +7 -6
  34. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +2 -2
  35. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
  36. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +1 -1
  37. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +3 -3
  38. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  39. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +1 -1
  40. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +4 -10
  41. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
  42. package/dest/contract_function_simulator/noir-structs/utility_context.js +7 -18
  43. package/dest/contract_function_simulator/oracle/interfaces.d.ts +20 -16
  44. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  45. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +4 -2
  46. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
  47. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.js +1 -1
  48. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +11 -7
  49. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
  50. package/dest/contract_function_simulator/oracle/note_packing_utils.js +14 -10
  51. package/dest/contract_function_simulator/oracle/oracle.d.ts +10 -8
  52. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  53. package/dest/contract_function_simulator/oracle/oracle.js +58 -36
  54. package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -28
  55. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  56. package/dest/contract_function_simulator/oracle/private_execution.js +2 -38
  57. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +33 -25
  58. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  59. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +41 -45
  60. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +75 -25
  61. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  62. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +170 -64
  63. package/dest/contract_function_simulator/pick_notes.d.ts +2 -2
  64. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
  65. package/dest/contract_function_simulator/pick_notes.js +1 -1
  66. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +4 -4
  67. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
  68. package/dest/contract_function_simulator/proxied_contract_data_source.js +23 -5
  69. package/dest/contract_sync/index.d.ts +23 -0
  70. package/dest/contract_sync/index.d.ts.map +1 -0
  71. package/dest/contract_sync/index.js +54 -0
  72. package/dest/debug/pxe_debug_utils.d.ts +31 -0
  73. package/dest/debug/pxe_debug_utils.d.ts.map +1 -0
  74. package/dest/debug/pxe_debug_utils.js +38 -0
  75. package/dest/entrypoints/client/bundle/index.d.ts +1 -2
  76. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  77. package/dest/entrypoints/client/bundle/index.js +0 -1
  78. package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
  79. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  80. package/dest/entrypoints/client/bundle/utils.js +12 -3
  81. package/dest/entrypoints/client/lazy/index.d.ts +1 -2
  82. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  83. package/dest/entrypoints/client/lazy/index.js +0 -1
  84. package/dest/entrypoints/client/lazy/utils.d.ts +1 -1
  85. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  86. package/dest/entrypoints/client/lazy/utils.js +12 -3
  87. package/dest/entrypoints/pxe_creation_options.d.ts +5 -2
  88. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  89. package/dest/entrypoints/server/index.d.ts +4 -2
  90. package/dest/entrypoints/server/index.d.ts.map +1 -1
  91. package/dest/entrypoints/server/index.js +3 -1
  92. package/dest/entrypoints/server/utils.d.ts +1 -1
  93. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  94. package/dest/entrypoints/server/utils.js +12 -8
  95. package/dest/error_enriching.d.ts +4 -4
  96. package/dest/error_enriching.d.ts.map +1 -1
  97. package/dest/error_enriching.js +6 -6
  98. package/dest/events/event_service.d.ts +16 -0
  99. package/dest/events/event_service.d.ts.map +1 -0
  100. package/dest/events/event_service.js +45 -0
  101. package/dest/events/index.d.ts +2 -0
  102. package/dest/events/index.d.ts.map +1 -0
  103. package/dest/events/index.js +1 -0
  104. package/dest/events/private_event_filter_validator.d.ts +9 -0
  105. package/dest/events/private_event_filter_validator.d.ts.map +1 -0
  106. package/dest/events/private_event_filter_validator.js +38 -0
  107. package/dest/job_coordinator/job_coordinator.d.ts +74 -0
  108. package/dest/job_coordinator/job_coordinator.d.ts.map +1 -0
  109. package/dest/job_coordinator/job_coordinator.js +93 -0
  110. package/dest/logs/log_service.d.ts +27 -0
  111. package/dest/logs/log_service.d.ts.map +1 -0
  112. package/dest/logs/log_service.js +128 -0
  113. package/dest/notes/index.d.ts +2 -0
  114. package/dest/notes/index.d.ts.map +1 -0
  115. package/dest/notes/index.js +1 -0
  116. package/dest/notes/note_service.d.ts +49 -0
  117. package/dest/notes/note_service.d.ts.map +1 -0
  118. package/dest/notes/note_service.js +148 -0
  119. package/dest/oracle_version.d.ts +3 -3
  120. package/dest/oracle_version.d.ts.map +1 -1
  121. package/dest/oracle_version.js +4 -3
  122. package/dest/private_kernel/hints/index.d.ts +2 -2
  123. package/dest/private_kernel/hints/index.d.ts.map +1 -1
  124. package/dest/private_kernel/hints/index.js +1 -1
  125. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +28 -0
  126. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
  127. package/dest/private_kernel/hints/{build_private_kernel_reset_private_inputs.js → private_kernel_reset_private_inputs_builder.js} +13 -7
  128. package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
  129. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  130. package/dest/private_kernel/private_kernel_execution_prover.js +8 -9
  131. package/dest/private_kernel/private_kernel_oracle.d.ts +26 -29
  132. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  133. package/dest/private_kernel/private_kernel_oracle.js +90 -2
  134. package/dest/pxe.d.ts +45 -81
  135. package/dest/pxe.d.ts.map +1 -1
  136. package/dest/pxe.js +185 -216
  137. package/dest/storage/address_store/address_store.d.ts +11 -0
  138. package/dest/storage/address_store/address_store.d.ts.map +1 -0
  139. package/dest/storage/{address_data_provider/address_data_provider.js → address_store/address_store.js} +1 -1
  140. package/dest/storage/address_store/index.d.ts +2 -0
  141. package/dest/storage/address_store/index.d.ts.map +1 -0
  142. package/dest/storage/address_store/index.js +1 -0
  143. package/dest/storage/{sync_data_provider/sync_data_provider.d.ts → anchor_block_store/anchor_block_store.d.ts} +2 -4
  144. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -0
  145. package/dest/storage/{sync_data_provider/sync_data_provider.js → anchor_block_store/anchor_block_store.js} +2 -9
  146. package/dest/storage/{sync_data_provider → anchor_block_store}/index.d.ts +2 -2
  147. package/dest/storage/anchor_block_store/index.d.ts.map +1 -0
  148. package/dest/storage/anchor_block_store/index.js +1 -0
  149. package/dest/storage/capsule_store/capsule_store.d.ts +72 -0
  150. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -0
  151. package/dest/storage/capsule_store/capsule_store.js +255 -0
  152. package/dest/storage/capsule_store/index.d.ts +2 -0
  153. package/dest/storage/capsule_store/index.d.ts.map +1 -0
  154. package/dest/storage/capsule_store/index.js +1 -0
  155. package/dest/storage/{contract_data_provider/contract_data_provider.d.ts → contract_store/contract_store.d.ts} +7 -5
  156. package/dest/storage/contract_store/contract_store.d.ts.map +1 -0
  157. package/dest/storage/{contract_data_provider/contract_data_provider.js → contract_store/contract_store.js} +34 -3
  158. package/dest/storage/contract_store/index.d.ts +2 -0
  159. package/dest/storage/contract_store/index.d.ts.map +1 -0
  160. package/dest/storage/contract_store/index.js +1 -0
  161. package/dest/storage/{contract_data_provider → contract_store}/private_functions_tree.d.ts +1 -1
  162. package/dest/storage/contract_store/private_functions_tree.d.ts.map +1 -0
  163. package/dest/storage/{contract_data_provider → contract_store}/private_functions_tree.js +1 -1
  164. package/dest/storage/index.d.ts +8 -8
  165. package/dest/storage/index.d.ts.map +1 -1
  166. package/dest/storage/index.js +7 -7
  167. package/dest/storage/note_store/index.d.ts +3 -0
  168. package/dest/storage/note_store/index.d.ts.map +1 -0
  169. package/dest/storage/note_store/index.js +2 -0
  170. package/dest/storage/note_store/note_store.d.ts +73 -0
  171. package/dest/storage/note_store/note_store.d.ts.map +1 -0
  172. package/dest/storage/note_store/note_store.js +303 -0
  173. package/dest/storage/note_store/stored_note.d.ts +16 -0
  174. package/dest/storage/note_store/stored_note.d.ts.map +1 -0
  175. package/dest/storage/note_store/stored_note.js +43 -0
  176. package/dest/storage/private_event_store/private_event_store.d.ts +91 -0
  177. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -0
  178. package/dest/storage/private_event_store/private_event_store.js +250 -0
  179. package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
  180. package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
  181. package/dest/storage/private_event_store/stored_private_event.js +56 -0
  182. package/dest/storage/tagging_store/index.d.ts +4 -0
  183. package/dest/storage/tagging_store/index.d.ts.map +1 -0
  184. package/dest/storage/tagging_store/index.js +3 -0
  185. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +28 -0
  186. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -0
  187. package/dest/storage/tagging_store/recipient_tagging_store.js +99 -0
  188. package/dest/storage/tagging_store/sender_address_book_store.d.ts +14 -0
  189. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -0
  190. package/dest/storage/tagging_store/sender_address_book_store.js +30 -0
  191. package/dest/storage/tagging_store/sender_tagging_store.d.ts +77 -0
  192. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -0
  193. package/dest/storage/tagging_store/sender_tagging_store.js +278 -0
  194. package/dest/tagging/constants.d.ts +2 -2
  195. package/dest/tagging/constants.d.ts.map +1 -1
  196. package/dest/tagging/constants.js +10 -2
  197. package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
  198. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
  199. package/dest/tagging/get_all_logs_by_tags.js +46 -0
  200. package/dest/tagging/index.d.ts +16 -6
  201. package/dest/tagging/index.d.ts.map +1 -1
  202. package/dest/tagging/index.js +15 -5
  203. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +15 -0
  204. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -0
  205. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +99 -0
  206. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +12 -0
  207. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -0
  208. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +20 -0
  209. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +15 -0
  210. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -0
  211. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +32 -0
  212. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +21 -0
  213. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -0
  214. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +74 -0
  215. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +11 -0
  216. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -0
  217. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +29 -0
  218. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +21 -0
  219. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -0
  220. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +60 -0
  221. package/package.json +18 -18
  222. package/src/bin/check_oracle_version.ts +131 -20
  223. package/src/block_synchronizer/block_synchronizer.ts +174 -0
  224. package/src/block_synchronizer/index.ts +1 -0
  225. package/src/config/index.ts +17 -3
  226. package/src/config/package_info.ts +1 -1
  227. package/src/contract_function_simulator/benchmarked_node.ts +103 -0
  228. package/src/contract_function_simulator/contract_function_simulator.ts +113 -33
  229. package/src/contract_function_simulator/execution_note_cache.ts +51 -29
  230. package/src/contract_function_simulator/execution_tagging_index_cache.ts +1 -1
  231. package/src/contract_function_simulator/hashed_values_cache.ts +1 -1
  232. package/src/contract_function_simulator/index.ts +1 -1
  233. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +6 -2
  234. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +6 -5
  235. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +1 -1
  236. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +2 -2
  237. package/src/contract_function_simulator/noir-structs/utility_context.ts +6 -25
  238. package/src/contract_function_simulator/oracle/interfaces.ts +25 -15
  239. package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +1 -1
  240. package/src/contract_function_simulator/oracle/note_packing_utils.ts +27 -13
  241. package/src/contract_function_simulator/oracle/oracle.ts +74 -45
  242. package/src/contract_function_simulator/oracle/private_execution.ts +2 -69
  243. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +124 -59
  244. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +259 -81
  245. package/src/contract_function_simulator/pick_notes.ts +1 -1
  246. package/src/contract_function_simulator/proxied_contract_data_source.ts +24 -7
  247. package/src/contract_sync/index.ts +98 -0
  248. package/src/debug/pxe_debug_utils.ts +49 -0
  249. package/src/entrypoints/client/bundle/index.ts +0 -1
  250. package/src/entrypoints/client/bundle/utils.ts +9 -3
  251. package/src/entrypoints/client/lazy/index.ts +0 -1
  252. package/src/entrypoints/client/lazy/utils.ts +9 -4
  253. package/src/entrypoints/pxe_creation_options.ts +4 -1
  254. package/src/entrypoints/server/index.ts +3 -1
  255. package/src/entrypoints/server/utils.ts +12 -16
  256. package/src/error_enriching.ts +7 -15
  257. package/src/events/event_service.ts +73 -0
  258. package/src/events/index.ts +1 -0
  259. package/src/events/private_event_filter_validator.ts +46 -0
  260. package/src/job_coordinator/job_coordinator.ts +149 -0
  261. package/src/logs/log_service.ts +220 -0
  262. package/src/notes/index.ts +1 -0
  263. package/src/notes/note_service.ts +197 -0
  264. package/src/oracle_version.ts +4 -3
  265. package/src/private_kernel/hints/index.ts +1 -1
  266. package/src/private_kernel/hints/{build_private_kernel_reset_private_inputs.ts → private_kernel_reset_private_inputs_builder.ts} +34 -23
  267. package/src/private_kernel/private_kernel_execution_prover.ts +7 -9
  268. package/src/private_kernel/private_kernel_oracle.ts +118 -37
  269. package/src/pxe.ts +257 -280
  270. package/src/storage/{address_data_provider/address_data_provider.ts → address_store/address_store.ts} +1 -1
  271. package/src/storage/address_store/index.ts +1 -0
  272. package/src/storage/{sync_data_provider/sync_data_provider.ts → anchor_block_store/anchor_block_store.ts} +2 -12
  273. package/src/storage/anchor_block_store/index.ts +1 -0
  274. package/src/storage/capsule_store/capsule_store.ts +315 -0
  275. package/src/storage/capsule_store/index.ts +1 -0
  276. package/src/storage/{contract_data_provider/contract_data_provider.ts → contract_store/contract_store.ts} +45 -3
  277. package/src/storage/contract_store/index.ts +1 -0
  278. package/src/storage/{contract_data_provider → contract_store}/private_functions_tree.ts +1 -1
  279. package/src/storage/index.ts +7 -7
  280. package/src/storage/note_store/index.ts +2 -0
  281. package/src/storage/note_store/note_store.ts +381 -0
  282. package/src/storage/note_store/stored_note.ts +48 -0
  283. package/src/storage/private_event_store/private_event_store.ts +363 -0
  284. package/src/storage/private_event_store/stored_private_event.ts +73 -0
  285. package/src/storage/tagging_store/index.ts +3 -0
  286. package/src/storage/tagging_store/recipient_tagging_store.ts +129 -0
  287. package/src/storage/tagging_store/sender_address_book_store.ts +42 -0
  288. package/src/storage/tagging_store/sender_tagging_store.ts +345 -0
  289. package/src/tagging/constants.ts +10 -2
  290. package/src/tagging/get_all_logs_by_tags.ts +68 -0
  291. package/src/tagging/index.ts +18 -5
  292. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +143 -0
  293. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +34 -0
  294. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +49 -0
  295. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +99 -0
  296. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +36 -0
  297. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +84 -0
  298. package/dest/contract_function_simulator/execution_data_provider.d.ts +0 -267
  299. package/dest/contract_function_simulator/execution_data_provider.d.ts.map +0 -1
  300. package/dest/contract_function_simulator/execution_data_provider.js +0 -14
  301. package/dest/contract_function_simulator/proxied_node.d.ts +0 -9
  302. package/dest/contract_function_simulator/proxied_node.d.ts.map +0 -1
  303. package/dest/contract_function_simulator/proxied_node.js +0 -27
  304. package/dest/contract_function_simulator/pxe_oracle_interface.d.ts +0 -123
  305. package/dest/contract_function_simulator/pxe_oracle_interface.d.ts.map +0 -1
  306. package/dest/contract_function_simulator/pxe_oracle_interface.js +0 -696
  307. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +0 -28
  308. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
  309. package/dest/private_kernel/private_kernel_oracle_impl.d.ts +0 -45
  310. package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +0 -1
  311. package/dest/private_kernel/private_kernel_oracle_impl.js +0 -86
  312. package/dest/storage/address_data_provider/address_data_provider.d.ts +0 -11
  313. package/dest/storage/address_data_provider/address_data_provider.d.ts.map +0 -1
  314. package/dest/storage/address_data_provider/index.d.ts +0 -2
  315. package/dest/storage/address_data_provider/index.d.ts.map +0 -1
  316. package/dest/storage/address_data_provider/index.js +0 -1
  317. package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts +0 -25
  318. package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts.map +0 -1
  319. package/dest/storage/capsule_data_provider/capsule_data_provider.js +0 -118
  320. package/dest/storage/capsule_data_provider/index.d.ts +0 -2
  321. package/dest/storage/capsule_data_provider/index.d.ts.map +0 -1
  322. package/dest/storage/capsule_data_provider/index.js +0 -1
  323. package/dest/storage/contract_data_provider/contract_data_provider.d.ts.map +0 -1
  324. package/dest/storage/contract_data_provider/index.d.ts +0 -2
  325. package/dest/storage/contract_data_provider/index.d.ts.map +0 -1
  326. package/dest/storage/contract_data_provider/index.js +0 -1
  327. package/dest/storage/contract_data_provider/private_functions_tree.d.ts.map +0 -1
  328. package/dest/storage/note_data_provider/index.d.ts +0 -3
  329. package/dest/storage/note_data_provider/index.d.ts.map +0 -1
  330. package/dest/storage/note_data_provider/index.js +0 -2
  331. package/dest/storage/note_data_provider/note_data_provider.d.ts +0 -83
  332. package/dest/storage/note_data_provider/note_data_provider.d.ts.map +0 -1
  333. package/dest/storage/note_data_provider/note_data_provider.js +0 -314
  334. package/dest/storage/private_event_data_provider/private_event_data_provider.d.ts +0 -37
  335. package/dest/storage/private_event_data_provider/private_event_data_provider.d.ts.map +0 -1
  336. package/dest/storage/private_event_data_provider/private_event_data_provider.js +0 -105
  337. package/dest/storage/sync_data_provider/index.d.ts.map +0 -1
  338. package/dest/storage/sync_data_provider/index.js +0 -1
  339. package/dest/storage/sync_data_provider/sync_data_provider.d.ts.map +0 -1
  340. package/dest/storage/tagging_data_provider/index.d.ts +0 -2
  341. package/dest/storage/tagging_data_provider/index.d.ts.map +0 -1
  342. package/dest/storage/tagging_data_provider/index.js +0 -1
  343. package/dest/storage/tagging_data_provider/tagging_data_provider.d.ts +0 -40
  344. package/dest/storage/tagging_data_provider/tagging_data_provider.d.ts.map +0 -1
  345. package/dest/storage/tagging_data_provider/tagging_data_provider.js +0 -89
  346. package/dest/synchronizer/index.d.ts +0 -2
  347. package/dest/synchronizer/index.d.ts.map +0 -1
  348. package/dest/synchronizer/index.js +0 -1
  349. package/dest/synchronizer/synchronizer.d.ts +0 -36
  350. package/dest/synchronizer/synchronizer.d.ts.map +0 -1
  351. package/dest/synchronizer/synchronizer.js +0 -102
  352. package/dest/tagging/siloed_tag.d.ts +0 -14
  353. package/dest/tagging/siloed_tag.d.ts.map +0 -1
  354. package/dest/tagging/siloed_tag.js +0 -20
  355. package/dest/tagging/tag.d.ts +0 -12
  356. package/dest/tagging/tag.d.ts.map +0 -1
  357. package/dest/tagging/tag.js +0 -17
  358. package/dest/tagging/utils.d.ts +0 -18
  359. package/dest/tagging/utils.d.ts.map +0 -1
  360. package/dest/tagging/utils.js +0 -24
  361. package/src/contract_function_simulator/execution_data_provider.ts +0 -342
  362. package/src/contract_function_simulator/proxied_node.ts +0 -33
  363. package/src/contract_function_simulator/pxe_oracle_interface.ts +0 -1023
  364. package/src/private_kernel/private_kernel_oracle_impl.ts +0 -132
  365. package/src/storage/address_data_provider/index.ts +0 -1
  366. package/src/storage/capsule_data_provider/capsule_data_provider.ts +0 -147
  367. package/src/storage/capsule_data_provider/index.ts +0 -1
  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 -403
  371. package/src/storage/private_event_data_provider/private_event_data_provider.ts +0 -143
  372. package/src/storage/sync_data_provider/index.ts +0 -1
  373. package/src/storage/tagging_data_provider/index.ts +0 -1
  374. package/src/storage/tagging_data_provider/tagging_data_provider.ts +0 -120
  375. package/src/synchronizer/index.ts +0 -1
  376. package/src/synchronizer/synchronizer.ts +0 -121
  377. package/src/tagging/siloed_tag.ts +0 -22
  378. package/src/tagging/tag.ts +0 -16
  379. package/src/tagging/utils.ts +0 -31
@@ -0,0 +1,174 @@
1
+ import { BlockNumber } from '@aztec/foundation/branded-types';
2
+ import { type Logger, createLogger } from '@aztec/foundation/log';
3
+ import type { AztecAsyncKVStore } from '@aztec/kv-store';
4
+ import type { L2TipsKVStore } from '@aztec/kv-store/stores';
5
+ import {
6
+ L2BlockHash,
7
+ L2BlockStream,
8
+ type L2BlockStreamEvent,
9
+ type L2BlockStreamEventHandler,
10
+ } from '@aztec/stdlib/block';
11
+ import type { AztecNode } from '@aztec/stdlib/interfaces/client';
12
+ import type { BlockHeader } from '@aztec/stdlib/tx';
13
+
14
+ import type { BlockSynchronizerConfig } from '../config/index.js';
15
+ import type { AnchorBlockStore } from '../storage/anchor_block_store/anchor_block_store.js';
16
+ import type { NoteStore } from '../storage/note_store/note_store.js';
17
+ import type { PrivateEventStore } from '../storage/private_event_store/private_event_store.js';
18
+
19
+ /**
20
+ * The BlockSynchronizer class orchestrates synchronization between PXE and Aztec node, maintaining an up-to-date
21
+ * view of the L2 chain state. It handles block header retrieval, chain reorganizations, and provides an interface
22
+ * for querying sync status.
23
+ */
24
+ export class BlockSynchronizer implements L2BlockStreamEventHandler {
25
+ private log: Logger;
26
+ private isSyncing: Promise<void> | undefined;
27
+ protected readonly blockStream: L2BlockStream;
28
+
29
+ constructor(
30
+ private node: AztecNode,
31
+ private store: AztecAsyncKVStore,
32
+ private anchorBlockStore: AnchorBlockStore,
33
+ private noteStore: NoteStore,
34
+ private privateEventStore: PrivateEventStore,
35
+ private l2TipsStore: L2TipsKVStore,
36
+ private config: Partial<BlockSynchronizerConfig> = {},
37
+ loggerOrSuffix?: string | Logger,
38
+ ) {
39
+ this.log =
40
+ !loggerOrSuffix || typeof loggerOrSuffix === 'string'
41
+ ? createLogger(loggerOrSuffix ? `pxe:block_synchronizer:${loggerOrSuffix}` : `pxe:block_synchronizer`)
42
+ : loggerOrSuffix;
43
+ this.blockStream = this.createBlockStream(config);
44
+ }
45
+
46
+ protected createBlockStream(config: Partial<BlockSynchronizerConfig>): L2BlockStream {
47
+ return new L2BlockStream(this.node, this.l2TipsStore, this, createLogger('pxe:block_stream'), {
48
+ batchSize: config.l2BlockBatchSize,
49
+ // Skipping finalized blocks makes us sync much faster - we only need to download blocks other than the latest one
50
+ // in order to detect reorgs, and there can be no reorgs on finalized block, making this safe.
51
+ skipFinalized: true,
52
+ });
53
+ }
54
+
55
+ /** Handle events emitted by the block stream. */
56
+ public async handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void> {
57
+ await this.l2TipsStore.handleBlockStreamEvent(event);
58
+
59
+ switch (event.type) {
60
+ case 'blocks-added': {
61
+ if (this.config.syncChainTip === undefined || this.config.syncChainTip === 'proposed') {
62
+ const lastBlock = event.blocks.at(-1)!;
63
+ await this.updateAnchorBlockHeader(lastBlock.header);
64
+ }
65
+ break;
66
+ }
67
+ case 'chain-checkpointed': {
68
+ if (this.config.syncChainTip === 'checkpointed') {
69
+ // Get the last block header from the checkpoint
70
+ const lastBlock = event.checkpoint.checkpoint.blocks.at(-1)!;
71
+ await this.updateAnchorBlockHeader(lastBlock.header);
72
+ }
73
+ break;
74
+ }
75
+ case 'chain-proven': {
76
+ if (this.config.syncChainTip === 'proven') {
77
+ const blockHeader = await this.node.getBlockHeader(BlockNumber(event.block.number));
78
+ if (blockHeader) {
79
+ await this.updateAnchorBlockHeader(blockHeader);
80
+ }
81
+ }
82
+ break;
83
+ }
84
+ case 'chain-finalized': {
85
+ if (this.config.syncChainTip === 'finalized') {
86
+ const blockHeader = await this.node.getBlockHeader(BlockNumber(event.block.number));
87
+ if (blockHeader) {
88
+ await this.updateAnchorBlockHeader(blockHeader);
89
+ }
90
+ }
91
+ break;
92
+ }
93
+ case 'chain-pruned': {
94
+ const currentAnchorBlockHeader = await this.anchorBlockStore.getBlockHeader();
95
+ const currentAnchorBlockNumber = currentAnchorBlockHeader.getBlockNumber();
96
+ if (currentAnchorBlockNumber <= event.block.number) {
97
+ this.log.verbose(
98
+ `Ignoring prune event to block ${event.block.number} greater than current anchor block ${currentAnchorBlockNumber}`,
99
+ { pruneEvent: event, currentAnchorBlockHeader: currentAnchorBlockHeader.toInspect() },
100
+ );
101
+ return;
102
+ }
103
+
104
+ this.log.warn(`Pruning data after block ${event.block.number} due to reorg`);
105
+
106
+ // Note that the following is not necessarily the anchor block that will be used in the transaction - if
107
+ // the chain has already moved past the reorg, we'll also see blocks-added events that will push the anchor
108
+ // forward.
109
+ const newAnchorBlockHeader = await this.node.getBlockHeader(L2BlockHash.fromString(event.block.hash));
110
+
111
+ if (!newAnchorBlockHeader) {
112
+ throw new Error(
113
+ `Block header for block number ${event.block.number} and hash ${event.block.hash} not found during chain prune. This likely indicates a bug in the node, as we receive block stream events and fetch block headers from the same node.`,
114
+ );
115
+ }
116
+
117
+ // Operations are wrapped in a single transaction to ensure atomicity.
118
+ await this.store.transactionAsync(async () => {
119
+ await this.noteStore.rollback(event.block.number, currentAnchorBlockNumber);
120
+ await this.privateEventStore.rollback(event.block.number, currentAnchorBlockNumber);
121
+ await this.updateAnchorBlockHeader(newAnchorBlockHeader);
122
+ });
123
+ break;
124
+ }
125
+ }
126
+ }
127
+
128
+ /** Updates the anchor block header to the target block */
129
+ private async updateAnchorBlockHeader(blockHeader: BlockHeader) {
130
+ this.log.verbose(`Updated pxe last block to ${blockHeader.getBlockNumber()}`, blockHeader.toInspect());
131
+ await this.anchorBlockStore.setHeader(blockHeader);
132
+ }
133
+
134
+ /**
135
+ * Syncs PXE and the node by downloading the metadata of the latest blocks, allowing simulations to use
136
+ * recent data (e.g. notes), and handling any reorgs that might have occurred.
137
+ *
138
+ * Note this BlockSynchronizer is designed to let its users control when a synchronization is run,
139
+ * so this component doesn't proactively stay up to date with the blockchain.
140
+ *
141
+ * We do this so PXE can ensure data consistency.
142
+ */
143
+ public async sync() {
144
+ if (this.isSyncing !== undefined) {
145
+ this.log.debug(`Waiting for the ongoing sync to finish`);
146
+ await this.isSyncing;
147
+ return;
148
+ }
149
+
150
+ this.log.debug(`Syncing PXE with the node`);
151
+ const isSyncing = this.doSync();
152
+ this.isSyncing = isSyncing;
153
+ try {
154
+ await isSyncing;
155
+ } finally {
156
+ this.isSyncing = undefined;
157
+ }
158
+ }
159
+
160
+ private async doSync() {
161
+ let currentHeader;
162
+
163
+ try {
164
+ currentHeader = await this.anchorBlockStore.getBlockHeader();
165
+ } catch {
166
+ this.log.debug('Header is not set, requesting from the node');
167
+ }
168
+ if (!currentHeader) {
169
+ // REFACTOR: We should know the header of the genesis block without having to request it from the node.
170
+ await this.anchorBlockStore.setHeader((await this.node.getBlockHeader(BlockNumber.ZERO))!);
171
+ }
172
+ await this.blockStream.sync();
173
+ }
174
+ }
@@ -0,0 +1 @@
1
+ export * from './block_synchronizer.js';
@@ -19,14 +19,16 @@ export interface KernelProverConfig {
19
19
  }
20
20
 
21
21
  /**
22
- * Configuration settings for the synchronizer.
22
+ * Configuration settings for the block synchronizer.
23
23
  */
24
- export interface SynchronizerConfig {
24
+ export interface BlockSynchronizerConfig {
25
25
  /** Maximum amount of blocks to pull from the stream in one request when synchronizing */
26
26
  l2BlockBatchSize: number;
27
+ /** Which chain tip to sync to (proposed, checkpointed, proven, finalized) */
28
+ syncChainTip?: 'proposed' | 'checkpointed' | 'proven' | 'finalized';
27
29
  }
28
30
 
29
- export type PXEConfig = KernelProverConfig & DataStoreConfig & ChainConfig & SynchronizerConfig;
31
+ export type PXEConfig = KernelProverConfig & DataStoreConfig & ChainConfig & BlockSynchronizerConfig;
30
32
 
31
33
  export type CliPXEOptions = {
32
34
  /** Custom Aztec Node URL to connect to */
@@ -53,6 +55,18 @@ export const pxeConfigMappings: ConfigMappingsType<PXEConfig> = {
53
55
  description: 'Enable real proofs',
54
56
  ...booleanConfigHelper(true),
55
57
  },
58
+ syncChainTip: {
59
+ env: 'PXE_SYNC_CHAIN_TIP',
60
+ description: 'Which chain tip to sync to (proposed, checkpointed, proven, finalized)',
61
+ defaultValue: 'proposed',
62
+ parseEnv: (val: string) => {
63
+ const allowedValues = ['proposed', 'checkpointed', 'proven', 'finalized'];
64
+ if (allowedValues.includes(val)) {
65
+ return val;
66
+ }
67
+ throw new Error(`Invalid value for PXE_SYNC_CHAIN_TIP: ${val}. Allowed values are: ${allowedValues.join(', ')}`);
68
+ },
69
+ },
56
70
  };
57
71
 
58
72
  /**
@@ -1,3 +1,3 @@
1
1
  export function getPackageInfo() {
2
- return { version: '3.0.0', name: '@aztec/pxe' };
2
+ return { version: '4.0.0', name: '@aztec/pxe' };
3
3
  }
@@ -0,0 +1,103 @@
1
+ import { Timer } from '@aztec/foundation/timer';
2
+ import type { AztecNode } from '@aztec/stdlib/interfaces/client';
3
+ import type { NodeStats, RoundTripStats } from '@aztec/stdlib/tx';
4
+
5
+ /*
6
+ * Proxy generator for an AztecNode that tracks the time taken for each RPC call and the number of round trips (actual
7
+ * blocking waits for node responses).
8
+ *
9
+ * A round trip is counted when we transition from 0 to 1 in-flight calls, and ends when all concurrent calls complete.
10
+ * This means parallel calls in Promise.all count as a single round trip.
11
+ *
12
+ * Note that batching of RPC calls in `safe_json_rpc_client.ts` could affect the round trip counts but in places we
13
+ * currently use this information we do not even use HTTP as we have direct access to the Aztec Node instance in TS
14
+ * (i.e. not running against external node) so this is not a problem for now.
15
+ *
16
+ * If you want to use this against external node and the info gets skewed by batching you can set the `maxBatchSize`
17
+ * value in `safe_json_rpc_client.ts` to 1 (the main motivation for batching was to get around parallel http requests
18
+ * limits in web browsers which is not a problem when debugging in node.js).
19
+ */
20
+ export type BenchmarkedNode = AztecNode & { getStats(): NodeStats };
21
+
22
+ export class BenchmarkedNodeFactory {
23
+ static create(node: AztecNode): BenchmarkedNode {
24
+ // Per-method call stats
25
+ const perMethod: Partial<Record<keyof AztecNode, { times: number[] }>> = {};
26
+
27
+ // Round trip tracking
28
+ let inFlightCount = 0;
29
+ let currentRoundTripTimer: Timer | null = null;
30
+ let currentRoundTripMethods: string[] = [];
31
+ const roundTrips: RoundTripStats = {
32
+ roundTrips: 0,
33
+ totalBlockingTime: 0,
34
+ roundTripDurations: [],
35
+ roundTripMethods: [],
36
+ };
37
+
38
+ return new Proxy(node, {
39
+ get(target, prop: keyof BenchmarkedNode) {
40
+ if (prop === 'getStats') {
41
+ return (): NodeStats => {
42
+ return { perMethod, roundTrips };
43
+ };
44
+ } else {
45
+ return function (...args: any[]) {
46
+ // Track per-method stats
47
+ if (!perMethod[prop]) {
48
+ perMethod[prop] = { times: [] };
49
+ }
50
+
51
+ // Start of a new round trip batch?
52
+ if (inFlightCount === 0) {
53
+ roundTrips.roundTrips++;
54
+ currentRoundTripTimer = new Timer();
55
+ currentRoundTripMethods = [];
56
+ }
57
+ inFlightCount++;
58
+ currentRoundTripMethods.push(prop);
59
+
60
+ const callTimer = new Timer();
61
+ const result = (target[prop] as any).apply(target, args);
62
+
63
+ // Handle completion - called when the call finishes (after Promise resolves)
64
+ const handleCompletion = () => {
65
+ const callTime = callTimer.ms();
66
+ perMethod[prop]!.times.push(callTime);
67
+
68
+ inFlightCount--;
69
+
70
+ // End of round trip batch - all concurrent calls completed
71
+ if (inFlightCount === 0 && currentRoundTripTimer) {
72
+ const roundTripTime = currentRoundTripTimer.ms();
73
+ roundTrips.totalBlockingTime += roundTripTime;
74
+ roundTrips.roundTripDurations.push(roundTripTime);
75
+ roundTrips.roundTripMethods.push(currentRoundTripMethods);
76
+ currentRoundTripTimer = null;
77
+ currentRoundTripMethods = [];
78
+ }
79
+ };
80
+
81
+ // If the result is a Promise, chain the completion handler
82
+ if (result && typeof result.then === 'function') {
83
+ return result.then(
84
+ (value: any) => {
85
+ handleCompletion();
86
+ return value;
87
+ },
88
+ (error: any) => {
89
+ handleCompletion();
90
+ throw error;
91
+ },
92
+ );
93
+ } else {
94
+ // Synchronous method - handle completion immediately
95
+ handleCompletion();
96
+ return result;
97
+ }
98
+ };
99
+ }
100
+ },
101
+ }) as BenchmarkedNode;
102
+ }
103
+ }
@@ -17,10 +17,11 @@ import {
17
17
  MAX_PRIVATE_LOGS_PER_TX,
18
18
  } from '@aztec/constants';
19
19
  import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection';
20
- import { poseidon2Hash } from '@aztec/foundation/crypto';
21
- import { Fr } from '@aztec/foundation/fields';
20
+ import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
21
+ import { Fr } from '@aztec/foundation/curves/bn254';
22
22
  import { type Logger, createLogger } from '@aztec/foundation/log';
23
23
  import { Timer } from '@aztec/foundation/timer';
24
+ import type { KeyStore } from '@aztec/key-store';
24
25
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
25
26
  import { protocolContractsHash } from '@aztec/protocol-contracts';
26
27
  import {
@@ -44,6 +45,7 @@ import {
44
45
  siloNoteHash,
45
46
  siloNullifier,
46
47
  } from '@aztec/stdlib/hash';
48
+ import type { AztecNode } from '@aztec/stdlib/interfaces/server';
47
49
  import {
48
50
  PartialPrivateTailPublicInputsForPublic,
49
51
  PartialPrivateTailPublicInputsForRollup,
@@ -59,6 +61,7 @@ import { PrivateLog } from '@aztec/stdlib/logs';
59
61
  import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
60
62
  import { ChonkProof } from '@aztec/stdlib/proofs';
61
63
  import {
64
+ BlockHeader,
62
65
  CallContext,
63
66
  HashedValues,
64
67
  PrivateExecutionResult,
@@ -68,13 +71,21 @@ import {
68
71
  getFinalMinRevertibleSideEffectCounter,
69
72
  } from '@aztec/stdlib/tx';
70
73
 
71
- import type { ContractDataProvider } from '../storage/index.js';
72
- import type { ExecutionDataProvider } from './execution_data_provider.js';
74
+ import type { AddressStore } from '../storage/address_store/address_store.js';
75
+ import type { AnchorBlockStore } from '../storage/anchor_block_store/anchor_block_store.js';
76
+ import type { CapsuleStore } from '../storage/capsule_store/capsule_store.js';
77
+ import type { ContractStore } from '../storage/contract_store/contract_store.js';
78
+ import type { NoteStore } from '../storage/note_store/note_store.js';
79
+ import type { PrivateEventStore } from '../storage/private_event_store/private_event_store.js';
80
+ import type { RecipientTaggingStore } from '../storage/tagging_store/recipient_tagging_store.js';
81
+ import type { SenderAddressBookStore } from '../storage/tagging_store/sender_address_book_store.js';
82
+ import type { SenderTaggingStore } from '../storage/tagging_store/sender_tagging_store.js';
83
+ import type { BenchmarkedNode } from './benchmarked_node.js';
73
84
  import { ExecutionNoteCache } from './execution_note_cache.js';
74
85
  import { ExecutionTaggingIndexCache } from './execution_tagging_index_cache.js';
75
86
  import { HashedValuesCache } from './hashed_values_cache.js';
76
87
  import { Oracle } from './oracle/oracle.js';
77
- import { executePrivateFunction, verifyCurrentClassId } from './oracle/private_execution.js';
88
+ import { executePrivateFunction } from './oracle/private_execution.js';
78
89
  import { PrivateExecutionOracle } from './oracle/private_execution_oracle.js';
79
90
  import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
80
91
 
@@ -85,7 +96,17 @@ export class ContractFunctionSimulator {
85
96
  private log: Logger;
86
97
 
87
98
  constructor(
88
- private executionDataProvider: ExecutionDataProvider,
99
+ private contractStore: ContractStore,
100
+ private noteStore: NoteStore,
101
+ private keyStore: KeyStore,
102
+ private addressStore: AddressStore,
103
+ private aztecNode: AztecNode,
104
+ private anchorBlockStore: AnchorBlockStore,
105
+ private senderTaggingStore: SenderTaggingStore,
106
+ private recipientTaggingStore: RecipientTaggingStore,
107
+ private senderAddressBookStore: SenderAddressBookStore,
108
+ private capsuleStore: CapsuleStore,
109
+ private privateEventStore: PrivateEventStore,
89
110
  private simulator: CircuitSimulator,
90
111
  ) {
91
112
  this.log = createLogger('simulator');
@@ -98,9 +119,11 @@ export class ContractFunctionSimulator {
98
119
  * @param contractAddress - The address of the contract (should match request.origin)
99
120
  * @param msgSender - The address calling the function. This can be replaced to simulate a call from another contract
100
121
  * or a specific account.
122
+ * @param anchorBlockHeader - The block header to use as base state for this run.
101
123
  * @param senderForTags - The address that is used as a tagging sender when emitting private logs. Returned from
102
124
  * the `privateGetSenderForTags` oracle.
103
125
  * @param scopes - The accounts whose notes we can access in this call. Currently optional and will default to all.
126
+ * @param jobId - The job ID for staged writes.
104
127
  * @returns The result of the execution.
105
128
  */
106
129
  public async run(
@@ -108,15 +131,14 @@ export class ContractFunctionSimulator {
108
131
  contractAddress: AztecAddress,
109
132
  selector: FunctionSelector,
110
133
  msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE),
111
- senderForTags?: AztecAddress,
112
- scopes?: AztecAddress[],
134
+ anchorBlockHeader: BlockHeader,
135
+ senderForTags: AztecAddress | undefined,
136
+ scopes: AztecAddress[] | undefined,
137
+ jobId: string,
113
138
  ): Promise<PrivateExecutionResult> {
114
139
  const simulatorSetupTimer = new Timer();
115
- const anchorBlockHeader = await this.executionDataProvider.getAnchorBlockHeader();
116
140
 
117
- await verifyCurrentClassId(contractAddress, this.executionDataProvider);
118
-
119
- const entryPointArtifact = await this.executionDataProvider.getFunctionArtifact(contractAddress, selector);
141
+ const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(contractAddress, selector);
120
142
 
121
143
  if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
122
144
  throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
@@ -147,12 +169,26 @@ export class ContractFunctionSimulator {
147
169
  request.txContext,
148
170
  callContext,
149
171
  anchorBlockHeader,
172
+ async call => {
173
+ await this.runUtility(call, [], anchorBlockHeader, scopes, jobId);
174
+ },
150
175
  request.authWitnesses,
151
176
  request.capsules,
152
177
  HashedValuesCache.create(request.argsOfCalls),
153
178
  noteCache,
154
179
  taggingIndexCache,
155
- this.executionDataProvider,
180
+ this.contractStore,
181
+ this.noteStore,
182
+ this.keyStore,
183
+ this.addressStore,
184
+ this.aztecNode,
185
+ this.anchorBlockStore,
186
+ this.senderTaggingStore,
187
+ this.recipientTaggingStore,
188
+ this.senderAddressBookStore,
189
+ this.capsuleStore,
190
+ this.privateEventStore,
191
+ jobId,
156
192
  0, // totalPublicArgsCount
157
193
  startSideEffectCounter,
158
194
  undefined, // log
@@ -176,8 +212,9 @@ export class ContractFunctionSimulator {
176
212
  request.functionSelector,
177
213
  );
178
214
  const simulatorTeardownTimer = new Timer();
179
- const { usedProtocolNullifierForNonces } = noteCache.finish();
180
- const firstNullifierHint = usedProtocolNullifierForNonces ? Fr.ZERO : noteCache.getAllNullifiers()[0];
215
+
216
+ noteCache.finish();
217
+ const firstNullifierHint = noteCache.getNonceGenerator();
181
218
 
182
219
  const publicCallRequests = collectNested([executionResult], r =>
183
220
  r.publicInputs.publicCallRequests
@@ -213,20 +250,43 @@ export class ContractFunctionSimulator {
213
250
  * Runs a utility function.
214
251
  * @param call - The function call to execute.
215
252
  * @param authwits - Authentication witnesses required for the function call.
253
+ * @param anchorBlockHeader - The block header to use as base state for this run.
216
254
  * @param scopes - Optional array of account addresses whose notes can be accessed in this call. Defaults to all
217
255
  * accounts if not specified.
218
256
  * @returns A return value of the utility function in a form as returned by the simulator (Noir fields)
219
257
  */
220
- public async runUtility(call: FunctionCall, authwits: AuthWitness[], scopes?: AztecAddress[]): Promise<Fr[]> {
221
- await verifyCurrentClassId(call.to, this.executionDataProvider);
222
-
223
- const entryPointArtifact = await this.executionDataProvider.getFunctionArtifact(call.to, call.selector);
258
+ public async runUtility(
259
+ call: FunctionCall,
260
+ authwits: AuthWitness[],
261
+ anchorBlockHeader: BlockHeader,
262
+ scopes: AztecAddress[] | undefined,
263
+ jobId: string,
264
+ ): Promise<Fr[]> {
265
+ const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
224
266
 
225
267
  if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
226
268
  throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
227
269
  }
228
270
 
229
- const oracle = new UtilityExecutionOracle(call.to, authwits, [], this.executionDataProvider, undefined, scopes);
271
+ const oracle = new UtilityExecutionOracle(
272
+ call.to,
273
+ authwits,
274
+ [],
275
+ anchorBlockHeader,
276
+ this.contractStore,
277
+ this.noteStore,
278
+ this.keyStore,
279
+ this.addressStore,
280
+ this.aztecNode,
281
+ this.anchorBlockStore,
282
+ this.recipientTaggingStore,
283
+ this.senderAddressBookStore,
284
+ this.capsuleStore,
285
+ this.privateEventStore,
286
+ jobId,
287
+ undefined,
288
+ scopes,
289
+ );
230
290
 
231
291
  try {
232
292
  this.log.verbose(`Executing utility function ${entryPointArtifact.name}`, {
@@ -258,8 +318,20 @@ export class ContractFunctionSimulator {
258
318
  }
259
319
  // docs:end:execute_utility_function
260
320
 
321
+ /**
322
+ * Returns the execution statistics collected during the simulator run.
323
+ * @returns The execution statistics.
324
+ */
261
325
  getStats() {
262
- return this.executionDataProvider.getStats();
326
+ const nodeRPCCalls =
327
+ typeof (this.aztecNode as BenchmarkedNode).getStats === 'function'
328
+ ? (this.aztecNode as BenchmarkedNode).getStats()
329
+ : {
330
+ perMethod: {},
331
+ roundTrips: { roundTrips: 0, totalBlockingTime: 0, roundTripDurations: [], roundTripMethods: [] },
332
+ };
333
+
334
+ return { nodeRPCCalls };
263
335
  }
264
336
  }
265
337
 
@@ -280,15 +352,15 @@ class OrderedSideEffect<T> {
280
352
  * (allowing state overrides) and is much faster, while still generating a valid
281
353
  * output that can be sent to the node for public simulation
282
354
  * @param privateExecutionResult - The result of the private execution.
283
- * @param nonceGenerator - A nonce generator for note hashes. According to the protocol rules,
284
- * it can either be the first nullifier in the tx or the hash of the initial tx request if there are none.
285
- * @param contractDataProvider - A provider for contract data in order to get function names and debug info.
355
+ * @param contractStore - A provider for contract data in order to get function names and debug info.
356
+ * @param minRevertibleSideEffectCounterOverride - Optional override for the min revertible side effect counter.
357
+ * Used by TXE to simulate account contract behavior (setting the counter before app execution).
286
358
  * @returns The simulated proving result.
287
359
  */
288
360
  export async function generateSimulatedProvingResult(
289
361
  privateExecutionResult: PrivateExecutionResult,
290
- nonceGenerator: Fr,
291
- contractDataProvider: ContractDataProvider,
362
+ contractStore: ContractStore,
363
+ minRevertibleSideEffectCounterOverride?: number,
292
364
  ): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
293
365
  const siloedNoteHashes: OrderedSideEffect<Fr>[] = [];
294
366
  const nullifiers: OrderedSideEffect<Fr>[] = [];
@@ -365,7 +437,7 @@ export async function generateSimulatedProvingResult(
365
437
  : execution.publicInputs.publicTeardownCallRequest;
366
438
 
367
439
  executionSteps.push({
368
- functionName: await contractDataProvider.getDebugFunctionName(
440
+ functionName: await contractStore.getDebugFunctionName(
369
441
  execution.publicInputs.callContext.contractAddress,
370
442
  execution.publicInputs.callContext.functionSelector,
371
443
  ),
@@ -392,16 +464,18 @@ export async function generateSimulatedProvingResult(
392
464
  const getEffect = <T>(orderedSideEffect: OrderedSideEffect<T>) => orderedSideEffect.sideEffect;
393
465
 
394
466
  const isPrivateOnlyTx = privateExecutionResult.publicFunctionCalldata.length === 0;
395
- const minRevertibleSideEffectCounter = getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
467
+ const minRevertibleSideEffectCounter =
468
+ minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
396
469
 
397
470
  const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(
398
471
  nullifiers.sort(sortByCounter),
399
472
  minRevertibleSideEffectCounter,
400
473
  );
401
- if (nonRevertibleNullifiers.length > 0 && !nonRevertibleNullifiers[0].equals(nonceGenerator)) {
474
+ const nonceGenerator = privateExecutionResult.firstNullifier;
475
+ if (nonRevertibleNullifiers.length === 0) {
476
+ nonRevertibleNullifiers.push(nonceGenerator);
477
+ } else if (!nonRevertibleNullifiers[0].equals(nonceGenerator)) {
402
478
  throw new Error('The first non revertible nullifier should be equal to the nonce generator. This is a bug!');
403
- } else {
404
- nonRevertibleNullifiers.unshift(nonceGenerator);
405
479
  }
406
480
 
407
481
  if (isPrivateOnlyTx) {
@@ -437,6 +511,12 @@ export async function generateSimulatedProvingResult(
437
511
  siloedNoteHashes.sort(sortByCounter),
438
512
  minRevertibleSideEffectCounter,
439
513
  );
514
+ const nonRevertibleUniqueNoteHashes = await Promise.all(
515
+ nonRevertibleNoteHashes.map(async (noteHash, i) => {
516
+ const nonce = await computeNoteHashNonce(nonceGenerator, i);
517
+ return await computeUniqueNoteHash(nonce, noteHash);
518
+ }),
519
+ );
440
520
  const [nonRevertibleL2ToL1Messages, revertibleL2ToL1Messages] = splitOrderedSideEffects(
441
521
  l2ToL1Messages.sort(sortByCounter),
442
522
  minRevertibleSideEffectCounter,
@@ -455,7 +535,7 @@ export async function generateSimulatedProvingResult(
455
535
  );
456
536
 
457
537
  const nonRevertibleData = new PrivateToPublicAccumulatedData(
458
- padArrayEnd(nonRevertibleNoteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX),
538
+ padArrayEnd(nonRevertibleUniqueNoteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX),
459
539
  padArrayEnd(nonRevertibleNullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX),
460
540
  padArrayEnd(nonRevertibleL2ToL1Messages, ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX),
461
541
  padArrayEnd(nonRevertibleTaggedPrivateLogs, PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX),
@@ -503,7 +583,7 @@ function splitOrderedSideEffects<T>(effects: OrderedSideEffect<T>[], minRevertib
503
583
  const revertibleSideEffects: T[] = [];
504
584
  const nonRevertibleSideEffects: T[] = [];
505
585
  effects.forEach(effect => {
506
- if (effect.counter < minRevertibleSideEffectCounter) {
586
+ if (minRevertibleSideEffectCounter === 0 || effect.counter < minRevertibleSideEffectCounter) {
507
587
  nonRevertibleSideEffects.push(effect.sideEffect);
508
588
  } else {
509
589
  revertibleSideEffects.push(effect.sideEffect);