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

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 (488) 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/contract_function_simulator.d.ts +72 -34
  31. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  32. package/dest/contract_function_simulator/contract_function_simulator.js +264 -92
  33. package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
  34. package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
  35. package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
  36. package/dest/contract_function_simulator/execution_note_cache.d.ts +4 -10
  37. package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
  38. package/dest/contract_function_simulator/execution_note_cache.js +8 -28
  39. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -11
  40. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
  41. package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -15
  42. package/dest/contract_function_simulator/index.d.ts +26 -5
  43. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  44. package/dest/contract_function_simulator/index.js +12 -3
  45. package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts +29 -0
  46. package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts.map +1 -0
  47. package/dest/contract_function_simulator/noir-structs/bounded_vec.js +30 -0
  48. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts +9 -0
  49. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts.map +1 -0
  50. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.js +1 -0
  51. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts +7 -0
  52. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts.map +1 -0
  53. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.js +1 -0
  54. package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts +37 -0
  55. package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts.map +1 -0
  56. package/dest/contract_function_simulator/noir-structs/ephemeral_array.js +59 -0
  57. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +3 -4
  58. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  59. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +9 -10
  60. package/dest/contract_function_simulator/noir-structs/fact.d.ts +16 -0
  61. package/dest/contract_function_simulator/noir-structs/fact.d.ts.map +1 -0
  62. package/dest/contract_function_simulator/noir-structs/fact.js +6 -0
  63. package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts +27 -0
  64. package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts.map +1 -0
  65. package/dest/contract_function_simulator/noir-structs/fact_collection.js +31 -0
  66. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +19 -10
  67. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -1
  68. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +12 -24
  69. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +11 -9
  70. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
  71. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +2 -63
  72. package/dest/contract_function_simulator/noir-structs/note_data.d.ts +27 -0
  73. package/dest/contract_function_simulator/noir-structs/note_data.d.ts.map +1 -0
  74. package/dest/contract_function_simulator/noir-structs/note_data.js +3 -0
  75. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +3 -5
  76. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  77. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +8 -12
  78. package/dest/contract_function_simulator/noir-structs/option.d.ts +59 -0
  79. package/dest/contract_function_simulator/noir-structs/option.d.ts.map +1 -0
  80. package/dest/contract_function_simulator/noir-structs/option.js +67 -0
  81. package/dest/contract_function_simulator/noir-structs/origin_block.d.ts +11 -0
  82. package/dest/contract_function_simulator/noir-structs/origin_block.d.ts.map +1 -0
  83. package/dest/contract_function_simulator/noir-structs/origin_block.js +5 -0
  84. package/dest/contract_function_simulator/noir-structs/pending_tagged_log.d.ts +11 -0
  85. package/dest/contract_function_simulator/noir-structs/pending_tagged_log.d.ts.map +1 -0
  86. package/dest/contract_function_simulator/noir-structs/pending_tagged_log.js +4 -0
  87. package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts +8 -0
  88. package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts.map +1 -0
  89. package/dest/contract_function_simulator/noir-structs/provided_secret.js +1 -0
  90. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts +28 -0
  91. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts.map +1 -0
  92. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.js +43 -0
  93. package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts +21 -0
  94. package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts.map +1 -0
  95. package/dest/contract_function_simulator/noir-structs/resolved_tx.js +50 -0
  96. package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts +14 -0
  97. package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts.map +1 -0
  98. package/dest/contract_function_simulator/noir-structs/tx_effect_data.js +5 -0
  99. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +6 -11
  100. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
  101. package/dest/contract_function_simulator/noir-structs/utility_context.js +1 -20
  102. package/dest/contract_function_simulator/oracle/acir_callback.d.ts +21 -0
  103. package/dest/contract_function_simulator/oracle/acir_callback.d.ts.map +1 -0
  104. package/dest/contract_function_simulator/oracle/acir_callback.js +115 -0
  105. package/dest/contract_function_simulator/oracle/index.d.ts +2 -13
  106. package/dest/contract_function_simulator/oracle/index.d.ts.map +1 -1
  107. package/dest/contract_function_simulator/oracle/index.js +1 -1
  108. package/dest/contract_function_simulator/oracle/interfaces.d.ts +15 -98
  109. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  110. package/dest/contract_function_simulator/oracle/interfaces.js +2 -2
  111. package/dest/contract_function_simulator/oracle/legacy_oracle_registry.d.ts +39 -0
  112. package/dest/contract_function_simulator/oracle/legacy_oracle_registry.d.ts.map +1 -0
  113. package/dest/contract_function_simulator/oracle/legacy_oracle_registry.js +74 -0
  114. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -14
  115. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
  116. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.js +1 -24
  117. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +2 -2
  118. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
  119. package/dest/contract_function_simulator/oracle/note_packing_utils.js +2 -2
  120. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts +136 -0
  121. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -0
  122. package/dest/contract_function_simulator/oracle/oracle_registry.js +989 -0
  123. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +222 -0
  124. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts.map +1 -0
  125. package/dest/contract_function_simulator/oracle/oracle_type_mappings.js +1243 -0
  126. package/dest/contract_function_simulator/oracle/private_execution.d.ts +1 -1
  127. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  128. package/dest/contract_function_simulator/oracle/private_execution.js +7 -6
  129. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +82 -96
  130. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  131. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +258 -114
  132. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +192 -81
  133. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  134. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +574 -182
  135. package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
  136. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
  137. package/dest/contract_function_simulator/pick_notes.js +20 -3
  138. package/dest/contract_function_simulator/transient_array_service.d.ts +31 -0
  139. package/dest/contract_function_simulator/transient_array_service.d.ts.map +1 -0
  140. package/dest/contract_function_simulator/transient_array_service.js +62 -0
  141. package/dest/contract_logging.d.ts +27 -0
  142. package/dest/contract_logging.d.ts.map +1 -0
  143. package/dest/contract_logging.js +38 -0
  144. package/dest/debug/pxe_debug_utils.d.ts +14 -15
  145. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  146. package/dest/debug/pxe_debug_utils.js +16 -21
  147. package/dest/entrypoints/client/bundle/index.d.ts +3 -1
  148. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  149. package/dest/entrypoints/client/bundle/index.js +2 -0
  150. package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
  151. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  152. package/dest/entrypoints/client/bundle/utils.js +28 -7
  153. package/dest/entrypoints/client/lazy/index.d.ts +3 -1
  154. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  155. package/dest/entrypoints/client/lazy/index.js +2 -0
  156. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  157. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  158. package/dest/entrypoints/client/lazy/utils.js +28 -7
  159. package/dest/entrypoints/pxe_creation_options.d.ts +16 -2
  160. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  161. package/dest/entrypoints/pxe_creation_options.js +3 -1
  162. package/dest/entrypoints/server/index.d.ts +7 -3
  163. package/dest/entrypoints/server/index.d.ts.map +1 -1
  164. package/dest/entrypoints/server/index.js +5 -2
  165. package/dest/entrypoints/server/utils.d.ts +4 -3
  166. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  167. package/dest/entrypoints/server/utils.js +28 -6
  168. package/dest/error_enriching.d.ts +5 -3
  169. package/dest/error_enriching.d.ts.map +1 -1
  170. package/dest/error_enriching.js +13 -11
  171. package/dest/events/event_service.d.ts +15 -6
  172. package/dest/events/event_service.d.ts.map +1 -1
  173. package/dest/events/event_service.js +44 -11
  174. package/dest/events/private_event_filter_validator.d.ts +3 -2
  175. package/dest/events/private_event_filter_validator.d.ts.map +1 -1
  176. package/dest/events/private_event_filter_validator.js +15 -0
  177. package/dest/hooks/authorize_utility_call.d.ts +41 -0
  178. package/dest/hooks/authorize_utility_call.d.ts.map +1 -0
  179. package/dest/hooks/authorize_utility_call.js +4 -0
  180. package/dest/hooks/execution_hooks.d.ts +62 -0
  181. package/dest/hooks/execution_hooks.d.ts.map +1 -0
  182. package/dest/hooks/execution_hooks.js +9 -0
  183. package/dest/hooks/index.d.ts +5 -0
  184. package/dest/hooks/index.d.ts.map +1 -0
  185. package/dest/hooks/index.js +1 -0
  186. package/dest/hooks/resolve_custom_request.d.ts +23 -0
  187. package/dest/hooks/resolve_custom_request.d.ts.map +1 -0
  188. package/dest/hooks/resolve_custom_request.js +3 -0
  189. package/dest/hooks/resolve_tagging_secret_strategy.d.ts +48 -0
  190. package/dest/hooks/resolve_tagging_secret_strategy.d.ts.map +1 -0
  191. package/dest/hooks/resolve_tagging_secret_strategy.js +3 -0
  192. package/dest/logs/log_service.d.ts +13 -11
  193. package/dest/logs/log_service.d.ts.map +1 -1
  194. package/dest/logs/log_service.js +189 -91
  195. package/dest/messages/tx_resolver_service.d.ts +17 -0
  196. package/dest/messages/tx_resolver_service.d.ts.map +1 -0
  197. package/dest/messages/tx_resolver_service.js +55 -0
  198. package/dest/notes/note_service.d.ts +27 -5
  199. package/dest/notes/note_service.d.ts.map +1 -1
  200. package/dest/notes/note_service.js +83 -58
  201. package/dest/notes_filter.d.ts +24 -0
  202. package/dest/notes_filter.d.ts.map +1 -0
  203. package/dest/notes_filter.js +4 -0
  204. package/dest/oracle_version.d.ts +4 -3
  205. package/dest/oracle_version.d.ts.map +1 -1
  206. package/dest/oracle_version.js +20 -10
  207. package/dest/private_kernel/batch_planner.d.ts +47 -0
  208. package/dest/private_kernel/batch_planner.d.ts.map +1 -0
  209. package/dest/private_kernel/batch_planner.js +104 -0
  210. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
  211. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
  212. package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
  213. package/dest/private_kernel/hints/index.d.ts +1 -1
  214. package/dest/private_kernel/hints/index.js +1 -1
  215. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
  216. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
  217. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +135 -70
  218. package/dest/private_kernel/hints/test_utils.d.ts +122 -0
  219. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
  220. package/dest/private_kernel/hints/test_utils.js +202 -0
  221. package/dest/private_kernel/private_kernel_execution_prover.d.ts +6 -2
  222. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  223. package/dest/private_kernel/private_kernel_execution_prover.js +208 -86
  224. package/dest/private_kernel/private_kernel_oracle.d.ts +17 -11
  225. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  226. package/dest/private_kernel/private_kernel_oracle.js +47 -29
  227. package/dest/pxe.d.ts +228 -66
  228. package/dest/pxe.d.ts.map +1 -1
  229. package/dest/pxe.js +407 -227
  230. package/dest/storage/allowed_scopes.d.ts +6 -0
  231. package/dest/storage/allowed_scopes.d.ts.map +1 -0
  232. package/dest/storage/allowed_scopes.js +7 -0
  233. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -6
  234. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
  235. package/dest/storage/anchor_block_store/anchor_block_store.js +9 -7
  236. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts +42 -0
  237. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts.map +1 -0
  238. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.js +93 -0
  239. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts +15 -0
  240. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts.map +1 -0
  241. package/dest/storage/backwards_compatibility_tests/schema_tests.js +647 -0
  242. package/dest/storage/backwards_compatibility_tests/store_spy.d.ts +19 -0
  243. package/dest/storage/backwards_compatibility_tests/store_spy.d.ts.map +1 -0
  244. package/dest/storage/backwards_compatibility_tests/store_spy.js +63 -0
  245. package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
  246. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  247. package/dest/storage/capsule_store/capsule_service.js +47 -0
  248. package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
  249. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  250. package/dest/storage/capsule_store/capsule_store.js +36 -28
  251. package/dest/storage/capsule_store/index.d.ts +2 -1
  252. package/dest/storage/capsule_store/index.d.ts.map +1 -1
  253. package/dest/storage/capsule_store/index.js +1 -0
  254. package/dest/storage/contract_store/contract_store.d.ts +63 -33
  255. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  256. package/dest/storage/contract_store/contract_store.js +182 -134
  257. package/dest/storage/fact_store/fact_service.d.ts +22 -0
  258. package/dest/storage/fact_store/fact_service.d.ts.map +1 -0
  259. package/dest/storage/fact_store/fact_service.js +45 -0
  260. package/dest/storage/fact_store/fact_store.d.ts +95 -0
  261. package/dest/storage/fact_store/fact_store.d.ts.map +1 -0
  262. package/dest/storage/fact_store/fact_store.js +408 -0
  263. package/dest/storage/fact_store/fact_store_keys.d.ts +34 -0
  264. package/dest/storage/fact_store/fact_store_keys.d.ts.map +1 -0
  265. package/dest/storage/fact_store/fact_store_keys.js +50 -0
  266. package/dest/storage/fact_store/index.d.ts +6 -0
  267. package/dest/storage/fact_store/index.d.ts.map +1 -0
  268. package/dest/storage/fact_store/index.js +4 -0
  269. package/dest/storage/fact_store/origin_state.d.ts +57 -0
  270. package/dest/storage/fact_store/origin_state.d.ts.map +1 -0
  271. package/dest/storage/fact_store/origin_state.js +53 -0
  272. package/dest/storage/fact_store/stored_fact.d.ts +32 -0
  273. package/dest/storage/fact_store/stored_fact.d.ts.map +1 -0
  274. package/dest/storage/fact_store/stored_fact.js +64 -0
  275. package/dest/storage/index.d.ts +3 -2
  276. package/dest/storage/index.d.ts.map +1 -1
  277. package/dest/storage/index.js +2 -1
  278. package/dest/storage/metadata.d.ts +2 -2
  279. package/dest/storage/metadata.d.ts.map +1 -1
  280. package/dest/storage/metadata.js +1 -1
  281. package/dest/storage/note_store/note_store.d.ts +44 -35
  282. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  283. package/dest/storage/note_store/note_store.js +202 -171
  284. package/dest/storage/note_store/stored_note.d.ts +3 -8
  285. package/dest/storage/note_store/stored_note.d.ts.map +1 -1
  286. package/dest/storage/note_store/stored_note.js +4 -20
  287. package/dest/storage/open_pxe_stores.d.ts +35 -0
  288. package/dest/storage/open_pxe_stores.d.ts.map +1 -0
  289. package/dest/storage/open_pxe_stores.js +29 -0
  290. package/dest/storage/private_event_store/private_event_store.d.ts +13 -16
  291. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  292. package/dest/storage/private_event_store/private_event_store.js +43 -43
  293. package/dest/storage/private_event_store/stored_private_event.js +1 -1
  294. package/dest/storage/tagging_store/index.d.ts +2 -2
  295. package/dest/storage/tagging_store/index.d.ts.map +1 -1
  296. package/dest/storage/tagging_store/index.js +1 -1
  297. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
  298. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  299. package/dest/storage/tagging_store/sender_tagging_store.d.ts +29 -28
  300. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  301. package/dest/storage/tagging_store/sender_tagging_store.js +141 -115
  302. package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts +51 -0
  303. package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts.map +1 -0
  304. package/dest/storage/tagging_store/tagging_secret_sources_store.js +105 -0
  305. package/dest/tagging/constants.d.ts +2 -2
  306. package/dest/tagging/constants.d.ts.map +1 -1
  307. package/dest/tagging/constants.js +5 -8
  308. package/dest/tagging/get_all_logs_by_tags.d.ts +34 -10
  309. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
  310. package/dest/tagging/get_all_logs_by_tags.js +45 -32
  311. package/dest/tagging/index.d.ts +6 -5
  312. package/dest/tagging/index.d.ts.map +1 -1
  313. package/dest/tagging/index.js +4 -3
  314. package/dest/tagging/persist_sender_tagging_index_ranges.d.ts +29 -0
  315. package/dest/tagging/persist_sender_tagging_index_ranges.d.ts.map +1 -0
  316. package/dest/tagging/persist_sender_tagging_index_ranges.js +42 -0
  317. package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +69 -0
  318. package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts.map +1 -0
  319. package/dest/tagging/recipient_sync/sync_tagged_private_logs.js +203 -0
  320. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +3 -3
  321. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -1
  322. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
  323. package/dest/tagging/reconcile_tagging_index_ranges.d.ts +36 -0
  324. package/dest/tagging/reconcile_tagging_index_ranges.d.ts.map +1 -0
  325. package/dest/tagging/reconcile_tagging_index_ranges.js +74 -0
  326. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -9
  327. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  328. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +32 -14
  329. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +13 -7
  330. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  331. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +41 -10
  332. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -7
  333. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  334. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +37 -25
  335. package/package.json +29 -17
  336. package/src/bin/check_oracle_version.ts +51 -133
  337. package/src/bin/index.ts +5 -0
  338. package/src/bin/oracle_version_helpers.ts +311 -0
  339. package/src/block_synchronizer/block_stream_source.ts +42 -0
  340. package/src/block_synchronizer/block_synchronizer.ts +106 -37
  341. package/src/config/index.ts +16 -9
  342. package/src/config/package_info.ts +1 -1
  343. package/src/contract/contract_class_service.ts +83 -0
  344. package/src/contract/contract_sync_service.ts +176 -0
  345. package/src/contract/helpers.ts +35 -0
  346. package/src/contract_function_simulator/anchored_contract_data.ts +74 -0
  347. package/src/contract_function_simulator/contract_function_simulator.ts +465 -156
  348. package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
  349. package/src/contract_function_simulator/execution_note_cache.ts +8 -29
  350. package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -18
  351. package/src/contract_function_simulator/index.ts +69 -4
  352. package/src/contract_function_simulator/noir-structs/bounded_vec.ts +43 -0
  353. package/src/contract_function_simulator/noir-structs/contract_class_log_data.ts +9 -0
  354. package/src/contract_function_simulator/noir-structs/embedded_curve_point.ts +4 -0
  355. package/src/contract_function_simulator/noir-structs/ephemeral_array.ts +66 -0
  356. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +10 -9
  357. package/src/contract_function_simulator/noir-structs/fact.ts +13 -0
  358. package/src/contract_function_simulator/noir-structs/fact_collection.ts +64 -0
  359. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +27 -20
  360. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +14 -64
  361. package/src/contract_function_simulator/noir-structs/note_data.ts +27 -0
  362. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +6 -11
  363. package/src/contract_function_simulator/noir-structs/option.ts +75 -0
  364. package/src/contract_function_simulator/noir-structs/origin_block.ts +8 -0
  365. package/src/contract_function_simulator/noir-structs/pending_tagged_log.ts +12 -0
  366. package/src/contract_function_simulator/noir-structs/provided_secret.ts +5 -0
  367. package/src/contract_function_simulator/noir-structs/resolved_tagging_strategy.ts +58 -0
  368. package/src/contract_function_simulator/noir-structs/resolved_tx.ts +53 -0
  369. package/src/contract_function_simulator/noir-structs/tx_effect_data.ts +15 -0
  370. package/src/contract_function_simulator/noir-structs/utility_context.ts +5 -17
  371. package/src/contract_function_simulator/oracle/acir_callback.ts +154 -0
  372. package/src/contract_function_simulator/oracle/index.ts +1 -15
  373. package/src/contract_function_simulator/oracle/interfaces.ts +11 -176
  374. package/src/contract_function_simulator/oracle/legacy_oracle_registry.ts +120 -0
  375. package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +6 -21
  376. package/src/contract_function_simulator/oracle/note_packing_utils.ts +3 -3
  377. package/src/contract_function_simulator/oracle/oracle_registry.ts +689 -0
  378. package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +964 -0
  379. package/src/contract_function_simulator/oracle/private_execution.ts +6 -7
  380. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +314 -214
  381. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +882 -258
  382. package/src/contract_function_simulator/pick_notes.ts +22 -3
  383. package/src/contract_function_simulator/transient_array_service.ts +91 -0
  384. package/src/contract_logging.ts +52 -0
  385. package/src/debug/pxe_debug_utils.ts +47 -25
  386. package/src/entrypoints/client/bundle/index.ts +2 -0
  387. package/src/entrypoints/client/bundle/utils.ts +28 -8
  388. package/src/entrypoints/client/lazy/index.ts +2 -0
  389. package/src/entrypoints/client/lazy/utils.ts +28 -8
  390. package/src/entrypoints/pxe_creation_options.ts +21 -1
  391. package/src/entrypoints/server/index.ts +7 -2
  392. package/src/entrypoints/server/utils.ts +31 -14
  393. package/src/error_enriching.ts +27 -11
  394. package/src/events/event_service.ts +69 -21
  395. package/src/events/private_event_filter_validator.ts +21 -1
  396. package/src/hooks/authorize_utility_call.ts +44 -0
  397. package/src/hooks/execution_hooks.ts +68 -0
  398. package/src/hooks/index.ts +12 -0
  399. package/src/hooks/resolve_custom_request.ts +24 -0
  400. package/src/hooks/resolve_tagging_secret_strategy.ts +57 -0
  401. package/src/logs/log_service.ts +227 -156
  402. package/src/messages/tx_resolver_service.ts +69 -0
  403. package/src/notes/note_service.ts +120 -85
  404. package/src/notes_filter.ts +24 -0
  405. package/src/oracle_version.ts +20 -10
  406. package/src/private_kernel/batch_planner.ts +168 -0
  407. package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
  408. package/src/private_kernel/hints/index.ts +1 -1
  409. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +176 -119
  410. package/src/private_kernel/hints/test_utils.ts +318 -0
  411. package/src/private_kernel/private_kernel_execution_prover.ts +341 -120
  412. package/src/private_kernel/private_kernel_oracle.ts +65 -36
  413. package/src/pxe.ts +699 -298
  414. package/src/storage/allowed_scopes.ts +14 -0
  415. package/src/storage/anchor_block_store/anchor_block_store.ts +9 -7
  416. package/src/storage/backwards_compatibility_tests/__snapshots__/AddressStore.json +22 -0
  417. package/src/storage/backwards_compatibility_tests/__snapshots__/AnchorBlockStore.json +3 -0
  418. package/src/storage/backwards_compatibility_tests/__snapshots__/CapsuleStore.json +16 -0
  419. package/src/storage/backwards_compatibility_tests/__snapshots__/ContractStore.json +28 -0
  420. package/src/storage/backwards_compatibility_tests/__snapshots__/FactStore.json +40 -0
  421. package/src/storage/backwards_compatibility_tests/__snapshots__/KeyStore.json +52 -0
  422. package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +40 -0
  423. package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +56 -0
  424. package/src/storage/backwards_compatibility_tests/__snapshots__/PrivateEventStore.json +44 -0
  425. package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +18 -0
  426. package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +22 -0
  427. package/src/storage/backwards_compatibility_tests/__snapshots__/TaggingSecretSourcesStore.json +30 -0
  428. package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +117 -0
  429. package/src/storage/backwards_compatibility_tests/kv_store_snapshot.ts +122 -0
  430. package/src/storage/backwards_compatibility_tests/schema_tests.ts +774 -0
  431. package/src/storage/backwards_compatibility_tests/store_spy.ts +73 -0
  432. package/src/storage/capsule_store/capsule_service.ts +85 -0
  433. package/src/storage/capsule_store/capsule_store.ts +44 -26
  434. package/src/storage/capsule_store/index.ts +1 -0
  435. package/src/storage/contract_store/contract_store.ts +240 -169
  436. package/src/storage/fact_store/fact_service.ts +69 -0
  437. package/src/storage/fact_store/fact_store.ts +487 -0
  438. package/src/storage/fact_store/fact_store_keys.ts +75 -0
  439. package/src/storage/fact_store/index.ts +14 -0
  440. package/src/storage/fact_store/origin_state.ts +75 -0
  441. package/src/storage/fact_store/stored_fact.ts +80 -0
  442. package/src/storage/index.ts +2 -1
  443. package/src/storage/metadata.ts +1 -1
  444. package/src/storage/note_store/note_store.ts +234 -191
  445. package/src/storage/note_store/stored_note.ts +5 -27
  446. package/src/storage/open_pxe_stores.ts +52 -0
  447. package/src/storage/private_event_store/private_event_store.ts +52 -54
  448. package/src/storage/private_event_store/stored_private_event.ts +1 -1
  449. package/src/storage/tagging_store/index.ts +1 -1
  450. package/src/storage/tagging_store/recipient_tagging_store.ts +5 -5
  451. package/src/storage/tagging_store/sender_tagging_store.ts +185 -138
  452. package/src/storage/tagging_store/tagging_secret_sources_store.ts +138 -0
  453. package/src/tagging/constants.ts +6 -8
  454. package/src/tagging/get_all_logs_by_tags.ts +87 -35
  455. package/src/tagging/index.ts +5 -4
  456. package/src/tagging/persist_sender_tagging_index_ranges.ts +57 -0
  457. package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +301 -0
  458. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +4 -4
  459. package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
  460. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +52 -17
  461. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +44 -14
  462. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +27 -27
  463. package/dest/contract_function_simulator/oracle/oracle.d.ts +0 -60
  464. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +0 -1
  465. package/dest/contract_function_simulator/oracle/oracle.js +0 -356
  466. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +0 -6
  467. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +0 -1
  468. package/dest/contract_function_simulator/proxied_contract_data_source.js +0 -80
  469. package/dest/contract_sync/index.d.ts +0 -23
  470. package/dest/contract_sync/index.d.ts.map +0 -1
  471. package/dest/contract_sync/index.js +0 -54
  472. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
  473. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
  474. package/dest/storage/tagging_store/sender_address_book_store.d.ts +0 -14
  475. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +0 -1
  476. package/dest/storage/tagging_store/sender_address_book_store.js +0 -36
  477. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +0 -15
  478. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +0 -1
  479. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +0 -99
  480. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +0 -15
  481. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +0 -1
  482. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +0 -32
  483. package/src/contract_function_simulator/oracle/oracle.ts +0 -630
  484. package/src/contract_function_simulator/proxied_contract_data_source.ts +0 -83
  485. package/src/contract_sync/index.ts +0 -98
  486. package/src/storage/tagging_store/sender_address_book_store.ts +0 -48
  487. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -143
  488. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -49
@@ -1,24 +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
- GeneratorIndex,
11
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,
12
12
  L2_GAS_PER_PRIVATE_LOG,
13
13
  MAX_CONTRACT_CLASS_LOGS_PER_TX,
14
14
  MAX_ENQUEUED_CALLS_PER_TX,
15
15
  MAX_L2_TO_L1_MSGS_PER_TX,
16
16
  MAX_NOTE_HASHES_PER_TX,
17
+ MAX_NOTE_HASH_READ_REQUESTS_PER_TX,
17
18
  MAX_NULLIFIERS_PER_TX,
19
+ MAX_NULLIFIER_READ_REQUESTS_PER_TX,
18
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,
19
26
  } from '@aztec/constants';
20
27
  import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection';
21
- import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
22
28
  import { Fr } from '@aztec/foundation/curves/bn254';
23
29
  import { type Logger, createLogger } from '@aztec/foundation/log';
24
30
  import { Timer } from '@aztec/foundation/timer';
@@ -38,117 +44,204 @@ import type { FunctionCall } from '@aztec/stdlib/abi';
38
44
  import { FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
39
45
  import type { AuthWitness } from '@aztec/stdlib/auth-witness';
40
46
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
47
+ import type { BlockParameter, L2TipsProvider } from '@aztec/stdlib/block';
41
48
  import { Gas } from '@aztec/stdlib/gas';
42
49
  import {
43
50
  computeNoteHashNonce,
44
51
  computeProtocolNullifier,
52
+ computeSiloedPrivateLogFirstField,
45
53
  computeUniqueNoteHash,
46
54
  siloNoteHash,
47
55
  siloNullifier,
48
56
  } from '@aztec/stdlib/hash';
49
57
  import type { AztecNode } from '@aztec/stdlib/interfaces/server';
50
58
  import {
59
+ ClaimedLengthArray,
51
60
  PartialPrivateTailPublicInputsForPublic,
52
61
  PartialPrivateTailPublicInputsForRollup,
53
62
  type PrivateExecutionStep,
54
63
  type PrivateKernelExecutionProofOutput,
55
64
  PrivateKernelTailCircuitPublicInputs,
65
+ PrivateLogData,
56
66
  PrivateToPublicAccumulatedData,
57
67
  PrivateToRollupAccumulatedData,
58
68
  PublicCallRequest,
69
+ ReadRequestActionEnum,
59
70
  ScopedLogHash,
71
+ ScopedNoteHash,
72
+ ScopedNullifier,
73
+ ScopedReadRequest,
74
+ buildTransientDataHints,
75
+ getNoteHashReadRequestResetActions,
76
+ getNullifierReadRequestResetActions,
60
77
  } from '@aztec/stdlib/kernel';
61
78
  import { PrivateLog } from '@aztec/stdlib/logs';
62
79
  import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
63
80
  import { ChonkProof } from '@aztec/stdlib/proofs';
81
+ import { MerkleTreeId } from '@aztec/stdlib/trees';
64
82
  import {
65
83
  BlockHeader,
66
84
  CallContext,
85
+ type ContractOverrides,
67
86
  HashedValues,
87
+ type OffchainEffect,
68
88
  PrivateExecutionResult,
69
89
  TxConstantData,
70
90
  TxExecutionRequest,
71
91
  collectNested,
92
+ collectNoteHashNullifierCounterMap,
72
93
  getFinalMinRevertibleSideEffectCounter,
73
94
  } from '@aztec/stdlib/tx';
74
95
 
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';
75
100
  import type { AddressStore } from '../storage/address_store/address_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';
116
+ import { buildACIRCallback } from './oracle/acir_callback.js';
88
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 senderTaggingStore: SenderTaggingStore,
105
- private recipientTaggingStore: RecipientTaggingStore,
106
- private senderAddressBookStore: SenderAddressBookStore,
107
- private capsuleStore: CapsuleStore,
108
- private privateEventStore: PrivateEventStore,
109
- private simulator: CircuitSimulator,
110
- ) {
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;
111
202
  this.log = createLogger('simulator');
112
203
  }
113
204
 
114
205
  /**
115
206
  * Runs a private function.
116
207
  * @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
208
  */
128
209
  public async run(
129
210
  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,
211
+ {
212
+ msgSender = AztecAddress.NULL_MSG_SENDER,
213
+ anchorBlockHeader,
214
+ senderForTags,
215
+ scopes,
216
+ jobId,
217
+ }: ContractSimulatorRunOpts,
137
218
  ): Promise<PrivateExecutionResult> {
138
219
  const simulatorSetupTimer = new Timer();
139
220
 
140
- const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(contractAddress, selector);
221
+ const contractAddress = request.origin;
141
222
 
142
- if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
143
- throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
144
- }
223
+ const anchoredContractData = new AnchoredContractData(
224
+ this.contractStore,
225
+ this.contractClassService,
226
+ anchorBlockHeader,
227
+ this.overrides,
228
+ );
145
229
 
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}`,
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(...).`,
149
238
  );
150
239
  }
151
240
 
241
+ if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
242
+ throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
243
+ }
244
+
152
245
  // reserve the first side effect for the tx hash (inserted by the private kernel)
153
246
  const startSideEffectCounter = 2;
154
247
 
@@ -163,37 +256,48 @@ export class ContractFunctionSimulator {
163
256
  const noteCache = new ExecutionNoteCache(protocolNullifier);
164
257
  const taggingIndexCache = new ExecutionTaggingIndexCache();
165
258
 
166
- const privateExecutionOracle = new PrivateExecutionOracle(
167
- request.firstCallArgsHash,
168
- 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,
169
268
  callContext,
170
269
  anchorBlockHeader,
171
- async call => {
172
- await this.runUtility(call, [], anchorBlockHeader, scopes, jobId);
270
+ utilityExecutor: async (call, execScopes) => {
271
+ await this.runUtility(call, [], anchorBlockHeader, execScopes, jobId);
173
272
  },
174
- request.authWitnesses,
175
- request.capsules,
176
- HashedValuesCache.create(request.argsOfCalls),
273
+ authWitnesses: request.authWitnesses,
274
+ capsules: request.capsules,
275
+ executionCache: HashedValuesCache.create(request.argsOfCalls),
177
276
  noteCache,
178
277
  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,
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,
189
291
  jobId,
190
- 0, // totalPublicArgsCount
191
- startSideEffectCounter,
192
- undefined, // log
292
+ totalPublicCalldataCount: 0,
293
+ sideEffectCounter: startSideEffectCounter,
193
294
  scopes,
194
295
  senderForTags,
195
- this.simulator,
196
- );
296
+ simulator: this.simulator,
297
+ l2TipsStore: this.l2TipsStore,
298
+ hooks: this.hooks,
299
+ transientArrayService,
300
+ });
197
301
 
198
302
  const setupTime = simulatorSetupTimer.ms();
199
303
 
@@ -211,7 +315,6 @@ export class ContractFunctionSimulator {
211
315
  );
212
316
  const simulatorTeardownTimer = new Timer();
213
317
 
214
- noteCache.finish();
215
318
  const firstNullifierHint = noteCache.getNonceGenerator();
216
319
 
217
320
  const publicCallRequests = collectNested([executionResult], r =>
@@ -222,7 +325,7 @@ export class ContractFunctionSimulator {
222
325
  );
223
326
  const publicFunctionsCalldata = await Promise.all(
224
327
  publicCallRequests.map(async r => {
225
- const calldata = await privateExecutionOracle.privateLoadFromExecutionCache(r.calldataHash);
328
+ const calldata = await privateExecutionOracle.getHashPreimage(r.calldataHash);
226
329
  return new HashedValues(calldata, r.calldataHash);
227
330
  }),
228
331
  );
@@ -243,47 +346,72 @@ export class ContractFunctionSimulator {
243
346
  }
244
347
  }
245
348
 
246
- // docs:start:execute_utility_function
247
349
  /**
248
350
  * Runs a utility function.
249
351
  * @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
352
  * @returns A return value of the utility function in a form as returned by the simulator (Noir fields)
255
353
  */
256
354
  public async runUtility(
257
355
  call: FunctionCall,
258
356
  authwits: AuthWitness[],
259
357
  anchorBlockHeader: BlockHeader,
260
- scopes: AztecAddress[] | undefined,
358
+ scopes: AztecAddress[],
261
359
  jobId: string,
262
- ): Promise<Fr[]> {
263
- const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
360
+ ): Promise<{ result: Fr[]; offchainEffects: OffchainEffect[] }> {
361
+ const anchoredContractData = new AnchoredContractData(
362
+ this.contractStore,
363
+ this.contractClassService,
364
+ anchorBlockHeader,
365
+ this.overrides,
366
+ );
367
+
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
+ }
264
375
 
265
376
  if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
266
377
  throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
267
378
  }
268
379
 
269
- const oracle = new UtilityExecutionOracle(
270
- call.to,
271
- authwits,
272
- [],
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: [],
273
393
  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,
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,
283
407
  jobId,
284
- undefined,
285
408
  scopes,
286
- );
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
+ });
287
415
 
288
416
  try {
289
417
  this.log.verbose(`Executing utility function ${entryPointArtifact.name}`, {
@@ -293,7 +421,7 @@ export class ContractFunctionSimulator {
293
421
 
294
422
  const initialWitness = toACVMWitness(0, call.args);
295
423
  const acirExecutionResult = await this.simulator
296
- .executeUserCircuit(initialWitness, entryPointArtifact, new Oracle(oracle).toACIRCallback())
424
+ .executeUserCircuit(initialWitness, entryPointArtifact, buildACIRCallback(oracle))
297
425
  .catch((err: Error) => {
298
426
  err.message = resolveAssertionMessageFromError(err, entryPointArtifact);
299
427
  throw new ExecutionError(
@@ -307,13 +435,15 @@ export class ContractFunctionSimulator {
307
435
  );
308
436
  });
309
437
 
310
- this.log.verbose(`Utility simulation for ${call.to}.${call.selector} completed`);
311
- 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
+ };
312
443
  } catch (err) {
313
444
  throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
314
445
  }
315
446
  }
316
- // docs:end:execute_utility_function
317
447
 
318
448
  /**
319
449
  * Returns the execution statistics collected during the simulator run.
@@ -349,66 +479,82 @@ class OrderedSideEffect<T> {
349
479
  * (allowing state overrides) and is much faster, while still generating a valid
350
480
  * output that can be sent to the node for public simulation
351
481
  * @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.
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.
353
484
  * @param minRevertibleSideEffectCounterOverride - Optional override for the min revertible side effect counter.
354
485
  * Used by TXE to simulate account contract behavior (setting the counter before app execution).
355
486
  * @returns The simulated proving result.
356
487
  */
357
488
  export async function generateSimulatedProvingResult(
358
489
  privateExecutionResult: PrivateExecutionResult,
359
- contractStore: ContractStore,
490
+ debugFunctionNameGetter: (contractAddress: AztecAddress, functionSelector: FunctionSelector) => Promise<string>,
491
+ node: AztecNode,
360
492
  minRevertibleSideEffectCounterOverride?: number,
361
493
  ): Promise<PrivateKernelExecutionProofOutput<PrivateKernelTailCircuitPublicInputs>> {
362
- const siloedNoteHashes: OrderedSideEffect<Fr>[] = [];
363
- const nullifiers: OrderedSideEffect<Fr>[] = [];
364
- const taggedPrivateLogs: OrderedSideEffect<PrivateLog>[] = [];
494
+ const taggedPrivateLogs: OrderedSideEffect<PrivateLogData>[] = [];
365
495
  const l2ToL1Messages: OrderedSideEffect<ScopedL2ToL1Message>[] = [];
366
496
  const contractClassLogsHashes: OrderedSideEffect<ScopedLogHash>[] = [];
367
497
  const publicCallRequests: OrderedSideEffect<PublicCallRequest>[] = [];
368
498
  const executionSteps: PrivateExecutionStep[] = [];
369
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
+
370
509
  let publicTeardownCallRequest;
371
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
+
372
518
  const executions = [privateExecutionResult.entrypoint];
373
519
 
374
520
  while (executions.length !== 0) {
375
521
  const execution = executions.shift()!;
376
522
  executions.unshift(...execution!.nestedExecutionResults);
377
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
+
378
530
  const { contractAddress } = execution.publicInputs.callContext;
379
531
 
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
- );
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
+ }
389
538
 
390
- const nullifiersFromExecution = await Promise.all(
391
- execution.publicInputs.nullifiers
539
+ scopedNoteHashes.push(
540
+ ...execution.publicInputs.noteHashes
392
541
  .getActiveItems()
393
- .map(
394
- async nullifier =>
395
- new OrderedSideEffect(await siloNullifier(contractAddress, nullifier.value), nullifier.counter),
396
- ),
542
+ .filter(nh => !nh.isEmpty())
543
+ .map(nh => nh.scope(contractAddress)),
397
544
  );
545
+ scopedNullifiers.push(...execution.publicInputs.nullifiers.getActiveItems().map(n => n.scope(contractAddress)));
398
546
 
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
- }),
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
+ )),
407
554
  );
408
555
 
409
- siloedNoteHashes.push(...noteHashesFromExecution);
410
- taggedPrivateLogs.push(...privateLogsFromExecution);
411
- nullifiers.push(...nullifiersFromExecution);
556
+ noteHashReadRequests.push(...execution.publicInputs.noteHashReadRequests.getActiveItems());
557
+ nullifierReadRequests.push(...execution.publicInputs.nullifierReadRequests.getActiveItems());
412
558
  l2ToL1Messages.push(
413
559
  ...execution.publicInputs.l2ToL1Msgs
414
560
  .getActiveItems()
@@ -437,17 +583,59 @@ export async function generateSimulatedProvingResult(
437
583
  : execution.publicInputs.publicTeardownCallRequest;
438
584
 
439
585
  executionSteps.push({
440
- functionName: await contractStore.getDebugFunctionName(
586
+ functionName: await debugFunctionNameGetter(
441
587
  execution.publicInputs.callContext.contractAddress,
442
588
  execution.publicInputs.callContext.functionSelector,
443
589
  ),
444
590
  timings: execution.profileResult?.timings ?? { witgen: 0, oracles: {} },
591
+ kind: CircuitKind.App,
445
592
  bytecode: execution.acir,
446
593
  vk: execution.vk,
447
594
  witness: execution.partialWitness,
448
595
  });
449
596
  }
450
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
+
451
639
  const constantData = new TxConstantData(
452
640
  privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader,
453
641
  privateExecutionResult.entrypoint.publicInputs.txContext,
@@ -464,25 +652,23 @@ export async function generateSimulatedProvingResult(
464
652
  const getEffect = <T>(orderedSideEffect: OrderedSideEffect<T>) => orderedSideEffect.sideEffect;
465
653
 
466
654
  const isPrivateOnlyTx = privateExecutionResult.publicFunctionCalldata.length === 0;
467
- const minRevertibleSideEffectCounter =
468
- minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
469
655
 
470
656
  const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(
471
- nullifiers.sort(sortByCounter),
657
+ siloedNullifiers,
472
658
  minRevertibleSideEffectCounter,
473
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.
474
664
  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
- }
665
+ nonRevertibleNullifiers.unshift(nonceGenerator);
480
666
 
481
667
  if (isPrivateOnlyTx) {
482
668
  // We must make the note hashes unique by using the
483
669
  // nonce generator and their index in the tx.
484
670
  const uniqueNoteHashes = await Promise.all(
485
- siloedNoteHashes.sort(sortByCounter).map(async (orderedSideEffect, i) => {
671
+ siloedNoteHashes.map(async (orderedSideEffect, i) => {
486
672
  const siloedNoteHash = orderedSideEffect.sideEffect;
487
673
  const nonce = await computeNoteHashNonce(nonceGenerator, i);
488
674
  const uniqueNoteHash = await computeUniqueNoteHash(nonce, siloedNoteHash);
@@ -497,18 +683,18 @@ export async function generateSimulatedProvingResult(
497
683
  ScopedL2ToL1Message.empty(),
498
684
  MAX_L2_TO_L1_MSGS_PER_TX,
499
685
  ),
500
- 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),
501
687
  padArrayEnd(
502
688
  contractClassLogsHashes.sort(sortByCounter).map(getEffect),
503
689
  ScopedLogHash.empty(),
504
690
  MAX_CONTRACT_CLASS_LOGS_PER_TX,
505
691
  ),
506
692
  );
507
- gasUsed = meterGasUsed(accumulatedDataForRollup);
693
+ gasUsed = meterGasUsed(accumulatedDataForRollup, isPrivateOnlyTx);
508
694
  inputsForRollup = new PartialPrivateTailPublicInputsForRollup(accumulatedDataForRollup);
509
695
  } else {
510
696
  const [nonRevertibleNoteHashes, revertibleNoteHashes] = splitOrderedSideEffects(
511
- siloedNoteHashes.sort(sortByCounter),
697
+ siloedNoteHashes,
512
698
  minRevertibleSideEffectCounter,
513
699
  );
514
700
  const nonRevertibleUniqueNoteHashes = await Promise.all(
@@ -522,7 +708,7 @@ export async function generateSimulatedProvingResult(
522
708
  minRevertibleSideEffectCounter,
523
709
  );
524
710
  const [nonRevertibleTaggedPrivateLogs, revertibleTaggedPrivateLogs] = splitOrderedSideEffects(
525
- taggedPrivateLogs,
711
+ filteredPrivateLogs,
526
712
  minRevertibleSideEffectCounter,
527
713
  );
528
714
  const [nonRevertibleContractClassLogHashes, revertibleContractClassLogHashes] = splitOrderedSideEffects(
@@ -551,9 +737,9 @@ export async function generateSimulatedProvingResult(
551
737
  padArrayEnd(revertibleContractClassLogHashes, ScopedLogHash.empty(), MAX_CONTRACT_CLASS_LOGS_PER_TX),
552
738
  padArrayEnd(revertiblePublicCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX),
553
739
  );
554
- gasUsed = meterGasUsed(revertibleData).add(meterGasUsed(nonRevertibleData));
740
+ gasUsed = meterGasUsed(revertibleData, isPrivateOnlyTx).add(meterGasUsed(nonRevertibleData, isPrivateOnlyTx));
555
741
  if (publicTeardownCallRequest) {
556
- gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
742
+ gasUsed = gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
557
743
  }
558
744
 
559
745
  inputsForPublic = new PartialPrivateTailPublicInputsForPublic(
@@ -565,9 +751,14 @@ export async function generateSimulatedProvingResult(
565
751
 
566
752
  const publicInputs = new PrivateKernelTailCircuitPublicInputs(
567
753
  constantData,
568
- /*gasUsed=*/ gasUsed.add(Gas.from({ l2Gas: FIXED_L2_GAS, daGas: FIXED_DA_GAS })),
569
- /*feePayer=*/ AztecAddress.zero(),
570
- /*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,
571
762
  hasPublicCalls ? inputsForPublic : undefined,
572
763
  !hasPublicCalls ? inputsForRollup : undefined,
573
764
  );
@@ -579,6 +770,116 @@ export async function generateSimulatedProvingResult(
579
770
  };
580
771
  }
581
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
+
582
883
  function splitOrderedSideEffects<T>(effects: OrderedSideEffect<T>[], minRevertibleSideEffectCounter: number) {
583
884
  const revertibleSideEffects: T[] = [];
584
885
  const nonRevertibleSideEffects: T[] = [];
@@ -592,21 +893,24 @@ function splitOrderedSideEffects<T>(effects: OrderedSideEffect<T>[], minRevertib
592
893
  return [nonRevertibleSideEffects, revertibleSideEffects];
593
894
  }
594
895
 
595
- function meterGasUsed(data: PrivateToRollupAccumulatedData | PrivateToPublicAccumulatedData) {
896
+ function meterGasUsed(data: PrivateToRollupAccumulatedData | PrivateToPublicAccumulatedData, isPrivateOnlyTx: boolean) {
596
897
  let meteredDAFields = 0;
597
898
  let meteredL2Gas = 0;
598
899
 
599
900
  const numNoteHashes = arrayNonEmptyLength(data.noteHashes, hash => hash.isEmpty());
600
901
  meteredDAFields += numNoteHashes;
601
- 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;
602
904
 
603
905
  const numNullifiers = arrayNonEmptyLength(data.nullifiers, nullifier => nullifier.isEmpty());
604
906
  meteredDAFields += numNullifiers;
605
- meteredL2Gas += numNullifiers * AVM_EMITNULLIFIER_BASE_L2_GAS;
907
+ const nullifierBaseGas = isPrivateOnlyTx ? L2_GAS_PER_NULLIFIER : AVM_EMITNULLIFIER_BASE_L2_GAS;
908
+ meteredL2Gas += numNullifiers * nullifierBaseGas;
606
909
 
607
910
  const numL2toL1Messages = arrayNonEmptyLength(data.l2ToL1Msgs, msg => msg.isEmpty());
608
911
  meteredDAFields += numL2toL1Messages;
609
- 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;
610
914
 
611
915
  const numPrivatelogs = arrayNonEmptyLength(data.privateLogs, log => log.isEmpty());
612
916
  // Every private log emits its length as an additional field
@@ -614,14 +918,19 @@ function meterGasUsed(data: PrivateToRollupAccumulatedData | PrivateToPublicAccu
614
918
  meteredL2Gas += numPrivatelogs * L2_GAS_PER_PRIVATE_LOG;
615
919
 
616
920
  const numContractClassLogs = arrayNonEmptyLength(data.contractClassLogsHashes, log => log.isEmpty());
617
- // 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
618
922
  meteredDAFields += data.contractClassLogsHashes.reduce(
619
- (acc, log) => (!log.isEmpty() ? acc + log.logHash.length + 2 : acc),
923
+ (acc, log) => (!log.isEmpty() ? acc + log.logHash.length + 1 : acc),
620
924
  0,
621
925
  );
622
926
  meteredL2Gas += numContractClassLogs * L2_GAS_PER_CONTRACT_CLASS_LOG;
623
927
 
624
- 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;
625
934
 
626
935
  if ((data as PrivateToPublicAccumulatedData).publicCallRequests) {
627
936
  const dataForPublic = data as PrivateToPublicAccumulatedData;