@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,4 +1,7 @@
1
+ import type { InitialAccountData } from '@aztec/accounts/testing';
2
+ import type { Archiver } from '@aztec/archiver';
1
3
  import { type AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
4
+ import { getAccountContractAddress } from '@aztec/aztec.js/account';
2
5
  import { getTimestampRangeForEpoch } from '@aztec/aztec.js/block';
3
6
  import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
4
7
  import { Fr } from '@aztec/aztec.js/fields';
@@ -9,33 +12,34 @@ import { EpochCache } from '@aztec/epoch-cache';
9
12
  import { createExtendedL1Client } from '@aztec/ethereum/client';
10
13
  import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
11
14
  import { RollupContract } from '@aztec/ethereum/contracts';
12
- import { ChainMonitor, DelayedTxUtils, type Delayer, waitUntilL1Timestamp, withDelayer } from '@aztec/ethereum/test';
15
+ import { Delayer, createDelayer, waitUntilL1Timestamp, wrapClientWithDelayer } from '@aztec/ethereum/l1-tx-utils';
16
+ import { ChainMonitor } from '@aztec/ethereum/test';
13
17
  import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
14
18
  import { BlockNumber, CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
15
19
  import { SecretValue } from '@aztec/foundation/config';
16
20
  import { randomBytes } from '@aztec/foundation/crypto/random';
17
- import { withLogNameSuffix } from '@aztec/foundation/log';
21
+ import { withLoggerBindings } from '@aztec/foundation/log/server';
18
22
  import { retryUntil } from '@aztec/foundation/retry';
19
23
  import { sleep } from '@aztec/foundation/sleep';
20
24
  import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
25
+ import { TestContract } from '@aztec/noir-test-contracts.js/Test';
21
26
  import { getMockPubSubP2PServiceFactory } from '@aztec/p2p/test-helpers';
22
- import { ProverNode, type ProverNodeConfig, ProverNodePublisher } from '@aztec/prover-node';
23
- import type { TestProverNode } from '@aztec/prover-node/test';
24
- import {
25
- type SequencerClient,
26
- type SequencerEvents,
27
- type SequencerPublisher,
28
- SequencerState,
29
- } from '@aztec/sequencer-client';
30
- import type { TestSequencerClient } from '@aztec/sequencer-client/test';
27
+ import type { ProverNodeConfig } from '@aztec/prover-node';
28
+ import type { PXEConfig } from '@aztec/pxe/config';
29
+ import { type SequencerClient, type SequencerEvents, SequencerState } from '@aztec/sequencer-client';
31
30
  import { type BlockParameter, EthAddress } from '@aztec/stdlib/block';
32
31
  import { type L1RollupConstants, getProofSubmissionDeadlineTimestamp } from '@aztec/stdlib/epoch-helpers';
33
32
  import { tryStop } from '@aztec/stdlib/interfaces/server';
33
+ import type { SlashingProtectionDatabase } from '@aztec/validator-ha-signer/types';
34
34
 
35
35
  import { join } from 'path';
36
36
  import type { Hex } from 'viem';
37
37
  import { privateKeyToAccount } from 'viem/accounts';
38
38
 
39
+ import {
40
+ SCHNORR_HARDCODED_PRIVATE_KEY,
41
+ SchnorrHardcodedKeyAccountContract,
42
+ } from '../fixtures/schnorr_hardcoded_account_contract.js';
39
43
  import {
40
44
  type EndToEndContext,
41
45
  type SetupOptions,
@@ -43,13 +47,25 @@ import {
43
47
  getPrivateKeyFromIndex,
44
48
  setup,
45
49
  } from '../fixtures/utils.js';
50
+ import type { TestWallet } from '../test-wallet/test_wallet.js';
46
51
 
47
- export const WORLD_STATE_BLOCK_HISTORY = 2;
52
+ export const WORLD_STATE_CHECKPOINT_HISTORY = 2;
48
53
  export const WORLD_STATE_BLOCK_CHECK_INTERVAL = 50;
49
54
  export const ARCHIVER_POLL_INTERVAL = 50;
50
55
  export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
51
56
 
52
- export type EpochsTestOpts = Partial<SetupOptions> & { numberOfAccounts?: number };
57
+ export type EpochsTestOpts = Partial<SetupOptions> & {
58
+ numberOfAccounts?: number;
59
+ pxeOpts?: Partial<PXEConfig>;
60
+ aztecSlotDurationInL1Slots?: number;
61
+ /** Skip creating/registering the hardcoded account during setup (for tests that handle accounts themselves). */
62
+ skipHardcodedAccount?: boolean;
63
+ /**
64
+ * Force the hardcoded-account fast-path even when an initial sequencer is running. Useful for
65
+ * tests with tight per-block gas budgets that can't fit a full account-deploy tx.
66
+ */
67
+ useHardcodedAccount?: boolean;
68
+ };
53
69
 
54
70
  export type TrackedSequencerEvent = {
55
71
  [K in keyof SequencerEvents]: Parameters<SequencerEvents[K]>[0] & {
@@ -75,7 +91,7 @@ export class EpochsTestContext {
75
91
  public proverDelayer!: Delayer;
76
92
  public sequencerDelayer!: Delayer;
77
93
 
78
- public proverNodes: ProverNode[] = [];
94
+ public proverNodes: AztecNodeService[] = [];
79
95
  public nodes: AztecNodeService[] = [];
80
96
 
81
97
  public epochDuration!: number;
@@ -94,7 +110,7 @@ export class EpochsTestContext {
94
110
  ? parseInt(process.env.L1_BLOCK_TIME)
95
111
  : DEFAULT_L1_BLOCK_TIME;
96
112
  const ethereumSlotDuration = opts.ethereumSlotDuration ?? envEthereumSlotDuration;
97
- const aztecSlotDuration = opts.aztecSlotDuration ?? ethereumSlotDuration * 2;
113
+ const aztecSlotDuration = opts.aztecSlotDuration ?? (opts.aztecSlotDurationInL1Slots ?? 2) * ethereumSlotDuration;
98
114
  const aztecEpochDuration = opts.aztecEpochDuration ?? 6;
99
115
  const aztecProofSubmissionEpochs = opts.aztecProofSubmissionEpochs ?? 1;
100
116
  const l1PublishingTime = opts.l1PublishingTime ?? 1;
@@ -119,34 +135,53 @@ export class EpochsTestContext {
119
135
  this.L1_BLOCK_TIME_IN_S = ethereumSlotDuration;
120
136
  this.L2_SLOT_DURATION_IN_S = aztecSlotDuration;
121
137
 
138
+ // Auto-create a hardcoded account funded via genesis when:
139
+ // - skipInitialSequencer is set (no sequencer to deploy on-chain), or
140
+ // - useHardcodedAccount is explicitly requested (e.g. tight per-block gas budgets that
141
+ // can't fit a full account-deploy tx).
142
+ const useHardcodedAccount = (opts.skipInitialSequencer || opts.useHardcodedAccount) && !opts.skipHardcodedAccount;
143
+ let hardcodedAccountData: InitialAccountData | undefined;
144
+ if (useHardcodedAccount) {
145
+ hardcodedAccountData = await EpochsTestContext.getHardcodedAccountData(Fr.random(), Fr.random());
146
+ }
147
+
122
148
  // Set up system without any account nor protocol contracts
123
149
  // and with faster block times and shorter epochs.
124
- const context = await setup(opts.numberOfAccounts ?? 0, {
125
- automineL1Setup: true,
126
- checkIntervalMs: 50,
127
- archiverPollingIntervalMS: ARCHIVER_POLL_INTERVAL,
128
- worldStateBlockCheckIntervalMS: WORLD_STATE_BLOCK_CHECK_INTERVAL,
129
- aztecEpochDuration,
130
- aztecSlotDuration,
131
- ethereumSlotDuration,
132
- aztecProofSubmissionEpochs,
133
- aztecTargetCommitteeSize: opts.initialValidators?.length ?? 0,
134
- minTxsPerBlock: 0,
135
- realProofs: false,
136
- startProverNode: true,
137
- proverTestDelayMs: opts.proverTestDelayMs ?? 0,
138
- // We use numeric incremental prover ids for simplicity, but we can switch to
139
- // using the prover's eth address if the proverId is used for something in the rollup contract
140
- // Use numeric EthAddress for deterministic prover id
141
- proverId: EthAddress.fromNumber(1),
142
- worldStateBlockHistory: WORLD_STATE_BLOCK_HISTORY,
143
- exitDelaySeconds: DefaultL1ContractsConfig.exitDelaySeconds,
144
- slasherFlavor: 'none',
145
- l1PublishingTime,
146
- ...opts,
147
- });
150
+ const context = await setup(
151
+ useHardcodedAccount ? 0 : (opts.numberOfAccounts ?? 0),
152
+ {
153
+ automineL1Setup: true,
154
+ checkIntervalMs: 50,
155
+ archiverPollingIntervalMS: ARCHIVER_POLL_INTERVAL,
156
+ worldStateBlockCheckIntervalMS: WORLD_STATE_BLOCK_CHECK_INTERVAL,
157
+ aztecEpochDuration,
158
+ aztecSlotDuration,
159
+ ethereumSlotDuration,
160
+ aztecProofSubmissionEpochs,
161
+ aztecTargetCommitteeSize: opts.initialValidators?.length ?? 0,
162
+ minTxsPerBlock: 0,
163
+ realProofs: false,
164
+ startProverNode: true,
165
+ proverTestDelayMs: opts.proverTestDelayMs ?? 0,
166
+ proverId: EthAddress.fromNumber(1),
167
+ worldStateCheckpointHistory: WORLD_STATE_CHECKPOINT_HISTORY,
168
+ exitDelaySeconds: DefaultL1ContractsConfig.exitDelaySeconds,
169
+ slasherEnabled: false,
170
+ l1PublishingTime,
171
+ ...opts,
172
+ ...(hardcodedAccountData ? { initialFundedAccounts: [hardcodedAccountData], numberOfAccounts: 0 } : {}),
173
+ },
174
+ // Use checkpointed chain tip for PXE by default to avoid issues with blocks being dropped due to pruned anchor blocks.
175
+ // Can be overridden via opts.pxeOpts.
176
+ { syncChainTip: 'checkpointed', ...opts.pxeOpts },
177
+ );
148
178
 
149
179
  this.context = context;
180
+
181
+ // Register the hardcoded account in PXE (local only, no on-chain deployment needed).
182
+ if (hardcodedAccountData) {
183
+ await this.registerHardcodedAccount(hardcodedAccountData);
184
+ }
150
185
  this.proverNodes = context.proverNode ? [context.proverNode] : [];
151
186
  this.nodes = context.aztecNode ? [context.aztecNode as AztecNodeService] : [];
152
187
  this.logger = context.logger;
@@ -157,17 +192,8 @@ export class EpochsTestContext {
157
192
  // Loop that tracks L1 and L2 block numbers and logs whenever there's a new one.
158
193
  this.monitor = new ChainMonitor(this.rollup, context.dateProvider, this.logger).start();
159
194
 
160
- // This is hideous.
161
- // We ought to have a definite reference to the l1TxUtils that we're using in both places, provided by the test context.
162
- this.proverDelayer = context.proverNode
163
- ? (((context.proverNode as TestProverNode).publisher as ProverNodePublisher).l1TxUtils as DelayedTxUtils).delayer!
164
- : undefined!;
165
- this.sequencerDelayer = context.sequencer
166
- ? (
167
- ((context.sequencer as TestSequencerClient).sequencer.publisher as SequencerPublisher)
168
- .l1TxUtils as DelayedTxUtils
169
- ).delayer!
170
- : undefined!;
195
+ this.proverDelayer = context.proverDelayer!;
196
+ this.sequencerDelayer = context.sequencerDelayer!;
171
197
 
172
198
  if ((context.proverNode && !this.proverDelayer) || (context.sequencer && !this.sequencerDelayer)) {
173
199
  throw new Error(`Could not find prover or sequencer delayer`);
@@ -182,6 +208,8 @@ export class EpochsTestContext {
182
208
  l1GenesisTime: await this.rollup.getL1GenesisTime(),
183
209
  ethereumSlotDuration,
184
210
  proofSubmissionEpochs: Number(await this.rollup.getProofSubmissionEpochs()),
211
+ targetCommitteeSize: await this.rollup.getTargetCommitteeSize(),
212
+ rollupManaLimit: Number(await this.rollup.getManaLimit()),
185
213
  };
186
214
 
187
215
  this.logger.info(
@@ -196,23 +224,64 @@ export class EpochsTestContext {
196
224
  await this.context.teardown();
197
225
  }
198
226
 
227
+ /**
228
+ * Computes InitialAccountData for a SchnorrHardcodedKeyAccountContract.
229
+ * This contract has a hardcoded signing key and no initializer, so it can be used without
230
+ * on-chain deployment. Pass the returned data in `initialFundedAccounts` so the address
231
+ * gets funded with fee juice in genesis.
232
+ */
233
+ public static async getHardcodedAccountData(secret: Fr, salt: Fr): Promise<InitialAccountData> {
234
+ const contract = new SchnorrHardcodedKeyAccountContract();
235
+ const address = await getAccountContractAddress(contract, secret, salt);
236
+ const signingKey = SCHNORR_HARDCODED_PRIVATE_KEY;
237
+ return { secret, salt, signingKey, address };
238
+ }
239
+
240
+ /**
241
+ * Registers a SchnorrHardcodedKeyAccountContract in PXE. The account must have been funded
242
+ * at genesis (via getHardcodedAccountData). No on-chain deployment or block mining needed.
243
+ */
244
+ public async registerHardcodedAccount(accountData: InitialAccountData) {
245
+ const contract = new SchnorrHardcodedKeyAccountContract();
246
+ const wallet = this.context.wallet;
247
+ const accountManager = await (wallet as TestWallet).createAccount({
248
+ secret: accountData.secret,
249
+ salt: accountData.salt,
250
+ contract,
251
+ });
252
+ this.context.accounts = [accountManager.address];
253
+ return accountManager.address;
254
+ }
255
+
199
256
  public async createProverNode(opts: { dontStart?: boolean } & Partial<ProverNodeConfig> = {}) {
200
257
  this.logger.warn('Creating and syncing a simulated prover node...');
201
258
  const proverNodePrivateKey = this.getNextPrivateKey();
202
- const suffix = (this.proverNodes.length + 1).toString();
203
- const proverNode = await withLogNameSuffix(suffix, () =>
259
+ const proverIndex = this.proverNodes.length + 1;
260
+ const { mockGossipSubNetwork } = this.context;
261
+ const { proverNode } = await withLoggerBindings({ actor: `prover-${proverIndex}` }, () =>
204
262
  createAndSyncProverNode(
205
263
  proverNodePrivateKey,
206
- { ...this.context.config },
207
264
  {
208
- dataDirectory: join(this.context.config.dataDirectory!, randomBytes(8).toString('hex')),
209
- proverId: EthAddress.fromNumber(parseInt(suffix, 10)),
265
+ ...this.context.config,
266
+ p2pEnabled: this.context.config.p2pEnabled || mockGossipSubNetwork !== undefined,
267
+ proverId: EthAddress.fromNumber(proverIndex),
210
268
  dontStart: opts.dontStart,
211
269
  ...opts,
212
270
  },
213
- this.context.aztecNode,
214
- undefined,
215
- { dateProvider: this.context.dateProvider },
271
+ {
272
+ dataDirectory: join(this.context.config.dataDirectory!, randomBytes(8).toString('hex')),
273
+ },
274
+ {
275
+ dateProvider: this.context.dateProvider,
276
+ p2pClientDeps: {
277
+ p2pServiceFactory: mockGossipSubNetwork ? getMockPubSubP2PServiceFactory(mockGossipSubNetwork) : undefined,
278
+ rpcTxProviders: [this.context.aztecNode],
279
+ },
280
+ },
281
+ {
282
+ genesis: this.context.genesis,
283
+ dontStart: opts.dontStart,
284
+ },
216
285
  ),
217
286
  );
218
287
  this.proverNodes.push(proverNode);
@@ -226,26 +295,34 @@ export class EpochsTestContext {
226
295
 
227
296
  public createValidatorNode(
228
297
  privateKeys: `0x${string}`[],
229
- opts: Partial<AztecNodeConfig> & { txDelayerMaxInclusionTimeIntoSlot?: number; dontStartSequencer?: boolean } = {},
298
+ opts: Partial<AztecNodeConfig> & {
299
+ dontStartSequencer?: boolean;
300
+ slashingProtectionDb?: SlashingProtectionDatabase;
301
+ } = {},
230
302
  ) {
231
303
  this.logger.warn('Creating and syncing a validator node...');
232
304
  return this.createNode({ ...opts, disableValidator: false, validatorPrivateKeys: new SecretValue(privateKeys) });
233
305
  }
234
306
 
235
307
  private async createNode(
236
- opts: Partial<AztecNodeConfig> & { txDelayerMaxInclusionTimeIntoSlot?: number; dontStartSequencer?: boolean } = {},
308
+ opts: Partial<AztecNodeConfig> & {
309
+ dontStartSequencer?: boolean;
310
+ slashingProtectionDb?: SlashingProtectionDatabase;
311
+ } = {},
237
312
  ) {
238
- const suffix = (this.nodes.length + 1).toString();
313
+ const nodeIndex = this.nodes.length + 1;
314
+ const actorPrefix = opts.disableValidator ? 'node' : 'validator';
239
315
  const { mockGossipSubNetwork } = this.context;
240
316
  const resolvedConfig = { ...this.context.config, ...opts };
241
317
  const p2pEnabled = resolvedConfig.p2pEnabled || mockGossipSubNetwork !== undefined;
242
318
  const p2pIp = resolvedConfig.p2pIp ?? (p2pEnabled ? '127.0.0.1' : undefined);
243
- const node = await withLogNameSuffix(suffix, () =>
319
+ const node = await withLoggerBindings({ actor: `${actorPrefix}-${nodeIndex}` }, () =>
244
320
  AztecNodeService.createAndSync(
245
321
  {
246
322
  ...resolvedConfig,
247
323
  dataDirectory: join(this.context.config.dataDirectory!, randomBytes(8).toString('hex')),
248
324
  validatorPrivateKeys: opts.validatorPrivateKeys ?? new SecretValue([]),
325
+ nodeId: resolvedConfig.nodeId || `${actorPrefix}-${nodeIndex}`,
249
326
  p2pEnabled,
250
327
  p2pIp,
251
328
  },
@@ -254,34 +331,15 @@ export class EpochsTestContext {
254
331
  p2pClientDeps: {
255
332
  p2pServiceFactory: mockGossipSubNetwork ? getMockPubSubP2PServiceFactory(mockGossipSubNetwork) : undefined,
256
333
  },
334
+ slashingProtectionDb: opts.slashingProtectionDb,
257
335
  },
258
336
  {
259
- prefilledPublicData: this.context.prefilledPublicData,
337
+ genesis: this.context.genesis,
260
338
  ...opts,
261
339
  },
262
340
  ),
263
341
  );
264
342
 
265
- // REFACTOR: We're getting too much into the internals of the sequencer here.
266
- // We should have a single method for constructing an aztec node that returns a TestAztecNodeService
267
- // which directly exposes the delayer and sets any test config.
268
- if (opts.txDelayerMaxInclusionTimeIntoSlot !== undefined) {
269
- this.logger.info(
270
- `Setting tx delayer max inclusion time into slot to ${opts.txDelayerMaxInclusionTimeIntoSlot} seconds`,
271
- );
272
- // Here we reach into the sequencer and hook in a tx delayer. The problem is that the sequencer's l1 utils only uses a public client, not a wallet.
273
- // The delayer needs a wallet (a client that can sign), so we have to create one here.
274
- const l1Client = createExtendedL1Client(
275
- resolvedConfig.l1RpcUrls!,
276
- resolvedConfig.publisherPrivateKeys![0]!.getValue(),
277
- );
278
- const sequencer = node.getSequencer() as TestSequencerClient;
279
- const publisher = sequencer.sequencer.publisher;
280
- const delayed = DelayedTxUtils.fromL1TxUtils(publisher.l1TxUtils, this.L1_BLOCK_TIME_IN_S, l1Client);
281
- delayed.delayer!.setMaxInclusionTimeIntoSlot(opts.txDelayerMaxInclusionTimeIntoSlot);
282
- publisher.l1TxUtils = delayed;
283
- }
284
-
285
343
  this.nodes.push(node);
286
344
  return node;
287
345
  }
@@ -333,7 +391,10 @@ export class EpochsTestContext {
333
391
  this.logger.info(`Waiting until last slot of submission window for epoch ${epochNumber} at ${date}`, {
334
392
  oneSlotBefore,
335
393
  });
336
- await waitUntilL1Timestamp(this.l1Client, oneSlotBefore);
394
+ // Use a timeout that accounts for the full proof submission window
395
+ const proofSubmissionWindowDuration =
396
+ this.constants.proofSubmissionEpochs * this.epochDuration * this.L2_SLOT_DURATION_IN_S;
397
+ await waitUntilL1Timestamp(this.l1Client, oneSlotBefore, undefined, proofSubmissionWindowDuration * 2);
337
398
  }
338
399
 
339
400
  /** Waits for the aztec node to sync to the target block number. */
@@ -344,11 +405,11 @@ export class EpochsTestContext {
344
405
  await sleep(waitTime);
345
406
  const [syncState, tips] = await Promise.all([
346
407
  this.context.aztecNode.getWorldStateSyncStatus(),
347
- await this.context.aztecNode.getL2Tips(),
408
+ await this.context.aztecNode.getChainTips(),
348
409
  ]);
349
410
  this.logger.info(`Wait for node synch ${blockNumber} ${type}`, { blockNumber, type, syncState, tips });
350
411
  if (type === 'proven') {
351
- synched = tips.proven.number >= blockNumber && syncState.latestBlockNumber >= blockNumber;
412
+ synched = tips.proven.block.number >= blockNumber && syncState.latestBlockNumber >= blockNumber;
352
413
  } else if (type === 'finalized') {
353
414
  synched = syncState.finalizedBlockNumber >= blockNumber;
354
415
  } else {
@@ -370,17 +431,28 @@ export class EpochsTestContext {
370
431
  return SpamContract.at(instance.address, wallet);
371
432
  }
372
433
 
434
+ /** Registers the TestContract on the given wallet. */
435
+ public async registerTestContract(wallet: Wallet, salt = Fr.ZERO) {
436
+ const instance = await getContractInstanceFromInstantiationParams(TestContract.artifact, {
437
+ constructorArgs: [],
438
+ constructorArtifact: undefined,
439
+ salt,
440
+ publicKeys: undefined,
441
+ deployer: undefined,
442
+ });
443
+ await wallet.registerContract(instance, TestContract.artifact);
444
+ return TestContract.at(instance.address, wallet);
445
+ }
446
+
373
447
  /** Creates an L1 client using a fresh account with funds from anvil, with a tx delayer already set up. */
374
448
  public async createL1Client() {
375
- const { client, delayer } = withDelayer(
376
- createExtendedL1Client(
377
- [...this.l1Client.chain.rpcUrls.default.http],
378
- privateKeyToAccount(this.getNextPrivateKey()),
379
- this.l1Client.chain,
380
- ),
381
- this.context.dateProvider!,
382
- { ethereumSlotDuration: this.L1_BLOCK_TIME_IN_S },
449
+ const rawClient = createExtendedL1Client(
450
+ [...this.l1Client.chain.rpcUrls.default.http],
451
+ privateKeyToAccount(this.getNextPrivateKey()),
452
+ this.l1Client.chain,
383
453
  );
454
+ const delayer = createDelayer(this.context.dateProvider, { ethereumSlotDuration: this.L1_BLOCK_TIME_IN_S }, {});
455
+ const client = wrapClientWithDelayer(rawClient, delayer);
384
456
  expect(await client.getBalance({ address: client.account.address })).toBeGreaterThan(0n);
385
457
  return { client, delayer };
386
458
  }
@@ -397,9 +469,42 @@ export class EpochsTestContext {
397
469
  expect(result).toBe(expectedSuccess);
398
470
  }
399
471
 
472
+ /** Verifies at least one checkpoint has the target number of blocks (for MBPS validation). */
473
+ public async assertMultipleBlocksPerSlot(targetBlockCount: number) {
474
+ const archiver = (this.context.aztecNode as AztecNodeService).getBlockSource() as Archiver;
475
+ const checkpoints = await archiver.getCheckpoints({ from: CheckpointNumber(1), limit: 50 });
476
+
477
+ this.logger.warn(`Retrieved ${checkpoints.length} checkpoints from archiver`, {
478
+ checkpoints: checkpoints.map(pc => pc.checkpoint.getStats()),
479
+ });
480
+
481
+ let expectedBlockNumber = checkpoints[0].checkpoint.blocks[0].number;
482
+ let targetFound = false;
483
+
484
+ for (const checkpoint of checkpoints) {
485
+ const blockCount = checkpoint.checkpoint.blocks.length;
486
+ targetFound = targetFound || blockCount >= targetBlockCount;
487
+
488
+ this.logger.verbose(`Checkpoint ${checkpoint.checkpoint.number} has ${blockCount} blocks`, {
489
+ checkpoint: checkpoint.checkpoint.getStats(),
490
+ });
491
+
492
+ for (let i = 0; i < blockCount; i++) {
493
+ const block = checkpoint.checkpoint.blocks[i];
494
+ expect(block.indexWithinCheckpoint).toBe(i);
495
+ expect(block.checkpointNumber).toBe(checkpoint.checkpoint.number);
496
+ expect(block.number).toBe(expectedBlockNumber);
497
+ expectedBlockNumber++;
498
+ }
499
+ }
500
+
501
+ expect(targetFound).toBe(true);
502
+ }
503
+
400
504
  public watchSequencerEvents(
401
505
  sequencers: SequencerClient[],
402
506
  getMetadata: (i: number) => Record<string, any> = () => ({}),
507
+ additionalFailEventKeys: (keyof SequencerEvents)[] = [],
403
508
  ) {
404
509
  const stateChanges: TrackedSequencerEvent[] = [];
405
510
  const failEvents: TrackedSequencerEvent[] = [];
@@ -410,6 +515,11 @@ export class EpochsTestContext {
410
515
  'block-build-failed',
411
516
  'checkpoint-publish-failed',
412
517
  'proposer-rollup-check-failed',
518
+ 'checkpoint-error',
519
+ 'checkpoint-publish-failed',
520
+ 'header-validation-failed',
521
+ 'pipelined-checkpoint-discarded',
522
+ ...additionalFailEventKeys,
413
523
  ];
414
524
 
415
525
  const makeEvent = (
@@ -439,6 +549,13 @@ export class EpochsTestContext {
439
549
  });
440
550
  failEventsKeys.forEach(eventName => {
441
551
  sequencer.getSequencer().on(eventName, (args: Parameters<SequencerEvents[typeof eventName]>[0]) => {
552
+ // Skip benign block-build-failed events where the builder rejected the block because it
553
+ // could not collect enough valid txs. This is the same "not enough txs" case as
554
+ // block-tx-count-check-failed (which is already excluded above), just detected after we
555
+ // started processing txs rather than before.
556
+ if (eventName === 'block-build-failed' && (args as { reason?: string }).reason === 'Insufficient valid txs') {
557
+ return;
558
+ }
442
559
  const evt = makeEvent(i, eventName, args);
443
560
  failEvents.push(evt);
444
561
  this.logger.error(`Failed event ${eventName} from sequencer ${sequencerIndex}`, undefined, evt);
@@ -448,4 +565,11 @@ export class EpochsTestContext {
448
565
 
449
566
  return { failEvents, stateChanges };
450
567
  }
568
+
569
+ public assertNoFailuresFromSequencers(failEvents: TrackedSequencerEvent[]) {
570
+ if (failEvents.length > 0) {
571
+ this.logger.error(`Failed events from sequencers`, failEvents);
572
+ }
573
+ expect(failEvents).toEqual([]);
574
+ }
451
575
  }
@@ -4,11 +4,11 @@ import type { Logger } from '@aztec/aztec.js/log';
4
4
  import { Fq } from '@aztec/foundation/curves/bn254';
5
5
  import { sleep } from '@aztec/foundation/sleep';
6
6
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
7
- import type { TestWallet } from '@aztec/test-wallet/server';
8
7
 
9
8
  import { jest } from '@jest/globals';
10
9
  import type { Hex } from 'viem';
11
10
 
11
+ import type { TestWallet } from '../test-wallet/test_wallet.js';
12
12
  import { FeesTest } from './fees_test.js';
13
13
 
14
14
  jest.setTimeout(300_000);
@@ -26,11 +26,8 @@ describe('e2e_fees bridging_race', () => {
26
26
  });
27
27
 
28
28
  beforeAll(async () => {
29
- await t.applyInitialAccountsSnapshot();
30
- await t.applyPublicDeployAccountsSnapshot();
31
- await t.applySetupFeeJuiceSnapshot();
32
-
33
- ({ wallet, logger } = await t.setup());
29
+ await t.setup();
30
+ ({ wallet, logger } = t);
34
31
  });
35
32
 
36
33
  afterAll(async () => {
@@ -70,10 +67,7 @@ describe('e2e_fees bridging_race', () => {
70
67
  // Yes, we need to REFACTOR it at some point
71
68
  const claim = await t.feeJuiceBridgeTestHarness.prepareTokensOnL1(bobsAddress);
72
69
  const { claimSecret: secret, messageLeafIndex: index } = claim;
73
- await t.feeJuiceContract.methods
74
- .claim(bobsAddress, claim.claimAmount, secret, index)
75
- .send({ from: bobsAddress })
76
- .wait();
70
+ await t.feeJuiceContract.methods.claim(bobsAddress, claim.claimAmount, secret, index).send({ from: bobsAddress });
77
71
  const [balance] = await t.getGasBalanceFn(bobsAddress);
78
72
  expect(balance).toEqual(claim.claimAmount);
79
73
  });