@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,6 +1,6 @@
1
- import { AVM_EMITNOTEHASH_BASE_L2_GAS, AVM_EMITNULLIFIER_BASE_L2_GAS, AVM_SENDL2TOL1MSG_BASE_L2_GAS, DA_BYTES_PER_FIELD, DA_GAS_PER_BYTE, FIXED_AVM_STARTUP_L2_GAS, FIXED_DA_GAS, FIXED_L2_GAS, GeneratorIndex, L2_GAS_PER_CONTRACT_CLASS_LOG, L2_GAS_PER_PRIVATE_LOG, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_ENQUEUED_CALLS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_PRIVATE_LOGS_PER_TX } from '@aztec/constants';
1
+ import { CircuitKind } from '@aztec/bb.js';
2
+ import { AVM_EMITNOTEHASH_BASE_L2_GAS, AVM_EMITNULLIFIER_BASE_L2_GAS, AVM_SENDL2TOL1MSG_BASE_L2_GAS, DA_GAS_PER_FIELD, FIXED_AVM_STARTUP_L2_GAS, L2_GAS_PER_CONTRACT_CLASS_LOG, L2_GAS_PER_L2_TO_L1_MSG, L2_GAS_PER_NOTE_HASH, L2_GAS_PER_NULLIFIER, L2_GAS_PER_PRIVATE_LOG, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_ENQUEUED_CALLS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NOTE_HASH_READ_REQUESTS_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_NULLIFIER_READ_REQUESTS_PER_TX, MAX_PRIVATE_LOGS_PER_TX, MAX_TX_LIFETIME, PRIVATE_TX_L2_GAS_OVERHEAD, PUBLIC_DATA_WRITE_LENGTH, PUBLIC_TX_L2_GAS_OVERHEAD, TX_DA_GAS_OVERHEAD } from '@aztec/constants';
2
3
  import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection';
3
- import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
4
4
  import { Fr } from '@aztec/foundation/curves/bn254';
5
5
  import { createLogger } from '@aztec/foundation/log';
6
6
  import { Timer } from '@aztec/foundation/timer';
@@ -10,79 +10,128 @@ import { ExecutionError, createSimulationError, extractCallStack, resolveAsserti
10
10
  import { FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
11
11
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
12
12
  import { Gas } from '@aztec/stdlib/gas';
13
- import { computeNoteHashNonce, computeProtocolNullifier, computeUniqueNoteHash, siloNoteHash, siloNullifier } from '@aztec/stdlib/hash';
14
- import { PartialPrivateTailPublicInputsForPublic, PartialPrivateTailPublicInputsForRollup, PrivateKernelTailCircuitPublicInputs, PrivateToPublicAccumulatedData, PrivateToRollupAccumulatedData, PublicCallRequest, ScopedLogHash } from '@aztec/stdlib/kernel';
13
+ import { computeNoteHashNonce, computeProtocolNullifier, computeSiloedPrivateLogFirstField, computeUniqueNoteHash, siloNoteHash, siloNullifier } from '@aztec/stdlib/hash';
14
+ import { ClaimedLengthArray, PartialPrivateTailPublicInputsForPublic, PartialPrivateTailPublicInputsForRollup, PrivateKernelTailCircuitPublicInputs, PrivateToPublicAccumulatedData, PrivateToRollupAccumulatedData, PublicCallRequest, ReadRequestActionEnum, ScopedLogHash, ScopedNoteHash, ScopedNullifier, ScopedReadRequest, buildTransientDataHints, getNoteHashReadRequestResetActions, getNullifierReadRequestResetActions } from '@aztec/stdlib/kernel';
15
15
  import { PrivateLog } from '@aztec/stdlib/logs';
16
16
  import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
17
17
  import { ChonkProof } from '@aztec/stdlib/proofs';
18
- import { CallContext, HashedValues, PrivateExecutionResult, TxConstantData, collectNested, getFinalMinRevertibleSideEffectCounter } from '@aztec/stdlib/tx';
18
+ import { MerkleTreeId } from '@aztec/stdlib/trees';
19
+ import { CallContext, HashedValues, PrivateExecutionResult, TxConstantData, collectNested, collectNoteHashNullifierCounterMap, getFinalMinRevertibleSideEffectCounter } from '@aztec/stdlib/tx';
20
+ import { CapsuleService } from '../storage/capsule_store/capsule_service.js';
21
+ import { FactService } from '../storage/fact_store/index.js';
22
+ import { AnchoredContractData } from './anchored_contract_data.js';
19
23
  import { ExecutionNoteCache } from './execution_note_cache.js';
20
24
  import { ExecutionTaggingIndexCache } from './execution_tagging_index_cache.js';
21
25
  import { HashedValuesCache } from './hashed_values_cache.js';
22
- import { Oracle } from './oracle/oracle.js';
26
+ import { buildACIRCallback } from './oracle/acir_callback.js';
23
27
  import { executePrivateFunction } from './oracle/private_execution.js';
24
28
  import { PrivateExecutionOracle } from './oracle/private_execution_oracle.js';
25
29
  import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
30
+ import { TransientArrayService } from './transient_array_service.js';
26
31
  /**
27
32
  * The contract function simulator.
28
33
  */ export class ContractFunctionSimulator {
34
+ log;
29
35
  contractStore;
36
+ contractClassService;
37
+ overrides;
30
38
  noteStore;
31
39
  keyStore;
32
40
  addressStore;
33
41
  aztecNode;
42
+ l2TipsStore;
34
43
  senderTaggingStore;
35
44
  recipientTaggingStore;
36
- senderAddressBookStore;
45
+ taggingSecretSourcesStore;
37
46
  capsuleStore;
47
+ factStore;
38
48
  privateEventStore;
39
49
  simulator;
40
- log;
41
- constructor(contractStore, noteStore, keyStore, addressStore, aztecNode, senderTaggingStore, recipientTaggingStore, senderAddressBookStore, capsuleStore, privateEventStore, simulator){
42
- this.contractStore = contractStore;
43
- this.noteStore = noteStore;
44
- this.keyStore = keyStore;
45
- this.addressStore = addressStore;
46
- this.aztecNode = aztecNode;
47
- this.senderTaggingStore = senderTaggingStore;
48
- this.recipientTaggingStore = recipientTaggingStore;
49
- this.senderAddressBookStore = senderAddressBookStore;
50
- this.capsuleStore = capsuleStore;
51
- this.privateEventStore = privateEventStore;
52
- this.simulator = simulator;
50
+ contractSyncService;
51
+ txResolver;
52
+ hooks;
53
+ constructor(args){
54
+ this.contractStore = args.contractStore;
55
+ this.contractClassService = args.contractClassService;
56
+ this.overrides = args.overrides;
57
+ this.noteStore = args.noteStore;
58
+ this.keyStore = args.keyStore;
59
+ this.addressStore = args.addressStore;
60
+ this.aztecNode = args.aztecNode;
61
+ this.l2TipsStore = args.l2TipsStore;
62
+ this.senderTaggingStore = args.senderTaggingStore;
63
+ this.recipientTaggingStore = args.recipientTaggingStore;
64
+ this.taggingSecretSourcesStore = args.taggingSecretSourcesStore;
65
+ this.capsuleStore = args.capsuleStore;
66
+ this.factStore = args.factStore;
67
+ this.privateEventStore = args.privateEventStore;
68
+ this.simulator = args.simulator;
69
+ this.contractSyncService = args.contractSyncService;
70
+ this.txResolver = args.txResolver;
71
+ this.hooks = args.hooks;
53
72
  this.log = createLogger('simulator');
54
73
  }
55
74
  /**
56
75
  * Runs a private function.
57
76
  * @param request - The transaction request.
58
- * @param entryPointArtifact - The artifact of the entry point function.
59
- * @param contractAddress - The address of the contract (should match request.origin)
60
- * @param msgSender - The address calling the function. This can be replaced to simulate a call from another contract
61
- * or a specific account.
62
- * @param anchorBlockHeader - The block header to use as base state for this run.
63
- * @param senderForTags - The address that is used as a tagging sender when emitting private logs. Returned from
64
- * the `privateGetSenderForTags` oracle.
65
- * @param scopes - The accounts whose notes we can access in this call. Currently optional and will default to all.
66
- * @param jobId - The job ID for staged writes.
67
- * @returns The result of the execution.
68
- */ async run(request, contractAddress, selector, msgSender = AztecAddress.fromField(Fr.MAX_FIELD_VALUE), anchorBlockHeader, senderForTags, scopes, jobId) {
77
+ */ async run(request, { msgSender = AztecAddress.NULL_MSG_SENDER, anchorBlockHeader, senderForTags, scopes, jobId }) {
69
78
  const simulatorSetupTimer = new Timer();
70
- const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(contractAddress, selector);
79
+ const contractAddress = request.origin;
80
+ const anchoredContractData = new AnchoredContractData(this.contractStore, this.contractClassService, anchorBlockHeader, this.overrides);
81
+ const entryPointArtifact = await anchoredContractData.getFunctionArtifactWithDebugMetadata(contractAddress, request.functionSelector);
82
+ if (!entryPointArtifact) {
83
+ throw new Error(`Cannot run function ${request.functionSelector} on ${contractAddress}: the contract is not registered. ` + `Register it via wallet.registerContract(...).`);
84
+ }
71
85
  if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
72
86
  throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
73
87
  }
74
- if (request.origin !== contractAddress) {
75
- this.log.warn(`Request origin does not match contract address in simulation. Request origin: ${request.origin}, contract address: ${contractAddress}`);
76
- }
77
88
  // reserve the first side effect for the tx hash (inserted by the private kernel)
78
89
  const startSideEffectCounter = 2;
79
90
  const callContext = new CallContext(msgSender, contractAddress, await FunctionSelector.fromNameAndParameters(entryPointArtifact.name, entryPointArtifact.parameters), entryPointArtifact.isStatic);
80
91
  const protocolNullifier = await computeProtocolNullifier(await request.toTxRequest().hash());
81
92
  const noteCache = new ExecutionNoteCache(protocolNullifier);
82
93
  const taggingIndexCache = new ExecutionTaggingIndexCache();
83
- const privateExecutionOracle = new PrivateExecutionOracle(request.firstCallArgsHash, request.txContext, callContext, anchorBlockHeader, async (call)=>{
84
- await this.runUtility(call, [], anchorBlockHeader, scopes, jobId);
85
- }, request.authWitnesses, request.capsules, HashedValuesCache.create(request.argsOfCalls), noteCache, taggingIndexCache, this.contractStore, this.noteStore, this.keyStore, this.addressStore, this.aztecNode, this.senderTaggingStore, this.recipientTaggingStore, this.senderAddressBookStore, this.capsuleStore, this.privateEventStore, jobId, 0, startSideEffectCounter, undefined, scopes, senderForTags, this.simulator);
94
+ // One shared transient store for the whole execution tree rooted at this transaction. Threaded into every child
95
+ // private oracle and inherited by nested utility frames, so that frames of the same contract see each other's
96
+ // transient arrays, then discarded when run() returns.
97
+ const transientArrayService = new TransientArrayService();
98
+ const privateExecutionOracle = new PrivateExecutionOracle({
99
+ argsHash: request.firstCallArgsHash,
100
+ txContext: request.txContext,
101
+ txRequestSalt: request.salt,
102
+ callContext,
103
+ anchorBlockHeader,
104
+ utilityExecutor: async (call, execScopes)=>{
105
+ await this.runUtility(call, [], anchorBlockHeader, execScopes, jobId);
106
+ },
107
+ authWitnesses: request.authWitnesses,
108
+ capsules: request.capsules,
109
+ executionCache: HashedValuesCache.create(request.argsOfCalls),
110
+ noteCache,
111
+ taggingIndexCache,
112
+ anchoredContractData,
113
+ noteStore: this.noteStore,
114
+ keyStore: this.keyStore,
115
+ addressStore: this.addressStore,
116
+ aztecNode: this.aztecNode,
117
+ senderTaggingStore: this.senderTaggingStore,
118
+ recipientTaggingStore: this.recipientTaggingStore,
119
+ taggingSecretSourcesStore: this.taggingSecretSourcesStore,
120
+ capsuleService: new CapsuleService(this.capsuleStore, scopes),
121
+ factService: new FactService(this.factStore, scopes),
122
+ privateEventStore: this.privateEventStore,
123
+ txResolver: this.txResolver,
124
+ contractSyncService: this.contractSyncService,
125
+ jobId,
126
+ totalPublicCalldataCount: 0,
127
+ sideEffectCounter: startSideEffectCounter,
128
+ scopes,
129
+ senderForTags,
130
+ simulator: this.simulator,
131
+ l2TipsStore: this.l2TipsStore,
132
+ hooks: this.hooks,
133
+ transientArrayService
134
+ });
86
135
  const setupTime = simulatorSetupTimer.ms();
87
136
  try {
88
137
  // Note: any nested private function calls are made recursively within this
@@ -91,7 +140,6 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
91
140
  // within executionResult.nestedExecutionResults).
92
141
  const executionResult = await executePrivateFunction(this.simulator, privateExecutionOracle, entryPointArtifact, contractAddress, request.functionSelector);
93
142
  const simulatorTeardownTimer = new Timer();
94
- noteCache.finish();
95
143
  const firstNullifierHint = noteCache.getNonceGenerator();
96
144
  const publicCallRequests = collectNested([
97
145
  executionResult
@@ -99,7 +147,7 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
99
147
  r.publicInputs.publicTeardownCallRequest
100
148
  ]));
101
149
  const publicFunctionsCalldata = await Promise.all(publicCallRequests.map(async (r)=>{
102
- const calldata = await privateExecutionOracle.privateLoadFromExecutionCache(r.calldataHash);
150
+ const calldata = await privateExecutionOracle.getHashPreimage(r.calldataHash);
103
151
  return new HashedValues(calldata, r.calldataHash);
104
152
  }));
105
153
  const teardownTime = simulatorTeardownTimer.ms();
@@ -115,28 +163,60 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
115
163
  throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
116
164
  }
117
165
  }
118
- // docs:start:execute_utility_function
119
166
  /**
120
167
  * Runs a utility function.
121
168
  * @param call - The function call to execute.
122
- * @param authwits - Authentication witnesses required for the function call.
123
- * @param anchorBlockHeader - The block header to use as base state for this run.
124
- * @param scopes - Optional array of account addresses whose notes can be accessed in this call. Defaults to all
125
- * accounts if not specified.
126
169
  * @returns A return value of the utility function in a form as returned by the simulator (Noir fields)
127
170
  */ async runUtility(call, authwits, anchorBlockHeader, scopes, jobId) {
128
- const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
171
+ const anchoredContractData = new AnchoredContractData(this.contractStore, this.contractClassService, anchorBlockHeader, this.overrides);
172
+ const entryPointArtifact = await anchoredContractData.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
173
+ if (!entryPointArtifact) {
174
+ throw new Error(`Cannot run function ${call.selector} on ${call.to}: the contract is not registered. ` + `Register it via wallet.registerContract(...).`);
175
+ }
129
176
  if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
130
177
  throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
131
178
  }
132
- const oracle = new UtilityExecutionOracle(call.to, authwits, [], anchorBlockHeader, this.contractStore, this.noteStore, this.keyStore, this.addressStore, this.aztecNode, this.recipientTaggingStore, this.senderAddressBookStore, this.capsuleStore, this.privateEventStore, jobId, undefined, scopes);
179
+ const utilityExecutor = async (syncCall, execScopes)=>{
180
+ await this.runUtility(syncCall, [], anchorBlockHeader, execScopes, jobId);
181
+ };
182
+ const oracle = new UtilityExecutionOracle({
183
+ callContext: CallContext.from({
184
+ msgSender: AztecAddress.NULL_MSG_SENDER,
185
+ contractAddress: call.to,
186
+ functionSelector: call.selector,
187
+ isStaticCall: true
188
+ }),
189
+ authWitnesses: authwits,
190
+ capsules: [],
191
+ anchorBlockHeader,
192
+ anchoredContractData,
193
+ noteStore: this.noteStore,
194
+ keyStore: this.keyStore,
195
+ addressStore: this.addressStore,
196
+ aztecNode: this.aztecNode,
197
+ recipientTaggingStore: this.recipientTaggingStore,
198
+ taggingSecretSourcesStore: this.taggingSecretSourcesStore,
199
+ capsuleService: new CapsuleService(this.capsuleStore, scopes),
200
+ factService: new FactService(this.factStore, scopes),
201
+ privateEventStore: this.privateEventStore,
202
+ txResolver: this.txResolver,
203
+ contractSyncService: this.contractSyncService,
204
+ l2TipsStore: this.l2TipsStore,
205
+ jobId,
206
+ scopes,
207
+ simulator: this.simulator,
208
+ hooks: this.hooks,
209
+ utilityExecutor,
210
+ // Execution-tree root (top-level utility run or contract sync): own store; nested frames inherit it.
211
+ transientArrayService: new TransientArrayService()
212
+ });
133
213
  try {
134
214
  this.log.verbose(`Executing utility function ${entryPointArtifact.name}`, {
135
215
  contract: call.to,
136
216
  selector: call.selector
137
217
  });
138
218
  const initialWitness = toACVMWitness(0, call.args);
139
- const acirExecutionResult = await this.simulator.executeUserCircuit(initialWitness, entryPointArtifact, new Oracle(oracle).toACIRCallback()).catch((err)=>{
219
+ const acirExecutionResult = await this.simulator.executeUserCircuit(initialWitness, entryPointArtifact, buildACIRCallback(oracle)).catch((err)=>{
140
220
  err.message = resolveAssertionMessageFromError(err, entryPointArtifact);
141
221
  throw new ExecutionError(err.message, {
142
222
  contractAddress: call.to,
@@ -145,13 +225,15 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
145
225
  cause: err
146
226
  });
147
227
  });
148
- this.log.verbose(`Utility simulation for ${call.to}.${call.selector} completed`);
149
- return witnessMapToFields(acirExecutionResult.returnWitness);
228
+ this.log.verbose(`Utility execution for ${call.to}.${call.selector} completed`);
229
+ return {
230
+ result: witnessMapToFields(acirExecutionResult.returnWitness),
231
+ offchainEffects: oracle.getOffchainEffects()
232
+ };
150
233
  } catch (err) {
151
234
  throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
152
235
  }
153
236
  }
154
- // docs:end:execute_utility_function
155
237
  /**
156
238
  * Returns the execution statistics collected during the simulator run.
157
239
  * @returns The execution statistics.
@@ -185,38 +267,54 @@ class OrderedSideEffect {
185
267
  * (allowing state overrides) and is much faster, while still generating a valid
186
268
  * output that can be sent to the node for public simulation
187
269
  * @param privateExecutionResult - The result of the private execution.
188
- * @param contractStore - A provider for contract data in order to get function names and debug info.
270
+ * @param debugFunctionNameGetter - A provider for contract data in order to get function names and debug info.
271
+ * @param node - AztecNode for verifying settled read requests against the note hash and nullifier trees.
189
272
  * @param minRevertibleSideEffectCounterOverride - Optional override for the min revertible side effect counter.
190
273
  * Used by TXE to simulate account contract behavior (setting the counter before app execution).
191
274
  * @returns The simulated proving result.
192
- */ export async function generateSimulatedProvingResult(privateExecutionResult, contractStore, minRevertibleSideEffectCounterOverride) {
193
- const siloedNoteHashes = [];
194
- const nullifiers = [];
275
+ */ export async function generateSimulatedProvingResult(privateExecutionResult, debugFunctionNameGetter, node, minRevertibleSideEffectCounterOverride) {
195
276
  const taggedPrivateLogs = [];
196
277
  const l2ToL1Messages = [];
197
278
  const contractClassLogsHashes = [];
198
279
  const publicCallRequests = [];
199
280
  const executionSteps = [];
281
+ // Unsiloed scoped arrays — used for squashing, read request verification,
282
+ // and siloed at the end only for the surviving items
283
+ const scopedNoteHashes = [];
284
+ const scopedNullifiers = [];
285
+ // Read requests for verification
286
+ const noteHashReadRequests = [];
287
+ const nullifierReadRequests = [];
200
288
  let publicTeardownCallRequest;
289
+ // We set expiration timestamp to anchor_block_timestamp + MAX_TX_LIFETIME (24h) just like kernels do
290
+ let expirationTimestamp = privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader.globalVariables.timestamp + BigInt(MAX_TX_LIFETIME);
291
+ let feePayer = AztecAddress.zero();
201
292
  const executions = [
202
293
  privateExecutionResult.entrypoint
203
294
  ];
204
295
  while(executions.length !== 0){
205
296
  const execution = executions.shift();
206
297
  executions.unshift(...execution.nestedExecutionResults);
298
+ // Just like kernels we overwrite the default value if the call sets it.
299
+ const callExpirationTimestamp = execution.publicInputs.expirationTimestamp;
300
+ if (callExpirationTimestamp !== 0n && callExpirationTimestamp < expirationTimestamp) {
301
+ expirationTimestamp = callExpirationTimestamp;
302
+ }
207
303
  const { contractAddress } = execution.publicInputs.callContext;
208
- const noteHashesFromExecution = await Promise.all(execution.publicInputs.noteHashes.getActiveItems().filter((noteHash)=>!noteHash.isEmpty()).map(async (noteHash)=>new OrderedSideEffect(await siloNoteHash(contractAddress, noteHash.value), noteHash.counter)));
209
- const nullifiersFromExecution = await Promise.all(execution.publicInputs.nullifiers.getActiveItems().map(async (nullifier)=>new OrderedSideEffect(await siloNullifier(contractAddress, nullifier.value), nullifier.counter)));
210
- const privateLogsFromExecution = await Promise.all(execution.publicInputs.privateLogs.getActiveItems().map(async (metadata)=>{
211
- metadata.log.fields[0] = await poseidon2HashWithSeparator([
212
- contractAddress,
213
- metadata.log.fields[0]
214
- ], GeneratorIndex.PRIVATE_LOG_FIRST_FIELD);
215
- return new OrderedSideEffect(metadata.log, metadata.counter);
216
- }));
217
- siloedNoteHashes.push(...noteHashesFromExecution);
218
- taggedPrivateLogs.push(...privateLogsFromExecution);
219
- nullifiers.push(...nullifiersFromExecution);
304
+ if (execution.publicInputs.isFeePayer) {
305
+ if (!feePayer.isZero()) {
306
+ throw new Error('Multiple fee payers found in private execution result');
307
+ }
308
+ feePayer = contractAddress;
309
+ }
310
+ scopedNoteHashes.push(...execution.publicInputs.noteHashes.getActiveItems().filter((nh)=>!nh.isEmpty()).map((nh)=>nh.scope(contractAddress)));
311
+ scopedNullifiers.push(...execution.publicInputs.nullifiers.getActiveItems().map((n)=>n.scope(contractAddress)));
312
+ taggedPrivateLogs.push(...await Promise.all(execution.publicInputs.privateLogs.getActiveItems().map(async (metadata)=>{
313
+ metadata.log.fields[0] = await computeSiloedPrivateLogFirstField(contractAddress, metadata.log.fields[0]);
314
+ return new OrderedSideEffect(metadata, metadata.counter);
315
+ })));
316
+ noteHashReadRequests.push(...execution.publicInputs.noteHashReadRequests.getActiveItems());
317
+ nullifierReadRequests.push(...execution.publicInputs.nullifierReadRequests.getActiveItems());
220
318
  l2ToL1Messages.push(...execution.publicInputs.l2ToL1Msgs.getActiveItems().map((message)=>new OrderedSideEffect(message.message.scope(contractAddress), message.counter)));
221
319
  contractClassLogsHashes.push(...execution.publicInputs.contractClassLogsHashes.getActiveItems().map((contractClassLogHash)=>new OrderedSideEffect(contractClassLogHash.logHash.scope(contractAddress), contractClassLogHash.counter)));
222
320
  publicCallRequests.push(...execution.publicInputs.publicCallRequests.getActiveItems().map((callRequest)=>new OrderedSideEffect(callRequest.inner, callRequest.counter)));
@@ -225,16 +323,25 @@ class OrderedSideEffect {
225
323
  }
226
324
  publicTeardownCallRequest = execution.publicInputs.publicTeardownCallRequest.isEmpty() ? publicTeardownCallRequest : execution.publicInputs.publicTeardownCallRequest;
227
325
  executionSteps.push({
228
- functionName: await contractStore.getDebugFunctionName(execution.publicInputs.callContext.contractAddress, execution.publicInputs.callContext.functionSelector),
326
+ functionName: await debugFunctionNameGetter(execution.publicInputs.callContext.contractAddress, execution.publicInputs.callContext.functionSelector),
229
327
  timings: execution.profileResult?.timings ?? {
230
328
  witgen: 0,
231
329
  oracles: {}
232
330
  },
331
+ kind: CircuitKind.App,
233
332
  bytecode: execution.acir,
234
333
  vk: execution.vk,
235
334
  witness: execution.partialWitness
236
335
  });
237
336
  }
337
+ const noteHashNullifierCounterMap = collectNoteHashNullifierCounterMap(privateExecutionResult);
338
+ const minRevertibleSideEffectCounter = minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
339
+ const scopedNoteHashesCLA = new ClaimedLengthArray(padArrayEnd(scopedNoteHashes, ScopedNoteHash.empty(), MAX_NOTE_HASHES_PER_TX), scopedNoteHashes.length);
340
+ const scopedNullifiersCLA = new ClaimedLengthArray(padArrayEnd(scopedNullifiers, ScopedNullifier.empty(), MAX_NULLIFIERS_PER_TX), scopedNullifiers.length);
341
+ const { filteredNoteHashes, filteredNullifiers, filteredPrivateLogs } = squashTransientSideEffects(taggedPrivateLogs, scopedNoteHashesCLA, scopedNullifiersCLA, noteHashNullifierCounterMap, minRevertibleSideEffectCounter);
342
+ await verifyReadRequests(node, await privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader.hash(), noteHashReadRequests, nullifierReadRequests, scopedNoteHashesCLA, scopedNullifiersCLA);
343
+ const siloedNoteHashes = await Promise.all(filteredNoteHashes.sort((a, b)=>a.counter - b.counter).map(async (nh)=>new OrderedSideEffect(await siloNoteHash(nh.contractAddress, nh.value), nh.counter)));
344
+ const siloedNullifiers = await Promise.all(filteredNullifiers.sort((a, b)=>a.counter - b.counter).map(async (n)=>new OrderedSideEffect(await siloNullifier(n.contractAddress, n.value), n.counter)));
238
345
  const constantData = new TxConstantData(privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader, privateExecutionResult.entrypoint.publicInputs.txContext, getVKTreeRoot(), protocolContractsHash);
239
346
  const hasPublicCalls = privateExecutionResult.publicFunctionCalldata.length !== 0;
240
347
  let inputsForRollup;
@@ -243,54 +350,112 @@ class OrderedSideEffect {
243
350
  const sortByCounter = (a, b)=>a.counter - b.counter;
244
351
  const getEffect = (orderedSideEffect)=>orderedSideEffect.sideEffect;
245
352
  const isPrivateOnlyTx = privateExecutionResult.publicFunctionCalldata.length === 0;
246
- const minRevertibleSideEffectCounter = minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
247
- const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(nullifiers.sort(sortByCounter), minRevertibleSideEffectCounter);
353
+ const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(siloedNullifiers, minRevertibleSideEffectCounter);
354
+ // The protocol nullifier is the nonce generator and the tx's first nullifier. It is injected by the
355
+ // init kernel (at counter 1, index 0) rather than emitted by any private call, so it is absent from
356
+ // the executed nullifiers above. Mirror the kernel here by prepending it as the first non-revertible
357
+ // nullifier.
248
358
  const nonceGenerator = privateExecutionResult.firstNullifier;
249
- if (nonRevertibleNullifiers.length === 0) {
250
- nonRevertibleNullifiers.push(nonceGenerator);
251
- } else if (!nonRevertibleNullifiers[0].equals(nonceGenerator)) {
252
- throw new Error('The first non revertible nullifier should be equal to the nonce generator. This is a bug!');
253
- }
359
+ nonRevertibleNullifiers.unshift(nonceGenerator);
254
360
  if (isPrivateOnlyTx) {
255
361
  // We must make the note hashes unique by using the
256
362
  // nonce generator and their index in the tx.
257
- const uniqueNoteHashes = await Promise.all(siloedNoteHashes.sort(sortByCounter).map(async (orderedSideEffect, i)=>{
363
+ const uniqueNoteHashes = await Promise.all(siloedNoteHashes.map(async (orderedSideEffect, i)=>{
258
364
  const siloedNoteHash = orderedSideEffect.sideEffect;
259
365
  const nonce = await computeNoteHashNonce(nonceGenerator, i);
260
366
  const uniqueNoteHash = await computeUniqueNoteHash(nonce, siloedNoteHash);
261
367
  return uniqueNoteHash;
262
368
  }));
263
- const accumulatedDataForRollup = new PrivateToRollupAccumulatedData(padArrayEnd(uniqueNoteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX), padArrayEnd(nonRevertibleNullifiers.concat(revertibleNullifiers), Fr.ZERO, MAX_NULLIFIERS_PER_TX), padArrayEnd(l2ToL1Messages.sort(sortByCounter).map(getEffect), ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX), padArrayEnd(taggedPrivateLogs.sort(sortByCounter).map(getEffect), PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX), padArrayEnd(contractClassLogsHashes.sort(sortByCounter).map(getEffect), ScopedLogHash.empty(), MAX_CONTRACT_CLASS_LOGS_PER_TX));
264
- gasUsed = meterGasUsed(accumulatedDataForRollup);
369
+ const accumulatedDataForRollup = new PrivateToRollupAccumulatedData(padArrayEnd(uniqueNoteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX), padArrayEnd(nonRevertibleNullifiers.concat(revertibleNullifiers), Fr.ZERO, MAX_NULLIFIERS_PER_TX), padArrayEnd(l2ToL1Messages.sort(sortByCounter).map(getEffect), ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX), padArrayEnd(filteredPrivateLogs.sort(sortByCounter).map(getEffect), PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX), padArrayEnd(contractClassLogsHashes.sort(sortByCounter).map(getEffect), ScopedLogHash.empty(), MAX_CONTRACT_CLASS_LOGS_PER_TX));
370
+ gasUsed = meterGasUsed(accumulatedDataForRollup, isPrivateOnlyTx);
265
371
  inputsForRollup = new PartialPrivateTailPublicInputsForRollup(accumulatedDataForRollup);
266
372
  } else {
267
- const [nonRevertibleNoteHashes, revertibleNoteHashes] = splitOrderedSideEffects(siloedNoteHashes.sort(sortByCounter), minRevertibleSideEffectCounter);
373
+ const [nonRevertibleNoteHashes, revertibleNoteHashes] = splitOrderedSideEffects(siloedNoteHashes, minRevertibleSideEffectCounter);
268
374
  const nonRevertibleUniqueNoteHashes = await Promise.all(nonRevertibleNoteHashes.map(async (noteHash, i)=>{
269
375
  const nonce = await computeNoteHashNonce(nonceGenerator, i);
270
376
  return await computeUniqueNoteHash(nonce, noteHash);
271
377
  }));
272
378
  const [nonRevertibleL2ToL1Messages, revertibleL2ToL1Messages] = splitOrderedSideEffects(l2ToL1Messages.sort(sortByCounter), minRevertibleSideEffectCounter);
273
- const [nonRevertibleTaggedPrivateLogs, revertibleTaggedPrivateLogs] = splitOrderedSideEffects(taggedPrivateLogs, minRevertibleSideEffectCounter);
379
+ const [nonRevertibleTaggedPrivateLogs, revertibleTaggedPrivateLogs] = splitOrderedSideEffects(filteredPrivateLogs, minRevertibleSideEffectCounter);
274
380
  const [nonRevertibleContractClassLogHashes, revertibleContractClassLogHashes] = splitOrderedSideEffects(contractClassLogsHashes.sort(sortByCounter), minRevertibleSideEffectCounter);
275
381
  const [nonRevertiblePublicCallRequests, revertiblePublicCallRequests] = splitOrderedSideEffects(publicCallRequests.sort(sortByCounter), minRevertibleSideEffectCounter);
276
382
  const nonRevertibleData = new PrivateToPublicAccumulatedData(padArrayEnd(nonRevertibleUniqueNoteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX), padArrayEnd(nonRevertibleNullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX), padArrayEnd(nonRevertibleL2ToL1Messages, ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX), padArrayEnd(nonRevertibleTaggedPrivateLogs, PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX), padArrayEnd(nonRevertibleContractClassLogHashes, ScopedLogHash.empty(), MAX_CONTRACT_CLASS_LOGS_PER_TX), padArrayEnd(nonRevertiblePublicCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX));
277
383
  const revertibleData = new PrivateToPublicAccumulatedData(padArrayEnd(revertibleNoteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX), padArrayEnd(revertibleNullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX), padArrayEnd(revertibleL2ToL1Messages, ScopedL2ToL1Message.empty(), MAX_L2_TO_L1_MSGS_PER_TX), padArrayEnd(revertibleTaggedPrivateLogs, PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX), padArrayEnd(revertibleContractClassLogHashes, ScopedLogHash.empty(), MAX_CONTRACT_CLASS_LOGS_PER_TX), padArrayEnd(revertiblePublicCallRequests, PublicCallRequest.empty(), MAX_ENQUEUED_CALLS_PER_TX));
278
- gasUsed = meterGasUsed(revertibleData).add(meterGasUsed(nonRevertibleData));
384
+ gasUsed = meterGasUsed(revertibleData, isPrivateOnlyTx).add(meterGasUsed(nonRevertibleData, isPrivateOnlyTx));
279
385
  if (publicTeardownCallRequest) {
280
- gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
386
+ gasUsed = gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
281
387
  }
282
388
  inputsForPublic = new PartialPrivateTailPublicInputsForPublic(nonRevertibleData, revertibleData, publicTeardownCallRequest ?? PublicCallRequest.empty());
283
389
  }
284
390
  const publicInputs = new PrivateKernelTailCircuitPublicInputs(constantData, /*gasUsed=*/ gasUsed.add(Gas.from({
285
- l2Gas: FIXED_L2_GAS,
286
- daGas: FIXED_DA_GAS
287
- })), /*feePayer=*/ AztecAddress.zero(), /*includeByTimestamp=*/ 0n, hasPublicCalls ? inputsForPublic : undefined, !hasPublicCalls ? inputsForRollup : undefined);
391
+ l2Gas: isPrivateOnlyTx ? PRIVATE_TX_L2_GAS_OVERHEAD : PUBLIC_TX_L2_GAS_OVERHEAD,
392
+ daGas: TX_DA_GAS_OVERHEAD
393
+ })), /*feePayer=*/ feePayer, /*expirationTimestamp=*/ expirationTimestamp, hasPublicCalls ? inputsForPublic : undefined, !hasPublicCalls ? inputsForRollup : undefined);
288
394
  return {
289
395
  publicInputs,
290
396
  chonkProof: ChonkProof.empty(),
291
397
  executionSteps
292
398
  };
293
399
  }
400
+ /**
401
+ * Squashes transient note hashes and nullifiers, mimicking the behavior
402
+ * of the reset kernels. Returns the filtered (surviving) scoped items and private logs.
403
+ */ function squashTransientSideEffects(taggedPrivateLogs, scopedNoteHashesCLA, scopedNullifiersCLA, noteHashNullifierCounterMap, minRevertibleSideEffectCounter) {
404
+ const { numTransientData, hints: transientDataHints } = buildTransientDataHints(scopedNoteHashesCLA, scopedNullifiersCLA, /*futureNoteHashReads=*/ [], /*futureNullifierReads=*/ [], /*futureLogs=*/ [], noteHashNullifierCounterMap, minRevertibleSideEffectCounter);
405
+ const squashedNoteHashCounters = new Set();
406
+ const squashedNullifierCounters = new Set();
407
+ for(let i = 0; i < numTransientData; i++){
408
+ const hint = transientDataHints[i];
409
+ squashedNoteHashCounters.add(scopedNoteHashesCLA.array[hint.noteHashIndex].counter);
410
+ squashedNullifierCounters.add(scopedNullifiersCLA.array[hint.nullifierIndex].counter);
411
+ }
412
+ return {
413
+ filteredNoteHashes: scopedNoteHashesCLA.getActiveItems().filter((nh)=>!squashedNoteHashCounters.has(nh.counter)),
414
+ filteredNullifiers: scopedNullifiersCLA.getActiveItems().filter((n)=>!squashedNullifierCounters.has(n.counter)),
415
+ filteredPrivateLogs: taggedPrivateLogs.filter((item)=>!squashedNoteHashCounters.has(item.sideEffect.noteHashCounter)).map((item)=>new OrderedSideEffect(item.sideEffect.log, item.counter))
416
+ };
417
+ }
418
+ /**
419
+ * Verifies settled read requests by checking membership in the note hash and nullifier trees
420
+ * at the tx's anchor block, mimicking the behavior of the kernels
421
+ */ async function verifyReadRequests(node, anchorBlockHash, noteHashReadRequests, nullifierReadRequests, scopedNoteHashesCLA, scopedNullifiersCLA) {
422
+ const noteHashReadRequestsCLA = new ClaimedLengthArray(padArrayEnd(noteHashReadRequests, ScopedReadRequest.empty(), MAX_NOTE_HASH_READ_REQUESTS_PER_TX), noteHashReadRequests.length);
423
+ const nullifierReadRequestsCLA = new ClaimedLengthArray(padArrayEnd(nullifierReadRequests, ScopedReadRequest.empty(), MAX_NULLIFIER_READ_REQUESTS_PER_TX), nullifierReadRequests.length);
424
+ const noteHashResetActions = getNoteHashReadRequestResetActions(noteHashReadRequestsCLA, scopedNoteHashesCLA);
425
+ const nullifierResetActions = getNullifierReadRequestResetActions(nullifierReadRequestsCLA, scopedNullifiersCLA);
426
+ const settledNoteHashReads = [];
427
+ for(let i = 0; i < noteHashResetActions.actions.length; i++){
428
+ if (noteHashResetActions.actions[i] === ReadRequestActionEnum.READ_AS_SETTLED) {
429
+ settledNoteHashReads.push({
430
+ index: i,
431
+ value: noteHashReadRequests[i].value
432
+ });
433
+ }
434
+ }
435
+ const settledNullifierReads = [];
436
+ for(let i = 0; i < nullifierResetActions.actions.length; i++){
437
+ if (nullifierResetActions.actions[i] === ReadRequestActionEnum.READ_AS_SETTLED) {
438
+ settledNullifierReads.push({
439
+ index: i,
440
+ value: nullifierReadRequests[i].value
441
+ });
442
+ }
443
+ }
444
+ const [noteHashResults, nullifierResults] = await Promise.all([
445
+ settledNoteHashReads.length > 0 ? node.findLeavesIndexes(anchorBlockHash, MerkleTreeId.NOTE_HASH_TREE, settledNoteHashReads.map(({ value })=>value)) : [],
446
+ settledNullifierReads.length > 0 ? node.findLeavesIndexes(anchorBlockHash, MerkleTreeId.NULLIFIER_TREE, settledNullifierReads.map(({ value })=>value)) : []
447
+ ]);
448
+ for(let i = 0; i < settledNoteHashReads.length; i++){
449
+ if (!noteHashResults[i]) {
450
+ throw new Error(`Note hash read request at index ${settledNoteHashReads[i].index} is reading an unknown note hash: ${settledNoteHashReads[i].value}`);
451
+ }
452
+ }
453
+ for(let i = 0; i < settledNullifierReads.length; i++){
454
+ if (!nullifierResults[i]) {
455
+ throw new Error(`Nullifier read request at index ${settledNullifierReads[i].index} is reading an unknown nullifier: ${settledNullifierReads[i].value}`);
456
+ }
457
+ }
458
+ }
294
459
  function splitOrderedSideEffects(effects, minRevertibleSideEffectCounter) {
295
460
  const revertibleSideEffects = [];
296
461
  const nonRevertibleSideEffects = [];
@@ -306,27 +471,34 @@ function splitOrderedSideEffects(effects, minRevertibleSideEffectCounter) {
306
471
  revertibleSideEffects
307
472
  ];
308
473
  }
309
- function meterGasUsed(data) {
474
+ function meterGasUsed(data, isPrivateOnlyTx) {
310
475
  let meteredDAFields = 0;
311
476
  let meteredL2Gas = 0;
312
477
  const numNoteHashes = arrayNonEmptyLength(data.noteHashes, (hash)=>hash.isEmpty());
313
478
  meteredDAFields += numNoteHashes;
314
- meteredL2Gas += numNoteHashes * AVM_EMITNOTEHASH_BASE_L2_GAS;
479
+ const noteHashBaseGas = isPrivateOnlyTx ? L2_GAS_PER_NOTE_HASH : AVM_EMITNOTEHASH_BASE_L2_GAS;
480
+ meteredL2Gas += numNoteHashes * noteHashBaseGas;
315
481
  const numNullifiers = arrayNonEmptyLength(data.nullifiers, (nullifier)=>nullifier.isEmpty());
316
482
  meteredDAFields += numNullifiers;
317
- meteredL2Gas += numNullifiers * AVM_EMITNULLIFIER_BASE_L2_GAS;
483
+ const nullifierBaseGas = isPrivateOnlyTx ? L2_GAS_PER_NULLIFIER : AVM_EMITNULLIFIER_BASE_L2_GAS;
484
+ meteredL2Gas += numNullifiers * nullifierBaseGas;
318
485
  const numL2toL1Messages = arrayNonEmptyLength(data.l2ToL1Msgs, (msg)=>msg.isEmpty());
319
486
  meteredDAFields += numL2toL1Messages;
320
- meteredL2Gas += numL2toL1Messages * AVM_SENDL2TOL1MSG_BASE_L2_GAS;
487
+ const l2ToL1MessageBaseGas = isPrivateOnlyTx ? L2_GAS_PER_L2_TO_L1_MSG : AVM_SENDL2TOL1MSG_BASE_L2_GAS;
488
+ meteredL2Gas += numL2toL1Messages * l2ToL1MessageBaseGas;
321
489
  const numPrivatelogs = arrayNonEmptyLength(data.privateLogs, (log)=>log.isEmpty());
322
490
  // Every private log emits its length as an additional field
323
491
  meteredDAFields += data.privateLogs.reduce((acc, log)=>!log.isEmpty() ? acc + log.emittedLength + 1 : acc, 0);
324
492
  meteredL2Gas += numPrivatelogs * L2_GAS_PER_PRIVATE_LOG;
325
493
  const numContractClassLogs = arrayNonEmptyLength(data.contractClassLogsHashes, (log)=>log.isEmpty());
326
- // Every contract class log emits its length and contract address as additional fields
327
- meteredDAFields += data.contractClassLogsHashes.reduce((acc, log)=>!log.isEmpty() ? acc + log.logHash.length + 2 : acc, 0);
494
+ // Every contract class log emits its contract address as an additional field
495
+ meteredDAFields += data.contractClassLogsHashes.reduce((acc, log)=>!log.isEmpty() ? acc + log.logHash.length + 1 : acc, 0);
328
496
  meteredL2Gas += numContractClassLogs * L2_GAS_PER_CONTRACT_CLASS_LOG;
329
- const meteredDAGas = meteredDAFields * DA_BYTES_PER_FIELD * DA_GAS_PER_BYTE;
497
+ if (isPrivateOnlyTx) {
498
+ // The public data write that the private tx base rollup always performs to update the fee payer's balance.
499
+ meteredDAFields += PUBLIC_DATA_WRITE_LENGTH;
500
+ }
501
+ const meteredDAGas = meteredDAFields * DA_GAS_PER_FIELD;
330
502
  if (data.publicCallRequests) {
331
503
  const dataForPublic = data;
332
504
  const numPublicCallRequests = arrayNonEmptyLength(dataForPublic.publicCallRequests, (req)=>req.isEmpty());
@@ -0,0 +1,28 @@
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+ /** In-memory store for ephemeral arrays scoped to a single contract call frame. */
3
+ export declare class EphemeralArrayService {
4
+ #private;
5
+ /** Returns all elements in the array, or an empty array if uninitialized. */
6
+ readArrayAt(slot: Fr): Fr[][];
7
+ /** Returns the number of elements in the array at the given slot. */
8
+ len(slot: Fr): number;
9
+ /** Appends an element to the array and returns the new length. */
10
+ push(slot: Fr, elements: Fr[]): number;
11
+ /** Removes and returns the last element. Throws if empty. */
12
+ pop(slot: Fr): Fr[];
13
+ /** Returns the element at the given index. Throws if out of bounds. */
14
+ get(slot: Fr, index: number): Fr[];
15
+ /** Overwrites the element at the given index. Throws if out of bounds. */
16
+ set(slot: Fr, index: number, value: Fr[]): void;
17
+ /** Removes the element at the given index, shifting subsequent elements backward. Throws if out of bounds. */
18
+ remove(slot: Fr, index: number): void;
19
+ /** Removes all elements from the array. */
20
+ clear(slot: Fr): void;
21
+ /** Allocates a fresh, unused slot for a new ephemeral array. */
22
+ allocateSlot(): Fr;
23
+ /** Creates a new ephemeral array pre-populated with the given elements and returns its slot. */
24
+ newArray(elements: Fr[][]): Fr;
25
+ /** Copies `count` elements from the source array to the destination array (overwrites destination). */
26
+ copy(srcSlot: Fr, dstSlot: Fr, count: number): void;
27
+ }
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBoZW1lcmFsX2FycmF5X3NlcnZpY2UuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250cmFjdF9mdW5jdGlvbl9zaW11bGF0b3IvZXBoZW1lcmFsX2FycmF5X3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBELG1GQUFtRjtBQUNuRixxQkFBYSxxQkFBcUI7O0lBT2hDLDZFQUE2RTtJQUM3RSxXQUFXLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxDQUU1QjtJQU1ELHFFQUFxRTtJQUNyRSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxNQUFNLENBRXBCO0lBRUQsa0VBQWtFO0lBQ2xFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLENBS3JDO0lBRUQsNkRBQTZEO0lBQzdELEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQVFsQjtJQUVELHVFQUF1RTtJQUN2RSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQVFqQztJQUVELDBFQUEwRTtJQUMxRSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBUTlDO0lBRUQsOEdBQThHO0lBQzlHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEdBQUcsSUFBSSxDQVFwQztJQUVELDJDQUEyQztJQUMzQyxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxJQUFJLENBRXBCO0lBRUQsZ0VBQWdFO0lBQ2hFLFlBQVksSUFBSSxFQUFFLENBTWpCO0lBRUQsZ0dBQWdHO0lBQ2hHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBSTdCO0lBRUQsdUdBQXVHO0lBQ3ZHLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sR0FBRyxJQUFJLENBVWxEO0NBQ0YifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ephemeral_array_service.d.ts","sourceRoot":"","sources":["../../src/contract_function_simulator/ephemeral_array_service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,mFAAmF;AACnF,qBAAa,qBAAqB;;IAOhC,6EAA6E;IAC7E,WAAW,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,CAE5B;IAMD,qEAAqE;IACrE,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,MAAM,CAEpB;IAED,kEAAkE;IAClE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,MAAM,CAKrC;IAED,6DAA6D;IAC7D,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,CAQlB;IAED,uEAAuE;IACvE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,EAAE,EAAE,CAQjC;IAED,0EAA0E;IAC1E,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,IAAI,CAQ9C;IAED,8GAA8G;IAC9G,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAQpC;IAED,2CAA2C;IAC3C,KAAK,CAAC,IAAI,EAAE,EAAE,GAAG,IAAI,CAEpB;IAED,gEAAgE;IAChE,YAAY,IAAI,EAAE,CAMjB;IAED,gGAAgG;IAChG,QAAQ,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAI7B;IAED,uGAAuG;IACvG,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAUlD;CACF"}