@aztec/pxe 0.0.0-test.1 → 0.0.1-commit.b655e406

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
@@ -1,664 +0,0 @@
1
- import { Fr } from '@aztec/foundation/fields';
2
- import { createLogger } from '@aztec/foundation/log';
3
- import { Timer } from '@aztec/foundation/timer';
4
- import { KeyStore } from '@aztec/key-store';
5
- import { L2TipsStore } from '@aztec/kv-store/stores';
6
- import { ProtocolContractAddress, protocolContractNames } from '@aztec/protocol-contracts';
7
- import { AcirSimulator, readCurrentClassId } from '@aztec/simulator/client';
8
- import { EventSelector, FunctionSelector, FunctionType, decodeFunctionSignature, encodeArguments } from '@aztec/stdlib/abi';
9
- import { computeContractAddressFromInstance, getContractClassFromArtifact } from '@aztec/stdlib/contract';
10
- import { SimulationError } from '@aztec/stdlib/errors';
11
- import { EventMetadata, L1EventPayload } from '@aztec/stdlib/event';
12
- import { siloNullifier } from '@aztec/stdlib/hash';
13
- import { computeAddressSecret } from '@aztec/stdlib/keys';
14
- import { getNonNullifiedL1ToL2MessageWitness } from '@aztec/stdlib/messaging';
15
- import { UniqueNote } from '@aztec/stdlib/note';
16
- import { MerkleTreeId } from '@aztec/stdlib/trees';
17
- import { PrivateSimulationResult, TxProvingResult, TxSimulationResult } from '@aztec/stdlib/tx';
18
- import { inspect } from 'util';
19
- import { getPackageInfo } from '../config/package_info.js';
20
- import { KernelOracle } from '../kernel_oracle/index.js';
21
- import { KernelProver } from '../kernel_prover/kernel_prover.js';
22
- import { PXEOracleInterface } from '../pxe_oracle_interface/index.js';
23
- import { AddressDataProvider } from '../storage/address_data_provider/address_data_provider.js';
24
- import { AuthWitnessDataProvider } from '../storage/auth_witness_data_provider/auth_witness_data_provider.js';
25
- import { CapsuleDataProvider } from '../storage/capsule_data_provider/capsule_data_provider.js';
26
- import { ContractDataProvider } from '../storage/contract_data_provider/contract_data_provider.js';
27
- import { NoteDataProvider } from '../storage/note_data_provider/note_data_provider.js';
28
- import { SyncDataProvider } from '../storage/sync_data_provider/sync_data_provider.js';
29
- import { TaggingDataProvider } from '../storage/tagging_data_provider/tagging_data_provider.js';
30
- import { Synchronizer } from '../synchronizer/index.js';
31
- import { enrichPublicSimulationError, enrichSimulationError } from './error_enriching.js';
32
- /**
33
- * A Private eXecution Environment (PXE) implementation.
34
- */ export class PXEService {
35
- node;
36
- synchronizer;
37
- keyStore;
38
- contractDataProvider;
39
- noteDataProvider;
40
- capsuleDataProvider;
41
- syncDataProvider;
42
- taggingDataProvider;
43
- addressDataProvider;
44
- authWitnessDataProvider;
45
- simulator;
46
- packageVersion;
47
- proverEnabled;
48
- proofCreator;
49
- protocolContractsProvider;
50
- log;
51
- constructor(node, synchronizer, keyStore, contractDataProvider, noteDataProvider, capsuleDataProvider, syncDataProvider, taggingDataProvider, addressDataProvider, authWitnessDataProvider, simulator, packageVersion, proverEnabled, proofCreator, protocolContractsProvider, log){
52
- this.node = node;
53
- this.synchronizer = synchronizer;
54
- this.keyStore = keyStore;
55
- this.contractDataProvider = contractDataProvider;
56
- this.noteDataProvider = noteDataProvider;
57
- this.capsuleDataProvider = capsuleDataProvider;
58
- this.syncDataProvider = syncDataProvider;
59
- this.taggingDataProvider = taggingDataProvider;
60
- this.addressDataProvider = addressDataProvider;
61
- this.authWitnessDataProvider = authWitnessDataProvider;
62
- this.simulator = simulator;
63
- this.packageVersion = packageVersion;
64
- this.proverEnabled = proverEnabled;
65
- this.proofCreator = proofCreator;
66
- this.protocolContractsProvider = protocolContractsProvider;
67
- this.log = log;
68
- }
69
- /**
70
- * Creates an instance of a PXE Service by instantiating all the necessary data providers and services.
71
- * Also triggers the registration of the protocol contracts and makes sure the provided node
72
- * can be contacted.
73
- *
74
- * @returns A promise that resolves PXE service is ready to be used.
75
- */ static async create(node, store, proofCreator, simulationProvider, protocolContractsProvider, config, loggerOrSuffix) {
76
- const log = !loggerOrSuffix || typeof loggerOrSuffix === 'string' ? createLogger(loggerOrSuffix ? `pxe:service:${loggerOrSuffix}` : `pxe:service`) : loggerOrSuffix;
77
- const packageVersion = getPackageInfo().version;
78
- const proverEnabled = !!config.proverEnabled;
79
- const addressDataProvider = new AddressDataProvider(store);
80
- const authWitnessDataProvider = new AuthWitnessDataProvider(store);
81
- const contractDataProvider = new ContractDataProvider(store);
82
- const noteDataProvider = await NoteDataProvider.create(store);
83
- const syncDataProvider = new SyncDataProvider(store);
84
- const taggingDataProvider = new TaggingDataProvider(store);
85
- const capsuleDataProvider = new CapsuleDataProvider(store);
86
- const keyStore = new KeyStore(store);
87
- const tipsStore = new L2TipsStore(store, 'pxe');
88
- const synchronizer = new Synchronizer(node, syncDataProvider, noteDataProvider, taggingDataProvider, tipsStore, config, loggerOrSuffix);
89
- const pxeOracleInterface = new PXEOracleInterface(node, keyStore, simulationProvider, contractDataProvider, noteDataProvider, capsuleDataProvider, syncDataProvider, taggingDataProvider, addressDataProvider, authWitnessDataProvider, log);
90
- const simulator = new AcirSimulator(pxeOracleInterface, simulationProvider);
91
- const pxeService = new PXEService(node, synchronizer, keyStore, contractDataProvider, noteDataProvider, capsuleDataProvider, syncDataProvider, taggingDataProvider, addressDataProvider, authWitnessDataProvider, simulator, packageVersion, proverEnabled, proofCreator, protocolContractsProvider, log);
92
- await pxeService.#registerProtocolContracts();
93
- const info = await pxeService.getNodeInfo();
94
- log.info(`Started PXE connected to chain ${info.l1ChainId} version ${info.protocolVersion}`);
95
- return pxeService;
96
- }
97
- isL1ToL2MessageSynced(l1ToL2Message) {
98
- return this.node.isL1ToL2MessageSynced(l1ToL2Message);
99
- }
100
- /** Returns an estimate of the db size in bytes. */ async estimateDbSize() {
101
- const treeRootsSize = Object.keys(MerkleTreeId).length * Fr.SIZE_IN_BYTES;
102
- const dbSizes = await Promise.all([
103
- this.addressDataProvider.getSize(),
104
- this.authWitnessDataProvider.getSize(),
105
- this.capsuleDataProvider.getSize(),
106
- this.contractDataProvider.getSize(),
107
- this.noteDataProvider.getSize(),
108
- this.syncDataProvider.getSize(),
109
- this.taggingDataProvider.getSize()
110
- ]);
111
- return [
112
- ...dbSizes,
113
- treeRootsSize
114
- ].reduce((sum, size)=>sum + size, 0);
115
- }
116
- addAuthWitness(witness) {
117
- return this.authWitnessDataProvider.addAuthWitness(witness.requestHash, witness.witness);
118
- }
119
- getAuthWitness(messageHash) {
120
- return this.authWitnessDataProvider.getAuthWitness(messageHash);
121
- }
122
- storeCapsule(contract, storageSlot, capsule) {
123
- return this.capsuleDataProvider.storeCapsule(contract, storageSlot, capsule);
124
- }
125
- getContractInstance(address) {
126
- return this.contractDataProvider.getContractInstance(address);
127
- }
128
- async getContractClassMetadata(id, includeArtifact = false) {
129
- let artifact;
130
- try {
131
- artifact = await this.contractDataProvider.getContractArtifact(id);
132
- } catch {
133
- this.log.warn(`No artifact found for contract class ${id.toString()} when looking for its metadata`);
134
- }
135
- return {
136
- contractClass: artifact && await getContractClassFromArtifact(artifact),
137
- isContractClassPubliclyRegistered: await this.#isContractClassPubliclyRegistered(id),
138
- artifact: includeArtifact ? artifact : undefined
139
- };
140
- }
141
- async getContractMetadata(address) {
142
- let instance;
143
- try {
144
- instance = await this.contractDataProvider.getContractInstance(address);
145
- } catch {
146
- this.log.warn(`No instance found for contract ${address.toString()} when looking for its metadata`);
147
- }
148
- return {
149
- contractInstance: instance,
150
- isContractInitialized: await this.#isContractInitialized(address),
151
- isContractPubliclyDeployed: await this.#isContractPubliclyDeployed(address)
152
- };
153
- }
154
- async registerAccount(secretKey, partialAddress) {
155
- const accounts = await this.keyStore.getAccounts();
156
- const accountCompleteAddress = await this.keyStore.addAccount(secretKey, partialAddress);
157
- if (accounts.includes(accountCompleteAddress.address)) {
158
- this.log.info(`Account:\n "${accountCompleteAddress.address.toString()}"\n already registered.`);
159
- return accountCompleteAddress;
160
- } else {
161
- this.log.info(`Registered account ${accountCompleteAddress.address.toString()}`);
162
- this.log.debug(`Registered account\n ${accountCompleteAddress.toReadableString()}`);
163
- }
164
- await this.addressDataProvider.addCompleteAddress(accountCompleteAddress);
165
- await this.noteDataProvider.addScope(accountCompleteAddress.address);
166
- return accountCompleteAddress;
167
- }
168
- async registerSender(address) {
169
- const accounts = await this.keyStore.getAccounts();
170
- if (accounts.includes(address)) {
171
- this.log.info(`Sender:\n "${address.toString()}"\n already registered.`);
172
- return address;
173
- }
174
- const wasAdded = await this.taggingDataProvider.addSenderAddress(address);
175
- if (wasAdded) {
176
- this.log.info(`Added sender:\n ${address.toString()}`);
177
- } else {
178
- this.log.info(`Sender:\n "${address.toString()}"\n already registered.`);
179
- }
180
- return address;
181
- }
182
- getSenders() {
183
- const senders = this.taggingDataProvider.getSenderAddresses();
184
- return Promise.resolve(senders);
185
- }
186
- async removeSender(address) {
187
- const wasRemoved = await this.taggingDataProvider.removeSenderAddress(address);
188
- if (wasRemoved) {
189
- this.log.info(`Removed sender:\n ${address.toString()}`);
190
- } else {
191
- this.log.info(`Sender:\n "${address.toString()}"\n not in address book.`);
192
- }
193
- return Promise.resolve();
194
- }
195
- async getRegisteredAccounts() {
196
- // Get complete addresses of both the recipients and the accounts
197
- const completeAddresses = await this.addressDataProvider.getCompleteAddresses();
198
- // Filter out the addresses not corresponding to accounts
199
- const accounts = await this.keyStore.getAccounts();
200
- return completeAddresses.filter((completeAddress)=>accounts.find((address)=>address.equals(completeAddress.address)));
201
- }
202
- async registerContractClass(artifact) {
203
- const { id: contractClassId } = await getContractClassFromArtifact(artifact);
204
- await this.contractDataProvider.addContractArtifact(contractClassId, artifact);
205
- this.log.info(`Added contract class ${artifact.name} with id ${contractClassId}`);
206
- }
207
- async registerContract(contract) {
208
- const { instance } = contract;
209
- let { artifact } = contract;
210
- if (artifact) {
211
- // If the user provides an artifact, validate it against the expected class id and register it
212
- const contractClass = await getContractClassFromArtifact(artifact);
213
- const contractClassId = contractClass.id;
214
- if (!contractClassId.equals(instance.currentContractClassId)) {
215
- throw new Error(`Artifact does not match expected class id (computed ${contractClassId} but instance refers to ${instance.currentContractClassId})`);
216
- }
217
- const computedAddress = await computeContractAddressFromInstance(instance);
218
- if (!computedAddress.equals(instance.address)) {
219
- throw new Error('Added a contract in which the address does not match the contract instance.');
220
- }
221
- await this.contractDataProvider.addContractArtifact(contractClass.id, artifact);
222
- const publicFunctionSignatures = artifact.functions.filter((fn)=>fn.functionType === FunctionType.PUBLIC).map((fn)=>decodeFunctionSignature(fn.name, fn.parameters));
223
- await this.node.registerContractFunctionSignatures(instance.address, publicFunctionSignatures);
224
- // TODO(#10007): Node should get public contract class from the registration event, not from PXE registration
225
- await this.node.addContractClass({
226
- ...contractClass,
227
- privateFunctions: [],
228
- unconstrainedFunctions: []
229
- });
230
- } else {
231
- // Otherwise, make sure there is an artifact already registered for that class id
232
- artifact = await this.contractDataProvider.getContractArtifact(instance.currentContractClassId);
233
- }
234
- await this.contractDataProvider.addContractInstance(instance);
235
- this.log.info(`Added contract ${artifact.name} at ${instance.address.toString()} with class ${instance.currentContractClassId}`);
236
- }
237
- async updateContract(contractAddress, artifact) {
238
- const currentInstance = await this.contractDataProvider.getContractInstance(contractAddress);
239
- const contractClass = await getContractClassFromArtifact(artifact);
240
- await this.synchronizer.sync();
241
- const header = await this.syncDataProvider.getBlockHeader();
242
- const currentClassId = await readCurrentClassId(contractAddress, currentInstance, this.node, header.globalVariables.blockNumber.toNumber());
243
- if (!contractClass.id.equals(currentClassId)) {
244
- throw new Error('Could not update contract to a class different from the current one.');
245
- }
246
- await this.contractDataProvider.addContractArtifact(contractClass.id, artifact);
247
- const publicFunctionSignatures = artifact.functions.filter((fn)=>fn.functionType === FunctionType.PUBLIC).map((fn)=>decodeFunctionSignature(fn.name, fn.parameters));
248
- await this.node.registerContractFunctionSignatures(contractAddress, publicFunctionSignatures);
249
- // TODO(#10007): Node should get public contract class from the registration event, not from PXE registration
250
- await this.node.addContractClass({
251
- ...contractClass,
252
- privateFunctions: [],
253
- unconstrainedFunctions: []
254
- });
255
- currentInstance.currentContractClassId = contractClass.id;
256
- await this.contractDataProvider.addContractInstance(currentInstance);
257
- this.log.info(`Updated contract ${artifact.name} at ${contractAddress.toString()} to class ${contractClass.id}`);
258
- }
259
- getContracts() {
260
- return this.contractDataProvider.getContractsAddresses();
261
- }
262
- async getPublicStorageAt(contract, slot) {
263
- return await this.node.getPublicStorageAt('latest', contract, slot);
264
- }
265
- async getNotes(filter) {
266
- const noteDaos = await this.noteDataProvider.getNotes(filter);
267
- const extendedNotes = noteDaos.map(async (dao)=>{
268
- let owner = filter.owner;
269
- if (owner === undefined) {
270
- const completeAddresses = await this.addressDataProvider.getCompleteAddresses();
271
- const completeAddressIndex = (await Promise.all(completeAddresses.map((completeAddresses)=>completeAddresses.address.toAddressPoint()))).findIndex((addressPoint)=>addressPoint.equals(dao.addressPoint));
272
- const completeAddress = completeAddresses[completeAddressIndex];
273
- if (completeAddress === undefined) {
274
- throw new Error(`Cannot find complete address for addressPoint ${dao.addressPoint.toString()}`);
275
- }
276
- owner = completeAddress.address;
277
- }
278
- return new UniqueNote(dao.note, owner, dao.contractAddress, dao.storageSlot, dao.noteTypeId, dao.txHash, dao.nonce);
279
- });
280
- return Promise.all(extendedNotes);
281
- }
282
- async getL1ToL2MembershipWitness(contractAddress, messageHash, secret) {
283
- return await getNonNullifiedL1ToL2MessageWitness(this.node, contractAddress, messageHash, secret);
284
- }
285
- getL2ToL1MembershipWitness(blockNumber, l2Tol1Message) {
286
- return this.node.getL2ToL1MessageMembershipWitness(blockNumber, l2Tol1Message);
287
- }
288
- async getBlock(blockNumber) {
289
- // If a negative block number is provided the current block number is fetched.
290
- if (blockNumber < 0) {
291
- blockNumber = await this.node.getBlockNumber();
292
- }
293
- return await this.node.getBlock(blockNumber);
294
- }
295
- async getCurrentBaseFees() {
296
- return await this.node.getCurrentBaseFees();
297
- }
298
- async proveTx(txRequest, privateExecutionResult) {
299
- try {
300
- const { publicInputs, clientIvcProof } = await this.#prove(txRequest, this.proofCreator, privateExecutionResult, {
301
- simulate: false,
302
- skipFeeEnforcement: false,
303
- profile: false
304
- });
305
- return new TxProvingResult(privateExecutionResult, publicInputs, clientIvcProof);
306
- } catch (err) {
307
- throw this.contextualizeError(err, inspect(txRequest), inspect(privateExecutionResult));
308
- }
309
- }
310
- // TODO(#7456) Prevent msgSender being defined here for the first call
311
- async simulateTx(txRequest, simulatePublic, msgSender = undefined, skipTxValidation = false, skipFeeEnforcement = false, profile = false, scopes) {
312
- try {
313
- const txInfo = {
314
- origin: txRequest.origin,
315
- functionSelector: txRequest.functionSelector,
316
- simulatePublic,
317
- msgSender,
318
- chainId: txRequest.txContext.chainId,
319
- version: txRequest.txContext.version,
320
- authWitnesses: txRequest.authWitnesses.map((w)=>w.requestHash)
321
- };
322
- this.log.info(`Simulating transaction execution request to ${txRequest.functionSelector} at ${txRequest.origin}`, txInfo);
323
- const timer = new Timer();
324
- await this.synchronizer.sync();
325
- const privateExecutionResult = await this.#executePrivate(txRequest, msgSender, scopes);
326
- const { publicInputs, profileResult } = await this.#prove(txRequest, this.proofCreator, privateExecutionResult, {
327
- simulate: !profile,
328
- skipFeeEnforcement,
329
- profile
330
- });
331
- const privateSimulationResult = new PrivateSimulationResult(privateExecutionResult, publicInputs);
332
- const simulatedTx = privateSimulationResult.toSimulatedTx();
333
- let publicOutput;
334
- if (simulatePublic && publicInputs.forPublic) {
335
- publicOutput = await this.#simulatePublicCalls(simulatedTx, skipFeeEnforcement);
336
- }
337
- if (!skipTxValidation) {
338
- const validationResult = await this.node.isValidTx(simulatedTx, {
339
- isSimulation: true,
340
- skipFeeEnforcement
341
- });
342
- if (validationResult.result === 'invalid') {
343
- throw new Error('The simulated transaction is unable to be added to state and is invalid.');
344
- }
345
- }
346
- const txHash = await simulatedTx.getTxHash();
347
- this.log.info(`Simulation completed for ${txHash.toString()} in ${timer.ms()}ms`, {
348
- txHash,
349
- ...txInfo,
350
- ...profileResult ? {
351
- gateCounts: profileResult.gateCounts
352
- } : {},
353
- ...publicOutput ? {
354
- gasUsed: publicOutput.gasUsed,
355
- revertCode: publicOutput.txEffect.revertCode.getCode(),
356
- revertReason: publicOutput.revertReason
357
- } : {}
358
- });
359
- return TxSimulationResult.fromPrivateSimulationResultAndPublicOutput(privateSimulationResult, publicOutput, profileResult);
360
- } catch (err) {
361
- throw this.contextualizeError(err, inspect(txRequest), `simulatePublic=${simulatePublic}`, `msgSender=${msgSender?.toString() ?? 'undefined'}`, `skipTxValidation=${skipTxValidation}`, `profile=${profile}`, `scopes=${scopes?.map((s)=>s.toString()).join(', ') ?? 'undefined'}`);
362
- }
363
- }
364
- async sendTx(tx) {
365
- const txHash = await tx.getTxHash();
366
- if (await this.node.getTxEffect(txHash)) {
367
- throw new Error(`A settled tx with equal hash ${txHash.toString()} exists.`);
368
- }
369
- this.log.debug(`Sending transaction ${txHash}`);
370
- await this.node.sendTx(tx).catch((err)=>{
371
- throw this.contextualizeError(err, inspect(tx));
372
- });
373
- this.log.info(`Sent transaction ${txHash}`);
374
- return txHash;
375
- }
376
- async simulateUnconstrained(functionName, args, to, _from, scopes) {
377
- try {
378
- await this.synchronizer.sync();
379
- // TODO - Should check if `from` has the permission to call the view function.
380
- const functionCall = await this.#getFunctionCall(functionName, args, to);
381
- const executionResult = await this.#simulateUnconstrained(functionCall, scopes);
382
- // TODO - Return typed result based on the function artifact.
383
- return executionResult;
384
- } catch (err) {
385
- const stringifiedArgs = args.map((arg)=>arg.toString()).join(', ');
386
- throw this.contextualizeError(err, `simulateUnconstrained ${to}:${functionName}(${stringifiedArgs})`, `scopes=${scopes?.map((s)=>s.toString()).join(', ') ?? 'undefined'}`);
387
- }
388
- }
389
- getTxReceipt(txHash) {
390
- return this.node.getTxReceipt(txHash);
391
- }
392
- getTxEffect(txHash) {
393
- return this.node.getTxEffect(txHash);
394
- }
395
- async getBlockNumber() {
396
- return await this.node.getBlockNumber();
397
- }
398
- async getProvenBlockNumber() {
399
- return await this.node.getProvenBlockNumber();
400
- }
401
- /**
402
- * Gets public logs based on the provided filter.
403
- * @param filter - The filter to apply to the logs.
404
- * @returns The requested logs.
405
- */ getPublicLogs(filter) {
406
- return this.node.getPublicLogs(filter);
407
- }
408
- /**
409
- * Gets contract class logs based on the provided filter.
410
- * @param filter - The filter to apply to the logs.
411
- * @returns The requested logs.
412
- */ getContractClassLogs(filter) {
413
- return this.node.getContractClassLogs(filter);
414
- }
415
- async #getFunctionCall(functionName, args, to) {
416
- const contract = await this.contractDataProvider.getContract(to);
417
- if (!contract) {
418
- throw new Error(`Unknown contract ${to}: add it to PXE Service by calling server.addContracts(...).\nSee docs for context: https://docs.aztec.network/developers/reference/debugging/aztecnr-errors#unknown-contract-0x0-add-it-to-pxe-by-calling-serveraddcontracts`);
419
- }
420
- const functionDao = contract.functions.find((f)=>f.name === functionName);
421
- if (!functionDao) {
422
- throw new Error(`Unknown function ${functionName} in contract ${contract.name}.`);
423
- }
424
- return {
425
- name: functionDao.name,
426
- args: encodeArguments(functionDao, args),
427
- selector: await FunctionSelector.fromNameAndParameters(functionDao.name, functionDao.parameters),
428
- type: functionDao.functionType,
429
- to,
430
- isStatic: functionDao.isStatic,
431
- returnTypes: functionDao.returnTypes
432
- };
433
- }
434
- async getNodeInfo() {
435
- const [nodeVersion, protocolVersion, chainId, enr, contractAddresses, protocolContractAddresses] = await Promise.all([
436
- this.node.getNodeVersion(),
437
- this.node.getVersion(),
438
- this.node.getChainId(),
439
- this.node.getEncodedEnr(),
440
- this.node.getL1ContractAddresses(),
441
- this.node.getProtocolContractAddresses()
442
- ]);
443
- const nodeInfo = {
444
- nodeVersion,
445
- l1ChainId: chainId,
446
- protocolVersion,
447
- enr,
448
- l1ContractAddresses: contractAddresses,
449
- protocolContractAddresses: protocolContractAddresses
450
- };
451
- return nodeInfo;
452
- }
453
- getPXEInfo() {
454
- return Promise.resolve({
455
- pxeVersion: this.packageVersion,
456
- protocolContractAddresses: {
457
- classRegisterer: ProtocolContractAddress.ContractClassRegisterer,
458
- feeJuice: ProtocolContractAddress.FeeJuice,
459
- instanceDeployer: ProtocolContractAddress.ContractInstanceDeployer,
460
- multiCallEntrypoint: ProtocolContractAddress.MultiCallEntrypoint
461
- }
462
- });
463
- }
464
- async #registerProtocolContracts() {
465
- const registered = {};
466
- for (const name of protocolContractNames){
467
- const { address, contractClass, instance, artifact } = await this.protocolContractsProvider.getProtocolContractArtifact(name);
468
- await this.contractDataProvider.addContractArtifact(contractClass.id, artifact);
469
- await this.contractDataProvider.addContractInstance(instance);
470
- registered[name] = address.toString();
471
- }
472
- this.log.verbose(`Registered protocol contracts in pxe`, registered);
473
- }
474
- /**
475
- * Retrieves the simulation parameters required to run an ACIR simulation.
476
- * This includes the contract address, function artifact, and historical tree roots.
477
- *
478
- * @param execRequest - The transaction request object containing details of the contract call.
479
- * @returns An object containing the contract address, function artifact, and historical tree roots.
480
- */ #getSimulationParameters(execRequest) {
481
- const contractAddress = execRequest.to ?? execRequest.origin;
482
- const functionSelector = execRequest.selector ?? execRequest.functionSelector;
483
- return {
484
- contractAddress,
485
- functionSelector
486
- };
487
- }
488
- async #executePrivate(txRequest, msgSender, scopes) {
489
- // TODO - Pause syncing while simulating.
490
- const { contractAddress, functionSelector } = this.#getSimulationParameters(txRequest);
491
- try {
492
- const result = await this.simulator.run(txRequest, contractAddress, functionSelector, msgSender, scopes);
493
- this.log.debug(`Private simulation completed for ${contractAddress.toString()}:${functionSelector}`);
494
- return result;
495
- } catch (err) {
496
- if (err instanceof SimulationError) {
497
- await enrichSimulationError(err, this.contractDataProvider, this.log);
498
- }
499
- throw err;
500
- }
501
- }
502
- /**
503
- * Simulate an unconstrained transaction on the given contract, without considering constraints set by ACIR.
504
- * The simulation parameters are fetched using ContractDataProvider and executed using AcirSimulator.
505
- * Returns the simulation result containing the outputs of the unconstrained function.
506
- *
507
- * @param execRequest - The transaction request object containing the target contract and function data.
508
- * @param scopes - The accounts whose notes we can access in this call. Currently optional and will default to all.
509
- * @returns The simulation result containing the outputs of the unconstrained function.
510
- */ async #simulateUnconstrained(execRequest, scopes) {
511
- const { contractAddress, functionSelector } = this.#getSimulationParameters(execRequest);
512
- this.log.debug('Executing unconstrained simulator...');
513
- try {
514
- const result = await this.simulator.runUnconstrained(execRequest, contractAddress, functionSelector, scopes);
515
- this.log.verbose(`Unconstrained simulation for ${contractAddress}.${functionSelector} completed`);
516
- return result;
517
- } catch (err) {
518
- if (err instanceof SimulationError) {
519
- await enrichSimulationError(err, this.contractDataProvider, this.log);
520
- }
521
- throw err;
522
- }
523
- }
524
- /**
525
- * Simulate the public part of a transaction.
526
- * This allows to catch public execution errors before submitting the transaction.
527
- * It can also be used for estimating gas in the future.
528
- * @param tx - The transaction to be simulated.
529
- */ async #simulatePublicCalls(tx, skipFeeEnforcement) {
530
- // Simulating public calls can throw if the TX fails in a phase that doesn't allow reverts (setup)
531
- // Or return as reverted if it fails in a phase that allows reverts (app logic, teardown)
532
- try {
533
- const result = await this.node.simulatePublicCalls(tx, skipFeeEnforcement);
534
- if (result.revertReason) {
535
- throw result.revertReason;
536
- }
537
- return result;
538
- } catch (err) {
539
- if (err instanceof SimulationError) {
540
- try {
541
- await enrichPublicSimulationError(err, this.contractDataProvider, this.log);
542
- } catch (enrichErr) {
543
- this.log.error(`Failed to enrich public simulation error: ${enrichErr}`);
544
- }
545
- }
546
- throw err;
547
- }
548
- }
549
- /**
550
- * Generate a kernel proof, and create a private kernel output.
551
- * The function takes in a transaction execution request, and the result of private execution
552
- * and then generates a kernel proof.
553
- *
554
- * @param txExecutionRequest - The transaction request to be simulated and proved.
555
- * @param proofCreator - The proof creator to use for proving the execution.
556
- * @param privateExecutionResult - The result of the private execution
557
- * @returns An object that contains the output of the kernel execution, including the ClientIvcProof if proving is enabled.
558
- */ async #prove(txExecutionRequest, proofCreator, privateExecutionResult, { simulate, skipFeeEnforcement, profile }) {
559
- // use the block the tx was simulated against
560
- const block = privateExecutionResult.entrypoint.publicInputs.historicalHeader.globalVariables.blockNumber.toNumber();
561
- const kernelOracle = new KernelOracle(this.contractDataProvider, this.keyStore, this.node, block);
562
- const kernelProver = new KernelProver(kernelOracle, proofCreator, !this.proverEnabled);
563
- this.log.debug(`Executing kernel prover (simulate: ${simulate}, profile: ${profile})...`);
564
- return await kernelProver.prove(txExecutionRequest.toTxRequest(), privateExecutionResult, {
565
- simulate,
566
- skipFeeEnforcement,
567
- profile
568
- });
569
- }
570
- async #isContractClassPubliclyRegistered(id) {
571
- return !!await this.node.getContractClass(id);
572
- }
573
- async #isContractPubliclyDeployed(address) {
574
- return !!await this.node.getContract(address);
575
- }
576
- async #isContractInitialized(address) {
577
- const initNullifier = await siloNullifier(address, address.toField());
578
- return !!await this.node.getNullifierMembershipWitness('latest', initNullifier);
579
- }
580
- async getPrivateEvents(eventMetadataDef, from, limit, // TODO (#9272): Make this better, we should be able to only pass an address now
581
- vpks) {
582
- const eventMetadata = new EventMetadata(eventMetadataDef);
583
- if (vpks.length === 0) {
584
- throw new Error('Tried to get encrypted events without supplying any viewing public keys');
585
- }
586
- const blocks = await this.node.getBlocks(from, limit);
587
- const txEffects = blocks.flatMap((block)=>block.body.txEffects);
588
- const privateLogs = txEffects.flatMap((txEffect)=>txEffect.privateLogs);
589
- const vsks = await Promise.all(vpks.map(async (vpk)=>{
590
- const [keyPrefix, account] = await this.keyStore.getKeyPrefixAndAccount(vpk);
591
- let secretKey = await this.keyStore.getMasterSecretKey(vpk);
592
- if (keyPrefix === 'iv') {
593
- const registeredAccount = (await this.getRegisteredAccounts()).find((completeAddress)=>completeAddress.address.equals(account));
594
- if (!registeredAccount) {
595
- throw new Error('No registered account');
596
- }
597
- const preaddress = await registeredAccount.getPreaddress();
598
- secretKey = await computeAddressSecret(preaddress, secretKey);
599
- }
600
- return secretKey;
601
- }));
602
- const visibleEvents = (await Promise.all(privateLogs.map(async (log)=>{
603
- for (const sk of vsks){
604
- // TODO: Verify that the first field of the log is the tag siloed with contract address.
605
- // Or use tags to query logs, like we do with notes.
606
- const decryptedEvent = await L1EventPayload.decryptAsIncoming(log, sk);
607
- if (decryptedEvent !== undefined) {
608
- return [
609
- decryptedEvent
610
- ];
611
- }
612
- }
613
- return [];
614
- }))).flat();
615
- const decodedEvents = visibleEvents.map((visibleEvent)=>{
616
- if (visibleEvent === undefined) {
617
- return undefined;
618
- }
619
- if (!visibleEvent.eventTypeId.equals(eventMetadata.eventSelector)) {
620
- return undefined;
621
- }
622
- return eventMetadata.decode(visibleEvent);
623
- }).filter((visibleEvent)=>visibleEvent !== undefined);
624
- return decodedEvents;
625
- }
626
- async getPublicEvents(eventMetadataDef, from, limit) {
627
- const eventMetadata = new EventMetadata(eventMetadataDef);
628
- const { logs } = await this.node.getPublicLogs({
629
- fromBlock: from,
630
- toBlock: from + limit
631
- });
632
- const decodedEvents = logs.map((log)=>{
633
- // +1 for the event selector
634
- const expectedLength = eventMetadata.fieldNames.length + 1;
635
- const logFields = log.log.log.slice(0, expectedLength);
636
- // We are assuming here that event logs are the last 4 bytes of the event. This is not enshrined but is a function of aztec.nr raw log emission.
637
- if (!EventSelector.fromField(logFields[logFields.length - 1]).equals(eventMetadata.eventSelector)) {
638
- return undefined;
639
- }
640
- // If any of the remaining fields, are non-zero, the payload does match expected:
641
- if (log.log.log.slice(expectedLength + 1).find((f)=>!f.isZero())) {
642
- throw new Error('Something is weird here, we have matching EventSelectors, but the actual payload has mismatched length');
643
- }
644
- return eventMetadata.decode(log.log);
645
- }).filter((log)=>log !== undefined);
646
- return decodedEvents;
647
- }
648
- async resetNoteSyncData() {
649
- return await this.taggingDataProvider.resetNoteSyncData();
650
- }
651
- contextualizeError(err, ...context) {
652
- let contextStr = '';
653
- if (context.length > 0) {
654
- contextStr = `\nContext:\n${context.join('\n')}`;
655
- }
656
- if (err instanceof SimulationError) {
657
- err.setAztecContext(contextStr);
658
- } else {
659
- this.log.error(err.name, err);
660
- this.log.debug(contextStr);
661
- }
662
- return err;
663
- }
664
- }
@@ -1,11 +0,0 @@
1
- import { Fr } from '@aztec/foundation/fields';
2
- import type { AztecAsyncKVStore } from '@aztec/kv-store';
3
- import type { DataProvider } from '../data_provider.js';
4
- export declare class AuthWitnessDataProvider implements DataProvider {
5
- #private;
6
- constructor(store: AztecAsyncKVStore);
7
- addAuthWitness(messageHash: Fr, witness: Fr[]): Promise<void>;
8
- getAuthWitness(messageHash: Fr): Promise<Fr[] | undefined>;
9
- getSize(): Promise<number>;
10
- }
11
- //# sourceMappingURL=auth_witness_data_provider.d.ts.map