@aztec/pxe 0.0.1-commit.2448fdb → 0.0.1-commit.2606882

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 (279) hide show
  1. package/dest/bin/check_oracle_version.js +40 -96
  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 +5 -3
  12. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -1
  13. package/dest/block_synchronizer/block_synchronizer.js +21 -11
  14. package/dest/config/index.d.ts +8 -2
  15. package/dest/config/index.d.ts.map +1 -1
  16. package/dest/config/index.js +13 -15
  17. package/dest/config/package_info.js +1 -1
  18. package/dest/contract_function_simulator/contract_function_simulator.d.ts +4 -1
  19. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  20. package/dest/contract_function_simulator/contract_function_simulator.js +20 -12
  21. package/dest/contract_function_simulator/execution_note_cache.d.ts +2 -2
  22. package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
  23. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +5 -9
  24. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -1
  25. package/dest/contract_function_simulator/execution_tagging_index_cache.js +3 -7
  26. package/dest/contract_function_simulator/index.d.ts +13 -2
  27. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  28. package/dest/contract_function_simulator/index.js +10 -0
  29. package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts +48 -0
  30. package/dest/contract_function_simulator/noir-structs/bounded_vec.d.ts.map +1 -0
  31. package/dest/contract_function_simulator/noir-structs/bounded_vec.js +45 -0
  32. package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts +37 -0
  33. package/dest/contract_function_simulator/noir-structs/ephemeral_array.d.ts.map +1 -0
  34. package/dest/contract_function_simulator/noir-structs/ephemeral_array.js +59 -0
  35. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +3 -2
  36. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  37. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +3 -2
  38. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +12 -2
  39. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -1
  40. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +34 -3
  41. package/dest/contract_function_simulator/noir-structs/note_data.d.ts +27 -0
  42. package/dest/contract_function_simulator/noir-structs/note_data.d.ts.map +1 -0
  43. package/dest/contract_function_simulator/noir-structs/note_data.js +3 -0
  44. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +3 -2
  45. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  46. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +3 -2
  47. package/dest/contract_function_simulator/noir-structs/option.d.ts +61 -0
  48. package/dest/contract_function_simulator/noir-structs/option.d.ts.map +1 -0
  49. package/dest/contract_function_simulator/noir-structs/option.js +62 -0
  50. package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts +11 -0
  51. package/dest/contract_function_simulator/noir-structs/provided_secret.d.ts.map +1 -0
  52. package/dest/contract_function_simulator/noir-structs/provided_secret.js +24 -0
  53. package/dest/contract_function_simulator/oracle/interfaces.d.ts +16 -114
  54. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  55. package/dest/contract_function_simulator/oracle/interfaces.js +2 -2
  56. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +2 -2
  57. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
  58. package/dest/contract_function_simulator/oracle/note_packing_utils.js +2 -2
  59. package/dest/contract_function_simulator/oracle/oracle.d.ts +55 -57
  60. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  61. package/dest/contract_function_simulator/oracle/oracle.js +343 -344
  62. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts +127 -0
  63. package/dest/contract_function_simulator/oracle/oracle_registry.d.ts.map +1 -0
  64. package/dest/contract_function_simulator/oracle/oracle_registry.js +786 -0
  65. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts +139 -0
  66. package/dest/contract_function_simulator/oracle/oracle_type_mappings.d.ts.map +1 -0
  67. package/dest/contract_function_simulator/oracle/oracle_type_mappings.js +560 -0
  68. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +27 -29
  69. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  70. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +55 -47
  71. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +59 -39
  72. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  73. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +244 -149
  74. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +1 -1
  75. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
  76. package/dest/contract_function_simulator/proxied_contract_data_source.js +35 -67
  77. package/dest/contract_sync/contract_sync_service.d.ts +4 -6
  78. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -1
  79. package/dest/contract_sync/contract_sync_service.js +43 -24
  80. package/dest/contract_sync/helpers.d.ts +2 -3
  81. package/dest/contract_sync/helpers.d.ts.map +1 -1
  82. package/dest/contract_sync/helpers.js +12 -19
  83. package/dest/debug/pxe_debug_utils.d.ts +1 -6
  84. package/dest/debug/pxe_debug_utils.d.ts.map +1 -1
  85. package/dest/debug/pxe_debug_utils.js +0 -6
  86. package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
  87. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  88. package/dest/entrypoints/client/bundle/utils.js +11 -3
  89. package/dest/entrypoints/client/lazy/utils.d.ts +1 -1
  90. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  91. package/dest/entrypoints/client/lazy/utils.js +11 -3
  92. package/dest/entrypoints/pxe_creation_options.d.ts +7 -1
  93. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  94. package/dest/entrypoints/server/index.d.ts +2 -1
  95. package/dest/entrypoints/server/index.d.ts.map +1 -1
  96. package/dest/entrypoints/server/index.js +1 -0
  97. package/dest/entrypoints/server/utils.d.ts +3 -2
  98. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  99. package/dest/entrypoints/server/utils.js +11 -3
  100. package/dest/events/event_service.d.ts +13 -5
  101. package/dest/events/event_service.d.ts.map +1 -1
  102. package/dest/events/event_service.js +30 -9
  103. package/dest/hooks/authorize_utility_call.d.ts +41 -0
  104. package/dest/hooks/authorize_utility_call.d.ts.map +1 -0
  105. package/dest/hooks/authorize_utility_call.js +4 -0
  106. package/dest/hooks/execution_hooks.d.ts +42 -0
  107. package/dest/hooks/execution_hooks.d.ts.map +1 -0
  108. package/dest/hooks/execution_hooks.js +9 -0
  109. package/dest/hooks/index.d.ts +4 -0
  110. package/dest/hooks/index.d.ts.map +1 -0
  111. package/dest/hooks/index.js +1 -0
  112. package/dest/logs/log_service.d.ts +6 -5
  113. package/dest/logs/log_service.d.ts.map +1 -1
  114. package/dest/logs/log_service.js +112 -48
  115. package/dest/messages/message_context_service.d.ts +1 -1
  116. package/dest/messages/message_context_service.d.ts.map +1 -1
  117. package/dest/messages/message_context_service.js +28 -9
  118. package/dest/notes/note_service.d.ts +25 -3
  119. package/dest/notes/note_service.d.ts.map +1 -1
  120. package/dest/notes/note_service.js +80 -65
  121. package/dest/oracle_version.d.ts +3 -3
  122. package/dest/oracle_version.js +4 -4
  123. package/dest/private_kernel/batch_planner.d.ts +47 -0
  124. package/dest/private_kernel/batch_planner.d.ts.map +1 -0
  125. package/dest/private_kernel/batch_planner.js +104 -0
  126. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.js +1 -1
  127. package/dest/private_kernel/hints/test_utils.d.ts +1 -1
  128. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -1
  129. package/dest/private_kernel/hints/test_utils.js +2 -3
  130. package/dest/private_kernel/private_kernel_execution_prover.d.ts +6 -2
  131. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  132. package/dest/private_kernel/private_kernel_execution_prover.js +148 -52
  133. package/dest/private_kernel/private_kernel_oracle.d.ts +6 -6
  134. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  135. package/dest/private_kernel/private_kernel_oracle.js +12 -7
  136. package/dest/pxe.d.ts +54 -7
  137. package/dest/pxe.d.ts.map +1 -1
  138. package/dest/pxe.js +126 -84
  139. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts +42 -0
  140. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.d.ts.map +1 -0
  141. package/dest/storage/backwards_compatibility_tests/kv_store_snapshot.js +93 -0
  142. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts +15 -0
  143. package/dest/storage/backwards_compatibility_tests/schema_tests.d.ts.map +1 -0
  144. package/dest/storage/backwards_compatibility_tests/schema_tests.js +591 -0
  145. package/dest/storage/backwards_compatibility_tests/store_spy.d.ts +19 -0
  146. package/dest/storage/backwards_compatibility_tests/store_spy.d.ts.map +1 -0
  147. package/dest/storage/backwards_compatibility_tests/store_spy.js +63 -0
  148. package/dest/storage/contract_store/contract_store.d.ts +1 -1
  149. package/dest/storage/contract_store/contract_store.d.ts.map +1 -1
  150. package/dest/storage/contract_store/contract_store.js +5 -24
  151. package/dest/storage/metadata.d.ts +1 -1
  152. package/dest/storage/metadata.js +1 -1
  153. package/dest/storage/open_pxe_stores.d.ts +33 -0
  154. package/dest/storage/open_pxe_stores.d.ts.map +1 -0
  155. package/dest/storage/open_pxe_stores.js +27 -0
  156. package/dest/storage/private_event_store/stored_private_event.js +1 -1
  157. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +6 -6
  158. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -1
  159. package/dest/storage/tagging_store/sender_tagging_store.d.ts +5 -5
  160. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -1
  161. package/dest/storage/tagging_store/sender_tagging_store.js +3 -3
  162. package/dest/tagging/get_all_logs_by_tags.d.ts +34 -10
  163. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -1
  164. package/dest/tagging/get_all_logs_by_tags.js +36 -37
  165. package/dest/tagging/index.d.ts +5 -4
  166. package/dest/tagging/index.d.ts.map +1 -1
  167. package/dest/tagging/index.js +4 -3
  168. package/dest/tagging/persist_sender_tagging_index_ranges.d.ts +29 -0
  169. package/dest/tagging/persist_sender_tagging_index_ranges.d.ts.map +1 -0
  170. package/dest/tagging/persist_sender_tagging_index_ranges.js +42 -0
  171. package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts +56 -0
  172. package/dest/tagging/recipient_sync/sync_tagged_private_logs.d.ts.map +1 -0
  173. package/dest/tagging/recipient_sync/sync_tagged_private_logs.js +163 -0
  174. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +3 -3
  175. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -1
  176. package/dest/tagging/reconcile_tagging_index_ranges.d.ts +36 -0
  177. package/dest/tagging/reconcile_tagging_index_ranges.d.ts.map +1 -0
  178. package/dest/tagging/reconcile_tagging_index_ranges.js +74 -0
  179. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +4 -5
  180. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -1
  181. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +26 -14
  182. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +11 -6
  183. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -1
  184. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +21 -0
  185. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +4 -4
  186. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -1
  187. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +2 -2
  188. package/package.json +20 -17
  189. package/src/bin/check_oracle_version.ts +46 -119
  190. package/src/bin/index.ts +1 -0
  191. package/src/bin/oracle_version_helpers.ts +121 -0
  192. package/src/block_synchronizer/block_stream_source.ts +81 -0
  193. package/src/block_synchronizer/block_synchronizer.ts +22 -12
  194. package/src/config/index.ts +15 -9
  195. package/src/config/package_info.ts +1 -1
  196. package/src/contract_function_simulator/contract_function_simulator.ts +34 -11
  197. package/src/contract_function_simulator/execution_note_cache.ts +1 -1
  198. package/src/contract_function_simulator/execution_tagging_index_cache.ts +5 -9
  199. package/src/contract_function_simulator/index.ts +50 -1
  200. package/src/contract_function_simulator/noir-structs/bounded_vec.ts +55 -0
  201. package/src/contract_function_simulator/noir-structs/ephemeral_array.ts +66 -0
  202. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +3 -2
  203. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +35 -2
  204. package/src/contract_function_simulator/noir-structs/note_data.ts +27 -0
  205. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +3 -2
  206. package/src/contract_function_simulator/noir-structs/option.ts +69 -0
  207. package/src/contract_function_simulator/noir-structs/provided_secret.ts +27 -0
  208. package/src/contract_function_simulator/oracle/interfaces.ts +12 -204
  209. package/src/contract_function_simulator/oracle/note_packing_utils.ts +3 -3
  210. package/src/contract_function_simulator/oracle/oracle.ts +406 -556
  211. package/src/contract_function_simulator/oracle/oracle_registry.ts +585 -0
  212. package/src/contract_function_simulator/oracle/oracle_type_mappings.ts +553 -0
  213. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +74 -67
  214. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +350 -304
  215. package/src/contract_function_simulator/proxied_contract_data_source.ts +40 -70
  216. package/src/contract_sync/contract_sync_service.ts +56 -43
  217. package/src/contract_sync/helpers.ts +11 -23
  218. package/src/debug/pxe_debug_utils.ts +0 -8
  219. package/src/entrypoints/client/bundle/utils.ts +8 -2
  220. package/src/entrypoints/client/lazy/utils.ts +8 -2
  221. package/src/entrypoints/pxe_creation_options.ts +7 -0
  222. package/src/entrypoints/server/index.ts +1 -0
  223. package/src/entrypoints/server/utils.ts +13 -3
  224. package/src/events/event_service.ts +54 -19
  225. package/src/hooks/authorize_utility_call.ts +44 -0
  226. package/src/hooks/execution_hooks.ts +48 -0
  227. package/src/hooks/index.ts +7 -0
  228. package/src/logs/log_service.ts +137 -92
  229. package/src/messages/message_context_service.ts +42 -24
  230. package/src/notes/note_service.ts +115 -91
  231. package/src/oracle_version.ts +4 -4
  232. package/src/private_kernel/batch_planner.ts +169 -0
  233. package/src/private_kernel/hints/private_kernel_reset_private_inputs_builder.ts +1 -1
  234. package/src/private_kernel/hints/test_utils.ts +2 -9
  235. package/src/private_kernel/private_kernel_execution_prover.ts +236 -73
  236. package/src/private_kernel/private_kernel_oracle.ts +21 -11
  237. package/src/pxe.ts +208 -85
  238. package/src/storage/backwards_compatibility_tests/__snapshots__/AddressStore.json +22 -0
  239. package/src/storage/backwards_compatibility_tests/__snapshots__/AnchorBlockStore.json +3 -0
  240. package/src/storage/backwards_compatibility_tests/__snapshots__/CapsuleStore.json +16 -0
  241. package/src/storage/backwards_compatibility_tests/__snapshots__/ContractStore.json +28 -0
  242. package/src/storage/backwards_compatibility_tests/__snapshots__/KeyStore.json +52 -0
  243. package/src/storage/backwards_compatibility_tests/__snapshots__/L2TipsKVStore.json +46 -0
  244. package/src/storage/backwards_compatibility_tests/__snapshots__/NoteStore.json +36 -0
  245. package/src/storage/backwards_compatibility_tests/__snapshots__/PrivateEventStore.json +44 -0
  246. package/src/storage/backwards_compatibility_tests/__snapshots__/RecipientTaggingStore.json +18 -0
  247. package/src/storage/backwards_compatibility_tests/__snapshots__/SenderAddressBookStore.json +16 -0
  248. package/src/storage/backwards_compatibility_tests/__snapshots__/SenderTaggingStore.json +22 -0
  249. package/src/storage/backwards_compatibility_tests/__snapshots__/opened_stores.json +97 -0
  250. package/src/storage/backwards_compatibility_tests/kv_store_snapshot.ts +122 -0
  251. package/src/storage/backwards_compatibility_tests/schema_tests.ts +712 -0
  252. package/src/storage/backwards_compatibility_tests/store_spy.ts +73 -0
  253. package/src/storage/contract_store/contract_store.ts +6 -29
  254. package/src/storage/metadata.ts +1 -1
  255. package/src/storage/open_pxe_stores.ts +49 -0
  256. package/src/storage/private_event_store/stored_private_event.ts +1 -1
  257. package/src/storage/tagging_store/recipient_tagging_store.ts +5 -9
  258. package/src/storage/tagging_store/sender_tagging_store.ts +6 -6
  259. package/src/tagging/get_all_logs_by_tags.ts +78 -50
  260. package/src/tagging/index.ts +4 -3
  261. package/src/tagging/persist_sender_tagging_index_ranges.ts +57 -0
  262. package/src/tagging/recipient_sync/sync_tagged_private_logs.ts +240 -0
  263. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +2 -2
  264. package/src/tagging/reconcile_tagging_index_ranges.ts +102 -0
  265. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +41 -19
  266. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +23 -8
  267. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +4 -5
  268. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts +0 -9
  269. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.d.ts.map +0 -1
  270. package/dest/contract_function_simulator/oracle/legacy_oracle_mappings.js +0 -47
  271. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +0 -14
  272. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +0 -1
  273. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +0 -85
  274. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +0 -14
  275. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +0 -1
  276. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +0 -33
  277. package/src/contract_function_simulator/oracle/legacy_oracle_mappings.ts +0 -104
  278. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +0 -130
  279. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +0 -44
@@ -0,0 +1,560 @@
1
+ import { BLOCK_HEADER_LENGTH, KEY_VALIDATION_REQUEST_LENGTH, MAX_CONTRACT_CLASS_LOGS_PER_TX, MAX_L2_TO_L1_MSGS_PER_TX, MAX_NOTE_HASHES_PER_TX, MAX_NULLIFIERS_PER_TX, MAX_PRIVATE_LOGS_PER_TX, MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX } from '@aztec/constants';
2
+ import { BlockNumber } from '@aztec/foundation/branded-types';
3
+ import { padArrayEnd } from '@aztec/foundation/collection';
4
+ import { Fr } from '@aztec/foundation/curves/bn254';
5
+ import { Point } from '@aztec/foundation/curves/grumpkin';
6
+ import { fromUintArray } from '@aztec/simulator/client';
7
+ import { FunctionSelector, NoteSelector } from '@aztec/stdlib/abi';
8
+ import { PublicDataWrite } from '@aztec/stdlib/avm';
9
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
10
+ import { BlockHash } from '@aztec/stdlib/block';
11
+ import { KeyValidationRequest } from '@aztec/stdlib/kernel';
12
+ import { ContractClassLog, ContractClassLogFields, FlatPublicLogs, PrivateLog, Tag, appTaggingSecretKindFromDeliveryMode } from '@aztec/stdlib/logs';
13
+ import { BlockHeader, TxHash } from '@aztec/stdlib/tx';
14
+ import { BoundedVec } from '../noir-structs/bounded_vec.js';
15
+ import { EphemeralArray } from '../noir-structs/ephemeral_array.js';
16
+ import { EventValidationRequest } from '../noir-structs/event_validation_request.js';
17
+ import { LogRetrievalRequest } from '../noir-structs/log_retrieval_request.js';
18
+ import { NoteValidationRequest } from '../noir-structs/note_validation_request.js';
19
+ import { Option } from '../noir-structs/option.js';
20
+ import { ProvidedSecret } from '../noir-structs/provided_secret.js';
21
+ import { packAsHintedNote } from './note_packing_utils.js';
22
+ /**
23
+ * Asserts that every reader was fully consumed by a deserialization, throwing on leftover fields.
24
+ */ export function assertReadersConsumed(readers) {
25
+ readers.forEach((reader, slot)=>{
26
+ if (!reader.isFinished()) {
27
+ throw new Error(`Malformed oracle input: ${reader.remainingFields()} unexpected trailing field(s) in slot ${slot}`);
28
+ }
29
+ });
30
+ }
31
+ // ─── Scalar Type Mappings ────────────────────────────────────────────────────
32
+ export const FIELD = {
33
+ serialization: {
34
+ fn: (v)=>[
35
+ v
36
+ ]
37
+ },
38
+ deserialization: {
39
+ fn: ([reader])=>reader.readField(),
40
+ slots: 1
41
+ }
42
+ };
43
+ export const BOOL = {
44
+ serialization: {
45
+ fn: (v)=>[
46
+ new Fr(v ? 1n : 0n)
47
+ ]
48
+ },
49
+ deserialization: {
50
+ fn: ([reader])=>!reader.readField().isZero(),
51
+ slots: 1
52
+ }
53
+ };
54
+ export const U32 = {
55
+ serialization: {
56
+ fn: (v)=>[
57
+ new Fr(v)
58
+ ]
59
+ },
60
+ deserialization: {
61
+ fn: ([reader])=>{
62
+ const value = reader.readField().toBigInt();
63
+ if (value > 0xffffffffn) {
64
+ throw new Error(`U32 overflow: value ${value} exceeds u32 max (${0xffffffffn})`);
65
+ }
66
+ return Number(value);
67
+ },
68
+ slots: 1
69
+ }
70
+ };
71
+ export const BLOCK_NUMBER = {
72
+ serialization: {
73
+ fn: (v)=>[
74
+ new Fr(v)
75
+ ]
76
+ },
77
+ deserialization: {
78
+ fn: ([reader])=>BlockNumber(reader.readField().toNumber()),
79
+ slots: 1
80
+ }
81
+ };
82
+ /** A u8 byte: serializes to a single Fr; deserializes from a single Fr to a number in [0, 255]. */ export const BYTE = {
83
+ serialization: {
84
+ fn: (byte)=>[
85
+ new Fr(byte)
86
+ ]
87
+ },
88
+ deserialization: {
89
+ fn: ([reader])=>{
90
+ const value = reader.readField().toBigInt();
91
+ if (value > 0xffn) {
92
+ throw new Error(`BYTE overflow: value ${value} exceeds u8 max (255)`);
93
+ }
94
+ return Number(value);
95
+ },
96
+ slots: 1
97
+ }
98
+ };
99
+ // Noir passes `MessageDelivery` onchain variants here.
100
+ export const DELIVERY_MODE = {
101
+ deserialization: {
102
+ fn: (readers)=>appTaggingSecretKindFromDeliveryMode(BYTE.deserialization.fn(readers)),
103
+ slots: BYTE.deserialization.slots
104
+ }
105
+ };
106
+ export const BIGINT = {
107
+ serialization: {
108
+ fn: (v)=>[
109
+ new Fr(v)
110
+ ]
111
+ },
112
+ deserialization: {
113
+ fn: ([reader])=>reader.readField().toBigInt(),
114
+ slots: 1
115
+ }
116
+ };
117
+ /** Reads every field in the slot as a UTF-8 character code. */ export const STR = {
118
+ serialization: {
119
+ fn: (str)=>[
120
+ Array.from(Buffer.from(str, 'utf-8')).map((b)=>new Fr(b))
121
+ ]
122
+ },
123
+ deserialization: {
124
+ fn: ([reader])=>{
125
+ const chars = [];
126
+ while(!reader.isFinished()){
127
+ chars.push(String.fromCharCode(reader.readField().toNumber()));
128
+ }
129
+ return chars.join('');
130
+ },
131
+ slots: 1
132
+ }
133
+ };
134
+ export const AZTEC_ADDRESS = {
135
+ serialization: {
136
+ fn: (v)=>[
137
+ v.toField()
138
+ ]
139
+ },
140
+ deserialization: {
141
+ fn: ([reader])=>AztecAddress.fromField(reader.readField()),
142
+ slots: 1
143
+ }
144
+ };
145
+ export const BLOCK_HASH = {
146
+ serialization: {
147
+ fn: (v)=>[
148
+ new Fr(v.toBuffer())
149
+ ]
150
+ },
151
+ deserialization: {
152
+ fn: ([reader])=>new BlockHash(reader.readField()),
153
+ slots: 1
154
+ }
155
+ };
156
+ export const FUNCTION_SELECTOR = {
157
+ serialization: {
158
+ fn: (v)=>[
159
+ v.toField()
160
+ ]
161
+ },
162
+ deserialization: {
163
+ fn: ([reader])=>FunctionSelector.fromField(reader.readField()),
164
+ slots: 1
165
+ }
166
+ };
167
+ export const NOTE_SELECTOR = {
168
+ serialization: {
169
+ fn: (v)=>[
170
+ v.toField()
171
+ ]
172
+ },
173
+ deserialization: {
174
+ fn: ([reader])=>NoteSelector.fromField(reader.readField()),
175
+ slots: 1
176
+ }
177
+ };
178
+ export const TX_HASH = {
179
+ serialization: {
180
+ fn: (v)=>[
181
+ v.hash
182
+ ]
183
+ },
184
+ deserialization: {
185
+ fn: ([reader])=>TxHash.fromField(reader.readField()),
186
+ slots: 1
187
+ }
188
+ };
189
+ export const TAG = {
190
+ serialization: {
191
+ fn: (v)=>[
192
+ v.value
193
+ ]
194
+ },
195
+ deserialization: {
196
+ fn: ([reader])=>new Tag(reader.readField()),
197
+ slots: 1
198
+ }
199
+ };
200
+ export const POINT = {
201
+ serialization: {
202
+ fn: (p)=>[
203
+ p.toFields()
204
+ ]
205
+ },
206
+ deserialization: {
207
+ fn: ([reader])=>Point.fromFields([
208
+ reader.readField(),
209
+ reader.readField()
210
+ ]),
211
+ slots: 1
212
+ }
213
+ };
214
+ // ─── Struct Type Mappings ────────────────────────────────────────────────────
215
+ export const BLOCK_HEADER = {
216
+ serialization: {
217
+ fn: (v)=>v.toFields()
218
+ },
219
+ deserialization: {
220
+ fn: ([reader])=>BlockHeader.fromFields(reader.readFieldArray(BLOCK_HEADER_LENGTH)),
221
+ slots: 1
222
+ }
223
+ };
224
+ export const KEY_VALIDATION_REQUEST = {
225
+ serialization: {
226
+ fn: (v)=>v.toFields()
227
+ },
228
+ deserialization: {
229
+ fn: ([reader])=>KeyValidationRequest.fromFields(reader.readFieldArray(KEY_VALIDATION_REQUEST_LENGTH)),
230
+ slots: 1
231
+ }
232
+ };
233
+ export const CONTRACT_INSTANCE = {
234
+ serialization: {
235
+ fn: (v)=>[
236
+ v.salt,
237
+ v.deployer.toField(),
238
+ v.currentContractClassId,
239
+ v.initializationHash,
240
+ v.immutablesHash,
241
+ ...v.publicKeys.toFields()
242
+ ]
243
+ }
244
+ };
245
+ export const NULLIFIER_MEMBERSHIP_WITNESS = {
246
+ serialization: {
247
+ fn: (w)=>w.toNoirRepresentation().map((slot)=>Array.isArray(slot) ? slot.map((s)=>Fr.fromString(s)) : Fr.fromString(slot))
248
+ }
249
+ };
250
+ export const PUBLIC_DATA_WITNESS = {
251
+ serialization: {
252
+ fn: (w)=>w.toNoirRepresentation().map((slot)=>Array.isArray(slot) ? slot.map((s)=>Fr.fromString(s)) : Fr.fromString(slot))
253
+ }
254
+ };
255
+ export const MESSAGE_LOAD_ORACLE_INPUTS = {
256
+ serialization: {
257
+ fn: (m)=>m.toNoirRepresentation().map((slot)=>Array.isArray(slot) ? slot.map((s)=>Fr.fromString(s)) : Fr.fromString(slot))
258
+ }
259
+ };
260
+ export const UTILITY_CONTEXT = {
261
+ serialization: {
262
+ fn: (ctx)=>[
263
+ ...ctx.blockHeader.toFields(),
264
+ ctx.contractAddress.toField()
265
+ ]
266
+ }
267
+ };
268
+ export const CALL_PRIVATE_RESULT = {
269
+ serialization: {
270
+ fn: (v)=>[
271
+ [
272
+ v.endSideEffectCounter,
273
+ v.returnsHash
274
+ ]
275
+ ]
276
+ }
277
+ };
278
+ export const PUBLIC_KEYS_AND_PARTIAL_ADDRESS = {
279
+ serialization: {
280
+ fn: (v)=>[
281
+ [
282
+ ...v.publicKeys.toFields(),
283
+ v.partialAddress
284
+ ]
285
+ ]
286
+ }
287
+ };
288
+ export const CONTRACT_CLASS_LOG_INPUT = {
289
+ deserialization: {
290
+ fn: ([addrReader, fieldsReader, lengthReader])=>{
291
+ const addr = AztecAddress.fromField(addrReader.readField());
292
+ const fields = new ContractClassLogFields([
293
+ ...fieldsReader.readFieldArray(fieldsReader.remainingFields())
294
+ ]);
295
+ const length = lengthReader.readField().toNumber();
296
+ return new ContractClassLog(addr, fields, length);
297
+ },
298
+ // ContractClassLog input occupies 3 ACVM slots: [contractAddress], [message fields...], [length].
299
+ slots: 3
300
+ }
301
+ };
302
+ export const TX_EFFECT = {
303
+ serialization: {
304
+ fn: (effect)=>{
305
+ const flatPublicLogs = FlatPublicLogs.fromLogs(effect.publicLogs);
306
+ return [
307
+ effect.revertCode.toField(),
308
+ effect.txHash.hash,
309
+ effect.transactionFee,
310
+ padArrayEnd(effect.noteHashes, Fr.ZERO, MAX_NOTE_HASHES_PER_TX),
311
+ padArrayEnd(effect.nullifiers, Fr.ZERO, MAX_NULLIFIERS_PER_TX),
312
+ padArrayEnd(effect.l2ToL1Msgs, Fr.ZERO, MAX_L2_TO_L1_MSGS_PER_TX),
313
+ padArrayEnd(effect.publicDataWrites, PublicDataWrite.empty(), MAX_TOTAL_PUBLIC_DATA_UPDATE_REQUESTS_PER_TX).flatMap((w)=>w.toFields()),
314
+ padArrayEnd(effect.privateLogs, PrivateLog.empty(), MAX_PRIVATE_LOGS_PER_TX).flatMap((l)=>l.toFields()),
315
+ new Fr(flatPublicLogs.length),
316
+ flatPublicLogs.payload,
317
+ padArrayEnd(effect.contractClassLogs, ContractClassLog.empty(), MAX_CONTRACT_CLASS_LOGS_PER_TX).flatMap((l)=>[
318
+ ...l.fields.toFields(),
319
+ new Fr(l.emittedLength),
320
+ l.contractAddress.toField()
321
+ ])
322
+ ];
323
+ }
324
+ }
325
+ };
326
+ export const NOTE = {
327
+ serialization: {
328
+ fn: (noteData)=>packAsHintedNote({
329
+ contractAddress: noteData.contractAddress,
330
+ owner: noteData.owner,
331
+ randomness: noteData.randomness,
332
+ storageSlot: noteData.storageSlot,
333
+ noteNonce: noteData.noteNonce,
334
+ isPending: noteData.isPending,
335
+ note: noteData.note
336
+ })
337
+ }
338
+ };
339
+ export const PENDING_TAGGED_LOG = {
340
+ serialization: {
341
+ fn: (log)=>[
342
+ log.toFields()
343
+ ]
344
+ }
345
+ };
346
+ export const NOTE_VALIDATION_REQUEST = {
347
+ deserialization: {
348
+ fn: ([reader])=>NoteValidationRequest.fromFields(reader),
349
+ slots: 1
350
+ }
351
+ };
352
+ export const EVENT_VALIDATION_REQUEST = {
353
+ deserialization: {
354
+ fn: ([reader])=>EventValidationRequest.fromFields(reader),
355
+ slots: 1
356
+ }
357
+ };
358
+ export const LOG_RETRIEVAL_REQUEST = {
359
+ serialization: {
360
+ fn: (req)=>[
361
+ req.toFields()
362
+ ]
363
+ },
364
+ deserialization: {
365
+ fn: ([reader])=>LogRetrievalRequest.fromFields(reader),
366
+ slots: 1
367
+ }
368
+ };
369
+ export const LOG_RETRIEVAL_RESPONSE = {
370
+ serialization: {
371
+ fn: (resp)=>[
372
+ resp.toFields()
373
+ ]
374
+ }
375
+ };
376
+ export const MESSAGE_CONTEXT = {
377
+ serialization: {
378
+ fn: (mc)=>[
379
+ mc.toFields()
380
+ ]
381
+ }
382
+ };
383
+ export const PROVIDED_SECRET = {
384
+ deserialization: {
385
+ fn: ([reader])=>ProvidedSecret.fromFields(reader),
386
+ slots: 1
387
+ }
388
+ };
389
+ // ─── Combinator Type Mappings ────────────────────────────────────────────────
390
+ /** `_height` is unused at runtime but lets TypeScript infer the exact `N` for `MembershipWitness<N>`. */ export function MEMBERSHIP_WITNESS(_height) {
391
+ return {
392
+ serialization: {
393
+ fn: (witness)=>[
394
+ new Fr(witness.leafIndex),
395
+ [
396
+ ...witness.siblingPath
397
+ ]
398
+ ]
399
+ }
400
+ };
401
+ }
402
+ export function ARRAY(element) {
403
+ return {
404
+ serialization: element.serialization ? {
405
+ fn: (values)=>[
406
+ values.flatMap((v)=>element.serialization.fn(v).flat())
407
+ ]
408
+ } : undefined,
409
+ deserialization: element.deserialization ? {
410
+ fn: ([reader])=>{
411
+ const result = [];
412
+ while(!reader.isFinished()){
413
+ result.push(element.deserialization.fn([
414
+ reader
415
+ ]));
416
+ }
417
+ return result;
418
+ },
419
+ slots: 1
420
+ } : undefined
421
+ };
422
+ }
423
+ /**
424
+ * Maps Noir's `BoundedVec<T, MaxLen>` ↔ TS `BoundedVec<T>` over 2 slots:
425
+ * slot 0 — flat storage, padded/parsed as `maxLength * elementSize` fields
426
+ * slot 1 — length scalar (count of actual items)
427
+ *
428
+ * Both directions are derived from `element`: bidirectional iff `element` has both serialization and deserialization.
429
+ *
430
+ * @example Serializing `BoundedVec.from({ data: [0x41, 0x42], maxLength: 4 })` with `BOUNDED_VEC(BYTE)`:
431
+ * ```
432
+ * slot 0: [Fr(0x41), Fr(0x42), Fr(0), Fr(0)] // data padded to maxLength
433
+ * slot 1: Fr(2) // actual length
434
+ * ```
435
+ */ export function BOUNDED_VEC(element) {
436
+ return {
437
+ serialization: element.serialization ? {
438
+ fn: (bv)=>{
439
+ if (bv.data.length > bv.maxLength) {
440
+ throw new Error(`Got ${bv.data.length} items, but maxLength is ${bv.maxLength}`);
441
+ }
442
+ const flat = bv.data.flatMap((item)=>element.serialization.fn(item).flat());
443
+ return [
444
+ padArrayEnd(flat, Fr.ZERO, bv.maxLength * bv.elementSize),
445
+ new Fr(bv.data.length)
446
+ ];
447
+ }
448
+ } : undefined,
449
+ deserialization: element.deserialization ? {
450
+ fn: ([storageReader, lengthReader])=>{
451
+ const maxLength = storageReader.remainingFields();
452
+ const length = lengthReader.readField().toNumber();
453
+ const elements = [];
454
+ for(let i = 0; i < length; i++){
455
+ elements.push(element.deserialization.fn([
456
+ storageReader
457
+ ]));
458
+ }
459
+ // Drain the trailing zero-padding (maxLength - length unused element slots) so the storage reader is
460
+ // fully consumed.
461
+ storageReader.skip(storageReader.remainingFields());
462
+ return BoundedVec.from({
463
+ data: elements,
464
+ maxLength
465
+ });
466
+ },
467
+ slots: 2
468
+ } : undefined
469
+ };
470
+ }
471
+ /**
472
+ * Wraps an inner TypeMapping in Noir-style `Option<T>`. Adds a discriminant slot and uses the handler-provided
473
+ * `Option.none(shape)` template to produce a correctly-sized zero-filled output for the None case.
474
+ *
475
+ * @example Serializing `Option.some(AztecAddress.fromField(Fr(42)))` with `OPTION(AZTEC_ADDRESS)`:
476
+ * ```
477
+ * slot 0: Fr(1) // discriminant: Some
478
+ * slot 1: Fr(42) // inner value
479
+ * ```
480
+ *
481
+ * @example Serializing `Option.empty(AztecAddress.ZERO)` with `OPTION(AZTEC_ADDRESS)`:
482
+ * ```
483
+ * slot 0: Fr(0) // discriminant: None
484
+ * slot 1: Fr(0) // zero-filled using shape
485
+ * ```
486
+ */ export function OPTION(inner) {
487
+ return {
488
+ serialization: inner.serialization ? {
489
+ fn: (opt)=>{
490
+ if (opt.isSome()) {
491
+ return [
492
+ Fr.ONE,
493
+ ...inner.serialization.fn(opt.value)
494
+ ];
495
+ }
496
+ if (opt.template === undefined) {
497
+ throw new Error('Cannot serialize Option.empty() without an emptyTemplate — provide one via Option.empty(emptyTemplate)');
498
+ }
499
+ const zeroSlots = inner.serialization.fn(opt.template).map((s)=>Array.isArray(s) ? Array(s.length).fill(Fr.ZERO) : Fr.ZERO);
500
+ return [
501
+ Fr.ZERO,
502
+ ...zeroSlots
503
+ ];
504
+ }
505
+ } : undefined,
506
+ deserialization: inner.deserialization ? {
507
+ fn: ([discriminant, ...innerReaders])=>{
508
+ if (discriminant.readField().isZero()) {
509
+ // None still carries zero-filled inner slots on the wire; drain them so the inner readers are fully
510
+ // consumed.
511
+ innerReaders.forEach((reader)=>reader.skip(reader.remainingFields()));
512
+ return Option.none(undefined);
513
+ }
514
+ return Option.some(inner.deserialization.fn(innerReaders));
515
+ },
516
+ slots: inner.deserialization.slots + 1
517
+ } : undefined
518
+ };
519
+ }
520
+ /** A packed uint buffer (e.g. `[u8; N]` in Noir): 1 slot of packed uint values ↔ `Buffer`. */ export function BUFFER(bitSize) {
521
+ return {
522
+ serialization: {
523
+ fn: (buf)=>[
524
+ Array.from(buf).map((b)=>new Fr(b))
525
+ ]
526
+ },
527
+ deserialization: {
528
+ fn: ([reader])=>{
529
+ const fields = reader.readFieldArray(reader.remainingFields()).map((f)=>f.toString());
530
+ return fromUintArray(fields, bitSize);
531
+ },
532
+ slots: 1
533
+ }
534
+ };
535
+ }
536
+ export function EPHEMERAL_ARRAY(element) {
537
+ // An EphemeralArray param is a single slot; the per-param assert covers that slot but never sees the
538
+ // per-row readers materialized in readAll(). Assert full consumption per row here.
539
+ const rowElement = element.deserialization ? {
540
+ deserialization: {
541
+ fn: (readers)=>{
542
+ const value = element.deserialization.fn(readers);
543
+ assertReadersConsumed(readers);
544
+ return value;
545
+ },
546
+ slots: element.deserialization.slots
547
+ }
548
+ } : undefined;
549
+ return {
550
+ serialization: element.serialization ? {
551
+ fn: (ea)=>[
552
+ ea.materializeSlot((v)=>element.serialization.fn(v).flat())
553
+ ]
554
+ } : undefined,
555
+ deserialization: rowElement ? {
556
+ fn: ([reader])=>EphemeralArray.fromSlot(reader.readField(), rowElement),
557
+ slots: 1
558
+ } : undefined
559
+ };
560
+ }