@aztec/pxe 0.0.1-commit.4d3c002 → 0.0.1-commit.4d9804df

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 (501) hide show
  1. package/dest/bin/check_oracle_version.js +41 -112
  2. package/dest/bin/index.d.ts +2 -0
  3. package/dest/bin/index.d.ts.map +1 -0
  4. package/dest/bin/index.js +1 -0
  5. package/dest/bin/oracle_version_helpers.d.ts +34 -0
  6. package/dest/bin/oracle_version_helpers.d.ts.map +1 -0
  7. package/dest/bin/oracle_version_helpers.js +46 -0
  8. package/dest/block_synchronizer/block_stream_source.d.ts +10 -0
  9. package/dest/block_synchronizer/block_stream_source.d.ts.map +1 -0
  10. package/dest/block_synchronizer/block_stream_source.js +37 -0
  11. package/dest/block_synchronizer/block_synchronizer.d.ts +23 -15
  12. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  13. package/dest/block_synchronizer/block_synchronizer.js +78 -28
  14. package/dest/config/index.d.ts +8 -1
  15. package/dest/config/index.d.ts.map +1 -1
  16. package/dest/config/index.js +13 -14
  17. package/dest/config/package_info.js +1 -1
  18. package/dest/contract/contract_class_service.d.ts +31 -0
  19. package/dest/contract/contract_class_service.d.ts.map +1 -0
  20. package/dest/contract/contract_class_service.js +68 -0
  21. package/dest/contract/contract_sync_service.d.ts +48 -0
  22. package/dest/contract/contract_sync_service.d.ts.map +1 -0
  23. package/dest/contract/contract_sync_service.js +116 -0
  24. package/dest/contract/helpers.d.ts +7 -0
  25. package/dest/contract/helpers.d.ts.map +1 -0
  26. package/dest/contract/helpers.js +20 -0
  27. package/dest/contract/skip_sync_contracts.d.ts +11 -0
  28. package/dest/contract/skip_sync_contracts.d.ts.map +1 -0
  29. package/dest/contract/skip_sync_contracts.js +18 -0
  30. package/dest/contract_function_simulator/anchored_contract_data.d.ts +36 -0
  31. package/dest/contract_function_simulator/anchored_contract_data.d.ts.map +1 -0
  32. package/dest/contract_function_simulator/anchored_contract_data.js +54 -0
  33. package/dest/contract_function_simulator/aztec_node_read_cache.d.ts +39 -0
  34. package/dest/contract_function_simulator/aztec_node_read_cache.d.ts.map +1 -0
  35. package/dest/contract_function_simulator/aztec_node_read_cache.js +60 -0
  36. package/dest/contract_function_simulator/contract_function_simulator.d.ts +25 -18
  37. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  38. package/dest/contract_function_simulator/contract_function_simulator.js +82 -39
  39. package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
  40. package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
  41. package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
  42. package/dest/contract_function_simulator/execution_note_cache.d.ts +4 -10
  43. package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
  44. package/dest/contract_function_simulator/execution_note_cache.js +8 -28
  45. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +5 -9
  46. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
  47. package/dest/contract_function_simulator/execution_tagging_index_cache.js +3 -7
  48. package/dest/contract_function_simulator/index.d.ts +26 -6
  49. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  50. package/dest/contract_function_simulator/index.js +11 -4
  51. package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts +29 -0
  52. package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts.map +1 -0
  53. package/dest/contract_function_simulator/noir-structs/bounded_vec.js +30 -0
  54. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts +9 -0
  55. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts.map +1 -0
  56. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.js +1 -0
  57. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts +7 -0
  58. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts.map +1 -0
  59. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.js +1 -0
  60. package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts +37 -0
  61. package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts.map +1 -0
  62. package/dest/contract_function_simulator/noir-structs/ephemeral_array.js +59 -0
  63. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +4 -3
  64. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  65. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +5 -4
  66. package/dest/contract_function_simulator/noir-structs/fact.d.ts +16 -0
  67. package/dest/contract_function_simulator/noir-structs/fact.d.ts.map +1 -0
  68. package/dest/contract_function_simulator/noir-structs/fact.js +6 -0
  69. package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts +27 -0
  70. package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts.map +1 -0
  71. package/dest/contract_function_simulator/noir-structs/fact_collection.js +31 -0
  72. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +19 -10
  73. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -1
  74. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +12 -24
  75. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +11 -9
  76. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
  77. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +2 -61
  78. package/dest/contract_function_simulator/noir-structs/note_data.d.ts +27 -0
  79. package/dest/contract_function_simulator/noir-structs/note_data.d.ts.map +1 -0
  80. package/dest/contract_function_simulator/noir-structs/note_data.js +3 -0
  81. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +4 -3
  82. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  83. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +6 -5
  84. package/dest/contract_function_simulator/noir-structs/option.d.ts +59 -0
  85. package/dest/contract_function_simulator/noir-structs/option.d.ts.map +1 -0
  86. package/dest/contract_function_simulator/noir-structs/option.js +67 -0
  87. package/dest/contract_function_simulator/noir-structs/origin_block.d.ts +11 -0
  88. package/dest/contract_function_simulator/noir-structs/origin_block.d.ts.map +1 -0
  89. package/dest/contract_function_simulator/noir-structs/origin_block.js +5 -0
  90. package/dest/contract_function_simulator/noir-structs/pending_tagged_log.d.ts +11 -0
  91. package/dest/contract_function_simulator/noir-structs/pending_tagged_log.d.ts.map +1 -0
  92. package/dest/contract_function_simulator/noir-structs/pending_tagged_log.js +4 -0
  93. package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts +8 -0
  94. package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts.map +1 -0
  95. package/dest/contract_function_simulator/noir-structs/provided_secret.js +1 -0
  96. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts +28 -0
  97. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts.map +1 -0
  98. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.js +50 -0
  99. package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts +19 -0
  100. package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts.map +1 -0
  101. package/dest/contract_function_simulator/noir-structs/resolved_tx.js +9 -0
  102. package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts +15 -0
  103. package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts.map +1 -0
  104. package/dest/contract_function_simulator/noir-structs/tx_effect_data.js +5 -0
  105. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +6 -11
  106. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
  107. package/dest/contract_function_simulator/noir-structs/utility_context.js +1 -20
  108. package/dest/contract_function_simulator/oracle/acir_callback.d.ts +21 -0
  109. package/dest/contract_function_simulator/oracle/acir_callback.d.ts.map +1 -0
  110. package/dest/contract_function_simulator/oracle/acir_callback.js +115 -0
  111. package/dest/contract_function_simulator/oracle/index.d.ts +2 -13
  112. package/dest/contract_function_simulator/oracle/index.d.ts.map +1 -1
  113. package/dest/contract_function_simulator/oracle/index.js +1 -1
  114. package/dest/contract_function_simulator/oracle/interfaces.d.ts +15 -103
  115. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  116. package/dest/contract_function_simulator/oracle/interfaces.js +2 -2
  117. package/dest/contract_function_simulator/oracle/legacy_oracle_registry.d.ts +39 -0
  118. package/dest/contract_function_simulator/oracle/legacy_oracle_registry.d.ts.map +1 -0
  119. package/dest/contract_function_simulator/oracle/legacy_oracle_registry.js +107 -0
  120. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -14
  121. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
  122. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.js +1 -24
  123. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +2 -2
  124. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
  125. package/dest/contract_function_simulator/oracle/note_packing_utils.js +2 -2
  126. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts +139 -0
  127. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -0
  128. package/dest/contract_function_simulator/oracle/oracle_registry.js +1016 -0
  129. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +274 -0
  130. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts.map +1 -0
  131. package/dest/contract_function_simulator/oracle/oracle_type_mappings.js +1243 -0
  132. package/dest/contract_function_simulator/oracle/private_execution.d.ts +1 -1
  133. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  134. package/dest/contract_function_simulator/oracle/private_execution.js +2 -3
  135. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +47 -36
  136. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  137. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +181 -62
  138. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +144 -66
  139. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  140. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +478 -170
  141. package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
  142. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
  143. package/dest/contract_function_simulator/pick_notes.js +20 -3
  144. package/dest/contract_function_simulator/transient_array_service.d.ts +31 -0
  145. package/dest/contract_function_simulator/transient_array_service.d.ts.map +1 -0
  146. package/dest/contract_function_simulator/transient_array_service.js +62 -0
  147. package/dest/debug/pxe_debug_utils.d.ts +2 -7
  148. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  149. package/dest/debug/pxe_debug_utils.js +0 -6
  150. package/dest/entrypoints/client/bundle/index.d.ts +2 -1
  151. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  152. package/dest/entrypoints/client/bundle/index.js +1 -0
  153. package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
  154. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  155. package/dest/entrypoints/client/bundle/utils.js +27 -8
  156. package/dest/entrypoints/client/lazy/index.d.ts +2 -1
  157. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  158. package/dest/entrypoints/client/lazy/index.js +1 -0
  159. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  160. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  161. package/dest/entrypoints/client/lazy/utils.js +27 -8
  162. package/dest/entrypoints/client/store.d.ts +14 -0
  163. package/dest/entrypoints/client/store.d.ts.map +1 -0
  164. package/dest/entrypoints/client/store.js +42 -0
  165. package/dest/entrypoints/pxe_creation_options.d.ts +16 -2
  166. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  167. package/dest/entrypoints/pxe_creation_options.js +3 -1
  168. package/dest/entrypoints/server/index.d.ts +7 -3
  169. package/dest/entrypoints/server/index.d.ts.map +1 -1
  170. package/dest/entrypoints/server/index.js +5 -2
  171. package/dest/entrypoints/server/store.d.ts +18 -0
  172. package/dest/entrypoints/server/store.d.ts.map +1 -0
  173. package/dest/entrypoints/server/store.js +28 -0
  174. package/dest/entrypoints/server/utils.d.ts +4 -3
  175. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  176. package/dest/entrypoints/server/utils.js +28 -8
  177. package/dest/error_enriching.d.ts +5 -3
  178. package/dest/error_enriching.d.ts.map +1 -1
  179. package/dest/error_enriching.js +13 -11
  180. package/dest/events/event_service.d.ts +13 -5
  181. package/dest/events/event_service.d.ts.map +1 -1
  182. package/dest/events/event_service.js +30 -9
  183. package/dest/events/private_event_filter_validator.d.ts +3 -2
  184. package/dest/events/private_event_filter_validator.d.ts.map +1 -1
  185. package/dest/events/private_event_filter_validator.js +15 -0
  186. package/dest/hooks/authorize_utility_call.d.ts +41 -0
  187. package/dest/hooks/authorize_utility_call.d.ts.map +1 -0
  188. package/dest/hooks/authorize_utility_call.js +4 -0
  189. package/dest/hooks/execution_hooks.d.ts +62 -0
  190. package/dest/hooks/execution_hooks.d.ts.map +1 -0
  191. package/dest/hooks/execution_hooks.js +9 -0
  192. package/dest/hooks/index.d.ts +5 -0
  193. package/dest/hooks/index.d.ts.map +1 -0
  194. package/dest/hooks/index.js +2 -0
  195. package/dest/hooks/resolve_custom_request.d.ts +23 -0
  196. package/dest/hooks/resolve_custom_request.d.ts.map +1 -0
  197. package/dest/hooks/resolve_custom_request.js +3 -0
  198. package/dest/hooks/resolve_tagging_secret_strategy.d.ts +50 -0
  199. package/dest/hooks/resolve_tagging_secret_strategy.d.ts.map +1 -0
  200. package/dest/hooks/resolve_tagging_secret_strategy.js +3 -0
  201. package/dest/logs/log_service.d.ts +14 -11
  202. package/dest/logs/log_service.d.ts.map +1 -1
  203. package/dest/logs/log_service.js +188 -76
  204. package/dest/messages/tx_resolver_service.d.ts +17 -0
  205. package/dest/messages/tx_resolver_service.d.ts.map +1 -0
  206. package/dest/messages/tx_resolver_service.js +60 -0
  207. package/dest/notes/note_service.d.ts +26 -4
  208. package/dest/notes/note_service.d.ts.map +1 -1
  209. package/dest/notes/note_service.js +81 -66
  210. package/dest/oracle_version.d.ts +4 -3
  211. package/dest/oracle_version.d.ts.map +1 -1
  212. package/dest/oracle_version.js +20 -10
  213. package/dest/private_kernel/batch_planner.d.ts +47 -0
  214. package/dest/private_kernel/batch_planner.d.ts.map +1 -0
  215. package/dest/private_kernel/batch_planner.js +104 -0
  216. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +1 -1
  217. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
  218. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +7 -3
  219. package/dest/private_kernel/hints/test_utils.d.ts +1 -1
  220. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -1
  221. package/dest/private_kernel/hints/test_utils.js +3 -4
  222. package/dest/private_kernel/private_kernel_execution_prover.d.ts +6 -2
  223. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  224. package/dest/private_kernel/private_kernel_execution_prover.js +203 -89
  225. package/dest/private_kernel/private_kernel_oracle.d.ts +12 -10
  226. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  227. package/dest/private_kernel/private_kernel_oracle.js +40 -26
  228. package/dest/pxe.d.ts +164 -51
  229. package/dest/pxe.d.ts.map +1 -1
  230. package/dest/pxe.js +334 -203
  231. package/dest/storage/allowed_scopes.d.ts +6 -0
  232. package/dest/storage/allowed_scopes.d.ts.map +1 -0
  233. package/dest/storage/allowed_scopes.js +7 -0
  234. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -6
  235. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
  236. package/dest/storage/anchor_block_store/anchor_block_store.js +9 -7
  237. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts +42 -0
  238. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts.map +1 -0
  239. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.js +93 -0
  240. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts +15 -0
  241. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts.map +1 -0
  242. package/dest/storage/backwards_compatibility_tests/schema_tests.js +671 -0
  243. package/dest/storage/backwards_compatibility_tests/store_spy.d.ts +19 -0
  244. package/dest/storage/backwards_compatibility_tests/store_spy.d.ts.map +1 -0
  245. package/dest/storage/backwards_compatibility_tests/store_spy.js +63 -0
  246. package/dest/storage/capsule_store/capsule_service.d.ts +1 -1
  247. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -1
  248. package/dest/storage/capsule_store/capsule_service.js +6 -9
  249. package/dest/storage/capsule_store/capsule_store.d.ts +1 -1
  250. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  251. package/dest/storage/capsule_store/capsule_store.js +8 -5
  252. package/dest/storage/contract_store/contract_store.d.ts +27 -24
  253. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  254. package/dest/storage/contract_store/contract_store.js +70 -98
  255. package/dest/storage/fact_store/fact_service.d.ts +22 -0
  256. package/dest/storage/fact_store/fact_service.d.ts.map +1 -0
  257. package/dest/storage/fact_store/fact_service.js +45 -0
  258. package/dest/storage/fact_store/fact_store.d.ts +95 -0
  259. package/dest/storage/fact_store/fact_store.d.ts.map +1 -0
  260. package/dest/storage/fact_store/fact_store.js +408 -0
  261. package/dest/storage/fact_store/fact_store_keys.d.ts +34 -0
  262. package/dest/storage/fact_store/fact_store_keys.d.ts.map +1 -0
  263. package/dest/storage/fact_store/fact_store_keys.js +50 -0
  264. package/dest/storage/fact_store/index.d.ts +6 -0
  265. package/dest/storage/fact_store/index.d.ts.map +1 -0
  266. package/dest/storage/fact_store/index.js +4 -0
  267. package/dest/storage/fact_store/origin_state.d.ts +59 -0
  268. package/dest/storage/fact_store/origin_state.d.ts.map +1 -0
  269. package/dest/storage/fact_store/origin_state.js +60 -0
  270. package/dest/storage/fact_store/stored_fact.d.ts +32 -0
  271. package/dest/storage/fact_store/stored_fact.d.ts.map +1 -0
  272. package/dest/storage/fact_store/stored_fact.js +64 -0
  273. package/dest/storage/index.d.ts +3 -2
  274. package/dest/storage/index.d.ts.map +1 -1
  275. package/dest/storage/index.js +2 -1
  276. package/dest/storage/metadata.d.ts +2 -2
  277. package/dest/storage/metadata.d.ts.map +1 -1
  278. package/dest/storage/metadata.js +1 -1
  279. package/dest/storage/note_store/note_store.d.ts +42 -33
  280. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  281. package/dest/storage/note_store/note_store.js +197 -168
  282. package/dest/storage/note_store/stored_note.d.ts +3 -8
  283. package/dest/storage/note_store/stored_note.d.ts.map +1 -1
  284. package/dest/storage/note_store/stored_note.js +4 -20
  285. package/dest/storage/open_pxe_stores.d.ts +35 -0
  286. package/dest/storage/open_pxe_stores.d.ts.map +1 -0
  287. package/dest/storage/open_pxe_stores.js +29 -0
  288. package/dest/storage/private_event_store/private_event_store.d.ts +13 -16
  289. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  290. package/dest/storage/private_event_store/private_event_store.js +43 -43
  291. package/dest/storage/private_event_store/stored_private_event.js +1 -1
  292. package/dest/storage/store_identity.d.ts +35 -0
  293. package/dest/storage/store_identity.d.ts.map +1 -0
  294. package/dest/storage/store_identity.js +44 -0
  295. package/dest/storage/tagging_store/index.d.ts +2 -2
  296. package/dest/storage/tagging_store/index.d.ts.map +1 -1
  297. package/dest/storage/tagging_store/index.js +1 -1
  298. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
  299. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  300. package/dest/storage/tagging_store/sender_tagging_store.d.ts +23 -7
  301. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  302. package/dest/storage/tagging_store/sender_tagging_store.js +51 -14
  303. package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts +51 -0
  304. package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts.map +1 -0
  305. package/dest/storage/tagging_store/tagging_secret_sources_store.js +105 -0
  306. package/dest/tagging/constants.d.ts +3 -2
  307. package/dest/tagging/constants.d.ts.map +1 -1
  308. package/dest/tagging/constants.js +28 -10
  309. package/dest/tagging/get_all_logs_by_tags.d.ts +34 -10
  310. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
  311. package/dest/tagging/get_all_logs_by_tags.js +36 -37
  312. package/dest/tagging/index.d.ts +6 -5
  313. package/dest/tagging/index.d.ts.map +1 -1
  314. package/dest/tagging/index.js +5 -4
  315. package/dest/tagging/persist_sender_tagging_index_ranges.d.ts +29 -0
  316. package/dest/tagging/persist_sender_tagging_index_ranges.d.ts.map +1 -0
  317. package/dest/tagging/persist_sender_tagging_index_ranges.js +42 -0
  318. package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +74 -0
  319. package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts.map +1 -0
  320. package/dest/tagging/recipient_sync/sync_tagged_private_logs.js +238 -0
  321. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +3 -3
  322. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -1
  323. package/dest/tagging/reconcile_tagging_index_ranges.d.ts +36 -0
  324. package/dest/tagging/reconcile_tagging_index_ranges.d.ts.map +1 -0
  325. package/dest/tagging/reconcile_tagging_index_ranges.js +74 -0
  326. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -5
  327. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  328. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +26 -14
  329. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +11 -6
  330. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  331. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +21 -0
  332. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +4 -4
  333. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  334. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +8 -4
  335. package/dest/tagging/testing/tag_query_test_utils.d.ts +6 -0
  336. package/dest/tagging/testing/tag_query_test_utils.d.ts.map +1 -0
  337. package/dest/tagging/testing/tag_query_test_utils.js +10 -0
  338. package/package.json +20 -17
  339. package/src/bin/check_oracle_version.ts +46 -135
  340. package/src/bin/index.ts +1 -0
  341. package/src/bin/oracle_version_helpers.ts +54 -0
  342. package/src/block_synchronizer/block_stream_source.ts +42 -0
  343. package/src/block_synchronizer/block_synchronizer.ts +96 -39
  344. package/src/config/index.ts +15 -8
  345. package/src/config/package_info.ts +1 -1
  346. package/src/contract/contract_class_service.ts +83 -0
  347. package/src/{contract_sync → contract}/contract_sync_service.ts +78 -72
  348. package/src/contract/helpers.ts +35 -0
  349. package/src/contract/skip_sync_contracts.ts +23 -0
  350. package/src/contract_function_simulator/anchored_contract_data.ts +74 -0
  351. package/src/contract_function_simulator/aztec_node_read_cache.ts +89 -0
  352. package/src/contract_function_simulator/contract_function_simulator.ts +134 -52
  353. package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
  354. package/src/contract_function_simulator/execution_note_cache.ts +8 -29
  355. package/src/contract_function_simulator/execution_tagging_index_cache.ts +5 -9
  356. package/src/contract_function_simulator/index.ts +89 -5
  357. package/src/contract_function_simulator/noir-structs/bounded_vec.ts +43 -0
  358. package/src/contract_function_simulator/noir-structs/contract_class_log_data.ts +9 -0
  359. package/src/contract_function_simulator/noir-structs/embedded_curve_point.ts +4 -0
  360. package/src/contract_function_simulator/noir-structs/ephemeral_array.ts +66 -0
  361. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +5 -4
  362. package/src/contract_function_simulator/noir-structs/fact.ts +13 -0
  363. package/src/contract_function_simulator/noir-structs/fact_collection.ts +64 -0
  364. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +27 -20
  365. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +14 -61
  366. package/src/contract_function_simulator/noir-structs/note_data.ts +27 -0
  367. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +6 -5
  368. package/src/contract_function_simulator/noir-structs/option.ts +75 -0
  369. package/src/contract_function_simulator/noir-structs/origin_block.ts +8 -0
  370. package/src/contract_function_simulator/noir-structs/pending_tagged_log.ts +12 -0
  371. package/src/contract_function_simulator/noir-structs/provided_secret.ts +5 -0
  372. package/src/contract_function_simulator/noir-structs/resolved_tagging_strategy.ts +66 -0
  373. package/src/contract_function_simulator/noir-structs/resolved_tx.ts +19 -0
  374. package/src/contract_function_simulator/noir-structs/tx_effect_data.ts +16 -0
  375. package/src/contract_function_simulator/noir-structs/utility_context.ts +5 -17
  376. package/src/contract_function_simulator/oracle/acir_callback.ts +154 -0
  377. package/src/contract_function_simulator/oracle/index.ts +1 -15
  378. package/src/contract_function_simulator/oracle/interfaces.ts +11 -185
  379. package/src/contract_function_simulator/oracle/legacy_oracle_registry.ts +147 -0
  380. package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +6 -21
  381. package/src/contract_function_simulator/oracle/note_packing_utils.ts +3 -3
  382. package/src/contract_function_simulator/oracle/oracle_registry.ts +710 -0
  383. package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +1052 -0
  384. package/src/contract_function_simulator/oracle/private_execution.ts +2 -3
  385. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +232 -82
  386. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +743 -325
  387. package/src/contract_function_simulator/pick_notes.ts +22 -3
  388. package/src/contract_function_simulator/transient_array_service.ts +91 -0
  389. package/src/debug/pxe_debug_utils.ts +1 -9
  390. package/src/entrypoints/client/bundle/index.ts +1 -0
  391. package/src/entrypoints/client/bundle/utils.ts +32 -8
  392. package/src/entrypoints/client/lazy/index.ts +1 -0
  393. package/src/entrypoints/client/lazy/utils.ts +32 -8
  394. package/src/entrypoints/client/store.ts +54 -0
  395. package/src/entrypoints/pxe_creation_options.ts +21 -1
  396. package/src/entrypoints/server/index.ts +7 -2
  397. package/src/entrypoints/server/store.ts +47 -0
  398. package/src/entrypoints/server/utils.ts +45 -14
  399. package/src/error_enriching.ts +27 -11
  400. package/src/events/event_service.ts +54 -19
  401. package/src/events/private_event_filter_validator.ts +21 -1
  402. package/src/hooks/authorize_utility_call.ts +44 -0
  403. package/src/hooks/execution_hooks.ts +68 -0
  404. package/src/hooks/index.ts +13 -0
  405. package/src/hooks/resolve_custom_request.ts +24 -0
  406. package/src/hooks/resolve_tagging_secret_strategy.ts +60 -0
  407. package/src/logs/log_service.ts +216 -144
  408. package/src/messages/tx_resolver_service.ts +69 -0
  409. package/src/notes/note_service.ts +116 -92
  410. package/src/oracle_version.ts +20 -10
  411. package/src/private_kernel/batch_planner.ts +168 -0
  412. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +12 -2
  413. package/src/private_kernel/hints/test_utils.ts +3 -10
  414. package/src/private_kernel/private_kernel_execution_prover.ts +335 -121
  415. package/src/private_kernel/private_kernel_oracle.ts +58 -29
  416. package/src/pxe.ts +526 -227
  417. package/src/storage/allowed_scopes.ts +14 -0
  418. package/src/storage/anchor_block_store/anchor_block_store.ts +9 -7
  419. package/src/storage/backwards_compatibility_tests/__snapshots__/AddressStore.json +22 -0
  420. package/src/storage/backwards_compatibility_tests/__snapshots__/AnchorBlockStore.json +3 -0
  421. package/src/storage/backwards_compatibility_tests/__snapshots__/CapsuleStore.json +16 -0
  422. package/src/storage/backwards_compatibility_tests/__snapshots__/ContractStore.json +28 -0
  423. package/src/storage/backwards_compatibility_tests/__snapshots__/FactStore.json +40 -0
  424. package/src/storage/backwards_compatibility_tests/__snapshots__/KeyStore.json +52 -0
  425. package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +40 -0
  426. package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +56 -0
  427. package/src/storage/backwards_compatibility_tests/__snapshots__/PrivateEventStore.json +44 -0
  428. package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +26 -0
  429. package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +30 -0
  430. package/src/storage/backwards_compatibility_tests/__snapshots__/TaggingSecretSourcesStore.json +30 -0
  431. package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +117 -0
  432. package/src/storage/backwards_compatibility_tests/kv_store_snapshot.ts +122 -0
  433. package/src/storage/backwards_compatibility_tests/schema_tests.ts +803 -0
  434. package/src/storage/backwards_compatibility_tests/store_spy.ts +73 -0
  435. package/src/storage/capsule_store/capsule_service.ts +8 -13
  436. package/src/storage/capsule_store/capsule_store.ts +15 -5
  437. package/src/storage/contract_store/contract_store.ts +96 -124
  438. package/src/storage/fact_store/fact_service.ts +69 -0
  439. package/src/storage/fact_store/fact_store.ts +487 -0
  440. package/src/storage/fact_store/fact_store_keys.ts +75 -0
  441. package/src/storage/fact_store/index.ts +15 -0
  442. package/src/storage/fact_store/origin_state.ts +84 -0
  443. package/src/storage/fact_store/stored_fact.ts +80 -0
  444. package/src/storage/index.ts +2 -1
  445. package/src/storage/metadata.ts +1 -1
  446. package/src/storage/note_store/note_store.ts +226 -187
  447. package/src/storage/note_store/stored_note.ts +5 -27
  448. package/src/storage/open_pxe_stores.ts +52 -0
  449. package/src/storage/private_event_store/private_event_store.ts +52 -54
  450. package/src/storage/private_event_store/stored_private_event.ts +1 -1
  451. package/src/storage/store_identity.ts +72 -0
  452. package/src/storage/tagging_store/index.ts +1 -1
  453. package/src/storage/tagging_store/recipient_tagging_store.ts +5 -9
  454. package/src/storage/tagging_store/sender_tagging_store.ts +68 -21
  455. package/src/storage/tagging_store/tagging_secret_sources_store.ts +138 -0
  456. package/src/tagging/constants.ts +30 -10
  457. package/src/tagging/get_all_logs_by_tags.ts +78 -50
  458. package/src/tagging/index.ts +5 -4
  459. package/src/tagging/persist_sender_tagging_index_ranges.ts +57 -0
  460. package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +358 -0
  461. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
  462. package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
  463. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +41 -19
  464. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +23 -8
  465. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +10 -7
  466. package/src/tagging/testing/tag_query_test_utils.ts +11 -0
  467. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +0 -9
  468. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +0 -1
  469. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +0 -38
  470. package/dest/contract_function_simulator/oracle/oracle.d.ts +0 -80
  471. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +0 -1
  472. package/dest/contract_function_simulator/oracle/oracle.js +0 -458
  473. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +0 -6
  474. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +0 -1
  475. package/dest/contract_function_simulator/proxied_contract_data_source.js +0 -80
  476. package/dest/contract_sync/contract_sync_service.d.ts +0 -44
  477. package/dest/contract_sync/contract_sync_service.d.ts.map +0 -1
  478. package/dest/contract_sync/contract_sync_service.js +0 -104
  479. package/dest/contract_sync/helpers.d.ts +0 -28
  480. package/dest/contract_sync/helpers.d.ts.map +0 -1
  481. package/dest/contract_sync/helpers.js +0 -60
  482. package/dest/messages/message_context_service.d.ts +0 -17
  483. package/dest/messages/message_context_service.d.ts.map +0 -1
  484. package/dest/messages/message_context_service.js +0 -36
  485. package/dest/storage/tagging_store/sender_address_book_store.d.ts +0 -14
  486. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +0 -1
  487. package/dest/storage/tagging_store/sender_address_book_store.js +0 -36
  488. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +0 -14
  489. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +0 -1
  490. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +0 -99
  491. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +0 -14
  492. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +0 -1
  493. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +0 -33
  494. package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +0 -98
  495. package/src/contract_function_simulator/oracle/oracle.ts +0 -721
  496. package/src/contract_function_simulator/proxied_contract_data_source.ts +0 -83
  497. package/src/contract_sync/helpers.ts +0 -98
  498. package/src/messages/message_context_service.ts +0 -44
  499. package/src/storage/tagging_store/sender_address_book_store.ts +0 -48
  500. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -140
  501. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -44
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  type ConfigMappingsType,
3
3
  booleanConfigHelper,
4
+ enumConfigHelper,
4
5
  getConfigFromMappings,
5
6
  numberConfigHelper,
6
7
  parseBooleanEnv,
@@ -9,6 +10,7 @@ import { type ChainConfig, chainConfigMappings } from '@aztec/stdlib/config';
9
10
  import { type DataStoreConfig, dataConfigMappings } from '@aztec/stdlib/kv-store';
10
11
 
11
12
  export { getPackageInfo } from './package_info.js';
13
+ export * from '../hooks/index.js';
12
14
 
13
15
  /**
14
16
  * Configuration settings for the prover factory
@@ -26,6 +28,12 @@ export interface BlockSynchronizerConfig {
26
28
  l2BlockBatchSize: number;
27
29
  /** Which chain tip to sync to (proposed, checkpointed, proven, finalized) */
28
30
  syncChainTip?: 'proposed' | 'checkpointed' | 'proven' | 'finalized';
31
+ /**
32
+ * Whether PXE should automatically sync with the node before each operation (simulate, prove, profile,
33
+ * execute utility, get private events, update contract). When disabled, callers (e.g. wallets) are
34
+ * responsible for calling `pxe.sync()` explicitly
35
+ */
36
+ autoSync: boolean;
29
37
  }
30
38
 
31
39
  export type PXEConfig = KernelProverConfig & DataStoreConfig & ChainConfig & BlockSynchronizerConfig;
@@ -58,14 +66,13 @@ export const pxeConfigMappings: ConfigMappingsType<PXEConfig> = {
58
66
  syncChainTip: {
59
67
  env: 'PXE_SYNC_CHAIN_TIP',
60
68
  description: 'Which chain tip to sync to (proposed, checkpointed, proven, finalized)',
61
- defaultValue: 'proposed',
62
- parseEnv: (val: string) => {
63
- const allowedValues = ['proposed', 'checkpointed', 'proven', 'finalized'];
64
- if (allowedValues.includes(val)) {
65
- return val;
66
- }
67
- throw new Error(`Invalid value for PXE_SYNC_CHAIN_TIP: ${val}. Allowed values are: ${allowedValues.join(', ')}`);
68
- },
69
+ ...enumConfigHelper(['proposed', 'checkpointed', 'proven', 'finalized'], 'proposed'),
70
+ },
71
+ autoSync: {
72
+ env: 'PXE_AUTO_SYNC',
73
+ description:
74
+ 'Whether PXE syncs with the node automatically before each operation. Disable to let the caller (e.g. a wallet) drive syncs explicitly via pxe.sync().',
75
+ ...booleanConfigHelper(true),
69
76
  },
70
77
  };
71
78
 
@@ -1,3 +1,3 @@
1
1
  export function getPackageInfo() {
2
- return { version: '5.0.0', name: '@aztec/pxe' };
2
+ return { version: '6.0.0', name: '@aztec/pxe' };
3
3
  }
@@ -0,0 +1,83 @@
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
+ import { isProtocolContract } from '@aztec/protocol-contracts';
3
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
4
+ import type { AztecNode } from '@aztec/stdlib/interfaces/client';
5
+ import type { BlockHeader } from '@aztec/stdlib/tx';
6
+
7
+ import type { ContractStore } from '../storage/contract_store/contract_store.js';
8
+
9
+ /**
10
+ * Resolves the contract class id that an address runs at a given anchor block, as tracked by the chain.
11
+ *
12
+ * PXE does not store a contract's current class id: it is mutable, chain-derived state that changes when a contract is
13
+ * upgraded and can be undone by a reorg. Instead this service asks the node for the current class at an anchor block,
14
+ * falling back to a local instance if no upgrades were scheduled.
15
+ */
16
+ export class ContractClassService {
17
+ /**
18
+ * Class ids are cached per `(address, anchorHash)`. This avoid unnecessary network roundtrips in scenarios where
19
+ * multiple executions are done on the same anchor block (e.g. simulation followed by witgen), or when the same
20
+ * contract is invoked multiple times in an execution (e.g. authwit checks).
21
+ * It also means the callers don't need to worry about caching this service's return values, simplifying callsites.
22
+ */
23
+ #cache: Map<string, Promise<Fr | undefined>> = new Map();
24
+
25
+ constructor(
26
+ private node: AztecNode,
27
+ private contractStore: ContractStore,
28
+ ) {}
29
+
30
+ /**
31
+ * Returns the class id that corresponds to `address` as of `anchorBlockHeader`, or `undefined` if no instance is
32
+ * registered for `address`. A missing instance is an absence the caller decides how to handle, not an error; genuine
33
+ * failures (e.g. the node being unreachable) still throw.
34
+ */
35
+ async getCurrentClassId(address: AztecAddress, anchorBlockHeader: BlockHeader): Promise<Fr | undefined> {
36
+ // Protocol contracts are not in the registry and cannot be upgraded, so their original class is always current.
37
+ // Short-circuiting avoids a node round-trip.
38
+ if (isProtocolContract(address)) {
39
+ const instance = await this.contractStore.getContractInstance(address);
40
+ return instance?.originalContractClassId;
41
+ }
42
+
43
+ const key = `${address.toString()}:${(await anchorBlockHeader.hash()).toString()}`;
44
+ let promise = this.#cache.get(key);
45
+ if (!promise) {
46
+ promise = (async () => {
47
+ // The node resolves the current class from the same scheduled value change the AVM enforces against the public
48
+ // data tree. If the contract was upgraded the node returns a non-undefined instance; an undefined result means
49
+ // no upgrade happened (or the node has no record of it, e.g. it was never publicly deployed), so the original
50
+ // class is current.
51
+
52
+ const nodeInstance = await this.node.getContract(address, await anchorBlockHeader.hash());
53
+
54
+ if (nodeInstance) {
55
+ return nodeInstance.currentContractClassId;
56
+ } else {
57
+ return (await this.contractStore.getContractInstance(address))?.originalContractClassId;
58
+ }
59
+ })().catch(err => {
60
+ this.#cache.delete(key);
61
+ throw err;
62
+ });
63
+ this.#cache.set(key, promise);
64
+ }
65
+
66
+ const classId = await promise;
67
+ if (classId === undefined) {
68
+ // Don't memoize a missing instance: it may be registered later in this PXE (e.g. via contract sync
69
+ // mid-execution), and a cached miss would then hide it. Only successful resolutions stay cached.
70
+ this.#cache.delete(key);
71
+ }
72
+ return classId;
73
+ }
74
+
75
+ /**
76
+ * Clears the cache.
77
+ *
78
+ * This is not required for correctness, only to limit how much memory the cache uses. The cache is resilient against
79
+ * reorgs etc. as it is based on block hashes, not block numbers. */
80
+ wipe(): void {
81
+ this.#cache.clear();
82
+ }
83
+ }
@@ -1,17 +1,27 @@
1
1
  import type { Logger } from '@aztec/foundation/log';
2
+ import { Semaphore } from '@aztec/foundation/queue';
3
+ import { isProtocolContract } from '@aztec/protocol-contracts';
2
4
  import type { FunctionCall, FunctionSelector } from '@aztec/stdlib/abi';
3
5
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
4
6
  import type { AztecNode } from '@aztec/stdlib/interfaces/client';
5
7
  import type { BlockHeader } from '@aztec/stdlib/tx';
6
8
 
7
9
  import type { StagedStore } from '../job_coordinator/job_coordinator.js';
10
+ import { NoteService } from '../notes/note_service.js';
8
11
  import type { ContractStore } from '../storage/contract_store/contract_store.js';
9
12
  import type { NoteStore } from '../storage/note_store/note_store.js';
10
- import { syncState, verifyCurrentClassId } from './helpers.js';
13
+ import type { ContractClassService } from './contract_class_service.js';
14
+ import { syncScope } from './helpers.js';
11
15
 
12
16
  /**
13
- * Service for syncing the private state of contracts and verifying that the PXE holds the current class artifact.
14
- * It uses a cache to avoid redundant sync operations - the cache is wiped when the anchor block changes.
17
+ * Maximum number of scope syncs running concurrently within a single sync call. Sized to trade off parallelism
18
+ * on non-ACIR work (node RPC, note store reads) against memory pressure from concurrent circuit execution.
19
+ */
20
+ export const MAX_CONCURRENT_SCOPE_SYNCS = 5;
21
+
22
+ /**
23
+ * Service for syncing the private state of contracts. It uses a cache to avoid redundant sync operations - the cache
24
+ * is wiped when the anchor block changes.
15
25
  *
16
26
  * TODO: The StagedStore naming is broken here. Figure out a better name.
17
27
  */
@@ -23,23 +33,16 @@ export class ContractSyncService implements StagedStore {
23
33
  // The value is a promise that resolves when the contract is synced.
24
34
  private syncedContracts: Map<string, Promise<void>> = new Map();
25
35
 
26
- // Per-job excluded contract addresses - these contracts should not be synced.
27
- private excludedFromSync: Map<string, Set<string>> = new Map();
28
-
29
36
  constructor(
30
37
  private aztecNode: AztecNode,
31
38
  private contractStore: ContractStore,
39
+ private contractClassService: ContractClassService,
32
40
  private noteStore: NoteStore,
33
41
  private log: Logger,
34
42
  ) {}
35
43
 
36
- /** Sets contracts that should be skipped during sync for a specific job. */
37
- setExcludedFromSync(jobId: string, addresses: Set<string>): void {
38
- this.excludedFromSync.set(jobId, addresses);
39
- }
40
-
41
44
  /**
42
- * Ensures a contract's private state is synchronized and that the PXE holds the current class artifact.
45
+ * Ensures a contract's private state is synchronized.
43
46
  * Uses a cache to avoid redundant sync operations - the cache is wiped when the anchor block changes.
44
47
  * @param contractAddress - The address of the contract to sync.
45
48
  * @param functionToInvokeAfterSync - The function selector that will be called after sync (used to validate it's
@@ -55,18 +58,15 @@ export class ContractSyncService implements StagedStore {
55
58
  jobId: string,
56
59
  scopes: AztecAddress[],
57
60
  ): Promise<void> {
58
- if (this.#shouldSkipSync(jobId, contractAddress)) {
59
- return;
60
- }
61
-
62
- this.#startSyncIfNeeded(contractAddress, scopes, scopesToSync =>
63
- this.#syncContract(
61
+ this.#startSyncIfNeeded(contractAddress, scopes, anchorBlockHeader, jobId, scope =>
62
+ syncScope(
64
63
  contractAddress,
64
+ this.contractStore,
65
+ this.contractClassService,
66
+ anchorBlockHeader,
65
67
  functionToInvokeAfterSync,
66
68
  utilityExecutor,
67
- anchorBlockHeader,
68
- jobId,
69
- scopesToSync,
69
+ scope,
70
70
  ),
71
71
  );
72
72
 
@@ -81,79 +81,75 @@ export class ContractSyncService implements StagedStore {
81
81
  scopes.forEach(scope => this.syncedContracts.delete(toKey(contractAddress, scope)));
82
82
  }
83
83
 
84
- async #syncContract(
85
- contractAddress: AztecAddress,
86
- functionToInvokeAfterSync: FunctionSelector | null,
87
- utilityExecutor: (call: FunctionCall, scopes: AztecAddress[]) => Promise<any>,
88
- anchorBlockHeader: BlockHeader,
89
- jobId: string,
90
- scopes: AztecAddress[],
91
- ): Promise<void> {
92
- this.log.debug(`Syncing contract ${contractAddress}`);
93
-
94
- await Promise.all([
95
- // Call sync_state sequentially for each scope address — each invocation synchronizes one account's private
96
- // state using scoped capsule arrays.
97
- (async () => {
98
- for (const scope of scopes) {
99
- await syncState(
100
- contractAddress,
101
- this.contractStore,
102
- functionToInvokeAfterSync,
103
- utilityExecutor,
104
- this.noteStore,
105
- this.aztecNode,
106
- anchorBlockHeader,
107
- jobId,
108
- scope,
109
- );
110
- }
111
- })(),
112
- verifyCurrentClassId(contractAddress, this.aztecNode, this.contractStore, anchorBlockHeader),
113
- ]);
114
- this.log.debug(`Contract ${contractAddress} synced`);
115
- }
116
-
117
84
  /** Clears sync cache. Called by BlockSynchronizer when anchor block changes. */
118
85
  wipe(): void {
119
86
  this.log.debug(`Wiping contract sync cache (${this.syncedContracts.size} entries)`);
120
87
  this.syncedContracts.clear();
121
88
  }
122
89
 
123
- commit(jobId: string): Promise<void> {
124
- // Clear excluded contracts for this job
125
- this.excludedFromSync.delete(jobId);
90
+ commit(_jobId: string): Promise<void> {
126
91
  return Promise.resolve();
127
92
  }
128
93
 
129
- discardStaged(jobId: string): Promise<void> {
94
+ discardStaged(_jobId: string): Promise<void> {
130
95
  // We clear the synced contracts cache here because, when the job is discarded, any associated database writes from
131
96
  // the sync are also undone.
132
97
  this.syncedContracts.clear();
133
- this.excludedFromSync.delete(jobId);
134
98
  return Promise.resolve();
135
99
  }
136
- /** Returns true if sync should be skipped for this contract */
137
- #shouldSkipSync(jobId: string, contractAddress: AztecAddress): boolean {
138
- return !!this.excludedFromSync.get(jobId)?.has(contractAddress.toString());
139
- }
140
100
 
141
- /** If there are unsynced scopes, starts sync and stores the promise in cache with error cleanup. */
101
+ /**
102
+ * For each unsynced scope, creates a promise that waits on:
103
+ * 1. Note nullifier sync (shared, batched across all unsynced scopes).
104
+ * 2. Per-scope sync (individual, semaphore-bounded).
105
+ */
142
106
  #startSyncIfNeeded(
143
107
  contractAddress: AztecAddress,
144
108
  scopes: AztecAddress[],
145
- syncFn: (scopesToSync: AztecAddress[]) => Promise<void>,
109
+ anchorBlockHeader: BlockHeader,
110
+ jobId: string,
111
+ syncScopeFn: (scope: AztecAddress) => Promise<void>,
146
112
  ): void {
147
113
  const scopesToSync = scopes.filter(scope => !this.syncedContracts.has(toKey(contractAddress, scope)));
148
- const keys = scopesToSync.map(scope => toKey(contractAddress, scope));
149
- if (keys.length === 0) {
114
+ if (scopesToSync.length === 0) {
150
115
  return;
151
116
  }
152
- const promise = syncFn(scopesToSync).catch(err => {
153
- keys.forEach(key => this.syncedContracts.delete(key));
154
- throw err;
155
- });
156
- keys.forEach(key => this.syncedContracts.set(key, promise));
117
+
118
+ this.log.debug(`Syncing contract ${contractAddress} for ${scopesToSync.length} scope(s)`);
119
+
120
+ const syncNullifiersPromise = this.#syncNoteNullifiers(contractAddress, anchorBlockHeader, jobId, scopesToSync);
121
+
122
+ // We build a new semaphore for each sync call, so it rate-limits the scopes within that single call. We do
123
+ // this so that if these scope syncs trigger nested syncs, the nested ones can execute without causing a deadlock.
124
+ const syncSlot = new Semaphore(MAX_CONCURRENT_SCOPE_SYNCS);
125
+
126
+ for (const scope of scopesToSync) {
127
+ const key = toKey(contractAddress, scope);
128
+ const promise = Promise.all([syncNullifiersPromise, runBounded(syncSlot, () => syncScopeFn(scope))])
129
+ .then(() => {})
130
+ .catch(err => {
131
+ this.syncedContracts.delete(key);
132
+ throw err;
133
+ });
134
+ this.syncedContracts.set(key, promise);
135
+ }
136
+ }
137
+
138
+ /** Syncs note nullifiers across all unsynced scopes in a single batched call. */
139
+ async #syncNoteNullifiers(
140
+ contractAddress: AztecAddress,
141
+ anchorBlockHeader: BlockHeader,
142
+ jobId: string,
143
+ scopes: AztecAddress[],
144
+ ): Promise<void> {
145
+ // Protocol contracts don't have private state to sync
146
+ if (isProtocolContract(contractAddress)) {
147
+ return;
148
+ }
149
+ // This runs in parallel with per-scope sync (which also writes to the note store). That's safe because
150
+ // the note store handles concurrent operations.
151
+ const noteService = new NoteService(this.noteStore, this.aztecNode, anchorBlockHeader, jobId);
152
+ await noteService.syncNoteNullifiers(contractAddress, scopes);
157
153
  }
158
154
 
159
155
  /** Collects all relevant scope promises (including in-flight ones from concurrent calls) and awaits them. */
@@ -168,3 +164,13 @@ export class ContractSyncService implements StagedStore {
168
164
  function toKey(contract: AztecAddress, scope: AztecAddress) {
169
165
  return `${contract.toString()}:${scope.toString()}`;
170
166
  }
167
+
168
+ /** Runs fn while holding a slot in the given semaphore, bounding concurrent scope syncs within a single call. */
169
+ async function runBounded<T>(syncSlot: Semaphore, fn: () => Promise<T>): Promise<T> {
170
+ await syncSlot.acquire();
171
+ try {
172
+ return await fn();
173
+ } finally {
174
+ syncSlot.release();
175
+ }
176
+ }
@@ -0,0 +1,35 @@
1
+ import type { FunctionCall, FunctionSelector } from '@aztec/stdlib/abi';
2
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
3
+ import type { BlockHeader } from '@aztec/stdlib/tx';
4
+
5
+ import type { ContractStore } from '../storage/contract_store/contract_store.js';
6
+ import type { ContractClassService } from './contract_class_service.js';
7
+ import { isSkipSyncContract } from './skip_sync_contracts.js';
8
+
9
+ export async function syncScope(
10
+ contractAddress: AztecAddress,
11
+ contractStore: ContractStore,
12
+ contractClassService: ContractClassService,
13
+ anchorBlockHeader: BlockHeader,
14
+ functionToInvokeAfterSync: FunctionSelector | null,
15
+ utilityExecutor: (privateSyncCall: FunctionCall, scopes: AztecAddress[]) => Promise<any>,
16
+ scope: AztecAddress,
17
+ ) {
18
+ // Some canonical contracts hold no private state, so there is nothing to sync (see `skipSyncContracts`).
19
+ if (isSkipSyncContract(contractAddress)) {
20
+ return;
21
+ }
22
+
23
+ const classId = await contractClassService.getCurrentClassId(contractAddress, anchorBlockHeader);
24
+ if (!classId) {
25
+ throw new Error(`Cannot sync contract ${contractAddress}: its instance is not registered nor published.`);
26
+ }
27
+ const syncStateFunctionCall = await contractStore.getFunctionCall('sync_state', [scope], contractAddress, classId);
28
+ if (functionToInvokeAfterSync && functionToInvokeAfterSync.equals(syncStateFunctionCall.selector)) {
29
+ throw new Error(
30
+ 'Forbidden `sync_state` invocation. `sync_state` can only be invoked by PXE, manual execution can lead to inconsistencies.',
31
+ );
32
+ }
33
+
34
+ await utilityExecutor(syncStateFunctionCall, [scope]);
35
+ }
@@ -0,0 +1,23 @@
1
+ import { ProtocolContractAddress } from '@aztec/protocol-contracts';
2
+ import { STANDARD_AUTH_REGISTRY_ADDRESS } from '@aztec/standard-contracts/auth-registry/constants';
3
+ import { STANDARD_MULTI_CALL_ENTRYPOINT_ADDRESS } from '@aztec/standard-contracts/multi-call-entrypoint/constants';
4
+ import { STANDARD_PUBLIC_CHECKS_ADDRESS } from '@aztec/standard-contracts/public-checks/constants';
5
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
6
+
7
+ /**
8
+ * Canonical contracts that hold no private state and are therefore never synced.
9
+ *
10
+ * The protocol contracts (registries, fee juice) plus the standard AuthRegistry, MultiCallEntrypoint and PublicChecks
11
+ * declare no notes and no events, so their macro-generated `sync_state` has nothing to discover.
12
+ */
13
+ export const skipSyncContracts: AztecAddress[] = [
14
+ ...Object.values(ProtocolContractAddress),
15
+ STANDARD_AUTH_REGISTRY_ADDRESS,
16
+ STANDARD_MULTI_CALL_ENTRYPOINT_ADDRESS,
17
+ STANDARD_PUBLIC_CHECKS_ADDRESS,
18
+ ];
19
+
20
+ /** Returns whether the given contract should be skipped during private state synchronization. */
21
+ export function isSkipSyncContract(address: AztecAddress): boolean {
22
+ return skipSyncContracts.some(a => a.equals(address));
23
+ }
@@ -0,0 +1,74 @@
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
+ import type { FunctionArtifactWithContractName, FunctionSelector } from '@aztec/stdlib/abi';
3
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
4
+ import type { ContractInstancePreimageWithAddress } from '@aztec/stdlib/contract';
5
+ import type { BlockHeader, ContractOverrides } from '@aztec/stdlib/tx';
6
+
7
+ import type { ContractClassService } from '../contract/contract_class_service.js';
8
+ import type { ContractStore } from '../storage/contract_store/contract_store.js';
9
+
10
+ /**
11
+ * Per-run view of contract data for a single simulation, bound to its anchor block.
12
+ *
13
+ * The {@link ContractStore} is pure class-id-keyed storage and has no notion of which class an address runs. This
14
+ * class bridges that gap: it resolves an address to its current class id (via the {@link ContractClassService}
15
+ * at the run's anchor block) and then serves artifacts from the store. It is also the single place contract
16
+ * overrides are applied — when an address is overridden, both its instance and its class id come from the override
17
+ * rather than the chain, so a simulation can execute different bytecode at that address. Overrides are only set for
18
+ * `simulateTx` (which skips the kernels), so the override path never reaches proving.
19
+ */
20
+ export class AnchoredContractData {
21
+ constructor(
22
+ private readonly store: ContractStore,
23
+ private readonly contractClassService: ContractClassService,
24
+ private readonly anchorBlockHeader: BlockHeader,
25
+ private readonly overrides?: ContractOverrides,
26
+ ) {}
27
+
28
+ /** Returns the address preimage of the instance at `address`, from the override if any, else from storage. */
29
+ getContractInstance(address: AztecAddress): Promise<ContractInstancePreimageWithAddress | undefined> {
30
+ const override = this.overrides?.[address.toString()];
31
+ if (override) {
32
+ return Promise.resolve(override.instance);
33
+ }
34
+ return this.store.getContractInstance(address);
35
+ }
36
+
37
+ /**
38
+ * Resolves the class id `address` runs in this simulation: the override's class if overridden, else resolved against
39
+ * the chain at the anchor block.
40
+ */
41
+ getCurrentClassId(address: AztecAddress): Promise<Fr | undefined> {
42
+ const override = this.overrides?.[address.toString()];
43
+ if (override) {
44
+ return Promise.resolve(override.instance.currentContractClassId);
45
+ }
46
+ return this.contractClassService.getCurrentClassId(address, this.anchorBlockHeader);
47
+ }
48
+
49
+ async getFunctionArtifact(
50
+ address: AztecAddress,
51
+ selector: FunctionSelector,
52
+ ): Promise<FunctionArtifactWithContractName | undefined> {
53
+ const classId = await this.getCurrentClassId(address);
54
+ return classId ? this.store.getFunctionArtifact(classId, selector) : undefined;
55
+ }
56
+
57
+ async getFunctionArtifactWithDebugMetadata(
58
+ address: AztecAddress,
59
+ selector: FunctionSelector,
60
+ ): Promise<FunctionArtifactWithContractName | undefined> {
61
+ const classId = await this.getCurrentClassId(address);
62
+ return classId ? this.store.getFunctionArtifactWithDebugMetadata(classId, selector) : undefined;
63
+ }
64
+
65
+ async getDebugContractName(address: AztecAddress): Promise<string | undefined> {
66
+ const classId = await this.getCurrentClassId(address);
67
+ return classId ? this.store.getDebugContractName(classId) : undefined;
68
+ }
69
+
70
+ async getDebugFunctionName(address: AztecAddress, selector: FunctionSelector): Promise<string> {
71
+ const classId = await this.getCurrentClassId(address);
72
+ return classId ? this.store.getDebugFunctionName(classId, selector) : `${address}:${selector}`;
73
+ }
74
+ }
@@ -0,0 +1,89 @@
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
3
+ import type { BlockHash, BlockParameter } from '@aztec/stdlib/block';
4
+ import type { AztecNode } from '@aztec/stdlib/interfaces/server';
5
+ import type { TxHash } from '@aztec/stdlib/tx';
6
+
7
+ /**
8
+ * Per-execution cache for immutable Aztec node reads.
9
+ */
10
+ export class AztecNodeReadCache {
11
+ private readonly cache = new Map<string, Promise<unknown>>();
12
+
13
+ constructor(private readonly aztecNode: AztecNode) {}
14
+
15
+ /** Fetches a block without reissuing the same node request. */
16
+ public getBlock(block: BlockParameter) {
17
+ return this.#cachedRead(`block:${this.#keyPart(block)}`, () => this.aztecNode.getBlock(block));
18
+ }
19
+
20
+ /** Fetches a transaction receipt with its effect attached. */
21
+ public getTxReceiptWithEffect(txHash: TxHash) {
22
+ return this.#cachedRead(`tx-receipt-with-effect:${txHash.toString()}`, () =>
23
+ this.aztecNode.getTxReceipt(txHash, { includeTxEffect: true } as const),
24
+ );
25
+ }
26
+
27
+ /** Fetches an archive-tree witness for a block hash. */
28
+ public getBlockHashMembershipWitness(referenceBlock: BlockParameter, blockHash: BlockHash) {
29
+ return this.#cachedRead(
30
+ `block-hash-membership-witness:${this.#keyPart(referenceBlock)}:${blockHash.toString()}`,
31
+ () => this.aztecNode.getBlockHashMembershipWitness(referenceBlock, blockHash),
32
+ );
33
+ }
34
+
35
+ /** Fetches a public-data-tree witness for a leaf slot. */
36
+ public getPublicDataWitness(referenceBlock: BlockParameter, leafSlot: Fr) {
37
+ return this.#cachedRead(`public-data-witness:${this.#keyPart(referenceBlock)}:${leafSlot.toString()}`, () =>
38
+ this.aztecNode.getPublicDataWitness(referenceBlock, leafSlot),
39
+ );
40
+ }
41
+
42
+ /** Fetches public storage for a single slot. */
43
+ public getPublicStorageAt(referenceBlock: BlockParameter, contractAddress: AztecAddress, storageSlot: Fr) {
44
+ return this.#cachedRead(
45
+ `public-storage:${this.#keyPart(referenceBlock)}:${contractAddress.toString()}:${storageSlot.toString()}`,
46
+ () => this.aztecNode.getPublicStorageAt(referenceBlock, contractAddress, storageSlot),
47
+ );
48
+ }
49
+
50
+ /** Fetches a contiguous public storage range, reusing cached reads for overlapping slots. */
51
+ public getPublicStorageRange(
52
+ referenceBlock: BlockParameter,
53
+ contractAddress: AztecAddress,
54
+ startStorageSlot: Fr,
55
+ numberOfElements: number,
56
+ ) {
57
+ const slots = Array(numberOfElements)
58
+ .fill(0)
59
+ .map((_, i) => new Fr(startStorageSlot.value + BigInt(i)));
60
+
61
+ return Promise.all(slots.map(storageSlot => this.getPublicStorageAt(referenceBlock, contractAddress, storageSlot)));
62
+ }
63
+
64
+ #cachedRead<T>(key: string, fetch: () => Promise<T>): Promise<T> {
65
+ const cached = this.cache.get(key);
66
+ if (cached) {
67
+ return cached as Promise<T>;
68
+ }
69
+
70
+ const promise = fetch();
71
+ promise.catch(() => this.cache.delete(key));
72
+ this.cache.set(key, promise);
73
+ return promise;
74
+ }
75
+
76
+ #keyPart(value: unknown): string {
77
+ if (['string', 'number', 'bigint', 'boolean'].includes(typeof value)) {
78
+ return String(value);
79
+ }
80
+ if (value && typeof value === 'object') {
81
+ const toString = (value as { toString?: () => string }).toString;
82
+ if (toString && toString !== Object.prototype.toString) {
83
+ return toString.call(value);
84
+ }
85
+ return JSON.stringify(value, (_key, nested) => (typeof nested === 'bigint' ? nested.toString() : nested));
86
+ }
87
+ return String(value);
88
+ }
89
+ }