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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (504) hide show
  1. package/dest/bin/check_oracle_version.js +45 -111
  2. package/dest/bin/index.d.ts +2 -0
  3. package/dest/bin/index.d.ts.map +1 -0
  4. package/dest/bin/index.js +1 -0
  5. package/dest/bin/oracle_version_helpers.d.ts +51 -0
  6. package/dest/bin/oracle_version_helpers.d.ts.map +1 -0
  7. package/dest/bin/oracle_version_helpers.js +254 -0
  8. package/dest/block_synchronizer/block_stream_source.d.ts +10 -0
  9. package/dest/block_synchronizer/block_stream_source.d.ts.map +1 -0
  10. package/dest/block_synchronizer/block_stream_source.js +37 -0
  11. package/dest/block_synchronizer/block_synchronizer.d.ts +23 -13
  12. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  13. package/dest/block_synchronizer/block_synchronizer.js +90 -28
  14. package/dest/config/index.d.ts +9 -2
  15. package/dest/config/index.d.ts.map +1 -1
  16. package/dest/config/index.js +14 -15
  17. package/dest/config/package_info.js +1 -1
  18. package/dest/contract/contract_class_service.d.ts +31 -0
  19. package/dest/contract/contract_class_service.d.ts.map +1 -0
  20. package/dest/contract/contract_class_service.js +68 -0
  21. package/dest/contract/contract_sync_service.d.ts +48 -0
  22. package/dest/contract/contract_sync_service.d.ts.map +1 -0
  23. package/dest/contract/contract_sync_service.js +116 -0
  24. package/dest/contract/helpers.d.ts +7 -0
  25. package/dest/contract/helpers.d.ts.map +1 -0
  26. package/dest/contract/helpers.js +20 -0
  27. package/dest/contract_function_simulator/anchored_contract_data.d.ts +36 -0
  28. package/dest/contract_function_simulator/anchored_contract_data.d.ts.map +1 -0
  29. package/dest/contract_function_simulator/anchored_contract_data.js +54 -0
  30. package/dest/contract_function_simulator/aztec_node_read_cache.d.ts +39 -0
  31. package/dest/contract_function_simulator/aztec_node_read_cache.d.ts.map +1 -0
  32. package/dest/contract_function_simulator/aztec_node_read_cache.js +60 -0
  33. package/dest/contract_function_simulator/contract_function_simulator.d.ts +72 -34
  34. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  35. package/dest/contract_function_simulator/contract_function_simulator.js +265 -95
  36. package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
  37. package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
  38. package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
  39. package/dest/contract_function_simulator/execution_note_cache.d.ts +4 -10
  40. package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
  41. package/dest/contract_function_simulator/execution_note_cache.js +8 -28
  42. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +7 -11
  43. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
  44. package/dest/contract_function_simulator/execution_tagging_index_cache.js +19 -15
  45. package/dest/contract_function_simulator/index.d.ts +26 -5
  46. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  47. package/dest/contract_function_simulator/index.js +12 -3
  48. package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts +29 -0
  49. package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts.map +1 -0
  50. package/dest/contract_function_simulator/noir-structs/bounded_vec.js +30 -0
  51. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts +9 -0
  52. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts.map +1 -0
  53. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.js +1 -0
  54. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts +7 -0
  55. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts.map +1 -0
  56. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.js +1 -0
  57. package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts +37 -0
  58. package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts.map +1 -0
  59. package/dest/contract_function_simulator/noir-structs/ephemeral_array.js +59 -0
  60. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +3 -4
  61. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  62. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +9 -10
  63. package/dest/contract_function_simulator/noir-structs/fact.d.ts +16 -0
  64. package/dest/contract_function_simulator/noir-structs/fact.d.ts.map +1 -0
  65. package/dest/contract_function_simulator/noir-structs/fact.js +6 -0
  66. package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts +27 -0
  67. package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts.map +1 -0
  68. package/dest/contract_function_simulator/noir-structs/fact_collection.js +31 -0
  69. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +19 -10
  70. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -1
  71. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +12 -24
  72. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +11 -9
  73. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
  74. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +2 -63
  75. package/dest/contract_function_simulator/noir-structs/note_data.d.ts +27 -0
  76. package/dest/contract_function_simulator/noir-structs/note_data.d.ts.map +1 -0
  77. package/dest/contract_function_simulator/noir-structs/note_data.js +3 -0
  78. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +3 -5
  79. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  80. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +8 -12
  81. package/dest/contract_function_simulator/noir-structs/option.d.ts +59 -0
  82. package/dest/contract_function_simulator/noir-structs/option.d.ts.map +1 -0
  83. package/dest/contract_function_simulator/noir-structs/option.js +67 -0
  84. package/dest/contract_function_simulator/noir-structs/origin_block.d.ts +11 -0
  85. package/dest/contract_function_simulator/noir-structs/origin_block.d.ts.map +1 -0
  86. package/dest/contract_function_simulator/noir-structs/origin_block.js +5 -0
  87. package/dest/contract_function_simulator/noir-structs/pending_tagged_log.d.ts +11 -0
  88. package/dest/contract_function_simulator/noir-structs/pending_tagged_log.d.ts.map +1 -0
  89. package/dest/contract_function_simulator/noir-structs/pending_tagged_log.js +4 -0
  90. package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts +8 -0
  91. package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts.map +1 -0
  92. package/dest/contract_function_simulator/noir-structs/provided_secret.js +1 -0
  93. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts +28 -0
  94. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts.map +1 -0
  95. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.js +50 -0
  96. package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts +21 -0
  97. package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts.map +1 -0
  98. package/dest/contract_function_simulator/noir-structs/resolved_tx.js +50 -0
  99. package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts +14 -0
  100. package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts.map +1 -0
  101. package/dest/contract_function_simulator/noir-structs/tx_effect_data.js +5 -0
  102. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +6 -11
  103. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
  104. package/dest/contract_function_simulator/noir-structs/utility_context.js +1 -20
  105. package/dest/contract_function_simulator/oracle/acir_callback.d.ts +21 -0
  106. package/dest/contract_function_simulator/oracle/acir_callback.d.ts.map +1 -0
  107. package/dest/contract_function_simulator/oracle/acir_callback.js +115 -0
  108. package/dest/contract_function_simulator/oracle/index.d.ts +2 -13
  109. package/dest/contract_function_simulator/oracle/index.d.ts.map +1 -1
  110. package/dest/contract_function_simulator/oracle/index.js +1 -1
  111. package/dest/contract_function_simulator/oracle/interfaces.d.ts +15 -98
  112. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  113. package/dest/contract_function_simulator/oracle/interfaces.js +2 -2
  114. package/dest/contract_function_simulator/oracle/legacy_oracle_registry.d.ts +39 -0
  115. package/dest/contract_function_simulator/oracle/legacy_oracle_registry.d.ts.map +1 -0
  116. package/dest/contract_function_simulator/oracle/legacy_oracle_registry.js +107 -0
  117. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +3 -14
  118. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
  119. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.js +1 -24
  120. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +2 -2
  121. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
  122. package/dest/contract_function_simulator/oracle/note_packing_utils.js +2 -2
  123. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts +139 -0
  124. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -0
  125. package/dest/contract_function_simulator/oracle/oracle_registry.js +1016 -0
  126. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +222 -0
  127. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts.map +1 -0
  128. package/dest/contract_function_simulator/oracle/oracle_type_mappings.js +1243 -0
  129. package/dest/contract_function_simulator/oracle/private_execution.d.ts +1 -1
  130. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  131. package/dest/contract_function_simulator/oracle/private_execution.js +7 -6
  132. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +82 -96
  133. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  134. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +256 -114
  135. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +201 -84
  136. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  137. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +604 -186
  138. package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
  139. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
  140. package/dest/contract_function_simulator/pick_notes.js +20 -3
  141. package/dest/contract_function_simulator/transient_array_service.d.ts +31 -0
  142. package/dest/contract_function_simulator/transient_array_service.d.ts.map +1 -0
  143. package/dest/contract_function_simulator/transient_array_service.js +62 -0
  144. package/dest/contract_logging.d.ts +27 -0
  145. package/dest/contract_logging.d.ts.map +1 -0
  146. package/dest/contract_logging.js +38 -0
  147. package/dest/debug/pxe_debug_utils.d.ts +14 -15
  148. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  149. package/dest/debug/pxe_debug_utils.js +16 -21
  150. package/dest/entrypoints/client/bundle/index.d.ts +4 -1
  151. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  152. package/dest/entrypoints/client/bundle/index.js +3 -0
  153. package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
  154. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  155. package/dest/entrypoints/client/bundle/utils.js +35 -8
  156. package/dest/entrypoints/client/lazy/index.d.ts +4 -1
  157. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  158. package/dest/entrypoints/client/lazy/index.js +3 -0
  159. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  160. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  161. package/dest/entrypoints/client/lazy/utils.js +35 -8
  162. package/dest/entrypoints/client/store.d.ts +14 -0
  163. package/dest/entrypoints/client/store.d.ts.map +1 -0
  164. package/dest/entrypoints/client/store.js +28 -0
  165. package/dest/entrypoints/pxe_creation_options.d.ts +16 -2
  166. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  167. package/dest/entrypoints/pxe_creation_options.js +3 -1
  168. package/dest/entrypoints/server/index.d.ts +8 -3
  169. package/dest/entrypoints/server/index.d.ts.map +1 -1
  170. package/dest/entrypoints/server/index.js +6 -2
  171. package/dest/entrypoints/server/store.d.ts +18 -0
  172. package/dest/entrypoints/server/store.d.ts.map +1 -0
  173. package/dest/entrypoints/server/store.js +28 -0
  174. package/dest/entrypoints/server/utils.d.ts +4 -3
  175. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  176. package/dest/entrypoints/server/utils.js +36 -8
  177. package/dest/error_enriching.d.ts +5 -3
  178. package/dest/error_enriching.d.ts.map +1 -1
  179. package/dest/error_enriching.js +13 -11
  180. package/dest/events/event_service.d.ts +15 -6
  181. package/dest/events/event_service.d.ts.map +1 -1
  182. package/dest/events/event_service.js +44 -11
  183. package/dest/events/private_event_filter_validator.d.ts +3 -2
  184. package/dest/events/private_event_filter_validator.d.ts.map +1 -1
  185. package/dest/events/private_event_filter_validator.js +15 -0
  186. package/dest/hooks/authorize_utility_call.d.ts +41 -0
  187. package/dest/hooks/authorize_utility_call.d.ts.map +1 -0
  188. package/dest/hooks/authorize_utility_call.js +4 -0
  189. package/dest/hooks/execution_hooks.d.ts +62 -0
  190. package/dest/hooks/execution_hooks.d.ts.map +1 -0
  191. package/dest/hooks/execution_hooks.js +9 -0
  192. package/dest/hooks/index.d.ts +5 -0
  193. package/dest/hooks/index.d.ts.map +1 -0
  194. package/dest/hooks/index.js +2 -0
  195. package/dest/hooks/resolve_custom_request.d.ts +23 -0
  196. package/dest/hooks/resolve_custom_request.d.ts.map +1 -0
  197. package/dest/hooks/resolve_custom_request.js +3 -0
  198. package/dest/hooks/resolve_tagging_secret_strategy.d.ts +50 -0
  199. package/dest/hooks/resolve_tagging_secret_strategy.d.ts.map +1 -0
  200. package/dest/hooks/resolve_tagging_secret_strategy.js +3 -0
  201. package/dest/logs/log_service.d.ts +14 -11
  202. package/dest/logs/log_service.d.ts.map +1 -1
  203. package/dest/logs/log_service.js +193 -91
  204. package/dest/messages/tx_resolver_service.d.ts +17 -0
  205. package/dest/messages/tx_resolver_service.d.ts.map +1 -0
  206. package/dest/messages/tx_resolver_service.js +55 -0
  207. package/dest/notes/note_service.d.ts +28 -6
  208. package/dest/notes/note_service.d.ts.map +1 -1
  209. package/dest/notes/note_service.js +84 -59
  210. package/dest/notes_filter.d.ts +24 -0
  211. package/dest/notes_filter.d.ts.map +1 -0
  212. package/dest/notes_filter.js +4 -0
  213. package/dest/oracle_version.d.ts +4 -3
  214. package/dest/oracle_version.d.ts.map +1 -1
  215. package/dest/oracle_version.js +20 -10
  216. package/dest/private_kernel/batch_planner.d.ts +47 -0
  217. package/dest/private_kernel/batch_planner.d.ts.map +1 -0
  218. package/dest/private_kernel/batch_planner.js +104 -0
  219. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
  220. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
  221. package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
  222. package/dest/private_kernel/hints/index.d.ts +1 -1
  223. package/dest/private_kernel/hints/index.js +1 -1
  224. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +4 -3
  225. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -1
  226. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +135 -70
  227. package/dest/private_kernel/hints/test_utils.d.ts +122 -0
  228. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
  229. package/dest/private_kernel/hints/test_utils.js +202 -0
  230. package/dest/private_kernel/private_kernel_execution_prover.d.ts +6 -2
  231. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  232. package/dest/private_kernel/private_kernel_execution_prover.js +164 -82
  233. package/dest/private_kernel/private_kernel_oracle.d.ts +17 -11
  234. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  235. package/dest/private_kernel/private_kernel_oracle.js +47 -29
  236. package/dest/pxe.d.ts +228 -66
  237. package/dest/pxe.d.ts.map +1 -1
  238. package/dest/pxe.js +410 -227
  239. package/dest/storage/allowed_scopes.d.ts +6 -0
  240. package/dest/storage/allowed_scopes.d.ts.map +1 -0
  241. package/dest/storage/allowed_scopes.js +7 -0
  242. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +9 -6
  243. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -1
  244. package/dest/storage/anchor_block_store/anchor_block_store.js +9 -7
  245. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts +42 -0
  246. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts.map +1 -0
  247. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.js +93 -0
  248. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts +15 -0
  249. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts.map +1 -0
  250. package/dest/storage/backwards_compatibility_tests/schema_tests.js +671 -0
  251. package/dest/storage/backwards_compatibility_tests/store_spy.d.ts +19 -0
  252. package/dest/storage/backwards_compatibility_tests/store_spy.d.ts.map +1 -0
  253. package/dest/storage/backwards_compatibility_tests/store_spy.js +63 -0
  254. package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
  255. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  256. package/dest/storage/capsule_store/capsule_service.js +47 -0
  257. package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
  258. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  259. package/dest/storage/capsule_store/capsule_store.js +36 -28
  260. package/dest/storage/capsule_store/index.d.ts +2 -1
  261. package/dest/storage/capsule_store/index.d.ts.map +1 -1
  262. package/dest/storage/capsule_store/index.js +1 -0
  263. package/dest/storage/contract_store/contract_store.d.ts +63 -33
  264. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  265. package/dest/storage/contract_store/contract_store.js +182 -134
  266. package/dest/storage/fact_store/fact_service.d.ts +22 -0
  267. package/dest/storage/fact_store/fact_service.d.ts.map +1 -0
  268. package/dest/storage/fact_store/fact_service.js +45 -0
  269. package/dest/storage/fact_store/fact_store.d.ts +95 -0
  270. package/dest/storage/fact_store/fact_store.d.ts.map +1 -0
  271. package/dest/storage/fact_store/fact_store.js +408 -0
  272. package/dest/storage/fact_store/fact_store_keys.d.ts +34 -0
  273. package/dest/storage/fact_store/fact_store_keys.d.ts.map +1 -0
  274. package/dest/storage/fact_store/fact_store_keys.js +50 -0
  275. package/dest/storage/fact_store/index.d.ts +6 -0
  276. package/dest/storage/fact_store/index.d.ts.map +1 -0
  277. package/dest/storage/fact_store/index.js +4 -0
  278. package/dest/storage/fact_store/origin_state.d.ts +57 -0
  279. package/dest/storage/fact_store/origin_state.d.ts.map +1 -0
  280. package/dest/storage/fact_store/origin_state.js +53 -0
  281. package/dest/storage/fact_store/stored_fact.d.ts +32 -0
  282. package/dest/storage/fact_store/stored_fact.d.ts.map +1 -0
  283. package/dest/storage/fact_store/stored_fact.js +64 -0
  284. package/dest/storage/index.d.ts +3 -2
  285. package/dest/storage/index.d.ts.map +1 -1
  286. package/dest/storage/index.js +2 -1
  287. package/dest/storage/metadata.d.ts +2 -2
  288. package/dest/storage/metadata.d.ts.map +1 -1
  289. package/dest/storage/metadata.js +1 -1
  290. package/dest/storage/note_store/note_store.d.ts +44 -35
  291. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  292. package/dest/storage/note_store/note_store.js +202 -171
  293. package/dest/storage/note_store/stored_note.d.ts +3 -8
  294. package/dest/storage/note_store/stored_note.d.ts.map +1 -1
  295. package/dest/storage/note_store/stored_note.js +4 -20
  296. package/dest/storage/open_pxe_stores.d.ts +35 -0
  297. package/dest/storage/open_pxe_stores.d.ts.map +1 -0
  298. package/dest/storage/open_pxe_stores.js +29 -0
  299. package/dest/storage/private_event_store/private_event_store.d.ts +13 -16
  300. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  301. package/dest/storage/private_event_store/private_event_store.js +43 -43
  302. package/dest/storage/private_event_store/stored_private_event.js +1 -1
  303. package/dest/storage/store_identity.d.ts +35 -0
  304. package/dest/storage/store_identity.d.ts.map +1 -0
  305. package/dest/storage/store_identity.js +44 -0
  306. package/dest/storage/tagging_store/index.d.ts +2 -2
  307. package/dest/storage/tagging_store/index.d.ts.map +1 -1
  308. package/dest/storage/tagging_store/index.js +1 -1
  309. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
  310. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  311. package/dest/storage/tagging_store/sender_tagging_store.d.ts +45 -28
  312. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  313. package/dest/storage/tagging_store/sender_tagging_store.js +182 -119
  314. package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts +51 -0
  315. package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts.map +1 -0
  316. package/dest/storage/tagging_store/tagging_secret_sources_store.js +105 -0
  317. package/dest/tagging/constants.d.ts +2 -2
  318. package/dest/tagging/constants.d.ts.map +1 -1
  319. package/dest/tagging/constants.js +18 -9
  320. package/dest/tagging/get_all_logs_by_tags.d.ts +34 -10
  321. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
  322. package/dest/tagging/get_all_logs_by_tags.js +45 -32
  323. package/dest/tagging/index.d.ts +6 -5
  324. package/dest/tagging/index.d.ts.map +1 -1
  325. package/dest/tagging/index.js +4 -3
  326. package/dest/tagging/persist_sender_tagging_index_ranges.d.ts +29 -0
  327. package/dest/tagging/persist_sender_tagging_index_ranges.d.ts.map +1 -0
  328. package/dest/tagging/persist_sender_tagging_index_ranges.js +42 -0
  329. package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +69 -0
  330. package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts.map +1 -0
  331. package/dest/tagging/recipient_sync/sync_tagged_private_logs.js +203 -0
  332. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +3 -3
  333. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -1
  334. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +2 -2
  335. package/dest/tagging/reconcile_tagging_index_ranges.d.ts +36 -0
  336. package/dest/tagging/reconcile_tagging_index_ranges.d.ts.map +1 -0
  337. package/dest/tagging/reconcile_tagging_index_ranges.js +74 -0
  338. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -9
  339. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  340. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +32 -14
  341. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +13 -7
  342. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  343. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +41 -10
  344. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +5 -7
  345. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  346. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +41 -25
  347. package/package.json +29 -17
  348. package/src/bin/check_oracle_version.ts +51 -133
  349. package/src/bin/index.ts +5 -0
  350. package/src/bin/oracle_version_helpers.ts +311 -0
  351. package/src/block_synchronizer/block_stream_source.ts +42 -0
  352. package/src/block_synchronizer/block_synchronizer.ts +106 -37
  353. package/src/config/index.ts +16 -9
  354. package/src/config/package_info.ts +1 -1
  355. package/src/contract/contract_class_service.ts +83 -0
  356. package/src/contract/contract_sync_service.ts +176 -0
  357. package/src/contract/helpers.ts +35 -0
  358. package/src/contract_function_simulator/anchored_contract_data.ts +74 -0
  359. package/src/contract_function_simulator/aztec_node_read_cache.ts +89 -0
  360. package/src/contract_function_simulator/contract_function_simulator.ts +466 -159
  361. package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
  362. package/src/contract_function_simulator/execution_note_cache.ts +8 -29
  363. package/src/contract_function_simulator/execution_tagging_index_cache.ts +19 -18
  364. package/src/contract_function_simulator/index.ts +69 -4
  365. package/src/contract_function_simulator/noir-structs/bounded_vec.ts +43 -0
  366. package/src/contract_function_simulator/noir-structs/contract_class_log_data.ts +9 -0
  367. package/src/contract_function_simulator/noir-structs/embedded_curve_point.ts +4 -0
  368. package/src/contract_function_simulator/noir-structs/ephemeral_array.ts +66 -0
  369. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +10 -9
  370. package/src/contract_function_simulator/noir-structs/fact.ts +13 -0
  371. package/src/contract_function_simulator/noir-structs/fact_collection.ts +64 -0
  372. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +27 -20
  373. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +14 -64
  374. package/src/contract_function_simulator/noir-structs/note_data.ts +27 -0
  375. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +6 -11
  376. package/src/contract_function_simulator/noir-structs/option.ts +75 -0
  377. package/src/contract_function_simulator/noir-structs/origin_block.ts +8 -0
  378. package/src/contract_function_simulator/noir-structs/pending_tagged_log.ts +12 -0
  379. package/src/contract_function_simulator/noir-structs/provided_secret.ts +5 -0
  380. package/src/contract_function_simulator/noir-structs/resolved_tagging_strategy.ts +66 -0
  381. package/src/contract_function_simulator/noir-structs/resolved_tx.ts +53 -0
  382. package/src/contract_function_simulator/noir-structs/tx_effect_data.ts +15 -0
  383. package/src/contract_function_simulator/noir-structs/utility_context.ts +5 -17
  384. package/src/contract_function_simulator/oracle/acir_callback.ts +154 -0
  385. package/src/contract_function_simulator/oracle/index.ts +1 -15
  386. package/src/contract_function_simulator/oracle/interfaces.ts +11 -176
  387. package/src/contract_function_simulator/oracle/legacy_oracle_registry.ts +147 -0
  388. package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +6 -21
  389. package/src/contract_function_simulator/oracle/note_packing_utils.ts +3 -3
  390. package/src/contract_function_simulator/oracle/oracle_registry.ts +711 -0
  391. package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +964 -0
  392. package/src/contract_function_simulator/oracle/private_execution.ts +6 -7
  393. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +314 -214
  394. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +935 -263
  395. package/src/contract_function_simulator/pick_notes.ts +22 -3
  396. package/src/contract_function_simulator/transient_array_service.ts +91 -0
  397. package/src/contract_logging.ts +52 -0
  398. package/src/debug/pxe_debug_utils.ts +47 -25
  399. package/src/entrypoints/client/bundle/index.ts +3 -0
  400. package/src/entrypoints/client/bundle/utils.ts +41 -9
  401. package/src/entrypoints/client/lazy/index.ts +3 -0
  402. package/src/entrypoints/client/lazy/utils.ts +41 -9
  403. package/src/entrypoints/client/store.ts +38 -0
  404. package/src/entrypoints/pxe_creation_options.ts +21 -1
  405. package/src/entrypoints/server/index.ts +8 -2
  406. package/src/entrypoints/server/store.ts +47 -0
  407. package/src/entrypoints/server/utils.ts +52 -21
  408. package/src/error_enriching.ts +27 -11
  409. package/src/events/event_service.ts +69 -21
  410. package/src/events/private_event_filter_validator.ts +21 -1
  411. package/src/hooks/authorize_utility_call.ts +44 -0
  412. package/src/hooks/execution_hooks.ts +68 -0
  413. package/src/hooks/index.ts +13 -0
  414. package/src/hooks/resolve_custom_request.ts +24 -0
  415. package/src/hooks/resolve_tagging_secret_strategy.ts +60 -0
  416. package/src/logs/log_service.ts +231 -156
  417. package/src/messages/tx_resolver_service.ts +69 -0
  418. package/src/notes/note_service.ts +121 -86
  419. package/src/notes_filter.ts +24 -0
  420. package/src/oracle_version.ts +20 -10
  421. package/src/private_kernel/batch_planner.ts +169 -0
  422. package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
  423. package/src/private_kernel/hints/index.ts +1 -1
  424. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +176 -119
  425. package/src/private_kernel/hints/test_utils.ts +318 -0
  426. package/src/private_kernel/private_kernel_execution_prover.ts +251 -116
  427. package/src/private_kernel/private_kernel_oracle.ts +65 -36
  428. package/src/pxe.ts +702 -298
  429. package/src/storage/allowed_scopes.ts +14 -0
  430. package/src/storage/anchor_block_store/anchor_block_store.ts +9 -7
  431. package/src/storage/backwards_compatibility_tests/__snapshots__/AddressStore.json +22 -0
  432. package/src/storage/backwards_compatibility_tests/__snapshots__/AnchorBlockStore.json +3 -0
  433. package/src/storage/backwards_compatibility_tests/__snapshots__/CapsuleStore.json +16 -0
  434. package/src/storage/backwards_compatibility_tests/__snapshots__/ContractStore.json +28 -0
  435. package/src/storage/backwards_compatibility_tests/__snapshots__/FactStore.json +40 -0
  436. package/src/storage/backwards_compatibility_tests/__snapshots__/KeyStore.json +52 -0
  437. package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +40 -0
  438. package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +56 -0
  439. package/src/storage/backwards_compatibility_tests/__snapshots__/PrivateEventStore.json +44 -0
  440. package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +26 -0
  441. package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +30 -0
  442. package/src/storage/backwards_compatibility_tests/__snapshots__/TaggingSecretSourcesStore.json +30 -0
  443. package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +117 -0
  444. package/src/storage/backwards_compatibility_tests/kv_store_snapshot.ts +122 -0
  445. package/src/storage/backwards_compatibility_tests/schema_tests.ts +803 -0
  446. package/src/storage/backwards_compatibility_tests/store_spy.ts +73 -0
  447. package/src/storage/capsule_store/capsule_service.ts +85 -0
  448. package/src/storage/capsule_store/capsule_store.ts +44 -26
  449. package/src/storage/capsule_store/index.ts +1 -0
  450. package/src/storage/contract_store/contract_store.ts +240 -169
  451. package/src/storage/fact_store/fact_service.ts +69 -0
  452. package/src/storage/fact_store/fact_store.ts +487 -0
  453. package/src/storage/fact_store/fact_store_keys.ts +75 -0
  454. package/src/storage/fact_store/index.ts +14 -0
  455. package/src/storage/fact_store/origin_state.ts +75 -0
  456. package/src/storage/fact_store/stored_fact.ts +80 -0
  457. package/src/storage/index.ts +2 -1
  458. package/src/storage/metadata.ts +1 -1
  459. package/src/storage/note_store/note_store.ts +234 -191
  460. package/src/storage/note_store/stored_note.ts +5 -27
  461. package/src/storage/open_pxe_stores.ts +52 -0
  462. package/src/storage/private_event_store/private_event_store.ts +52 -54
  463. package/src/storage/private_event_store/stored_private_event.ts +1 -1
  464. package/src/storage/store_identity.ts +72 -0
  465. package/src/storage/tagging_store/index.ts +1 -1
  466. package/src/storage/tagging_store/recipient_tagging_store.ts +5 -5
  467. package/src/storage/tagging_store/sender_tagging_store.ts +235 -141
  468. package/src/storage/tagging_store/tagging_secret_sources_store.ts +138 -0
  469. package/src/tagging/constants.ts +19 -9
  470. package/src/tagging/get_all_logs_by_tags.ts +87 -35
  471. package/src/tagging/index.ts +5 -4
  472. package/src/tagging/persist_sender_tagging_index_ranges.ts +57 -0
  473. package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +301 -0
  474. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +4 -4
  475. package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
  476. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +52 -17
  477. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +44 -14
  478. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +31 -27
  479. package/dest/contract_function_simulator/oracle/oracle.d.ts +0 -60
  480. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +0 -1
  481. package/dest/contract_function_simulator/oracle/oracle.js +0 -356
  482. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +0 -6
  483. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +0 -1
  484. package/dest/contract_function_simulator/proxied_contract_data_source.js +0 -80
  485. package/dest/contract_sync/index.d.ts +0 -23
  486. package/dest/contract_sync/index.d.ts.map +0 -1
  487. package/dest/contract_sync/index.js +0 -54
  488. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
  489. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
  490. package/dest/storage/tagging_store/sender_address_book_store.d.ts +0 -14
  491. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +0 -1
  492. package/dest/storage/tagging_store/sender_address_book_store.js +0 -36
  493. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +0 -15
  494. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +0 -1
  495. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +0 -99
  496. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +0 -15
  497. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +0 -1
  498. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +0 -32
  499. package/src/contract_function_simulator/oracle/oracle.ts +0 -630
  500. package/src/contract_function_simulator/proxied_contract_data_source.ts +0 -83
  501. package/src/contract_sync/index.ts +0 -98
  502. package/src/storage/tagging_store/sender_address_book_store.ts +0 -48
  503. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -143
  504. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -49
@@ -1,6 +1,5 @@
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 { 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
2
  import { arrayNonEmptyLength, padArrayEnd } from '@aztec/foundation/collection';
3
- import { poseidon2HashWithSeparator } from '@aztec/foundation/crypto/poseidon';
4
3
  import { Fr } from '@aztec/foundation/curves/bn254';
5
4
  import { createLogger } from '@aztec/foundation/log';
6
5
  import { Timer } from '@aztec/foundation/timer';
@@ -10,79 +9,128 @@ import { ExecutionError, createSimulationError, extractCallStack, resolveAsserti
10
9
  import { FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
11
10
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
12
11
  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';
12
+ import { computeNoteHashNonce, computeProtocolNullifier, computeSiloedPrivateLogFirstField, computeUniqueNoteHash, siloNoteHash, siloNullifier } from '@aztec/stdlib/hash';
13
+ import { ClaimedLengthArray, PartialPrivateTailPublicInputsForPublic, PartialPrivateTailPublicInputsForRollup, PrivateKernelTailCircuitPublicInputs, PrivateToPublicAccumulatedData, PrivateToRollupAccumulatedData, PublicCallRequest, ReadRequestActionEnum, ScopedLogHash, ScopedNoteHash, ScopedNullifier, ScopedReadRequest, buildTransientDataHints, getNoteHashReadRequestResetActions, getNullifierReadRequestResetActions } from '@aztec/stdlib/kernel';
15
14
  import { PrivateLog } from '@aztec/stdlib/logs';
16
15
  import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
17
16
  import { ChonkProof } from '@aztec/stdlib/proofs';
18
- import { CallContext, HashedValues, PrivateExecutionResult, TxConstantData, collectNested, getFinalMinRevertibleSideEffectCounter } from '@aztec/stdlib/tx';
17
+ import { MerkleTreeId } from '@aztec/stdlib/trees';
18
+ import { CallContext, HashedValues, PrivateExecutionResult, TxConstantData, collectNested, collectNoteHashNullifierCounterMap, getFinalMinRevertibleSideEffectCounter } from '@aztec/stdlib/tx';
19
+ import { CapsuleService } from '../storage/capsule_store/capsule_service.js';
20
+ import { FactService } from '../storage/fact_store/index.js';
21
+ import { AnchoredContractData } from './anchored_contract_data.js';
19
22
  import { ExecutionNoteCache } from './execution_note_cache.js';
20
23
  import { ExecutionTaggingIndexCache } from './execution_tagging_index_cache.js';
21
24
  import { HashedValuesCache } from './hashed_values_cache.js';
22
- import { Oracle } from './oracle/oracle.js';
25
+ import { buildACIRCallback } from './oracle/acir_callback.js';
23
26
  import { executePrivateFunction } from './oracle/private_execution.js';
24
27
  import { PrivateExecutionOracle } from './oracle/private_execution_oracle.js';
25
28
  import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
29
+ import { TransientArrayService } from './transient_array_service.js';
26
30
  /**
27
31
  * The contract function simulator.
28
32
  */ export class ContractFunctionSimulator {
33
+ log;
29
34
  contractStore;
35
+ contractClassService;
36
+ overrides;
30
37
  noteStore;
31
38
  keyStore;
32
39
  addressStore;
33
40
  aztecNode;
41
+ l2TipsStore;
34
42
  senderTaggingStore;
35
43
  recipientTaggingStore;
36
- senderAddressBookStore;
44
+ taggingSecretSourcesStore;
37
45
  capsuleStore;
46
+ factStore;
38
47
  privateEventStore;
39
48
  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;
49
+ contractSyncService;
50
+ txResolver;
51
+ hooks;
52
+ constructor(args){
53
+ this.contractStore = args.contractStore;
54
+ this.contractClassService = args.contractClassService;
55
+ this.overrides = args.overrides;
56
+ this.noteStore = args.noteStore;
57
+ this.keyStore = args.keyStore;
58
+ this.addressStore = args.addressStore;
59
+ this.aztecNode = args.aztecNode;
60
+ this.l2TipsStore = args.l2TipsStore;
61
+ this.senderTaggingStore = args.senderTaggingStore;
62
+ this.recipientTaggingStore = args.recipientTaggingStore;
63
+ this.taggingSecretSourcesStore = args.taggingSecretSourcesStore;
64
+ this.capsuleStore = args.capsuleStore;
65
+ this.factStore = args.factStore;
66
+ this.privateEventStore = args.privateEventStore;
67
+ this.simulator = args.simulator;
68
+ this.contractSyncService = args.contractSyncService;
69
+ this.txResolver = args.txResolver;
70
+ this.hooks = args.hooks;
53
71
  this.log = createLogger('simulator');
54
72
  }
55
73
  /**
56
74
  * Runs a private function.
57
75
  * @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) {
76
+ */ async run(request, { msgSender = AztecAddress.NULL_MSG_SENDER, anchorBlockHeader, senderForTags, scopes, jobId }) {
69
77
  const simulatorSetupTimer = new Timer();
70
- const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(contractAddress, selector);
78
+ const contractAddress = request.origin;
79
+ const anchoredContractData = new AnchoredContractData(this.contractStore, this.contractClassService, anchorBlockHeader, this.overrides);
80
+ const entryPointArtifact = await anchoredContractData.getFunctionArtifactWithDebugMetadata(contractAddress, request.functionSelector);
81
+ if (!entryPointArtifact) {
82
+ throw new Error(`Cannot run function ${request.functionSelector} on ${contractAddress}: the contract is not registered. ` + `Register it via wallet.registerContract(...).`);
83
+ }
71
84
  if (entryPointArtifact.functionType !== FunctionType.PRIVATE) {
72
85
  throw new Error(`Cannot run ${entryPointArtifact.functionType} function as private`);
73
86
  }
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
87
  // reserve the first side effect for the tx hash (inserted by the private kernel)
78
88
  const startSideEffectCounter = 2;
79
89
  const callContext = new CallContext(msgSender, contractAddress, await FunctionSelector.fromNameAndParameters(entryPointArtifact.name, entryPointArtifact.parameters), entryPointArtifact.isStatic);
80
90
  const protocolNullifier = await computeProtocolNullifier(await request.toTxRequest().hash());
81
91
  const noteCache = new ExecutionNoteCache(protocolNullifier);
82
92
  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);
93
+ // One shared transient store for the whole execution tree rooted at this transaction. Threaded into every child
94
+ // private oracle and inherited by nested utility frames, so that frames of the same contract see each other's
95
+ // transient arrays, then discarded when run() returns.
96
+ const transientArrayService = new TransientArrayService();
97
+ const privateExecutionOracle = new PrivateExecutionOracle({
98
+ argsHash: request.firstCallArgsHash,
99
+ txContext: request.txContext,
100
+ txRequestSalt: request.salt,
101
+ callContext,
102
+ anchorBlockHeader,
103
+ utilityExecutor: async (call, execScopes)=>{
104
+ await this.runUtility(call, [], anchorBlockHeader, execScopes, jobId);
105
+ },
106
+ authWitnesses: request.authWitnesses,
107
+ capsules: request.capsules,
108
+ executionCache: HashedValuesCache.create(request.argsOfCalls),
109
+ noteCache,
110
+ taggingIndexCache,
111
+ anchoredContractData,
112
+ noteStore: this.noteStore,
113
+ keyStore: this.keyStore,
114
+ addressStore: this.addressStore,
115
+ aztecNode: this.aztecNode,
116
+ senderTaggingStore: this.senderTaggingStore,
117
+ recipientTaggingStore: this.recipientTaggingStore,
118
+ taggingSecretSourcesStore: this.taggingSecretSourcesStore,
119
+ capsuleService: new CapsuleService(this.capsuleStore, scopes),
120
+ factService: new FactService(this.factStore, scopes),
121
+ privateEventStore: this.privateEventStore,
122
+ txResolver: this.txResolver,
123
+ contractSyncService: this.contractSyncService,
124
+ jobId,
125
+ totalPublicCalldataCount: 0,
126
+ sideEffectCounter: startSideEffectCounter,
127
+ scopes,
128
+ senderForTags,
129
+ simulator: this.simulator,
130
+ l2TipsStore: this.l2TipsStore,
131
+ hooks: this.hooks,
132
+ transientArrayService
133
+ });
86
134
  const setupTime = simulatorSetupTimer.ms();
87
135
  try {
88
136
  // Note: any nested private function calls are made recursively within this
@@ -91,15 +139,14 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
91
139
  // within executionResult.nestedExecutionResults).
92
140
  const executionResult = await executePrivateFunction(this.simulator, privateExecutionOracle, entryPointArtifact, contractAddress, request.functionSelector);
93
141
  const simulatorTeardownTimer = new Timer();
94
- noteCache.finish();
95
- const firstNullifierHint = noteCache.getNonceGenerator();
142
+ const firstNullifier = noteCache.getNonceGenerator();
96
143
  const publicCallRequests = collectNested([
97
144
  executionResult
98
145
  ], (r)=>r.publicInputs.publicCallRequests.getActiveItems().map((r)=>r.inner).concat(r.publicInputs.publicTeardownCallRequest.isEmpty() ? [] : [
99
146
  r.publicInputs.publicTeardownCallRequest
100
147
  ]));
101
148
  const publicFunctionsCalldata = await Promise.all(publicCallRequests.map(async (r)=>{
102
- const calldata = await privateExecutionOracle.privateLoadFromExecutionCache(r.calldataHash);
149
+ const calldata = await privateExecutionOracle.getHashPreimage(r.calldataHash);
103
150
  return new HashedValues(calldata, r.calldataHash);
104
151
  }));
105
152
  const teardownTime = simulatorTeardownTimer.ms();
@@ -108,35 +155,67 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
108
155
  executionResult.profileResult.timings.witgen += setupTime + teardownTime;
109
156
  }
110
157
  // Not to be confused with a PrivateCallExecutionResult. This is a superset
111
- // of the PrivateCallExecutionResult, containing also firstNullifierHint
158
+ // of the PrivateCallExecutionResult, containing also firstNullifier
112
159
  // and publicFunctionsCalldata.
113
- return new PrivateExecutionResult(executionResult, firstNullifierHint, publicFunctionsCalldata);
160
+ return new PrivateExecutionResult(executionResult, firstNullifier, publicFunctionsCalldata);
114
161
  } catch (err) {
115
162
  throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
116
163
  }
117
164
  }
118
- // docs:start:execute_utility_function
119
165
  /**
120
166
  * Runs a utility function.
121
167
  * @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
168
  * @returns A return value of the utility function in a form as returned by the simulator (Noir fields)
127
169
  */ async runUtility(call, authwits, anchorBlockHeader, scopes, jobId) {
128
- const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
170
+ const anchoredContractData = new AnchoredContractData(this.contractStore, this.contractClassService, anchorBlockHeader, this.overrides);
171
+ const entryPointArtifact = await anchoredContractData.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
172
+ if (!entryPointArtifact) {
173
+ throw new Error(`Cannot run function ${call.selector} on ${call.to}: the contract is not registered. ` + `Register it via wallet.registerContract(...).`);
174
+ }
129
175
  if (entryPointArtifact.functionType !== FunctionType.UTILITY) {
130
176
  throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
131
177
  }
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);
178
+ const utilityExecutor = async (syncCall, execScopes)=>{
179
+ await this.runUtility(syncCall, [], anchorBlockHeader, execScopes, jobId);
180
+ };
181
+ const oracle = new UtilityExecutionOracle({
182
+ callContext: CallContext.from({
183
+ msgSender: AztecAddress.NULL_MSG_SENDER,
184
+ contractAddress: call.to,
185
+ functionSelector: call.selector,
186
+ isStaticCall: true
187
+ }),
188
+ authWitnesses: authwits,
189
+ capsules: [],
190
+ anchorBlockHeader,
191
+ anchoredContractData,
192
+ noteStore: this.noteStore,
193
+ keyStore: this.keyStore,
194
+ addressStore: this.addressStore,
195
+ aztecNode: this.aztecNode,
196
+ recipientTaggingStore: this.recipientTaggingStore,
197
+ taggingSecretSourcesStore: this.taggingSecretSourcesStore,
198
+ capsuleService: new CapsuleService(this.capsuleStore, scopes),
199
+ factService: new FactService(this.factStore, scopes),
200
+ privateEventStore: this.privateEventStore,
201
+ txResolver: this.txResolver,
202
+ contractSyncService: this.contractSyncService,
203
+ l2TipsStore: this.l2TipsStore,
204
+ jobId,
205
+ scopes,
206
+ simulator: this.simulator,
207
+ hooks: this.hooks,
208
+ utilityExecutor,
209
+ // Execution-tree root (top-level utility run or contract sync): own store; nested frames inherit it.
210
+ transientArrayService: new TransientArrayService()
211
+ });
133
212
  try {
134
213
  this.log.verbose(`Executing utility function ${entryPointArtifact.name}`, {
135
214
  contract: call.to,
136
215
  selector: call.selector
137
216
  });
138
217
  const initialWitness = toACVMWitness(0, call.args);
139
- const acirExecutionResult = await this.simulator.executeUserCircuit(initialWitness, entryPointArtifact, new Oracle(oracle).toACIRCallback()).catch((err)=>{
218
+ const acirExecutionResult = await this.simulator.executeUserCircuit(initialWitness, entryPointArtifact, buildACIRCallback(oracle)).catch((err)=>{
140
219
  err.message = resolveAssertionMessageFromError(err, entryPointArtifact);
141
220
  throw new ExecutionError(err.message, {
142
221
  contractAddress: call.to,
@@ -145,13 +224,15 @@ import { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
145
224
  cause: err
146
225
  });
147
226
  });
148
- this.log.verbose(`Utility simulation for ${call.to}.${call.selector} completed`);
149
- return witnessMapToFields(acirExecutionResult.returnWitness);
227
+ this.log.verbose(`Utility execution for ${call.to}.${call.selector} completed`);
228
+ return {
229
+ result: witnessMapToFields(acirExecutionResult.returnWitness),
230
+ offchainEffects: oracle.getOffchainEffects()
231
+ };
150
232
  } catch (err) {
151
233
  throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
152
234
  }
153
235
  }
154
- // docs:end:execute_utility_function
155
236
  /**
156
237
  * Returns the execution statistics collected during the simulator run.
157
238
  * @returns The execution statistics.
@@ -185,38 +266,54 @@ class OrderedSideEffect {
185
266
  * (allowing state overrides) and is much faster, while still generating a valid
186
267
  * output that can be sent to the node for public simulation
187
268
  * @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.
269
+ * @param debugFunctionNameGetter - A provider for contract data in order to get function names and debug info.
270
+ * @param node - AztecNode for verifying settled read requests against the note hash and nullifier trees.
189
271
  * @param minRevertibleSideEffectCounterOverride - Optional override for the min revertible side effect counter.
190
272
  * Used by TXE to simulate account contract behavior (setting the counter before app execution).
191
273
  * @returns The simulated proving result.
192
- */ export async function generateSimulatedProvingResult(privateExecutionResult, contractStore, minRevertibleSideEffectCounterOverride) {
193
- const siloedNoteHashes = [];
194
- const nullifiers = [];
274
+ */ export async function generateSimulatedProvingResult(privateExecutionResult, debugFunctionNameGetter, node, minRevertibleSideEffectCounterOverride) {
195
275
  const taggedPrivateLogs = [];
196
276
  const l2ToL1Messages = [];
197
277
  const contractClassLogsHashes = [];
198
278
  const publicCallRequests = [];
199
279
  const executionSteps = [];
280
+ // Unsiloed scoped arrays — used for squashing, read request verification,
281
+ // and siloed at the end only for the surviving items
282
+ const scopedNoteHashes = [];
283
+ const scopedNullifiers = [];
284
+ // Read requests for verification
285
+ const noteHashReadRequests = [];
286
+ const nullifierReadRequests = [];
200
287
  let publicTeardownCallRequest;
288
+ // We set expiration timestamp to anchor_block_timestamp + MAX_TX_LIFETIME (24h) just like kernels do
289
+ let expirationTimestamp = privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader.globalVariables.timestamp + BigInt(MAX_TX_LIFETIME);
290
+ let feePayer = AztecAddress.zero();
201
291
  const executions = [
202
292
  privateExecutionResult.entrypoint
203
293
  ];
204
294
  while(executions.length !== 0){
205
295
  const execution = executions.shift();
206
296
  executions.unshift(...execution.nestedExecutionResults);
297
+ // Just like kernels we overwrite the default value if the call sets it.
298
+ const callExpirationTimestamp = execution.publicInputs.expirationTimestamp;
299
+ if (callExpirationTimestamp !== 0n && callExpirationTimestamp < expirationTimestamp) {
300
+ expirationTimestamp = callExpirationTimestamp;
301
+ }
207
302
  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);
303
+ if (execution.publicInputs.isFeePayer) {
304
+ if (!feePayer.isZero()) {
305
+ throw new Error('Multiple fee payers found in private execution result');
306
+ }
307
+ feePayer = contractAddress;
308
+ }
309
+ scopedNoteHashes.push(...execution.publicInputs.noteHashes.getActiveItems().filter((nh)=>!nh.isEmpty()).map((nh)=>nh.scope(contractAddress)));
310
+ scopedNullifiers.push(...execution.publicInputs.nullifiers.getActiveItems().map((n)=>n.scope(contractAddress)));
311
+ taggedPrivateLogs.push(...await Promise.all(execution.publicInputs.privateLogs.getActiveItems().map(async (metadata)=>{
312
+ metadata.log.fields[0] = await computeSiloedPrivateLogFirstField(contractAddress, metadata.log.fields[0]);
313
+ return new OrderedSideEffect(metadata, metadata.counter);
314
+ })));
315
+ noteHashReadRequests.push(...execution.publicInputs.noteHashReadRequests.getActiveItems());
316
+ nullifierReadRequests.push(...execution.publicInputs.nullifierReadRequests.getActiveItems());
220
317
  l2ToL1Messages.push(...execution.publicInputs.l2ToL1Msgs.getActiveItems().map((message)=>new OrderedSideEffect(message.message.scope(contractAddress), message.counter)));
221
318
  contractClassLogsHashes.push(...execution.publicInputs.contractClassLogsHashes.getActiveItems().map((contractClassLogHash)=>new OrderedSideEffect(contractClassLogHash.logHash.scope(contractAddress), contractClassLogHash.counter)));
222
319
  publicCallRequests.push(...execution.publicInputs.publicCallRequests.getActiveItems().map((callRequest)=>new OrderedSideEffect(callRequest.inner, callRequest.counter)));
@@ -225,7 +322,7 @@ class OrderedSideEffect {
225
322
  }
226
323
  publicTeardownCallRequest = execution.publicInputs.publicTeardownCallRequest.isEmpty() ? publicTeardownCallRequest : execution.publicInputs.publicTeardownCallRequest;
227
324
  executionSteps.push({
228
- functionName: await contractStore.getDebugFunctionName(execution.publicInputs.callContext.contractAddress, execution.publicInputs.callContext.functionSelector),
325
+ functionName: await debugFunctionNameGetter(execution.publicInputs.callContext.contractAddress, execution.publicInputs.callContext.functionSelector),
229
326
  timings: execution.profileResult?.timings ?? {
230
327
  witgen: 0,
231
328
  oracles: {}
@@ -235,6 +332,14 @@ class OrderedSideEffect {
235
332
  witness: execution.partialWitness
236
333
  });
237
334
  }
335
+ const noteHashNullifierCounterMap = collectNoteHashNullifierCounterMap(privateExecutionResult);
336
+ const minRevertibleSideEffectCounter = minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
337
+ const scopedNoteHashesCLA = new ClaimedLengthArray(padArrayEnd(scopedNoteHashes, ScopedNoteHash.empty(), MAX_NOTE_HASHES_PER_TX), scopedNoteHashes.length);
338
+ const scopedNullifiersCLA = new ClaimedLengthArray(padArrayEnd(scopedNullifiers, ScopedNullifier.empty(), MAX_NULLIFIERS_PER_TX), scopedNullifiers.length);
339
+ const { filteredNoteHashes, filteredNullifiers, filteredPrivateLogs } = squashTransientSideEffects(taggedPrivateLogs, scopedNoteHashesCLA, scopedNullifiersCLA, noteHashNullifierCounterMap, minRevertibleSideEffectCounter);
340
+ await verifyReadRequests(node, await privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader.hash(), noteHashReadRequests, nullifierReadRequests, scopedNoteHashesCLA, scopedNullifiersCLA);
341
+ 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)));
342
+ 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
343
  const constantData = new TxConstantData(privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader, privateExecutionResult.entrypoint.publicInputs.txContext, getVKTreeRoot(), protocolContractsHash);
239
344
  const hasPublicCalls = privateExecutionResult.publicFunctionCalldata.length !== 0;
240
345
  let inputsForRollup;
@@ -243,54 +348,112 @@ class OrderedSideEffect {
243
348
  const sortByCounter = (a, b)=>a.counter - b.counter;
244
349
  const getEffect = (orderedSideEffect)=>orderedSideEffect.sideEffect;
245
350
  const isPrivateOnlyTx = privateExecutionResult.publicFunctionCalldata.length === 0;
246
- const minRevertibleSideEffectCounter = minRevertibleSideEffectCounterOverride ?? getFinalMinRevertibleSideEffectCounter(privateExecutionResult);
247
- const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(nullifiers.sort(sortByCounter), minRevertibleSideEffectCounter);
351
+ const [nonRevertibleNullifiers, revertibleNullifiers] = splitOrderedSideEffects(siloedNullifiers, minRevertibleSideEffectCounter);
352
+ // The protocol nullifier is the nonce generator and the tx's first nullifier. It is injected by the
353
+ // init kernel (at counter 1, index 0) rather than emitted by any private call, so it is absent from
354
+ // the executed nullifiers above. Mirror the kernel here by prepending it as the first non-revertible
355
+ // nullifier.
248
356
  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
- }
357
+ nonRevertibleNullifiers.unshift(nonceGenerator);
254
358
  if (isPrivateOnlyTx) {
255
359
  // We must make the note hashes unique by using the
256
360
  // nonce generator and their index in the tx.
257
- const uniqueNoteHashes = await Promise.all(siloedNoteHashes.sort(sortByCounter).map(async (orderedSideEffect, i)=>{
361
+ const uniqueNoteHashes = await Promise.all(siloedNoteHashes.map(async (orderedSideEffect, i)=>{
258
362
  const siloedNoteHash = orderedSideEffect.sideEffect;
259
363
  const nonce = await computeNoteHashNonce(nonceGenerator, i);
260
364
  const uniqueNoteHash = await computeUniqueNoteHash(nonce, siloedNoteHash);
261
365
  return uniqueNoteHash;
262
366
  }));
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);
367
+ 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));
368
+ gasUsed = meterGasUsed(accumulatedDataForRollup, isPrivateOnlyTx);
265
369
  inputsForRollup = new PartialPrivateTailPublicInputsForRollup(accumulatedDataForRollup);
266
370
  } else {
267
- const [nonRevertibleNoteHashes, revertibleNoteHashes] = splitOrderedSideEffects(siloedNoteHashes.sort(sortByCounter), minRevertibleSideEffectCounter);
371
+ const [nonRevertibleNoteHashes, revertibleNoteHashes] = splitOrderedSideEffects(siloedNoteHashes, minRevertibleSideEffectCounter);
268
372
  const nonRevertibleUniqueNoteHashes = await Promise.all(nonRevertibleNoteHashes.map(async (noteHash, i)=>{
269
373
  const nonce = await computeNoteHashNonce(nonceGenerator, i);
270
374
  return await computeUniqueNoteHash(nonce, noteHash);
271
375
  }));
272
376
  const [nonRevertibleL2ToL1Messages, revertibleL2ToL1Messages] = splitOrderedSideEffects(l2ToL1Messages.sort(sortByCounter), minRevertibleSideEffectCounter);
273
- const [nonRevertibleTaggedPrivateLogs, revertibleTaggedPrivateLogs] = splitOrderedSideEffects(taggedPrivateLogs, minRevertibleSideEffectCounter);
377
+ const [nonRevertibleTaggedPrivateLogs, revertibleTaggedPrivateLogs] = splitOrderedSideEffects(filteredPrivateLogs, minRevertibleSideEffectCounter);
274
378
  const [nonRevertibleContractClassLogHashes, revertibleContractClassLogHashes] = splitOrderedSideEffects(contractClassLogsHashes.sort(sortByCounter), minRevertibleSideEffectCounter);
275
379
  const [nonRevertiblePublicCallRequests, revertiblePublicCallRequests] = splitOrderedSideEffects(publicCallRequests.sort(sortByCounter), minRevertibleSideEffectCounter);
276
380
  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
381
  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));
382
+ gasUsed = meterGasUsed(revertibleData, isPrivateOnlyTx).add(meterGasUsed(nonRevertibleData, isPrivateOnlyTx));
279
383
  if (publicTeardownCallRequest) {
280
- gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
384
+ gasUsed = gasUsed.add(privateExecutionResult.entrypoint.publicInputs.txContext.gasSettings.teardownGasLimits);
281
385
  }
282
386
  inputsForPublic = new PartialPrivateTailPublicInputsForPublic(nonRevertibleData, revertibleData, publicTeardownCallRequest ?? PublicCallRequest.empty());
283
387
  }
284
388
  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);
389
+ l2Gas: isPrivateOnlyTx ? PRIVATE_TX_L2_GAS_OVERHEAD : PUBLIC_TX_L2_GAS_OVERHEAD,
390
+ daGas: TX_DA_GAS_OVERHEAD
391
+ })), /*feePayer=*/ feePayer, /*expirationTimestamp=*/ expirationTimestamp, hasPublicCalls ? inputsForPublic : undefined, !hasPublicCalls ? inputsForRollup : undefined);
288
392
  return {
289
393
  publicInputs,
290
394
  chonkProof: ChonkProof.empty(),
291
395
  executionSteps
292
396
  };
293
397
  }
398
+ /**
399
+ * Squashes transient note hashes and nullifiers, mimicking the behavior
400
+ * of the reset kernels. Returns the filtered (surviving) scoped items and private logs.
401
+ */ function squashTransientSideEffects(taggedPrivateLogs, scopedNoteHashesCLA, scopedNullifiersCLA, noteHashNullifierCounterMap, minRevertibleSideEffectCounter) {
402
+ const { numTransientData, hints: transientDataHints } = buildTransientDataHints(scopedNoteHashesCLA, scopedNullifiersCLA, /*futureNoteHashReads=*/ [], /*futureNullifierReads=*/ [], /*futureLogs=*/ [], noteHashNullifierCounterMap, minRevertibleSideEffectCounter);
403
+ const squashedNoteHashCounters = new Set();
404
+ const squashedNullifierCounters = new Set();
405
+ for(let i = 0; i < numTransientData; i++){
406
+ const hint = transientDataHints[i];
407
+ squashedNoteHashCounters.add(scopedNoteHashesCLA.array[hint.noteHashIndex].counter);
408
+ squashedNullifierCounters.add(scopedNullifiersCLA.array[hint.nullifierIndex].counter);
409
+ }
410
+ return {
411
+ filteredNoteHashes: scopedNoteHashesCLA.getActiveItems().filter((nh)=>!squashedNoteHashCounters.has(nh.counter)),
412
+ filteredNullifiers: scopedNullifiersCLA.getActiveItems().filter((n)=>!squashedNullifierCounters.has(n.counter)),
413
+ filteredPrivateLogs: taggedPrivateLogs.filter((item)=>!squashedNoteHashCounters.has(item.sideEffect.noteHashCounter)).map((item)=>new OrderedSideEffect(item.sideEffect.log, item.counter))
414
+ };
415
+ }
416
+ /**
417
+ * Verifies settled read requests by checking membership in the note hash and nullifier trees
418
+ * at the tx's anchor block, mimicking the behavior of the kernels
419
+ */ async function verifyReadRequests(node, anchorBlockHash, noteHashReadRequests, nullifierReadRequests, scopedNoteHashesCLA, scopedNullifiersCLA) {
420
+ const noteHashReadRequestsCLA = new ClaimedLengthArray(padArrayEnd(noteHashReadRequests, ScopedReadRequest.empty(), MAX_NOTE_HASH_READ_REQUESTS_PER_TX), noteHashReadRequests.length);
421
+ const nullifierReadRequestsCLA = new ClaimedLengthArray(padArrayEnd(nullifierReadRequests, ScopedReadRequest.empty(), MAX_NULLIFIER_READ_REQUESTS_PER_TX), nullifierReadRequests.length);
422
+ const noteHashResetActions = getNoteHashReadRequestResetActions(noteHashReadRequestsCLA, scopedNoteHashesCLA);
423
+ const nullifierResetActions = getNullifierReadRequestResetActions(nullifierReadRequestsCLA, scopedNullifiersCLA);
424
+ const settledNoteHashReads = [];
425
+ for(let i = 0; i < noteHashResetActions.actions.length; i++){
426
+ if (noteHashResetActions.actions[i] === ReadRequestActionEnum.READ_AS_SETTLED) {
427
+ settledNoteHashReads.push({
428
+ index: i,
429
+ value: noteHashReadRequests[i].value
430
+ });
431
+ }
432
+ }
433
+ const settledNullifierReads = [];
434
+ for(let i = 0; i < nullifierResetActions.actions.length; i++){
435
+ if (nullifierResetActions.actions[i] === ReadRequestActionEnum.READ_AS_SETTLED) {
436
+ settledNullifierReads.push({
437
+ index: i,
438
+ value: nullifierReadRequests[i].value
439
+ });
440
+ }
441
+ }
442
+ const [noteHashResults, nullifierResults] = await Promise.all([
443
+ settledNoteHashReads.length > 0 ? node.findLeavesIndexes(anchorBlockHash, MerkleTreeId.NOTE_HASH_TREE, settledNoteHashReads.map(({ value })=>value)) : [],
444
+ settledNullifierReads.length > 0 ? node.findLeavesIndexes(anchorBlockHash, MerkleTreeId.NULLIFIER_TREE, settledNullifierReads.map(({ value })=>value)) : []
445
+ ]);
446
+ for(let i = 0; i < settledNoteHashReads.length; i++){
447
+ if (!noteHashResults[i]) {
448
+ throw new Error(`Note hash read request at index ${settledNoteHashReads[i].index} is reading an unknown note hash: ${settledNoteHashReads[i].value}`);
449
+ }
450
+ }
451
+ for(let i = 0; i < settledNullifierReads.length; i++){
452
+ if (!nullifierResults[i]) {
453
+ throw new Error(`Nullifier read request at index ${settledNullifierReads[i].index} is reading an unknown nullifier: ${settledNullifierReads[i].value}`);
454
+ }
455
+ }
456
+ }
294
457
  function splitOrderedSideEffects(effects, minRevertibleSideEffectCounter) {
295
458
  const revertibleSideEffects = [];
296
459
  const nonRevertibleSideEffects = [];
@@ -306,27 +469,34 @@ function splitOrderedSideEffects(effects, minRevertibleSideEffectCounter) {
306
469
  revertibleSideEffects
307
470
  ];
308
471
  }
309
- function meterGasUsed(data) {
472
+ function meterGasUsed(data, isPrivateOnlyTx) {
310
473
  let meteredDAFields = 0;
311
474
  let meteredL2Gas = 0;
312
475
  const numNoteHashes = arrayNonEmptyLength(data.noteHashes, (hash)=>hash.isEmpty());
313
476
  meteredDAFields += numNoteHashes;
314
- meteredL2Gas += numNoteHashes * AVM_EMITNOTEHASH_BASE_L2_GAS;
477
+ const noteHashBaseGas = isPrivateOnlyTx ? L2_GAS_PER_NOTE_HASH : AVM_EMITNOTEHASH_BASE_L2_GAS;
478
+ meteredL2Gas += numNoteHashes * noteHashBaseGas;
315
479
  const numNullifiers = arrayNonEmptyLength(data.nullifiers, (nullifier)=>nullifier.isEmpty());
316
480
  meteredDAFields += numNullifiers;
317
- meteredL2Gas += numNullifiers * AVM_EMITNULLIFIER_BASE_L2_GAS;
481
+ const nullifierBaseGas = isPrivateOnlyTx ? L2_GAS_PER_NULLIFIER : AVM_EMITNULLIFIER_BASE_L2_GAS;
482
+ meteredL2Gas += numNullifiers * nullifierBaseGas;
318
483
  const numL2toL1Messages = arrayNonEmptyLength(data.l2ToL1Msgs, (msg)=>msg.isEmpty());
319
484
  meteredDAFields += numL2toL1Messages;
320
- meteredL2Gas += numL2toL1Messages * AVM_SENDL2TOL1MSG_BASE_L2_GAS;
485
+ const l2ToL1MessageBaseGas = isPrivateOnlyTx ? L2_GAS_PER_L2_TO_L1_MSG : AVM_SENDL2TOL1MSG_BASE_L2_GAS;
486
+ meteredL2Gas += numL2toL1Messages * l2ToL1MessageBaseGas;
321
487
  const numPrivatelogs = arrayNonEmptyLength(data.privateLogs, (log)=>log.isEmpty());
322
488
  // Every private log emits its length as an additional field
323
489
  meteredDAFields += data.privateLogs.reduce((acc, log)=>!log.isEmpty() ? acc + log.emittedLength + 1 : acc, 0);
324
490
  meteredL2Gas += numPrivatelogs * L2_GAS_PER_PRIVATE_LOG;
325
491
  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);
492
+ // Every contract class log emits its contract address as an additional field
493
+ meteredDAFields += data.contractClassLogsHashes.reduce((acc, log)=>!log.isEmpty() ? acc + log.logHash.length + 1 : acc, 0);
328
494
  meteredL2Gas += numContractClassLogs * L2_GAS_PER_CONTRACT_CLASS_LOG;
329
- const meteredDAGas = meteredDAFields * DA_BYTES_PER_FIELD * DA_GAS_PER_BYTE;
495
+ if (isPrivateOnlyTx) {
496
+ // The public data write that the private tx base rollup always performs to update the fee payer's balance.
497
+ meteredDAFields += PUBLIC_DATA_WRITE_LENGTH;
498
+ }
499
+ const meteredDAGas = meteredDAFields * DA_GAS_PER_FIELD;
330
500
  if (data.publicCallRequests) {
331
501
  const dataForPublic = data;
332
502
  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"}