@aztec/pxe 5.0.0-private.20260319 → 5.0.0-rc.2

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 (453) hide show
  1. package/dest/bin/check_oracle_version.js +45 -111
  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 +51 -0
  6. package/dest/bin/oracle_version_helpers.d.ts.map +1 -0
  7. package/dest/bin/oracle_version_helpers.js +254 -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 +20 -14
  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/contract_function_simulator/contract_function_simulator.d.ts +19 -19
  18. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  19. package/dest/contract_function_simulator/contract_function_simulator.js +57 -32
  20. package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
  21. package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
  22. package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
  23. package/dest/contract_function_simulator/execution_note_cache.d.ts +2 -2
  24. package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
  25. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +5 -9
  26. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
  27. package/dest/contract_function_simulator/execution_tagging_index_cache.js +3 -7
  28. package/dest/contract_function_simulator/index.d.ts +24 -6
  29. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  30. package/dest/contract_function_simulator/index.js +11 -4
  31. package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts +29 -0
  32. package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts.map +1 -0
  33. package/dest/contract_function_simulator/noir-structs/bounded_vec.js +30 -0
  34. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts +9 -0
  35. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts.map +1 -0
  36. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.js +1 -0
  37. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts +7 -0
  38. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts.map +1 -0
  39. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.js +1 -0
  40. package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts +37 -0
  41. package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts.map +1 -0
  42. package/dest/contract_function_simulator/noir-structs/ephemeral_array.js +59 -0
  43. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +5 -5
  44. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  45. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +7 -9
  46. package/dest/contract_function_simulator/noir-structs/fact.d.ts +16 -0
  47. package/dest/contract_function_simulator/noir-structs/fact.d.ts.map +1 -0
  48. package/dest/contract_function_simulator/noir-structs/fact.js +6 -0
  49. package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts +27 -0
  50. package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts.map +1 -0
  51. package/dest/contract_function_simulator/noir-structs/fact_collection.js +29 -0
  52. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +19 -10
  53. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -1
  54. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +12 -24
  55. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +5 -9
  56. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
  57. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +2 -61
  58. package/dest/contract_function_simulator/noir-structs/note_data.d.ts +27 -0
  59. package/dest/contract_function_simulator/noir-structs/note_data.d.ts.map +1 -0
  60. package/dest/contract_function_simulator/noir-structs/note_data.js +3 -0
  61. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +5 -5
  62. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  63. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +8 -10
  64. package/dest/contract_function_simulator/noir-structs/option.d.ts +59 -0
  65. package/dest/contract_function_simulator/noir-structs/option.d.ts.map +1 -0
  66. package/dest/contract_function_simulator/noir-structs/option.js +67 -0
  67. package/dest/contract_function_simulator/noir-structs/origin_block.d.ts +11 -0
  68. package/dest/contract_function_simulator/noir-structs/origin_block.d.ts.map +1 -0
  69. package/dest/contract_function_simulator/noir-structs/origin_block.js +5 -0
  70. package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts +8 -0
  71. package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts.map +1 -0
  72. package/dest/contract_function_simulator/noir-structs/provided_secret.js +1 -0
  73. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts +21 -0
  74. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts.map +1 -0
  75. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.js +33 -0
  76. package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts +21 -0
  77. package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts.map +1 -0
  78. package/dest/contract_function_simulator/noir-structs/resolved_tx.js +50 -0
  79. package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts +14 -0
  80. package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts.map +1 -0
  81. package/dest/contract_function_simulator/noir-structs/tx_effect_data.js +5 -0
  82. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +6 -11
  83. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
  84. package/dest/contract_function_simulator/noir-structs/utility_context.js +1 -20
  85. package/dest/contract_function_simulator/oracle/acir_callback.d.ts +16 -0
  86. package/dest/contract_function_simulator/oracle/acir_callback.d.ts.map +1 -0
  87. package/dest/contract_function_simulator/oracle/acir_callback.js +71 -0
  88. package/dest/contract_function_simulator/oracle/index.d.ts +2 -13
  89. package/dest/contract_function_simulator/oracle/index.d.ts.map +1 -1
  90. package/dest/contract_function_simulator/oracle/index.js +1 -1
  91. package/dest/contract_function_simulator/oracle/interfaces.d.ts +15 -103
  92. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  93. package/dest/contract_function_simulator/oracle/interfaces.js +2 -2
  94. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -14
  95. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
  96. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.js +1 -24
  97. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +2 -2
  98. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
  99. package/dest/contract_function_simulator/oracle/note_packing_utils.js +2 -2
  100. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts +135 -0
  101. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -0
  102. package/dest/contract_function_simulator/oracle/oracle_registry.js +976 -0
  103. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +183 -0
  104. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts.map +1 -0
  105. package/dest/contract_function_simulator/oracle/oracle_type_mappings.js +1222 -0
  106. package/dest/contract_function_simulator/oracle/private_execution.d.ts +1 -1
  107. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  108. package/dest/contract_function_simulator/oracle/private_execution.js +3 -4
  109. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +44 -42
  110. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  111. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +147 -59
  112. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +143 -71
  113. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  114. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +485 -187
  115. package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
  116. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
  117. package/dest/contract_function_simulator/pick_notes.js +20 -3
  118. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +1 -1
  119. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
  120. package/dest/contract_function_simulator/proxied_contract_data_source.js +35 -64
  121. package/dest/contract_function_simulator/transient_array_service.d.ts +31 -0
  122. package/dest/contract_function_simulator/transient_array_service.d.ts.map +1 -0
  123. package/dest/contract_function_simulator/transient_array_service.js +62 -0
  124. package/dest/contract_logging.d.ts +9 -4
  125. package/dest/contract_logging.d.ts.map +1 -1
  126. package/dest/contract_logging.js +21 -6
  127. package/dest/contract_sync/contract_sync_service.d.ts +11 -9
  128. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -1
  129. package/dest/contract_sync/contract_sync_service.js +73 -51
  130. package/dest/contract_sync/helpers.d.ts +8 -9
  131. package/dest/contract_sync/helpers.d.ts.map +1 -1
  132. package/dest/contract_sync/helpers.js +23 -30
  133. package/dest/debug/pxe_debug_utils.d.ts +3 -8
  134. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  135. package/dest/debug/pxe_debug_utils.js +0 -6
  136. package/dest/entrypoints/client/bundle/index.d.ts +1 -2
  137. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  138. package/dest/entrypoints/client/bundle/index.js +0 -1
  139. package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
  140. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  141. package/dest/entrypoints/client/bundle/utils.js +18 -5
  142. package/dest/entrypoints/client/lazy/index.d.ts +1 -2
  143. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  144. package/dest/entrypoints/client/lazy/index.js +0 -1
  145. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  146. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  147. package/dest/entrypoints/client/lazy/utils.js +18 -5
  148. package/dest/entrypoints/pxe_creation_options.d.ts +16 -2
  149. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  150. package/dest/entrypoints/pxe_creation_options.js +3 -1
  151. package/dest/entrypoints/server/index.d.ts +2 -3
  152. package/dest/entrypoints/server/index.d.ts.map +1 -1
  153. package/dest/entrypoints/server/index.js +1 -2
  154. package/dest/entrypoints/server/utils.d.ts +4 -3
  155. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  156. package/dest/entrypoints/server/utils.js +20 -6
  157. package/dest/error_enriching.js +1 -1
  158. package/dest/events/event_service.d.ts +15 -6
  159. package/dest/events/event_service.d.ts.map +1 -1
  160. package/dest/events/event_service.js +44 -11
  161. package/dest/events/private_event_filter_validator.d.ts +3 -2
  162. package/dest/events/private_event_filter_validator.d.ts.map +1 -1
  163. package/dest/events/private_event_filter_validator.js +15 -0
  164. package/dest/hooks/authorize_utility_call.d.ts +41 -0
  165. package/dest/hooks/authorize_utility_call.d.ts.map +1 -0
  166. package/dest/hooks/authorize_utility_call.js +4 -0
  167. package/dest/hooks/execution_hooks.d.ts +51 -0
  168. package/dest/hooks/execution_hooks.d.ts.map +1 -0
  169. package/dest/hooks/execution_hooks.js +9 -0
  170. package/dest/hooks/index.d.ts +4 -0
  171. package/dest/hooks/index.d.ts.map +1 -0
  172. package/dest/hooks/index.js +1 -0
  173. package/dest/hooks/resolve_tagging_secret_strategy.d.ts +41 -0
  174. package/dest/hooks/resolve_tagging_secret_strategy.d.ts.map +1 -0
  175. package/dest/hooks/resolve_tagging_secret_strategy.js +3 -0
  176. package/dest/logs/log_service.d.ts +12 -12
  177. package/dest/logs/log_service.d.ts.map +1 -1
  178. package/dest/logs/log_service.js +169 -81
  179. package/dest/messages/tx_resolver_service.d.ts +17 -0
  180. package/dest/messages/tx_resolver_service.d.ts.map +1 -0
  181. package/dest/messages/tx_resolver_service.js +55 -0
  182. package/dest/notes/note_service.d.ts +27 -6
  183. package/dest/notes/note_service.d.ts.map +1 -1
  184. package/dest/notes/note_service.js +80 -56
  185. package/dest/notes_filter.d.ts +2 -3
  186. package/dest/notes_filter.d.ts.map +1 -1
  187. package/dest/oracle_version.d.ts +4 -3
  188. package/dest/oracle_version.d.ts.map +1 -1
  189. package/dest/oracle_version.js +20 -10
  190. package/dest/private_kernel/batch_planner.d.ts +47 -0
  191. package/dest/private_kernel/batch_planner.d.ts.map +1 -0
  192. package/dest/private_kernel/batch_planner.js +104 -0
  193. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +1 -1
  194. package/dest/private_kernel/hints/test_utils.d.ts +1 -1
  195. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -1
  196. package/dest/private_kernel/hints/test_utils.js +3 -4
  197. package/dest/private_kernel/private_kernel_execution_prover.d.ts +6 -2
  198. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  199. package/dest/private_kernel/private_kernel_execution_prover.js +152 -59
  200. package/dest/private_kernel/private_kernel_oracle.d.ts +10 -10
  201. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  202. package/dest/private_kernel/private_kernel_oracle.js +24 -22
  203. package/dest/pxe.d.ts +104 -27
  204. package/dest/pxe.d.ts.map +1 -1
  205. package/dest/pxe.js +229 -130
  206. package/dest/storage/allowed_scopes.d.ts +6 -0
  207. package/dest/storage/allowed_scopes.d.ts.map +1 -0
  208. package/dest/storage/allowed_scopes.js +7 -0
  209. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -6
  210. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
  211. package/dest/storage/anchor_block_store/anchor_block_store.js +9 -7
  212. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts +42 -0
  213. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts.map +1 -0
  214. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.js +93 -0
  215. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts +15 -0
  216. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts.map +1 -0
  217. package/dest/storage/backwards_compatibility_tests/schema_tests.js +647 -0
  218. package/dest/storage/backwards_compatibility_tests/store_spy.d.ts +19 -0
  219. package/dest/storage/backwards_compatibility_tests/store_spy.d.ts.map +1 -0
  220. package/dest/storage/backwards_compatibility_tests/store_spy.js +63 -0
  221. package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
  222. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  223. package/dest/storage/capsule_store/capsule_service.js +47 -0
  224. package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
  225. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  226. package/dest/storage/capsule_store/capsule_store.js +36 -28
  227. package/dest/storage/capsule_store/index.d.ts +2 -1
  228. package/dest/storage/capsule_store/index.d.ts.map +1 -1
  229. package/dest/storage/capsule_store/index.js +1 -0
  230. package/dest/storage/contract_store/contract_store.d.ts +1 -1
  231. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  232. package/dest/storage/contract_store/contract_store.js +11 -28
  233. package/dest/storage/fact_store/fact_service.d.ts +20 -0
  234. package/dest/storage/fact_store/fact_service.d.ts.map +1 -0
  235. package/dest/storage/fact_store/fact_service.js +30 -0
  236. package/dest/storage/fact_store/fact_store.d.ts +95 -0
  237. package/dest/storage/fact_store/fact_store.d.ts.map +1 -0
  238. package/dest/storage/fact_store/fact_store.js +408 -0
  239. package/dest/storage/fact_store/fact_store_keys.d.ts +34 -0
  240. package/dest/storage/fact_store/fact_store_keys.d.ts.map +1 -0
  241. package/dest/storage/fact_store/fact_store_keys.js +50 -0
  242. package/dest/storage/fact_store/index.d.ts +5 -0
  243. package/dest/storage/fact_store/index.d.ts.map +1 -0
  244. package/dest/storage/fact_store/index.js +3 -0
  245. package/dest/storage/fact_store/stored_fact.d.ts +32 -0
  246. package/dest/storage/fact_store/stored_fact.d.ts.map +1 -0
  247. package/dest/storage/fact_store/stored_fact.js +64 -0
  248. package/dest/storage/index.d.ts +3 -2
  249. package/dest/storage/index.d.ts.map +1 -1
  250. package/dest/storage/index.js +2 -1
  251. package/dest/storage/metadata.d.ts +1 -1
  252. package/dest/storage/metadata.js +1 -1
  253. package/dest/storage/note_store/note_store.d.ts +42 -33
  254. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  255. package/dest/storage/note_store/note_store.js +199 -170
  256. package/dest/storage/note_store/stored_note.d.ts +3 -8
  257. package/dest/storage/note_store/stored_note.d.ts.map +1 -1
  258. package/dest/storage/note_store/stored_note.js +4 -20
  259. package/dest/storage/open_pxe_stores.d.ts +35 -0
  260. package/dest/storage/open_pxe_stores.d.ts.map +1 -0
  261. package/dest/storage/open_pxe_stores.js +29 -0
  262. package/dest/storage/private_event_store/private_event_store.d.ts +13 -16
  263. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  264. package/dest/storage/private_event_store/private_event_store.js +43 -43
  265. package/dest/storage/private_event_store/stored_private_event.js +1 -1
  266. package/dest/storage/tagging_store/index.d.ts +2 -2
  267. package/dest/storage/tagging_store/index.d.ts.map +1 -1
  268. package/dest/storage/tagging_store/index.js +1 -1
  269. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
  270. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  271. package/dest/storage/tagging_store/sender_tagging_store.d.ts +5 -5
  272. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  273. package/dest/storage/tagging_store/sender_tagging_store.js +3 -3
  274. package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts +40 -0
  275. package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts.map +1 -0
  276. package/dest/storage/tagging_store/tagging_secret_sources_store.js +92 -0
  277. package/dest/tagging/get_all_logs_by_tags.d.ts +34 -10
  278. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
  279. package/dest/tagging/get_all_logs_by_tags.js +36 -37
  280. package/dest/tagging/index.d.ts +5 -4
  281. package/dest/tagging/index.d.ts.map +1 -1
  282. package/dest/tagging/index.js +4 -3
  283. package/dest/tagging/persist_sender_tagging_index_ranges.d.ts +29 -0
  284. package/dest/tagging/persist_sender_tagging_index_ranges.d.ts.map +1 -0
  285. package/dest/tagging/persist_sender_tagging_index_ranges.js +42 -0
  286. package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +69 -0
  287. package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts.map +1 -0
  288. package/dest/tagging/recipient_sync/sync_tagged_private_logs.js +203 -0
  289. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +3 -3
  290. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -1
  291. package/dest/tagging/reconcile_tagging_index_ranges.d.ts +36 -0
  292. package/dest/tagging/reconcile_tagging_index_ranges.d.ts.map +1 -0
  293. package/dest/tagging/reconcile_tagging_index_ranges.js +74 -0
  294. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -5
  295. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  296. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +26 -14
  297. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +11 -6
  298. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  299. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +21 -0
  300. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +4 -4
  301. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  302. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +2 -2
  303. package/package.json +20 -17
  304. package/src/bin/check_oracle_version.ts +51 -133
  305. package/src/bin/index.ts +5 -0
  306. package/src/bin/oracle_version_helpers.ts +311 -0
  307. package/src/block_synchronizer/block_stream_source.ts +42 -0
  308. package/src/block_synchronizer/block_synchronizer.ts +93 -38
  309. package/src/config/index.ts +15 -8
  310. package/src/contract_function_simulator/contract_function_simulator.ts +86 -48
  311. package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
  312. package/src/contract_function_simulator/execution_note_cache.ts +1 -1
  313. package/src/contract_function_simulator/execution_tagging_index_cache.ts +5 -9
  314. package/src/contract_function_simulator/index.ts +63 -5
  315. package/src/contract_function_simulator/noir-structs/bounded_vec.ts +43 -0
  316. package/src/contract_function_simulator/noir-structs/contract_class_log_data.ts +9 -0
  317. package/src/contract_function_simulator/noir-structs/embedded_curve_point.ts +4 -0
  318. package/src/contract_function_simulator/noir-structs/ephemeral_array.ts +66 -0
  319. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +5 -7
  320. package/src/contract_function_simulator/noir-structs/fact.ts +13 -0
  321. package/src/contract_function_simulator/noir-structs/fact_collection.ts +59 -0
  322. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +27 -20
  323. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +8 -61
  324. package/src/contract_function_simulator/noir-structs/note_data.ts +27 -0
  325. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +6 -8
  326. package/src/contract_function_simulator/noir-structs/option.ts +75 -0
  327. package/src/contract_function_simulator/noir-structs/origin_block.ts +8 -0
  328. package/src/contract_function_simulator/noir-structs/provided_secret.ts +5 -0
  329. package/src/contract_function_simulator/noir-structs/resolved_tagging_strategy.ts +45 -0
  330. package/src/contract_function_simulator/noir-structs/resolved_tx.ts +53 -0
  331. package/src/contract_function_simulator/noir-structs/tx_effect_data.ts +15 -0
  332. package/src/contract_function_simulator/noir-structs/utility_context.ts +5 -17
  333. package/src/contract_function_simulator/oracle/acir_callback.ts +108 -0
  334. package/src/contract_function_simulator/oracle/index.ts +1 -15
  335. package/src/contract_function_simulator/oracle/interfaces.ts +11 -176
  336. package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +6 -21
  337. package/src/contract_function_simulator/oracle/note_packing_utils.ts +3 -3
  338. package/src/contract_function_simulator/oracle/oracle_registry.ts +681 -0
  339. package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +947 -0
  340. package/src/contract_function_simulator/oracle/private_execution.ts +3 -4
  341. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +182 -79
  342. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +743 -295
  343. package/src/contract_function_simulator/pick_notes.ts +22 -3
  344. package/src/contract_function_simulator/proxied_contract_data_source.ts +41 -64
  345. package/src/contract_function_simulator/transient_array_service.ts +91 -0
  346. package/src/contract_logging.ts +18 -5
  347. package/src/contract_sync/contract_sync_service.ts +101 -87
  348. package/src/contract_sync/helpers.ts +24 -43
  349. package/src/debug/pxe_debug_utils.ts +3 -11
  350. package/src/entrypoints/client/bundle/index.ts +0 -1
  351. package/src/entrypoints/client/bundle/utils.ts +17 -5
  352. package/src/entrypoints/client/lazy/index.ts +0 -1
  353. package/src/entrypoints/client/lazy/utils.ts +17 -5
  354. package/src/entrypoints/pxe_creation_options.ts +21 -1
  355. package/src/entrypoints/server/index.ts +1 -2
  356. package/src/entrypoints/server/utils.ts +24 -7
  357. package/src/error_enriching.ts +1 -1
  358. package/src/events/event_service.ts +69 -21
  359. package/src/events/private_event_filter_validator.ts +21 -1
  360. package/src/hooks/authorize_utility_call.ts +44 -0
  361. package/src/hooks/execution_hooks.ts +57 -0
  362. package/src/hooks/index.ts +11 -0
  363. package/src/hooks/resolve_tagging_secret_strategy.ts +46 -0
  364. package/src/logs/log_service.ts +204 -146
  365. package/src/messages/tx_resolver_service.ts +69 -0
  366. package/src/notes/note_service.ts +119 -85
  367. package/src/notes_filter.ts +1 -3
  368. package/src/oracle_version.ts +20 -10
  369. package/src/private_kernel/batch_planner.ts +169 -0
  370. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +1 -1
  371. package/src/private_kernel/hints/test_utils.ts +3 -10
  372. package/src/private_kernel/private_kernel_execution_prover.ts +240 -82
  373. package/src/private_kernel/private_kernel_oracle.ts +35 -25
  374. package/src/pxe.ts +369 -138
  375. package/src/storage/allowed_scopes.ts +14 -0
  376. package/src/storage/anchor_block_store/anchor_block_store.ts +9 -7
  377. package/src/storage/backwards_compatibility_tests/__snapshots__/AddressStore.json +22 -0
  378. package/src/storage/backwards_compatibility_tests/__snapshots__/AnchorBlockStore.json +3 -0
  379. package/src/storage/backwards_compatibility_tests/__snapshots__/CapsuleStore.json +16 -0
  380. package/src/storage/backwards_compatibility_tests/__snapshots__/ContractStore.json +28 -0
  381. package/src/storage/backwards_compatibility_tests/__snapshots__/FactStore.json +40 -0
  382. package/src/storage/backwards_compatibility_tests/__snapshots__/KeyStore.json +52 -0
  383. package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +40 -0
  384. package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +56 -0
  385. package/src/storage/backwards_compatibility_tests/__snapshots__/PrivateEventStore.json +44 -0
  386. package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +18 -0
  387. package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +22 -0
  388. package/src/storage/backwards_compatibility_tests/__snapshots__/TaggingSecretSourcesStore.json +30 -0
  389. package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +117 -0
  390. package/src/storage/backwards_compatibility_tests/kv_store_snapshot.ts +122 -0
  391. package/src/storage/backwards_compatibility_tests/schema_tests.ts +769 -0
  392. package/src/storage/backwards_compatibility_tests/store_spy.ts +73 -0
  393. package/src/storage/capsule_store/capsule_service.ts +85 -0
  394. package/src/storage/capsule_store/capsule_store.ts +44 -26
  395. package/src/storage/capsule_store/index.ts +1 -0
  396. package/src/storage/contract_store/contract_store.ts +16 -37
  397. package/src/storage/fact_store/fact_service.ts +45 -0
  398. package/src/storage/fact_store/fact_store.ts +487 -0
  399. package/src/storage/fact_store/fact_store_keys.ts +75 -0
  400. package/src/storage/fact_store/index.ts +4 -0
  401. package/src/storage/fact_store/stored_fact.ts +80 -0
  402. package/src/storage/index.ts +2 -1
  403. package/src/storage/metadata.ts +1 -1
  404. package/src/storage/note_store/note_store.ts +228 -192
  405. package/src/storage/note_store/stored_note.ts +5 -27
  406. package/src/storage/open_pxe_stores.ts +52 -0
  407. package/src/storage/private_event_store/private_event_store.ts +52 -54
  408. package/src/storage/private_event_store/stored_private_event.ts +1 -1
  409. package/src/storage/tagging_store/index.ts +1 -1
  410. package/src/storage/tagging_store/recipient_tagging_store.ts +5 -9
  411. package/src/storage/tagging_store/sender_tagging_store.ts +6 -6
  412. package/src/storage/tagging_store/tagging_secret_sources_store.ts +117 -0
  413. package/src/tagging/get_all_logs_by_tags.ts +78 -50
  414. package/src/tagging/index.ts +4 -3
  415. package/src/tagging/persist_sender_tagging_index_ranges.ts +57 -0
  416. package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +301 -0
  417. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
  418. package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
  419. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +41 -19
  420. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +23 -8
  421. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +4 -5
  422. package/dest/access_scopes.d.ts +0 -9
  423. package/dest/access_scopes.d.ts.map +0 -1
  424. package/dest/access_scopes.js +0 -6
  425. package/dest/contract_function_simulator/noir-structs/message_tx_context.d.ts +0 -16
  426. package/dest/contract_function_simulator/noir-structs/message_tx_context.d.ts.map +0 -1
  427. package/dest/contract_function_simulator/noir-structs/message_tx_context.js +0 -57
  428. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +0 -9
  429. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +0 -1
  430. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +0 -42
  431. package/dest/contract_function_simulator/oracle/oracle.d.ts +0 -61
  432. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +0 -1
  433. package/dest/contract_function_simulator/oracle/oracle.js +0 -437
  434. package/dest/messages/message_context_service.d.ts +0 -17
  435. package/dest/messages/message_context_service.d.ts.map +0 -1
  436. package/dest/messages/message_context_service.js +0 -36
  437. package/dest/storage/tagging_store/sender_address_book_store.d.ts +0 -14
  438. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +0 -1
  439. package/dest/storage/tagging_store/sender_address_book_store.js +0 -36
  440. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +0 -14
  441. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +0 -1
  442. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +0 -99
  443. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +0 -14
  444. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +0 -1
  445. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +0 -33
  446. package/src/access_scopes.ts +0 -9
  447. package/src/contract_function_simulator/noir-structs/message_tx_context.ts +0 -55
  448. package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +0 -135
  449. package/src/contract_function_simulator/oracle/oracle.ts +0 -675
  450. package/src/messages/message_context_service.ts +0 -45
  451. package/src/storage/tagging_store/sender_address_book_store.ts +0 -48
  452. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -140
  453. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -44
@@ -85,9 +85,24 @@ interface ContainsNote {
85
85
  }
86
86
 
87
87
  const selectPropertyFromPackedNoteContent = (noteData: Fr[], selector: PropertySelector): Fr => {
88
+ if (selector.index >= noteData.length) {
89
+ throw new Error(`Property selector index ${selector.index} out of bounds for note with ${noteData.length} fields`);
90
+ }
91
+ if (selector.offset + selector.length > Fr.SIZE_IN_BYTES) {
92
+ throw new Error(
93
+ `Property selector range (offset=${selector.offset}, length=${selector.length}) exceeds Fr buffer size of ${Fr.SIZE_IN_BYTES} bytes`,
94
+ );
95
+ }
88
96
  const noteValueBuffer = noteData[selector.index].toBuffer();
89
- const noteValue = noteValueBuffer.subarray(selector.offset, selector.offset + selector.length);
90
- return Fr.fromBuffer(noteValue);
97
+ // Noir's PropertySelector counts offset from the LSB (last byte of the big-endian buffer),
98
+ // so offset=0,length=Fr.SIZE_IN_BYTES reads the entire field, and offset=0,length=1 reads the last byte.
99
+ const start = Fr.SIZE_IN_BYTES - selector.offset - selector.length;
100
+ const end = Fr.SIZE_IN_BYTES - selector.offset;
101
+ const noteValue = noteValueBuffer.subarray(start, end);
102
+ // Left-pad to Fr.SIZE_IN_BYTES so Fr.fromBuffer interprets the value correctly.
103
+ const padded = Buffer.alloc(Fr.SIZE_IN_BYTES);
104
+ noteValue.copy(padded, Fr.SIZE_IN_BYTES - noteValue.length);
105
+ return Fr.fromBuffer(padded);
91
106
  };
92
107
 
93
108
  const selectNotes = <T extends ContainsNote>(noteDatas: T[], selects: Select[]): T[] =>
@@ -103,7 +118,11 @@ const selectNotes = <T extends ContainsNote>(noteDatas: T[], selects: Select[]):
103
118
  [Comparator.GTE]: () => !noteValueFr.lt(value),
104
119
  };
105
120
 
106
- return comparatorSelector[comparator]();
121
+ const fn = comparatorSelector[comparator];
122
+ if (!fn) {
123
+ throw new Error(`Invalid comparator value: ${comparator}`);
124
+ }
125
+ return fn();
107
126
  }),
108
127
  );
109
128
 
@@ -1,13 +1,20 @@
1
- import { FunctionSelector } from '@aztec/stdlib/abi';
2
- import { AztecAddress } from '@aztec/stdlib/aztec-address';
1
+ import { type FunctionSelector, findFunctionArtifactBySelector } from '@aztec/stdlib/abi';
2
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
3
3
  import type { ContractOverrides } from '@aztec/stdlib/tx';
4
4
 
5
5
  import type { ContractStore } from '../storage/contract_store/contract_store.js';
6
6
 
7
7
  /*
8
- * Proxy generator for a ContractStore that allows overriding contract instances and artifacts, so
9
- * the contract function simulator can execute different bytecode on certain addresses. An example use case
10
- * would be overriding your own account contract so that valid signatures don't have to be provided while simulating.
8
+ * Proxy generator for a ContractStore that allows overriding contract instances at given addresses,
9
+ * so the contract function simulator can execute different bytecode on certain addresses. An example
10
+ * use case would be overriding your own account contract so that valid signatures don't have to be
11
+ * provided while simulating.
12
+ *
13
+ * Function artifact lookups for an overridden address are routed via the override-instance's
14
+ * `currentContractClassId` rather than the underlying ContractStore's address→class mapping —
15
+ * `ContractStore.getFunctionArtifact` calls `this.getContractInstance` internally, which the proxy
16
+ * cannot intercept (the binding sees the raw target, not the proxy). The target class must be
17
+ * registered ahead of time via `pxe.registerContractClass(...)`.
11
18
  */
12
19
  export class ProxiedContractStoreFactory {
13
20
  static create(contractStore: ContractStore, overrides?: ContractOverrides) {
@@ -17,67 +24,37 @@ export class ProxiedContractStoreFactory {
17
24
 
18
25
  return new Proxy(contractStore, {
19
26
  get(target, prop: keyof ContractStore) {
20
- switch (prop) {
21
- case 'getContractInstance': {
22
- return async (address: AztecAddress) => {
23
- if (overrides[address.toString()]) {
24
- const { instance } = overrides[address.toString()]!;
25
- instance.address = address;
26
- const realInstance = await target.getContractInstance(address);
27
- if (!realInstance) {
28
- throw new Error(`Contract instance not found for address: ${address}`);
29
- }
30
- instance.currentContractClassId = realInstance.currentContractClassId;
31
- instance.originalContractClassId = realInstance.originalContractClassId;
32
- return instance;
33
- } else {
34
- return target.getContractInstance(address);
35
- }
36
- };
37
- }
38
- case 'getFunctionArtifact': {
39
- return async (contractAddress: AztecAddress, selector: FunctionSelector) => {
40
- if (overrides[contractAddress.toString()]) {
41
- const { artifact } = overrides[contractAddress.toString()]!;
42
- const functions = artifact.functions;
43
- for (let i = 0; i < functions.length; i++) {
44
- const fn = functions[i];
45
- const fnSelector = await FunctionSelector.fromNameAndParameters(fn.name, fn.parameters);
46
- if (fnSelector.equals(selector)) {
47
- return fn;
48
- }
49
- }
50
- } else {
51
- return target.getFunctionArtifact(contractAddress, selector);
52
- }
53
- };
54
- }
55
- case 'getFunctionArtifactWithDebugMetadata': {
56
- return async (contractAddress: AztecAddress, selector: FunctionSelector) => {
57
- if (overrides[contractAddress.toString()]) {
58
- const { artifact } = overrides[contractAddress.toString()]!;
59
- const functions = artifact.functions;
60
- for (let i = 0; i < functions.length; i++) {
61
- const fn = functions[i];
62
- const fnSelector = await FunctionSelector.fromNameAndParameters(fn.name, fn.parameters);
63
- if (fnSelector.equals(selector)) {
64
- return fn;
65
- }
66
- }
67
- } else {
68
- return target.getFunctionArtifactWithDebugMetadata(contractAddress, selector);
69
- }
70
- };
71
- }
72
- default: {
73
- const value = Reflect.get(target, prop);
74
- if (typeof value === 'function') {
75
- return value.bind(target);
27
+ if (prop === 'getContractInstance') {
28
+ return (address: AztecAddress) => {
29
+ const override = overrides[address.toString()];
30
+ return override ? Promise.resolve(override.instance) : target.getContractInstance(address);
31
+ };
32
+ }
33
+ if (prop === 'getFunctionArtifact' || prop === 'getFunctionArtifactWithDebugMetadata') {
34
+ return async (contractAddress: AztecAddress, selector: FunctionSelector) => {
35
+ const override = overrides[contractAddress.toString()];
36
+ if (!override) {
37
+ return (target[prop] as Function).call(target, contractAddress, selector);
38
+ }
39
+ const artifact = await target.getContractArtifact(override.instance.currentContractClassId);
40
+ if (!artifact) {
41
+ throw new Error(
42
+ `No artifact registered for override class ${override.instance.currentContractClassId} ` +
43
+ `at ${contractAddress}. Register it via pxe.registerContractClass(...) before simulating.`,
44
+ );
45
+ }
46
+ const fn = await findFunctionArtifactBySelector(artifact, selector);
47
+ if (!fn) {
48
+ throw new Error(
49
+ `Function with selector ${selector} not found in stub artifact for overridden contract at ${contractAddress}.`,
50
+ );
76
51
  }
77
- return value;
78
- }
52
+ return { ...fn, contractName: artifact.name };
53
+ };
79
54
  }
55
+ const value = Reflect.get(target, prop);
56
+ return typeof value === 'function' ? value.bind(target) : value;
80
57
  },
81
- });
58
+ }) satisfies ContractStore;
82
59
  }
83
60
  }
@@ -0,0 +1,91 @@
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
3
+
4
+ /**
5
+ * In-memory store for transient arrays.
6
+ *
7
+ * Unlike {@link EphemeralArrayService} (one instance per call frame), a single `TransientArrayService` instance is shared
8
+ * across all frames of one top-level PXE call (a transaction simulation or utility call), so arrays survive across nested
9
+ * private and utility calls. Entries are keyed by `(contract address, slot)`; the contract address is supplied by the
10
+ * oracle from its execution context, so a contract can only ever name its own arrays. The store is purely in-memory and
11
+ * is discarded when the top-level PXE call completes — it is never persisted.
12
+ */
13
+ export class TransientArrayService {
14
+ /** Maps a `(contract address, slot)` key to the serialized elements stored there. */
15
+ #arrays: Map<string, Fr[][]> = new Map();
16
+
17
+ #key(contractAddress: AztecAddress, slot: Fr): string {
18
+ return `${contractAddress.toString()}:${slot.toString()}`;
19
+ }
20
+
21
+ /** Returns all elements at the given key, or an empty array if uninitialized. */
22
+ readArrayAt(contractAddress: AztecAddress, slot: Fr): Fr[][] {
23
+ return this.#arrays.get(this.#key(contractAddress, slot)) ?? [];
24
+ }
25
+
26
+ #setArray(contractAddress: AztecAddress, slot: Fr, array: Fr[][]): void {
27
+ this.#arrays.set(this.#key(contractAddress, slot), array);
28
+ }
29
+
30
+ /** Returns the number of elements stored at the given key. */
31
+ len(contractAddress: AztecAddress, slot: Fr): number {
32
+ return this.readArrayAt(contractAddress, slot).length;
33
+ }
34
+
35
+ /** Appends an element and returns the new length. */
36
+ push(contractAddress: AztecAddress, slot: Fr, elements: Fr[]): number {
37
+ const array = this.readArrayAt(contractAddress, slot);
38
+ array.push(elements);
39
+ this.#setArray(contractAddress, slot, array);
40
+ return array.length;
41
+ }
42
+
43
+ /** Removes and returns the last element. Throws if empty. */
44
+ pop(contractAddress: AztecAddress, slot: Fr): Fr[] {
45
+ const array = this.readArrayAt(contractAddress, slot);
46
+ if (array.length === 0) {
47
+ throw new Error(`Transient array at slot ${slot} is empty`);
48
+ }
49
+ const element = array.pop()!;
50
+ this.#setArray(contractAddress, slot, array);
51
+ return element;
52
+ }
53
+
54
+ /** Returns the element at the given index. Throws if out of bounds. */
55
+ get(contractAddress: AztecAddress, slot: Fr, index: number): Fr[] {
56
+ const array = this.readArrayAt(contractAddress, slot);
57
+ if (index < 0 || index >= array.length) {
58
+ throw new Error(
59
+ `Transient array index ${index} out of bounds for array of length ${array.length} at slot ${slot}`,
60
+ );
61
+ }
62
+ return array[index];
63
+ }
64
+
65
+ /** Overwrites the element at the given index. Throws if out of bounds. */
66
+ set(contractAddress: AztecAddress, slot: Fr, index: number, value: Fr[]): void {
67
+ const array = this.readArrayAt(contractAddress, slot);
68
+ if (index < 0 || index >= array.length) {
69
+ throw new Error(
70
+ `Transient array index ${index} out of bounds for array of length ${array.length} at slot ${slot}`,
71
+ );
72
+ }
73
+ array[index] = value;
74
+ }
75
+
76
+ /** Removes the element at the given index, shifting subsequent elements backward. Throws if out of bounds. */
77
+ remove(contractAddress: AztecAddress, slot: Fr, index: number): void {
78
+ const array = this.readArrayAt(contractAddress, slot);
79
+ if (index < 0 || index >= array.length) {
80
+ throw new Error(
81
+ `Transient array index ${index} out of bounds for array of length ${array.length} at slot ${slot}`,
82
+ );
83
+ }
84
+ array.splice(index, 1);
85
+ }
86
+
87
+ /** Removes all elements at the given key. */
88
+ clear(contractAddress: AztecAddress, slot: Fr): void {
89
+ this.#arrays.delete(this.#key(contractAddress, slot));
90
+ }
91
+ }
@@ -5,18 +5,22 @@ import type { DebugLog } from '@aztec/stdlib/logs';
5
5
 
6
6
  /** Resolves a contract address to a human-readable name, if available. */
7
7
  export type ContractNameResolver = (address: AztecAddress) => Promise<string | undefined>;
8
+ export type CONTRACT_LOG_KIND = 'aztecnr' | 'user';
8
9
 
9
10
  /**
10
- * Creates a logger whose output is prefixed with `contract_log::<name>(<addrAbbrev>)`.
11
+ * Creates a logger whose output is prefixed with `contract:<name>(<addrAbbrev>)`.
11
12
  */
12
13
  export async function createContractLogger(
13
14
  contractAddress: AztecAddress,
14
15
  getContractName: ContractNameResolver,
16
+ kind: CONTRACT_LOG_KIND,
15
17
  options?: { instanceId?: string },
16
18
  ): Promise<Logger> {
17
19
  const addrAbbrev = contractAddress.toString().slice(0, 10);
18
20
  const name = await getContractName(contractAddress);
19
- const module = name ? `contract_log::${name}(${addrAbbrev})` : `contract_log::Unknown(${addrAbbrev})`;
21
+
22
+ const prefix = kind == 'aztecnr' ? 'aztecnr' : 'contract';
23
+ const module = name ? `${prefix}:${name}(${addrAbbrev})` : `${prefix}:Unknown(${addrAbbrev})`;
20
24
  return createLogger(module, options);
21
25
  }
22
26
 
@@ -29,11 +33,20 @@ export function logContractMessage(logger: Logger, level: LogLevel, message: str
29
33
 
30
34
  /**
31
35
  * Displays debug logs collected during public function simulation,
32
- * using the `contract_log::` prefixed logger format.
36
+ * using the `contract:` prefixed logger format.
33
37
  */
34
38
  export async function displayDebugLogs(debugLogs: DebugLog[], getContractName: ContractNameResolver): Promise<void> {
35
39
  for (const log of debugLogs) {
36
- const logger = await createContractLogger(log.contractAddress, getContractName);
37
- logContractMessage(logger, log.level, log.message, log.fields);
40
+ const { kind, message } = stripAztecnrLogPrefix(log.message);
41
+ const logger = await createContractLogger(log.contractAddress, getContractName, kind);
42
+ logContractMessage(logger, log.level, message, log.fields);
43
+ }
44
+ }
45
+
46
+ export function stripAztecnrLogPrefix(message: string): { kind: CONTRACT_LOG_KIND; message: string } {
47
+ if (message.startsWith('[aztec-nr] ')) {
48
+ return { kind: 'aztecnr', message: message.slice('[aztec-nr] '.length) };
49
+ } else {
50
+ return { kind: 'user', message };
38
51
  }
39
52
  }
@@ -1,14 +1,22 @@
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
- import type { AccessScopes } from '../access_scopes.js';
8
9
  import type { StagedStore } from '../job_coordinator/job_coordinator.js';
10
+ import { NoteService } from '../notes/note_service.js';
9
11
  import type { ContractStore } from '../storage/contract_store/contract_store.js';
10
12
  import type { NoteStore } from '../storage/note_store/note_store.js';
11
- import { syncState, verifyCurrentClassId } from './helpers.js';
13
+ import { syncScope, verifyCurrentClassId } from './helpers.js';
14
+
15
+ /**
16
+ * Maximum number of scope syncs running concurrently within a single sync call. Sized to trade off parallelism
17
+ * on non-ACIR work (node RPC, note store reads) against memory pressure from concurrent circuit execution.
18
+ */
19
+ export const MAX_CONCURRENT_SCOPE_SYNCS = 5;
12
20
 
13
21
  /**
14
22
  * Service for syncing the private state of contracts and verifying that the PXE holds the current class artifact.
@@ -24,8 +32,9 @@ export class ContractSyncService implements StagedStore {
24
32
  // The value is a promise that resolves when the contract is synced.
25
33
  private syncedContracts: Map<string, Promise<void>> = new Map();
26
34
 
27
- // Per-job excluded contract addresses - these contracts should not be synced.
28
- private excludedFromSync: Map<string, Set<string>> = new Map();
35
+ // Tracks class ID verification per contract. Keyed by contract address only (no scope), since
36
+ // class ID verification is scope-independent. Cleared on wipe/discard.
37
+ private classIdVerificationCache: Map<string, Promise<void>> = new Map();
29
38
 
30
39
  constructor(
31
40
  private aztecNode: AztecNode,
@@ -34,11 +43,6 @@ export class ContractSyncService implements StagedStore {
34
43
  private log: Logger,
35
44
  ) {}
36
45
 
37
- /** Sets contracts that should be skipped during sync for a specific job. */
38
- setExcludedFromSync(jobId: string, addresses: Set<string>): void {
39
- this.excludedFromSync.set(jobId, addresses);
40
- }
41
-
42
46
  /**
43
47
  * Ensures a contract's private state is synchronized and that the PXE holds the current class artifact.
44
48
  * Uses a cache to avoid redundant sync operations - the cache is wiped when the anchor block changes.
@@ -51,131 +55,141 @@ export class ContractSyncService implements StagedStore {
51
55
  async ensureContractSynced(
52
56
  contractAddress: AztecAddress,
53
57
  functionToInvokeAfterSync: FunctionSelector | null,
54
- utilityExecutor: (call: FunctionCall, scopes: AccessScopes) => Promise<any>,
58
+ utilityExecutor: (call: FunctionCall, scopes: AztecAddress[]) => Promise<any>,
55
59
  anchorBlockHeader: BlockHeader,
56
60
  jobId: string,
57
- scopes: AccessScopes,
61
+ scopes: AztecAddress[],
58
62
  ): Promise<void> {
59
- if (this.#shouldSkipSync(jobId, contractAddress)) {
60
- return;
61
- }
62
-
63
- this.#startSyncIfNeeded(contractAddress, scopes, scopesToSync =>
64
- this.#syncContract(
65
- contractAddress,
66
- functionToInvokeAfterSync,
67
- utilityExecutor,
68
- anchorBlockHeader,
69
- jobId,
70
- scopesToSync,
71
- ),
63
+ this.#startSyncIfNeeded(contractAddress, scopes, anchorBlockHeader, jobId, scope =>
64
+ syncScope(contractAddress, this.contractStore, functionToInvokeAfterSync, utilityExecutor, scope),
72
65
  );
73
66
 
74
67
  await this.#awaitSync(contractAddress, scopes);
75
68
  }
76
69
 
77
- /** Clears sync cache entries for the given scopes of a contract. Also clears the ALL_SCOPES entry. */
70
+ /** Clears sync cache entries for the given scopes of a contract. */
78
71
  invalidateContractForScopes(contractAddress: AztecAddress, scopes: AztecAddress[]): void {
79
72
  if (scopes.length === 0) {
80
73
  return;
81
74
  }
82
75
  scopes.forEach(scope => this.syncedContracts.delete(toKey(contractAddress, scope)));
83
- this.syncedContracts.delete(toKey(contractAddress, 'ALL_SCOPES'));
84
- }
85
-
86
- async #syncContract(
87
- contractAddress: AztecAddress,
88
- functionToInvokeAfterSync: FunctionSelector | null,
89
- utilityExecutor: (call: FunctionCall, scopes: AccessScopes) => Promise<any>,
90
- anchorBlockHeader: BlockHeader,
91
- jobId: string,
92
- scopes: AccessScopes,
93
- ): Promise<void> {
94
- this.log.debug(`Syncing contract ${contractAddress}`);
95
- await Promise.all([
96
- syncState(
97
- contractAddress,
98
- this.contractStore,
99
- functionToInvokeAfterSync,
100
- utilityExecutor,
101
- this.noteStore,
102
- this.aztecNode,
103
- anchorBlockHeader,
104
- jobId,
105
- scopes,
106
- ),
107
- verifyCurrentClassId(contractAddress, this.aztecNode, this.contractStore, anchorBlockHeader),
108
- ]);
109
- this.log.debug(`Contract ${contractAddress} synced`);
110
76
  }
111
77
 
112
78
  /** Clears sync cache. Called by BlockSynchronizer when anchor block changes. */
113
79
  wipe(): void {
114
80
  this.log.debug(`Wiping contract sync cache (${this.syncedContracts.size} entries)`);
115
81
  this.syncedContracts.clear();
82
+ this.classIdVerificationCache.clear();
116
83
  }
117
84
 
118
- commit(jobId: string): Promise<void> {
119
- // Clear excluded contracts for this job
120
- this.excludedFromSync.delete(jobId);
85
+ commit(_jobId: string): Promise<void> {
121
86
  return Promise.resolve();
122
87
  }
123
88
 
124
- discardStaged(jobId: string): Promise<void> {
89
+ discardStaged(_jobId: string): Promise<void> {
125
90
  // We clear the synced contracts cache here because, when the job is discarded, any associated database writes from
126
91
  // the sync are also undone.
127
92
  this.syncedContracts.clear();
128
- this.excludedFromSync.delete(jobId);
93
+ this.classIdVerificationCache.clear();
129
94
  return Promise.resolve();
130
95
  }
131
- /** Returns true if sync should be skipped for this contract */
132
- #shouldSkipSync(jobId: string, contractAddress: AztecAddress): boolean {
133
- return !!this.excludedFromSync.get(jobId)?.has(contractAddress.toString());
134
- }
135
96
 
136
- /** If there are unsynced scopes, starts sync and stores the promise in cache with error cleanup. */
97
+ /**
98
+ * For each unsynced scope, creates a promise that waits on:
99
+ * 1. Class ID verification (cached per contract, scope-independent).
100
+ * 2. Note nullifier sync (shared, batched across all unsynced scopes).
101
+ * 3. Per-scope sync (individual, semaphore-bounded).
102
+ */
137
103
  #startSyncIfNeeded(
138
104
  contractAddress: AztecAddress,
139
- scopes: AccessScopes,
140
- syncFn: (scopesToSync: AccessScopes) => Promise<void>,
105
+ scopes: AztecAddress[],
106
+ anchorBlockHeader: BlockHeader,
107
+ jobId: string,
108
+ syncScopeFn: (scope: AztecAddress) => Promise<void>,
141
109
  ): void {
142
- const scopesToSync = this.#getScopesToSync(contractAddress, scopes);
143
- const keys = toKeys(contractAddress, scopesToSync);
144
- if (keys.length === 0) {
110
+ const scopesToSync = scopes.filter(scope => !this.syncedContracts.has(toKey(contractAddress, scope)));
111
+ if (scopesToSync.length === 0) {
145
112
  return;
146
113
  }
147
- const promise = syncFn(scopesToSync).catch(err => {
148
- keys.forEach(key => this.syncedContracts.delete(key));
149
- throw err;
150
- });
151
- keys.forEach(key => this.syncedContracts.set(key, promise));
114
+
115
+ this.log.debug(`Syncing contract ${contractAddress} for ${scopesToSync.length} scope(s)`);
116
+
117
+ const verifyPromise = this.#verifyClassId(contractAddress, anchorBlockHeader);
118
+ const syncNullifiersPromise = this.#syncNoteNullifiers(contractAddress, anchorBlockHeader, jobId, scopesToSync);
119
+
120
+ // We build a new semaphore for each sync call, so it rate-limits the scopes within that single call. We do
121
+ // this so that if these scope syncs trigger nested syncs, the nested ones can execute without causing a deadlock.
122
+ const syncSlot = new Semaphore(MAX_CONCURRENT_SCOPE_SYNCS);
123
+
124
+ for (const scope of scopesToSync) {
125
+ const key = toKey(contractAddress, scope);
126
+ const promise = Promise.all([
127
+ verifyPromise,
128
+ syncNullifiersPromise,
129
+ runBounded(syncSlot, () => syncScopeFn(scope)),
130
+ ])
131
+ .then(() => {})
132
+ .catch(err => {
133
+ this.syncedContracts.delete(key);
134
+ throw err;
135
+ });
136
+ this.syncedContracts.set(key, promise);
137
+ }
152
138
  }
153
139
 
154
- /** Filters out scopes that are already cached, returning only those that still need syncing. */
155
- #getScopesToSync(contractAddress: AztecAddress, scopes: AccessScopes): AccessScopes {
156
- if (this.syncedContracts.has(toKey(contractAddress, 'ALL_SCOPES'))) {
157
- // If we are already syncing all scopes, then return an empty list
158
- return [];
140
+ /** Verifies the local class ID matches the on-chain value (cached, evicts on failure so retries re-verify). */
141
+ #verifyClassId(contractAddress: AztecAddress, anchorBlockHeader: BlockHeader): Promise<void> {
142
+ const contractKey = contractAddress.toString();
143
+ const cached = this.classIdVerificationCache.get(contractKey);
144
+ if (cached) {
145
+ return cached;
159
146
  }
160
- if (scopes === 'ALL_SCOPES') {
161
- return 'ALL_SCOPES';
147
+ const promise = verifyCurrentClassId(contractAddress, this.aztecNode, this.contractStore, anchorBlockHeader).catch(
148
+ err => {
149
+ this.classIdVerificationCache.delete(contractKey);
150
+ throw err;
151
+ },
152
+ );
153
+ this.classIdVerificationCache.set(contractKey, promise);
154
+ return promise;
155
+ }
156
+
157
+ /** Syncs note nullifiers across all unsynced scopes in a single batched call. */
158
+ async #syncNoteNullifiers(
159
+ contractAddress: AztecAddress,
160
+ anchorBlockHeader: BlockHeader,
161
+ jobId: string,
162
+ scopes: AztecAddress[],
163
+ ): Promise<void> {
164
+ // Protocol contracts don't have private state to sync
165
+ if (isProtocolContract(contractAddress)) {
166
+ return;
162
167
  }
163
- return scopes.filter(scope => !this.syncedContracts.has(toKey(contractAddress, scope)));
168
+ // This runs in parallel with per-scope sync (which also writes to the note store). That's safe because
169
+ // the note store handles concurrent operations.
170
+ const noteService = new NoteService(this.noteStore, this.aztecNode, anchorBlockHeader, jobId);
171
+ await noteService.syncNoteNullifiers(contractAddress, scopes);
164
172
  }
165
173
 
166
174
  /** Collects all relevant scope promises (including in-flight ones from concurrent calls) and awaits them. */
167
- async #awaitSync(contractAddress: AztecAddress, scopes: AccessScopes): Promise<void> {
168
- const promises = toKeys(contractAddress, scopes)
169
- .map(key => this.syncedContracts.get(key))
175
+ async #awaitSync(contractAddress: AztecAddress, scopes: AztecAddress[]): Promise<void> {
176
+ const promises = scopes
177
+ .map(scope => this.syncedContracts.get(toKey(contractAddress, scope)))
170
178
  .filter(p => p !== undefined);
171
179
  await Promise.all(promises);
172
180
  }
173
181
  }
174
182
 
175
- function toKeys(contract: AztecAddress, scopes: AccessScopes) {
176
- return scopes === 'ALL_SCOPES' ? [toKey(contract, scopes)] : scopes.map(scope => toKey(contract, scope));
183
+ function toKey(contract: AztecAddress, scope: AztecAddress) {
184
+ return `${contract.toString()}:${scope.toString()}`;
177
185
  }
178
186
 
179
- function toKey(contract: AztecAddress, scope: AztecAddress | 'ALL_SCOPES') {
180
- return scope === 'ALL_SCOPES' ? `${contract.toString()}:*` : `${contract.toString()}:${scope.toString()}`;
187
+ /** Runs fn while holding a slot in the given semaphore, bounding concurrent scope syncs within a single call. */
188
+ async function runBounded<T>(syncSlot: Semaphore, fn: () => Promise<T>): Promise<T> {
189
+ await syncSlot.acquire();
190
+ try {
191
+ return await fn();
192
+ } finally {
193
+ syncSlot.release();
194
+ }
181
195
  }