@aztec/end-to-end 0.0.0-test.0 → 0.0.1-commit.001888fc

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 (293) hide show
  1. package/dest/bench/client_flows/benchmark.d.ts +62 -0
  2. package/dest/bench/client_flows/benchmark.d.ts.map +1 -0
  3. package/dest/bench/client_flows/benchmark.js +281 -0
  4. package/dest/bench/client_flows/client_flows_benchmark.d.ts +79 -0
  5. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -0
  6. package/dest/bench/client_flows/client_flows_benchmark.js +329 -0
  7. package/dest/bench/client_flows/config.d.ts +14 -0
  8. package/dest/bench/client_flows/config.d.ts.map +1 -0
  9. package/dest/bench/client_flows/config.js +124 -0
  10. package/dest/bench/client_flows/data_extractor.d.ts +2 -0
  11. package/dest/bench/client_flows/data_extractor.d.ts.map +1 -0
  12. package/dest/bench/client_flows/data_extractor.js +79 -0
  13. package/dest/bench/utils.d.ts +16 -41
  14. package/dest/bench/utils.d.ts.map +1 -1
  15. package/dest/bench/utils.js +44 -72
  16. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +28 -19
  17. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  18. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +125 -103
  19. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +32 -32
  20. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
  21. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +105 -104
  22. package/dest/e2e_deploy_contract/deploy_test.d.ts +19 -10
  23. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  24. package/dest/e2e_deploy_contract/deploy_test.js +26 -27
  25. package/dest/e2e_epochs/epochs_test.d.ts +75 -24
  26. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  27. package/dest/e2e_epochs/epochs_test.js +290 -58
  28. package/dest/e2e_fees/bridging_race.notest.d.ts +2 -0
  29. package/dest/e2e_fees/bridging_race.notest.d.ts.map +1 -0
  30. package/dest/e2e_fees/bridging_race.notest.js +61 -0
  31. package/dest/e2e_fees/fees_test.d.ts +38 -23
  32. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  33. package/dest/e2e_fees/fees_test.js +169 -183
  34. package/dest/e2e_l1_publisher/write_json.d.ts +11 -0
  35. package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -0
  36. package/dest/e2e_l1_publisher/write_json.js +56 -0
  37. package/dest/e2e_multi_validator/utils.d.ts +12 -0
  38. package/dest/e2e_multi_validator/utils.d.ts.map +1 -0
  39. package/dest/e2e_multi_validator/utils.js +214 -0
  40. package/dest/e2e_nested_contract/nested_contract_test.d.ts +15 -15
  41. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  42. package/dest/e2e_nested_contract/nested_contract_test.js +36 -42
  43. package/dest/e2e_p2p/inactivity_slash_test.d.ts +31 -0
  44. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -0
  45. package/dest/e2e_p2p/inactivity_slash_test.js +136 -0
  46. package/dest/e2e_p2p/p2p_network.d.ts +282 -27
  47. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  48. package/dest/e2e_p2p/p2p_network.js +255 -176
  49. package/dest/e2e_p2p/reqresp/utils.d.ts +22 -0
  50. package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -0
  51. package/dest/e2e_p2p/reqresp/utils.js +190 -0
  52. package/dest/e2e_p2p/shared.d.ts +64 -8
  53. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  54. package/dest/e2e_p2p/shared.js +200 -27
  55. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
  56. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
  57. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
  58. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
  59. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
  60. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
  61. package/dest/e2e_token_contract/token_contract_test.d.ts +29 -14
  62. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  63. package/dest/e2e_token_contract/token_contract_test.js +107 -75
  64. package/dest/fixtures/authwit_proxy.d.ts +15 -0
  65. package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
  66. package/dest/fixtures/authwit_proxy.js +30 -0
  67. package/dest/fixtures/e2e_prover_test.d.ts +55 -0
  68. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -0
  69. package/dest/fixtures/e2e_prover_test.js +271 -0
  70. package/dest/fixtures/elu_monitor.d.ts +21 -0
  71. package/dest/fixtures/elu_monitor.d.ts.map +1 -0
  72. package/dest/fixtures/elu_monitor.js +102 -0
  73. package/dest/fixtures/fixtures.d.ts +10 -8
  74. package/dest/fixtures/fixtures.d.ts.map +1 -1
  75. package/dest/fixtures/fixtures.js +11 -5
  76. package/dest/fixtures/get_acvm_config.d.ts +2 -2
  77. package/dest/fixtures/get_acvm_config.d.ts.map +1 -1
  78. package/dest/fixtures/get_acvm_config.js +3 -15
  79. package/dest/fixtures/get_bb_config.d.ts +2 -2
  80. package/dest/fixtures/get_bb_config.d.ts.map +1 -1
  81. package/dest/fixtures/get_bb_config.js +10 -17
  82. package/dest/fixtures/ha_setup.d.ts +71 -0
  83. package/dest/fixtures/ha_setup.d.ts.map +1 -0
  84. package/dest/fixtures/ha_setup.js +116 -0
  85. package/dest/fixtures/index.d.ts +2 -1
  86. package/dest/fixtures/index.d.ts.map +1 -1
  87. package/dest/fixtures/index.js +1 -0
  88. package/dest/fixtures/l1_to_l2_messaging.d.ts +11 -7
  89. package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
  90. package/dest/fixtures/l1_to_l2_messaging.js +45 -19
  91. package/dest/fixtures/logging.d.ts +1 -1
  92. package/dest/fixtures/setup.d.ts +239 -0
  93. package/dest/fixtures/setup.d.ts.map +1 -0
  94. package/dest/fixtures/setup.js +606 -0
  95. package/dest/fixtures/setup_p2p_test.d.ts +23 -15
  96. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  97. package/dest/fixtures/setup_p2p_test.js +102 -31
  98. package/dest/fixtures/token_utils.d.ts +10 -4
  99. package/dest/fixtures/token_utils.d.ts.map +1 -1
  100. package/dest/fixtures/token_utils.js +33 -13
  101. package/dest/fixtures/utils.d.ts +5 -153
  102. package/dest/fixtures/utils.d.ts.map +1 -1
  103. package/dest/fixtures/utils.js +4 -552
  104. package/dest/fixtures/web3signer.d.ts +5 -0
  105. package/dest/fixtures/web3signer.d.ts.map +1 -0
  106. package/dest/fixtures/web3signer.js +53 -0
  107. package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
  108. package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
  109. package/dest/fixtures/with_telemetry_utils.js +2 -2
  110. package/dest/index.d.ts +1 -1
  111. package/dest/quality_of_service/grafana_client.d.ts +41 -0
  112. package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
  113. package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
  114. package/dest/quality_of_service/prometheus_client.d.ts +38 -0
  115. package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
  116. package/dest/quality_of_service/prometheus_client.js +67 -0
  117. package/dest/shared/cross_chain_test_harness.d.ts +44 -27
  118. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  119. package/dest/shared/cross_chain_test_harness.js +107 -53
  120. package/dest/shared/gas_portal_test_harness.d.ts +33 -25
  121. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  122. package/dest/shared/gas_portal_test_harness.js +51 -30
  123. package/dest/shared/index.d.ts +3 -2
  124. package/dest/shared/index.d.ts.map +1 -1
  125. package/dest/shared/index.js +1 -0
  126. package/dest/shared/jest_setup.d.ts +1 -1
  127. package/dest/shared/jest_setup.js +42 -2
  128. package/dest/shared/mock_state_view.d.ts +86 -0
  129. package/dest/shared/mock_state_view.d.ts.map +1 -0
  130. package/dest/shared/mock_state_view.js +186 -0
  131. package/dest/shared/submit-transactions.d.ts +6 -4
  132. package/dest/shared/submit-transactions.d.ts.map +1 -1
  133. package/dest/shared/submit-transactions.js +15 -16
  134. package/dest/shared/uniswap_l1_l2.d.ts +3 -25
  135. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  136. package/dest/shared/uniswap_l1_l2.js +175 -126
  137. package/dest/simulators/index.d.ts +1 -1
  138. package/dest/simulators/lending_simulator.d.ts +7 -7
  139. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  140. package/dest/simulators/lending_simulator.js +17 -18
  141. package/dest/simulators/token_simulator.d.ts +6 -3
  142. package/dest/simulators/token_simulator.d.ts.map +1 -1
  143. package/dest/simulators/token_simulator.js +12 -30
  144. package/dest/spartan/setup_test_wallets.d.ts +36 -11
  145. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  146. package/dest/spartan/setup_test_wallets.js +276 -62
  147. package/dest/spartan/tx_metrics.d.ts +88 -0
  148. package/dest/spartan/tx_metrics.d.ts.map +1 -0
  149. package/dest/spartan/tx_metrics.js +422 -0
  150. package/dest/spartan/utils/bot.d.ts +28 -0
  151. package/dest/spartan/utils/bot.d.ts.map +1 -0
  152. package/dest/spartan/utils/bot.js +142 -0
  153. package/dest/spartan/utils/chaos.d.ts +79 -0
  154. package/dest/spartan/utils/chaos.d.ts.map +1 -0
  155. package/dest/spartan/utils/chaos.js +142 -0
  156. package/dest/spartan/utils/clients.d.ts +39 -0
  157. package/dest/spartan/utils/clients.d.ts.map +1 -0
  158. package/dest/spartan/utils/clients.js +90 -0
  159. package/dest/spartan/utils/config.d.ts +45 -0
  160. package/dest/spartan/utils/config.d.ts.map +1 -0
  161. package/dest/spartan/utils/config.js +23 -0
  162. package/dest/spartan/utils/health.d.ts +63 -0
  163. package/dest/spartan/utils/health.d.ts.map +1 -0
  164. package/dest/spartan/utils/health.js +202 -0
  165. package/dest/spartan/utils/helm.d.ts +15 -0
  166. package/dest/spartan/utils/helm.d.ts.map +1 -0
  167. package/dest/spartan/utils/helm.js +47 -0
  168. package/dest/spartan/utils/index.d.ts +11 -0
  169. package/dest/spartan/utils/index.d.ts.map +1 -0
  170. package/dest/spartan/utils/index.js +22 -0
  171. package/dest/spartan/utils/k8s.d.ts +128 -0
  172. package/dest/spartan/utils/k8s.d.ts.map +1 -0
  173. package/dest/spartan/utils/k8s.js +381 -0
  174. package/dest/spartan/utils/nodes.d.ts +40 -0
  175. package/dest/spartan/utils/nodes.d.ts.map +1 -0
  176. package/dest/spartan/utils/nodes.js +461 -0
  177. package/dest/spartan/utils/pod_logs.d.ts +25 -0
  178. package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
  179. package/dest/spartan/utils/pod_logs.js +74 -0
  180. package/dest/spartan/utils/scripts.d.ts +30 -0
  181. package/dest/spartan/utils/scripts.d.ts.map +1 -0
  182. package/dest/spartan/utils/scripts.js +81 -0
  183. package/dest/spartan/utils.d.ts +2 -415
  184. package/dest/spartan/utils.d.ts.map +1 -1
  185. package/dest/spartan/utils.js +1 -445
  186. package/dest/test-wallet/test_wallet.d.ts +83 -0
  187. package/dest/test-wallet/test_wallet.d.ts.map +1 -0
  188. package/dest/test-wallet/test_wallet.js +214 -0
  189. package/dest/test-wallet/utils.d.ts +41 -0
  190. package/dest/test-wallet/utils.d.ts.map +1 -0
  191. package/dest/test-wallet/utils.js +71 -0
  192. package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
  193. package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
  194. package/dest/test-wallet/wallet_worker_script.js +48 -0
  195. package/dest/test-wallet/worker_wallet.d.ts +52 -0
  196. package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
  197. package/dest/test-wallet/worker_wallet.js +151 -0
  198. package/dest/test-wallet/worker_wallet_schema.d.ts +274 -0
  199. package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
  200. package/dest/test-wallet/worker_wallet_schema.js +10 -0
  201. package/package.json +72 -62
  202. package/src/bench/client_flows/benchmark.ts +363 -0
  203. package/src/bench/client_flows/client_flows_benchmark.ts +388 -0
  204. package/src/bench/client_flows/config.ts +69 -0
  205. package/src/bench/client_flows/data_extractor.ts +89 -0
  206. package/src/bench/utils.ts +47 -86
  207. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +149 -171
  208. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +155 -182
  209. package/src/e2e_deploy_contract/deploy_test.ts +40 -48
  210. package/src/e2e_epochs/epochs_test.ts +364 -93
  211. package/src/e2e_fees/bridging_race.notest.ts +74 -0
  212. package/src/e2e_fees/fees_test.ts +213 -259
  213. package/src/e2e_l1_publisher/write_json.ts +77 -0
  214. package/src/e2e_multi_validator/utils.ts +258 -0
  215. package/src/e2e_nested_contract/nested_contract_test.ts +48 -59
  216. package/src/e2e_p2p/inactivity_slash_test.ts +179 -0
  217. package/src/e2e_p2p/p2p_network.ts +367 -234
  218. package/src/e2e_p2p/reqresp/utils.ts +256 -0
  219. package/src/e2e_p2p/shared.ts +315 -39
  220. package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
  221. package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
  222. package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
  223. package/src/e2e_token_contract/token_contract_test.ts +132 -126
  224. package/src/fixtures/authwit_proxy.ts +50 -0
  225. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  226. package/src/fixtures/e2e_prover_test.ts +332 -0
  227. package/src/fixtures/elu_monitor.ts +126 -0
  228. package/src/fixtures/fixtures.ts +15 -7
  229. package/src/fixtures/get_acvm_config.ts +4 -12
  230. package/src/fixtures/get_bb_config.ts +18 -13
  231. package/src/fixtures/ha_setup.ts +186 -0
  232. package/src/fixtures/index.ts +1 -0
  233. package/src/fixtures/l1_to_l2_messaging.ts +56 -24
  234. package/src/fixtures/setup.ts +903 -0
  235. package/src/fixtures/setup_p2p_test.ts +134 -50
  236. package/src/fixtures/token_utils.ts +37 -16
  237. package/src/fixtures/utils.ts +27 -820
  238. package/src/fixtures/web3signer.ts +63 -0
  239. package/src/fixtures/with_telemetry_utils.ts +2 -2
  240. package/src/guides/up_quick_start.sh +9 -17
  241. package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +2 -2
  242. package/src/quality_of_service/prometheus_client.ts +113 -0
  243. package/src/shared/cross_chain_test_harness.ts +110 -94
  244. package/src/shared/gas_portal_test_harness.ts +59 -50
  245. package/src/shared/index.ts +2 -1
  246. package/src/shared/jest_setup.ts +52 -2
  247. package/src/shared/mock_state_view.ts +188 -0
  248. package/src/shared/submit-transactions.ts +19 -20
  249. package/src/shared/uniswap_l1_l2.ts +207 -226
  250. package/src/simulators/lending_simulator.ts +18 -17
  251. package/src/simulators/token_simulator.ts +18 -34
  252. package/src/spartan/DEVELOP.md +128 -0
  253. package/src/spartan/setup_test_wallets.ts +393 -95
  254. package/src/spartan/tx_metrics.ts +376 -0
  255. package/src/spartan/utils/bot.ts +188 -0
  256. package/src/spartan/utils/chaos.ts +253 -0
  257. package/src/spartan/utils/clients.ts +100 -0
  258. package/src/spartan/utils/config.ts +29 -0
  259. package/src/spartan/utils/health.ts +255 -0
  260. package/src/spartan/utils/helm.ts +84 -0
  261. package/src/spartan/utils/index.ts +71 -0
  262. package/src/spartan/utils/k8s.ts +535 -0
  263. package/src/spartan/utils/nodes.ts +543 -0
  264. package/src/spartan/utils/pod_logs.ts +99 -0
  265. package/src/spartan/utils/scripts.ts +99 -0
  266. package/src/spartan/utils.ts +1 -582
  267. package/src/test-wallet/test_wallet.ts +306 -0
  268. package/src/test-wallet/utils.ts +112 -0
  269. package/src/test-wallet/wallet_worker_script.ts +60 -0
  270. package/src/test-wallet/worker_wallet.ts +213 -0
  271. package/src/test-wallet/worker_wallet_schema.ts +13 -0
  272. package/dest/e2e_prover/e2e_prover_test.d.ts +0 -56
  273. package/dest/e2e_prover/e2e_prover_test.d.ts.map +0 -1
  274. package/dest/e2e_prover/e2e_prover_test.js +0 -291
  275. package/dest/fixtures/setup_l1_contracts.d.ts +0 -6
  276. package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
  277. package/dest/fixtures/setup_l1_contracts.js +0 -17
  278. package/dest/fixtures/snapshot_manager.d.ts +0 -87
  279. package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
  280. package/dest/fixtures/snapshot_manager.js +0 -479
  281. package/dest/quality_of_service/alert_checker.d.ts +0 -41
  282. package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
  283. package/dest/sample-dapp/connect.js +0 -12
  284. package/dest/sample-dapp/contracts.js +0 -10
  285. package/dest/sample-dapp/deploy.js +0 -35
  286. package/dest/sample-dapp/index.js +0 -98
  287. package/src/e2e_prover/e2e_prover_test.ts +0 -418
  288. package/src/fixtures/setup_l1_contracts.ts +0 -27
  289. package/src/fixtures/snapshot_manager.ts +0 -617
  290. package/src/sample-dapp/connect.mjs +0 -16
  291. package/src/sample-dapp/contracts.mjs +0 -14
  292. package/src/sample-dapp/deploy.mjs +0 -40
  293. package/src/sample-dapp/index.mjs +0 -128
@@ -0,0 +1,63 @@
1
+ import { randomBytes } from '@aztec/foundation/crypto/random';
2
+ import { retryUntil } from '@aztec/foundation/retry';
3
+ import { sleep } from '@aztec/foundation/sleep';
4
+ import { RemoteSigner } from '@aztec/node-keystore';
5
+
6
+ import { mkdirSync } from 'node:fs';
7
+ import { writeFile } from 'node:fs/promises';
8
+ import { join } from 'node:path';
9
+
10
+ export async function createWeb3SignerKeystore(dir: string, ...privateKeys: string[]) {
11
+ const yaml = privateKeys
12
+ .map(
13
+ pk => `\
14
+ type: file-raw
15
+ keyType: SECP256K1
16
+ privateKey: ${pk}`,
17
+ )
18
+ .join('\n---\n');
19
+
20
+ // NOTE: nodejs stdlib can only create temp directories, not temp files!
21
+ // this write uses wx (write-exclusive) so it'll throw if the file already exists
22
+ const path = join(dir, `keystore-${randomBytes(4).toString('hex')}.yaml`);
23
+ await writeFile(path, yaml, { flag: 'wx' });
24
+ }
25
+
26
+ export async function refreshWeb3Signer(url: string, ...expectedAddresses: string[]) {
27
+ await fetch(new URL('reload', url), { method: 'POST' });
28
+
29
+ if (expectedAddresses.length > 0) {
30
+ await retryUntil(
31
+ async () => {
32
+ try {
33
+ await RemoteSigner.validateAccess(url, expectedAddresses);
34
+ return true;
35
+ } catch {
36
+ return false;
37
+ }
38
+ },
39
+ 'web3signer refresh',
40
+ 10,
41
+ 0.5,
42
+ );
43
+ } else {
44
+ await sleep(1000);
45
+ }
46
+ }
47
+
48
+ export function getWeb3SignerTestKeystoreDir(): string {
49
+ if (process.env.WEB3_SIGNER_TEST_KEYSTORE_DIR) {
50
+ mkdirSync(process.env.WEB3_SIGNER_TEST_KEYSTORE_DIR, { recursive: true });
51
+ return process.env.WEB3_SIGNER_TEST_KEYSTORE_DIR;
52
+ } else {
53
+ throw new Error('Web3signer not running');
54
+ }
55
+ }
56
+
57
+ export function getWeb3SignerUrl(): string {
58
+ if (process.env.WEB3_SIGNER_URL) {
59
+ return process.env.WEB3_SIGNER_URL;
60
+ } else {
61
+ throw new Error('Web3signer not running');
62
+ }
63
+ }
@@ -7,12 +7,12 @@ import {
7
7
  } from '@aztec/telemetry-client';
8
8
  import { OTelPinoStream } from '@aztec/telemetry-client/otel-pino-stream';
9
9
 
10
- export function getEndToEndTestTelemetryClient(metricsPort?: number): TelemetryClient {
10
+ export async function getEndToEndTestTelemetryClient(metricsPort?: number): Promise<TelemetryClient> {
11
11
  if (metricsPort) {
12
12
  const otelStream = new OTelPinoStream({ levels });
13
13
  registerLoggingStream(otelStream);
14
14
  }
15
- return initTelemetryClient(getEndToEndTestTelemetryConfig(metricsPort));
15
+ return await initTelemetryClient(getEndToEndTestTelemetryConfig(metricsPort));
16
16
  }
17
17
 
18
18
  /**
@@ -1,9 +1,10 @@
1
- #!/bin/bash
2
- # Run locally from end-to-end folder while running anvil and sandbox with:
1
+ #!/usr/bin/env bash
2
+ # Run locally from end-to-end folder while running anvil and local network with:
3
3
  # PATH=$PATH:../node_modules/.bin ./src/guides/up_quick_start.sh
4
4
  set -eux
5
5
 
6
6
  export WALLET_DATA_DIRECTORY=$(mktemp -d)/up_quick_start
7
+ export PXE_PROVER="none"
7
8
 
8
9
  function on_exit {
9
10
  echo "Cleaning up $WALLET_DATA_DIRECTORY..."
@@ -18,37 +19,28 @@ aztec-wallet() {
18
19
  aztec-wallet import-test-accounts
19
20
 
20
21
  # docs:start:declare-accounts
21
- aztec-wallet create-account -a alice --payment method=fee_juice,feePayer=test0
22
- aztec-wallet create-account -a bob --payment method=fee_juice,feePayer=test0
22
+ aztec-wallet create-account -a alice -f test0
23
+ aztec-wallet create-account -a bob -f test0
23
24
  # docs:end:declare-accounts
24
25
 
25
- # docs:start:deploy
26
+ aztec-wallet bridge-fee-juice 1000000000000000000000 accounts:alice --mint --no-wait
27
+
26
28
  DEPLOY_OUTPUT=$(aztec-wallet deploy ../noir-contracts.js/artifacts/token_contract-Token.json --args accounts:test0 Test TST 18 -f test0)
27
29
  TOKEN_ADDRESS=$(echo "$DEPLOY_OUTPUT" | grep -oE 'Contract deployed at 0x[0-9a-fA-F]+' | cut -d ' ' -f4)
28
30
  echo "Deployed contract at $TOKEN_ADDRESS"
29
- # docs:end:deploy
30
31
 
31
- # docs:start:mint-private
32
32
  MINT_AMOUNT=69
33
- aztec-wallet send mint_to_private -ca last --args accounts:test0 accounts:alice $MINT_AMOUNT -f test0
34
- # docs:end:mint-private
33
+ aztec-wallet send mint_to_private -ca last --args accounts:alice $MINT_AMOUNT -f test0
35
34
 
36
- # docs:start:get-balance
37
35
  ALICE_BALANCE=$(aztec-wallet simulate balance_of_private -ca last --args accounts:alice -f alice)
38
36
  if ! echo $ALICE_BALANCE | grep -q $MINT_AMOUNT; then
39
37
  echo "Incorrect Alice balance after transaction (expected $MINT_AMOUNT but got $ALICE_BALANCE)"
40
38
  exit 1
41
39
  fi
42
- # docs:end:get-balance
43
40
 
44
- # docs:start:transfer
45
41
  TRANSFER_AMOUNT=42
46
42
 
47
- aztec-wallet create-authwit transfer_in_private accounts:test0 -ca last --args accounts:alice accounts:bob $TRANSFER_AMOUNT 1 -f alice
48
- aztec-wallet add-authwit authwits:last alice -f test0
49
-
50
- aztec-wallet send transfer_in_private -ca last --args accounts:alice accounts:bob $TRANSFER_AMOUNT 1 -f test0
51
- # docs:end:transfer
43
+ aztec-wallet send transfer_in_private -ca last --args accounts:alice accounts:bob $TRANSFER_AMOUNT 0 -f alice --payment method=fee_juice,claim
52
44
 
53
45
  # Test end result
54
46
  ALICE_BALANCE=$(aztec-wallet simulate balance_of_private -ca last --args accounts:alice -f alice)
@@ -1,4 +1,4 @@
1
- import type { Logger } from '@aztec/aztec.js';
1
+ import type { Logger } from '@aztec/aztec.js/log';
2
2
 
3
3
  import * as fs from 'fs';
4
4
  import * as yaml from 'js-yaml';
@@ -25,7 +25,7 @@ const DEFAULT_CONFIG: AlertCheckerConfig = {
25
25
  grafanaCredentials: 'admin:admin',
26
26
  };
27
27
 
28
- export class AlertChecker {
28
+ export class GrafanaClient {
29
29
  private config: AlertCheckerConfig;
30
30
  private logger: Logger;
31
31
 
@@ -0,0 +1,113 @@
1
+ export type PromteheusClientOptions = {
2
+ server: URL;
3
+ };
4
+
5
+ export class PrometheusClient {
6
+ constructor(
7
+ private config: PromteheusClientOptions,
8
+ private httpClient: typeof fetch = fetch,
9
+ ) {}
10
+
11
+ public async querySingleValue(query: string, time = new Date()): Promise<number> {
12
+ const resp = await this.queryRaw(query, time);
13
+ if (resp.status === 'success') {
14
+ if (resp.data.resultType === 'vector') {
15
+ if (resp.data.result.length === 0) {
16
+ return 0;
17
+ }
18
+ const [_, value] = resp.data.result[0].value;
19
+ return parseFloat(value);
20
+ }
21
+ }
22
+
23
+ throw new TypeError('Unsupported response body', { cause: JSON.stringify(resp) });
24
+ }
25
+
26
+ public queryRaw(query: string, time = new Date()): Promise<PrometheusResponse> {
27
+ const searchParams = new URLSearchParams();
28
+ searchParams.set('query', query);
29
+ searchParams.set('time', String(Math.trunc(time.getTime() / 1000)));
30
+ searchParams.set('limit', '10');
31
+
32
+ return this.callPrometheus('query', searchParams);
33
+ }
34
+
35
+ public queryRangeRaw(
36
+ query: string,
37
+ step: PrometheusDuration,
38
+ start: Date,
39
+ end = new Date(),
40
+ ): Promise<PrometheusResponse> {
41
+ const searchParams = new URLSearchParams();
42
+ searchParams.set('query', query);
43
+ searchParams.set('step', step);
44
+ searchParams.set('start', String(Math.trunc(start.getTime() / 1000)));
45
+ searchParams.set('end', String(Math.trunc(end.getTime() / 1000)));
46
+ searchParams.set('limit', '10');
47
+
48
+ return this.callPrometheus('query_range', searchParams);
49
+ }
50
+
51
+ private async callPrometheus(api: string, searchParams: URLSearchParams): Promise<PrometheusResponse> {
52
+ const url = new URL('api/v1/' + api, this.config.server);
53
+ for (const [name, value] of searchParams) {
54
+ url.searchParams.append(name, value);
55
+ }
56
+
57
+ const resp = await this.httpClient(url, { method: 'GET' });
58
+ if (!resp.ok || resp.status !== 200) {
59
+ throw new Error('Invalid HTTP response from Prometheus', {
60
+ cause: {
61
+ url,
62
+ status: resp.status,
63
+ statusText: resp.statusText,
64
+ },
65
+ });
66
+ }
67
+
68
+ const body = await resp.json();
69
+ if ('status' in body && (body.status === 'error' || body.status === 'success')) {
70
+ return body;
71
+ }
72
+
73
+ throw new Error('Invalid response from Prometheus', {
74
+ cause: {
75
+ url,
76
+ body,
77
+ },
78
+ });
79
+ }
80
+ }
81
+
82
+ export type PrometheusDuration = `${number}s` | `${number}m` | `${number}h`;
83
+
84
+ export type PrometheusData =
85
+ | {
86
+ resultType: 'vector';
87
+ result: Array<{
88
+ metric: unknown;
89
+ value: [unixTimestamp: number, value: string];
90
+ }>;
91
+ }
92
+ | {
93
+ resultType: 'matrix';
94
+ result: Array<{
95
+ metric: unknown;
96
+ values: [unixTimestamp: number, value: string];
97
+ }>;
98
+ }
99
+ | {
100
+ resultType: 'scalar' | 'string';
101
+ result: unknown;
102
+ };
103
+
104
+ export type PrometheusResponse =
105
+ | {
106
+ status: 'error';
107
+ errorType: string;
108
+ error: string;
109
+ }
110
+ | {
111
+ status: 'success';
112
+ data: PrometheusData;
113
+ };
@@ -1,24 +1,23 @@
1
- // docs:start:cross_chain_test_harness
1
+ import type { AztecAddress } from '@aztec/aztec.js/addresses';
2
+ import { EthAddress } from '@aztec/aztec.js/addresses';
3
+ import { AuthWitness } from '@aztec/aztec.js/authorization';
2
4
  import {
3
- type AccountWallet,
4
- type AztecAddress,
5
- type AztecNode,
6
- EthAddress,
7
- type FieldsOf,
8
- Fr,
9
5
  type L1TokenManager,
10
6
  L1TokenPortalManager,
11
7
  type L2AmountClaim,
12
8
  type L2AmountClaimWithRecipient,
13
- type Logger,
14
- type PXE,
15
- type SiblingPath,
16
- type TxReceipt,
17
- type Wallet,
18
- deployL1Contract,
19
- retryUntil,
20
- } from '@aztec/aztec.js';
21
- import type { L1ContractAddresses, ViemPublicClient, ViemWalletClient } from '@aztec/ethereum';
9
+ } from '@aztec/aztec.js/ethereum';
10
+ import { Fr } from '@aztec/aztec.js/fields';
11
+ import type { Logger } from '@aztec/aztec.js/log';
12
+ import type { AztecNode } from '@aztec/aztec.js/node';
13
+ import type { SiblingPath } from '@aztec/aztec.js/trees';
14
+ import type { TxReceipt } from '@aztec/aztec.js/tx';
15
+ import type { Wallet } from '@aztec/aztec.js/wallet';
16
+ import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
17
+ import type { L1ContractAddresses } from '@aztec/ethereum/l1-contract-addresses';
18
+ import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
19
+ import { EpochNumber } from '@aztec/foundation/branded-types';
20
+ import { retryUntil } from '@aztec/foundation/retry';
22
21
  import { TestERC20Abi, TokenPortalAbi, TokenPortalBytecode } from '@aztec/l1-artifacts';
23
22
  import { TokenContract } from '@aztec/noir-contracts.js/Token';
24
23
  import { TokenBridgeContract } from '@aztec/noir-contracts.js/TokenBridge';
@@ -27,7 +26,6 @@ import { type Hex, getContract } from 'viem';
27
26
 
28
27
  import { mintTokensToPrivate } from '../fixtures/token_utils.js';
29
28
 
30
- // docs:start:deployAndInitializeTokenAndBridgeContracts
31
29
  /**
32
30
  * Deploy L1 token and portal, initialize portal, deploy a non native l2 token contract, its L2 bridge contract and attach is to the portal.
33
31
  * @param wallet - the wallet instance
@@ -40,8 +38,7 @@ import { mintTokensToPrivate } from '../fixtures/token_utils.js';
40
38
  */
41
39
  export async function deployAndInitializeTokenAndBridgeContracts(
42
40
  wallet: Wallet,
43
- walletClient: ViemWalletClient,
44
- publicClient: ViemPublicClient,
41
+ l1Client: ExtendedViemWalletClient,
45
42
  rollupRegistryAddress: EthAddress,
46
43
  owner: AztecAddress,
47
44
  underlyingERC20Address: EthAddress,
@@ -68,35 +65,34 @@ export async function deployAndInitializeTokenAndBridgeContracts(
68
65
  underlyingERC20: any;
69
66
  }> {
70
67
  // deploy the token portal
71
- const { address: tokenPortalAddress } = await deployL1Contract(
72
- walletClient,
73
- publicClient,
74
- TokenPortalAbi,
75
- TokenPortalBytecode,
76
- );
68
+ const { address: tokenPortalAddress } = await deployL1Contract(l1Client, TokenPortalAbi, TokenPortalBytecode);
77
69
  const tokenPortal = getContract({
78
70
  address: tokenPortalAddress.toString(),
79
71
  abi: TokenPortalAbi,
80
- client: walletClient,
72
+ client: l1Client,
81
73
  });
82
74
 
83
75
  // deploy l2 token
84
- const token = await TokenContract.deploy(wallet, owner, 'TokenName', 'TokenSymbol', 18).send().deployed();
76
+ const { contract: token } = await TokenContract.deploy(wallet, owner, 'TokenName', 'TokenSymbol', 18).send({
77
+ from: owner,
78
+ });
85
79
 
86
80
  // deploy l2 token bridge and attach to the portal
87
- const bridge = await TokenBridgeContract.deploy(wallet, token.address, tokenPortalAddress).send().deployed();
81
+ const { contract: bridge } = await TokenBridgeContract.deploy(wallet, token.address, tokenPortalAddress).send({
82
+ from: owner,
83
+ });
88
84
 
89
- if ((await token.methods.get_admin().simulate()) !== owner.toBigInt()) {
85
+ if ((await token.methods.get_admin().simulate({ from: owner })).result !== owner.toBigInt()) {
90
86
  throw new Error(`Token admin is not ${owner}`);
91
87
  }
92
88
 
93
- if (!(await bridge.methods.get_config().simulate()).token.equals(token.address)) {
89
+ if (!(await bridge.methods.get_config().simulate({ from: owner })).result.token.equals(token.address)) {
94
90
  throw new Error(`Bridge token is not ${token.address}`);
95
91
  }
96
92
 
97
93
  // make the bridge a minter on the token:
98
- await token.methods.set_minter(bridge.address, true).send().wait();
99
- if ((await token.methods.is_minter(bridge.address).simulate()) === 1n) {
94
+ await token.methods.set_minter(bridge.address, true).send({ from: owner });
95
+ if ((await token.methods.is_minter(bridge.address).simulate({ from: owner })).result === 1n) {
100
96
  throw new Error(`Bridge is not a minter`);
101
97
  }
102
98
 
@@ -109,12 +105,22 @@ export async function deployAndInitializeTokenAndBridgeContracts(
109
105
  const underlyingERC20 = getContract({
110
106
  address: underlyingERC20Address.toString(),
111
107
  abi: TestERC20Abi,
112
- client: walletClient,
108
+ client: l1Client,
113
109
  });
114
110
 
115
111
  return { token, bridge, tokenPortalAddress, tokenPortal, underlyingERC20 };
116
112
  }
117
- // docs:end:deployAndInitializeTokenAndBridgeContracts
113
+
114
+ export type CrossChainContext = {
115
+ l2Token: AztecAddress;
116
+ l2Bridge: AztecAddress;
117
+ tokenPortal: EthAddress;
118
+ underlying: EthAddress;
119
+ ethAccount: EthAddress;
120
+ ownerAddress: AztecAddress;
121
+ inbox: EthAddress;
122
+ outbox: EthAddress;
123
+ };
118
124
 
119
125
  /**
120
126
  * A Class for testing cross chain interactions, contains common interactions
@@ -123,54 +129,47 @@ export async function deployAndInitializeTokenAndBridgeContracts(
123
129
  export class CrossChainTestHarness {
124
130
  static async new(
125
131
  aztecNode: AztecNode,
126
- pxeService: PXE,
127
- publicClient: ViemPublicClient,
128
- walletClient: ViemWalletClient,
129
- wallet: AccountWallet,
132
+ l1Client: ExtendedViemWalletClient,
133
+ wallet: Wallet,
134
+ ownerAddress: AztecAddress,
130
135
  logger: Logger,
131
136
  underlyingERC20Address: EthAddress,
132
137
  ): Promise<CrossChainTestHarness> {
133
- const ethAccount = EthAddress.fromString((await walletClient.getAddresses())[0]);
134
- const l1ContractAddresses = (await pxeService.getNodeInfo()).l1ContractAddresses;
138
+ const ethAccount = EthAddress.fromString((await l1Client.getAddresses())[0]);
139
+ const l1ContractAddresses = (await aztecNode.getNodeInfo()).l1ContractAddresses;
135
140
 
136
141
  // Deploy and initialize all required contracts
137
142
  logger.info('Deploying and initializing token, portal and its bridge...');
138
143
  const { token, bridge, tokenPortalAddress, underlyingERC20 } = await deployAndInitializeTokenAndBridgeContracts(
139
144
  wallet,
140
- walletClient,
141
- publicClient,
145
+ l1Client,
142
146
  l1ContractAddresses.registryAddress,
143
- wallet.getAddress(),
147
+ ownerAddress,
144
148
  underlyingERC20Address,
145
149
  );
146
150
  logger.info('Deployed and initialized token, portal and its bridge.');
147
151
 
148
152
  return new CrossChainTestHarness(
149
153
  aztecNode,
150
- pxeService,
151
154
  logger,
152
155
  token,
153
156
  bridge,
154
157
  ethAccount,
155
158
  tokenPortalAddress,
156
159
  underlyingERC20.address,
157
- publicClient,
158
- walletClient,
160
+ l1Client,
159
161
  l1ContractAddresses,
160
162
  wallet,
163
+ ownerAddress,
161
164
  );
162
165
  }
163
166
 
164
167
  private readonly l1TokenManager: L1TokenManager;
165
168
  private readonly l1TokenPortalManager: L1TokenPortalManager;
166
169
 
167
- public readonly ownerAddress: AztecAddress;
168
-
169
170
  constructor(
170
171
  /** Aztec node instance. */
171
172
  public aztecNode: AztecNode,
172
- /** Private eXecution Environment (PXE). */
173
- public pxeService: PXE,
174
173
  /** Logger. */
175
174
  public logger: Logger,
176
175
 
@@ -186,32 +185,39 @@ export class CrossChainTestHarness {
186
185
  public tokenPortalAddress: EthAddress,
187
186
  /** Underlying token for portal tests. */
188
187
  public underlyingERC20Address: EthAddress,
189
- /** Viem Public client instance. */
190
- public publicClient: ViemPublicClient,
191
- /** Viem Wallet Client instance. */
192
- public walletClient: ViemWalletClient,
188
+ /** Viem Extended client instance. */
189
+ public l1Client: ExtendedViemWalletClient,
193
190
 
194
191
  /** Deployment addresses for all L1 contracts */
195
192
  public readonly l1ContractAddresses: L1ContractAddresses,
196
193
 
197
- /** Wallet of the owner. */
198
- public readonly ownerWallet: AccountWallet,
194
+ /** Wallet to simulate and send txs from. */
195
+ public readonly wallet: Wallet,
196
+
197
+ /** Owner of the l2 token and bridge */
198
+ public readonly ownerAddress: AztecAddress,
199
199
  ) {
200
200
  this.l1TokenPortalManager = new L1TokenPortalManager(
201
201
  this.tokenPortalAddress,
202
202
  this.underlyingERC20Address,
203
+ this.l1ContractAddresses.feeAssetHandlerAddress,
203
204
  this.l1ContractAddresses.outboxAddress,
204
- this.publicClient,
205
- this.walletClient,
205
+ this.l1Client,
206
206
  this.logger,
207
207
  );
208
208
  this.l1TokenManager = this.l1TokenPortalManager.getTokenManager();
209
- this.ownerAddress = this.ownerWallet.getAddress();
210
209
  }
211
210
 
212
211
  async mintTokensOnL1(amount: bigint) {
213
- await this.l1TokenManager.mint(amount, this.ethAccount.toString());
214
- expect(await this.l1TokenManager.getL1TokenBalance(this.ethAccount.toString())).toEqual(amount);
212
+ const contract = getContract({
213
+ abi: TestERC20Abi,
214
+ address: this.l1TokenManager.tokenAddress.toString(),
215
+ client: this.l1Client,
216
+ });
217
+ const balanceBefore = await this.l1TokenManager.getL1TokenBalance(this.ethAccount.toString());
218
+ const hash = await contract.write.mint([this.ethAccount.toString(), amount]);
219
+ await this.l1Client.waitForTransactionReceipt({ hash });
220
+ expect(await this.l1TokenManager.getL1TokenBalance(this.ethAccount.toString())).toEqual(balanceBefore + amount);
215
221
  }
216
222
 
217
223
  getL1BalanceOf(address: EthAddress) {
@@ -228,16 +234,18 @@ export class CrossChainTestHarness {
228
234
 
229
235
  async mintTokensPublicOnL2(amount: bigint) {
230
236
  this.logger.info('Minting tokens on L2 publicly');
231
- await this.l2Token.methods.mint_to_public(this.ownerAddress, amount).send().wait();
237
+ await this.l2Token.methods.mint_to_public(this.ownerAddress, amount).send({ from: this.ownerAddress });
232
238
  }
233
239
 
234
240
  async mintTokensPrivateOnL2(amount: bigint) {
235
- await mintTokensToPrivate(this.l2Token, this.ownerWallet, this.ownerAddress, amount);
241
+ await mintTokensToPrivate(this.l2Token, this.ownerAddress, this.ownerAddress, amount);
236
242
  }
237
243
 
238
244
  async sendL2PublicTransfer(transferAmount: bigint, receiverAddress: AztecAddress) {
239
245
  // send a transfer tx to force through rollup with the message included
240
- await this.l2Token.methods.transfer_in_public(this.ownerAddress, receiverAddress, transferAmount, 0).send().wait();
246
+ await this.l2Token.methods
247
+ .transfer_in_public(this.ownerAddress, receiverAddress, transferAmount, 0)
248
+ .send({ from: this.ownerAddress });
241
249
  }
242
250
 
243
251
  async consumeMessageOnAztecAndMintPrivately(
@@ -247,8 +255,7 @@ export class CrossChainTestHarness {
247
255
  const { recipient, claimAmount, claimSecret: secretForL2MessageConsumption, messageLeafIndex } = claim;
248
256
  await this.l2Bridge.methods
249
257
  .claim_private(recipient, claimAmount, secretForL2MessageConsumption, messageLeafIndex)
250
- .send()
251
- .wait();
258
+ .send({ from: this.ownerAddress });
252
259
  }
253
260
 
254
261
  async consumeMessageOnAztecAndMintPublicly(
@@ -258,30 +265,31 @@ export class CrossChainTestHarness {
258
265
  const { claimAmount, claimSecret, messageLeafIndex } = claim;
259
266
  await this.l2Bridge.methods
260
267
  .claim_public(this.ownerAddress, claimAmount, claimSecret, messageLeafIndex)
261
- .send()
262
- .wait();
268
+ .send({ from: this.ownerAddress });
263
269
  }
264
270
 
265
- async withdrawPrivateFromAztecToL1(withdrawAmount: bigint, nonce: Fr = Fr.ZERO): Promise<FieldsOf<TxReceipt>> {
266
- const withdrawReceipt = await this.l2Bridge.methods
267
- .exit_to_l1_private(this.l2Token.address, this.ethAccount, withdrawAmount, EthAddress.ZERO, nonce)
268
- .send()
269
- .wait();
271
+ async withdrawPrivateFromAztecToL1(
272
+ withdrawAmount: bigint,
273
+ authwitNonce: Fr = Fr.ZERO,
274
+ authWitness: AuthWitness,
275
+ ): Promise<TxReceipt> {
276
+ const { receipt: withdrawReceipt } = await this.l2Bridge.methods
277
+ .exit_to_l1_private(this.l2Token.address, this.ethAccount, withdrawAmount, EthAddress.ZERO, authwitNonce)
278
+ .send({ authWitnesses: [authWitness], from: this.ownerAddress });
270
279
 
271
280
  return withdrawReceipt;
272
281
  }
273
282
 
274
- async withdrawPublicFromAztecToL1(withdrawAmount: bigint, nonce: Fr = Fr.ZERO): Promise<FieldsOf<TxReceipt>> {
275
- const withdrawReceipt = await this.l2Bridge.methods
276
- .exit_to_l1_public(this.ethAccount, withdrawAmount, EthAddress.ZERO, nonce)
277
- .send()
278
- .wait();
283
+ async withdrawPublicFromAztecToL1(withdrawAmount: bigint, authwitNonce: Fr = Fr.ZERO): Promise<TxReceipt> {
284
+ const { receipt: withdrawReceipt } = await this.l2Bridge.methods
285
+ .exit_to_l1_public(this.ethAccount, withdrawAmount, EthAddress.ZERO, authwitNonce)
286
+ .send({ from: this.ownerAddress });
279
287
 
280
288
  return withdrawReceipt;
281
289
  }
282
290
 
283
291
  async getL2PrivateBalanceOf(owner: AztecAddress) {
284
- return await this.l2Token.methods.balance_of_private(owner).simulate({ from: owner });
292
+ return (await this.l2Token.methods.balance_of_private(owner).simulate({ from: owner })).result;
285
293
  }
286
294
 
287
295
  async expectPrivateBalanceOnL2(owner: AztecAddress, expectedBalance: bigint) {
@@ -291,7 +299,7 @@ export class CrossChainTestHarness {
291
299
  }
292
300
 
293
301
  async getL2PublicBalanceOf(owner: AztecAddress) {
294
- return await this.l2Token.methods.balance_of_public(owner).simulate();
302
+ return (await this.l2Token.methods.balance_of_public(owner).simulate({ from: this.ownerAddress })).result;
295
303
  }
296
304
 
297
305
  async expectPublicBalanceOnL2(owner: AztecAddress, expectedBalance: bigint) {
@@ -299,8 +307,8 @@ export class CrossChainTestHarness {
299
307
  expect(balance).toBe(expectedBalance);
300
308
  }
301
309
 
302
- getL2ToL1MessageLeaf(withdrawAmount: bigint, callerOnL1: EthAddress = EthAddress.ZERO): Fr {
303
- return this.l1TokenPortalManager.getL2ToL1MessageLeaf(
310
+ async getL2ToL1MessageLeaf(withdrawAmount: bigint, callerOnL1: EthAddress = EthAddress.ZERO): Promise<Fr> {
311
+ return await this.l1TokenPortalManager.getL2ToL1MessageLeaf(
304
312
  withdrawAmount,
305
313
  this.ethAccount,
306
314
  this.l2Bridge.address,
@@ -310,27 +318,23 @@ export class CrossChainTestHarness {
310
318
 
311
319
  withdrawFundsFromBridgeOnL1(
312
320
  amount: bigint,
313
- blockNumber: number | bigint,
321
+ epochNumber: EpochNumber,
314
322
  messageIndex: bigint,
315
323
  siblingPath: SiblingPath<number>,
316
324
  ) {
317
- return this.l1TokenPortalManager.withdrawFunds(
318
- amount,
319
- this.ethAccount,
320
- BigInt(blockNumber),
321
- messageIndex,
322
- siblingPath,
323
- );
325
+ return this.l1TokenPortalManager.withdrawFunds(amount, this.ethAccount, epochNumber, messageIndex, siblingPath);
324
326
  }
325
327
 
326
328
  async transferToPrivateOnL2(shieldAmount: bigint) {
327
329
  this.logger.info('Transferring to private on L2');
328
- await this.l2Token.methods.transfer_to_private(this.ownerAddress, shieldAmount).send().wait();
330
+ await this.l2Token.methods.transfer_to_private(this.ownerAddress, shieldAmount).send({ from: this.ownerAddress });
329
331
  }
330
332
 
331
- async transferToPublicOnL2(amount: bigint, nonce = Fr.ZERO) {
333
+ async transferToPublicOnL2(amount: bigint, authwitNonce = Fr.ZERO) {
332
334
  this.logger.info('Transferring tokens to public');
333
- await this.l2Token.methods.transfer_to_public(this.ownerAddress, this.ownerAddress, amount, nonce).send().wait();
335
+ await this.l2Token.methods
336
+ .transfer_to_public(this.ownerAddress, this.ownerAddress, amount, authwitNonce)
337
+ .send({ from: this.ownerAddress });
334
338
  }
335
339
 
336
340
  /**
@@ -348,5 +352,17 @@ export class CrossChainTestHarness {
348
352
  await this.mintTokensPublicOnL2(0n);
349
353
  await this.mintTokensPublicOnL2(0n);
350
354
  }
355
+
356
+ toCrossChainContext(): CrossChainContext {
357
+ return {
358
+ l2Token: this.l2Token.address,
359
+ l2Bridge: this.l2Bridge.address,
360
+ tokenPortal: this.tokenPortalAddress,
361
+ underlying: this.underlyingERC20Address,
362
+ ethAccount: this.ethAccount,
363
+ ownerAddress: this.ownerAddress,
364
+ inbox: this.l1ContractAddresses.inboxAddress,
365
+ outbox: this.l1ContractAddresses.outboxAddress,
366
+ };
367
+ }
351
368
  }
352
- // docs:end:cross_chain_test_harness