@aztec/pxe 0.0.1-commit.b9865e97 → 0.0.1-commit.be03c316

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 (397) hide show
  1. package/dest/bin/check_oracle_version.js +8 -23
  2. package/dest/bin/index.d.ts +2 -2
  3. package/dest/bin/index.d.ts.map +1 -1
  4. package/dest/bin/index.js +1 -1
  5. package/dest/bin/oracle_version_helpers.d.ts +16 -8
  6. package/dest/bin/oracle_version_helpers.d.ts.map +1 -1
  7. package/dest/bin/oracle_version_helpers.js +22 -69
  8. package/dest/block_synchronizer/block_stream_source.d.ts +5 -5
  9. package/dest/block_synchronizer/block_stream_source.d.ts.map +1 -1
  10. package/dest/block_synchronizer/block_stream_source.js +4 -29
  11. package/dest/block_synchronizer/block_synchronizer.d.ts +18 -14
  12. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  13. package/dest/block_synchronizer/block_synchronizer.js +54 -18
  14. package/dest/config/index.d.ts +2 -1
  15. package/dest/config/index.d.ts.map +1 -1
  16. package/dest/config/index.js +1 -0
  17. package/dest/contract/contract_class_service.d.ts +31 -0
  18. package/dest/contract/contract_class_service.d.ts.map +1 -0
  19. package/dest/contract/contract_class_service.js +68 -0
  20. package/dest/contract/contract_sync_service.d.ts +48 -0
  21. package/dest/contract/contract_sync_service.d.ts.map +1 -0
  22. package/dest/{contract_sync → contract}/contract_sync_service.js +26 -45
  23. package/dest/contract/helpers.d.ts +7 -0
  24. package/dest/contract/helpers.d.ts.map +1 -0
  25. package/dest/contract/helpers.js +20 -0
  26. package/dest/contract/skip_sync_contracts.d.ts +11 -0
  27. package/dest/contract/skip_sync_contracts.d.ts.map +1 -0
  28. package/dest/contract/skip_sync_contracts.js +18 -0
  29. package/dest/contract_function_simulator/anchored_contract_data.d.ts +36 -0
  30. package/dest/contract_function_simulator/anchored_contract_data.d.ts.map +1 -0
  31. package/dest/contract_function_simulator/anchored_contract_data.js +54 -0
  32. package/dest/contract_function_simulator/aztec_node_read_cache.d.ts +39 -0
  33. package/dest/contract_function_simulator/aztec_node_read_cache.d.ts.map +1 -0
  34. package/dest/contract_function_simulator/aztec_node_read_cache.js +60 -0
  35. package/dest/contract_function_simulator/contract_function_simulator.d.ts +19 -18
  36. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  37. package/dest/contract_function_simulator/contract_function_simulator.js +63 -32
  38. package/dest/contract_function_simulator/execution_note_cache.d.ts +3 -9
  39. package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
  40. package/dest/contract_function_simulator/execution_note_cache.js +8 -28
  41. package/dest/contract_function_simulator/index.d.ts +19 -10
  42. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  43. package/dest/contract_function_simulator/index.js +6 -9
  44. package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts +8 -27
  45. package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts.map +1 -1
  46. package/dest/contract_function_simulator/noir-structs/bounded_vec.js +8 -23
  47. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts +9 -0
  48. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts.map +1 -0
  49. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.js +1 -0
  50. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts +7 -0
  51. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts.map +1 -0
  52. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.js +1 -0
  53. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +1 -1
  54. package/dest/contract_function_simulator/noir-structs/fact.d.ts +16 -0
  55. package/dest/contract_function_simulator/noir-structs/fact.d.ts.map +1 -0
  56. package/dest/contract_function_simulator/noir-structs/fact.js +6 -0
  57. package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts +27 -0
  58. package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts.map +1 -0
  59. package/dest/contract_function_simulator/noir-structs/fact_collection.js +31 -0
  60. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +11 -12
  61. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -1
  62. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +6 -49
  63. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +10 -8
  64. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
  65. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +1 -60
  66. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +2 -2
  67. package/dest/contract_function_simulator/noir-structs/option.d.ts +9 -11
  68. package/dest/contract_function_simulator/noir-structs/option.d.ts.map +1 -1
  69. package/dest/contract_function_simulator/noir-structs/option.js +18 -13
  70. package/dest/contract_function_simulator/noir-structs/origin_block.d.ts +11 -0
  71. package/dest/contract_function_simulator/noir-structs/origin_block.d.ts.map +1 -0
  72. package/dest/contract_function_simulator/noir-structs/origin_block.js +5 -0
  73. package/dest/contract_function_simulator/noir-structs/pending_tagged_log.d.ts +11 -0
  74. package/dest/contract_function_simulator/noir-structs/pending_tagged_log.d.ts.map +1 -0
  75. package/dest/contract_function_simulator/noir-structs/pending_tagged_log.js +4 -0
  76. package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts +6 -9
  77. package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts.map +1 -1
  78. package/dest/contract_function_simulator/noir-structs/provided_secret.js +1 -24
  79. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts +28 -0
  80. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts.map +1 -0
  81. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.js +50 -0
  82. package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts +19 -0
  83. package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts.map +1 -0
  84. package/dest/contract_function_simulator/noir-structs/resolved_tx.js +9 -0
  85. package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts +15 -0
  86. package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts.map +1 -0
  87. package/dest/contract_function_simulator/noir-structs/tx_effect_data.js +5 -0
  88. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +6 -11
  89. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
  90. package/dest/contract_function_simulator/noir-structs/utility_context.js +1 -20
  91. package/dest/contract_function_simulator/oracle/acir_callback.d.ts +21 -0
  92. package/dest/contract_function_simulator/oracle/acir_callback.d.ts.map +1 -0
  93. package/dest/contract_function_simulator/oracle/acir_callback.js +115 -0
  94. package/dest/contract_function_simulator/oracle/index.d.ts +2 -13
  95. package/dest/contract_function_simulator/oracle/index.d.ts.map +1 -1
  96. package/dest/contract_function_simulator/oracle/index.js +1 -1
  97. package/dest/contract_function_simulator/oracle/interfaces.d.ts +2 -3
  98. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  99. package/dest/contract_function_simulator/oracle/legacy_oracle_registry.d.ts +39 -0
  100. package/dest/contract_function_simulator/oracle/legacy_oracle_registry.d.ts.map +1 -0
  101. package/dest/contract_function_simulator/oracle/legacy_oracle_registry.js +107 -0
  102. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -14
  103. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
  104. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.js +1 -24
  105. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts +43 -31
  106. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -1
  107. package/dest/contract_function_simulator/oracle/oracle_registry.js +259 -29
  108. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +180 -45
  109. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts.map +1 -1
  110. package/dest/contract_function_simulator/oracle/oracle_type_mappings.js +1024 -341
  111. package/dest/contract_function_simulator/oracle/private_execution.d.ts +1 -1
  112. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  113. package/dest/contract_function_simulator/oracle/private_execution.js +2 -3
  114. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +21 -8
  115. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  116. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +132 -22
  117. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +77 -34
  118. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  119. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +247 -106
  120. package/dest/contract_function_simulator/transient_array_service.d.ts +31 -0
  121. package/dest/contract_function_simulator/transient_array_service.d.ts.map +1 -0
  122. package/dest/contract_function_simulator/transient_array_service.js +62 -0
  123. package/dest/debug/pxe_debug_utils.d.ts +2 -2
  124. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  125. package/dest/entrypoints/client/bundle/index.d.ts +2 -1
  126. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  127. package/dest/entrypoints/client/bundle/index.js +1 -0
  128. package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
  129. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  130. package/dest/entrypoints/client/bundle/utils.js +17 -6
  131. package/dest/entrypoints/client/lazy/index.d.ts +2 -1
  132. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  133. package/dest/entrypoints/client/lazy/index.js +1 -0
  134. package/dest/entrypoints/client/lazy/utils.d.ts +1 -1
  135. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  136. package/dest/entrypoints/client/lazy/utils.js +17 -6
  137. package/dest/entrypoints/client/store.d.ts +14 -0
  138. package/dest/entrypoints/client/store.d.ts.map +1 -0
  139. package/dest/entrypoints/client/store.js +42 -0
  140. package/dest/entrypoints/pxe_creation_options.d.ts +9 -3
  141. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  142. package/dest/entrypoints/server/index.d.ts +6 -3
  143. package/dest/entrypoints/server/index.d.ts.map +1 -1
  144. package/dest/entrypoints/server/index.js +4 -2
  145. package/dest/entrypoints/server/store.d.ts +18 -0
  146. package/dest/entrypoints/server/store.d.ts.map +1 -0
  147. package/dest/entrypoints/server/store.js +28 -0
  148. package/dest/entrypoints/server/utils.d.ts +1 -1
  149. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  150. package/dest/entrypoints/server/utils.js +16 -4
  151. package/dest/error_enriching.d.ts +5 -3
  152. package/dest/error_enriching.d.ts.map +1 -1
  153. package/dest/error_enriching.js +13 -11
  154. package/dest/hooks/execution_hooks.d.ts +31 -11
  155. package/dest/hooks/execution_hooks.d.ts.map +1 -1
  156. package/dest/hooks/execution_hooks.js +3 -3
  157. package/dest/hooks/index.d.ts +4 -3
  158. package/dest/hooks/index.d.ts.map +1 -1
  159. package/dest/hooks/index.js +1 -0
  160. package/dest/hooks/resolve_custom_request.d.ts +23 -0
  161. package/dest/hooks/resolve_custom_request.d.ts.map +1 -0
  162. package/dest/hooks/resolve_custom_request.js +3 -0
  163. package/dest/hooks/resolve_tagging_secret_strategy.d.ts +50 -0
  164. package/dest/hooks/resolve_tagging_secret_strategy.d.ts.map +1 -0
  165. package/dest/hooks/resolve_tagging_secret_strategy.js +3 -0
  166. package/dest/logs/log_service.d.ts +8 -6
  167. package/dest/logs/log_service.d.ts.map +1 -1
  168. package/dest/logs/log_service.js +88 -28
  169. package/dest/messages/tx_resolver_service.d.ts +17 -0
  170. package/dest/messages/tx_resolver_service.d.ts.map +1 -0
  171. package/dest/messages/{message_context_service.js → tx_resolver_service.js} +13 -8
  172. package/dest/notes/note_service.d.ts +1 -1
  173. package/dest/notes/note_service.js +1 -1
  174. package/dest/oracle_version.d.ts +3 -3
  175. package/dest/oracle_version.js +5 -5
  176. package/dest/private_kernel/batch_planner.d.ts +1 -1
  177. package/dest/private_kernel/batch_planner.d.ts.map +1 -1
  178. package/dest/private_kernel/batch_planner.js +1 -1
  179. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +1 -1
  180. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
  181. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +6 -2
  182. package/dest/private_kernel/hints/test_utils.js +1 -1
  183. package/dest/private_kernel/private_kernel_execution_prover.d.ts +1 -1
  184. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  185. package/dest/private_kernel/private_kernel_execution_prover.js +61 -40
  186. package/dest/private_kernel/private_kernel_oracle.d.ts +4 -2
  187. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  188. package/dest/private_kernel/private_kernel_oracle.js +17 -5
  189. package/dest/pxe.d.ts +114 -48
  190. package/dest/pxe.d.ts.map +1 -1
  191. package/dest/pxe.js +225 -139
  192. package/dest/storage/allowed_scopes.d.ts +6 -0
  193. package/dest/storage/allowed_scopes.d.ts.map +1 -0
  194. package/dest/storage/allowed_scopes.js +7 -0
  195. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -6
  196. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
  197. package/dest/storage/anchor_block_store/anchor_block_store.js +8 -6
  198. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts +1 -1
  199. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts.map +1 -1
  200. package/dest/storage/backwards_compatibility_tests/schema_tests.js +129 -49
  201. package/dest/storage/capsule_store/capsule_service.d.ts +1 -1
  202. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -1
  203. package/dest/storage/capsule_store/capsule_service.js +6 -9
  204. package/dest/storage/contract_store/contract_store.d.ts +27 -24
  205. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  206. package/dest/storage/contract_store/contract_store.js +64 -75
  207. package/dest/storage/fact_store/fact_service.d.ts +22 -0
  208. package/dest/storage/fact_store/fact_service.d.ts.map +1 -0
  209. package/dest/storage/fact_store/fact_service.js +45 -0
  210. package/dest/storage/fact_store/fact_store.d.ts +95 -0
  211. package/dest/storage/fact_store/fact_store.d.ts.map +1 -0
  212. package/dest/storage/fact_store/fact_store.js +408 -0
  213. package/dest/storage/fact_store/fact_store_keys.d.ts +34 -0
  214. package/dest/storage/fact_store/fact_store_keys.d.ts.map +1 -0
  215. package/dest/storage/fact_store/fact_store_keys.js +50 -0
  216. package/dest/storage/fact_store/index.d.ts +6 -0
  217. package/dest/storage/fact_store/index.d.ts.map +1 -0
  218. package/dest/storage/fact_store/index.js +4 -0
  219. package/dest/storage/fact_store/origin_state.d.ts +59 -0
  220. package/dest/storage/fact_store/origin_state.d.ts.map +1 -0
  221. package/dest/storage/fact_store/origin_state.js +60 -0
  222. package/dest/storage/fact_store/stored_fact.d.ts +32 -0
  223. package/dest/storage/fact_store/stored_fact.d.ts.map +1 -0
  224. package/dest/storage/fact_store/stored_fact.js +64 -0
  225. package/dest/storage/index.d.ts +3 -2
  226. package/dest/storage/index.d.ts.map +1 -1
  227. package/dest/storage/index.js +2 -1
  228. package/dest/storage/metadata.d.ts +2 -2
  229. package/dest/storage/metadata.d.ts.map +1 -1
  230. package/dest/storage/metadata.js +1 -1
  231. package/dest/storage/note_store/note_store.d.ts +42 -33
  232. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  233. package/dest/storage/note_store/note_store.js +197 -168
  234. package/dest/storage/note_store/stored_note.d.ts +3 -8
  235. package/dest/storage/note_store/stored_note.d.ts.map +1 -1
  236. package/dest/storage/note_store/stored_note.js +4 -20
  237. package/dest/storage/open_pxe_stores.d.ts +5 -3
  238. package/dest/storage/open_pxe_stores.d.ts.map +1 -1
  239. package/dest/storage/open_pxe_stores.js +5 -3
  240. package/dest/storage/private_event_store/private_event_store.d.ts +13 -16
  241. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  242. package/dest/storage/private_event_store/private_event_store.js +40 -43
  243. package/dest/storage/store_identity.d.ts +35 -0
  244. package/dest/storage/store_identity.d.ts.map +1 -0
  245. package/dest/storage/store_identity.js +44 -0
  246. package/dest/storage/tagging_store/index.d.ts +2 -2
  247. package/dest/storage/tagging_store/index.d.ts.map +1 -1
  248. package/dest/storage/tagging_store/index.js +1 -1
  249. package/dest/storage/tagging_store/sender_tagging_store.d.ts +19 -3
  250. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  251. package/dest/storage/tagging_store/sender_tagging_store.js +48 -11
  252. package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts +51 -0
  253. package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts.map +1 -0
  254. package/dest/storage/tagging_store/tagging_secret_sources_store.js +105 -0
  255. package/dest/tagging/constants.d.ts +3 -2
  256. package/dest/tagging/constants.d.ts.map +1 -1
  257. package/dest/tagging/constants.js +28 -10
  258. package/dest/tagging/index.d.ts +2 -2
  259. package/dest/tagging/index.d.ts.map +1 -1
  260. package/dest/tagging/index.js +1 -1
  261. package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +26 -8
  262. package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts.map +1 -1
  263. package/dest/tagging/recipient_sync/sync_tagged_private_logs.js +95 -20
  264. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +1 -1
  265. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +1 -1
  266. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  267. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +6 -2
  268. package/dest/tagging/testing/tag_query_test_utils.d.ts +6 -0
  269. package/dest/tagging/testing/tag_query_test_utils.d.ts.map +1 -0
  270. package/dest/tagging/testing/tag_query_test_utils.js +10 -0
  271. package/package.json +17 -17
  272. package/src/bin/check_oracle_version.ts +8 -24
  273. package/src/bin/index.ts +1 -1
  274. package/src/bin/oracle_version_helpers.ts +23 -90
  275. package/src/block_synchronizer/block_stream_source.ts +6 -45
  276. package/src/block_synchronizer/block_synchronizer.ts +70 -29
  277. package/src/config/index.ts +1 -0
  278. package/src/contract/contract_class_service.ts +83 -0
  279. package/src/{contract_sync → contract}/contract_sync_service.ts +37 -50
  280. package/src/contract/helpers.ts +35 -0
  281. package/src/contract/skip_sync_contracts.ts +23 -0
  282. package/src/contract_function_simulator/anchored_contract_data.ts +74 -0
  283. package/src/contract_function_simulator/aztec_node_read_cache.ts +89 -0
  284. package/src/contract_function_simulator/contract_function_simulator.ts +96 -42
  285. package/src/contract_function_simulator/execution_note_cache.ts +7 -28
  286. package/src/contract_function_simulator/index.ts +48 -13
  287. package/src/contract_function_simulator/noir-structs/bounded_vec.ts +12 -24
  288. package/src/contract_function_simulator/noir-structs/contract_class_log_data.ts +9 -0
  289. package/src/contract_function_simulator/noir-structs/embedded_curve_point.ts +4 -0
  290. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +1 -1
  291. package/src/contract_function_simulator/noir-structs/fact.ts +13 -0
  292. package/src/contract_function_simulator/noir-structs/fact_collection.ts +64 -0
  293. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +20 -46
  294. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +13 -60
  295. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +2 -2
  296. package/src/contract_function_simulator/noir-structs/option.ts +17 -11
  297. package/src/contract_function_simulator/noir-structs/origin_block.ts +8 -0
  298. package/src/contract_function_simulator/noir-structs/pending_tagged_log.ts +12 -0
  299. package/src/contract_function_simulator/noir-structs/provided_secret.ts +4 -26
  300. package/src/contract_function_simulator/noir-structs/resolved_tagging_strategy.ts +66 -0
  301. package/src/contract_function_simulator/noir-structs/resolved_tx.ts +19 -0
  302. package/src/contract_function_simulator/noir-structs/tx_effect_data.ts +16 -0
  303. package/src/contract_function_simulator/noir-structs/utility_context.ts +5 -17
  304. package/src/contract_function_simulator/oracle/acir_callback.ts +154 -0
  305. package/src/contract_function_simulator/oracle/index.ts +1 -15
  306. package/src/contract_function_simulator/oracle/interfaces.ts +1 -2
  307. package/src/contract_function_simulator/oracle/legacy_oracle_registry.ts +147 -0
  308. package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +6 -21
  309. package/src/contract_function_simulator/oracle/oracle_registry.ts +172 -47
  310. package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +814 -315
  311. package/src/contract_function_simulator/oracle/private_execution.ts +2 -3
  312. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +167 -30
  313. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +399 -135
  314. package/src/contract_function_simulator/transient_array_service.ts +91 -0
  315. package/src/debug/pxe_debug_utils.ts +1 -1
  316. package/src/entrypoints/client/bundle/index.ts +1 -0
  317. package/src/entrypoints/client/bundle/utils.ts +24 -5
  318. package/src/entrypoints/client/lazy/index.ts +1 -0
  319. package/src/entrypoints/client/lazy/utils.ts +24 -5
  320. package/src/entrypoints/client/store.ts +54 -0
  321. package/src/entrypoints/pxe_creation_options.ts +8 -2
  322. package/src/entrypoints/server/index.ts +6 -2
  323. package/src/entrypoints/server/store.ts +47 -0
  324. package/src/entrypoints/server/utils.ts +31 -9
  325. package/src/error_enriching.ts +27 -11
  326. package/src/hooks/execution_hooks.ts +32 -12
  327. package/src/hooks/index.ts +8 -2
  328. package/src/hooks/resolve_custom_request.ts +24 -0
  329. package/src/hooks/resolve_tagging_secret_strategy.ts +60 -0
  330. package/src/logs/log_service.ts +100 -37
  331. package/src/messages/{message_context_service.ts → tx_resolver_service.ts} +16 -9
  332. package/src/notes/note_service.ts +1 -1
  333. package/src/oracle_version.ts +5 -5
  334. package/src/private_kernel/batch_planner.ts +0 -1
  335. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +11 -1
  336. package/src/private_kernel/hints/test_utils.ts +1 -1
  337. package/src/private_kernel/private_kernel_execution_prover.ts +112 -56
  338. package/src/private_kernel/private_kernel_oracle.ts +23 -4
  339. package/src/pxe.ts +328 -159
  340. package/src/storage/allowed_scopes.ts +14 -0
  341. package/src/storage/anchor_block_store/anchor_block_store.ts +8 -6
  342. package/src/storage/backwards_compatibility_tests/__snapshots__/AddressStore.json +6 -6
  343. package/src/storage/backwards_compatibility_tests/__snapshots__/ContractStore.json +1 -1
  344. package/src/storage/backwards_compatibility_tests/__snapshots__/FactStore.json +40 -0
  345. package/src/storage/backwards_compatibility_tests/__snapshots__/KeyStore.json +12 -12
  346. package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +9 -15
  347. package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +24 -4
  348. package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +11 -3
  349. package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +12 -4
  350. package/src/storage/backwards_compatibility_tests/__snapshots__/TaggingSecretSourcesStore.json +30 -0
  351. package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +29 -9
  352. package/src/storage/backwards_compatibility_tests/schema_tests.ts +141 -50
  353. package/src/storage/capsule_store/capsule_service.ts +8 -13
  354. package/src/storage/contract_store/contract_store.ts +86 -93
  355. package/src/storage/fact_store/fact_service.ts +69 -0
  356. package/src/storage/fact_store/fact_store.ts +487 -0
  357. package/src/storage/fact_store/fact_store_keys.ts +75 -0
  358. package/src/storage/fact_store/index.ts +15 -0
  359. package/src/storage/fact_store/origin_state.ts +84 -0
  360. package/src/storage/fact_store/stored_fact.ts +80 -0
  361. package/src/storage/index.ts +2 -1
  362. package/src/storage/metadata.ts +1 -1
  363. package/src/storage/note_store/note_store.ts +226 -187
  364. package/src/storage/note_store/stored_note.ts +5 -27
  365. package/src/storage/open_pxe_stores.ts +6 -3
  366. package/src/storage/private_event_store/private_event_store.ts +49 -55
  367. package/src/storage/store_identity.ts +72 -0
  368. package/src/storage/tagging_store/index.ts +1 -1
  369. package/src/storage/tagging_store/sender_tagging_store.ts +62 -15
  370. package/src/storage/tagging_store/tagging_secret_sources_store.ts +138 -0
  371. package/src/tagging/constants.ts +30 -10
  372. package/src/tagging/index.ts +1 -1
  373. package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +148 -30
  374. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +1 -1
  375. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +6 -2
  376. package/src/tagging/testing/tag_query_test_utils.ts +11 -0
  377. package/dest/contract_function_simulator/oracle/oracle.d.ts +0 -89
  378. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +0 -1
  379. package/dest/contract_function_simulator/oracle/oracle.js +0 -552
  380. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +0 -6
  381. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +0 -1
  382. package/dest/contract_function_simulator/proxied_contract_data_source.js +0 -51
  383. package/dest/contract_sync/contract_sync_service.d.ts +0 -42
  384. package/dest/contract_sync/contract_sync_service.d.ts.map +0 -1
  385. package/dest/contract_sync/helpers.d.ts +0 -27
  386. package/dest/contract_sync/helpers.d.ts.map +0 -1
  387. package/dest/contract_sync/helpers.js +0 -53
  388. package/dest/messages/message_context_service.d.ts +0 -17
  389. package/dest/messages/message_context_service.d.ts.map +0 -1
  390. package/dest/storage/tagging_store/sender_address_book_store.d.ts +0 -14
  391. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +0 -1
  392. package/dest/storage/tagging_store/sender_address_book_store.js +0 -36
  393. package/src/contract_function_simulator/oracle/oracle.ts +0 -711
  394. package/src/contract_function_simulator/proxied_contract_data_source.ts +0 -60
  395. package/src/contract_sync/helpers.ts +0 -86
  396. package/src/storage/backwards_compatibility_tests/__snapshots__/SenderAddressBookStore.json +0 -16
  397. package/src/storage/tagging_store/sender_address_book_store.ts +0 -48
@@ -1,29 +1,32 @@
1
- import { ARCHIVE_HEIGHT } from '@aztec/constants';
2
1
  import { uniqueBy } from '@aztec/foundation/collection';
3
2
  import { Aes128 } from '@aztec/foundation/crypto/aes128';
4
3
  import { Fr } from '@aztec/foundation/curves/bn254';
4
+ import { Point } from '@aztec/foundation/curves/grumpkin';
5
5
  import { LogLevels, createLogger } from '@aztec/foundation/log';
6
- import { MembershipWitness } from '@aztec/foundation/trees';
7
6
  import { ExecutionError, extractCallStack, resolveAssertionMessageFromError, toACVMWitness, witnessMapToFields } from '@aztec/simulator/client';
7
+ import { STANDARD_HANDSHAKE_REGISTRY_ADDRESS } from '@aztec/standard-contracts/handshake-registry/constants';
8
+ import { FunctionSelector } from '@aztec/stdlib/abi';
8
9
  import { siloNullifier } from '@aztec/stdlib/hash';
9
- import { PublicKeys, computeAddressSecret, hashPublicKey } from '@aztec/stdlib/keys';
10
- import { AppTaggingSecret, MessageContext, deriveAppSiloedSharedSecret } from '@aztec/stdlib/logs';
11
- import { getNonNullifiedL1ToL2MessageWitness } from '@aztec/stdlib/messaging';
10
+ import { computeAddressSecret, hashPublicKey } from '@aztec/stdlib/keys';
11
+ import { AppTaggingSecret, FlatPublicLogs, appSiloEcdhSharedSecret } from '@aztec/stdlib/logs';
12
+ import { getL1ToL2MessageWitness } from '@aztec/stdlib/messaging';
12
13
  import { MerkleTreeId } from '@aztec/stdlib/trees';
13
- import { TxEffect } from '@aztec/stdlib/tx';
14
+ import { CallContext } from '@aztec/stdlib/tx';
14
15
  import { createContractLogger, logContractMessage, stripAztecnrLogPrefix } from '../../contract_logging.js';
15
16
  import { EventService } from '../../events/event_service.js';
16
17
  import { LogService } from '../../logs/log_service.js';
17
18
  import { NoteService } from '../../notes/note_service.js';
18
19
  import { ORACLE_VERSION_MAJOR } from '../../oracle_version.js';
20
+ import { assertAllowedScope } from '../../storage/allowed_scopes.js';
21
+ import { FactCollectionKey, FactCollectionTypeKey, anchoredTipBlockNumbers } from '../../storage/fact_store/index.js';
22
+ import { AztecNodeReadCache } from '../aztec_node_read_cache.js';
19
23
  import { EphemeralArrayService } from '../ephemeral_array_service.js';
20
24
  import { BoundedVec } from '../noir-structs/bounded_vec.js';
21
25
  import { EphemeralArray } from '../noir-structs/ephemeral_array.js';
26
+ import { emptyFactCollection, toNoirFactCollection } from '../noir-structs/fact_collection.js';
22
27
  import { Option } from '../noir-structs/option.js';
23
- import { UtilityContext } from '../noir-structs/utility_context.js';
24
28
  import { pickNotes } from '../pick_notes.js';
25
- import { MessageLoadOracleInputs } from './message_load_oracle_inputs.js';
26
- import { Oracle } from './oracle.js';
29
+ import { buildACIRCallback } from './acir_callback.js';
27
30
  /**
28
31
  * The oracle for an execution of utility contract functions.
29
32
  */ export class UtilityExecutionOracle {
@@ -33,22 +36,25 @@ import { Oracle } from './oracle.js';
33
36
  aztecnrLogger;
34
37
  offchainEffects = [];
35
38
  ephemeralArrayService = new EphemeralArrayService();
39
+ transientArrayService;
40
+ aztecNodeReadCache;
36
41
  // We store oracle version to be able to show a nice error message when an oracle handler is missing.
37
42
  contractOracleVersion;
38
- contractAddress;
43
+ callContext;
39
44
  authWitnesses;
40
45
  capsules;
41
46
  anchorBlockHeader;
42
- contractStore;
47
+ anchoredContractData;
43
48
  noteStore;
44
49
  keyStore;
45
50
  addressStore;
46
51
  aztecNode;
47
52
  recipientTaggingStore;
48
- senderAddressBookStore;
53
+ taggingSecretSourcesStore;
49
54
  capsuleService;
55
+ factService;
50
56
  privateEventStore;
51
- messageContextService;
57
+ txResolver;
52
58
  contractSyncService;
53
59
  l2TipsStore;
54
60
  jobId;
@@ -58,20 +64,21 @@ import { Oracle } from './oracle.js';
58
64
  hooks;
59
65
  utilityExecutor;
60
66
  constructor(args){
61
- this.contractAddress = args.contractAddress;
67
+ this.callContext = args.callContext;
62
68
  this.authWitnesses = args.authWitnesses;
63
69
  this.capsules = args.capsules;
64
70
  this.anchorBlockHeader = args.anchorBlockHeader;
65
- this.contractStore = args.contractStore;
71
+ this.anchoredContractData = args.anchoredContractData;
66
72
  this.noteStore = args.noteStore;
67
73
  this.keyStore = args.keyStore;
68
74
  this.addressStore = args.addressStore;
69
75
  this.aztecNode = args.aztecNode;
70
76
  this.recipientTaggingStore = args.recipientTaggingStore;
71
- this.senderAddressBookStore = args.senderAddressBookStore;
77
+ this.taggingSecretSourcesStore = args.taggingSecretSourcesStore;
72
78
  this.capsuleService = args.capsuleService;
79
+ this.factService = args.factService;
73
80
  this.privateEventStore = args.privateEventStore;
74
- this.messageContextService = args.messageContextService;
81
+ this.txResolver = args.txResolver;
75
82
  this.contractSyncService = args.contractSyncService;
76
83
  this.l2TipsStore = args.l2TipsStore;
77
84
  this.jobId = args.jobId;
@@ -80,6 +87,8 @@ import { Oracle } from './oracle.js';
80
87
  this.simulator = args.simulator;
81
88
  this.hooks = args.hooks;
82
89
  this.utilityExecutor = args.utilityExecutor;
90
+ this.transientArrayService = args.transientArrayService;
91
+ this.aztecNodeReadCache = new AztecNodeReadCache(args.aztecNode);
83
92
  }
84
93
  assertCompatibleOracleVersion(major, minor) {
85
94
  if (major !== ORACLE_VERSION_MAJOR) {
@@ -99,15 +108,20 @@ import { Oracle } from './oracle.js';
99
108
  return Fr.random();
100
109
  }
101
110
  getUtilityContext() {
102
- return new UtilityContext(this.anchorBlockHeader, this.contractAddress);
111
+ return {
112
+ blockHeader: this.anchorBlockHeader,
113
+ contractAddress: this.callContext.contractAddress,
114
+ msgSender: this.callContext.msgSender
115
+ };
103
116
  }
104
117
  /**
105
118
  * Retrieve keys associated with a specific master public key and app address.
106
119
  * @param pkMHash - The master public key hash.
120
+ * @param _keyIndex - Sent by the Noir oracle caller but unused here; kept to match the oracle signature.
107
121
  * @returns A Promise that resolves to nullifier keys.
108
122
  * @throws If the keys are not registered in the key store.
109
123
  * @throws If scopes are defined and the account is not in the scopes.
110
- */ async getKeyValidationRequest(pkMHash) {
124
+ */ async getKeyValidationRequest(pkMHash, _keyIndex) {
111
125
  let hasAccess = false;
112
126
  for(let i = 0; i < this.scopes.length && !hasAccess; i++){
113
127
  if (await this.keyStore.accountHasKey(this.scopes[i], pkMHash)) {
@@ -146,8 +160,13 @@ import { Oracle } from './oracle.js';
146
160
  // Note that we validate that the reference block hash is at or before the anchor block - we don't test the block
147
161
  // hash at all. If the block hash did not exist by the reference block hash, then the node will not return the
148
162
  // membership witness as there is none.
149
- const witness = await this.#queryWithBlockHashNotAfterAnchor(referenceBlockHash, ()=>this.aztecNode.getBlockHashMembershipWitness(referenceBlockHash, blockHash));
150
- return witness ? Option.some(witness) : Option.none(MembershipWitness.empty(ARCHIVE_HEIGHT));
163
+ const witness = await this.#queryWithBlockHashNotAfterAnchor(referenceBlockHash, ()=>this.aztecNodeReadCache.getBlockHashMembershipWitness(referenceBlockHash, blockHash));
164
+ return witness ? Option.some(witness) : Option.none();
165
+ }
166
+ /** Returns whether each block hash is present in the archive tree at the referenced block. */ async areBlockHashesInArchive(referenceBlockHash, blockHashes) {
167
+ const hashes = blockHashes.readAll(this.ephemeralArrayService);
168
+ const memberships = await this.#queryWithBlockHashNotAfterAnchor(referenceBlockHash, ()=>Promise.all(hashes.map((blockHash)=>this.aztecNodeReadCache.getBlockHashMembershipWitness(referenceBlockHash, blockHash).then(Boolean))));
169
+ return EphemeralArray.fromValues(this.ephemeralArrayService, memberships);
151
170
  }
152
171
  /**
153
172
  * Returns a nullifier membership witness for a given nullifier at a given block.
@@ -182,7 +201,7 @@ import { Oracle } from './oracle.js';
182
201
  * @param leafSlot - The slot of the public data tree to get the witness for.
183
202
  * @returns - The witness
184
203
  */ async getPublicDataWitness(blockHash, leafSlot) {
185
- const witness = await this.#queryWithBlockHashNotAfterAnchor(blockHash, ()=>this.aztecNode.getPublicDataWitness(blockHash, leafSlot));
204
+ const witness = await this.#queryWithBlockHashNotAfterAnchor(blockHash, ()=>this.aztecNodeReadCache.getPublicDataWitness(blockHash, leafSlot));
186
205
  if (!witness) {
187
206
  throw new Error(`Public data witness not found for slot ${leafSlot} at block hash ${blockHash.toString()}.`);
188
207
  }
@@ -214,10 +233,7 @@ import { Oracle } from './oracle.js';
214
233
  */ async getPublicKeysAndPartialAddress(account) {
215
234
  const completeAddress = await this.addressStore.getCompleteAddress(account);
216
235
  if (!completeAddress) {
217
- return Option.none({
218
- publicKeys: PublicKeys.default(),
219
- partialAddress: Fr.ZERO
220
- });
236
+ return Option.none();
221
237
  }
222
238
  return Option.some({
223
239
  publicKeys: completeAddress.publicKeys,
@@ -228,7 +244,7 @@ import { Oracle } from './oracle.js';
228
244
  const completeAddress = await this.addressStore.getCompleteAddress(account);
229
245
  if (!completeAddress) {
230
246
  throw new Error(`No public key registered for address ${account}.
231
- Register it by calling pxe.addAccount(...).\nSee docs for context: https://docs.aztec.network/developers/resources/debugging/aztecnr-errors#simulation-error-no-public-key-registered-for-address-0x0-register-it-by-calling-pxeregisterrecipient-or-pxeregisteraccount`);
247
+ Register it by calling wallet.registerSender(...).\nSee docs for context: https://docs.aztec.network/errors/14`);
232
248
  }
233
249
  return completeAddress;
234
250
  }
@@ -237,7 +253,7 @@ import { Oracle } from './oracle.js';
237
253
  * @param address - Address.
238
254
  * @returns A contract instance.
239
255
  */ async getContractInstance(address) {
240
- const instance = await this.contractStore.getContractInstance(address);
256
+ const instance = await this.anchoredContractData.getContractInstance(address);
241
257
  if (!instance) {
242
258
  throw new Error(`No contract instance found for address ${address.toString()}`);
243
259
  }
@@ -320,15 +336,17 @@ import { Oracle } from './oracle.js';
320
336
  return leafIndex?.data !== undefined;
321
337
  }
322
338
  /**
323
- * Returns the membership witness of an un-nullified L1 to L2 message.
324
- * @param contractAddress - Address of a contract by which the message was emitted.
339
+ * Returns the membership witness of an L1 to L2 message.
325
340
  * @param messageHash - Hash of the message.
326
- * @param secret - Secret used to compute a nullifier.
327
- * @dev Contract address and secret are only used to compute the nullifier to get non-nullified messages
341
+ * @param nullifier - When present, the unsiloed nullifier of the message and the address to silo it with. The witness
342
+ * is only returned if the siloed nullifier is absent from the nullifier tree, i.e. the message has not been consumed.
328
343
  * @returns The l1 to l2 membership witness (index of message in the tree and sibling path).
329
- */ async getL1ToL2MembershipWitness(contractAddress, messageHash, secret) {
330
- const [messageIndex, siblingPath] = await getNonNullifiedL1ToL2MessageWitness(this.aztecNode, contractAddress, messageHash, secret, await this.anchorBlockHeader.hash());
331
- return new MessageLoadOracleInputs(messageIndex, siblingPath);
344
+ */ async getL1ToL2MembershipWitnessV2(messageHash, nullifier) {
345
+ const [messageIndex, siblingPath] = await getL1ToL2MessageWitness(this.aztecNode, messageHash, nullifier.value, await this.anchorBlockHeader.hash());
346
+ return {
347
+ index: messageIndex,
348
+ siblingPath
349
+ };
332
350
  }
333
351
  /**
334
352
  * Read the public storage data.
@@ -338,9 +356,8 @@ import { Oracle } from './oracle.js';
338
356
  * @param numberOfElements - Number of elements to read from the starting storage slot.
339
357
  */ getFromPublicStorage(blockHash, contractAddress, startStorageSlot, numberOfElements) {
340
358
  return this.#queryWithBlockHashNotAfterAnchor(blockHash, async ()=>{
341
- const slots = Array(numberOfElements).fill(0).map((_, i)=>new Fr(startStorageSlot.value + BigInt(i)));
342
- const values = await Promise.all(slots.map((storageSlot)=>this.aztecNode.getPublicStorageAt(blockHash, contractAddress, storageSlot)));
343
- this.logger.debug(`Oracle storage read: slots=[${slots.map((slot)=>slot.toString()).join(', ')}] address=${contractAddress.toString()} values=[${values.join(', ')}]`);
359
+ const values = await this.aztecNodeReadCache.getPublicStorageRange(blockHash, contractAddress, startStorageSlot, numberOfElements);
360
+ this.logger.debug(`Oracle storage read: start=${startStorageSlot.toString()} count=${numberOfElements} ` + `address=${contractAddress.toString()} values=[${values.join(', ')}]`);
344
361
  return values;
345
362
  });
346
363
  }
@@ -350,7 +367,7 @@ import { Oracle } from './oracle.js';
350
367
  if (!this.contractLogger) {
351
368
  // Purpose of instanceId is to distinguish logs from different instances of the same component. It makes sense
352
369
  // to re-use jobId as instanceId here as executions of different PXE jobs are isolated.
353
- this.contractLogger = await createContractLogger(this.contractAddress, (addr)=>this.contractStore.getDebugContractName(addr), 'user', {
370
+ this.contractLogger = await createContractLogger(this.contractAddress, (addr)=>this.anchoredContractData.getDebugContractName(addr), 'user', {
354
371
  instanceId: this.jobId
355
372
  });
356
373
  }
@@ -362,7 +379,7 @@ import { Oracle } from './oracle.js';
362
379
  if (!this.aztecnrLogger) {
363
380
  // Purpose of instanceId is to distinguish logs from different instances of the same component. It makes sense
364
381
  // to re-use jobId as instanceId here as executions of different PXE jobs are isolated.
365
- this.aztecnrLogger = await createContractLogger(this.contractAddress, (addr)=>this.contractStore.getDebugContractName(addr), 'aztecnr', {
382
+ this.aztecnrLogger = await createContractLogger(this.contractAddress, (addr)=>this.anchoredContractData.getDebugContractName(addr), 'aztecnr', {
366
383
  instanceId: this.jobId
367
384
  });
368
385
  }
@@ -376,14 +393,14 @@ import { Oracle } from './oracle.js';
376
393
  const logger = kind == 'aztecnr' ? await this.#getAztecnrLogger() : await this.#getContractLogger();
377
394
  logContractMessage(logger, LogLevels[level], strippedMessage, fields);
378
395
  }
379
- /** Fetches pending tagged logs into a freshly allocated ephemeral array and returns it. */ async getPendingTaggedLogs(scope, providedSecrets) {
396
+ /** Fetches pending tagged logs into a freshly allocated ephemeral array and returns it. */ async getPendingTaggedLogsV2(scope, providedSecrets) {
380
397
  const secrets = providedSecrets.readAll(this.ephemeralArrayService).map((ps)=>new AppTaggingSecret(ps.secret, this.contractAddress, ps.mode));
381
398
  const logService = this.#createLogService();
382
399
  const logs = await logService.fetchTaggedLogs(this.contractAddress, scope, secrets);
383
400
  return EphemeralArray.fromValues(this.ephemeralArrayService, logs);
384
401
  }
385
402
  #createLogService() {
386
- return new LogService(this.aztecNode, this.anchorBlockHeader, this.l2TipsStore, this.keyStore, this.recipientTaggingStore, this.senderAddressBookStore, this.addressStore, this.jobId, this.logger.getBindings());
403
+ return new LogService(this.aztecNode, this.anchorBlockHeader, this.l2TipsStore, this.keyStore, this.recipientTaggingStore, this.taggingSecretSourcesStore, this.addressStore, this.scopes, this.jobId, this.logger.getBindings());
387
404
  }
388
405
  async validateAndStoreEnqueuedNotesAndEvents(noteValidationRequests, eventValidationRequests, scope) {
389
406
  await this.#processValidationRequests(noteValidationRequests.readAll(this.ephemeralArrayService), eventValidationRequests.readAll(this.ephemeralArrayService), scope);
@@ -400,7 +417,7 @@ import { Oracle } from './oracle.js';
400
417
  eventService.validateAndStoreEvents(eventValidationRequests, scope, txEffects)
401
418
  ]);
402
419
  }
403
- async getLogsByTag(requests) {
420
+ async getLogsByTagV2(requests) {
404
421
  const logRetrievalRequests = requests.readAll(this.ephemeralArrayService);
405
422
  const logService = this.#createLogService();
406
423
  const logRetrievalResponses = await logService.fetchLogsByTag(this.contractAddress, logRetrievalRequests);
@@ -408,10 +425,10 @@ import { Oracle } from './oracle.js';
408
425
  const innerArrays = logRetrievalResponses.map((responses)=>EphemeralArray.fromValues(this.ephemeralArrayService, responses));
409
426
  return EphemeralArray.fromValues(this.ephemeralArrayService, innerArrays);
410
427
  }
411
- /** Reads tx hash requests from an ephemeral array, resolves their contexts, and returns the response array. */ async getMessageContextsByTxHash(requests) {
428
+ /** Given an array of tx hashes, returns an aligned array of tx info if the tx is available. */ async getResolvedTxs(requests) {
412
429
  const txHashes = requests.readAll(this.ephemeralArrayService);
413
- const maybeMessageContexts = await this.messageContextService.getMessageContextsByTxHash(txHashes, this.anchorBlockHeader.getBlockNumber());
414
- const options = maybeMessageContexts.map((mc)=>mc ? Option.some(mc) : Option.none(MessageContext.empty()));
430
+ const resolved = await this.txResolver.resolveTxs(txHashes, this.anchorBlockHeader.getBlockNumber());
431
+ const options = resolved.map((r)=>r ? Option.some(r) : Option.none());
415
432
  return EphemeralArray.fromValues(this.ephemeralArrayService, options);
416
433
  }
417
434
  /**
@@ -421,42 +438,74 @@ import { Oracle } from './oracle.js';
421
438
  if (txHash.hash.isZero()) {
422
439
  throw new Error('Invalid tx hash passed into aztec_utl_getTxEffect oracle handler');
423
440
  }
424
- const receipt = await this.aztecNode.getTxReceipt(txHash, {
425
- includeTxEffect: true
426
- });
427
- if (!receipt.isMined() || !receipt.txEffect || receipt.blockNumber > this.anchorBlockHeader.getBlockNumber()) {
428
- return Option.none(TxEffect.empty());
441
+ return await this.#getTxEffectOption(txHash);
442
+ }
443
+ /** Fetches transaction effects for all hashes, preserving request order. */ async getTxEffects(txHashes) {
444
+ const hashes = txHashes.readAll(this.ephemeralArrayService);
445
+ const invalidHash = hashes.find((txHash)=>txHash.hash.isZero());
446
+ if (invalidHash) {
447
+ throw new Error('Invalid tx hash passed into aztec_utl_getTxEffects oracle handler');
429
448
  }
430
- return Option.some(receipt.txEffect);
449
+ const uniqueTxHashes = uniqueBy(hashes, (h)=>h.toString());
450
+ const options = await Promise.all(uniqueTxHashes.map((txHash)=>this.#getTxEffectOption(txHash)));
451
+ const optionsByHash = new Map(uniqueTxHashes.map((txHash, i)=>[
452
+ txHash.toString(),
453
+ options[i]
454
+ ]));
455
+ return EphemeralArray.fromValues(this.ephemeralArrayService, hashes.map((txHash)=>optionsByHash.get(txHash.toString())));
431
456
  }
432
457
  setCapsule(contractAddress, slot, capsule, scope) {
433
- if (!contractAddress.equals(this.contractAddress)) {
434
- // TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
435
- throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
436
- }
458
+ this.#assertOwnContract(contractAddress);
437
459
  this.capsuleService.setCapsule(contractAddress, slot, capsule, this.jobId, scope);
438
460
  }
439
461
  async getCapsule(contractAddress, slot, tSize, scope) {
440
- if (!contractAddress.equals(this.contractAddress)) {
441
- // TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
442
- throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
443
- }
462
+ this.#assertOwnContract(contractAddress);
444
463
  const values = await this.capsuleService.getCapsule(contractAddress, slot, this.jobId, scope, this.capsules);
445
- return values ? Option.some(values) : Option.none(new Array(tSize).fill(Fr.ZERO));
464
+ return values ? Option.some(values) : Option.none({
465
+ length: tSize
466
+ });
446
467
  }
447
468
  deleteCapsule(contractAddress, slot, scope) {
448
- if (!contractAddress.equals(this.contractAddress)) {
449
- // TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
450
- throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
451
- }
469
+ this.#assertOwnContract(contractAddress);
452
470
  this.capsuleService.deleteCapsule(contractAddress, slot, this.jobId, scope);
453
471
  }
454
472
  copyCapsule(contractAddress, srcSlot, dstSlot, numEntries, scope) {
473
+ this.#assertOwnContract(contractAddress);
474
+ return this.capsuleService.copyCapsule(contractAddress, srcSlot, dstSlot, numEntries, this.jobId, scope);
475
+ }
476
+ /**
477
+ * Asserts the executing contract may only access its own slice of PXE DB.
478
+ */ #assertOwnContract(contractAddress) {
455
479
  if (!contractAddress.equals(this.contractAddress)) {
456
- // TODO(#10727): instead of this check that this.contractAddress is allowed to access the external DB
457
480
  throw new Error(`Contract ${contractAddress} is not allowed to access ${this.contractAddress}'s PXE DB`);
458
481
  }
459
- return this.capsuleService.copyCapsule(contractAddress, srcSlot, dstSlot, numEntries, this.jobId, scope);
482
+ }
483
+ /**
484
+ * Records a fact into a collection. A `Some` origin block makes the fact retractable (pruned on reorg of that
485
+ * block), a `None` origin block makes it non-retractable, surviving reorgs.
486
+ */ recordFact(contractAddress, scope, factCollectionTypeId, factCollectionId, factTypeId, payload, originBlock) {
487
+ this.#assertOwnContract(contractAddress);
488
+ return this.factService.recordFact(new FactCollectionKey(contractAddress, scope, factCollectionTypeId, factCollectionId), factTypeId, payload.readAll(this.ephemeralArrayService), originBlock.isSome() ? originBlock.value : undefined, this.jobId);
489
+ }
490
+ /**
491
+ * Deletes a fact collection, removing all its facts. A no-op if no such collection exists.
492
+ */ deleteFactCollection(contractAddress, scope, factCollectionTypeId, factCollectionId) {
493
+ this.#assertOwnContract(contractAddress);
494
+ return this.factService.deleteFactCollection(new FactCollectionKey(contractAddress, scope, factCollectionTypeId, factCollectionId), this.jobId);
495
+ }
496
+ /**
497
+ * Returns a fact collection.
498
+ */ async getFactCollection(contractAddress, scope, factCollectionTypeId, factCollectionId) {
499
+ this.#assertOwnContract(contractAddress);
500
+ const tips = anchoredTipBlockNumbers(await this.l2TipsStore.getL2Tips(), this.anchorBlockHeader.getBlockNumber());
501
+ const collection = await this.factService.getFactCollection(new FactCollectionKey(contractAddress, scope, factCollectionTypeId, factCollectionId), tips, this.jobId);
502
+ return collection ? Option.some(toNoirFactCollection(this.ephemeralArrayService, contractAddress, scope, factCollectionTypeId, factCollectionId, collection.facts)) : Option.none(emptyFactCollection(this.ephemeralArrayService));
503
+ }
504
+ /** Returns every fact collection of `factCollectionTypeId`. */ async getFactCollectionsByType(contractAddress, scope, factCollectionTypeId) {
505
+ this.#assertOwnContract(contractAddress);
506
+ const tips = anchoredTipBlockNumbers(await this.l2TipsStore.getL2Tips(), this.anchorBlockHeader.getBlockNumber());
507
+ const collections = await this.factService.getFactCollectionsByType(new FactCollectionTypeKey(contractAddress, scope, factCollectionTypeId), tips, this.jobId);
508
+ return EphemeralArray.fromValues(this.ephemeralArrayService, collections.map((collection)=>toNoirFactCollection(this.ephemeralArrayService, collection.key.contractAddress, collection.key.scope, collection.key.factCollectionTypeId, collection.key.factCollectionId, collection.facts)));
460
509
  }
461
510
  /**
462
511
  * Clears cached sync state for a contract for a set of scopes, forcing re-sync on the next query so that newly
@@ -472,7 +521,7 @@ import { Oracle } from './oracle.js';
472
521
  const capacity = ciphertext.maxLength;
473
522
  try {
474
523
  const aes128 = new Aes128();
475
- const plaintext = await aes128.decryptBufferCBC(Buffer.from(ciphertext.data), iv, symKey);
524
+ const plaintext = await aes128.decryptBufferCBC(Buffer.from(ciphertext.data), Buffer.from(iv), Buffer.from(symKey));
476
525
  return Option.some(BoundedVec.from({
477
526
  data: [
478
527
  ...plaintext
@@ -480,9 +529,9 @@ import { Oracle } from './oracle.js';
480
529
  maxLength: capacity
481
530
  }));
482
531
  } catch {
483
- return Option.none(BoundedVec.empty({
532
+ return Option.none({
484
533
  maxLength: capacity
485
- }));
534
+ });
486
535
  }
487
536
  }
488
537
  /**
@@ -490,17 +539,29 @@ import { Oracle } from './oracle.js';
490
539
  * @param address - The recipient address.
491
540
  * @param ephPks - Ephemeral array containing the serialized Points.
492
541
  * @param contractAddress - The contract address for app-siloing (validated against execution context).
493
- * @returns A new ephemeral array containing the computed shared secrets.
542
+ * @returns A new ephemeral array containing the computed shared secrets, or an empty array when the PXE does not
543
+ * hold the keys for `address`.
544
+ * @throws If `address` is not in the execution's allowed scopes.
494
545
  */ async getSharedSecrets(address, ephPks, contractAddress) {
495
546
  if (!contractAddress.equals(this.contractAddress)) {
496
547
  throw new Error(`getSharedSecrets called with contract address ${contractAddress}, expected ${this.contractAddress}`);
497
548
  }
498
- const recipientCompleteAddress = await this.getCompleteAddressOrFail(address);
549
+ assertAllowedScope(address, this.scopes);
550
+ // An address can be in scope without the PXE holding its keys (e.g. syncing a registered but non-owned account),
551
+ // in which case no secrets can be derived and we return an empty array rather than failing.
552
+ const recipientCompleteAddress = await this.addressStore.getCompleteAddress(address);
553
+ if (!recipientCompleteAddress) {
554
+ this.logger.warn(`Computing shared secrets for address ${address} whose keys are not held - returning no secrets`, {
555
+ address,
556
+ contractAddress: this.contractAddress
557
+ });
558
+ return EphemeralArray.fromValues(this.ephemeralArrayService, []);
559
+ }
499
560
  const ivpkMHash = await hashPublicKey(recipientCompleteAddress.publicKeys.ivpkM);
500
561
  const ivskM = await this.keyStore.getMasterSecretKey(ivpkMHash);
501
562
  const addressSecret = await computeAddressSecret(await recipientCompleteAddress.getPreaddress(), ivskM);
502
563
  const ephPkPoints = ephPks.readAll(this.ephemeralArrayService);
503
- const secrets = await Promise.all(ephPkPoints.map((ephPk)=>deriveAppSiloedSharedSecret(addressSecret, ephPk, this.contractAddress)));
564
+ const secrets = await Promise.all(ephPkPoints.map(({ x, y })=>appSiloEcdhSharedSecret(addressSecret, new Point(x, y), this.contractAddress)));
504
565
  return EphemeralArray.fromValues(this.ephemeralArrayService, secrets);
505
566
  }
506
567
  pushEphemeral(slot, elements) {
@@ -524,6 +585,27 @@ import { Oracle } from './oracle.js';
524
585
  clearEphemeral(slot) {
525
586
  this.ephemeralArrayService.clear(slot);
526
587
  }
588
+ pushTransient(slot, elements) {
589
+ return this.transientArrayService.push(this.contractAddress, slot, elements);
590
+ }
591
+ popTransient(slot) {
592
+ return this.transientArrayService.pop(this.contractAddress, slot);
593
+ }
594
+ getTransient(slot, index) {
595
+ return this.transientArrayService.get(this.contractAddress, slot, index);
596
+ }
597
+ setTransient(slot, index, elements) {
598
+ this.transientArrayService.set(this.contractAddress, slot, index, elements);
599
+ }
600
+ getTransientLen(slot) {
601
+ return this.transientArrayService.len(this.contractAddress, slot);
602
+ }
603
+ removeTransient(slot, index) {
604
+ this.transientArrayService.remove(this.contractAddress, slot, index);
605
+ }
606
+ clearTransient(slot) {
607
+ this.transientArrayService.clear(this.contractAddress, slot);
608
+ }
527
609
  emitOffchainEffect(data) {
528
610
  this.offchainEffects.push({
529
611
  data,
@@ -532,48 +614,63 @@ import { Oracle } from './oracle.js';
532
614
  return Promise.resolve();
533
615
  }
534
616
  /** Executes another utility function from within this one and returns its serialized return values. */ async callUtilityFunction(targetContractAddress, functionSelector, args) {
535
- const targetArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(targetContractAddress, functionSelector);
617
+ const targetArtifact = await this.anchoredContractData.getFunctionArtifactWithDebugMetadata(targetContractAddress, functionSelector);
618
+ if (!targetArtifact) {
619
+ throw new Error(`Cannot call ${targetContractAddress}:${functionSelector}: the contract is not registered. ` + `Register it via wallet.registerContract(...).`);
620
+ }
536
621
  if (!targetContractAddress.equals(this.contractAddress)) {
537
- const [callerInstance, targetInstance] = await Promise.all([
538
- this.getContractInstance(this.contractAddress),
539
- this.getContractInstance(targetContractAddress)
540
- ]);
541
- const request = {
542
- caller: this.contractAddress,
543
- callerClassId: callerInstance.currentContractClassId,
544
- target: targetContractAddress,
545
- targetClassId: targetInstance.currentContractClassId,
546
- functionSelector,
547
- functionName: targetArtifact.name,
548
- args,
549
- callerContext: this.callerContext
550
- };
551
- const response = this.hooks ? await this.hooks.authorizeUtilityCall(request) : {
552
- authorized: false,
553
- reason: 'No execution hooks configured'
554
- };
555
- if (!response.authorized) {
556
- const reason = response.reason ? `: ${response.reason}` : '';
557
- throw new Error(`Cross-contract utility call denied${reason}. ${this.contractAddress} attempted to call ` + `${targetContractAddress}:${functionSelector} (${targetArtifact.name}). ` + `See https://docs.aztec.network/errors/11`);
622
+ // Standard handshake registry reads are authorized by default; every other cross-contract call needs the hook.
623
+ if (!await isStandardHandshakeRegistryUtilityRead(targetContractAddress, functionSelector)) {
624
+ const [callerClassId, targetClassId] = await Promise.all([
625
+ this.anchoredContractData.getCurrentClassId(this.contractAddress),
626
+ this.anchoredContractData.getCurrentClassId(targetContractAddress)
627
+ ]);
628
+ if (!callerClassId || !targetClassId) {
629
+ throw new Error(`Cannot authorize utility call from ${this.contractAddress} to ${targetContractAddress}: ` + `${!callerClassId ? this.contractAddress : targetContractAddress} is not registered.`);
630
+ }
631
+ const request = {
632
+ caller: this.contractAddress,
633
+ callerClassId,
634
+ target: targetContractAddress,
635
+ targetClassId,
636
+ functionSelector,
637
+ functionName: targetArtifact.name,
638
+ args,
639
+ callerContext: this.callerContext
640
+ };
641
+ const response = this.hooks?.authorizeUtilityCall ? await this.hooks.authorizeUtilityCall(request) : {
642
+ authorized: false,
643
+ reason: 'No authorizeUtilityCall hook configured'
644
+ };
645
+ if (!response.authorized) {
646
+ const reason = response.reason ? `: ${response.reason}` : '';
647
+ throw new Error(`Cross-contract utility call denied${reason}. ${this.contractAddress} attempted to call ` + `${targetContractAddress}:${functionSelector} (${targetArtifact.name}). ` + `See https://docs.aztec.network/errors/11`);
648
+ }
558
649
  }
559
650
  await this.contractSyncService.ensureContractSynced(targetContractAddress, functionSelector, this.utilityExecutor, this.anchorBlockHeader, this.jobId, this.scopes);
560
651
  }
561
652
  this.logger.debug(`Calling nested utility function ${targetContractAddress}:${functionSelector} from ${this.contractAddress}`);
562
653
  const nestedOracle = new UtilityExecutionOracle({
563
- contractAddress: targetContractAddress,
654
+ callContext: CallContext.from({
655
+ msgSender: this.contractAddress,
656
+ contractAddress: targetContractAddress,
657
+ functionSelector,
658
+ isStaticCall: true
659
+ }),
564
660
  authWitnesses: this.authWitnesses,
565
661
  capsules: this.capsules,
566
662
  anchorBlockHeader: this.anchorBlockHeader,
567
- contractStore: this.contractStore,
663
+ anchoredContractData: this.anchoredContractData,
568
664
  noteStore: this.noteStore,
569
665
  keyStore: this.keyStore,
570
666
  addressStore: this.addressStore,
571
667
  aztecNode: this.aztecNode,
572
668
  recipientTaggingStore: this.recipientTaggingStore,
573
- senderAddressBookStore: this.senderAddressBookStore,
669
+ taggingSecretSourcesStore: this.taggingSecretSourcesStore,
574
670
  capsuleService: this.capsuleService,
671
+ factService: this.factService,
575
672
  privateEventStore: this.privateEventStore,
576
- messageContextService: this.messageContextService,
673
+ txResolver: this.txResolver,
577
674
  contractSyncService: this.contractSyncService,
578
675
  l2TipsStore: this.l2TipsStore,
579
676
  jobId: this.jobId,
@@ -581,11 +678,12 @@ import { Oracle } from './oracle.js';
581
678
  simulator: this.simulator,
582
679
  hooks: this.hooks,
583
680
  utilityExecutor: this.utilityExecutor,
584
- log: this.logger
681
+ log: this.logger,
682
+ // Shared across the whole execution tree: nested utility frames inherit the caller's transient-array store.
683
+ transientArrayService: this.transientArrayService
585
684
  });
586
685
  const initialWitness = toACVMWitness(0, args);
587
- const acvmCallback = new Oracle(nestedOracle);
588
- const acirExecutionResult = await this.simulator.executeUserCircuit(initialWitness, targetArtifact, acvmCallback.toACIRCallback()).catch((err)=>{
686
+ const acirExecutionResult = await this.simulator.executeUserCircuit(initialWitness, targetArtifact, buildACIRCallback(nestedOracle)).catch((err)=>{
589
687
  err.message = resolveAssertionMessageFromError(err, targetArtifact);
590
688
  throw new ExecutionError(err.message, {
591
689
  contractAddress: targetContractAddress,
@@ -604,9 +702,7 @@ import { Oracle } from './oracle.js';
604
702
  * once. Returns a map keyed by `TxHash.toString()`; hashes for which the node has no tx effect are omitted.
605
703
  */ async #fetchTxEffects(txHashes) {
606
704
  const uniqueTxHashes = uniqueBy(txHashes, (h)=>h.toString());
607
- const fetched = await Promise.all(uniqueTxHashes.map((h)=>this.aztecNode.getTxReceipt(h, {
608
- includeTxEffect: true
609
- })));
705
+ const fetched = await Promise.all(uniqueTxHashes.map((h)=>this.aztecNodeReadCache.getTxReceiptWithEffect(h)));
610
706
  return new Map(uniqueTxHashes.map((h, i)=>{
611
707
  const receipt = fetched[i];
612
708
  if (!receipt.isMined() || !receipt.txEffect) {
@@ -627,6 +723,25 @@ import { Oracle } from './oracle.js';
627
723
  ];
628
724
  }).filter((entry)=>entry[1] !== undefined));
629
725
  }
726
+ async #getTxEffectOption(txHash) {
727
+ const receipt = await this.aztecNodeReadCache.getTxReceiptWithEffect(txHash);
728
+ if (!receipt.isMined() || !receipt.txEffect || receipt.blockNumber > this.anchorBlockHeader.getBlockNumber()) {
729
+ return Option.none();
730
+ }
731
+ return Option.some(this.#toTxEffectData(receipt.txEffect));
732
+ }
733
+ #toTxEffectData(txEffect) {
734
+ return {
735
+ ...txEffect,
736
+ revertCode: txEffect.revertCode.getCode(),
737
+ publicLogs: FlatPublicLogs.fromLogs(txEffect.publicLogs),
738
+ contractClassLogs: txEffect.contractClassLogs.map((log)=>({
739
+ contractAddress: log.contractAddress,
740
+ fields: log.fields.toFields(),
741
+ emittedLength: log.emittedLength
742
+ }))
743
+ };
744
+ }
630
745
  /** Runs a query concurrently with a validation that the block hash is not ahead of the anchor block. */ async #queryWithBlockHashNotAfterAnchor(blockHash, query) {
631
746
  // Most contracts query state at the "current" block, which is the anchor. Skip the validation when we can.
632
747
  const anchorHash = await this.anchorBlockHeader.hash();
@@ -636,7 +751,7 @@ import { Oracle } from './oracle.js';
636
751
  const [response] = await Promise.all([
637
752
  query(),
638
753
  (async ()=>{
639
- const block = await this.aztecNode.getBlock(blockHash);
754
+ const block = await this.aztecNodeReadCache.getBlock(blockHash);
640
755
  const header = block?.header;
641
756
  if (!header) {
642
757
  throw new Error(`Could not find block header for block hash ${blockHash}`);
@@ -651,4 +766,30 @@ import { Oracle } from './oracle.js';
651
766
  /** The execution context of the current call. */ get callerContext() {
652
767
  return 'utility';
653
768
  }
769
+ /** The address of the contract whose function is being executed, from the call context. */ get contractAddress() {
770
+ return this.callContext.contractAddress;
771
+ }
772
+ }
773
+ // Registry reads that any contract may issue without an `authorizeUtilityCall` hook. The constrained-delivery
774
+ // library calls these implicitly for the app, and they are safe to default-authorize: `get_app_siloed_secrets`
775
+ // siloes every returned secret to `msg_sender`, and `get_non_interactive_handshakes` only exposes ephemeral public
776
+ // keys, from which the shared secret cannot be derived without the recipient's secret keys.
777
+ const STANDARD_HANDSHAKE_REGISTRY_DEFAULT_AUTHORIZED_READ_SIGNATURES = [
778
+ 'get_non_interactive_handshakes((Field),u32)',
779
+ 'get_app_siloed_secrets((Field),(Field))'
780
+ ];
781
+ async function doesSelectorHaveSignature(functionSelector, signature) {
782
+ return functionSelector.equals(await FunctionSelector.fromSignature(signature));
783
+ }
784
+ /**
785
+ * Whether a cross-contract utility call targets one of the standard handshake registry's read functions.
786
+ *
787
+ * These reads are authorized by PXE for every wallet, without consulting the `authorizeUtilityCall` hook, so that
788
+ * wallets don't need to know the handshake registry exists in order to deliver and discover messages through it.
789
+ */ async function isStandardHandshakeRegistryUtilityRead(targetContractAddress, functionSelector) {
790
+ if (!targetContractAddress.equals(STANDARD_HANDSHAKE_REGISTRY_ADDRESS)) {
791
+ return false;
792
+ }
793
+ const matches = await Promise.all(STANDARD_HANDSHAKE_REGISTRY_DEFAULT_AUTHORIZED_READ_SIGNATURES.map((signature)=>doesSelectorHaveSignature(functionSelector, signature)));
794
+ return matches.some(Boolean);
654
795
  }