@aztec/pxe 0.0.1-commit.e558bd1c → 0.0.1-commit.e57c76e

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