@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,318 @@
1
+ import { NO_FROM } from '@aztec/aztec.js/account';
2
+ import { FeeJuicePaymentMethodWithClaim } from '@aztec/aztec.js/fee';
3
+ import { PrivateFeePaymentMethod, SponsoredFeePaymentMethod } from '@aztec/aztec.js/fee';
4
+ import { createLogger } from '@aztec/aztec.js/log';
5
+ import { getTokenAllowedSetupFunctions } from '@aztec/aztec/testing';
6
+ import { createExtendedL1Client } from '@aztec/ethereum/client';
7
+ import { RollupContract } from '@aztec/ethereum/contracts';
8
+ import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
9
+ import { ChainMonitor } from '@aztec/ethereum/test';
10
+ import { randomBytes } from '@aztec/foundation/crypto/random';
11
+ import { Fr } from '@aztec/foundation/curves/bn254';
12
+ import { EthAddress } from '@aztec/foundation/eth-address';
13
+ import { TestERC20Abi } from '@aztec/l1-artifacts/TestERC20Abi';
14
+ import { TestERC20Bytecode } from '@aztec/l1-artifacts/TestERC20Bytecode';
15
+ import { AMMContract } from '@aztec/noir-contracts.js/AMM';
16
+ import { FPCContract } from '@aztec/noir-contracts.js/FPC';
17
+ import { FeeJuiceContract } from '@aztec/noir-contracts.js/FeeJuice';
18
+ import { SponsoredFPCContract } from '@aztec/noir-contracts.js/SponsoredFPC';
19
+ import { TokenContract as BananaCoin, TokenContract } from '@aztec/noir-contracts.js/Token';
20
+ import { ProtocolContractAddress } from '@aztec/protocol-contracts';
21
+ import { getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice';
22
+ import { getPXEConfig } from '@aztec/pxe/server';
23
+ import { GasSettings } from '@aztec/stdlib/gas';
24
+ import { deriveSigningKey } from '@aztec/stdlib/keys';
25
+ import { AUTOMINE_E2E_OPTS, MNEMONIC, getPaddedMaxFeesPerGas } from '../../fixtures/fixtures.js';
26
+ import { deployAccounts, setup, teardown } from '../../fixtures/setup.js';
27
+ import { mintTokensToPrivate } from '../../fixtures/token_utils.js';
28
+ import { setupSponsoredFPC } from '../../fixtures/utils.js';
29
+ import { CrossChainTestHarness } from '../../shared/cross_chain_test_harness.js';
30
+ import { FeeJuicePortalTestingHarnessFactory } from '../../shared/gas_portal_test_harness.js';
31
+ import { TestWallet } from '../../test-wallet/test_wallet.js';
32
+ import { ProxyLogger } from './benchmark.js';
33
+ import { FULL_FLOWS_CONFIG, KEY_FLOWS_CONFIG } from './config.js';
34
+ const { BENCHMARK_CONFIG } = process.env;
35
+ export class ClientFlowsBenchmark {
36
+ logger;
37
+ aztecNode;
38
+ cheatCodes;
39
+ context;
40
+ chainMonitor;
41
+ feeJuiceBridgeTestHarness;
42
+ adminWallet;
43
+ // The admin that aids in the setup of the test
44
+ adminAddress;
45
+ // Aztec Node config
46
+ sequencerAddress;
47
+ coinbase;
48
+ // Contracts
49
+ feeJuiceContract;
50
+ // Asset in which fees are paid via FPC
51
+ bananaCoin;
52
+ bananaCoinInstance;
53
+ bananaFPC;
54
+ bananaFPCInstance;
55
+ // Random asset we want to trade
56
+ candyBarCoin;
57
+ candyBarCoinInstance;
58
+ // AMM contract
59
+ amm;
60
+ ammInstance;
61
+ // Liquidity token for AMM
62
+ liquidityToken;
63
+ liquidityTokenInstance;
64
+ // Sponsored FPC contract
65
+ sponsoredFPC;
66
+ sponsoredFPCInstance;
67
+ // PXE and Wallet used by the benchmarking user. It can be set up with client-side proving enabled
68
+ userWallet;
69
+ realProofs = [
70
+ 'true',
71
+ '1'
72
+ ].includes(process.env.REAL_PROOFS ?? '');
73
+ // `apps` is the number of private function calls contributed by this payment method.
74
+ // Each app produces one execution step at proving time; the orchestrator additionally produces
75
+ // one kernel step per batch of N apps (see `expectedExecutionSteps` in `benchmark.ts`).
76
+ paymentMethods = {
77
+ // eslint-disable-next-line camelcase
78
+ bridged_fee_juice: {
79
+ forWallet: this.getBridgedFeeJuicePaymentMethodForWallet.bind(this),
80
+ apps: 1
81
+ },
82
+ // eslint-disable-next-line camelcase
83
+ private_fpc: {
84
+ forWallet: this.getPrivateFPCPaymentMethodForWallet.bind(this),
85
+ apps: 1 + // FPC entrypoint
86
+ 1 + // BananaCoin transfer_to_public
87
+ 1 + // Account verify_private_authwit
88
+ 1
89
+ },
90
+ // eslint-disable-next-line camelcase
91
+ sponsored_fpc: {
92
+ forWallet: this.getSponsoredFPCPaymentMethodForWallet.bind(this),
93
+ apps: 1
94
+ },
95
+ // eslint-disable-next-line camelcase
96
+ fee_juice: {
97
+ forWallet: ()=>Promise.resolve(undefined),
98
+ apps: 0
99
+ }
100
+ };
101
+ config;
102
+ proxyLogger;
103
+ setupOptions;
104
+ constructor(testName, setupOptions = {}){
105
+ this.logger = createLogger(`bench:client_flows${testName ? `:${testName}` : ''}`);
106
+ this.setupOptions = {
107
+ ...AUTOMINE_E2E_OPTS,
108
+ startProverNode: true,
109
+ ...setupOptions
110
+ };
111
+ this.config = BENCHMARK_CONFIG === 'key_flows' ? KEY_FLOWS_CONFIG : FULL_FLOWS_CONFIG;
112
+ ProxyLogger.create();
113
+ this.proxyLogger = ProxyLogger.getInstance();
114
+ }
115
+ async setup() {
116
+ this.logger.info('Setting up subsystems from fresh');
117
+ // Token allowlist entries are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
118
+ const tokenAllowList = await getTokenAllowedSetupFunctions();
119
+ this.context = await setup(0, {
120
+ ...this.setupOptions,
121
+ fundSponsoredFPC: true,
122
+ skipAccountDeployment: true,
123
+ l1ContractsArgs: this.setupOptions,
124
+ txPublicSetupAllowListExtend: [
125
+ ...this.setupOptions.txPublicSetupAllowListExtend ?? [],
126
+ ...tokenAllowList
127
+ ]
128
+ });
129
+ await this.applyBaseSetup();
130
+ await this.context.aztecNodeService.setConfig({
131
+ feeRecipient: this.sequencerAddress,
132
+ coinbase: this.coinbase
133
+ });
134
+ const rollupContract = RollupContract.getFromConfig(this.context.config);
135
+ this.chainMonitor = new ChainMonitor(rollupContract, this.context.dateProvider, this.logger, 200).start();
136
+ return this;
137
+ }
138
+ async teardown() {
139
+ await this.chainMonitor.stop();
140
+ await this.userWallet?.stop();
141
+ await teardown(this.context);
142
+ }
143
+ async mintAndBridgeFeeJuice(address) {
144
+ const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(address);
145
+ const { claimSecret: secret, messageLeafIndex: index } = claim;
146
+ await this.feeJuiceContract.methods.claim(address, claim.claimAmount, secret, index).send({
147
+ from: this.adminAddress
148
+ });
149
+ }
150
+ /** Admin mints bananaCoin tokens privately to the target address and redeems them. */ async mintPrivateBananas(amount, address) {
151
+ const { result: balanceBefore } = await this.bananaCoin.methods.balance_of_private(address).simulate({
152
+ from: address
153
+ });
154
+ await mintTokensToPrivate(this.bananaCoin, this.adminAddress, address, amount);
155
+ const { result: balanceAfter } = await this.bananaCoin.methods.balance_of_private(address).simulate({
156
+ from: address
157
+ });
158
+ expect(balanceAfter).toEqual(balanceBefore + amount);
159
+ }
160
+ createBenchmarkingAccountManager(wallet, type) {
161
+ const benchysSecret = Fr.random();
162
+ const salt = Fr.random();
163
+ let benchysPrivateSigningKey;
164
+ if (type === 'schnorr') {
165
+ benchysPrivateSigningKey = deriveSigningKey(benchysSecret);
166
+ return wallet.createSchnorrAccount(benchysSecret, salt, benchysPrivateSigningKey);
167
+ } else if (type === 'ecdsar1') {
168
+ benchysPrivateSigningKey = randomBytes(32);
169
+ return wallet.createECDSARAccount(benchysSecret, salt, benchysPrivateSigningKey);
170
+ } else {
171
+ throw new Error(`Unknown account type: ${type}`);
172
+ }
173
+ }
174
+ async applyBaseSetup() {
175
+ await this.applyInitialAccounts();
176
+ await this.applySetupFeeJuice();
177
+ }
178
+ async applyInitialAccounts() {
179
+ this.logger.info('Applying initial accounts setup');
180
+ const { deployedAccounts } = await deployAccounts(2, this.logger)({
181
+ wallet: this.context.wallet,
182
+ initialFundedAccounts: this.context.initialFundedAccounts
183
+ });
184
+ const [{ address: adminAddress }, { address: sequencerAddress }] = deployedAccounts;
185
+ this.adminWallet = this.context.wallet;
186
+ this.aztecNode = this.context.aztecNodeService;
187
+ this.cheatCodes = this.context.cheatCodes;
188
+ this.adminAddress = adminAddress;
189
+ this.sequencerAddress = sequencerAddress;
190
+ const canonicalFeeJuice = await getCanonicalFeeJuice();
191
+ this.feeJuiceContract = FeeJuiceContract.at(canonicalFeeJuice.address, this.adminWallet);
192
+ this.coinbase = EthAddress.random();
193
+ const userPXEConfig = getPXEConfig();
194
+ const userPXEConfigWithContracts = {
195
+ ...userPXEConfig,
196
+ proverEnabled: this.realProofs
197
+ };
198
+ this.userWallet = await TestWallet.create(this.aztecNode, userPXEConfigWithContracts, {
199
+ loggers: {
200
+ prover: this.proxyLogger.createLogger('pxe:bb:wasm:bundle:proxied')
201
+ }
202
+ });
203
+ }
204
+ async applySetupFeeJuice() {
205
+ this.logger.info('Applying fee juice setup');
206
+ this.feeJuiceContract = FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, this.adminWallet);
207
+ this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
208
+ aztecNode: this.context.aztecNodeService,
209
+ aztecNodeAdmin: this.context.aztecNodeService,
210
+ l1Client: this.context.deployL1ContractsValues.l1Client,
211
+ wallet: this.adminWallet,
212
+ logger: this.logger
213
+ });
214
+ }
215
+ async applyDeployBananaToken() {
216
+ this.logger.info('Applying banana token deployment');
217
+ const { contract: bananaCoin, instance: bananaCoinInstance } = await BananaCoin.deploy(this.adminWallet, this.adminAddress, 'BC', 'BC', 18n).send({
218
+ from: this.adminAddress
219
+ });
220
+ this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
221
+ this.bananaCoin = bananaCoin;
222
+ this.bananaCoinInstance = bananaCoinInstance;
223
+ }
224
+ async applyDeployCandyBarToken() {
225
+ this.logger.info('Applying candy bar token deployment');
226
+ const { contract: candyBarCoin, instance: candyBarCoinInstance } = await TokenContract.deploy(this.adminWallet, this.adminAddress, 'CBC', 'CBC', 18n).send({
227
+ from: this.adminAddress
228
+ });
229
+ this.logger.info(`CandyBarCoin deployed at ${candyBarCoin.address}`);
230
+ this.candyBarCoin = candyBarCoin;
231
+ this.candyBarCoinInstance = candyBarCoinInstance;
232
+ }
233
+ async applyFPCSetup() {
234
+ this.logger.info('Applying FPC setup');
235
+ const feeJuiceContract = this.feeJuiceBridgeTestHarness.feeJuice;
236
+ expect((await this.context.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
237
+ const bananaCoin = this.bananaCoin;
238
+ const { contract: bananaFPC, instance: bananaFPCInstance } = await FPCContract.deploy(this.adminWallet, bananaCoin.address, this.adminAddress).send({
239
+ from: this.adminAddress
240
+ });
241
+ this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
242
+ await this.feeJuiceBridgeTestHarness.bridgeFromL1ToL2(bananaFPC.address, this.adminAddress);
243
+ this.bananaFPC = bananaFPC;
244
+ this.bananaFPCInstance = bananaFPCInstance;
245
+ }
246
+ async applyDeploySponsoredFPC() {
247
+ this.logger.info('Applying sponsored FPC deployment');
248
+ const sponsoredFPCInstance = await setupSponsoredFPC(this.adminWallet);
249
+ this.logger.info(`SponsoredFPC at ${sponsoredFPCInstance.address}`);
250
+ this.sponsoredFPC = SponsoredFPCContract.at(sponsoredFPCInstance.address, this.adminWallet);
251
+ this.sponsoredFPCInstance = sponsoredFPCInstance;
252
+ }
253
+ async createCrossChainTestHarness(owner) {
254
+ const l1Client = createExtendedL1Client(this.context.config.l1RpcUrls, MNEMONIC);
255
+ const underlyingERC20Address = await deployL1Contract(l1Client, TestERC20Abi, TestERC20Bytecode, [
256
+ 'Underlying',
257
+ 'UND',
258
+ l1Client.account.address
259
+ ]).then(({ address })=>address);
260
+ this.logger.verbose(`Setting up cross chain harness...`);
261
+ const crossChainTestHarness = await CrossChainTestHarness.new(this.aztecNode, l1Client, this.adminWallet, owner, this.logger, underlyingERC20Address);
262
+ this.logger.verbose(`L2 token deployed to: ${crossChainTestHarness.l2Token.address}`);
263
+ return crossChainTestHarness;
264
+ }
265
+ async createAndFundBenchmarkingAccountOnUserWallet(accountType) {
266
+ const benchysAccountManager = await this.createBenchmarkingAccountManager(this.adminWallet, accountType);
267
+ const benchysAccount = await benchysAccountManager.getAccount();
268
+ const benchysAddress = benchysAccountManager.address;
269
+ const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(benchysAddress);
270
+ const behchysDeployMethod = await benchysAccountManager.getDeployMethod();
271
+ await behchysDeployMethod.send({
272
+ from: NO_FROM,
273
+ fee: {
274
+ paymentMethod: new FeeJuicePaymentMethodWithClaim(benchysAddress, claim)
275
+ }
276
+ });
277
+ // Register benchy on the user's Wallet, where we're going to be interacting from
278
+ const accountManager = await this.userWallet.createAccount({
279
+ secret: benchysAccount.getSecretKey(),
280
+ salt: new Fr(benchysAccountManager.getInstance().salt),
281
+ contract: benchysAccountManager.getAccountContract()
282
+ });
283
+ return accountManager.address;
284
+ }
285
+ async applyDeployAmm() {
286
+ this.logger.info('Applying AMM deployment');
287
+ const { contract: liquidityToken, instance: liquidityTokenInstance } = await TokenContract.deploy(this.adminWallet, this.adminAddress, 'LPT', 'LPT', 18n).send({
288
+ from: this.adminAddress
289
+ });
290
+ const { contract: amm, instance: ammInstance } = await AMMContract.deploy(this.adminWallet, this.bananaCoin.address, this.candyBarCoin.address, liquidityToken.address).send({
291
+ from: this.adminAddress
292
+ });
293
+ this.logger.info(`AMM deployed at ${amm.address}`);
294
+ await liquidityToken.methods.set_minter(amm.address, true).send({
295
+ from: this.adminAddress
296
+ });
297
+ this.liquidityToken = liquidityToken;
298
+ this.liquidityTokenInstance = liquidityTokenInstance;
299
+ this.amm = amm;
300
+ this.ammInstance = ammInstance;
301
+ }
302
+ async getBridgedFeeJuicePaymentMethodForWallet(_wallet, sender) {
303
+ const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(sender);
304
+ return new FeeJuicePaymentMethodWithClaim(sender, claim);
305
+ }
306
+ async getPrivateFPCPaymentMethodForWallet(wallet, sender) {
307
+ // The private fee paying method assembled on the app side requires knowledge of the maximum
308
+ // fee the user is willing to pay
309
+ const maxFeesPerGas = await getPaddedMaxFeesPerGas(this.aztecNode);
310
+ const gasSettings = GasSettings.fallback({
311
+ maxFeesPerGas
312
+ });
313
+ return new PrivateFeePaymentMethod(this.bananaFPC.address, sender, wallet, gasSettings);
314
+ }
315
+ getSponsoredFPCPaymentMethodForWallet(_wallet, _sender) {
316
+ return Promise.resolve(new SponsoredFeePaymentMethod(this.sponsoredFPC.address));
317
+ }
318
+ }
@@ -0,0 +1,14 @@
1
+ import type { AccountType, BenchmarkingFeePaymentMethod } from './client_flows_benchmark.js';
2
+ export type ClientFlowConfig = {
3
+ accounts: AccountType[];
4
+ feePaymentMethods: BenchmarkingFeePaymentMethod[];
5
+ recursions?: number[];
6
+ };
7
+ type ClientFlows = 'accountDeployments' | 'deployments' | 'transfers' | 'bridging' | 'amm' | 'storageProof';
8
+ export type ClientFlowsConfig = {
9
+ [key in ClientFlows]: ClientFlowConfig;
10
+ };
11
+ export declare const KEY_FLOWS_CONFIG: ClientFlowsConfig;
12
+ export declare const FULL_FLOWS_CONFIG: ClientFlowsConfig;
13
+ export {};
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmVuY2gvY2xpZW50X2Zsb3dzL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUU3RixNQUFNLE1BQU0sZ0JBQWdCLEdBQUc7SUFDN0IsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3hCLGlCQUFpQixFQUFFLDRCQUE0QixFQUFFLENBQUM7SUFDbEQsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7Q0FDdkIsQ0FBQztBQUVGLEtBQUssV0FBVyxHQUFHLG9CQUFvQixHQUFHLGFBQWEsR0FBRyxXQUFXLEdBQUcsVUFBVSxHQUFHLEtBQUssR0FBRyxjQUFjLENBQUM7QUFFNUcsTUFBTSxNQUFNLGlCQUFpQixHQUFHO0tBQzdCLEdBQUcsSUFBSSxXQUFXLEdBQUcsZ0JBQWdCO0NBQ3ZDLENBQUM7QUFFRixlQUFPLE1BQU0sZ0JBQWdCLEVBQUUsaUJBMEI5QixDQUFDO0FBRUYsZUFBTyxNQUFNLGlCQUFpQixFQUFFLGlCQTBCL0IsQ0FBQyJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/bench/client_flows/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAC;AAE7F,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,iBAAiB,EAAE,4BAA4B,EAAE,CAAC;IAClD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,KAAK,WAAW,GAAG,oBAAoB,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,GAAG,KAAK,GAAG,cAAc,CAAC;AAE5G,MAAM,MAAM,iBAAiB,GAAG;KAC7B,GAAG,IAAI,WAAW,GAAG,gBAAgB;CACvC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,iBA0B9B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,iBA0B/B,CAAC"}
@@ -0,0 +1,124 @@
1
+ export const KEY_FLOWS_CONFIG = {
2
+ accountDeployments: {
3
+ accounts: [
4
+ 'ecdsar1',
5
+ 'schnorr'
6
+ ],
7
+ feePaymentMethods: [
8
+ 'sponsored_fpc'
9
+ ]
10
+ },
11
+ deployments: {
12
+ accounts: [
13
+ 'ecdsar1',
14
+ 'schnorr'
15
+ ],
16
+ feePaymentMethods: [
17
+ 'sponsored_fpc'
18
+ ]
19
+ },
20
+ amm: {
21
+ accounts: [
22
+ 'ecdsar1'
23
+ ],
24
+ feePaymentMethods: [
25
+ 'sponsored_fpc'
26
+ ]
27
+ },
28
+ bridging: {
29
+ accounts: [
30
+ 'ecdsar1'
31
+ ],
32
+ feePaymentMethods: [
33
+ 'sponsored_fpc'
34
+ ]
35
+ },
36
+ transfers: {
37
+ accounts: [
38
+ 'ecdsar1'
39
+ ],
40
+ feePaymentMethods: [
41
+ 'sponsored_fpc',
42
+ 'private_fpc'
43
+ ],
44
+ recursions: [
45
+ 0,
46
+ 1
47
+ ]
48
+ },
49
+ storageProof: {
50
+ accounts: [
51
+ 'ecdsar1'
52
+ ],
53
+ feePaymentMethods: [
54
+ 'sponsored_fpc'
55
+ ]
56
+ }
57
+ };
58
+ export const FULL_FLOWS_CONFIG = {
59
+ accountDeployments: {
60
+ accounts: [
61
+ 'ecdsar1',
62
+ 'schnorr'
63
+ ],
64
+ feePaymentMethods: [
65
+ 'bridged_fee_juice',
66
+ 'sponsored_fpc'
67
+ ]
68
+ },
69
+ deployments: {
70
+ accounts: [
71
+ 'ecdsar1',
72
+ 'schnorr'
73
+ ],
74
+ feePaymentMethods: [
75
+ 'bridged_fee_juice',
76
+ 'sponsored_fpc'
77
+ ]
78
+ },
79
+ amm: {
80
+ accounts: [
81
+ 'ecdsar1',
82
+ 'schnorr'
83
+ ],
84
+ feePaymentMethods: [
85
+ 'sponsored_fpc',
86
+ 'private_fpc'
87
+ ]
88
+ },
89
+ bridging: {
90
+ accounts: [
91
+ 'ecdsar1',
92
+ 'schnorr'
93
+ ],
94
+ feePaymentMethods: [
95
+ 'sponsored_fpc',
96
+ 'private_fpc'
97
+ ]
98
+ },
99
+ transfers: {
100
+ accounts: [
101
+ 'ecdsar1',
102
+ 'schnorr'
103
+ ],
104
+ feePaymentMethods: [
105
+ 'sponsored_fpc',
106
+ 'private_fpc'
107
+ ],
108
+ recursions: [
109
+ 0,
110
+ 1,
111
+ 2
112
+ ]
113
+ },
114
+ storageProof: {
115
+ accounts: [
116
+ 'ecdsar1',
117
+ 'schnorr'
118
+ ],
119
+ feePaymentMethods: [
120
+ 'sponsored_fpc',
121
+ 'private_fpc'
122
+ ]
123
+ }
124
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV9leHRyYWN0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9iZW5jaC9jbGllbnRfZmxvd3MvZGF0YV9leHRyYWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data_extractor.d.ts","sourceRoot":"","sources":["../../../src/bench/client_flows/data_extractor.ts"],"names":[],"mappings":""}
@@ -0,0 +1,79 @@
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 { Decoder } from 'msgpackr';
6
+ import { readFile, readdir, writeFile } from 'node:fs/promises';
7
+ import { join } from 'node:path';
8
+ import { ProxyLogger, generateBenchmark } from './benchmark.js';
9
+ async function main() {
10
+ ProxyLogger.create();
11
+ const proxyLogger = ProxyLogger.getInstance();
12
+ const ivcFolder = process.env.CAPTURE_IVC_FOLDER;
13
+ if (!ivcFolder) {
14
+ throw new Error('CAPTURE_IVC_FOLDER is not set');
15
+ }
16
+ const flows = await readdir(ivcFolder);
17
+ logger.info(`Flows in ${ivcFolder}: \n${flows.map((flowName)=>`\t- ${flowName}`).join('\n')}`);
18
+ const simulator = new WASMSimulator();
19
+ const log = proxyLogger.createLogger('bb:prover');
20
+ const prover = new BBBundlePrivateKernelProver(simulator, {
21
+ logger: log
22
+ });
23
+ const userLog = createLogger('chonk_flows:data_processor');
24
+ for (const flow of flows){
25
+ userLog.info(`Processing flow ${flow}`);
26
+ const ivcInputs = await readFile(join(ivcFolder, flow, 'ivc-inputs.msgpack'));
27
+ const stepsFromFile = new Decoder({
28
+ useRecords: false
29
+ }).unpack(ivcInputs);
30
+ const witnesses = await readFile(join(ivcFolder, flow, 'witnesses.json'));
31
+ const witnessStack = JSON.parse(witnesses.toString()).map((witnessMap)=>{
32
+ return new Map(Object.entries(witnessMap).map(([k, v])=>[
33
+ Number(k),
34
+ v
35
+ ]));
36
+ });
37
+ const profileFile = await readFile(join(ivcFolder, flow, 'profile.json'));
38
+ const profile = JSON.parse(profileFile.toString());
39
+ const privateExecutionSteps = profile.steps.map((step, i)=>({
40
+ functionName: step.functionName,
41
+ gateCount: step.gateCount,
42
+ bytecode: stepsFromFile[i].bytecode,
43
+ // TODO(AD) do we still want to take this from witness.json?
44
+ witness: witnessStack[i],
45
+ vk: stepsFromFile[i].vk,
46
+ timings: {
47
+ witgen: step.timings.witgen,
48
+ gateCount: step.timings.gateCount
49
+ }
50
+ }));
51
+ let error;
52
+ let currentLogs = [];
53
+ let provingTime;
54
+ try {
55
+ const provingTimer = new Timer();
56
+ await prover.createChonkProof(privateExecutionSteps);
57
+ provingTime = provingTimer.ms();
58
+ } catch (e) {
59
+ userLog.error(`Failed to generate chonk proof for ${flow}`, e);
60
+ error = e.message;
61
+ }
62
+ // Extract logs from this run from the proxy and write them to disk unconditionally
63
+ currentLogs = proxyLogger.getLogs();
64
+ await writeFile(join(ivcFolder, flow, 'logs.json'), JSON.stringify(currentLogs, null, 2));
65
+ if (!profile.stats.timings.proving) {
66
+ profile.stats.timings.proving = provingTime;
67
+ }
68
+ const benchmark = generateBenchmark(flow, currentLogs, profile.stats, privateExecutionSteps, 'native', error);
69
+ await writeFile(join(ivcFolder, flow, 'benchmark.json'), JSON.stringify(benchmark, null, 2));
70
+ proxyLogger.flushLogs();
71
+ }
72
+ }
73
+ try {
74
+ await main();
75
+ } catch (e) {
76
+ // eslint-disable-next-line no-console
77
+ console.error(e);
78
+ process.exit(1);
79
+ }
@@ -1,14 +1,14 @@
1
- import { type AztecNode, BatchCall, type SentTx, type WaitOpts } from '@aztec/aztec.js';
2
- import { BenchmarkingContract } from '@aztec/noir-contracts.js/Benchmarking';
3
- import { type PXEService } from '@aztec/pxe/server';
4
- import type { MetricsType } from '@aztec/telemetry-client';
1
+ import { type WaitOpts } from '@aztec/aztec.js/contracts';
2
+ import { BenchmarkingContract } from '@aztec/noir-test-contracts.js/Benchmarking';
3
+ import type { TxHash } from '@aztec/stdlib/tx';
4
+ import type { MetricDefinition } from '@aztec/telemetry-client';
5
5
  import type { BenchmarkTelemetryClient } from '@aztec/telemetry-client/bench';
6
6
  import { type EndToEndContext, type SetupOptions } from '../fixtures/utils.js';
7
7
  /**
8
8
  * Setup for benchmarks. Initializes a remote node with a single account and deploys a benchmark contract.
9
9
  */
10
10
  export declare function benchmarkSetup(opts: Partial<SetupOptions> & {
11
- /** What metrics to export */ metrics: (MetricsType | MetricFilter)[];
11
+ /** What metrics to export */ metrics: (MetricDefinition | MetricFilter)[];
12
12
  /** Where to output the benchmark data (defaults to BENCH_OUTPUT or bench.json) */
13
13
  benchOutput?: string;
14
14
  }): Promise<{
@@ -18,35 +18,18 @@ export declare function benchmarkSetup(opts: Partial<SetupOptions> & {
18
18
  sequencer: import("@aztec/sequencer-client").SequencerClient;
19
19
  }>;
20
20
  type MetricFilter = {
21
- source: MetricsType;
21
+ source: MetricDefinition;
22
22
  transform: (value: number) => number;
23
23
  name: string;
24
24
  unit?: string;
25
25
  };
26
- /**
27
- * Creates and returns a directory with the current job name and a random number.
28
- * @param index - Index to merge into the dir path.
29
- * @returns A path to a created dir.
30
- */
31
- export declare function makeDataDirectory(index: number): string;
32
- /**
33
- * Returns the size in disk of a folder.
34
- * @param path - Path to the folder.
35
- * @returns Size in bytes.
36
- */
37
- export declare function getFolderSize(path: string): number;
38
- /**
39
- * Returns a call to the benchmark contract. Each call has a private execution (account entrypoint),
40
- * a nested private call (create_note), a public call (increment_balance), and a nested public
41
- * call (broadcast). These include emitting one private note and one public log, two storage
42
- * reads and one write.
43
- * @param index - Index of the call within a block.
44
- * @param context - End to end context.
45
- * @param contract - Benchmarking contract.
46
- * @param heavyPublicCompute - Whether the transactions include heavy public compute (like a big sha256).
47
- * @returns A BatchCall instance.
48
- */
49
- export declare function makeCall(index: number, context: EndToEndContext, contract: BenchmarkingContract, heavyPublicCompute: boolean): Promise<BatchCall>;
26
+ export type GithubActionBenchmarkResult = {
27
+ name: string;
28
+ value: number;
29
+ range?: string;
30
+ unit: string;
31
+ extra?: string;
32
+ };
50
33
  /**
51
34
  * Assembles and sends multiple transactions simultaneously to the node in context.
52
35
  * Each tx is the result of calling makeCall.
@@ -56,15 +39,7 @@ export declare function makeCall(index: number, context: EndToEndContext, contra
56
39
  * @param heavyPublicCompute - Whether the transactions include heavy public compute (like a big sha256).
57
40
  * @returns Array of sent txs.
58
41
  */
59
- export declare function sendTxs(txCount: number, context: EndToEndContext, contract: BenchmarkingContract, heavyPublicCompute?: boolean): Promise<SentTx[]>;
60
- export declare function waitTxs(txs: SentTx[], context: EndToEndContext, txWaitOpts?: WaitOpts): Promise<void>;
61
- /**
62
- * Creates a new PXE
63
- * @param node - Node to connect the pxe to.
64
- * @param contract - Benchmark contract to add to the pxe.
65
- * @param startingBlock - First l2 block to process.
66
- * @returns The new PXE.
67
- */
68
- export declare function createNewPXE(node: AztecNode, contract: BenchmarkingContract, startingBlock?: number): Promise<PXEService>;
42
+ export declare function sendTxs(txCount: number, context: EndToEndContext, contract: BenchmarkingContract, heavyPublicCompute?: boolean): Promise<TxHash[]>;
43
+ export declare function waitTxs(txs: TxHash[], context: EndToEndContext, txWaitOpts?: WaitOpts): Promise<void>;
69
44
  export {};
70
- //# sourceMappingURL=utils.d.ts.map
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9iZW5jaC91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQXNCLEtBQUssUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDbEYsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBNEMsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQU14SCxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQUUsS0FBSyxZQUFZLEVBQVMsTUFBTSxzQkFBc0IsQ0FBQztBQUV0Rjs7R0FFRztBQUNILHdCQUFzQixjQUFjLENBQ2xDLElBQUksRUFBRSxPQUFPLENBQUMsWUFBWSxDQUFDLEdBQUc7SUFDNUIsNkJBQTZCLENBQUMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLEVBQUUsQ0FBQztJQUMzRSxrRkFBa0Y7SUFDbEYsV0FBVyxDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ3RCOzs7OztHQXlCRjtBQUVELEtBQUssWUFBWSxHQUFHO0lBQ2xCLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQztJQUN6QixTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxLQUFLLE1BQU0sQ0FBQztJQUNyQyxJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQ2IsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ2YsQ0FBQztBQUdGLE1BQU0sTUFBTSwyQkFBMkIsR0FBRztJQUN4QyxJQUFJLEVBQUUsTUFBTSxDQUFDO0lBQ2IsS0FBSyxFQUFFLE1BQU0sQ0FBQztJQUNkLEtBQUssQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNmLElBQUksRUFBRSxNQUFNLENBQUM7SUFDYixLQUFLLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDaEIsQ0FBQztBQW9FRjs7Ozs7Ozs7R0FRRztBQUNILHdCQUFzQixPQUFPLENBQzNCLE9BQU8sRUFBRSxNQUFNLEVBQ2YsT0FBTyxFQUFFLGVBQWUsRUFDeEIsUUFBUSxFQUFFLG9CQUFvQixFQUM5QixrQkFBa0IsR0FBRSxPQUFlLEdBQ2xDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQVduQjtBQUVELHdCQUFzQixPQUFPLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxDQUFDLEVBQUUsUUFBUSxpQkFJM0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/bench/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAE,SAAS,EAAwB,KAAK,MAAM,EAAE,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG9G,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,KAAK,UAAU,EAA2C,MAAM,mBAAmB,CAAC;AAC7F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAA4C,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAOxH,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAS,MAAM,sBAAsB,CAAC;AAEtF;;GAEG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;IAC5B,6BAA6B,CAAC,OAAO,EAAE,CAAC,WAAW,GAAG,YAAY,CAAC,EAAE,CAAC;IACtE,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;;;;;GAoBF;AAED,KAAK,YAAY,GAAG;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AA0CF;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,UAK9C;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKlD;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,oBAAoB,EAC9B,kBAAkB,EAAE,OAAO,sBAc5B;AAED;;;;;;;;GAQG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,oBAAoB,EAC9B,kBAAkB,GAAE,OAAe,GAClC,OAAO,CAAC,MAAM,EAAE,CAAC,CAMnB;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,QAAQ,iBAI3F;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,oBAAoB,EAC9B,aAAa,GAAE,MAA6B,GAC3C,OAAO,CAAC,UAAU,CAAC,CAerB"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/bench/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAG9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,KAAK,EAA4C,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAMxH,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,YAAY,EAAS,MAAM,sBAAsB,CAAC;AAEtF;;GAEG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG;IAC5B,6BAA6B,CAAC,OAAO,EAAE,CAAC,gBAAgB,GAAG,YAAY,CAAC,EAAE,CAAC;IAC3E,kFAAkF;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;;;;;GAyBF;AAED,KAAK,YAAY,GAAG;IAClB,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAGF,MAAM,MAAM,2BAA2B,GAAG;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAoEF;;;;;;;;GAQG;AACH,wBAAsB,OAAO,CAC3B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,oBAAoB,EAC9B,kBAAkB,GAAE,OAAe,GAClC,OAAO,CAAC,MAAM,EAAE,CAAC,CAWnB;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,QAAQ,iBAI3F"}