@aztec/end-to-end 0.0.1-commit.03f7ef2 → 0.0.1-commit.04d373f

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 (271) hide show
  1. package/README.md +27 -0
  2. package/dest/bench/client_flows/benchmark.d.ts +17 -2
  3. package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
  4. package/dest/bench/client_flows/benchmark.js +38 -1
  5. package/dest/bench/client_flows/client_flows_benchmark.d.ts +14 -15
  6. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  7. package/dest/bench/client_flows/client_flows_benchmark.js +132 -150
  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 +33 -19
  15. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +12 -10
  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 +120 -117
  18. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +30 -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 +122 -70
  21. package/dest/e2e_deploy_contract/deploy_test.d.ts +6 -5
  22. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  23. package/dest/e2e_deploy_contract/deploy_test.js +20 -14
  24. package/dest/e2e_epochs/epochs_test.d.ts +39 -8
  25. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  26. package/dest/e2e_epochs/epochs_test.js +172 -51
  27. package/dest/e2e_fees/bridging_race.notest.js +3 -5
  28. package/dest/e2e_fees/fees_test.d.ts +18 -15
  29. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  30. package/dest/e2e_fees/fees_test.js +158 -143
  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_nested_contract/nested_contract_test.d.ts +7 -10
  35. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  36. package/dest/e2e_nested_contract/nested_contract_test.js +32 -41
  37. package/dest/e2e_p2p/inactivity_slash_test.d.ts +3 -3
  38. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
  39. package/dest/e2e_p2p/inactivity_slash_test.js +8 -6
  40. package/dest/e2e_p2p/p2p_network.d.ts +20 -17
  41. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  42. package/dest/e2e_p2p/p2p_network.js +167 -124
  43. package/dest/e2e_p2p/reqresp/utils.d.ts +22 -0
  44. package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -0
  45. package/dest/e2e_p2p/reqresp/utils.js +206 -0
  46. package/dest/e2e_p2p/shared.d.ts +30 -12
  47. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  48. package/dest/e2e_p2p/shared.js +88 -68
  49. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
  50. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
  51. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
  52. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
  53. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
  54. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
  55. package/dest/e2e_token_contract/token_contract_test.d.ts +20 -11
  56. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  57. package/dest/e2e_token_contract/token_contract_test.js +103 -93
  58. package/dest/fixtures/authwit_proxy.d.ts +15 -0
  59. package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
  60. package/dest/fixtures/authwit_proxy.js +34 -0
  61. package/dest/fixtures/e2e_prover_test.d.ts +15 -20
  62. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  63. package/dest/fixtures/e2e_prover_test.js +115 -135
  64. package/dest/fixtures/elu_monitor.d.ts +21 -0
  65. package/dest/fixtures/elu_monitor.d.ts.map +1 -0
  66. package/dest/fixtures/elu_monitor.js +102 -0
  67. package/dest/fixtures/fixtures.d.ts +78 -2
  68. package/dest/fixtures/fixtures.d.ts.map +1 -1
  69. package/dest/fixtures/fixtures.js +75 -1
  70. package/dest/fixtures/get_bb_config.d.ts +1 -1
  71. package/dest/fixtures/get_bb_config.d.ts.map +1 -1
  72. package/dest/fixtures/get_bb_config.js +5 -5
  73. package/dest/fixtures/ha_setup.d.ts +71 -0
  74. package/dest/fixtures/ha_setup.d.ts.map +1 -0
  75. package/dest/fixtures/ha_setup.js +116 -0
  76. package/dest/fixtures/index.d.ts +2 -1
  77. package/dest/fixtures/index.d.ts.map +1 -1
  78. package/dest/fixtures/index.js +1 -0
  79. package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts +25 -0
  80. package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts.map +1 -0
  81. package/dest/fixtures/schnorr_hardcoded_account_contract.js +37 -0
  82. package/dest/fixtures/setup.d.ts +266 -0
  83. package/dest/fixtures/setup.d.ts.map +1 -0
  84. package/dest/fixtures/setup.js +714 -0
  85. package/dest/fixtures/setup_p2p_test.d.ts +22 -11
  86. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  87. package/dest/fixtures/setup_p2p_test.js +43 -32
  88. package/dest/fixtures/token_utils.d.ts +2 -2
  89. package/dest/fixtures/token_utils.d.ts.map +1 -1
  90. package/dest/fixtures/token_utils.js +7 -6
  91. package/dest/fixtures/utils.d.ts +5 -194
  92. package/dest/fixtures/utils.d.ts.map +1 -1
  93. package/dest/fixtures/utils.js +4 -619
  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/install_legacy_contracts.d.cts +10 -0
  101. package/dest/install_legacy_contracts.d.cts.map +1 -0
  102. package/dest/legacy-jest-resolver.d.cts +3 -0
  103. package/dest/legacy-jest-resolver.d.cts.map +1 -0
  104. package/dest/quality_of_service/grafana_client.d.ts +41 -0
  105. package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
  106. package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
  107. package/dest/quality_of_service/prometheus_client.d.ts +38 -0
  108. package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
  109. package/dest/quality_of_service/prometheus_client.js +67 -0
  110. package/dest/shared/cross_chain_test_harness.d.ts +18 -6
  111. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  112. package/dest/shared/cross_chain_test_harness.js +33 -29
  113. package/dest/shared/gas_portal_test_harness.d.ts +18 -5
  114. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  115. package/dest/shared/gas_portal_test_harness.js +20 -11
  116. package/dest/shared/index.d.ts +3 -2
  117. package/dest/shared/index.d.ts.map +1 -1
  118. package/dest/shared/index.js +1 -0
  119. package/dest/shared/jest_setup.js +41 -1
  120. package/dest/shared/mock_state_view.d.ts +86 -0
  121. package/dest/shared/mock_state_view.d.ts.map +1 -0
  122. package/dest/shared/mock_state_view.js +186 -0
  123. package/dest/shared/submit-transactions.d.ts +4 -4
  124. package/dest/shared/submit-transactions.d.ts.map +1 -1
  125. package/dest/shared/submit-transactions.js +9 -11
  126. package/dest/shared/uniswap_l1_l2.d.ts +3 -28
  127. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  128. package/dest/shared/uniswap_l1_l2.js +88 -47
  129. package/dest/shared/wait_for_l1_to_l2_message.d.ts +13 -0
  130. package/dest/shared/wait_for_l1_to_l2_message.d.ts.map +1 -0
  131. package/dest/shared/wait_for_l1_to_l2_message.js +10 -0
  132. package/dest/simulators/lending_simulator.d.ts +14 -3
  133. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  134. package/dest/simulators/lending_simulator.js +28 -16
  135. package/dest/simulators/token_simulator.d.ts +1 -1
  136. package/dest/simulators/token_simulator.d.ts.map +1 -1
  137. package/dest/simulators/token_simulator.js +3 -24
  138. package/dest/spartan/setup_test_wallets.d.ts +15 -5
  139. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  140. package/dest/spartan/setup_test_wallets.js +133 -43
  141. package/dest/spartan/tx_metrics.d.ts +68 -5
  142. package/dest/spartan/tx_metrics.d.ts.map +1 -1
  143. package/dest/spartan/tx_metrics.js +399 -19
  144. package/dest/spartan/utils/bot.d.ts +28 -0
  145. package/dest/spartan/utils/bot.d.ts.map +1 -0
  146. package/dest/spartan/utils/bot.js +142 -0
  147. package/dest/spartan/utils/chaos.d.ts +79 -0
  148. package/dest/spartan/utils/chaos.d.ts.map +1 -0
  149. package/dest/spartan/utils/chaos.js +142 -0
  150. package/dest/spartan/utils/clients.d.ts +39 -0
  151. package/dest/spartan/utils/clients.d.ts.map +1 -0
  152. package/dest/spartan/utils/clients.js +90 -0
  153. package/dest/spartan/utils/config.d.ts +19 -0
  154. package/dest/spartan/utils/config.d.ts.map +1 -0
  155. package/dest/spartan/utils/config.js +23 -0
  156. package/dest/spartan/utils/health.d.ts +63 -0
  157. package/dest/spartan/utils/health.d.ts.map +1 -0
  158. package/dest/spartan/utils/health.js +202 -0
  159. package/dest/spartan/utils/helm.d.ts +15 -0
  160. package/dest/spartan/utils/helm.d.ts.map +1 -0
  161. package/dest/spartan/utils/helm.js +47 -0
  162. package/dest/spartan/utils/index.d.ts +11 -0
  163. package/dest/spartan/utils/index.d.ts.map +1 -0
  164. package/dest/spartan/utils/index.js +22 -0
  165. package/dest/spartan/utils/k8s.d.ts +128 -0
  166. package/dest/spartan/utils/k8s.d.ts.map +1 -0
  167. package/dest/spartan/utils/k8s.js +381 -0
  168. package/dest/spartan/utils/nodes.d.ts +40 -0
  169. package/dest/spartan/utils/nodes.d.ts.map +1 -0
  170. package/dest/spartan/utils/nodes.js +461 -0
  171. package/dest/spartan/utils/pod_logs.d.ts +25 -0
  172. package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
  173. package/dest/spartan/utils/pod_logs.js +74 -0
  174. package/dest/spartan/utils/scripts.d.ts +30 -0
  175. package/dest/spartan/utils/scripts.d.ts.map +1 -0
  176. package/dest/spartan/utils/scripts.js +81 -0
  177. package/dest/spartan/utils.d.ts +2 -231
  178. package/dest/spartan/utils.d.ts.map +1 -1
  179. package/dest/spartan/utils.js +1 -853
  180. package/dest/test-wallet/test_wallet.d.ts +85 -0
  181. package/dest/test-wallet/test_wallet.d.ts.map +1 -0
  182. package/dest/test-wallet/test_wallet.js +273 -0
  183. package/dest/test-wallet/utils.d.ts +41 -0
  184. package/dest/test-wallet/utils.d.ts.map +1 -0
  185. package/dest/test-wallet/utils.js +66 -0
  186. package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
  187. package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
  188. package/dest/test-wallet/wallet_worker_script.js +48 -0
  189. package/dest/test-wallet/worker_wallet.d.ts +53 -0
  190. package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
  191. package/dest/test-wallet/worker_wallet.js +155 -0
  192. package/dest/test-wallet/worker_wallet_schema.d.ts +160 -0
  193. package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
  194. package/dest/test-wallet/worker_wallet_schema.js +22 -0
  195. package/package.json +53 -45
  196. package/src/bench/client_flows/benchmark.ts +43 -2
  197. package/src/bench/client_flows/client_flows_benchmark.ts +189 -240
  198. package/src/bench/client_flows/config.ts +9 -1
  199. package/src/bench/client_flows/data_extractor.ts +1 -1
  200. package/src/bench/utils.ts +38 -22
  201. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +141 -152
  202. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +166 -118
  203. package/src/e2e_deploy_contract/deploy_test.ts +24 -16
  204. package/src/e2e_epochs/epochs_test.ts +218 -94
  205. package/src/e2e_fees/bridging_race.notest.ts +4 -10
  206. package/src/e2e_fees/fees_test.ts +207 -230
  207. package/src/e2e_l1_publisher/write_json.ts +16 -16
  208. package/src/e2e_nested_contract/nested_contract_test.ts +38 -57
  209. package/src/e2e_p2p/inactivity_slash_test.ts +8 -6
  210. package/src/e2e_p2p/p2p_network.ts +239 -191
  211. package/src/e2e_p2p/reqresp/utils.ts +274 -0
  212. package/src/e2e_p2p/shared.ts +115 -86
  213. package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
  214. package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
  215. package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
  216. package/src/e2e_token_contract/token_contract_test.ts +129 -117
  217. package/src/fixtures/authwit_proxy.ts +54 -0
  218. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  219. package/src/fixtures/e2e_prover_test.ts +143 -185
  220. package/src/fixtures/elu_monitor.ts +126 -0
  221. package/src/fixtures/fixtures.ts +97 -1
  222. package/src/fixtures/get_bb_config.ts +7 -6
  223. package/src/fixtures/ha_setup.ts +188 -0
  224. package/src/fixtures/index.ts +1 -0
  225. package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
  226. package/src/fixtures/setup.ts +1037 -0
  227. package/src/fixtures/setup_p2p_test.ts +52 -52
  228. package/src/fixtures/token_utils.ts +7 -6
  229. package/src/fixtures/utils.ts +29 -907
  230. package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
  231. package/src/forward-compatibility/wallet_service.ts +104 -0
  232. package/src/guides/up_quick_start.sh +3 -5
  233. package/src/install_legacy_contracts.cjs +75 -0
  234. package/src/legacy-jest-resolver.cjs +112 -0
  235. package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
  236. package/src/quality_of_service/prometheus_client.ts +113 -0
  237. package/src/shared/cross_chain_test_harness.ts +34 -40
  238. package/src/shared/gas_portal_test_harness.ts +22 -12
  239. package/src/shared/index.ts +2 -1
  240. package/src/shared/jest_setup.ts +51 -1
  241. package/src/shared/mock_state_view.ts +188 -0
  242. package/src/shared/submit-transactions.ts +11 -16
  243. package/src/shared/uniswap_l1_l2.ts +114 -108
  244. package/src/shared/wait_for_l1_to_l2_message.ts +23 -0
  245. package/src/simulators/lending_simulator.ts +34 -16
  246. package/src/simulators/token_simulator.ts +6 -30
  247. package/src/spartan/setup_test_wallets.ts +191 -29
  248. package/src/spartan/tx_metrics.ts +329 -25
  249. package/src/spartan/utils/bot.ts +188 -0
  250. package/src/spartan/utils/chaos.ts +253 -0
  251. package/src/spartan/utils/clients.ts +100 -0
  252. package/src/spartan/utils/config.ts +29 -0
  253. package/src/spartan/utils/health.ts +255 -0
  254. package/src/spartan/utils/helm.ts +84 -0
  255. package/src/spartan/utils/index.ts +71 -0
  256. package/src/spartan/utils/k8s.ts +535 -0
  257. package/src/spartan/utils/nodes.ts +543 -0
  258. package/src/spartan/utils/pod_logs.ts +99 -0
  259. package/src/spartan/utils/scripts.ts +99 -0
  260. package/src/spartan/utils.ts +1 -1077
  261. package/src/test-wallet/test_wallet.ts +376 -0
  262. package/src/test-wallet/utils.ts +108 -0
  263. package/src/test-wallet/wallet_worker_script.ts +60 -0
  264. package/src/test-wallet/worker_wallet.ts +218 -0
  265. package/src/test-wallet/worker_wallet_schema.ts +13 -0
  266. package/dest/fixtures/snapshot_manager.d.ts +0 -93
  267. package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
  268. package/dest/fixtures/snapshot_manager.js +0 -493
  269. package/dest/quality_of_service/alert_checker.d.ts +0 -41
  270. package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
  271. package/src/fixtures/snapshot_manager.ts +0 -651
@@ -1,22 +1,28 @@
1
1
  import { generateSchnorrAccounts } from '@aztec/accounts/testing';
2
+ import { NO_FROM } from '@aztec/aztec.js/account';
2
3
  import { AztecAddress } from '@aztec/aztec.js/addresses';
4
+ import { NO_WAIT } from '@aztec/aztec.js/contracts';
3
5
  import { L1FeeJuicePortalManager } from '@aztec/aztec.js/ethereum';
4
6
  import { FeeJuicePaymentMethodWithClaim } from '@aztec/aztec.js/fee';
5
7
  import { type FeePaymentMethod, SponsoredFeePaymentMethod } from '@aztec/aztec.js/fee';
6
8
  import { Fr } from '@aztec/aztec.js/fields';
7
- import { type AztecNode, createAztecNodeClient } from '@aztec/aztec.js/node';
9
+ import { waitForL1ToL2MessageReady } from '@aztec/aztec.js/messaging';
10
+ import { type AztecNode, createAztecNodeClient, waitForTx } from '@aztec/aztec.js/node';
8
11
  import type { Wallet } from '@aztec/aztec.js/wallet';
9
12
  import { createEthereumChain } from '@aztec/ethereum/chain';
10
13
  import { createExtendedL1Client } from '@aztec/ethereum/client';
11
14
  import type { Logger } from '@aztec/foundation/log';
12
- import { retryUntil } from '@aztec/foundation/retry';
15
+ import { makeBackoff, retry, retryUntil } from '@aztec/foundation/retry';
13
16
  import { TokenContract } from '@aztec/noir-contracts.js/Token';
14
17
  import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
15
- import { TestWallet, proveInteraction, registerInitialLocalNetworkAccountsInWallet } from '@aztec/test-wallet/server';
18
+ import { registerInitialLocalNetworkAccountsInWallet } from '@aztec/wallets/testing';
16
19
 
17
20
  import { getACVMConfig } from '../fixtures/get_acvm_config.js';
18
21
  import { getBBConfig } from '../fixtures/get_bb_config.js';
19
22
  import { getSponsoredFPCAddress, registerSponsoredFPC } from '../fixtures/utils.js';
23
+ import { TestWallet } from '../test-wallet/test_wallet.js';
24
+ import { proveInteraction } from '../test-wallet/utils.js';
25
+ import { WorkerWallet } from '../test-wallet/worker_wallet.js';
20
26
 
21
27
  export interface TestAccounts {
22
28
  aztecNode: AztecNode;
@@ -84,11 +90,19 @@ export async function deploySponsoredTestAccountsWithTokens(
84
90
 
85
91
  const paymentMethod = new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
86
92
  const recipientDeployMethod = await recipientAccount.getDeployMethod();
87
- await recipientDeployMethod.send({ from: AztecAddress.ZERO, fee: { paymentMethod } }).wait({ timeout: 2400 });
93
+ await recipientDeployMethod.send({
94
+ from: NO_FROM,
95
+ fee: { paymentMethod },
96
+ wait: { timeout: 2400 },
97
+ });
88
98
  await Promise.all(
89
99
  fundedAccounts.map(async a => {
90
100
  const deployMethod = await a.getDeployMethod();
91
- await deployMethod.send({ from: AztecAddress.ZERO, fee: { paymentMethod } }).wait({ timeout: 2400 }); // increase timeout on purpose in order to account for two empty epochs
101
+ await deployMethod.send({
102
+ from: NO_FROM,
103
+ fee: { paymentMethod },
104
+ wait: { timeout: 2400 },
105
+ }); // increase timeout on purpose in order to account for two empty epochs
92
106
  logger.info(`Account deployed at ${a.address}`);
93
107
  }),
94
108
  );
@@ -116,11 +130,103 @@ export async function deploySponsoredTestAccountsWithTokens(
116
130
  };
117
131
  }
118
132
 
133
+ async function deployAccountWithDiagnostics(
134
+ account: { getDeployMethod: () => Promise<{ simulate: (opts: any) => any; send: (opts: any) => any }>; address: any },
135
+ paymentMethod: SponsoredFeePaymentMethod,
136
+ aztecNode: AztecNode,
137
+ logger: Logger,
138
+ accountLabel: string,
139
+ estimateGas?: boolean,
140
+ ): Promise<void> {
141
+ const deployMethod = await account.getDeployMethod();
142
+ let gasSettings: any;
143
+ if (estimateGas) {
144
+ const sim = await deployMethod.simulate({ from: NO_FROM, fee: { paymentMethod } });
145
+ gasSettings = sim.estimatedGas;
146
+ logger.info(`${accountLabel} estimated gas: DA=${gasSettings.gasLimits.daGas} L2=${gasSettings.gasLimits.l2Gas}`);
147
+ }
148
+
149
+ // Track the tx hash across retries so we don't re-send when the previous tx is still pending.
150
+ let sentTxHash: { txHash: any } | undefined;
151
+
152
+ await retry(
153
+ async () => {
154
+ // Check if already deployed (handles case where previous attempt succeeded but waitForTx timed out)
155
+ const existing = await aztecNode.getContract(account.address);
156
+ if (existing) {
157
+ logger.info(`${accountLabel} already deployed at ${account.address}, skipping`);
158
+ return;
159
+ }
160
+
161
+ // If we already sent a tx, check if it was dropped before deciding to re-send.
162
+ if (sentTxHash) {
163
+ const prevReceipt = await aztecNode.getTxReceipt(sentTxHash.txHash);
164
+ if (prevReceipt.isDropped()) {
165
+ logger.info(`${accountLabel} previous tx ${sentTxHash.txHash} was dropped, re-sending`);
166
+ sentTxHash = undefined;
167
+ } else {
168
+ logger.info(`${accountLabel} previous tx ${sentTxHash.txHash} still pending, waiting again...`);
169
+ }
170
+ }
171
+
172
+ if (!sentTxHash) {
173
+ const deployResult = await deployMethod.send({
174
+ from: NO_FROM,
175
+ fee: { paymentMethod, gasSettings },
176
+ wait: NO_WAIT,
177
+ });
178
+ sentTxHash = { txHash: deployResult.txHash };
179
+ logger.info(`${accountLabel} tx sent`, { txHash: sentTxHash.txHash.toString() });
180
+ }
181
+
182
+ const receipt = await waitForTx(aztecNode, sentTxHash.txHash, { timeout: 600 });
183
+ if (receipt.isDropped()) {
184
+ sentTxHash = undefined;
185
+ throw new Error(`${accountLabel} tx was dropped, retrying...`);
186
+ }
187
+ logger.info(`${accountLabel} deployed at ${account.address}`);
188
+ },
189
+ `deploy ${accountLabel}`,
190
+ makeBackoff([1, 2, 4, 8, 16]),
191
+ logger,
192
+ );
193
+ }
194
+
195
+ async function deployAccountsInBatches(
196
+ accounts: {
197
+ getDeployMethod: () => Promise<{ simulate: (opts: any) => any; send: (opts: any) => any }>;
198
+ address: any;
199
+ }[],
200
+ paymentMethod: SponsoredFeePaymentMethod,
201
+ aztecNode: AztecNode,
202
+ logger: Logger,
203
+ labelPrefix: string,
204
+ batchSize = 2,
205
+ estimateGas?: boolean,
206
+ ): Promise<void> {
207
+ for (let i = 0; i < accounts.length; i += batchSize) {
208
+ const batch = accounts.slice(i, i + batchSize);
209
+ await Promise.all(
210
+ batch.map((account, idx) =>
211
+ deployAccountWithDiagnostics(
212
+ account,
213
+ paymentMethod,
214
+ aztecNode,
215
+ logger,
216
+ `${labelPrefix}${i + idx + 1}`,
217
+ estimateGas,
218
+ ),
219
+ ),
220
+ );
221
+ }
222
+ }
223
+
119
224
  export async function deploySponsoredTestAccounts(
120
225
  wallet: TestWallet,
121
226
  aztecNode: AztecNode,
122
227
  logger: Logger,
123
228
  numberOfFundedWallets = 1,
229
+ opts?: { estimateGas?: boolean },
124
230
  ): Promise<TestAccountsWithoutTokens> {
125
231
  const [recipient, ...funded] = await generateSchnorrAccounts(numberOfFundedWallets + 1);
126
232
  const recipientAccount = await wallet.createSchnorrAccount(recipient.secret, recipient.salt);
@@ -129,14 +235,23 @@ export async function deploySponsoredTestAccounts(
129
235
  await registerSponsoredFPC(wallet);
130
236
 
131
237
  const paymentMethod = new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
132
- const recipientDeployMethod = await recipientAccount.getDeployMethod();
133
- await recipientDeployMethod.send({ from: AztecAddress.ZERO, fee: { paymentMethod } }).wait({ timeout: 2400 });
134
- await Promise.all(
135
- fundedAccounts.map(async a => {
136
- const deployMethod = await a.getDeployMethod();
137
- await deployMethod.send({ from: AztecAddress.ZERO, fee: { paymentMethod } }).wait({ timeout: 2400 }); // increase timeout on purpose in order to account for two empty epochs
138
- logger.info(`Account deployed at ${a.address}`);
139
- }),
238
+
239
+ await deployAccountWithDiagnostics(
240
+ recipientAccount,
241
+ paymentMethod,
242
+ aztecNode,
243
+ logger,
244
+ 'Recipient account',
245
+ opts?.estimateGas,
246
+ );
247
+ await deployAccountsInBatches(
248
+ fundedAccounts,
249
+ paymentMethod,
250
+ aztecNode,
251
+ logger,
252
+ 'Funded account ',
253
+ 2,
254
+ opts?.estimateGas,
140
255
  );
141
256
 
142
257
  return {
@@ -175,7 +290,7 @@ export async function deployTestAccountsWithTokens(
175
290
  fundedAccounts.map(async (a, i) => {
176
291
  const paymentMethod = new FeeJuicePaymentMethodWithClaim(a.address, claims[i]);
177
292
  const deployMethod = await a.getDeployMethod();
178
- await deployMethod.send({ from: AztecAddress.ZERO, fee: { paymentMethod } }).wait();
293
+ await deployMethod.send({ from: NO_FROM, fee: { paymentMethod } });
179
294
  logger.info(`Account deployed at ${a.address}`);
180
295
  }),
181
296
  );
@@ -218,9 +333,7 @@ async function bridgeL1FeeJuice(
218
333
  const portal = await L1FeeJuicePortalManager.new(aztecNode, l1Client, log);
219
334
  const claim = await portal.bridgeTokensPublic(recipient, amount, true /* mint */);
220
335
 
221
- const isSynced = async () =>
222
- (await aztecNode.getL1ToL2MessageBlock(Fr.fromHexString(claim.messageHash))) !== undefined;
223
- await retryUntil(isSynced, `message ${claim.messageHash} sync`, 24, 0.5);
336
+ await waitForL1ToL2MessageReady(aztecNode, Fr.fromHexString(claim.messageHash), { timeoutSeconds: 24 });
224
337
 
225
338
  log.info(`Created a claim for ${amount} L1 fee juice to ${recipient}.`, claim);
226
339
  return claim;
@@ -251,14 +364,19 @@ async function deployTokenAndMint(
251
364
  logger: Logger,
252
365
  ) {
253
366
  logger.verbose(`Deploying TokenContract...`);
254
- const tokenContract = await TokenContract.deploy(wallet, admin, TOKEN_NAME, TOKEN_SYMBOL, TOKEN_DECIMALS)
255
- .send({
256
- from: admin,
257
- fee: {
258
- paymentMethod,
259
- },
260
- })
261
- .deployed({ timeout: 600 });
367
+ const { contract: tokenContract } = await TokenContract.deploy(
368
+ wallet,
369
+ admin,
370
+ TOKEN_NAME,
371
+ TOKEN_SYMBOL,
372
+ TOKEN_DECIMALS,
373
+ ).send({
374
+ from: admin,
375
+ fee: {
376
+ paymentMethod,
377
+ },
378
+ wait: { timeout: 600 },
379
+ });
262
380
 
263
381
  const tokenAddress = tokenContract.address;
264
382
 
@@ -268,8 +386,7 @@ async function deployTokenAndMint(
268
386
  accounts.map(acc =>
269
387
  TokenContract.at(tokenAddress, wallet)
270
388
  .methods.mint_to_public(acc, mintAmount)
271
- .send({ from: admin, fee: { paymentMethod } })
272
- .wait({ timeout: 600 }),
389
+ .send({ from: admin, fee: { paymentMethod }, wait: { timeout: 600 } }),
273
390
  ),
274
391
  );
275
392
 
@@ -309,17 +426,23 @@ export async function performTransfers({
309
426
 
310
427
  const provenTxs = await Promise.all(txs);
311
428
 
312
- await Promise.all(provenTxs.map(t => t.send().wait({ timeout: 600 })));
429
+ await Promise.all(provenTxs.map(t => t.send({ wait: { timeout: 600 } })));
313
430
 
314
431
  logger.info(`Completed round ${i + 1} / ${rounds}`);
315
432
  }
316
433
  }
317
434
 
435
+ export type WalletWrapper = {
436
+ wallet: TestWallet;
437
+ aztecNode: AztecNode;
438
+ cleanup: () => Promise<void>;
439
+ };
440
+
318
441
  export async function createWalletAndAztecNodeClient(
319
442
  nodeUrl: string,
320
443
  proverEnabled: boolean,
321
444
  logger: Logger,
322
- ): Promise<{ wallet: TestWallet; aztecNode: AztecNode; cleanup: () => Promise<void> }> {
445
+ ): Promise<WalletWrapper> {
323
446
  const aztecNode = createAztecNodeClient(nodeUrl);
324
447
  const [bbConfig, acvmConfig] = await Promise.all([getBBConfig(logger), getACVMConfig(logger)]);
325
448
  const pxeConfig = {
@@ -341,3 +464,42 @@ export async function createWalletAndAztecNodeClient(
341
464
  },
342
465
  };
343
466
  }
467
+
468
+ export type WorkerWalletWrapper = {
469
+ wallet: WorkerWallet;
470
+ aztecNode: AztecNode;
471
+ cleanup: () => Promise<void>;
472
+ };
473
+
474
+ export async function createWorkerWalletClient(
475
+ nodeUrl: string,
476
+ proverEnabled: boolean,
477
+ logger: Logger,
478
+ ): Promise<WorkerWalletWrapper> {
479
+ const aztecNode = createAztecNodeClient(nodeUrl);
480
+ const [bbConfig, acvmConfig] = await Promise.all([getBBConfig(logger), getACVMConfig(logger)]);
481
+
482
+ // Strip cleanup functions — they can't be structured-cloned for worker transfer
483
+ const { cleanup: bbCleanup, ...bbPaths } = bbConfig ?? {};
484
+ const { cleanup: acvmCleanup, ...acvmPaths } = acvmConfig ?? {};
485
+
486
+ const pxeConfig = {
487
+ dataDirectory: undefined,
488
+ dataStoreMapSizeKb: 1024 * 1024,
489
+ ...bbPaths,
490
+ ...acvmPaths,
491
+ proverEnabled,
492
+ };
493
+
494
+ const wallet = await WorkerWallet.create(nodeUrl, pxeConfig);
495
+
496
+ return {
497
+ wallet,
498
+ aztecNode,
499
+ async cleanup() {
500
+ await wallet.stop();
501
+ await bbCleanup?.();
502
+ await acvmCleanup?.();
503
+ },
504
+ };
505
+ }