@aztec/pxe 0.0.1-commit.993d52e → 0.0.1-commit.9a89641

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 (529) hide show
  1. package/dest/bin/check_oracle_version.js +11 -118
  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 +20 -0
  6. package/dest/bin/oracle_version_helpers.d.ts.map +1 -0
  7. package/dest/bin/oracle_version_helpers.js +25 -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 +22 -16
  12. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  13. package/dest/block_synchronizer/block_synchronizer.js +71 -28
  14. package/dest/config/index.d.ts +9 -2
  15. package/dest/config/index.d.ts.map +1 -1
  16. package/dest/config/index.js +14 -15
  17. package/dest/config/package_info.js +1 -1
  18. package/dest/contract/contract_class_service.d.ts +24 -0
  19. package/dest/contract/contract_class_service.d.ts.map +1 -0
  20. package/dest/contract/contract_class_service.js +36 -0
  21. package/dest/contract/contract_sync_service.d.ts +48 -0
  22. package/dest/contract/contract_sync_service.d.ts.map +1 -0
  23. package/dest/contract/contract_sync_service.js +116 -0
  24. package/dest/contract/helpers.d.ts +7 -0
  25. package/dest/contract/helpers.d.ts.map +1 -0
  26. package/dest/contract/helpers.js +20 -0
  27. package/dest/contract/skip_sync_contracts.d.ts +11 -0
  28. package/dest/contract/skip_sync_contracts.d.ts.map +1 -0
  29. package/dest/contract/skip_sync_contracts.js +18 -0
  30. package/dest/contract_function_simulator/anchored_contract_data.d.ts +36 -0
  31. package/dest/contract_function_simulator/anchored_contract_data.d.ts.map +1 -0
  32. package/dest/contract_function_simulator/anchored_contract_data.js +54 -0
  33. package/dest/contract_function_simulator/contract_function_simulator.d.ts +30 -25
  34. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  35. package/dest/contract_function_simulator/contract_function_simulator.js +111 -62
  36. package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
  37. package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
  38. package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
  39. package/dest/contract_function_simulator/execution_note_cache.d.ts +4 -10
  40. package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
  41. package/dest/contract_function_simulator/execution_note_cache.js +8 -28
  42. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -11
  43. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
  44. package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -15
  45. package/dest/contract_function_simulator/index.d.ts +26 -5
  46. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  47. package/dest/contract_function_simulator/index.js +11 -3
  48. package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts +29 -0
  49. package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts.map +1 -0
  50. package/dest/contract_function_simulator/noir-structs/bounded_vec.js +30 -0
  51. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts +9 -0
  52. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts.map +1 -0
  53. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.js +1 -0
  54. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts +7 -0
  55. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts.map +1 -0
  56. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.js +1 -0
  57. package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts +37 -0
  58. package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts.map +1 -0
  59. package/dest/contract_function_simulator/noir-structs/ephemeral_array.js +59 -0
  60. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +3 -4
  61. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  62. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +9 -10
  63. package/dest/contract_function_simulator/noir-structs/fact.d.ts +16 -0
  64. package/dest/contract_function_simulator/noir-structs/fact.d.ts.map +1 -0
  65. package/dest/contract_function_simulator/noir-structs/fact.js +6 -0
  66. package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts +27 -0
  67. package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts.map +1 -0
  68. package/dest/contract_function_simulator/noir-structs/fact_collection.js +31 -0
  69. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +19 -10
  70. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -1
  71. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +12 -24
  72. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +11 -9
  73. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
  74. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +2 -63
  75. package/dest/contract_function_simulator/noir-structs/note_data.d.ts +27 -0
  76. package/dest/contract_function_simulator/noir-structs/note_data.d.ts.map +1 -0
  77. package/dest/contract_function_simulator/noir-structs/note_data.js +3 -0
  78. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +3 -5
  79. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  80. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +8 -12
  81. package/dest/contract_function_simulator/noir-structs/option.d.ts +59 -0
  82. package/dest/contract_function_simulator/noir-structs/option.d.ts.map +1 -0
  83. package/dest/contract_function_simulator/noir-structs/option.js +67 -0
  84. package/dest/contract_function_simulator/noir-structs/origin_block.d.ts +11 -0
  85. package/dest/contract_function_simulator/noir-structs/origin_block.d.ts.map +1 -0
  86. package/dest/contract_function_simulator/noir-structs/origin_block.js +5 -0
  87. package/dest/contract_function_simulator/noir-structs/pending_tagged_log.d.ts +11 -0
  88. package/dest/contract_function_simulator/noir-structs/pending_tagged_log.d.ts.map +1 -0
  89. package/dest/contract_function_simulator/noir-structs/pending_tagged_log.js +4 -0
  90. package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts +8 -0
  91. package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts.map +1 -0
  92. package/dest/contract_function_simulator/noir-structs/provided_secret.js +1 -0
  93. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts +28 -0
  94. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts.map +1 -0
  95. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.js +50 -0
  96. package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts +19 -0
  97. package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts.map +1 -0
  98. package/dest/contract_function_simulator/noir-structs/resolved_tx.js +9 -0
  99. package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts +15 -0
  100. package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts.map +1 -0
  101. package/dest/contract_function_simulator/noir-structs/tx_effect_data.js +5 -0
  102. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +6 -11
  103. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
  104. package/dest/contract_function_simulator/noir-structs/utility_context.js +1 -20
  105. package/dest/contract_function_simulator/oracle/acir_callback.d.ts +21 -0
  106. package/dest/contract_function_simulator/oracle/acir_callback.d.ts.map +1 -0
  107. package/dest/contract_function_simulator/oracle/acir_callback.js +115 -0
  108. package/dest/contract_function_simulator/oracle/index.d.ts +2 -13
  109. package/dest/contract_function_simulator/oracle/index.d.ts.map +1 -1
  110. package/dest/contract_function_simulator/oracle/index.js +1 -1
  111. package/dest/contract_function_simulator/oracle/interfaces.d.ts +15 -98
  112. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  113. package/dest/contract_function_simulator/oracle/interfaces.js +2 -2
  114. package/dest/contract_function_simulator/oracle/legacy_oracle_registry.d.ts +39 -0
  115. package/dest/contract_function_simulator/oracle/legacy_oracle_registry.d.ts.map +1 -0
  116. package/dest/contract_function_simulator/oracle/legacy_oracle_registry.js +107 -0
  117. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -14
  118. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
  119. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.js +1 -24
  120. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +2 -2
  121. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
  122. package/dest/contract_function_simulator/oracle/note_packing_utils.js +2 -2
  123. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts +139 -0
  124. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -0
  125. package/dest/contract_function_simulator/oracle/oracle_registry.js +1016 -0
  126. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +274 -0
  127. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts.map +1 -0
  128. package/dest/contract_function_simulator/oracle/oracle_type_mappings.js +1253 -0
  129. package/dest/contract_function_simulator/oracle/private_execution.d.ts +1 -1
  130. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  131. package/dest/contract_function_simulator/oracle/private_execution.js +7 -6
  132. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +62 -77
  133. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  134. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +215 -123
  135. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +186 -81
  136. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  137. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +662 -170
  138. package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
  139. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
  140. package/dest/contract_function_simulator/pick_notes.js +20 -3
  141. package/dest/contract_function_simulator/transient_array_service.d.ts +31 -0
  142. package/dest/contract_function_simulator/transient_array_service.d.ts.map +1 -0
  143. package/dest/contract_function_simulator/transient_array_service.js +62 -0
  144. package/dest/contract_logging.d.ts +9 -4
  145. package/dest/contract_logging.d.ts.map +1 -1
  146. package/dest/contract_logging.js +21 -6
  147. package/dest/debug/pxe_debug_utils.d.ts +4 -9
  148. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  149. package/dest/debug/pxe_debug_utils.js +0 -6
  150. package/dest/entrypoints/client/bundle/index.d.ts +2 -2
  151. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  152. package/dest/entrypoints/client/bundle/index.js +1 -1
  153. package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
  154. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  155. package/dest/entrypoints/client/bundle/utils.js +27 -8
  156. package/dest/entrypoints/client/lazy/index.d.ts +2 -2
  157. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  158. package/dest/entrypoints/client/lazy/index.js +1 -1
  159. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  160. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  161. package/dest/entrypoints/client/lazy/utils.js +27 -8
  162. package/dest/entrypoints/client/store.d.ts +14 -0
  163. package/dest/entrypoints/client/store.d.ts.map +1 -0
  164. package/dest/entrypoints/client/store.js +42 -0
  165. package/dest/entrypoints/pxe_creation_options.d.ts +16 -2
  166. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  167. package/dest/entrypoints/pxe_creation_options.js +3 -1
  168. package/dest/entrypoints/server/index.d.ts +7 -4
  169. package/dest/entrypoints/server/index.d.ts.map +1 -1
  170. package/dest/entrypoints/server/index.js +5 -3
  171. package/dest/entrypoints/server/store.d.ts +18 -0
  172. package/dest/entrypoints/server/store.d.ts.map +1 -0
  173. package/dest/entrypoints/server/store.js +28 -0
  174. package/dest/entrypoints/server/utils.d.ts +4 -3
  175. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  176. package/dest/entrypoints/server/utils.js +28 -8
  177. package/dest/error_enriching.d.ts +5 -3
  178. package/dest/error_enriching.d.ts.map +1 -1
  179. package/dest/error_enriching.js +13 -11
  180. package/dest/events/event_service.d.ts +21 -5
  181. package/dest/events/event_service.d.ts.map +1 -1
  182. package/dest/events/event_service.js +50 -17
  183. package/dest/events/private_event_filter_validator.d.ts +3 -2
  184. package/dest/events/private_event_filter_validator.d.ts.map +1 -1
  185. package/dest/events/private_event_filter_validator.js +15 -0
  186. package/dest/hooks/authorize_utility_call.d.ts +41 -0
  187. package/dest/hooks/authorize_utility_call.d.ts.map +1 -0
  188. package/dest/hooks/authorize_utility_call.js +4 -0
  189. package/dest/hooks/execution_hooks.d.ts +62 -0
  190. package/dest/hooks/execution_hooks.d.ts.map +1 -0
  191. package/dest/hooks/execution_hooks.js +9 -0
  192. package/dest/hooks/index.d.ts +5 -0
  193. package/dest/hooks/index.d.ts.map +1 -0
  194. package/dest/hooks/index.js +2 -0
  195. package/dest/hooks/resolve_custom_request.d.ts +23 -0
  196. package/dest/hooks/resolve_custom_request.d.ts.map +1 -0
  197. package/dest/hooks/resolve_custom_request.js +3 -0
  198. package/dest/hooks/resolve_tagging_secret_strategy.d.ts +50 -0
  199. package/dest/hooks/resolve_tagging_secret_strategy.d.ts.map +1 -0
  200. package/dest/hooks/resolve_tagging_secret_strategy.js +3 -0
  201. package/dest/logs/log_service.d.ts +21 -11
  202. package/dest/logs/log_service.d.ts.map +1 -1
  203. package/dest/logs/log_service.js +180 -82
  204. package/dest/messages/tx_resolver_service.d.ts +28 -0
  205. package/dest/messages/tx_resolver_service.d.ts.map +1 -0
  206. package/dest/messages/tx_resolver_service.js +61 -0
  207. package/dest/node/benchmarked_node.d.ts +20 -0
  208. package/dest/node/benchmarked_node.d.ts.map +1 -0
  209. package/dest/node/benchmarked_node.js +94 -0
  210. package/dest/node/caching_aztec_node.d.ts +24 -0
  211. package/dest/node/caching_aztec_node.d.ts.map +1 -0
  212. package/dest/node/caching_aztec_node.js +267 -0
  213. package/dest/notes/note_service.d.ts +34 -7
  214. package/dest/notes/note_service.d.ts.map +1 -1
  215. package/dest/notes/note_service.js +81 -57
  216. package/dest/notes_filter.d.ts +2 -3
  217. package/dest/notes_filter.d.ts.map +1 -1
  218. package/dest/oracle_version.d.ts +4 -3
  219. package/dest/oracle_version.d.ts.map +1 -1
  220. package/dest/oracle_version.js +20 -10
  221. package/dest/private_kernel/batch_planner.d.ts +47 -0
  222. package/dest/private_kernel/batch_planner.d.ts.map +1 -0
  223. package/dest/private_kernel/batch_planner.js +104 -0
  224. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
  225. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
  226. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +131 -66
  227. package/dest/private_kernel/hints/test_utils.d.ts +122 -0
  228. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
  229. package/dest/private_kernel/hints/test_utils.js +202 -0
  230. package/dest/private_kernel/private_kernel_execution_prover.d.ts +6 -2
  231. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  232. package/dest/private_kernel/private_kernel_execution_prover.js +208 -86
  233. package/dest/private_kernel/private_kernel_oracle.d.ts +12 -10
  234. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  235. package/dest/private_kernel/private_kernel_oracle.js +40 -26
  236. package/dest/pxe.d.ts +171 -55
  237. package/dest/pxe.d.ts.map +1 -1
  238. package/dest/pxe.js +385 -217
  239. package/dest/storage/allowed_scopes.d.ts +6 -0
  240. package/dest/storage/allowed_scopes.d.ts.map +1 -0
  241. package/dest/storage/allowed_scopes.js +7 -0
  242. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -6
  243. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
  244. package/dest/storage/anchor_block_store/anchor_block_store.js +9 -7
  245. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts +42 -0
  246. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts.map +1 -0
  247. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.js +93 -0
  248. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts +15 -0
  249. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts.map +1 -0
  250. package/dest/storage/backwards_compatibility_tests/schema_tests.js +671 -0
  251. package/dest/storage/backwards_compatibility_tests/store_spy.d.ts +19 -0
  252. package/dest/storage/backwards_compatibility_tests/store_spy.d.ts.map +1 -0
  253. package/dest/storage/backwards_compatibility_tests/store_spy.js +63 -0
  254. package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
  255. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  256. package/dest/storage/capsule_store/capsule_service.js +47 -0
  257. package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
  258. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  259. package/dest/storage/capsule_store/capsule_store.js +36 -28
  260. package/dest/storage/capsule_store/index.d.ts +2 -1
  261. package/dest/storage/capsule_store/index.d.ts.map +1 -1
  262. package/dest/storage/capsule_store/index.js +1 -0
  263. package/dest/storage/contract_store/contract_store.d.ts +27 -24
  264. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  265. package/dest/storage/contract_store/contract_store.js +71 -99
  266. package/dest/storage/fact_store/fact_service.d.ts +22 -0
  267. package/dest/storage/fact_store/fact_service.d.ts.map +1 -0
  268. package/dest/storage/fact_store/fact_service.js +45 -0
  269. package/dest/storage/fact_store/fact_store.d.ts +95 -0
  270. package/dest/storage/fact_store/fact_store.d.ts.map +1 -0
  271. package/dest/storage/fact_store/fact_store.js +408 -0
  272. package/dest/storage/fact_store/fact_store_keys.d.ts +34 -0
  273. package/dest/storage/fact_store/fact_store_keys.d.ts.map +1 -0
  274. package/dest/storage/fact_store/fact_store_keys.js +50 -0
  275. package/dest/storage/fact_store/index.d.ts +6 -0
  276. package/dest/storage/fact_store/index.d.ts.map +1 -0
  277. package/dest/storage/fact_store/index.js +4 -0
  278. package/dest/storage/fact_store/origin_state.d.ts +59 -0
  279. package/dest/storage/fact_store/origin_state.d.ts.map +1 -0
  280. package/dest/storage/fact_store/origin_state.js +60 -0
  281. package/dest/storage/fact_store/stored_fact.d.ts +32 -0
  282. package/dest/storage/fact_store/stored_fact.d.ts.map +1 -0
  283. package/dest/storage/fact_store/stored_fact.js +64 -0
  284. package/dest/storage/index.d.ts +3 -2
  285. package/dest/storage/index.d.ts.map +1 -1
  286. package/dest/storage/index.js +2 -1
  287. package/dest/storage/metadata.d.ts +2 -2
  288. package/dest/storage/metadata.d.ts.map +1 -1
  289. package/dest/storage/metadata.js +1 -1
  290. package/dest/storage/note_store/note_store.d.ts +42 -33
  291. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  292. package/dest/storage/note_store/note_store.js +199 -170
  293. package/dest/storage/note_store/stored_note.d.ts +3 -8
  294. package/dest/storage/note_store/stored_note.d.ts.map +1 -1
  295. package/dest/storage/note_store/stored_note.js +4 -20
  296. package/dest/storage/open_pxe_stores.d.ts +35 -0
  297. package/dest/storage/open_pxe_stores.d.ts.map +1 -0
  298. package/dest/storage/open_pxe_stores.js +29 -0
  299. package/dest/storage/private_event_store/private_event_store.d.ts +13 -16
  300. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  301. package/dest/storage/private_event_store/private_event_store.js +43 -43
  302. package/dest/storage/private_event_store/stored_private_event.js +1 -1
  303. package/dest/storage/store_identity.d.ts +35 -0
  304. package/dest/storage/store_identity.d.ts.map +1 -0
  305. package/dest/storage/store_identity.js +44 -0
  306. package/dest/storage/tagging_store/index.d.ts +2 -2
  307. package/dest/storage/tagging_store/index.d.ts.map +1 -1
  308. package/dest/storage/tagging_store/index.js +1 -1
  309. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
  310. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  311. package/dest/storage/tagging_store/sender_tagging_store.d.ts +63 -31
  312. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  313. package/dest/storage/tagging_store/sender_tagging_store.js +205 -127
  314. package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts +51 -0
  315. package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts.map +1 -0
  316. package/dest/storage/tagging_store/tagging_secret_sources_store.js +105 -0
  317. package/dest/tagging/constants.d.ts +11 -2
  318. package/dest/tagging/constants.d.ts.map +1 -1
  319. package/dest/tagging/constants.js +38 -10
  320. package/dest/tagging/get_all_logs_by_tags.d.ts +55 -10
  321. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
  322. package/dest/tagging/get_all_logs_by_tags.js +53 -35
  323. package/dest/tagging/index.d.ts +8 -7
  324. package/dest/tagging/index.d.ts.map +1 -1
  325. package/dest/tagging/index.js +6 -5
  326. package/dest/tagging/persist_sender_tagging_index_ranges.d.ts +29 -0
  327. package/dest/tagging/persist_sender_tagging_index_ranges.d.ts.map +1 -0
  328. package/dest/tagging/persist_sender_tagging_index_ranges.js +42 -0
  329. package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +74 -0
  330. package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts.map +1 -0
  331. package/dest/tagging/recipient_sync/sync_tagged_private_logs.js +234 -0
  332. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +3 -3
  333. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -1
  334. package/dest/tagging/reconcile_tagging_index_ranges.d.ts +36 -0
  335. package/dest/tagging/reconcile_tagging_index_ranges.d.ts.map +1 -0
  336. package/dest/tagging/reconcile_tagging_index_ranges.js +74 -0
  337. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +8 -6
  338. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  339. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +25 -19
  340. package/dest/tagging/sender_sync/utils/classify_pending_txs.d.ts +22 -0
  341. package/dest/tagging/sender_sync/utils/classify_pending_txs.d.ts.map +1 -0
  342. package/dest/tagging/sender_sync/utils/classify_pending_txs.js +61 -0
  343. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +17 -6
  344. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  345. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +44 -30
  346. package/dest/tagging/sender_sync/utils/resolve_pending_txs.d.ts +29 -0
  347. package/dest/tagging/sender_sync/utils/resolve_pending_txs.d.ts.map +1 -0
  348. package/dest/tagging/sender_sync/utils/resolve_pending_txs.js +41 -0
  349. package/dest/tagging/sender_sync/utils/test_utils.d.ts +16 -0
  350. package/dest/tagging/sender_sync/utils/test_utils.d.ts.map +1 -0
  351. package/dest/tagging/sender_sync/utils/test_utils.js +24 -0
  352. package/dest/tagging/testing/tag_query_test_utils.d.ts +6 -0
  353. package/dest/tagging/testing/tag_query_test_utils.d.ts.map +1 -0
  354. package/dest/tagging/testing/tag_query_test_utils.js +10 -0
  355. package/package.json +20 -17
  356. package/src/bin/check_oracle_version.ts +10 -143
  357. package/src/bin/index.ts +1 -0
  358. package/src/bin/oracle_version_helpers.ts +30 -0
  359. package/src/block_synchronizer/block_stream_source.ts +42 -0
  360. package/src/block_synchronizer/block_synchronizer.ts +86 -40
  361. package/src/config/index.ts +16 -9
  362. package/src/config/package_info.ts +1 -1
  363. package/src/contract/contract_class_service.ts +45 -0
  364. package/src/contract/contract_sync_service.ts +176 -0
  365. package/src/contract/helpers.ts +35 -0
  366. package/src/contract/skip_sync_contracts.ts +23 -0
  367. package/src/contract_function_simulator/anchored_contract_data.ts +74 -0
  368. package/src/contract_function_simulator/contract_function_simulator.ts +175 -85
  369. package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
  370. package/src/contract_function_simulator/execution_note_cache.ts +8 -29
  371. package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -18
  372. package/src/contract_function_simulator/index.ts +89 -4
  373. package/src/contract_function_simulator/noir-structs/bounded_vec.ts +43 -0
  374. package/src/contract_function_simulator/noir-structs/contract_class_log_data.ts +9 -0
  375. package/src/contract_function_simulator/noir-structs/embedded_curve_point.ts +4 -0
  376. package/src/contract_function_simulator/noir-structs/ephemeral_array.ts +66 -0
  377. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +10 -9
  378. package/src/contract_function_simulator/noir-structs/fact.ts +13 -0
  379. package/src/contract_function_simulator/noir-structs/fact_collection.ts +64 -0
  380. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +27 -20
  381. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +14 -64
  382. package/src/contract_function_simulator/noir-structs/note_data.ts +27 -0
  383. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +6 -11
  384. package/src/contract_function_simulator/noir-structs/option.ts +75 -0
  385. package/src/contract_function_simulator/noir-structs/origin_block.ts +8 -0
  386. package/src/contract_function_simulator/noir-structs/pending_tagged_log.ts +12 -0
  387. package/src/contract_function_simulator/noir-structs/provided_secret.ts +5 -0
  388. package/src/contract_function_simulator/noir-structs/resolved_tagging_strategy.ts +66 -0
  389. package/src/contract_function_simulator/noir-structs/resolved_tx.ts +19 -0
  390. package/src/contract_function_simulator/noir-structs/tx_effect_data.ts +16 -0
  391. package/src/contract_function_simulator/noir-structs/utility_context.ts +5 -17
  392. package/src/contract_function_simulator/oracle/acir_callback.ts +154 -0
  393. package/src/contract_function_simulator/oracle/index.ts +1 -15
  394. package/src/contract_function_simulator/oracle/interfaces.ts +11 -176
  395. package/src/contract_function_simulator/oracle/legacy_oracle_registry.ts +147 -0
  396. package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +6 -21
  397. package/src/contract_function_simulator/oracle/note_packing_utils.ts +3 -3
  398. package/src/contract_function_simulator/oracle/oracle_registry.ts +710 -0
  399. package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +1067 -0
  400. package/src/contract_function_simulator/oracle/private_execution.ts +6 -7
  401. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +264 -157
  402. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +969 -265
  403. package/src/contract_function_simulator/pick_notes.ts +22 -3
  404. package/src/contract_function_simulator/transient_array_service.ts +91 -0
  405. package/src/contract_logging.ts +18 -5
  406. package/src/debug/pxe_debug_utils.ts +4 -12
  407. package/src/entrypoints/client/bundle/index.ts +1 -1
  408. package/src/entrypoints/client/bundle/utils.ts +32 -8
  409. package/src/entrypoints/client/lazy/index.ts +1 -1
  410. package/src/entrypoints/client/lazy/utils.ts +32 -8
  411. package/src/entrypoints/client/store.ts +54 -0
  412. package/src/entrypoints/pxe_creation_options.ts +21 -1
  413. package/src/entrypoints/server/index.ts +7 -3
  414. package/src/entrypoints/server/store.ts +47 -0
  415. package/src/entrypoints/server/utils.ts +45 -14
  416. package/src/error_enriching.ts +27 -11
  417. package/src/events/event_service.ts +84 -26
  418. package/src/events/private_event_filter_validator.ts +21 -1
  419. package/src/hooks/authorize_utility_call.ts +44 -0
  420. package/src/hooks/execution_hooks.ts +68 -0
  421. package/src/hooks/index.ts +13 -0
  422. package/src/hooks/resolve_custom_request.ts +24 -0
  423. package/src/hooks/resolve_tagging_secret_strategy.ts +60 -0
  424. package/src/logs/log_service.ts +225 -145
  425. package/src/messages/tx_resolver_service.ts +80 -0
  426. package/src/node/benchmarked_node.ts +140 -0
  427. package/src/node/caching_aztec_node.ts +406 -0
  428. package/src/notes/note_service.ts +126 -86
  429. package/src/notes_filter.ts +1 -3
  430. package/src/oracle_version.ts +20 -10
  431. package/src/private_kernel/batch_planner.ts +168 -0
  432. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +169 -112
  433. package/src/private_kernel/hints/test_utils.ts +318 -0
  434. package/src/private_kernel/private_kernel_execution_prover.ts +340 -119
  435. package/src/private_kernel/private_kernel_oracle.ts +58 -29
  436. package/src/pxe.ts +602 -249
  437. package/src/storage/allowed_scopes.ts +14 -0
  438. package/src/storage/anchor_block_store/anchor_block_store.ts +9 -7
  439. package/src/storage/backwards_compatibility_tests/__snapshots__/AddressStore.json +22 -0
  440. package/src/storage/backwards_compatibility_tests/__snapshots__/AnchorBlockStore.json +3 -0
  441. package/src/storage/backwards_compatibility_tests/__snapshots__/CapsuleStore.json +16 -0
  442. package/src/storage/backwards_compatibility_tests/__snapshots__/ContractStore.json +28 -0
  443. package/src/storage/backwards_compatibility_tests/__snapshots__/FactStore.json +40 -0
  444. package/src/storage/backwards_compatibility_tests/__snapshots__/KeyStore.json +52 -0
  445. package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +40 -0
  446. package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +56 -0
  447. package/src/storage/backwards_compatibility_tests/__snapshots__/PrivateEventStore.json +44 -0
  448. package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +26 -0
  449. package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +30 -0
  450. package/src/storage/backwards_compatibility_tests/__snapshots__/TaggingSecretSourcesStore.json +30 -0
  451. package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +117 -0
  452. package/src/storage/backwards_compatibility_tests/kv_store_snapshot.ts +122 -0
  453. package/src/storage/backwards_compatibility_tests/schema_tests.ts +803 -0
  454. package/src/storage/backwards_compatibility_tests/store_spy.ts +73 -0
  455. package/src/storage/capsule_store/capsule_service.ts +85 -0
  456. package/src/storage/capsule_store/capsule_store.ts +44 -26
  457. package/src/storage/capsule_store/index.ts +1 -0
  458. package/src/storage/contract_store/contract_store.ts +98 -125
  459. package/src/storage/fact_store/fact_service.ts +69 -0
  460. package/src/storage/fact_store/fact_store.ts +487 -0
  461. package/src/storage/fact_store/fact_store_keys.ts +75 -0
  462. package/src/storage/fact_store/index.ts +15 -0
  463. package/src/storage/fact_store/origin_state.ts +84 -0
  464. package/src/storage/fact_store/stored_fact.ts +80 -0
  465. package/src/storage/index.ts +2 -1
  466. package/src/storage/metadata.ts +1 -1
  467. package/src/storage/note_store/note_store.ts +228 -192
  468. package/src/storage/note_store/stored_note.ts +5 -27
  469. package/src/storage/open_pxe_stores.ts +52 -0
  470. package/src/storage/private_event_store/private_event_store.ts +52 -54
  471. package/src/storage/private_event_store/stored_private_event.ts +1 -1
  472. package/src/storage/store_identity.ts +72 -0
  473. package/src/storage/tagging_store/index.ts +1 -1
  474. package/src/storage/tagging_store/recipient_tagging_store.ts +5 -9
  475. package/src/storage/tagging_store/sender_tagging_store.ts +275 -156
  476. package/src/storage/tagging_store/tagging_secret_sources_store.ts +138 -0
  477. package/src/tagging/constants.ts +42 -10
  478. package/src/tagging/get_all_logs_by_tags.ts +113 -49
  479. package/src/tagging/index.ts +12 -6
  480. package/src/tagging/persist_sender_tagging_index_ranges.ts +57 -0
  481. package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +355 -0
  482. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
  483. package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
  484. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +32 -22
  485. package/src/tagging/sender_sync/utils/classify_pending_txs.ts +91 -0
  486. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +53 -38
  487. package/src/tagging/sender_sync/utils/resolve_pending_txs.ts +64 -0
  488. package/src/tagging/sender_sync/utils/test_utils.ts +46 -0
  489. package/src/tagging/testing/tag_query_test_utils.ts +11 -0
  490. package/dest/access_scopes.d.ts +0 -9
  491. package/dest/access_scopes.d.ts.map +0 -1
  492. package/dest/access_scopes.js +0 -6
  493. package/dest/contract_function_simulator/benchmarked_node.d.ts +0 -9
  494. package/dest/contract_function_simulator/benchmarked_node.d.ts.map +0 -1
  495. package/dest/contract_function_simulator/benchmarked_node.js +0 -77
  496. package/dest/contract_function_simulator/oracle/oracle.d.ts +0 -60
  497. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +0 -1
  498. package/dest/contract_function_simulator/oracle/oracle.js +0 -368
  499. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +0 -6
  500. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +0 -1
  501. package/dest/contract_function_simulator/proxied_contract_data_source.js +0 -80
  502. package/dest/contract_sync/contract_sync_service.d.ts +0 -43
  503. package/dest/contract_sync/contract_sync_service.d.ts.map +0 -1
  504. package/dest/contract_sync/contract_sync_service.js +0 -97
  505. package/dest/contract_sync/helpers.d.ts +0 -29
  506. package/dest/contract_sync/helpers.d.ts.map +0 -1
  507. package/dest/contract_sync/helpers.js +0 -55
  508. package/dest/storage/tagging_store/sender_address_book_store.d.ts +0 -14
  509. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +0 -1
  510. package/dest/storage/tagging_store/sender_address_book_store.js +0 -36
  511. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +0 -14
  512. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +0 -1
  513. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +0 -99
  514. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +0 -14
  515. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +0 -1
  516. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +0 -33
  517. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +0 -11
  518. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +0 -1
  519. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +0 -29
  520. package/src/access_scopes.ts +0 -9
  521. package/src/contract_function_simulator/benchmarked_node.ts +0 -103
  522. package/src/contract_function_simulator/oracle/oracle.ts +0 -637
  523. package/src/contract_function_simulator/proxied_contract_data_source.ts +0 -83
  524. package/src/contract_sync/contract_sync_service.ts +0 -152
  525. package/src/contract_sync/helpers.ts +0 -98
  526. package/src/storage/tagging_store/sender_address_book_store.ts +0 -48
  527. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -140
  528. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -44
  529. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +0 -36
@@ -1,3 +1,4 @@
1
+ import { CircuitKind } from '@aztec/bb.js';
1
2
  import {
2
3
  AVM_EMITNOTEHASH_BASE_L2_GAS,
3
4
  AVM_EMITNULLIFIER_BASE_L2_GAS,
@@ -17,7 +18,9 @@ import {
17
18
  MAX_NULLIFIERS_PER_TX,
18
19
  MAX_NULLIFIER_READ_REQUESTS_PER_TX,
19
20
  MAX_PRIVATE_LOGS_PER_TX,
21
+ MAX_TX_LIFETIME,
20
22
  PRIVATE_TX_L2_GAS_OVERHEAD,
23
+ PUBLIC_DATA_WRITE_LENGTH,
21
24
  PUBLIC_TX_L2_GAS_OVERHEAD,
22
25
  TX_DA_GAS_OVERHEAD,
23
26
  } from '@aztec/constants';
@@ -41,7 +44,7 @@ import type { FunctionCall } from '@aztec/stdlib/abi';
41
44
  import { FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
42
45
  import type { AuthWitness } from '@aztec/stdlib/auth-witness';
43
46
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
44
- import type { BlockParameter } from '@aztec/stdlib/block';
47
+ import type { BlockParameter, L2TipsProvider } from '@aztec/stdlib/block';
45
48
  import { Gas } from '@aztec/stdlib/gas';
46
49
  import {
47
50
  computeNoteHashNonce,
@@ -75,10 +78,13 @@ import {
75
78
  import { PrivateLog } from '@aztec/stdlib/logs';
76
79
  import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
77
80
  import { ChonkProof } from '@aztec/stdlib/proofs';
81
+ import { MerkleTreeId } from '@aztec/stdlib/trees';
78
82
  import {
79
83
  BlockHeader,
80
84
  CallContext,
85
+ type ContractOverrides,
81
86
  HashedValues,
87
+ type OffchainEffect,
82
88
  PrivateExecutionResult,
83
89
  TxConstantData,
84
90
  TxExecutionRequest,
@@ -87,31 +93,33 @@ import {
87
93
  getFinalMinRevertibleSideEffectCounter,
88
94
  } from '@aztec/stdlib/tx';
89
95
 
90
- import type { AccessScopes } from '../access_scopes.js';
91
- import type { ContractSyncService } from '../contract_sync/contract_sync_service.js';
96
+ import type { ContractClassService } from '../contract/contract_class_service.js';
97
+ import type { ContractSyncService } from '../contract/contract_sync_service.js';
98
+ import type { ExecutionHooks } from '../hooks/index.js';
99
+ import type { TxResolverService } from '../messages/tx_resolver_service.js';
92
100
  import type { AddressStore } from '../storage/address_store/address_store.js';
101
+ import { CapsuleService } from '../storage/capsule_store/capsule_service.js';
93
102
  import type { CapsuleStore } from '../storage/capsule_store/capsule_store.js';
94
103
  import type { ContractStore } from '../storage/contract_store/contract_store.js';
104
+ import { FactService } from '../storage/fact_store/index.js';
105
+ import type { FactStore } from '../storage/fact_store/index.js';
95
106
  import type { NoteStore } from '../storage/note_store/note_store.js';
96
107
  import type { PrivateEventStore } from '../storage/private_event_store/private_event_store.js';
97
108
  import type { RecipientTaggingStore } from '../storage/tagging_store/recipient_tagging_store.js';
98
- import type { SenderAddressBookStore } from '../storage/tagging_store/sender_address_book_store.js';
99
109
  import type { SenderTaggingStore } from '../storage/tagging_store/sender_tagging_store.js';
100
- import type { BenchmarkedNode } from './benchmarked_node.js';
110
+ import type { TaggingSecretSourcesStore } from '../storage/tagging_store/tagging_secret_sources_store.js';
111
+ import { AnchoredContractData } from './anchored_contract_data.js';
101
112
  import { ExecutionNoteCache } from './execution_note_cache.js';
102
113
  import { ExecutionTaggingIndexCache } from './execution_tagging_index_cache.js';
103
114
  import { HashedValuesCache } from './hashed_values_cache.js';
104
- import { Oracle } from './oracle/oracle.js';
115
+ import { buildACIRCallback } from './oracle/acir_callback.js';
105
116
  import { executePrivateFunction } from './oracle/private_execution.js';
106
117
  import { PrivateExecutionOracle } from './oracle/private_execution_oracle.js';
107
118
  import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
119
+ import { TransientArrayService } from './transient_array_service.js';
108
120
 
109
121
  /** Options for ContractFunctionSimulator.run. */
110
122
  export type ContractSimulatorRunOpts = {
111
- /** The address of the contract (should match request.origin). */
112
- contractAddress: AztecAddress;
113
- /** The function selector of the entry point. */
114
- selector: FunctionSelector;
115
123
  /** The address calling the function. Can be replaced to simulate a call from another contract or account. */
116
124
  msgSender?: AztecAddress;
117
125
  /** The block header to use as base state for this run. */
@@ -119,7 +127,7 @@ export type ContractSimulatorRunOpts = {
119
127
  /** The address used as a tagging sender when emitting private logs. */
120
128
  senderForTags?: AztecAddress;
121
129
  /** The accounts whose notes we can access in this call. */
122
- scopes: AccessScopes;
130
+ scopes: AztecAddress[];
123
131
  /** The job ID for staged writes. */
124
132
  jobId: string;
125
133
  };
@@ -127,17 +135,24 @@ export type ContractSimulatorRunOpts = {
127
135
  /** Args for ContractFunctionSimulator constructor. */
128
136
  export type ContractFunctionSimulatorArgs = {
129
137
  contractStore: ContractStore;
138
+ contractClassService: ContractClassService;
139
+ /** Per-simulation contract overrides. */
140
+ overrides?: ContractOverrides;
130
141
  noteStore: NoteStore;
131
142
  keyStore: KeyStore;
132
143
  addressStore: AddressStore;
133
144
  aztecNode: AztecNode;
145
+ l2TipsStore: L2TipsProvider;
134
146
  senderTaggingStore: SenderTaggingStore;
135
147
  recipientTaggingStore: RecipientTaggingStore;
136
- senderAddressBookStore: SenderAddressBookStore;
148
+ taggingSecretSourcesStore: TaggingSecretSourcesStore;
137
149
  capsuleStore: CapsuleStore;
150
+ factStore: FactStore;
138
151
  privateEventStore: PrivateEventStore;
139
152
  simulator: CircuitSimulator;
140
153
  contractSyncService: ContractSyncService;
154
+ txResolver: TxResolverService;
155
+ hooks?: ExecutionHooks;
141
156
  };
142
157
 
143
158
  /**
@@ -146,31 +161,43 @@ export type ContractFunctionSimulatorArgs = {
146
161
  export class ContractFunctionSimulator {
147
162
  private readonly log: Logger;
148
163
  private readonly contractStore: ContractStore;
164
+ private readonly contractClassService: ContractClassService;
165
+ private readonly overrides: ContractOverrides | undefined;
149
166
  private readonly noteStore: NoteStore;
150
167
  private readonly keyStore: KeyStore;
151
168
  private readonly addressStore: AddressStore;
152
169
  private readonly aztecNode: AztecNode;
170
+ private readonly l2TipsStore: L2TipsProvider;
153
171
  private readonly senderTaggingStore: SenderTaggingStore;
154
172
  private readonly recipientTaggingStore: RecipientTaggingStore;
155
- private readonly senderAddressBookStore: SenderAddressBookStore;
173
+ private readonly taggingSecretSourcesStore: TaggingSecretSourcesStore;
156
174
  private readonly capsuleStore: CapsuleStore;
175
+ private readonly factStore: FactStore;
157
176
  private readonly privateEventStore: PrivateEventStore;
158
177
  private readonly simulator: CircuitSimulator;
159
178
  private readonly contractSyncService: ContractSyncService;
179
+ private readonly txResolver: TxResolverService;
180
+ private readonly hooks: ExecutionHooks | undefined;
160
181
 
161
182
  constructor(args: ContractFunctionSimulatorArgs) {
162
183
  this.contractStore = args.contractStore;
184
+ this.contractClassService = args.contractClassService;
185
+ this.overrides = args.overrides;
163
186
  this.noteStore = args.noteStore;
164
187
  this.keyStore = args.keyStore;
165
188
  this.addressStore = args.addressStore;
166
189
  this.aztecNode = args.aztecNode;
190
+ this.l2TipsStore = args.l2TipsStore;
167
191
  this.senderTaggingStore = args.senderTaggingStore;
168
192
  this.recipientTaggingStore = args.recipientTaggingStore;
169
- this.senderAddressBookStore = args.senderAddressBookStore;
193
+ this.taggingSecretSourcesStore = args.taggingSecretSourcesStore;
170
194
  this.capsuleStore = args.capsuleStore;
195
+ this.factStore = args.factStore;
171
196
  this.privateEventStore = args.privateEventStore;
172
197
  this.simulator = args.simulator;
173
198
  this.contractSyncService = args.contractSyncService;
199
+ this.txResolver = args.txResolver;
200
+ this.hooks = args.hooks;
174
201
  this.log = createLogger('simulator');
175
202
  }
176
203
 
@@ -181,9 +208,7 @@ export class ContractFunctionSimulator {
181
208
  public async run(
182
209
  request: TxExecutionRequest,
183
210
  {
184
- contractAddress,
185
- selector,
186
- msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE),
211
+ msgSender = AztecAddress.NULL_MSG_SENDER,
187
212
  anchorBlockHeader,
188
213
  senderForTags,
189
214
  scopes,
@@ -192,18 +217,30 @@ export class ContractFunctionSimulator {
192
217
  ): Promise<PrivateExecutionResult> {
193
218
  const simulatorSetupTimer = new Timer();
194
219
 
195
- const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(contractAddress, selector);
220
+ const contractAddress = request.origin;
196
221
 
197
- if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
198
- throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
199
- }
222
+ const anchoredContractData = new AnchoredContractData(
223
+ this.contractStore,
224
+ this.contractClassService,
225
+ anchorBlockHeader,
226
+ this.overrides,
227
+ );
200
228
 
201
- if (request.origin !== contractAddress) {
202
- this.log.warn(
203
- `Request origin does not match contract address in simulation. Request origin: ${request.origin}, contract address: ${contractAddress}`,
229
+ const entryPointArtifact = await anchoredContractData.getFunctionArtifactWithDebugMetadata(
230
+ contractAddress,
231
+ request.functionSelector,
232
+ );
233
+ if (!entryPointArtifact) {
234
+ throw new Error(
235
+ `Cannot run function ${request.functionSelector} on ${contractAddress}: the contract is not registered. ` +
236
+ `Register it via wallet.registerContract(...).`,
204
237
  );
205
238
  }
206
239
 
240
+ if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
241
+ throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
242
+ }
243
+
207
244
  // reserve the first side effect for the tx hash (inserted by the private kernel)
208
245
  const startSideEffectCounter = 2;
209
246
 
@@ -218,9 +255,15 @@ export class ContractFunctionSimulator {
218
255
  const noteCache = new ExecutionNoteCache(protocolNullifier);
219
256
  const taggingIndexCache = new ExecutionTaggingIndexCache();
220
257
 
258
+ // One shared transient store for the whole execution tree rooted at this transaction. Threaded into every child
259
+ // private oracle and inherited by nested utility frames, so that frames of the same contract see each other's
260
+ // transient arrays, then discarded when run() returns.
261
+ const transientArrayService = new TransientArrayService();
262
+
221
263
  const privateExecutionOracle = new PrivateExecutionOracle({
222
264
  argsHash: request.firstCallArgsHash,
223
265
  txContext: request.txContext,
266
+ txRequestSalt: request.salt,
224
267
  callContext,
225
268
  anchorBlockHeader,
226
269
  utilityExecutor: async (call, execScopes) => {
@@ -231,16 +274,18 @@ export class ContractFunctionSimulator {
231
274
  executionCache: HashedValuesCache.create(request.argsOfCalls),
232
275
  noteCache,
233
276
  taggingIndexCache,
234
- contractStore: this.contractStore,
277
+ anchoredContractData,
235
278
  noteStore: this.noteStore,
236
279
  keyStore: this.keyStore,
237
280
  addressStore: this.addressStore,
238
281
  aztecNode: this.aztecNode,
239
282
  senderTaggingStore: this.senderTaggingStore,
240
283
  recipientTaggingStore: this.recipientTaggingStore,
241
- senderAddressBookStore: this.senderAddressBookStore,
242
- capsuleStore: this.capsuleStore,
284
+ taggingSecretSourcesStore: this.taggingSecretSourcesStore,
285
+ capsuleService: new CapsuleService(this.capsuleStore, scopes),
286
+ factService: new FactService(this.factStore, scopes),
243
287
  privateEventStore: this.privateEventStore,
288
+ txResolver: this.txResolver,
244
289
  contractSyncService: this.contractSyncService,
245
290
  jobId,
246
291
  totalPublicCalldataCount: 0,
@@ -248,6 +293,9 @@ export class ContractFunctionSimulator {
248
293
  scopes,
249
294
  senderForTags,
250
295
  simulator: this.simulator,
296
+ l2TipsStore: this.l2TipsStore,
297
+ hooks: this.hooks,
298
+ transientArrayService,
251
299
  });
252
300
 
253
301
  const setupTime = simulatorSetupTimer.ms();
@@ -266,7 +314,6 @@ export class ContractFunctionSimulator {
266
314
  );
267
315
  const simulatorTeardownTimer = new Timer();
268
316
 
269
- noteCache.finish();
270
317
  const firstNullifierHint = noteCache.getNonceGenerator();
271
318
 
272
319
  const publicCallRequests = collectNested([executionResult], r =>
@@ -277,7 +324,7 @@ export class ContractFunctionSimulator {
277
324
  );
278
325
  const publicFunctionsCalldata = await Promise.all(
279
326
  publicCallRequests.map(async r => {
280
- const calldata = await privateExecutionOracle.privateLoadFromExecutionCache(r.calldataHash);
327
+ const calldata = await privateExecutionOracle.getHashPreimage(r.calldataHash);
281
328
  return new HashedValues(calldata, r.calldataHash);
282
329
  }),
283
330
  );
@@ -298,45 +345,71 @@ export class ContractFunctionSimulator {
298
345
  }
299
346
  }
300
347
 
301
- // docs:start:execute_utility_function
302
348
  /**
303
349
  * Runs a utility function.
304
350
  * @param call - The function call to execute.
305
- * @param authwits - Authentication witnesses required for the function call.
306
- * @param anchorBlockHeader - The block header to use as base state for this run.
307
- * @param scopes - Optional array of account addresses whose notes can be accessed in this call. Defaults to all
308
- * accounts if not specified.
309
351
  * @returns A return value of the utility function in a form as returned by the simulator (Noir fields)
310
352
  */
311
353
  public async runUtility(
312
354
  call: FunctionCall,
313
355
  authwits: AuthWitness[],
314
356
  anchorBlockHeader: BlockHeader,
315
- scopes: AccessScopes,
357
+ scopes: AztecAddress[],
316
358
  jobId: string,
317
- ): Promise<Fr[]> {
318
- const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
359
+ ): Promise<{ result: Fr[]; offchainEffects: OffchainEffect[] }> {
360
+ const anchoredContractData = new AnchoredContractData(
361
+ this.contractStore,
362
+ this.contractClassService,
363
+ anchorBlockHeader,
364
+ this.overrides,
365
+ );
366
+
367
+ const entryPointArtifact = await anchoredContractData.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
368
+ if (!entryPointArtifact) {
369
+ throw new Error(
370
+ `Cannot run function ${call.selector} on ${call.to}: the contract is not registered. ` +
371
+ `Register it via wallet.registerContract(...).`,
372
+ );
373
+ }
319
374
 
320
375
  if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
321
376
  throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
322
377
  }
323
378
 
379
+ const utilityExecutor = async (syncCall: FunctionCall, execScopes: AztecAddress[]) => {
380
+ await this.runUtility(syncCall, [], anchorBlockHeader, execScopes, jobId);
381
+ };
382
+
324
383
  const oracle = new UtilityExecutionOracle({
325
- contractAddress: call.to,
384
+ callContext: CallContext.from({
385
+ msgSender: AztecAddress.NULL_MSG_SENDER,
386
+ contractAddress: call.to,
387
+ functionSelector: call.selector,
388
+ isStaticCall: true,
389
+ }),
326
390
  authWitnesses: authwits,
327
391
  capsules: [],
328
392
  anchorBlockHeader,
329
- contractStore: this.contractStore,
393
+ anchoredContractData,
330
394
  noteStore: this.noteStore,
331
395
  keyStore: this.keyStore,
332
396
  addressStore: this.addressStore,
333
397
  aztecNode: this.aztecNode,
334
398
  recipientTaggingStore: this.recipientTaggingStore,
335
- senderAddressBookStore: this.senderAddressBookStore,
336
- capsuleStore: this.capsuleStore,
399
+ taggingSecretSourcesStore: this.taggingSecretSourcesStore,
400
+ capsuleService: new CapsuleService(this.capsuleStore, scopes),
401
+ factService: new FactService(this.factStore, scopes),
337
402
  privateEventStore: this.privateEventStore,
403
+ txResolver: this.txResolver,
404
+ contractSyncService: this.contractSyncService,
405
+ l2TipsStore: this.l2TipsStore,
338
406
  jobId,
339
407
  scopes,
408
+ simulator: this.simulator,
409
+ hooks: this.hooks,
410
+ utilityExecutor,
411
+ // Execution-tree root (top-level utility run or contract sync): own store; nested frames inherit it.
412
+ transientArrayService: new TransientArrayService(),
340
413
  });
341
414
 
342
415
  try {
@@ -347,7 +420,7 @@ export class ContractFunctionSimulator {
347
420
 
348
421
  const initialWitness = toACVMWitness(0, call.args);
349
422
  const acirExecutionResult = await this.simulator
350
- .executeUserCircuit(initialWitness, entryPointArtifact, new Oracle(oracle).toACIRCallback())
423
+ .executeUserCircuit(initialWitness, entryPointArtifact, buildACIRCallback(oracle))
351
424
  .catch((err: Error) => {
352
425
  err.message = resolveAssertionMessageFromError(err, entryPointArtifact);
353
426
  throw new ExecutionError(
@@ -362,28 +435,14 @@ export class ContractFunctionSimulator {
362
435
  });
363
436
 
364
437
  this.log.verbose(`Utility execution for ${call.to}.${call.selector} completed`);
365
- return witnessMapToFields(acirExecutionResult.returnWitness);
438
+ return {
439
+ result: witnessMapToFields(acirExecutionResult.returnWitness),
440
+ offchainEffects: oracle.getOffchainEffects(),
441
+ };
366
442
  } catch (err) {
367
443
  throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
368
444
  }
369
445
  }
370
- // docs:end:execute_utility_function
371
-
372
- /**
373
- * Returns the execution statistics collected during the simulator run.
374
- * @returns The execution statistics.
375
- */
376
- getStats() {
377
- const nodeRPCCalls =
378
- typeof (this.aztecNode as BenchmarkedNode).getStats === 'function'
379
- ? (this.aztecNode as BenchmarkedNode).getStats()
380
- : {
381
- perMethod: {},
382
- roundTrips: { roundTrips: 0, totalBlockingTime: 0, roundTripDurations: [], roundTripMethods: [] },
383
- };
384
-
385
- return { nodeRPCCalls };
386
- }
387
446
  }
388
447
 
389
448
  class OrderedSideEffect<T> {
@@ -432,14 +491,34 @@ export async function generateSimulatedProvingResult(
432
491
 
433
492
  let publicTeardownCallRequest;
434
493
 
494
+ // We set expiration timestamp to anchor_block_timestamp + MAX_TX_LIFETIME (24h) just like kernels do
495
+ let expirationTimestamp =
496
+ privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader.globalVariables.timestamp +
497
+ BigInt(MAX_TX_LIFETIME);
498
+
499
+ let feePayer = AztecAddress.zero();
500
+
435
501
  const executions = [privateExecutionResult.entrypoint];
436
502
 
437
503
  while (executions.length !== 0) {
438
504
  const execution = executions.shift()!;
439
505
  executions.unshift(...execution!.nestedExecutionResults);
440
506
 
507
+ // Just like kernels we overwrite the default value if the call sets it.
508
+ const callExpirationTimestamp = execution.publicInputs.expirationTimestamp;
509
+ if (callExpirationTimestamp !== 0n && callExpirationTimestamp < expirationTimestamp) {
510
+ expirationTimestamp = callExpirationTimestamp;
511
+ }
512
+
441
513
  const { contractAddress } = execution.publicInputs.callContext;
442
514
 
515
+ if (execution.publicInputs.isFeePayer) {
516
+ if (!feePayer.isZero()) {
517
+ throw new Error('Multiple fee payers found in private execution result');
518
+ }
519
+ feePayer = contractAddress;
520
+ }
521
+
443
522
  scopedNoteHashes.push(
444
523
  ...execution.publicInputs.noteHashes
445
524
  .getActiveItems()
@@ -492,6 +571,7 @@ export async function generateSimulatedProvingResult(
492
571
  execution.publicInputs.callContext.functionSelector,
493
572
  ),
494
573
  timings: execution.profileResult?.timings ?? { witgen: 0, oracles: {} },
574
+ kind: CircuitKind.App,
495
575
  bytecode: execution.acir,
496
576
  vk: execution.vk,
497
577
  witness: execution.partialWitness,
@@ -560,12 +640,12 @@ export async function generateSimulatedProvingResult(
560
640
  siloedNullifiers,
561
641
  minRevertibleSideEffectCounter,
562
642
  );
643
+ // The protocol nullifier is the nonce generator and the tx's first nullifier. It is injected by the
644
+ // init kernel (at counter 1, index 0) rather than emitted by any private call, so it is absent from
645
+ // the executed nullifiers above. Mirror the kernel here by prepending it as the first non-revertible
646
+ // nullifier.
563
647
  const nonceGenerator = privateExecutionResult.firstNullifier;
564
- if (nonRevertibleNullifiers.length === 0) {
565
- nonRevertibleNullifiers.push(nonceGenerator);
566
- } else if (!nonRevertibleNullifiers[0].equals(nonceGenerator)) {
567
- throw new Error('The first non revertible nullifier should be equal to the nonce generator. This is a bug!');
568
- }
648
+ nonRevertibleNullifiers.unshift(nonceGenerator);
569
649
 
570
650
  if (isPrivateOnlyTx) {
571
651
  // We must make the note hashes unique by using the
@@ -660,8 +740,8 @@ export async function generateSimulatedProvingResult(
660
740
  daGas: TX_DA_GAS_OVERHEAD,
661
741
  }),
662
742
  ),
663
- /*feePayer=*/ AztecAddress.zero(),
664
- /*expirationTimestamp=*/ 0n,
743
+ /*feePayer=*/ feePayer,
744
+ /*expirationTimestamp=*/ expirationTimestamp,
665
745
  hasPublicCalls ? inputsForPublic : undefined,
666
746
  !hasPublicCalls ? inputsForRollup : undefined,
667
747
  );
@@ -689,6 +769,7 @@ function squashTransientSideEffects(
689
769
  scopedNullifiersCLA,
690
770
  /*futureNoteHashReads=*/ [],
691
771
  /*futureNullifierReads=*/ [],
772
+ /*futureLogs=*/ [],
692
773
  noteHashNullifierCounterMap,
693
774
  minRevertibleSideEffectCounter,
694
775
  );
@@ -715,7 +796,7 @@ function squashTransientSideEffects(
715
796
  * at the tx's anchor block, mimicking the behavior of the kernels
716
797
  */
717
798
  async function verifyReadRequests(
718
- node: Pick<AztecNode, 'getNoteHashMembershipWitness' | 'getNullifierMembershipWitness'>,
799
+ node: Pick<AztecNode, 'findLeavesIndexes'>,
719
800
  anchorBlockHash: BlockParameter,
720
801
  noteHashReadRequests: ScopedReadRequest[],
721
802
  nullifierReadRequests: ScopedReadRequest[],
@@ -731,16 +812,8 @@ async function verifyReadRequests(
731
812
  nullifierReadRequests.length,
732
813
  );
733
814
 
734
- const noteHashResetActions = getNoteHashReadRequestResetActions(
735
- noteHashReadRequestsCLA,
736
- scopedNoteHashesCLA,
737
- /*futureNoteHashes=*/ [],
738
- );
739
- const nullifierResetActions = getNullifierReadRequestResetActions(
740
- nullifierReadRequestsCLA,
741
- scopedNullifiersCLA,
742
- /*futureNullifiers=*/ [],
743
- );
815
+ const noteHashResetActions = getNoteHashReadRequestResetActions(noteHashReadRequestsCLA, scopedNoteHashesCLA);
816
+ const nullifierResetActions = getNullifierReadRequestResetActions(nullifierReadRequestsCLA, scopedNullifiersCLA);
744
817
 
745
818
  const settledNoteHashReads: { index: number; value: Fr }[] = [];
746
819
  for (let i = 0; i < noteHashResetActions.actions.length; i++) {
@@ -756,13 +829,25 @@ async function verifyReadRequests(
756
829
  }
757
830
  }
758
831
 
759
- const [noteHashWitnesses, nullifierWitnesses] = await Promise.all([
760
- Promise.all(settledNoteHashReads.map(({ value }) => node.getNoteHashMembershipWitness(anchorBlockHash, value))),
761
- Promise.all(settledNullifierReads.map(({ value }) => node.getNullifierMembershipWitness(anchorBlockHash, value))),
832
+ const [noteHashResults, nullifierResults] = await Promise.all([
833
+ settledNoteHashReads.length > 0
834
+ ? node.findLeavesIndexes(
835
+ anchorBlockHash,
836
+ MerkleTreeId.NOTE_HASH_TREE,
837
+ settledNoteHashReads.map(({ value }) => value),
838
+ )
839
+ : [],
840
+ settledNullifierReads.length > 0
841
+ ? node.findLeavesIndexes(
842
+ anchorBlockHash,
843
+ MerkleTreeId.NULLIFIER_TREE,
844
+ settledNullifierReads.map(({ value }) => value),
845
+ )
846
+ : [],
762
847
  ]);
763
848
 
764
849
  for (let i = 0; i < settledNoteHashReads.length; i++) {
765
- if (!noteHashWitnesses[i]) {
850
+ if (!noteHashResults[i]) {
766
851
  throw new Error(
767
852
  `Note hash read request at index ${settledNoteHashReads[i].index} is reading an unknown note hash: ${settledNoteHashReads[i].value}`,
768
853
  );
@@ -770,7 +855,7 @@ async function verifyReadRequests(
770
855
  }
771
856
 
772
857
  for (let i = 0; i < settledNullifierReads.length; i++) {
773
- if (!nullifierWitnesses[i]) {
858
+ if (!nullifierResults[i]) {
774
859
  throw new Error(
775
860
  `Nullifier read request at index ${settledNullifierReads[i].index} is reading an unknown nullifier: ${settledNullifierReads[i].value}`,
776
861
  );
@@ -816,13 +901,18 @@ function meterGasUsed(data: PrivateToRollupAccumulatedData | PrivateToPublicAccu
816
901
  meteredL2Gas += numPrivatelogs * L2_GAS_PER_PRIVATE_LOG;
817
902
 
818
903
  const numContractClassLogs = arrayNonEmptyLength(data.contractClassLogsHashes, log => log.isEmpty());
819
- // Every contract class log emits its length and contract address as additional fields
904
+ // Every contract class log emits its contract address as an additional field
820
905
  meteredDAFields += data.contractClassLogsHashes.reduce(
821
- (acc, log) => (!log.isEmpty() ? acc + log.logHash.length + 2 : acc),
906
+ (acc, log) => (!log.isEmpty() ? acc + log.logHash.length + 1 : acc),
822
907
  0,
823
908
  );
824
909
  meteredL2Gas += numContractClassLogs * L2_GAS_PER_CONTRACT_CLASS_LOG;
825
910
 
911
+ if (isPrivateOnlyTx) {
912
+ // The public data write that the private tx base rollup always performs to update the fee payer's balance.
913
+ meteredDAFields += PUBLIC_DATA_WRITE_LENGTH;
914
+ }
915
+
826
916
  const meteredDAGas = meteredDAFields * DA_GAS_PER_FIELD;
827
917
 
828
918
  if ((data as PrivateToPublicAccumulatedData).publicCallRequests) {
@@ -0,0 +1,110 @@
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+
3
+ /** In-memory store for ephemeral arrays scoped to a single contract call frame. */
4
+ export class EphemeralArrayService {
5
+ /**
6
+ * Maps a slot to the elements of the array stored at that slot. Each element is a serialized representation of
7
+ * the original type.
8
+ */
9
+ #arrays: Map<string, Fr[][]> = new Map();
10
+
11
+ /** Returns all elements in the array, or an empty array if uninitialized. */
12
+ readArrayAt(slot: Fr): Fr[][] {
13
+ return this.#arrays.get(slot.toString()) ?? [];
14
+ }
15
+
16
+ #setArray(slot: Fr, array: Fr[][]): void {
17
+ this.#arrays.set(slot.toString(), array);
18
+ }
19
+
20
+ /** Returns the number of elements in the array at the given slot. */
21
+ len(slot: Fr): number {
22
+ return this.readArrayAt(slot).length;
23
+ }
24
+
25
+ /** Appends an element to the array and returns the new length. */
26
+ push(slot: Fr, elements: Fr[]): number {
27
+ const array = this.readArrayAt(slot);
28
+ array.push(elements);
29
+ this.#setArray(slot, array);
30
+ return array.length;
31
+ }
32
+
33
+ /** Removes and returns the last element. Throws if empty. */
34
+ pop(slot: Fr): Fr[] {
35
+ const array = this.readArrayAt(slot);
36
+ if (array.length === 0) {
37
+ throw new Error(`Ephemeral array at slot ${slot} is empty`);
38
+ }
39
+ const element = array.pop()!;
40
+ this.#setArray(slot, array);
41
+ return element;
42
+ }
43
+
44
+ /** Returns the element at the given index. Throws if out of bounds. */
45
+ get(slot: Fr, index: number): Fr[] {
46
+ const array = this.readArrayAt(slot);
47
+ if (index < 0 || index >= array.length) {
48
+ throw new Error(
49
+ `Ephemeral array index ${index} out of bounds for array of length ${array.length} at slot ${slot}`,
50
+ );
51
+ }
52
+ return array[index];
53
+ }
54
+
55
+ /** Overwrites the element at the given index. Throws if out of bounds. */
56
+ set(slot: Fr, index: number, value: Fr[]): void {
57
+ const array = this.readArrayAt(slot);
58
+ if (index < 0 || index >= array.length) {
59
+ throw new Error(
60
+ `Ephemeral array index ${index} out of bounds for array of length ${array.length} at slot ${slot}`,
61
+ );
62
+ }
63
+ array[index] = value;
64
+ }
65
+
66
+ /** Removes the element at the given index, shifting subsequent elements backward. Throws if out of bounds. */
67
+ remove(slot: Fr, index: number): void {
68
+ const array = this.readArrayAt(slot);
69
+ if (index < 0 || index >= array.length) {
70
+ throw new Error(
71
+ `Ephemeral array index ${index} out of bounds for array of length ${array.length} at slot ${slot}`,
72
+ );
73
+ }
74
+ array.splice(index, 1);
75
+ }
76
+
77
+ /** Removes all elements from the array. */
78
+ clear(slot: Fr): void {
79
+ this.#arrays.delete(slot.toString());
80
+ }
81
+
82
+ /** Allocates a fresh, unused slot for a new ephemeral array. */
83
+ allocateSlot(): Fr {
84
+ let slot: Fr;
85
+ do {
86
+ slot = Fr.random();
87
+ } while (this.#arrays.has(slot.toString()));
88
+ return slot;
89
+ }
90
+
91
+ /** Creates a new ephemeral array pre-populated with the given elements and returns its slot. */
92
+ newArray(elements: Fr[][]): Fr {
93
+ const slot = this.allocateSlot();
94
+ this.#setArray(slot, elements);
95
+ return slot;
96
+ }
97
+
98
+ /** Copies `count` elements from the source array to the destination array (overwrites destination). */
99
+ copy(srcSlot: Fr, dstSlot: Fr, count: number): void {
100
+ const srcArray = this.readArrayAt(srcSlot);
101
+ if (count > srcArray.length) {
102
+ throw new Error(
103
+ `Cannot copy ${count} elements from ephemeral array of length ${srcArray.length} at slot ${srcSlot}`,
104
+ );
105
+ }
106
+ // Deep copy the elements to avoid aliasing
107
+ const copied = srcArray.slice(0, count).map(el => [...el]);
108
+ this.#setArray(dstSlot, copied);
109
+ }
110
+ }