@aztec/end-to-end 0.0.1-commit.d3ec352c → 0.0.1-commit.d58ff9d0

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 (404) 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/interactive_handshake_responder.d.ts +48 -0
  12. package/dest/automine/delivery/interactive_handshake_responder.d.ts.map +1 -0
  13. package/dest/automine/delivery/interactive_handshake_responder.js +76 -0
  14. package/dest/automine/delivery/onchain_delivery_harness.d.ts +19 -0
  15. package/dest/automine/delivery/onchain_delivery_harness.d.ts.map +1 -0
  16. package/dest/automine/delivery/onchain_delivery_harness.js +141 -0
  17. package/dest/automine/token/blacklist_token_contract_test.d.ts +49 -0
  18. package/dest/automine/token/blacklist_token_contract_test.d.ts.map +1 -0
  19. package/dest/automine/token/blacklist_token_contract_test.js +166 -0
  20. package/dest/automine/token/token_contract_test.d.ts +40 -0
  21. package/dest/automine/token/token_contract_test.d.ts.map +1 -0
  22. package/dest/automine/token/token_contract_test.js +119 -0
  23. package/dest/automine/token/token_test_helpers.d.ts +73 -0
  24. package/dest/automine/token/token_test_helpers.d.ts.map +1 -0
  25. package/dest/automine/token/token_test_helpers.js +97 -0
  26. package/dest/bench/client_flows/benchmark.d.ts +17 -2
  27. package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
  28. package/dest/bench/client_flows/benchmark.js +40 -1
  29. package/dest/bench/client_flows/client_flows_benchmark.d.ts +19 -20
  30. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  31. package/dest/bench/client_flows/client_flows_benchmark.js +155 -159
  32. package/dest/bench/client_flows/config.d.ts +2 -2
  33. package/dest/bench/client_flows/config.d.ts.map +1 -1
  34. package/dest/bench/client_flows/config.js +18 -0
  35. package/dest/bench/client_flows/data_extractor.js +4 -1
  36. package/dest/bench/utils.d.ts +11 -10
  37. package/dest/bench/utils.d.ts.map +1 -1
  38. package/dest/bench/utils.js +126 -23
  39. package/dest/composed/ha/ha_full_setup.d.ts +77 -0
  40. package/dest/composed/ha/ha_full_setup.d.ts.map +1 -0
  41. package/dest/composed/ha/ha_full_setup.js +383 -0
  42. package/dest/composed/web3signer/multi_validator_keystore_utils.d.ts +12 -0
  43. package/dest/composed/web3signer/multi_validator_keystore_utils.d.ts.map +1 -0
  44. package/dest/{e2e_multi_validator/utils.js → composed/web3signer/multi_validator_keystore_utils.js} +1 -1
  45. package/dest/fixtures/authwit_proxy.d.ts +15 -0
  46. package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
  47. package/dest/fixtures/authwit_proxy.js +34 -0
  48. package/dest/fixtures/e2e_prover_test.d.ts +25 -29
  49. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  50. package/dest/fixtures/e2e_prover_test.js +147 -151
  51. package/dest/fixtures/elu_monitor.d.ts +21 -0
  52. package/dest/fixtures/elu_monitor.d.ts.map +1 -0
  53. package/dest/fixtures/elu_monitor.js +102 -0
  54. package/dest/fixtures/fixtures.d.ts +84 -3
  55. package/dest/fixtures/fixtures.d.ts.map +1 -1
  56. package/dest/fixtures/fixtures.js +87 -2
  57. package/dest/fixtures/get_acvm_config.js +1 -1
  58. package/dest/fixtures/get_bb_config.d.ts +1 -1
  59. package/dest/fixtures/get_bb_config.d.ts.map +1 -1
  60. package/dest/fixtures/get_bb_config.js +5 -5
  61. package/dest/fixtures/ha_setup.d.ts +71 -0
  62. package/dest/fixtures/ha_setup.d.ts.map +1 -0
  63. package/dest/fixtures/ha_setup.js +119 -0
  64. package/dest/fixtures/index.d.ts +3 -1
  65. package/dest/fixtures/index.d.ts.map +1 -1
  66. package/dest/fixtures/index.js +2 -0
  67. package/dest/fixtures/l1_to_l2_messaging.d.ts +4 -3
  68. package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
  69. package/dest/fixtures/l1_to_l2_messaging.js +2 -2
  70. package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts +25 -0
  71. package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts.map +1 -0
  72. package/dest/fixtures/schnorr_hardcoded_account_contract.js +37 -0
  73. package/dest/fixtures/setup.d.ts +269 -0
  74. package/dest/fixtures/setup.d.ts.map +1 -0
  75. package/dest/fixtures/setup.js +688 -0
  76. package/dest/fixtures/setup_p2p_test.d.ts +22 -11
  77. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  78. package/dest/fixtures/setup_p2p_test.js +49 -38
  79. package/dest/fixtures/timing.d.ts +42 -0
  80. package/dest/fixtures/timing.d.ts.map +1 -0
  81. package/dest/fixtures/timing.js +72 -0
  82. package/dest/fixtures/token_utils.d.ts +22 -4
  83. package/dest/fixtures/token_utils.d.ts.map +1 -1
  84. package/dest/fixtures/token_utils.js +28 -7
  85. package/dest/fixtures/utils.d.ts +5 -638
  86. package/dest/fixtures/utils.d.ts.map +1 -1
  87. package/dest/fixtures/utils.js +4 -647
  88. package/dest/fixtures/wait_helpers.d.ts +135 -0
  89. package/dest/fixtures/wait_helpers.d.ts.map +1 -0
  90. package/dest/fixtures/wait_helpers.js +154 -0
  91. package/dest/fixtures/web3signer.js +1 -1
  92. package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
  93. package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
  94. package/dest/fixtures/with_telemetry_utils.js +2 -2
  95. package/dest/forward-compatibility/wallet_rpc_client.d.ts +7 -0
  96. package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
  97. package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
  98. package/dest/forward-compatibility/wallet_service.d.ts +3 -0
  99. package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
  100. package/dest/forward-compatibility/wallet_service.js +109 -0
  101. package/dest/install_legacy_contracts.d.cts +10 -0
  102. package/dest/install_legacy_contracts.d.cts.map +1 -0
  103. package/dest/legacy-jest-resolver.d.cts +3 -0
  104. package/dest/legacy-jest-resolver.d.cts.map +1 -0
  105. package/dest/multi-node/block-production/setup.d.ts +97 -0
  106. package/dest/multi-node/block-production/setup.d.ts.map +1 -0
  107. package/dest/multi-node/block-production/setup.js +158 -0
  108. package/dest/multi-node/governance/setup.d.ts +67 -0
  109. package/dest/multi-node/governance/setup.d.ts.map +1 -0
  110. package/dest/multi-node/governance/setup.js +126 -0
  111. package/dest/multi-node/multi_node_test_context.d.ts +212 -0
  112. package/dest/multi-node/multi_node_test_context.d.ts.map +1 -0
  113. package/dest/multi-node/multi_node_test_context.js +347 -0
  114. package/dest/multi-node/slashing/inactivity_setup.d.ts +27 -0
  115. package/dest/multi-node/slashing/inactivity_setup.d.ts.map +1 -0
  116. package/dest/multi-node/slashing/inactivity_setup.js +111 -0
  117. package/dest/multi-node/slashing/setup.d.ts +167 -0
  118. package/dest/multi-node/slashing/setup.d.ts.map +1 -0
  119. package/dest/multi-node/slashing/setup.js +275 -0
  120. package/dest/{e2e_p2p → p2p}/p2p_network.d.ts +33 -21
  121. package/dest/p2p/p2p_network.d.ts.map +1 -0
  122. package/dest/p2p/p2p_network.js +389 -0
  123. package/dest/p2p/reqresp/utils.d.ts +19 -0
  124. package/dest/p2p/reqresp/utils.d.ts.map +1 -0
  125. package/dest/p2p/reqresp/utils.js +193 -0
  126. package/dest/p2p/shared.d.ts +72 -0
  127. package/dest/p2p/shared.d.ts.map +1 -0
  128. package/dest/p2p/shared.js +212 -0
  129. package/dest/quality_of_service/grafana_client.d.ts +41 -0
  130. package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
  131. package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
  132. package/dest/quality_of_service/prometheus_client.d.ts +38 -0
  133. package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
  134. package/dest/quality_of_service/prometheus_client.js +67 -0
  135. package/dest/shared/cross_chain_test_harness.d.ts +22 -9
  136. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  137. package/dest/shared/cross_chain_test_harness.js +45 -40
  138. package/dest/shared/gas_portal_test_harness.d.ts +19 -6
  139. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  140. package/dest/shared/gas_portal_test_harness.js +27 -15
  141. package/dest/shared/index.d.ts +3 -2
  142. package/dest/shared/index.d.ts.map +1 -1
  143. package/dest/shared/index.js +1 -0
  144. package/dest/shared/jest_setup.js +41 -1
  145. package/dest/shared/mock_state_view.d.ts +86 -0
  146. package/dest/shared/mock_state_view.d.ts.map +1 -0
  147. package/dest/shared/mock_state_view.js +186 -0
  148. package/dest/shared/submit-transactions.d.ts +4 -4
  149. package/dest/shared/submit-transactions.d.ts.map +1 -1
  150. package/dest/shared/submit-transactions.js +19 -14
  151. package/dest/shared/timing_env.d.js +5 -0
  152. package/dest/shared/timing_env.js +365 -0
  153. package/dest/shared/uniswap_l1_l2.d.ts +3 -27
  154. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  155. package/dest/shared/uniswap_l1_l2.js +86 -54
  156. package/dest/shared/wait_for_l1_to_l2_message.d.ts +13 -0
  157. package/dest/shared/wait_for_l1_to_l2_message.d.ts.map +1 -0
  158. package/dest/shared/wait_for_l1_to_l2_message.js +10 -0
  159. package/dest/simulators/lending_simulator.d.ts +15 -4
  160. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  161. package/dest/simulators/lending_simulator.js +29 -17
  162. package/dest/simulators/token_simulator.d.ts +1 -1
  163. package/dest/simulators/token_simulator.d.ts.map +1 -1
  164. package/dest/simulators/token_simulator.js +3 -24
  165. package/dest/single-node/cross-chain/cross_chain_messaging_test.d.ts +75 -0
  166. package/dest/single-node/cross-chain/cross_chain_messaging_test.d.ts.map +1 -0
  167. package/dest/single-node/cross-chain/cross_chain_messaging_test.js +209 -0
  168. package/dest/single-node/cross-chain/message_test_helpers.d.ts +38 -0
  169. package/dest/single-node/cross-chain/message_test_helpers.d.ts.map +1 -0
  170. package/dest/single-node/cross-chain/message_test_helpers.js +70 -0
  171. package/dest/{e2e_fees → single-node/fees}/bridging_race.notest.d.ts +1 -1
  172. package/dest/single-node/fees/bridging_race.notest.d.ts.map +1 -0
  173. package/dest/{e2e_fees → single-node/fees}/bridging_race.notest.js +21 -10
  174. package/dest/single-node/fees/fees_test.d.ts +93 -0
  175. package/dest/single-node/fees/fees_test.d.ts.map +1 -0
  176. package/dest/single-node/fees/fees_test.js +274 -0
  177. package/dest/single-node/l1-reorgs/setup.d.ts +42 -0
  178. package/dest/single-node/l1-reorgs/setup.d.ts.map +1 -0
  179. package/dest/single-node/l1-reorgs/setup.js +57 -0
  180. package/dest/single-node/partial-proofs/setup.d.ts +5 -0
  181. package/dest/single-node/partial-proofs/setup.d.ts.map +1 -0
  182. package/dest/single-node/partial-proofs/setup.js +5 -0
  183. package/dest/single-node/proving/setup.d.ts +5 -0
  184. package/dest/single-node/proving/setup.d.ts.map +1 -0
  185. package/dest/single-node/proving/setup.js +5 -0
  186. package/dest/single-node/recovery/setup.d.ts +5 -0
  187. package/dest/single-node/recovery/setup.d.ts.map +1 -0
  188. package/dest/single-node/recovery/setup.js +5 -0
  189. package/dest/single-node/setup.d.ts +49 -0
  190. package/dest/single-node/setup.d.ts.map +1 -0
  191. package/dest/single-node/setup.js +56 -0
  192. package/dest/single-node/single_node_test_context.d.ts +360 -0
  193. package/dest/single-node/single_node_test_context.d.ts.map +1 -0
  194. package/dest/single-node/single_node_test_context.js +833 -0
  195. package/dest/spartan/setup_test_wallets.d.ts +15 -5
  196. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  197. package/dest/spartan/setup_test_wallets.js +155 -50
  198. package/dest/spartan/tx_metrics.d.ts +111 -0
  199. package/dest/spartan/tx_metrics.d.ts.map +1 -0
  200. package/dest/spartan/tx_metrics.js +507 -0
  201. package/dest/spartan/utils/bot.d.ts +28 -0
  202. package/dest/spartan/utils/bot.d.ts.map +1 -0
  203. package/dest/spartan/utils/bot.js +142 -0
  204. package/dest/spartan/utils/chaos.d.ts +79 -0
  205. package/dest/spartan/utils/chaos.d.ts.map +1 -0
  206. package/dest/spartan/utils/chaos.js +142 -0
  207. package/dest/spartan/utils/clients.d.ts +39 -0
  208. package/dest/spartan/utils/clients.d.ts.map +1 -0
  209. package/dest/spartan/utils/clients.js +90 -0
  210. package/dest/spartan/utils/config.d.ts +19 -0
  211. package/dest/spartan/utils/config.d.ts.map +1 -0
  212. package/dest/spartan/utils/config.js +23 -0
  213. package/dest/spartan/utils/health.d.ts +63 -0
  214. package/dest/spartan/utils/health.d.ts.map +1 -0
  215. package/dest/spartan/utils/health.js +202 -0
  216. package/dest/spartan/utils/helm.d.ts +15 -0
  217. package/dest/spartan/utils/helm.d.ts.map +1 -0
  218. package/dest/spartan/utils/helm.js +47 -0
  219. package/dest/spartan/utils/index.d.ts +11 -0
  220. package/dest/spartan/utils/index.d.ts.map +1 -0
  221. package/dest/spartan/utils/index.js +22 -0
  222. package/dest/spartan/utils/k8s.d.ts +128 -0
  223. package/dest/spartan/utils/k8s.d.ts.map +1 -0
  224. package/dest/spartan/utils/k8s.js +381 -0
  225. package/dest/spartan/utils/nodes.d.ts +40 -0
  226. package/dest/spartan/utils/nodes.d.ts.map +1 -0
  227. package/dest/spartan/utils/nodes.js +461 -0
  228. package/dest/spartan/utils/pod_logs.d.ts +25 -0
  229. package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
  230. package/dest/spartan/utils/pod_logs.js +74 -0
  231. package/dest/spartan/utils/scripts.d.ts +30 -0
  232. package/dest/spartan/utils/scripts.d.ts.map +1 -0
  233. package/dest/spartan/utils/scripts.js +81 -0
  234. package/dest/spartan/utils.d.ts +2 -221
  235. package/dest/spartan/utils.d.ts.map +1 -1
  236. package/dest/spartan/utils.js +1 -782
  237. package/dest/test-wallet/test_wallet.d.ts +105 -0
  238. package/dest/test-wallet/test_wallet.d.ts.map +1 -0
  239. package/dest/test-wallet/test_wallet.js +320 -0
  240. package/dest/test-wallet/utils.d.ts +76 -0
  241. package/dest/test-wallet/utils.d.ts.map +1 -0
  242. package/dest/test-wallet/utils.js +126 -0
  243. package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
  244. package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
  245. package/dest/test-wallet/wallet_worker_script.js +56 -0
  246. package/dest/test-wallet/worker_wallet.d.ts +53 -0
  247. package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
  248. package/dest/test-wallet/worker_wallet.js +157 -0
  249. package/dest/test-wallet/worker_wallet_schema.d.ts +4 -0
  250. package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
  251. package/dest/test-wallet/worker_wallet_schema.js +23 -0
  252. package/package.json +54 -46
  253. package/src/automine/README.md +60 -0
  254. package/src/automine/automine_test_context.ts +153 -0
  255. package/src/automine/contracts/fixtures/storage_proof.json +915 -0
  256. package/src/automine/contracts/fixtures/storage_proof_fetcher.ts +190 -0
  257. package/src/automine/contracts/fixtures/storage_proof_fixture.ts +173 -0
  258. package/src/automine/delivery/interactive_handshake_responder.ts +125 -0
  259. package/src/automine/delivery/onchain_delivery_harness.ts +213 -0
  260. package/src/automine/token/blacklist_token_contract_test.ts +208 -0
  261. package/src/automine/token/token_contract_test.ts +146 -0
  262. package/src/automine/token/token_test_helpers.ts +138 -0
  263. package/src/bench/client_flows/benchmark.ts +45 -2
  264. package/src/bench/client_flows/client_flows_benchmark.ts +222 -251
  265. package/src/bench/client_flows/config.ts +9 -1
  266. package/src/bench/client_flows/data_extractor.ts +2 -1
  267. package/src/bench/utils.ts +144 -25
  268. package/src/composed/ha/ha_full_setup.ts +466 -0
  269. package/src/{e2e_multi_validator/utils.ts → composed/web3signer/multi_validator_keystore_utils.ts} +1 -1
  270. package/src/fixtures/authwit_proxy.ts +54 -0
  271. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  272. package/src/fixtures/e2e_prover_test.ts +172 -205
  273. package/src/fixtures/elu_monitor.ts +126 -0
  274. package/src/fixtures/fixtures.ts +111 -3
  275. package/src/fixtures/get_acvm_config.ts +1 -1
  276. package/src/fixtures/get_bb_config.ts +7 -6
  277. package/src/fixtures/ha_setup.ts +192 -0
  278. package/src/fixtures/index.ts +2 -0
  279. package/src/fixtures/l1_to_l2_messaging.ts +4 -2
  280. package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
  281. package/src/fixtures/setup.ts +987 -0
  282. package/src/fixtures/setup_p2p_test.ts +57 -57
  283. package/src/fixtures/timing.ts +97 -0
  284. package/src/fixtures/token_utils.ts +46 -10
  285. package/src/fixtures/utils.ts +26 -966
  286. package/src/fixtures/wait_helpers.ts +333 -0
  287. package/src/fixtures/web3signer.ts +1 -1
  288. package/src/fixtures/with_telemetry_utils.ts +2 -2
  289. package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
  290. package/src/forward-compatibility/wallet_service.ts +106 -0
  291. package/src/guides/up_quick_start.sh +7 -4
  292. package/src/infra/README.md +12 -0
  293. package/src/install_legacy_contracts.cjs +75 -0
  294. package/src/legacy-jest-resolver.cjs +112 -0
  295. package/src/multi-node/README.md +95 -0
  296. package/src/multi-node/block-production/setup.ts +272 -0
  297. package/src/multi-node/governance/setup.ts +172 -0
  298. package/src/multi-node/multi_node_test_context.ts +447 -0
  299. package/src/multi-node/slashing/inactivity_setup.ts +139 -0
  300. package/src/multi-node/slashing/setup.ts +433 -0
  301. package/src/p2p/README.md +78 -0
  302. package/src/p2p/p2p_network.ts +542 -0
  303. package/src/p2p/reqresp/utils.ts +263 -0
  304. package/src/p2p/shared.ts +329 -0
  305. package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
  306. package/src/quality_of_service/prometheus_client.ts +113 -0
  307. package/src/shared/cross_chain_test_harness.ts +51 -44
  308. package/src/shared/gas_portal_test_harness.ts +35 -17
  309. package/src/shared/index.ts +2 -1
  310. package/src/shared/jest_setup.ts +51 -1
  311. package/src/shared/mock_state_view.ts +188 -0
  312. package/src/shared/submit-transactions.ts +22 -19
  313. package/src/shared/timing_env.d.mts +39 -0
  314. package/src/shared/timing_env.mjs +363 -0
  315. package/src/shared/uniswap_l1_l2.ts +136 -115
  316. package/src/shared/wait_for_l1_to_l2_message.ts +23 -0
  317. package/src/simulators/lending_simulator.ts +36 -18
  318. package/src/simulators/token_simulator.ts +6 -30
  319. package/src/single-node/README.md +60 -0
  320. package/src/single-node/cross-chain/cross_chain_messaging_test.ts +302 -0
  321. package/src/single-node/cross-chain/message_test_helpers.ts +125 -0
  322. package/src/{e2e_fees → single-node/fees}/bridging_race.notest.ts +23 -15
  323. package/src/single-node/fees/fees_test.ts +368 -0
  324. package/src/single-node/l1-reorgs/setup.ts +93 -0
  325. package/src/single-node/partial-proofs/setup.ts +8 -0
  326. package/src/single-node/proving/setup.ts +15 -0
  327. package/src/single-node/recovery/setup.ts +8 -0
  328. package/src/single-node/setup.ts +63 -0
  329. package/src/single-node/single_node_test_context.ts +1041 -0
  330. package/src/spartan/setup_test_wallets.ts +217 -36
  331. package/src/spartan/tx_metrics.ts +460 -0
  332. package/src/spartan/utils/bot.ts +188 -0
  333. package/src/spartan/utils/chaos.ts +253 -0
  334. package/src/spartan/utils/clients.ts +100 -0
  335. package/src/spartan/utils/config.ts +29 -0
  336. package/src/spartan/utils/health.ts +255 -0
  337. package/src/spartan/utils/helm.ts +84 -0
  338. package/src/spartan/utils/index.ts +71 -0
  339. package/src/spartan/utils/k8s.ts +535 -0
  340. package/src/spartan/utils/nodes.ts +543 -0
  341. package/src/spartan/utils/pod_logs.ts +99 -0
  342. package/src/spartan/utils/scripts.ts +99 -0
  343. package/src/spartan/utils.ts +1 -983
  344. package/src/test-wallet/test_wallet.ts +426 -0
  345. package/src/test-wallet/utils.ts +205 -0
  346. package/src/test-wallet/wallet_worker_script.ts +66 -0
  347. package/src/test-wallet/worker_wallet.ts +216 -0
  348. package/src/test-wallet/worker_wallet_schema.ts +14 -0
  349. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +0 -54
  350. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +0 -1
  351. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +0 -185
  352. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +0 -41
  353. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +0 -1
  354. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +0 -108
  355. package/dest/e2e_deploy_contract/deploy_test.d.ts +0 -36
  356. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +0 -1
  357. package/dest/e2e_deploy_contract/deploy_test.js +0 -45
  358. package/dest/e2e_epochs/epochs_test.d.ts +0 -93
  359. package/dest/e2e_epochs/epochs_test.d.ts.map +0 -1
  360. package/dest/e2e_epochs/epochs_test.js +0 -337
  361. package/dest/e2e_fees/bridging_race.notest.d.ts.map +0 -1
  362. package/dest/e2e_fees/fees_test.d.ts +0 -85
  363. package/dest/e2e_fees/fees_test.d.ts.map +0 -1
  364. package/dest/e2e_fees/fees_test.js +0 -263
  365. package/dest/e2e_l1_publisher/write_json.d.ts +0 -10
  366. package/dest/e2e_l1_publisher/write_json.d.ts.map +0 -1
  367. package/dest/e2e_l1_publisher/write_json.js +0 -58
  368. package/dest/e2e_multi_validator/utils.d.ts +0 -12
  369. package/dest/e2e_multi_validator/utils.d.ts.map +0 -1
  370. package/dest/e2e_nested_contract/nested_contract_test.d.ts +0 -29
  371. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +0 -1
  372. package/dest/e2e_nested_contract/nested_contract_test.js +0 -64
  373. package/dest/e2e_p2p/inactivity_slash_test.d.ts +0 -31
  374. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +0 -1
  375. package/dest/e2e_p2p/inactivity_slash_test.js +0 -139
  376. package/dest/e2e_p2p/p2p_network.d.ts.map +0 -1
  377. package/dest/e2e_p2p/p2p_network.js +0 -320
  378. package/dest/e2e_p2p/shared.d.ts +0 -46
  379. package/dest/e2e_p2p/shared.d.ts.map +0 -1
  380. package/dest/e2e_p2p/shared.js +0 -184
  381. package/dest/e2e_token_contract/token_contract_test.d.ts +0 -35
  382. package/dest/e2e_token_contract/token_contract_test.d.ts.map +0 -1
  383. package/dest/e2e_token_contract/token_contract_test.js +0 -126
  384. package/dest/fixtures/setup_l1_contracts.d.ts +0 -477
  385. package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
  386. package/dest/fixtures/setup_l1_contracts.js +0 -17
  387. package/dest/fixtures/snapshot_manager.d.ts +0 -95
  388. package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
  389. package/dest/fixtures/snapshot_manager.js +0 -505
  390. package/dest/quality_of_service/alert_checker.d.ts +0 -41
  391. package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
  392. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +0 -256
  393. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +0 -179
  394. package/src/e2e_deploy_contract/deploy_test.ts +0 -78
  395. package/src/e2e_epochs/epochs_test.ts +0 -438
  396. package/src/e2e_fees/fees_test.ts +0 -382
  397. package/src/e2e_l1_publisher/write_json.ts +0 -77
  398. package/src/e2e_nested_contract/nested_contract_test.ts +0 -96
  399. package/src/e2e_p2p/inactivity_slash_test.ts +0 -182
  400. package/src/e2e_p2p/p2p_network.ts +0 -476
  401. package/src/e2e_p2p/shared.ts +0 -285
  402. package/src/e2e_token_contract/token_contract_test.ts +0 -167
  403. package/src/fixtures/setup_l1_contracts.ts +0 -26
  404. package/src/fixtures/snapshot_manager.ts +0 -665
@@ -1,28 +1,28 @@
1
1
  import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
2
2
  import { computeAuthWitMessageHash } from '@aztec/aztec.js/authorization';
3
+ import { waitForProven } from '@aztec/aztec.js/contracts';
3
4
  import { generateClaimSecret } from '@aztec/aztec.js/ethereum';
4
5
  import { Fr } from '@aztec/aztec.js/fields';
5
6
  import type { Logger } from '@aztec/aztec.js/log';
6
7
  import type { AztecNode } from '@aztec/aztec.js/node';
7
8
  import { CheatCodes } from '@aztec/aztec/testing';
8
- import {
9
- type DeployL1ContractsReturnType,
10
- type ExtendedViemWalletClient,
11
- RollupContract,
12
- deployL1Contract,
13
- extractEvent,
14
- } from '@aztec/ethereum';
15
- import { sha256ToField } from '@aztec/foundation/crypto';
9
+ import { RollupContract } from '@aztec/ethereum/contracts';
10
+ import type { DeployAztecL1ContractsReturnType } from '@aztec/ethereum/deploy-aztec-l1-contracts';
11
+ import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
12
+ import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
13
+ import { extractEvent } from '@aztec/ethereum/utils';
14
+ import { EpochNumber } from '@aztec/foundation/branded-types';
15
+ import { sha256ToField } from '@aztec/foundation/crypto/sha256';
16
+ import { retryUntil } from '@aztec/foundation/retry';
16
17
  import { InboxAbi, UniswapPortalAbi, UniswapPortalBytecode } from '@aztec/l1-artifacts';
17
18
  import { UniswapContract } from '@aztec/noir-contracts.js/Uniswap';
18
19
  import { computeL2ToL1MessageHash } from '@aztec/stdlib/hash';
19
- import { computeL2ToL1MembershipWitness } from '@aztec/stdlib/messaging';
20
- import type { TestWallet } from '@aztec/test-wallet/server';
21
20
 
22
21
  import { jest } from '@jest/globals';
23
22
  import { type GetContractReturnType, getContract, parseEther, toFunctionSelector } from 'viem';
24
23
 
25
- import { ensureAccountContractsPublished } from '../fixtures/utils.js';
24
+ import { type EndToEndContext, ensureAuthRegistryPublished } from '../fixtures/utils.js';
25
+ import type { TestWallet } from '../test-wallet/test_wallet.js';
26
26
  import { CrossChainTestHarness } from './cross_chain_test_harness.js';
27
27
 
28
28
  // PSA: This tests works on forked mainnet. There is a dump of the data in `dumpedState` such that we
@@ -32,30 +32,10 @@ import { CrossChainTestHarness } from './cross_chain_test_harness.js';
32
32
  // anvil --fork-url https://mainnet.infura.io/v3/9928b52099854248b3a096be07a6b23c --fork-block-number 17514288 --chain-id 31337
33
33
  // For CI, this is configured in `run_tests.sh` and `docker-compose-images.yml`
34
34
 
35
- const TIMEOUT = 360_000;
36
-
37
- /** Objects to be returned by the uniswap setup function */
38
- export type UniswapSetupContext = {
39
- /** Aztec Node instance */
40
- aztecNode: AztecNode;
41
- /** Logger instance named as the current test. */
42
- logger: Logger;
43
- /** The L1 wallet client, extended with public actions. */
44
- l1Client: ExtendedViemWalletClient;
45
- /** The wallet. */
46
- wallet: TestWallet;
47
- /** The owner address. */
48
- ownerAddress: AztecAddress;
49
- /** The sponsor wallet. */
50
- sponsorAddress: AztecAddress;
51
- /** */
52
- deployL1ContractsValues: DeployL1ContractsReturnType;
53
- /** Cheat codes instance. */
54
- cheatCodes: CheatCodes;
55
- };
35
+ const TIMEOUT = 15 * 60 * 1000;
56
36
 
57
37
  export const uniswapL1L2TestSuite = (
58
- setup: () => Promise<UniswapSetupContext>,
38
+ setup: () => Promise<EndToEndContext>,
59
39
  cleanup: () => Promise<void>,
60
40
  expectedForkBlockNumber = 17514288,
61
41
  ) => {
@@ -79,7 +59,7 @@ export const uniswapL1L2TestSuite = (
79
59
  let daiCrossChainHarness: CrossChainTestHarness;
80
60
  let wethCrossChainHarness: CrossChainTestHarness;
81
61
 
82
- let deployL1ContractsValues: DeployL1ContractsReturnType;
62
+ let deployL1ContractsValues: DeployAztecL1ContractsReturnType;
83
63
  let rollup: RollupContract;
84
64
  let uniswapPortal: GetContractReturnType<typeof UniswapPortalAbi, ExtendedViemWalletClient>;
85
65
  let uniswapPortalAddress: EthAddress;
@@ -92,8 +72,17 @@ export const uniswapL1L2TestSuite = (
92
72
  let cheatCodes: CheatCodes;
93
73
  let version: number;
94
74
  beforeAll(async () => {
95
- ({ aztecNode, logger, l1Client, wallet, ownerAddress, sponsorAddress, deployL1ContractsValues, cheatCodes } =
96
- await setup());
75
+ const t = await setup();
76
+ ({
77
+ aztecNode,
78
+ logger,
79
+ deployL1ContractsValues,
80
+ cheatCodes,
81
+ wallet,
82
+ accounts: [ownerAddress, sponsorAddress],
83
+ } = t);
84
+
85
+ l1Client = deployL1ContractsValues.l1Client;
97
86
 
98
87
  if (Number(await l1Client.getBlockNumber()) < expectedForkBlockNumber) {
99
88
  throw new Error('This test must be run on a fork of mainnet with the expected fork block');
@@ -106,7 +95,7 @@ export const uniswapL1L2TestSuite = (
106
95
  version = Number(await rollup.getVersion());
107
96
  ownerEthAddress = EthAddress.fromString((await l1Client.getAddresses())[0]);
108
97
 
109
- await ensureAccountContractsPublished(wallet, [ownerAddress, sponsorAddress]);
98
+ await ensureAuthRegistryPublished(wallet, ownerAddress);
110
99
 
111
100
  logger.info('Deploying DAI Portal, initializing and deploying l2 contract...');
112
101
  daiCrossChainHarness = await CrossChainTestHarness.new(
@@ -139,9 +128,9 @@ export const uniswapL1L2TestSuite = (
139
128
  client: l1Client,
140
129
  });
141
130
  // deploy l2 uniswap contract and attach to portal
142
- uniswapL2Contract = await UniswapContract.deploy(wallet, uniswapPortalAddress)
143
- .send({ from: ownerAddress })
144
- .deployed();
131
+ ({ contract: uniswapL2Contract } = await UniswapContract.deploy(wallet, uniswapPortalAddress).send({
132
+ from: ownerAddress,
133
+ }));
145
134
 
146
135
  const registryAddress = (await aztecNode.getNodeInfo()).l1ContractAddresses.registryAddress;
147
136
 
@@ -163,7 +152,6 @@ export const uniswapL1L2TestSuite = (
163
152
  await cleanup();
164
153
  });
165
154
 
166
- // docs:start:uniswap_private
167
155
  it('should uniswap trade on L1 from L2 funds privately (swaps WETH -> DAI)', async () => {
168
156
  const wethL1BeforeBalance = await wethCrossChainHarness.getL1BalanceOf(ownerEthAddress);
169
157
 
@@ -206,7 +194,7 @@ export const uniswapL1L2TestSuite = (
206
194
  logger.info('Withdrawing weth to L1 and sending message to swap to dai');
207
195
  const [secretForDepositingSwappedDai, secretHashForDepositingSwappedDai] = await generateClaimSecret();
208
196
 
209
- const l2UniswapInteractionReceipt = await uniswapL2Contract.methods
197
+ const { receipt: l2UniswapInteractionReceipt } = await uniswapL2Contract.methods
210
198
  .swap_private(
211
199
  wethCrossChainHarness.l2Token.address,
212
200
  wethCrossChainHarness.l2Bridge.address,
@@ -218,8 +206,7 @@ export const uniswapL1L2TestSuite = (
218
206
  secretHashForDepositingSwappedDai,
219
207
  ownerEthAddress,
220
208
  )
221
- .send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] })
222
- .wait();
209
+ .send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] });
223
210
 
224
211
  const swapPrivateFunction = 'swap_private(address,uint256,uint24,address,uint256,bytes32,address)';
225
212
  const swapPrivateContent = sha256ToField([
@@ -261,33 +248,43 @@ export const uniswapL1L2TestSuite = (
261
248
  // ensure that uniswap contract didn't eat the funds.
262
249
  await wethCrossChainHarness.expectPublicBalanceOnL2(uniswapL2Contract.address, 0n);
263
250
 
264
- // Since the outbox is only consumable when the block is proven, we need to set the block to be proven
265
- await cheatCodes.rollup.markAsProven(await rollup.getCheckpointNumber());
251
+ // Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch
252
+ // before we can ask the witness helper for a covering root.
253
+ const minedReceipt = await aztecNode.getTxReceipt(l2UniswapInteractionReceipt.txHash);
254
+ if (minedReceipt.epochNumber === undefined) {
255
+ throw new Error('L2 Uniswap interaction tx is not yet in an epoch');
256
+ }
257
+ await cheatCodes.rollup.advanceToEpoch(EpochNumber(minedReceipt.epochNumber + 1));
258
+ await waitForProven(aztecNode, l2UniswapInteractionReceipt, { provenTimeout: 300 });
266
259
 
267
260
  // 5. Consume L2 to L1 message by calling uniswapPortal.swap_private()
268
261
  logger.info('Execute withdraw and swap on the uniswapPortal!');
269
262
  const daiL1BalanceOfPortalBeforeSwap = await daiCrossChainHarness.getL1BalanceOf(
270
263
  daiCrossChainHarness.tokenPortalAddress,
271
264
  );
272
- const swapResult = await computeL2ToL1MembershipWitness(
273
- aztecNode,
274
- l2UniswapInteractionReceipt.blockNumber!,
275
- swapPrivateLeaf,
265
+ const swapResult = await retryUntil(
266
+ () => aztecNode.getL2ToL1MembershipWitness(minedReceipt.txHash, swapPrivateLeaf),
267
+ 'swap private l2 to l1 witness',
268
+ 60,
269
+ 1,
276
270
  );
277
- const withdrawResult = await computeL2ToL1MembershipWitness(
278
- aztecNode,
279
- l2UniswapInteractionReceipt.blockNumber!,
280
- withdrawLeaf,
271
+ const { epochNumber: epoch, numCheckpointsInEpoch } = swapResult;
272
+ const withdrawResult = await retryUntil(
273
+ () => aztecNode.getL2ToL1MembershipWitness(minedReceipt.txHash, withdrawLeaf),
274
+ 'withdraw l2 to l1 witness',
275
+ 60,
276
+ 1,
281
277
  );
282
278
 
283
- const swapPrivateL2MessageIndex = swapResult!.leafIndex;
284
- const swapPrivateSiblingPath = swapResult!.siblingPath;
279
+ const swapPrivateL2MessageIndex = swapResult.leafIndex;
280
+ const swapPrivateSiblingPath = swapResult.siblingPath;
285
281
 
286
- const withdrawL2MessageIndex = withdrawResult!.leafIndex;
287
- const withdrawSiblingPath = withdrawResult!.siblingPath;
282
+ const withdrawL2MessageIndex = withdrawResult.leafIndex;
283
+ const withdrawSiblingPath = withdrawResult.siblingPath;
288
284
 
289
285
  const withdrawMessageMetadata = {
290
- _checkpointNumber: BigInt(l2UniswapInteractionReceipt.blockNumber!),
286
+ _epoch: BigInt(epoch),
287
+ _numCheckpointsInEpoch: BigInt(withdrawResult.numCheckpointsInEpoch),
291
288
  _leafIndex: BigInt(withdrawL2MessageIndex),
292
289
  _path: withdrawSiblingPath
293
290
  .toBufferArray()
@@ -295,7 +292,8 @@ export const uniswapL1L2TestSuite = (
295
292
  };
296
293
 
297
294
  const swapPrivateMessageMetadata = {
298
- _checkpointNumber: BigInt(l2UniswapInteractionReceipt.blockNumber!),
295
+ _epoch: BigInt(epoch),
296
+ _numCheckpointsInEpoch: BigInt(numCheckpointsInEpoch),
299
297
  _leafIndex: BigInt(swapPrivateL2MessageIndex),
300
298
  _path: swapPrivateSiblingPath
301
299
  .toBufferArray()
@@ -353,10 +351,8 @@ export const uniswapL1L2TestSuite = (
353
351
  logger.info('WETH balance after swap : ', wethL2BalanceAfterSwap.toString());
354
352
  logger.info('DAI balance after swap : ', daiL2BalanceAfterSwap.toString());
355
353
  });
356
- // docs:end:uniswap_private
357
354
 
358
355
  // TODO(#7463): reenable look into this failure https://github.com/AztecProtocol/aztec-packages/actions/runs/9912612912/job/27388320150?pr=7462
359
- // // docs:start:uniswap_public
360
356
  // it('should uniswap trade on L1 from L2 funds publicly (swaps WETH -> DAI)', async () => {
361
357
  // const wethL1BeforeBalance = await wethCrossChainHarness.getL1BalanceOf(ownerEthAddress);
362
358
 
@@ -442,10 +438,10 @@ export const uniswapL1L2TestSuite = (
442
438
  // ownerEthAddress,
443
439
  // nonceForSwap,
444
440
  // );
445
- // await ownerWallet.setPublicAuthWit({ caller: sponsorAddress, action }, true).send().wait();
441
+ // await ownerWallet.setPublicAuthWit({ caller: sponsorAddress, action }, true).send();
446
442
 
447
443
  // // 4.2 Call swap_public from user2 on behalf of owner
448
- // const uniswapL2Interaction = await action.send().wait();
444
+ // const uniswapL2Interaction = await action.send();
449
445
 
450
446
  // const swapPublicContent = sha256ToField([
451
447
  // Buffer.from(
@@ -506,7 +502,7 @@ export const uniswapL1L2TestSuite = (
506
502
  // );
507
503
 
508
504
  // const withdrawMessageMetadata = {
509
- // _checkpointNumber: BigInt(uniswapL2Interaction.blockNumber!),
505
+ // _epoch: epoch,
510
506
  // _leafIndex: BigInt(withdrawL2MessageIndex),
511
507
  // _path: withdrawSiblingPath
512
508
  // .toBufferArray()
@@ -514,7 +510,7 @@ export const uniswapL1L2TestSuite = (
514
510
  // };
515
511
 
516
512
  // const swapPrivateMessageMetadata = {
517
- // _checkpointNumber: BigInt(uniswapL2Interaction.blockNumber!),
513
+ // _epoch: epoch,
518
514
  // _leafIndex: BigInt(swapPrivateL2MessageIndex),
519
515
  // _path: swapPrivateSiblingPath
520
516
  // .toBufferArray()
@@ -589,7 +585,6 @@ export const uniswapL1L2TestSuite = (
589
585
  // logger.info('WETH balance after swap : ', wethL2BalanceAfterSwap.toString());
590
586
  // logger.info('DAI balance after swap : ', daiL2BalanceAfterSwap.toString());
591
587
  // });
592
- // // docs:end:uniswap_public
593
588
 
594
589
  // Edge cases for the private flow:
595
590
  // note - tests for uniswapPortal.sol and minting asset on L2 are covered in other tests.
@@ -663,8 +658,7 @@ export const uniswapL1L2TestSuite = (
663
658
  Fr.random(),
664
659
  ownerEthAddress,
665
660
  )
666
- .send({ from: ownerAddress, authWitnesses: [transferToPublicAuthwith] })
667
- .wait(),
661
+ .send({ from: ownerAddress, authWitnesses: [transferToPublicAuthwith] }),
668
662
  ).rejects.toThrow('Assertion failed: input_asset address is not the same as seen in the bridge contract');
669
663
  });
670
664
 
@@ -689,7 +683,7 @@ export const uniswapL1L2TestSuite = (
689
683
  },
690
684
  true,
691
685
  );
692
- await validateActionInteraction.send().wait();
686
+ await validateActionInteraction.send();
693
687
 
694
688
  // No approval to call `swap` but should work even without it:
695
689
  const [_, secretHashForDepositingSwappedDai] = await generateClaimSecret();
@@ -708,8 +702,7 @@ export const uniswapL1L2TestSuite = (
708
702
  ownerEthAddress,
709
703
  Fr.ZERO, // nonce for swap -> doesn't matter
710
704
  )
711
- .send({ from: ownerAddress })
712
- .wait();
705
+ .send({ from: ownerAddress });
713
706
  // check weth balance of owner on L2 (we first bridged `wethAmountToBridge` into L2 and now withdrew it!)
714
707
  await wethCrossChainHarness.expectPublicBalanceOnL2(ownerAddress, 0n);
715
708
  });
@@ -739,7 +732,7 @@ export const uniswapL1L2TestSuite = (
739
732
  { caller: approvedUser, action },
740
733
  true,
741
734
  );
742
- await validateActionInteraction.send().wait();
735
+ await validateActionInteraction.send();
743
736
 
744
737
  await expect(action.simulate({ from: sponsorAddress })).rejects.toThrow(/unauthorized/);
745
738
  });
@@ -761,7 +754,7 @@ export const uniswapL1L2TestSuite = (
761
754
  },
762
755
  true,
763
756
  );
764
- await validateActionInteraction.send().wait();
757
+ await validateActionInteraction.send();
765
758
 
766
759
  await expect(
767
760
  uniswapL2Contract.methods
@@ -806,7 +799,7 @@ export const uniswapL1L2TestSuite = (
806
799
  logger.info('Withdrawing weth to L1 and sending message to swap to dai');
807
800
 
808
801
  const [, secretHashForDepositingSwappedDai] = await generateClaimSecret();
809
- const withdrawReceipt = await uniswapL2Contract.methods
802
+ const { receipt: withdrawReceipt } = await uniswapL2Contract.methods
810
803
  .swap_private(
811
804
  wethCrossChainHarness.l2Token.address,
812
805
  wethCrossChainHarness.l2Bridge.address,
@@ -818,8 +811,7 @@ export const uniswapL1L2TestSuite = (
818
811
  secretHashForDepositingSwappedDai,
819
812
  ownerEthAddress,
820
813
  )
821
- .send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] })
822
- .wait();
814
+ .send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] });
823
815
 
824
816
  const swapPrivateContent = sha256ToField([
825
817
  Buffer.from(
@@ -858,21 +850,41 @@ export const uniswapL1L2TestSuite = (
858
850
  chainId: new Fr(l1Client.chain.id),
859
851
  });
860
852
 
861
- const swapResult = await computeL2ToL1MembershipWitness(aztecNode, withdrawReceipt.blockNumber!, swapPrivateLeaf);
862
- const withdrawResult = await computeL2ToL1MembershipWitness(
863
- aztecNode,
864
- withdrawReceipt.blockNumber!,
865
- withdrawLeaf,
853
+ // ensure that user's funds were burnt
854
+ await wethCrossChainHarness.expectPrivateBalanceOnL2(ownerAddress, wethL2BalanceBeforeSwap - wethAmountToBridge);
855
+
856
+ // Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch
857
+ // before we can ask the witness helper for a covering root.
858
+ const minedReceipt = await aztecNode.getTxReceipt(withdrawReceipt.txHash);
859
+ if (minedReceipt.epochNumber === undefined) {
860
+ throw new Error('Withdraw tx is not yet in an epoch');
861
+ }
862
+ await cheatCodes.rollup.advanceToEpoch(EpochNumber(minedReceipt.epochNumber + 1));
863
+ await waitForProven(aztecNode, withdrawReceipt, { provenTimeout: 300 });
864
+
865
+ const swapResult = await retryUntil(
866
+ () => aztecNode.getL2ToL1MembershipWitness(minedReceipt.txHash, swapPrivateLeaf),
867
+ 'swap private l2 to l1 witness',
868
+ 60,
869
+ 1,
870
+ );
871
+ const { epochNumber: epoch, numCheckpointsInEpoch } = swapResult;
872
+ const withdrawResult = await retryUntil(
873
+ () => aztecNode.getL2ToL1MembershipWitness(minedReceipt.txHash, withdrawLeaf),
874
+ 'withdraw l2 to l1 witness',
875
+ 60,
876
+ 1,
866
877
  );
867
878
 
868
- const swapPrivateL2MessageIndex = swapResult!.leafIndex;
869
- const swapPrivateSiblingPath = swapResult!.siblingPath;
879
+ const swapPrivateL2MessageIndex = swapResult.leafIndex;
880
+ const swapPrivateSiblingPath = swapResult.siblingPath;
870
881
 
871
- const withdrawL2MessageIndex = withdrawResult!.leafIndex;
872
- const withdrawSiblingPath = withdrawResult!.siblingPath;
882
+ const withdrawL2MessageIndex = withdrawResult.leafIndex;
883
+ const withdrawSiblingPath = withdrawResult.siblingPath;
873
884
 
874
885
  const withdrawMessageMetadata = {
875
- _checkpointNumber: BigInt(withdrawReceipt.blockNumber!),
886
+ _epoch: BigInt(epoch),
887
+ _numCheckpointsInEpoch: BigInt(withdrawResult.numCheckpointsInEpoch),
876
888
  _leafIndex: BigInt(withdrawL2MessageIndex),
877
889
  _path: withdrawSiblingPath
878
890
  .toBufferArray()
@@ -880,19 +892,14 @@ export const uniswapL1L2TestSuite = (
880
892
  };
881
893
 
882
894
  const swapPrivateMessageMetadata = {
883
- _checkpointNumber: BigInt(withdrawReceipt.blockNumber!),
895
+ _epoch: BigInt(epoch),
896
+ _numCheckpointsInEpoch: BigInt(numCheckpointsInEpoch),
884
897
  _leafIndex: BigInt(swapPrivateL2MessageIndex),
885
898
  _path: swapPrivateSiblingPath
886
899
  .toBufferArray()
887
900
  .map((buf: Buffer) => `0x${buf.toString('hex')}`) as readonly `0x${string}`[],
888
901
  };
889
902
 
890
- // ensure that user's funds were burnt
891
- await wethCrossChainHarness.expectPrivateBalanceOnL2(ownerAddress, wethL2BalanceBeforeSwap - wethAmountToBridge);
892
-
893
- // Since the outbox is only consumable when the block is proven, we need to set the block to be proven
894
- await cheatCodes.rollup.markAsProven(await rollup.getCheckpointNumber());
895
-
896
903
  // On L1 call swap_public!
897
904
  logger.info('call swap_public on L1');
898
905
  const swapArgs = [
@@ -932,11 +939,11 @@ export const uniswapL1L2TestSuite = (
932
939
  },
933
940
  true,
934
941
  );
935
- await validateActionInteraction.send().wait();
942
+ await validateActionInteraction.send();
936
943
 
937
944
  // Call swap_public on L2
938
945
  const secretHashForDepositingSwappedDai = Fr.random();
939
- const withdrawReceipt = await uniswapL2Contract.methods
946
+ const { receipt: withdrawReceipt } = await uniswapL2Contract.methods
940
947
  .swap_public(
941
948
  ownerAddress,
942
949
  wethCrossChainHarness.l2Bridge.address,
@@ -950,8 +957,7 @@ export const uniswapL1L2TestSuite = (
950
957
  ownerEthAddress,
951
958
  Fr.ZERO,
952
959
  )
953
- .send({ from: ownerAddress })
954
- .wait();
960
+ .send({ from: ownerAddress });
955
961
 
956
962
  const swapPublicContent = sha256ToField([
957
963
  Buffer.from(
@@ -993,21 +999,41 @@ export const uniswapL1L2TestSuite = (
993
999
  chainId: new Fr(l1Client.chain.id),
994
1000
  });
995
1001
 
996
- const swapResult = await computeL2ToL1MembershipWitness(aztecNode, withdrawReceipt.blockNumber!, swapPublicLeaf);
997
- const withdrawResult = await computeL2ToL1MembershipWitness(
998
- aztecNode,
999
- withdrawReceipt.blockNumber!,
1000
- withdrawLeaf,
1002
+ // check weth balance of owner on L2 (we first bridged `wethAmountToBridge` into L2 and now withdrew it!)
1003
+ await wethCrossChainHarness.expectPublicBalanceOnL2(ownerAddress, 0n);
1004
+
1005
+ // Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch
1006
+ // before we can ask the witness helper for a covering root.
1007
+ const minedReceipt = await aztecNode.getTxReceipt(withdrawReceipt.txHash);
1008
+ if (minedReceipt.epochNumber === undefined) {
1009
+ throw new Error('Withdraw tx is not yet in an epoch');
1010
+ }
1011
+ await cheatCodes.rollup.advanceToEpoch(EpochNumber(minedReceipt.epochNumber + 1));
1012
+ await waitForProven(aztecNode, withdrawReceipt, { provenTimeout: 300 });
1013
+
1014
+ const swapResult = await retryUntil(
1015
+ () => aztecNode.getL2ToL1MembershipWitness(minedReceipt.txHash, swapPublicLeaf),
1016
+ 'swap public l2 to l1 witness',
1017
+ 60,
1018
+ 1,
1019
+ );
1020
+ const { epochNumber: epoch, numCheckpointsInEpoch } = swapResult;
1021
+ const withdrawResult = await retryUntil(
1022
+ () => aztecNode.getL2ToL1MembershipWitness(minedReceipt.txHash, withdrawLeaf),
1023
+ 'withdraw l2 to l1 witness',
1024
+ 60,
1025
+ 1,
1001
1026
  );
1002
1027
 
1003
- const swapPublicL2MessageIndex = swapResult!.leafIndex;
1004
- const swapPublicSiblingPath = swapResult!.siblingPath;
1028
+ const swapPublicL2MessageIndex = swapResult.leafIndex;
1029
+ const swapPublicSiblingPath = swapResult.siblingPath;
1005
1030
 
1006
- const withdrawL2MessageIndex = withdrawResult!.leafIndex;
1007
- const withdrawSiblingPath = withdrawResult!.siblingPath;
1031
+ const withdrawL2MessageIndex = withdrawResult.leafIndex;
1032
+ const withdrawSiblingPath = withdrawResult.siblingPath;
1008
1033
 
1009
1034
  const withdrawMessageMetadata = {
1010
- _checkpointNumber: BigInt(withdrawReceipt.blockNumber!),
1035
+ _epoch: BigInt(epoch),
1036
+ _numCheckpointsInEpoch: BigInt(withdrawResult.numCheckpointsInEpoch),
1011
1037
  _leafIndex: BigInt(withdrawL2MessageIndex),
1012
1038
  _path: withdrawSiblingPath
1013
1039
  .toBufferArray()
@@ -1015,19 +1041,14 @@ export const uniswapL1L2TestSuite = (
1015
1041
  };
1016
1042
 
1017
1043
  const swapPublicMessageMetadata = {
1018
- _checkpointNumber: BigInt(withdrawReceipt.blockNumber!),
1044
+ _epoch: BigInt(epoch),
1045
+ _numCheckpointsInEpoch: BigInt(numCheckpointsInEpoch),
1019
1046
  _leafIndex: BigInt(swapPublicL2MessageIndex),
1020
1047
  _path: swapPublicSiblingPath
1021
1048
  .toBufferArray()
1022
1049
  .map((buf: Buffer) => `0x${buf.toString('hex')}`) as readonly `0x${string}`[],
1023
1050
  };
1024
1051
 
1025
- // check weth balance of owner on L2 (we first bridged `wethAmountToBridge` into L2 and now withdrew it!)
1026
- await wethCrossChainHarness.expectPublicBalanceOnL2(ownerAddress, 0n);
1027
-
1028
- // Since the outbox is only consumable when the block is proven, we need to set the block to be proven
1029
- await cheatCodes.rollup.markAsProven(await rollup.getCheckpointNumber());
1030
-
1031
1052
  // Call swap_private on L1
1032
1053
  logger.info('Execute withdraw and swap on the uniswapPortal!');
1033
1054
 
@@ -0,0 +1,23 @@
1
+ import type { Fr } from '@aztec/aztec.js/fields';
2
+ import type { AztecNode } from '@aztec/aztec.js/node';
3
+ import { retryUntil } from '@aztec/foundation/retry';
4
+
5
+ /**
6
+ * Waits until the archiver has seen the L1 to L2 message and indexed it. Unlike
7
+ * {@link waitForL1ToL2MessageReady} from `@aztec/aztec.js/messaging`, this does not
8
+ * require the L2 chain to have advanced to the message's checkpoint — it only confirms
9
+ * the message has been picked up from L1. Use this in tests that explicitly produce L2
10
+ * blocks afterwards to make the message consumable.
11
+ */
12
+ export function waitForL1ToL2MessageSeen(
13
+ node: Pick<AztecNode, 'getL1ToL2MessageCheckpoint'>,
14
+ l1ToL2MessageHash: Fr,
15
+ opts: { timeoutSeconds: number },
16
+ ) {
17
+ return retryUntil(
18
+ async () => (await node.getL1ToL2MessageCheckpoint(l1ToL2MessageHash)) !== undefined,
19
+ `L1 to L2 message ${l1ToL2MessageHash.toString()} seen`,
20
+ opts.timeoutSeconds,
21
+ 0.25,
22
+ );
23
+ }
@@ -2,11 +2,12 @@
2
2
  import { AztecAddress } from '@aztec/aztec.js/addresses';
3
3
  import { Fr } from '@aztec/aztec.js/fields';
4
4
  import { CheatCodes } from '@aztec/aztec/testing';
5
- import type { RollupContract } from '@aztec/ethereum';
5
+ import type { RollupContract } from '@aztec/ethereum/contracts';
6
6
  import { SlotNumber } from '@aztec/foundation/branded-types';
7
- import { pedersenHash } from '@aztec/foundation/crypto';
7
+ import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
8
8
  import type { TestDateProvider } from '@aztec/foundation/timer';
9
9
  import type { LendingContract } from '@aztec/noir-contracts.js/Lending';
10
+ import type { AztecNode, AztecNodeDebug } from '@aztec/stdlib/interfaces/client';
10
11
 
11
12
  import type { TokenSimulator } from './token_simulator.js';
12
13
 
@@ -29,7 +30,7 @@ export class LendingAccount {
29
30
  * @returns Key in public space
30
31
  */
31
32
  public key() {
32
- return pedersenHash([this.address, this.secret]);
33
+ return poseidon2Hash([this.address, this.secret]);
33
34
  }
34
35
  }
35
36
 
@@ -92,30 +93,45 @@ export class LendingSimulator {
92
93
  public stableCoin: TokenSimulator,
93
94
  ) {}
94
95
 
95
- async prepare() {
96
+ prepare() {
96
97
  this.accumulator = BASE;
97
- const slot = await this.rollup.getSlotAt(BigInt(await this.cc.eth.timestamp()) + BigInt(this.ethereumSlotDuration));
98
- this.time = Number(await this.rollup.getTimestampForSlot(slot));
98
+ this.time = 0;
99
99
  }
100
100
 
101
- async progressSlots(diff: number, dateProvider?: TestDateProvider) {
101
+ /**
102
+ * Advances the simulator's accumulator and clock to match a block timestamp observed on chain.
103
+ * Call this BEFORE applying any accumulator-sensitive mutation (borrow/repay) so the mutation
104
+ * sees the same accumulator as the contract did during execution.
105
+ */
106
+ observeBlockTimestamp(ts: number) {
107
+ const diff = ts - this.time;
108
+ if (diff > 0) {
109
+ this.accumulator = muldivDown(this.accumulator, computeMultiplier(this.rate, BigInt(diff)), BASE);
110
+ }
111
+ this.time = ts;
112
+ }
113
+
114
+ async progressSlots(diff: number, _dateProvider?: TestDateProvider, node?: AztecNode & AztecNodeDebug) {
102
115
  if (diff <= 1) {
103
116
  return;
104
117
  }
105
118
 
106
- const slot = await this.rollup.getSlotAt(BigInt(await this.cc.eth.timestamp()));
119
+ const slot = await this.rollup.getSlotAt(BigInt(await this.cc.eth.lastBlockTimestamp()));
107
120
  const targetSlot = SlotNumber(slot + diff);
108
121
  const ts = Number(await this.rollup.getTimestampForSlot(targetSlot));
109
- const timeDiff = ts - this.time;
110
- this.time = ts;
111
122
 
112
- // Mine ethereum blocks such that the next block will be in a new slot
113
- await this.cc.eth.warp(this.time - this.ethereumSlotDuration);
114
- if (dateProvider) {
115
- dateProvider.setTime(this.time * 1000);
123
+ // Queue-aware warp under AutomineSequencer: atomic warp + mineBlock that advances L2 time to the
124
+ // target slot. The cheat code routes through the AutomineSequencer queue when one is installed,
125
+ // and otherwise falls back to a manual warp + mineBlock loop.
126
+ if (node) {
127
+ await this.cc.warpL2TimeAtLeastTo(node, ts);
128
+ } else {
129
+ await this.cc.eth.warp(ts - this.ethereumSlotDuration);
116
130
  }
131
+
132
+ // Mark the latest checkpoint as proven so the rollup does not reorg pending checkpoints when
133
+ // time jumps far enough forward to cross an unproven epoch boundary.
117
134
  await this.cc.rollup.markAsProven(await this.rollup.getCheckpointNumber());
118
- this.accumulator = muldivDown(this.accumulator, computeMultiplier(this.rate, BigInt(timeDiff)), BASE);
119
135
  }
120
136
 
121
137
  depositPrivate(from: AztecAddress, onBehalfOf: Fr, amount: bigint) {
@@ -186,14 +202,16 @@ export class LendingSimulator {
186
202
 
187
203
  expect(this.borrowed).toEqual(this.stableCoin.totalSupply - this.mintedOutside);
188
204
 
189
- const asset = await this.lendingContract.methods.get_asset(0).simulate({ from: this.account.address });
205
+ const { result: asset } = await this.lendingContract.methods.get_asset(0).simulate({ from: this.account.address });
190
206
 
191
207
  const interestAccumulator = asset['interest_accumulator'];
192
208
  expect(interestAccumulator).toEqual(this.accumulator);
193
209
  expect(asset['last_updated_ts']).toEqual(BigInt(this.time));
194
210
 
195
- for (const key of [this.account.address, AztecAddress.fromField(await this.account.key())]) {
196
- const privatePos = await this.lendingContract.methods.get_position(key).simulate({ from: this.account.address });
211
+ for (const key of [this.account.address, AztecAddress.fromFieldUnsafe(await this.account.key())]) {
212
+ const { result: privatePos } = await this.lendingContract.methods
213
+ .get_position(key)
214
+ .simulate({ from: this.account.address });
197
215
  expect(new Fr(privatePos['collateral'])).toEqual(this.collateral[key.toString()] ?? Fr.ZERO);
198
216
  expect(new Fr(privatePos['static_debt'])).toEqual(this.staticDebt[key.toString()] ?? Fr.ZERO);
199
217
  expect(privatePos['debt']).toEqual(