@aztec/end-to-end 0.0.1-commit.24de95ac → 0.0.1-commit.2e2504e2

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 (221) hide show
  1. package/dest/bench/client_flows/benchmark.d.ts +3 -2
  2. package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
  3. package/dest/bench/client_flows/benchmark.js +21 -1
  4. package/dest/bench/client_flows/client_flows_benchmark.d.ts +21 -15
  5. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  6. package/dest/bench/client_flows/client_flows_benchmark.js +129 -119
  7. package/dest/bench/client_flows/config.d.ts +1 -1
  8. package/dest/bench/client_flows/data_extractor.d.ts +1 -1
  9. package/dest/bench/client_flows/data_extractor.js +7 -27
  10. package/dest/bench/utils.d.ts +8 -7
  11. package/dest/bench/utils.d.ts.map +1 -1
  12. package/dest/bench/utils.js +27 -18
  13. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +6 -7
  14. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  15. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +96 -112
  16. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +19 -13
  17. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
  18. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +92 -70
  19. package/dest/e2e_deploy_contract/deploy_test.d.ts +5 -4
  20. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  21. package/dest/e2e_deploy_contract/deploy_test.js +18 -13
  22. package/dest/e2e_epochs/epochs_test.d.ts +17 -9
  23. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  24. package/dest/e2e_epochs/epochs_test.js +48 -23
  25. package/dest/e2e_fees/bridging_race.notest.d.ts +1 -1
  26. package/dest/e2e_fees/bridging_race.notest.js +5 -7
  27. package/dest/e2e_fees/fees_test.d.ts +20 -16
  28. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  29. package/dest/e2e_fees/fees_test.js +127 -139
  30. package/dest/e2e_l1_publisher/write_json.d.ts +4 -3
  31. package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
  32. package/dest/e2e_l1_publisher/write_json.js +18 -19
  33. package/dest/e2e_multi_validator/utils.d.ts +1 -1
  34. package/dest/e2e_multi_validator/utils.js +1 -1
  35. package/dest/e2e_nested_contract/nested_contract_test.d.ts +6 -9
  36. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  37. package/dest/e2e_nested_contract/nested_contract_test.js +31 -38
  38. package/dest/e2e_p2p/inactivity_slash_test.d.ts +3 -3
  39. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
  40. package/dest/e2e_p2p/inactivity_slash_test.js +7 -6
  41. package/dest/e2e_p2p/p2p_network.d.ts +225 -18
  42. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  43. package/dest/e2e_p2p/p2p_network.js +121 -110
  44. package/dest/e2e_p2p/reqresp/utils.d.ts +22 -0
  45. package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -0
  46. package/dest/e2e_p2p/reqresp/utils.js +153 -0
  47. package/dest/e2e_p2p/shared.d.ts +11 -11
  48. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  49. package/dest/e2e_p2p/shared.js +15 -21
  50. package/dest/e2e_token_contract/token_contract_test.d.ts +16 -9
  51. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  52. package/dest/e2e_token_contract/token_contract_test.js +89 -91
  53. package/dest/fixtures/e2e_prover_test.d.ts +12 -18
  54. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  55. package/dest/fixtures/e2e_prover_test.js +101 -109
  56. package/dest/fixtures/fixtures.d.ts +2 -3
  57. package/dest/fixtures/fixtures.d.ts.map +1 -1
  58. package/dest/fixtures/fixtures.js +2 -3
  59. package/dest/fixtures/get_acvm_config.d.ts +1 -1
  60. package/dest/fixtures/get_acvm_config.js +1 -1
  61. package/dest/fixtures/get_bb_config.d.ts +1 -1
  62. package/dest/fixtures/get_bb_config.d.ts.map +1 -1
  63. package/dest/fixtures/ha_setup.d.ts +71 -0
  64. package/dest/fixtures/ha_setup.d.ts.map +1 -0
  65. package/dest/fixtures/ha_setup.js +114 -0
  66. package/dest/fixtures/index.d.ts +2 -1
  67. package/dest/fixtures/index.d.ts.map +1 -1
  68. package/dest/fixtures/index.js +1 -0
  69. package/dest/fixtures/l1_to_l2_messaging.d.ts +4 -3
  70. package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
  71. package/dest/fixtures/l1_to_l2_messaging.js +2 -2
  72. package/dest/fixtures/logging.d.ts +1 -1
  73. package/dest/fixtures/setup.d.ts +218 -0
  74. package/dest/fixtures/setup.d.ts.map +1 -0
  75. package/dest/fixtures/setup.js +695 -0
  76. package/dest/fixtures/setup_p2p_test.d.ts +6 -7
  77. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  78. package/dest/fixtures/setup_p2p_test.js +41 -28
  79. package/dest/fixtures/token_utils.d.ts +5 -2
  80. package/dest/fixtures/token_utils.d.ts.map +1 -1
  81. package/dest/fixtures/token_utils.js +13 -7
  82. package/dest/fixtures/utils.d.ts +5 -192
  83. package/dest/fixtures/utils.d.ts.map +1 -1
  84. package/dest/fixtures/utils.js +4 -648
  85. package/dest/fixtures/web3signer.d.ts +1 -1
  86. package/dest/fixtures/web3signer.js +1 -1
  87. package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
  88. package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
  89. package/dest/fixtures/with_telemetry_utils.js +2 -2
  90. package/dest/index.d.ts +1 -1
  91. package/dest/quality_of_service/grafana_client.d.ts +41 -0
  92. package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
  93. package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
  94. package/dest/quality_of_service/prometheus_client.d.ts +38 -0
  95. package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
  96. package/dest/quality_of_service/prometheus_client.js +67 -0
  97. package/dest/shared/cross_chain_test_harness.d.ts +7 -6
  98. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  99. package/dest/shared/cross_chain_test_harness.js +14 -14
  100. package/dest/shared/gas_portal_test_harness.d.ts +2 -2
  101. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  102. package/dest/shared/gas_portal_test_harness.js +2 -2
  103. package/dest/shared/index.d.ts +2 -2
  104. package/dest/shared/index.d.ts.map +1 -1
  105. package/dest/shared/jest_setup.d.ts +1 -1
  106. package/dest/shared/submit-transactions.d.ts +3 -3
  107. package/dest/shared/submit-transactions.d.ts.map +1 -1
  108. package/dest/shared/submit-transactions.js +9 -11
  109. package/dest/shared/uniswap_l1_l2.d.ts +3 -27
  110. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  111. package/dest/shared/uniswap_l1_l2.js +57 -35
  112. package/dest/simulators/index.d.ts +1 -1
  113. package/dest/simulators/lending_simulator.d.ts +2 -2
  114. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  115. package/dest/simulators/lending_simulator.js +6 -4
  116. package/dest/simulators/token_simulator.d.ts +1 -1
  117. package/dest/simulators/token_simulator.d.ts.map +1 -1
  118. package/dest/spartan/setup_test_wallets.d.ts +8 -5
  119. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  120. package/dest/spartan/setup_test_wallets.js +85 -23
  121. package/dest/spartan/tx_metrics.d.ts +88 -0
  122. package/dest/spartan/tx_metrics.d.ts.map +1 -0
  123. package/dest/spartan/tx_metrics.js +422 -0
  124. package/dest/spartan/utils/bot.d.ts +27 -0
  125. package/dest/spartan/utils/bot.d.ts.map +1 -0
  126. package/dest/spartan/utils/bot.js +141 -0
  127. package/dest/spartan/utils/chaos.d.ts +79 -0
  128. package/dest/spartan/utils/chaos.d.ts.map +1 -0
  129. package/dest/spartan/utils/chaos.js +142 -0
  130. package/dest/spartan/utils/clients.d.ts +39 -0
  131. package/dest/spartan/utils/clients.d.ts.map +1 -0
  132. package/dest/spartan/utils/clients.js +90 -0
  133. package/dest/spartan/utils/config.d.ts +39 -0
  134. package/dest/spartan/utils/config.d.ts.map +1 -0
  135. package/dest/spartan/utils/config.js +21 -0
  136. package/dest/spartan/utils/health.d.ts +63 -0
  137. package/dest/spartan/utils/health.d.ts.map +1 -0
  138. package/dest/spartan/utils/health.js +202 -0
  139. package/dest/spartan/utils/helm.d.ts +15 -0
  140. package/dest/spartan/utils/helm.d.ts.map +1 -0
  141. package/dest/spartan/utils/helm.js +47 -0
  142. package/dest/spartan/utils/index.d.ts +9 -0
  143. package/dest/spartan/utils/index.d.ts.map +1 -0
  144. package/dest/spartan/utils/index.js +18 -0
  145. package/dest/spartan/utils/k8s.d.ts +126 -0
  146. package/dest/spartan/utils/k8s.d.ts.map +1 -0
  147. package/dest/spartan/utils/k8s.js +375 -0
  148. package/dest/spartan/utils/nodes.d.ts +41 -0
  149. package/dest/spartan/utils/nodes.d.ts.map +1 -0
  150. package/dest/spartan/utils/nodes.js +461 -0
  151. package/dest/spartan/utils/scripts.d.ts +30 -0
  152. package/dest/spartan/utils/scripts.d.ts.map +1 -0
  153. package/dest/spartan/utils/scripts.js +81 -0
  154. package/dest/spartan/utils.d.ts +2 -218
  155. package/dest/spartan/utils.d.ts.map +1 -1
  156. package/dest/spartan/utils.js +1 -749
  157. package/package.json +46 -40
  158. package/src/bench/client_flows/benchmark.ts +24 -2
  159. package/src/bench/client_flows/client_flows_benchmark.ts +152 -170
  160. package/src/bench/client_flows/data_extractor.ts +6 -28
  161. package/src/bench/utils.ts +30 -20
  162. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +104 -142
  163. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +139 -124
  164. package/src/e2e_deploy_contract/deploy_test.ts +22 -15
  165. package/src/e2e_epochs/epochs_test.ts +96 -56
  166. package/src/e2e_fees/bridging_race.notest.ts +5 -11
  167. package/src/e2e_fees/fees_test.ts +180 -219
  168. package/src/e2e_l1_publisher/write_json.ts +20 -19
  169. package/src/e2e_multi_validator/utils.ts +1 -1
  170. package/src/e2e_nested_contract/nested_contract_test.ts +33 -55
  171. package/src/e2e_p2p/inactivity_slash_test.ts +10 -9
  172. package/src/e2e_p2p/p2p_network.ts +181 -180
  173. package/src/e2e_p2p/reqresp/utils.ts +207 -0
  174. package/src/e2e_p2p/shared.ts +35 -29
  175. package/src/e2e_token_contract/token_contract_test.ts +103 -118
  176. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  177. package/src/fixtures/e2e_prover_test.ts +112 -150
  178. package/src/fixtures/fixtures.ts +2 -5
  179. package/src/fixtures/get_acvm_config.ts +1 -1
  180. package/src/fixtures/ha_setup.ts +184 -0
  181. package/src/fixtures/index.ts +1 -0
  182. package/src/fixtures/l1_to_l2_messaging.ts +4 -2
  183. package/src/fixtures/setup.ts +1017 -0
  184. package/src/fixtures/setup_p2p_test.ts +38 -29
  185. package/src/fixtures/token_utils.ts +8 -7
  186. package/src/fixtures/utils.ts +27 -947
  187. package/src/fixtures/web3signer.ts +1 -1
  188. package/src/fixtures/with_telemetry_utils.ts +2 -2
  189. package/src/guides/up_quick_start.sh +1 -1
  190. package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
  191. package/src/quality_of_service/prometheus_client.ts +113 -0
  192. package/src/shared/cross_chain_test_harness.ts +19 -36
  193. package/src/shared/gas_portal_test_harness.ts +3 -3
  194. package/src/shared/index.ts +1 -1
  195. package/src/shared/submit-transactions.ts +9 -15
  196. package/src/shared/uniswap_l1_l2.ts +65 -88
  197. package/src/simulators/lending_simulator.ts +7 -5
  198. package/src/spartan/DEVELOP.md +7 -0
  199. package/src/spartan/setup_test_wallets.ts +119 -28
  200. package/src/spartan/tx_metrics.ts +376 -0
  201. package/src/spartan/utils/bot.ts +185 -0
  202. package/src/spartan/utils/chaos.ts +253 -0
  203. package/src/spartan/utils/clients.ts +100 -0
  204. package/src/spartan/utils/config.ts +27 -0
  205. package/src/spartan/utils/health.ts +255 -0
  206. package/src/spartan/utils/helm.ts +84 -0
  207. package/src/spartan/utils/index.ts +64 -0
  208. package/src/spartan/utils/k8s.ts +527 -0
  209. package/src/spartan/utils/nodes.ts +538 -0
  210. package/src/spartan/utils/scripts.ts +99 -0
  211. package/src/spartan/utils.ts +1 -942
  212. package/dest/fixtures/setup_l1_contracts.d.ts +0 -6
  213. package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
  214. package/dest/fixtures/setup_l1_contracts.js +0 -17
  215. package/dest/fixtures/snapshot_manager.d.ts +0 -95
  216. package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
  217. package/dest/fixtures/snapshot_manager.js +0 -505
  218. package/dest/quality_of_service/alert_checker.d.ts +0 -41
  219. package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
  220. package/src/fixtures/setup_l1_contracts.ts +0 -26
  221. package/src/fixtures/snapshot_manager.ts +0 -665
@@ -1,18 +1,18 @@
1
1
  import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
2
2
  import { computeAuthWitMessageHash } from '@aztec/aztec.js/authorization';
3
+ import { waitForProven } from '@aztec/aztec.js/contracts';
3
4
  import { generateClaimSecret } from '@aztec/aztec.js/ethereum';
4
5
  import { Fr } from '@aztec/aztec.js/fields';
5
6
  import type { Logger } from '@aztec/aztec.js/log';
6
7
  import type { AztecNode } from '@aztec/aztec.js/node';
7
8
  import { CheatCodes } from '@aztec/aztec/testing';
8
- import {
9
- type DeployL1ContractsReturnType,
10
- type ExtendedViemWalletClient,
11
- RollupContract,
12
- deployL1Contract,
13
- extractEvent,
14
- } from '@aztec/ethereum';
15
- import { sha256ToField } from '@aztec/foundation/crypto';
9
+ import { RollupContract } from '@aztec/ethereum/contracts';
10
+ import type { DeployAztecL1ContractsReturnType } from '@aztec/ethereum/deploy-aztec-l1-contracts';
11
+ import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
12
+ import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
13
+ import { extractEvent } from '@aztec/ethereum/utils';
14
+ import { EpochNumber } from '@aztec/foundation/branded-types';
15
+ import { sha256ToField } from '@aztec/foundation/crypto/sha256';
16
16
  import { InboxAbi, UniswapPortalAbi, UniswapPortalBytecode } from '@aztec/l1-artifacts';
17
17
  import { UniswapContract } from '@aztec/noir-contracts.js/Uniswap';
18
18
  import { computeL2ToL1MessageHash } from '@aztec/stdlib/hash';
@@ -22,7 +22,7 @@ import type { TestWallet } from '@aztec/test-wallet/server';
22
22
  import { jest } from '@jest/globals';
23
23
  import { type GetContractReturnType, getContract, parseEther, toFunctionSelector } from 'viem';
24
24
 
25
- import { ensureAccountContractsPublished } from '../fixtures/utils.js';
25
+ import { type EndToEndContext, ensureAccountContractsPublished } from '../fixtures/utils.js';
26
26
  import { CrossChainTestHarness } from './cross_chain_test_harness.js';
27
27
 
28
28
  // PSA: This tests works on forked mainnet. There is a dump of the data in `dumpedState` such that we
@@ -34,28 +34,8 @@ import { CrossChainTestHarness } from './cross_chain_test_harness.js';
34
34
 
35
35
  const TIMEOUT = 360_000;
36
36
 
37
- /** Objects to be returned by the uniswap setup function */
38
- export type UniswapSetupContext = {
39
- /** Aztec Node instance */
40
- aztecNode: AztecNode;
41
- /** Logger instance named as the current test. */
42
- logger: Logger;
43
- /** The L1 wallet client, extended with public actions. */
44
- l1Client: ExtendedViemWalletClient;
45
- /** The wallet. */
46
- wallet: TestWallet;
47
- /** The owner address. */
48
- ownerAddress: AztecAddress;
49
- /** The sponsor wallet. */
50
- sponsorAddress: AztecAddress;
51
- /** */
52
- deployL1ContractsValues: DeployL1ContractsReturnType;
53
- /** Cheat codes instance. */
54
- cheatCodes: CheatCodes;
55
- };
56
-
57
37
  export const uniswapL1L2TestSuite = (
58
- setup: () => Promise<UniswapSetupContext>,
38
+ setup: () => Promise<EndToEndContext>,
59
39
  cleanup: () => Promise<void>,
60
40
  expectedForkBlockNumber = 17514288,
61
41
  ) => {
@@ -79,7 +59,7 @@ export const uniswapL1L2TestSuite = (
79
59
  let daiCrossChainHarness: CrossChainTestHarness;
80
60
  let wethCrossChainHarness: CrossChainTestHarness;
81
61
 
82
- let deployL1ContractsValues: DeployL1ContractsReturnType;
62
+ let deployL1ContractsValues: DeployAztecL1ContractsReturnType;
83
63
  let rollup: RollupContract;
84
64
  let uniswapPortal: GetContractReturnType<typeof UniswapPortalAbi, ExtendedViemWalletClient>;
85
65
  let uniswapPortalAddress: EthAddress;
@@ -92,8 +72,19 @@ export const uniswapL1L2TestSuite = (
92
72
  let cheatCodes: CheatCodes;
93
73
  let version: number;
94
74
  beforeAll(async () => {
95
- ({ aztecNode, logger, l1Client, wallet, ownerAddress, sponsorAddress, deployL1ContractsValues, cheatCodes } =
96
- await setup());
75
+ const t = await setup();
76
+ ({
77
+ aztecNode,
78
+ logger,
79
+ deployL1ContractsValues,
80
+ cheatCodes,
81
+ wallet,
82
+ accounts: [ownerAddress, sponsorAddress],
83
+ } = t);
84
+
85
+ l1Client = deployL1ContractsValues.l1Client;
86
+
87
+ t.watcher?.setIsMarkingAsProven(false);
97
88
 
98
89
  if (Number(await l1Client.getBlockNumber()) < expectedForkBlockNumber) {
99
90
  throw new Error('This test must be run on a fork of mainnet with the expected fork block');
@@ -139,9 +130,7 @@ export const uniswapL1L2TestSuite = (
139
130
  client: l1Client,
140
131
  });
141
132
  // deploy l2 uniswap contract and attach to portal
142
- uniswapL2Contract = await UniswapContract.deploy(wallet, uniswapPortalAddress)
143
- .send({ from: ownerAddress })
144
- .deployed();
133
+ uniswapL2Contract = await UniswapContract.deploy(wallet, uniswapPortalAddress).send({ from: ownerAddress });
145
134
 
146
135
  const registryAddress = (await aztecNode.getNodeInfo()).l1ContractAddresses.registryAddress;
147
136
 
@@ -218,8 +207,7 @@ export const uniswapL1L2TestSuite = (
218
207
  secretHashForDepositingSwappedDai,
219
208
  ownerEthAddress,
220
209
  )
221
- .send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] })
222
- .wait();
210
+ .send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] });
223
211
 
224
212
  const swapPrivateFunction = 'swap_private(address,uint256,uint24,address,uint256,bytes32,address)';
225
213
  const swapPrivateContent = sha256ToField([
@@ -261,24 +249,19 @@ export const uniswapL1L2TestSuite = (
261
249
  // ensure that uniswap contract didn't eat the funds.
262
250
  await wethCrossChainHarness.expectPublicBalanceOnL2(uniswapL2Contract.address, 0n);
263
251
 
264
- // Since the outbox is only consumable when the block is proven, we need to set the block to be proven
265
- await cheatCodes.rollup.markAsProven(await rollup.getBlockNumber());
252
+ // Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch.
253
+ const block = await aztecNode.getBlock(l2UniswapInteractionReceipt.blockNumber!);
254
+ const epoch = await rollup.getEpochNumberForCheckpoint(block!.checkpointNumber);
255
+ await cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1));
256
+ await waitForProven(aztecNode, l2UniswapInteractionReceipt, { provenTimeout: 300 });
266
257
 
267
258
  // 5. Consume L2 to L1 message by calling uniswapPortal.swap_private()
268
259
  logger.info('Execute withdraw and swap on the uniswapPortal!');
269
260
  const daiL1BalanceOfPortalBeforeSwap = await daiCrossChainHarness.getL1BalanceOf(
270
261
  daiCrossChainHarness.tokenPortalAddress,
271
262
  );
272
- const swapResult = await computeL2ToL1MembershipWitness(
273
- aztecNode,
274
- l2UniswapInteractionReceipt.blockNumber!,
275
- swapPrivateLeaf,
276
- );
277
- const withdrawResult = await computeL2ToL1MembershipWitness(
278
- aztecNode,
279
- l2UniswapInteractionReceipt.blockNumber!,
280
- withdrawLeaf,
281
- );
263
+ const swapResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, swapPrivateLeaf);
264
+ const withdrawResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, withdrawLeaf);
282
265
 
283
266
  const swapPrivateL2MessageIndex = swapResult!.leafIndex;
284
267
  const swapPrivateSiblingPath = swapResult!.siblingPath;
@@ -287,7 +270,7 @@ export const uniswapL1L2TestSuite = (
287
270
  const withdrawSiblingPath = withdrawResult!.siblingPath;
288
271
 
289
272
  const withdrawMessageMetadata = {
290
- _l2BlockNumber: BigInt(l2UniswapInteractionReceipt.blockNumber!),
273
+ _epoch: BigInt(epoch),
291
274
  _leafIndex: BigInt(withdrawL2MessageIndex),
292
275
  _path: withdrawSiblingPath
293
276
  .toBufferArray()
@@ -295,7 +278,7 @@ export const uniswapL1L2TestSuite = (
295
278
  };
296
279
 
297
280
  const swapPrivateMessageMetadata = {
298
- _l2BlockNumber: BigInt(l2UniswapInteractionReceipt.blockNumber!),
281
+ _epoch: BigInt(epoch),
299
282
  _leafIndex: BigInt(swapPrivateL2MessageIndex),
300
283
  _path: swapPrivateSiblingPath
301
284
  .toBufferArray()
@@ -442,10 +425,10 @@ export const uniswapL1L2TestSuite = (
442
425
  // ownerEthAddress,
443
426
  // nonceForSwap,
444
427
  // );
445
- // await ownerWallet.setPublicAuthWit({ caller: sponsorAddress, action }, true).send().wait();
428
+ // await ownerWallet.setPublicAuthWit({ caller: sponsorAddress, action }, true).send();
446
429
 
447
430
  // // 4.2 Call swap_public from user2 on behalf of owner
448
- // const uniswapL2Interaction = await action.send().wait();
431
+ // const uniswapL2Interaction = await action.send();
449
432
 
450
433
  // const swapPublicContent = sha256ToField([
451
434
  // Buffer.from(
@@ -506,7 +489,7 @@ export const uniswapL1L2TestSuite = (
506
489
  // );
507
490
 
508
491
  // const withdrawMessageMetadata = {
509
- // _l2BlockNumber: BigInt(uniswapL2Interaction.blockNumber!),
492
+ // _epoch: epoch,
510
493
  // _leafIndex: BigInt(withdrawL2MessageIndex),
511
494
  // _path: withdrawSiblingPath
512
495
  // .toBufferArray()
@@ -514,7 +497,7 @@ export const uniswapL1L2TestSuite = (
514
497
  // };
515
498
 
516
499
  // const swapPrivateMessageMetadata = {
517
- // _l2BlockNumber: BigInt(uniswapL2Interaction.blockNumber!),
500
+ // _epoch: epoch,
518
501
  // _leafIndex: BigInt(swapPrivateL2MessageIndex),
519
502
  // _path: swapPrivateSiblingPath
520
503
  // .toBufferArray()
@@ -663,8 +646,7 @@ export const uniswapL1L2TestSuite = (
663
646
  Fr.random(),
664
647
  ownerEthAddress,
665
648
  )
666
- .send({ from: ownerAddress, authWitnesses: [transferToPublicAuthwith] })
667
- .wait(),
649
+ .send({ from: ownerAddress, authWitnesses: [transferToPublicAuthwith] }),
668
650
  ).rejects.toThrow('Assertion failed: input_asset address is not the same as seen in the bridge contract');
669
651
  });
670
652
 
@@ -689,7 +671,7 @@ export const uniswapL1L2TestSuite = (
689
671
  },
690
672
  true,
691
673
  );
692
- await validateActionInteraction.send().wait();
674
+ await validateActionInteraction.send();
693
675
 
694
676
  // No approval to call `swap` but should work even without it:
695
677
  const [_, secretHashForDepositingSwappedDai] = await generateClaimSecret();
@@ -708,8 +690,7 @@ export const uniswapL1L2TestSuite = (
708
690
  ownerEthAddress,
709
691
  Fr.ZERO, // nonce for swap -> doesn't matter
710
692
  )
711
- .send({ from: ownerAddress })
712
- .wait();
693
+ .send({ from: ownerAddress });
713
694
  // check weth balance of owner on L2 (we first bridged `wethAmountToBridge` into L2 and now withdrew it!)
714
695
  await wethCrossChainHarness.expectPublicBalanceOnL2(ownerAddress, 0n);
715
696
  });
@@ -739,7 +720,7 @@ export const uniswapL1L2TestSuite = (
739
720
  { caller: approvedUser, action },
740
721
  true,
741
722
  );
742
- await validateActionInteraction.send().wait();
723
+ await validateActionInteraction.send();
743
724
 
744
725
  await expect(action.simulate({ from: sponsorAddress })).rejects.toThrow(/unauthorized/);
745
726
  });
@@ -761,7 +742,7 @@ export const uniswapL1L2TestSuite = (
761
742
  },
762
743
  true,
763
744
  );
764
- await validateActionInteraction.send().wait();
745
+ await validateActionInteraction.send();
765
746
 
766
747
  await expect(
767
748
  uniswapL2Contract.methods
@@ -818,8 +799,7 @@ export const uniswapL1L2TestSuite = (
818
799
  secretHashForDepositingSwappedDai,
819
800
  ownerEthAddress,
820
801
  )
821
- .send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] })
822
- .wait();
802
+ .send({ from: ownerAddress, authWitnesses: [transferToPublicAuhtwit] });
823
803
 
824
804
  const swapPrivateContent = sha256ToField([
825
805
  Buffer.from(
@@ -858,12 +838,10 @@ export const uniswapL1L2TestSuite = (
858
838
  chainId: new Fr(l1Client.chain.id),
859
839
  });
860
840
 
861
- const swapResult = await computeL2ToL1MembershipWitness(aztecNode, withdrawReceipt.blockNumber!, swapPrivateLeaf);
862
- const withdrawResult = await computeL2ToL1MembershipWitness(
863
- aztecNode,
864
- withdrawReceipt.blockNumber!,
865
- withdrawLeaf,
866
- );
841
+ const block = await aztecNode.getBlock(withdrawReceipt.blockNumber!);
842
+ const epoch = await rollup.getEpochNumberForCheckpoint(block!.checkpointNumber);
843
+ const swapResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, swapPrivateLeaf);
844
+ const withdrawResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, withdrawLeaf);
867
845
 
868
846
  const swapPrivateL2MessageIndex = swapResult!.leafIndex;
869
847
  const swapPrivateSiblingPath = swapResult!.siblingPath;
@@ -872,7 +850,7 @@ export const uniswapL1L2TestSuite = (
872
850
  const withdrawSiblingPath = withdrawResult!.siblingPath;
873
851
 
874
852
  const withdrawMessageMetadata = {
875
- _l2BlockNumber: BigInt(withdrawReceipt.blockNumber!),
853
+ _epoch: BigInt(epoch),
876
854
  _leafIndex: BigInt(withdrawL2MessageIndex),
877
855
  _path: withdrawSiblingPath
878
856
  .toBufferArray()
@@ -880,7 +858,7 @@ export const uniswapL1L2TestSuite = (
880
858
  };
881
859
 
882
860
  const swapPrivateMessageMetadata = {
883
- _l2BlockNumber: BigInt(withdrawReceipt.blockNumber!),
861
+ _epoch: BigInt(epoch),
884
862
  _leafIndex: BigInt(swapPrivateL2MessageIndex),
885
863
  _path: swapPrivateSiblingPath
886
864
  .toBufferArray()
@@ -890,8 +868,9 @@ export const uniswapL1L2TestSuite = (
890
868
  // ensure that user's funds were burnt
891
869
  await wethCrossChainHarness.expectPrivateBalanceOnL2(ownerAddress, wethL2BalanceBeforeSwap - wethAmountToBridge);
892
870
 
893
- // Since the outbox is only consumable when the block is proven, we need to set the block to be proven
894
- await cheatCodes.rollup.markAsProven(await rollup.getBlockNumber());
871
+ // Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch.
872
+ await cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1));
873
+ await waitForProven(aztecNode, withdrawReceipt, { provenTimeout: 300 });
895
874
 
896
875
  // On L1 call swap_public!
897
876
  logger.info('call swap_public on L1');
@@ -932,7 +911,7 @@ export const uniswapL1L2TestSuite = (
932
911
  },
933
912
  true,
934
913
  );
935
- await validateActionInteraction.send().wait();
914
+ await validateActionInteraction.send();
936
915
 
937
916
  // Call swap_public on L2
938
917
  const secretHashForDepositingSwappedDai = Fr.random();
@@ -950,8 +929,7 @@ export const uniswapL1L2TestSuite = (
950
929
  ownerEthAddress,
951
930
  Fr.ZERO,
952
931
  )
953
- .send({ from: ownerAddress })
954
- .wait();
932
+ .send({ from: ownerAddress });
955
933
 
956
934
  const swapPublicContent = sha256ToField([
957
935
  Buffer.from(
@@ -993,12 +971,10 @@ export const uniswapL1L2TestSuite = (
993
971
  chainId: new Fr(l1Client.chain.id),
994
972
  });
995
973
 
996
- const swapResult = await computeL2ToL1MembershipWitness(aztecNode, withdrawReceipt.blockNumber!, swapPublicLeaf);
997
- const withdrawResult = await computeL2ToL1MembershipWitness(
998
- aztecNode,
999
- withdrawReceipt.blockNumber!,
1000
- withdrawLeaf,
1001
- );
974
+ const block = await aztecNode.getBlock(withdrawReceipt.blockNumber!);
975
+ const epoch = await rollup.getEpochNumberForCheckpoint(block!.checkpointNumber);
976
+ const swapResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, swapPublicLeaf);
977
+ const withdrawResult = await computeL2ToL1MembershipWitness(aztecNode, epoch, withdrawLeaf);
1002
978
 
1003
979
  const swapPublicL2MessageIndex = swapResult!.leafIndex;
1004
980
  const swapPublicSiblingPath = swapResult!.siblingPath;
@@ -1007,7 +983,7 @@ export const uniswapL1L2TestSuite = (
1007
983
  const withdrawSiblingPath = withdrawResult!.siblingPath;
1008
984
 
1009
985
  const withdrawMessageMetadata = {
1010
- _l2BlockNumber: BigInt(withdrawReceipt.blockNumber!),
986
+ _epoch: BigInt(epoch),
1011
987
  _leafIndex: BigInt(withdrawL2MessageIndex),
1012
988
  _path: withdrawSiblingPath
1013
989
  .toBufferArray()
@@ -1015,7 +991,7 @@ export const uniswapL1L2TestSuite = (
1015
991
  };
1016
992
 
1017
993
  const swapPublicMessageMetadata = {
1018
- _l2BlockNumber: BigInt(withdrawReceipt.blockNumber!),
994
+ _epoch: BigInt(epoch),
1019
995
  _leafIndex: BigInt(swapPublicL2MessageIndex),
1020
996
  _path: swapPublicSiblingPath
1021
997
  .toBufferArray()
@@ -1025,8 +1001,9 @@ export const uniswapL1L2TestSuite = (
1025
1001
  // check weth balance of owner on L2 (we first bridged `wethAmountToBridge` into L2 and now withdrew it!)
1026
1002
  await wethCrossChainHarness.expectPublicBalanceOnL2(ownerAddress, 0n);
1027
1003
 
1028
- // Since the outbox is only consumable when the block is proven, we need to set the block to be proven
1029
- await cheatCodes.rollup.markAsProven(await rollup.getBlockNumber());
1004
+ // Since the outbox is only consumable when the epoch is proven, we need to advance to the next epoch.
1005
+ await cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1));
1006
+ await waitForProven(aztecNode, withdrawReceipt, { provenTimeout: 300 });
1030
1007
 
1031
1008
  // Call swap_private on L1
1032
1009
  logger.info('Execute withdraw and swap on the uniswapPortal!');
@@ -2,8 +2,9 @@
2
2
  import { AztecAddress } from '@aztec/aztec.js/addresses';
3
3
  import { Fr } from '@aztec/aztec.js/fields';
4
4
  import { CheatCodes } from '@aztec/aztec/testing';
5
- import type { RollupContract } from '@aztec/ethereum';
6
- import { pedersenHash } from '@aztec/foundation/crypto';
5
+ import type { RollupContract } from '@aztec/ethereum/contracts';
6
+ import { SlotNumber } from '@aztec/foundation/branded-types';
7
+ import { poseidon2Hash } from '@aztec/foundation/crypto/poseidon';
7
8
  import type { TestDateProvider } from '@aztec/foundation/timer';
8
9
  import type { LendingContract } from '@aztec/noir-contracts.js/Lending';
9
10
 
@@ -28,7 +29,7 @@ export class LendingAccount {
28
29
  * @returns Key in public space
29
30
  */
30
31
  public key() {
31
- return pedersenHash([this.address, this.secret]);
32
+ return poseidon2Hash([this.address, this.secret]);
32
33
  }
33
34
  }
34
35
 
@@ -103,7 +104,8 @@ export class LendingSimulator {
103
104
  }
104
105
 
105
106
  const slot = await this.rollup.getSlotAt(BigInt(await this.cc.eth.timestamp()));
106
- const ts = Number(await this.rollup.getTimestampForSlot(slot + BigInt(diff)));
107
+ const targetSlot = SlotNumber(slot + diff);
108
+ const ts = Number(await this.rollup.getTimestampForSlot(targetSlot));
107
109
  const timeDiff = ts - this.time;
108
110
  this.time = ts;
109
111
 
@@ -112,7 +114,7 @@ export class LendingSimulator {
112
114
  if (dateProvider) {
113
115
  dateProvider.setTime(this.time * 1000);
114
116
  }
115
- await this.cc.rollup.markAsProven(await this.rollup.getBlockNumber());
117
+ await this.cc.rollup.markAsProven(await this.rollup.getCheckpointNumber());
116
118
  this.accumulator = muldivDown(this.accumulator, computeMultiplier(this.rate, BigInt(timeDiff)), BASE);
117
119
  }
118
120
 
@@ -61,10 +61,17 @@ The export is important there. The `AZTEC_DOCKER_IMAGE` env var is used as both:
61
61
  - the containers for the aztec infrastructure (validators, provers, etc)
62
62
 
63
63
  # Deploy Metrics
64
+
64
65
  ```bash
65
66
  ./spartan/bootstrap.sh metrics-kind
66
67
  ```
67
68
 
69
+ # Install Chaos Mesh
70
+
71
+ ```bash
72
+ ./spartan/bootstrap.sh chaos-mesh
73
+ ```
74
+
68
75
  # Deploy stuff
69
76
 
70
77
  ```bash
@@ -1,17 +1,19 @@
1
1
  import { generateSchnorrAccounts } from '@aztec/accounts/testing';
2
2
  import { AztecAddress } from '@aztec/aztec.js/addresses';
3
+ import { NO_WAIT } from '@aztec/aztec.js/contracts';
3
4
  import { L1FeeJuicePortalManager } from '@aztec/aztec.js/ethereum';
4
5
  import { FeeJuicePaymentMethodWithClaim } from '@aztec/aztec.js/fee';
5
6
  import { type FeePaymentMethod, SponsoredFeePaymentMethod } from '@aztec/aztec.js/fee';
6
7
  import { Fr } from '@aztec/aztec.js/fields';
7
- import { type AztecNode, createAztecNodeClient } from '@aztec/aztec.js/node';
8
+ import { type AztecNode, createAztecNodeClient, waitForTx } from '@aztec/aztec.js/node';
8
9
  import type { Wallet } from '@aztec/aztec.js/wallet';
9
- import { createEthereumChain, createExtendedL1Client } from '@aztec/ethereum';
10
+ import { createEthereumChain } from '@aztec/ethereum/chain';
11
+ import { createExtendedL1Client } from '@aztec/ethereum/client';
10
12
  import type { Logger } from '@aztec/foundation/log';
11
13
  import { retryUntil } from '@aztec/foundation/retry';
12
14
  import { TokenContract } from '@aztec/noir-contracts.js/Token';
13
15
  import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
14
- import { TestWallet, proveInteraction, registerInitialSandboxAccountsInWallet } from '@aztec/test-wallet/server';
16
+ import { TestWallet, proveInteraction, registerInitialLocalNetworkAccountsInWallet } from '@aztec/test-wallet/server';
15
17
 
16
18
  import { getACVMConfig } from '../fixtures/get_acvm_config.js';
17
19
  import { getBBConfig } from '../fixtures/get_bb_config.js';
@@ -28,6 +30,11 @@ export interface TestAccounts {
28
30
  tokenAddress: AztecAddress;
29
31
  }
30
32
 
33
+ export type TestAccountsWithoutTokens = Omit<
34
+ TestAccounts,
35
+ 'tokenAddress' | 'tokenContract' | 'tokenName' | 'tokenAdminAddress'
36
+ >;
37
+
31
38
  const TOKEN_NAME = 'USDC';
32
39
  const TOKEN_SYMBOL = 'USD';
33
40
  const TOKEN_DECIMALS = 18n;
@@ -42,14 +49,14 @@ export async function setupTestAccountsWithTokens(
42
49
  const aztecNode = createAztecNodeClient(nodeUrl);
43
50
  const wallet = await TestWallet.create(aztecNode);
44
51
 
45
- const [recipientAccount, ...accounts] = (await registerInitialSandboxAccountsInWallet(wallet)).slice(
52
+ const [recipientAccount, ...accounts] = (await registerInitialLocalNetworkAccountsInWallet(wallet)).slice(
46
53
  0,
47
54
  ACCOUNT_COUNT + 1,
48
55
  );
49
56
 
50
57
  const tokenAdmin = accounts[0];
51
58
  const tokenAddress = await deployTokenAndMint(wallet, accounts, tokenAdmin, mintAmount, undefined, logger);
52
- const tokenContract = await TokenContract.at(tokenAddress, wallet);
59
+ const tokenContract = TokenContract.at(tokenAddress, wallet);
53
60
 
54
61
  return {
55
62
  aztecNode,
@@ -63,7 +70,7 @@ export async function setupTestAccountsWithTokens(
63
70
  };
64
71
  }
65
72
 
66
- export async function deploySponsoredTestAccounts(
73
+ export async function deploySponsoredTestAccountsWithTokens(
67
74
  wallet: TestWallet,
68
75
  aztecNode: AztecNode,
69
76
  mintAmount: bigint,
@@ -78,11 +85,11 @@ export async function deploySponsoredTestAccounts(
78
85
 
79
86
  const paymentMethod = new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
80
87
  const recipientDeployMethod = await recipientAccount.getDeployMethod();
81
- await recipientDeployMethod.send({ from: AztecAddress.ZERO, fee: { paymentMethod } }).wait({ timeout: 2400 });
88
+ await recipientDeployMethod.send({ from: AztecAddress.ZERO, fee: { paymentMethod }, wait: { timeout: 2400 } });
82
89
  await Promise.all(
83
90
  fundedAccounts.map(async a => {
84
91
  const deployMethod = await a.getDeployMethod();
85
- await deployMethod.send({ from: AztecAddress.ZERO, fee: { paymentMethod } }).wait({ timeout: 2400 }); // increase timeout on purpose in order to account for two empty epochs
92
+ await deployMethod.send({ from: AztecAddress.ZERO, fee: { paymentMethod }, wait: { timeout: 2400 } }); // increase timeout on purpose in order to account for two empty epochs
86
93
  logger.info(`Account deployed at ${a.address}`);
87
94
  }),
88
95
  );
@@ -96,7 +103,7 @@ export async function deploySponsoredTestAccounts(
96
103
  new SponsoredFeePaymentMethod(await getSponsoredFPCAddress()),
97
104
  logger,
98
105
  );
99
- const tokenContract = await TokenContract.at(tokenAddress, wallet);
106
+ const tokenContract = TokenContract.at(tokenAddress, wallet);
100
107
 
101
108
  return {
102
109
  aztecNode,
@@ -110,6 +117,80 @@ export async function deploySponsoredTestAccounts(
110
117
  };
111
118
  }
112
119
 
120
+ async function deployAccountWithDiagnostics(
121
+ account: { getDeployMethod: () => Promise<{ send: (opts: any) => any }>; address: any },
122
+ paymentMethod: SponsoredFeePaymentMethod,
123
+ aztecNode: AztecNode,
124
+ logger: Logger,
125
+ accountLabel: string,
126
+ ): Promise<void> {
127
+ const deployMethod = await account.getDeployMethod();
128
+ let txHash;
129
+ try {
130
+ txHash = await deployMethod.send({ from: AztecAddress.ZERO, fee: { paymentMethod }, wait: NO_WAIT });
131
+ await waitForTx(aztecNode, txHash, { timeout: 2400 });
132
+ logger.info(`${accountLabel} deployed at ${account.address}`);
133
+ } catch (error) {
134
+ const blockNumber = await aztecNode.getBlockNumber();
135
+ let receipt;
136
+ try {
137
+ receipt = await aztecNode.getTxReceipt(txHash);
138
+ } catch {
139
+ receipt = 'unavailable';
140
+ }
141
+ logger.error(`${accountLabel} deployment failed`, {
142
+ txHash: txHash.toString(),
143
+ receipt: JSON.stringify(receipt),
144
+ currentBlockNumber: blockNumber,
145
+ error: String(error),
146
+ });
147
+ throw error;
148
+ }
149
+ }
150
+
151
+ async function deployAccountsInBatches(
152
+ accounts: { getDeployMethod: () => Promise<{ send: (opts: any) => any }>; address: any }[],
153
+ paymentMethod: SponsoredFeePaymentMethod,
154
+ aztecNode: AztecNode,
155
+ logger: Logger,
156
+ labelPrefix: string,
157
+ batchSize = 2,
158
+ ): Promise<void> {
159
+ for (let i = 0; i < accounts.length; i += batchSize) {
160
+ const batch = accounts.slice(i, i + batchSize);
161
+ await Promise.all(
162
+ batch.map((account, idx) =>
163
+ deployAccountWithDiagnostics(account, paymentMethod, aztecNode, logger, `${labelPrefix}${i + idx + 1}`),
164
+ ),
165
+ );
166
+ }
167
+ }
168
+
169
+ export async function deploySponsoredTestAccounts(
170
+ wallet: TestWallet,
171
+ aztecNode: AztecNode,
172
+ logger: Logger,
173
+ numberOfFundedWallets = 1,
174
+ ): Promise<TestAccountsWithoutTokens> {
175
+ const [recipient, ...funded] = await generateSchnorrAccounts(numberOfFundedWallets + 1);
176
+ const recipientAccount = await wallet.createSchnorrAccount(recipient.secret, recipient.salt);
177
+ const fundedAccounts = await Promise.all(funded.map(a => wallet.createSchnorrAccount(a.secret, a.salt)));
178
+
179
+ await registerSponsoredFPC(wallet);
180
+
181
+ const paymentMethod = new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
182
+
183
+ await deployAccountWithDiagnostics(recipientAccount, paymentMethod, aztecNode, logger, 'Recipient account');
184
+ await deployAccountsInBatches(fundedAccounts, paymentMethod, aztecNode, logger, 'Funded account ', 2);
185
+
186
+ return {
187
+ aztecNode,
188
+ wallet,
189
+ accounts: fundedAccounts.map(acc => acc.address),
190
+ recipientAddress: recipientAccount.address,
191
+ };
192
+ }
193
+
113
194
  export async function deployTestAccountsWithTokens(
114
195
  nodeUrl: string,
115
196
  l1RpcUrls: string[],
@@ -138,7 +219,7 @@ export async function deployTestAccountsWithTokens(
138
219
  fundedAccounts.map(async (a, i) => {
139
220
  const paymentMethod = new FeeJuicePaymentMethodWithClaim(a.address, claims[i]);
140
221
  const deployMethod = await a.getDeployMethod();
141
- await deployMethod.send({ from: AztecAddress.ZERO, fee: { paymentMethod } }).wait();
222
+ await deployMethod.send({ from: AztecAddress.ZERO, fee: { paymentMethod } });
142
223
  logger.info(`Account deployed at ${a.address}`);
143
224
  }),
144
225
  );
@@ -152,7 +233,7 @@ export async function deployTestAccountsWithTokens(
152
233
  undefined,
153
234
  logger,
154
235
  );
155
- const tokenContract = await TokenContract.at(tokenAddress, wallet);
236
+ const tokenContract = TokenContract.at(tokenAddress, wallet);
156
237
 
157
238
  return {
158
239
  aztecNode,
@@ -214,25 +295,29 @@ async function deployTokenAndMint(
214
295
  logger: Logger,
215
296
  ) {
216
297
  logger.verbose(`Deploying TokenContract...`);
217
- const tokenContract = await TokenContract.deploy(wallet, admin, TOKEN_NAME, TOKEN_SYMBOL, TOKEN_DECIMALS)
218
- .send({
219
- from: admin,
220
- fee: {
221
- paymentMethod,
222
- },
223
- })
224
- .deployed({ timeout: 600 });
298
+ const { contract: tokenContract } = await TokenContract.deploy(
299
+ wallet,
300
+ admin,
301
+ TOKEN_NAME,
302
+ TOKEN_SYMBOL,
303
+ TOKEN_DECIMALS,
304
+ ).send({
305
+ from: admin,
306
+ fee: {
307
+ paymentMethod,
308
+ },
309
+ wait: { timeout: 600, returnReceipt: true },
310
+ });
225
311
 
226
312
  const tokenAddress = tokenContract.address;
227
313
 
228
314
  logger.verbose(`Minting ${mintAmount} public assets to the ${accounts.length} accounts...`);
229
315
 
230
316
  await Promise.all(
231
- accounts.map(async acc =>
232
- (await TokenContract.at(tokenAddress, wallet)).methods
233
- .mint_to_public(acc, mintAmount)
234
- .send({ from: admin, fee: { paymentMethod } })
235
- .wait({ timeout: 600 }),
317
+ accounts.map(acc =>
318
+ TokenContract.at(tokenAddress, wallet)
319
+ .methods.mint_to_public(acc, mintAmount)
320
+ .send({ from: admin, fee: { paymentMethod }, wait: { timeout: 600 } }),
236
321
  ),
237
322
  );
238
323
 
@@ -260,8 +345,8 @@ export async function performTransfers({
260
345
  // Default to sponsored fee payment if no fee method is provided
261
346
  const defaultFeePaymentMethod = feePaymentMethod || new SponsoredFeePaymentMethod(await getSponsoredFPCAddress());
262
347
  for (let i = 0; i < rounds; i++) {
263
- const txs = testAccounts.accounts.map(async acc => {
264
- const token = await TokenContract.at(testAccounts.tokenAddress, testAccounts.wallet);
348
+ const txs = testAccounts.accounts.map(acc => {
349
+ const token = TokenContract.at(testAccounts.tokenAddress, testAccounts.wallet);
265
350
  return proveInteraction(wallet, token.methods.transfer_in_public(acc, recipient, transferAmount, 0), {
266
351
  from: acc,
267
352
  fee: {
@@ -272,17 +357,23 @@ export async function performTransfers({
272
357
 
273
358
  const provenTxs = await Promise.all(txs);
274
359
 
275
- await Promise.all(provenTxs.map(t => t.send().wait({ timeout: 600 })));
360
+ await Promise.all(provenTxs.map(t => t.send({ wait: { timeout: 600 } })));
276
361
 
277
362
  logger.info(`Completed round ${i + 1} / ${rounds}`);
278
363
  }
279
364
  }
280
365
 
366
+ export type WalletWrapper = {
367
+ wallet: TestWallet;
368
+ aztecNode: AztecNode;
369
+ cleanup: () => Promise<void>;
370
+ };
371
+
281
372
  export async function createWalletAndAztecNodeClient(
282
373
  nodeUrl: string,
283
374
  proverEnabled: boolean,
284
375
  logger: Logger,
285
- ): Promise<{ wallet: TestWallet; aztecNode: AztecNode; cleanup: () => Promise<void> }> {
376
+ ): Promise<WalletWrapper> {
286
377
  const aztecNode = createAztecNodeClient(nodeUrl);
287
378
  const [bbConfig, acvmConfig] = await Promise.all([getBBConfig(logger), getACVMConfig(logger)]);
288
379
  const pxeConfig = {