@aztec/end-to-end 0.0.0-test.1 → 0.0.1-commit.017a351

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (316) hide show
  1. package/README.md +27 -0
  2. package/dest/bench/client_flows/benchmark.d.ts +76 -0
  3. package/dest/bench/client_flows/benchmark.d.ts.map +1 -0
  4. package/dest/bench/client_flows/benchmark.js +298 -0
  5. package/dest/bench/client_flows/client_flows_benchmark.d.ts +79 -0
  6. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -0
  7. package/dest/bench/client_flows/client_flows_benchmark.js +318 -0
  8. package/dest/bench/client_flows/config.d.ts +14 -0
  9. package/dest/bench/client_flows/config.d.ts.map +1 -0
  10. package/dest/bench/client_flows/config.js +124 -0
  11. package/dest/bench/client_flows/data_extractor.d.ts +2 -0
  12. package/dest/bench/client_flows/data_extractor.d.ts.map +1 -0
  13. package/dest/bench/client_flows/data_extractor.js +79 -0
  14. package/dest/bench/utils.d.ts +16 -41
  15. package/dest/bench/utils.d.ts.map +1 -1
  16. package/dest/bench/utils.js +46 -72
  17. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +30 -20
  18. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  19. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +137 -106
  20. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +44 -33
  21. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
  22. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +136 -103
  23. package/dest/e2e_deploy_contract/deploy_test.d.ts +20 -11
  24. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  25. package/dest/e2e_deploy_contract/deploy_test.js +28 -28
  26. package/dest/e2e_epochs/epochs_test.d.ts +98 -24
  27. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  28. package/dest/e2e_epochs/epochs_test.js +366 -61
  29. package/dest/e2e_fees/bridging_race.notest.d.ts +2 -0
  30. package/dest/e2e_fees/bridging_race.notest.d.ts.map +1 -0
  31. package/dest/e2e_fees/bridging_race.notest.js +61 -0
  32. package/dest/e2e_fees/fees_test.d.ts +42 -24
  33. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  34. package/dest/e2e_fees/fees_test.js +194 -182
  35. package/dest/e2e_l1_publisher/write_json.d.ts +11 -0
  36. package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -0
  37. package/dest/e2e_l1_publisher/write_json.js +56 -0
  38. package/dest/e2e_multi_validator/utils.d.ts +12 -0
  39. package/dest/e2e_multi_validator/utils.d.ts.map +1 -0
  40. package/dest/e2e_multi_validator/utils.js +214 -0
  41. package/dest/e2e_nested_contract/nested_contract_test.d.ts +16 -16
  42. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  43. package/dest/e2e_nested_contract/nested_contract_test.js +38 -43
  44. package/dest/e2e_p2p/inactivity_slash_test.d.ts +31 -0
  45. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -0
  46. package/dest/e2e_p2p/inactivity_slash_test.js +137 -0
  47. package/dest/e2e_p2p/p2p_network.d.ts +287 -31
  48. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  49. package/dest/e2e_p2p/p2p_network.js +281 -183
  50. package/dest/e2e_p2p/reqresp/utils.d.ts +22 -0
  51. package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -0
  52. package/dest/e2e_p2p/reqresp/utils.js +206 -0
  53. package/dest/e2e_p2p/shared.d.ts +73 -8
  54. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  55. package/dest/e2e_p2p/shared.js +205 -27
  56. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
  57. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
  58. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
  59. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
  60. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
  61. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
  62. package/dest/e2e_token_contract/token_contract_test.d.ts +30 -15
  63. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  64. package/dest/e2e_token_contract/token_contract_test.js +110 -76
  65. package/dest/fixtures/authwit_proxy.d.ts +15 -0
  66. package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
  67. package/dest/fixtures/authwit_proxy.js +34 -0
  68. package/dest/fixtures/e2e_prover_test.d.ts +56 -0
  69. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -0
  70. package/dest/fixtures/e2e_prover_test.js +267 -0
  71. package/dest/fixtures/elu_monitor.d.ts +21 -0
  72. package/dest/fixtures/elu_monitor.d.ts.map +1 -0
  73. package/dest/fixtures/elu_monitor.js +102 -0
  74. package/dest/fixtures/fixtures.d.ts +79 -8
  75. package/dest/fixtures/fixtures.d.ts.map +1 -1
  76. package/dest/fixtures/fixtures.js +76 -5
  77. package/dest/fixtures/get_acvm_config.d.ts +2 -2
  78. package/dest/fixtures/get_acvm_config.d.ts.map +1 -1
  79. package/dest/fixtures/get_acvm_config.js +3 -15
  80. package/dest/fixtures/get_bb_config.d.ts +2 -2
  81. package/dest/fixtures/get_bb_config.d.ts.map +1 -1
  82. package/dest/fixtures/get_bb_config.js +10 -17
  83. package/dest/fixtures/ha_setup.d.ts +71 -0
  84. package/dest/fixtures/ha_setup.d.ts.map +1 -0
  85. package/dest/fixtures/ha_setup.js +116 -0
  86. package/dest/fixtures/index.d.ts +2 -1
  87. package/dest/fixtures/index.d.ts.map +1 -1
  88. package/dest/fixtures/index.js +1 -0
  89. package/dest/fixtures/l1_to_l2_messaging.d.ts +11 -7
  90. package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
  91. package/dest/fixtures/l1_to_l2_messaging.js +45 -19
  92. package/dest/fixtures/logging.d.ts +1 -1
  93. package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts +25 -0
  94. package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts.map +1 -0
  95. package/dest/fixtures/schnorr_hardcoded_account_contract.js +37 -0
  96. package/dest/fixtures/setup.d.ts +272 -0
  97. package/dest/fixtures/setup.d.ts.map +1 -0
  98. package/dest/fixtures/setup.js +735 -0
  99. package/dest/fixtures/setup_p2p_test.d.ts +28 -16
  100. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  101. package/dest/fixtures/setup_p2p_test.js +103 -32
  102. package/dest/fixtures/token_utils.d.ts +10 -4
  103. package/dest/fixtures/token_utils.d.ts.map +1 -1
  104. package/dest/fixtures/token_utils.js +30 -13
  105. package/dest/fixtures/utils.d.ts +5 -153
  106. package/dest/fixtures/utils.d.ts.map +1 -1
  107. package/dest/fixtures/utils.js +4 -552
  108. package/dest/fixtures/web3signer.d.ts +5 -0
  109. package/dest/fixtures/web3signer.d.ts.map +1 -0
  110. package/dest/fixtures/web3signer.js +53 -0
  111. package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
  112. package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
  113. package/dest/fixtures/with_telemetry_utils.js +2 -2
  114. package/dest/forward-compatibility/wallet_rpc_client.d.ts +7 -0
  115. package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
  116. package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
  117. package/dest/forward-compatibility/wallet_service.d.ts +3 -0
  118. package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
  119. package/dest/forward-compatibility/wallet_service.js +109 -0
  120. package/dest/index.d.ts +1 -1
  121. package/dest/install_legacy_contracts.d.cts +10 -0
  122. package/dest/install_legacy_contracts.d.cts.map +1 -0
  123. package/dest/legacy-jest-resolver.d.cts +3 -0
  124. package/dest/legacy-jest-resolver.d.cts.map +1 -0
  125. package/dest/quality_of_service/grafana_client.d.ts +41 -0
  126. package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
  127. package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
  128. package/dest/quality_of_service/prometheus_client.d.ts +38 -0
  129. package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
  130. package/dest/quality_of_service/prometheus_client.js +67 -0
  131. package/dest/shared/cross_chain_test_harness.d.ts +46 -27
  132. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  133. package/dest/shared/cross_chain_test_harness.js +113 -55
  134. package/dest/shared/gas_portal_test_harness.d.ts +39 -28
  135. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  136. package/dest/shared/gas_portal_test_harness.js +64 -34
  137. package/dest/shared/index.d.ts +3 -2
  138. package/dest/shared/index.d.ts.map +1 -1
  139. package/dest/shared/index.js +1 -0
  140. package/dest/shared/jest_setup.d.ts +1 -1
  141. package/dest/shared/jest_setup.js +42 -2
  142. package/dest/shared/mock_state_view.d.ts +86 -0
  143. package/dest/shared/mock_state_view.d.ts.map +1 -0
  144. package/dest/shared/mock_state_view.js +186 -0
  145. package/dest/shared/submit-transactions.d.ts +6 -4
  146. package/dest/shared/submit-transactions.d.ts.map +1 -1
  147. package/dest/shared/submit-transactions.js +15 -16
  148. package/dest/shared/uniswap_l1_l2.d.ts +3 -25
  149. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  150. package/dest/shared/uniswap_l1_l2.js +202 -135
  151. package/dest/shared/wait_for_l1_to_l2_message.d.ts +13 -0
  152. package/dest/shared/wait_for_l1_to_l2_message.d.ts.map +1 -0
  153. package/dest/shared/wait_for_l1_to_l2_message.js +10 -0
  154. package/dest/simulators/index.d.ts +1 -1
  155. package/dest/simulators/lending_simulator.d.ts +16 -9
  156. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  157. package/dest/simulators/lending_simulator.js +38 -27
  158. package/dest/simulators/token_simulator.d.ts +6 -3
  159. package/dest/simulators/token_simulator.d.ts.map +1 -1
  160. package/dest/simulators/token_simulator.js +12 -30
  161. package/dest/spartan/setup_test_wallets.d.ts +36 -11
  162. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  163. package/dest/spartan/setup_test_wallets.js +301 -63
  164. package/dest/spartan/tx_metrics.d.ts +102 -0
  165. package/dest/spartan/tx_metrics.d.ts.map +1 -0
  166. package/dest/spartan/tx_metrics.js +475 -0
  167. package/dest/spartan/utils/bot.d.ts +28 -0
  168. package/dest/spartan/utils/bot.d.ts.map +1 -0
  169. package/dest/spartan/utils/bot.js +142 -0
  170. package/dest/spartan/utils/chaos.d.ts +79 -0
  171. package/dest/spartan/utils/chaos.d.ts.map +1 -0
  172. package/dest/spartan/utils/chaos.js +142 -0
  173. package/dest/spartan/utils/clients.d.ts +39 -0
  174. package/dest/spartan/utils/clients.d.ts.map +1 -0
  175. package/dest/spartan/utils/clients.js +90 -0
  176. package/dest/spartan/utils/config.d.ts +19 -0
  177. package/dest/spartan/utils/config.d.ts.map +1 -0
  178. package/dest/spartan/utils/config.js +23 -0
  179. package/dest/spartan/utils/health.d.ts +63 -0
  180. package/dest/spartan/utils/health.d.ts.map +1 -0
  181. package/dest/spartan/utils/health.js +202 -0
  182. package/dest/spartan/utils/helm.d.ts +15 -0
  183. package/dest/spartan/utils/helm.d.ts.map +1 -0
  184. package/dest/spartan/utils/helm.js +47 -0
  185. package/dest/spartan/utils/index.d.ts +11 -0
  186. package/dest/spartan/utils/index.d.ts.map +1 -0
  187. package/dest/spartan/utils/index.js +22 -0
  188. package/dest/spartan/utils/k8s.d.ts +128 -0
  189. package/dest/spartan/utils/k8s.d.ts.map +1 -0
  190. package/dest/spartan/utils/k8s.js +381 -0
  191. package/dest/spartan/utils/nodes.d.ts +40 -0
  192. package/dest/spartan/utils/nodes.d.ts.map +1 -0
  193. package/dest/spartan/utils/nodes.js +461 -0
  194. package/dest/spartan/utils/pod_logs.d.ts +25 -0
  195. package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
  196. package/dest/spartan/utils/pod_logs.js +74 -0
  197. package/dest/spartan/utils/scripts.d.ts +30 -0
  198. package/dest/spartan/utils/scripts.d.ts.map +1 -0
  199. package/dest/spartan/utils/scripts.js +81 -0
  200. package/dest/spartan/utils.d.ts +2 -415
  201. package/dest/spartan/utils.d.ts.map +1 -1
  202. package/dest/spartan/utils.js +1 -445
  203. package/dest/test-wallet/test_wallet.d.ts +85 -0
  204. package/dest/test-wallet/test_wallet.d.ts.map +1 -0
  205. package/dest/test-wallet/test_wallet.js +273 -0
  206. package/dest/test-wallet/utils.d.ts +41 -0
  207. package/dest/test-wallet/utils.d.ts.map +1 -0
  208. package/dest/test-wallet/utils.js +66 -0
  209. package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
  210. package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
  211. package/dest/test-wallet/wallet_worker_script.js +53 -0
  212. package/dest/test-wallet/worker_wallet.d.ts +53 -0
  213. package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
  214. package/dest/test-wallet/worker_wallet.js +155 -0
  215. package/dest/test-wallet/worker_wallet_schema.d.ts +160 -0
  216. package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
  217. package/dest/test-wallet/worker_wallet_schema.js +22 -0
  218. package/package.json +79 -64
  219. package/src/bench/client_flows/benchmark.ts +382 -0
  220. package/src/bench/client_flows/client_flows_benchmark.ts +399 -0
  221. package/src/bench/client_flows/config.ts +69 -0
  222. package/src/bench/client_flows/data_extractor.ts +89 -0
  223. package/src/bench/utils.ts +49 -87
  224. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +164 -172
  225. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +194 -183
  226. package/src/e2e_deploy_contract/deploy_test.ts +42 -49
  227. package/src/e2e_epochs/epochs_test.ts +451 -93
  228. package/src/e2e_fees/bridging_race.notest.ts +74 -0
  229. package/src/e2e_fees/fees_test.ts +249 -262
  230. package/src/e2e_l1_publisher/write_json.ts +77 -0
  231. package/src/e2e_multi_validator/utils.ts +258 -0
  232. package/src/e2e_nested_contract/nested_contract_test.ts +51 -60
  233. package/src/e2e_p2p/inactivity_slash_test.ts +180 -0
  234. package/src/e2e_p2p/p2p_network.ts +391 -240
  235. package/src/e2e_p2p/reqresp/utils.ts +274 -0
  236. package/src/e2e_p2p/shared.ts +304 -39
  237. package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
  238. package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
  239. package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
  240. package/src/e2e_token_contract/token_contract_test.ts +140 -124
  241. package/src/fixtures/authwit_proxy.ts +54 -0
  242. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  243. package/src/fixtures/e2e_prover_test.ts +329 -0
  244. package/src/fixtures/elu_monitor.ts +126 -0
  245. package/src/fixtures/fixtures.ts +98 -7
  246. package/src/fixtures/get_acvm_config.ts +4 -12
  247. package/src/fixtures/get_bb_config.ts +19 -13
  248. package/src/fixtures/ha_setup.ts +188 -0
  249. package/src/fixtures/index.ts +1 -0
  250. package/src/fixtures/l1_to_l2_messaging.ts +56 -24
  251. package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
  252. package/src/fixtures/setup.ts +1056 -0
  253. package/src/fixtures/setup_p2p_test.ts +142 -54
  254. package/src/fixtures/token_utils.ts +34 -16
  255. package/src/fixtures/utils.ts +29 -820
  256. package/src/fixtures/web3signer.ts +63 -0
  257. package/src/fixtures/with_telemetry_utils.ts +2 -2
  258. package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
  259. package/src/forward-compatibility/wallet_service.ts +104 -0
  260. package/src/guides/up_quick_start.sh +9 -19
  261. package/src/install_legacy_contracts.cjs +75 -0
  262. package/src/legacy-jest-resolver.cjs +112 -0
  263. package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +2 -2
  264. package/src/quality_of_service/prometheus_client.ts +113 -0
  265. package/src/shared/cross_chain_test_harness.ts +116 -90
  266. package/src/shared/gas_portal_test_harness.ts +75 -56
  267. package/src/shared/index.ts +2 -1
  268. package/src/shared/jest_setup.ts +52 -2
  269. package/src/shared/mock_state_view.ts +188 -0
  270. package/src/shared/submit-transactions.ts +19 -20
  271. package/src/shared/uniswap_l1_l2.ts +259 -234
  272. package/src/shared/wait_for_l1_to_l2_message.ts +23 -0
  273. package/src/simulators/lending_simulator.ts +43 -26
  274. package/src/simulators/token_simulator.ts +18 -34
  275. package/src/spartan/DEVELOP.md +128 -0
  276. package/src/spartan/setup_test_wallets.ts +420 -96
  277. package/src/spartan/tx_metrics.ts +434 -0
  278. package/src/spartan/utils/bot.ts +188 -0
  279. package/src/spartan/utils/chaos.ts +253 -0
  280. package/src/spartan/utils/clients.ts +100 -0
  281. package/src/spartan/utils/config.ts +29 -0
  282. package/src/spartan/utils/health.ts +255 -0
  283. package/src/spartan/utils/helm.ts +84 -0
  284. package/src/spartan/utils/index.ts +71 -0
  285. package/src/spartan/utils/k8s.ts +535 -0
  286. package/src/spartan/utils/nodes.ts +543 -0
  287. package/src/spartan/utils/pod_logs.ts +99 -0
  288. package/src/spartan/utils/scripts.ts +99 -0
  289. package/src/spartan/utils.ts +1 -582
  290. package/src/test-wallet/test_wallet.ts +376 -0
  291. package/src/test-wallet/utils.ts +108 -0
  292. package/src/test-wallet/wallet_worker_script.ts +63 -0
  293. package/src/test-wallet/worker_wallet.ts +218 -0
  294. package/src/test-wallet/worker_wallet_schema.ts +13 -0
  295. package/dest/e2e_prover/e2e_prover_test.d.ts +0 -56
  296. package/dest/e2e_prover/e2e_prover_test.d.ts.map +0 -1
  297. package/dest/e2e_prover/e2e_prover_test.js +0 -291
  298. package/dest/fixtures/setup_l1_contracts.d.ts +0 -6
  299. package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
  300. package/dest/fixtures/setup_l1_contracts.js +0 -17
  301. package/dest/fixtures/snapshot_manager.d.ts +0 -87
  302. package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
  303. package/dest/fixtures/snapshot_manager.js +0 -479
  304. package/dest/quality_of_service/alert_checker.d.ts +0 -41
  305. package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
  306. package/dest/sample-dapp/connect.js +0 -12
  307. package/dest/sample-dapp/contracts.js +0 -10
  308. package/dest/sample-dapp/deploy.js +0 -35
  309. package/dest/sample-dapp/index.js +0 -98
  310. package/src/e2e_prover/e2e_prover_test.ts +0 -418
  311. package/src/fixtures/setup_l1_contracts.ts +0 -27
  312. package/src/fixtures/snapshot_manager.ts +0 -617
  313. package/src/sample-dapp/connect.mjs +0 -16
  314. package/src/sample-dapp/contracts.mjs +0 -14
  315. package/src/sample-dapp/deploy.mjs +0 -40
  316. package/src/sample-dapp/index.mjs +0 -128
@@ -0,0 +1,399 @@
1
+ import { NO_FROM } from '@aztec/aztec.js/account';
2
+ import { AztecAddress } from '@aztec/aztec.js/addresses';
3
+ import { FeeJuicePaymentMethodWithClaim } from '@aztec/aztec.js/fee';
4
+ import { type FeePaymentMethod, PrivateFeePaymentMethod, SponsoredFeePaymentMethod } from '@aztec/aztec.js/fee';
5
+ import { type Logger, createLogger } from '@aztec/aztec.js/log';
6
+ import type { AztecNode } from '@aztec/aztec.js/node';
7
+ import type { Wallet } from '@aztec/aztec.js/wallet';
8
+ import { CheatCodes, getTokenAllowedSetupFunctions } from '@aztec/aztec/testing';
9
+ import { createExtendedL1Client } from '@aztec/ethereum/client';
10
+ import { RollupContract } from '@aztec/ethereum/contracts';
11
+ import type { DeployAztecL1ContractsArgs } from '@aztec/ethereum/deploy-aztec-l1-contracts';
12
+ import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
13
+ import { ChainMonitor } from '@aztec/ethereum/test';
14
+ import { randomBytes } from '@aztec/foundation/crypto/random';
15
+ import { Fr } from '@aztec/foundation/curves/bn254';
16
+ import { EthAddress } from '@aztec/foundation/eth-address';
17
+ import { TestERC20Abi } from '@aztec/l1-artifacts/TestERC20Abi';
18
+ import { TestERC20Bytecode } from '@aztec/l1-artifacts/TestERC20Bytecode';
19
+ import { AMMContract } from '@aztec/noir-contracts.js/AMM';
20
+ import { FPCContract } from '@aztec/noir-contracts.js/FPC';
21
+ import { FeeJuiceContract } from '@aztec/noir-contracts.js/FeeJuice';
22
+ import { SponsoredFPCContract } from '@aztec/noir-contracts.js/SponsoredFPC';
23
+ import { TokenContract as BananaCoin, TokenContract } from '@aztec/noir-contracts.js/Token';
24
+ import { ProtocolContractAddress } from '@aztec/protocol-contracts';
25
+ import { getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice';
26
+ import { type PXEConfig, getPXEConfig } from '@aztec/pxe/server';
27
+ import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
28
+ import { GasSettings } from '@aztec/stdlib/gas';
29
+ import { deriveSigningKey } from '@aztec/stdlib/keys';
30
+
31
+ import { AUTOMINE_E2E_OPTS, MNEMONIC, getPaddedMaxFeesPerGas } from '../../fixtures/fixtures.js';
32
+ import { type EndToEndContext, type SetupOptions, deployAccounts, setup, teardown } from '../../fixtures/setup.js';
33
+ import { mintTokensToPrivate } from '../../fixtures/token_utils.js';
34
+ import { setupSponsoredFPC } from '../../fixtures/utils.js';
35
+ import { CrossChainTestHarness } from '../../shared/cross_chain_test_harness.js';
36
+ import {
37
+ FeeJuicePortalTestingHarnessFactory,
38
+ type GasBridgingTestHarness,
39
+ } from '../../shared/gas_portal_test_harness.js';
40
+ import { TestWallet } from '../../test-wallet/test_wallet.js';
41
+ import { ProxyLogger } from './benchmark.js';
42
+ import { type ClientFlowsConfig, FULL_FLOWS_CONFIG, KEY_FLOWS_CONFIG } from './config.js';
43
+
44
+ const { BENCHMARK_CONFIG } = process.env;
45
+
46
+ export type AccountType = 'ecdsar1' | 'schnorr';
47
+ export type FeePaymentMethodGetter = (wallet: Wallet, sender: AztecAddress) => Promise<FeePaymentMethod | undefined>;
48
+ export type BenchmarkingFeePaymentMethod = 'bridged_fee_juice' | 'private_fpc' | 'sponsored_fpc' | 'fee_juice';
49
+
50
+ export class ClientFlowsBenchmark {
51
+ public logger: Logger;
52
+ public aztecNode!: AztecNode;
53
+ public cheatCodes!: CheatCodes;
54
+ public context!: EndToEndContext;
55
+ public chainMonitor!: ChainMonitor;
56
+ public feeJuiceBridgeTestHarness!: GasBridgingTestHarness;
57
+ public adminWallet!: TestWallet;
58
+
59
+ // The admin that aids in the setup of the test
60
+ public adminAddress!: AztecAddress;
61
+
62
+ // Aztec Node config
63
+ public sequencerAddress!: AztecAddress;
64
+ public coinbase!: EthAddress;
65
+
66
+ // Contracts
67
+ public feeJuiceContract!: FeeJuiceContract;
68
+ // Asset in which fees are paid via FPC
69
+ public bananaCoin!: BananaCoin;
70
+ public bananaCoinInstance!: ContractInstanceWithAddress;
71
+ public bananaFPC!: FPCContract;
72
+ public bananaFPCInstance!: ContractInstanceWithAddress;
73
+ // Random asset we want to trade
74
+ public candyBarCoin!: TokenContract;
75
+ public candyBarCoinInstance!: ContractInstanceWithAddress;
76
+ // AMM contract
77
+ public amm!: AMMContract;
78
+ public ammInstance!: ContractInstanceWithAddress;
79
+ // Liquidity token for AMM
80
+ public liquidityToken!: TokenContract;
81
+ public liquidityTokenInstance!: ContractInstanceWithAddress;
82
+ // Sponsored FPC contract
83
+ public sponsoredFPC!: SponsoredFPCContract;
84
+ public sponsoredFPCInstance!: ContractInstanceWithAddress;
85
+
86
+ // PXE and Wallet used by the benchmarking user. It can be set up with client-side proving enabled
87
+ public userWallet!: TestWallet;
88
+
89
+ public realProofs = ['true', '1'].includes(process.env.REAL_PROOFS ?? '');
90
+
91
+ // `apps` is the number of private function calls contributed by this payment method.
92
+ // Each app produces one execution step at proving time; the orchestrator additionally produces
93
+ // one kernel step per batch of N apps (see `expectedExecutionSteps` in `benchmark.ts`).
94
+ public paymentMethods: Record<BenchmarkingFeePaymentMethod, { forWallet: FeePaymentMethodGetter; apps: number }> = {
95
+ // eslint-disable-next-line camelcase
96
+ bridged_fee_juice: {
97
+ forWallet: this.getBridgedFeeJuicePaymentMethodForWallet.bind(this),
98
+ apps: 1, // FeeJuice claim
99
+ },
100
+ // eslint-disable-next-line camelcase
101
+ private_fpc: {
102
+ forWallet: this.getPrivateFPCPaymentMethodForWallet.bind(this),
103
+ apps:
104
+ 1 + // FPC entrypoint
105
+ 1 + // BananaCoin transfer_to_public
106
+ 1 + // Account verify_private_authwit
107
+ 1, // BananaCoin prepare_private_balance_increase
108
+ },
109
+ // eslint-disable-next-line camelcase
110
+ sponsored_fpc: {
111
+ forWallet: this.getSponsoredFPCPaymentMethodForWallet.bind(this),
112
+ apps: 1, // Sponsored FPC sponsor_unconditionally
113
+ },
114
+ // eslint-disable-next-line camelcase
115
+ fee_juice: {
116
+ forWallet: () => Promise.resolve(undefined),
117
+ apps: 0,
118
+ },
119
+ };
120
+
121
+ public config: ClientFlowsConfig;
122
+
123
+ private proxyLogger: ProxyLogger;
124
+ private setupOptions: Partial<SetupOptions & DeployAztecL1ContractsArgs>;
125
+
126
+ constructor(testName?: string, setupOptions: Partial<SetupOptions & DeployAztecL1ContractsArgs> = {}) {
127
+ this.logger = createLogger(`bench:client_flows${testName ? `:${testName}` : ''}`);
128
+ this.setupOptions = { ...AUTOMINE_E2E_OPTS, startProverNode: true, ...setupOptions };
129
+ this.config = BENCHMARK_CONFIG === 'key_flows' ? KEY_FLOWS_CONFIG : FULL_FLOWS_CONFIG;
130
+ ProxyLogger.create();
131
+ this.proxyLogger = ProxyLogger.getInstance();
132
+ }
133
+
134
+ async setup() {
135
+ this.logger.info('Setting up subsystems from fresh');
136
+ // Token allowlist entries are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
137
+ const tokenAllowList = await getTokenAllowedSetupFunctions();
138
+ this.context = await setup(0, {
139
+ ...this.setupOptions,
140
+ fundSponsoredFPC: true,
141
+ skipAccountDeployment: true,
142
+ l1ContractsArgs: this.setupOptions,
143
+ txPublicSetupAllowListExtend: [...(this.setupOptions.txPublicSetupAllowListExtend ?? []), ...tokenAllowList],
144
+ });
145
+ await this.applyBaseSetup();
146
+
147
+ await this.context.aztecNodeService.setConfig({ feeRecipient: this.sequencerAddress, coinbase: this.coinbase });
148
+
149
+ const rollupContract = RollupContract.getFromConfig(this.context.config);
150
+ this.chainMonitor = new ChainMonitor(rollupContract, this.context.dateProvider, this.logger, 200).start();
151
+
152
+ return this;
153
+ }
154
+
155
+ async teardown() {
156
+ await this.chainMonitor.stop();
157
+ await this.userWallet?.stop();
158
+ await teardown(this.context);
159
+ }
160
+
161
+ async mintAndBridgeFeeJuice(address: AztecAddress) {
162
+ const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(address);
163
+ const { claimSecret: secret, messageLeafIndex: index } = claim;
164
+ await this.feeJuiceContract.methods
165
+ .claim(address, claim.claimAmount, secret, index)
166
+ .send({ from: this.adminAddress });
167
+ }
168
+
169
+ /** Admin mints bananaCoin tokens privately to the target address and redeems them. */
170
+ async mintPrivateBananas(amount: bigint, address: AztecAddress) {
171
+ const { result: balanceBefore } = await this.bananaCoin.methods
172
+ .balance_of_private(address)
173
+ .simulate({ from: address });
174
+
175
+ await mintTokensToPrivate(this.bananaCoin, this.adminAddress, address, amount);
176
+
177
+ const { result: balanceAfter } = await this.bananaCoin.methods
178
+ .balance_of_private(address)
179
+ .simulate({ from: address });
180
+ expect(balanceAfter).toEqual(balanceBefore + amount);
181
+ }
182
+
183
+ createBenchmarkingAccountManager(wallet: TestWallet, type: 'ecdsar1' | 'schnorr') {
184
+ const benchysSecret = Fr.random();
185
+ const salt = Fr.random();
186
+
187
+ let benchysPrivateSigningKey;
188
+ if (type === 'schnorr') {
189
+ benchysPrivateSigningKey = deriveSigningKey(benchysSecret);
190
+ return wallet.createSchnorrAccount(benchysSecret, salt, benchysPrivateSigningKey);
191
+ } else if (type === 'ecdsar1') {
192
+ benchysPrivateSigningKey = randomBytes(32);
193
+ return wallet.createECDSARAccount(benchysSecret, salt, benchysPrivateSigningKey);
194
+ } else {
195
+ throw new Error(`Unknown account type: ${type}`);
196
+ }
197
+ }
198
+
199
+ public async applyBaseSetup() {
200
+ await this.applyInitialAccounts();
201
+ await this.applySetupFeeJuice();
202
+ }
203
+
204
+ async applyInitialAccounts() {
205
+ this.logger.info('Applying initial accounts setup');
206
+ const { deployedAccounts } = await deployAccounts(
207
+ 2,
208
+ this.logger,
209
+ )({
210
+ wallet: this.context.wallet,
211
+ initialFundedAccounts: this.context.initialFundedAccounts,
212
+ });
213
+
214
+ const [{ address: adminAddress }, { address: sequencerAddress }] = deployedAccounts;
215
+
216
+ this.adminWallet = this.context.wallet;
217
+ this.aztecNode = this.context.aztecNodeService;
218
+ this.cheatCodes = this.context.cheatCodes;
219
+
220
+ this.adminAddress = adminAddress;
221
+ this.sequencerAddress = sequencerAddress;
222
+
223
+ const canonicalFeeJuice = await getCanonicalFeeJuice();
224
+ this.feeJuiceContract = FeeJuiceContract.at(canonicalFeeJuice.address, this.adminWallet);
225
+ this.coinbase = EthAddress.random();
226
+
227
+ const userPXEConfig = getPXEConfig();
228
+ const userPXEConfigWithContracts = {
229
+ ...userPXEConfig,
230
+ proverEnabled: this.realProofs,
231
+ } as PXEConfig;
232
+
233
+ this.userWallet = await TestWallet.create(this.aztecNode, userPXEConfigWithContracts, {
234
+ loggers: {
235
+ prover: this.proxyLogger.createLogger('pxe:bb:wasm:bundle:proxied'),
236
+ },
237
+ });
238
+ }
239
+
240
+ async applySetupFeeJuice() {
241
+ this.logger.info('Applying fee juice setup');
242
+ this.feeJuiceContract = FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, this.adminWallet);
243
+
244
+ this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
245
+ aztecNode: this.context.aztecNodeService,
246
+ aztecNodeAdmin: this.context.aztecNodeService,
247
+ l1Client: this.context.deployL1ContractsValues.l1Client,
248
+ wallet: this.adminWallet,
249
+ logger: this.logger,
250
+ });
251
+ }
252
+
253
+ async applyDeployBananaToken() {
254
+ this.logger.info('Applying banana token deployment');
255
+ const { contract: bananaCoin, instance: bananaCoinInstance } = await BananaCoin.deploy(
256
+ this.adminWallet,
257
+ this.adminAddress,
258
+ 'BC',
259
+ 'BC',
260
+ 18n,
261
+ ).send({
262
+ from: this.adminAddress,
263
+ });
264
+ this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
265
+ this.bananaCoin = bananaCoin;
266
+ this.bananaCoinInstance = bananaCoinInstance;
267
+ }
268
+
269
+ async applyDeployCandyBarToken() {
270
+ this.logger.info('Applying candy bar token deployment');
271
+ const { contract: candyBarCoin, instance: candyBarCoinInstance } = await TokenContract.deploy(
272
+ this.adminWallet,
273
+ this.adminAddress,
274
+ 'CBC',
275
+ 'CBC',
276
+ 18n,
277
+ ).send({
278
+ from: this.adminAddress,
279
+ });
280
+ this.logger.info(`CandyBarCoin deployed at ${candyBarCoin.address}`);
281
+ this.candyBarCoin = candyBarCoin;
282
+ this.candyBarCoinInstance = candyBarCoinInstance;
283
+ }
284
+
285
+ public async applyFPCSetup() {
286
+ this.logger.info('Applying FPC setup');
287
+ const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
288
+ expect((await this.context.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
289
+
290
+ const bananaCoin = this.bananaCoin;
291
+ const { contract: bananaFPC, instance: bananaFPCInstance } = await FPCContract.deploy(
292
+ this.adminWallet,
293
+ bananaCoin.address,
294
+ this.adminAddress,
295
+ ).send({
296
+ from: this.adminAddress,
297
+ });
298
+
299
+ this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
300
+
301
+ await this.feeJuiceBridgeTestHarness.bridgeFromL1ToL2(bananaFPC.address, this.adminAddress);
302
+
303
+ this.bananaFPC = bananaFPC;
304
+ this.bananaFPCInstance = bananaFPCInstance;
305
+ }
306
+
307
+ async applyDeploySponsoredFPC() {
308
+ this.logger.info('Applying sponsored FPC deployment');
309
+ const sponsoredFPCInstance = await setupSponsoredFPC(this.adminWallet);
310
+ this.logger.info(`SponsoredFPC at ${sponsoredFPCInstance.address}`);
311
+ this.sponsoredFPC = SponsoredFPCContract.at(sponsoredFPCInstance.address, this.adminWallet);
312
+ this.sponsoredFPCInstance = sponsoredFPCInstance;
313
+ }
314
+
315
+ public async createCrossChainTestHarness(owner: AztecAddress) {
316
+ const l1Client = createExtendedL1Client(this.context.config.l1RpcUrls, MNEMONIC);
317
+
318
+ const underlyingERC20Address = await deployL1Contract(l1Client, TestERC20Abi, TestERC20Bytecode, [
319
+ 'Underlying',
320
+ 'UND',
321
+ l1Client.account.address,
322
+ ]).then(({ address }) => address);
323
+
324
+ this.logger.verbose(`Setting up cross chain harness...`);
325
+ const crossChainTestHarness = await CrossChainTestHarness.new(
326
+ this.aztecNode,
327
+ l1Client,
328
+ this.adminWallet,
329
+ owner,
330
+ this.logger,
331
+ underlyingERC20Address,
332
+ );
333
+
334
+ this.logger.verbose(`L2 token deployed to: ${crossChainTestHarness.l2Token.address}`);
335
+
336
+ return crossChainTestHarness;
337
+ }
338
+
339
+ public async createAndFundBenchmarkingAccountOnUserWallet(accountType: AccountType) {
340
+ const benchysAccountManager = await this.createBenchmarkingAccountManager(this.adminWallet, accountType);
341
+ const benchysAccount = await benchysAccountManager.getAccount();
342
+ const benchysAddress = benchysAccountManager.address;
343
+ const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(benchysAddress);
344
+ const behchysDeployMethod = await benchysAccountManager.getDeployMethod();
345
+ await behchysDeployMethod.send({
346
+ from: NO_FROM,
347
+ fee: { paymentMethod: new FeeJuicePaymentMethodWithClaim(benchysAddress, claim) },
348
+ });
349
+ // Register benchy on the user's Wallet, where we're going to be interacting from
350
+ const accountManager = await this.userWallet.createAccount({
351
+ secret: benchysAccount.getSecretKey(),
352
+ salt: new Fr(benchysAccountManager.getInstance().salt),
353
+ contract: benchysAccountManager.getAccountContract(),
354
+ });
355
+ return accountManager.address;
356
+ }
357
+
358
+ public async applyDeployAmm() {
359
+ this.logger.info('Applying AMM deployment');
360
+ const { contract: liquidityToken, instance: liquidityTokenInstance } = await TokenContract.deploy(
361
+ this.adminWallet,
362
+ this.adminAddress,
363
+ 'LPT',
364
+ 'LPT',
365
+ 18n,
366
+ ).send({
367
+ from: this.adminAddress,
368
+ });
369
+ const { contract: amm, instance: ammInstance } = await AMMContract.deploy(
370
+ this.adminWallet,
371
+ this.bananaCoin.address,
372
+ this.candyBarCoin.address,
373
+ liquidityToken.address,
374
+ ).send({ from: this.adminAddress });
375
+ this.logger.info(`AMM deployed at ${amm.address}`);
376
+ await liquidityToken.methods.set_minter(amm.address, true).send({ from: this.adminAddress });
377
+ this.liquidityToken = liquidityToken;
378
+ this.liquidityTokenInstance = liquidityTokenInstance;
379
+ this.amm = amm;
380
+ this.ammInstance = ammInstance;
381
+ }
382
+
383
+ public async getBridgedFeeJuicePaymentMethodForWallet(_wallet: Wallet, sender: AztecAddress) {
384
+ const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(sender);
385
+ return new FeeJuicePaymentMethodWithClaim(sender, claim);
386
+ }
387
+
388
+ public async getPrivateFPCPaymentMethodForWallet(wallet: Wallet, sender: AztecAddress) {
389
+ // The private fee paying method assembled on the app side requires knowledge of the maximum
390
+ // fee the user is willing to pay
391
+ const maxFeesPerGas = await getPaddedMaxFeesPerGas(this.aztecNode);
392
+ const gasSettings = GasSettings.fallback({ maxFeesPerGas });
393
+ return new PrivateFeePaymentMethod(this.bananaFPC.address, sender, wallet, gasSettings);
394
+ }
395
+
396
+ public getSponsoredFPCPaymentMethodForWallet(_wallet: Wallet, _sender: AztecAddress) {
397
+ return Promise.resolve(new SponsoredFeePaymentMethod(this.sponsoredFPC.address));
398
+ }
399
+ }
@@ -0,0 +1,69 @@
1
+ import type { AccountType, BenchmarkingFeePaymentMethod } from './client_flows_benchmark.js';
2
+
3
+ export type ClientFlowConfig = {
4
+ accounts: AccountType[];
5
+ feePaymentMethods: BenchmarkingFeePaymentMethod[];
6
+ recursions?: number[];
7
+ };
8
+
9
+ type ClientFlows = 'accountDeployments' | 'deployments' | 'transfers' | 'bridging' | 'amm' | 'storageProof';
10
+
11
+ export type ClientFlowsConfig = {
12
+ [key in ClientFlows]: ClientFlowConfig;
13
+ };
14
+
15
+ export const KEY_FLOWS_CONFIG: ClientFlowsConfig = {
16
+ accountDeployments: {
17
+ accounts: ['ecdsar1', 'schnorr'],
18
+ feePaymentMethods: ['sponsored_fpc'],
19
+ },
20
+ deployments: {
21
+ accounts: ['ecdsar1', 'schnorr'],
22
+ feePaymentMethods: ['sponsored_fpc'],
23
+ },
24
+ amm: {
25
+ accounts: ['ecdsar1'],
26
+ feePaymentMethods: ['sponsored_fpc'],
27
+ },
28
+ bridging: {
29
+ accounts: ['ecdsar1'],
30
+ feePaymentMethods: ['sponsored_fpc'],
31
+ },
32
+ transfers: {
33
+ accounts: ['ecdsar1'],
34
+ feePaymentMethods: ['sponsored_fpc', 'private_fpc'],
35
+ recursions: [0, 1],
36
+ },
37
+ storageProof: {
38
+ accounts: ['ecdsar1'],
39
+ feePaymentMethods: ['sponsored_fpc'],
40
+ },
41
+ };
42
+
43
+ export const FULL_FLOWS_CONFIG: ClientFlowsConfig = {
44
+ accountDeployments: {
45
+ accounts: ['ecdsar1', 'schnorr'],
46
+ feePaymentMethods: ['bridged_fee_juice', 'sponsored_fpc'],
47
+ },
48
+ deployments: {
49
+ accounts: ['ecdsar1', 'schnorr'],
50
+ feePaymentMethods: ['bridged_fee_juice', 'sponsored_fpc'],
51
+ },
52
+ amm: {
53
+ accounts: ['ecdsar1', 'schnorr'],
54
+ feePaymentMethods: ['sponsored_fpc', 'private_fpc'],
55
+ },
56
+ bridging: {
57
+ accounts: ['ecdsar1', 'schnorr'],
58
+ feePaymentMethods: ['sponsored_fpc', 'private_fpc'],
59
+ },
60
+ transfers: {
61
+ accounts: ['ecdsar1', 'schnorr'],
62
+ feePaymentMethods: ['sponsored_fpc', 'private_fpc'],
63
+ recursions: [0, 1, 2],
64
+ },
65
+ storageProof: {
66
+ accounts: ['ecdsar1', 'schnorr'],
67
+ feePaymentMethods: ['sponsored_fpc', 'private_fpc'],
68
+ },
69
+ };
@@ -0,0 +1,89 @@
1
+ import { BBBundlePrivateKernelProver } from '@aztec/bb-prover/client/bundle';
2
+ import { createLogger, logger } from '@aztec/foundation/log';
3
+ import { Timer } from '@aztec/foundation/timer';
4
+ import { WASMSimulator } from '@aztec/simulator/client';
5
+ import type { PrivateExecutionStep } from '@aztec/stdlib/kernel';
6
+ import type { ProvingStats, ProvingTimings, SimulationStats } from '@aztec/stdlib/tx';
7
+
8
+ import { Decoder } from 'msgpackr';
9
+ import { readFile, readdir, writeFile } from 'node:fs/promises';
10
+ import { join } from 'node:path';
11
+
12
+ import { type Log, ProxyLogger, generateBenchmark } from './benchmark.js';
13
+
14
+ async function main() {
15
+ ProxyLogger.create();
16
+ const proxyLogger = ProxyLogger.getInstance();
17
+ const ivcFolder = process.env.CAPTURE_IVC_FOLDER;
18
+ if (!ivcFolder) {
19
+ throw new Error('CAPTURE_IVC_FOLDER is not set');
20
+ }
21
+ const flows = await readdir(ivcFolder);
22
+ logger.info(`Flows in ${ivcFolder}: \n${flows.map(flowName => `\t- ${flowName}`).join('\n')}`);
23
+ const simulator = new WASMSimulator();
24
+ const log = proxyLogger.createLogger('bb:prover');
25
+ const prover = new BBBundlePrivateKernelProver(simulator, { logger: log });
26
+
27
+ const userLog = createLogger('chonk_flows:data_processor');
28
+
29
+ for (const flow of flows) {
30
+ userLog.info(`Processing flow ${flow}`);
31
+ const ivcInputs = await readFile(join(ivcFolder, flow, 'ivc-inputs.msgpack'));
32
+ const stepsFromFile: PrivateExecutionStep[] = new Decoder({ useRecords: false }).unpack(ivcInputs);
33
+ const witnesses = await readFile(join(ivcFolder, flow, 'witnesses.json'));
34
+
35
+ const witnessStack = JSON.parse(witnesses.toString()).map((witnessMap: Record<string, string>) => {
36
+ return new Map<number, string>(Object.entries(witnessMap).map(([k, v]) => [Number(k), v]));
37
+ });
38
+ const profileFile = await readFile(join(ivcFolder, flow, 'profile.json'));
39
+ const profile = JSON.parse(profileFile.toString()) as {
40
+ stats: ProvingStats | SimulationStats;
41
+ steps: {
42
+ functionName: string;
43
+ gateCount: number;
44
+ timings: { witgen: number; gateCount: number };
45
+ }[];
46
+ };
47
+ const privateExecutionSteps: PrivateExecutionStep[] = profile.steps.map((step, i) => ({
48
+ functionName: step.functionName,
49
+ gateCount: step.gateCount,
50
+ bytecode: stepsFromFile[i].bytecode,
51
+ // TODO(AD) do we still want to take this from witness.json?
52
+ witness: witnessStack[i],
53
+ vk: stepsFromFile[i].vk,
54
+ timings: {
55
+ witgen: step.timings.witgen,
56
+ gateCount: step.timings.gateCount,
57
+ },
58
+ }));
59
+
60
+ let error: any;
61
+ let currentLogs: Log[] = [];
62
+ let provingTime;
63
+ try {
64
+ const provingTimer = new Timer();
65
+ await prover.createChonkProof(privateExecutionSteps);
66
+ provingTime = provingTimer.ms();
67
+ } catch (e) {
68
+ userLog.error(`Failed to generate chonk proof for ${flow}`, e);
69
+ error = (e as Error).message;
70
+ }
71
+ // Extract logs from this run from the proxy and write them to disk unconditionally
72
+ currentLogs = proxyLogger.getLogs();
73
+ await writeFile(join(ivcFolder, flow, 'logs.json'), JSON.stringify(currentLogs, null, 2));
74
+ if (!(profile.stats.timings as ProvingTimings).proving) {
75
+ (profile.stats.timings as ProvingTimings).proving = provingTime;
76
+ }
77
+ const benchmark = generateBenchmark(flow, currentLogs, profile.stats, privateExecutionSteps, 'native', error);
78
+ await writeFile(join(ivcFolder, flow, 'benchmark.json'), JSON.stringify(benchmark, null, 2));
79
+ proxyLogger.flushLogs();
80
+ }
81
+ }
82
+
83
+ try {
84
+ await main();
85
+ } catch (e) {
86
+ // eslint-disable-next-line no-console
87
+ console.error(e);
88
+ process.exit(1);
89
+ }