@aztec/pxe 0.0.1-commit.d431d1c → 0.0.1-commit.d58ff9d0

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