@aztec/pxe 0.0.1-commit.2ed92850 → 0.0.1-commit.3100065

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