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

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 (422) hide show
  1. package/dest/access_scopes.d.ts +9 -0
  2. package/dest/access_scopes.d.ts.map +1 -0
  3. package/dest/access_scopes.js +6 -0
  4. package/dest/bin/check_oracle_version.d.ts +1 -1
  5. package/dest/bin/check_oracle_version.js +105 -15
  6. package/dest/block_synchronizer/block_synchronizer.d.ts +45 -0
  7. package/dest/block_synchronizer/block_synchronizer.d.ts.map +1 -0
  8. package/dest/block_synchronizer/block_synchronizer.js +153 -0
  9. package/dest/block_synchronizer/index.d.ts +2 -0
  10. package/dest/block_synchronizer/index.d.ts.map +1 -0
  11. package/dest/block_synchronizer/index.js +1 -0
  12. package/dest/config/index.d.ts +6 -12
  13. package/dest/config/index.d.ts.map +1 -1
  14. package/dest/config/index.js +24 -13
  15. package/dest/config/package_info.d.ts +1 -1
  16. package/dest/config/package_info.js +1 -1
  17. package/dest/contract_function_simulator/benchmarked_node.d.ts +9 -0
  18. package/dest/contract_function_simulator/benchmarked_node.d.ts.map +1 -0
  19. package/dest/contract_function_simulator/benchmarked_node.js +77 -0
  20. package/dest/contract_function_simulator/contract_function_simulator.d.ts +78 -26
  21. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -1
  22. package/dest/contract_function_simulator/contract_function_simulator.js +226 -82
  23. package/dest/contract_function_simulator/execution_note_cache.d.ts +25 -14
  24. package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -1
  25. package/dest/contract_function_simulator/execution_note_cache.js +59 -34
  26. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +6 -6
  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 +4 -4
  29. package/dest/contract_function_simulator/hashed_values_cache.d.ts +2 -2
  30. package/dest/contract_function_simulator/hashed_values_cache.d.ts.map +1 -1
  31. package/dest/contract_function_simulator/index.d.ts +2 -2
  32. package/dest/contract_function_simulator/index.d.ts.map +1 -1
  33. package/dest/contract_function_simulator/index.js +1 -1
  34. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +5 -4
  35. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -1
  36. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +7 -4
  37. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +5 -4
  38. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -1
  39. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +7 -6
  40. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +3 -3
  41. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -1
  42. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +1 -1
  43. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +7 -5
  44. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -1
  45. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +13 -4
  46. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +4 -10
  47. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -1
  48. package/dest/contract_function_simulator/noir-structs/utility_context.js +7 -18
  49. package/dest/contract_function_simulator/oracle/index.d.ts +1 -1
  50. package/dest/contract_function_simulator/oracle/interfaces.d.ts +30 -20
  51. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -1
  52. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +2 -2
  53. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -1
  54. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.js +1 -1
  55. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +14 -8
  56. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -1
  57. package/dest/contract_function_simulator/oracle/note_packing_utils.js +16 -11
  58. package/dest/contract_function_simulator/oracle/oracle.d.ts +15 -12
  59. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -1
  60. package/dest/contract_function_simulator/oracle/oracle.js +93 -53
  61. package/dest/contract_function_simulator/oracle/private_execution.d.ts +2 -27
  62. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -1
  63. package/dest/contract_function_simulator/oracle/private_execution.js +2 -38
  64. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +56 -52
  65. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -1
  66. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +120 -66
  67. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +114 -39
  68. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -1
  69. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +214 -86
  70. package/dest/contract_function_simulator/pick_notes.d.ts +2 -2
  71. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -1
  72. package/dest/contract_function_simulator/pick_notes.js +1 -1
  73. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +4 -4
  74. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -1
  75. package/dest/contract_function_simulator/proxied_contract_data_source.js +23 -5
  76. package/dest/contract_logging.d.ts +22 -0
  77. package/dest/contract_logging.d.ts.map +1 -0
  78. package/dest/contract_logging.js +23 -0
  79. package/dest/contract_sync/contract_sync_service.d.ts +43 -0
  80. package/dest/contract_sync/contract_sync_service.d.ts.map +1 -0
  81. package/dest/contract_sync/contract_sync_service.js +97 -0
  82. package/dest/contract_sync/helpers.d.ts +29 -0
  83. package/dest/contract_sync/helpers.d.ts.map +1 -0
  84. package/dest/contract_sync/helpers.js +55 -0
  85. package/dest/debug/pxe_debug_utils.d.ts +45 -0
  86. package/dest/debug/pxe_debug_utils.d.ts.map +1 -0
  87. package/dest/debug/pxe_debug_utils.js +48 -0
  88. package/dest/entrypoints/client/bundle/index.d.ts +4 -2
  89. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  90. package/dest/entrypoints/client/bundle/index.js +3 -1
  91. package/dest/entrypoints/client/bundle/utils.d.ts +1 -1
  92. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  93. package/dest/entrypoints/client/bundle/utils.js +33 -10
  94. package/dest/entrypoints/client/lazy/index.d.ts +4 -2
  95. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  96. package/dest/entrypoints/client/lazy/index.js +3 -1
  97. package/dest/entrypoints/client/lazy/utils.d.ts +2 -2
  98. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  99. package/dest/entrypoints/client/lazy/utils.js +34 -11
  100. package/dest/entrypoints/pxe_creation_options.d.ts +7 -3
  101. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -1
  102. package/dest/entrypoints/server/index.d.ts +6 -2
  103. package/dest/entrypoints/server/index.d.ts.map +1 -1
  104. package/dest/entrypoints/server/index.js +5 -1
  105. package/dest/entrypoints/server/utils.d.ts +1 -1
  106. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  107. package/dest/entrypoints/server/utils.js +40 -28
  108. package/dest/error_enriching.d.ts +4 -4
  109. package/dest/error_enriching.d.ts.map +1 -1
  110. package/dest/error_enriching.js +6 -6
  111. package/dest/events/event_service.d.ts +15 -0
  112. package/dest/events/event_service.d.ts.map +1 -0
  113. package/dest/events/event_service.js +44 -0
  114. package/dest/events/index.d.ts +2 -0
  115. package/dest/events/index.d.ts.map +1 -0
  116. package/dest/events/index.js +1 -0
  117. package/dest/events/private_event_filter_validator.d.ts +9 -0
  118. package/dest/events/private_event_filter_validator.d.ts.map +1 -0
  119. package/dest/events/private_event_filter_validator.js +38 -0
  120. package/dest/job_coordinator/job_coordinator.d.ts +75 -0
  121. package/dest/job_coordinator/job_coordinator.d.ts.map +1 -0
  122. package/dest/job_coordinator/job_coordinator.js +94 -0
  123. package/dest/logs/log_service.d.ts +29 -0
  124. package/dest/logs/log_service.d.ts.map +1 -0
  125. package/dest/logs/log_service.js +118 -0
  126. package/dest/notes/index.d.ts +2 -0
  127. package/dest/notes/index.d.ts.map +1 -0
  128. package/dest/notes/index.js +1 -0
  129. package/dest/notes/note_service.d.ts +49 -0
  130. package/dest/notes/note_service.d.ts.map +1 -0
  131. package/dest/notes/note_service.js +148 -0
  132. package/dest/notes_filter.d.ts +25 -0
  133. package/dest/notes_filter.d.ts.map +1 -0
  134. package/dest/notes_filter.js +4 -0
  135. package/dest/oracle_version.d.ts +3 -3
  136. package/dest/oracle_version.d.ts.map +1 -1
  137. package/dest/oracle_version.js +4 -3
  138. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts +4 -0
  139. package/dest/private_kernel/hints/compute_tx_expiration_timestamp.d.ts.map +1 -0
  140. package/dest/private_kernel/hints/{compute_tx_include_by_timestamp.js → compute_tx_expiration_timestamp.js} +12 -12
  141. package/dest/private_kernel/hints/index.d.ts +3 -3
  142. package/dest/private_kernel/hints/index.d.ts.map +1 -1
  143. package/dest/private_kernel/hints/index.js +2 -2
  144. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts +29 -0
  145. package/dest/private_kernel/hints/private_kernel_reset_private_inputs_builder.d.ts.map +1 -0
  146. package/dest/private_kernel/hints/{build_private_kernel_reset_private_inputs.js → private_kernel_reset_private_inputs_builder.js} +144 -77
  147. package/dest/private_kernel/hints/test_utils.d.ts +122 -0
  148. package/dest/private_kernel/hints/test_utils.d.ts.map +1 -0
  149. package/dest/private_kernel/hints/test_utils.js +203 -0
  150. package/dest/private_kernel/index.d.ts +1 -1
  151. package/dest/private_kernel/private_kernel_execution_prover.d.ts +3 -2
  152. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -1
  153. package/dest/private_kernel/private_kernel_execution_prover.js +33 -25
  154. package/dest/private_kernel/private_kernel_oracle.d.ts +26 -25
  155. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -1
  156. package/dest/private_kernel/private_kernel_oracle.js +94 -2
  157. package/dest/pxe.d.ts +121 -103
  158. package/dest/pxe.d.ts.map +1 -1
  159. package/dest/pxe.js +268 -279
  160. package/dest/storage/address_store/address_store.d.ts +11 -0
  161. package/dest/storage/address_store/address_store.d.ts.map +1 -0
  162. package/dest/storage/{address_data_provider/address_data_provider.js → address_store/address_store.js} +13 -12
  163. package/dest/storage/address_store/index.d.ts +2 -0
  164. package/dest/storage/address_store/index.d.ts.map +1 -0
  165. package/dest/storage/address_store/index.js +1 -0
  166. package/dest/storage/anchor_block_store/anchor_block_store.d.ts +17 -0
  167. package/dest/storage/anchor_block_store/anchor_block_store.d.ts.map +1 -0
  168. package/dest/storage/{sync_data_provider/sync_data_provider.js → anchor_block_store/anchor_block_store.js} +10 -10
  169. package/dest/storage/anchor_block_store/index.d.ts +2 -0
  170. package/dest/storage/anchor_block_store/index.d.ts.map +1 -0
  171. package/dest/storage/anchor_block_store/index.js +1 -0
  172. package/dest/storage/capsule_store/capsule_store.d.ts +72 -0
  173. package/dest/storage/capsule_store/capsule_store.d.ts.map +1 -0
  174. package/dest/storage/capsule_store/capsule_store.js +253 -0
  175. package/dest/storage/capsule_store/index.d.ts +2 -0
  176. package/dest/storage/capsule_store/index.d.ts.map +1 -0
  177. package/dest/storage/capsule_store/index.js +1 -0
  178. package/dest/storage/contract_store/contract_store.d.ts +93 -0
  179. package/dest/storage/contract_store/contract_store.d.ts.map +1 -0
  180. package/dest/storage/contract_store/contract_store.js +309 -0
  181. package/dest/storage/contract_store/index.d.ts +2 -0
  182. package/dest/storage/contract_store/index.d.ts.map +1 -0
  183. package/dest/storage/contract_store/index.js +1 -0
  184. package/dest/storage/{contract_data_provider → contract_store}/private_functions_tree.d.ts +1 -1
  185. package/dest/storage/contract_store/private_functions_tree.d.ts.map +1 -0
  186. package/dest/storage/{contract_data_provider → contract_store}/private_functions_tree.js +1 -1
  187. package/dest/storage/index.d.ts +8 -8
  188. package/dest/storage/index.d.ts.map +1 -1
  189. package/dest/storage/index.js +7 -7
  190. package/dest/storage/metadata.d.ts +2 -2
  191. package/dest/storage/metadata.js +1 -1
  192. package/dest/storage/note_store/index.d.ts +3 -0
  193. package/dest/storage/note_store/index.d.ts.map +1 -0
  194. package/dest/storage/note_store/index.js +2 -0
  195. package/dest/storage/note_store/note_store.d.ts +83 -0
  196. package/dest/storage/note_store/note_store.d.ts.map +1 -0
  197. package/dest/storage/note_store/note_store.js +343 -0
  198. package/dest/storage/note_store/stored_note.d.ts +16 -0
  199. package/dest/storage/note_store/stored_note.d.ts.map +1 -0
  200. package/dest/storage/note_store/stored_note.js +43 -0
  201. package/dest/storage/private_event_store/private_event_store.d.ts +91 -0
  202. package/dest/storage/private_event_store/private_event_store.d.ts.map +1 -0
  203. package/dest/storage/private_event_store/private_event_store.js +273 -0
  204. package/dest/storage/private_event_store/stored_private_event.d.ts +23 -0
  205. package/dest/storage/private_event_store/stored_private_event.d.ts.map +1 -0
  206. package/dest/storage/private_event_store/stored_private_event.js +56 -0
  207. package/dest/storage/tagging_store/index.d.ts +4 -0
  208. package/dest/storage/tagging_store/index.d.ts.map +1 -0
  209. package/dest/storage/tagging_store/index.js +3 -0
  210. package/dest/storage/tagging_store/recipient_tagging_store.d.ts +28 -0
  211. package/dest/storage/tagging_store/recipient_tagging_store.d.ts.map +1 -0
  212. package/dest/storage/tagging_store/recipient_tagging_store.js +111 -0
  213. package/dest/storage/tagging_store/sender_address_book_store.d.ts +14 -0
  214. package/dest/storage/tagging_store/sender_address_book_store.d.ts.map +1 -0
  215. package/dest/storage/tagging_store/sender_address_book_store.js +36 -0
  216. package/dest/storage/tagging_store/sender_tagging_store.d.ts +77 -0
  217. package/dest/storage/tagging_store/sender_tagging_store.d.ts.map +1 -0
  218. package/dest/storage/tagging_store/sender_tagging_store.js +348 -0
  219. package/dest/tagging/constants.d.ts +2 -2
  220. package/dest/tagging/constants.d.ts.map +1 -1
  221. package/dest/tagging/constants.js +10 -2
  222. package/dest/tagging/get_all_logs_by_tags.d.ts +24 -0
  223. package/dest/tagging/get_all_logs_by_tags.d.ts.map +1 -0
  224. package/dest/tagging/get_all_logs_by_tags.js +60 -0
  225. package/dest/tagging/index.d.ts +16 -6
  226. package/dest/tagging/index.d.ts.map +1 -1
  227. package/dest/tagging/index.js +15 -5
  228. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts +14 -0
  229. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.d.ts.map +1 -0
  230. package/dest/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.js +99 -0
  231. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts +12 -0
  232. package/dest/tagging/recipient_sync/utils/find_highest_indexes.d.ts.map +1 -0
  233. package/dest/tagging/recipient_sync/utils/find_highest_indexes.js +20 -0
  234. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts +14 -0
  235. package/dest/tagging/recipient_sync/utils/load_logs_for_range.d.ts.map +1 -0
  236. package/dest/tagging/recipient_sync/utils/load_logs_for_range.js +33 -0
  237. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts +17 -0
  238. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.d.ts.map +1 -0
  239. package/dest/tagging/sender_sync/sync_sender_tagging_indexes.js +71 -0
  240. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts +11 -0
  241. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.d.ts.map +1 -0
  242. package/dest/tagging/sender_sync/utils/get_status_change_of_pending.js +29 -0
  243. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts +18 -0
  244. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.d.ts.map +1 -0
  245. package/dest/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.js +59 -0
  246. package/package.json +29 -19
  247. package/src/access_scopes.ts +9 -0
  248. package/src/bin/check_oracle_version.ts +131 -20
  249. package/src/block_synchronizer/block_synchronizer.ts +178 -0
  250. package/src/block_synchronizer/index.ts +1 -0
  251. package/src/config/index.ts +24 -25
  252. package/src/config/package_info.ts +1 -1
  253. package/src/contract_function_simulator/benchmarked_node.ts +103 -0
  254. package/src/contract_function_simulator/contract_function_simulator.ts +396 -116
  255. package/src/contract_function_simulator/execution_note_cache.ts +58 -28
  256. package/src/contract_function_simulator/execution_tagging_index_cache.ts +6 -6
  257. package/src/contract_function_simulator/hashed_values_cache.ts +1 -1
  258. package/src/contract_function_simulator/index.ts +1 -1
  259. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +7 -3
  260. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +6 -5
  261. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +2 -2
  262. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +15 -3
  263. package/src/contract_function_simulator/noir-structs/utility_context.ts +6 -25
  264. package/src/contract_function_simulator/oracle/interfaces.ts +43 -18
  265. package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +1 -1
  266. package/src/contract_function_simulator/oracle/note_packing_utils.ts +30 -14
  267. package/src/contract_function_simulator/oracle/oracle.ts +111 -49
  268. package/src/contract_function_simulator/oracle/private_execution.ts +2 -68
  269. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +166 -98
  270. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +350 -91
  271. package/src/contract_function_simulator/pick_notes.ts +1 -1
  272. package/src/contract_function_simulator/proxied_contract_data_source.ts +24 -7
  273. package/src/contract_logging.ts +39 -0
  274. package/src/contract_sync/contract_sync_service.ts +152 -0
  275. package/src/contract_sync/helpers.ts +98 -0
  276. package/src/debug/pxe_debug_utils.ts +93 -0
  277. package/src/entrypoints/client/bundle/index.ts +3 -1
  278. package/src/entrypoints/client/bundle/utils.ts +25 -18
  279. package/src/entrypoints/client/lazy/index.ts +3 -1
  280. package/src/entrypoints/client/lazy/utils.ts +26 -19
  281. package/src/entrypoints/pxe_creation_options.ts +6 -2
  282. package/src/entrypoints/server/index.ts +5 -1
  283. package/src/entrypoints/server/utils.ts +34 -56
  284. package/src/error_enriching.ts +7 -15
  285. package/src/events/event_service.ts +71 -0
  286. package/src/events/index.ts +1 -0
  287. package/src/events/private_event_filter_validator.ts +46 -0
  288. package/src/job_coordinator/job_coordinator.ts +150 -0
  289. package/src/logs/log_service.ts +213 -0
  290. package/src/notes/index.ts +1 -0
  291. package/src/notes/note_service.ts +196 -0
  292. package/src/notes_filter.ts +26 -0
  293. package/src/oracle_version.ts +4 -3
  294. package/src/private_kernel/hints/{compute_tx_include_by_timestamp.ts → compute_tx_expiration_timestamp.ts} +13 -13
  295. package/src/private_kernel/hints/index.ts +2 -2
  296. package/src/private_kernel/hints/{build_private_kernel_reset_private_inputs.ts → private_kernel_reset_private_inputs_builder.ts} +199 -145
  297. package/src/private_kernel/hints/test_utils.ts +325 -0
  298. package/src/private_kernel/private_kernel_execution_prover.ts +38 -34
  299. package/src/private_kernel/private_kernel_oracle.ts +118 -37
  300. package/src/pxe.ts +410 -382
  301. package/src/storage/{address_data_provider/address_data_provider.ts → address_store/address_store.ts} +16 -16
  302. package/src/storage/address_store/index.ts +1 -0
  303. package/src/storage/{sync_data_provider/sync_data_provider.ts → anchor_block_store/anchor_block_store.ts} +10 -11
  304. package/src/storage/anchor_block_store/index.ts +1 -0
  305. package/src/storage/capsule_store/capsule_store.ts +315 -0
  306. package/src/storage/capsule_store/index.ts +1 -0
  307. package/src/storage/contract_store/contract_store.ts +429 -0
  308. package/src/storage/contract_store/index.ts +1 -0
  309. package/src/storage/{contract_data_provider → contract_store}/private_functions_tree.ts +1 -1
  310. package/src/storage/index.ts +7 -7
  311. package/src/storage/metadata.ts +1 -1
  312. package/src/storage/note_store/index.ts +2 -0
  313. package/src/storage/note_store/note_store.ts +418 -0
  314. package/src/storage/note_store/stored_note.ts +48 -0
  315. package/src/storage/private_event_store/private_event_store.ts +384 -0
  316. package/src/storage/private_event_store/stored_private_event.ts +73 -0
  317. package/src/storage/tagging_store/index.ts +3 -0
  318. package/src/storage/tagging_store/recipient_tagging_store.ts +143 -0
  319. package/src/storage/tagging_store/sender_address_book_store.ts +48 -0
  320. package/src/storage/tagging_store/sender_tagging_store.ts +429 -0
  321. package/src/tagging/constants.ts +10 -2
  322. package/src/tagging/get_all_logs_by_tags.ts +92 -0
  323. package/src/tagging/index.ts +18 -5
  324. package/src/tagging/recipient_sync/load_private_logs_for_sender_recipient_pair.ts +140 -0
  325. package/src/tagging/recipient_sync/utils/find_highest_indexes.ts +34 -0
  326. package/src/tagging/recipient_sync/utils/load_logs_for_range.ts +44 -0
  327. package/src/tagging/sender_sync/sync_sender_tagging_indexes.ts +94 -0
  328. package/src/tagging/sender_sync/utils/get_status_change_of_pending.ts +36 -0
  329. package/src/tagging/sender_sync/utils/load_and_store_new_tagging_indexes.ts +75 -0
  330. package/dest/contract_function_simulator/execution_data_provider.d.ts +0 -274
  331. package/dest/contract_function_simulator/execution_data_provider.d.ts.map +0 -1
  332. package/dest/contract_function_simulator/execution_data_provider.js +0 -14
  333. package/dest/contract_function_simulator/proxied_node.d.ts +0 -9
  334. package/dest/contract_function_simulator/proxied_node.d.ts.map +0 -1
  335. package/dest/contract_function_simulator/proxied_node.js +0 -27
  336. package/dest/contract_function_simulator/pxe_oracle_interface.d.ts +0 -122
  337. package/dest/contract_function_simulator/pxe_oracle_interface.d.ts.map +0 -1
  338. package/dest/contract_function_simulator/pxe_oracle_interface.js +0 -701
  339. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts +0 -28
  340. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
  341. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +0 -4
  342. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +0 -1
  343. package/dest/private_kernel/private_kernel_oracle_impl.d.ts +0 -45
  344. package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +0 -1
  345. package/dest/private_kernel/private_kernel_oracle_impl.js +0 -86
  346. package/dest/storage/address_data_provider/address_data_provider.d.ts +0 -11
  347. package/dest/storage/address_data_provider/address_data_provider.d.ts.map +0 -1
  348. package/dest/storage/address_data_provider/index.d.ts +0 -2
  349. package/dest/storage/address_data_provider/index.d.ts.map +0 -1
  350. package/dest/storage/address_data_provider/index.js +0 -1
  351. package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts +0 -25
  352. package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts.map +0 -1
  353. package/dest/storage/capsule_data_provider/capsule_data_provider.js +0 -118
  354. package/dest/storage/capsule_data_provider/index.d.ts +0 -2
  355. package/dest/storage/capsule_data_provider/index.d.ts.map +0 -1
  356. package/dest/storage/capsule_data_provider/index.js +0 -1
  357. package/dest/storage/contract_data_provider/contract_data_provider.d.ts +0 -74
  358. package/dest/storage/contract_data_provider/contract_data_provider.d.ts.map +0 -1
  359. package/dest/storage/contract_data_provider/contract_data_provider.js +0 -205
  360. package/dest/storage/contract_data_provider/index.d.ts +0 -2
  361. package/dest/storage/contract_data_provider/index.d.ts.map +0 -1
  362. package/dest/storage/contract_data_provider/index.js +0 -1
  363. package/dest/storage/contract_data_provider/private_functions_tree.d.ts.map +0 -1
  364. package/dest/storage/note_data_provider/index.d.ts +0 -3
  365. package/dest/storage/note_data_provider/index.d.ts.map +0 -1
  366. package/dest/storage/note_data_provider/index.js +0 -2
  367. package/dest/storage/note_data_provider/note_dao.d.ts +0 -100
  368. package/dest/storage/note_data_provider/note_dao.d.ts.map +0 -1
  369. package/dest/storage/note_data_provider/note_dao.js +0 -102
  370. package/dest/storage/note_data_provider/note_data_provider.d.ts +0 -83
  371. package/dest/storage/note_data_provider/note_data_provider.d.ts.map +0 -1
  372. package/dest/storage/note_data_provider/note_data_provider.js +0 -308
  373. package/dest/storage/private_event_data_provider/private_event_data_provider.d.ts +0 -43
  374. package/dest/storage/private_event_data_provider/private_event_data_provider.d.ts.map +0 -1
  375. package/dest/storage/private_event_data_provider/private_event_data_provider.js +0 -104
  376. package/dest/storage/sync_data_provider/index.d.ts +0 -2
  377. package/dest/storage/sync_data_provider/index.d.ts.map +0 -1
  378. package/dest/storage/sync_data_provider/index.js +0 -1
  379. package/dest/storage/sync_data_provider/sync_data_provider.d.ts +0 -10
  380. package/dest/storage/sync_data_provider/sync_data_provider.d.ts.map +0 -1
  381. package/dest/storage/tagging_data_provider/index.d.ts +0 -2
  382. package/dest/storage/tagging_data_provider/index.d.ts.map +0 -1
  383. package/dest/storage/tagging_data_provider/index.js +0 -1
  384. package/dest/storage/tagging_data_provider/tagging_data_provider.d.ts +0 -40
  385. package/dest/storage/tagging_data_provider/tagging_data_provider.d.ts.map +0 -1
  386. package/dest/storage/tagging_data_provider/tagging_data_provider.js +0 -89
  387. package/dest/synchronizer/index.d.ts +0 -2
  388. package/dest/synchronizer/index.d.ts.map +0 -1
  389. package/dest/synchronizer/index.js +0 -1
  390. package/dest/synchronizer/synchronizer.d.ts +0 -35
  391. package/dest/synchronizer/synchronizer.d.ts.map +0 -1
  392. package/dest/synchronizer/synchronizer.js +0 -101
  393. package/dest/tagging/siloed_tag.d.ts +0 -14
  394. package/dest/tagging/siloed_tag.d.ts.map +0 -1
  395. package/dest/tagging/siloed_tag.js +0 -20
  396. package/dest/tagging/tag.d.ts +0 -12
  397. package/dest/tagging/tag.d.ts.map +0 -1
  398. package/dest/tagging/tag.js +0 -17
  399. package/dest/tagging/utils.d.ts +0 -18
  400. package/dest/tagging/utils.d.ts.map +0 -1
  401. package/dest/tagging/utils.js +0 -24
  402. package/src/contract_function_simulator/execution_data_provider.ts +0 -343
  403. package/src/contract_function_simulator/proxied_node.ts +0 -33
  404. package/src/contract_function_simulator/pxe_oracle_interface.ts +0 -1019
  405. package/src/private_kernel/private_kernel_oracle_impl.ts +0 -132
  406. package/src/storage/address_data_provider/index.ts +0 -1
  407. package/src/storage/capsule_data_provider/capsule_data_provider.ts +0 -147
  408. package/src/storage/capsule_data_provider/index.ts +0 -1
  409. package/src/storage/contract_data_provider/contract_data_provider.ts +0 -294
  410. package/src/storage/contract_data_provider/index.ts +0 -1
  411. package/src/storage/note_data_provider/index.ts +0 -2
  412. package/src/storage/note_data_provider/note_dao.ts +0 -154
  413. package/src/storage/note_data_provider/note_data_provider.ts +0 -393
  414. package/src/storage/private_event_data_provider/private_event_data_provider.ts +0 -148
  415. package/src/storage/sync_data_provider/index.ts +0 -1
  416. package/src/storage/tagging_data_provider/index.ts +0 -1
  417. package/src/storage/tagging_data_provider/tagging_data_provider.ts +0 -120
  418. package/src/synchronizer/index.ts +0 -1
  419. package/src/synchronizer/synchronizer.ts +0 -120
  420. package/src/tagging/siloed_tag.ts +0 -22
  421. package/src/tagging/tag.ts +0 -16
  422. package/src/tagging/utils.ts +0 -31
@@ -9,8 +9,8 @@ import {
9
9
  } from '@aztec/constants';
10
10
  import { makeTuple } from '@aztec/foundation/array';
11
11
  import { padArrayEnd } from '@aztec/foundation/collection';
12
- import type { Fr } from '@aztec/foundation/fields';
13
- import { type Tuple, assertLength } from '@aztec/foundation/serialize';
12
+ import type { Fr } from '@aztec/foundation/curves/bn254';
13
+ import { assertLength } from '@aztec/foundation/serialize';
14
14
  import { MembershipWitness } from '@aztec/foundation/trees';
15
15
  import { privateKernelResetDimensionsConfig } from '@aztec/noir-protocol-circuits-types/client';
16
16
  import {
@@ -24,17 +24,14 @@ import {
24
24
  PrivateKernelResetDimensions,
25
25
  PrivateKernelResetHints,
26
26
  type PrivateKernelSimulateOutput,
27
- type ReadRequest,
28
27
  ReadRequestActionEnum,
29
28
  ReadRequestResetActions,
30
- type ScopedKeyValidationRequestAndGenerator,
31
- ScopedNoteHash,
32
- ScopedNullifier,
33
- ScopedReadRequest,
29
+ type ScopedKeyValidationRequestAndSeparator,
34
30
  TransientDataSquashingHint,
35
31
  buildNoteHashReadRequestHintsFromResetActions,
36
32
  buildNullifierReadRequestHintsFromResetActions,
37
33
  buildTransientDataHints,
34
+ countSquashedLogs,
38
35
  findPrivateKernelResetDimensions,
39
36
  getNoteHashReadRequestResetActions,
40
37
  getNullifierReadRequestResetActions,
@@ -45,17 +42,6 @@ import { VkData } from '@aztec/stdlib/vks';
45
42
 
46
43
  import type { PrivateKernelOracle } from '../private_kernel_oracle.js';
47
44
 
48
- function collectNestedReadRequests<N extends number>(
49
- executionStack: PrivateCallExecutionResult[],
50
- extractReadRequests: (execution: PrivateCallExecutionResult) => ClaimedLengthArray<ReadRequest, N>,
51
- ): ScopedReadRequest[] {
52
- return collectNested(executionStack, executionResult => {
53
- return extractReadRequests(executionResult)
54
- .getActiveItems()
55
- .map(readRequest => new ScopedReadRequest(readRequest, executionResult.publicInputs.callContext.contractAddress));
56
- });
57
- }
58
-
59
45
  function getNullifierMembershipWitnessResolver(oracle: PrivateKernelOracle) {
60
46
  return async (nullifier: Fr) => {
61
47
  const res = await oracle.getNullifierMembershipWitness(nullifier);
@@ -71,9 +57,9 @@ function getNullifierMembershipWitnessResolver(oracle: PrivateKernelOracle) {
71
57
  };
72
58
  }
73
59
 
74
- async function getMasterSecretKeysAndAppKeyGenerators(
60
+ async function getMasterSecretKeysAndKeyTypeDomainSeparators(
75
61
  keyValidationRequests: ClaimedLengthArray<
76
- ScopedKeyValidationRequestAndGenerator,
62
+ ScopedKeyValidationRequestAndSeparator,
77
63
  typeof MAX_KEY_VALIDATION_REQUESTS_PER_TX
78
64
  >,
79
65
  numRequestsToVerify: number,
@@ -94,34 +80,34 @@ export class PrivateKernelResetPrivateInputsBuilder {
94
80
  // If there's no next iteration, it's the final reset.
95
81
  private nextIteration?: PrivateCircuitPublicInputs;
96
82
 
97
- private noteHashResetActions: ReadRequestResetActions<typeof MAX_NOTE_HASH_READ_REQUESTS_PER_TX>;
98
- private nullifierResetActions: ReadRequestResetActions<typeof MAX_NULLIFIER_READ_REQUESTS_PER_TX>;
83
+ private noteHashResetActions = ReadRequestResetActions.empty(MAX_NOTE_HASH_READ_REQUESTS_PER_TX);
84
+ private nullifierResetActions = ReadRequestResetActions.empty(MAX_NULLIFIER_READ_REQUESTS_PER_TX);
99
85
  private numTransientData?: number;
100
- private transientDataSquashingHints: Tuple<TransientDataSquashingHint, typeof MAX_NULLIFIERS_PER_TX>;
101
- private requestedDimensions: PrivateKernelResetDimensions;
86
+ private transientDataSquashingHints = makeTuple(
87
+ MAX_NULLIFIERS_PER_TX,
88
+ () => new TransientDataSquashingHint(MAX_NULLIFIERS_PER_TX, MAX_NOTE_HASHES_PER_TX),
89
+ );
90
+ private requestedDimensions = PrivateKernelResetDimensions.empty();
102
91
 
103
92
  constructor(
104
93
  private previousKernelOutput: PrivateKernelSimulateOutput<PrivateKernelCircuitPublicInputs>,
105
94
  private executionStack: PrivateCallExecutionResult[],
106
95
  private noteHashNullifierCounterMap: Map<number, number>,
107
- private validationRequestsSplitCounter: number,
96
+ private splitCounter: number,
108
97
  ) {
109
98
  this.previousKernel = previousKernelOutput.publicInputs;
110
- this.requestedDimensions = PrivateKernelResetDimensions.empty();
111
- this.noteHashResetActions = ReadRequestResetActions.empty(MAX_NOTE_HASH_READ_REQUESTS_PER_TX);
112
- this.nullifierResetActions = ReadRequestResetActions.empty(MAX_NULLIFIER_READ_REQUESTS_PER_TX);
113
- this.transientDataSquashingHints = makeTuple(
114
- MAX_NULLIFIERS_PER_TX,
115
- () => new TransientDataSquashingHint(MAX_NULLIFIERS_PER_TX, MAX_NOTE_HASHES_PER_TX),
116
- );
117
99
  this.nextIteration = executionStack[this.executionStack.length - 1]?.publicInputs;
118
100
  }
119
101
 
102
+ getRequestedDimensions(): PrivateKernelResetDimensions {
103
+ return this.requestedDimensions;
104
+ }
105
+
120
106
  needsReset(): boolean {
121
107
  const fns: (() => boolean)[] = [
122
108
  () => this.needsResetNoteHashReadRequests(),
123
109
  () => this.needsResetNullifierReadRequests(),
124
- () => this.needsResetNullifierKeys(),
110
+ () => this.needsResetKeyValidationRequests(),
125
111
  () => this.needsResetTransientData(),
126
112
  ];
127
113
 
@@ -141,15 +127,14 @@ export class PrivateKernelResetPrivateInputsBuilder {
141
127
  }
142
128
  }
143
129
 
144
- async build(oracle: PrivateKernelOracle, noteHashLeafIndexMap: Map<bigint, bigint>) {
130
+ async build(oracle: PrivateKernelOracle) {
145
131
  if (privateKernelResetDimensionNames.every(name => !this.requestedDimensions[name])) {
146
132
  throw new Error('Reset is not required.');
147
133
  }
148
134
 
149
135
  const isInner = !!this.nextIteration;
150
136
 
151
- // "final" reset must be done at most once.
152
- // Because the code that silo note hashes can't be run repeatedly.
137
+ // "final" reset must be done exactly once, because siloing can't be run repeatedly.
153
138
  // The dimensions found must be big enough to reset all values, i.e. empty remainder.
154
139
  const allowRemainder = isInner;
155
140
 
@@ -160,16 +145,6 @@ export class PrivateKernelResetPrivateInputsBuilder {
160
145
  allowRemainder,
161
146
  );
162
147
 
163
- const previousVkMembershipWitness = await oracle.getVkMembershipWitness(
164
- this.previousKernelOutput.verificationKey.keyAsFields,
165
- );
166
- const vkData = new VkData(
167
- this.previousKernelOutput.verificationKey,
168
- Number(previousVkMembershipWitness.leafIndex),
169
- previousVkMembershipWitness.siblingPath,
170
- );
171
- const previousKernelData = new PrivateKernelData(this.previousKernelOutput.publicInputs, vkData);
172
-
173
148
  this.reduceReadRequestActions(
174
149
  this.noteHashResetActions,
175
150
  dimensions.NOTE_HASH_PENDING_READ,
@@ -181,32 +156,52 @@ export class PrivateKernelResetPrivateInputsBuilder {
181
156
  dimensions.NULLIFIER_SETTLED_READ,
182
157
  );
183
158
 
184
- // TODO: Enable padding when we have a better idea what are the final amounts we should pad to.
185
- const paddedSideEffects = PaddedSideEffects.empty();
186
-
187
- return new PrivateKernelResetCircuitPrivateInputs(
188
- previousKernelData,
189
- paddedSideEffects,
190
- new PrivateKernelResetHints(
191
- await buildNoteHashReadRequestHintsFromResetActions(
159
+ // Execute all the expensive node querying operations in parallel.
160
+ const [previousVkMembershipWitness, noteHashReadRequestHints, nullifierReadRequestHints, keyValidationHints] =
161
+ await Promise.all([
162
+ oracle.getVkMembershipWitness(this.previousKernelOutput.verificationKey.keyAsFields),
163
+ buildNoteHashReadRequestHintsFromResetActions<
164
+ typeof MAX_NOTE_HASH_READ_REQUESTS_PER_TX,
165
+ typeof MAX_NOTE_HASH_READ_REQUESTS_PER_TX
166
+ >(
192
167
  oracle,
193
168
  this.previousKernel.validationRequests.noteHashReadRequests,
194
169
  this.previousKernel.end.noteHashes,
195
170
  this.noteHashResetActions,
196
- noteHashLeafIndexMap,
197
171
  ),
198
- await buildNullifierReadRequestHintsFromResetActions(
172
+ buildNullifierReadRequestHintsFromResetActions<
173
+ typeof MAX_NULLIFIER_READ_REQUESTS_PER_TX,
174
+ typeof MAX_NULLIFIER_READ_REQUESTS_PER_TX
175
+ >(
199
176
  { getNullifierMembershipWitness: getNullifierMembershipWitnessResolver(oracle) },
200
177
  this.previousKernel.validationRequests.nullifierReadRequests,
201
178
  this.nullifierResetActions,
202
179
  ),
203
- await getMasterSecretKeysAndAppKeyGenerators(
204
- this.previousKernel.validationRequests.scopedKeyValidationRequestsAndGenerators,
180
+ getMasterSecretKeysAndKeyTypeDomainSeparators(
181
+ this.previousKernel.validationRequests.scopedKeyValidationRequestsAndSeparators,
205
182
  dimensions.KEY_VALIDATION,
206
183
  oracle,
207
184
  ),
185
+ ]);
186
+
187
+ const vkData = new VkData(
188
+ this.previousKernelOutput.verificationKey,
189
+ Number(previousVkMembershipWitness.leafIndex),
190
+ previousVkMembershipWitness.siblingPath,
191
+ );
192
+ const previousKernelData = new PrivateKernelData(this.previousKernelOutput.publicInputs, vkData);
193
+
194
+ // TODO: Enable padding when we have a better idea what are the final amounts we should pad to.
195
+ const paddedSideEffects = PaddedSideEffects.empty();
196
+
197
+ return new PrivateKernelResetCircuitPrivateInputs(
198
+ previousKernelData,
199
+ paddedSideEffects,
200
+ new PrivateKernelResetHints(
201
+ noteHashReadRequestHints,
202
+ nullifierReadRequestHints,
203
+ keyValidationHints,
208
204
  this.transientDataSquashingHints,
209
- this.validationRequestsSplitCounter,
210
205
  ),
211
206
  dimensions,
212
207
  );
@@ -239,24 +234,17 @@ export class PrivateKernelResetPrivateInputsBuilder {
239
234
  resetActions.pendingReadHints = resetActions.pendingReadHints.slice(0, maxPending);
240
235
  }
241
236
 
242
- private needsResetNoteHashReadRequests(forceResetAll = false) {
237
+ private needsResetNoteHashReadRequests(forceReset = false) {
243
238
  const numCurr = this.previousKernel.validationRequests.noteHashReadRequests.claimedLength;
244
239
  const numNext = this.nextIteration ? this.nextIteration.noteHashReadRequests.claimedLength : 0;
245
- const maxAmountToKeep = !this.nextIteration || forceResetAll ? 0 : MAX_NOTE_HASH_READ_REQUESTS_PER_TX;
240
+ const maxAmountToKeep = !this.nextIteration || forceReset ? 0 : MAX_NOTE_HASH_READ_REQUESTS_PER_TX;
246
241
  if (numCurr + numNext <= maxAmountToKeep) {
247
242
  return false;
248
243
  }
249
244
 
250
- const futureNoteHashes = collectNested(this.executionStack, executionResult => {
251
- return executionResult.publicInputs.noteHashes
252
- .getActiveItems()
253
- .map(noteHash => new ScopedNoteHash(noteHash, executionResult.publicInputs.callContext.contractAddress));
254
- });
255
-
256
245
  const resetActions = getNoteHashReadRequestResetActions(
257
246
  this.previousKernel.validationRequests.noteHashReadRequests,
258
247
  this.previousKernel.end.noteHashes,
259
- futureNoteHashes,
260
248
  );
261
249
 
262
250
  const numPendingReads = resetActions.pendingReadHints.length;
@@ -265,53 +253,72 @@ export class PrivateKernelResetPrivateInputsBuilder {
265
253
  0,
266
254
  );
267
255
 
256
+ const totalReadsToReset = numPendingReads + numSettledReads;
257
+ const minResetNeeded = numCurr + numNext - maxAmountToKeep;
258
+ if (totalReadsToReset < minResetNeeded) {
259
+ if (!this.nextIteration) {
260
+ // In the final reset, all note hashes have been emitted. So if we can't reset all requests, at least one
261
+ // pending read request doesn't match any of them.
262
+ throw new Error('No matching note hash found for note hash read request.');
263
+ } else if (!forceReset) {
264
+ // A pending read request can only be reset if its note hash has already been included (e.g. a parent call might
265
+ // be reading a note hash emitted by a child call. The read request of the parent call is included before the note
266
+ // hash of the child call).
267
+ // If we can't clear enough read requests to make room for the next iteration's reads, we're stuck.
268
+ throw new Error('Number of note hash read requests exceeds the limit.');
269
+ } else if (totalReadsToReset == 0) {
270
+ // It's transient data squashing asking for the read requests to be reset first (forceReset == true), and
271
+ // there's nothing to reset, returns false and let needsResetTransientData throw a more descriptive error.
272
+ return false;
273
+ }
274
+ // Otherwise, forceReset is true, we should proceed to reset as many as we can.
275
+ }
276
+
268
277
  if (!this.nextIteration) {
278
+ // If there's no next iteration, we need to reset all the read requests.
269
279
  this.noteHashResetActions = resetActions;
270
280
  this.requestedDimensions.NOTE_HASH_PENDING_READ = numPendingReads;
271
281
  this.requestedDimensions.NOTE_HASH_SETTLED_READ = numSettledReads;
272
282
  } else {
273
- // Pick only one dimension to reset if next iteration is not empty.
283
+ // If there's a next iteration, only one dimension can be reset at a time.
284
+ // So we pick the dimension that has more read requests to reset.
274
285
  if (numPendingReads > numSettledReads) {
275
- this.requestedDimensions.NOTE_HASH_PENDING_READ = numPendingReads;
276
- this.noteHashResetActions.actions = assertLength(
286
+ // Reset the pending read requests.
287
+ const pendingOnlyActions = assertLength(
277
288
  resetActions.actions.map(action =>
278
289
  action === ReadRequestActionEnum.READ_AS_PENDING ? action : ReadRequestActionEnum.SKIP,
279
290
  ),
280
291
  MAX_NOTE_HASH_READ_REQUESTS_PER_TX,
281
292
  );
282
- this.noteHashResetActions.pendingReadHints = resetActions.pendingReadHints;
293
+ this.noteHashResetActions = new ReadRequestResetActions(pendingOnlyActions, resetActions.pendingReadHints);
294
+ this.requestedDimensions.NOTE_HASH_PENDING_READ = numPendingReads;
283
295
  } else {
284
- this.requestedDimensions.NOTE_HASH_SETTLED_READ = numSettledReads;
285
- this.noteHashResetActions.actions = assertLength(
296
+ // Reset the settled read requests.
297
+ const settledOnlyActions = assertLength(
286
298
  resetActions.actions.map(action =>
287
299
  action === ReadRequestActionEnum.READ_AS_SETTLED ? action : ReadRequestActionEnum.SKIP,
288
300
  ),
289
301
  MAX_NOTE_HASH_READ_REQUESTS_PER_TX,
290
302
  );
303
+ this.noteHashResetActions = new ReadRequestResetActions(settledOnlyActions, []);
304
+ this.requestedDimensions.NOTE_HASH_SETTLED_READ = numSettledReads;
291
305
  }
292
306
  }
293
307
 
294
308
  return true;
295
309
  }
296
310
 
297
- private needsResetNullifierReadRequests(forceResetAll = false) {
311
+ private needsResetNullifierReadRequests(forceReset = false) {
298
312
  const numCurr = this.previousKernel.validationRequests.nullifierReadRequests.claimedLength;
299
313
  const numNext = this.nextIteration ? this.nextIteration.nullifierReadRequests.claimedLength : 0;
300
- const maxAmountToKeep = !this.nextIteration || forceResetAll ? 0 : MAX_NULLIFIER_READ_REQUESTS_PER_TX;
314
+ const maxAmountToKeep = !this.nextIteration || forceReset ? 0 : MAX_NULLIFIER_READ_REQUESTS_PER_TX;
301
315
  if (numCurr + numNext <= maxAmountToKeep) {
302
316
  return false;
303
317
  }
304
318
 
305
- const futureNullifiers = collectNested(this.executionStack, executionResult => {
306
- return executionResult.publicInputs.nullifiers
307
- .getActiveItems()
308
- .map(nullifier => new ScopedNullifier(nullifier, executionResult.publicInputs.callContext.contractAddress));
309
- });
310
-
311
319
  const resetActions = getNullifierReadRequestResetActions(
312
320
  this.previousKernel.validationRequests.nullifierReadRequests,
313
321
  this.previousKernel.end.nullifiers,
314
- futureNullifiers,
315
322
  );
316
323
 
317
324
  const numPendingReads = resetActions.pendingReadHints.length;
@@ -320,38 +327,63 @@ export class PrivateKernelResetPrivateInputsBuilder {
320
327
  0,
321
328
  );
322
329
 
330
+ const totalReadsToReset = numPendingReads + numSettledReads;
331
+ const minResetNeeded = numCurr + numNext - maxAmountToKeep;
332
+ if (totalReadsToReset < minResetNeeded) {
333
+ if (!this.nextIteration) {
334
+ // In the final reset, all nullifiers have been emitted. So if we can't reset all requests, at least one pending
335
+ // read request doesn't match any of them.
336
+ throw new Error('No matching nullifier found for nullifier read request.');
337
+ } else if (!forceReset) {
338
+ // A pending read request can only be reset if its nullifier has already been included (e.g. a parent call might
339
+ // be reading a nullifier emitted by a child call. The read request of the parent call is included before the
340
+ // nullifier of the child call).
341
+ // If we can't clear enough read requests to make room for the next iteration's reads, we're stuck.
342
+ throw new Error('Number of nullifier read requests exceeds the limit.');
343
+ } else if (totalReadsToReset == 0) {
344
+ // It's transient data squashing asking for the read requests to be reset first (forceReset == true), and
345
+ // there's nothing to reset, returns false and let needsResetTransientData throw a more descriptive error.
346
+ return false;
347
+ }
348
+ // Otherwise, forceReset is true, we should proceed to reset as many as we can.
349
+ }
350
+
323
351
  if (!this.nextIteration) {
352
+ // If there's no next iteration, we need to reset all the read requests.
324
353
  this.nullifierResetActions = resetActions;
325
354
  this.requestedDimensions.NULLIFIER_PENDING_READ = numPendingReads;
326
355
  this.requestedDimensions.NULLIFIER_SETTLED_READ = numSettledReads;
327
356
  } else {
328
- // Pick only one dimension to reset if next iteration is not empty.
357
+ // If there's a next iteration, we can only reset one dimension at a time.
329
358
  if (numPendingReads > numSettledReads) {
330
- this.requestedDimensions.NULLIFIER_PENDING_READ = numPendingReads;
331
- this.nullifierResetActions.actions = assertLength(
359
+ // Reset the pending read requests.
360
+ const pendingOnlyActions = assertLength(
332
361
  resetActions.actions.map(action =>
333
362
  action === ReadRequestActionEnum.READ_AS_PENDING ? action : ReadRequestActionEnum.SKIP,
334
363
  ),
335
364
  MAX_NULLIFIER_READ_REQUESTS_PER_TX,
336
365
  );
337
- this.nullifierResetActions.pendingReadHints = resetActions.pendingReadHints;
366
+ this.nullifierResetActions = new ReadRequestResetActions(pendingOnlyActions, resetActions.pendingReadHints);
367
+ this.requestedDimensions.NULLIFIER_PENDING_READ = numPendingReads;
338
368
  } else {
339
- this.requestedDimensions.NULLIFIER_SETTLED_READ = numSettledReads;
340
- this.nullifierResetActions.actions = assertLength(
369
+ // Reset the settled read requests.
370
+ const settledOnlyActions = assertLength(
341
371
  resetActions.actions.map(action =>
342
372
  action === ReadRequestActionEnum.READ_AS_SETTLED ? action : ReadRequestActionEnum.SKIP,
343
373
  ),
344
374
  MAX_NULLIFIER_READ_REQUESTS_PER_TX,
345
375
  );
376
+ this.nullifierResetActions = new ReadRequestResetActions(settledOnlyActions, []);
377
+ this.requestedDimensions.NULLIFIER_SETTLED_READ = numSettledReads;
346
378
  }
347
379
  }
348
380
 
349
381
  return true;
350
382
  }
351
383
 
352
- private needsResetNullifierKeys() {
353
- const numCurr = this.previousKernel.validationRequests.scopedKeyValidationRequestsAndGenerators.claimedLength;
354
- const numNext = this.nextIteration ? this.nextIteration.keyValidationRequestsAndGenerators.claimedLength : 0;
384
+ private needsResetKeyValidationRequests() {
385
+ const numCurr = this.previousKernel.validationRequests.scopedKeyValidationRequestsAndSeparators.claimedLength;
386
+ const numNext = this.nextIteration ? this.nextIteration.keyValidationRequestsAndSeparators.claimedLength : 0;
355
387
  const maxAmountToKeep = !this.nextIteration ? 0 : MAX_KEY_VALIDATION_REQUESTS_PER_TX;
356
388
  if (numCurr + numNext <= maxAmountToKeep) {
357
389
  return false;
@@ -363,9 +395,6 @@ export class PrivateKernelResetPrivateInputsBuilder {
363
395
  }
364
396
 
365
397
  private needsResetTransientData() {
366
- // Initialize this to 0 so that needsSilo can be run.
367
- this.numTransientData = 0;
368
-
369
398
  const nextAccumNoteHashes =
370
399
  this.previousKernel.end.noteHashes.claimedLength + (this.nextIteration?.noteHashes.claimedLength ?? 0);
371
400
  const noteHashWillOverflow = nextAccumNoteHashes > MAX_NOTE_HASHES_PER_TX;
@@ -380,19 +409,19 @@ export class PrivateKernelResetPrivateInputsBuilder {
380
409
  return false;
381
410
  }
382
411
 
383
- const futureNoteHashReads = collectNestedReadRequests(
384
- this.executionStack,
385
- executionResult => executionResult.publicInputs.noteHashReadRequests,
412
+ const futureNoteHashReads = collectNested(this.executionStack, executionResult =>
413
+ executionResult.publicInputs.noteHashReadRequests.getActiveItems(),
414
+ );
415
+ const futureNullifierReads = collectNested(this.executionStack, executionResult =>
416
+ executionResult.publicInputs.nullifierReadRequests.getActiveItems(),
386
417
  );
387
- const futureNullifierReads = collectNestedReadRequests(
388
- this.executionStack,
389
- executionResult => executionResult.publicInputs.nullifierReadRequests,
418
+ const futureLogs = collectNested(this.executionStack, executionResult =>
419
+ executionResult.publicInputs.privateLogs.getActiveItems(),
390
420
  );
391
- // TODO(#15902): Collect future logs and only allow squashing a note hash when all its logs have been emitted
392
- // (i.e. none of the future logs are linked to the to-be-squashed note hashes).
393
421
  if (this.nextIteration) {
394
- // If it's not the final reset, only one dimension will be reset at a time.
395
- // The note hashes and nullifiers for the remaining read requests can't be squashed.
422
+ // If it's not the final reset, only one dimension will be reset at a time. Since we are resetting the transient
423
+ // data, the note hash and nullifier read requests in the previous kernel won't be squashed and need to be
424
+ // included in the future read requests.
396
425
  futureNoteHashReads.push(...this.previousKernel.validationRequests.noteHashReadRequests.getActiveItems());
397
426
  futureNullifierReads.push(...this.previousKernel.validationRequests.nullifierReadRequests.getActiveItems());
398
427
  }
@@ -402,27 +431,50 @@ export class PrivateKernelResetPrivateInputsBuilder {
402
431
  this.previousKernel.end.nullifiers,
403
432
  futureNoteHashReads,
404
433
  futureNullifierReads,
434
+ futureLogs,
405
435
  this.noteHashNullifierCounterMap,
406
- this.validationRequestsSplitCounter,
436
+ this.splitCounter,
407
437
  );
408
438
 
409
- if (this.nextIteration && !numTransientData) {
410
- const forceResetAll = true;
411
- const canClearReadRequests =
412
- (noteHashWillOverflow && this.needsResetNoteHashReadRequests(forceResetAll)) ||
413
- (nullifierWillOverflow && this.needsResetNullifierReadRequests(forceResetAll)) ||
414
- (logsWillOverflow && this.needsResetNoteHashReadRequests(forceResetAll));
415
- if (!canClearReadRequests) {
416
- const overflownData = noteHashWillOverflow
417
- ? 'note hashes'
418
- : nullifierWillOverflow
419
- ? 'nullifiers'
420
- : 'private logs';
421
- throw new Error(`Number of ${overflownData} exceeds the limit.`);
439
+ if (this.nextIteration) {
440
+ const noteHashOverflowBy = noteHashWillOverflow
441
+ ? nextAccumNoteHashes - MAX_NOTE_HASHES_PER_TX - numTransientData
442
+ : 0;
443
+ const nullifierOverflowBy = nullifierWillOverflow
444
+ ? nextAccumNullifiers - MAX_NULLIFIERS_PER_TX - numTransientData
445
+ : 0;
446
+ const numSquashedLogs = logsWillOverflow
447
+ ? countSquashedLogs(
448
+ this.previousKernel.end.noteHashes,
449
+ this.previousKernel.end.privateLogs,
450
+ transientDataSquashingHints.slice(0, numTransientData),
451
+ )
452
+ : 0;
453
+ const logsOverflowBy = logsWillOverflow ? nextAccumLogs - MAX_PRIVATE_LOGS_PER_TX - numSquashedLogs : 0;
454
+
455
+ if (noteHashOverflowBy > 0 || nullifierOverflowBy > 0 || logsOverflowBy > 0) {
456
+ // There's not enough transient data to squash to clear space for the overflow. It may be because some data is
457
+ // still required for read requests. Force a reset of the read requests first, and return to transient data
458
+ // squashing in the next round of reset.
459
+ // Note that clearing the read requests might not be enough to clear more space for the overflow. In this case,
460
+ // running the next reset will fail at the following check.
461
+ // Only one dimension can be reset at a time for an inner reset, so we try the note hash read requests first
462
+ // (which also helps with log overflow), then fall back to nullifier read requests.
463
+ const forceReset = true;
464
+ if ((noteHashOverflowBy > 0 || logsOverflowBy > 0) && this.needsResetNoteHashReadRequests(forceReset)) {
465
+ return true;
466
+ }
467
+ if (nullifierOverflowBy > 0 && this.needsResetNullifierReadRequests(forceReset)) {
468
+ return true;
469
+ }
470
+ if (noteHashWillOverflow) {
471
+ throw new Error('Number of note hashes exceeds the limit.');
472
+ }
473
+ if (nullifierWillOverflow) {
474
+ throw new Error('Number of nullifiers exceeds the limit.');
475
+ }
476
+ throw new Error('Number of private logs exceeds the limit.');
422
477
  }
423
- // Clearing the read requests might not be enough to squash the overflown data.
424
- // In this case, the next iteration will fail at the above check.
425
- return true;
426
478
  }
427
479
 
428
480
  this.numTransientData = numTransientData;
@@ -437,10 +489,13 @@ export class PrivateKernelResetPrivateInputsBuilder {
437
489
  throw new Error('`needsResetTransientData` must be run before `needsSiloNoteHashes`.');
438
490
  }
439
491
 
440
- const numNoteHashes = this.previousKernel.end.noteHashes
441
- .getActiveItems()
442
- .filter(n => !n.contractAddress.isZero()).length;
443
- const numToSilo = Math.max(0, numNoteHashes - this.numTransientData);
492
+ const noteHashes = this.previousKernel.end.noteHashes;
493
+ if (noteHashes.claimedLength > 0 && noteHashes.array[0].contractAddress.isZero()) {
494
+ // Already siloed.
495
+ return false;
496
+ }
497
+
498
+ const numToSilo = noteHashes.claimedLength - this.numTransientData;
444
499
  this.requestedDimensions.NOTE_HASH_SILOING = numToSilo;
445
500
 
446
501
  return numToSilo > 0;
@@ -451,15 +506,14 @@ export class PrivateKernelResetPrivateInputsBuilder {
451
506
  throw new Error('`needsResetTransientData` must be run before `needsSiloNullifiers`.');
452
507
  }
453
508
 
454
- const numNullifiers = this.previousKernel.end.nullifiers
455
- .getActiveItems()
456
- .filter(n => !n.contractAddress.isZero()).length;
457
- const numToSilo = Math.max(0, numNullifiers - this.numTransientData);
458
- // Include the first nullifier if there's something to silo.
459
- // The reset circuit checks that capped_size must be greater than or equal to all non-empty nullifiers.
460
- // Which includes the first nullifier, even though its contract address is always zero and doesn't need siloing.
461
- const cappedSize = numToSilo ? numToSilo + 1 : 0;
462
- this.requestedDimensions.NULLIFIER_SILOING = cappedSize;
509
+ const nullifiers = this.previousKernel.end.nullifiers;
510
+ if (nullifiers.claimedLength > 0 && nullifiers.array[0].contractAddress.isZero()) {
511
+ // Already siloed.
512
+ return false;
513
+ }
514
+
515
+ const numToSilo = nullifiers.claimedLength - this.numTransientData;
516
+ this.requestedDimensions.NULLIFIER_SILOING = numToSilo;
463
517
 
464
518
  return numToSilo > 0;
465
519
  }
@@ -470,17 +524,17 @@ export class PrivateKernelResetPrivateInputsBuilder {
470
524
  }
471
525
 
472
526
  const privateLogs = this.previousKernel.end.privateLogs;
473
- const numLogs = privateLogs.getActiveItems().filter(l => !l.contractAddress.isZero()).length;
527
+ if (privateLogs.claimedLength > 0 && privateLogs.array[0].contractAddress.isZero()) {
528
+ // Already siloed.
529
+ return false;
530
+ }
474
531
 
475
- const noteHashes = this.previousKernel.end.noteHashes;
476
- const squashedNoteHashCounters = this.transientDataSquashingHints
477
- .filter(h => h.noteHashIndex < noteHashes.claimedLength)
478
- .map(h => noteHashes.array[h.noteHashIndex].counter);
479
- const numSquashedLogs = privateLogs
480
- .getActiveItems()
481
- .filter(l => squashedNoteHashCounters.includes(l.inner.noteHashCounter)).length;
482
-
483
- const numToSilo = numLogs - numSquashedLogs;
532
+ const numSquashedLogs = countSquashedLogs(
533
+ this.previousKernel.end.noteHashes,
534
+ privateLogs,
535
+ this.transientDataSquashingHints.slice(0, this.numTransientData),
536
+ );
537
+ const numToSilo = privateLogs.claimedLength - numSquashedLogs;
484
538
  this.requestedDimensions.PRIVATE_LOG_SILOING = numToSilo;
485
539
 
486
540
  return numToSilo > 0;