@aztec/pxe 0.0.1-commit.b655e406 → 0.0.1-commit.b6e433891

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