@aztec/end-to-end 0.0.0-test.1 → 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
@@ -1,150 +1,369 @@
1
- import { getSchnorrAccount, getSchnorrWalletWithSecretKey } from '@aztec/accounts/schnorr';
2
- import { generateSchnorrAccounts, getDeployedTestAccountsWallets } from '@aztec/accounts/testing';
3
- import {
4
- type AccountWalletWithSecretKey,
5
- type AztecAddress,
6
- type AztecNode,
7
- FeeJuicePaymentMethodWithClaim,
8
- Fr,
9
- L1FeeJuicePortalManager,
10
- type PXE,
11
- createAztecNodeClient,
12
- createCompatibleClient,
13
- retryUntil,
14
- } from '@aztec/aztec.js';
15
- import { createEthereumChain, createL1Clients } from '@aztec/ethereum';
1
+ import { generateSchnorrAccounts } from '@aztec/accounts/testing';
2
+ import { AztecAddress } from '@aztec/aztec.js/addresses';
3
+ import { NO_WAIT } from '@aztec/aztec.js/contracts';
4
+ import { L1FeeJuicePortalManager } from '@aztec/aztec.js/ethereum';
5
+ import { FeeJuicePaymentMethodWithClaim } from '@aztec/aztec.js/fee';
6
+ import { type FeePaymentMethod, SponsoredFeePaymentMethod } from '@aztec/aztec.js/fee';
7
+ import { Fr } from '@aztec/aztec.js/fields';
8
+ import { type AztecNode, createAztecNodeClient, waitForTx } from '@aztec/aztec.js/node';
9
+ import type { Wallet } from '@aztec/aztec.js/wallet';
10
+ import { createEthereumChain } from '@aztec/ethereum/chain';
11
+ import { createExtendedL1Client } from '@aztec/ethereum/client';
16
12
  import type { Logger } from '@aztec/foundation/log';
13
+ import { retryUntil } from '@aztec/foundation/retry';
17
14
  import { TokenContract } from '@aztec/noir-contracts.js/Token';
15
+ import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
16
+ import { registerInitialLocalNetworkAccountsInWallet } from '@aztec/wallets/testing';
18
17
 
19
- export interface TestWallets {
20
- pxe: PXE;
21
- wallets: AccountWalletWithSecretKey[];
22
- tokenAdminWallet: TokenContract;
18
+ import { getACVMConfig } from '../fixtures/get_acvm_config.js';
19
+ import { getBBConfig } from '../fixtures/get_bb_config.js';
20
+ import { getSponsoredFPCAddress, registerSponsoredFPC } from '../fixtures/utils.js';
21
+ import { TestWallet } from '../test-wallet/test_wallet.js';
22
+ import { proveInteraction } from '../test-wallet/utils.js';
23
+ import { WorkerWallet } from '../test-wallet/worker_wallet.js';
24
+
25
+ export interface TestAccounts {
26
+ aztecNode: AztecNode;
27
+ wallet: TestWallet;
28
+ accounts: AztecAddress[];
29
+ tokenContract: TokenContract;
30
+ tokenAdminAddress: AztecAddress;
23
31
  tokenName: string;
24
- recipientWallet: AccountWalletWithSecretKey;
32
+ recipientAddress: AztecAddress;
25
33
  tokenAddress: AztecAddress;
26
34
  }
27
35
 
36
+ export type TestAccountsWithoutTokens = Omit<
37
+ TestAccounts,
38
+ 'tokenAddress' | 'tokenContract' | 'tokenName' | 'tokenAdminAddress'
39
+ >;
40
+
28
41
  const TOKEN_NAME = 'USDC';
29
42
  const TOKEN_SYMBOL = 'USD';
30
43
  const TOKEN_DECIMALS = 18n;
31
44
 
32
- export async function setupTestWalletsWithTokens(
33
- pxeUrl: string,
45
+ export async function setupTestAccountsWithTokens(
46
+ nodeUrl: string,
34
47
  mintAmount: bigint,
35
48
  logger: Logger,
36
- ): Promise<TestWallets> {
37
- const WALLET_COUNT = 1; // TODO fix this to allow for 16 wallets again
49
+ ): Promise<TestAccounts> {
50
+ const ACCOUNT_COUNT = 1; // TODO fix this to allow for 16 wallets again
51
+
52
+ const aztecNode = createAztecNodeClient(nodeUrl);
53
+ const wallet = await TestWallet.create(aztecNode);
54
+
55
+ const [recipientAccount, ...accounts] = (await registerInitialLocalNetworkAccountsInWallet(wallet)).slice(
56
+ 0,
57
+ ACCOUNT_COUNT + 1,
58
+ );
59
+
60
+ const tokenAdmin = accounts[0];
61
+ const tokenAddress = await deployTokenAndMint(wallet, accounts, tokenAdmin, mintAmount, undefined, logger);
62
+ const tokenContract = TokenContract.at(tokenAddress, wallet);
63
+
64
+ return {
65
+ aztecNode,
66
+ accounts,
67
+ wallet,
68
+ tokenAdminAddress: tokenAdmin,
69
+ tokenName: TOKEN_NAME,
70
+ tokenAddress,
71
+ tokenContract,
72
+ recipientAddress: recipientAccount,
73
+ };
74
+ }
75
+
76
+ export async function deploySponsoredTestAccountsWithTokens(
77
+ wallet: TestWallet,
78
+ aztecNode: AztecNode,
79
+ mintAmount: bigint,
80
+ logger: Logger,
81
+ numberOfFundedWallets = 1,
82
+ ): Promise<TestAccounts> {
83
+ const [recipient, ...funded] = await generateSchnorrAccounts(numberOfFundedWallets + 1);
84
+ const recipientAccount = await wallet.createSchnorrAccount(recipient.secret, recipient.salt);
85
+ const fundedAccounts = await Promise.all(funded.map(a => wallet.createSchnorrAccount(a.secret, a.salt)));
86
+
87
+ await registerSponsoredFPC(wallet);
88
+
89
+ const paymentMethod = new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
90
+ const recipientDeployMethod = await recipientAccount.getDeployMethod();
91
+ await recipientDeployMethod.send({
92
+ from: AztecAddress.ZERO,
93
+ fee: { paymentMethod },
94
+ wait: { timeout: 2400 },
95
+ });
96
+ await Promise.all(
97
+ fundedAccounts.map(async a => {
98
+ const deployMethod = await a.getDeployMethod();
99
+ await deployMethod.send({
100
+ from: AztecAddress.ZERO,
101
+ fee: { paymentMethod },
102
+ wait: { timeout: 2400 },
103
+ }); // increase timeout on purpose in order to account for two empty epochs
104
+ logger.info(`Account deployed at ${a.address}`);
105
+ }),
106
+ );
107
+
108
+ const tokenAdmin = fundedAccounts[0];
109
+ const tokenAddress = await deployTokenAndMint(
110
+ wallet,
111
+ fundedAccounts.map(acc => acc.address),
112
+ tokenAdmin.address,
113
+ mintAmount,
114
+ new SponsoredFeePaymentMethod(await getSponsoredFPCAddress()),
115
+ logger,
116
+ );
117
+ const tokenContract = TokenContract.at(tokenAddress, wallet);
118
+
119
+ return {
120
+ aztecNode,
121
+ wallet,
122
+ accounts: fundedAccounts.map(acc => acc.address),
123
+ tokenAdminAddress: tokenAdmin.address,
124
+ tokenName: TOKEN_NAME,
125
+ tokenAddress,
126
+ tokenContract,
127
+ recipientAddress: recipientAccount.address,
128
+ };
129
+ }
130
+
131
+ async function deployAccountWithDiagnostics(
132
+ account: { getDeployMethod: () => Promise<{ simulate: (opts: any) => any; send: (opts: any) => any }>; address: any },
133
+ paymentMethod: SponsoredFeePaymentMethod,
134
+ aztecNode: AztecNode,
135
+ logger: Logger,
136
+ accountLabel: string,
137
+ estimateGas?: boolean,
138
+ ): Promise<void> {
139
+ const deployMethod = await account.getDeployMethod();
140
+ let txHash;
141
+ try {
142
+ let gasSettings;
143
+ if (estimateGas) {
144
+ const sim = await deployMethod.simulate({ from: AztecAddress.ZERO, fee: { paymentMethod } });
145
+ gasSettings = sim.estimatedGas;
146
+ logger.info(`${accountLabel} estimated gas: DA=${gasSettings.gasLimits.daGas} L2=${gasSettings.gasLimits.l2Gas}`);
147
+ }
148
+ const deployResult = await deployMethod.send({
149
+ from: AztecAddress.ZERO,
150
+ fee: { paymentMethod, gasSettings },
151
+ wait: NO_WAIT,
152
+ });
153
+ txHash = deployResult.txHash;
154
+ await waitForTx(aztecNode, txHash, { timeout: 2400 });
155
+ logger.info(`${accountLabel} deployed at ${account.address}`);
156
+ } catch (error) {
157
+ const blockNumber = await aztecNode.getBlockNumber();
158
+ let receipt;
159
+ try {
160
+ receipt = await aztecNode.getTxReceipt(txHash);
161
+ } catch {
162
+ receipt = 'unavailable';
163
+ }
164
+ logger.error(`${accountLabel} deployment failed`, {
165
+ txHash: txHash.toString(),
166
+ receipt: JSON.stringify(receipt),
167
+ currentBlockNumber: blockNumber,
168
+ error: String(error),
169
+ });
170
+ throw error;
171
+ }
172
+ }
173
+
174
+ async function deployAccountsInBatches(
175
+ accounts: {
176
+ getDeployMethod: () => Promise<{ simulate: (opts: any) => any; send: (opts: any) => any }>;
177
+ address: any;
178
+ }[],
179
+ paymentMethod: SponsoredFeePaymentMethod,
180
+ aztecNode: AztecNode,
181
+ logger: Logger,
182
+ labelPrefix: string,
183
+ batchSize = 2,
184
+ estimateGas?: boolean,
185
+ ): Promise<void> {
186
+ for (let i = 0; i < accounts.length; i += batchSize) {
187
+ const batch = accounts.slice(i, i + batchSize);
188
+ await Promise.all(
189
+ batch.map((account, idx) =>
190
+ deployAccountWithDiagnostics(
191
+ account,
192
+ paymentMethod,
193
+ aztecNode,
194
+ logger,
195
+ `${labelPrefix}${i + idx + 1}`,
196
+ estimateGas,
197
+ ),
198
+ ),
199
+ );
200
+ }
201
+ }
202
+
203
+ export async function deploySponsoredTestAccounts(
204
+ wallet: TestWallet,
205
+ aztecNode: AztecNode,
206
+ logger: Logger,
207
+ numberOfFundedWallets = 1,
208
+ opts?: { estimateGas?: boolean },
209
+ ): Promise<TestAccountsWithoutTokens> {
210
+ const [recipient, ...funded] = await generateSchnorrAccounts(numberOfFundedWallets + 1);
211
+ const recipientAccount = await wallet.createSchnorrAccount(recipient.secret, recipient.salt);
212
+ const fundedAccounts = await Promise.all(funded.map(a => wallet.createSchnorrAccount(a.secret, a.salt)));
38
213
 
39
- const pxe = await createCompatibleClient(pxeUrl, logger);
214
+ await registerSponsoredFPC(wallet);
40
215
 
41
- const [recipientWallet, ...wallets] = (await getDeployedTestAccountsWallets(pxe)).slice(0, WALLET_COUNT + 1);
216
+ const paymentMethod = new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
42
217
 
43
- const tokenAdmin = wallets[0];
44
- const tokenAddress = await deployTokenAndMint(wallets, tokenAdmin.getAddress(), mintAmount, logger);
45
- const tokenAdminWallet = await TokenContract.at(tokenAddress, tokenAdmin);
218
+ await deployAccountWithDiagnostics(
219
+ recipientAccount,
220
+ paymentMethod,
221
+ aztecNode,
222
+ logger,
223
+ 'Recipient account',
224
+ opts?.estimateGas,
225
+ );
226
+ await deployAccountsInBatches(
227
+ fundedAccounts,
228
+ paymentMethod,
229
+ aztecNode,
230
+ logger,
231
+ 'Funded account ',
232
+ 2,
233
+ opts?.estimateGas,
234
+ );
46
235
 
47
- return { pxe, wallets, tokenAdminWallet, tokenName: TOKEN_NAME, tokenAddress, recipientWallet };
236
+ return {
237
+ aztecNode,
238
+ wallet,
239
+ accounts: fundedAccounts.map(acc => acc.address),
240
+ recipientAddress: recipientAccount.address,
241
+ };
48
242
  }
49
243
 
50
- export async function deployTestWalletWithTokens(
51
- pxeUrl: string,
244
+ export async function deployTestAccountsWithTokens(
52
245
  nodeUrl: string,
53
- l1RpcUrl: string,
246
+ l1RpcUrls: string[],
54
247
  mnemonicOrPrivateKey: string,
55
248
  mintAmount: bigint,
56
249
  logger: Logger,
57
250
  numberOfFundedWallets = 1,
58
- initialFeeJuice = 10n ** 22n,
59
- ): Promise<TestWallets> {
60
- const pxe = await createCompatibleClient(pxeUrl, logger);
61
- const node = createAztecNodeClient(nodeUrl);
251
+ ): Promise<TestAccounts> {
252
+ const aztecNode = createAztecNodeClient(nodeUrl);
253
+ const wallet = await TestWallet.create(aztecNode);
62
254
 
63
255
  const [recipient, ...funded] = await generateSchnorrAccounts(numberOfFundedWallets + 1);
64
- const recipientWallet = await getSchnorrWalletWithSecretKey(
65
- pxe,
66
- recipient.secret,
67
- recipient.signingKey,
68
- recipient.salt,
69
- );
70
- const fundedAccounts = await Promise.all(funded.map(a => getSchnorrAccount(pxe, a.secret, a.signingKey, a.salt)));
256
+ const recipientAccount = await wallet.createSchnorrAccount(recipient.secret, recipient.salt);
257
+ const fundedAccounts = await Promise.all(funded.map(a => wallet.createSchnorrAccount(a.secret, a.salt)));
71
258
 
72
259
  const claims = await Promise.all(
73
- fundedAccounts.map(a =>
74
- bridgeL1FeeJuice(l1RpcUrl, mnemonicOrPrivateKey, pxe, a.getAddress(), initialFeeJuice, logger),
75
- ),
260
+ fundedAccounts.map(a => bridgeL1FeeJuice(l1RpcUrls, mnemonicOrPrivateKey, aztecNode, a.address, undefined, logger)),
76
261
  );
77
262
 
78
- // Progress by 2 L2 blocks so that the l1ToL2Message added above will be available to use on L2.
79
- await advanceL2Block(node);
80
- await advanceL2Block(node);
263
+ // Progress by 3 L2 blocks so that the l1ToL2Message added above will be available to use on L2.
264
+ await advanceL2Block(aztecNode);
265
+ await advanceL2Block(aztecNode);
266
+ await advanceL2Block(aztecNode);
81
267
 
82
- const wallets = await Promise.all(
268
+ await Promise.all(
83
269
  fundedAccounts.map(async (a, i) => {
84
- const wallet = await a.getWallet();
85
- const paymentMethod = new FeeJuicePaymentMethodWithClaim(wallet, claims[i]);
86
- await a.deploy({ fee: { paymentMethod } }).wait();
87
- logger.info(`Account deployed at ${a.getAddress()}`);
88
- return wallet;
270
+ const paymentMethod = new FeeJuicePaymentMethodWithClaim(a.address, claims[i]);
271
+ const deployMethod = await a.getDeployMethod();
272
+ await deployMethod.send({ from: AztecAddress.ZERO, fee: { paymentMethod } });
273
+ logger.info(`Account deployed at ${a.address}`);
89
274
  }),
90
275
  );
91
276
 
92
- const tokenAdmin = wallets[0];
93
- const tokenAddress = await deployTokenAndMint(wallets, tokenAdmin.getAddress(), mintAmount, logger);
94
- const tokenAdminWallet = await TokenContract.at(tokenAddress, tokenAdmin);
277
+ const tokenAdmin = fundedAccounts[0];
278
+ const tokenAddress = await deployTokenAndMint(
279
+ wallet,
280
+ fundedAccounts.map(acc => acc.address),
281
+ tokenAdmin.address,
282
+ mintAmount,
283
+ undefined,
284
+ logger,
285
+ );
286
+ const tokenContract = TokenContract.at(tokenAddress, wallet);
95
287
 
96
- return { pxe, wallets, tokenAdminWallet, tokenName: TOKEN_NAME, tokenAddress, recipientWallet };
288
+ return {
289
+ aztecNode,
290
+ wallet,
291
+ accounts: fundedAccounts.map(acc => acc.address),
292
+ tokenAdminAddress: tokenAdmin.address,
293
+ tokenName: TOKEN_NAME,
294
+ tokenAddress,
295
+ tokenContract,
296
+ recipientAddress: recipientAccount.address,
297
+ };
97
298
  }
98
299
 
99
300
  async function bridgeL1FeeJuice(
100
- l1RpcUrl: string,
301
+ l1RpcUrls: string[],
101
302
  mnemonicOrPrivateKey: string,
102
- pxe: PXE,
303
+ aztecNode: AztecNode,
103
304
  recipient: AztecAddress,
104
- amount: bigint,
305
+ amount: bigint | undefined,
105
306
  log: Logger,
106
307
  ) {
107
- const { l1ChainId } = await pxe.getNodeInfo();
108
- const chain = createEthereumChain([l1RpcUrl], l1ChainId);
109
- const { publicClient, walletClient } = createL1Clients(chain.rpcUrls, mnemonicOrPrivateKey, chain.chainInfo);
308
+ const { l1ChainId } = await aztecNode.getNodeInfo();
309
+ const chain = createEthereumChain(l1RpcUrls, l1ChainId);
310
+ const l1Client = createExtendedL1Client(chain.rpcUrls, mnemonicOrPrivateKey, chain.chainInfo);
110
311
 
111
- const portal = await L1FeeJuicePortalManager.new(pxe, publicClient, walletClient, log);
312
+ const portal = await L1FeeJuicePortalManager.new(aztecNode, l1Client, log);
112
313
  const claim = await portal.bridgeTokensPublic(recipient, amount, true /* mint */);
113
314
 
114
- const isSynced = async () => await pxe.isL1ToL2MessageSynced(Fr.fromHexString(claim.messageHash));
315
+ const isSynced = async () =>
316
+ (await aztecNode.getL1ToL2MessageCheckpoint(Fr.fromHexString(claim.messageHash))) !== undefined;
115
317
  await retryUntil(isSynced, `message ${claim.messageHash} sync`, 24, 0.5);
116
318
 
117
319
  log.info(`Created a claim for ${amount} L1 fee juice to ${recipient}.`, claim);
118
320
  return claim;
119
321
  }
120
322
 
121
- async function advanceL2Block(node: AztecNode) {
122
- const initialBlockNumber = await node.getBlockNumber();
123
- await node!.flushTxs();
124
- await retryUntil(async () => (await node.getBlockNumber()) >= initialBlockNumber + 1);
323
+ async function advanceL2Block(aztecNode: AztecNode, nodeAdmin?: AztecNodeAdmin) {
324
+ const initialBlockNumber = await aztecNode.getBlockNumber();
325
+
326
+ let minTxsPerBlock = undefined;
327
+ if (nodeAdmin) {
328
+ ({ minTxsPerBlock } = await nodeAdmin.getConfig());
329
+ await nodeAdmin.setConfig({ minTxsPerBlock: 0 }); // Set to 0 to ensure we can advance the block
330
+ }
331
+
332
+ await retryUntil(async () => (await aztecNode.getBlockNumber()) >= initialBlockNumber + 1);
333
+
334
+ if (nodeAdmin && minTxsPerBlock !== undefined) {
335
+ await nodeAdmin.setConfig({ minTxsPerBlock });
336
+ }
125
337
  }
126
338
 
127
339
  async function deployTokenAndMint(
128
- wallets: AccountWalletWithSecretKey[],
340
+ wallet: Wallet,
341
+ accounts: AztecAddress[],
129
342
  admin: AztecAddress,
130
343
  mintAmount: bigint,
344
+ paymentMethod: FeePaymentMethod | undefined,
131
345
  logger: Logger,
132
346
  ) {
133
347
  logger.verbose(`Deploying TokenContract...`);
134
- const tokenContract = await TokenContract.deploy(wallets[0], admin, TOKEN_NAME, TOKEN_SYMBOL, TOKEN_DECIMALS)
135
- .send()
136
- .deployed({ timeout: 600 });
348
+ const {
349
+ receipt: { contract: tokenContract },
350
+ } = await TokenContract.deploy(wallet, admin, TOKEN_NAME, TOKEN_SYMBOL, TOKEN_DECIMALS).send({
351
+ from: admin,
352
+ fee: {
353
+ paymentMethod,
354
+ },
355
+ wait: { timeout: 600, returnReceipt: true },
356
+ });
137
357
 
138
358
  const tokenAddress = tokenContract.address;
139
359
 
140
- logger.verbose(`Minting ${mintAmount} public assets to the ${wallets.length} wallets...`);
360
+ logger.verbose(`Minting ${mintAmount} public assets to the ${accounts.length} accounts...`);
141
361
 
142
362
  await Promise.all(
143
- wallets.map(async w =>
144
- (await TokenContract.at(tokenAddress, w)).methods
145
- .mint_to_public(w.getAddress(), mintAmount)
146
- .send()
147
- .wait({ timeout: 600 }),
363
+ accounts.map(acc =>
364
+ TokenContract.at(tokenAddress, wallet)
365
+ .methods.mint_to_public(acc, mintAmount)
366
+ .send({ from: admin, fee: { paymentMethod }, wait: { timeout: 600 } }),
148
367
  ),
149
368
  );
150
369
 
@@ -154,31 +373,110 @@ async function deployTokenAndMint(
154
373
  }
155
374
 
156
375
  export async function performTransfers({
157
- testWallets,
376
+ wallet,
377
+ testAccounts,
158
378
  rounds,
159
379
  transferAmount,
160
380
  logger,
381
+ feePaymentMethod,
161
382
  }: {
162
- testWallets: TestWallets;
383
+ wallet: TestWallet;
384
+ testAccounts: TestAccounts;
163
385
  rounds: number;
164
386
  transferAmount: bigint;
165
387
  logger: Logger;
388
+ feePaymentMethod?: FeePaymentMethod;
166
389
  }) {
167
- const recipient = testWallets.recipientWallet.getAddress();
168
-
390
+ const recipient = testAccounts.recipientAddress;
391
+ // Default to sponsored fee payment if no fee method is provided
392
+ const defaultFeePaymentMethod = feePaymentMethod || new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
169
393
  for (let i = 0; i < rounds; i++) {
170
- const interactions = await Promise.all(
171
- testWallets.wallets.map(async w =>
172
- (
173
- await TokenContract.at(testWallets.tokenAddress, w)
174
- ).methods.transfer_in_public(w.getAddress(), recipient, transferAmount, 0),
175
- ),
176
- );
394
+ const txs = testAccounts.accounts.map(acc => {
395
+ const token = TokenContract.at(testAccounts.tokenAddress, testAccounts.wallet);
396
+ return proveInteraction(wallet, token.methods.transfer_in_public(acc, recipient, transferAmount, 0), {
397
+ from: acc,
398
+ fee: {
399
+ paymentMethod: defaultFeePaymentMethod,
400
+ },
401
+ });
402
+ });
177
403
 
178
- const txs = await Promise.all(interactions.map(async i => await i.prove()));
404
+ const provenTxs = await Promise.all(txs);
179
405
 
180
- await Promise.all(txs.map(t => t.send().wait({ timeout: 600 })));
406
+ await Promise.all(provenTxs.map(t => t.send({ wait: { timeout: 600 } })));
181
407
 
182
408
  logger.info(`Completed round ${i + 1} / ${rounds}`);
183
409
  }
184
410
  }
411
+
412
+ export type WalletWrapper = {
413
+ wallet: TestWallet;
414
+ aztecNode: AztecNode;
415
+ cleanup: () => Promise<void>;
416
+ };
417
+
418
+ export async function createWalletAndAztecNodeClient(
419
+ nodeUrl: string,
420
+ proverEnabled: boolean,
421
+ logger: Logger,
422
+ ): Promise<WalletWrapper> {
423
+ const aztecNode = createAztecNodeClient(nodeUrl);
424
+ const [bbConfig, acvmConfig] = await Promise.all([getBBConfig(logger), getACVMConfig(logger)]);
425
+ const pxeConfig = {
426
+ dataDirectory: undefined,
427
+ dataStoreMapSizeKb: 1024 * 1024,
428
+ ...bbConfig,
429
+ ...acvmConfig,
430
+ proverEnabled,
431
+ };
432
+ const wallet = await TestWallet.create(aztecNode, pxeConfig);
433
+
434
+ return {
435
+ wallet,
436
+ aztecNode,
437
+ async cleanup() {
438
+ await wallet.stop();
439
+ await bbConfig?.cleanup();
440
+ await acvmConfig?.cleanup();
441
+ },
442
+ };
443
+ }
444
+
445
+ export type WorkerWalletWrapper = {
446
+ wallet: WorkerWallet;
447
+ aztecNode: AztecNode;
448
+ cleanup: () => Promise<void>;
449
+ };
450
+
451
+ export async function createWorkerWalletClient(
452
+ nodeUrl: string,
453
+ proverEnabled: boolean,
454
+ logger: Logger,
455
+ ): Promise<WorkerWalletWrapper> {
456
+ const aztecNode = createAztecNodeClient(nodeUrl);
457
+ const [bbConfig, acvmConfig] = await Promise.all([getBBConfig(logger), getACVMConfig(logger)]);
458
+
459
+ // Strip cleanup functions — they can't be structured-cloned for worker transfer
460
+ const { cleanup: bbCleanup, ...bbPaths } = bbConfig ?? {};
461
+ const { cleanup: acvmCleanup, ...acvmPaths } = acvmConfig ?? {};
462
+
463
+ const pxeConfig = {
464
+ dataDirectory: undefined,
465
+ dataStoreMapSizeKb: 1024 * 1024,
466
+ ...bbPaths,
467
+ ...acvmPaths,
468
+ proverEnabled,
469
+ };
470
+
471
+ const wallet = await WorkerWallet.create(nodeUrl, pxeConfig);
472
+
473
+ return {
474
+ wallet,
475
+ aztecNode,
476
+ async cleanup() {
477
+ await wallet.stop();
478
+ await bbCleanup?.();
479
+ await acvmCleanup?.();
480
+ },
481
+ };
482
+ }