@aztec/pxe 0.0.1-commit.f2ce05ee → 0.0.1-commit.f5a9928

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 (544) hide show
  1. package/dest/bin/check_oracle_version.js +41 -112
  2. package/dest/bin/index.d.ts +2 -0
  3. package/dest/bin/index.d.ts.map +1 -0
  4. package/dest/bin/index.js +1 -0
  5. package/dest/bin/oracle_version_helpers.d.ts +34 -0
  6. package/dest/bin/oracle_version_helpers.d.ts.map +1 -0
  7. package/dest/bin/oracle_version_helpers.js +46 -0
  8. package/dest/block_synchronizer/block_stream_source.d.ts +10 -0
  9. package/dest/block_synchronizer/block_stream_source.d.ts.map +1 -0
  10. package/dest/block_synchronizer/block_stream_source.js +37 -0
  11. package/dest/block_synchronizer/block_synchronizer.d.ts +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 +119 -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 +72 -43
  34. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  35. package/dest/contract_function_simulator/contract_function_simulator.js +266 -114
  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 +10 -29
  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 +1243 -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 +82 -98
  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 +263 -117
  135. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +206 -83
  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 +688 -188
  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 +27 -0
  145. package/dest/contract_logging.d.ts.map +1 -0
  146. package/dest/contract_logging.js +38 -0
  147. package/dest/debug/pxe_debug_utils.d.ts +5 -9
  148. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  149. package/dest/debug/pxe_debug_utils.js +4 -10
  150. package/dest/entrypoints/client/bundle/index.d.ts +4 -1
  151. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  152. package/dest/entrypoints/client/bundle/index.js +3 -0
  153. package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
  154. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  155. package/dest/entrypoints/client/bundle/utils.js +29 -8
  156. package/dest/entrypoints/client/lazy/index.d.ts +4 -1
  157. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  158. package/dest/entrypoints/client/lazy/index.js +3 -0
  159. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  160. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  161. package/dest/entrypoints/client/lazy/utils.js +29 -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 +8 -3
  169. package/dest/entrypoints/server/index.d.ts.map +1 -1
  170. package/dest/entrypoints/server/index.js +6 -2
  171. package/dest/entrypoints/server/store.d.ts +18 -0
  172. package/dest/entrypoints/server/store.d.ts.map +1 -0
  173. package/dest/entrypoints/server/store.js +28 -0
  174. package/dest/entrypoints/server/utils.d.ts +4 -3
  175. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  176. package/dest/entrypoints/server/utils.js +30 -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 +15 -12
  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 +51 -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 -10
  202. package/dest/logs/log_service.d.ts.map +1 -1
  203. package/dest/logs/log_service.js +184 -90
  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 +62 -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 +268 -0
  213. package/dest/notes/note_service.d.ts +34 -6
  214. package/dest/notes/note_service.d.ts.map +1 -1
  215. package/dest/notes/note_service.js +85 -59
  216. package/dest/notes_filter.d.ts +24 -0
  217. package/dest/notes_filter.d.ts.map +1 -0
  218. package/dest/notes_filter.js +4 -0
  219. package/dest/oracle_version.d.ts +4 -3
  220. package/dest/oracle_version.d.ts.map +1 -1
  221. package/dest/oracle_version.js +20 -10
  222. package/dest/private_kernel/batch_planner.d.ts +47 -0
  223. package/dest/private_kernel/batch_planner.d.ts.map +1 -0
  224. package/dest/private_kernel/batch_planner.js +104 -0
  225. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
  226. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
  227. package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
  228. package/dest/private_kernel/hints/index.d.ts +1 -1
  229. package/dest/private_kernel/hints/index.js +1 -1
  230. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
  231. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
  232. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +138 -72
  233. package/dest/private_kernel/hints/test_utils.d.ts +122 -0
  234. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
  235. package/dest/private_kernel/hints/test_utils.js +202 -0
  236. package/dest/private_kernel/private_kernel_execution_prover.d.ts +6 -2
  237. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  238. package/dest/private_kernel/private_kernel_execution_prover.js +165 -82
  239. package/dest/private_kernel/private_kernel_oracle.d.ts +17 -11
  240. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  241. package/dest/private_kernel/private_kernel_oracle.js +47 -29
  242. package/dest/pxe.d.ts +219 -68
  243. package/dest/pxe.d.ts.map +1 -1
  244. package/dest/pxe.js +423 -243
  245. package/dest/storage/address_store/address_store.d.ts +1 -1
  246. package/dest/storage/address_store/address_store.d.ts.map +1 -1
  247. package/dest/storage/address_store/address_store.js +2 -1
  248. package/dest/storage/allowed_scopes.d.ts +6 -0
  249. package/dest/storage/allowed_scopes.d.ts.map +1 -0
  250. package/dest/storage/allowed_scopes.js +7 -0
  251. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -6
  252. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
  253. package/dest/storage/anchor_block_store/anchor_block_store.js +9 -7
  254. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts +42 -0
  255. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts.map +1 -0
  256. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.js +93 -0
  257. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts +15 -0
  258. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts.map +1 -0
  259. package/dest/storage/backwards_compatibility_tests/schema_tests.js +671 -0
  260. package/dest/storage/backwards_compatibility_tests/store_spy.d.ts +19 -0
  261. package/dest/storage/backwards_compatibility_tests/store_spy.d.ts.map +1 -0
  262. package/dest/storage/backwards_compatibility_tests/store_spy.js +63 -0
  263. package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
  264. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  265. package/dest/storage/capsule_store/capsule_service.js +47 -0
  266. package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
  267. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  268. package/dest/storage/capsule_store/capsule_store.js +37 -29
  269. package/dest/storage/capsule_store/index.d.ts +2 -1
  270. package/dest/storage/capsule_store/index.d.ts.map +1 -1
  271. package/dest/storage/capsule_store/index.js +1 -0
  272. package/dest/storage/contract_store/contract_store.d.ts +63 -33
  273. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  274. package/dest/storage/contract_store/contract_store.js +179 -130
  275. package/dest/storage/contract_store/private_functions_tree.d.ts +1 -1
  276. package/dest/storage/contract_store/private_functions_tree.d.ts.map +1 -1
  277. package/dest/storage/contract_store/private_functions_tree.js +2 -1
  278. package/dest/storage/fact_store/fact_service.d.ts +22 -0
  279. package/dest/storage/fact_store/fact_service.d.ts.map +1 -0
  280. package/dest/storage/fact_store/fact_service.js +45 -0
  281. package/dest/storage/fact_store/fact_store.d.ts +95 -0
  282. package/dest/storage/fact_store/fact_store.d.ts.map +1 -0
  283. package/dest/storage/fact_store/fact_store.js +411 -0
  284. package/dest/storage/fact_store/fact_store_keys.d.ts +34 -0
  285. package/dest/storage/fact_store/fact_store_keys.d.ts.map +1 -0
  286. package/dest/storage/fact_store/fact_store_keys.js +50 -0
  287. package/dest/storage/fact_store/index.d.ts +6 -0
  288. package/dest/storage/fact_store/index.d.ts.map +1 -0
  289. package/dest/storage/fact_store/index.js +4 -0
  290. package/dest/storage/fact_store/origin_state.d.ts +59 -0
  291. package/dest/storage/fact_store/origin_state.d.ts.map +1 -0
  292. package/dest/storage/fact_store/origin_state.js +60 -0
  293. package/dest/storage/fact_store/stored_fact.d.ts +32 -0
  294. package/dest/storage/fact_store/stored_fact.d.ts.map +1 -0
  295. package/dest/storage/fact_store/stored_fact.js +64 -0
  296. package/dest/storage/index.d.ts +3 -2
  297. package/dest/storage/index.d.ts.map +1 -1
  298. package/dest/storage/index.js +2 -1
  299. package/dest/storage/metadata.d.ts +2 -2
  300. package/dest/storage/metadata.d.ts.map +1 -1
  301. package/dest/storage/metadata.js +1 -1
  302. package/dest/storage/note_store/note_store.d.ts +44 -35
  303. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  304. package/dest/storage/note_store/note_store.js +203 -174
  305. package/dest/storage/note_store/stored_note.d.ts +3 -8
  306. package/dest/storage/note_store/stored_note.d.ts.map +1 -1
  307. package/dest/storage/note_store/stored_note.js +4 -20
  308. package/dest/storage/open_pxe_stores.d.ts +35 -0
  309. package/dest/storage/open_pxe_stores.d.ts.map +1 -0
  310. package/dest/storage/open_pxe_stores.js +29 -0
  311. package/dest/storage/private_event_store/private_event_store.d.ts +13 -16
  312. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  313. package/dest/storage/private_event_store/private_event_store.js +48 -45
  314. package/dest/storage/private_event_store/stored_private_event.js +1 -1
  315. package/dest/storage/store_identity.d.ts +35 -0
  316. package/dest/storage/store_identity.d.ts.map +1 -0
  317. package/dest/storage/store_identity.js +44 -0
  318. package/dest/storage/tagging_store/index.d.ts +2 -2
  319. package/dest/storage/tagging_store/index.d.ts.map +1 -1
  320. package/dest/storage/tagging_store/index.js +1 -1
  321. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
  322. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  323. package/dest/storage/tagging_store/sender_tagging_store.d.ts +63 -31
  324. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  325. package/dest/storage/tagging_store/sender_tagging_store.js +210 -129
  326. package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts +51 -0
  327. package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts.map +1 -0
  328. package/dest/storage/tagging_store/tagging_secret_sources_store.js +105 -0
  329. package/dest/tagging/constants.d.ts +11 -2
  330. package/dest/tagging/constants.d.ts.map +1 -1
  331. package/dest/tagging/constants.js +38 -10
  332. package/dest/tagging/get_all_logs_by_tags.d.ts +55 -10
  333. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
  334. package/dest/tagging/get_all_logs_by_tags.js +65 -32
  335. package/dest/tagging/index.d.ts +8 -7
  336. package/dest/tagging/index.d.ts.map +1 -1
  337. package/dest/tagging/index.js +6 -5
  338. package/dest/tagging/persist_sender_tagging_index_ranges.d.ts +29 -0
  339. package/dest/tagging/persist_sender_tagging_index_ranges.d.ts.map +1 -0
  340. package/dest/tagging/persist_sender_tagging_index_ranges.js +42 -0
  341. package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +74 -0
  342. package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts.map +1 -0
  343. package/dest/tagging/recipient_sync/sync_tagged_private_logs.js +235 -0
  344. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +3 -3
  345. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -1
  346. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
  347. package/dest/tagging/reconcile_tagging_index_ranges.d.ts +36 -0
  348. package/dest/tagging/reconcile_tagging_index_ranges.d.ts.map +1 -0
  349. package/dest/tagging/reconcile_tagging_index_ranges.js +74 -0
  350. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +8 -10
  351. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  352. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +25 -22
  353. package/dest/tagging/sender_sync/utils/classify_pending_txs.d.ts +22 -0
  354. package/dest/tagging/sender_sync/utils/classify_pending_txs.d.ts.map +1 -0
  355. package/dest/tagging/sender_sync/utils/classify_pending_txs.js +62 -0
  356. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +17 -9
  357. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  358. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +53 -39
  359. package/dest/tagging/sender_sync/utils/resolve_pending_txs.d.ts +29 -0
  360. package/dest/tagging/sender_sync/utils/resolve_pending_txs.d.ts.map +1 -0
  361. package/dest/tagging/sender_sync/utils/resolve_pending_txs.js +42 -0
  362. package/dest/tagging/sender_sync/utils/test_utils.d.ts +16 -0
  363. package/dest/tagging/sender_sync/utils/test_utils.d.ts.map +1 -0
  364. package/dest/tagging/sender_sync/utils/test_utils.js +24 -0
  365. package/dest/tagging/testing/tag_query_test_utils.d.ts +6 -0
  366. package/dest/tagging/testing/tag_query_test_utils.d.ts.map +1 -0
  367. package/dest/tagging/testing/tag_query_test_utils.js +10 -0
  368. package/package.json +20 -17
  369. package/src/bin/check_oracle_version.ts +46 -135
  370. package/src/bin/index.ts +1 -0
  371. package/src/bin/oracle_version_helpers.ts +54 -0
  372. package/src/block_synchronizer/block_stream_source.ts +42 -0
  373. package/src/block_synchronizer/block_synchronizer.ts +86 -40
  374. package/src/config/index.ts +16 -9
  375. package/src/config/package_info.ts +1 -1
  376. package/src/contract/contract_class_service.ts +45 -0
  377. package/src/contract/contract_sync_service.ts +179 -0
  378. package/src/contract/helpers.ts +35 -0
  379. package/src/contract/skip_sync_contracts.ts +23 -0
  380. package/src/contract_function_simulator/anchored_contract_data.ts +74 -0
  381. package/src/contract_function_simulator/contract_function_simulator.ts +468 -180
  382. package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
  383. package/src/contract_function_simulator/execution_note_cache.ts +10 -30
  384. package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -18
  385. package/src/contract_function_simulator/index.ts +89 -4
  386. package/src/contract_function_simulator/noir-structs/bounded_vec.ts +43 -0
  387. package/src/contract_function_simulator/noir-structs/contract_class_log_data.ts +9 -0
  388. package/src/contract_function_simulator/noir-structs/embedded_curve_point.ts +4 -0
  389. package/src/contract_function_simulator/noir-structs/ephemeral_array.ts +66 -0
  390. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +10 -9
  391. package/src/contract_function_simulator/noir-structs/fact.ts +13 -0
  392. package/src/contract_function_simulator/noir-structs/fact_collection.ts +64 -0
  393. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +27 -20
  394. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +14 -64
  395. package/src/contract_function_simulator/noir-structs/note_data.ts +27 -0
  396. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +6 -11
  397. package/src/contract_function_simulator/noir-structs/option.ts +75 -0
  398. package/src/contract_function_simulator/noir-structs/origin_block.ts +8 -0
  399. package/src/contract_function_simulator/noir-structs/pending_tagged_log.ts +12 -0
  400. package/src/contract_function_simulator/noir-structs/provided_secret.ts +5 -0
  401. package/src/contract_function_simulator/noir-structs/resolved_tagging_strategy.ts +66 -0
  402. package/src/contract_function_simulator/noir-structs/resolved_tx.ts +19 -0
  403. package/src/contract_function_simulator/noir-structs/tx_effect_data.ts +16 -0
  404. package/src/contract_function_simulator/noir-structs/utility_context.ts +5 -17
  405. package/src/contract_function_simulator/oracle/acir_callback.ts +154 -0
  406. package/src/contract_function_simulator/oracle/index.ts +1 -15
  407. package/src/contract_function_simulator/oracle/interfaces.ts +11 -176
  408. package/src/contract_function_simulator/oracle/legacy_oracle_registry.ts +147 -0
  409. package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +6 -21
  410. package/src/contract_function_simulator/oracle/note_packing_utils.ts +3 -3
  411. package/src/contract_function_simulator/oracle/oracle_registry.ts +710 -0
  412. package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +1052 -0
  413. package/src/contract_function_simulator/oracle/private_execution.ts +6 -7
  414. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +320 -210
  415. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +1028 -268
  416. package/src/contract_function_simulator/pick_notes.ts +22 -3
  417. package/src/contract_function_simulator/transient_array_service.ts +91 -0
  418. package/src/contract_logging.ts +52 -0
  419. package/src/debug/pxe_debug_utils.ts +11 -17
  420. package/src/entrypoints/client/bundle/index.ts +3 -0
  421. package/src/entrypoints/client/bundle/utils.ts +35 -9
  422. package/src/entrypoints/client/lazy/index.ts +3 -0
  423. package/src/entrypoints/client/lazy/utils.ts +35 -9
  424. package/src/entrypoints/client/store.ts +54 -0
  425. package/src/entrypoints/pxe_creation_options.ts +21 -1
  426. package/src/entrypoints/server/index.ts +8 -2
  427. package/src/entrypoints/server/store.ts +47 -0
  428. package/src/entrypoints/server/utils.ts +46 -21
  429. package/src/error_enriching.ts +30 -13
  430. package/src/events/event_service.ts +85 -26
  431. package/src/events/private_event_filter_validator.ts +21 -1
  432. package/src/hooks/authorize_utility_call.ts +44 -0
  433. package/src/hooks/execution_hooks.ts +68 -0
  434. package/src/hooks/index.ts +13 -0
  435. package/src/hooks/resolve_custom_request.ts +24 -0
  436. package/src/hooks/resolve_tagging_secret_strategy.ts +60 -0
  437. package/src/logs/log_service.ts +231 -157
  438. package/src/messages/tx_resolver_service.ts +81 -0
  439. package/src/node/benchmarked_node.ts +140 -0
  440. package/src/node/caching_aztec_node.ts +407 -0
  441. package/src/notes/note_service.ts +128 -86
  442. package/src/notes_filter.ts +24 -0
  443. package/src/oracle_version.ts +20 -10
  444. package/src/private_kernel/batch_planner.ts +169 -0
  445. package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
  446. package/src/private_kernel/hints/index.ts +1 -1
  447. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +179 -121
  448. package/src/private_kernel/hints/test_utils.ts +318 -0
  449. package/src/private_kernel/private_kernel_execution_prover.ts +252 -116
  450. package/src/private_kernel/private_kernel_oracle.ts +65 -36
  451. package/src/pxe.ts +698 -311
  452. package/src/storage/address_store/address_store.ts +2 -1
  453. package/src/storage/allowed_scopes.ts +14 -0
  454. package/src/storage/anchor_block_store/anchor_block_store.ts +9 -7
  455. package/src/storage/backwards_compatibility_tests/__snapshots__/AddressStore.json +22 -0
  456. package/src/storage/backwards_compatibility_tests/__snapshots__/AnchorBlockStore.json +3 -0
  457. package/src/storage/backwards_compatibility_tests/__snapshots__/CapsuleStore.json +16 -0
  458. package/src/storage/backwards_compatibility_tests/__snapshots__/ContractStore.json +28 -0
  459. package/src/storage/backwards_compatibility_tests/__snapshots__/FactStore.json +40 -0
  460. package/src/storage/backwards_compatibility_tests/__snapshots__/KeyStore.json +52 -0
  461. package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +40 -0
  462. package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +56 -0
  463. package/src/storage/backwards_compatibility_tests/__snapshots__/PrivateEventStore.json +44 -0
  464. package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +26 -0
  465. package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +30 -0
  466. package/src/storage/backwards_compatibility_tests/__snapshots__/TaggingSecretSourcesStore.json +30 -0
  467. package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +117 -0
  468. package/src/storage/backwards_compatibility_tests/kv_store_snapshot.ts +122 -0
  469. package/src/storage/backwards_compatibility_tests/schema_tests.ts +803 -0
  470. package/src/storage/backwards_compatibility_tests/store_spy.ts +73 -0
  471. package/src/storage/capsule_store/capsule_service.ts +85 -0
  472. package/src/storage/capsule_store/capsule_store.ts +45 -27
  473. package/src/storage/capsule_store/index.ts +1 -0
  474. package/src/storage/contract_store/contract_store.ts +238 -166
  475. package/src/storage/contract_store/private_functions_tree.ts +2 -1
  476. package/src/storage/fact_store/fact_service.ts +69 -0
  477. package/src/storage/fact_store/fact_store.ts +488 -0
  478. package/src/storage/fact_store/fact_store_keys.ts +75 -0
  479. package/src/storage/fact_store/index.ts +15 -0
  480. package/src/storage/fact_store/origin_state.ts +84 -0
  481. package/src/storage/fact_store/stored_fact.ts +80 -0
  482. package/src/storage/index.ts +2 -1
  483. package/src/storage/metadata.ts +1 -1
  484. package/src/storage/note_store/note_store.ts +236 -194
  485. package/src/storage/note_store/stored_note.ts +5 -27
  486. package/src/storage/open_pxe_stores.ts +52 -0
  487. package/src/storage/private_event_store/private_event_store.ts +55 -56
  488. package/src/storage/private_event_store/stored_private_event.ts +1 -1
  489. package/src/storage/store_identity.ts +72 -0
  490. package/src/storage/tagging_store/index.ts +1 -1
  491. package/src/storage/tagging_store/recipient_tagging_store.ts +5 -5
  492. package/src/storage/tagging_store/sender_tagging_store.ts +278 -158
  493. package/src/storage/tagging_store/tagging_secret_sources_store.ts +138 -0
  494. package/src/tagging/constants.ts +42 -10
  495. package/src/tagging/get_all_logs_by_tags.ts +125 -36
  496. package/src/tagging/index.ts +12 -6
  497. package/src/tagging/persist_sender_tagging_index_ranges.ts +57 -0
  498. package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +356 -0
  499. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +4 -4
  500. package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
  501. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +32 -27
  502. package/src/tagging/sender_sync/utils/classify_pending_txs.ts +92 -0
  503. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +57 -50
  504. package/src/tagging/sender_sync/utils/resolve_pending_txs.ts +65 -0
  505. package/src/tagging/sender_sync/utils/test_utils.ts +46 -0
  506. package/src/tagging/testing/tag_query_test_utils.ts +11 -0
  507. package/dest/contract_function_simulator/benchmarked_node.d.ts +0 -9
  508. package/dest/contract_function_simulator/benchmarked_node.d.ts.map +0 -1
  509. package/dest/contract_function_simulator/benchmarked_node.js +0 -77
  510. package/dest/contract_function_simulator/oracle/oracle.d.ts +0 -60
  511. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +0 -1
  512. package/dest/contract_function_simulator/oracle/oracle.js +0 -368
  513. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +0 -6
  514. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +0 -1
  515. package/dest/contract_function_simulator/proxied_contract_data_source.js +0 -80
  516. package/dest/contract_sync/contract_sync_service.d.ts +0 -41
  517. package/dest/contract_sync/contract_sync_service.d.ts.map +0 -1
  518. package/dest/contract_sync/contract_sync_service.js +0 -82
  519. package/dest/contract_sync/helpers.d.ts +0 -28
  520. package/dest/contract_sync/helpers.d.ts.map +0 -1
  521. package/dest/contract_sync/helpers.js +0 -55
  522. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
  523. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
  524. package/dest/storage/tagging_store/sender_address_book_store.d.ts +0 -14
  525. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +0 -1
  526. package/dest/storage/tagging_store/sender_address_book_store.js +0 -36
  527. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +0 -15
  528. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +0 -1
  529. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +0 -99
  530. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +0 -15
  531. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +0 -1
  532. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +0 -32
  533. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +0 -11
  534. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +0 -1
  535. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +0 -29
  536. package/src/contract_function_simulator/benchmarked_node.ts +0 -103
  537. package/src/contract_function_simulator/oracle/oracle.ts +0 -637
  538. package/src/contract_function_simulator/proxied_contract_data_source.ts +0 -83
  539. package/src/contract_sync/contract_sync_service.ts +0 -129
  540. package/src/contract_sync/helpers.ts +0 -93
  541. package/src/storage/tagging_store/sender_address_book_store.ts +0 -48
  542. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -143
  543. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -49
  544. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +0 -36
@@ -2,25 +2,31 @@ import {
2
2
  AVM_EMITNOTEHASH_BASE_L2_GAS,
3
3
  AVM_EMITNULLIFIER_BASE_L2_GAS,
4
4
  AVM_SENDL2TOL1MSG_BASE_L2_GAS,
5
- DA_BYTES_PER_FIELD,
6
- DA_GAS_PER_BYTE,
5
+ DA_GAS_PER_FIELD,
7
6
  FIXED_AVM_STARTUP_L2_GAS,
8
- FIXED_DA_GAS,
9
- FIXED_L2_GAS,
10
- GeneratorIndex,
11
7
  L2_GAS_PER_CONTRACT_CLASS_LOG,
8
+ L2_GAS_PER_L2_TO_L1_MSG,
9
+ L2_GAS_PER_NOTE_HASH,
10
+ L2_GAS_PER_NULLIFIER,
12
11
  L2_GAS_PER_PRIVATE_LOG,
13
12
  MAX_CONTRACT_CLASS_LOGS_PER_TX,
14
13
  MAX_ENQUEUED_CALLS_PER_TX,
15
14
  MAX_L2_TO_L1_MSGS_PER_TX,
16
15
  MAX_NOTE_HASHES_PER_TX,
16
+ MAX_NOTE_HASH_READ_REQUESTS_PER_TX,
17
17
  MAX_NULLIFIERS_PER_TX,
18
+ MAX_NULLIFIER_READ_REQUESTS_PER_TX,
18
19
  MAX_PRIVATE_LOGS_PER_TX,
20
+ MAX_TX_LIFETIME,
21
+ PRIVATE_TX_L2_GAS_OVERHEAD,
22
+ PUBLIC_DATA_WRITE_LENGTH,
23
+ PUBLIC_TX_L2_GAS_OVERHEAD,
24
+ TX_DA_GAS_OVERHEAD,
19
25
  } from '@aztec/constants';
20
26
  import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection';
21
- import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
22
27
  import { Fr } from '@aztec/foundation/curves/bn254';
23
28
  import { type Logger, createLogger } from '@aztec/foundation/log';
29
+ import { allToCompletion } from '@aztec/foundation/promise';
24
30
  import { Timer } from '@aztec/foundation/timer';
25
31
  import type { KeyStore } from '@aztec/key-store';
26
32
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
@@ -38,119 +44,203 @@ import type { FunctionCall } from '@aztec/stdlib/abi';
38
44
  import { FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
39
45
  import type { AuthWitness } from '@aztec/stdlib/auth-witness';
40
46
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
47
+ import type { BlockParameter, L2TipsProvider } from '@aztec/stdlib/block';
41
48
  import { Gas } from '@aztec/stdlib/gas';
42
49
  import {
43
50
  computeNoteHashNonce,
44
51
  computeProtocolNullifier,
52
+ computeSiloedPrivateLogFirstField,
45
53
  computeUniqueNoteHash,
46
54
  siloNoteHash,
47
55
  siloNullifier,
48
56
  } from '@aztec/stdlib/hash';
49
57
  import type { AztecNode } from '@aztec/stdlib/interfaces/server';
50
58
  import {
59
+ ClaimedLengthArray,
51
60
  PartialPrivateTailPublicInputsForPublic,
52
61
  PartialPrivateTailPublicInputsForRollup,
53
62
  type PrivateExecutionStep,
54
63
  type PrivateKernelExecutionProofOutput,
55
64
  PrivateKernelTailCircuitPublicInputs,
65
+ PrivateLogData,
56
66
  PrivateToPublicAccumulatedData,
57
67
  PrivateToRollupAccumulatedData,
58
68
  PublicCallRequest,
69
+ ReadRequestActionEnum,
59
70
  ScopedLogHash,
71
+ ScopedNoteHash,
72
+ ScopedNullifier,
73
+ ScopedReadRequest,
74
+ buildTransientDataHints,
75
+ getNoteHashReadRequestResetActions,
76
+ getNullifierReadRequestResetActions,
60
77
  } from '@aztec/stdlib/kernel';
61
78
  import { PrivateLog } from '@aztec/stdlib/logs';
62
79
  import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
63
80
  import { ChonkProof } from '@aztec/stdlib/proofs';
81
+ import { MerkleTreeId } from '@aztec/stdlib/trees';
64
82
  import {
65
83
  BlockHeader,
66
84
  CallContext,
85
+ type ContractOverrides,
67
86
  HashedValues,
87
+ type OffchainEffect,
68
88
  PrivateExecutionResult,
69
89
  TxConstantData,
70
90
  TxExecutionRequest,
71
91
  collectNested,
92
+ collectNoteHashNullifierCounterMap,
72
93
  getFinalMinRevertibleSideEffectCounter,
73
94
  } from '@aztec/stdlib/tx';
74
95
 
75
- 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';
76
100
  import type { AddressStore } from '../storage/address_store/address_store.js';
101
+ import { CapsuleService } from '../storage/capsule_store/capsule_service.js';
77
102
  import type { CapsuleStore } from '../storage/capsule_store/capsule_store.js';
78
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';
79
106
  import type { NoteStore } from '../storage/note_store/note_store.js';
80
107
  import type { PrivateEventStore } from '../storage/private_event_store/private_event_store.js';
81
108
  import type { RecipientTaggingStore } from '../storage/tagging_store/recipient_tagging_store.js';
82
- import type { SenderAddressBookStore } from '../storage/tagging_store/sender_address_book_store.js';
83
109
  import type { SenderTaggingStore } from '../storage/tagging_store/sender_tagging_store.js';
84
- 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';
85
112
  import { ExecutionNoteCache } from './execution_note_cache.js';
86
113
  import { ExecutionTaggingIndexCache } from './execution_tagging_index_cache.js';
87
114
  import { HashedValuesCache } from './hashed_values_cache.js';
88
- import { Oracle } from './oracle/oracle.js';
115
+ import { buildACIRCallback } from './oracle/acir_callback.js';
89
116
  import { executePrivateFunction } from './oracle/private_execution.js';
90
117
  import { PrivateExecutionOracle } from './oracle/private_execution_oracle.js';
91
118
  import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
119
+ import { TransientArrayService } from './transient_array_service.js';
120
+
121
+ /** Options for ContractFunctionSimulator.run. */
122
+ export type ContractSimulatorRunOpts = {
123
+ /** The address calling the function. Can be replaced to simulate a call from another contract or account. */
124
+ msgSender?: AztecAddress;
125
+ /** The block header to use as base state for this run. */
126
+ anchorBlockHeader: BlockHeader;
127
+ /** The address used as a tagging sender when emitting private logs. */
128
+ senderForTags?: AztecAddress;
129
+ /** The accounts whose notes we can access in this call. */
130
+ scopes: AztecAddress[];
131
+ /** The job ID for staged writes. */
132
+ jobId: string;
133
+ };
134
+
135
+ /** Args for ContractFunctionSimulator constructor. */
136
+ export type ContractFunctionSimulatorArgs = {
137
+ contractStore: ContractStore;
138
+ contractClassService: ContractClassService;
139
+ /** Per-simulation contract overrides. */
140
+ overrides?: ContractOverrides;
141
+ noteStore: NoteStore;
142
+ keyStore: KeyStore;
143
+ addressStore: AddressStore;
144
+ aztecNode: AztecNode;
145
+ l2TipsStore: L2TipsProvider;
146
+ senderTaggingStore: SenderTaggingStore;
147
+ recipientTaggingStore: RecipientTaggingStore;
148
+ taggingSecretSourcesStore: TaggingSecretSourcesStore;
149
+ capsuleStore: CapsuleStore;
150
+ factStore: FactStore;
151
+ privateEventStore: PrivateEventStore;
152
+ simulator: CircuitSimulator;
153
+ contractSyncService: ContractSyncService;
154
+ txResolver: TxResolverService;
155
+ hooks?: ExecutionHooks;
156
+ };
92
157
 
93
158
  /**
94
159
  * The contract function simulator.
95
160
  */
96
161
  export class ContractFunctionSimulator {
97
- private log: Logger;
98
-
99
- constructor(
100
- private contractStore: ContractStore,
101
- private noteStore: NoteStore,
102
- private keyStore: KeyStore,
103
- private addressStore: AddressStore,
104
- private aztecNode: AztecNode,
105
- private senderTaggingStore: SenderTaggingStore,
106
- private recipientTaggingStore: RecipientTaggingStore,
107
- private senderAddressBookStore: SenderAddressBookStore,
108
- private capsuleStore: CapsuleStore,
109
- private privateEventStore: PrivateEventStore,
110
- private simulator: CircuitSimulator,
111
- private contractSyncService: ContractSyncService,
112
- ) {
162
+ private readonly log: Logger;
163
+ private readonly contractStore: ContractStore;
164
+ private readonly contractClassService: ContractClassService;
165
+ private readonly overrides: ContractOverrides | undefined;
166
+ private readonly noteStore: NoteStore;
167
+ private readonly keyStore: KeyStore;
168
+ private readonly addressStore: AddressStore;
169
+ private readonly aztecNode: AztecNode;
170
+ private readonly l2TipsStore: L2TipsProvider;
171
+ private readonly senderTaggingStore: SenderTaggingStore;
172
+ private readonly recipientTaggingStore: RecipientTaggingStore;
173
+ private readonly taggingSecretSourcesStore: TaggingSecretSourcesStore;
174
+ private readonly capsuleStore: CapsuleStore;
175
+ private readonly factStore: FactStore;
176
+ private readonly privateEventStore: PrivateEventStore;
177
+ private readonly simulator: CircuitSimulator;
178
+ private readonly contractSyncService: ContractSyncService;
179
+ private readonly txResolver: TxResolverService;
180
+ private readonly hooks: ExecutionHooks | undefined;
181
+
182
+ constructor(args: ContractFunctionSimulatorArgs) {
183
+ this.contractStore = args.contractStore;
184
+ this.contractClassService = args.contractClassService;
185
+ this.overrides = args.overrides;
186
+ this.noteStore = args.noteStore;
187
+ this.keyStore = args.keyStore;
188
+ this.addressStore = args.addressStore;
189
+ this.aztecNode = args.aztecNode;
190
+ this.l2TipsStore = args.l2TipsStore;
191
+ this.senderTaggingStore = args.senderTaggingStore;
192
+ this.recipientTaggingStore = args.recipientTaggingStore;
193
+ this.taggingSecretSourcesStore = args.taggingSecretSourcesStore;
194
+ this.capsuleStore = args.capsuleStore;
195
+ this.factStore = args.factStore;
196
+ this.privateEventStore = args.privateEventStore;
197
+ this.simulator = args.simulator;
198
+ this.contractSyncService = args.contractSyncService;
199
+ this.txResolver = args.txResolver;
200
+ this.hooks = args.hooks;
113
201
  this.log = createLogger('simulator');
114
202
  }
115
203
 
116
204
  /**
117
205
  * Runs a private function.
118
206
  * @param request - The transaction request.
119
- * @param entryPointArtifact - The artifact of the entry point function.
120
- * @param contractAddress - The address of the contract (should match request.origin)
121
- * @param msgSender - The address calling the function. This can be replaced to simulate a call from another contract
122
- * or a specific account.
123
- * @param anchorBlockHeader - The block header to use as base state for this run.
124
- * @param senderForTags - The address that is used as a tagging sender when emitting private logs. Returned from
125
- * the `privateGetSenderForTags` oracle.
126
- * @param scopes - The accounts whose notes we can access in this call. Currently optional and will default to all.
127
- * @param jobId - The job ID for staged writes.
128
- * @returns The result of the execution.
129
207
  */
130
208
  public async run(
131
209
  request: TxExecutionRequest,
132
- contractAddress: AztecAddress,
133
- selector: FunctionSelector,
134
- msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE),
135
- anchorBlockHeader: BlockHeader,
136
- senderForTags: AztecAddress | undefined,
137
- scopes: AztecAddress[] | undefined,
138
- jobId: string,
210
+ {
211
+ msgSender = AztecAddress.NULL_MSG_SENDER,
212
+ anchorBlockHeader,
213
+ senderForTags,
214
+ scopes,
215
+ jobId,
216
+ }: ContractSimulatorRunOpts,
139
217
  ): Promise<PrivateExecutionResult> {
140
218
  const simulatorSetupTimer = new Timer();
141
219
 
142
- const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(contractAddress, selector);
220
+ const contractAddress = request.origin;
143
221
 
144
- if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
145
- throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
146
- }
222
+ const anchoredContractData = new AnchoredContractData(
223
+ this.contractStore,
224
+ this.contractClassService,
225
+ anchorBlockHeader,
226
+ this.overrides,
227
+ );
147
228
 
148
- if (request.origin !== contractAddress) {
149
- this.log.warn(
150
- `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(...).`,
151
237
  );
152
238
  }
153
239
 
240
+ if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
241
+ throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
242
+ }
243
+
154
244
  // reserve the first side effect for the tx hash (inserted by the private kernel)
155
245
  const startSideEffectCounter = 2;
156
246
 
@@ -165,38 +255,48 @@ export class ContractFunctionSimulator {
165
255
  const noteCache = new ExecutionNoteCache(protocolNullifier);
166
256
  const taggingIndexCache = new ExecutionTaggingIndexCache();
167
257
 
168
- const privateExecutionOracle = new PrivateExecutionOracle(
169
- request.firstCallArgsHash,
170
- request.txContext,
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
+
263
+ const privateExecutionOracle = new PrivateExecutionOracle({
264
+ argsHash: request.firstCallArgsHash,
265
+ txContext: request.txContext,
266
+ txRequestSalt: request.salt,
171
267
  callContext,
172
268
  anchorBlockHeader,
173
- async call => {
174
- await this.runUtility(call, [], anchorBlockHeader, scopes, jobId);
269
+ utilityExecutor: async (call, execScopes) => {
270
+ await this.runUtility(call, [], anchorBlockHeader, execScopes, jobId);
175
271
  },
176
- request.authWitnesses,
177
- request.capsules,
178
- HashedValuesCache.create(request.argsOfCalls),
272
+ authWitnesses: request.authWitnesses,
273
+ capsules: request.capsules,
274
+ executionCache: HashedValuesCache.create(request.argsOfCalls),
179
275
  noteCache,
180
276
  taggingIndexCache,
181
- this.contractStore,
182
- this.noteStore,
183
- this.keyStore,
184
- this.addressStore,
185
- this.aztecNode,
186
- this.senderTaggingStore,
187
- this.recipientTaggingStore,
188
- this.senderAddressBookStore,
189
- this.capsuleStore,
190
- this.privateEventStore,
191
- this.contractSyncService,
277
+ anchoredContractData,
278
+ noteStore: this.noteStore,
279
+ keyStore: this.keyStore,
280
+ addressStore: this.addressStore,
281
+ aztecNode: this.aztecNode,
282
+ senderTaggingStore: this.senderTaggingStore,
283
+ recipientTaggingStore: this.recipientTaggingStore,
284
+ taggingSecretSourcesStore: this.taggingSecretSourcesStore,
285
+ capsuleService: new CapsuleService(this.capsuleStore, scopes),
286
+ factService: new FactService(this.factStore, scopes),
287
+ privateEventStore: this.privateEventStore,
288
+ txResolver: this.txResolver,
289
+ contractSyncService: this.contractSyncService,
192
290
  jobId,
193
- 0, // totalPublicArgsCount
194
- startSideEffectCounter,
195
- undefined, // log
291
+ totalPublicCalldataCount: 0,
292
+ sideEffectCounter: startSideEffectCounter,
196
293
  scopes,
197
294
  senderForTags,
198
- this.simulator,
199
- );
295
+ simulator: this.simulator,
296
+ l2TipsStore: this.l2TipsStore,
297
+ hooks: this.hooks,
298
+ transientArrayService,
299
+ });
200
300
 
201
301
  const setupTime = simulatorSetupTimer.ms();
202
302
 
@@ -214,8 +314,7 @@ export class ContractFunctionSimulator {
214
314
  );
215
315
  const simulatorTeardownTimer = new Timer();
216
316
 
217
- noteCache.finish();
218
- const firstNullifierHint = noteCache.getNonceGenerator();
317
+ const firstNullifier = noteCache.getNonceGenerator();
219
318
 
220
319
  const publicCallRequests = collectNested([executionResult], r =>
221
320
  r.publicInputs.publicCallRequests
@@ -223,9 +322,9 @@ export class ContractFunctionSimulator {
223
322
  .map(r => r.inner)
224
323
  .concat(r.publicInputs.publicTeardownCallRequest.isEmpty() ? [] : [r.publicInputs.publicTeardownCallRequest]),
225
324
  );
226
- const publicFunctionsCalldata = await Promise.all(
325
+ const publicFunctionsCalldata = await allToCompletion(
227
326
  publicCallRequests.map(async r => {
228
- const calldata = await privateExecutionOracle.privateLoadFromExecutionCache(r.calldataHash);
327
+ const calldata = await privateExecutionOracle.getHashPreimage(r.calldataHash);
229
328
  return new HashedValues(calldata, r.calldataHash);
230
329
  }),
231
330
  );
@@ -238,55 +337,80 @@ export class ContractFunctionSimulator {
238
337
  }
239
338
 
240
339
  // Not to be confused with a PrivateCallExecutionResult. This is a superset
241
- // of the PrivateCallExecutionResult, containing also firstNullifierHint
340
+ // of the PrivateCallExecutionResult, containing also firstNullifier
242
341
  // and publicFunctionsCalldata.
243
- return new PrivateExecutionResult(executionResult, firstNullifierHint, publicFunctionsCalldata);
342
+ return new PrivateExecutionResult(executionResult, firstNullifier, publicFunctionsCalldata);
244
343
  } catch (err) {
245
344
  throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
246
345
  }
247
346
  }
248
347
 
249
- // docs:start:execute_utility_function
250
348
  /**
251
349
  * Runs a utility function.
252
350
  * @param call - The function call to execute.
253
- * @param authwits - Authentication witnesses required for the function call.
254
- * @param anchorBlockHeader - The block header to use as base state for this run.
255
- * @param scopes - Optional array of account addresses whose notes can be accessed in this call. Defaults to all
256
- * accounts if not specified.
257
351
  * @returns A return value of the utility function in a form as returned by the simulator (Noir fields)
258
352
  */
259
353
  public async runUtility(
260
354
  call: FunctionCall,
261
355
  authwits: AuthWitness[],
262
356
  anchorBlockHeader: BlockHeader,
263
- scopes: AztecAddress[] | undefined,
357
+ scopes: AztecAddress[],
264
358
  jobId: string,
265
- ): Promise<Fr[]> {
266
- 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
+ }
267
374
 
268
375
  if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
269
376
  throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
270
377
  }
271
378
 
272
- const oracle = new UtilityExecutionOracle(
273
- call.to,
274
- authwits,
275
- [],
379
+ const utilityExecutor = async (syncCall: FunctionCall, execScopes: AztecAddress[]) => {
380
+ await this.runUtility(syncCall, [], anchorBlockHeader, execScopes, jobId);
381
+ };
382
+
383
+ const oracle = new UtilityExecutionOracle({
384
+ callContext: CallContext.from({
385
+ msgSender: AztecAddress.NULL_MSG_SENDER,
386
+ contractAddress: call.to,
387
+ functionSelector: call.selector,
388
+ isStaticCall: true,
389
+ }),
390
+ authWitnesses: authwits,
391
+ capsules: [],
276
392
  anchorBlockHeader,
277
- this.contractStore,
278
- this.noteStore,
279
- this.keyStore,
280
- this.addressStore,
281
- this.aztecNode,
282
- this.recipientTaggingStore,
283
- this.senderAddressBookStore,
284
- this.capsuleStore,
285
- this.privateEventStore,
393
+ anchoredContractData,
394
+ noteStore: this.noteStore,
395
+ keyStore: this.keyStore,
396
+ addressStore: this.addressStore,
397
+ aztecNode: this.aztecNode,
398
+ recipientTaggingStore: this.recipientTaggingStore,
399
+ taggingSecretSourcesStore: this.taggingSecretSourcesStore,
400
+ capsuleService: new CapsuleService(this.capsuleStore, scopes),
401
+ factService: new FactService(this.factStore, scopes),
402
+ privateEventStore: this.privateEventStore,
403
+ txResolver: this.txResolver,
404
+ contractSyncService: this.contractSyncService,
405
+ l2TipsStore: this.l2TipsStore,
286
406
  jobId,
287
- undefined,
288
407
  scopes,
289
- );
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(),
413
+ });
290
414
 
291
415
  try {
292
416
  this.log.verbose(`Executing utility function ${entryPointArtifact.name}`, {
@@ -296,7 +420,7 @@ export class ContractFunctionSimulator {
296
420
 
297
421
  const initialWitness = toACVMWitness(0, call.args);
298
422
  const acirExecutionResult = await this.simulator
299
- .executeUserCircuit(initialWitness, entryPointArtifact, new Oracle(oracle).toACIRCallback())
423
+ .executeUserCircuit(initialWitness, entryPointArtifact, buildACIRCallback(oracle))
300
424
  .catch((err: Error) => {
301
425
  err.message = resolveAssertionMessageFromError(err, entryPointArtifact);
302
426
  throw new ExecutionError(
@@ -310,29 +434,15 @@ export class ContractFunctionSimulator {
310
434
  );
311
435
  });
312
436
 
313
- this.log.verbose(`Utility simulation for ${call.to}.${call.selector} completed`);
314
- return witnessMapToFields(acirExecutionResult.returnWitness);
437
+ this.log.verbose(`Utility execution for ${call.to}.${call.selector} completed`);
438
+ return {
439
+ result: witnessMapToFields(acirExecutionResult.returnWitness),
440
+ offchainEffects: oracle.getOffchainEffects(),
441
+ };
315
442
  } catch (err) {
316
443
  throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
317
444
  }
318
445
  }
319
- // docs:end:execute_utility_function
320
-
321
- /**
322
- * Returns the execution statistics collected during the simulator run.
323
- * @returns The execution statistics.
324
- */
325
- getStats() {
326
- const nodeRPCCalls =
327
- typeof (this.aztecNode as BenchmarkedNode).getStats === 'function'
328
- ? (this.aztecNode as BenchmarkedNode).getStats()
329
- : {
330
- perMethod: {},
331
- roundTrips: { roundTrips: 0, totalBlockingTime: 0, roundTripDurations: [], roundTripMethods: [] },
332
- };
333
-
334
- return { nodeRPCCalls };
335
- }
336
446
  }
337
447
 
338
448
  class OrderedSideEffect<T> {
@@ -352,7 +462,8 @@ class OrderedSideEffect<T> {
352
462
  * (allowing state overrides) and is much faster, while still generating a valid
353
463
  * output that can be sent to the node for public simulation
354
464
  * @param privateExecutionResult - The result of the private execution.
355
- * @param contractStore - A provider for contract data in order to get function names and debug info.
465
+ * @param debugFunctionNameGetter - A provider for contract data in order to get function names and debug info.
466
+ * @param node - AztecNode for verifying settled read requests against the note hash and nullifier trees.
356
467
  * @param minRevertibleSideEffectCounterOverride - Optional override for the min revertible side effect counter.
357
468
  * Used by TXE to simulate account contract behavior (setting the counter before app execution).
358
469
  * @returns The simulated proving result.
@@ -360,58 +471,73 @@ class OrderedSideEffect<T> {
360
471
  export async function generateSimulatedProvingResult(
361
472
  privateExecutionResult: PrivateExecutionResult,
362
473
  debugFunctionNameGetter: (contractAddress: AztecAddress, functionSelector: FunctionSelector) => Promise<string>,
474
+ node: AztecNode,
363
475
  minRevertibleSideEffectCounterOverride?: number,
364
476
  ): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
365
- const siloedNoteHashes: OrderedSideEffect<Fr>[] = [];
366
- const nullifiers: OrderedSideEffect<Fr>[] = [];
367
- const taggedPrivateLogs: OrderedSideEffect<PrivateLog>[] = [];
477
+ const taggedPrivateLogs: OrderedSideEffect<PrivateLogData>[] = [];
368
478
  const l2ToL1Messages: OrderedSideEffect<ScopedL2ToL1Message>[] = [];
369
479
  const contractClassLogsHashes: OrderedSideEffect<ScopedLogHash>[] = [];
370
480
  const publicCallRequests: OrderedSideEffect<PublicCallRequest>[] = [];
371
481
  const executionSteps: PrivateExecutionStep[] = [];
372
482
 
483
+ // Unsiloed scoped arrays — used for squashing, read request verification,
484
+ // and siloed at the end only for the surviving items
485
+ const scopedNoteHashes: ScopedNoteHash[] = [];
486
+ const scopedNullifiers: ScopedNullifier[] = [];
487
+
488
+ // Read requests for verification
489
+ const noteHashReadRequests: ScopedReadRequest[] = [];
490
+ const nullifierReadRequests: ScopedReadRequest[] = [];
491
+
373
492
  let publicTeardownCallRequest;
374
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
+
375
501
  const executions = [privateExecutionResult.entrypoint];
376
502
 
377
503
  while (executions.length !== 0) {
378
504
  const execution = executions.shift()!;
379
505
  executions.unshift(...execution!.nestedExecutionResults);
380
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
+
381
513
  const { contractAddress } = execution.publicInputs.callContext;
382
514
 
383
- const noteHashesFromExecution = await Promise.all(
384
- execution.publicInputs.noteHashes
385
- .getActiveItems()
386
- .filter(noteHash => !noteHash.isEmpty())
387
- .map(
388
- async noteHash =>
389
- new OrderedSideEffect(await siloNoteHash(contractAddress, noteHash.value), noteHash.counter),
390
- ),
391
- );
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
+ }
392
521
 
393
- const nullifiersFromExecution = await Promise.all(
394
- execution.publicInputs.nullifiers
522
+ scopedNoteHashes.push(
523
+ ...execution.publicInputs.noteHashes
395
524
  .getActiveItems()
396
- .map(
397
- async nullifier =>
398
- new OrderedSideEffect(await siloNullifier(contractAddress, nullifier.value), nullifier.counter),
399
- ),
525
+ .filter(nh => !nh.isEmpty())
526
+ .map(nh => nh.scope(contractAddress)),
400
527
  );
528
+ scopedNullifiers.push(...execution.publicInputs.nullifiers.getActiveItems().map(n => n.scope(contractAddress)));
401
529
 
402
- const privateLogsFromExecution = await Promise.all(
403
- execution.publicInputs.privateLogs.getActiveItems().map(async metadata => {
404
- metadata.log.fields[0] = await poseidon2HashWithSeparator(
405
- [contractAddress, metadata.log.fields[0]],
406
- GeneratorIndex.PRIVATE_LOG_FIRST_FIELD,
407
- );
408
- return new OrderedSideEffect(metadata.log, metadata.counter);
409
- }),
530
+ taggedPrivateLogs.push(
531
+ ...(await allToCompletion(
532
+ execution.publicInputs.privateLogs.getActiveItems().map(async metadata => {
533
+ metadata.log.fields[0] = await computeSiloedPrivateLogFirstField(contractAddress, metadata.log.fields[0]);
534
+ return new OrderedSideEffect(metadata, metadata.counter);
535
+ }),
536
+ )),
410
537
  );
411
538
 
412
- siloedNoteHashes.push(...noteHashesFromExecution);
413
- taggedPrivateLogs.push(...privateLogsFromExecution);
414
- nullifiers.push(...nullifiersFromExecution);
539
+ noteHashReadRequests.push(...execution.publicInputs.noteHashReadRequests.getActiveItems());
540
+ nullifierReadRequests.push(...execution.publicInputs.nullifierReadRequests.getActiveItems());
415
541
  l2ToL1Messages.push(
416
542
  ...execution.publicInputs.l2ToL1Msgs
417
543
  .getActiveItems()
@@ -451,6 +577,47 @@ export async function generateSimulatedProvingResult(
451
577
  });
452
578
  }
453
579
 
580
+ const noteHashNullifierCounterMap = collectNoteHashNullifierCounterMap(privateExecutionResult);
581
+ const minRevertibleSideEffectCounter =
582
+ minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
583
+
584
+ const scopedNoteHashesCLA = new ClaimedLengthArray<ScopedNoteHash, typeof MAX_NOTE_HASHES_PER_TX>(
585
+ padArrayEnd(scopedNoteHashes, ScopedNoteHash.empty(), MAX_NOTE_HASHES_PER_TX),
586
+ scopedNoteHashes.length,
587
+ );
588
+ const scopedNullifiersCLA = new ClaimedLengthArray<ScopedNullifier, typeof MAX_NULLIFIERS_PER_TX>(
589
+ padArrayEnd(scopedNullifiers, ScopedNullifier.empty(), MAX_NULLIFIERS_PER_TX),
590
+ scopedNullifiers.length,
591
+ );
592
+
593
+ const { filteredNoteHashes, filteredNullifiers, filteredPrivateLogs } = squashTransientSideEffects(
594
+ taggedPrivateLogs,
595
+ scopedNoteHashesCLA,
596
+ scopedNullifiersCLA,
597
+ noteHashNullifierCounterMap,
598
+ minRevertibleSideEffectCounter,
599
+ );
600
+
601
+ await verifyReadRequests(
602
+ node,
603
+ await privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader.hash(),
604
+ noteHashReadRequests,
605
+ nullifierReadRequests,
606
+ scopedNoteHashesCLA,
607
+ scopedNullifiersCLA,
608
+ );
609
+
610
+ const siloedNoteHashes = await allToCompletion(
611
+ filteredNoteHashes
612
+ .sort((a, b) => a.counter - b.counter)
613
+ .map(async nh => new OrderedSideEffect(await siloNoteHash(nh.contractAddress, nh.value), nh.counter)),
614
+ );
615
+ const siloedNullifiers = await allToCompletion(
616
+ filteredNullifiers
617
+ .sort((a, b) => a.counter - b.counter)
618
+ .map(async n => new OrderedSideEffect(await siloNullifier(n.contractAddress, n.value), n.counter)),
619
+ );
620
+
454
621
  const constantData = new TxConstantData(
455
622
  privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader,
456
623
  privateExecutionResult.entrypoint.publicInputs.txContext,
@@ -467,25 +634,23 @@ export async function generateSimulatedProvingResult(
467
634
  const getEffect = <T>(orderedSideEffect: OrderedSideEffect<T>) => orderedSideEffect.sideEffect;
468
635
 
469
636
  const isPrivateOnlyTx = privateExecutionResult.publicFunctionCalldata.length === 0;
470
- const minRevertibleSideEffectCounter =
471
- minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
472
637
 
473
638
  const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(
474
- nullifiers.sort(sortByCounter),
639
+ siloedNullifiers,
475
640
  minRevertibleSideEffectCounter,
476
641
  );
642
+ // The protocol nullifier is the nonce generator and the tx's first nullifier. It is injected by the
643
+ // init kernel (at counter 1, index 0) rather than emitted by any private call, so it is absent from
644
+ // the executed nullifiers above. Mirror the kernel here by prepending it as the first non-revertible
645
+ // nullifier.
477
646
  const nonceGenerator = privateExecutionResult.firstNullifier;
478
- if (nonRevertibleNullifiers.length === 0) {
479
- nonRevertibleNullifiers.push(nonceGenerator);
480
- } else if (!nonRevertibleNullifiers[0].equals(nonceGenerator)) {
481
- throw new Error('The first non revertible nullifier should be equal to the nonce generator. This is a bug!');
482
- }
647
+ nonRevertibleNullifiers.unshift(nonceGenerator);
483
648
 
484
649
  if (isPrivateOnlyTx) {
485
650
  // We must make the note hashes unique by using the
486
651
  // nonce generator and their index in the tx.
487
- const uniqueNoteHashes = await Promise.all(
488
- siloedNoteHashes.sort(sortByCounter).map(async (orderedSideEffect, i) => {
652
+ const uniqueNoteHashes = await allToCompletion(
653
+ siloedNoteHashes.map(async (orderedSideEffect, i) => {
489
654
  const siloedNoteHash = orderedSideEffect.sideEffect;
490
655
  const nonce = await computeNoteHashNonce(nonceGenerator, i);
491
656
  const uniqueNoteHash = await computeUniqueNoteHash(nonce, siloedNoteHash);
@@ -500,21 +665,21 @@ export async function generateSimulatedProvingResult(
500
665
  ScopedL2ToL1Message.empty(),
501
666
  MAX_L2_TO_L1_MSGS_PER_TX,
502
667
  ),
503
- padArrayEnd(taggedPrivateLogs.sort(sortByCounter).map(getEffect), PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX),
668
+ padArrayEnd(filteredPrivateLogs.sort(sortByCounter).map(getEffect), PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX),
504
669
  padArrayEnd(
505
670
  contractClassLogsHashes.sort(sortByCounter).map(getEffect),
506
671
  ScopedLogHash.empty(),
507
672
  MAX_CONTRACT_CLASS_LOGS_PER_TX,
508
673
  ),
509
674
  );
510
- gasUsed = meterGasUsed(accumulatedDataForRollup);
675
+ gasUsed = meterGasUsed(accumulatedDataForRollup, isPrivateOnlyTx);
511
676
  inputsForRollup = new PartialPrivateTailPublicInputsForRollup(accumulatedDataForRollup);
512
677
  } else {
513
678
  const [nonRevertibleNoteHashes, revertibleNoteHashes] = splitOrderedSideEffects(
514
- siloedNoteHashes.sort(sortByCounter),
679
+ siloedNoteHashes,
515
680
  minRevertibleSideEffectCounter,
516
681
  );
517
- const nonRevertibleUniqueNoteHashes = await Promise.all(
682
+ const nonRevertibleUniqueNoteHashes = await allToCompletion(
518
683
  nonRevertibleNoteHashes.map(async (noteHash, i) => {
519
684
  const nonce = await computeNoteHashNonce(nonceGenerator, i);
520
685
  return await computeUniqueNoteHash(nonce, noteHash);
@@ -525,7 +690,7 @@ export async function generateSimulatedProvingResult(
525
690
  minRevertibleSideEffectCounter,
526
691
  );
527
692
  const [nonRevertibleTaggedPrivateLogs, revertibleTaggedPrivateLogs] = splitOrderedSideEffects(
528
- taggedPrivateLogs,
693
+ filteredPrivateLogs,
529
694
  minRevertibleSideEffectCounter,
530
695
  );
531
696
  const [nonRevertibleContractClassLogHashes, revertibleContractClassLogHashes] = splitOrderedSideEffects(
@@ -554,9 +719,9 @@ export async function generateSimulatedProvingResult(
554
719
  padArrayEnd(revertibleContractClassLogHashes, ScopedLogHash.empty(), MAX_CONTRACT_CLASS_LOGS_PER_TX),
555
720
  padArrayEnd(revertiblePublicCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX),
556
721
  );
557
- gasUsed = meterGasUsed(revertibleData).add(meterGasUsed(nonRevertibleData));
722
+ gasUsed = meterGasUsed(revertibleData, isPrivateOnlyTx).add(meterGasUsed(nonRevertibleData, isPrivateOnlyTx));
558
723
  if (publicTeardownCallRequest) {
559
- gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
724
+ gasUsed = gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
560
725
  }
561
726
 
562
727
  inputsForPublic = new PartialPrivateTailPublicInputsForPublic(
@@ -568,9 +733,14 @@ export async function generateSimulatedProvingResult(
568
733
 
569
734
  const publicInputs = new PrivateKernelTailCircuitPublicInputs(
570
735
  constantData,
571
- /*gasUsed=*/ gasUsed.add(Gas.from({ l2Gas: FIXED_L2_GAS, daGas: FIXED_DA_GAS })),
572
- /*feePayer=*/ AztecAddress.zero(),
573
- /*includeByTimestamp=*/ 0n,
736
+ /*gasUsed=*/ gasUsed.add(
737
+ Gas.from({
738
+ l2Gas: isPrivateOnlyTx ? PRIVATE_TX_L2_GAS_OVERHEAD : PUBLIC_TX_L2_GAS_OVERHEAD,
739
+ daGas: TX_DA_GAS_OVERHEAD,
740
+ }),
741
+ ),
742
+ /*feePayer=*/ feePayer,
743
+ /*expirationTimestamp=*/ expirationTimestamp,
574
744
  hasPublicCalls ? inputsForPublic : undefined,
575
745
  !hasPublicCalls ? inputsForRollup : undefined,
576
746
  );
@@ -582,6 +752,116 @@ export async function generateSimulatedProvingResult(
582
752
  };
583
753
  }
584
754
 
755
+ /**
756
+ * Squashes transient note hashes and nullifiers, mimicking the behavior
757
+ * of the reset kernels. Returns the filtered (surviving) scoped items and private logs.
758
+ */
759
+ function squashTransientSideEffects(
760
+ taggedPrivateLogs: OrderedSideEffect<PrivateLogData>[],
761
+ scopedNoteHashesCLA: ClaimedLengthArray<ScopedNoteHash, typeof MAX_NOTE_HASHES_PER_TX>,
762
+ scopedNullifiersCLA: ClaimedLengthArray<ScopedNullifier, typeof MAX_NULLIFIERS_PER_TX>,
763
+ noteHashNullifierCounterMap: Map<number, number>,
764
+ minRevertibleSideEffectCounter: number,
765
+ ) {
766
+ const { numTransientData, hints: transientDataHints } = buildTransientDataHints(
767
+ scopedNoteHashesCLA,
768
+ scopedNullifiersCLA,
769
+ /*futureNoteHashReads=*/ [],
770
+ /*futureNullifierReads=*/ [],
771
+ /*futureLogs=*/ [],
772
+ noteHashNullifierCounterMap,
773
+ minRevertibleSideEffectCounter,
774
+ );
775
+
776
+ const squashedNoteHashCounters = new Set<number>();
777
+ const squashedNullifierCounters = new Set<number>();
778
+ for (let i = 0; i < numTransientData; i++) {
779
+ const hint = transientDataHints[i];
780
+ squashedNoteHashCounters.add(scopedNoteHashesCLA.array[hint.noteHashIndex].counter);
781
+ squashedNullifierCounters.add(scopedNullifiersCLA.array[hint.nullifierIndex].counter);
782
+ }
783
+
784
+ return {
785
+ filteredNoteHashes: scopedNoteHashesCLA.getActiveItems().filter(nh => !squashedNoteHashCounters.has(nh.counter)),
786
+ filteredNullifiers: scopedNullifiersCLA.getActiveItems().filter(n => !squashedNullifierCounters.has(n.counter)),
787
+ filteredPrivateLogs: taggedPrivateLogs
788
+ .filter(item => !squashedNoteHashCounters.has(item.sideEffect.noteHashCounter))
789
+ .map(item => new OrderedSideEffect(item.sideEffect.log, item.counter)),
790
+ };
791
+ }
792
+
793
+ /**
794
+ * Verifies settled read requests by checking membership in the note hash and nullifier trees
795
+ * at the tx's anchor block, mimicking the behavior of the kernels
796
+ */
797
+ async function verifyReadRequests(
798
+ node: Pick<AztecNode, 'findLeavesIndexes'>,
799
+ anchorBlockHash: BlockParameter,
800
+ noteHashReadRequests: ScopedReadRequest[],
801
+ nullifierReadRequests: ScopedReadRequest[],
802
+ scopedNoteHashesCLA: ClaimedLengthArray<ScopedNoteHash, typeof MAX_NOTE_HASHES_PER_TX>,
803
+ scopedNullifiersCLA: ClaimedLengthArray<ScopedNullifier, typeof MAX_NULLIFIERS_PER_TX>,
804
+ ) {
805
+ const noteHashReadRequestsCLA = new ClaimedLengthArray<ScopedReadRequest, typeof MAX_NOTE_HASH_READ_REQUESTS_PER_TX>(
806
+ padArrayEnd(noteHashReadRequests, ScopedReadRequest.empty(), MAX_NOTE_HASH_READ_REQUESTS_PER_TX),
807
+ noteHashReadRequests.length,
808
+ );
809
+ const nullifierReadRequestsCLA = new ClaimedLengthArray<ScopedReadRequest, typeof MAX_NULLIFIER_READ_REQUESTS_PER_TX>(
810
+ padArrayEnd(nullifierReadRequests, ScopedReadRequest.empty(), MAX_NULLIFIER_READ_REQUESTS_PER_TX),
811
+ nullifierReadRequests.length,
812
+ );
813
+
814
+ const noteHashResetActions = getNoteHashReadRequestResetActions(noteHashReadRequestsCLA, scopedNoteHashesCLA);
815
+ const nullifierResetActions = getNullifierReadRequestResetActions(nullifierReadRequestsCLA, scopedNullifiersCLA);
816
+
817
+ const settledNoteHashReads: { index: number; value: Fr }[] = [];
818
+ for (let i = 0; i < noteHashResetActions.actions.length; i++) {
819
+ if (noteHashResetActions.actions[i] === ReadRequestActionEnum.READ_AS_SETTLED) {
820
+ settledNoteHashReads.push({ index: i, value: noteHashReadRequests[i].value });
821
+ }
822
+ }
823
+
824
+ const settledNullifierReads: { index: number; value: Fr }[] = [];
825
+ for (let i = 0; i < nullifierResetActions.actions.length; i++) {
826
+ if (nullifierResetActions.actions[i] === ReadRequestActionEnum.READ_AS_SETTLED) {
827
+ settledNullifierReads.push({ index: i, value: nullifierReadRequests[i].value });
828
+ }
829
+ }
830
+
831
+ const [noteHashResults, nullifierResults] = await allToCompletion([
832
+ settledNoteHashReads.length > 0
833
+ ? node.findLeavesIndexes(
834
+ anchorBlockHash,
835
+ MerkleTreeId.NOTE_HASH_TREE,
836
+ settledNoteHashReads.map(({ value }) => value),
837
+ )
838
+ : [],
839
+ settledNullifierReads.length > 0
840
+ ? node.findLeavesIndexes(
841
+ anchorBlockHash,
842
+ MerkleTreeId.NULLIFIER_TREE,
843
+ settledNullifierReads.map(({ value }) => value),
844
+ )
845
+ : [],
846
+ ]);
847
+
848
+ for (let i = 0; i < settledNoteHashReads.length; i++) {
849
+ if (!noteHashResults[i]) {
850
+ throw new Error(
851
+ `Note hash read request at index ${settledNoteHashReads[i].index} is reading an unknown note hash: ${settledNoteHashReads[i].value}`,
852
+ );
853
+ }
854
+ }
855
+
856
+ for (let i = 0; i < settledNullifierReads.length; i++) {
857
+ if (!nullifierResults[i]) {
858
+ throw new Error(
859
+ `Nullifier read request at index ${settledNullifierReads[i].index} is reading an unknown nullifier: ${settledNullifierReads[i].value}`,
860
+ );
861
+ }
862
+ }
863
+ }
864
+
585
865
  function splitOrderedSideEffects<T>(effects: OrderedSideEffect<T>[], minRevertibleSideEffectCounter: number) {
586
866
  const revertibleSideEffects: T[] = [];
587
867
  const nonRevertibleSideEffects: T[] = [];
@@ -595,21 +875,24 @@ function splitOrderedSideEffects<T>(effects: OrderedSideEffect<T>[], minRevertib
595
875
  return [nonRevertibleSideEffects, revertibleSideEffects];
596
876
  }
597
877
 
598
- function meterGasUsed(data: PrivateToRollupAccumulatedData | PrivateToPublicAccumulatedData) {
878
+ function meterGasUsed(data: PrivateToRollupAccumulatedData | PrivateToPublicAccumulatedData, isPrivateOnlyTx: boolean) {
599
879
  let meteredDAFields = 0;
600
880
  let meteredL2Gas = 0;
601
881
 
602
882
  const numNoteHashes = arrayNonEmptyLength(data.noteHashes, hash => hash.isEmpty());
603
883
  meteredDAFields += numNoteHashes;
604
- meteredL2Gas += numNoteHashes * AVM_EMITNOTEHASH_BASE_L2_GAS;
884
+ const noteHashBaseGas = isPrivateOnlyTx ? L2_GAS_PER_NOTE_HASH : AVM_EMITNOTEHASH_BASE_L2_GAS;
885
+ meteredL2Gas += numNoteHashes * noteHashBaseGas;
605
886
 
606
887
  const numNullifiers = arrayNonEmptyLength(data.nullifiers, nullifier => nullifier.isEmpty());
607
888
  meteredDAFields += numNullifiers;
608
- meteredL2Gas += numNullifiers * AVM_EMITNULLIFIER_BASE_L2_GAS;
889
+ const nullifierBaseGas = isPrivateOnlyTx ? L2_GAS_PER_NULLIFIER : AVM_EMITNULLIFIER_BASE_L2_GAS;
890
+ meteredL2Gas += numNullifiers * nullifierBaseGas;
609
891
 
610
892
  const numL2toL1Messages = arrayNonEmptyLength(data.l2ToL1Msgs, msg => msg.isEmpty());
611
893
  meteredDAFields += numL2toL1Messages;
612
- meteredL2Gas += numL2toL1Messages * AVM_SENDL2TOL1MSG_BASE_L2_GAS;
894
+ const l2ToL1MessageBaseGas = isPrivateOnlyTx ? L2_GAS_PER_L2_TO_L1_MSG : AVM_SENDL2TOL1MSG_BASE_L2_GAS;
895
+ meteredL2Gas += numL2toL1Messages * l2ToL1MessageBaseGas;
613
896
 
614
897
  const numPrivatelogs = arrayNonEmptyLength(data.privateLogs, log => log.isEmpty());
615
898
  // Every private log emits its length as an additional field
@@ -617,14 +900,19 @@ function meterGasUsed(data: PrivateToRollupAccumulatedData | PrivateToPublicAccu
617
900
  meteredL2Gas += numPrivatelogs * L2_GAS_PER_PRIVATE_LOG;
618
901
 
619
902
  const numContractClassLogs = arrayNonEmptyLength(data.contractClassLogsHashes, log => log.isEmpty());
620
- // Every contract class log emits its length and contract address as additional fields
903
+ // Every contract class log emits its contract address as an additional field
621
904
  meteredDAFields += data.contractClassLogsHashes.reduce(
622
- (acc, log) => (!log.isEmpty() ? acc + log.logHash.length + 2 : acc),
905
+ (acc, log) => (!log.isEmpty() ? acc + log.logHash.length + 1 : acc),
623
906
  0,
624
907
  );
625
908
  meteredL2Gas += numContractClassLogs * L2_GAS_PER_CONTRACT_CLASS_LOG;
626
909
 
627
- const meteredDAGas = meteredDAFields * DA_BYTES_PER_FIELD * DA_GAS_PER_BYTE;
910
+ if (isPrivateOnlyTx) {
911
+ // The public data write that the private tx base rollup always performs to update the fee payer's balance.
912
+ meteredDAFields += PUBLIC_DATA_WRITE_LENGTH;
913
+ }
914
+
915
+ const meteredDAGas = meteredDAFields * DA_GAS_PER_FIELD;
628
916
 
629
917
  if ((data as PrivateToPublicAccumulatedData).publicCallRequests) {
630
918
  const dataForPublic = data as PrivateToPublicAccumulatedData;