@aztec/pxe 0.0.1-commit.e3c1de76 → 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 (347) 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 +9 -3
  12. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  13. package/dest/block_synchronizer/block_synchronizer.js +37 -11
  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 +66 -29
  19. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  20. package/dest/contract_function_simulator/contract_function_simulator.js +216 -75
  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 -275
  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 -95
  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 +141 -110
  78. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +156 -76
  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 +450 -166
  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 +42 -0
  91. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
  92. package/dest/contract_sync/contract_sync_service.js +135 -0
  93. package/dest/contract_sync/helpers.d.ts +27 -0
  94. package/dest/contract_sync/helpers.d.ts.map +1 -0
  95. package/dest/contract_sync/{index.js → helpers.js} +16 -17
  96. package/dest/debug/pxe_debug_utils.d.ts +14 -15
  97. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  98. package/dest/debug/pxe_debug_utils.js +16 -21
  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 +5 -3
  115. package/dest/entrypoints/server/index.d.ts.map +1 -1
  116. package/dest/entrypoints/server/index.js +4 -2
  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 +131 -84
  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 +120 -24
  171. package/dest/pxe.d.ts.map +1 -1
  172. package/dest/pxe.js +231 -134
  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 +6 -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 +29 -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 +39 -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 +391 -136
  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 +564 -473
  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 +173 -205
  268. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +664 -245
  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 +189 -0
  273. package/src/contract_sync/{index.ts → helpers.ts} +17 -29
  274. package/src/debug/pxe_debug_utils.ts +47 -25
  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 +4 -2
  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 +162 -145
  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 +416 -181
  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 +9 -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/contract_sync/index.d.ts +0 -23
  337. package/dest/contract_sync/index.d.ts.map +0 -1
  338. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
  339. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
  340. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +0 -15
  341. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +0 -1
  342. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +0 -99
  343. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +0 -15
  344. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +0 -1
  345. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +0 -32
  346. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -143
  347. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -49
@@ -1,12 +1,12 @@
1
1
  import type { FUNCTION_TREE_HEIGHT } from '@aztec/constants';
2
- import type { Fr } from '@aztec/foundation/curves/bn254';
2
+ import { Fr } from '@aztec/foundation/curves/bn254';
3
3
  import { toArray } from '@aztec/foundation/iterable';
4
+ import { BufferReader, numToUInt8, serializeToBuffer } from '@aztec/foundation/serialize';
4
5
  import type { MembershipWitness } from '@aztec/foundation/trees';
5
6
  import type { AztecAsyncKVStore, AztecAsyncMap } from '@aztec/kv-store';
6
7
  import {
7
8
  type ContractArtifact,
8
9
  type FunctionAbi,
9
- type FunctionArtifact,
10
10
  type FunctionArtifactWithContractName,
11
11
  FunctionCall,
12
12
  type FunctionDebugMetadata,
@@ -15,11 +15,14 @@ import {
15
15
  contractArtifactFromBuffer,
16
16
  contractArtifactToBuffer,
17
17
  encodeArguments,
18
+ findFunctionAbiBySelector,
19
+ findFunctionArtifactBySelector,
18
20
  getFunctionDebugMetadata,
19
21
  } from '@aztec/stdlib/abi';
20
22
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
21
23
  import {
22
- type ContractClass,
24
+ type ContractClassIdPreimage,
25
+ type ContractClassWithId,
23
26
  type ContractInstanceWithAddress,
24
27
  SerializableContractInstance,
25
28
  getContractClassFromArtifact,
@@ -27,6 +30,68 @@ import {
27
30
 
28
31
  import { PrivateFunctionsTree } from './private_functions_tree.js';
29
32
 
33
+ const VERSION = 1 as const;
34
+
35
+ /**
36
+ * All contract class data except the large packedBytecode.
37
+ * The expensive data from the ContractClass is precomputed and stored in this format to avoid redundant hashing.
38
+ * Since we have to store the artifacts anyway, the final ContractClass is reconstructed by combining this data
39
+ * with the packedBytecode obtained from the former. That way we can have quick class lookups without wasted storage.
40
+ */
41
+ export class SerializableContractClassData {
42
+ public readonly version = VERSION;
43
+ public readonly id: Fr;
44
+ public readonly artifactHash: Fr;
45
+ public readonly privateFunctionsRoot: Fr;
46
+ public readonly publicBytecodeCommitment: Fr;
47
+ public readonly privateFunctions: { selector: FunctionSelector; vkHash: Fr }[];
48
+
49
+ constructor(
50
+ data: ContractClassIdPreimage & {
51
+ id: Fr;
52
+ privateFunctions: { selector: FunctionSelector; vkHash: Fr }[];
53
+ },
54
+ ) {
55
+ this.id = data.id;
56
+ this.artifactHash = data.artifactHash;
57
+ this.privateFunctionsRoot = data.privateFunctionsRoot;
58
+ this.publicBytecodeCommitment = data.publicBytecodeCommitment;
59
+ this.privateFunctions = data.privateFunctions;
60
+ }
61
+
62
+ toBuffer(): Buffer {
63
+ return serializeToBuffer(
64
+ numToUInt8(this.version),
65
+ this.id,
66
+ this.artifactHash,
67
+ this.privateFunctionsRoot,
68
+ this.publicBytecodeCommitment,
69
+ this.privateFunctions.length,
70
+ ...this.privateFunctions.map(fn => serializeToBuffer(fn.selector, fn.vkHash)),
71
+ );
72
+ }
73
+
74
+ static fromBuffer(bufferOrReader: Buffer | BufferReader): SerializableContractClassData {
75
+ const reader = BufferReader.asReader(bufferOrReader);
76
+ const version = reader.readUInt8();
77
+ if (version !== VERSION) {
78
+ throw new Error(`Unexpected contract class data version ${version}`);
79
+ }
80
+ return new SerializableContractClassData({
81
+ id: reader.readObject(Fr),
82
+ artifactHash: reader.readObject(Fr),
83
+ privateFunctionsRoot: reader.readObject(Fr),
84
+ publicBytecodeCommitment: reader.readObject(Fr),
85
+ privateFunctions: reader.readVector({
86
+ fromBuffer: (r: BufferReader) => ({
87
+ selector: r.readObject(FunctionSelector),
88
+ vkHash: r.readObject(Fr),
89
+ }),
90
+ }),
91
+ });
92
+ }
93
+ }
94
+
30
95
  /**
31
96
  * ContractStore serves as a data manager and retriever for Aztec.nr contracts.
32
97
  * It provides methods to obtain contract addresses, function ABI, bytecode, and membership witnesses
@@ -39,76 +104,95 @@ export class ContractStore {
39
104
  // TODO: Update it to be LRU cache so that it doesn't keep all the data all the time.
40
105
  #privateFunctionTrees: Map<string, PrivateFunctionsTree> = new Map();
41
106
 
42
- /** Map from contract address to contract class id */
107
+ /**
108
+ * In-memory cache of deserialized ContractArtifact objects, keyed by class id string.
109
+ * Avoids repeated LMDB reads + JSON.parse + Zod validation on every oracle call.
110
+ * Artifacts are large but immutable after registration — safe to cache for the lifetime of the store.
111
+ */
112
+ // TODO: Update it to be LRU cache so that it doesn't keep all the data all the time.
113
+ #contractArtifactCache: Map<string, ContractArtifact> = new Map();
114
+
115
+ /** Map from contract address to contract class id (avoids KV round-trip on hot path). */
43
116
  #contractClassIdMap: Map<string, Fr> = new Map();
44
117
 
45
118
  #store: AztecAsyncKVStore;
46
119
  #contractArtifacts: AztecAsyncMap<string, Buffer>;
120
+ #contractClassData: AztecAsyncMap<string, Buffer>;
47
121
  #contractInstances: AztecAsyncMap<string, Buffer>;
48
122
 
49
123
  constructor(store: AztecAsyncKVStore) {
50
124
  this.#store = store;
51
125
  this.#contractArtifacts = store.openMap('contract_artifacts');
126
+ this.#contractClassData = store.openMap('contract_classes');
52
127
  this.#contractInstances = store.openMap('contracts_instances');
53
128
  }
54
129
 
55
130
  // Setters
56
131
 
57
- public async addContractArtifact(id: Fr, contract: ContractArtifact): Promise<void> {
58
- // Validation outside transactionAsync - these are not DB operations
132
+ /**
133
+ * Registers a new contract artifact and its corresponding class data.
134
+ * IMPORTANT: This method does not verify that the provided artifact matches the class data or that the class id matches the artifact.
135
+ * It is the caller's responsibility to ensure the consistency and correctness of the provided data.
136
+ * This is done to avoid redundant, expensive contract class computations
137
+ */
138
+ public async addContractArtifact(
139
+ contract: ContractArtifact,
140
+ contractClassWithIdAndPreimage?: ContractClassWithId & ContractClassIdPreimage,
141
+ ): Promise<Fr> {
142
+ const contractClass = contractClassWithIdAndPreimage ?? (await getContractClassFromArtifact(contract));
143
+ const key = contractClass.id.toString();
144
+
145
+ if (this.#contractArtifactCache.has(key)) {
146
+ return contractClass.id;
147
+ }
148
+
59
149
  const privateFunctions = contract.functions.filter(
60
150
  functionArtifact => functionArtifact.functionType === FunctionType.PRIVATE,
61
151
  );
62
-
63
152
  const privateSelectors = await Promise.all(
64
- privateFunctions.map(async privateFunctionArtifact =>
65
- (
66
- await FunctionSelector.fromNameAndParameters(privateFunctionArtifact.name, privateFunctionArtifact.parameters)
67
- ).toString(),
153
+ privateFunctions.map(async fn =>
154
+ (await FunctionSelector.fromNameAndParameters(fn.name, fn.parameters)).toString(),
68
155
  ),
69
156
  );
70
-
71
157
  if (privateSelectors.length !== new Set(privateSelectors).size) {
72
158
  throw new Error('Repeated function selectors of private functions');
73
159
  }
74
160
 
75
- await this.#store.transactionAsync(() =>
76
- this.#contractArtifacts.set(id.toString(), contractArtifactToBuffer(contract)),
77
- );
161
+ this.#contractArtifactCache.set(key, contract);
162
+
163
+ await this.#store.transactionAsync(async () => {
164
+ await this.#contractArtifacts.set(key, contractArtifactToBuffer(contract));
165
+ await this.#contractClassData.set(key, new SerializableContractClassData(contractClass).toBuffer());
166
+ });
167
+
168
+ return contractClass.id;
78
169
  }
79
170
 
80
171
  async addContractInstance(contract: ContractInstanceWithAddress): Promise<void> {
81
- this.#contractClassIdMap.set(contract.address.toString(), contract.currentContractClassId);
172
+ await this.#store.transactionAsync(async () => {
173
+ await this.#contractInstances.set(
174
+ contract.address.toString(),
175
+ new SerializableContractInstance(contract).toBuffer(),
176
+ );
177
+ });
82
178
 
83
- await this.#contractInstances.set(
84
- contract.address.toString(),
85
- new SerializableContractInstance(contract).toBuffer(),
86
- );
179
+ this.#contractClassIdMap.set(contract.address.toString(), contract.currentContractClassId);
87
180
  }
88
181
 
89
182
  // Private getters
90
183
 
91
184
  async #getContractClassId(contractAddress: AztecAddress): Promise<Fr | undefined> {
92
- if (!this.#contractClassIdMap.has(contractAddress.toString())) {
185
+ const key = contractAddress.toString();
186
+ if (!this.#contractClassIdMap.has(key)) {
93
187
  const instance = await this.getContractInstance(contractAddress);
94
188
  if (!instance) {
95
189
  return;
96
190
  }
97
- this.#contractClassIdMap.set(contractAddress.toString(), instance.currentContractClassId);
191
+ this.#contractClassIdMap.set(key, instance.currentContractClassId);
98
192
  }
99
- return this.#contractClassIdMap.get(contractAddress.toString());
193
+ return this.#contractClassIdMap.get(key);
100
194
  }
101
195
 
102
- /**
103
- * Retrieve or create a ContractTree instance based on the provided class id.
104
- * If an existing tree with the same class id is found in the cache, it will be returned.
105
- * Otherwise, a new ContractTree instance will be created using the contract data from the database
106
- * and added to the cache before returning.
107
- *
108
- * @param classId - The class id of the contract for which the ContractTree is required.
109
- * @returns A ContractTree instance associated with the specified contract address.
110
- * @throws An Error if the contract is not found in the ContractDatabase.
111
- */
112
196
  async #getPrivateFunctionTreeForClassId(classId: Fr): Promise<PrivateFunctionsTree | undefined> {
113
197
  if (!this.#privateFunctionTrees.has(classId.toString())) {
114
198
  const artifact = await this.getContractArtifact(classId);
@@ -121,9 +205,9 @@ export class ContractStore {
121
205
  return this.#privateFunctionTrees.get(classId.toString())!;
122
206
  }
123
207
 
124
- async #getContractArtifactByAddress(contractAddress: AztecAddress): Promise<ContractArtifact | undefined> {
125
- const contractClassId = await this.#getContractClassId(contractAddress);
126
- return contractClassId && this.getContractArtifact(contractClassId);
208
+ async #getArtifactByAddress(contractAddress: AztecAddress): Promise<ContractArtifact | undefined> {
209
+ const classId = await this.#getContractClassId(contractAddress);
210
+ return classId && this.getContractArtifact(classId);
127
211
  }
128
212
 
129
213
  // Public getters
@@ -135,7 +219,7 @@ export class ContractStore {
135
219
  });
136
220
  }
137
221
 
138
- /** Returns a contract instance for a given address. Throws if not found. */
222
+ /** Returns a contract instance for a given address. */
139
223
  public getContractInstance(contractAddress: AztecAddress): Promise<ContractInstanceWithAddress | undefined> {
140
224
  return this.#store.transactionAsync(async () => {
141
225
  const contract = await this.#contractInstances.getAsync(contractAddress.toString());
@@ -143,18 +227,39 @@ export class ContractStore {
143
227
  });
144
228
  }
145
229
 
146
- public getContractArtifact(contractClassId: Fr): Promise<ContractArtifact | undefined> {
147
- return this.#store.transactionAsync(async () => {
148
- const contract = await this.#contractArtifacts.getAsync(contractClassId.toString());
149
- // TODO(@spalladino): AztecAsyncMap lies and returns Uint8Arrays instead of Buffers, hence the extra Buffer.from.
150
- return contract && contractArtifactFromBuffer(Buffer.from(contract));
230
+ /** Returns the raw contract artifact for a given class id. */
231
+ public async getContractArtifact(contractClassId: Fr): Promise<ContractArtifact | undefined> {
232
+ const key = contractClassId.toString();
233
+ const cached = this.#contractArtifactCache.get(key);
234
+ if (cached) {
235
+ return cached;
236
+ }
237
+ const artifact = await this.#store.transactionAsync(async () => {
238
+ const buf = await this.#contractArtifacts.getAsync(key);
239
+ return buf && contractArtifactFromBuffer(buf);
151
240
  });
241
+ if (artifact) {
242
+ this.#contractArtifactCache.set(key, artifact);
243
+ }
244
+ return artifact;
152
245
  }
153
246
 
154
- /** Returns a contract class for a given class id. Throws if not found. */
155
- public async getContractClass(contractClassId: Fr): Promise<ContractClass | undefined> {
247
+ /** Returns a contract class for a given class id. */
248
+ public async getContractClassWithPreimage(
249
+ contractClassId: Fr,
250
+ ): Promise<(ContractClassWithId & ContractClassIdPreimage) | undefined> {
251
+ const key = contractClassId.toString();
252
+ const buf = await this.#store.transactionAsync(() => this.#contractClassData.getAsync(key));
253
+ if (!buf) {
254
+ return undefined;
255
+ }
256
+ const classData = SerializableContractClassData.fromBuffer(buf);
156
257
  const artifact = await this.getContractArtifact(contractClassId);
157
- return artifact && getContractClassFromArtifact(artifact);
258
+ if (!artifact) {
259
+ return undefined;
260
+ }
261
+ const packedBytecode = artifact.functions.find(f => f.name === 'public_dispatch')?.bytecode ?? Buffer.alloc(0);
262
+ return { ...classData, packedBytecode };
158
263
  }
159
264
 
160
265
  public async getContract(
@@ -173,8 +278,6 @@ export class ContractStore {
173
278
 
174
279
  /**
175
280
  * Retrieves the artifact of a specified function within a given contract.
176
- * The function is identified by its selector, which is a unique code generated from the function's signature.
177
- * Throws an error if the contract address or function selector are invalid or not found.
178
281
  *
179
282
  * @param contractAddress - The AztecAddress representing the contract containing the function.
180
283
  * @param selector - The function selector.
@@ -184,9 +287,12 @@ export class ContractStore {
184
287
  contractAddress: AztecAddress,
185
288
  selector: FunctionSelector,
186
289
  ): Promise<FunctionArtifactWithContractName | undefined> {
187
- const artifact = await this.#getContractArtifactByAddress(contractAddress);
188
- const fnArtifact = artifact && (await this.#findFunctionArtifactBySelector(artifact, selector));
189
- return fnArtifact && { ...fnArtifact, contractName: artifact.name };
290
+ const artifact = await this.#getArtifactByAddress(contractAddress);
291
+ if (!artifact) {
292
+ return undefined;
293
+ }
294
+ const fn = await findFunctionArtifactBySelector(artifact, selector);
295
+ return fn && { ...fn, contractName: artifact.name };
190
296
  }
191
297
 
192
298
  public async getFunctionArtifactWithDebugMetadata(
@@ -207,50 +313,48 @@ export class ContractStore {
207
313
  public async getPublicFunctionArtifact(
208
314
  contractAddress: AztecAddress,
209
315
  ): Promise<FunctionArtifactWithContractName | undefined> {
210
- const artifact = await this.#getContractArtifactByAddress(contractAddress);
211
- const fnArtifact = artifact && artifact.functions.find(fn => fn.functionType === FunctionType.PUBLIC);
212
- return fnArtifact && { ...fnArtifact, contractName: artifact.name };
316
+ const artifact = await this.#getArtifactByAddress(contractAddress);
317
+ const fn = artifact && artifact.functions.find(f => f.functionType === FunctionType.PUBLIC);
318
+ return fn && { ...fn, contractName: artifact.name };
213
319
  }
214
320
 
215
321
  public async getFunctionAbi(
216
322
  contractAddress: AztecAddress,
217
323
  selector: FunctionSelector,
218
324
  ): Promise<FunctionAbi | undefined> {
219
- const artifact = await this.#getContractArtifactByAddress(contractAddress);
220
- return artifact && (await this.#findFunctionAbiBySelector(artifact, selector));
325
+ const artifact = await this.#getArtifactByAddress(contractAddress);
326
+ return artifact && (await findFunctionAbiBySelector(artifact, selector));
221
327
  }
222
328
 
223
329
  /**
224
330
  * Retrieves the debug metadata of a specified function within a given contract.
225
- * The function is identified by its selector, which is a unique code generated from the function's signature.
226
- * Returns undefined if the debug metadata for the given function is not found.
227
- * Throws if the contract has not been added to the database.
228
331
  *
229
332
  * @param contractAddress - The AztecAddress representing the contract containing the function.
230
333
  * @param selector - The function selector.
231
- * @returns The corresponding function's artifact as an object.
334
+ * @returns The corresponding function's debug metadata, or undefined.
232
335
  */
233
336
  public async getFunctionDebugMetadata(
234
337
  contractAddress: AztecAddress,
235
338
  selector: FunctionSelector,
236
339
  ): Promise<FunctionDebugMetadata | undefined> {
237
- const artifact = await this.#getContractArtifactByAddress(contractAddress);
238
- const fnArtifact = artifact && (await this.#findFunctionArtifactBySelector(artifact, selector));
239
- return fnArtifact && getFunctionDebugMetadata(artifact, fnArtifact);
340
+ const artifact = await this.#getArtifactByAddress(contractAddress);
341
+ if (!artifact) {
342
+ return undefined;
343
+ }
344
+ const fn = await findFunctionArtifactBySelector(artifact, selector);
345
+ return fn && getFunctionDebugMetadata(artifact, fn);
240
346
  }
241
347
 
242
348
  public async getPublicFunctionDebugMetadata(
243
349
  contractAddress: AztecAddress,
244
350
  ): Promise<FunctionDebugMetadata | undefined> {
245
- const artifact = await this.#getContractArtifactByAddress(contractAddress);
246
- const fnArtifact = artifact && artifact.functions.find(fn => fn.functionType === FunctionType.PUBLIC);
247
- return fnArtifact && getFunctionDebugMetadata(artifact, fnArtifact);
351
+ const artifact = await this.#getArtifactByAddress(contractAddress);
352
+ const fn = artifact && artifact.functions.find(f => f.functionType === FunctionType.PUBLIC);
353
+ return fn && getFunctionDebugMetadata(artifact, fn);
248
354
  }
249
355
 
250
356
  /**
251
357
  * Retrieve the function membership witness for the given contract class and function selector.
252
- * The function membership witness represents a proof that the function belongs to the specified contract.
253
- * Throws an error if the contract address or function selector is unknown.
254
358
  *
255
359
  * @param contractClassId - The id of the class.
256
360
  * @param selector - The function selector.
@@ -265,42 +369,14 @@ export class ContractStore {
265
369
  }
266
370
 
267
371
  public async getDebugContractName(contractAddress: AztecAddress) {
268
- const artifact = await this.#getContractArtifactByAddress(contractAddress);
372
+ const artifact = await this.#getArtifactByAddress(contractAddress);
269
373
  return artifact?.name;
270
374
  }
271
375
 
272
376
  public async getDebugFunctionName(contractAddress: AztecAddress, selector: FunctionSelector) {
273
- const artifact = await this.#getContractArtifactByAddress(contractAddress);
274
- const fnArtifact = artifact && (await this.#findFunctionAbiBySelector(artifact, selector));
275
- return `${artifact?.name ?? contractAddress}:${fnArtifact?.name ?? selector}`;
276
- }
277
-
278
- async #findFunctionArtifactBySelector(
279
- artifact: ContractArtifact,
280
- selector: FunctionSelector,
281
- ): Promise<FunctionArtifact | undefined> {
282
- const functions = artifact.functions;
283
- for (let i = 0; i < functions.length; i++) {
284
- const fn = functions[i];
285
- const fnSelector = await FunctionSelector.fromNameAndParameters(fn.name, fn.parameters);
286
- if (fnSelector.equals(selector)) {
287
- return fn;
288
- }
289
- }
290
- }
291
-
292
- async #findFunctionAbiBySelector(
293
- artifact: ContractArtifact,
294
- selector: FunctionSelector,
295
- ): Promise<FunctionAbi | undefined> {
296
- const functions = [...artifact.functions, ...(artifact.nonDispatchPublicFunctions ?? [])];
297
- for (let i = 0; i < functions.length; i++) {
298
- const fn = functions[i];
299
- const fnSelector = await FunctionSelector.fromNameAndParameters(fn.name, fn.parameters);
300
- if (fnSelector.equals(selector)) {
301
- return fn;
302
- }
303
- }
377
+ const artifact = await this.#getArtifactByAddress(contractAddress);
378
+ const fn = artifact && (await findFunctionAbiBySelector(artifact, selector));
379
+ return `${artifact?.name ?? contractAddress}:${fn?.name ?? selector}`;
304
380
  }
305
381
 
306
382
  public async getFunctionCall(functionName: string, args: any[], to: AztecAddress): Promise<FunctionCall> {
@@ -316,15 +392,17 @@ export class ContractStore {
316
392
  throw new Error(`Unknown function ${functionName} in contract ${contract.name}.`);
317
393
  }
318
394
 
319
- return {
395
+ const selector = await FunctionSelector.fromNameAndParameters(functionDao.name, functionDao.parameters);
396
+
397
+ return FunctionCall.from({
320
398
  name: functionDao.name,
321
- args: encodeArguments(functionDao, args),
322
- selector: await FunctionSelector.fromNameAndParameters(functionDao.name, functionDao.parameters),
323
- type: functionDao.functionType,
324
399
  to,
400
+ selector,
401
+ type: functionDao.functionType,
325
402
  hideMsgSender: false,
326
403
  isStatic: functionDao.isStatic,
404
+ args: encodeArguments(functionDao, args),
327
405
  returnTypes: functionDao.returnTypes,
328
- };
406
+ });
329
407
  }
330
408
  }
@@ -1 +1 @@
1
- export const PXE_DATA_SCHEMA_VERSION = 3;
1
+ export const PXE_DATA_SCHEMA_VERSION = 6;
@@ -3,9 +3,10 @@ import type { Fr } from '@aztec/foundation/schemas';
3
3
  import type { AztecAsyncKVStore, AztecAsyncMap, AztecAsyncMultiMap } from '@aztec/kv-store';
4
4
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
5
5
  import type { DataInBlock } from '@aztec/stdlib/block';
6
- import { NoteDao, NoteStatus, type NotesFilter } from '@aztec/stdlib/note';
6
+ import { NoteDao, NoteStatus } from '@aztec/stdlib/note';
7
7
 
8
8
  import type { StagedStore } from '../../job_coordinator/job_coordinator.js';
9
+ import type { NotesFilter } from '../../notes_filter.js';
9
10
  import { StoredNote } from './stored_note.js';
10
11
 
11
12
  /**
@@ -103,11 +104,10 @@ export class NoteStore implements StagedStore {
103
104
  * @params jobId - the job context to read from.
104
105
  * @returns Filtered and deduplicated notes (a note might be present in multiple scopes - we ensure it is only
105
106
  * returned once if this is the case)
106
- * @throws If filtering by an empty scopes array. Scopes have to be set to undefined or to a non-empty array.
107
107
  */
108
108
  getNotes(filter: NotesFilter, jobId: string): Promise<NoteDao[]> {
109
- if (filter.scopes !== undefined && filter.scopes.length === 0) {
110
- return Promise.reject(new Error('Trying to get notes with an empty scopes array'));
109
+ if (filter.scopes.length === 0) {
110
+ return Promise.resolve([]);
111
111
  }
112
112
 
113
113
  return this.#store.transactionAsync(async () => {
@@ -180,7 +180,7 @@ export class NoteStore implements StagedStore {
180
180
  continue;
181
181
  }
182
182
 
183
- if (filter.scopes && note.scopes.intersection(new Set(filter.scopes.map(s => s.toString()))).size === 0) {
183
+ if (note.scopes.intersection(new Set(filter.scopes.map(s => s.toString()))).size === 0) {
184
184
  continue;
185
185
  }
186
186
 
@@ -220,6 +220,10 @@ export class NoteStore implements StagedStore {
220
220
  return Promise.resolve([]);
221
221
  }
222
222
 
223
+ if (nullifiers.some(n => n.l2BlockNumber === 0)) {
224
+ return Promise.reject(new Error('applyNullifiers: nullifiers cannot have been emitted at block 0'));
225
+ }
226
+
223
227
  return this.#withJobLock(jobId, () =>
224
228
  this.#store.transactionAsync(async () => {
225
229
  const notesToNullify = await Promise.all(
@@ -0,0 +1,49 @@
1
+ import { KeyStore } from '@aztec/key-store';
2
+ import type { AztecAsyncKVStore } from '@aztec/kv-store';
3
+ import { L2TipsKVStore } from '@aztec/kv-store/stores';
4
+ import type { BlockHash } from '@aztec/stdlib/block';
5
+
6
+ import { AddressStore } from './address_store/address_store.js';
7
+ import { AnchorBlockStore } from './anchor_block_store/anchor_block_store.js';
8
+ import { CapsuleStore } from './capsule_store/capsule_store.js';
9
+ import { ContractStore } from './contract_store/contract_store.js';
10
+ import { NoteStore } from './note_store/note_store.js';
11
+ import { PrivateEventStore } from './private_event_store/private_event_store.js';
12
+ import { RecipientTaggingStore, SenderAddressBookStore, SenderTaggingStore } from './tagging_store/index.js';
13
+
14
+ /**
15
+ * The set of sub-stores opened against a single `AztecAsyncKVStore` to back PXE state.
16
+ */
17
+ export type PxeStores = {
18
+ addressStore: AddressStore;
19
+ privateEventStore: PrivateEventStore;
20
+ contractStore: ContractStore;
21
+ noteStore: NoteStore;
22
+ anchorBlockStore: AnchorBlockStore;
23
+ senderTaggingStore: SenderTaggingStore;
24
+ senderAddressBookStore: SenderAddressBookStore;
25
+ recipientTaggingStore: RecipientTaggingStore;
26
+ capsuleStore: CapsuleStore;
27
+ keyStore: KeyStore;
28
+ l2TipsStore: L2TipsKVStore;
29
+ };
30
+
31
+ /**
32
+ * Opens every PXE sub-store against the given backing store. The `initialBlockHash` seeds the
33
+ * `L2TipsKVStore` so it agrees with the node's archiver on the dynamic genesis header hash.
34
+ */
35
+ export function openPxeStores(store: AztecAsyncKVStore, initialBlockHash: BlockHash): PxeStores {
36
+ return {
37
+ addressStore: new AddressStore(store),
38
+ privateEventStore: new PrivateEventStore(store),
39
+ contractStore: new ContractStore(store),
40
+ noteStore: new NoteStore(store),
41
+ anchorBlockStore: new AnchorBlockStore(store),
42
+ senderTaggingStore: new SenderTaggingStore(store),
43
+ senderAddressBookStore: new SenderAddressBookStore(store),
44
+ recipientTaggingStore: new RecipientTaggingStore(store),
45
+ capsuleStore: new CapsuleStore(store),
46
+ keyStore: new KeyStore(store),
47
+ l2TipsStore: new L2TipsKVStore(store, 'pxe', initialBlockHash),
48
+ };
49
+ }
@@ -234,6 +234,10 @@ export class PrivateEventStore implements StagedStore {
234
234
  * IMPORTANT: This method must be called within a transaction to ensure atomicity.
235
235
  */
236
236
  public async rollback(blockNumber: number, synchedBlockNumber: number): Promise<void> {
237
+ if (this.#eventsForJob.size > 0) {
238
+ throw new Error('PXE private event store rollback is not allowed while jobs are running');
239
+ }
240
+
237
241
  // First pass: collect all event IDs for all blocks, starting reads during iteration to keep tx alive.
238
242
  const eventsByBlock: Map<number, { eventId: string; eventReadPromise: Promise<Buffer | undefined> }[]> = new Map();
239
243
 
@@ -49,7 +49,7 @@ export class StoredPrivateEvent {
49
49
  const msgContentLength = reader.readNumber();
50
50
  const msgContent = reader.readArray(msgContentLength, Fr);
51
51
  const l2BlockNumber = reader.readNumber();
52
- const l2BlockHash = new BlockHash(Fr.fromBuffer(reader));
52
+ const l2BlockHash = BlockHash.fromBuffer(reader);
53
53
  const txHash = TxHash.fromBuffer(reader);
54
54
  const txIndexInBlock = reader.readNumber();
55
55
  const eventIndexInTx = reader.readNumber();
@@ -1,5 +1,5 @@
1
1
  import type { AztecAsyncKVStore, AztecAsyncMap } from '@aztec/kv-store';
2
- import type { DirectionalAppTaggingSecret } from '@aztec/stdlib/logs';
2
+ import type { AppTaggingSecret } from '@aztec/stdlib/logs';
3
3
 
4
4
  import type { StagedStore } from '../../job_coordinator/job_coordinator.js';
5
5
 
@@ -106,11 +106,11 @@ export class RecipientTaggingStore implements StagedStore {
106
106
  return Promise.resolve();
107
107
  }
108
108
 
109
- getHighestAgedIndex(secret: DirectionalAppTaggingSecret, jobId: string): Promise<number | undefined> {
109
+ getHighestAgedIndex(secret: AppTaggingSecret, jobId: string): Promise<number | undefined> {
110
110
  return this.#store.transactionAsync(() => this.#readHighestAgedIndex(jobId, secret.toString()));
111
111
  }
112
112
 
113
- updateHighestAgedIndex(secret: DirectionalAppTaggingSecret, index: number, jobId: string): Promise<void> {
113
+ updateHighestAgedIndex(secret: AppTaggingSecret, index: number, jobId: string): Promise<void> {
114
114
  return this.#store.transactionAsync(async () => {
115
115
  const currentIndex = await this.#readHighestAgedIndex(jobId, secret.toString());
116
116
  if (currentIndex !== undefined && index <= currentIndex) {
@@ -121,11 +121,11 @@ export class RecipientTaggingStore implements StagedStore {
121
121
  });
122
122
  }
123
123
 
124
- getHighestFinalizedIndex(secret: DirectionalAppTaggingSecret, jobId: string): Promise<number | undefined> {
124
+ getHighestFinalizedIndex(secret: AppTaggingSecret, jobId: string): Promise<number | undefined> {
125
125
  return this.#store.transactionAsync(() => this.#readHighestFinalizedIndex(jobId, secret.toString()));
126
126
  }
127
127
 
128
- updateHighestFinalizedIndex(secret: DirectionalAppTaggingSecret, index: number, jobId: string): Promise<void> {
128
+ updateHighestFinalizedIndex(secret: AppTaggingSecret, index: number, jobId: string): Promise<void> {
129
129
  return this.#store.transactionAsync(async () => {
130
130
  const currentIndex = await this.#readHighestFinalizedIndex(jobId, secret.toString());
131
131
  if (currentIndex !== undefined && index < currentIndex) {