@aztec/end-to-end 0.0.1-commit.5476d83 → 0.0.1-commit.5914bae

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 (265) hide show
  1. package/README.md +27 -0
  2. package/dest/bench/client_flows/benchmark.d.ts +3 -2
  3. package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
  4. package/dest/bench/client_flows/benchmark.js +21 -1
  5. package/dest/bench/client_flows/client_flows_benchmark.d.ts +15 -16
  6. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  7. package/dest/bench/client_flows/client_flows_benchmark.js +138 -144
  8. package/dest/bench/client_flows/config.d.ts +2 -2
  9. package/dest/bench/client_flows/config.d.ts.map +1 -1
  10. package/dest/bench/client_flows/config.js +18 -0
  11. package/dest/bench/client_flows/data_extractor.js +3 -1
  12. package/dest/bench/utils.d.ts +9 -8
  13. package/dest/bench/utils.d.ts.map +1 -1
  14. package/dest/bench/utils.js +31 -19
  15. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +11 -9
  16. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  17. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +108 -114
  18. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +20 -14
  19. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
  20. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +92 -71
  21. package/dest/e2e_deploy_contract/deploy_test.d.ts +5 -4
  22. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  23. package/dest/e2e_deploy_contract/deploy_test.js +18 -13
  24. package/dest/e2e_epochs/epochs_test.d.ts +27 -15
  25. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  26. package/dest/e2e_epochs/epochs_test.js +104 -52
  27. package/dest/e2e_fees/bridging_race.notest.js +4 -6
  28. package/dest/e2e_fees/fees_test.d.ts +21 -17
  29. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  30. package/dest/e2e_fees/fees_test.js +137 -145
  31. package/dest/e2e_l1_publisher/write_json.d.ts +4 -3
  32. package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
  33. package/dest/e2e_l1_publisher/write_json.js +14 -16
  34. package/dest/e2e_multi_validator/utils.js +1 -1
  35. package/dest/e2e_nested_contract/nested_contract_test.d.ts +6 -9
  36. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  37. package/dest/e2e_nested_contract/nested_contract_test.js +30 -40
  38. package/dest/e2e_p2p/inactivity_slash_test.d.ts +4 -4
  39. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
  40. package/dest/e2e_p2p/inactivity_slash_test.js +7 -9
  41. package/dest/e2e_p2p/p2p_network.d.ts +16 -13
  42. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  43. package/dest/e2e_p2p/p2p_network.js +140 -114
  44. package/dest/e2e_p2p/reqresp/utils.d.ts +22 -0
  45. package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -0
  46. package/dest/e2e_p2p/reqresp/utils.js +177 -0
  47. package/dest/e2e_p2p/shared.d.ts +39 -7
  48. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  49. package/dest/e2e_p2p/shared.js +73 -22
  50. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
  51. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
  52. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
  53. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
  54. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
  55. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
  56. package/dest/e2e_token_contract/token_contract_test.d.ts +19 -10
  57. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  58. package/dest/e2e_token_contract/token_contract_test.js +100 -92
  59. package/dest/fixtures/authwit_proxy.d.ts +15 -0
  60. package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
  61. package/dest/fixtures/authwit_proxy.js +34 -0
  62. package/dest/fixtures/e2e_prover_test.d.ts +13 -21
  63. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  64. package/dest/fixtures/e2e_prover_test.js +114 -133
  65. package/dest/fixtures/fixtures.d.ts +6 -3
  66. package/dest/fixtures/fixtures.d.ts.map +1 -1
  67. package/dest/fixtures/fixtures.js +8 -3
  68. package/dest/fixtures/get_acvm_config.js +1 -1
  69. package/dest/fixtures/ha_setup.d.ts +71 -0
  70. package/dest/fixtures/ha_setup.d.ts.map +1 -0
  71. package/dest/fixtures/ha_setup.js +116 -0
  72. package/dest/fixtures/index.d.ts +2 -1
  73. package/dest/fixtures/index.d.ts.map +1 -1
  74. package/dest/fixtures/index.js +1 -0
  75. package/dest/fixtures/l1_to_l2_messaging.d.ts +4 -3
  76. package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
  77. package/dest/fixtures/l1_to_l2_messaging.js +2 -2
  78. package/dest/fixtures/setup.d.ts +238 -0
  79. package/dest/fixtures/setup.d.ts.map +1 -0
  80. package/dest/fixtures/setup.js +609 -0
  81. package/dest/fixtures/setup_p2p_test.d.ts +16 -9
  82. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  83. package/dest/fixtures/setup_p2p_test.js +43 -32
  84. package/dest/fixtures/token_utils.d.ts +2 -2
  85. package/dest/fixtures/token_utils.d.ts.map +1 -1
  86. package/dest/fixtures/token_utils.js +12 -8
  87. package/dest/fixtures/utils.d.ts +5 -637
  88. package/dest/fixtures/utils.d.ts.map +1 -1
  89. package/dest/fixtures/utils.js +4 -647
  90. package/dest/fixtures/web3signer.js +1 -1
  91. package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
  92. package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
  93. package/dest/fixtures/with_telemetry_utils.js +2 -2
  94. package/dest/forward-compatibility/wallet_rpc_client.d.ts +7 -0
  95. package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
  96. package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
  97. package/dest/forward-compatibility/wallet_service.d.ts +3 -0
  98. package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
  99. package/dest/forward-compatibility/wallet_service.js +109 -0
  100. package/dest/legacy-jest-resolver.d.cts +3 -0
  101. package/dest/legacy-jest-resolver.d.cts.map +1 -0
  102. package/dest/quality_of_service/grafana_client.d.ts +41 -0
  103. package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
  104. package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
  105. package/dest/quality_of_service/prometheus_client.d.ts +38 -0
  106. package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
  107. package/dest/quality_of_service/prometheus_client.js +67 -0
  108. package/dest/shared/cross_chain_test_harness.d.ts +18 -6
  109. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  110. package/dest/shared/cross_chain_test_harness.js +27 -27
  111. package/dest/shared/gas_portal_test_harness.d.ts +12 -2
  112. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  113. package/dest/shared/gas_portal_test_harness.js +3 -3
  114. package/dest/shared/index.d.ts +3 -2
  115. package/dest/shared/index.d.ts.map +1 -1
  116. package/dest/shared/index.js +1 -0
  117. package/dest/shared/mock_state_view.d.ts +86 -0
  118. package/dest/shared/mock_state_view.d.ts.map +1 -0
  119. package/dest/shared/mock_state_view.js +186 -0
  120. package/dest/shared/submit-transactions.d.ts +4 -4
  121. package/dest/shared/submit-transactions.d.ts.map +1 -1
  122. package/dest/shared/submit-transactions.js +9 -11
  123. package/dest/shared/uniswap_l1_l2.d.ts +3 -27
  124. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  125. package/dest/shared/uniswap_l1_l2.js +58 -39
  126. package/dest/simulators/lending_simulator.d.ts +6 -2
  127. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  128. package/dest/simulators/lending_simulator.js +6 -6
  129. package/dest/simulators/token_simulator.d.ts +1 -1
  130. package/dest/simulators/token_simulator.d.ts.map +1 -1
  131. package/dest/simulators/token_simulator.js +3 -24
  132. package/dest/spartan/setup_test_wallets.d.ts +15 -5
  133. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  134. package/dest/spartan/setup_test_wallets.js +113 -42
  135. package/dest/spartan/tx_metrics.d.ts +88 -0
  136. package/dest/spartan/tx_metrics.d.ts.map +1 -0
  137. package/dest/spartan/tx_metrics.js +422 -0
  138. package/dest/spartan/utils/bot.d.ts +28 -0
  139. package/dest/spartan/utils/bot.d.ts.map +1 -0
  140. package/dest/spartan/utils/bot.js +142 -0
  141. package/dest/spartan/utils/chaos.d.ts +79 -0
  142. package/dest/spartan/utils/chaos.d.ts.map +1 -0
  143. package/dest/spartan/utils/chaos.js +142 -0
  144. package/dest/spartan/utils/clients.d.ts +39 -0
  145. package/dest/spartan/utils/clients.d.ts.map +1 -0
  146. package/dest/spartan/utils/clients.js +90 -0
  147. package/dest/spartan/utils/config.d.ts +39 -0
  148. package/dest/spartan/utils/config.d.ts.map +1 -0
  149. package/dest/spartan/utils/config.js +21 -0
  150. package/dest/spartan/utils/health.d.ts +63 -0
  151. package/dest/spartan/utils/health.d.ts.map +1 -0
  152. package/dest/spartan/utils/health.js +202 -0
  153. package/dest/spartan/utils/helm.d.ts +15 -0
  154. package/dest/spartan/utils/helm.d.ts.map +1 -0
  155. package/dest/spartan/utils/helm.js +47 -0
  156. package/dest/spartan/utils/index.d.ts +10 -0
  157. package/dest/spartan/utils/index.d.ts.map +1 -0
  158. package/dest/spartan/utils/index.js +20 -0
  159. package/dest/spartan/utils/k8s.d.ts +128 -0
  160. package/dest/spartan/utils/k8s.d.ts.map +1 -0
  161. package/dest/spartan/utils/k8s.js +381 -0
  162. package/dest/spartan/utils/nodes.d.ts +41 -0
  163. package/dest/spartan/utils/nodes.d.ts.map +1 -0
  164. package/dest/spartan/utils/nodes.js +461 -0
  165. package/dest/spartan/utils/scripts.d.ts +30 -0
  166. package/dest/spartan/utils/scripts.d.ts.map +1 -0
  167. package/dest/spartan/utils/scripts.js +81 -0
  168. package/dest/spartan/utils.d.ts +2 -220
  169. package/dest/spartan/utils.d.ts.map +1 -1
  170. package/dest/spartan/utils.js +1 -782
  171. package/dest/test-wallet/test_wallet.d.ts +84 -0
  172. package/dest/test-wallet/test_wallet.d.ts.map +1 -0
  173. package/dest/test-wallet/test_wallet.js +249 -0
  174. package/dest/test-wallet/utils.d.ts +41 -0
  175. package/dest/test-wallet/utils.d.ts.map +1 -0
  176. package/dest/test-wallet/utils.js +71 -0
  177. package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
  178. package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
  179. package/dest/test-wallet/wallet_worker_script.js +48 -0
  180. package/dest/test-wallet/worker_wallet.d.ts +52 -0
  181. package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
  182. package/dest/test-wallet/worker_wallet.js +151 -0
  183. package/dest/test-wallet/worker_wallet_schema.d.ts +274 -0
  184. package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
  185. package/dest/test-wallet/worker_wallet_schema.js +10 -0
  186. package/package.json +47 -41
  187. package/src/bench/client_flows/benchmark.ts +24 -2
  188. package/src/bench/client_flows/client_flows_benchmark.ts +157 -216
  189. package/src/bench/client_flows/config.ts +9 -1
  190. package/src/bench/client_flows/data_extractor.ts +1 -1
  191. package/src/bench/utils.ts +36 -21
  192. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +123 -151
  193. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +140 -126
  194. package/src/e2e_deploy_contract/deploy_test.ts +22 -15
  195. package/src/e2e_epochs/epochs_test.ts +172 -111
  196. package/src/e2e_fees/bridging_race.notest.ts +5 -11
  197. package/src/e2e_fees/fees_test.ts +178 -228
  198. package/src/e2e_l1_publisher/write_json.ts +16 -16
  199. package/src/e2e_multi_validator/utils.ts +1 -1
  200. package/src/e2e_nested_contract/nested_contract_test.ts +35 -56
  201. package/src/e2e_p2p/inactivity_slash_test.ts +8 -10
  202. package/src/e2e_p2p/p2p_network.ts +203 -180
  203. package/src/e2e_p2p/reqresp/utils.ts +235 -0
  204. package/src/e2e_p2p/shared.ts +129 -29
  205. package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
  206. package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
  207. package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
  208. package/src/e2e_token_contract/token_contract_test.ts +121 -119
  209. package/src/fixtures/authwit_proxy.ts +54 -0
  210. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  211. package/src/fixtures/e2e_prover_test.ts +136 -177
  212. package/src/fixtures/fixtures.ts +12 -5
  213. package/src/fixtures/get_acvm_config.ts +1 -1
  214. package/src/fixtures/ha_setup.ts +186 -0
  215. package/src/fixtures/index.ts +1 -0
  216. package/src/fixtures/l1_to_l2_messaging.ts +4 -2
  217. package/src/fixtures/setup.ts +905 -0
  218. package/src/fixtures/setup_p2p_test.ts +43 -47
  219. package/src/fixtures/token_utils.ts +10 -6
  220. package/src/fixtures/utils.ts +27 -966
  221. package/src/fixtures/web3signer.ts +1 -1
  222. package/src/fixtures/with_telemetry_utils.ts +2 -2
  223. package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
  224. package/src/forward-compatibility/wallet_service.ts +104 -0
  225. package/src/guides/up_quick_start.sh +3 -3
  226. package/src/legacy-jest-resolver.cjs +135 -0
  227. package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
  228. package/src/quality_of_service/prometheus_client.ts +113 -0
  229. package/src/shared/cross_chain_test_harness.ts +30 -43
  230. package/src/shared/gas_portal_test_harness.ts +3 -3
  231. package/src/shared/index.ts +2 -1
  232. package/src/shared/mock_state_view.ts +188 -0
  233. package/src/shared/submit-transactions.ts +14 -16
  234. package/src/shared/uniswap_l1_l2.ts +86 -102
  235. package/src/simulators/lending_simulator.ts +11 -7
  236. package/src/simulators/token_simulator.ts +6 -30
  237. package/src/spartan/DEVELOP.md +7 -0
  238. package/src/spartan/setup_test_wallets.ts +168 -27
  239. package/src/spartan/tx_metrics.ts +376 -0
  240. package/src/spartan/utils/bot.ts +188 -0
  241. package/src/spartan/utils/chaos.ts +253 -0
  242. package/src/spartan/utils/clients.ts +100 -0
  243. package/src/spartan/utils/config.ts +27 -0
  244. package/src/spartan/utils/health.ts +255 -0
  245. package/src/spartan/utils/helm.ts +84 -0
  246. package/src/spartan/utils/index.ts +68 -0
  247. package/src/spartan/utils/k8s.ts +535 -0
  248. package/src/spartan/utils/nodes.ts +538 -0
  249. package/src/spartan/utils/scripts.ts +99 -0
  250. package/src/spartan/utils.ts +1 -982
  251. package/src/test-wallet/test_wallet.ts +351 -0
  252. package/src/test-wallet/utils.ts +112 -0
  253. package/src/test-wallet/wallet_worker_script.ts +60 -0
  254. package/src/test-wallet/worker_wallet.ts +214 -0
  255. package/src/test-wallet/worker_wallet_schema.ts +13 -0
  256. package/dest/fixtures/setup_l1_contracts.d.ts +0 -477
  257. package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
  258. package/dest/fixtures/setup_l1_contracts.js +0 -17
  259. package/dest/fixtures/snapshot_manager.d.ts +0 -95
  260. package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
  261. package/dest/fixtures/snapshot_manager.js +0 -505
  262. package/dest/quality_of_service/alert_checker.d.ts +0 -41
  263. package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
  264. package/src/fixtures/setup_l1_contracts.ts +0 -26
  265. package/src/fixtures/snapshot_manager.ts +0 -665
@@ -0,0 +1,188 @@
1
+ import { EthAddress } from '@aztec/aztec.js/addresses';
2
+ import { type Logger, createLogger } from '@aztec/aztec.js/log';
3
+ import type { EthCheatCodes } from '@aztec/aztec/testing';
4
+ import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
5
+
6
+ import { getContract } from 'viem';
7
+
8
+ /**
9
+ * Mock StateView contract for testing the Uniswap price oracle.
10
+ *
11
+ * Wraps a compiled Solidity contract that mimics the Uniswap V4 StateView's getSlot0 function.
12
+ * The mock allows setting return values dynamically for testing different price scenarios.
13
+ *
14
+ * Solidity source:
15
+ * ```solidity
16
+ * // SPDX-License-Identifier: Apache-2.0
17
+ * pragma solidity >=0.8.27;
18
+ *
19
+ * contract MockStateView {
20
+ * uint160 public sqrtPriceX96;
21
+ * int24 public tick;
22
+ * uint24 public protocolFee;
23
+ * uint24 public lpFee;
24
+ *
25
+ * function setReturnValues(
26
+ * uint160 _sqrtPriceX96,
27
+ * int24 _tick,
28
+ * uint24 _protocolFee,
29
+ * uint24 _lpFee
30
+ * ) external {
31
+ * sqrtPriceX96 = _sqrtPriceX96;
32
+ * tick = _tick;
33
+ * protocolFee = _protocolFee;
34
+ * lpFee = _lpFee;
35
+ * }
36
+ *
37
+ * function getSlot0(bytes32 poolId) external view returns (uint160, int24, uint24, uint24) {
38
+ * return (sqrtPriceX96, tick, protocolFee, lpFee);
39
+ * }
40
+ * }
41
+ * ```
42
+ */
43
+ export class MockStateView {
44
+ private static readonly BYTECODE: `0x${string}` =
45
+ '0x608060405234801561000f575f5ffd5b5060043610610060575f3560e01c80633eaf5d9f14610064578063704ce43e146100825780638db791d2146100a0578063b0e21e8a146100be578063b52e4bdd146100dc578063c815641c146100f8575b5f5ffd5b61006c61012b565b60405161007991906102ab565b60405180910390f35b61008a61013d565b60405161009791906102e1565b60405180910390f35b6100a8610151565b6040516100b59190610328565b60405180910390f35b6100c6610175565b6040516100d391906102e1565b60405180910390f35b6100f660048036038101906100f191906103c3565b610189565b005b610112600480360381019061010d919061045a565b61022b565b6040516101229493929190610485565b60405180910390f35b5f60149054906101000a900460020b81565b5f601a9054906101000a900462ffffff1681565b5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60179054906101000a900462ffffff1681565b835f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550825f60146101000a81548162ffffff021916908360020b62ffffff160217905550815f60176101000a81548162ffffff021916908362ffffff160217905550805f601a6101000a81548162ffffff021916908362ffffff16021790555050505050565b5f5f5f5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff165f60149054906101000a900460020b5f60179054906101000a900462ffffff165f601a9054906101000a900462ffffff1693509350935093509193509193565b5f8160020b9050919050565b6102a581610290565b82525050565b5f6020820190506102be5f83018461029c565b92915050565b5f62ffffff82169050919050565b6102db816102c4565b82525050565b5f6020820190506102f45f8301846102d2565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b610322816102fa565b82525050565b5f60208201905061033b5f830184610319565b92915050565b5f5ffd5b61034e816102fa565b8114610358575f5ffd5b50565b5f8135905061036981610345565b92915050565b61037881610290565b8114610382575f5ffd5b50565b5f813590506103938161036f565b92915050565b6103a2816102c4565b81146103ac575f5ffd5b50565b5f813590506103bd81610399565b92915050565b5f5f5f5f608085870312156103db576103da610341565b5b5f6103e88782880161035b565b94505060206103f987828801610385565b935050604061040a878288016103af565b925050606061041b878288016103af565b91505092959194509250565b5f819050919050565b61043981610427565b8114610443575f5ffd5b50565b5f8135905061045481610430565b92915050565b5f6020828403121561046f5761046e610341565b5b5f61047c84828501610446565b91505092915050565b5f6080820190506104985f830187610319565b6104a5602083018661029c565b6104b260408301856102d2565b6104bf60608301846102d2565b9594505050505056fea2646970667358221220f8b1bfff284535bc078368ed34bd5e78981644845f3c9c1f5a4b8448c976805464736f6c634300081f0033';
46
+ private static readonly ABI = [
47
+ {
48
+ type: 'function',
49
+ name: 'setReturnValues',
50
+ inputs: [
51
+ { name: '_sqrtPriceX96', type: 'uint160' },
52
+ { name: '_tick', type: 'int24' },
53
+ { name: '_protocolFee', type: 'uint24' },
54
+ { name: '_lpFee', type: 'uint24' },
55
+ ],
56
+ outputs: [],
57
+ stateMutability: 'nonpayable',
58
+ },
59
+ {
60
+ inputs: [
61
+ {
62
+ internalType: 'bytes32',
63
+ name: 'poolId',
64
+ type: 'bytes32',
65
+ },
66
+ ],
67
+ name: 'getSlot0',
68
+ outputs: [
69
+ {
70
+ internalType: 'uint160',
71
+ name: '',
72
+ type: 'uint160',
73
+ },
74
+ {
75
+ internalType: 'int24',
76
+ name: '',
77
+ type: 'int24',
78
+ },
79
+ {
80
+ internalType: 'uint24',
81
+ name: '',
82
+ type: 'uint24',
83
+ },
84
+ {
85
+ internalType: 'uint24',
86
+ name: '',
87
+ type: 'uint24',
88
+ },
89
+ ],
90
+ stateMutability: 'view',
91
+ type: 'function',
92
+ },
93
+ ] as const;
94
+
95
+ private constructor(
96
+ private readonly address: EthAddress,
97
+ private readonly walletClient: ExtendedViemWalletClient,
98
+ private readonly log: Logger = createLogger('mock-state-view'),
99
+ ) {}
100
+
101
+ /**
102
+ * Deploys the mock StateView contract at the specified address using etch.
103
+ * @param ethCheatCodes - Cheat codes for etching bytecode
104
+ * @param walletClient - Wallet client for sending transactions
105
+ * @param address - Address to deploy the mock at (typically the real StateView address)
106
+ */
107
+ static async deploy(
108
+ ethCheatCodes: EthCheatCodes,
109
+ walletClient: ExtendedViemWalletClient,
110
+ address: EthAddress,
111
+ ): Promise<MockStateView> {
112
+ await ethCheatCodes.etch(address, MockStateView.BYTECODE);
113
+ return new MockStateView(address, walletClient);
114
+ }
115
+
116
+ /**
117
+ * Sets the price using the ethPerFeeAssetE12 format (same as rollup contract).
118
+ * Computes the corresponding sqrtPriceX96 internally.
119
+ *
120
+ * Math (from fee_asset_price_oracle.ts):
121
+ * ethPerFeeAssetE12 = 1e12 * 2^192 / sqrtPriceX96^2
122
+ *
123
+ * Inverted:
124
+ * sqrtPriceX96^2 = 1e12 * 2^192 / ethPerFeeAssetE12
125
+ * sqrtPriceX96 = sqrt(1e12 * 2^192 / ethPerFeeAssetE12)
126
+ *
127
+ * @param ethPerFeeAssetE12 - The price in ETH per fee asset, scaled by 1e12
128
+ */
129
+ async setEthPerFeeAsset(ethPerFeeAssetE12: bigint) {
130
+ const sqrtPriceX96 = this.ethPerFeeAssetE12ToSqrtPriceX96(ethPerFeeAssetE12);
131
+ return await this.setSqrtPriceX96(sqrtPriceX96);
132
+ }
133
+
134
+ /**
135
+ * Sets the sqrtPriceX96 value directly (Uniswap's price encoding).
136
+ * @param sqrtPriceX96 - The sqrtPriceX96 value
137
+ * @param tick - The tick value (default 10)
138
+ * @param protocolFee - The protocol fee (default 0)
139
+ * @param lpFee - The LP fee (default 500)
140
+ */
141
+ async setSqrtPriceX96(sqrtPriceX96: bigint, tick: number = 10, protocolFee: number = 0, lpFee: number = 500) {
142
+ const contract = getContract({
143
+ address: this.address.toString() as `0x${string}`,
144
+ abi: MockStateView.ABI,
145
+ client: this.walletClient,
146
+ });
147
+
148
+ const hash = await contract.write.setReturnValues([sqrtPriceX96, tick, protocolFee, lpFee]);
149
+ this.log.info(`Set sqrtPriceX96 to ${sqrtPriceX96}`);
150
+ return await this.walletClient.waitForTransactionReceipt({ hash });
151
+ }
152
+
153
+ /**
154
+ * Converts ethPerFeeAssetE12 to sqrtPriceX96 (inverse of sqrtPriceX96ToEthPerFeeAssetE12).
155
+ *
156
+ * Math:
157
+ * sqrtPriceX96 = sqrt(1e12 * 2^192 / ethPerFeeAssetE12)
158
+ */
159
+ ethPerFeeAssetE12ToSqrtPriceX96(ethPerFeeAssetE12: bigint): bigint {
160
+ if (ethPerFeeAssetE12 === 0n) {
161
+ throw new Error('Cannot convert zero ethPerFeeAssetE12');
162
+ }
163
+ const Q192 = 2n ** 192n;
164
+ const sqrtPriceSquared = (10n ** 12n * Q192) / ethPerFeeAssetE12;
165
+ return this.bigintSqrt(sqrtPriceSquared);
166
+ }
167
+
168
+ /** Integer square root using Newton's method */
169
+ bigintSqrt(n: bigint): bigint {
170
+ if (n < 0n) {
171
+ throw new Error('Cannot compute sqrt of negative number');
172
+ }
173
+ if (n === 0n) {
174
+ return 0n;
175
+ }
176
+ let x = n;
177
+ let y = (x + 1n) / 2n;
178
+ while (y < x) {
179
+ x = y;
180
+ y = (x + n / x) / 2n;
181
+ }
182
+ return x;
183
+ }
184
+ }
185
+
186
+ export function diffInBps(a: bigint, b: bigint): bigint {
187
+ return ((a - b) * 10000n) / b;
188
+ }
@@ -1,10 +1,11 @@
1
1
  import { AztecAddress } from '@aztec/aztec.js/addresses';
2
- import type { SentTx } from '@aztec/aztec.js/contracts';
2
+ import { NO_WAIT } from '@aztec/aztec.js/contracts';
3
3
  import { Fr, GrumpkinScalar } from '@aztec/aztec.js/fields';
4
4
  import type { Logger } from '@aztec/aztec.js/log';
5
- import { TxStatus } from '@aztec/aztec.js/tx';
5
+ import { TxHash, type TxReceipt, TxStatus } from '@aztec/aztec.js/tx';
6
6
  import { times } from '@aztec/foundation/collection';
7
- import type { TestWallet } from '@aztec/test-wallet/server';
7
+
8
+ import type { TestWallet } from '../test-wallet/test_wallet.js';
8
9
 
9
10
  // submits a set of transactions to the provided Wallet
10
11
  export const submitTxsTo = async (
@@ -12,26 +13,23 @@ export const submitTxsTo = async (
12
13
  submitter: AztecAddress,
13
14
  numTxs: number,
14
15
  logger: Logger,
15
- ): Promise<SentTx[]> => {
16
- const txs: SentTx[] = [];
16
+ ): Promise<TxHash[]> => {
17
+ const txHashes: TxHash[] = [];
17
18
  await Promise.all(
18
19
  times(numTxs, async () => {
19
20
  const accountManager = await wallet.createSchnorrAccount(Fr.random(), Fr.random(), GrumpkinScalar.random());
20
21
  const deployMethod = await accountManager.getDeployMethod();
21
- const tx = deployMethod.send({ from: submitter });
22
- const txHash = await tx.getTxHash();
22
+ const { txHash } = await deployMethod.send({
23
+ from: submitter,
24
+ wait: NO_WAIT,
25
+ });
23
26
 
24
27
  logger.info(`Tx sent with hash ${txHash}`);
25
- const receipt = await tx.getReceipt();
26
- expect(receipt).toEqual(
27
- expect.objectContaining({
28
- status: TxStatus.PENDING,
29
- error: '',
30
- }),
31
- );
28
+ const receipt: TxReceipt = await wallet.getTxReceipt(txHash);
29
+ expect(receipt.status).toBe(TxStatus.PENDING);
32
30
  logger.info(`Receipt received for ${txHash}`);
33
- txs.push(tx);
31
+ txHashes.push(txHash);
34
32
  }),
35
33
  );
36
- return txs;
34
+ return txHashes;
37
35
  };
@@ -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
16
  import { InboxAbi, UniswapPortalAbi, UniswapPortalBytecode } from '@aztec/l1-artifacts';
17
17
  import { UniswapContract } from '@aztec/noir-contracts.js/Uniswap';
18
18
  import { computeL2ToL1MessageHash } from '@aztec/stdlib/hash';
19
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, ensureAccountContractsPublished } 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
@@ -34,28 +34,8 @@ import { CrossChainTestHarness } from './cross_chain_test_harness.js';
34
34
 
35
35
  const TIMEOUT = 360_000;
36
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
- };
56
-
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,19 @@ 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;
86
+
87
+ t.watcher.setIsMarkingAsProven(false);
97
88
 
98
89
  if (Number(await l1Client.getBlockNumber()) < expectedForkBlockNumber) {
99
90
  throw new Error('This test must be run on a fork of mainnet with the expected fork block');
@@ -139,9 +130,9 @@ export const uniswapL1L2TestSuite = (
139
130
  client: l1Client,
140
131
  });
141
132
  // deploy l2 uniswap contract and attach to portal
142
- uniswapL2Contract = await UniswapContract.deploy(wallet, uniswapPortalAddress)
143
- .send({ from: ownerAddress })
144
- .deployed();
133
+ ({ contract: uniswapL2Contract } = await UniswapContract.deploy(wallet, uniswapPortalAddress).send({
134
+ from: ownerAddress,
135
+ }));
145
136
 
146
137
  const registryAddress = (await aztecNode.getNodeInfo()).l1ContractAddresses.registryAddress;
147
138
 
@@ -206,7 +197,7 @@ export const uniswapL1L2TestSuite = (
206
197
  logger.info('Withdrawing weth to L1 and sending message to swap to dai');
207
198
  const [secretForDepositingSwappedDai, secretHashForDepositingSwappedDai] = await generateClaimSecret();
208
199
 
209
- const l2UniswapInteractionReceipt = await uniswapL2Contract.methods
200
+ const { receipt: l2UniswapInteractionReceipt } = await uniswapL2Contract.methods
210
201
  .swap_private(
211
202
  wethCrossChainHarness.l2Token.address,
212
203
  wethCrossChainHarness.l2Bridge.address,
@@ -218,8 +209,7 @@ export const uniswapL1L2TestSuite = (
218
209
  secretHashForDepositingSwappedDai,
219
210
  ownerEthAddress,
220
211
  )
221
- .send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] })
222
- .wait();
212
+ .send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] });
223
213
 
224
214
  const swapPrivateFunction = 'swap_private(address,uint256,uint24,address,uint256,bytes32,address)';
225
215
  const swapPrivateContent = sha256ToField([
@@ -261,33 +251,35 @@ export const uniswapL1L2TestSuite = (
261
251
  // ensure that uniswap contract didn't eat the funds.
262
252
  await wethCrossChainHarness.expectPublicBalanceOnL2(uniswapL2Contract.address, 0n);
263
253
 
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());
254
+ // Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch.
255
+ const swapResult = (await computeL2ToL1MembershipWitness(
256
+ aztecNode,
257
+ swapPrivateLeaf,
258
+ l2UniswapInteractionReceipt.txHash,
259
+ ))!;
260
+ const { epochNumber: epoch } = swapResult;
261
+ await cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1));
262
+ await waitForProven(aztecNode, l2UniswapInteractionReceipt, { provenTimeout: 300 });
266
263
 
267
264
  // 5. Consume L2 to L1 message by calling uniswapPortal.swap_private()
268
265
  logger.info('Execute withdraw and swap on the uniswapPortal!');
269
266
  const daiL1BalanceOfPortalBeforeSwap = await daiCrossChainHarness.getL1BalanceOf(
270
267
  daiCrossChainHarness.tokenPortalAddress,
271
268
  );
272
- const swapResult = await computeL2ToL1MembershipWitness(
269
+ const withdrawResult = (await computeL2ToL1MembershipWitness(
273
270
  aztecNode,
274
- l2UniswapInteractionReceipt.blockNumber!,
275
- swapPrivateLeaf,
276
- );
277
- const withdrawResult = await computeL2ToL1MembershipWitness(
278
- aztecNode,
279
- l2UniswapInteractionReceipt.blockNumber!,
280
271
  withdrawLeaf,
281
- );
272
+ l2UniswapInteractionReceipt.txHash,
273
+ ))!;
282
274
 
283
- const swapPrivateL2MessageIndex = swapResult!.leafIndex;
284
- const swapPrivateSiblingPath = swapResult!.siblingPath;
275
+ const swapPrivateL2MessageIndex = swapResult.leafIndex;
276
+ const swapPrivateSiblingPath = swapResult.siblingPath;
285
277
 
286
- const withdrawL2MessageIndex = withdrawResult!.leafIndex;
287
- const withdrawSiblingPath = withdrawResult!.siblingPath;
278
+ const withdrawL2MessageIndex = withdrawResult.leafIndex;
279
+ const withdrawSiblingPath = withdrawResult.siblingPath;
288
280
 
289
281
  const withdrawMessageMetadata = {
290
- _checkpointNumber: BigInt(l2UniswapInteractionReceipt.blockNumber!),
282
+ _epoch: BigInt(epoch),
291
283
  _leafIndex: BigInt(withdrawL2MessageIndex),
292
284
  _path: withdrawSiblingPath
293
285
  .toBufferArray()
@@ -295,7 +287,7 @@ export const uniswapL1L2TestSuite = (
295
287
  };
296
288
 
297
289
  const swapPrivateMessageMetadata = {
298
- _checkpointNumber: BigInt(l2UniswapInteractionReceipt.blockNumber!),
290
+ _epoch: BigInt(epoch),
299
291
  _leafIndex: BigInt(swapPrivateL2MessageIndex),
300
292
  _path: swapPrivateSiblingPath
301
293
  .toBufferArray()
@@ -442,10 +434,10 @@ export const uniswapL1L2TestSuite = (
442
434
  // ownerEthAddress,
443
435
  // nonceForSwap,
444
436
  // );
445
- // await ownerWallet.setPublicAuthWit({ caller: sponsorAddress, action }, true).send().wait();
437
+ // await ownerWallet.setPublicAuthWit({ caller: sponsorAddress, action }, true).send();
446
438
 
447
439
  // // 4.2 Call swap_public from user2 on behalf of owner
448
- // const uniswapL2Interaction = await action.send().wait();
440
+ // const uniswapL2Interaction = await action.send();
449
441
 
450
442
  // const swapPublicContent = sha256ToField([
451
443
  // Buffer.from(
@@ -506,7 +498,7 @@ export const uniswapL1L2TestSuite = (
506
498
  // );
507
499
 
508
500
  // const withdrawMessageMetadata = {
509
- // _checkpointNumber: BigInt(uniswapL2Interaction.blockNumber!),
501
+ // _epoch: epoch,
510
502
  // _leafIndex: BigInt(withdrawL2MessageIndex),
511
503
  // _path: withdrawSiblingPath
512
504
  // .toBufferArray()
@@ -514,7 +506,7 @@ export const uniswapL1L2TestSuite = (
514
506
  // };
515
507
 
516
508
  // const swapPrivateMessageMetadata = {
517
- // _checkpointNumber: BigInt(uniswapL2Interaction.blockNumber!),
509
+ // _epoch: epoch,
518
510
  // _leafIndex: BigInt(swapPrivateL2MessageIndex),
519
511
  // _path: swapPrivateSiblingPath
520
512
  // .toBufferArray()
@@ -663,8 +655,7 @@ export const uniswapL1L2TestSuite = (
663
655
  Fr.random(),
664
656
  ownerEthAddress,
665
657
  )
666
- .send({ from: ownerAddress, authWitnesses: [transferToPublicAuthwith] })
667
- .wait(),
658
+ .send({ from: ownerAddress, authWitnesses: [transferToPublicAuthwith] }),
668
659
  ).rejects.toThrow('Assertion failed: input_asset address is not the same as seen in the bridge contract');
669
660
  });
670
661
 
@@ -689,7 +680,7 @@ export const uniswapL1L2TestSuite = (
689
680
  },
690
681
  true,
691
682
  );
692
- await validateActionInteraction.send().wait();
683
+ await validateActionInteraction.send();
693
684
 
694
685
  // No approval to call `swap` but should work even without it:
695
686
  const [_, secretHashForDepositingSwappedDai] = await generateClaimSecret();
@@ -708,8 +699,7 @@ export const uniswapL1L2TestSuite = (
708
699
  ownerEthAddress,
709
700
  Fr.ZERO, // nonce for swap -> doesn't matter
710
701
  )
711
- .send({ from: ownerAddress })
712
- .wait();
702
+ .send({ from: ownerAddress });
713
703
  // check weth balance of owner on L2 (we first bridged `wethAmountToBridge` into L2 and now withdrew it!)
714
704
  await wethCrossChainHarness.expectPublicBalanceOnL2(ownerAddress, 0n);
715
705
  });
@@ -739,7 +729,7 @@ export const uniswapL1L2TestSuite = (
739
729
  { caller: approvedUser, action },
740
730
  true,
741
731
  );
742
- await validateActionInteraction.send().wait();
732
+ await validateActionInteraction.send();
743
733
 
744
734
  await expect(action.simulate({ from: sponsorAddress })).rejects.toThrow(/unauthorized/);
745
735
  });
@@ -761,7 +751,7 @@ export const uniswapL1L2TestSuite = (
761
751
  },
762
752
  true,
763
753
  );
764
- await validateActionInteraction.send().wait();
754
+ await validateActionInteraction.send();
765
755
 
766
756
  await expect(
767
757
  uniswapL2Contract.methods
@@ -806,7 +796,7 @@ export const uniswapL1L2TestSuite = (
806
796
  logger.info('Withdrawing weth to L1 and sending message to swap to dai');
807
797
 
808
798
  const [, secretHashForDepositingSwappedDai] = await generateClaimSecret();
809
- const withdrawReceipt = await uniswapL2Contract.methods
799
+ const { receipt: withdrawReceipt } = await uniswapL2Contract.methods
810
800
  .swap_private(
811
801
  wethCrossChainHarness.l2Token.address,
812
802
  wethCrossChainHarness.l2Bridge.address,
@@ -818,8 +808,7 @@ export const uniswapL1L2TestSuite = (
818
808
  secretHashForDepositingSwappedDai,
819
809
  ownerEthAddress,
820
810
  )
821
- .send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] })
822
- .wait();
811
+ .send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] });
823
812
 
824
813
  const swapPrivateContent = sha256ToField([
825
814
  Buffer.from(
@@ -858,21 +847,18 @@ export const uniswapL1L2TestSuite = (
858
847
  chainId: new Fr(l1Client.chain.id),
859
848
  });
860
849
 
861
- const swapResult = await computeL2ToL1MembershipWitness(aztecNode, withdrawReceipt.blockNumber!, swapPrivateLeaf);
862
- const withdrawResult = await computeL2ToL1MembershipWitness(
863
- aztecNode,
864
- withdrawReceipt.blockNumber!,
865
- withdrawLeaf,
866
- );
850
+ const swapResult = (await computeL2ToL1MembershipWitness(aztecNode, swapPrivateLeaf, withdrawReceipt.txHash))!;
851
+ const { epochNumber: epoch } = swapResult;
852
+ const withdrawResult = (await computeL2ToL1MembershipWitness(aztecNode, withdrawLeaf, withdrawReceipt.txHash))!;
867
853
 
868
- const swapPrivateL2MessageIndex = swapResult!.leafIndex;
869
- const swapPrivateSiblingPath = swapResult!.siblingPath;
854
+ const swapPrivateL2MessageIndex = swapResult.leafIndex;
855
+ const swapPrivateSiblingPath = swapResult.siblingPath;
870
856
 
871
- const withdrawL2MessageIndex = withdrawResult!.leafIndex;
872
- const withdrawSiblingPath = withdrawResult!.siblingPath;
857
+ const withdrawL2MessageIndex = withdrawResult.leafIndex;
858
+ const withdrawSiblingPath = withdrawResult.siblingPath;
873
859
 
874
860
  const withdrawMessageMetadata = {
875
- _checkpointNumber: BigInt(withdrawReceipt.blockNumber!),
861
+ _epoch: BigInt(epoch),
876
862
  _leafIndex: BigInt(withdrawL2MessageIndex),
877
863
  _path: withdrawSiblingPath
878
864
  .toBufferArray()
@@ -880,7 +866,7 @@ export const uniswapL1L2TestSuite = (
880
866
  };
881
867
 
882
868
  const swapPrivateMessageMetadata = {
883
- _checkpointNumber: BigInt(withdrawReceipt.blockNumber!),
869
+ _epoch: BigInt(epoch),
884
870
  _leafIndex: BigInt(swapPrivateL2MessageIndex),
885
871
  _path: swapPrivateSiblingPath
886
872
  .toBufferArray()
@@ -890,8 +876,9 @@ export const uniswapL1L2TestSuite = (
890
876
  // ensure that user's funds were burnt
891
877
  await wethCrossChainHarness.expectPrivateBalanceOnL2(ownerAddress, wethL2BalanceBeforeSwap - wethAmountToBridge);
892
878
 
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());
879
+ // Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch.
880
+ await cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1));
881
+ await waitForProven(aztecNode, withdrawReceipt, { provenTimeout: 300 });
895
882
 
896
883
  // On L1 call swap_public!
897
884
  logger.info('call swap_public on L1');
@@ -932,11 +919,11 @@ export const uniswapL1L2TestSuite = (
932
919
  },
933
920
  true,
934
921
  );
935
- await validateActionInteraction.send().wait();
922
+ await validateActionInteraction.send();
936
923
 
937
924
  // Call swap_public on L2
938
925
  const secretHashForDepositingSwappedDai = Fr.random();
939
- const withdrawReceipt = await uniswapL2Contract.methods
926
+ const { receipt: withdrawReceipt } = await uniswapL2Contract.methods
940
927
  .swap_public(
941
928
  ownerAddress,
942
929
  wethCrossChainHarness.l2Bridge.address,
@@ -950,8 +937,7 @@ export const uniswapL1L2TestSuite = (
950
937
  ownerEthAddress,
951
938
  Fr.ZERO,
952
939
  )
953
- .send({ from: ownerAddress })
954
- .wait();
940
+ .send({ from: ownerAddress });
955
941
 
956
942
  const swapPublicContent = sha256ToField([
957
943
  Buffer.from(
@@ -993,21 +979,18 @@ export const uniswapL1L2TestSuite = (
993
979
  chainId: new Fr(l1Client.chain.id),
994
980
  });
995
981
 
996
- const swapResult = await computeL2ToL1MembershipWitness(aztecNode, withdrawReceipt.blockNumber!, swapPublicLeaf);
997
- const withdrawResult = await computeL2ToL1MembershipWitness(
998
- aztecNode,
999
- withdrawReceipt.blockNumber!,
1000
- withdrawLeaf,
1001
- );
982
+ const swapResult = (await computeL2ToL1MembershipWitness(aztecNode, swapPublicLeaf, withdrawReceipt.txHash))!;
983
+ const { epochNumber: epoch } = swapResult;
984
+ const withdrawResult = (await computeL2ToL1MembershipWitness(aztecNode, withdrawLeaf, withdrawReceipt.txHash))!;
1002
985
 
1003
- const swapPublicL2MessageIndex = swapResult!.leafIndex;
1004
- const swapPublicSiblingPath = swapResult!.siblingPath;
986
+ const swapPublicL2MessageIndex = swapResult.leafIndex;
987
+ const swapPublicSiblingPath = swapResult.siblingPath;
1005
988
 
1006
- const withdrawL2MessageIndex = withdrawResult!.leafIndex;
1007
- const withdrawSiblingPath = withdrawResult!.siblingPath;
989
+ const withdrawL2MessageIndex = withdrawResult.leafIndex;
990
+ const withdrawSiblingPath = withdrawResult.siblingPath;
1008
991
 
1009
992
  const withdrawMessageMetadata = {
1010
- _checkpointNumber: BigInt(withdrawReceipt.blockNumber!),
993
+ _epoch: BigInt(epoch),
1011
994
  _leafIndex: BigInt(withdrawL2MessageIndex),
1012
995
  _path: withdrawSiblingPath
1013
996
  .toBufferArray()
@@ -1015,7 +998,7 @@ export const uniswapL1L2TestSuite = (
1015
998
  };
1016
999
 
1017
1000
  const swapPublicMessageMetadata = {
1018
- _checkpointNumber: BigInt(withdrawReceipt.blockNumber!),
1001
+ _epoch: BigInt(epoch),
1019
1002
  _leafIndex: BigInt(swapPublicL2MessageIndex),
1020
1003
  _path: swapPublicSiblingPath
1021
1004
  .toBufferArray()
@@ -1025,8 +1008,9 @@ export const uniswapL1L2TestSuite = (
1025
1008
  // check weth balance of owner on L2 (we first bridged `wethAmountToBridge` into L2 and now withdrew it!)
1026
1009
  await wethCrossChainHarness.expectPublicBalanceOnL2(ownerAddress, 0n);
1027
1010
 
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());
1011
+ // Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch.
1012
+ await cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1));
1013
+ await waitForProven(aztecNode, withdrawReceipt, { provenTimeout: 300 });
1030
1014
 
1031
1015
  // Call swap_private on L1
1032
1016
  logger.info('Execute withdraw and swap on the uniswapPortal!');