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

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 (355) hide show
  1. package/dest/bin/check_oracle_version.js +105 -15
  2. package/dest/block_synchronizer/block_synchronizer.d.ts +41 -0
  3. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -0
  4. package/dest/{synchronizer/synchronizer.js → block_synchronizer/block_synchronizer.js} +35 -30
  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 +4 -4
  9. package/dest/config/index.d.ts.map +1 -1
  10. package/dest/config/package_info.js +1 -1
  11. package/dest/contract_function_simulator/benchmarked_node.d.ts +9 -0
  12. package/dest/contract_function_simulator/benchmarked_node.d.ts.map +1 -0
  13. package/dest/contract_function_simulator/benchmarked_node.js +77 -0
  14. package/dest/contract_function_simulator/contract_function_simulator.d.ts +42 -14
  15. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  16. package/dest/contract_function_simulator/contract_function_simulator.js +73 -29
  17. package/dest/contract_function_simulator/execution_note_cache.d.ts +21 -12
  18. package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
  19. package/dest/contract_function_simulator/execution_note_cache.js +48 -31
  20. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +1 -1
  21. package/dest/contract_function_simulator/execution_tagging_index_cache.js +1 -1
  22. package/dest/contract_function_simulator/hashed_values_cache.d.ts +2 -2
  23. package/dest/contract_function_simulator/hashed_values_cache.d.ts.map +1 -1
  24. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +4 -3
  25. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  26. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +5 -2
  27. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +5 -4
  28. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -1
  29. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +7 -6
  30. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +2 -2
  31. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
  32. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +1 -1
  33. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +2 -2
  34. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  35. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +4 -10
  36. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
  37. package/dest/contract_function_simulator/noir-structs/utility_context.js +7 -18
  38. package/dest/contract_function_simulator/oracle/interfaces.d.ts +14 -13
  39. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  40. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +4 -2
  41. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
  42. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.js +1 -1
  43. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +9 -5
  44. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
  45. package/dest/contract_function_simulator/oracle/note_packing_utils.js +11 -7
  46. package/dest/contract_function_simulator/oracle/oracle.d.ts +7 -7
  47. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  48. package/dest/contract_function_simulator/oracle/oracle.js +37 -25
  49. package/dest/contract_function_simulator/oracle/private_execution.d.ts +10 -16
  50. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  51. package/dest/contract_function_simulator/oracle/private_execution.js +19 -18
  52. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +25 -25
  53. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  54. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +29 -44
  55. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +63 -21
  56. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  57. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +162 -54
  58. package/dest/contract_function_simulator/pick_notes.d.ts +2 -2
  59. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
  60. package/dest/contract_function_simulator/pick_notes.js +1 -1
  61. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +4 -4
  62. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
  63. package/dest/contract_function_simulator/proxied_contract_data_source.js +23 -5
  64. package/dest/debug/pxe_debug_utils.d.ts +31 -0
  65. package/dest/debug/pxe_debug_utils.d.ts.map +1 -0
  66. package/dest/debug/pxe_debug_utils.js +37 -0
  67. package/dest/entrypoints/client/bundle/index.d.ts +1 -2
  68. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  69. package/dest/entrypoints/client/bundle/index.js +0 -1
  70. package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
  71. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  72. package/dest/entrypoints/client/bundle/utils.js +12 -3
  73. package/dest/entrypoints/client/lazy/index.d.ts +1 -2
  74. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  75. package/dest/entrypoints/client/lazy/index.js +0 -1
  76. package/dest/entrypoints/client/lazy/utils.d.ts +1 -1
  77. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  78. package/dest/entrypoints/client/lazy/utils.js +12 -3
  79. package/dest/entrypoints/pxe_creation_options.d.ts +5 -2
  80. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  81. package/dest/entrypoints/server/index.d.ts +3 -2
  82. package/dest/entrypoints/server/index.d.ts.map +1 -1
  83. package/dest/entrypoints/server/index.js +2 -1
  84. package/dest/entrypoints/server/utils.d.ts +1 -1
  85. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  86. package/dest/entrypoints/server/utils.js +12 -8
  87. package/dest/error_enriching.d.ts +4 -4
  88. package/dest/error_enriching.d.ts.map +1 -1
  89. package/dest/error_enriching.js +6 -6
  90. package/dest/events/event_service.d.ts +16 -0
  91. package/dest/events/event_service.d.ts.map +1 -0
  92. package/dest/events/event_service.js +45 -0
  93. package/dest/events/index.d.ts +2 -0
  94. package/dest/events/index.d.ts.map +1 -0
  95. package/dest/events/index.js +1 -0
  96. package/dest/events/private_event_filter_validator.d.ts +9 -0
  97. package/dest/events/private_event_filter_validator.d.ts.map +1 -0
  98. package/dest/events/private_event_filter_validator.js +38 -0
  99. package/dest/job_coordinator/job_coordinator.d.ts +74 -0
  100. package/dest/job_coordinator/job_coordinator.d.ts.map +1 -0
  101. package/dest/job_coordinator/job_coordinator.js +93 -0
  102. package/dest/logs/log_service.d.ts +27 -0
  103. package/dest/logs/log_service.d.ts.map +1 -0
  104. package/dest/logs/log_service.js +122 -0
  105. package/dest/notes/index.d.ts +2 -0
  106. package/dest/notes/index.d.ts.map +1 -0
  107. package/dest/notes/index.js +1 -0
  108. package/dest/notes/note_service.d.ts +48 -0
  109. package/dest/notes/note_service.d.ts.map +1 -0
  110. package/dest/notes/note_service.js +147 -0
  111. package/dest/oracle_version.d.ts +2 -2
  112. package/dest/oracle_version.js +2 -2
  113. package/dest/private_kernel/hints/index.d.ts +2 -2
  114. package/dest/private_kernel/hints/index.d.ts.map +1 -1
  115. package/dest/private_kernel/hints/index.js +1 -1
  116. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +28 -0
  117. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
  118. package/dest/private_kernel/hints/{build_private_kernel_reset_private_inputs.js → private_kernel_reset_private_inputs_builder.js} +13 -7
  119. package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
  120. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  121. package/dest/private_kernel/private_kernel_execution_prover.js +8 -9
  122. package/dest/private_kernel/private_kernel_oracle.d.ts +26 -29
  123. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  124. package/dest/private_kernel/private_kernel_oracle.js +90 -2
  125. package/dest/pxe.d.ts +45 -81
  126. package/dest/pxe.d.ts.map +1 -1
  127. package/dest/pxe.js +182 -215
  128. package/dest/storage/address_store/address_store.d.ts +11 -0
  129. package/dest/storage/address_store/address_store.d.ts.map +1 -0
  130. package/dest/storage/{address_data_provider/address_data_provider.js → address_store/address_store.js} +1 -1
  131. package/dest/storage/address_store/index.d.ts +2 -0
  132. package/dest/storage/address_store/index.d.ts.map +1 -0
  133. package/dest/storage/address_store/index.js +1 -0
  134. package/dest/storage/{sync_data_provider/sync_data_provider.d.ts → anchor_block_store/anchor_block_store.d.ts} +2 -4
  135. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -0
  136. package/dest/storage/{sync_data_provider/sync_data_provider.js → anchor_block_store/anchor_block_store.js} +2 -9
  137. package/dest/storage/{sync_data_provider → anchor_block_store}/index.d.ts +2 -2
  138. package/dest/storage/anchor_block_store/index.d.ts.map +1 -0
  139. package/dest/storage/anchor_block_store/index.js +1 -0
  140. package/dest/storage/capsule_store/capsule_store.d.ts +72 -0
  141. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -0
  142. package/dest/storage/capsule_store/capsule_store.js +255 -0
  143. package/dest/storage/capsule_store/index.d.ts +2 -0
  144. package/dest/storage/capsule_store/index.d.ts.map +1 -0
  145. package/dest/storage/capsule_store/index.js +1 -0
  146. package/dest/storage/{contract_data_provider/contract_data_provider.d.ts → contract_store/contract_store.d.ts} +8 -5
  147. package/dest/storage/contract_store/contract_store.d.ts.map +1 -0
  148. package/dest/storage/{contract_data_provider/contract_data_provider.js → contract_store/contract_store.js} +46 -3
  149. package/dest/storage/contract_store/index.d.ts +2 -0
  150. package/dest/storage/contract_store/index.d.ts.map +1 -0
  151. package/dest/storage/contract_store/index.js +1 -0
  152. package/dest/storage/{contract_data_provider → contract_store}/private_functions_tree.d.ts +1 -1
  153. package/dest/storage/contract_store/private_functions_tree.d.ts.map +1 -0
  154. package/dest/storage/{contract_data_provider → contract_store}/private_functions_tree.js +1 -1
  155. package/dest/storage/index.d.ts +8 -8
  156. package/dest/storage/index.d.ts.map +1 -1
  157. package/dest/storage/index.js +7 -7
  158. package/dest/storage/note_store/index.d.ts +3 -0
  159. package/dest/storage/note_store/index.d.ts.map +1 -0
  160. package/dest/storage/note_store/index.js +2 -0
  161. package/dest/storage/{note_data_provider/note_data_provider.d.ts → note_store/note_store.d.ts} +15 -13
  162. package/dest/storage/note_store/note_store.d.ts.map +1 -0
  163. package/dest/storage/{note_data_provider/note_data_provider.js → note_store/note_store.js} +105 -102
  164. package/dest/storage/private_event_store/private_event_store.d.ts +78 -0
  165. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -0
  166. package/dest/storage/private_event_store/private_event_store.js +222 -0
  167. package/dest/storage/tagging_store/index.d.ts +4 -0
  168. package/dest/storage/tagging_store/index.d.ts.map +1 -0
  169. package/dest/storage/tagging_store/index.js +3 -0
  170. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +28 -0
  171. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -0
  172. package/dest/storage/tagging_store/recipient_tagging_store.js +99 -0
  173. package/dest/storage/tagging_store/sender_address_book_store.d.ts +14 -0
  174. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -0
  175. package/dest/storage/tagging_store/sender_address_book_store.js +30 -0
  176. package/dest/storage/tagging_store/sender_tagging_store.d.ts +77 -0
  177. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -0
  178. package/dest/storage/tagging_store/sender_tagging_store.js +278 -0
  179. package/dest/tagging/constants.d.ts +2 -2
  180. package/dest/tagging/constants.d.ts.map +1 -1
  181. package/dest/tagging/constants.js +10 -2
  182. package/dest/tagging/index.d.ts +15 -6
  183. package/dest/tagging/index.d.ts.map +1 -1
  184. package/dest/tagging/index.js +14 -5
  185. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +14 -0
  186. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -0
  187. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +99 -0
  188. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +12 -0
  189. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -0
  190. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +20 -0
  191. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +14 -0
  192. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -0
  193. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +29 -0
  194. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +20 -0
  195. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -0
  196. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +74 -0
  197. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +11 -0
  198. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -0
  199. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +32 -0
  200. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +20 -0
  201. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -0
  202. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +57 -0
  203. package/dest/tree_membership/tree_membership_service.d.ts +50 -0
  204. package/dest/tree_membership/tree_membership_service.d.ts.map +1 -0
  205. package/dest/tree_membership/tree_membership_service.js +75 -0
  206. package/package.json +18 -18
  207. package/src/bin/check_oracle_version.ts +130 -20
  208. package/src/{synchronizer/synchronizer.ts → block_synchronizer/block_synchronizer.ts} +44 -30
  209. package/src/block_synchronizer/index.ts +1 -0
  210. package/src/config/index.ts +3 -3
  211. package/src/config/package_info.ts +1 -1
  212. package/src/contract_function_simulator/benchmarked_node.ts +103 -0
  213. package/src/contract_function_simulator/contract_function_simulator.ts +118 -30
  214. package/src/contract_function_simulator/execution_note_cache.ts +51 -29
  215. package/src/contract_function_simulator/execution_tagging_index_cache.ts +1 -1
  216. package/src/contract_function_simulator/hashed_values_cache.ts +1 -1
  217. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +5 -1
  218. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +6 -5
  219. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +1 -1
  220. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +1 -1
  221. package/src/contract_function_simulator/noir-structs/utility_context.ts +6 -25
  222. package/src/contract_function_simulator/oracle/interfaces.ts +13 -12
  223. package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +1 -1
  224. package/src/contract_function_simulator/oracle/note_packing_utils.ts +23 -9
  225. package/src/contract_function_simulator/oracle/oracle.ts +44 -28
  226. package/src/contract_function_simulator/oracle/private_execution.ts +22 -30
  227. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +97 -58
  228. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +233 -63
  229. package/src/contract_function_simulator/pick_notes.ts +1 -1
  230. package/src/contract_function_simulator/proxied_contract_data_source.ts +24 -7
  231. package/src/debug/pxe_debug_utils.ts +48 -0
  232. package/src/entrypoints/client/bundle/index.ts +0 -1
  233. package/src/entrypoints/client/bundle/utils.ts +9 -3
  234. package/src/entrypoints/client/lazy/index.ts +0 -1
  235. package/src/entrypoints/client/lazy/utils.ts +9 -4
  236. package/src/entrypoints/pxe_creation_options.ts +4 -1
  237. package/src/entrypoints/server/index.ts +2 -1
  238. package/src/entrypoints/server/utils.ts +12 -16
  239. package/src/error_enriching.ts +7 -15
  240. package/src/events/event_service.ts +73 -0
  241. package/src/events/index.ts +1 -0
  242. package/src/events/private_event_filter_validator.ts +46 -0
  243. package/src/job_coordinator/job_coordinator.ts +149 -0
  244. package/src/logs/log_service.ts +204 -0
  245. package/src/notes/index.ts +1 -0
  246. package/src/notes/note_service.ts +194 -0
  247. package/src/oracle_version.ts +2 -2
  248. package/src/private_kernel/hints/index.ts +1 -1
  249. package/src/private_kernel/hints/{build_private_kernel_reset_private_inputs.ts → private_kernel_reset_private_inputs_builder.ts} +34 -23
  250. package/src/private_kernel/private_kernel_execution_prover.ts +7 -9
  251. package/src/private_kernel/private_kernel_oracle.ts +118 -37
  252. package/src/pxe.ts +233 -279
  253. package/src/storage/{address_data_provider/address_data_provider.ts → address_store/address_store.ts} +1 -1
  254. package/src/storage/address_store/index.ts +1 -0
  255. package/src/storage/{sync_data_provider/sync_data_provider.ts → anchor_block_store/anchor_block_store.ts} +2 -12
  256. package/src/storage/anchor_block_store/index.ts +1 -0
  257. package/src/storage/capsule_store/capsule_store.ts +315 -0
  258. package/src/storage/capsule_store/index.ts +1 -0
  259. package/src/storage/{contract_data_provider/contract_data_provider.ts → contract_store/contract_store.ts} +65 -3
  260. package/src/storage/contract_store/index.ts +1 -0
  261. package/src/storage/{contract_data_provider → contract_store}/private_functions_tree.ts +1 -1
  262. package/src/storage/index.ts +7 -7
  263. package/src/storage/note_store/index.ts +2 -0
  264. package/src/storage/{note_data_provider/note_data_provider.ts → note_store/note_store.ts} +117 -105
  265. package/src/storage/private_event_store/private_event_store.ts +324 -0
  266. package/src/storage/tagging_store/index.ts +3 -0
  267. package/src/storage/tagging_store/recipient_tagging_store.ts +129 -0
  268. package/src/storage/tagging_store/sender_address_book_store.ts +42 -0
  269. package/src/storage/tagging_store/sender_tagging_store.ts +345 -0
  270. package/src/tagging/constants.ts +10 -2
  271. package/src/tagging/index.ts +17 -5
  272. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +133 -0
  273. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +34 -0
  274. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +43 -0
  275. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +97 -0
  276. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +48 -0
  277. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +75 -0
  278. package/src/tree_membership/tree_membership_service.ts +97 -0
  279. package/dest/contract_function_simulator/execution_data_provider.d.ts +0 -267
  280. package/dest/contract_function_simulator/execution_data_provider.d.ts.map +0 -1
  281. package/dest/contract_function_simulator/execution_data_provider.js +0 -14
  282. package/dest/contract_function_simulator/proxied_node.d.ts +0 -9
  283. package/dest/contract_function_simulator/proxied_node.d.ts.map +0 -1
  284. package/dest/contract_function_simulator/proxied_node.js +0 -27
  285. package/dest/contract_function_simulator/pxe_oracle_interface.d.ts +0 -123
  286. package/dest/contract_function_simulator/pxe_oracle_interface.d.ts.map +0 -1
  287. package/dest/contract_function_simulator/pxe_oracle_interface.js +0 -696
  288. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +0 -28
  289. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
  290. package/dest/private_kernel/private_kernel_oracle_impl.d.ts +0 -45
  291. package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +0 -1
  292. package/dest/private_kernel/private_kernel_oracle_impl.js +0 -86
  293. package/dest/storage/address_data_provider/address_data_provider.d.ts +0 -11
  294. package/dest/storage/address_data_provider/address_data_provider.d.ts.map +0 -1
  295. package/dest/storage/address_data_provider/index.d.ts +0 -2
  296. package/dest/storage/address_data_provider/index.d.ts.map +0 -1
  297. package/dest/storage/address_data_provider/index.js +0 -1
  298. package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts +0 -25
  299. package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts.map +0 -1
  300. package/dest/storage/capsule_data_provider/capsule_data_provider.js +0 -118
  301. package/dest/storage/capsule_data_provider/index.d.ts +0 -2
  302. package/dest/storage/capsule_data_provider/index.d.ts.map +0 -1
  303. package/dest/storage/capsule_data_provider/index.js +0 -1
  304. package/dest/storage/contract_data_provider/contract_data_provider.d.ts.map +0 -1
  305. package/dest/storage/contract_data_provider/index.d.ts +0 -2
  306. package/dest/storage/contract_data_provider/index.d.ts.map +0 -1
  307. package/dest/storage/contract_data_provider/index.js +0 -1
  308. package/dest/storage/contract_data_provider/private_functions_tree.d.ts.map +0 -1
  309. package/dest/storage/note_data_provider/index.d.ts +0 -3
  310. package/dest/storage/note_data_provider/index.d.ts.map +0 -1
  311. package/dest/storage/note_data_provider/index.js +0 -2
  312. package/dest/storage/note_data_provider/note_data_provider.d.ts.map +0 -1
  313. package/dest/storage/private_event_data_provider/private_event_data_provider.d.ts +0 -37
  314. package/dest/storage/private_event_data_provider/private_event_data_provider.d.ts.map +0 -1
  315. package/dest/storage/private_event_data_provider/private_event_data_provider.js +0 -105
  316. package/dest/storage/sync_data_provider/index.d.ts.map +0 -1
  317. package/dest/storage/sync_data_provider/index.js +0 -1
  318. package/dest/storage/sync_data_provider/sync_data_provider.d.ts.map +0 -1
  319. package/dest/storage/tagging_data_provider/index.d.ts +0 -2
  320. package/dest/storage/tagging_data_provider/index.d.ts.map +0 -1
  321. package/dest/storage/tagging_data_provider/index.js +0 -1
  322. package/dest/storage/tagging_data_provider/tagging_data_provider.d.ts +0 -40
  323. package/dest/storage/tagging_data_provider/tagging_data_provider.d.ts.map +0 -1
  324. package/dest/storage/tagging_data_provider/tagging_data_provider.js +0 -89
  325. package/dest/synchronizer/index.d.ts +0 -2
  326. package/dest/synchronizer/index.d.ts.map +0 -1
  327. package/dest/synchronizer/index.js +0 -1
  328. package/dest/synchronizer/synchronizer.d.ts +0 -36
  329. package/dest/synchronizer/synchronizer.d.ts.map +0 -1
  330. package/dest/tagging/siloed_tag.d.ts +0 -14
  331. package/dest/tagging/siloed_tag.d.ts.map +0 -1
  332. package/dest/tagging/siloed_tag.js +0 -20
  333. package/dest/tagging/tag.d.ts +0 -12
  334. package/dest/tagging/tag.d.ts.map +0 -1
  335. package/dest/tagging/tag.js +0 -17
  336. package/dest/tagging/utils.d.ts +0 -18
  337. package/dest/tagging/utils.d.ts.map +0 -1
  338. package/dest/tagging/utils.js +0 -24
  339. package/src/contract_function_simulator/execution_data_provider.ts +0 -342
  340. package/src/contract_function_simulator/proxied_node.ts +0 -33
  341. package/src/contract_function_simulator/pxe_oracle_interface.ts +0 -1023
  342. package/src/private_kernel/private_kernel_oracle_impl.ts +0 -132
  343. package/src/storage/address_data_provider/index.ts +0 -1
  344. package/src/storage/capsule_data_provider/capsule_data_provider.ts +0 -147
  345. package/src/storage/capsule_data_provider/index.ts +0 -1
  346. package/src/storage/contract_data_provider/index.ts +0 -1
  347. package/src/storage/note_data_provider/index.ts +0 -2
  348. package/src/storage/private_event_data_provider/private_event_data_provider.ts +0 -143
  349. package/src/storage/sync_data_provider/index.ts +0 -1
  350. package/src/storage/tagging_data_provider/index.ts +0 -1
  351. package/src/storage/tagging_data_provider/tagging_data_provider.ts +0 -120
  352. package/src/synchronizer/index.ts +0 -1
  353. package/src/tagging/siloed_tag.ts +0 -22
  354. package/src/tagging/tag.ts +0 -16
  355. package/src/tagging/utils.ts +0 -31
@@ -1,36 +1,43 @@
1
1
  import { BlockNumber } from '@aztec/foundation/branded-types';
2
2
  import { type Logger, createLogger } from '@aztec/foundation/log';
3
+ import type { AztecAsyncKVStore } from '@aztec/kv-store';
3
4
  import type { L2TipsKVStore } from '@aztec/kv-store/stores';
4
- import { L2BlockStream, type L2BlockStreamEvent, type L2BlockStreamEventHandler } from '@aztec/stdlib/block';
5
+ import {
6
+ L2BlockHash,
7
+ L2BlockStream,
8
+ type L2BlockStreamEvent,
9
+ type L2BlockStreamEventHandler,
10
+ } from '@aztec/stdlib/block';
5
11
  import type { AztecNode } from '@aztec/stdlib/interfaces/client';
6
12
 
7
13
  import type { PXEConfig } from '../config/index.js';
8
- import type { NoteDataProvider } from '../storage/note_data_provider/note_data_provider.js';
9
- import type { SyncDataProvider } from '../storage/sync_data_provider/sync_data_provider.js';
10
- import type { TaggingDataProvider } from '../storage/tagging_data_provider/tagging_data_provider.js';
14
+ import type { AnchorBlockStore } from '../storage/anchor_block_store/anchor_block_store.js';
15
+ import type { NoteStore } from '../storage/note_store/note_store.js';
16
+ import type { PrivateEventStore } from '../storage/private_event_store/private_event_store.js';
11
17
 
12
18
  /**
13
- * The Synchronizer class orchestrates synchronization between the PXE and Aztec node, maintaining an up-to-date
19
+ * The BlockSynchronizer class orchestrates synchronization between PXE and Aztec node, maintaining an up-to-date
14
20
  * view of the L2 chain state. It handles block header retrieval, chain reorganizations, and provides an interface
15
21
  * for querying sync status.
16
22
  */
17
- export class Synchronizer implements L2BlockStreamEventHandler {
23
+ export class BlockSynchronizer implements L2BlockStreamEventHandler {
18
24
  private log: Logger;
19
25
  private isSyncing: Promise<void> | undefined;
20
26
  protected readonly blockStream: L2BlockStream;
21
27
 
22
28
  constructor(
23
29
  private node: AztecNode,
24
- private syncDataProvider: SyncDataProvider,
25
- private noteDataProvider: NoteDataProvider,
26
- private taggingDataProvider: TaggingDataProvider,
30
+ private store: AztecAsyncKVStore,
31
+ private anchorBlockStore: AnchorBlockStore,
32
+ private noteStore: NoteStore,
33
+ private privateEventStore: PrivateEventStore,
27
34
  private l2TipsStore: L2TipsKVStore,
28
35
  config: Partial<Pick<PXEConfig, 'l2BlockBatchSize'>> = {},
29
36
  loggerOrSuffix?: string | Logger,
30
37
  ) {
31
38
  this.log =
32
39
  !loggerOrSuffix || typeof loggerOrSuffix === 'string'
33
- ? createLogger(loggerOrSuffix ? `pxe:synchronizer:${loggerOrSuffix}` : `pxe:synchronizer`)
40
+ ? createLogger(loggerOrSuffix ? `pxe:block_synchronizer:${loggerOrSuffix}` : `pxe:block_synchronizer`)
34
41
  : loggerOrSuffix;
35
42
  this.blockStream = this.createBlockStream(config);
36
43
  }
@@ -50,30 +57,36 @@ export class Synchronizer implements L2BlockStreamEventHandler {
50
57
 
51
58
  switch (event.type) {
52
59
  case 'blocks-added': {
53
- const lastBlock = event.blocks.at(-1)!.block;
60
+ const lastBlock = event.blocks.at(-1)!;
54
61
  this.log.verbose(`Updated pxe last block to ${lastBlock.number}`, {
55
62
  blockHash: lastBlock.hash(),
56
63
  archive: lastBlock.archive.root.toString(),
57
64
  header: lastBlock.header.toInspect(),
58
65
  });
59
- await this.syncDataProvider.setHeader(lastBlock.getBlockHeader());
66
+ await this.anchorBlockStore.setHeader(lastBlock.header);
60
67
  break;
61
68
  }
62
69
  case 'chain-pruned': {
63
70
  this.log.warn(`Pruning data after block ${event.block.number} due to reorg`);
64
- // We first unnullify and then remove so that unnullified notes that were created after the block number end up deleted.
65
- const lastSynchedBlockNumber = await this.syncDataProvider.getBlockNumber();
66
- await this.noteDataProvider.rollbackNotesAndNullifiers(event.block.number, lastSynchedBlockNumber);
67
- // Remove all note tagging indexes to force a full resync. This is suboptimal, but unless we track the
68
- // block number in which each index is used it's all we can do.
69
- await this.taggingDataProvider.resetNoteSyncData();
70
- // Update the header to the last block.
71
- const newHeader = await this.node.getBlockHeader(event.block.number);
72
- if (!newHeader) {
73
- this.log.error(`Block header not found for block number ${event.block.number} during chain prune`);
74
- } else {
75
- await this.syncDataProvider.setHeader(newHeader);
71
+
72
+ const oldAnchorBlockNumber = (await this.anchorBlockStore.getBlockHeader()).getBlockNumber();
73
+ // Note that the following is not necessarily the anchor block that will be used in the transaction - if
74
+ // the chain has already moved past the reorg, we'll also see blocks-added events that will push the anchor
75
+ // forward.
76
+ const newAnchorBlockHeader = await this.node.getBlockHeader(L2BlockHash.fromString(event.block.hash));
77
+
78
+ if (!newAnchorBlockHeader) {
79
+ throw new Error(
80
+ `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.`,
81
+ );
76
82
  }
83
+
84
+ // Operations are wrapped in a single transaction to ensure atomicity.
85
+ await this.store.transactionAsync(async () => {
86
+ await this.noteStore.rollback(event.block.number, oldAnchorBlockNumber);
87
+ await this.privateEventStore.rollback(event.block.number, oldAnchorBlockNumber);
88
+ await this.anchorBlockStore.setHeader(newAnchorBlockHeader);
89
+ });
77
90
  break;
78
91
  }
79
92
  }
@@ -82,6 +95,11 @@ export class Synchronizer implements L2BlockStreamEventHandler {
82
95
  /**
83
96
  * Syncs PXE and the node by downloading the metadata of the latest blocks, allowing simulations to use
84
97
  * recent data (e.g. notes), and handling any reorgs that might have occurred.
98
+ *
99
+ * Note this BlockSynchronizer is designed to let its users control when a synchronization is run,
100
+ * so this component doesn't proactively stay up to date with the blockchain.
101
+ *
102
+ * We do this so PXE can ensure data consistency.
85
103
  */
86
104
  public async sync() {
87
105
  if (this.isSyncing !== undefined) {
@@ -104,18 +122,14 @@ export class Synchronizer implements L2BlockStreamEventHandler {
104
122
  let currentHeader;
105
123
 
106
124
  try {
107
- currentHeader = await this.syncDataProvider.getBlockHeader();
125
+ currentHeader = await this.anchorBlockStore.getBlockHeader();
108
126
  } catch {
109
127
  this.log.debug('Header is not set, requesting from the node');
110
128
  }
111
129
  if (!currentHeader) {
112
130
  // REFACTOR: We should know the header of the genesis block without having to request it from the node.
113
- await this.syncDataProvider.setHeader((await this.node.getBlockHeader(BlockNumber.ZERO))!);
131
+ await this.anchorBlockStore.setHeader((await this.node.getBlockHeader(BlockNumber.ZERO))!);
114
132
  }
115
133
  await this.blockStream.sync();
116
134
  }
117
-
118
- public getSynchedBlockNumber() {
119
- return this.syncDataProvider.getBlockNumber();
120
- }
121
135
  }
@@ -0,0 +1 @@
1
+ export * from './block_synchronizer.js';
@@ -19,14 +19,14 @@ 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
27
  }
28
28
 
29
- export type PXEConfig = KernelProverConfig & DataStoreConfig & ChainConfig & SynchronizerConfig;
29
+ export type PXEConfig = KernelProverConfig & DataStoreConfig & ChainConfig & BlockSynchronizerConfig;
30
30
 
31
31
  export type CliPXEOptions = {
32
32
  /** Custom Aztec Node URL to connect to */
@@ -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,8 +71,16 @@ 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';
@@ -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,20 @@ 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);
141
+ await this.contractStore.syncPrivateState(contractAddress, selector, privateSyncCall =>
142
+ this.runUtility(privateSyncCall, [], anchorBlockHeader, scopes, jobId),
143
+ );
144
+
145
+ await verifyCurrentClassId(contractAddress, this.aztecNode, this.contractStore, anchorBlockHeader);
118
146
 
119
- const entryPointArtifact = await this.executionDataProvider.getFunctionArtifact(contractAddress, selector);
147
+ const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(contractAddress, selector);
120
148
 
121
149
  if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
122
150
  throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
@@ -147,12 +175,26 @@ export class ContractFunctionSimulator {
147
175
  request.txContext,
148
176
  callContext,
149
177
  anchorBlockHeader,
178
+ async call => {
179
+ await this.runUtility(call, [], anchorBlockHeader, scopes, jobId);
180
+ },
150
181
  request.authWitnesses,
151
182
  request.capsules,
152
183
  HashedValuesCache.create(request.argsOfCalls),
153
184
  noteCache,
154
185
  taggingIndexCache,
155
- this.executionDataProvider,
186
+ this.contractStore,
187
+ this.noteStore,
188
+ this.keyStore,
189
+ this.addressStore,
190
+ this.aztecNode,
191
+ this.anchorBlockStore,
192
+ this.senderTaggingStore,
193
+ this.recipientTaggingStore,
194
+ this.senderAddressBookStore,
195
+ this.capsuleStore,
196
+ this.privateEventStore,
197
+ jobId,
156
198
  0, // totalPublicArgsCount
157
199
  startSideEffectCounter,
158
200
  undefined, // log
@@ -176,8 +218,9 @@ export class ContractFunctionSimulator {
176
218
  request.functionSelector,
177
219
  );
178
220
  const simulatorTeardownTimer = new Timer();
179
- const { usedProtocolNullifierForNonces } = noteCache.finish();
180
- const firstNullifierHint = usedProtocolNullifierForNonces ? Fr.ZERO : noteCache.getAllNullifiers()[0];
221
+
222
+ noteCache.finish();
223
+ const firstNullifierHint = noteCache.getNonceGenerator();
181
224
 
182
225
  const publicCallRequests = collectNested([executionResult], r =>
183
226
  r.publicInputs.publicCallRequests
@@ -213,20 +256,45 @@ export class ContractFunctionSimulator {
213
256
  * Runs a utility function.
214
257
  * @param call - The function call to execute.
215
258
  * @param authwits - Authentication witnesses required for the function call.
259
+ * @param anchorBlockHeader - The block header to use as base state for this run.
216
260
  * @param scopes - Optional array of account addresses whose notes can be accessed in this call. Defaults to all
217
261
  * accounts if not specified.
218
262
  * @returns A return value of the utility function in a form as returned by the simulator (Noir fields)
219
263
  */
220
- public async runUtility(call: FunctionCall, authwits: AuthWitness[], scopes?: AztecAddress[]): Promise<Fr[]> {
221
- await verifyCurrentClassId(call.to, this.executionDataProvider);
264
+ public async runUtility(
265
+ call: FunctionCall,
266
+ authwits: AuthWitness[],
267
+ anchorBlockHeader: BlockHeader,
268
+ scopes: AztecAddress[] | undefined,
269
+ jobId: string,
270
+ ): Promise<Fr[]> {
271
+ await verifyCurrentClassId(call.to, this.aztecNode, this.contractStore, anchorBlockHeader);
222
272
 
223
- const entryPointArtifact = await this.executionDataProvider.getFunctionArtifact(call.to, call.selector);
273
+ const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
224
274
 
225
275
  if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
226
276
  throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
227
277
  }
228
278
 
229
- const oracle = new UtilityExecutionOracle(call.to, authwits, [], this.executionDataProvider, undefined, scopes);
279
+ const oracle = new UtilityExecutionOracle(
280
+ call.to,
281
+ authwits,
282
+ [],
283
+ anchorBlockHeader,
284
+ this.contractStore,
285
+ this.noteStore,
286
+ this.keyStore,
287
+ this.addressStore,
288
+ this.aztecNode,
289
+ this.anchorBlockStore,
290
+ this.recipientTaggingStore,
291
+ this.senderAddressBookStore,
292
+ this.capsuleStore,
293
+ this.privateEventStore,
294
+ jobId,
295
+ undefined,
296
+ scopes,
297
+ );
230
298
 
231
299
  try {
232
300
  this.log.verbose(`Executing utility function ${entryPointArtifact.name}`, {
@@ -258,8 +326,20 @@ export class ContractFunctionSimulator {
258
326
  }
259
327
  // docs:end:execute_utility_function
260
328
 
329
+ /**
330
+ * Returns the execution statistics collected during the simulator run.
331
+ * @returns The execution statistics.
332
+ */
261
333
  getStats() {
262
- return this.executionDataProvider.getStats();
334
+ const nodeRPCCalls =
335
+ typeof (this.aztecNode as BenchmarkedNode).getStats === 'function'
336
+ ? (this.aztecNode as BenchmarkedNode).getStats()
337
+ : {
338
+ perMethod: {},
339
+ roundTrips: { roundTrips: 0, totalBlockingTime: 0, roundTripDurations: [], roundTripMethods: [] },
340
+ };
341
+
342
+ return { nodeRPCCalls };
263
343
  }
264
344
  }
265
345
 
@@ -280,15 +360,15 @@ class OrderedSideEffect<T> {
280
360
  * (allowing state overrides) and is much faster, while still generating a valid
281
361
  * output that can be sent to the node for public simulation
282
362
  * @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.
363
+ * @param contractStore - A provider for contract data in order to get function names and debug info.
364
+ * @param minRevertibleSideEffectCounterOverride - Optional override for the min revertible side effect counter.
365
+ * Used by TXE to simulate account contract behavior (setting the counter before app execution).
286
366
  * @returns The simulated proving result.
287
367
  */
288
368
  export async function generateSimulatedProvingResult(
289
369
  privateExecutionResult: PrivateExecutionResult,
290
- nonceGenerator: Fr,
291
- contractDataProvider: ContractDataProvider,
370
+ contractStore: ContractStore,
371
+ minRevertibleSideEffectCounterOverride?: number,
292
372
  ): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
293
373
  const siloedNoteHashes: OrderedSideEffect<Fr>[] = [];
294
374
  const nullifiers: OrderedSideEffect<Fr>[] = [];
@@ -365,7 +445,7 @@ export async function generateSimulatedProvingResult(
365
445
  : execution.publicInputs.publicTeardownCallRequest;
366
446
 
367
447
  executionSteps.push({
368
- functionName: await contractDataProvider.getDebugFunctionName(
448
+ functionName: await contractStore.getDebugFunctionName(
369
449
  execution.publicInputs.callContext.contractAddress,
370
450
  execution.publicInputs.callContext.functionSelector,
371
451
  ),
@@ -392,16 +472,18 @@ export async function generateSimulatedProvingResult(
392
472
  const getEffect = <T>(orderedSideEffect: OrderedSideEffect<T>) => orderedSideEffect.sideEffect;
393
473
 
394
474
  const isPrivateOnlyTx = privateExecutionResult.publicFunctionCalldata.length === 0;
395
- const minRevertibleSideEffectCounter = getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
475
+ const minRevertibleSideEffectCounter =
476
+ minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
396
477
 
397
478
  const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(
398
479
  nullifiers.sort(sortByCounter),
399
480
  minRevertibleSideEffectCounter,
400
481
  );
401
- if (nonRevertibleNullifiers.length > 0 && !nonRevertibleNullifiers[0].equals(nonceGenerator)) {
482
+ const nonceGenerator = privateExecutionResult.firstNullifier;
483
+ if (nonRevertibleNullifiers.length === 0) {
484
+ nonRevertibleNullifiers.push(nonceGenerator);
485
+ } else if (!nonRevertibleNullifiers[0].equals(nonceGenerator)) {
402
486
  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
487
  }
406
488
 
407
489
  if (isPrivateOnlyTx) {
@@ -437,6 +519,12 @@ export async function generateSimulatedProvingResult(
437
519
  siloedNoteHashes.sort(sortByCounter),
438
520
  minRevertibleSideEffectCounter,
439
521
  );
522
+ const nonRevertibleUniqueNoteHashes = await Promise.all(
523
+ nonRevertibleNoteHashes.map(async (noteHash, i) => {
524
+ const nonce = await computeNoteHashNonce(nonceGenerator, i);
525
+ return await computeUniqueNoteHash(nonce, noteHash);
526
+ }),
527
+ );
440
528
  const [nonRevertibleL2ToL1Messages, revertibleL2ToL1Messages] = splitOrderedSideEffects(
441
529
  l2ToL1Messages.sort(sortByCounter),
442
530
  minRevertibleSideEffectCounter,
@@ -455,7 +543,7 @@ export async function generateSimulatedProvingResult(
455
543
  );
456
544
 
457
545
  const nonRevertibleData = new PrivateToPublicAccumulatedData(
458
- padArrayEnd(nonRevertibleNoteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX),
546
+ padArrayEnd(nonRevertibleUniqueNoteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX),
459
547
  padArrayEnd(nonRevertibleNullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX),
460
548
  padArrayEnd(nonRevertibleL2ToL1Messages, ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX),
461
549
  padArrayEnd(nonRevertibleTaggedPrivateLogs, PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX),
@@ -503,7 +591,7 @@ function splitOrderedSideEffects<T>(effects: OrderedSideEffect<T>[], minRevertib
503
591
  const revertibleSideEffects: T[] = [];
504
592
  const nonRevertibleSideEffects: T[] = [];
505
593
  effects.forEach(effect => {
506
- if (effect.counter < minRevertibleSideEffectCounter) {
594
+ if (minRevertibleSideEffectCounter === 0 || effect.counter < minRevertibleSideEffectCounter) {
507
595
  nonRevertibleSideEffects.push(effect.sideEffect);
508
596
  } else {
509
597
  revertibleSideEffects.push(effect.sideEffect);