@aztec/pxe 0.0.0-test.0 → 0.0.1-commit.24de95ac

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 (309) hide show
  1. package/README.md +5 -5
  2. package/dest/bin/check_oracle_version.d.ts +2 -0
  3. package/dest/bin/check_oracle_version.d.ts.map +1 -0
  4. package/dest/bin/check_oracle_version.js +39 -0
  5. package/dest/config/index.d.ts +10 -15
  6. package/dest/config/index.d.ts.map +1 -1
  7. package/dest/config/index.js +11 -20
  8. package/dest/config/package_info.js +1 -1
  9. package/dest/contract_function_simulator/contract_function_simulator.d.ts +56 -0
  10. package/dest/contract_function_simulator/contract_function_simulator.d.ts.map +1 -0
  11. package/dest/contract_function_simulator/contract_function_simulator.js +301 -0
  12. package/dest/contract_function_simulator/execution_data_provider.d.ts +274 -0
  13. package/dest/contract_function_simulator/execution_data_provider.d.ts.map +1 -0
  14. package/dest/contract_function_simulator/execution_data_provider.js +14 -0
  15. package/dest/contract_function_simulator/execution_note_cache.d.ts +93 -0
  16. package/dest/contract_function_simulator/execution_note_cache.d.ts.map +1 -0
  17. package/dest/contract_function_simulator/execution_note_cache.js +183 -0
  18. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts +16 -0
  19. package/dest/contract_function_simulator/execution_tagging_index_cache.d.ts.map +1 -0
  20. package/dest/contract_function_simulator/execution_tagging_index_cache.js +26 -0
  21. package/dest/contract_function_simulator/hashed_values_cache.d.ts +28 -0
  22. package/dest/contract_function_simulator/hashed_values_cache.d.ts.map +1 -0
  23. package/dest/contract_function_simulator/hashed_values_cache.js +36 -0
  24. package/dest/contract_function_simulator/index.d.ts +14 -0
  25. package/dest/contract_function_simulator/index.d.ts.map +1 -0
  26. package/dest/contract_function_simulator/index.js +12 -0
  27. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts +20 -0
  28. package/dest/contract_function_simulator/noir-structs/event_validation_request.d.ts.map +1 -0
  29. package/dest/contract_function_simulator/noir-structs/event_validation_request.js +37 -0
  30. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts +15 -0
  31. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.d.ts.map +1 -0
  32. package/dest/contract_function_simulator/noir-structs/log_retrieval_request.js +25 -0
  33. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts +17 -0
  34. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.d.ts.map +1 -0
  35. package/dest/contract_function_simulator/noir-structs/log_retrieval_response.js +65 -0
  36. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts +22 -0
  37. package/dest/contract_function_simulator/noir-structs/note_validation_request.d.ts.map +1 -0
  38. package/dest/contract_function_simulator/noir-structs/note_validation_request.js +42 -0
  39. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts +22 -0
  40. package/dest/contract_function_simulator/noir-structs/utility_context.d.ts.map +1 -0
  41. package/dest/contract_function_simulator/noir-structs/utility_context.js +33 -0
  42. package/dest/contract_function_simulator/oracle/index.d.ts +14 -0
  43. package/dest/contract_function_simulator/oracle/index.d.ts.map +1 -0
  44. package/dest/contract_function_simulator/oracle/index.js +2 -0
  45. package/dest/contract_function_simulator/oracle/interfaces.d.ts +97 -0
  46. package/dest/contract_function_simulator/oracle/interfaces.d.ts.map +1 -0
  47. package/dest/contract_function_simulator/oracle/interfaces.js +4 -0
  48. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts +19 -0
  49. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.d.ts.map +1 -0
  50. package/dest/contract_function_simulator/oracle/message_load_oracle_inputs.js +24 -0
  51. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts +22 -0
  52. package/dest/contract_function_simulator/oracle/note_packing_utils.d.ts.map +1 -0
  53. package/dest/contract_function_simulator/oracle/note_packing_utils.js +49 -0
  54. package/dest/contract_function_simulator/oracle/oracle.d.ts +57 -0
  55. package/dest/contract_function_simulator/oracle/oracle.d.ts.map +1 -0
  56. package/dest/contract_function_simulator/oracle/oracle.js +328 -0
  57. package/dest/contract_function_simulator/oracle/private_execution.d.ts +48 -0
  58. package/dest/contract_function_simulator/oracle/private_execution.d.ts.map +1 -0
  59. package/dest/contract_function_simulator/oracle/private_execution.js +123 -0
  60. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts +236 -0
  61. package/dest/contract_function_simulator/oracle/private_execution_oracle.d.ts.map +1 -0
  62. package/dest/contract_function_simulator/oracle/private_execution_oracle.js +417 -0
  63. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts +154 -0
  64. package/dest/contract_function_simulator/oracle/utility_execution_oracle.d.ts.map +1 -0
  65. package/dest/contract_function_simulator/oracle/utility_execution_oracle.js +265 -0
  66. package/dest/contract_function_simulator/pick_notes.d.ts +85 -0
  67. package/dest/contract_function_simulator/pick_notes.d.ts.map +1 -0
  68. package/dest/contract_function_simulator/pick_notes.js +51 -0
  69. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts +6 -0
  70. package/dest/contract_function_simulator/proxied_contract_data_source.d.ts.map +1 -0
  71. package/dest/contract_function_simulator/proxied_contract_data_source.js +62 -0
  72. package/dest/contract_function_simulator/proxied_node.d.ts +9 -0
  73. package/dest/contract_function_simulator/proxied_node.d.ts.map +1 -0
  74. package/dest/contract_function_simulator/proxied_node.js +27 -0
  75. package/dest/contract_function_simulator/pxe_oracle_interface.d.ts +122 -0
  76. package/dest/contract_function_simulator/pxe_oracle_interface.d.ts.map +1 -0
  77. package/dest/contract_function_simulator/pxe_oracle_interface.js +701 -0
  78. package/dest/entrypoints/client/bundle/index.d.ts +4 -2
  79. package/dest/entrypoints/client/bundle/index.d.ts.map +1 -1
  80. package/dest/entrypoints/client/bundle/index.js +3 -2
  81. package/dest/entrypoints/client/bundle/utils.d.ts +9 -9
  82. package/dest/entrypoints/client/bundle/utils.d.ts.map +1 -1
  83. package/dest/entrypoints/client/bundle/utils.js +18 -12
  84. package/dest/entrypoints/client/lazy/index.d.ts +4 -2
  85. package/dest/entrypoints/client/lazy/index.d.ts.map +1 -1
  86. package/dest/entrypoints/client/lazy/index.js +3 -2
  87. package/dest/entrypoints/client/lazy/utils.d.ts +8 -8
  88. package/dest/entrypoints/client/lazy/utils.d.ts.map +1 -1
  89. package/dest/entrypoints/client/lazy/utils.js +17 -11
  90. package/dest/entrypoints/{client/pxe_creation_options.d.ts → pxe_creation_options.d.ts} +4 -1
  91. package/dest/entrypoints/pxe_creation_options.d.ts.map +1 -0
  92. package/dest/entrypoints/server/index.d.ts +5 -3
  93. package/dest/entrypoints/server/index.d.ts.map +1 -1
  94. package/dest/entrypoints/server/index.js +4 -3
  95. package/dest/entrypoints/server/utils.d.ts +7 -15
  96. package/dest/entrypoints/server/utils.d.ts.map +1 -1
  97. package/dest/entrypoints/server/utils.js +34 -28
  98. package/dest/{pxe_service/error_enriching.d.ts → error_enriching.d.ts} +1 -1
  99. package/dest/error_enriching.d.ts.map +1 -0
  100. package/dest/{pxe_service/error_enriching.js → error_enriching.js} +26 -18
  101. package/dest/oracle_version.d.ts +3 -0
  102. package/dest/oracle_version.d.ts.map +1 -0
  103. package/dest/oracle_version.js +10 -0
  104. package/dest/{kernel_prover → private_kernel}/hints/build_private_kernel_reset_private_inputs.d.ts +6 -6
  105. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.d.ts.map +1 -0
  106. package/dest/private_kernel/hints/build_private_kernel_reset_private_inputs.js +271 -0
  107. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts +4 -0
  108. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.d.ts.map +1 -0
  109. package/dest/private_kernel/hints/compute_tx_include_by_timestamp.js +41 -0
  110. package/dest/private_kernel/hints/index.d.ts +3 -0
  111. package/dest/private_kernel/hints/index.d.ts.map +1 -0
  112. package/dest/{kernel_prover → private_kernel}/hints/index.js +1 -0
  113. package/dest/private_kernel/index.d.ts +3 -0
  114. package/dest/private_kernel/index.d.ts.map +1 -0
  115. package/dest/private_kernel/index.js +2 -0
  116. package/dest/private_kernel/private_kernel_execution_prover.d.ts +44 -0
  117. package/dest/private_kernel/private_kernel_execution_prover.d.ts.map +1 -0
  118. package/dest/private_kernel/private_kernel_execution_prover.js +285 -0
  119. package/dest/{kernel_prover/proving_data_oracle.d.ts → private_kernel/private_kernel_oracle.d.ts} +17 -28
  120. package/dest/private_kernel/private_kernel_oracle.d.ts.map +1 -0
  121. package/dest/private_kernel/private_kernel_oracle.js +4 -0
  122. package/dest/{kernel_oracle/index.d.ts → private_kernel/private_kernel_oracle_impl.d.ts} +8 -8
  123. package/dest/private_kernel/private_kernel_oracle_impl.d.ts.map +1 -0
  124. package/dest/{kernel_oracle/index.js → private_kernel/private_kernel_oracle_impl.js} +19 -9
  125. package/dest/pxe.d.ts +233 -0
  126. package/dest/pxe.d.ts.map +1 -0
  127. package/dest/pxe.js +789 -0
  128. package/dest/storage/address_data_provider/address_data_provider.d.ts +1 -3
  129. package/dest/storage/address_data_provider/address_data_provider.d.ts.map +1 -1
  130. package/dest/storage/address_data_provider/address_data_provider.js +0 -3
  131. package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts +14 -5
  132. package/dest/storage/capsule_data_provider/capsule_data_provider.d.ts.map +1 -1
  133. package/dest/storage/capsule_data_provider/capsule_data_provider.js +85 -24
  134. package/dest/storage/contract_data_provider/contract_data_provider.d.ts +12 -47
  135. package/dest/storage/contract_data_provider/contract_data_provider.d.ts.map +1 -1
  136. package/dest/storage/contract_data_provider/contract_data_provider.js +92 -70
  137. package/dest/storage/contract_data_provider/index.d.ts +0 -1
  138. package/dest/storage/contract_data_provider/index.d.ts.map +1 -1
  139. package/dest/storage/contract_data_provider/index.js +0 -1
  140. package/dest/storage/contract_data_provider/private_functions_tree.d.ts +2 -41
  141. package/dest/storage/contract_data_provider/private_functions_tree.d.ts.map +1 -1
  142. package/dest/storage/contract_data_provider/private_functions_tree.js +9 -61
  143. package/dest/storage/index.d.ts +2 -3
  144. package/dest/storage/index.d.ts.map +1 -1
  145. package/dest/storage/index.js +2 -3
  146. package/dest/storage/metadata.d.ts +2 -0
  147. package/dest/storage/metadata.d.ts.map +1 -0
  148. package/dest/storage/metadata.js +1 -0
  149. package/dest/storage/note_data_provider/note_dao.d.ts +16 -22
  150. package/dest/storage/note_data_provider/note_dao.d.ts.map +1 -1
  151. package/dest/storage/note_data_provider/note_dao.js +16 -20
  152. package/dest/storage/note_data_provider/note_data_provider.d.ts +71 -8
  153. package/dest/storage/note_data_provider/note_data_provider.d.ts.map +1 -1
  154. package/dest/storage/note_data_provider/note_data_provider.js +133 -74
  155. package/dest/storage/private_event_data_provider/private_event_data_provider.d.ts +43 -0
  156. package/dest/storage/private_event_data_provider/private_event_data_provider.d.ts.map +1 -0
  157. package/dest/storage/private_event_data_provider/private_event_data_provider.js +104 -0
  158. package/dest/storage/sync_data_provider/sync_data_provider.d.ts +2 -4
  159. package/dest/storage/sync_data_provider/sync_data_provider.d.ts.map +1 -1
  160. package/dest/storage/sync_data_provider/sync_data_provider.js +2 -5
  161. package/dest/storage/tagging_data_provider/tagging_data_provider.d.ts +28 -6
  162. package/dest/storage/tagging_data_provider/tagging_data_provider.d.ts.map +1 -1
  163. package/dest/storage/tagging_data_provider/tagging_data_provider.js +48 -24
  164. package/dest/synchronizer/synchronizer.d.ts +7 -9
  165. package/dest/synchronizer/synchronizer.d.ts.map +1 -1
  166. package/dest/synchronizer/synchronizer.js +17 -19
  167. package/dest/tagging/constants.d.ts +2 -0
  168. package/dest/tagging/constants.d.ts.map +1 -0
  169. package/dest/tagging/constants.js +2 -0
  170. package/dest/tagging/index.d.ts +7 -0
  171. package/dest/tagging/index.d.ts.map +1 -0
  172. package/dest/tagging/index.js +5 -0
  173. package/dest/tagging/siloed_tag.d.ts +14 -0
  174. package/dest/tagging/siloed_tag.d.ts.map +1 -0
  175. package/dest/tagging/siloed_tag.js +20 -0
  176. package/dest/tagging/tag.d.ts +12 -0
  177. package/dest/tagging/tag.d.ts.map +1 -0
  178. package/dest/tagging/tag.js +17 -0
  179. package/dest/tagging/utils.d.ts +18 -0
  180. package/dest/tagging/utils.d.ts.map +1 -0
  181. package/dest/tagging/utils.js +24 -0
  182. package/package.json +34 -32
  183. package/src/bin/check_oracle_version.ts +50 -0
  184. package/src/config/index.ts +20 -33
  185. package/src/config/package_info.ts +1 -1
  186. package/src/contract_function_simulator/contract_function_simulator.ts +548 -0
  187. package/src/contract_function_simulator/execution_data_provider.ts +343 -0
  188. package/src/contract_function_simulator/execution_note_cache.ts +222 -0
  189. package/src/contract_function_simulator/execution_tagging_index_cache.ts +32 -0
  190. package/src/contract_function_simulator/hashed_values_cache.ts +47 -0
  191. package/src/contract_function_simulator/index.ts +13 -0
  192. package/src/contract_function_simulator/noir-structs/event_validation_request.ts +47 -0
  193. package/src/contract_function_simulator/noir-structs/log_retrieval_request.ts +27 -0
  194. package/src/contract_function_simulator/noir-structs/log_retrieval_response.ts +69 -0
  195. package/src/contract_function_simulator/noir-structs/note_validation_request.ts +52 -0
  196. package/src/contract_function_simulator/noir-structs/utility_context.ts +42 -0
  197. package/src/contract_function_simulator/oracle/index.ts +16 -0
  198. package/src/contract_function_simulator/oracle/interfaces.ts +160 -0
  199. package/src/contract_function_simulator/oracle/message_load_oracle_inputs.ts +23 -0
  200. package/src/contract_function_simulator/oracle/note_packing_utils.ts +52 -0
  201. package/src/contract_function_simulator/oracle/oracle.ts +575 -0
  202. package/src/contract_function_simulator/oracle/private_execution.ts +207 -0
  203. package/src/contract_function_simulator/oracle/private_execution_oracle.ts +625 -0
  204. package/src/contract_function_simulator/oracle/utility_execution_oracle.ts +358 -0
  205. package/src/contract_function_simulator/pick_notes.ts +141 -0
  206. package/src/contract_function_simulator/proxied_contract_data_source.ts +66 -0
  207. package/src/contract_function_simulator/proxied_node.ts +33 -0
  208. package/src/contract_function_simulator/pxe_oracle_interface.ts +1019 -0
  209. package/src/entrypoints/client/bundle/index.ts +4 -2
  210. package/src/entrypoints/client/bundle/utils.ts +36 -36
  211. package/src/entrypoints/client/lazy/index.ts +4 -2
  212. package/src/entrypoints/client/lazy/utils.ts +36 -31
  213. package/src/entrypoints/{client/pxe_creation_options.ts → pxe_creation_options.ts} +4 -1
  214. package/src/entrypoints/server/index.ts +5 -3
  215. package/src/entrypoints/server/utils.ts +69 -47
  216. package/src/{pxe_service/error_enriching.ts → error_enriching.ts} +36 -27
  217. package/src/oracle_version.ts +11 -0
  218. package/src/{kernel_prover → private_kernel}/hints/build_private_kernel_reset_private_inputs.ts +158 -142
  219. package/src/private_kernel/hints/compute_tx_include_by_timestamp.ts +58 -0
  220. package/src/{kernel_prover → private_kernel}/hints/index.ts +1 -0
  221. package/src/private_kernel/index.ts +2 -0
  222. package/src/private_kernel/private_kernel_execution_prover.ts +436 -0
  223. package/src/{kernel_prover/proving_data_oracle.ts → private_kernel/private_kernel_oracle.ts} +17 -29
  224. package/src/{kernel_oracle/index.ts → private_kernel/private_kernel_oracle_impl.ts} +30 -15
  225. package/src/pxe.ts +1113 -0
  226. package/src/storage/address_data_provider/address_data_provider.ts +1 -7
  227. package/src/storage/capsule_data_provider/capsule_data_provider.ts +97 -30
  228. package/src/storage/contract_data_provider/contract_data_provider.ts +114 -81
  229. package/src/storage/contract_data_provider/index.ts +0 -1
  230. package/src/storage/contract_data_provider/private_functions_tree.ts +11 -75
  231. package/src/storage/index.ts +2 -4
  232. package/src/storage/metadata.ts +1 -0
  233. package/src/storage/note_data_provider/note_dao.ts +19 -27
  234. package/src/storage/note_data_provider/note_data_provider.ts +161 -113
  235. package/src/storage/private_event_data_provider/private_event_data_provider.ts +148 -0
  236. package/src/storage/sync_data_provider/sync_data_provider.ts +4 -10
  237. package/src/storage/tagging_data_provider/tagging_data_provider.ts +58 -30
  238. package/src/synchronizer/synchronizer.ts +21 -22
  239. package/src/tagging/constants.ts +2 -0
  240. package/src/tagging/index.ts +6 -0
  241. package/src/tagging/siloed_tag.ts +22 -0
  242. package/src/tagging/tag.ts +16 -0
  243. package/src/tagging/utils.ts +31 -0
  244. package/dest/bin/index.d.ts +0 -3
  245. package/dest/bin/index.d.ts.map +0 -1
  246. package/dest/bin/index.js +0 -28
  247. package/dest/entrypoints/client/pxe_creation_options.d.ts.map +0 -1
  248. package/dest/kernel_oracle/index.d.ts.map +0 -1
  249. package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.d.ts.map +0 -1
  250. package/dest/kernel_prover/hints/build_private_kernel_reset_private_inputs.js +0 -270
  251. package/dest/kernel_prover/hints/index.d.ts +0 -2
  252. package/dest/kernel_prover/hints/index.d.ts.map +0 -1
  253. package/dest/kernel_prover/index.d.ts +0 -3
  254. package/dest/kernel_prover/index.d.ts.map +0 -1
  255. package/dest/kernel_prover/index.js +0 -2
  256. package/dest/kernel_prover/kernel_prover.d.ts +0 -38
  257. package/dest/kernel_prover/kernel_prover.d.ts.map +0 -1
  258. package/dest/kernel_prover/kernel_prover.js +0 -217
  259. package/dest/kernel_prover/proving_data_oracle.d.ts.map +0 -1
  260. package/dest/kernel_prover/proving_data_oracle.js +0 -4
  261. package/dest/note_decryption_utils/add_public_values_to_payload.d.ts +0 -11
  262. package/dest/note_decryption_utils/add_public_values_to_payload.d.ts.map +0 -1
  263. package/dest/note_decryption_utils/add_public_values_to_payload.js +0 -47
  264. package/dest/pxe_http/index.d.ts +0 -2
  265. package/dest/pxe_http/index.d.ts.map +0 -1
  266. package/dest/pxe_http/index.js +0 -1
  267. package/dest/pxe_http/pxe_http_server.d.ts +0 -16
  268. package/dest/pxe_http/pxe_http_server.d.ts.map +0 -1
  269. package/dest/pxe_http/pxe_http_server.js +0 -27
  270. package/dest/pxe_oracle_interface/index.d.ts +0 -159
  271. package/dest/pxe_oracle_interface/index.d.ts.map +0 -1
  272. package/dest/pxe_oracle_interface/index.js +0 -692
  273. package/dest/pxe_oracle_interface/tagging_utils.d.ts +0 -17
  274. package/dest/pxe_oracle_interface/tagging_utils.d.ts.map +0 -1
  275. package/dest/pxe_oracle_interface/tagging_utils.js +0 -23
  276. package/dest/pxe_service/error_enriching.d.ts.map +0 -1
  277. package/dest/pxe_service/index.d.ts +0 -3
  278. package/dest/pxe_service/index.d.ts.map +0 -1
  279. package/dest/pxe_service/index.js +0 -2
  280. package/dest/pxe_service/pxe_service.d.ts +0 -111
  281. package/dest/pxe_service/pxe_service.d.ts.map +0 -1
  282. package/dest/pxe_service/pxe_service.js +0 -664
  283. package/dest/storage/auth_witness_data_provider/auth_witness_data_provider.d.ts +0 -11
  284. package/dest/storage/auth_witness_data_provider/auth_witness_data_provider.d.ts.map +0 -1
  285. package/dest/storage/auth_witness_data_provider/auth_witness_data_provider.js +0 -20
  286. package/dest/storage/auth_witness_data_provider/index.d.ts +0 -2
  287. package/dest/storage/auth_witness_data_provider/index.d.ts.map +0 -1
  288. package/dest/storage/auth_witness_data_provider/index.js +0 -1
  289. package/dest/storage/data_provider.d.ts +0 -4
  290. package/dest/storage/data_provider.d.ts.map +0 -1
  291. package/dest/storage/data_provider.js +0 -1
  292. package/dest/test/pxe_test_suite.d.ts +0 -3
  293. package/dest/test/pxe_test_suite.d.ts.map +0 -1
  294. package/dest/test/pxe_test_suite.js +0 -97
  295. package/src/bin/index.ts +0 -38
  296. package/src/kernel_prover/index.ts +0 -2
  297. package/src/kernel_prover/kernel_prover.ts +0 -351
  298. package/src/note_decryption_utils/add_public_values_to_payload.ts +0 -64
  299. package/src/pxe_http/index.ts +0 -1
  300. package/src/pxe_http/pxe_http_server.ts +0 -29
  301. package/src/pxe_oracle_interface/index.ts +0 -925
  302. package/src/pxe_oracle_interface/tagging_utils.ts +0 -32
  303. package/src/pxe_service/index.ts +0 -2
  304. package/src/pxe_service/pxe_service.ts +0 -949
  305. package/src/storage/auth_witness_data_provider/auth_witness_data_provider.ts +0 -34
  306. package/src/storage/auth_witness_data_provider/index.ts +0 -1
  307. package/src/storage/data_provider.ts +0 -3
  308. package/src/test/pxe_test_suite.ts +0 -111
  309. /package/dest/entrypoints/{client/pxe_creation_options.js → pxe_creation_options.js} +0 -0
@@ -4,8 +4,8 @@ import {
4
4
  MAX_NOTE_HASH_READ_REQUESTS_PER_TX,
5
5
  MAX_NULLIFIERS_PER_TX,
6
6
  MAX_NULLIFIER_READ_REQUESTS_PER_TX,
7
+ MAX_PRIVATE_LOGS_PER_TX,
7
8
  NULLIFIER_TREE_HEIGHT,
8
- VK_TREE_HEIGHT,
9
9
  } from '@aztec/constants';
10
10
  import { makeTuple } from '@aztec/foundation/array';
11
11
  import { padArrayEnd } from '@aztec/foundation/collection';
@@ -14,7 +14,9 @@ import { type Tuple, 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 {
17
+ ClaimedLengthArray,
17
18
  KeyValidationHint,
19
+ PaddedSideEffects,
18
20
  type PrivateCircuitPublicInputs,
19
21
  type PrivateKernelCircuitPublicInputs,
20
22
  PrivateKernelData,
@@ -23,40 +25,38 @@ import {
23
25
  PrivateKernelResetHints,
24
26
  type PrivateKernelSimulateOutput,
25
27
  type ReadRequest,
26
- ReadRequestResetStates,
27
- ReadRequestState,
28
+ ReadRequestActionEnum,
29
+ ReadRequestResetActions,
28
30
  type ScopedKeyValidationRequestAndGenerator,
29
31
  ScopedNoteHash,
30
32
  ScopedNullifier,
31
33
  ScopedReadRequest,
32
- TransientDataIndexHint,
33
- buildNoteHashReadRequestHintsFromResetStates,
34
- buildNullifierReadRequestHintsFromResetStates,
34
+ TransientDataSquashingHint,
35
+ buildNoteHashReadRequestHintsFromResetActions,
36
+ buildNullifierReadRequestHintsFromResetActions,
35
37
  buildTransientDataHints,
36
- countAccumulatedItems,
37
38
  findPrivateKernelResetDimensions,
38
- getNonEmptyItems,
39
- getNoteHashReadRequestResetStates,
40
- getNullifierReadRequestResetStates,
39
+ getNoteHashReadRequestResetActions,
40
+ getNullifierReadRequestResetActions,
41
41
  privateKernelResetDimensionNames,
42
42
  } from '@aztec/stdlib/kernel';
43
43
  import { type PrivateCallExecutionResult, collectNested } from '@aztec/stdlib/tx';
44
+ import { VkData } from '@aztec/stdlib/vks';
44
45
 
45
- import type { ProvingDataOracle } from '../proving_data_oracle.js';
46
+ import type { PrivateKernelOracle } from '../private_kernel_oracle.js';
46
47
 
47
- function collectNestedReadRequests(
48
+ function collectNestedReadRequests<N extends number>(
48
49
  executionStack: PrivateCallExecutionResult[],
49
- extractReadRequests: (execution: PrivateCallExecutionResult) => ReadRequest[],
50
+ extractReadRequests: (execution: PrivateCallExecutionResult) => ClaimedLengthArray<ReadRequest, N>,
50
51
  ): ScopedReadRequest[] {
51
52
  return collectNested(executionStack, executionResult => {
52
- const nonEmptyReadRequests = getNonEmptyItems(extractReadRequests(executionResult));
53
- return nonEmptyReadRequests.map(
54
- readRequest => new ScopedReadRequest(readRequest, executionResult.publicInputs.callContext.contractAddress),
55
- );
53
+ return extractReadRequests(executionResult)
54
+ .getActiveItems()
55
+ .map(readRequest => new ScopedReadRequest(readRequest, executionResult.publicInputs.callContext.contractAddress));
56
56
  });
57
57
  }
58
58
 
59
- function getNullifierMembershipWitnessResolver(oracle: ProvingDataOracle) {
59
+ function getNullifierMembershipWitnessResolver(oracle: PrivateKernelOracle) {
60
60
  return async (nullifier: Fr) => {
61
61
  const res = await oracle.getNullifierMembershipWitness(nullifier);
62
62
  if (!res) {
@@ -72,23 +72,21 @@ function getNullifierMembershipWitnessResolver(oracle: ProvingDataOracle) {
72
72
  }
73
73
 
74
74
  async function getMasterSecretKeysAndAppKeyGenerators(
75
- keyValidationRequests: Tuple<ScopedKeyValidationRequestAndGenerator, typeof MAX_KEY_VALIDATION_REQUESTS_PER_TX>,
76
- oracle: ProvingDataOracle,
75
+ keyValidationRequests: ClaimedLengthArray<
76
+ ScopedKeyValidationRequestAndGenerator,
77
+ typeof MAX_KEY_VALIDATION_REQUESTS_PER_TX
78
+ >,
79
+ numRequestsToVerify: number,
80
+ oracle: PrivateKernelOracle,
77
81
  ) {
78
- const keysHints = [];
79
- for (let i = 0; i < keyValidationRequests.length; ++i) {
80
- const request = keyValidationRequests[i].request;
81
- if (request.isEmpty()) {
82
- break;
83
- }
84
- const secretKeys = await oracle.getMasterSecretKey(request.request.pkM);
85
- keysHints.push(new KeyValidationHint(secretKeys, i));
86
- }
87
- return padArrayEnd(
88
- keysHints,
89
- KeyValidationHint.nada(MAX_KEY_VALIDATION_REQUESTS_PER_TX),
90
- MAX_KEY_VALIDATION_REQUESTS_PER_TX,
82
+ const numRequestsToProcess = Math.min(keyValidationRequests.claimedLength, numRequestsToVerify);
83
+ const keysHints = await Promise.all(
84
+ keyValidationRequests.array.slice(0, numRequestsToProcess).map(async ({ request }) => {
85
+ const secretKeys = await oracle.getMasterSecretKey(request.request.pkM);
86
+ return new KeyValidationHint(secretKeys);
87
+ }),
91
88
  );
89
+ return padArrayEnd(keysHints, KeyValidationHint.empty(), MAX_KEY_VALIDATION_REQUESTS_PER_TX);
92
90
  }
93
91
 
94
92
  export class PrivateKernelResetPrivateInputsBuilder {
@@ -96,10 +94,10 @@ export class PrivateKernelResetPrivateInputsBuilder {
96
94
  // If there's no next iteration, it's the final reset.
97
95
  private nextIteration?: PrivateCircuitPublicInputs;
98
96
 
99
- private noteHashResetStates: ReadRequestResetStates<typeof MAX_NOTE_HASH_READ_REQUESTS_PER_TX>;
100
- private nullifierResetStates: ReadRequestResetStates<typeof MAX_NULLIFIER_READ_REQUESTS_PER_TX>;
97
+ private noteHashResetActions: ReadRequestResetActions<typeof MAX_NOTE_HASH_READ_REQUESTS_PER_TX>;
98
+ private nullifierResetActions: ReadRequestResetActions<typeof MAX_NULLIFIER_READ_REQUESTS_PER_TX>;
101
99
  private numTransientData?: number;
102
- private transientDataIndexHints: Tuple<TransientDataIndexHint, typeof MAX_NULLIFIERS_PER_TX>;
100
+ private transientDataSquashingHints: Tuple<TransientDataSquashingHint, typeof MAX_NULLIFIERS_PER_TX>;
103
101
  private requestedDimensions: PrivateKernelResetDimensions;
104
102
 
105
103
  constructor(
@@ -110,11 +108,11 @@ export class PrivateKernelResetPrivateInputsBuilder {
110
108
  ) {
111
109
  this.previousKernel = previousKernelOutput.publicInputs;
112
110
  this.requestedDimensions = PrivateKernelResetDimensions.empty();
113
- this.noteHashResetStates = ReadRequestResetStates.empty(MAX_NOTE_HASH_READ_REQUESTS_PER_TX);
114
- this.nullifierResetStates = ReadRequestResetStates.empty(MAX_NULLIFIER_READ_REQUESTS_PER_TX);
115
- this.transientDataIndexHints = makeTuple(
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(
116
114
  MAX_NULLIFIERS_PER_TX,
117
- () => new TransientDataIndexHint(MAX_NULLIFIERS_PER_TX, MAX_NOTE_HASHES_PER_TX),
115
+ () => new TransientDataSquashingHint(MAX_NULLIFIERS_PER_TX, MAX_NOTE_HASHES_PER_TX),
118
116
  );
119
117
  this.nextIteration = executionStack[this.executionStack.length - 1]?.publicInputs;
120
118
  }
@@ -143,7 +141,7 @@ export class PrivateKernelResetPrivateInputsBuilder {
143
141
  }
144
142
  }
145
143
 
146
- async build(oracle: ProvingDataOracle, noteHashLeafIndexMap: Map<bigint, bigint>) {
144
+ async build(oracle: PrivateKernelOracle, noteHashLeafIndexMap: Map<bigint, bigint>) {
147
145
  if (privateKernelResetDimensionNames.every(name => !this.requestedDimensions[name])) {
148
146
  throw new Error('Reset is not required.');
149
147
  }
@@ -162,122 +160,132 @@ export class PrivateKernelResetPrivateInputsBuilder {
162
160
  allowRemainder,
163
161
  );
164
162
 
165
- const previousVkMembershipWitness = await oracle.getVkMembershipWitness(this.previousKernelOutput.verificationKey);
166
- const previousKernelData = new PrivateKernelData(
167
- this.previousKernelOutput.publicInputs,
163
+ const previousVkMembershipWitness = await oracle.getVkMembershipWitness(
164
+ this.previousKernelOutput.verificationKey.keyAsFields,
165
+ );
166
+ const vkData = new VkData(
168
167
  this.previousKernelOutput.verificationKey,
169
168
  Number(previousVkMembershipWitness.leafIndex),
170
- assertLength<Fr, typeof VK_TREE_HEIGHT>(previousVkMembershipWitness.siblingPath, VK_TREE_HEIGHT),
169
+ previousVkMembershipWitness.siblingPath,
171
170
  );
171
+ const previousKernelData = new PrivateKernelData(this.previousKernelOutput.publicInputs, vkData);
172
172
 
173
- this.reduceReadRequestStates(
174
- this.noteHashResetStates,
175
- dimensions.NOTE_HASH_PENDING_AMOUNT,
176
- dimensions.NOTE_HASH_SETTLED_AMOUNT,
173
+ this.reduceReadRequestActions(
174
+ this.noteHashResetActions,
175
+ dimensions.NOTE_HASH_PENDING_READ,
176
+ dimensions.NOTE_HASH_SETTLED_READ,
177
177
  );
178
- this.reduceReadRequestStates(
179
- this.nullifierResetStates,
180
- dimensions.NULLIFIER_PENDING_AMOUNT,
181
- dimensions.NULLIFIER_SETTLED_AMOUNT,
178
+ this.reduceReadRequestActions(
179
+ this.nullifierResetActions,
180
+ dimensions.NULLIFIER_PENDING_READ,
181
+ dimensions.NULLIFIER_SETTLED_READ,
182
182
  );
183
183
 
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
+
184
187
  return new PrivateKernelResetCircuitPrivateInputs(
185
188
  previousKernelData,
189
+ paddedSideEffects,
186
190
  new PrivateKernelResetHints(
187
- await buildNoteHashReadRequestHintsFromResetStates(
191
+ await buildNoteHashReadRequestHintsFromResetActions(
188
192
  oracle,
189
193
  this.previousKernel.validationRequests.noteHashReadRequests,
190
194
  this.previousKernel.end.noteHashes,
191
- this.noteHashResetStates,
195
+ this.noteHashResetActions,
192
196
  noteHashLeafIndexMap,
193
197
  ),
194
- await buildNullifierReadRequestHintsFromResetStates(
198
+ await buildNullifierReadRequestHintsFromResetActions(
195
199
  { getNullifierMembershipWitness: getNullifierMembershipWitnessResolver(oracle) },
196
200
  this.previousKernel.validationRequests.nullifierReadRequests,
197
- this.nullifierResetStates,
201
+ this.nullifierResetActions,
198
202
  ),
199
203
  await getMasterSecretKeysAndAppKeyGenerators(
200
204
  this.previousKernel.validationRequests.scopedKeyValidationRequestsAndGenerators,
205
+ dimensions.KEY_VALIDATION,
201
206
  oracle,
202
207
  ),
203
- this.transientDataIndexHints,
208
+ this.transientDataSquashingHints,
204
209
  this.validationRequestsSplitCounter,
205
210
  ),
206
211
  dimensions,
207
212
  );
208
213
  }
209
214
 
210
- private reduceReadRequestStates<NUM_READS extends number>(
211
- resetStates: ReadRequestResetStates<NUM_READS>,
215
+ private reduceReadRequestActions<NUM_READS extends number>(
216
+ resetActions: ReadRequestResetActions<NUM_READS>,
212
217
  maxPending: number,
213
218
  maxSettled: number,
214
219
  ) {
215
220
  let numPending = 0;
216
221
  let numSettled = 0;
217
- for (let i = 0; i < resetStates.states.length; i++) {
218
- const state = resetStates.states[i];
219
- if (state === ReadRequestState.PENDING) {
222
+ for (let i = 0; i < resetActions.actions.length; i++) {
223
+ const action = resetActions.actions[i];
224
+ if (action === ReadRequestActionEnum.READ_AS_PENDING) {
220
225
  if (numPending < maxPending) {
221
226
  numPending++;
222
227
  } else {
223
- resetStates.states[i] = ReadRequestState.NADA;
228
+ resetActions.actions[i] = ReadRequestActionEnum.SKIP;
224
229
  }
225
- } else if (state === ReadRequestState.SETTLED) {
230
+ } else if (action === ReadRequestActionEnum.READ_AS_SETTLED) {
226
231
  if (numSettled < maxSettled) {
227
232
  numSettled++;
228
233
  } else {
229
- resetStates.states[i] = ReadRequestState.NADA;
234
+ resetActions.actions[i] = ReadRequestActionEnum.SKIP;
230
235
  }
231
236
  }
232
237
  }
233
238
 
234
- resetStates.pendingReadHints = resetStates.pendingReadHints.slice(0, maxPending);
239
+ resetActions.pendingReadHints = resetActions.pendingReadHints.slice(0, maxPending);
235
240
  }
236
241
 
237
242
  private needsResetNoteHashReadRequests(forceResetAll = false) {
238
- const numCurr = countAccumulatedItems(this.previousKernel.validationRequests.noteHashReadRequests);
239
- const numNext = this.nextIteration ? countAccumulatedItems(this.nextIteration.noteHashReadRequests) : 0;
243
+ const numCurr = this.previousKernel.validationRequests.noteHashReadRequests.claimedLength;
244
+ const numNext = this.nextIteration ? this.nextIteration.noteHashReadRequests.claimedLength : 0;
240
245
  const maxAmountToKeep = !this.nextIteration || forceResetAll ? 0 : MAX_NOTE_HASH_READ_REQUESTS_PER_TX;
241
246
  if (numCurr + numNext <= maxAmountToKeep) {
242
247
  return false;
243
248
  }
244
249
 
245
250
  const futureNoteHashes = collectNested(this.executionStack, executionResult => {
246
- const nonEmptyNoteHashes = getNonEmptyItems(executionResult.publicInputs.noteHashes);
247
- return nonEmptyNoteHashes.map(
248
- noteHash => new ScopedNoteHash(noteHash, executionResult.publicInputs.callContext.contractAddress),
249
- );
251
+ return executionResult.publicInputs.noteHashes
252
+ .getActiveItems()
253
+ .map(noteHash => new ScopedNoteHash(noteHash, executionResult.publicInputs.callContext.contractAddress));
250
254
  });
251
255
 
252
- const resetStates = getNoteHashReadRequestResetStates(
256
+ const resetActions = getNoteHashReadRequestResetActions(
253
257
  this.previousKernel.validationRequests.noteHashReadRequests,
254
258
  this.previousKernel.end.noteHashes,
255
259
  futureNoteHashes,
256
260
  );
257
261
 
258
- const numPendingReads = resetStates.pendingReadHints.length;
259
- const numSettledReads = resetStates.states.reduce(
260
- (accum, state) => accum + (state === ReadRequestState.SETTLED ? 1 : 0),
262
+ const numPendingReads = resetActions.pendingReadHints.length;
263
+ const numSettledReads = resetActions.actions.reduce(
264
+ (accum, action) => accum + (action === ReadRequestActionEnum.READ_AS_SETTLED ? 1 : 0),
261
265
  0,
262
266
  );
263
267
 
264
268
  if (!this.nextIteration) {
265
- this.noteHashResetStates = resetStates;
266
- this.requestedDimensions.NOTE_HASH_PENDING_AMOUNT = numPendingReads;
267
- this.requestedDimensions.NOTE_HASH_SETTLED_AMOUNT = numSettledReads;
269
+ this.noteHashResetActions = resetActions;
270
+ this.requestedDimensions.NOTE_HASH_PENDING_READ = numPendingReads;
271
+ this.requestedDimensions.NOTE_HASH_SETTLED_READ = numSettledReads;
268
272
  } else {
269
273
  // Pick only one dimension to reset if next iteration is not empty.
270
274
  if (numPendingReads > numSettledReads) {
271
- this.requestedDimensions.NOTE_HASH_PENDING_AMOUNT = numPendingReads;
272
- this.noteHashResetStates.states = assertLength(
273
- resetStates.states.map(state => (state === ReadRequestState.PENDING ? state : ReadRequestState.NADA)),
275
+ this.requestedDimensions.NOTE_HASH_PENDING_READ = numPendingReads;
276
+ this.noteHashResetActions.actions = assertLength(
277
+ resetActions.actions.map(action =>
278
+ action === ReadRequestActionEnum.READ_AS_PENDING ? action : ReadRequestActionEnum.SKIP,
279
+ ),
274
280
  MAX_NOTE_HASH_READ_REQUESTS_PER_TX,
275
281
  );
276
- this.noteHashResetStates.pendingReadHints = resetStates.pendingReadHints;
282
+ this.noteHashResetActions.pendingReadHints = resetActions.pendingReadHints;
277
283
  } else {
278
- this.requestedDimensions.NOTE_HASH_SETTLED_AMOUNT = numSettledReads;
279
- this.noteHashResetStates.states = assertLength(
280
- resetStates.states.map(state => (state === ReadRequestState.SETTLED ? state : ReadRequestState.NADA)),
284
+ this.requestedDimensions.NOTE_HASH_SETTLED_READ = numSettledReads;
285
+ this.noteHashResetActions.actions = assertLength(
286
+ resetActions.actions.map(action =>
287
+ action === ReadRequestActionEnum.READ_AS_SETTLED ? action : ReadRequestActionEnum.SKIP,
288
+ ),
281
289
  MAX_NOTE_HASH_READ_REQUESTS_PER_TX,
282
290
  );
283
291
  }
@@ -287,49 +295,52 @@ export class PrivateKernelResetPrivateInputsBuilder {
287
295
  }
288
296
 
289
297
  private needsResetNullifierReadRequests(forceResetAll = false) {
290
- const numCurr = countAccumulatedItems(this.previousKernel.validationRequests.nullifierReadRequests);
291
- const numNext = this.nextIteration ? countAccumulatedItems(this.nextIteration.nullifierReadRequests) : 0;
298
+ const numCurr = this.previousKernel.validationRequests.nullifierReadRequests.claimedLength;
299
+ const numNext = this.nextIteration ? this.nextIteration.nullifierReadRequests.claimedLength : 0;
292
300
  const maxAmountToKeep = !this.nextIteration || forceResetAll ? 0 : MAX_NULLIFIER_READ_REQUESTS_PER_TX;
293
301
  if (numCurr + numNext <= maxAmountToKeep) {
294
302
  return false;
295
303
  }
296
304
 
297
305
  const futureNullifiers = collectNested(this.executionStack, executionResult => {
298
- const nonEmptyNullifiers = getNonEmptyItems(executionResult.publicInputs.nullifiers);
299
- return nonEmptyNullifiers.map(
300
- nullifier => new ScopedNullifier(nullifier, executionResult.publicInputs.callContext.contractAddress),
301
- );
306
+ return executionResult.publicInputs.nullifiers
307
+ .getActiveItems()
308
+ .map(nullifier => new ScopedNullifier(nullifier, executionResult.publicInputs.callContext.contractAddress));
302
309
  });
303
310
 
304
- const resetStates = getNullifierReadRequestResetStates(
311
+ const resetActions = getNullifierReadRequestResetActions(
305
312
  this.previousKernel.validationRequests.nullifierReadRequests,
306
313
  this.previousKernel.end.nullifiers,
307
314
  futureNullifiers,
308
315
  );
309
316
 
310
- const numPendingReads = resetStates.pendingReadHints.length;
311
- const numSettledReads = resetStates.states.reduce(
312
- (accum, state) => accum + (state === ReadRequestState.SETTLED ? 1 : 0),
317
+ const numPendingReads = resetActions.pendingReadHints.length;
318
+ const numSettledReads = resetActions.actions.reduce(
319
+ (accum, action) => accum + (action === ReadRequestActionEnum.READ_AS_SETTLED ? 1 : 0),
313
320
  0,
314
321
  );
315
322
 
316
323
  if (!this.nextIteration) {
317
- this.nullifierResetStates = resetStates;
318
- this.requestedDimensions.NULLIFIER_PENDING_AMOUNT = numPendingReads;
319
- this.requestedDimensions.NULLIFIER_SETTLED_AMOUNT = numSettledReads;
324
+ this.nullifierResetActions = resetActions;
325
+ this.requestedDimensions.NULLIFIER_PENDING_READ = numPendingReads;
326
+ this.requestedDimensions.NULLIFIER_SETTLED_READ = numSettledReads;
320
327
  } else {
321
328
  // Pick only one dimension to reset if next iteration is not empty.
322
329
  if (numPendingReads > numSettledReads) {
323
- this.requestedDimensions.NULLIFIER_PENDING_AMOUNT = numPendingReads;
324
- this.nullifierResetStates.states = assertLength(
325
- resetStates.states.map(state => (state === ReadRequestState.PENDING ? state : ReadRequestState.NADA)),
330
+ this.requestedDimensions.NULLIFIER_PENDING_READ = numPendingReads;
331
+ this.nullifierResetActions.actions = assertLength(
332
+ resetActions.actions.map(action =>
333
+ action === ReadRequestActionEnum.READ_AS_PENDING ? action : ReadRequestActionEnum.SKIP,
334
+ ),
326
335
  MAX_NULLIFIER_READ_REQUESTS_PER_TX,
327
336
  );
328
- this.nullifierResetStates.pendingReadHints = resetStates.pendingReadHints;
337
+ this.nullifierResetActions.pendingReadHints = resetActions.pendingReadHints;
329
338
  } else {
330
- this.requestedDimensions.NULLIFIER_SETTLED_AMOUNT = numSettledReads;
331
- this.nullifierResetStates.states = assertLength(
332
- resetStates.states.map(state => (state === ReadRequestState.SETTLED ? state : ReadRequestState.NADA)),
339
+ this.requestedDimensions.NULLIFIER_SETTLED_READ = numSettledReads;
340
+ this.nullifierResetActions.actions = assertLength(
341
+ resetActions.actions.map(action =>
342
+ action === ReadRequestActionEnum.READ_AS_SETTLED ? action : ReadRequestActionEnum.SKIP,
343
+ ),
333
344
  MAX_NULLIFIER_READ_REQUESTS_PER_TX,
334
345
  );
335
346
  }
@@ -339,18 +350,14 @@ export class PrivateKernelResetPrivateInputsBuilder {
339
350
  }
340
351
 
341
352
  private needsResetNullifierKeys() {
342
- const numCurr = countAccumulatedItems(
343
- this.previousKernel.validationRequests.scopedKeyValidationRequestsAndGenerators,
344
- );
345
- const numNext = this.nextIteration
346
- ? countAccumulatedItems(this.nextIteration.keyValidationRequestsAndGenerators)
347
- : 0;
353
+ const numCurr = this.previousKernel.validationRequests.scopedKeyValidationRequestsAndGenerators.claimedLength;
354
+ const numNext = this.nextIteration ? this.nextIteration.keyValidationRequestsAndGenerators.claimedLength : 0;
348
355
  const maxAmountToKeep = !this.nextIteration ? 0 : MAX_KEY_VALIDATION_REQUESTS_PER_TX;
349
356
  if (numCurr + numNext <= maxAmountToKeep) {
350
357
  return false;
351
358
  }
352
359
 
353
- this.requestedDimensions.NULLIFIER_KEYS = numCurr;
360
+ this.requestedDimensions.KEY_VALIDATION = numCurr;
354
361
 
355
362
  return true;
356
363
  }
@@ -360,14 +367,16 @@ export class PrivateKernelResetPrivateInputsBuilder {
360
367
  this.numTransientData = 0;
361
368
 
362
369
  const nextAccumNoteHashes =
363
- countAccumulatedItems(this.previousKernel.end.noteHashes) +
364
- countAccumulatedItems(this.nextIteration?.noteHashes ?? []);
370
+ this.previousKernel.end.noteHashes.claimedLength + (this.nextIteration?.noteHashes.claimedLength ?? 0);
365
371
  const noteHashWillOverflow = nextAccumNoteHashes > MAX_NOTE_HASHES_PER_TX;
366
372
  const nextAccumNullifiers =
367
- countAccumulatedItems(this.previousKernel.end.nullifiers) +
368
- countAccumulatedItems(this.nextIteration?.nullifiers ?? []);
373
+ this.previousKernel.end.nullifiers.claimedLength + (this.nextIteration?.nullifiers.claimedLength ?? 0);
369
374
  const nullifierWillOverflow = nextAccumNullifiers > MAX_NULLIFIERS_PER_TX;
370
- if (this.nextIteration && !noteHashWillOverflow && !nullifierWillOverflow) {
375
+ const nextAccumLogs =
376
+ this.previousKernel.end.privateLogs.claimedLength + (this.nextIteration?.privateLogs.claimedLength ?? 0);
377
+ const logsWillOverflow = nextAccumLogs > MAX_PRIVATE_LOGS_PER_TX;
378
+
379
+ if (this.nextIteration && !noteHashWillOverflow && !nullifierWillOverflow && !logsWillOverflow) {
371
380
  return false;
372
381
  }
373
382
 
@@ -379,35 +388,36 @@ export class PrivateKernelResetPrivateInputsBuilder {
379
388
  this.executionStack,
380
389
  executionResult => executionResult.publicInputs.nullifierReadRequests,
381
390
  );
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).
382
393
  if (this.nextIteration) {
383
394
  // If it's not the final reset, only one dimension will be reset at a time.
384
395
  // The note hashes and nullifiers for the remaining read requests can't be squashed.
385
- futureNoteHashReads.push(
386
- ...this.previousKernel.validationRequests.noteHashReadRequests.filter(r => !r.isEmpty()),
387
- );
388
- futureNullifierReads.push(
389
- ...this.previousKernel.validationRequests.nullifierReadRequests.filter(r => !r.isEmpty()),
390
- );
396
+ futureNoteHashReads.push(...this.previousKernel.validationRequests.noteHashReadRequests.getActiveItems());
397
+ futureNullifierReads.push(...this.previousKernel.validationRequests.nullifierReadRequests.getActiveItems());
391
398
  }
392
399
 
393
- const { numTransientData, hints: transientDataIndexHints } = buildTransientDataHints(
400
+ const { numTransientData, hints: transientDataSquashingHints } = buildTransientDataHints(
394
401
  this.previousKernel.end.noteHashes,
395
402
  this.previousKernel.end.nullifiers,
396
403
  futureNoteHashReads,
397
404
  futureNullifierReads,
398
405
  this.noteHashNullifierCounterMap,
399
406
  this.validationRequestsSplitCounter,
400
- MAX_NOTE_HASHES_PER_TX,
401
- MAX_NULLIFIERS_PER_TX,
402
407
  );
403
408
 
404
409
  if (this.nextIteration && !numTransientData) {
405
410
  const forceResetAll = true;
406
411
  const canClearReadRequests =
407
412
  (noteHashWillOverflow && this.needsResetNoteHashReadRequests(forceResetAll)) ||
408
- (nullifierWillOverflow && this.needsResetNullifierReadRequests(forceResetAll));
413
+ (nullifierWillOverflow && this.needsResetNullifierReadRequests(forceResetAll)) ||
414
+ (logsWillOverflow && this.needsResetNoteHashReadRequests(forceResetAll));
409
415
  if (!canClearReadRequests) {
410
- const overflownData = noteHashWillOverflow ? 'note hashes' : 'nullifiers';
416
+ const overflownData = noteHashWillOverflow
417
+ ? 'note hashes'
418
+ : nullifierWillOverflow
419
+ ? 'nullifiers'
420
+ : 'private logs';
411
421
  throw new Error(`Number of ${overflownData} exceeds the limit.`);
412
422
  }
413
423
  // Clearing the read requests might not be enough to squash the overflown data.
@@ -416,8 +426,8 @@ export class PrivateKernelResetPrivateInputsBuilder {
416
426
  }
417
427
 
418
428
  this.numTransientData = numTransientData;
419
- this.transientDataIndexHints = transientDataIndexHints;
420
- this.requestedDimensions.TRANSIENT_DATA_AMOUNT = numTransientData;
429
+ this.transientDataSquashingHints = transientDataSquashingHints;
430
+ this.requestedDimensions.TRANSIENT_DATA_SQUASHING = numTransientData;
421
431
 
422
432
  return numTransientData > 0;
423
433
  }
@@ -427,9 +437,11 @@ export class PrivateKernelResetPrivateInputsBuilder {
427
437
  throw new Error('`needsResetTransientData` must be run before `needsSiloNoteHashes`.');
428
438
  }
429
439
 
430
- const numNoteHashes = this.previousKernel.end.noteHashes.filter(n => !n.contractAddress.isZero()).length;
440
+ const numNoteHashes = this.previousKernel.end.noteHashes
441
+ .getActiveItems()
442
+ .filter(n => !n.contractAddress.isZero()).length;
431
443
  const numToSilo = Math.max(0, numNoteHashes - this.numTransientData);
432
- this.requestedDimensions.NOTE_HASH_SILOING_AMOUNT = numToSilo;
444
+ this.requestedDimensions.NOTE_HASH_SILOING = numToSilo;
433
445
 
434
446
  return numToSilo > 0;
435
447
  }
@@ -439,13 +451,15 @@ export class PrivateKernelResetPrivateInputsBuilder {
439
451
  throw new Error('`needsResetTransientData` must be run before `needsSiloNullifiers`.');
440
452
  }
441
453
 
442
- const numNullifiers = this.previousKernel.end.nullifiers.filter(n => !n.contractAddress.isZero()).length;
454
+ const numNullifiers = this.previousKernel.end.nullifiers
455
+ .getActiveItems()
456
+ .filter(n => !n.contractAddress.isZero()).length;
443
457
  const numToSilo = Math.max(0, numNullifiers - this.numTransientData);
444
458
  // Include the first nullifier if there's something to silo.
445
459
  // The reset circuit checks that capped_size must be greater than or equal to all non-empty nullifiers.
446
460
  // Which includes the first nullifier, even though its contract address is always zero and doesn't need siloing.
447
461
  const cappedSize = numToSilo ? numToSilo + 1 : 0;
448
- this.requestedDimensions.NULLIFIER_SILOING_AMOUNT = cappedSize;
462
+ this.requestedDimensions.NULLIFIER_SILOING = cappedSize;
449
463
 
450
464
  return numToSilo > 0;
451
465
  }
@@ -456,16 +470,18 @@ export class PrivateKernelResetPrivateInputsBuilder {
456
470
  }
457
471
 
458
472
  const privateLogs = this.previousKernel.end.privateLogs;
459
- const numLogs = privateLogs.filter(l => !l.contractAddress.isZero()).length;
473
+ const numLogs = privateLogs.getActiveItems().filter(l => !l.contractAddress.isZero()).length;
460
474
 
461
475
  const noteHashes = this.previousKernel.end.noteHashes;
462
- const squashedNoteHashCounters = this.transientDataIndexHints
463
- .filter(h => h.noteHashIndex < noteHashes.length)
464
- .map(h => noteHashes[h.noteHashIndex].counter);
465
- const numSquashedLogs = privateLogs.filter(l => squashedNoteHashCounters.includes(l.inner.noteHashCounter)).length;
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;
466
482
 
467
483
  const numToSilo = numLogs - numSquashedLogs;
468
- this.requestedDimensions.PRIVATE_LOG_SILOING_AMOUNT = numToSilo;
484
+ this.requestedDimensions.PRIVATE_LOG_SILOING = numToSilo;
469
485
 
470
486
  return numToSilo > 0;
471
487
  }
@@ -0,0 +1,58 @@
1
+ import { MAX_INCLUDE_BY_TIMESTAMP_DURATION } from '@aztec/constants';
2
+ import type { PrivateKernelCircuitPublicInputs } from '@aztec/stdlib/kernel';
3
+ import type { UInt64 } from '@aztec/stdlib/types';
4
+
5
+ const ROUNDED_DURATIONS = [
6
+ 3600, // 1 hour
7
+ 1800, // 30 mins
8
+ 1, // 1 second
9
+ ];
10
+
11
+ function roundTimestamp(blockTimestamp: bigint, includeByTimestamp: bigint): UInt64 {
12
+ return ROUNDED_DURATIONS.reduce((timestamp, duration) => {
13
+ if (timestamp <= blockTimestamp) {
14
+ // The timestamp must be greater than the block timestamp.
15
+ // If it is too small, round it down again using a smaller duration.
16
+ const totalDuration = includeByTimestamp - blockTimestamp;
17
+ const roundedDuration = totalDuration - (totalDuration % BigInt(duration));
18
+ return blockTimestamp + roundedDuration;
19
+ }
20
+ return timestamp;
21
+ }, 0n);
22
+ }
23
+
24
+ export function computeTxIncludeByTimestamp(
25
+ previousKernel: PrivateKernelCircuitPublicInputs,
26
+ maxDuration = MAX_INCLUDE_BY_TIMESTAMP_DURATION,
27
+ ): UInt64 {
28
+ if (maxDuration > MAX_INCLUDE_BY_TIMESTAMP_DURATION) {
29
+ throw new Error(
30
+ `Custom max duration cannot be greater than the max allowed. Max allowed: ${MAX_INCLUDE_BY_TIMESTAMP_DURATION}. Custom value: ${maxDuration}.`,
31
+ );
32
+ }
33
+
34
+ const anchorBlockTimestamp = previousKernel.constants.anchorBlockHeader.globalVariables.timestamp;
35
+ const maxTimestamp = anchorBlockTimestamp + BigInt(maxDuration);
36
+ const includeByTimestamp = previousKernel.includeByTimestamp;
37
+
38
+ // If the includeByTimestamp set during the tx execution is greater than or equal to the max allowed duration,
39
+ // use the maximum allowed timestamp.
40
+ // Note: It shouldn't be larger than the max allowed duration, but we check for it anyway.
41
+ if (includeByTimestamp >= maxTimestamp) {
42
+ return maxTimestamp;
43
+ }
44
+
45
+ // Round it down to the nearest hour/min/second to reduce precision and avoid revealing the exact value.
46
+ // This makes it harder for others to infer what function calls may have been used to produce a specific timestamp.
47
+ const roundedTimestamp = roundTimestamp(anchorBlockTimestamp, includeByTimestamp);
48
+
49
+ // The tx can't be published if the timestamp is the same or less than the anchor block's timestamp.
50
+ // Future blocks will have a greater timestamp, so the tx would never be included.
51
+ if (roundedTimestamp <= anchorBlockTimestamp) {
52
+ throw new Error(
53
+ `Include-by timestamp must be greater than the anchor block timestamp. Anchor block timestamp: ${anchorBlockTimestamp}. Include-by timestamp: ${includeByTimestamp}.`,
54
+ );
55
+ }
56
+
57
+ return roundedTimestamp;
58
+ }
@@ -1 +1,2 @@
1
1
  export * from './build_private_kernel_reset_private_inputs.js';
2
+ export * from './compute_tx_include_by_timestamp.js';
@@ -0,0 +1,2 @@
1
+ export * from './private_kernel_execution_prover.js';
2
+ export * from './private_kernel_oracle.js';