@aztec/pxe 0.0.1-commit.a072138 → 0.0.1-commit.a5db02d

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 (504) 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 +23 -13
  12. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  13. package/dest/block_synchronizer/block_synchronizer.js +90 -28
  14. package/dest/config/index.d.ts +9 -2
  15. package/dest/config/index.d.ts.map +1 -1
  16. package/dest/config/index.js +14 -15
  17. package/dest/config/package_info.js +1 -1
  18. package/dest/contract/contract_class_service.d.ts +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 -34
  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 -95
  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 +139 -0
  124. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -0
  125. package/dest/contract_function_simulator/oracle/oracle_registry.js +1016 -0
  126. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +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 -96
  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 +256 -114
  135. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +201 -84
  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 +604 -186
  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 +14 -15
  148. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  149. package/dest/debug/pxe_debug_utils.js +16 -21
  150. package/dest/entrypoints/client/bundle/index.d.ts +4 -1
  151. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  152. package/dest/entrypoints/client/bundle/index.js +3 -0
  153. package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
  154. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  155. package/dest/entrypoints/client/bundle/utils.js +35 -8
  156. package/dest/entrypoints/client/lazy/index.d.ts +4 -1
  157. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  158. package/dest/entrypoints/client/lazy/index.js +3 -0
  159. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  160. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  161. package/dest/entrypoints/client/lazy/utils.js +35 -8
  162. package/dest/entrypoints/client/store.d.ts +14 -0
  163. package/dest/entrypoints/client/store.d.ts.map +1 -0
  164. package/dest/entrypoints/client/store.js +28 -0
  165. package/dest/entrypoints/pxe_creation_options.d.ts +16 -2
  166. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  167. package/dest/entrypoints/pxe_creation_options.js +3 -1
  168. package/dest/entrypoints/server/index.d.ts +8 -3
  169. package/dest/entrypoints/server/index.d.ts.map +1 -1
  170. package/dest/entrypoints/server/index.js +6 -2
  171. package/dest/entrypoints/server/store.d.ts +18 -0
  172. package/dest/entrypoints/server/store.d.ts.map +1 -0
  173. package/dest/entrypoints/server/store.js +28 -0
  174. package/dest/entrypoints/server/utils.d.ts +4 -3
  175. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  176. package/dest/entrypoints/server/utils.js +36 -8
  177. package/dest/error_enriching.d.ts +5 -3
  178. package/dest/error_enriching.d.ts.map +1 -1
  179. package/dest/error_enriching.js +13 -11
  180. package/dest/events/event_service.d.ts +15 -6
  181. package/dest/events/event_service.d.ts.map +1 -1
  182. package/dest/events/event_service.js +44 -11
  183. package/dest/events/private_event_filter_validator.d.ts +3 -2
  184. package/dest/events/private_event_filter_validator.d.ts.map +1 -1
  185. package/dest/events/private_event_filter_validator.js +15 -0
  186. package/dest/hooks/authorize_utility_call.d.ts +41 -0
  187. package/dest/hooks/authorize_utility_call.d.ts.map +1 -0
  188. package/dest/hooks/authorize_utility_call.js +4 -0
  189. package/dest/hooks/execution_hooks.d.ts +62 -0
  190. package/dest/hooks/execution_hooks.d.ts.map +1 -0
  191. package/dest/hooks/execution_hooks.js +9 -0
  192. package/dest/hooks/index.d.ts +5 -0
  193. package/dest/hooks/index.d.ts.map +1 -0
  194. package/dest/hooks/index.js +2 -0
  195. package/dest/hooks/resolve_custom_request.d.ts +23 -0
  196. package/dest/hooks/resolve_custom_request.d.ts.map +1 -0
  197. package/dest/hooks/resolve_custom_request.js +3 -0
  198. package/dest/hooks/resolve_tagging_secret_strategy.d.ts +50 -0
  199. package/dest/hooks/resolve_tagging_secret_strategy.d.ts.map +1 -0
  200. package/dest/hooks/resolve_tagging_secret_strategy.js +3 -0
  201. package/dest/logs/log_service.d.ts +14 -11
  202. package/dest/logs/log_service.d.ts.map +1 -1
  203. package/dest/logs/log_service.js +193 -91
  204. package/dest/messages/tx_resolver_service.d.ts +17 -0
  205. package/dest/messages/tx_resolver_service.d.ts.map +1 -0
  206. package/dest/messages/tx_resolver_service.js +55 -0
  207. package/dest/notes/note_service.d.ts +28 -6
  208. package/dest/notes/note_service.d.ts.map +1 -1
  209. package/dest/notes/note_service.js +84 -59
  210. package/dest/notes_filter.d.ts +24 -0
  211. package/dest/notes_filter.d.ts.map +1 -0
  212. package/dest/notes_filter.js +4 -0
  213. package/dest/oracle_version.d.ts +4 -3
  214. package/dest/oracle_version.d.ts.map +1 -1
  215. package/dest/oracle_version.js +20 -10
  216. package/dest/private_kernel/batch_planner.d.ts +47 -0
  217. package/dest/private_kernel/batch_planner.d.ts.map +1 -0
  218. package/dest/private_kernel/batch_planner.js +104 -0
  219. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
  220. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
  221. package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
  222. package/dest/private_kernel/hints/index.d.ts +1 -1
  223. package/dest/private_kernel/hints/index.js +1 -1
  224. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
  225. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
  226. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +135 -70
  227. package/dest/private_kernel/hints/test_utils.d.ts +122 -0
  228. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
  229. package/dest/private_kernel/hints/test_utils.js +202 -0
  230. package/dest/private_kernel/private_kernel_execution_prover.d.ts +6 -2
  231. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  232. package/dest/private_kernel/private_kernel_execution_prover.js +164 -82
  233. package/dest/private_kernel/private_kernel_oracle.d.ts +17 -11
  234. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  235. package/dest/private_kernel/private_kernel_oracle.js +47 -29
  236. package/dest/pxe.d.ts +228 -66
  237. package/dest/pxe.d.ts.map +1 -1
  238. package/dest/pxe.js +410 -227
  239. package/dest/storage/allowed_scopes.d.ts +6 -0
  240. package/dest/storage/allowed_scopes.d.ts.map +1 -0
  241. package/dest/storage/allowed_scopes.js +7 -0
  242. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -6
  243. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
  244. package/dest/storage/anchor_block_store/anchor_block_store.js +9 -7
  245. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts +42 -0
  246. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts.map +1 -0
  247. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.js +93 -0
  248. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts +15 -0
  249. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts.map +1 -0
  250. package/dest/storage/backwards_compatibility_tests/schema_tests.js +671 -0
  251. package/dest/storage/backwards_compatibility_tests/store_spy.d.ts +19 -0
  252. package/dest/storage/backwards_compatibility_tests/store_spy.d.ts.map +1 -0
  253. package/dest/storage/backwards_compatibility_tests/store_spy.js +63 -0
  254. package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
  255. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  256. package/dest/storage/capsule_store/capsule_service.js +47 -0
  257. package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
  258. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  259. package/dest/storage/capsule_store/capsule_store.js +36 -28
  260. package/dest/storage/capsule_store/index.d.ts +2 -1
  261. package/dest/storage/capsule_store/index.d.ts.map +1 -1
  262. package/dest/storage/capsule_store/index.js +1 -0
  263. package/dest/storage/contract_store/contract_store.d.ts +63 -33
  264. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  265. package/dest/storage/contract_store/contract_store.js +182 -134
  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 +44 -35
  291. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  292. package/dest/storage/note_store/note_store.js +202 -171
  293. package/dest/storage/note_store/stored_note.d.ts +3 -8
  294. package/dest/storage/note_store/stored_note.d.ts.map +1 -1
  295. package/dest/storage/note_store/stored_note.js +4 -20
  296. package/dest/storage/open_pxe_stores.d.ts +35 -0
  297. package/dest/storage/open_pxe_stores.d.ts.map +1 -0
  298. package/dest/storage/open_pxe_stores.js +29 -0
  299. package/dest/storage/private_event_store/private_event_store.d.ts +13 -16
  300. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  301. package/dest/storage/private_event_store/private_event_store.js +43 -43
  302. package/dest/storage/private_event_store/stored_private_event.js +1 -1
  303. package/dest/storage/store_identity.d.ts +35 -0
  304. package/dest/storage/store_identity.d.ts.map +1 -0
  305. package/dest/storage/store_identity.js +44 -0
  306. package/dest/storage/tagging_store/index.d.ts +2 -2
  307. package/dest/storage/tagging_store/index.d.ts.map +1 -1
  308. package/dest/storage/tagging_store/index.js +1 -1
  309. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
  310. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  311. package/dest/storage/tagging_store/sender_tagging_store.d.ts +45 -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 +182 -119
  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 +34 -10
  321. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
  322. package/dest/tagging/get_all_logs_by_tags.js +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 +4 -9
  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 +5 -7
  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 +41 -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 +106 -37
  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 +711 -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 +314 -214
  394. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +935 -263
  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 +47 -25
  399. package/src/entrypoints/client/bundle/index.ts +3 -0
  400. package/src/entrypoints/client/bundle/utils.ts +41 -9
  401. package/src/entrypoints/client/lazy/index.ts +3 -0
  402. package/src/entrypoints/client/lazy/utils.ts +41 -9
  403. package/src/entrypoints/client/store.ts +38 -0
  404. package/src/entrypoints/pxe_creation_options.ts +21 -1
  405. package/src/entrypoints/server/index.ts +8 -2
  406. package/src/entrypoints/server/store.ts +47 -0
  407. package/src/entrypoints/server/utils.ts +52 -21
  408. package/src/error_enriching.ts +27 -11
  409. package/src/events/event_service.ts +69 -21
  410. package/src/events/private_event_filter_validator.ts +21 -1
  411. package/src/hooks/authorize_utility_call.ts +44 -0
  412. package/src/hooks/execution_hooks.ts +68 -0
  413. package/src/hooks/index.ts +13 -0
  414. package/src/hooks/resolve_custom_request.ts +24 -0
  415. package/src/hooks/resolve_tagging_secret_strategy.ts +60 -0
  416. package/src/logs/log_service.ts +231 -156
  417. package/src/messages/tx_resolver_service.ts +69 -0
  418. package/src/notes/note_service.ts +121 -86
  419. package/src/notes_filter.ts +24 -0
  420. package/src/oracle_version.ts +20 -10
  421. package/src/private_kernel/batch_planner.ts +169 -0
  422. package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
  423. package/src/private_kernel/hints/index.ts +1 -1
  424. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +176 -119
  425. package/src/private_kernel/hints/test_utils.ts +318 -0
  426. package/src/private_kernel/private_kernel_execution_prover.ts +251 -116
  427. package/src/private_kernel/private_kernel_oracle.ts +65 -36
  428. package/src/pxe.ts +702 -298
  429. package/src/storage/allowed_scopes.ts +14 -0
  430. package/src/storage/anchor_block_store/anchor_block_store.ts +9 -7
  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 +44 -26
  449. package/src/storage/capsule_store/index.ts +1 -0
  450. package/src/storage/contract_store/contract_store.ts +240 -169
  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 +234 -191
  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 +52 -54
  463. package/src/storage/private_event_store/stored_private_event.ts +1 -1
  464. package/src/storage/store_identity.ts +72 -0
  465. package/src/storage/tagging_store/index.ts +1 -1
  466. package/src/storage/tagging_store/recipient_tagging_store.ts +5 -5
  467. package/src/storage/tagging_store/sender_tagging_store.ts +235 -141
  468. package/src/storage/tagging_store/tagging_secret_sources_store.ts +138 -0
  469. package/src/tagging/constants.ts +19 -9
  470. package/src/tagging/get_all_logs_by_tags.ts +87 -35
  471. package/src/tagging/index.ts +5 -4
  472. package/src/tagging/persist_sender_tagging_index_ranges.ts +57 -0
  473. package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +301 -0
  474. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +4 -4
  475. package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
  476. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +52 -17
  477. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +44 -14
  478. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +31 -27
  479. package/dest/contract_function_simulator/oracle/oracle.d.ts +0 -60
  480. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +0 -1
  481. package/dest/contract_function_simulator/oracle/oracle.js +0 -356
  482. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +0 -6
  483. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +0 -1
  484. package/dest/contract_function_simulator/proxied_contract_data_source.js +0 -80
  485. package/dest/contract_sync/index.d.ts +0 -23
  486. package/dest/contract_sync/index.d.ts.map +0 -1
  487. package/dest/contract_sync/index.js +0 -54
  488. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
  489. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
  490. package/dest/storage/tagging_store/sender_address_book_store.d.ts +0 -14
  491. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +0 -1
  492. package/dest/storage/tagging_store/sender_address_book_store.js +0 -36
  493. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +0 -15
  494. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +0 -1
  495. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +0 -99
  496. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +0 -15
  497. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +0 -1
  498. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +0 -32
  499. package/src/contract_function_simulator/oracle/oracle.ts +0 -630
  500. package/src/contract_function_simulator/proxied_contract_data_source.ts +0 -83
  501. package/src/contract_sync/index.ts +0 -98
  502. package/src/storage/tagging_store/sender_address_book_store.ts +0 -48
  503. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -143
  504. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -49
@@ -2,23 +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
- GeneratorIndex,
11
7
  L2_GAS_PER_CONTRACT_CLASS_LOG,
8
+ L2_GAS_PER_L2_TO_L1_MSG,
9
+ L2_GAS_PER_NOTE_HASH,
10
+ L2_GAS_PER_NULLIFIER,
12
11
  L2_GAS_PER_PRIVATE_LOG,
13
12
  MAX_CONTRACT_CLASS_LOGS_PER_TX,
14
13
  MAX_ENQUEUED_CALLS_PER_TX,
15
14
  MAX_L2_TO_L1_MSGS_PER_TX,
16
15
  MAX_NOTE_HASHES_PER_TX,
16
+ MAX_NOTE_HASH_READ_REQUESTS_PER_TX,
17
17
  MAX_NULLIFIERS_PER_TX,
18
+ MAX_NULLIFIER_READ_REQUESTS_PER_TX,
18
19
  MAX_PRIVATE_LOGS_PER_TX,
20
+ MAX_TX_LIFETIME,
21
+ PRIVATE_TX_L2_GAS_OVERHEAD,
22
+ PUBLIC_DATA_WRITE_LENGTH,
23
+ PUBLIC_TX_L2_GAS_OVERHEAD,
24
+ TX_DA_GAS_OVERHEAD,
19
25
  } from '@aztec/constants';
20
26
  import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection';
21
- import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
22
27
  import { Fr } from '@aztec/foundation/curves/bn254';
23
28
  import { type Logger, createLogger } from '@aztec/foundation/log';
24
29
  import { Timer } from '@aztec/foundation/timer';
@@ -38,117 +43,204 @@ import type { FunctionCall } from '@aztec/stdlib/abi';
38
43
  import { FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
39
44
  import type { AuthWitness } from '@aztec/stdlib/auth-witness';
40
45
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
46
+ import type { BlockParameter, L2TipsProvider } from '@aztec/stdlib/block';
41
47
  import { Gas } from '@aztec/stdlib/gas';
42
48
  import {
43
49
  computeNoteHashNonce,
44
50
  computeProtocolNullifier,
51
+ computeSiloedPrivateLogFirstField,
45
52
  computeUniqueNoteHash,
46
53
  siloNoteHash,
47
54
  siloNullifier,
48
55
  } from '@aztec/stdlib/hash';
49
56
  import type { AztecNode } from '@aztec/stdlib/interfaces/server';
50
57
  import {
58
+ ClaimedLengthArray,
51
59
  PartialPrivateTailPublicInputsForPublic,
52
60
  PartialPrivateTailPublicInputsForRollup,
53
61
  type PrivateExecutionStep,
54
62
  type PrivateKernelExecutionProofOutput,
55
63
  PrivateKernelTailCircuitPublicInputs,
64
+ PrivateLogData,
56
65
  PrivateToPublicAccumulatedData,
57
66
  PrivateToRollupAccumulatedData,
58
67
  PublicCallRequest,
68
+ ReadRequestActionEnum,
59
69
  ScopedLogHash,
70
+ ScopedNoteHash,
71
+ ScopedNullifier,
72
+ ScopedReadRequest,
73
+ buildTransientDataHints,
74
+ getNoteHashReadRequestResetActions,
75
+ getNullifierReadRequestResetActions,
60
76
  } from '@aztec/stdlib/kernel';
61
77
  import { PrivateLog } from '@aztec/stdlib/logs';
62
78
  import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
63
79
  import { ChonkProof } from '@aztec/stdlib/proofs';
80
+ import { MerkleTreeId } from '@aztec/stdlib/trees';
64
81
  import {
65
82
  BlockHeader,
66
83
  CallContext,
84
+ type ContractOverrides,
67
85
  HashedValues,
86
+ type OffchainEffect,
68
87
  PrivateExecutionResult,
69
88
  TxConstantData,
70
89
  TxExecutionRequest,
71
90
  collectNested,
91
+ collectNoteHashNullifierCounterMap,
72
92
  getFinalMinRevertibleSideEffectCounter,
73
93
  } from '@aztec/stdlib/tx';
74
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';
75
99
  import type { AddressStore } from '../storage/address_store/address_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 senderTaggingStore: SenderTaggingStore,
105
- private recipientTaggingStore: RecipientTaggingStore,
106
- private senderAddressBookStore: SenderAddressBookStore,
107
- private capsuleStore: CapsuleStore,
108
- private privateEventStore: PrivateEventStore,
109
- private simulator: CircuitSimulator,
110
- ) {
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;
111
201
  this.log = createLogger('simulator');
112
202
  }
113
203
 
114
204
  /**
115
205
  * Runs a private function.
116
206
  * @param request - The transaction request.
117
- * @param entryPointArtifact - The artifact of the entry point function.
118
- * @param contractAddress - The address of the contract (should match request.origin)
119
- * @param msgSender - The address calling the function. This can be replaced to simulate a call from another contract
120
- * or a specific account.
121
- * @param anchorBlockHeader - The block header to use as base state for this run.
122
- * @param senderForTags - The address that is used as a tagging sender when emitting private logs. Returned from
123
- * the `privateGetSenderForTags` oracle.
124
- * @param scopes - The accounts whose notes we can access in this call. Currently optional and will default to all.
125
- * @param jobId - The job ID for staged writes.
126
- * @returns The result of the execution.
127
207
  */
128
208
  public async run(
129
209
  request: TxExecutionRequest,
130
- contractAddress: AztecAddress,
131
- selector: FunctionSelector,
132
- msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE),
133
- anchorBlockHeader: BlockHeader,
134
- senderForTags: AztecAddress | undefined,
135
- scopes: AztecAddress[] | undefined,
136
- jobId: string,
210
+ {
211
+ msgSender = AztecAddress.NULL_MSG_SENDER,
212
+ anchorBlockHeader,
213
+ senderForTags,
214
+ scopes,
215
+ jobId,
216
+ }: ContractSimulatorRunOpts,
137
217
  ): Promise<PrivateExecutionResult> {
138
218
  const simulatorSetupTimer = new Timer();
139
219
 
140
- const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(contractAddress, selector);
220
+ const contractAddress = request.origin;
141
221
 
142
- if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
143
- throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
144
- }
222
+ const anchoredContractData = new AnchoredContractData(
223
+ this.contractStore,
224
+ this.contractClassService,
225
+ anchorBlockHeader,
226
+ this.overrides,
227
+ );
145
228
 
146
- if (request.origin !== contractAddress) {
147
- this.log.warn(
148
- `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(...).`,
149
237
  );
150
238
  }
151
239
 
240
+ if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
241
+ throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
242
+ }
243
+
152
244
  // reserve the first side effect for the tx hash (inserted by the private kernel)
153
245
  const startSideEffectCounter = 2;
154
246
 
@@ -163,37 +255,48 @@ export class ContractFunctionSimulator {
163
255
  const noteCache = new ExecutionNoteCache(protocolNullifier);
164
256
  const taggingIndexCache = new ExecutionTaggingIndexCache();
165
257
 
166
- const privateExecutionOracle = new PrivateExecutionOracle(
167
- request.firstCallArgsHash,
168
- 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,
169
267
  callContext,
170
268
  anchorBlockHeader,
171
- async call => {
172
- await this.runUtility(call, [], anchorBlockHeader, scopes, jobId);
269
+ utilityExecutor: async (call, execScopes) => {
270
+ await this.runUtility(call, [], anchorBlockHeader, execScopes, jobId);
173
271
  },
174
- request.authWitnesses,
175
- request.capsules,
176
- HashedValuesCache.create(request.argsOfCalls),
272
+ authWitnesses: request.authWitnesses,
273
+ capsules: request.capsules,
274
+ executionCache: HashedValuesCache.create(request.argsOfCalls),
177
275
  noteCache,
178
276
  taggingIndexCache,
179
- this.contractStore,
180
- this.noteStore,
181
- this.keyStore,
182
- this.addressStore,
183
- this.aztecNode,
184
- this.senderTaggingStore,
185
- this.recipientTaggingStore,
186
- this.senderAddressBookStore,
187
- this.capsuleStore,
188
- 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,
189
290
  jobId,
190
- 0, // totalPublicArgsCount
191
- startSideEffectCounter,
192
- undefined, // log
291
+ totalPublicCalldataCount: 0,
292
+ sideEffectCounter: startSideEffectCounter,
193
293
  scopes,
194
294
  senderForTags,
195
- this.simulator,
196
- );
295
+ simulator: this.simulator,
296
+ l2TipsStore: this.l2TipsStore,
297
+ hooks: this.hooks,
298
+ transientArrayService,
299
+ });
197
300
 
198
301
  const setupTime = simulatorSetupTimer.ms();
199
302
 
@@ -211,8 +314,7 @@ export class ContractFunctionSimulator {
211
314
  );
212
315
  const simulatorTeardownTimer = new Timer();
213
316
 
214
- noteCache.finish();
215
- const firstNullifierHint = noteCache.getNonceGenerator();
317
+ const firstNullifier = noteCache.getNonceGenerator();
216
318
 
217
319
  const publicCallRequests = collectNested([executionResult], r =>
218
320
  r.publicInputs.publicCallRequests
@@ -222,7 +324,7 @@ export class ContractFunctionSimulator {
222
324
  );
223
325
  const publicFunctionsCalldata = await Promise.all(
224
326
  publicCallRequests.map(async r => {
225
- const calldata = await privateExecutionOracle.privateLoadFromExecutionCache(r.calldataHash);
327
+ const calldata = await privateExecutionOracle.getHashPreimage(r.calldataHash);
226
328
  return new HashedValues(calldata, r.calldataHash);
227
329
  }),
228
330
  );
@@ -235,55 +337,80 @@ export class ContractFunctionSimulator {
235
337
  }
236
338
 
237
339
  // Not to be confused with a PrivateCallExecutionResult. This is a superset
238
- // of the PrivateCallExecutionResult, containing also firstNullifierHint
340
+ // of the PrivateCallExecutionResult, containing also firstNullifier
239
341
  // and publicFunctionsCalldata.
240
- return new PrivateExecutionResult(executionResult, firstNullifierHint, publicFunctionsCalldata);
342
+ return new PrivateExecutionResult(executionResult, firstNullifier, publicFunctionsCalldata);
241
343
  } catch (err) {
242
344
  throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
243
345
  }
244
346
  }
245
347
 
246
- // docs:start:execute_utility_function
247
348
  /**
248
349
  * Runs a utility function.
249
350
  * @param call - The function call to execute.
250
- * @param authwits - Authentication witnesses required for the function call.
251
- * @param anchorBlockHeader - The block header to use as base state for this run.
252
- * @param scopes - Optional array of account addresses whose notes can be accessed in this call. Defaults to all
253
- * accounts if not specified.
254
351
  * @returns A return value of the utility function in a form as returned by the simulator (Noir fields)
255
352
  */
256
353
  public async runUtility(
257
354
  call: FunctionCall,
258
355
  authwits: AuthWitness[],
259
356
  anchorBlockHeader: BlockHeader,
260
- scopes: AztecAddress[] | undefined,
357
+ scopes: AztecAddress[],
261
358
  jobId: string,
262
- ): Promise<Fr[]> {
263
- 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
+ }
264
374
 
265
375
  if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
266
376
  throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
267
377
  }
268
378
 
269
- const oracle = new UtilityExecutionOracle(
270
- call.to,
271
- authwits,
272
- [],
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: [],
273
392
  anchorBlockHeader,
274
- this.contractStore,
275
- this.noteStore,
276
- this.keyStore,
277
- this.addressStore,
278
- this.aztecNode,
279
- this.recipientTaggingStore,
280
- this.senderAddressBookStore,
281
- this.capsuleStore,
282
- 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,
283
406
  jobId,
284
- undefined,
285
407
  scopes,
286
- );
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
+ });
287
414
 
288
415
  try {
289
416
  this.log.verbose(`Executing utility function ${entryPointArtifact.name}`, {
@@ -293,7 +420,7 @@ export class ContractFunctionSimulator {
293
420
 
294
421
  const initialWitness = toACVMWitness(0, call.args);
295
422
  const acirExecutionResult = await this.simulator
296
- .executeUserCircuit(initialWitness, entryPointArtifact, new Oracle(oracle).toACIRCallback())
423
+ .executeUserCircuit(initialWitness, entryPointArtifact, buildACIRCallback(oracle))
297
424
  .catch((err: Error) => {
298
425
  err.message = resolveAssertionMessageFromError(err, entryPointArtifact);
299
426
  throw new ExecutionError(
@@ -307,13 +434,15 @@ export class ContractFunctionSimulator {
307
434
  );
308
435
  });
309
436
 
310
- this.log.verbose(`Utility simulation for ${call.to}.${call.selector} completed`);
311
- 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
+ };
312
442
  } catch (err) {
313
443
  throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
314
444
  }
315
445
  }
316
- // docs:end:execute_utility_function
317
446
 
318
447
  /**
319
448
  * Returns the execution statistics collected during the simulator run.
@@ -349,66 +478,82 @@ class OrderedSideEffect<T> {
349
478
  * (allowing state overrides) and is much faster, while still generating a valid
350
479
  * output that can be sent to the node for public simulation
351
480
  * @param privateExecutionResult - The result of the private execution.
352
- * @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.
353
483
  * @param minRevertibleSideEffectCounterOverride - Optional override for the min revertible side effect counter.
354
484
  * Used by TXE to simulate account contract behavior (setting the counter before app execution).
355
485
  * @returns The simulated proving result.
356
486
  */
357
487
  export async function generateSimulatedProvingResult(
358
488
  privateExecutionResult: PrivateExecutionResult,
359
- contractStore: ContractStore,
489
+ debugFunctionNameGetter: (contractAddress: AztecAddress, functionSelector: FunctionSelector) => Promise<string>,
490
+ node: AztecNode,
360
491
  minRevertibleSideEffectCounterOverride?: number,
361
492
  ): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
362
- const siloedNoteHashes: OrderedSideEffect<Fr>[] = [];
363
- const nullifiers: OrderedSideEffect<Fr>[] = [];
364
- const taggedPrivateLogs: OrderedSideEffect<PrivateLog>[] = [];
493
+ const taggedPrivateLogs: OrderedSideEffect<PrivateLogData>[] = [];
365
494
  const l2ToL1Messages: OrderedSideEffect<ScopedL2ToL1Message>[] = [];
366
495
  const contractClassLogsHashes: OrderedSideEffect<ScopedLogHash>[] = [];
367
496
  const publicCallRequests: OrderedSideEffect<PublicCallRequest>[] = [];
368
497
  const executionSteps: PrivateExecutionStep[] = [];
369
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
+
370
508
  let publicTeardownCallRequest;
371
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
+
372
517
  const executions = [privateExecutionResult.entrypoint];
373
518
 
374
519
  while (executions.length !== 0) {
375
520
  const execution = executions.shift()!;
376
521
  executions.unshift(...execution!.nestedExecutionResults);
377
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
+
378
529
  const { contractAddress } = execution.publicInputs.callContext;
379
530
 
380
- const noteHashesFromExecution = await Promise.all(
381
- execution.publicInputs.noteHashes
382
- .getActiveItems()
383
- .filter(noteHash => !noteHash.isEmpty())
384
- .map(
385
- async noteHash =>
386
- new OrderedSideEffect(await siloNoteHash(contractAddress, noteHash.value), noteHash.counter),
387
- ),
388
- );
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
+ }
389
537
 
390
- const nullifiersFromExecution = await Promise.all(
391
- execution.publicInputs.nullifiers
538
+ scopedNoteHashes.push(
539
+ ...execution.publicInputs.noteHashes
392
540
  .getActiveItems()
393
- .map(
394
- async nullifier =>
395
- new OrderedSideEffect(await siloNullifier(contractAddress, nullifier.value), nullifier.counter),
396
- ),
541
+ .filter(nh => !nh.isEmpty())
542
+ .map(nh => nh.scope(contractAddress)),
397
543
  );
544
+ scopedNullifiers.push(...execution.publicInputs.nullifiers.getActiveItems().map(n => n.scope(contractAddress)));
398
545
 
399
- const privateLogsFromExecution = await Promise.all(
400
- execution.publicInputs.privateLogs.getActiveItems().map(async metadata => {
401
- metadata.log.fields[0] = await poseidon2HashWithSeparator(
402
- [contractAddress, metadata.log.fields[0]],
403
- GeneratorIndex.PRIVATE_LOG_FIRST_FIELD,
404
- );
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;