@aztec/end-to-end 0.0.1-commit.3469e52 → 0.0.1-commit.350e0a4d

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 (362) hide show
  1. package/README.md +217 -14
  2. package/dest/automine/automine_test_context.d.ts +85 -0
  3. package/dest/automine/automine_test_context.d.ts.map +1 -0
  4. package/dest/automine/automine_test_context.js +98 -0
  5. package/dest/automine/contracts/fixtures/storage_proof_fetcher.d.ts +2 -0
  6. package/dest/automine/contracts/fixtures/storage_proof_fetcher.d.ts.map +1 -0
  7. package/dest/automine/contracts/fixtures/storage_proof_fetcher.js +184 -0
  8. package/dest/automine/contracts/fixtures/storage_proof_fixture.d.ts +18 -0
  9. package/dest/automine/contracts/fixtures/storage_proof_fixture.d.ts.map +1 -0
  10. package/dest/automine/contracts/fixtures/storage_proof_fixture.js +120 -0
  11. package/dest/automine/delivery/onchain_delivery_harness.d.ts +17 -0
  12. package/dest/automine/delivery/onchain_delivery_harness.d.ts.map +1 -0
  13. package/dest/automine/delivery/onchain_delivery_harness.js +123 -0
  14. package/dest/automine/token/blacklist_token_contract_test.d.ts +49 -0
  15. package/dest/automine/token/blacklist_token_contract_test.d.ts.map +1 -0
  16. package/dest/{e2e_blacklist_token_contract → automine/token}/blacklist_token_contract_test.js +50 -54
  17. package/dest/automine/token/token_contract_test.d.ts +40 -0
  18. package/dest/automine/token/token_contract_test.d.ts.map +1 -0
  19. package/dest/{e2e_token_contract → automine/token}/token_contract_test.js +44 -49
  20. package/dest/automine/token/token_test_helpers.d.ts +73 -0
  21. package/dest/automine/token/token_test_helpers.d.ts.map +1 -0
  22. package/dest/automine/token/token_test_helpers.js +97 -0
  23. package/dest/bench/client_flows/benchmark.d.ts +15 -1
  24. package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
  25. package/dest/bench/client_flows/benchmark.js +19 -0
  26. package/dest/bench/client_flows/client_flows_benchmark.d.ts +6 -6
  27. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  28. package/dest/bench/client_flows/client_flows_benchmark.js +66 -42
  29. package/dest/bench/client_flows/config.d.ts +2 -2
  30. package/dest/bench/client_flows/config.d.ts.map +1 -1
  31. package/dest/bench/client_flows/config.js +18 -0
  32. package/dest/bench/client_flows/data_extractor.js +1 -0
  33. package/dest/bench/utils.d.ts +7 -6
  34. package/dest/bench/utils.d.ts.map +1 -1
  35. package/dest/bench/utils.js +108 -12
  36. package/dest/composed/ha/ha_full_setup.d.ts +77 -0
  37. package/dest/composed/ha/ha_full_setup.d.ts.map +1 -0
  38. package/dest/composed/ha/ha_full_setup.js +383 -0
  39. package/dest/composed/web3signer/multi_validator_keystore_utils.d.ts +12 -0
  40. package/dest/composed/web3signer/multi_validator_keystore_utils.d.ts.map +1 -0
  41. package/dest/fixtures/authwit_proxy.d.ts +15 -0
  42. package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
  43. package/dest/fixtures/authwit_proxy.js +34 -0
  44. package/dest/fixtures/e2e_prover_test.d.ts +18 -14
  45. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  46. package/dest/fixtures/e2e_prover_test.js +85 -74
  47. package/dest/fixtures/elu_monitor.d.ts +21 -0
  48. package/dest/fixtures/elu_monitor.d.ts.map +1 -0
  49. package/dest/fixtures/elu_monitor.js +102 -0
  50. package/dest/fixtures/fixtures.d.ts +82 -1
  51. package/dest/fixtures/fixtures.d.ts.map +1 -1
  52. package/dest/fixtures/fixtures.js +84 -0
  53. package/dest/fixtures/get_bb_config.d.ts +1 -1
  54. package/dest/fixtures/get_bb_config.d.ts.map +1 -1
  55. package/dest/fixtures/get_bb_config.js +5 -5
  56. package/dest/fixtures/ha_setup.d.ts +71 -0
  57. package/dest/fixtures/ha_setup.d.ts.map +1 -0
  58. package/dest/fixtures/ha_setup.js +119 -0
  59. package/dest/fixtures/index.d.ts +3 -1
  60. package/dest/fixtures/index.d.ts.map +1 -1
  61. package/dest/fixtures/index.js +2 -0
  62. package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts +25 -0
  63. package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts.map +1 -0
  64. package/dest/fixtures/schnorr_hardcoded_account_contract.js +37 -0
  65. package/dest/fixtures/setup.d.ts +113 -60
  66. package/dest/fixtures/setup.d.ts.map +1 -1
  67. package/dest/fixtures/setup.js +330 -326
  68. package/dest/fixtures/setup_p2p_test.d.ts +22 -11
  69. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  70. package/dest/fixtures/setup_p2p_test.js +46 -35
  71. package/dest/fixtures/timing.d.ts +42 -0
  72. package/dest/fixtures/timing.d.ts.map +1 -0
  73. package/dest/fixtures/timing.js +72 -0
  74. package/dest/fixtures/token_utils.d.ts +22 -4
  75. package/dest/fixtures/token_utils.d.ts.map +1 -1
  76. package/dest/fixtures/token_utils.js +28 -7
  77. package/dest/fixtures/utils.d.ts +2 -2
  78. package/dest/fixtures/utils.d.ts.map +1 -1
  79. package/dest/fixtures/utils.js +1 -1
  80. package/dest/fixtures/wait_helpers.d.ts +135 -0
  81. package/dest/fixtures/wait_helpers.d.ts.map +1 -0
  82. package/dest/fixtures/wait_helpers.js +154 -0
  83. package/dest/forward-compatibility/wallet_rpc_client.d.ts +7 -0
  84. package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
  85. package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
  86. package/dest/forward-compatibility/wallet_service.d.ts +3 -0
  87. package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
  88. package/dest/forward-compatibility/wallet_service.js +109 -0
  89. package/dest/install_legacy_contracts.d.cts +10 -0
  90. package/dest/install_legacy_contracts.d.cts.map +1 -0
  91. package/dest/legacy-jest-resolver.d.cts +3 -0
  92. package/dest/legacy-jest-resolver.d.cts.map +1 -0
  93. package/dest/multi-node/block-production/setup.d.ts +97 -0
  94. package/dest/multi-node/block-production/setup.d.ts.map +1 -0
  95. package/dest/multi-node/block-production/setup.js +158 -0
  96. package/dest/multi-node/governance/setup.d.ts +67 -0
  97. package/dest/multi-node/governance/setup.d.ts.map +1 -0
  98. package/dest/multi-node/governance/setup.js +126 -0
  99. package/dest/multi-node/multi_node_test_context.d.ts +212 -0
  100. package/dest/multi-node/multi_node_test_context.d.ts.map +1 -0
  101. package/dest/multi-node/multi_node_test_context.js +347 -0
  102. package/dest/multi-node/slashing/inactivity_setup.d.ts +27 -0
  103. package/dest/multi-node/slashing/inactivity_setup.d.ts.map +1 -0
  104. package/dest/multi-node/slashing/inactivity_setup.js +111 -0
  105. package/dest/multi-node/slashing/setup.d.ts +167 -0
  106. package/dest/multi-node/slashing/setup.d.ts.map +1 -0
  107. package/dest/multi-node/slashing/setup.js +275 -0
  108. package/dest/{e2e_p2p → p2p}/p2p_network.d.ts +22 -12
  109. package/dest/p2p/p2p_network.d.ts.map +1 -0
  110. package/dest/{e2e_p2p → p2p}/p2p_network.js +99 -35
  111. package/dest/p2p/reqresp/utils.d.ts +19 -0
  112. package/dest/p2p/reqresp/utils.d.ts.map +1 -0
  113. package/dest/p2p/reqresp/utils.js +193 -0
  114. package/dest/p2p/shared.d.ts +72 -0
  115. package/dest/p2p/shared.d.ts.map +1 -0
  116. package/dest/p2p/shared.js +212 -0
  117. package/dest/shared/cross_chain_test_harness.d.ts +8 -7
  118. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  119. package/dest/shared/cross_chain_test_harness.js +44 -39
  120. package/dest/shared/gas_portal_test_harness.d.ts +8 -5
  121. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  122. package/dest/shared/gas_portal_test_harness.js +27 -15
  123. package/dest/shared/index.d.ts +2 -1
  124. package/dest/shared/index.d.ts.map +1 -1
  125. package/dest/shared/index.js +1 -0
  126. package/dest/shared/jest_setup.js +41 -1
  127. package/dest/shared/mock_state_view.d.ts +86 -0
  128. package/dest/shared/mock_state_view.d.ts.map +1 -0
  129. package/dest/shared/mock_state_view.js +186 -0
  130. package/dest/shared/submit-transactions.d.ts +4 -4
  131. package/dest/shared/submit-transactions.d.ts.map +1 -1
  132. package/dest/shared/submit-transactions.js +19 -14
  133. package/dest/shared/timing_env.d.js +5 -0
  134. package/dest/shared/timing_env.js +365 -0
  135. package/dest/shared/uniswap_l1_l2.d.ts +1 -1
  136. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  137. package/dest/shared/uniswap_l1_l2.js +67 -55
  138. package/dest/shared/wait_for_l1_to_l2_message.d.ts +13 -0
  139. package/dest/shared/wait_for_l1_to_l2_message.d.ts.map +1 -0
  140. package/dest/shared/wait_for_l1_to_l2_message.js +10 -0
  141. package/dest/simulators/lending_simulator.d.ts +10 -3
  142. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  143. package/dest/simulators/lending_simulator.js +29 -17
  144. package/dest/simulators/token_simulator.d.ts +1 -1
  145. package/dest/simulators/token_simulator.d.ts.map +1 -1
  146. package/dest/simulators/token_simulator.js +3 -24
  147. package/dest/single-node/cross-chain/cross_chain_messaging_test.d.ts +75 -0
  148. package/dest/single-node/cross-chain/cross_chain_messaging_test.d.ts.map +1 -0
  149. package/dest/single-node/cross-chain/cross_chain_messaging_test.js +209 -0
  150. package/dest/single-node/cross-chain/message_test_helpers.d.ts +38 -0
  151. package/dest/single-node/cross-chain/message_test_helpers.d.ts.map +1 -0
  152. package/dest/single-node/cross-chain/message_test_helpers.js +70 -0
  153. package/dest/{e2e_fees → single-node/fees}/bridging_race.notest.d.ts +1 -1
  154. package/dest/single-node/fees/bridging_race.notest.d.ts.map +1 -0
  155. package/dest/{e2e_fees → single-node/fees}/bridging_race.notest.js +18 -5
  156. package/dest/single-node/fees/fees_test.d.ts +93 -0
  157. package/dest/single-node/fees/fees_test.d.ts.map +1 -0
  158. package/dest/{e2e_fees → single-node/fees}/fees_test.js +96 -70
  159. package/dest/single-node/l1-reorgs/setup.d.ts +42 -0
  160. package/dest/single-node/l1-reorgs/setup.d.ts.map +1 -0
  161. package/dest/single-node/l1-reorgs/setup.js +57 -0
  162. package/dest/single-node/partial-proofs/setup.d.ts +5 -0
  163. package/dest/single-node/partial-proofs/setup.d.ts.map +1 -0
  164. package/dest/single-node/partial-proofs/setup.js +5 -0
  165. package/dest/single-node/proving/setup.d.ts +5 -0
  166. package/dest/single-node/proving/setup.d.ts.map +1 -0
  167. package/dest/single-node/proving/setup.js +5 -0
  168. package/dest/single-node/recovery/setup.d.ts +5 -0
  169. package/dest/single-node/recovery/setup.d.ts.map +1 -0
  170. package/dest/single-node/recovery/setup.js +5 -0
  171. package/dest/single-node/setup.d.ts +49 -0
  172. package/dest/single-node/setup.d.ts.map +1 -0
  173. package/dest/single-node/setup.js +56 -0
  174. package/dest/single-node/single_node_test_context.d.ts +360 -0
  175. package/dest/single-node/single_node_test_context.d.ts.map +1 -0
  176. package/dest/single-node/single_node_test_context.js +833 -0
  177. package/dest/spartan/setup_test_wallets.d.ts +12 -3
  178. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  179. package/dest/spartan/setup_test_wallets.js +147 -43
  180. package/dest/spartan/tx_metrics.d.ts +64 -5
  181. package/dest/spartan/tx_metrics.d.ts.map +1 -1
  182. package/dest/spartan/tx_metrics.js +280 -21
  183. package/dest/spartan/utils/bot.d.ts +28 -0
  184. package/dest/spartan/utils/bot.d.ts.map +1 -0
  185. package/dest/spartan/utils/bot.js +142 -0
  186. package/dest/spartan/utils/chaos.d.ts +79 -0
  187. package/dest/spartan/utils/chaos.d.ts.map +1 -0
  188. package/dest/spartan/utils/chaos.js +142 -0
  189. package/dest/spartan/utils/clients.d.ts +39 -0
  190. package/dest/spartan/utils/clients.d.ts.map +1 -0
  191. package/dest/spartan/utils/clients.js +90 -0
  192. package/dest/spartan/utils/config.d.ts +19 -0
  193. package/dest/spartan/utils/config.d.ts.map +1 -0
  194. package/dest/spartan/utils/config.js +23 -0
  195. package/dest/spartan/utils/health.d.ts +63 -0
  196. package/dest/spartan/utils/health.d.ts.map +1 -0
  197. package/dest/spartan/utils/health.js +202 -0
  198. package/dest/spartan/utils/helm.d.ts +15 -0
  199. package/dest/spartan/utils/helm.d.ts.map +1 -0
  200. package/dest/spartan/utils/helm.js +47 -0
  201. package/dest/spartan/utils/index.d.ts +11 -0
  202. package/dest/spartan/utils/index.d.ts.map +1 -0
  203. package/dest/spartan/utils/index.js +22 -0
  204. package/dest/spartan/utils/k8s.d.ts +128 -0
  205. package/dest/spartan/utils/k8s.d.ts.map +1 -0
  206. package/dest/spartan/utils/k8s.js +381 -0
  207. package/dest/spartan/utils/nodes.d.ts +40 -0
  208. package/dest/spartan/utils/nodes.d.ts.map +1 -0
  209. package/dest/spartan/utils/nodes.js +461 -0
  210. package/dest/spartan/utils/pod_logs.d.ts +25 -0
  211. package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
  212. package/dest/spartan/utils/pod_logs.js +74 -0
  213. package/dest/spartan/utils/scripts.d.ts +30 -0
  214. package/dest/spartan/utils/scripts.d.ts.map +1 -0
  215. package/dest/spartan/utils/scripts.js +81 -0
  216. package/dest/spartan/utils.d.ts +2 -260
  217. package/dest/spartan/utils.d.ts.map +1 -1
  218. package/dest/spartan/utils.js +1 -942
  219. package/dest/test-wallet/test_wallet.d.ts +105 -0
  220. package/dest/test-wallet/test_wallet.d.ts.map +1 -0
  221. package/dest/test-wallet/test_wallet.js +323 -0
  222. package/dest/test-wallet/utils.d.ts +76 -0
  223. package/dest/test-wallet/utils.d.ts.map +1 -0
  224. package/dest/test-wallet/utils.js +126 -0
  225. package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
  226. package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
  227. package/dest/test-wallet/wallet_worker_script.js +56 -0
  228. package/dest/test-wallet/worker_wallet.d.ts +53 -0
  229. package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
  230. package/dest/test-wallet/worker_wallet.js +155 -0
  231. package/dest/test-wallet/worker_wallet_schema.d.ts +4 -0
  232. package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
  233. package/dest/test-wallet/worker_wallet_schema.js +22 -0
  234. package/package.json +53 -46
  235. package/src/automine/README.md +60 -0
  236. package/src/automine/automine_test_context.ts +153 -0
  237. package/src/automine/contracts/fixtures/storage_proof.json +915 -0
  238. package/src/automine/contracts/fixtures/storage_proof_fetcher.ts +190 -0
  239. package/src/automine/contracts/fixtures/storage_proof_fixture.ts +173 -0
  240. package/src/automine/delivery/onchain_delivery_harness.ts +177 -0
  241. package/src/{e2e_blacklist_token_contract → automine/token}/blacklist_token_contract_test.ts +56 -69
  242. package/src/{e2e_token_contract → automine/token}/token_contract_test.ts +51 -59
  243. package/src/automine/token/token_test_helpers.ts +138 -0
  244. package/src/bench/client_flows/benchmark.ts +21 -0
  245. package/src/bench/client_flows/client_flows_benchmark.ts +109 -88
  246. package/src/bench/client_flows/config.ts +9 -1
  247. package/src/bench/client_flows/data_extractor.ts +1 -0
  248. package/src/bench/utils.ts +123 -12
  249. package/src/composed/ha/ha_full_setup.ts +466 -0
  250. package/src/fixtures/authwit_proxy.ts +54 -0
  251. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  252. package/src/fixtures/e2e_prover_test.ts +97 -103
  253. package/src/fixtures/elu_monitor.ts +126 -0
  254. package/src/fixtures/fixtures.ts +108 -0
  255. package/src/fixtures/get_bb_config.ts +7 -6
  256. package/src/fixtures/ha_setup.ts +192 -0
  257. package/src/fixtures/index.ts +2 -0
  258. package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
  259. package/src/fixtures/setup.ts +421 -444
  260. package/src/fixtures/setup_p2p_test.ts +54 -54
  261. package/src/fixtures/timing.ts +97 -0
  262. package/src/fixtures/token_utils.ts +46 -10
  263. package/src/fixtures/utils.ts +2 -3
  264. package/src/fixtures/wait_helpers.ts +333 -0
  265. package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
  266. package/src/forward-compatibility/wallet_service.ts +106 -0
  267. package/src/guides/up_quick_start.sh +7 -4
  268. package/src/infra/README.md +12 -0
  269. package/src/install_legacy_contracts.cjs +75 -0
  270. package/src/legacy-jest-resolver.cjs +112 -0
  271. package/src/multi-node/README.md +95 -0
  272. package/src/multi-node/block-production/setup.ts +272 -0
  273. package/src/multi-node/governance/setup.ts +172 -0
  274. package/src/multi-node/multi_node_test_context.ts +447 -0
  275. package/src/multi-node/slashing/inactivity_setup.ts +139 -0
  276. package/src/multi-node/slashing/setup.ts +433 -0
  277. package/src/p2p/README.md +78 -0
  278. package/src/{e2e_p2p → p2p}/p2p_network.ts +132 -57
  279. package/src/p2p/reqresp/utils.ts +263 -0
  280. package/src/p2p/shared.ts +329 -0
  281. package/src/shared/cross_chain_test_harness.ts +52 -41
  282. package/src/shared/gas_portal_test_harness.ts +34 -16
  283. package/src/shared/index.ts +1 -0
  284. package/src/shared/jest_setup.ts +51 -1
  285. package/src/shared/mock_state_view.ts +188 -0
  286. package/src/shared/submit-transactions.ts +22 -19
  287. package/src/shared/timing_env.d.mts +39 -0
  288. package/src/shared/timing_env.mjs +363 -0
  289. package/src/shared/uniswap_l1_l2.ts +109 -74
  290. package/src/shared/wait_for_l1_to_l2_message.ts +23 -0
  291. package/src/simulators/lending_simulator.ts +35 -17
  292. package/src/simulators/token_simulator.ts +6 -30
  293. package/src/single-node/README.md +60 -0
  294. package/src/single-node/cross-chain/cross_chain_messaging_test.ts +302 -0
  295. package/src/single-node/cross-chain/message_test_helpers.ts +125 -0
  296. package/src/{e2e_fees → single-node/fees}/bridging_race.notest.ts +20 -9
  297. package/src/{e2e_fees → single-node/fees}/fees_test.ts +120 -95
  298. package/src/single-node/l1-reorgs/setup.ts +93 -0
  299. package/src/single-node/partial-proofs/setup.ts +8 -0
  300. package/src/single-node/proving/setup.ts +15 -0
  301. package/src/single-node/recovery/setup.ts +8 -0
  302. package/src/single-node/setup.ts +63 -0
  303. package/src/single-node/single_node_test_context.ts +1041 -0
  304. package/src/spartan/setup_test_wallets.ts +196 -28
  305. package/src/spartan/tx_metrics.ts +255 -26
  306. package/src/spartan/utils/bot.ts +188 -0
  307. package/src/spartan/utils/chaos.ts +253 -0
  308. package/src/spartan/utils/clients.ts +100 -0
  309. package/src/spartan/utils/config.ts +29 -0
  310. package/src/spartan/utils/health.ts +255 -0
  311. package/src/spartan/utils/helm.ts +84 -0
  312. package/src/spartan/utils/index.ts +71 -0
  313. package/src/spartan/utils/k8s.ts +535 -0
  314. package/src/spartan/utils/nodes.ts +543 -0
  315. package/src/spartan/utils/pod_logs.ts +99 -0
  316. package/src/spartan/utils/scripts.ts +99 -0
  317. package/src/spartan/utils.ts +1 -1246
  318. package/src/test-wallet/test_wallet.ts +429 -0
  319. package/src/test-wallet/utils.ts +205 -0
  320. package/src/test-wallet/wallet_worker_script.ts +66 -0
  321. package/src/test-wallet/worker_wallet.ts +214 -0
  322. package/src/test-wallet/worker_wallet_schema.ts +14 -0
  323. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +0 -53
  324. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +0 -1
  325. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +0 -47
  326. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +0 -1
  327. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +0 -128
  328. package/dest/e2e_deploy_contract/deploy_test.d.ts +0 -37
  329. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +0 -1
  330. package/dest/e2e_deploy_contract/deploy_test.js +0 -50
  331. package/dest/e2e_epochs/epochs_test.d.ts +0 -94
  332. package/dest/e2e_epochs/epochs_test.d.ts.map +0 -1
  333. package/dest/e2e_epochs/epochs_test.js +0 -339
  334. package/dest/e2e_fees/bridging_race.notest.d.ts.map +0 -1
  335. package/dest/e2e_fees/fees_test.d.ts +0 -88
  336. package/dest/e2e_fees/fees_test.d.ts.map +0 -1
  337. package/dest/e2e_l1_publisher/write_json.d.ts +0 -10
  338. package/dest/e2e_l1_publisher/write_json.d.ts.map +0 -1
  339. package/dest/e2e_l1_publisher/write_json.js +0 -62
  340. package/dest/e2e_multi_validator/utils.d.ts +0 -12
  341. package/dest/e2e_multi_validator/utils.d.ts.map +0 -1
  342. package/dest/e2e_nested_contract/nested_contract_test.d.ts +0 -26
  343. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +0 -1
  344. package/dest/e2e_nested_contract/nested_contract_test.js +0 -56
  345. package/dest/e2e_p2p/inactivity_slash_test.d.ts +0 -31
  346. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +0 -1
  347. package/dest/e2e_p2p/inactivity_slash_test.js +0 -136
  348. package/dest/e2e_p2p/p2p_network.d.ts.map +0 -1
  349. package/dest/e2e_p2p/shared.d.ts +0 -46
  350. package/dest/e2e_p2p/shared.d.ts.map +0 -1
  351. package/dest/e2e_p2p/shared.js +0 -184
  352. package/dest/e2e_token_contract/token_contract_test.d.ts +0 -42
  353. package/dest/e2e_token_contract/token_contract_test.d.ts.map +0 -1
  354. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +0 -194
  355. package/src/e2e_deploy_contract/deploy_test.ts +0 -85
  356. package/src/e2e_epochs/epochs_test.ts +0 -451
  357. package/src/e2e_l1_publisher/write_json.ts +0 -82
  358. package/src/e2e_nested_contract/nested_contract_test.ts +0 -75
  359. package/src/e2e_p2p/inactivity_slash_test.ts +0 -179
  360. package/src/e2e_p2p/shared.ts +0 -290
  361. /package/dest/{e2e_multi_validator/utils.js → composed/web3signer/multi_validator_keystore_utils.js} +0 -0
  362. /package/src/{e2e_multi_validator/utils.ts → composed/web3signer/multi_validator_keystore_utils.ts} +0 -0
@@ -1,10 +1,11 @@
1
+ import { NO_FROM } from '@aztec/aztec.js/account';
1
2
  import { AztecAddress } from '@aztec/aztec.js/addresses';
2
3
  import { FeeJuicePaymentMethodWithClaim } from '@aztec/aztec.js/fee';
3
4
  import { type FeePaymentMethod, PrivateFeePaymentMethod, SponsoredFeePaymentMethod } from '@aztec/aztec.js/fee';
4
5
  import { type Logger, createLogger } from '@aztec/aztec.js/log';
5
6
  import type { AztecNode } from '@aztec/aztec.js/node';
6
7
  import type { Wallet } from '@aztec/aztec.js/wallet';
7
- import { CheatCodes } from '@aztec/aztec/testing';
8
+ import { CheatCodes, getTokenAllowedSetupFunctions } from '@aztec/aztec/testing';
8
9
  import { createExtendedL1Client } from '@aztec/ethereum/client';
9
10
  import { RollupContract } from '@aztec/ethereum/contracts';
10
11
  import type { DeployAztecL1ContractsArgs } from '@aztec/ethereum/deploy-aztec-l1-contracts';
@@ -19,17 +20,22 @@ import { AMMContract } from '@aztec/noir-contracts.js/AMM';
19
20
  import { FPCContract } from '@aztec/noir-contracts.js/FPC';
20
21
  import { FeeJuiceContract } from '@aztec/noir-contracts.js/FeeJuice';
21
22
  import { SponsoredFPCContract } from '@aztec/noir-contracts.js/SponsoredFPC';
22
- import { TokenContract as BananaCoin, TokenContract } from '@aztec/noir-contracts.js/Token';
23
+ import { TestTokenContract as BananaCoin, TestTokenContract } from '@aztec/noir-test-contracts.js/TestToken';
23
24
  import { ProtocolContractAddress } from '@aztec/protocol-contracts';
24
25
  import { getCanonicalFeeJuice } from '@aztec/protocol-contracts/fee-juice';
25
26
  import { type PXEConfig, getPXEConfig } from '@aztec/pxe/server';
26
27
  import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
27
- import { GasSettings } from '@aztec/stdlib/gas';
28
+ import { Gas, GasSettings } from '@aztec/stdlib/gas';
28
29
  import { deriveSigningKey } from '@aztec/stdlib/keys';
29
- import { TestWallet } from '@aztec/test-wallet/server';
30
+ import { AppTaggingSecretKind } from '@aztec/stdlib/logs';
30
31
 
31
- import { MNEMONIC } from '../../fixtures/fixtures.js';
32
- import { type EndToEndContext, type SetupOptions, deployAccounts, setup, teardown } from '../../fixtures/setup.js';
32
+ import {
33
+ AUTOMINE_E2E_OPTS,
34
+ L1_DIRECT_WRITE_ACCOUNT_INDEX,
35
+ MNEMONIC,
36
+ getPaddedMaxFeesPerGas,
37
+ } from '../../fixtures/fixtures.js';
38
+ import { type EndToEndContext, type SetupOptions, setup, teardown } from '../../fixtures/setup.js';
33
39
  import { mintTokensToPrivate } from '../../fixtures/token_utils.js';
34
40
  import { setupSponsoredFPC } from '../../fixtures/utils.js';
35
41
  import { CrossChainTestHarness } from '../../shared/cross_chain_test_harness.js';
@@ -37,6 +43,7 @@ import {
37
43
  FeeJuicePortalTestingHarnessFactory,
38
44
  type GasBridgingTestHarness,
39
45
  } from '../../shared/gas_portal_test_harness.js';
46
+ import { TestWallet } from '../../test-wallet/test_wallet.js';
40
47
  import { ProxyLogger } from './benchmark.js';
41
48
  import { type ClientFlowsConfig, FULL_FLOWS_CONFIG, KEY_FLOWS_CONFIG } from './config.js';
42
49
 
@@ -70,13 +77,13 @@ export class ClientFlowsBenchmark {
70
77
  public bananaFPC!: FPCContract;
71
78
  public bananaFPCInstance!: ContractInstanceWithAddress;
72
79
  // Random asset we want to trade
73
- public candyBarCoin!: TokenContract;
80
+ public candyBarCoin!: TestTokenContract;
74
81
  public candyBarCoinInstance!: ContractInstanceWithAddress;
75
82
  // AMM contract
76
83
  public amm!: AMMContract;
77
84
  public ammInstance!: ContractInstanceWithAddress;
78
85
  // Liquidity token for AMM
79
- public liquidityToken!: TokenContract;
86
+ public liquidityToken!: TestTokenContract;
80
87
  public liquidityTokenInstance!: ContractInstanceWithAddress;
81
88
  // Sponsored FPC contract
82
89
  public sponsoredFPC!: SponsoredFPCContract;
@@ -87,33 +94,35 @@ export class ClientFlowsBenchmark {
87
94
 
88
95
  public realProofs = ['true', '1'].includes(process.env.REAL_PROOFS ?? '');
89
96
 
90
- public paymentMethods: Record<BenchmarkingFeePaymentMethod, { forWallet: FeePaymentMethodGetter; circuits: number }> =
91
- {
92
- // eslint-disable-next-line camelcase
93
- bridged_fee_juice: {
94
- forWallet: this.getBridgedFeeJuicePaymentMethodForWallet.bind(this),
95
- circuits: 2, // FeeJuice claim + kernel inner
96
- },
97
- // eslint-disable-next-line camelcase
98
- private_fpc: {
99
- forWallet: this.getPrivateFPCPaymentMethodForWallet.bind(this),
100
- circuits:
101
- 2 + // FPC entrypoint + kernel inner
102
- 2 + // BananaCoin transfer_to_public + kernel inner
103
- 2 + // Account verify_private_authwit + kernel inner
104
- 2, // BananaCoin prepare_private_balance_increase + kernel inner
105
- },
106
- // eslint-disable-next-line camelcase
107
- sponsored_fpc: {
108
- forWallet: this.getSponsoredFPCPaymentMethodForWallet.bind(this),
109
- circuits: 2, // Sponsored FPC sponsor_unconditionally + kernel inner
110
- },
111
- // eslint-disable-next-line camelcase
112
- fee_juice: {
113
- forWallet: () => Promise.resolve(undefined),
114
- circuits: 0,
115
- },
116
- };
97
+ // `apps` is the number of private function calls contributed by this payment method.
98
+ // Each app produces one execution step at proving time; the orchestrator additionally produces
99
+ // one kernel step per batch of N apps (see `expectedExecutionSteps` in `benchmark.ts`).
100
+ public paymentMethods: Record<BenchmarkingFeePaymentMethod, { forWallet: FeePaymentMethodGetter; apps: number }> = {
101
+ // eslint-disable-next-line camelcase
102
+ bridged_fee_juice: {
103
+ forWallet: this.getBridgedFeeJuicePaymentMethodForWallet.bind(this),
104
+ apps: 1, // FeeJuice claim
105
+ },
106
+ // eslint-disable-next-line camelcase
107
+ private_fpc: {
108
+ forWallet: this.getPrivateFPCPaymentMethodForWallet.bind(this),
109
+ apps:
110
+ 1 + // FPC entrypoint
111
+ 1 + // BananaCoin transfer_to_public
112
+ 1 + // Account verify_private_authwit
113
+ 1, // BananaCoin prepare_private_balance_increase
114
+ },
115
+ // eslint-disable-next-line camelcase
116
+ sponsored_fpc: {
117
+ forWallet: this.getSponsoredFPCPaymentMethodForWallet.bind(this),
118
+ apps: 1, // Sponsored FPC sponsor_unconditionally
119
+ },
120
+ // eslint-disable-next-line camelcase
121
+ fee_juice: {
122
+ forWallet: () => Promise.resolve(undefined),
123
+ apps: 0,
124
+ },
125
+ };
117
126
 
118
127
  public config: ClientFlowsConfig;
119
128
 
@@ -122,7 +131,7 @@ export class ClientFlowsBenchmark {
122
131
 
123
132
  constructor(testName?: string, setupOptions: Partial<SetupOptions & DeployAztecL1ContractsArgs> = {}) {
124
133
  this.logger = createLogger(`bench:client_flows${testName ? `:${testName}` : ''}`);
125
- this.setupOptions = { startProverNode: true, ...setupOptions };
134
+ this.setupOptions = { ...AUTOMINE_E2E_OPTS, startProverNode: true, ...setupOptions };
126
135
  this.config = BENCHMARK_CONFIG === 'key_flows' ? KEY_FLOWS_CONFIG : FULL_FLOWS_CONFIG;
127
136
  ProxyLogger.create();
128
137
  this.proxyLogger = ProxyLogger.getInstance();
@@ -130,24 +139,28 @@ export class ClientFlowsBenchmark {
130
139
 
131
140
  async setup() {
132
141
  this.logger.info('Setting up subsystems from fresh');
133
- this.context = await setup(0, {
142
+ // Token allowlist entries are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
143
+ // BananaCoin is the codegen'd TestToken here, so the allowlist must key on its class, not canonical Token's.
144
+ const tokenAllowList = await getTokenAllowedSetupFunctions(BananaCoin.artifact);
145
+ this.context = await setup(2, {
134
146
  ...this.setupOptions,
135
147
  fundSponsoredFPC: true,
136
- skipAccountDeployment: true,
137
148
  l1ContractsArgs: this.setupOptions,
149
+ txPublicSetupAllowListExtend: [...(this.setupOptions.txPublicSetupAllowListExtend ?? []), ...tokenAllowList],
138
150
  });
139
151
  await this.applyBaseSetup();
140
152
 
141
- await this.context.aztecNodeService!.setConfig({ feeRecipient: this.sequencerAddress, coinbase: this.coinbase });
153
+ await this.context.aztecNodeService.setConfig({ feeRecipient: this.sequencerAddress, coinbase: this.coinbase });
142
154
 
143
155
  const rollupContract = RollupContract.getFromConfig(this.context.config);
144
- this.chainMonitor = new ChainMonitor(rollupContract, this.context.dateProvider!, this.logger, 200).start();
156
+ this.chainMonitor = new ChainMonitor(rollupContract, this.context.dateProvider, this.logger, 200).start();
145
157
 
146
158
  return this;
147
159
  }
148
160
 
149
161
  async teardown() {
150
162
  await this.chainMonitor.stop();
163
+ await this.userWallet?.stop();
151
164
  await teardown(this.context);
152
165
  }
153
166
 
@@ -156,21 +169,20 @@ export class ClientFlowsBenchmark {
156
169
  const { claimSecret: secret, messageLeafIndex: index } = claim;
157
170
  await this.feeJuiceContract.methods
158
171
  .claim(address, claim.claimAmount, secret, index)
159
- .send({ from: this.adminAddress })
160
- .wait();
172
+ .send({ from: this.adminAddress });
161
173
  }
162
174
 
163
175
  /** Admin mints bananaCoin tokens privately to the target address and redeems them. */
164
176
  async mintPrivateBananas(amount: bigint, address: AztecAddress) {
165
- const balanceBefore = await this.bananaCoin.methods
177
+ const { result: balanceBefore } = await this.bananaCoin.methods
166
178
  .balance_of_private(address)
167
- .simulate({ from: this.adminAddress });
179
+ .simulate({ from: address });
168
180
 
169
181
  await mintTokensToPrivate(this.bananaCoin, this.adminAddress, address, amount);
170
182
 
171
- const balanceAfter = await this.bananaCoin.methods
183
+ const { result: balanceAfter } = await this.bananaCoin.methods
172
184
  .balance_of_private(address)
173
- .simulate({ from: this.adminAddress });
185
+ .simulate({ from: address });
174
186
  expect(balanceAfter).toEqual(balanceBefore + amount);
175
187
  }
176
188
 
@@ -197,18 +209,10 @@ export class ClientFlowsBenchmark {
197
209
 
198
210
  async applyInitialAccounts() {
199
211
  this.logger.info('Applying initial accounts setup');
200
- const { deployedAccounts } = await deployAccounts(
201
- 2,
202
- this.logger,
203
- )({
204
- wallet: this.context.wallet,
205
- initialFundedAccounts: this.context.initialFundedAccounts,
206
- });
207
-
208
- const [{ address: adminAddress }, { address: sequencerAddress }] = deployedAccounts;
212
+ const [adminAddress, sequencerAddress] = this.context.accounts;
209
213
 
210
214
  this.adminWallet = this.context.wallet;
211
- this.aztecNode = this.context.aztecNodeService!;
215
+ this.aztecNode = this.context.aztecNodeService;
212
216
  this.cheatCodes = this.context.cheatCodes;
213
217
 
214
218
  this.adminAddress = adminAddress;
@@ -228,6 +232,19 @@ export class ClientFlowsBenchmark {
228
232
  loggers: {
229
233
  prover: this.proxyLogger.createLogger('pxe:bb:wasm:bundle:proxied'),
230
234
  },
235
+ // The benchmark measures steady-state app cost, not first-send discovery cost. Reproduce the pre-handshake-default
236
+ // behavior of unconstrained delivery: derive the tagging secret from the (sender, recipient) key pair via ECDH
237
+ // instead of taking the current default (a non-interactive handshake, which injects two extra private app
238
+ // executions and a nullifier per cold chain). Constrained delivery is unaffected: the Noir circuit rejects
239
+ // address-derived for constrained, so the hook falls through to a handshake there.
240
+ hooks: {
241
+ resolveTaggingSecretStrategy: ({ deliveryMode }) =>
242
+ Promise.resolve(
243
+ deliveryMode === AppTaggingSecretKind.UNCONSTRAINED
244
+ ? { type: 'address-derived' }
245
+ : { type: 'non-interactive-handshake' },
246
+ ),
247
+ },
231
248
  });
232
249
  }
233
250
 
@@ -236,9 +253,17 @@ export class ClientFlowsBenchmark {
236
253
  this.feeJuiceContract = FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, this.adminWallet);
237
254
 
238
255
  this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
239
- aztecNode: this.context.aztecNodeService!,
240
- aztecNodeAdmin: this.context.aztecNodeService!,
241
- l1Client: this.context.deployL1ContractsValues.l1Client,
256
+ aztecNode: this.context.aztecNodeService,
257
+ aztecNodeAdmin: this.context.aztecNodeService,
258
+ // Bridge from a dedicated L1 account so its direct writes don't race the sequencer publisher's
259
+ // txs on the deployer account (see L1_DIRECT_WRITE_ACCOUNT_INDEX).
260
+ l1Client: createExtendedL1Client(
261
+ this.context.config.l1RpcUrls,
262
+ MNEMONIC,
263
+ undefined,
264
+ undefined,
265
+ L1_DIRECT_WRITE_ACCOUNT_INDEX,
266
+ ),
242
267
  wallet: this.adminWallet,
243
268
  logger: this.logger,
244
269
  });
@@ -252,9 +277,9 @@ export class ClientFlowsBenchmark {
252
277
  'BC',
253
278
  'BC',
254
279
  18n,
255
- )
256
- .send({ from: this.adminAddress })
257
- .wait();
280
+ ).send({
281
+ from: this.adminAddress,
282
+ });
258
283
  this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
259
284
  this.bananaCoin = bananaCoin;
260
285
  this.bananaCoinInstance = bananaCoinInstance;
@@ -262,15 +287,15 @@ export class ClientFlowsBenchmark {
262
287
 
263
288
  async applyDeployCandyBarToken() {
264
289
  this.logger.info('Applying candy bar token deployment');
265
- const { contract: candyBarCoin, instance: candyBarCoinInstance } = await TokenContract.deploy(
290
+ const { contract: candyBarCoin, instance: candyBarCoinInstance } = await TestTokenContract.deploy(
266
291
  this.adminWallet,
267
292
  this.adminAddress,
268
293
  'CBC',
269
294
  'CBC',
270
295
  18n,
271
- )
272
- .send({ from: this.adminAddress })
273
- .wait();
296
+ ).send({
297
+ from: this.adminAddress,
298
+ });
274
299
  this.logger.info(`CandyBarCoin deployed at ${candyBarCoin.address}`);
275
300
  this.candyBarCoin = candyBarCoin;
276
301
  this.candyBarCoinInstance = candyBarCoinInstance;
@@ -286,9 +311,9 @@ export class ClientFlowsBenchmark {
286
311
  this.adminWallet,
287
312
  bananaCoin.address,
288
313
  this.adminAddress,
289
- )
290
- .send({ from: this.adminAddress })
291
- .wait();
314
+ ).send({
315
+ from: this.adminAddress,
316
+ });
292
317
 
293
318
  this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
294
319
 
@@ -332,20 +357,17 @@ export class ClientFlowsBenchmark {
332
357
 
333
358
  public async createAndFundBenchmarkingAccountOnUserWallet(accountType: AccountType) {
334
359
  const benchysAccountManager = await this.createBenchmarkingAccountManager(this.adminWallet, accountType);
335
- const benchysAccount = await benchysAccountManager.getAccount();
336
360
  const benchysAddress = benchysAccountManager.address;
337
361
  const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(benchysAddress);
338
362
  const behchysDeployMethod = await benchysAccountManager.getDeployMethod();
339
- await behchysDeployMethod
340
- .send({
341
- from: AztecAddress.ZERO,
342
- fee: { paymentMethod: new FeeJuicePaymentMethodWithClaim(benchysAddress, claim) },
343
- })
344
- .wait();
363
+ await behchysDeployMethod.send({
364
+ from: NO_FROM,
365
+ fee: { paymentMethod: new FeeJuicePaymentMethodWithClaim(benchysAddress, claim) },
366
+ });
345
367
  // Register benchy on the user's Wallet, where we're going to be interacting from
346
368
  const accountManager = await this.userWallet.createAccount({
347
- secret: benchysAccount.getSecretKey(),
348
- salt: new Fr(benchysAccount.salt),
369
+ secret: benchysAccountManager.getSecretKey(),
370
+ salt: new Fr(benchysAccountManager.getInstance().salt),
349
371
  contract: benchysAccountManager.getAccountContract(),
350
372
  });
351
373
  return accountManager.address;
@@ -353,25 +375,23 @@ export class ClientFlowsBenchmark {
353
375
 
354
376
  public async applyDeployAmm() {
355
377
  this.logger.info('Applying AMM deployment');
356
- const { contract: liquidityToken, instance: liquidityTokenInstance } = await TokenContract.deploy(
378
+ const { contract: liquidityToken, instance: liquidityTokenInstance } = await TestTokenContract.deploy(
357
379
  this.adminWallet,
358
380
  this.adminAddress,
359
381
  'LPT',
360
382
  'LPT',
361
383
  18n,
362
- )
363
- .send({ from: this.adminAddress })
364
- .wait();
384
+ ).send({
385
+ from: this.adminAddress,
386
+ });
365
387
  const { contract: amm, instance: ammInstance } = await AMMContract.deploy(
366
388
  this.adminWallet,
367
389
  this.bananaCoin.address,
368
390
  this.candyBarCoin.address,
369
391
  liquidityToken.address,
370
- )
371
- .send({ from: this.adminAddress })
372
- .wait();
392
+ ).send({ from: this.adminAddress });
373
393
  this.logger.info(`AMM deployed at ${amm.address}`);
374
- await liquidityToken.methods.set_minter(amm.address, true).send({ from: this.adminAddress }).wait();
394
+ await liquidityToken.methods.set_minter(amm.address, true).send({ from: this.adminAddress });
375
395
  this.liquidityToken = liquidityToken;
376
396
  this.liquidityTokenInstance = liquidityTokenInstance;
377
397
  this.amm = amm;
@@ -386,8 +406,9 @@ export class ClientFlowsBenchmark {
386
406
  public async getPrivateFPCPaymentMethodForWallet(wallet: Wallet, sender: AztecAddress) {
387
407
  // The private fee paying method assembled on the app side requires knowledge of the maximum
388
408
  // fee the user is willing to pay
389
- const maxFeesPerGas = (await this.aztecNode.getCurrentMinFees()).mul(1.5);
390
- const gasSettings = GasSettings.default({ maxFeesPerGas });
409
+ const maxFeesPerGas = await getPaddedMaxFeesPerGas(this.aztecNode);
410
+ const gasLimits = Gas.from((await this.aztecNode.getNodeInfo()).txsLimits.gas);
411
+ const gasSettings = GasSettings.fallback({ gasLimits, maxFeesPerGas });
391
412
  return new PrivateFeePaymentMethod(this.bananaFPC.address, sender, wallet, gasSettings);
392
413
  }
393
414
 
@@ -6,7 +6,7 @@ export type ClientFlowConfig = {
6
6
  recursions?: number[];
7
7
  };
8
8
 
9
- type ClientFlows = 'accountDeployments' | 'deployments' | 'transfers' | 'bridging' | 'amm';
9
+ type ClientFlows = 'accountDeployments' | 'deployments' | 'transfers' | 'bridging' | 'amm' | 'storageProof';
10
10
 
11
11
  export type ClientFlowsConfig = {
12
12
  [key in ClientFlows]: ClientFlowConfig;
@@ -34,6 +34,10 @@ export const KEY_FLOWS_CONFIG: ClientFlowsConfig = {
34
34
  feePaymentMethods: ['sponsored_fpc', 'private_fpc'],
35
35
  recursions: [0, 1],
36
36
  },
37
+ storageProof: {
38
+ accounts: ['ecdsar1'],
39
+ feePaymentMethods: ['sponsored_fpc'],
40
+ },
37
41
  };
38
42
 
39
43
  export const FULL_FLOWS_CONFIG: ClientFlowsConfig = {
@@ -58,4 +62,8 @@ export const FULL_FLOWS_CONFIG: ClientFlowsConfig = {
58
62
  feePaymentMethods: ['sponsored_fpc', 'private_fpc'],
59
63
  recursions: [0, 1, 2],
60
64
  },
65
+ storageProof: {
66
+ accounts: ['ecdsar1', 'schnorr'],
67
+ feePaymentMethods: ['sponsored_fpc', 'private_fpc'],
68
+ },
61
69
  };
@@ -51,6 +51,7 @@ async function main() {
51
51
  // TODO(AD) do we still want to take this from witness.json?
52
52
  witness: witnessStack[i],
53
53
  vk: stepsFromFile[i].vk,
54
+ kind: stepsFromFile[i].kind,
54
55
  timings: {
55
56
  witgen: step.timings.witgen,
56
57
  gateCount: step.timings.gateCount,
@@ -1,18 +1,28 @@
1
1
  import type { AztecNodeService } from '@aztec/aztec-node';
2
2
  import { AztecAddress } from '@aztec/aztec.js/addresses';
3
- import { BatchCall, type SentTx, type WaitOpts } from '@aztec/aztec.js/contracts';
3
+ import { BatchCall, NO_WAIT, type WaitOpts } from '@aztec/aztec.js/contracts';
4
+ import { waitForTx } from '@aztec/aztec.js/node';
5
+ import { SlotNumber } from '@aztec/foundation/branded-types';
4
6
  import { mean, stdDev, times } from '@aztec/foundation/collection';
5
7
  import { BenchmarkingContract } from '@aztec/noir-test-contracts.js/Benchmarking';
8
+ import { type Sequencer, type SequencerEvents, SequencerState } from '@aztec/sequencer-client';
9
+ import type { TxHash } from '@aztec/stdlib/tx';
6
10
  import type { MetricDefinition } from '@aztec/telemetry-client';
7
11
  import type { BenchmarkDataPoint, BenchmarkMetricsType, BenchmarkTelemetryClient } from '@aztec/telemetry-client/bench';
8
12
 
9
13
  import { mkdirSync, writeFileSync } from 'fs';
10
14
  import path from 'path';
11
15
 
16
+ import { PIPELINING_SETUP_OPTS } from '../fixtures/fixtures.js';
12
17
  import { type EndToEndContext, type SetupOptions, setup } from '../fixtures/utils.js';
13
18
 
19
+ const MAX_BENCH_WAIT_BLOCKS = 6;
20
+ const BENCH_FINAL_WAIT_TIMEOUT_SECONDS = 10;
21
+ const SEQUENCER_IDLE_TIMEOUT_MS = 60_000;
22
+ const DEFAULT_L1_PUBLISHING_TIME_SECONDS = 12;
23
+
14
24
  /**
15
- * Setup for benchmarks. Initializes a remote node with a single account and deploys a benchmark contract.
25
+ * Setup for benchmarks. Initializes a remote node with a funded hardcoded account and deploys a benchmark contract.
16
26
  */
17
27
  export async function benchmarkSetup(
18
28
  opts: Partial<SetupOptions> & {
@@ -21,12 +31,20 @@ export async function benchmarkSetup(
21
31
  benchOutput?: string;
22
32
  },
23
33
  ) {
24
- const context = await setup(1, { ...opts, telemetryConfig: { benchmark: true } });
25
- const defaultAccountAddress = context.accounts[0];
26
- const contract = await BenchmarkingContract.deploy(context.wallet).send({ from: defaultAccountAddress }).deployed();
34
+ const context = await setup(1, {
35
+ ...PIPELINING_SETUP_OPTS,
36
+ ...opts,
37
+ telemetryConfig: { benchmark: true },
38
+ });
39
+ const [defaultAccountAddress] = context.accounts;
40
+ const sequencer = getSequencerClient(context);
41
+ await waitForSequencerIdle(sequencer.getSequencer());
42
+ const deployment = BenchmarkingContract.deploy(context.wallet);
43
+ const { txHash } = await deployment.send({ from: defaultAccountAddress, wait: NO_WAIT });
44
+ await waitTxs([txHash], context);
45
+ const contract = await deployment.register();
27
46
  context.logger.info(`Deployed benchmarking contract at ${contract.address}`);
28
- const sequencer = (context.aztecNode as AztecNodeService).getSequencer()!;
29
- const telemetry = context.telemetryClient! as BenchmarkTelemetryClient;
47
+ const telemetry = context.telemetryClient as BenchmarkTelemetryClient;
30
48
  context.logger.warn(`Cleared benchmark data points from setup`);
31
49
  telemetry.clear();
32
50
  const origTeardown = context.teardown.bind(context);
@@ -46,6 +64,14 @@ export async function benchmarkSetup(
46
64
  return { telemetry, context, contract, sequencer };
47
65
  }
48
66
 
67
+ function getSequencerClient(context: EndToEndContext) {
68
+ const sequencer = (context.aztecNode as AztecNodeService).getSequencer();
69
+ if (!sequencer) {
70
+ throw new Error('Benchmark setup requires a local sequencer');
71
+ }
72
+ return sequencer;
73
+ }
74
+
49
75
  type MetricFilter = {
50
76
  source: MetricDefinition;
51
77
  transform: (value: number) => number;
@@ -142,18 +168,103 @@ export async function sendTxs(
142
168
  context: EndToEndContext,
143
169
  contract: BenchmarkingContract,
144
170
  heavyPublicCompute: boolean = false,
145
- ): Promise<SentTx[]> {
171
+ ): Promise<TxHash[]> {
146
172
  const calls = await Promise.all(times(txCount, index => makeCall(index, context, contract, heavyPublicCompute)));
147
173
  context.logger.info(`Creating ${txCount} txs`);
148
174
  const [from] = context.accounts;
149
175
  context.logger.info(`Sending ${txCount} txs`);
150
- return calls.map(call => call.send({ from }));
176
+ return Promise.all(
177
+ calls.map(async call => {
178
+ const { txHash } = await call.send({ from, wait: NO_WAIT });
179
+ return txHash;
180
+ }),
181
+ );
151
182
  }
152
183
 
153
- export async function waitTxs(txs: SentTx[], context: EndToEndContext, txWaitOpts?: WaitOpts) {
184
+ export async function waitTxs(txs: TxHash[], context: EndToEndContext, txWaitOpts?: WaitOpts) {
154
185
  context.logger.info(`Awaiting ${txs.length} txs to be mined`);
155
- await Promise.all(txs.map(tx => tx.wait(txWaitOpts)));
156
- context.logger.info(`All ${txs.length} txs have been mined`);
186
+ await waitTxsWithBlockMining(txs, context, txWaitOpts);
187
+ context.logger.info(`${txs.length} txs have been mined`);
188
+ }
189
+
190
+ async function waitTxsWithBlockMining(txs: TxHash[], context: EndToEndContext, txWaitOpts?: WaitOpts) {
191
+ const sequencer = getSequencerClient(context).getSequencer();
192
+ for (let attempt = 0; attempt <= MAX_BENCH_WAIT_BLOCKS; attempt++) {
193
+ if (await haveAllTxsMined(txs, context, txWaitOpts)) {
194
+ await waitForSequencerIdle(sequencer);
195
+ return;
196
+ }
197
+ await waitForSequencerIdle(sequencer);
198
+ context.logger.info('Mining next benchmark block while waiting for txs', {
199
+ attempt,
200
+ txs: txs.length,
201
+ });
202
+ await mineNextBenchmarkBlock(context, sequencer);
203
+ }
204
+ await Promise.all(
205
+ txs.map(txHash =>
206
+ waitForTx(context.aztecNode, txHash, {
207
+ ...txWaitOpts,
208
+ timeout: txWaitOpts?.timeout ?? BENCH_FINAL_WAIT_TIMEOUT_SECONDS,
209
+ }),
210
+ ),
211
+ );
212
+ }
213
+
214
+ async function haveAllTxsMined(txs: TxHash[], context: EndToEndContext, txWaitOpts?: WaitOpts): Promise<boolean> {
215
+ const receipts = await Promise.all(txs.map(txHash => context.aztecNode.getTxReceipt(txHash)));
216
+ for (const receipt of receipts) {
217
+ if (receipt.isDropped()) {
218
+ throw new Error(`Transaction ${receipt.txHash.toString()} was dropped. Reason: ${receipt.error ?? 'unknown'}`);
219
+ }
220
+ if (!receipt.isMined()) {
221
+ return false;
222
+ }
223
+ if (!receipt.hasExecutionSucceeded() && !txWaitOpts?.dontThrowOnRevert) {
224
+ throw new Error(
225
+ `Transaction ${receipt.txHash.toString()} reverted: ${receipt.executionResult}. Reason: ${
226
+ receipt.error ?? 'unknown'
227
+ }`,
228
+ );
229
+ }
230
+ }
231
+ return true;
232
+ }
233
+
234
+ async function mineNextBenchmarkBlock(context: EndToEndContext, sequencer: Sequencer) {
235
+ const l1PublishingTime = BigInt(context.config.l1PublishingTime ?? DEFAULT_L1_PUBLISHING_TIME_SECONDS);
236
+ const currentTimestamp = BigInt(await context.cheatCodes.eth.lastBlockTimestamp());
237
+ let targetSlot = SlotNumber((await context.cheatCodes.rollup.getSlot()) + 1);
238
+ let targetTimestamp = await context.cheatCodes.rollup.getTimestampForSlot(targetSlot);
239
+ while (targetTimestamp - l1PublishingTime - 1n <= currentTimestamp) {
240
+ targetSlot = SlotNumber(targetSlot + 1);
241
+ targetTimestamp = await context.cheatCodes.rollup.getTimestampForSlot(targetSlot);
242
+ }
243
+
244
+ const triggerTimestamp = targetTimestamp - l1PublishingTime - 1n;
245
+ await context.cheatCodes.eth.warp(triggerTimestamp, { resetBlockInterval: true });
246
+ await context.aztecNode.mineBlock();
247
+ await waitForSequencerIdle(sequencer);
248
+ }
249
+
250
+ function waitForSequencerIdle(sequencer: Sequencer, timeout = SEQUENCER_IDLE_TIMEOUT_MS): Promise<void> {
251
+ if (sequencer.status().state === SequencerState.IDLE) {
252
+ return Promise.resolve();
253
+ }
254
+ return new Promise((resolve, reject) => {
255
+ const timer = setTimeout(() => {
256
+ sequencer.off('state-changed', handler);
257
+ reject(new Error('Timeout waiting for sequencer IDLE state'));
258
+ }, timeout);
259
+ const handler = (args: Parameters<SequencerEvents['state-changed']>[0]) => {
260
+ if (args.newState === SequencerState.IDLE) {
261
+ clearTimeout(timer);
262
+ sequencer.off('state-changed', handler);
263
+ resolve();
264
+ }
265
+ };
266
+ sequencer.on('state-changed', handler);
267
+ });
157
268
  }
158
269
 
159
270
  function randomBytesAsBigInts(length: number): bigint[] {