@aztec/pxe 0.0.1-commit.001888fc → 0.0.1-commit.017a351

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 (343) hide show
  1. package/dest/bin/check_oracle_version.js +43 -99
  2. package/dest/bin/index.d.ts +2 -0
  3. package/dest/bin/index.d.ts.map +1 -0
  4. package/dest/bin/index.js +1 -0
  5. package/dest/bin/oracle_version_helpers.d.ts +26 -0
  6. package/dest/bin/oracle_version_helpers.d.ts.map +1 -0
  7. package/dest/bin/oracle_version_helpers.js +93 -0
  8. package/dest/block_synchronizer/block_stream_source.d.ts +10 -0
  9. package/dest/block_synchronizer/block_stream_source.d.ts.map +1 -0
  10. package/dest/block_synchronizer/block_stream_source.js +62 -0
  11. package/dest/block_synchronizer/block_synchronizer.d.ts +6 -2
  12. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  13. package/dest/block_synchronizer/block_synchronizer.js +30 -10
  14. package/dest/config/index.d.ts +7 -1
  15. package/dest/config/index.d.ts.map +1 -1
  16. package/dest/config/index.js +12 -14
  17. package/dest/config/package_info.js +1 -1
  18. package/dest/contract_function_simulator/contract_function_simulator.d.ts +9 -4
  19. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  20. package/dest/contract_function_simulator/contract_function_simulator.js +35 -14
  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 +5 -9
  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 +3 -7
  29. package/dest/contract_function_simulator/index.d.ts +13 -2
  30. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  31. package/dest/contract_function_simulator/index.js +10 -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 +5 -5
  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 +6 -8
  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 +1 -1
  45. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +1 -1
  46. package/dest/contract_function_simulator/noir-structs/note_data.d.ts +27 -0
  47. package/dest/contract_function_simulator/noir-structs/note_data.d.ts.map +1 -0
  48. package/dest/contract_function_simulator/noir-structs/note_data.js +3 -0
  49. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +5 -5
  50. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  51. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +6 -8
  52. package/dest/contract_function_simulator/noir-structs/option.d.ts +61 -0
  53. package/dest/contract_function_simulator/noir-structs/option.d.ts.map +1 -0
  54. package/dest/contract_function_simulator/noir-structs/option.js +62 -0
  55. package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts +11 -0
  56. package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts.map +1 -0
  57. package/dest/contract_function_simulator/noir-structs/provided_secret.js +24 -0
  58. package/dest/contract_function_simulator/oracle/interfaces.d.ts +16 -102
  59. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  60. package/dest/contract_function_simulator/oracle/interfaces.js +2 -2
  61. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +2 -2
  62. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
  63. package/dest/contract_function_simulator/oracle/note_packing_utils.js +2 -2
  64. package/dest/contract_function_simulator/oracle/oracle.d.ts +74 -45
  65. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  66. package/dest/contract_function_simulator/oracle/oracle.js +405 -270
  67. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts +127 -0
  68. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -0
  69. package/dest/contract_function_simulator/oracle/oracle_registry.js +786 -0
  70. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +139 -0
  71. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts.map +1 -0
  72. package/dest/contract_function_simulator/oracle/oracle_type_mappings.js +560 -0
  73. package/dest/contract_function_simulator/oracle/private_execution.js +1 -1
  74. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +33 -39
  75. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  76. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +70 -54
  77. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +104 -60
  78. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  79. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +374 -160
  80. package/dest/contract_function_simulator/pick_notes.d.ts +1 -1
  81. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
  82. package/dest/contract_function_simulator/pick_notes.js +20 -3
  83. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +1 -1
  84. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
  85. package/dest/contract_function_simulator/proxied_contract_data_source.js +35 -64
  86. package/dest/contract_logging.d.ts +9 -4
  87. package/dest/contract_logging.d.ts.map +1 -1
  88. package/dest/contract_logging.js +21 -6
  89. package/dest/contract_sync/contract_sync_service.d.ts +7 -8
  90. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -1
  91. package/dest/contract_sync/contract_sync_service.js +87 -49
  92. package/dest/contract_sync/helpers.d.ts +2 -4
  93. package/dest/contract_sync/helpers.d.ts.map +1 -1
  94. package/dest/contract_sync/helpers.js +12 -14
  95. package/dest/debug/pxe_debug_utils.d.ts +3 -8
  96. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  97. package/dest/debug/pxe_debug_utils.js +0 -6
  98. package/dest/entrypoints/client/bundle/index.d.ts +1 -2
  99. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  100. package/dest/entrypoints/client/bundle/index.js +0 -1
  101. package/dest/entrypoints/client/bundle/utils.d.ts +2 -2
  102. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  103. package/dest/entrypoints/client/bundle/utils.js +13 -5
  104. package/dest/entrypoints/client/lazy/index.d.ts +1 -2
  105. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  106. package/dest/entrypoints/client/lazy/index.js +0 -1
  107. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  108. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  109. package/dest/entrypoints/client/lazy/utils.js +13 -5
  110. package/dest/entrypoints/pxe_creation_options.d.ts +9 -1
  111. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  112. package/dest/entrypoints/pxe_creation_options.js +3 -1
  113. package/dest/entrypoints/server/index.d.ts +3 -3
  114. package/dest/entrypoints/server/index.d.ts.map +1 -1
  115. package/dest/entrypoints/server/index.js +2 -2
  116. package/dest/entrypoints/server/utils.d.ts +4 -3
  117. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  118. package/dest/entrypoints/server/utils.js +13 -5
  119. package/dest/events/event_service.d.ts +15 -6
  120. package/dest/events/event_service.d.ts.map +1 -1
  121. package/dest/events/event_service.js +44 -11
  122. package/dest/events/private_event_filter_validator.d.ts +3 -2
  123. package/dest/events/private_event_filter_validator.d.ts.map +1 -1
  124. package/dest/events/private_event_filter_validator.js +15 -0
  125. package/dest/hooks/authorize_utility_call.d.ts +41 -0
  126. package/dest/hooks/authorize_utility_call.d.ts.map +1 -0
  127. package/dest/hooks/authorize_utility_call.js +4 -0
  128. package/dest/hooks/execution_hooks.d.ts +42 -0
  129. package/dest/hooks/execution_hooks.d.ts.map +1 -0
  130. package/dest/hooks/execution_hooks.js +9 -0
  131. package/dest/hooks/index.d.ts +4 -0
  132. package/dest/hooks/index.d.ts.map +1 -0
  133. package/dest/hooks/index.js +1 -0
  134. package/dest/logs/log_service.d.ts +9 -9
  135. package/dest/logs/log_service.d.ts.map +1 -1
  136. package/dest/logs/log_service.js +126 -72
  137. package/dest/messages/message_context_service.d.ts +3 -3
  138. package/dest/messages/message_context_service.d.ts.map +1 -1
  139. package/dest/messages/message_context_service.js +30 -11
  140. package/dest/notes/note_service.d.ts +27 -6
  141. package/dest/notes/note_service.d.ts.map +1 -1
  142. package/dest/notes/note_service.js +80 -56
  143. package/dest/notes_filter.d.ts +2 -3
  144. package/dest/notes_filter.d.ts.map +1 -1
  145. package/dest/oracle_version.d.ts +4 -3
  146. package/dest/oracle_version.d.ts.map +1 -1
  147. package/dest/oracle_version.js +20 -10
  148. package/dest/private_kernel/batch_planner.d.ts +47 -0
  149. package/dest/private_kernel/batch_planner.d.ts.map +1 -0
  150. package/dest/private_kernel/batch_planner.js +104 -0
  151. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +1 -1
  152. package/dest/private_kernel/hints/test_utils.d.ts +1 -1
  153. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -1
  154. package/dest/private_kernel/hints/test_utils.js +2 -3
  155. package/dest/private_kernel/private_kernel_execution_prover.d.ts +6 -2
  156. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  157. package/dest/private_kernel/private_kernel_execution_prover.js +152 -59
  158. package/dest/private_kernel/private_kernel_oracle.d.ts +10 -10
  159. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  160. package/dest/private_kernel/private_kernel_oracle.js +24 -22
  161. package/dest/pxe.d.ts +56 -10
  162. package/dest/pxe.d.ts.map +1 -1
  163. package/dest/pxe.js +139 -88
  164. package/dest/storage/anchor_block_store/anchor_block_store.js +1 -1
  165. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts +42 -0
  166. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts.map +1 -0
  167. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.js +93 -0
  168. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts +15 -0
  169. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts.map +1 -0
  170. package/dest/storage/backwards_compatibility_tests/schema_tests.js +591 -0
  171. package/dest/storage/backwards_compatibility_tests/store_spy.d.ts +19 -0
  172. package/dest/storage/backwards_compatibility_tests/store_spy.d.ts.map +1 -0
  173. package/dest/storage/backwards_compatibility_tests/store_spy.js +63 -0
  174. package/dest/storage/capsule_store/capsule_service.d.ts +21 -0
  175. package/dest/storage/capsule_store/capsule_service.d.ts.map +1 -0
  176. package/dest/storage/capsule_store/capsule_service.js +50 -0
  177. package/dest/storage/capsule_store/capsule_store.d.ts +9 -9
  178. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -1
  179. package/dest/storage/capsule_store/capsule_store.js +36 -28
  180. package/dest/storage/capsule_store/index.d.ts +2 -1
  181. package/dest/storage/capsule_store/index.d.ts.map +1 -1
  182. package/dest/storage/capsule_store/index.js +1 -0
  183. package/dest/storage/contract_store/contract_store.d.ts +1 -1
  184. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  185. package/dest/storage/contract_store/contract_store.js +9 -26
  186. package/dest/storage/metadata.d.ts +1 -1
  187. package/dest/storage/metadata.js +1 -1
  188. package/dest/storage/note_store/note_store.d.ts +1 -1
  189. package/dest/storage/note_store/note_store.d.ts.map +1 -1
  190. package/dest/storage/note_store/note_store.js +2 -2
  191. package/dest/storage/open_pxe_stores.d.ts +33 -0
  192. package/dest/storage/open_pxe_stores.d.ts.map +1 -0
  193. package/dest/storage/open_pxe_stores.js +27 -0
  194. package/dest/storage/private_event_store/private_event_store.d.ts +1 -1
  195. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -1
  196. package/dest/storage/private_event_store/private_event_store.js +3 -0
  197. package/dest/storage/private_event_store/stored_private_event.js +1 -1
  198. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
  199. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  200. package/dest/storage/tagging_store/sender_tagging_store.d.ts +5 -5
  201. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  202. package/dest/storage/tagging_store/sender_tagging_store.js +3 -3
  203. package/dest/tagging/get_all_logs_by_tags.d.ts +34 -10
  204. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
  205. package/dest/tagging/get_all_logs_by_tags.js +36 -37
  206. package/dest/tagging/index.d.ts +5 -4
  207. package/dest/tagging/index.d.ts.map +1 -1
  208. package/dest/tagging/index.js +4 -3
  209. package/dest/tagging/persist_sender_tagging_index_ranges.d.ts +29 -0
  210. package/dest/tagging/persist_sender_tagging_index_ranges.d.ts.map +1 -0
  211. package/dest/tagging/persist_sender_tagging_index_ranges.js +42 -0
  212. package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +56 -0
  213. package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts.map +1 -0
  214. package/dest/tagging/recipient_sync/sync_tagged_private_logs.js +163 -0
  215. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +3 -3
  216. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -1
  217. package/dest/tagging/reconcile_tagging_index_ranges.d.ts +36 -0
  218. package/dest/tagging/reconcile_tagging_index_ranges.d.ts.map +1 -0
  219. package/dest/tagging/reconcile_tagging_index_ranges.js +74 -0
  220. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -5
  221. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  222. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +26 -14
  223. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +11 -6
  224. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  225. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +21 -0
  226. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +4 -4
  227. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  228. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +2 -2
  229. package/package.json +20 -17
  230. package/src/bin/check_oracle_version.ts +49 -122
  231. package/src/bin/index.ts +1 -0
  232. package/src/bin/oracle_version_helpers.ts +121 -0
  233. package/src/block_synchronizer/block_stream_source.ts +81 -0
  234. package/src/block_synchronizer/block_synchronizer.ts +33 -11
  235. package/src/config/index.ts +14 -8
  236. package/src/config/package_info.ts +1 -1
  237. package/src/contract_function_simulator/contract_function_simulator.ts +55 -17
  238. package/src/contract_function_simulator/ephemeral_array_service.ts +110 -0
  239. package/src/contract_function_simulator/execution_note_cache.ts +1 -1
  240. package/src/contract_function_simulator/execution_tagging_index_cache.ts +5 -9
  241. package/src/contract_function_simulator/index.ts +50 -1
  242. package/src/contract_function_simulator/noir-structs/bounded_vec.ts +55 -0
  243. package/src/contract_function_simulator/noir-structs/ephemeral_array.ts +66 -0
  244. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +4 -6
  245. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +36 -3
  246. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +1 -1
  247. package/src/contract_function_simulator/noir-structs/note_data.ts +27 -0
  248. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +4 -6
  249. package/src/contract_function_simulator/noir-structs/option.ts +69 -0
  250. package/src/contract_function_simulator/noir-structs/provided_secret.ts +27 -0
  251. package/src/contract_function_simulator/oracle/interfaces.ts +12 -175
  252. package/src/contract_function_simulator/oracle/note_packing_utils.ts +3 -3
  253. package/src/contract_function_simulator/oracle/oracle.ts +498 -442
  254. package/src/contract_function_simulator/oracle/oracle_registry.ts +585 -0
  255. package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +553 -0
  256. package/src/contract_function_simulator/oracle/private_execution.ts +1 -1
  257. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +93 -75
  258. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +547 -265
  259. package/src/contract_function_simulator/pick_notes.ts +22 -3
  260. package/src/contract_function_simulator/proxied_contract_data_source.ts +41 -64
  261. package/src/contract_logging.ts +18 -5
  262. package/src/contract_sync/contract_sync_service.ts +120 -83
  263. package/src/contract_sync/helpers.ts +13 -25
  264. package/src/debug/pxe_debug_utils.ts +3 -11
  265. package/src/entrypoints/client/bundle/index.ts +0 -1
  266. package/src/entrypoints/client/bundle/utils.ts +10 -5
  267. package/src/entrypoints/client/lazy/index.ts +0 -1
  268. package/src/entrypoints/client/lazy/utils.ts +10 -5
  269. package/src/entrypoints/pxe_creation_options.ts +14 -0
  270. package/src/entrypoints/server/index.ts +2 -2
  271. package/src/entrypoints/server/utils.ts +15 -6
  272. package/src/events/event_service.ts +69 -21
  273. package/src/events/private_event_filter_validator.ts +21 -1
  274. package/src/hooks/authorize_utility_call.ts +44 -0
  275. package/src/hooks/execution_hooks.ts +48 -0
  276. package/src/hooks/index.ts +7 -0
  277. package/src/logs/log_service.ts +158 -134
  278. package/src/messages/message_context_service.ts +43 -26
  279. package/src/notes/note_service.ts +119 -85
  280. package/src/notes_filter.ts +1 -3
  281. package/src/oracle_version.ts +20 -10
  282. package/src/private_kernel/batch_planner.ts +169 -0
  283. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +1 -1
  284. package/src/private_kernel/hints/test_utils.ts +2 -9
  285. package/src/private_kernel/private_kernel_execution_prover.ts +240 -82
  286. package/src/private_kernel/private_kernel_oracle.ts +35 -25
  287. package/src/pxe.ts +227 -92
  288. package/src/storage/anchor_block_store/anchor_block_store.ts +1 -1
  289. package/src/storage/backwards_compatibility_tests/__snapshots__/AddressStore.json +22 -0
  290. package/src/storage/backwards_compatibility_tests/__snapshots__/AnchorBlockStore.json +3 -0
  291. package/src/storage/backwards_compatibility_tests/__snapshots__/CapsuleStore.json +16 -0
  292. package/src/storage/backwards_compatibility_tests/__snapshots__/ContractStore.json +28 -0
  293. package/src/storage/backwards_compatibility_tests/__snapshots__/KeyStore.json +52 -0
  294. package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +46 -0
  295. package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +36 -0
  296. package/src/storage/backwards_compatibility_tests/__snapshots__/PrivateEventStore.json +44 -0
  297. package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +18 -0
  298. package/src/storage/backwards_compatibility_tests/__snapshots__/SenderAddressBookStore.json +16 -0
  299. package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +22 -0
  300. package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +97 -0
  301. package/src/storage/backwards_compatibility_tests/kv_store_snapshot.ts +122 -0
  302. package/src/storage/backwards_compatibility_tests/schema_tests.ts +712 -0
  303. package/src/storage/backwards_compatibility_tests/store_spy.ts +73 -0
  304. package/src/storage/capsule_store/capsule_service.ts +90 -0
  305. package/src/storage/capsule_store/capsule_store.ts +44 -26
  306. package/src/storage/capsule_store/index.ts +1 -0
  307. package/src/storage/contract_store/contract_store.ts +14 -35
  308. package/src/storage/metadata.ts +1 -1
  309. package/src/storage/note_store/note_store.ts +2 -5
  310. package/src/storage/open_pxe_stores.ts +49 -0
  311. package/src/storage/private_event_store/private_event_store.ts +4 -0
  312. package/src/storage/private_event_store/stored_private_event.ts +1 -1
  313. package/src/storage/tagging_store/recipient_tagging_store.ts +5 -9
  314. package/src/storage/tagging_store/sender_tagging_store.ts +6 -6
  315. package/src/tagging/get_all_logs_by_tags.ts +78 -50
  316. package/src/tagging/index.ts +4 -3
  317. package/src/tagging/persist_sender_tagging_index_ranges.ts +57 -0
  318. package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +240 -0
  319. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
  320. package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
  321. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +41 -19
  322. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +23 -8
  323. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +4 -5
  324. package/dest/access_scopes.d.ts +0 -9
  325. package/dest/access_scopes.d.ts.map +0 -1
  326. package/dest/access_scopes.js +0 -6
  327. package/dest/contract_function_simulator/noir-structs/message_tx_context.d.ts +0 -16
  328. package/dest/contract_function_simulator/noir-structs/message_tx_context.d.ts.map +0 -1
  329. package/dest/contract_function_simulator/noir-structs/message_tx_context.js +0 -57
  330. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +0 -9
  331. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +0 -1
  332. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +0 -43
  333. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +0 -14
  334. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +0 -1
  335. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +0 -99
  336. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +0 -14
  337. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +0 -1
  338. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +0 -33
  339. package/src/access_scopes.ts +0 -9
  340. package/src/contract_function_simulator/noir-structs/message_tx_context.ts +0 -55
  341. package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +0 -142
  342. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -140
  343. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -44
@@ -42,7 +42,7 @@ import type { FunctionCall } from '@aztec/stdlib/abi';
42
42
  import { FunctionSelector, FunctionType } from '@aztec/stdlib/abi';
43
43
  import type { AuthWitness } from '@aztec/stdlib/auth-witness';
44
44
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
45
- import type { BlockParameter } from '@aztec/stdlib/block';
45
+ import type { BlockParameter, L2TipsProvider } from '@aztec/stdlib/block';
46
46
  import { Gas } from '@aztec/stdlib/gas';
47
47
  import {
48
48
  computeNoteHashNonce,
@@ -76,6 +76,7 @@ import {
76
76
  import { PrivateLog } from '@aztec/stdlib/logs';
77
77
  import { ScopedL2ToL1Message } from '@aztec/stdlib/messaging';
78
78
  import { ChonkProof } from '@aztec/stdlib/proofs';
79
+ import { MerkleTreeId } from '@aztec/stdlib/trees';
79
80
  import {
80
81
  BlockHeader,
81
82
  CallContext,
@@ -89,10 +90,11 @@ import {
89
90
  getFinalMinRevertibleSideEffectCounter,
90
91
  } from '@aztec/stdlib/tx';
91
92
 
92
- import type { AccessScopes } from '../access_scopes.js';
93
93
  import type { ContractSyncService } from '../contract_sync/contract_sync_service.js';
94
+ import type { ExecutionHooks } from '../hooks/index.js';
94
95
  import type { MessageContextService } from '../messages/message_context_service.js';
95
96
  import type { AddressStore } from '../storage/address_store/address_store.js';
97
+ import { CapsuleService } from '../storage/capsule_store/capsule_service.js';
96
98
  import type { CapsuleStore } from '../storage/capsule_store/capsule_store.js';
97
99
  import type { ContractStore } from '../storage/contract_store/contract_store.js';
98
100
  import type { NoteStore } from '../storage/note_store/note_store.js';
@@ -122,7 +124,7 @@ export type ContractSimulatorRunOpts = {
122
124
  /** The address used as a tagging sender when emitting private logs. */
123
125
  senderForTags?: AztecAddress;
124
126
  /** The accounts whose notes we can access in this call. */
125
- scopes: AccessScopes;
127
+ scopes: AztecAddress[];
126
128
  /** The job ID for staged writes. */
127
129
  jobId: string;
128
130
  };
@@ -134,6 +136,7 @@ export type ContractFunctionSimulatorArgs = {
134
136
  keyStore: KeyStore;
135
137
  addressStore: AddressStore;
136
138
  aztecNode: AztecNode;
139
+ l2TipsStore: L2TipsProvider;
137
140
  senderTaggingStore: SenderTaggingStore;
138
141
  recipientTaggingStore: RecipientTaggingStore;
139
142
  senderAddressBookStore: SenderAddressBookStore;
@@ -142,6 +145,7 @@ export type ContractFunctionSimulatorArgs = {
142
145
  simulator: CircuitSimulator;
143
146
  contractSyncService: ContractSyncService;
144
147
  messageContextService: MessageContextService;
148
+ hooks?: ExecutionHooks;
145
149
  };
146
150
 
147
151
  /**
@@ -154,6 +158,7 @@ export class ContractFunctionSimulator {
154
158
  private readonly keyStore: KeyStore;
155
159
  private readonly addressStore: AddressStore;
156
160
  private readonly aztecNode: AztecNode;
161
+ private readonly l2TipsStore: L2TipsProvider;
157
162
  private readonly senderTaggingStore: SenderTaggingStore;
158
163
  private readonly recipientTaggingStore: RecipientTaggingStore;
159
164
  private readonly senderAddressBookStore: SenderAddressBookStore;
@@ -162,6 +167,7 @@ export class ContractFunctionSimulator {
162
167
  private readonly simulator: CircuitSimulator;
163
168
  private readonly contractSyncService: ContractSyncService;
164
169
  private readonly messageContextService: MessageContextService;
170
+ private readonly hooks: ExecutionHooks | undefined;
165
171
 
166
172
  constructor(args: ContractFunctionSimulatorArgs) {
167
173
  this.contractStore = args.contractStore;
@@ -169,6 +175,7 @@ export class ContractFunctionSimulator {
169
175
  this.keyStore = args.keyStore;
170
176
  this.addressStore = args.addressStore;
171
177
  this.aztecNode = args.aztecNode;
178
+ this.l2TipsStore = args.l2TipsStore;
172
179
  this.senderTaggingStore = args.senderTaggingStore;
173
180
  this.recipientTaggingStore = args.recipientTaggingStore;
174
181
  this.senderAddressBookStore = args.senderAddressBookStore;
@@ -177,6 +184,7 @@ export class ContractFunctionSimulator {
177
184
  this.simulator = args.simulator;
178
185
  this.contractSyncService = args.contractSyncService;
179
186
  this.messageContextService = args.messageContextService;
187
+ this.hooks = args.hooks;
180
188
  this.log = createLogger('simulator');
181
189
  }
182
190
 
@@ -205,7 +213,7 @@ export class ContractFunctionSimulator {
205
213
  }
206
214
 
207
215
  if (request.origin !== contractAddress) {
208
- this.log.warn(
216
+ throw new Error(
209
217
  `Request origin does not match contract address in simulation. Request origin: ${request.origin}, contract address: ${contractAddress}`,
210
218
  );
211
219
  }
@@ -245,7 +253,7 @@ export class ContractFunctionSimulator {
245
253
  senderTaggingStore: this.senderTaggingStore,
246
254
  recipientTaggingStore: this.recipientTaggingStore,
247
255
  senderAddressBookStore: this.senderAddressBookStore,
248
- capsuleStore: this.capsuleStore,
256
+ capsuleService: new CapsuleService(this.capsuleStore, scopes),
249
257
  privateEventStore: this.privateEventStore,
250
258
  messageContextService: this.messageContextService,
251
259
  contractSyncService: this.contractSyncService,
@@ -255,6 +263,8 @@ export class ContractFunctionSimulator {
255
263
  scopes,
256
264
  senderForTags,
257
265
  simulator: this.simulator,
266
+ l2TipsStore: this.l2TipsStore,
267
+ hooks: this.hooks,
258
268
  });
259
269
 
260
270
  const setupTime = simulatorSetupTimer.ms();
@@ -284,7 +294,7 @@ export class ContractFunctionSimulator {
284
294
  );
285
295
  const publicFunctionsCalldata = await Promise.all(
286
296
  publicCallRequests.map(async r => {
287
- const calldata = await privateExecutionOracle.loadFromExecutionCache(r.calldataHash);
297
+ const calldata = await privateExecutionOracle.getHashPreimage(r.calldataHash);
288
298
  return new HashedValues(calldata, r.calldataHash);
289
299
  }),
290
300
  );
@@ -305,7 +315,6 @@ export class ContractFunctionSimulator {
305
315
  }
306
316
  }
307
317
 
308
- // docs:start:execute_utility_function
309
318
  /**
310
319
  * Runs a utility function.
311
320
  * @param call - The function call to execute.
@@ -319,7 +328,7 @@ export class ContractFunctionSimulator {
319
328
  call: FunctionCall,
320
329
  authwits: AuthWitness[],
321
330
  anchorBlockHeader: BlockHeader,
322
- scopes: AccessScopes,
331
+ scopes: AztecAddress[],
323
332
  jobId: string,
324
333
  ): Promise<{ result: Fr[]; offchainEffects: OffchainEffect[] }> {
325
334
  const entryPointArtifact = await this.contractStore.getFunctionArtifactWithDebugMetadata(call.to, call.selector);
@@ -328,6 +337,10 @@ export class ContractFunctionSimulator {
328
337
  throw new Error(`Cannot run ${entryPointArtifact.functionType} function as utility`);
329
338
  }
330
339
 
340
+ const utilityExecutor = async (syncCall: FunctionCall, execScopes: AztecAddress[]) => {
341
+ await this.runUtility(syncCall, [], anchorBlockHeader, execScopes, jobId);
342
+ };
343
+
331
344
  const oracle = new UtilityExecutionOracle({
332
345
  contractAddress: call.to,
333
346
  authWitnesses: authwits,
@@ -340,11 +353,16 @@ export class ContractFunctionSimulator {
340
353
  aztecNode: this.aztecNode,
341
354
  recipientTaggingStore: this.recipientTaggingStore,
342
355
  senderAddressBookStore: this.senderAddressBookStore,
343
- capsuleStore: this.capsuleStore,
356
+ capsuleService: new CapsuleService(this.capsuleStore, scopes),
344
357
  privateEventStore: this.privateEventStore,
345
358
  messageContextService: this.messageContextService,
359
+ contractSyncService: this.contractSyncService,
360
+ l2TipsStore: this.l2TipsStore,
346
361
  jobId,
347
362
  scopes,
363
+ simulator: this.simulator,
364
+ hooks: this.hooks,
365
+ utilityExecutor,
348
366
  });
349
367
 
350
368
  try {
@@ -378,7 +396,6 @@ export class ContractFunctionSimulator {
378
396
  throw createSimulationError(err instanceof Error ? err : new Error('Unknown error during private execution'));
379
397
  }
380
398
  }
381
- // docs:end:execute_utility_function
382
399
 
383
400
  /**
384
401
  * Returns the execution statistics collected during the simulator run.
@@ -448,6 +465,8 @@ export async function generateSimulatedProvingResult(
448
465
  privateExecutionResult.entrypoint.publicInputs.anchorBlockHeader.globalVariables.timestamp +
449
466
  BigInt(MAX_TX_LIFETIME);
450
467
 
468
+ let feePayer = AztecAddress.zero();
469
+
451
470
  const executions = [privateExecutionResult.entrypoint];
452
471
 
453
472
  while (executions.length !== 0) {
@@ -462,6 +481,13 @@ export async function generateSimulatedProvingResult(
462
481
 
463
482
  const { contractAddress } = execution.publicInputs.callContext;
464
483
 
484
+ if (execution.publicInputs.isFeePayer) {
485
+ if (!feePayer.isZero()) {
486
+ throw new Error('Multiple fee payers found in private execution result');
487
+ }
488
+ feePayer = contractAddress;
489
+ }
490
+
465
491
  scopedNoteHashes.push(
466
492
  ...execution.publicInputs.noteHashes
467
493
  .getActiveItems()
@@ -682,7 +708,7 @@ export async function generateSimulatedProvingResult(
682
708
  daGas: TX_DA_GAS_OVERHEAD,
683
709
  }),
684
710
  ),
685
- /*feePayer=*/ AztecAddress.zero(),
711
+ /*feePayer=*/ feePayer,
686
712
  /*expirationTimestamp=*/ expirationTimestamp,
687
713
  hasPublicCalls ? inputsForPublic : undefined,
688
714
  !hasPublicCalls ? inputsForRollup : undefined,
@@ -738,7 +764,7 @@ function squashTransientSideEffects(
738
764
  * at the tx's anchor block, mimicking the behavior of the kernels
739
765
  */
740
766
  async function verifyReadRequests(
741
- node: Pick<AztecNode, 'getNoteHashMembershipWitness' | 'getNullifierMembershipWitness'>,
767
+ node: Pick<AztecNode, 'findLeavesIndexes'>,
742
768
  anchorBlockHash: BlockParameter,
743
769
  noteHashReadRequests: ScopedReadRequest[],
744
770
  nullifierReadRequests: ScopedReadRequest[],
@@ -771,13 +797,25 @@ async function verifyReadRequests(
771
797
  }
772
798
  }
773
799
 
774
- const [noteHashWitnesses, nullifierWitnesses] = await Promise.all([
775
- Promise.all(settledNoteHashReads.map(({ value }) => node.getNoteHashMembershipWitness(anchorBlockHash, value))),
776
- Promise.all(settledNullifierReads.map(({ value }) => node.getNullifierMembershipWitness(anchorBlockHash, value))),
800
+ const [noteHashResults, nullifierResults] = await Promise.all([
801
+ settledNoteHashReads.length > 0
802
+ ? node.findLeavesIndexes(
803
+ anchorBlockHash,
804
+ MerkleTreeId.NOTE_HASH_TREE,
805
+ settledNoteHashReads.map(({ value }) => value),
806
+ )
807
+ : [],
808
+ settledNullifierReads.length > 0
809
+ ? node.findLeavesIndexes(
810
+ anchorBlockHash,
811
+ MerkleTreeId.NULLIFIER_TREE,
812
+ settledNullifierReads.map(({ value }) => value),
813
+ )
814
+ : [],
777
815
  ]);
778
816
 
779
817
  for (let i = 0; i < settledNoteHashReads.length; i++) {
780
- if (!noteHashWitnesses[i]) {
818
+ if (!noteHashResults[i]) {
781
819
  throw new Error(
782
820
  `Note hash read request at index ${settledNoteHashReads[i].index} is reading an unknown note hash: ${settledNoteHashReads[i].value}`,
783
821
  );
@@ -785,7 +823,7 @@ async function verifyReadRequests(
785
823
  }
786
824
 
787
825
  for (let i = 0; i < settledNullifierReads.length; i++) {
788
- if (!nullifierWitnesses[i]) {
826
+ if (!nullifierResults[i]) {
789
827
  throw new Error(
790
828
  `Nullifier read request at index ${settledNullifierReads[i].index} is reading an unknown nullifier: ${settledNullifierReads[i].value}`,
791
829
  );
@@ -0,0 +1,110 @@
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+
3
+ /** In-memory store for ephemeral arrays scoped to a single contract call frame. */
4
+ export class EphemeralArrayService {
5
+ /**
6
+ * Maps a slot to the elements of the array stored at that slot. Each element is a serialized representation of
7
+ * the original type.
8
+ */
9
+ #arrays: Map<string, Fr[][]> = new Map();
10
+
11
+ /** Returns all elements in the array, or an empty array if uninitialized. */
12
+ readArrayAt(slot: Fr): Fr[][] {
13
+ return this.#arrays.get(slot.toString()) ?? [];
14
+ }
15
+
16
+ #setArray(slot: Fr, array: Fr[][]): void {
17
+ this.#arrays.set(slot.toString(), array);
18
+ }
19
+
20
+ /** Returns the number of elements in the array at the given slot. */
21
+ len(slot: Fr): number {
22
+ return this.readArrayAt(slot).length;
23
+ }
24
+
25
+ /** Appends an element to the array and returns the new length. */
26
+ push(slot: Fr, elements: Fr[]): number {
27
+ const array = this.readArrayAt(slot);
28
+ array.push(elements);
29
+ this.#setArray(slot, array);
30
+ return array.length;
31
+ }
32
+
33
+ /** Removes and returns the last element. Throws if empty. */
34
+ pop(slot: Fr): Fr[] {
35
+ const array = this.readArrayAt(slot);
36
+ if (array.length === 0) {
37
+ throw new Error(`Ephemeral array at slot ${slot} is empty`);
38
+ }
39
+ const element = array.pop()!;
40
+ this.#setArray(slot, array);
41
+ return element;
42
+ }
43
+
44
+ /** Returns the element at the given index. Throws if out of bounds. */
45
+ get(slot: Fr, index: number): Fr[] {
46
+ const array = this.readArrayAt(slot);
47
+ if (index < 0 || index >= array.length) {
48
+ throw new Error(
49
+ `Ephemeral array index ${index} out of bounds for array of length ${array.length} at slot ${slot}`,
50
+ );
51
+ }
52
+ return array[index];
53
+ }
54
+
55
+ /** Overwrites the element at the given index. Throws if out of bounds. */
56
+ set(slot: Fr, index: number, value: Fr[]): void {
57
+ const array = this.readArrayAt(slot);
58
+ if (index < 0 || index >= array.length) {
59
+ throw new Error(
60
+ `Ephemeral array index ${index} out of bounds for array of length ${array.length} at slot ${slot}`,
61
+ );
62
+ }
63
+ array[index] = value;
64
+ }
65
+
66
+ /** Removes the element at the given index, shifting subsequent elements backward. Throws if out of bounds. */
67
+ remove(slot: Fr, index: number): void {
68
+ const array = this.readArrayAt(slot);
69
+ if (index < 0 || index >= array.length) {
70
+ throw new Error(
71
+ `Ephemeral array index ${index} out of bounds for array of length ${array.length} at slot ${slot}`,
72
+ );
73
+ }
74
+ array.splice(index, 1);
75
+ }
76
+
77
+ /** Removes all elements from the array. */
78
+ clear(slot: Fr): void {
79
+ this.#arrays.delete(slot.toString());
80
+ }
81
+
82
+ /** Allocates a fresh, unused slot for a new ephemeral array. */
83
+ allocateSlot(): Fr {
84
+ let slot: Fr;
85
+ do {
86
+ slot = Fr.random();
87
+ } while (this.#arrays.has(slot.toString()));
88
+ return slot;
89
+ }
90
+
91
+ /** Creates a new ephemeral array pre-populated with the given elements and returns its slot. */
92
+ newArray(elements: Fr[][]): Fr {
93
+ const slot = this.allocateSlot();
94
+ this.#setArray(slot, elements);
95
+ return slot;
96
+ }
97
+
98
+ /** Copies `count` elements from the source array to the destination array (overwrites destination). */
99
+ copy(srcSlot: Fr, dstSlot: Fr, count: number): void {
100
+ const srcArray = this.readArrayAt(srcSlot);
101
+ if (count > srcArray.length) {
102
+ throw new Error(
103
+ `Cannot copy ${count} elements from ephemeral array of length ${srcArray.length} at slot ${srcSlot}`,
104
+ );
105
+ }
106
+ // Deep copy the elements to avoid aliasing
107
+ const copied = srcArray.slice(0, count).map(el => [...el]);
108
+ this.#setArray(dstSlot, copied);
109
+ }
110
+ }
@@ -2,7 +2,7 @@ import { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
3
3
  import { computeNoteHashNonce, computeUniqueNoteHash, siloNoteHash, siloNullifier } from '@aztec/stdlib/hash';
4
4
 
5
- import type { NoteData } from './oracle/interfaces.js';
5
+ import type { NoteData } from './noir-structs/note_data.js';
6
6
 
7
7
  interface PendingNote {
8
8
  note: NoteData;
@@ -1,18 +1,14 @@
1
- import { ExtendedDirectionalAppTaggingSecret, type TaggingIndexRange } from '@aztec/stdlib/logs';
1
+ import { AppTaggingSecret, type TaggingIndexRange } from '@aztec/stdlib/logs';
2
2
 
3
- /**
4
- * A map that stores the tagging index range for a given extended directional app tagging secret.
5
- * Note: The directional app tagging secret is unique for a (sender, recipient, contract) tuple while the direction
6
- * of sender -> recipient matters.
7
- */
3
+ /** A map that stores the tagging index range for a given app tagging secret. */
8
4
  export class ExecutionTaggingIndexCache {
9
5
  private taggingIndexMap: Map<string, { lowestIndex: number; highestIndex: number }> = new Map();
10
6
 
11
- public getLastUsedIndex(secret: ExtendedDirectionalAppTaggingSecret): number | undefined {
7
+ public getLastUsedIndex(secret: AppTaggingSecret): number | undefined {
12
8
  return this.taggingIndexMap.get(secret.toString())?.highestIndex;
13
9
  }
14
10
 
15
- public setLastUsedIndex(secret: ExtendedDirectionalAppTaggingSecret, index: number) {
11
+ public setLastUsedIndex(secret: AppTaggingSecret, index: number) {
16
12
  const currentValue = this.taggingIndexMap.get(secret.toString());
17
13
  if (currentValue !== undefined && currentValue.highestIndex !== index - 1) {
18
14
  throw new Error(`Invalid tagging index update. Current value: ${currentValue.highestIndex}, new value: ${index}`);
@@ -29,7 +25,7 @@ export class ExecutionTaggingIndexCache {
29
25
  */
30
26
  public getUsedTaggingIndexRanges(): TaggingIndexRange[] {
31
27
  return Array.from(this.taggingIndexMap.entries()).map(([secret, { lowestIndex, highestIndex }]) => ({
32
- extendedSecret: ExtendedDirectionalAppTaggingSecret.fromString(secret),
28
+ extendedSecret: AppTaggingSecret.fromString(secret),
33
29
  lowestIndex,
34
30
  highestIndex,
35
31
  }));
@@ -1,8 +1,49 @@
1
+ export {
2
+ ORACLE_REGISTRY,
3
+ callHandler,
4
+ makeEntry,
5
+ type HandlersForPrefix,
6
+ type NamedValue,
7
+ type OracleRegistryEntry,
8
+ type ParamTypes,
9
+ type StripOraclePrefix,
10
+ } from './oracle/oracle_registry.js';
11
+ export {
12
+ ARRAY,
13
+ AZTEC_ADDRESS,
14
+ BIGINT,
15
+ BLOCK_NUMBER,
16
+ BOOL,
17
+ BOUNDED_VEC,
18
+ BUFFER,
19
+ BYTE,
20
+ DELIVERY_MODE,
21
+ EPHEMERAL_ARRAY,
22
+ EVENT_VALIDATION_REQUEST,
23
+ FIELD,
24
+ FUNCTION_SELECTOR,
25
+ LOG_RETRIEVAL_REQUEST,
26
+ LOG_RETRIEVAL_RESPONSE,
27
+ MEMBERSHIP_WITNESS,
28
+ MESSAGE_CONTEXT,
29
+ NOTE_VALIDATION_REQUEST,
30
+ OPTION,
31
+ PENDING_TAGGED_LOG,
32
+ POINT,
33
+ PROVIDED_SECRET,
34
+ STR,
35
+ U32,
36
+ type InputSlot,
37
+ type MaybePromise,
38
+ type OutputSlot,
39
+ type TypeMapping,
40
+ } from './oracle/oracle_type_mappings.js';
1
41
  export { ExecutionNoteCache } from './execution_note_cache.js';
2
42
  export { ExecutionTaggingIndexCache } from './execution_tagging_index_cache.js';
3
43
  export { HashedValuesCache } from './hashed_values_cache.js';
4
44
  export { pickNotes } from './pick_notes.js';
5
- export type { NoteData, IMiscOracle, IUtilityExecutionOracle, IPrivateExecutionOracle } from './oracle/interfaces.js';
45
+ export type { IMiscOracle, IUtilityExecutionOracle, IPrivateExecutionOracle } from './oracle/interfaces.js';
46
+ export type { NoteData } from './noir-structs/note_data.js';
6
47
  export { MessageLoadOracleInputs } from './oracle/message_load_oracle_inputs.js';
7
48
  export { MessageContextService } from '../messages/message_context_service.js';
8
49
  export { UtilityExecutionOracle } from './oracle/utility_execution_oracle.js';
@@ -11,4 +52,12 @@ export { Oracle } from './oracle/oracle.js';
11
52
  export { executePrivateFunction, extractPrivateCircuitPublicInputs } from './oracle/private_execution.js';
12
53
  export { generateSimulatedProvingResult } from './contract_function_simulator.js';
13
54
  export { packAsHintedNote } from './oracle/note_packing_utils.js';
55
+ export { BoundedVec } from './noir-structs/bounded_vec.js';
56
+ export { EphemeralArray } from './noir-structs/ephemeral_array.js';
57
+ export { Option } from './noir-structs/option.js';
14
58
  export { UtilityContext } from './noir-structs/utility_context.js';
59
+ export { EventValidationRequest } from './noir-structs/event_validation_request.js';
60
+ export { LogRetrievalRequest } from './noir-structs/log_retrieval_request.js';
61
+ export { LogRetrievalResponse } from './noir-structs/log_retrieval_response.js';
62
+ export { NoteValidationRequest } from './noir-structs/note_validation_request.js';
63
+ export { ProvidedSecret } from './noir-structs/provided_secret.js';
@@ -0,0 +1,55 @@
1
+ /**
2
+ * TypeScript counterpart of Noir's `BoundedVec<T, MaxLen>`.
3
+ *
4
+ * Carries the actual `data` plus wire-format metadata (`maxLength`, `elementSize`) so the ACVM
5
+ * serializer can pad the storage slot to exactly `maxLength * elementSize` fields.
6
+ */
7
+ export class BoundedVec<T> {
8
+ private constructor(
9
+ public readonly data: T[],
10
+ public readonly maxLength: number,
11
+ public readonly elementSize: number,
12
+ ) {}
13
+
14
+ /**
15
+ * Construct a BoundedVec with data.
16
+ *
17
+ * @param data - Actual elements. Length must be `<= maxLength`.
18
+ * @param maxLength - Maximum capacity declared at the Noir call site.
19
+ * The storage slot is padded to this many elements.
20
+ * @param elementSize - Number of Fr fields each element contributes when serialized.
21
+ * `1` for scalar elements (u8, Field) — this is the default.
22
+ * `> 1` for compound elements (e.g. a packed note that spans multiple fields).
23
+ *
24
+ * @example A bounded vec of bytes (elementSize defaults to 1):
25
+ * ```ts
26
+ * BoundedVec.from({ data: plaintext, maxLength: ciphertext.maxLength })
27
+ * ```
28
+ *
29
+ * @example A bounded vec of packed notes, each spanning `packedHintedNoteLength` fields:
30
+ * ```ts
31
+ * BoundedVec.from({ data: notes, maxLength: maxNotes, elementSize: packedHintedNoteLength })
32
+ * ```
33
+ */
34
+ static from<T>({
35
+ data,
36
+ maxLength,
37
+ elementSize = 1,
38
+ }: {
39
+ data: T[];
40
+ maxLength: number;
41
+ elementSize?: number;
42
+ }): BoundedVec<T> {
43
+ return new BoundedVec<T>(data, maxLength, elementSize);
44
+ }
45
+
46
+ /**
47
+ * Construct an empty BoundedVec, typically used as a shape template for `Option.empty(...)`.
48
+ *
49
+ * @param maxLength - Maximum capacity declared at the Noir call site.
50
+ * @param elementSize - Number of Fr fields each element contributes when serialized (default 1).
51
+ */
52
+ static empty<T>({ maxLength, elementSize = 1 }: { maxLength: number; elementSize?: number }): BoundedVec<T> {
53
+ return new BoundedVec<T>([], maxLength, elementSize);
54
+ }
55
+ }
@@ -0,0 +1,66 @@
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
+ import { FieldReader } from '@aztec/foundation/serialize';
3
+
4
+ import type { EphemeralArrayService } from '../ephemeral_array_service.js';
5
+ import type { TypeMapping } from '../oracle/oracle_registry.js';
6
+
7
+ /**
8
+ * TypeScript counterpart of Noir's `EphemeralArray<T>`.
9
+ *
10
+ * An ephemeral array looks very different depending on whether it's being produced (as an oracle return value) or
11
+ * consumed (as an oracle parameter), so we use a discriminated state to model both without leaking those details to
12
+ * callers:
13
+ *
14
+ * - As a return value (`output` mode), what we have are the typed values the oracle just computed. The slot is just
15
+ * an implementation detail of how those values get handed back to ACVM, so we hold onto the values and the service
16
+ * they will eventually live in, and only materialize a slot when something actually asks for it.
17
+ *
18
+ * - As a parameter (`input` mode), what we have is a slot pointing at fields ACVM already wrote into the service,
19
+ * plus the TypeMapping that knows how to interpret those fields. We hold onto both so callers can later ask for
20
+ * the typed values without having to think about deserialization.
21
+ *
22
+ * In both modes the idea is the same: store everything we already know at construction time, so the rest of the
23
+ * code can work with typed values and never touch slots, services, or TypeMappings directly.
24
+ */
25
+ export class EphemeralArray<T> {
26
+ private constructor(private readonly state: EphemeralArrayState<T>) {}
27
+
28
+ /** Create an output-mode array carrying typed values. The service is only used if/when the slot is materialized. */
29
+ static fromValues<T>(service: EphemeralArrayService, values: T[]): EphemeralArray<T> {
30
+ return new EphemeralArray({ kind: 'output', service, values });
31
+ }
32
+
33
+ /** Wrap an existing slot. Intended for the EPHEMERAL_ARRAY combinator during ACVM deserialization. */
34
+ static fromSlot<T>(slot: Fr, mapping: TypeMapping<T>): EphemeralArray<T> {
35
+ return new EphemeralArray({ kind: 'input', slot, mapping });
36
+ }
37
+
38
+ /**
39
+ * Returns the slot, materializing values into the service on first call for output-mode arrays.
40
+ * Intended for the EPHEMERAL_ARRAY combinator during ACVM serialization.
41
+ */
42
+ materializeSlot(serializeItem: (v: T) => Fr[]): Fr {
43
+ if (this.state.kind === 'input') {
44
+ return this.state.slot;
45
+ }
46
+ if (this.state.cachedSlot === undefined) {
47
+ this.state.cachedSlot = this.state.service.newArray(this.state.values.map(serializeItem));
48
+ }
49
+ return this.state.cachedSlot;
50
+ }
51
+
52
+ /** Read all elements: returns stored values for output-mode arrays, deserializes from the service for input-mode. */
53
+ readAll(service: EphemeralArrayService): T[] {
54
+ if (this.state.kind === 'output') {
55
+ return this.state.values;
56
+ }
57
+ const mapping = this.state.mapping;
58
+ return service
59
+ .readArrayAt(this.state.slot)
60
+ .map(fields => mapping.deserialization!.fn([FieldReader.asReader(fields)]));
61
+ }
62
+ }
63
+
64
+ type EphemeralArrayState<T> =
65
+ | { kind: 'output'; service: EphemeralArrayService; values: T[]; cachedSlot?: Fr }
66
+ | { kind: 'input'; slot: Fr; mapping: TypeMapping<T> };
@@ -6,7 +6,7 @@ import { TxHash } from '@aztec/stdlib/tx';
6
6
 
7
7
  /**
8
8
  * Intermediate struct used to perform batch event validation by PXE. The `utilityValidateAndStoreEnqueuedNotesAndEvents` oracle
9
- * expects for values of this type to be stored in a `CapsuleArray`.
9
+ * expects for values of this type to be stored in a `EphemeralArray`.
10
10
  */
11
11
  export class EventValidationRequest {
12
12
  constructor(
@@ -16,10 +16,9 @@ export class EventValidationRequest {
16
16
  public serializedEvent: Fr[],
17
17
  public eventCommitment: Fr,
18
18
  public txHash: TxHash,
19
- public recipient: AztecAddress,
20
19
  ) {}
21
20
 
22
- static fromFields(fields: Fr[], maxEventSerializedLen: number): EventValidationRequest {
21
+ static fromFields(fields: Fr[] | FieldReader): EventValidationRequest {
23
22
  const reader = FieldReader.asReader(fields);
24
23
 
25
24
  const contractAddress = AztecAddress.fromField(reader.readField());
@@ -27,17 +26,17 @@ export class EventValidationRequest {
27
26
 
28
27
  const randomness = reader.readField();
29
28
 
29
+ const maxEventSerializedLen = reader.readField().toNumber();
30
30
  const eventStorage = reader.readFieldArray(maxEventSerializedLen);
31
31
  const eventLen = reader.readField().toNumber();
32
32
  const serializedEvent = eventStorage.slice(0, eventLen);
33
33
 
34
34
  const eventCommitment = reader.readField();
35
35
  const txHash = TxHash.fromField(reader.readField());
36
- const recipient = AztecAddress.fromField(reader.readField());
37
36
 
38
37
  if (reader.remainingFields() !== 0) {
39
38
  throw new Error(
40
- `Error converting array of fields to EventValidationRequest: expected ${reader.cursor} fields but received ${fields.length} (maxEventSerializedLen=${maxEventSerializedLen}).`,
39
+ `Error converting array of fields to EventValidationRequest: expected ${reader.cursor} fields but received ${reader.cursor + reader.remainingFields()} (maxEventSerializedLen=${maxEventSerializedLen}).`,
41
40
  );
42
41
  }
43
42
 
@@ -48,7 +47,6 @@ export class EventValidationRequest {
48
47
  serializedEvent,
49
48
  eventCommitment,
50
49
  txHash,
51
- recipient,
52
50
  );
53
51
  }
54
52
  }