@aztec/pxe 0.0.1-commit.24de95ac → 0.0.1-commit.3469e52

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 (374) hide show
  1. package/dest/bin/check_oracle_version.d.ts +1 -1
  2. package/dest/bin/check_oracle_version.js +105 -15
  3. package/dest/block_synchronizer/block_synchronizer.d.ts +41 -0
  4. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -0
  5. package/dest/{synchronizer/synchronizer.js → block_synchronizer/block_synchronizer.js} +36 -30
  6. package/dest/block_synchronizer/index.d.ts +2 -0
  7. package/dest/block_synchronizer/index.d.ts.map +1 -0
  8. package/dest/block_synchronizer/index.js +1 -0
  9. package/dest/config/index.d.ts +4 -12
  10. package/dest/config/index.d.ts.map +1 -1
  11. package/dest/config/index.js +7 -13
  12. package/dest/config/package_info.d.ts +1 -1
  13. package/dest/config/package_info.js +1 -1
  14. package/dest/contract_function_simulator/benchmarked_node.d.ts +9 -0
  15. package/dest/contract_function_simulator/benchmarked_node.d.ts.map +1 -0
  16. package/dest/contract_function_simulator/benchmarked_node.js +77 -0
  17. package/dest/contract_function_simulator/contract_function_simulator.d.ts +44 -16
  18. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  19. package/dest/contract_function_simulator/contract_function_simulator.js +80 -37
  20. package/dest/contract_function_simulator/execution_note_cache.d.ts +25 -14
  21. package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
  22. package/dest/contract_function_simulator/execution_note_cache.js +59 -34
  23. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +2 -2
  24. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
  25. package/dest/contract_function_simulator/execution_tagging_index_cache.js +1 -1
  26. package/dest/contract_function_simulator/hashed_values_cache.d.ts +2 -2
  27. package/dest/contract_function_simulator/hashed_values_cache.d.ts.map +1 -1
  28. package/dest/contract_function_simulator/index.d.ts +2 -2
  29. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  30. package/dest/contract_function_simulator/index.js +1 -1
  31. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +4 -3
  32. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  33. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +5 -2
  34. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +5 -4
  35. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -1
  36. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +7 -6
  37. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +3 -3
  38. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
  39. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +1 -1
  40. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +6 -4
  41. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  42. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +12 -3
  43. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +4 -10
  44. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
  45. package/dest/contract_function_simulator/noir-structs/utility_context.js +7 -18
  46. package/dest/contract_function_simulator/oracle/index.d.ts +1 -1
  47. package/dest/contract_function_simulator/oracle/interfaces.d.ts +22 -15
  48. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  49. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +2 -2
  50. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
  51. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.js +1 -1
  52. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +14 -8
  53. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
  54. package/dest/contract_function_simulator/oracle/note_packing_utils.js +16 -11
  55. package/dest/contract_function_simulator/oracle/oracle.d.ts +10 -9
  56. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  57. package/dest/contract_function_simulator/oracle/oracle.js +51 -33
  58. package/dest/contract_function_simulator/oracle/private_execution.d.ts +10 -15
  59. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  60. package/dest/contract_function_simulator/oracle/private_execution.js +19 -18
  61. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +29 -33
  62. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  63. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +46 -48
  64. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +65 -22
  65. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  66. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +163 -54
  67. package/dest/contract_function_simulator/pick_notes.d.ts +2 -2
  68. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
  69. package/dest/contract_function_simulator/pick_notes.js +1 -1
  70. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +4 -4
  71. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
  72. package/dest/contract_function_simulator/proxied_contract_data_source.js +23 -5
  73. package/dest/debug/pxe_debug_utils.d.ts +31 -0
  74. package/dest/debug/pxe_debug_utils.d.ts.map +1 -0
  75. package/dest/debug/pxe_debug_utils.js +37 -0
  76. package/dest/entrypoints/client/bundle/index.d.ts +1 -2
  77. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  78. package/dest/entrypoints/client/bundle/index.js +0 -1
  79. package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
  80. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  81. package/dest/entrypoints/client/bundle/utils.js +13 -4
  82. package/dest/entrypoints/client/lazy/index.d.ts +1 -2
  83. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  84. package/dest/entrypoints/client/lazy/index.js +0 -1
  85. package/dest/entrypoints/client/lazy/utils.d.ts +1 -1
  86. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  87. package/dest/entrypoints/client/lazy/utils.js +13 -4
  88. package/dest/entrypoints/pxe_creation_options.d.ts +5 -2
  89. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  90. package/dest/entrypoints/server/index.d.ts +3 -2
  91. package/dest/entrypoints/server/index.d.ts.map +1 -1
  92. package/dest/entrypoints/server/index.js +2 -1
  93. package/dest/entrypoints/server/utils.d.ts +1 -1
  94. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  95. package/dest/entrypoints/server/utils.js +13 -20
  96. package/dest/error_enriching.d.ts +4 -4
  97. package/dest/error_enriching.d.ts.map +1 -1
  98. package/dest/error_enriching.js +6 -6
  99. package/dest/events/event_service.d.ts +16 -0
  100. package/dest/events/event_service.d.ts.map +1 -0
  101. package/dest/events/event_service.js +45 -0
  102. package/dest/events/index.d.ts +2 -0
  103. package/dest/events/index.d.ts.map +1 -0
  104. package/dest/events/index.js +1 -0
  105. package/dest/events/private_event_filter_validator.d.ts +9 -0
  106. package/dest/events/private_event_filter_validator.d.ts.map +1 -0
  107. package/dest/events/private_event_filter_validator.js +38 -0
  108. package/dest/job_coordinator/job_coordinator.d.ts +74 -0
  109. package/dest/job_coordinator/job_coordinator.d.ts.map +1 -0
  110. package/dest/job_coordinator/job_coordinator.js +93 -0
  111. package/dest/logs/log_service.d.ts +27 -0
  112. package/dest/logs/log_service.d.ts.map +1 -0
  113. package/dest/logs/log_service.js +122 -0
  114. package/dest/notes/index.d.ts +2 -0
  115. package/dest/notes/index.d.ts.map +1 -0
  116. package/dest/notes/index.js +1 -0
  117. package/dest/notes/note_service.d.ts +48 -0
  118. package/dest/notes/note_service.d.ts.map +1 -0
  119. package/dest/notes/note_service.js +147 -0
  120. package/dest/oracle_version.d.ts +3 -3
  121. package/dest/oracle_version.js +2 -2
  122. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +1 -1
  123. package/dest/private_kernel/hints/index.d.ts +2 -2
  124. package/dest/private_kernel/hints/index.d.ts.map +1 -1
  125. package/dest/private_kernel/hints/index.js +1 -1
  126. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +28 -0
  127. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
  128. package/dest/private_kernel/hints/{build_private_kernel_reset_private_inputs.js → private_kernel_reset_private_inputs_builder.js} +19 -13
  129. package/dest/private_kernel/index.d.ts +1 -1
  130. package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
  131. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  132. package/dest/private_kernel/private_kernel_execution_prover.js +15 -15
  133. package/dest/private_kernel/private_kernel_oracle.d.ts +26 -29
  134. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  135. package/dest/private_kernel/private_kernel_oracle.js +90 -2
  136. package/dest/pxe.d.ts +54 -83
  137. package/dest/pxe.d.ts.map +1 -1
  138. package/dest/pxe.js +189 -240
  139. package/dest/storage/address_store/address_store.d.ts +11 -0
  140. package/dest/storage/address_store/address_store.d.ts.map +1 -0
  141. package/dest/storage/{address_data_provider/address_data_provider.js → address_store/address_store.js} +1 -1
  142. package/dest/storage/address_store/index.d.ts +2 -0
  143. package/dest/storage/address_store/index.d.ts.map +1 -0
  144. package/dest/storage/address_store/index.js +1 -0
  145. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -0
  146. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -0
  147. package/dest/storage/{sync_data_provider/sync_data_provider.js → anchor_block_store/anchor_block_store.js} +2 -9
  148. package/dest/storage/anchor_block_store/index.d.ts +2 -0
  149. package/dest/storage/anchor_block_store/index.d.ts.map +1 -0
  150. package/dest/storage/anchor_block_store/index.js +1 -0
  151. package/dest/storage/capsule_store/capsule_store.d.ts +72 -0
  152. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -0
  153. package/dest/storage/capsule_store/capsule_store.js +255 -0
  154. package/dest/storage/capsule_store/index.d.ts +2 -0
  155. package/dest/storage/capsule_store/index.d.ts.map +1 -0
  156. package/dest/storage/capsule_store/index.js +1 -0
  157. package/dest/storage/{contract_data_provider/contract_data_provider.d.ts → contract_store/contract_store.d.ts} +8 -15
  158. package/dest/storage/contract_store/contract_store.d.ts.map +1 -0
  159. package/dest/storage/{contract_data_provider/contract_data_provider.js → contract_store/contract_store.js} +46 -15
  160. package/dest/storage/contract_store/index.d.ts +2 -0
  161. package/dest/storage/contract_store/index.d.ts.map +1 -0
  162. package/dest/storage/contract_store/index.js +1 -0
  163. package/dest/storage/{contract_data_provider → contract_store}/private_functions_tree.d.ts +1 -1
  164. package/dest/storage/contract_store/private_functions_tree.d.ts.map +1 -0
  165. package/dest/storage/{contract_data_provider → contract_store}/private_functions_tree.js +1 -1
  166. package/dest/storage/index.d.ts +8 -8
  167. package/dest/storage/index.d.ts.map +1 -1
  168. package/dest/storage/index.js +7 -7
  169. package/dest/storage/metadata.d.ts +1 -1
  170. package/dest/storage/note_store/index.d.ts +3 -0
  171. package/dest/storage/note_store/index.d.ts.map +1 -0
  172. package/dest/storage/note_store/index.js +2 -0
  173. package/dest/storage/{note_data_provider/note_data_provider.d.ts → note_store/note_store.d.ts} +19 -17
  174. package/dest/storage/note_store/note_store.d.ts.map +1 -0
  175. package/dest/storage/{note_data_provider/note_data_provider.js → note_store/note_store.js} +115 -106
  176. package/dest/storage/private_event_store/private_event_store.d.ts +78 -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 +222 -0
  179. package/dest/storage/tagging_store/index.d.ts +4 -0
  180. package/dest/storage/tagging_store/index.d.ts.map +1 -0
  181. package/dest/storage/tagging_store/index.js +3 -0
  182. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +28 -0
  183. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -0
  184. package/dest/storage/tagging_store/recipient_tagging_store.js +99 -0
  185. package/dest/storage/tagging_store/sender_address_book_store.d.ts +14 -0
  186. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -0
  187. package/dest/storage/tagging_store/sender_address_book_store.js +30 -0
  188. package/dest/storage/tagging_store/sender_tagging_store.d.ts +77 -0
  189. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -0
  190. package/dest/storage/tagging_store/sender_tagging_store.js +278 -0
  191. package/dest/tagging/constants.d.ts +2 -2
  192. package/dest/tagging/constants.d.ts.map +1 -1
  193. package/dest/tagging/constants.js +10 -2
  194. package/dest/tagging/index.d.ts +15 -6
  195. package/dest/tagging/index.d.ts.map +1 -1
  196. package/dest/tagging/index.js +14 -5
  197. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +14 -0
  198. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -0
  199. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +99 -0
  200. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +12 -0
  201. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -0
  202. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +20 -0
  203. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +14 -0
  204. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -0
  205. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +29 -0
  206. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +20 -0
  207. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -0
  208. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +74 -0
  209. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +11 -0
  210. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -0
  211. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +32 -0
  212. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +20 -0
  213. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -0
  214. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +57 -0
  215. package/dest/tree_membership/tree_membership_service.d.ts +50 -0
  216. package/dest/tree_membership/tree_membership_service.d.ts.map +1 -0
  217. package/dest/tree_membership/tree_membership_service.js +75 -0
  218. package/package.json +20 -19
  219. package/src/bin/check_oracle_version.ts +130 -20
  220. package/src/{synchronizer/synchronizer.ts → block_synchronizer/block_synchronizer.ts} +45 -30
  221. package/src/block_synchronizer/index.ts +1 -0
  222. package/src/config/index.ts +10 -25
  223. package/src/config/package_info.ts +1 -1
  224. package/src/contract_function_simulator/benchmarked_node.ts +103 -0
  225. package/src/contract_function_simulator/contract_function_simulator.ts +132 -39
  226. package/src/contract_function_simulator/execution_note_cache.ts +58 -28
  227. package/src/contract_function_simulator/execution_tagging_index_cache.ts +1 -1
  228. package/src/contract_function_simulator/hashed_values_cache.ts +1 -1
  229. package/src/contract_function_simulator/index.ts +1 -1
  230. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +5 -1
  231. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +6 -5
  232. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -2
  233. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +14 -2
  234. package/src/contract_function_simulator/noir-structs/utility_context.ts +6 -25
  235. package/src/contract_function_simulator/oracle/interfaces.ts +29 -13
  236. package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +1 -1
  237. package/src/contract_function_simulator/oracle/note_packing_utils.ts +30 -14
  238. package/src/contract_function_simulator/oracle/oracle.ts +62 -30
  239. package/src/contract_function_simulator/oracle/private_execution.ts +22 -29
  240. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +111 -59
  241. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +238 -56
  242. package/src/contract_function_simulator/pick_notes.ts +1 -1
  243. package/src/contract_function_simulator/proxied_contract_data_source.ts +24 -7
  244. package/src/debug/pxe_debug_utils.ts +48 -0
  245. package/src/entrypoints/client/bundle/index.ts +0 -1
  246. package/src/entrypoints/client/bundle/utils.ts +10 -4
  247. package/src/entrypoints/client/lazy/index.ts +0 -1
  248. package/src/entrypoints/client/lazy/utils.ts +10 -5
  249. package/src/entrypoints/pxe_creation_options.ts +4 -1
  250. package/src/entrypoints/server/index.ts +2 -1
  251. package/src/entrypoints/server/utils.ts +13 -31
  252. package/src/error_enriching.ts +7 -15
  253. package/src/events/event_service.ts +73 -0
  254. package/src/events/index.ts +1 -0
  255. package/src/events/private_event_filter_validator.ts +46 -0
  256. package/src/job_coordinator/job_coordinator.ts +149 -0
  257. package/src/logs/log_service.ts +204 -0
  258. package/src/notes/index.ts +1 -0
  259. package/src/notes/note_service.ts +194 -0
  260. package/src/oracle_version.ts +2 -2
  261. package/src/private_kernel/hints/index.ts +1 -1
  262. package/src/private_kernel/hints/{build_private_kernel_reset_private_inputs.ts → private_kernel_reset_private_inputs_builder.ts} +38 -31
  263. package/src/private_kernel/private_kernel_execution_prover.ts +15 -21
  264. package/src/private_kernel/private_kernel_oracle.ts +118 -37
  265. package/src/pxe.ts +238 -312
  266. package/src/storage/{address_data_provider/address_data_provider.ts → address_store/address_store.ts} +1 -1
  267. package/src/storage/address_store/index.ts +1 -0
  268. package/src/storage/{sync_data_provider/sync_data_provider.ts → anchor_block_store/anchor_block_store.ts} +2 -11
  269. package/src/storage/anchor_block_store/index.ts +1 -0
  270. package/src/storage/capsule_store/capsule_store.ts +315 -0
  271. package/src/storage/capsule_store/index.ts +1 -0
  272. package/src/storage/{contract_data_provider/contract_data_provider.ts → contract_store/contract_store.ts} +65 -20
  273. package/src/storage/contract_store/index.ts +1 -0
  274. package/src/storage/{contract_data_provider → contract_store}/private_functions_tree.ts +1 -1
  275. package/src/storage/index.ts +7 -7
  276. package/src/storage/note_store/index.ts +2 -0
  277. package/src/storage/{note_data_provider/note_data_provider.ts → note_store/note_store.ts} +131 -109
  278. package/src/storage/private_event_store/private_event_store.ts +324 -0
  279. package/src/storage/tagging_store/index.ts +3 -0
  280. package/src/storage/tagging_store/recipient_tagging_store.ts +129 -0
  281. package/src/storage/tagging_store/sender_address_book_store.ts +42 -0
  282. package/src/storage/tagging_store/sender_tagging_store.ts +345 -0
  283. package/src/tagging/constants.ts +10 -2
  284. package/src/tagging/index.ts +17 -5
  285. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +133 -0
  286. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +34 -0
  287. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +43 -0
  288. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +97 -0
  289. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +48 -0
  290. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +75 -0
  291. package/src/tree_membership/tree_membership_service.ts +97 -0
  292. package/dest/contract_function_simulator/execution_data_provider.d.ts +0 -274
  293. package/dest/contract_function_simulator/execution_data_provider.d.ts.map +0 -1
  294. package/dest/contract_function_simulator/execution_data_provider.js +0 -14
  295. package/dest/contract_function_simulator/proxied_node.d.ts +0 -9
  296. package/dest/contract_function_simulator/proxied_node.d.ts.map +0 -1
  297. package/dest/contract_function_simulator/proxied_node.js +0 -27
  298. package/dest/contract_function_simulator/pxe_oracle_interface.d.ts +0 -122
  299. package/dest/contract_function_simulator/pxe_oracle_interface.d.ts.map +0 -1
  300. package/dest/contract_function_simulator/pxe_oracle_interface.js +0 -701
  301. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +0 -28
  302. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
  303. package/dest/private_kernel/private_kernel_oracle_impl.d.ts +0 -45
  304. package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +0 -1
  305. package/dest/private_kernel/private_kernel_oracle_impl.js +0 -86
  306. package/dest/storage/address_data_provider/address_data_provider.d.ts +0 -11
  307. package/dest/storage/address_data_provider/address_data_provider.d.ts.map +0 -1
  308. package/dest/storage/address_data_provider/index.d.ts +0 -2
  309. package/dest/storage/address_data_provider/index.d.ts.map +0 -1
  310. package/dest/storage/address_data_provider/index.js +0 -1
  311. package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts +0 -25
  312. package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts.map +0 -1
  313. package/dest/storage/capsule_data_provider/capsule_data_provider.js +0 -118
  314. package/dest/storage/capsule_data_provider/index.d.ts +0 -2
  315. package/dest/storage/capsule_data_provider/index.d.ts.map +0 -1
  316. package/dest/storage/capsule_data_provider/index.js +0 -1
  317. package/dest/storage/contract_data_provider/contract_data_provider.d.ts.map +0 -1
  318. package/dest/storage/contract_data_provider/index.d.ts +0 -2
  319. package/dest/storage/contract_data_provider/index.d.ts.map +0 -1
  320. package/dest/storage/contract_data_provider/index.js +0 -1
  321. package/dest/storage/contract_data_provider/private_functions_tree.d.ts.map +0 -1
  322. package/dest/storage/note_data_provider/index.d.ts +0 -3
  323. package/dest/storage/note_data_provider/index.d.ts.map +0 -1
  324. package/dest/storage/note_data_provider/index.js +0 -2
  325. package/dest/storage/note_data_provider/note_dao.d.ts +0 -100
  326. package/dest/storage/note_data_provider/note_dao.d.ts.map +0 -1
  327. package/dest/storage/note_data_provider/note_dao.js +0 -102
  328. package/dest/storage/note_data_provider/note_data_provider.d.ts.map +0 -1
  329. package/dest/storage/private_event_data_provider/private_event_data_provider.d.ts +0 -43
  330. package/dest/storage/private_event_data_provider/private_event_data_provider.d.ts.map +0 -1
  331. package/dest/storage/private_event_data_provider/private_event_data_provider.js +0 -104
  332. package/dest/storage/sync_data_provider/index.d.ts +0 -2
  333. package/dest/storage/sync_data_provider/index.d.ts.map +0 -1
  334. package/dest/storage/sync_data_provider/index.js +0 -1
  335. package/dest/storage/sync_data_provider/sync_data_provider.d.ts +0 -10
  336. package/dest/storage/sync_data_provider/sync_data_provider.d.ts.map +0 -1
  337. package/dest/storage/tagging_data_provider/index.d.ts +0 -2
  338. package/dest/storage/tagging_data_provider/index.d.ts.map +0 -1
  339. package/dest/storage/tagging_data_provider/index.js +0 -1
  340. package/dest/storage/tagging_data_provider/tagging_data_provider.d.ts +0 -40
  341. package/dest/storage/tagging_data_provider/tagging_data_provider.d.ts.map +0 -1
  342. package/dest/storage/tagging_data_provider/tagging_data_provider.js +0 -89
  343. package/dest/synchronizer/index.d.ts +0 -2
  344. package/dest/synchronizer/index.d.ts.map +0 -1
  345. package/dest/synchronizer/index.js +0 -1
  346. package/dest/synchronizer/synchronizer.d.ts +0 -35
  347. package/dest/synchronizer/synchronizer.d.ts.map +0 -1
  348. package/dest/tagging/siloed_tag.d.ts +0 -14
  349. package/dest/tagging/siloed_tag.d.ts.map +0 -1
  350. package/dest/tagging/siloed_tag.js +0 -20
  351. package/dest/tagging/tag.d.ts +0 -12
  352. package/dest/tagging/tag.d.ts.map +0 -1
  353. package/dest/tagging/tag.js +0 -17
  354. package/dest/tagging/utils.d.ts +0 -18
  355. package/dest/tagging/utils.d.ts.map +0 -1
  356. package/dest/tagging/utils.js +0 -24
  357. package/src/contract_function_simulator/execution_data_provider.ts +0 -343
  358. package/src/contract_function_simulator/proxied_node.ts +0 -33
  359. package/src/contract_function_simulator/pxe_oracle_interface.ts +0 -1019
  360. package/src/private_kernel/private_kernel_oracle_impl.ts +0 -132
  361. package/src/storage/address_data_provider/index.ts +0 -1
  362. package/src/storage/capsule_data_provider/capsule_data_provider.ts +0 -147
  363. package/src/storage/capsule_data_provider/index.ts +0 -1
  364. package/src/storage/contract_data_provider/index.ts +0 -1
  365. package/src/storage/note_data_provider/index.ts +0 -2
  366. package/src/storage/note_data_provider/note_dao.ts +0 -154
  367. package/src/storage/private_event_data_provider/private_event_data_provider.ts +0 -148
  368. package/src/storage/sync_data_provider/index.ts +0 -1
  369. package/src/storage/tagging_data_provider/index.ts +0 -1
  370. package/src/storage/tagging_data_provider/tagging_data_provider.ts +0 -120
  371. package/src/synchronizer/index.ts +0 -1
  372. package/src/tagging/siloed_tag.ts +0 -22
  373. package/src/tagging/tag.ts +0 -16
  374. package/src/tagging/utils.ts +0 -31
@@ -1,35 +1,43 @@
1
+ import { BlockNumber } from '@aztec/foundation/branded-types';
1
2
  import { type Logger, createLogger } from '@aztec/foundation/log';
3
+ import type { AztecAsyncKVStore } from '@aztec/kv-store';
2
4
  import type { L2TipsKVStore } from '@aztec/kv-store/stores';
3
- 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';
4
11
  import type { AztecNode } from '@aztec/stdlib/interfaces/client';
5
12
 
6
13
  import type { PXEConfig } from '../config/index.js';
7
- import type { NoteDataProvider } from '../storage/note_data_provider/note_data_provider.js';
8
- import type { SyncDataProvider } from '../storage/sync_data_provider/sync_data_provider.js';
9
- 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';
10
17
 
11
18
  /**
12
- * 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
13
20
  * view of the L2 chain state. It handles block header retrieval, chain reorganizations, and provides an interface
14
21
  * for querying sync status.
15
22
  */
16
- export class Synchronizer implements L2BlockStreamEventHandler {
23
+ export class BlockSynchronizer implements L2BlockStreamEventHandler {
17
24
  private log: Logger;
18
25
  private isSyncing: Promise<void> | undefined;
19
26
  protected readonly blockStream: L2BlockStream;
20
27
 
21
28
  constructor(
22
29
  private node: AztecNode,
23
- private syncDataProvider: SyncDataProvider,
24
- private noteDataProvider: NoteDataProvider,
25
- private taggingDataProvider: TaggingDataProvider,
30
+ private store: AztecAsyncKVStore,
31
+ private anchorBlockStore: AnchorBlockStore,
32
+ private noteStore: NoteStore,
33
+ private privateEventStore: PrivateEventStore,
26
34
  private l2TipsStore: L2TipsKVStore,
27
35
  config: Partial<Pick<PXEConfig, 'l2BlockBatchSize'>> = {},
28
36
  loggerOrSuffix?: string | Logger,
29
37
  ) {
30
38
  this.log =
31
39
  !loggerOrSuffix || typeof loggerOrSuffix === 'string'
32
- ? createLogger(loggerOrSuffix ? `pxe:synchronizer:${loggerOrSuffix}` : `pxe:synchronizer`)
40
+ ? createLogger(loggerOrSuffix ? `pxe:block_synchronizer:${loggerOrSuffix}` : `pxe:block_synchronizer`)
33
41
  : loggerOrSuffix;
34
42
  this.blockStream = this.createBlockStream(config);
35
43
  }
@@ -49,30 +57,36 @@ export class Synchronizer implements L2BlockStreamEventHandler {
49
57
 
50
58
  switch (event.type) {
51
59
  case 'blocks-added': {
52
- const lastBlock = event.blocks.at(-1)!.block;
60
+ const lastBlock = event.blocks.at(-1)!;
53
61
  this.log.verbose(`Updated pxe last block to ${lastBlock.number}`, {
54
62
  blockHash: lastBlock.hash(),
55
63
  archive: lastBlock.archive.root.toString(),
56
64
  header: lastBlock.header.toInspect(),
57
65
  });
58
- await this.syncDataProvider.setHeader(lastBlock.getBlockHeader());
66
+ await this.anchorBlockStore.setHeader(lastBlock.header);
59
67
  break;
60
68
  }
61
69
  case 'chain-pruned': {
62
70
  this.log.warn(`Pruning data after block ${event.block.number} due to reorg`);
63
- // We first unnullify and then remove so that unnullified notes that were created after the block number end up deleted.
64
- const lastSynchedBlockNumber = await this.syncDataProvider.getBlockNumber();
65
- await this.noteDataProvider.rollbackNotesAndNullifiers(event.block.number, lastSynchedBlockNumber);
66
- // Remove all note tagging indexes to force a full resync. This is suboptimal, but unless we track the
67
- // block number in which each index is used it's all we can do.
68
- await this.taggingDataProvider.resetNoteSyncData();
69
- // Update the header to the last block.
70
- const newHeader = await this.node.getBlockHeader(event.block.number);
71
- if (!newHeader) {
72
- this.log.error(`Block header not found for block number ${event.block.number} during chain prune`);
73
- } else {
74
- 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
+ );
75
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
+ });
76
90
  break;
77
91
  }
78
92
  }
@@ -81,6 +95,11 @@ export class Synchronizer implements L2BlockStreamEventHandler {
81
95
  /**
82
96
  * Syncs PXE and the node by downloading the metadata of the latest blocks, allowing simulations to use
83
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.
84
103
  */
85
104
  public async sync() {
86
105
  if (this.isSyncing !== undefined) {
@@ -103,18 +122,14 @@ export class Synchronizer implements L2BlockStreamEventHandler {
103
122
  let currentHeader;
104
123
 
105
124
  try {
106
- currentHeader = await this.syncDataProvider.getBlockHeader();
125
+ currentHeader = await this.anchorBlockStore.getBlockHeader();
107
126
  } catch {
108
127
  this.log.debug('Header is not set, requesting from the node');
109
128
  }
110
129
  if (!currentHeader) {
111
130
  // REFACTOR: We should know the header of the genesis block without having to request it from the node.
112
- await this.syncDataProvider.setHeader((await this.node.getBlockHeader(0))!);
131
+ await this.anchorBlockStore.setHeader((await this.node.getBlockHeader(BlockNumber.ZERO))!);
113
132
  }
114
133
  await this.blockStream.sync();
115
134
  }
116
-
117
- public getSynchedBlockNumber() {
118
- return this.syncDataProvider.getBlockNumber();
119
- }
120
135
  }
@@ -0,0 +1 @@
1
+ export * from './block_synchronizer.js';
@@ -10,15 +10,6 @@ import { type ChainConfig, chainConfigMappings } from '@aztec/stdlib/config';
10
10
 
11
11
  export { getPackageInfo } from './package_info.js';
12
12
 
13
- /**
14
- * Temporary configuration until WASM can be used instead of native
15
- */
16
- export interface BBProverConfig {
17
- bbWorkingDirectory?: string;
18
- bbBinaryPath?: string;
19
- bbSkipCleanup?: boolean;
20
- }
21
-
22
13
  /**
23
14
  * Configuration settings for the prover factory
24
15
  */
@@ -28,14 +19,14 @@ export interface KernelProverConfig {
28
19
  }
29
20
 
30
21
  /**
31
- * Configuration settings for the synchronizer.
22
+ * Configuration settings for the block synchronizer.
32
23
  */
33
- export interface SynchronizerConfig {
24
+ export interface BlockSynchronizerConfig {
34
25
  /** Maximum amount of blocks to pull from the stream in one request when synchronizing */
35
26
  l2BlockBatchSize: number;
36
27
  }
37
28
 
38
- export type PXEConfig = KernelProverConfig & BBProverConfig & DataStoreConfig & ChainConfig & SynchronizerConfig;
29
+ export type PXEConfig = KernelProverConfig & DataStoreConfig & ChainConfig & BlockSynchronizerConfig;
39
30
 
40
31
  export type CliPXEOptions = {
41
32
  /** Custom Aztec Node URL to connect to */
@@ -50,19 +41,13 @@ export const pxeConfigMappings: ConfigMappingsType<PXEConfig> = {
50
41
  ...numberConfigHelper(50),
51
42
  description: 'Maximum amount of blocks to pull from the stream in one request when synchronizing',
52
43
  },
53
- bbBinaryPath: {
54
- env: 'BB_BINARY_PATH',
55
- description: 'Path to the BB binary',
56
- },
57
- bbWorkingDirectory: {
58
- env: 'BB_WORKING_DIRECTORY',
59
- description: 'Working directory for the BB binary',
60
- },
61
- bbSkipCleanup: {
62
- env: 'BB_SKIP_CLEANUP',
63
- description: 'True to skip cleanup of temporary files for debugging purposes',
64
- ...booleanConfigHelper(),
65
- },
44
+ // TODO: We're losing this feature in moving to bb.js api.
45
+ // Reimplement it as a setting that dumps the msgpack data on the bb.js backend if needed.
46
+ // bbSkipCleanup: {
47
+ // env: 'BB_SKIP_CLEANUP',
48
+ // description: 'True to skip cleanup of temporary files for debugging purposes',
49
+ // ...booleanConfigHelper(),
50
+ // },
66
51
  proverEnabled: {
67
52
  env: 'PXE_PROVER_ENABLED',
68
53
  description: 'Enable real proofs',
@@ -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 {
@@ -32,12 +33,19 @@ import {
32
33
  toACVMWitness,
33
34
  witnessMapToFields,
34
35
  } from '@aztec/simulator/client';
35
- import type { AbiDecoded, FunctionCall } from '@aztec/stdlib/abi';
36
- import { FunctionSelector, FunctionType, decodeFromAbi } from '@aztec/stdlib/abi';
36
+ import type { FunctionCall } from '@aztec/stdlib/abi';
37
+ import { FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
37
38
  import type { AuthWitness } from '@aztec/stdlib/auth-witness';
38
39
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
39
40
  import { Gas } from '@aztec/stdlib/gas';
40
- import { computeNoteHashNonce, computeUniqueNoteHash, siloNoteHash, siloNullifier } from '@aztec/stdlib/hash';
41
+ import {
42
+ computeNoteHashNonce,
43
+ computeProtocolNullifier,
44
+ computeUniqueNoteHash,
45
+ siloNoteHash,
46
+ siloNullifier,
47
+ } from '@aztec/stdlib/hash';
48
+ import type { AztecNode } from '@aztec/stdlib/interfaces/server';
41
49
  import {
42
50
  PartialPrivateTailPublicInputsForPublic,
43
51
  PartialPrivateTailPublicInputsForRollup,
@@ -53,6 +61,7 @@ import { PrivateLog } from '@aztec/stdlib/logs';
53
61
  import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
54
62
  import { ChonkProof } from '@aztec/stdlib/proofs';
55
63
  import {
64
+ BlockHeader,
56
65
  CallContext,
57
66
  HashedValues,
58
67
  PrivateExecutionResult,
@@ -62,8 +71,16 @@ import {
62
71
  getFinalMinRevertibleSideEffectCounter,
63
72
  } from '@aztec/stdlib/tx';
64
73
 
65
- import type { ContractDataProvider } from '../storage/index.js';
66
- 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';
67
84
  import { ExecutionNoteCache } from './execution_note_cache.js';
68
85
  import { ExecutionTaggingIndexCache } from './execution_tagging_index_cache.js';
69
86
  import { HashedValuesCache } from './hashed_values_cache.js';
@@ -79,7 +96,17 @@ export class ContractFunctionSimulator {
79
96
  private log: Logger;
80
97
 
81
98
  constructor(
82
- 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,
83
110
  private simulator: CircuitSimulator,
84
111
  ) {
85
112
  this.log = createLogger('simulator');
@@ -92,9 +119,11 @@ export class ContractFunctionSimulator {
92
119
  * @param contractAddress - The address of the contract (should match request.origin)
93
120
  * @param msgSender - The address calling the function. This can be replaced to simulate a call from another contract
94
121
  * or a specific account.
122
+ * @param anchorBlockHeader - The block header to use as base state for this run.
95
123
  * @param senderForTags - The address that is used as a tagging sender when emitting private logs. Returned from
96
124
  * the `privateGetSenderForTags` oracle.
97
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.
98
127
  * @returns The result of the execution.
99
128
  */
100
129
  public async run(
@@ -102,15 +131,20 @@ export class ContractFunctionSimulator {
102
131
  contractAddress: AztecAddress,
103
132
  selector: FunctionSelector,
104
133
  msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE),
105
- senderForTags?: AztecAddress,
106
- scopes?: AztecAddress[],
134
+ anchorBlockHeader: BlockHeader,
135
+ senderForTags: AztecAddress | undefined,
136
+ scopes: AztecAddress[] | undefined,
137
+ jobId: string,
107
138
  ): Promise<PrivateExecutionResult> {
108
139
  const simulatorSetupTimer = new Timer();
109
- const anchorBlockHeader = await this.executionDataProvider.getAnchorBlockHeader();
110
140
 
111
- 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);
112
146
 
113
- const entryPointArtifact = await this.executionDataProvider.getFunctionArtifact(contractAddress, selector);
147
+ const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(contractAddress, selector);
114
148
 
115
149
  if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
116
150
  throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
@@ -123,7 +157,7 @@ export class ContractFunctionSimulator {
123
157
  }
124
158
 
125
159
  // reserve the first side effect for the tx hash (inserted by the private kernel)
126
- const startSideEffectCounter = 1;
160
+ const startSideEffectCounter = 2;
127
161
 
128
162
  const callContext = new CallContext(
129
163
  msgSender,
@@ -132,8 +166,8 @@ export class ContractFunctionSimulator {
132
166
  entryPointArtifact.isStatic,
133
167
  );
134
168
 
135
- const txRequestHash = await request.toTxRequest().hash();
136
- const noteCache = new ExecutionNoteCache(txRequestHash);
169
+ const protocolNullifier = await computeProtocolNullifier(await request.toTxRequest().hash());
170
+ const noteCache = new ExecutionNoteCache(protocolNullifier);
137
171
  const taggingIndexCache = new ExecutionTaggingIndexCache();
138
172
 
139
173
  const privateExecutionOracle = new PrivateExecutionOracle(
@@ -141,12 +175,26 @@ export class ContractFunctionSimulator {
141
175
  request.txContext,
142
176
  callContext,
143
177
  anchorBlockHeader,
178
+ async call => {
179
+ await this.runUtility(call, [], anchorBlockHeader, scopes, jobId);
180
+ },
144
181
  request.authWitnesses,
145
182
  request.capsules,
146
183
  HashedValuesCache.create(request.argsOfCalls),
147
184
  noteCache,
148
185
  taggingIndexCache,
149
- 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,
150
198
  0, // totalPublicArgsCount
151
199
  startSideEffectCounter,
152
200
  undefined, // log
@@ -170,8 +218,9 @@ export class ContractFunctionSimulator {
170
218
  request.functionSelector,
171
219
  );
172
220
  const simulatorTeardownTimer = new Timer();
173
- const { usedTxRequestHashForNonces } = noteCache.finish();
174
- const firstNullifierHint = usedTxRequestHashForNonces ? Fr.ZERO : noteCache.getAllNullifiers()[0];
221
+
222
+ noteCache.finish();
223
+ const firstNullifierHint = noteCache.getNonceGenerator();
175
224
 
176
225
  const publicCallRequests = collectNested([executionResult], r =>
177
226
  r.publicInputs.publicCallRequests
@@ -207,20 +256,45 @@ export class ContractFunctionSimulator {
207
256
  * Runs a utility function.
208
257
  * @param call - The function call to execute.
209
258
  * @param authwits - Authentication witnesses required for the function call.
259
+ * @param anchorBlockHeader - The block header to use as base state for this run.
210
260
  * @param scopes - Optional array of account addresses whose notes can be accessed in this call. Defaults to all
211
261
  * accounts if not specified.
212
- * @returns A decoded ABI value containing the function's return data.
262
+ * @returns A return value of the utility function in a form as returned by the simulator (Noir fields)
213
263
  */
214
- public async runUtility(call: FunctionCall, authwits: AuthWitness[], scopes?: AztecAddress[]): Promise<AbiDecoded> {
215
- 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);
216
272
 
217
- const entryPointArtifact = await this.executionDataProvider.getFunctionArtifact(call.to, call.selector);
273
+ const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
218
274
 
219
275
  if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
220
276
  throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
221
277
  }
222
278
 
223
- 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
+ );
224
298
 
225
299
  try {
226
300
  this.log.verbose(`Executing utility function ${entryPointArtifact.name}`, {
@@ -244,17 +318,28 @@ export class ContractFunctionSimulator {
244
318
  );
245
319
  });
246
320
 
247
- const returnWitness = witnessMapToFields(acirExecutionResult.returnWitness);
248
321
  this.log.verbose(`Utility simulation for ${call.to}.${call.selector} completed`);
249
- return decodeFromAbi(entryPointArtifact.returnTypes, returnWitness);
322
+ return witnessMapToFields(acirExecutionResult.returnWitness);
250
323
  } catch (err) {
251
324
  throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
252
325
  }
253
326
  }
254
327
  // docs:end:execute_utility_function
255
328
 
329
+ /**
330
+ * Returns the execution statistics collected during the simulator run.
331
+ * @returns The execution statistics.
332
+ */
256
333
  getStats() {
257
- 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 };
258
343
  }
259
344
  }
260
345
 
@@ -275,15 +360,15 @@ class OrderedSideEffect<T> {
275
360
  * (allowing state overrides) and is much faster, while still generating a valid
276
361
  * output that can be sent to the node for public simulation
277
362
  * @param privateExecutionResult - The result of the private execution.
278
- * @param nonceGenerator - A nonce generator for note hashes. According to the protocol rules,
279
- * it can either be the first nullifier in the tx or the hash of the initial tx request if there are none.
280
- * @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).
281
366
  * @returns The simulated proving result.
282
367
  */
283
368
  export async function generateSimulatedProvingResult(
284
369
  privateExecutionResult: PrivateExecutionResult,
285
- nonceGenerator: Fr,
286
- contractDataProvider: ContractDataProvider,
370
+ contractStore: ContractStore,
371
+ minRevertibleSideEffectCounterOverride?: number,
287
372
  ): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
288
373
  const siloedNoteHashes: OrderedSideEffect<Fr>[] = [];
289
374
  const nullifiers: OrderedSideEffect<Fr>[] = [];
@@ -360,7 +445,7 @@ export async function generateSimulatedProvingResult(
360
445
  : execution.publicInputs.publicTeardownCallRequest;
361
446
 
362
447
  executionSteps.push({
363
- functionName: await contractDataProvider.getDebugFunctionName(
448
+ functionName: await contractStore.getDebugFunctionName(
364
449
  execution.publicInputs.callContext.contractAddress,
365
450
  execution.publicInputs.callContext.functionSelector,
366
451
  ),
@@ -387,16 +472,18 @@ export async function generateSimulatedProvingResult(
387
472
  const getEffect = <T>(orderedSideEffect: OrderedSideEffect<T>) => orderedSideEffect.sideEffect;
388
473
 
389
474
  const isPrivateOnlyTx = privateExecutionResult.publicFunctionCalldata.length === 0;
390
- const minRevertibleSideEffectCounter = getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
475
+ const minRevertibleSideEffectCounter =
476
+ minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
391
477
 
392
478
  const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(
393
479
  nullifiers.sort(sortByCounter),
394
480
  minRevertibleSideEffectCounter,
395
481
  );
396
- 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)) {
397
486
  throw new Error('The first non revertible nullifier should be equal to the nonce generator. This is a bug!');
398
- } else {
399
- nonRevertibleNullifiers.unshift(nonceGenerator);
400
487
  }
401
488
 
402
489
  if (isPrivateOnlyTx) {
@@ -432,6 +519,12 @@ export async function generateSimulatedProvingResult(
432
519
  siloedNoteHashes.sort(sortByCounter),
433
520
  minRevertibleSideEffectCounter,
434
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
+ );
435
528
  const [nonRevertibleL2ToL1Messages, revertibleL2ToL1Messages] = splitOrderedSideEffects(
436
529
  l2ToL1Messages.sort(sortByCounter),
437
530
  minRevertibleSideEffectCounter,
@@ -450,7 +543,7 @@ export async function generateSimulatedProvingResult(
450
543
  );
451
544
 
452
545
  const nonRevertibleData = new PrivateToPublicAccumulatedData(
453
- padArrayEnd(nonRevertibleNoteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX),
546
+ padArrayEnd(nonRevertibleUniqueNoteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX),
454
547
  padArrayEnd(nonRevertibleNullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX),
455
548
  padArrayEnd(nonRevertibleL2ToL1Messages, ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX),
456
549
  padArrayEnd(nonRevertibleTaggedPrivateLogs, PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX),
@@ -498,7 +591,7 @@ function splitOrderedSideEffects<T>(effects: OrderedSideEffect<T>[], minRevertib
498
591
  const revertibleSideEffects: T[] = [];
499
592
  const nonRevertibleSideEffects: T[] = [];
500
593
  effects.forEach(effect => {
501
- if (effect.counter < minRevertibleSideEffectCounter) {
594
+ if (minRevertibleSideEffectCounter === 0 || effect.counter < minRevertibleSideEffectCounter) {
502
595
  nonRevertibleSideEffects.push(effect.sideEffect);
503
596
  } else {
504
597
  revertibleSideEffects.push(effect.sideEffect);