@aztec-labs/pxe 6.0.0-nightly.20260829

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 (603) hide show
  1. package/README.md +13 -0
  2. package/dest/bin/check_oracle_version.d.ts +2 -0
  3. package/dest/bin/check_oracle_version.d.ts.map +1 -0
  4. package/dest/bin/check_oracle_version.js +22 -0
  5. package/dest/bin/index.d.ts +2 -0
  6. package/dest/bin/index.d.ts.map +1 -0
  7. package/dest/bin/index.js +1 -0
  8. package/dest/bin/oracle_version_helpers.d.ts +20 -0
  9. package/dest/bin/oracle_version_helpers.d.ts.map +1 -0
  10. package/dest/bin/oracle_version_helpers.js +25 -0
  11. package/dest/block_synchronizer/block_stream_source.d.ts +10 -0
  12. package/dest/block_synchronizer/block_stream_source.d.ts.map +1 -0
  13. package/dest/block_synchronizer/block_stream_source.js +37 -0
  14. package/dest/block_synchronizer/block_synchronizer.d.ts +47 -0
  15. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -0
  16. package/dest/block_synchronizer/block_synchronizer.js +192 -0
  17. package/dest/block_synchronizer/index.d.ts +2 -0
  18. package/dest/block_synchronizer/index.d.ts.map +1 -0
  19. package/dest/block_synchronizer/index.js +1 -0
  20. package/dest/config/index.d.ts +57 -0
  21. package/dest/config/index.d.ts.map +1 -0
  22. package/dest/config/index.js +80 -0
  23. package/dest/config/package_info.d.ts +5 -0
  24. package/dest/config/package_info.d.ts.map +1 -0
  25. package/dest/config/package_info.js +6 -0
  26. package/dest/contract/contract_call_graph.d.ts +51 -0
  27. package/dest/contract/contract_call_graph.d.ts.map +1 -0
  28. package/dest/contract/contract_call_graph.js +91 -0
  29. package/dest/contract/contract_class_service.d.ts +24 -0
  30. package/dest/contract/contract_class_service.d.ts.map +1 -0
  31. package/dest/contract/contract_class_service.js +36 -0
  32. package/dest/contract/contract_sync_service.d.ts +82 -0
  33. package/dest/contract/contract_sync_service.d.ts.map +1 -0
  34. package/dest/contract/contract_sync_service.js +210 -0
  35. package/dest/contract/helpers.d.ts +7 -0
  36. package/dest/contract/helpers.d.ts.map +1 -0
  37. package/dest/contract/helpers.js +20 -0
  38. package/dest/contract/skip_sync_contracts.d.ts +11 -0
  39. package/dest/contract/skip_sync_contracts.d.ts.map +1 -0
  40. package/dest/contract/skip_sync_contracts.js +18 -0
  41. package/dest/contract_function_simulator/anchored_contract_data.d.ts +36 -0
  42. package/dest/contract_function_simulator/anchored_contract_data.d.ts.map +1 -0
  43. package/dest/contract_function_simulator/anchored_contract_data.js +54 -0
  44. package/dest/contract_function_simulator/contract_function_simulator.d.ts +114 -0
  45. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -0
  46. package/dest/contract_function_simulator/contract_function_simulator.js +495 -0
  47. package/dest/contract_function_simulator/ephemeral_array_service.d.ts +28 -0
  48. package/dest/contract_function_simulator/ephemeral_array_service.d.ts.map +1 -0
  49. package/dest/contract_function_simulator/ephemeral_array_service.js +78 -0
  50. package/dest/contract_function_simulator/execution_note_cache.d.ts +98 -0
  51. package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -0
  52. package/dest/contract_function_simulator/execution_note_cache.js +189 -0
  53. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +12 -0
  54. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -0
  55. package/dest/contract_function_simulator/execution_tagging_index_cache.js +30 -0
  56. package/dest/contract_function_simulator/hashed_values_cache.d.ts +28 -0
  57. package/dest/contract_function_simulator/hashed_values_cache.d.ts.map +1 -0
  58. package/dest/contract_function_simulator/hashed_values_cache.js +36 -0
  59. package/dest/contract_function_simulator/index.d.ts +36 -0
  60. package/dest/contract_function_simulator/index.d.ts.map +1 -0
  61. package/dest/contract_function_simulator/index.js +20 -0
  62. package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts +29 -0
  63. package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts.map +1 -0
  64. package/dest/contract_function_simulator/noir-structs/bounded_vec.js +30 -0
  65. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts +9 -0
  66. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.d.ts.map +1 -0
  67. package/dest/contract_function_simulator/noir-structs/contract_class_log_data.js +1 -0
  68. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts +7 -0
  69. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.d.ts.map +1 -0
  70. package/dest/contract_function_simulator/noir-structs/embedded_curve_point.js +1 -0
  71. package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts +37 -0
  72. package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts.map +1 -0
  73. package/dest/contract_function_simulator/noir-structs/ephemeral_array.js +59 -0
  74. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +20 -0
  75. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -0
  76. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +39 -0
  77. package/dest/contract_function_simulator/noir-structs/fact.d.ts +16 -0
  78. package/dest/contract_function_simulator/noir-structs/fact.d.ts.map +1 -0
  79. package/dest/contract_function_simulator/noir-structs/fact.js +6 -0
  80. package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts +27 -0
  81. package/dest/contract_function_simulator/noir-structs/fact_collection.d.ts.map +1 -0
  82. package/dest/contract_function_simulator/noir-structs/fact_collection.js +31 -0
  83. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +25 -0
  84. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -0
  85. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +14 -0
  86. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +19 -0
  87. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -0
  88. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +4 -0
  89. package/dest/contract_function_simulator/noir-structs/note_data.d.ts +27 -0
  90. package/dest/contract_function_simulator/noir-structs/note_data.d.ts.map +1 -0
  91. package/dest/contract_function_simulator/noir-structs/note_data.js +3 -0
  92. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +22 -0
  93. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -0
  94. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +47 -0
  95. package/dest/contract_function_simulator/noir-structs/nullifier_membership_witness_data.d.ts +12 -0
  96. package/dest/contract_function_simulator/noir-structs/nullifier_membership_witness_data.d.ts.map +1 -0
  97. package/dest/contract_function_simulator/noir-structs/nullifier_membership_witness_data.js +6 -0
  98. package/dest/contract_function_simulator/noir-structs/option.d.ts +59 -0
  99. package/dest/contract_function_simulator/noir-structs/option.d.ts.map +1 -0
  100. package/dest/contract_function_simulator/noir-structs/option.js +67 -0
  101. package/dest/contract_function_simulator/noir-structs/origin_block.d.ts +11 -0
  102. package/dest/contract_function_simulator/noir-structs/origin_block.d.ts.map +1 -0
  103. package/dest/contract_function_simulator/noir-structs/origin_block.js +5 -0
  104. package/dest/contract_function_simulator/noir-structs/pending_tagged_log.d.ts +11 -0
  105. package/dest/contract_function_simulator/noir-structs/pending_tagged_log.d.ts.map +1 -0
  106. package/dest/contract_function_simulator/noir-structs/pending_tagged_log.js +4 -0
  107. package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts +8 -0
  108. package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts.map +1 -0
  109. package/dest/contract_function_simulator/noir-structs/provided_secret.js +1 -0
  110. package/dest/contract_function_simulator/noir-structs/public_data_witness_data.d.ts +13 -0
  111. package/dest/contract_function_simulator/noir-structs/public_data_witness_data.d.ts.map +1 -0
  112. package/dest/contract_function_simulator/noir-structs/public_data_witness_data.js +3 -0
  113. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts +28 -0
  114. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.d.ts.map +1 -0
  115. package/dest/contract_function_simulator/noir-structs/resolved_tagging_strategy.js +50 -0
  116. package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts +19 -0
  117. package/dest/contract_function_simulator/noir-structs/resolved_tx.d.ts.map +1 -0
  118. package/dest/contract_function_simulator/noir-structs/resolved_tx.js +9 -0
  119. package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts +15 -0
  120. package/dest/contract_function_simulator/noir-structs/tx_effect_data.d.ts.map +1 -0
  121. package/dest/contract_function_simulator/noir-structs/tx_effect_data.js +5 -0
  122. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +11 -0
  123. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -0
  124. package/dest/contract_function_simulator/noir-structs/utility_context.js +3 -0
  125. package/dest/contract_function_simulator/oracle/acir_callback.d.ts +21 -0
  126. package/dest/contract_function_simulator/oracle/acir_callback.d.ts.map +1 -0
  127. package/dest/contract_function_simulator/oracle/acir_callback.js +115 -0
  128. package/dest/contract_function_simulator/oracle/index.d.ts +3 -0
  129. package/dest/contract_function_simulator/oracle/index.d.ts.map +1 -0
  130. package/dest/contract_function_simulator/oracle/index.js +2 -0
  131. package/dest/contract_function_simulator/oracle/interfaces.d.ts +24 -0
  132. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -0
  133. package/dest/contract_function_simulator/oracle/interfaces.js +4 -0
  134. package/dest/contract_function_simulator/oracle/legacy_oracle_registry.d.ts +39 -0
  135. package/dest/contract_function_simulator/oracle/legacy_oracle_registry.d.ts.map +1 -0
  136. package/dest/contract_function_simulator/oracle/legacy_oracle_registry.js +107 -0
  137. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +28 -0
  138. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -0
  139. package/dest/contract_function_simulator/oracle/note_packing_utils.js +54 -0
  140. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts +139 -0
  141. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -0
  142. package/dest/contract_function_simulator/oracle/oracle_registry.js +1024 -0
  143. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +292 -0
  144. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts.map +1 -0
  145. package/dest/contract_function_simulator/oracle/oracle_type_mappings.js +1258 -0
  146. package/dest/contract_function_simulator/oracle/private_execution.d.ts +23 -0
  147. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -0
  148. package/dest/contract_function_simulator/oracle/private_execution.js +88 -0
  149. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +226 -0
  150. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -0
  151. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +585 -0
  152. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +333 -0
  153. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -0
  154. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +900 -0
  155. package/dest/contract_function_simulator/pick_notes.d.ts +85 -0
  156. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -0
  157. package/dest/contract_function_simulator/pick_notes.js +68 -0
  158. package/dest/contract_function_simulator/transient_array_service.d.ts +31 -0
  159. package/dest/contract_function_simulator/transient_array_service.d.ts.map +1 -0
  160. package/dest/contract_function_simulator/transient_array_service.js +62 -0
  161. package/dest/contract_logging.d.ts +27 -0
  162. package/dest/contract_logging.d.ts.map +1 -0
  163. package/dest/contract_logging.js +38 -0
  164. package/dest/debug/pxe_debug_utils.d.ts +38 -0
  165. package/dest/debug/pxe_debug_utils.d.ts.map +1 -0
  166. package/dest/debug/pxe_debug_utils.js +44 -0
  167. package/dest/entrypoints/client/bundle/index.d.ts +10 -0
  168. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -0
  169. package/dest/entrypoints/client/bundle/index.js +8 -0
  170. package/dest/entrypoints/client/bundle/utils.d.ts +16 -0
  171. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -0
  172. package/dest/entrypoints/client/bundle/utils.js +78 -0
  173. package/dest/entrypoints/client/lazy/index.d.ts +10 -0
  174. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -0
  175. package/dest/entrypoints/client/lazy/index.js +8 -0
  176. package/dest/entrypoints/client/lazy/utils.d.ts +15 -0
  177. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -0
  178. package/dest/entrypoints/client/lazy/utils.js +77 -0
  179. package/dest/entrypoints/client/store.d.ts +14 -0
  180. package/dest/entrypoints/client/store.d.ts.map +1 -0
  181. package/dest/entrypoints/client/store.js +42 -0
  182. package/dest/entrypoints/pxe_creation_options.d.ts +32 -0
  183. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -0
  184. package/dest/entrypoints/pxe_creation_options.js +3 -0
  185. package/dest/entrypoints/server/circuit_recording/circuit_recorder.d.ts +121 -0
  186. package/dest/entrypoints/server/circuit_recording/circuit_recorder.d.ts.map +1 -0
  187. package/dest/entrypoints/server/circuit_recording/circuit_recorder.js +208 -0
  188. package/dest/entrypoints/server/circuit_recording/file_circuit_recorder.d.ts +20 -0
  189. package/dest/entrypoints/server/circuit_recording/file_circuit_recorder.d.ts.map +1 -0
  190. package/dest/entrypoints/server/circuit_recording/file_circuit_recorder.js +131 -0
  191. package/dest/entrypoints/server/circuit_recording/memory_circuit_recorder.d.ts +10 -0
  192. package/dest/entrypoints/server/circuit_recording/memory_circuit_recorder.d.ts.map +1 -0
  193. package/dest/entrypoints/server/circuit_recording/memory_circuit_recorder.js +9 -0
  194. package/dest/entrypoints/server/circuit_recording/simulator_recorder_wrapper.d.ts +18 -0
  195. package/dest/entrypoints/server/circuit_recording/simulator_recorder_wrapper.d.ts.map +1 -0
  196. package/dest/entrypoints/server/circuit_recording/simulator_recorder_wrapper.js +41 -0
  197. package/dest/entrypoints/server/index.d.ts +17 -0
  198. package/dest/entrypoints/server/index.d.ts.map +1 -0
  199. package/dest/entrypoints/server/index.js +14 -0
  200. package/dest/entrypoints/server/store.d.ts +18 -0
  201. package/dest/entrypoints/server/store.d.ts.map +1 -0
  202. package/dest/entrypoints/server/store.js +28 -0
  203. package/dest/entrypoints/server/utils.d.ts +9 -0
  204. package/dest/entrypoints/server/utils.d.ts.map +1 -0
  205. package/dest/entrypoints/server/utils.js +84 -0
  206. package/dest/error_enriching.d.ts +13 -0
  207. package/dest/error_enriching.d.ts.map +1 -0
  208. package/dest/error_enriching.js +80 -0
  209. package/dest/events/event_service.d.ts +30 -0
  210. package/dest/events/event_service.d.ts.map +1 -0
  211. package/dest/events/event_service.js +76 -0
  212. package/dest/events/index.d.ts +2 -0
  213. package/dest/events/index.d.ts.map +1 -0
  214. package/dest/events/index.js +1 -0
  215. package/dest/events/private_event_filter_validator.d.ts +10 -0
  216. package/dest/events/private_event_filter_validator.d.ts.map +1 -0
  217. package/dest/events/private_event_filter_validator.js +53 -0
  218. package/dest/hooks/authorize_utility_call.d.ts +41 -0
  219. package/dest/hooks/authorize_utility_call.d.ts.map +1 -0
  220. package/dest/hooks/authorize_utility_call.js +4 -0
  221. package/dest/hooks/execution_hooks.d.ts +62 -0
  222. package/dest/hooks/execution_hooks.d.ts.map +1 -0
  223. package/dest/hooks/execution_hooks.js +9 -0
  224. package/dest/hooks/index.d.ts +5 -0
  225. package/dest/hooks/index.d.ts.map +1 -0
  226. package/dest/hooks/index.js +2 -0
  227. package/dest/hooks/resolve_custom_request.d.ts +23 -0
  228. package/dest/hooks/resolve_custom_request.d.ts.map +1 -0
  229. package/dest/hooks/resolve_custom_request.js +3 -0
  230. package/dest/hooks/resolve_tagging_secret_strategy.d.ts +50 -0
  231. package/dest/hooks/resolve_tagging_secret_strategy.d.ts.map +1 -0
  232. package/dest/hooks/resolve_tagging_secret_strategy.js +3 -0
  233. package/dest/logs/log_service.d.ts +40 -0
  234. package/dest/logs/log_service.d.ts.map +1 -0
  235. package/dest/logs/log_service.js +217 -0
  236. package/dest/messages/tx_resolver_service.d.ts +28 -0
  237. package/dest/messages/tx_resolver_service.d.ts.map +1 -0
  238. package/dest/messages/tx_resolver_service.js +62 -0
  239. package/dest/node/benchmarked_node.d.ts +22 -0
  240. package/dest/node/benchmarked_node.d.ts.map +1 -0
  241. package/dest/node/benchmarked_node.js +93 -0
  242. package/dest/node/caching_aztec_node.d.ts +24 -0
  243. package/dest/node/caching_aztec_node.d.ts.map +1 -0
  244. package/dest/node/caching_aztec_node.js +268 -0
  245. package/dest/notes/index.d.ts +2 -0
  246. package/dest/notes/index.d.ts.map +1 -0
  247. package/dest/notes/index.js +1 -0
  248. package/dest/notes/note_service.d.ts +77 -0
  249. package/dest/notes/note_service.d.ts.map +1 -0
  250. package/dest/notes/note_service.js +173 -0
  251. package/dest/notes_filter.d.ts +24 -0
  252. package/dest/notes_filter.d.ts.map +1 -0
  253. package/dest/notes_filter.js +4 -0
  254. package/dest/operation_lifecycle.d.ts +45 -0
  255. package/dest/operation_lifecycle.d.ts.map +1 -0
  256. package/dest/operation_lifecycle.js +68 -0
  257. package/dest/operation_queue.d.ts +75 -0
  258. package/dest/operation_queue.d.ts.map +1 -0
  259. package/dest/operation_queue.js +100 -0
  260. package/dest/oracle_version.d.ts +4 -0
  261. package/dest/oracle_version.d.ts.map +1 -0
  262. package/dest/oracle_version.js +21 -0
  263. package/dest/private_kernel/batch_planner.d.ts +47 -0
  264. package/dest/private_kernel/batch_planner.d.ts.map +1 -0
  265. package/dest/private_kernel/batch_planner.js +104 -0
  266. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
  267. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
  268. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.js +41 -0
  269. package/dest/private_kernel/hints/index.d.ts +3 -0
  270. package/dest/private_kernel/hints/index.d.ts.map +1 -0
  271. package/dest/private_kernel/hints/index.js +2 -0
  272. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +29 -0
  273. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
  274. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +343 -0
  275. package/dest/private_kernel/hints/test_utils.d.ts +122 -0
  276. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
  277. package/dest/private_kernel/hints/test_utils.js +202 -0
  278. package/dest/private_kernel/index.d.ts +3 -0
  279. package/dest/private_kernel/index.d.ts.map +1 -0
  280. package/dest/private_kernel/index.js +2 -0
  281. package/dest/private_kernel/private_kernel_execution_prover.d.ts +49 -0
  282. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -0
  283. package/dest/private_kernel/private_kernel_execution_prover.js +408 -0
  284. package/dest/private_kernel/private_kernel_oracle.d.ts +65 -0
  285. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -0
  286. package/dest/private_kernel/private_kernel_oracle.js +110 -0
  287. package/dest/pxe.d.ts +364 -0
  288. package/dest/pxe.d.ts.map +1 -0
  289. package/dest/pxe.js +903 -0
  290. package/dest/storage/address_store/address_store.d.ts +11 -0
  291. package/dest/storage/address_store/address_store.d.ts.map +1 -0
  292. package/dest/storage/address_store/address_store.js +49 -0
  293. package/dest/storage/address_store/index.d.ts +2 -0
  294. package/dest/storage/address_store/index.d.ts.map +1 -0
  295. package/dest/storage/address_store/index.js +1 -0
  296. package/dest/storage/allowed_scopes.d.ts +6 -0
  297. package/dest/storage/allowed_scopes.d.ts.map +1 -0
  298. package/dest/storage/allowed_scopes.js +7 -0
  299. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +20 -0
  300. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -0
  301. package/dest/storage/anchor_block_store/anchor_block_store.js +28 -0
  302. package/dest/storage/anchor_block_store/index.d.ts +2 -0
  303. package/dest/storage/anchor_block_store/index.d.ts.map +1 -0
  304. package/dest/storage/anchor_block_store/index.js +1 -0
  305. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts +42 -0
  306. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts.map +1 -0
  307. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.js +93 -0
  308. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts +15 -0
  309. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts.map +1 -0
  310. package/dest/storage/backwards_compatibility_tests/schema_tests.js +674 -0
  311. package/dest/storage/backwards_compatibility_tests/store_spy.d.ts +19 -0
  312. package/dest/storage/backwards_compatibility_tests/store_spy.d.ts.map +1 -0
  313. package/dest/storage/backwards_compatibility_tests/store_spy.js +63 -0
  314. package/dest/storage/base_staging_store.d.ts +110 -0
  315. package/dest/storage/base_staging_store.d.ts.map +1 -0
  316. package/dest/storage/base_staging_store.js +141 -0
  317. package/dest/storage/capsule_store/capsule_service.d.ts +22 -0
  318. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  319. package/dest/storage/capsule_store/capsule_service.js +47 -0
  320. package/dest/storage/capsule_store/capsule_store.d.ts +72 -0
  321. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -0
  322. package/dest/storage/capsule_store/capsule_store.js +256 -0
  323. package/dest/storage/capsule_store/index.d.ts +3 -0
  324. package/dest/storage/capsule_store/index.d.ts.map +1 -0
  325. package/dest/storage/capsule_store/index.js +2 -0
  326. package/dest/storage/contract_store/contract_store.d.ts +96 -0
  327. package/dest/storage/contract_store/contract_store.d.ts.map +1 -0
  328. package/dest/storage/contract_store/contract_store.js +282 -0
  329. package/dest/storage/contract_store/index.d.ts +2 -0
  330. package/dest/storage/contract_store/index.d.ts.map +1 -0
  331. package/dest/storage/contract_store/index.js +1 -0
  332. package/dest/storage/contract_store/private_functions_tree.d.ts +27 -0
  333. package/dest/storage/contract_store/private_functions_tree.d.ts.map +1 -0
  334. package/dest/storage/contract_store/private_functions_tree.js +48 -0
  335. package/dest/storage/fact_store/fact_service.d.ts +23 -0
  336. package/dest/storage/fact_store/fact_service.d.ts.map +1 -0
  337. package/dest/storage/fact_store/fact_service.js +45 -0
  338. package/dest/storage/fact_store/fact_store.d.ts +101 -0
  339. package/dest/storage/fact_store/fact_store.d.ts.map +1 -0
  340. package/dest/storage/fact_store/fact_store.js +350 -0
  341. package/dest/storage/fact_store/fact_store_keys.d.ts +34 -0
  342. package/dest/storage/fact_store/fact_store_keys.d.ts.map +1 -0
  343. package/dest/storage/fact_store/fact_store_keys.js +50 -0
  344. package/dest/storage/fact_store/index.d.ts +6 -0
  345. package/dest/storage/fact_store/index.d.ts.map +1 -0
  346. package/dest/storage/fact_store/index.js +4 -0
  347. package/dest/storage/fact_store/origin_state.d.ts +59 -0
  348. package/dest/storage/fact_store/origin_state.d.ts.map +1 -0
  349. package/dest/storage/fact_store/origin_state.js +60 -0
  350. package/dest/storage/fact_store/stored_fact.d.ts +32 -0
  351. package/dest/storage/fact_store/stored_fact.d.ts.map +1 -0
  352. package/dest/storage/fact_store/stored_fact.js +64 -0
  353. package/dest/storage/index.d.ts +10 -0
  354. package/dest/storage/index.d.ts.map +1 -0
  355. package/dest/storage/index.js +9 -0
  356. package/dest/storage/metadata.d.ts +2 -0
  357. package/dest/storage/metadata.d.ts.map +1 -0
  358. package/dest/storage/metadata.js +1 -0
  359. package/dest/storage/note_store/index.d.ts +3 -0
  360. package/dest/storage/note_store/index.d.ts.map +1 -0
  361. package/dest/storage/note_store/index.js +2 -0
  362. package/dest/storage/note_store/note_store.d.ts +92 -0
  363. package/dest/storage/note_store/note_store.d.ts.map +1 -0
  364. package/dest/storage/note_store/note_store.js +273 -0
  365. package/dest/storage/note_store/stored_note.d.ts +11 -0
  366. package/dest/storage/note_store/stored_note.d.ts.map +1 -0
  367. package/dest/storage/note_store/stored_note.js +27 -0
  368. package/dest/storage/note_store/test_utils.d.ts +9 -0
  369. package/dest/storage/note_store/test_utils.d.ts.map +1 -0
  370. package/dest/storage/note_store/test_utils.js +10 -0
  371. package/dest/storage/open_pxe_stores.d.ts +35 -0
  372. package/dest/storage/open_pxe_stores.d.ts.map +1 -0
  373. package/dest/storage/open_pxe_stores.js +29 -0
  374. package/dest/storage/private_event_store/private_event_store.d.ts +90 -0
  375. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -0
  376. package/dest/storage/private_event_store/private_event_store.js +276 -0
  377. package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
  378. package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
  379. package/dest/storage/private_event_store/stored_private_event.js +56 -0
  380. package/dest/storage/rollbackable.d.ts +15 -0
  381. package/dest/storage/rollbackable.d.ts.map +1 -0
  382. package/dest/storage/rollbackable.js +3 -0
  383. package/dest/storage/staged_write_coordinator.d.ts +103 -0
  384. package/dest/storage/staged_write_coordinator.d.ts.map +1 -0
  385. package/dest/storage/staged_write_coordinator.js +141 -0
  386. package/dest/storage/store_identity.d.ts +35 -0
  387. package/dest/storage/store_identity.d.ts.map +1 -0
  388. package/dest/storage/store_identity.js +44 -0
  389. package/dest/storage/tagging_store/index.d.ts +4 -0
  390. package/dest/storage/tagging_store/index.d.ts.map +1 -0
  391. package/dest/storage/tagging_store/index.js +3 -0
  392. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +36 -0
  393. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -0
  394. package/dest/storage/tagging_store/recipient_tagging_store.js +74 -0
  395. package/dest/storage/tagging_store/sender_tagging_store.d.ts +113 -0
  396. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -0
  397. package/dest/storage/tagging_store/sender_tagging_store.js +432 -0
  398. package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts +51 -0
  399. package/dest/storage/tagging_store/tagging_secret_sources_store.d.ts.map +1 -0
  400. package/dest/storage/tagging_store/tagging_secret_sources_store.js +105 -0
  401. package/dest/tagging/constants.d.ts +11 -0
  402. package/dest/tagging/constants.d.ts.map +1 -0
  403. package/dest/tagging/constants.js +38 -0
  404. package/dest/tagging/get_all_logs_by_tags.d.ts +69 -0
  405. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
  406. package/dest/tagging/get_all_logs_by_tags.js +79 -0
  407. package/dest/tagging/index.d.ts +18 -0
  408. package/dest/tagging/index.d.ts.map +1 -0
  409. package/dest/tagging/index.js +16 -0
  410. package/dest/tagging/persist_sender_tagging_index_ranges.d.ts +31 -0
  411. package/dest/tagging/persist_sender_tagging_index_ranges.d.ts.map +1 -0
  412. package/dest/tagging/persist_sender_tagging_index_ranges.js +43 -0
  413. package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +75 -0
  414. package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts.map +1 -0
  415. package/dest/tagging/recipient_sync/sync_tagged_private_logs.js +235 -0
  416. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +12 -0
  417. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -0
  418. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +20 -0
  419. package/dest/tagging/reconcile_tagging_index_ranges.d.ts +36 -0
  420. package/dest/tagging/reconcile_tagging_index_ranges.d.ts.map +1 -0
  421. package/dest/tagging/reconcile_tagging_index_ranges.js +74 -0
  422. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +20 -0
  423. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -0
  424. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +77 -0
  425. package/dest/tagging/sender_sync/utils/classify_pending_txs.d.ts +22 -0
  426. package/dest/tagging/sender_sync/utils/classify_pending_txs.d.ts.map +1 -0
  427. package/dest/tagging/sender_sync/utils/classify_pending_txs.js +62 -0
  428. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +30 -0
  429. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -0
  430. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +74 -0
  431. package/dest/tagging/sender_sync/utils/resolve_pending_txs.d.ts +29 -0
  432. package/dest/tagging/sender_sync/utils/resolve_pending_txs.d.ts.map +1 -0
  433. package/dest/tagging/sender_sync/utils/resolve_pending_txs.js +42 -0
  434. package/dest/tagging/sender_sync/utils/test_utils.d.ts +16 -0
  435. package/dest/tagging/sender_sync/utils/test_utils.d.ts.map +1 -0
  436. package/dest/tagging/sender_sync/utils/test_utils.js +24 -0
  437. package/dest/tagging/testing/tag_query_test_utils.d.ts +6 -0
  438. package/dest/tagging/testing/tag_query_test_utils.d.ts.map +1 -0
  439. package/dest/tagging/testing/tag_query_test_utils.js +10 -0
  440. package/dest/test_utils.d.ts +3 -0
  441. package/dest/test_utils.d.ts.map +1 -0
  442. package/dest/test_utils.js +1 -0
  443. package/package.json +119 -0
  444. package/src/bin/check_oracle_version.ts +28 -0
  445. package/src/bin/index.ts +1 -0
  446. package/src/bin/oracle_version_helpers.ts +30 -0
  447. package/src/block_synchronizer/block_stream_source.ts +48 -0
  448. package/src/block_synchronizer/block_synchronizer.ts +225 -0
  449. package/src/block_synchronizer/index.ts +1 -0
  450. package/src/config/index.ts +141 -0
  451. package/src/config/package_info.ts +3 -0
  452. package/src/contract/contract_call_graph.ts +121 -0
  453. package/src/contract/contract_class_service.ts +45 -0
  454. package/src/contract/contract_sync_service.ts +349 -0
  455. package/src/contract/helpers.ts +35 -0
  456. package/src/contract/skip_sync_contracts.ts +23 -0
  457. package/src/contract_function_simulator/anchored_contract_data.ts +74 -0
  458. package/src/contract_function_simulator/contract_function_simulator.ts +928 -0
  459. package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
  460. package/src/contract_function_simulator/execution_note_cache.ts +232 -0
  461. package/src/contract_function_simulator/execution_tagging_index_cache.ts +33 -0
  462. package/src/contract_function_simulator/hashed_values_cache.ts +47 -0
  463. package/src/contract_function_simulator/index.ts +107 -0
  464. package/src/contract_function_simulator/noir-structs/bounded_vec.ts +43 -0
  465. package/src/contract_function_simulator/noir-structs/contract_class_log_data.ts +9 -0
  466. package/src/contract_function_simulator/noir-structs/embedded_curve_point.ts +4 -0
  467. package/src/contract_function_simulator/noir-structs/ephemeral_array.ts +66 -0
  468. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +52 -0
  469. package/src/contract_function_simulator/noir-structs/fact.ts +13 -0
  470. package/src/contract_function_simulator/noir-structs/fact_collection.ts +64 -0
  471. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +35 -0
  472. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +19 -0
  473. package/src/contract_function_simulator/noir-structs/note_data.ts +27 -0
  474. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +59 -0
  475. package/src/contract_function_simulator/noir-structs/nullifier_membership_witness_data.ts +15 -0
  476. package/src/contract_function_simulator/noir-structs/option.ts +75 -0
  477. package/src/contract_function_simulator/noir-structs/origin_block.ts +8 -0
  478. package/src/contract_function_simulator/noir-structs/pending_tagged_log.ts +12 -0
  479. package/src/contract_function_simulator/noir-structs/provided_secret.ts +5 -0
  480. package/src/contract_function_simulator/noir-structs/public_data_witness_data.ts +13 -0
  481. package/src/contract_function_simulator/noir-structs/resolved_tagging_strategy.ts +66 -0
  482. package/src/contract_function_simulator/noir-structs/resolved_tx.ts +19 -0
  483. package/src/contract_function_simulator/noir-structs/tx_effect_data.ts +16 -0
  484. package/src/contract_function_simulator/noir-structs/utility_context.ts +11 -0
  485. package/src/contract_function_simulator/oracle/acir_callback.ts +154 -0
  486. package/src/contract_function_simulator/oracle/index.ts +2 -0
  487. package/src/contract_function_simulator/oracle/interfaces.ts +20 -0
  488. package/src/contract_function_simulator/oracle/legacy_oracle_registry.ts +147 -0
  489. package/src/contract_function_simulator/oracle/note_packing_utils.ts +68 -0
  490. package/src/contract_function_simulator/oracle/oracle_registry.ts +709 -0
  491. package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +1089 -0
  492. package/src/contract_function_simulator/oracle/private_execution.ts +140 -0
  493. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +812 -0
  494. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +1341 -0
  495. package/src/contract_function_simulator/pick_notes.ts +160 -0
  496. package/src/contract_function_simulator/transient_array_service.ts +91 -0
  497. package/src/contract_logging.ts +52 -0
  498. package/src/debug/pxe_debug_utils.ts +89 -0
  499. package/src/entrypoints/client/bundle/index.ts +9 -0
  500. package/src/entrypoints/client/bundle/utils.ts +89 -0
  501. package/src/entrypoints/client/lazy/index.ts +9 -0
  502. package/src/entrypoints/client/lazy/utils.ts +89 -0
  503. package/src/entrypoints/client/store.ts +54 -0
  504. package/src/entrypoints/pxe_creation_options.ts +34 -0
  505. package/src/entrypoints/server/circuit_recording/circuit_recorder.ts +267 -0
  506. package/src/entrypoints/server/circuit_recording/file_circuit_recorder.ts +152 -0
  507. package/src/entrypoints/server/circuit_recording/memory_circuit_recorder.ts +13 -0
  508. package/src/entrypoints/server/circuit_recording/simulator_recorder_wrapper.ts +90 -0
  509. package/src/entrypoints/server/index.ts +17 -0
  510. package/src/entrypoints/server/store.ts +46 -0
  511. package/src/entrypoints/server/utils.ts +103 -0
  512. package/src/error_enriching.ts +124 -0
  513. package/src/events/event_service.ts +129 -0
  514. package/src/events/index.ts +1 -0
  515. package/src/events/private_event_filter_validator.ts +66 -0
  516. package/src/hooks/authorize_utility_call.ts +44 -0
  517. package/src/hooks/execution_hooks.ts +68 -0
  518. package/src/hooks/index.ts +13 -0
  519. package/src/hooks/resolve_custom_request.ts +24 -0
  520. package/src/hooks/resolve_tagging_secret_strategy.ts +60 -0
  521. package/src/logs/log_service.ts +295 -0
  522. package/src/messages/tx_resolver_service.ts +81 -0
  523. package/src/node/benchmarked_node.ts +141 -0
  524. package/src/node/caching_aztec_node.ts +407 -0
  525. package/src/notes/index.ts +1 -0
  526. package/src/notes/note_service.ts +238 -0
  527. package/src/notes_filter.ts +24 -0
  528. package/src/operation_lifecycle.ts +99 -0
  529. package/src/operation_queue.ts +149 -0
  530. package/src/oracle_version.ts +22 -0
  531. package/src/private_kernel/batch_planner.ts +168 -0
  532. package/src/private_kernel/hints/compute_tx_expiration_timestamp.ts +58 -0
  533. package/src/private_kernel/hints/index.ts +2 -0
  534. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +553 -0
  535. package/src/private_kernel/hints/test_utils.ts +318 -0
  536. package/src/private_kernel/index.ts +2 -0
  537. package/src/private_kernel/private_kernel_execution_prover.ts +656 -0
  538. package/src/private_kernel/private_kernel_oracle.ts +184 -0
  539. package/src/pxe.ts +1417 -0
  540. package/src/storage/address_store/address_store.ts +66 -0
  541. package/src/storage/address_store/index.ts +1 -0
  542. package/src/storage/allowed_scopes.ts +14 -0
  543. package/src/storage/anchor_block_store/anchor_block_store.ts +35 -0
  544. package/src/storage/anchor_block_store/index.ts +1 -0
  545. package/src/storage/backwards_compatibility_tests/__snapshots__/AddressStore.json +22 -0
  546. package/src/storage/backwards_compatibility_tests/__snapshots__/AnchorBlockStore.json +3 -0
  547. package/src/storage/backwards_compatibility_tests/__snapshots__/CapsuleStore.json +16 -0
  548. package/src/storage/backwards_compatibility_tests/__snapshots__/ContractStore.json +28 -0
  549. package/src/storage/backwards_compatibility_tests/__snapshots__/FactStore.json +40 -0
  550. package/src/storage/backwards_compatibility_tests/__snapshots__/KeyStore.json +52 -0
  551. package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +40 -0
  552. package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +56 -0
  553. package/src/storage/backwards_compatibility_tests/__snapshots__/PrivateEventStore.json +44 -0
  554. package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +26 -0
  555. package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +30 -0
  556. package/src/storage/backwards_compatibility_tests/__snapshots__/TaggingSecretSourcesStore.json +30 -0
  557. package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +117 -0
  558. package/src/storage/backwards_compatibility_tests/kv_store_snapshot.ts +122 -0
  559. package/src/storage/backwards_compatibility_tests/schema_tests.ts +813 -0
  560. package/src/storage/backwards_compatibility_tests/store_spy.ts +73 -0
  561. package/src/storage/base_staging_store.ts +227 -0
  562. package/src/storage/capsule_store/capsule_service.ts +97 -0
  563. package/src/storage/capsule_store/capsule_store.ts +349 -0
  564. package/src/storage/capsule_store/index.ts +2 -0
  565. package/src/storage/contract_store/contract_store.ts +403 -0
  566. package/src/storage/contract_store/index.ts +1 -0
  567. package/src/storage/contract_store/private_functions_tree.ts +68 -0
  568. package/src/storage/fact_store/fact_service.ts +70 -0
  569. package/src/storage/fact_store/fact_store.ts +424 -0
  570. package/src/storage/fact_store/fact_store_keys.ts +75 -0
  571. package/src/storage/fact_store/index.ts +15 -0
  572. package/src/storage/fact_store/origin_state.ts +84 -0
  573. package/src/storage/fact_store/stored_fact.ts +80 -0
  574. package/src/storage/index.ts +9 -0
  575. package/src/storage/metadata.ts +1 -0
  576. package/src/storage/note_store/index.ts +2 -0
  577. package/src/storage/note_store/note_store.ts +367 -0
  578. package/src/storage/note_store/stored_note.ts +26 -0
  579. package/src/storage/note_store/test_utils.ts +16 -0
  580. package/src/storage/open_pxe_stores.ts +52 -0
  581. package/src/storage/private_event_store/private_event_store.ts +383 -0
  582. package/src/storage/private_event_store/stored_private_event.ts +73 -0
  583. package/src/storage/rollbackable.ts +14 -0
  584. package/src/storage/staged_write_coordinator.ts +218 -0
  585. package/src/storage/store_identity.ts +72 -0
  586. package/src/storage/tagging_store/index.ts +3 -0
  587. package/src/storage/tagging_store/recipient_tagging_store.ts +114 -0
  588. package/src/storage/tagging_store/sender_tagging_store.ts +564 -0
  589. package/src/storage/tagging_store/tagging_secret_sources_store.ts +138 -0
  590. package/src/tagging/constants.ts +42 -0
  591. package/src/tagging/get_all_logs_by_tags.ts +157 -0
  592. package/src/tagging/index.ts +25 -0
  593. package/src/tagging/persist_sender_tagging_index_ranges.ts +59 -0
  594. package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +357 -0
  595. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +34 -0
  596. package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
  597. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +113 -0
  598. package/src/tagging/sender_sync/utils/classify_pending_txs.ts +92 -0
  599. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +92 -0
  600. package/src/tagging/sender_sync/utils/resolve_pending_txs.ts +65 -0
  601. package/src/tagging/sender_sync/utils/test_utils.ts +46 -0
  602. package/src/tagging/testing/tag_query_test_utils.ts +11 -0
  603. package/src/test_utils.ts +2 -0
@@ -0,0 +1,276 @@
1
+ import { BlockNumber } from '@aztec-labs/foundation/branded-types';
2
+ import { createLogger } from '@aztec-labs/foundation/log';
3
+ import { allToCompletion } from '@aztec-labs/foundation/promise';
4
+ import { Semaphore } from '@aztec-labs/foundation/queue';
5
+ import { StoredPrivateEvent } from './stored_private_event.js';
6
+ /**
7
+ * Stores decrypted private event logs.
8
+ *
9
+ * Append-only: events are never deleted during normal operation. Reorgs are handled by delete-on-prune, which removes
10
+ * every event originating on a reorg'd block.
11
+ */ export class PrivateEventStore {
12
+ storeName = 'private_event';
13
+ #store;
14
+ /** Actual private event log entries, keyed by siloedEventCommitment */ #events;
15
+ /** Multi-map from contractAddress_eventSelector to siloedEventCommitment for efficient lookup */ #eventsByContractAndEventSelector;
16
+ /** Multi-map from block number to siloedEventCommitment, for delete-on-prune. */ #eventsByBlockNumber;
17
+ /** changeSetId => eventId (event siloed nullifier) => StoredPrivateEvent */ #eventsForChangeSet;
18
+ /** Per-change-set locks to prevent concurrent writes from affecting each other. */ #changeSetLocks;
19
+ logger = createLogger('private_event_store');
20
+ constructor(store){
21
+ this.#store = store;
22
+ this.#events = this.#store.openMap('private_event_logs');
23
+ this.#eventsByContractAndEventSelector = this.#store.openMultiMap('events_by_contract_selector');
24
+ this.#eventsByBlockNumber = this.#store.openMultiMap('events_by_block_number');
25
+ this.#eventsForChangeSet = new Map();
26
+ this.#changeSetLocks = new Map();
27
+ }
28
+ /**
29
+ * Store a private event log.
30
+ * @param eventSelector - The event selector of the event.
31
+ * @param randomness - The randomness used for the event commitment.
32
+ * @param msgContent - The content of the event.
33
+ * @param siloedEventCommitment - The siloed event commitment (used as unique identifier).
34
+ * @param metadata
35
+ * contractAddress - The address of the contract that emitted the event.
36
+ * scope - The address to which the event is scoped.
37
+ * txHash - The transaction hash of the event log.
38
+ * blockNumber - The block number in which the event was emitted.
39
+ */ storePrivateEventLog(eventSelector, randomness, msgContent, siloedEventCommitment, metadata, changeSetId) {
40
+ return this.#withChangeSetLock(changeSetId, ()=>this.#store.transactionAsync(async ()=>{
41
+ const { contractAddress, scope, txHash, l2BlockNumber, l2BlockHash, txIndexInBlock, eventIndexInTx } = metadata;
42
+ const eventId = siloedEventCommitment.toString();
43
+ this.logger.verbose('storing private event log (staged)', {
44
+ eventId,
45
+ contractAddress,
46
+ scope,
47
+ msgContent,
48
+ l2BlockNumber
49
+ });
50
+ const existing = await this.#readEvent(eventId, changeSetId);
51
+ if (existing) {
52
+ // If we already stored this event, we still want to make sure to track it for the given scope
53
+ existing.addScope(scope.toString());
54
+ this.#writeEvent(eventId, existing, changeSetId);
55
+ } else {
56
+ this.#writeEvent(eventId, new StoredPrivateEvent(randomness, msgContent, l2BlockNumber, l2BlockHash, txHash, txIndexInBlock, eventIndexInTx, contractAddress, eventSelector, new Set([
57
+ scope.toString()
58
+ ])), changeSetId);
59
+ }
60
+ }));
61
+ }
62
+ /**
63
+ * Returns the private events given search parameters.
64
+ * @param eventSelector - The event selector to filter by.
65
+ * @param filter - Filtering criteria:
66
+ * contractAddress: The address of the contract to get events from.
67
+ * fromBlock: The block number to search from (inclusive).
68
+ * toBlock: The block number to search upto (exclusive).
69
+ * scope: - The addresses that decrypted the logs.
70
+ * @returns - The event log contents, augmented with metadata about the transaction and block in which the event was
71
+ * included.
72
+ */ getPrivateEvents(eventSelector, filter) {
73
+ return this.#store.transactionAsync(async ()=>{
74
+ const key = this.#keyFor(filter.contractAddress, eventSelector);
75
+ const targetScopes = new Set(filter.scopes.map((s)=>s.toString()));
76
+ // Map from eventId to the promise that reads the event buffer.
77
+ // We start reads during iteration to keep DB requests pending and avoid IndexedDB auto-commit.
78
+ const eventReadPromises = new Map();
79
+ for await (const eventId of this.#eventsByContractAndEventSelector.getValuesAsync(key)){
80
+ eventReadPromises.set(eventId, this.#events.getAsync(eventId));
81
+ }
82
+ const eventIds = [
83
+ ...eventReadPromises.keys()
84
+ ];
85
+ const eventBuffers = await allToCompletion([
86
+ ...eventReadPromises.values()
87
+ ]);
88
+ const events = [];
89
+ for(let i = 0; i < eventIds.length; i++){
90
+ const eventId = eventIds[i];
91
+ const eventBuffer = eventBuffers[i];
92
+ // Defensive, if it happens, there's a problem with how we're handling #eventsByContractAndEventSelector
93
+ if (!eventBuffer) {
94
+ this.logger.verbose(`EventId ${eventId} does not exist in main index but it is referenced from contract event selector index`);
95
+ continue;
96
+ }
97
+ const storedPrivateEvent = StoredPrivateEvent.fromBuffer(eventBuffer);
98
+ // Filter by block range
99
+ if (storedPrivateEvent.l2BlockNumber < filter.fromBlock || storedPrivateEvent.l2BlockNumber >= filter.toBlock) {
100
+ continue;
101
+ }
102
+ // Filter by scopes
103
+ if (storedPrivateEvent.scopes.intersection(targetScopes).size === 0) {
104
+ continue;
105
+ }
106
+ // Filter by txHash
107
+ if (filter.txHash && !storedPrivateEvent.txHash.equals(filter.txHash)) {
108
+ continue;
109
+ }
110
+ events.push({
111
+ l2BlockNumber: storedPrivateEvent.l2BlockNumber,
112
+ txIndexInBlock: storedPrivateEvent.txIndexInBlock,
113
+ eventIndexInTx: storedPrivateEvent.eventIndexInTx,
114
+ event: {
115
+ packedEvent: storedPrivateEvent.msgContent,
116
+ l2BlockNumber: BlockNumber(storedPrivateEvent.l2BlockNumber),
117
+ txHash: storedPrivateEvent.txHash,
118
+ l2BlockHash: storedPrivateEvent.l2BlockHash,
119
+ eventSelector
120
+ }
121
+ });
122
+ }
123
+ // Sort by block number, then by tx index within block, then by event index within tx
124
+ events.sort((a, b)=>{
125
+ if (a.l2BlockNumber !== b.l2BlockNumber) {
126
+ return a.l2BlockNumber - b.l2BlockNumber;
127
+ }
128
+ if (a.txIndexInBlock !== b.txIndexInBlock) {
129
+ return a.txIndexInBlock - b.txIndexInBlock;
130
+ }
131
+ return a.eventIndexInTx - b.eventIndexInTx;
132
+ });
133
+ return events.map((ev)=>ev.event);
134
+ });
135
+ }
136
+ /** Returns the ids (siloed event commitments) of all events emitted at the given block number. Used by delete-on-prune. */ async eventIdsAtBlock(blockNumber) {
137
+ const eventIds = [];
138
+ for await (const eventId of this.#eventsByBlockNumber.getValuesAsync(blockNumber)){
139
+ eventIds.push(eventId);
140
+ }
141
+ return eventIds;
142
+ }
143
+ /**
144
+ * Rolls the store back to `toBlock`: deletes every event anchored to a block strictly above it, as if nothing past
145
+ * that block height ever happened. Used by the reorg (`chain-pruned`) path to truncate the orphaned tail. Scanning
146
+ * from `toBlock + 1` upward covers everything above the rollback target without needing to know the chain tip.
147
+ *
148
+ * Must be called inside a transaction owned by the caller (it issues no `transactionAsync` of its own, the reorg path
149
+ * wraps it together with the anchor update, and IndexedDB has no nested transactions). Throws if any change set has
150
+ * uncommitted staged writes, since rolling back mid-change-set could later re-introduce events anchored to deleted
151
+ * blocks.
152
+ */ async rollbackToBlock(toBlock) {
153
+ if (this.#eventsForChangeSet.size > 0) {
154
+ throw new Error('PXE private event store rollback is not allowed while staged writes are pending');
155
+ }
156
+ // Snapshot before mutating so we never delete from the multimap we are iterating.
157
+ const orphaned = [];
158
+ for await (const [block, eventId] of this.#eventsByBlockNumber.entriesAsync({
159
+ start: toBlock + 1
160
+ })){
161
+ orphaned.push({
162
+ block,
163
+ eventId
164
+ });
165
+ }
166
+ let removedCount = 0;
167
+ for (const { block, eventId } of orphaned){
168
+ const buf = await this.#events.getAsync(eventId);
169
+ if (!buf) {
170
+ throw new Error(`Event not found for eventId ${eventId}`);
171
+ }
172
+ const stored = StoredPrivateEvent.fromBuffer(buf);
173
+ await this.#events.delete(eventId);
174
+ await this.#eventsByContractAndEventSelector.deleteValue(this.#keyFor(stored.contractAddress, stored.eventSelector), eventId);
175
+ await this.#eventsByBlockNumber.deleteValue(block, eventId);
176
+ removedCount++;
177
+ }
178
+ this.logger.verbose('rolled back private events', {
179
+ removedCount,
180
+ toBlock
181
+ });
182
+ }
183
+ /**
184
+ * Commits in-memory staged data to persistent storage.
185
+ *
186
+ * Called by StagedWriteCoordinator when an operation completes successfully.
187
+ *
188
+ * Note: StagedWriteCoordinator wraps all commits in a single transaction, so we don't need our own transactionAsync
189
+ * here (and using one would throw on IndexedDB as it does not support nested txs).
190
+ *
191
+ * @param changeSetId - The changeSetId identifying which staged data to commit
192
+ */ async commitChangeSet(changeSetId) {
193
+ // Note: Don't use #withChangeSetLock here - commit runs within StagedWriteCoordinator's transactionAsync,
194
+ // and awaiting the lock would create a microtask boundary with no pending DB request,
195
+ // causing IndexedDB to auto-commit the transaction.
196
+ for (const [eventId, entry] of this.#getEventsForChangeSet(changeSetId).entries()){
197
+ const lookupKey = this.#keyFor(entry.contractAddress, entry.eventSelector);
198
+ this.logger.verbose('storing private event log', {
199
+ eventId,
200
+ lookupKey
201
+ });
202
+ await allToCompletion([
203
+ this.#events.set(eventId, entry.toBuffer()),
204
+ this.#eventsByContractAndEventSelector.set(lookupKey, eventId),
205
+ this.#eventsByBlockNumber.set(entry.l2BlockNumber, eventId)
206
+ ]);
207
+ }
208
+ this.#clearChangeSetData(changeSetId);
209
+ }
210
+ /**
211
+ * Discards in-memory staged data without persisting it.
212
+ */ discardChangeSet(changeSetId) {
213
+ this.#clearChangeSetData(changeSetId);
214
+ }
215
+ /**
216
+ * Reads an event from in-memory staged data first, falling back to persistent storage if not found.
217
+ *
218
+ * Returns undefined if the event does not exist in the store overall.
219
+ */ async #readEvent(eventId, changeSetId) {
220
+ // Always issue DB read to keep IndexedDB transaction alive (they auto-commit when a new micro-task starts and there
221
+ // are no pending read requests). The staged value still takes precedence if it exists.
222
+ const buffer = await this.#events.getAsync(eventId);
223
+ const eventForChangeSet = this.#getEventsForChangeSet(changeSetId).get(eventId);
224
+ return eventForChangeSet ?? (buffer ? StoredPrivateEvent.fromBuffer(buffer) : undefined);
225
+ }
226
+ /**
227
+ * Writes an event to in-memory staged data.
228
+ *
229
+ * Writes are only allowed in a change set context. Events modified while staged will only be persisted when `commit`
230
+ * is called.
231
+ */ #writeEvent(eventId, entry, changeSetId) {
232
+ this.#getEventsForChangeSet(changeSetId).set(eventId, entry);
233
+ }
234
+ /**
235
+ * Get in-memory data only visible to @param changeSetId
236
+ */ #getEventsForChangeSet(changeSetId) {
237
+ let eventsForChangeSet = this.#eventsForChangeSet.get(changeSetId);
238
+ if (eventsForChangeSet === undefined) {
239
+ eventsForChangeSet = new Map();
240
+ this.#eventsForChangeSet.set(changeSetId, eventsForChangeSet);
241
+ }
242
+ return eventsForChangeSet;
243
+ }
244
+ /**
245
+ * Clear data structures supporting a specific change set.
246
+ */ #clearChangeSetData(changeSetId) {
247
+ this.#eventsForChangeSet.delete(changeSetId);
248
+ this.#changeSetLocks.delete(changeSetId);
249
+ }
250
+ /**
251
+ * Ensures a function can only run once it acquires a unique per-change-set lock, and handles proper lock release
252
+ * after it runs.
253
+ *
254
+ * This primitive allows concurrent writes on this store without risking data corruption due to unsound write
255
+ * interleaving.
256
+ */ async #withChangeSetLock(changeSetId, fn) {
257
+ let lock = this.#changeSetLocks.get(changeSetId);
258
+ if (!lock) {
259
+ lock = new Semaphore(1);
260
+ this.#changeSetLocks.set(changeSetId, lock);
261
+ }
262
+ await lock.acquire();
263
+ try {
264
+ return await fn();
265
+ } finally{
266
+ lock.release();
267
+ }
268
+ }
269
+ /**
270
+ * Returns a string key based on @param contractAddress and @param eventSelector.
271
+ *
272
+ * The returned key is meant to be used when interacting with index #eventsByContractAndEventSelector.
273
+ */ #keyFor(contractAddress, eventSelector) {
274
+ return `${contractAddress.toString()}_${eventSelector.toString()}`;
275
+ }
276
+ }
@@ -0,0 +1,23 @@
1
+ import { Fr } from '@aztec-labs/foundation/curves/bn254';
2
+ import { EventSelector } from '@aztec-labs/stdlib/abi';
3
+ import { AztecAddress } from '@aztec-labs/stdlib/aztec-address';
4
+ import { BlockHash } from '@aztec-labs/stdlib/block';
5
+ import { TxHash } from '@aztec-labs/stdlib/tx';
6
+ /** Serializable private event entry with scope tracking. */
7
+ export declare class StoredPrivateEvent {
8
+ readonly randomness: Fr;
9
+ readonly msgContent: Fr[];
10
+ readonly l2BlockNumber: number;
11
+ readonly l2BlockHash: BlockHash;
12
+ readonly txHash: TxHash;
13
+ readonly txIndexInBlock: number;
14
+ readonly eventIndexInTx: number;
15
+ readonly contractAddress: AztecAddress;
16
+ readonly eventSelector: EventSelector;
17
+ readonly scopes: Set<string>;
18
+ constructor(randomness: Fr, msgContent: Fr[], l2BlockNumber: number, l2BlockHash: BlockHash, txHash: TxHash, txIndexInBlock: number, eventIndexInTx: number, contractAddress: AztecAddress, eventSelector: EventSelector, scopes: Set<string>);
19
+ addScope(scope: string): void;
20
+ toBuffer(): Buffer;
21
+ static fromBuffer(buffer: Buffer): StoredPrivateEvent;
22
+ }
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmVkX3ByaXZhdGVfZXZlbnQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdG9yYWdlL3ByaXZhdGVfZXZlbnRfc3RvcmUvc3RvcmVkX3ByaXZhdGVfZXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXpELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQyw0REFBNEQ7QUFDNUQscUJBQWEsa0JBQWtCO0lBRTNCLFFBQVEsQ0FBQyxVQUFVLEVBQUUsRUFBRTtJQUN2QixRQUFRLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRTtJQUN6QixRQUFRLENBQUMsYUFBYSxFQUFFLE1BQU07SUFDOUIsUUFBUSxDQUFDLFdBQVcsRUFBRSxTQUFTO0lBQy9CLFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTTtJQUN2QixRQUFRLENBQUMsY0FBYyxFQUFFLE1BQU07SUFDL0IsUUFBUSxDQUFDLGNBQWMsRUFBRSxNQUFNO0lBQy9CLFFBQVEsQ0FBQyxlQUFlLEVBQUUsWUFBWTtJQUN0QyxRQUFRLENBQUMsYUFBYSxFQUFFLGFBQWE7SUFDckMsUUFBUSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDO0lBVjlCLFlBQ1csVUFBVSxFQUFFLEVBQUUsRUFDZCxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQ2hCLGFBQWEsRUFBRSxNQUFNLEVBQ3JCLFdBQVcsRUFBRSxTQUFTLEVBQ3RCLE1BQU0sRUFBRSxNQUFNLEVBQ2QsY0FBYyxFQUFFLE1BQU0sRUFDdEIsY0FBYyxFQUFFLE1BQU0sRUFDdEIsZUFBZSxFQUFFLFlBQVksRUFDN0IsYUFBYSxFQUFFLGFBQWEsRUFDNUIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFDMUI7SUFFSixRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sUUFFckI7SUFFRCxRQUFRLElBQUksTUFBTSxDQWdCakI7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsa0JBQWtCLENBMkJwRDtDQUNGIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stored_private_event.d.ts","sourceRoot":"","sources":["../../../src/storage/private_event_store/stored_private_event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,qCAAqC,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,4DAA4D;AAC5D,qBAAa,kBAAkB;IAE3B,QAAQ,CAAC,UAAU,EAAE,EAAE;IACvB,QAAQ,CAAC,UAAU,EAAE,EAAE,EAAE;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM;IAC9B,QAAQ,CAAC,WAAW,EAAE,SAAS;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,cAAc,EAAE,MAAM;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM;IAC/B,QAAQ,CAAC,eAAe,EAAE,YAAY;IACtC,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;IAV9B,YACW,UAAU,EAAE,EAAE,EACd,UAAU,EAAE,EAAE,EAAE,EAChB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,SAAS,EACtB,MAAM,EAAE,MAAM,EACd,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,YAAY,EAC7B,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAC1B;IAEJ,QAAQ,CAAC,KAAK,EAAE,MAAM,QAErB;IAED,QAAQ,IAAI,MAAM,CAgBjB;IAED,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CA2BpD;CACF"}
@@ -0,0 +1,56 @@
1
+ import { Fr } from '@aztec-labs/foundation/curves/bn254';
2
+ import { BufferReader, serializeToBuffer } from '@aztec-labs/foundation/serialize';
3
+ import { EventSelector } from '@aztec-labs/stdlib/abi';
4
+ import { AztecAddress } from '@aztec-labs/stdlib/aztec-address';
5
+ import { BlockHash } from '@aztec-labs/stdlib/block';
6
+ import { TxHash } from '@aztec-labs/stdlib/tx';
7
+ /** Serializable private event entry with scope tracking. */ export class StoredPrivateEvent {
8
+ randomness;
9
+ msgContent;
10
+ l2BlockNumber;
11
+ l2BlockHash;
12
+ txHash;
13
+ txIndexInBlock;
14
+ eventIndexInTx;
15
+ contractAddress;
16
+ eventSelector;
17
+ scopes;
18
+ constructor(randomness, msgContent, l2BlockNumber, l2BlockHash, txHash, txIndexInBlock, eventIndexInTx, contractAddress, eventSelector, scopes){
19
+ this.randomness = randomness;
20
+ this.msgContent = msgContent;
21
+ this.l2BlockNumber = l2BlockNumber;
22
+ this.l2BlockHash = l2BlockHash;
23
+ this.txHash = txHash;
24
+ this.txIndexInBlock = txIndexInBlock;
25
+ this.eventIndexInTx = eventIndexInTx;
26
+ this.contractAddress = contractAddress;
27
+ this.eventSelector = eventSelector;
28
+ this.scopes = scopes;
29
+ }
30
+ addScope(scope) {
31
+ this.scopes.add(scope);
32
+ }
33
+ toBuffer() {
34
+ const scopesArray = [
35
+ ...this.scopes
36
+ ];
37
+ return serializeToBuffer(this.randomness, this.msgContent.length, ...this.msgContent, this.l2BlockNumber, this.l2BlockHash, this.txHash, this.txIndexInBlock, this.eventIndexInTx, this.contractAddress, this.eventSelector.toBuffer(), scopesArray.length, ...scopesArray);
38
+ }
39
+ static fromBuffer(buffer) {
40
+ const reader = BufferReader.asReader(buffer);
41
+ const randomness = Fr.fromBuffer(reader);
42
+ const msgContentLength = reader.readNumber();
43
+ const msgContent = reader.readArray(msgContentLength, Fr);
44
+ const l2BlockNumber = reader.readNumber();
45
+ const l2BlockHash = BlockHash.fromBuffer(reader);
46
+ const txHash = TxHash.fromBuffer(reader);
47
+ const txIndexInBlock = reader.readNumber();
48
+ const eventIndexInTx = reader.readNumber();
49
+ const contractAddress = AztecAddress.fromBuffer(reader);
50
+ const eventSelector = EventSelector.fromBuffer(reader);
51
+ const scopes = reader.readVector({
52
+ fromBuffer: (r)=>r.readString()
53
+ });
54
+ return new StoredPrivateEvent(randomness, msgContent, l2BlockNumber, l2BlockHash, txHash, txIndexInBlock, eventIndexInTx, contractAddress, eventSelector, new Set(scopes));
55
+ }
56
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * A store holding block-indexed state that must be truncated when a chain prune (reorg) is detected.
3
+ */
4
+ export interface Rollbackable {
5
+ /**
6
+ * Rolls the store back to `toBlock`: deletes all state originating from blocks strictly above it, as if nothing
7
+ * past that block height ever happened.
8
+ *
9
+ * Called inside an already open store transaction shared with every other rollbackable and with the anchor block
10
+ * update, so implementations must not open one of their own. Throwing aborts that transaction, undoing the whole
11
+ * prune and leaving the sync cursor untouched so the prune event is re-emitted on the next sync.
12
+ */
13
+ rollbackToBlock(toBlock: number): Promise<void>;
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sbGJhY2thYmxlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmFnZS9yb2xsYmFja2FibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLFdBQVcsWUFBWTtJQUMzQjs7Ozs7OztPQU9HO0lBQ0gsZUFBZSxDQUFDLE9BQU8sRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ2pEIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rollbackable.d.ts","sourceRoot":"","sources":["../../src/storage/rollbackable.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;;;OAOG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD"}
@@ -0,0 +1,3 @@
1
+ /**
2
+ * A store holding block-indexed state that must be truncated when a chain prune (reorg) is detected.
3
+ */ export { };
@@ -0,0 +1,103 @@
1
+ import { type LoggerBindings } from '@aztec-labs/foundation/log';
2
+ import type { AztecAsyncKVStore } from '@aztec-labs/kv-store';
3
+ /**
4
+ * Identifies a change set: the writes staged between a {@link StagedWriteCoordinator.begin} and its matching commit or
5
+ * abort, which are promoted to the database or dropped as a unit.
6
+ */
7
+ export type ChangeSetId = string;
8
+ /**
9
+ * A store that buffers its writes per change set instead of sending them straight to the database.
10
+ *
11
+ * Every read and write on such a store takes a change set ID. Writes are held under that ID; a read sees the database
12
+ * plus whatever its own change set has staged, never another's.
13
+ *
14
+ * {@link StagedWriteCoordinator} ends a change set by calling {@link commitChangeSet}, which promotes its staged writes
15
+ * to the database, or {@link discardChangeSet}, which throws them away.
16
+ */
17
+ export interface StagedStore {
18
+ /** Unique name identifying this store (used for tracking staged stores from StagedWriteCoordinator) */
19
+ readonly storeName: string;
20
+ /**
21
+ * Notifies the store that a change set has been opened.
22
+ *
23
+ * TODO: make it required once every staged store extends `BaseStagingStore`. It is optional only while
24
+ * they migrate to per-change-set staging.
25
+ *
26
+ * @param changeSetId - The change set identifier
27
+ */
28
+ beginChangeSet?(changeSetId: ChangeSetId): void;
29
+ /**
30
+ * Commits staged data to persistent storage. Will be called within a db transaction for atomicity, alongside the
31
+ * writes of all other staged stores for the same change set.
32
+ *
33
+ * @param changeSetId - The change set identifier
34
+ */
35
+ commitChangeSet(changeSetId: ChangeSetId): Promise<void>;
36
+ /**
37
+ * Discards staged data without committing. Called on abort.
38
+ *
39
+ * @param changeSetId - The change set identifier
40
+ */
41
+ discardChangeSet(changeSetId: ChangeSetId): void;
42
+ }
43
+ /**
44
+ * StagedWriteCoordinator simulates a database transaction across the PXE stores, which some underlying KV stores
45
+ * (e.g. IndexedDB) cannot provide on their own for long-running async operations.
46
+ *
47
+ * It uses a staged writes pattern:
48
+ * 1. When a change set is opened, a unique ID is created
49
+ * 2. While a change set is open, all writes are staged under its ID, and reads observe the staged data
50
+ * 3. On commit, the staged data is promoted to persistent storage
51
+ * 4. On abort, staged data is discarded
52
+ *
53
+ * Only one change set can be open at a time: {@link begin} throws if one already is. Supporting overlapping change
54
+ * sets would mean merging them when one of them commits — a problem in its own right, and one no caller needs solved.
55
+ * Avoiding that throw is up to the caller, which must serialize whatever opens change sets, e.g. with a queue.
56
+ *
57
+ * Staged data is nonetheless keyed by change set ID, because aborting a change set does not cancel the async work it
58
+ * started. An oracle that was mid-write when the operation failed still finishes writing afterwards, and stages its
59
+ * write under the aborted ID, which nothing will ever promote. Were staged data not keyed by ID, that late write
60
+ * would instead sit in the store and be promoted by whichever change set commits next.
61
+ */
62
+ export declare class StagedWriteCoordinator {
63
+ #private;
64
+ constructor(args: StagedWriteCoordinatorArgs);
65
+ /**
66
+ * Opens a change set and returns its ID for staged writes.
67
+ *
68
+ * All or nothing: if a store fails to open the change set, the stores that already opened it discard it again and
69
+ * nothing is left active, so a later change set can still be opened on this PXE instance.
70
+ *
71
+ * @returns Change set ID to pass to store operations
72
+ * @throws If a change set is already open, or if a store rejects the new one.
73
+ */
74
+ begin(): ChangeSetId;
75
+ /**
76
+ * Commits by promoting all staged data to persistent storage.
77
+ *
78
+ * Unlike {@link begin} and {@link abort}, a failed commit leaves the change set open, so the caller must still
79
+ * {@link abort} it before another can be opened.
80
+ *
81
+ * @param changeSetId - The change set ID returned from begin
82
+ * @throws If `changeSetId` is not the open change set, or if a store failed to commit.
83
+ */
84
+ commit(changeSetId: ChangeSetId): Promise<void>;
85
+ /**
86
+ * Aborts by discarding all staged data.
87
+ *
88
+ * Every store gets to drop its staged data even if an earlier one failed, and the change set always ends, so a
89
+ * failed abort never blocks later change sets.
90
+ *
91
+ * @param changeSetId - The change set ID returned from begin
92
+ * @throws If `changeSetId` is not the open change set, or if any store failed to discard.
93
+ */
94
+ abort(changeSetId: ChangeSetId): void;
95
+ }
96
+ /** Dependencies of the {@link StagedWriteCoordinator}. */
97
+ type StagedWriteCoordinatorArgs = {
98
+ kvStore: AztecAsyncKVStore;
99
+ stagedStores: StagedStore[];
100
+ bindings?: LoggerBindings;
101
+ };
102
+ export {};
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2VkX3dyaXRlX2Nvb3JkaW5hdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RvcmFnZS9zdGFnZWRfd3JpdGVfY29vcmRpbmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFlLEtBQUssY0FBYyxFQUFnQixNQUFNLDRCQUE0QixDQUFDO0FBQzVGLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFOUQ7OztHQUdHO0FBQ0gsTUFBTSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFFakM7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFdBQVcsV0FBVztJQUMxQix1R0FBdUc7SUFDdkcsUUFBUSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFFM0I7Ozs7Ozs7T0FPRztJQUNILGNBQWMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBRWhEOzs7OztPQUtHO0lBQ0gsZUFBZSxDQUFDLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXpEOzs7O09BSUc7SUFDSCxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLElBQUksQ0FBQztDQUNsRDtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrQkc7QUFDSCxxQkFBYSxzQkFBc0I7O0lBT2pDLFlBQVksSUFBSSxFQUFFLDBCQUEwQixFQVMzQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsS0FBSyxJQUFJLFdBQVcsQ0FhbkI7SUFFRDs7Ozs7Ozs7T0FRRztJQUNHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FtQnBEO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsV0FBVyxFQUFFLFdBQVcsR0FBRyxJQUFJLENBY3BDO0NBK0NGO0FBRUQsMERBQTBEO0FBQzFELEtBQUssMEJBQTBCLEdBQUc7SUFDaEMsT0FBTyxFQUFFLGlCQUFpQixDQUFDO0lBQzNCLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUM1QixRQUFRLENBQUMsRUFBRSxjQUFjLENBQUM7Q0FDM0IsQ0FBQyJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staged_write_coordinator.d.ts","sourceRoot":"","sources":["../../src/storage/staged_write_coordinator.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,4BAA4B,CAAC;AAC5F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IAC1B,uGAAuG;IACvG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B;;;;;;;OAOG;IACH,cAAc,CAAC,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAEhD;;;;;OAKG;IACH,eAAe,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD;;;;OAIG;IACH,gBAAgB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;CAClD;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,sBAAsB;;IAOjC,YAAY,IAAI,EAAE,0BAA0B,EAS3C;IAED;;;;;;;;OAQG;IACH,KAAK,IAAI,WAAW,CAanB;IAED;;;;;;;;OAQG;IACG,MAAM,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBpD;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAcpC;CA+CF;AAED,0DAA0D;AAC1D,KAAK,0BAA0B,GAAG;IAChC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B,CAAC"}
@@ -0,0 +1,141 @@
1
+ import { randomBytes } from '@aztec-labs/foundation/crypto/random';
2
+ import { createLogger } from '@aztec-labs/foundation/log';
3
+ /**
4
+ * StagedWriteCoordinator simulates a database transaction across the PXE stores, which some underlying KV stores
5
+ * (e.g. IndexedDB) cannot provide on their own for long-running async operations.
6
+ *
7
+ * It uses a staged writes pattern:
8
+ * 1. When a change set is opened, a unique ID is created
9
+ * 2. While a change set is open, all writes are staged under its ID, and reads observe the staged data
10
+ * 3. On commit, the staged data is promoted to persistent storage
11
+ * 4. On abort, staged data is discarded
12
+ *
13
+ * Only one change set can be open at a time: {@link begin} throws if one already is. Supporting overlapping change
14
+ * sets would mean merging them when one of them commits — a problem in its own right, and one no caller needs solved.
15
+ * Avoiding that throw is up to the caller, which must serialize whatever opens change sets, e.g. with a queue.
16
+ *
17
+ * Staged data is nonetheless keyed by change set ID, because aborting a change set does not cancel the async work it
18
+ * started. An oracle that was mid-write when the operation failed still finishes writing afterwards, and stages its
19
+ * write under the aborted ID, which nothing will ever promote. Were staged data not keyed by ID, that late write
20
+ * would instead sit in the store and be promoted by whichever change set commits next.
21
+ */ export class StagedWriteCoordinator {
22
+ #kvStore;
23
+ #stagedStores = new Map();
24
+ #log;
25
+ #currentChangeSetId;
26
+ constructor(args){
27
+ this.#kvStore = args.kvStore;
28
+ this.#log = createLogger('pxe:staged_write_coordinator', args.bindings);
29
+ for (const store of args.stagedStores){
30
+ if (this.#stagedStores.has(store.storeName)) {
31
+ throw new Error(`Store "${store.storeName}" is already registered`);
32
+ }
33
+ this.#stagedStores.set(store.storeName, store);
34
+ }
35
+ }
36
+ /**
37
+ * Opens a change set and returns its ID for staged writes.
38
+ *
39
+ * All or nothing: if a store fails to open the change set, the stores that already opened it discard it again and
40
+ * nothing is left active, so a later change set can still be opened on this PXE instance.
41
+ *
42
+ * @returns Change set ID to pass to store operations
43
+ * @throws If a change set is already open, or if a store rejects the new one.
44
+ */ begin() {
45
+ if (this.#currentChangeSetId) {
46
+ throw new Error(`Cannot open change set: change set ${this.#currentChangeSetId} is already active. ` + `This should not happen - ensure change sets are properly committed or aborted.`);
47
+ }
48
+ const changeSetId = randomBytes(8).toString('hex');
49
+ this.#beginChangeSetOnStores(changeSetId);
50
+ this.#currentChangeSetId = changeSetId;
51
+ this.#log.debug(`Opened change set ${changeSetId}`, {
52
+ changeSetId
53
+ });
54
+ return changeSetId;
55
+ }
56
+ /**
57
+ * Commits by promoting all staged data to persistent storage.
58
+ *
59
+ * Unlike {@link begin} and {@link abort}, a failed commit leaves the change set open, so the caller must still
60
+ * {@link abort} it before another can be opened.
61
+ *
62
+ * @param changeSetId - The change set ID returned from begin
63
+ * @throws If `changeSetId` is not the open change set, or if a store failed to commit.
64
+ */ async commit(changeSetId) {
65
+ if (this.#currentChangeSetId !== changeSetId) {
66
+ throw new Error(`Cannot commit change set ${changeSetId}: no matching change set active. ` + `Current change set: ${this.#currentChangeSetId ?? 'none'}`);
67
+ }
68
+ this.#log.debug(`Committing change set ${changeSetId}`, {
69
+ changeSetId
70
+ });
71
+ // Commit all stores atomically in a single transaction.
72
+ await this.#kvStore.transactionAsync(async ()=>{
73
+ for (const store of this.#stagedStores.values()){
74
+ await store.commitChangeSet(changeSetId);
75
+ }
76
+ });
77
+ this.#currentChangeSetId = undefined;
78
+ this.#log.debug(`Change set ${changeSetId} committed successfully`, {
79
+ changeSetId
80
+ });
81
+ }
82
+ /**
83
+ * Aborts by discarding all staged data.
84
+ *
85
+ * Every store gets to drop its staged data even if an earlier one failed, and the change set always ends, so a
86
+ * failed abort never blocks later change sets.
87
+ *
88
+ * @param changeSetId - The change set ID returned from begin
89
+ * @throws If `changeSetId` is not the open change set, or if any store failed to discard.
90
+ */ abort(changeSetId) {
91
+ if (this.#currentChangeSetId !== changeSetId) {
92
+ throw new Error(`Cannot abort change set ${changeSetId}: no matching change set active. ` + `Current change set: ${this.#currentChangeSetId ?? 'none'}`);
93
+ }
94
+ this.#log.debug(`Aborting change set ${changeSetId}`, {
95
+ changeSetId
96
+ });
97
+ this.#currentChangeSetId = undefined;
98
+ this.#discardChangeSetOnStores(this.#stagedStores.values(), changeSetId);
99
+ this.#log.debug(`Change set ${changeSetId} aborted`, {
100
+ changeSetId
101
+ });
102
+ }
103
+ /** Opens the change set on every store, undoing it on any that accepted if a later one rejects, and rethrows. */ #beginChangeSetOnStores(changeSetId) {
104
+ const begunStores = [];
105
+ try {
106
+ for (const store of this.#stagedStores.values()){
107
+ store.beginChangeSet?.(changeSetId);
108
+ begunStores.push(store);
109
+ }
110
+ } catch (err) {
111
+ try {
112
+ this.#discardChangeSetOnStores(begunStores, changeSetId);
113
+ } catch (discardError) {
114
+ // The original error is that a store failed to begin the changeset, and we're throwing that
115
+ // unconditionally, so we just log this additional failure.
116
+ this.#log.error(`Failed to roll back change set ${changeSetId} after a store rejected it`, discardError, {
117
+ changeSetId
118
+ });
119
+ }
120
+ throw err;
121
+ }
122
+ }
123
+ /** Discards the change set on every store in `stores`, throwing only once they have all had the chance. */ #discardChangeSetOnStores(stores, changeSetId) {
124
+ // A store that fails must not stop the ones after it, so the failures are collected and thrown at the end.
125
+ const failures = [];
126
+ for (const store of stores){
127
+ try {
128
+ store.discardChangeSet(changeSetId);
129
+ } catch (err) {
130
+ failures.push(new Error(`Store "${store.storeName}" failed to discard change set ${changeSetId} and may still hold staged data.`, {
131
+ cause: err
132
+ }));
133
+ }
134
+ }
135
+ if (failures.length === 1) {
136
+ throw failures[0];
137
+ } else if (failures.length > 1) {
138
+ throw new AggregateError(failures);
139
+ }
140
+ }
141
+ }