@aztec/end-to-end 0.0.1-commit.5daedc8 → 0.0.1-commit.6201a7b05

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 (283) hide show
  1. package/README.md +27 -0
  2. package/dest/bench/client_flows/benchmark.d.ts +3 -2
  3. package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
  4. package/dest/bench/client_flows/benchmark.js +21 -1
  5. package/dest/bench/client_flows/client_flows_benchmark.d.ts +15 -16
  6. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  7. package/dest/bench/client_flows/client_flows_benchmark.js +125 -145
  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 +31 -19
  15. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +11 -9
  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 +108 -114
  18. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +20 -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 +92 -71
  21. package/dest/e2e_deploy_contract/deploy_test.d.ts +5 -4
  22. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  23. package/dest/e2e_deploy_contract/deploy_test.js +18 -13
  24. package/dest/e2e_epochs/epochs_test.d.ts +42 -15
  25. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  26. package/dest/e2e_epochs/epochs_test.js +159 -59
  27. package/dest/e2e_fees/bridging_race.notest.js +4 -6
  28. package/dest/e2e_fees/fees_test.d.ts +21 -17
  29. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  30. package/dest/e2e_fees/fees_test.js +139 -147
  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_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 +30 -40
  38. package/dest/e2e_p2p/inactivity_slash_test.d.ts +4 -4
  39. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
  40. package/dest/e2e_p2p/inactivity_slash_test.js +9 -12
  41. package/dest/e2e_p2p/p2p_network.d.ts +25 -21
  42. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  43. package/dest/e2e_p2p/p2p_network.js +175 -130
  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 +193 -0
  47. package/dest/e2e_p2p/shared.d.ts +30 -12
  48. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  49. package/dest/e2e_p2p/shared.js +84 -67
  50. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
  51. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
  52. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
  53. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
  54. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
  55. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
  56. package/dest/e2e_token_contract/token_contract_test.d.ts +19 -10
  57. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  58. package/dest/e2e_token_contract/token_contract_test.js +100 -92
  59. package/dest/fixtures/authwit_proxy.d.ts +15 -0
  60. package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
  61. package/dest/fixtures/authwit_proxy.js +34 -0
  62. package/dest/fixtures/e2e_prover_test.d.ts +16 -23
  63. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  64. package/dest/fixtures/e2e_prover_test.js +115 -139
  65. package/dest/fixtures/elu_monitor.d.ts +21 -0
  66. package/dest/fixtures/elu_monitor.d.ts.map +1 -0
  67. package/dest/fixtures/elu_monitor.js +102 -0
  68. package/dest/fixtures/fixtures.d.ts +17 -3
  69. package/dest/fixtures/fixtures.d.ts.map +1 -1
  70. package/dest/fixtures/fixtures.js +18 -3
  71. package/dest/fixtures/get_acvm_config.js +1 -1
  72. package/dest/fixtures/get_bb_config.d.ts +1 -1
  73. package/dest/fixtures/get_bb_config.d.ts.map +1 -1
  74. package/dest/fixtures/get_bb_config.js +5 -5
  75. package/dest/fixtures/ha_setup.d.ts +71 -0
  76. package/dest/fixtures/ha_setup.d.ts.map +1 -0
  77. package/dest/fixtures/ha_setup.js +116 -0
  78. package/dest/fixtures/index.d.ts +2 -1
  79. package/dest/fixtures/index.d.ts.map +1 -1
  80. package/dest/fixtures/index.js +1 -0
  81. package/dest/fixtures/l1_to_l2_messaging.d.ts +4 -3
  82. package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
  83. package/dest/fixtures/l1_to_l2_messaging.js +2 -2
  84. package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts +25 -0
  85. package/dest/fixtures/schnorr_hardcoded_account_contract.d.ts.map +1 -0
  86. package/dest/fixtures/schnorr_hardcoded_account_contract.js +39 -0
  87. package/dest/fixtures/setup.d.ts +246 -0
  88. package/dest/fixtures/setup.d.ts.map +1 -0
  89. package/dest/fixtures/setup.js +625 -0
  90. package/dest/fixtures/setup_p2p_test.d.ts +18 -11
  91. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  92. package/dest/fixtures/setup_p2p_test.js +46 -35
  93. package/dest/fixtures/token_utils.d.ts +2 -2
  94. package/dest/fixtures/token_utils.d.ts.map +1 -1
  95. package/dest/fixtures/token_utils.js +7 -6
  96. package/dest/fixtures/utils.d.ts +5 -637
  97. package/dest/fixtures/utils.d.ts.map +1 -1
  98. package/dest/fixtures/utils.js +4 -647
  99. package/dest/fixtures/web3signer.js +1 -1
  100. package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
  101. package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
  102. package/dest/fixtures/with_telemetry_utils.js +2 -2
  103. package/dest/forward-compatibility/wallet_rpc_client.d.ts +7 -0
  104. package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
  105. package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
  106. package/dest/forward-compatibility/wallet_service.d.ts +3 -0
  107. package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
  108. package/dest/forward-compatibility/wallet_service.js +109 -0
  109. package/dest/legacy-jest-resolver.d.cts +3 -0
  110. package/dest/legacy-jest-resolver.d.cts.map +1 -0
  111. package/dest/quality_of_service/grafana_client.d.ts +41 -0
  112. package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
  113. package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
  114. package/dest/quality_of_service/prometheus_client.d.ts +38 -0
  115. package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
  116. package/dest/quality_of_service/prometheus_client.js +67 -0
  117. package/dest/shared/cross_chain_test_harness.d.ts +18 -6
  118. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  119. package/dest/shared/cross_chain_test_harness.js +27 -27
  120. package/dest/shared/gas_portal_test_harness.d.ts +12 -2
  121. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  122. package/dest/shared/gas_portal_test_harness.js +4 -4
  123. package/dest/shared/index.d.ts +3 -2
  124. package/dest/shared/index.d.ts.map +1 -1
  125. package/dest/shared/index.js +1 -0
  126. package/dest/shared/jest_setup.js +41 -1
  127. package/dest/shared/mock_state_view.d.ts +86 -0
  128. package/dest/shared/mock_state_view.d.ts.map +1 -0
  129. package/dest/shared/mock_state_view.js +186 -0
  130. package/dest/shared/submit-transactions.d.ts +4 -4
  131. package/dest/shared/submit-transactions.d.ts.map +1 -1
  132. package/dest/shared/submit-transactions.js +9 -11
  133. package/dest/shared/uniswap_l1_l2.d.ts +3 -27
  134. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  135. package/dest/shared/uniswap_l1_l2.js +58 -43
  136. package/dest/simulators/lending_simulator.d.ts +6 -2
  137. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  138. package/dest/simulators/lending_simulator.js +6 -6
  139. package/dest/simulators/token_simulator.d.ts +1 -1
  140. package/dest/simulators/token_simulator.d.ts.map +1 -1
  141. package/dest/simulators/token_simulator.js +3 -24
  142. package/dest/spartan/setup_test_wallets.d.ts +15 -5
  143. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  144. package/dest/spartan/setup_test_wallets.js +132 -43
  145. package/dest/spartan/tx_metrics.d.ts +88 -0
  146. package/dest/spartan/tx_metrics.d.ts.map +1 -0
  147. package/dest/spartan/tx_metrics.js +438 -0
  148. package/dest/spartan/utils/bot.d.ts +28 -0
  149. package/dest/spartan/utils/bot.d.ts.map +1 -0
  150. package/dest/spartan/utils/bot.js +142 -0
  151. package/dest/spartan/utils/chaos.d.ts +79 -0
  152. package/dest/spartan/utils/chaos.d.ts.map +1 -0
  153. package/dest/spartan/utils/chaos.js +142 -0
  154. package/dest/spartan/utils/clients.d.ts +39 -0
  155. package/dest/spartan/utils/clients.d.ts.map +1 -0
  156. package/dest/spartan/utils/clients.js +90 -0
  157. package/dest/spartan/utils/config.d.ts +45 -0
  158. package/dest/spartan/utils/config.d.ts.map +1 -0
  159. package/dest/spartan/utils/config.js +23 -0
  160. package/dest/spartan/utils/health.d.ts +63 -0
  161. package/dest/spartan/utils/health.d.ts.map +1 -0
  162. package/dest/spartan/utils/health.js +202 -0
  163. package/dest/spartan/utils/helm.d.ts +15 -0
  164. package/dest/spartan/utils/helm.d.ts.map +1 -0
  165. package/dest/spartan/utils/helm.js +47 -0
  166. package/dest/spartan/utils/index.d.ts +11 -0
  167. package/dest/spartan/utils/index.d.ts.map +1 -0
  168. package/dest/spartan/utils/index.js +22 -0
  169. package/dest/spartan/utils/k8s.d.ts +128 -0
  170. package/dest/spartan/utils/k8s.d.ts.map +1 -0
  171. package/dest/spartan/utils/k8s.js +381 -0
  172. package/dest/spartan/utils/nodes.d.ts +40 -0
  173. package/dest/spartan/utils/nodes.d.ts.map +1 -0
  174. package/dest/spartan/utils/nodes.js +461 -0
  175. package/dest/spartan/utils/pod_logs.d.ts +25 -0
  176. package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
  177. package/dest/spartan/utils/pod_logs.js +74 -0
  178. package/dest/spartan/utils/scripts.d.ts +30 -0
  179. package/dest/spartan/utils/scripts.d.ts.map +1 -0
  180. package/dest/spartan/utils/scripts.js +81 -0
  181. package/dest/spartan/utils.d.ts +2 -220
  182. package/dest/spartan/utils.d.ts.map +1 -1
  183. package/dest/spartan/utils.js +1 -782
  184. package/dest/test-wallet/test_wallet.d.ts +84 -0
  185. package/dest/test-wallet/test_wallet.d.ts.map +1 -0
  186. package/dest/test-wallet/test_wallet.js +255 -0
  187. package/dest/test-wallet/utils.d.ts +41 -0
  188. package/dest/test-wallet/utils.d.ts.map +1 -0
  189. package/dest/test-wallet/utils.js +71 -0
  190. package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
  191. package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
  192. package/dest/test-wallet/wallet_worker_script.js +48 -0
  193. package/dest/test-wallet/worker_wallet.d.ts +52 -0
  194. package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
  195. package/dest/test-wallet/worker_wallet.js +151 -0
  196. package/dest/test-wallet/worker_wallet_schema.d.ts +279 -0
  197. package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
  198. package/dest/test-wallet/worker_wallet_schema.js +10 -0
  199. package/package.json +49 -45
  200. package/src/bench/client_flows/benchmark.ts +24 -2
  201. package/src/bench/client_flows/client_flows_benchmark.ts +166 -216
  202. package/src/bench/client_flows/config.ts +9 -1
  203. package/src/bench/client_flows/data_extractor.ts +1 -1
  204. package/src/bench/utils.ts +36 -21
  205. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +123 -151
  206. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +140 -126
  207. package/src/e2e_deploy_contract/deploy_test.ts +22 -15
  208. package/src/e2e_epochs/epochs_test.ts +222 -112
  209. package/src/e2e_fees/bridging_race.notest.ts +5 -11
  210. package/src/e2e_fees/fees_test.ts +182 -230
  211. package/src/e2e_l1_publisher/write_json.ts +16 -16
  212. package/src/e2e_multi_validator/utils.ts +1 -1
  213. package/src/e2e_nested_contract/nested_contract_test.ts +35 -56
  214. package/src/e2e_p2p/inactivity_slash_test.ts +10 -13
  215. package/src/e2e_p2p/p2p_network.ts +245 -204
  216. package/src/e2e_p2p/reqresp/utils.ts +257 -0
  217. package/src/e2e_p2p/shared.ts +111 -81
  218. package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
  219. package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
  220. package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
  221. package/src/e2e_token_contract/token_contract_test.ts +121 -119
  222. package/src/fixtures/authwit_proxy.ts +54 -0
  223. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  224. package/src/fixtures/e2e_prover_test.ts +143 -189
  225. package/src/fixtures/elu_monitor.ts +126 -0
  226. package/src/fixtures/fixtures.ts +34 -5
  227. package/src/fixtures/get_acvm_config.ts +1 -1
  228. package/src/fixtures/get_bb_config.ts +7 -6
  229. package/src/fixtures/ha_setup.ts +188 -0
  230. package/src/fixtures/index.ts +1 -0
  231. package/src/fixtures/l1_to_l2_messaging.ts +4 -2
  232. package/src/fixtures/schnorr_hardcoded_account_contract.ts +49 -0
  233. package/src/fixtures/setup.ts +932 -0
  234. package/src/fixtures/setup_p2p_test.ts +51 -55
  235. package/src/fixtures/token_utils.ts +7 -6
  236. package/src/fixtures/utils.ts +27 -966
  237. package/src/fixtures/web3signer.ts +1 -1
  238. package/src/fixtures/with_telemetry_utils.ts +2 -2
  239. package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
  240. package/src/forward-compatibility/wallet_service.ts +104 -0
  241. package/src/guides/up_quick_start.sh +3 -5
  242. package/src/legacy-jest-resolver.cjs +135 -0
  243. package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
  244. package/src/quality_of_service/prometheus_client.ts +113 -0
  245. package/src/shared/cross_chain_test_harness.ts +30 -43
  246. package/src/shared/gas_portal_test_harness.ts +3 -4
  247. package/src/shared/index.ts +2 -1
  248. package/src/shared/jest_setup.ts +51 -1
  249. package/src/shared/mock_state_view.ts +188 -0
  250. package/src/shared/submit-transactions.ts +11 -16
  251. package/src/shared/uniswap_l1_l2.ts +86 -106
  252. package/src/simulators/lending_simulator.ts +11 -7
  253. package/src/simulators/token_simulator.ts +6 -30
  254. package/src/spartan/DEVELOP.md +7 -0
  255. package/src/spartan/setup_test_wallets.ts +192 -28
  256. package/src/spartan/tx_metrics.ts +388 -0
  257. package/src/spartan/utils/bot.ts +188 -0
  258. package/src/spartan/utils/chaos.ts +253 -0
  259. package/src/spartan/utils/clients.ts +100 -0
  260. package/src/spartan/utils/config.ts +29 -0
  261. package/src/spartan/utils/health.ts +255 -0
  262. package/src/spartan/utils/helm.ts +84 -0
  263. package/src/spartan/utils/index.ts +71 -0
  264. package/src/spartan/utils/k8s.ts +535 -0
  265. package/src/spartan/utils/nodes.ts +543 -0
  266. package/src/spartan/utils/pod_logs.ts +99 -0
  267. package/src/spartan/utils/scripts.ts +99 -0
  268. package/src/spartan/utils.ts +1 -982
  269. package/src/test-wallet/test_wallet.ts +357 -0
  270. package/src/test-wallet/utils.ts +112 -0
  271. package/src/test-wallet/wallet_worker_script.ts +60 -0
  272. package/src/test-wallet/worker_wallet.ts +214 -0
  273. package/src/test-wallet/worker_wallet_schema.ts +13 -0
  274. package/dest/fixtures/setup_l1_contracts.d.ts +0 -477
  275. package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
  276. package/dest/fixtures/setup_l1_contracts.js +0 -17
  277. package/dest/fixtures/snapshot_manager.d.ts +0 -95
  278. package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
  279. package/dest/fixtures/snapshot_manager.js +0 -505
  280. package/dest/quality_of_service/alert_checker.d.ts +0 -41
  281. package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
  282. package/src/fixtures/setup_l1_contracts.ts +0 -26
  283. package/src/fixtures/snapshot_manager.ts +0 -665
@@ -1,21 +1,16 @@
1
- import type { InitialAccountData } from '@aztec/accounts/testing';
1
+ import { type InitialAccountData, generateSchnorrAccounts } from '@aztec/accounts/testing';
2
2
  import type { AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
3
+ import { getAccountContractAddress } from '@aztec/aztec.js/account';
3
4
  import { AztecAddress, EthAddress } from '@aztec/aztec.js/addresses';
4
5
  import { Fr } from '@aztec/aztec.js/fields';
5
- import {
6
- type EmpireSlashingProposerContract,
7
- type ExtendedViemWalletClient,
8
- GSEContract,
9
- MultiAdderArtifact,
10
- type Operator,
11
- RollupContract,
12
- type TallySlashingProposerContract,
13
- type ViemClient,
14
- createL1TxUtilsFromViemWallet,
15
- deployL1Contract,
16
- getL1ContractsConfigEnvVars,
17
- } from '@aztec/ethereum';
6
+ import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
7
+ import { GSEContract, RollupContract, type SlashingProposerContract } from '@aztec/ethereum/contracts';
8
+ import type { Operator } from '@aztec/ethereum/deploy-aztec-l1-contracts';
9
+ import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
10
+ import { MultiAdderArtifact } from '@aztec/ethereum/l1-artifacts';
11
+ import { createL1TxUtils } from '@aztec/ethereum/l1-tx-utils';
18
12
  import { ChainMonitor } from '@aztec/ethereum/test';
13
+ import type { ExtendedViemWalletClient, ViemClient } from '@aztec/ethereum/types';
19
14
  import { EpochNumber } from '@aztec/foundation/branded-types';
20
15
  import { SecretValue } from '@aztec/foundation/config';
21
16
  import { type Logger, createLogger } from '@aztec/foundation/log';
@@ -25,29 +20,34 @@ import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
25
20
  import type { BootstrapNode } from '@aztec/p2p/bootstrap';
26
21
  import { createBootstrapNodeFromPrivateKey, getBootstrapNodeEnr } from '@aztec/p2p/test-helpers';
27
22
  import { tryStop } from '@aztec/stdlib/interfaces/server';
28
- import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
29
- import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
23
+ import { TopicType } from '@aztec/stdlib/p2p';
24
+ import type { GenesisData } from '@aztec/stdlib/world-state';
30
25
  import { ZkPassportProofParams } from '@aztec/stdlib/zkpassport';
31
- import type { TestWallet } from '@aztec/test-wallet/server';
32
26
  import { getGenesisValues } from '@aztec/world-state/testing';
33
27
 
34
28
  import getPort from 'get-port';
35
29
  import { type GetContractReturnType, getAddress, getContract } from 'viem';
36
30
  import { privateKeyToAccount } from 'viem/accounts';
37
31
 
32
+ import {
33
+ SCHNORR_HARDCODED_PRIVATE_KEY,
34
+ SchnorrHardcodedKeyAccountContract,
35
+ } from '../fixtures/schnorr_hardcoded_account_contract.js';
36
+ import {
37
+ type EndToEndContext,
38
+ type SetupOptions,
39
+ getPrivateKeyFromIndex,
40
+ getSponsoredFPCAddress,
41
+ setup,
42
+ teardown,
43
+ } from '../fixtures/setup.js';
38
44
  import {
39
45
  ATTESTER_PRIVATE_KEYS_START_INDEX,
40
46
  createValidatorConfig,
41
47
  generatePrivateKeys,
42
48
  } from '../fixtures/setup_p2p_test.js';
43
- import {
44
- type ISnapshotManager,
45
- type SubsystemsContext,
46
- createSnapshotManager,
47
- deployAccounts,
48
- } from '../fixtures/snapshot_manager.js';
49
- import { type SetupOptions, getPrivateKeyFromIndex, getSponsoredFPCAddress } from '../fixtures/utils.js';
50
49
  import { getEndToEndTestTelemetryClient } from '../fixtures/with_telemetry_utils.js';
50
+ import type { TestWallet } from '../test-wallet/test_wallet.js';
51
51
 
52
52
  // Use a fixed bootstrap node private key so that we can re-use the same snapshot and the nodes can find each other
53
53
  const BOOTSTRAP_NODE_PRIVATE_KEY = '080212208f988fc0899e4a73a5aee4d271a5f20670603a756ad8d84f2c94263a6427c591';
@@ -57,25 +57,25 @@ export const WAIT_FOR_TX_TIMEOUT = l1ContractsConfig.aztecSlotDuration * 3;
57
57
  export const SHORTENED_BLOCK_TIME_CONFIG_NO_PRUNES = {
58
58
  aztecSlotDuration: 12,
59
59
  ethereumSlotDuration: 4,
60
- aztecProofSubmissionWindow: 640,
60
+ aztecProofSubmissionEpochs: 640,
61
61
  };
62
62
 
63
63
  export class P2PNetworkTest {
64
- private snapshotManager: ISnapshotManager;
64
+ public context!: EndToEndContext;
65
65
  public baseAccountPrivateKey: `0x${string}`;
66
66
  public baseAccount;
67
67
 
68
68
  public logger: Logger;
69
69
  public monitor!: ChainMonitor;
70
70
 
71
- public ctx!: SubsystemsContext;
71
+ public ctx!: EndToEndContext;
72
72
  public attesterPrivateKeys: `0x${string}`[] = [];
73
73
  public attesterPublicKeys: string[] = [];
74
74
  public peerIdPrivateKeys: string[] = [];
75
75
  public validators: Operator[] = [];
76
76
 
77
- public deployedAccounts: InitialAccountData[] = [];
78
- public prefilledPublicData: PublicDataTreeLeaf[] = [];
77
+ public hardcodedAccountData!: InitialAccountData;
78
+ public genesis: GenesisData | undefined;
79
79
 
80
80
  // The re-execution test needs a wallet and a spam contract
81
81
  public wallet?: TestWallet;
@@ -84,6 +84,10 @@ export class P2PNetworkTest {
84
84
 
85
85
  public bootstrapNode?: BootstrapNode;
86
86
 
87
+ // Store setup options for use in setup()
88
+ private setupOptions: SetupOptions;
89
+ private deployL1ContractsArgs: any;
90
+
87
91
  constructor(
88
92
  public readonly testName: string,
89
93
  public bootstrapNodeEnr: string,
@@ -94,7 +98,6 @@ export class P2PNetworkTest {
94
98
  // If set enable metrics collection
95
99
  private metricsPort?: number,
96
100
  startProverNode?: boolean,
97
- mockZkPassportVerifier?: boolean,
98
101
  ) {
99
102
  this.logger = createLogger(`e2e:e2e_p2p:${testName}`);
100
103
 
@@ -109,45 +112,41 @@ export class P2PNetworkTest {
109
112
 
110
113
  const zkPassportParams = ZkPassportProofParams.random();
111
114
 
112
- this.snapshotManager = createSnapshotManager(
113
- `e2e_p2p_network/${testName}`,
114
- process.env.E2E_DATA_PATH,
115
- {
116
- ...initialValidatorConfig,
117
- ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
118
- aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
119
- aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
120
- aztecProofSubmissionEpochs:
121
- initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
122
- slashingRoundSizeInEpochs:
123
- initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
124
- slasherFlavor: initialValidatorConfig.slasherFlavor ?? 'tally',
125
- aztecTargetCommitteeSize: numberOfValidators,
126
- salt: 420,
127
- metricsPort: metricsPort,
128
- numberOfInitialFundedAccounts: 2,
129
- startProverNode,
130
- },
131
- {
132
- ...initialValidatorConfig,
133
- aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
134
- slashingRoundSizeInEpochs:
135
- initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
136
- slasherFlavor: initialValidatorConfig.slasherFlavor ?? 'tally',
137
-
138
- ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
139
- aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
140
- aztecProofSubmissionEpochs:
141
- initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
142
- aztecTargetCommitteeSize: numberOfValidators,
143
- initialValidators: [],
144
- zkPassportArgs: {
145
- mockZkPassportVerifier,
146
- zkPassportDomain: zkPassportParams.domain,
147
- zkPassportScope: zkPassportParams.scope,
148
- },
115
+ // Store setup options for later use
116
+ this.setupOptions = {
117
+ ...initialValidatorConfig,
118
+ ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
119
+ aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
120
+ aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
121
+ aztecProofSubmissionEpochs:
122
+ initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
123
+ slashingRoundSizeInEpochs:
124
+ initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
125
+ slasherEnabled: initialValidatorConfig.slasherEnabled ?? true,
126
+ aztecTargetCommitteeSize: numberOfValidators,
127
+ metricsPort: metricsPort,
128
+ numberOfInitialFundedAccounts: 2,
129
+ startProverNode,
130
+ };
131
+
132
+ this.deployL1ContractsArgs = {
133
+ ...initialValidatorConfig,
134
+ aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
135
+ slashingRoundSizeInEpochs:
136
+ initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
137
+ slasherEnabled: initialValidatorConfig.slasherEnabled ?? true,
138
+
139
+ ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
140
+ aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
141
+ aztecProofSubmissionEpochs:
142
+ initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
143
+ aztecTargetCommitteeSize: numberOfValidators,
144
+ initialValidators: [],
145
+ zkPassportArgs: {
146
+ zkPassportDomain: zkPassportParams.domain,
147
+ zkPassportScope: zkPassportParams.scope,
149
148
  },
150
- );
149
+ };
151
150
  }
152
151
 
153
152
  static async create({
@@ -158,7 +157,6 @@ export class P2PNetworkTest {
158
157
  metricsPort,
159
158
  initialConfig,
160
159
  startProverNode,
161
- mockZkPassportVerifier,
162
160
  }: {
163
161
  testName: string;
164
162
  numberOfNodes: number;
@@ -167,7 +165,6 @@ export class P2PNetworkTest {
167
165
  metricsPort?: number;
168
166
  initialConfig?: SetupOptions;
169
167
  startProverNode?: boolean;
170
- mockZkPassportVerifier?: boolean;
171
168
  }) {
172
169
  const port = basePort || (await getPort());
173
170
 
@@ -188,29 +185,27 @@ export class P2PNetworkTest {
188
185
  numberOfNodes,
189
186
  metricsPort,
190
187
  startProverNode,
191
- mockZkPassportVerifier,
192
188
  );
193
189
  }
194
190
 
195
191
  get fundedAccount() {
196
- if (!this.deployedAccounts[0]) {
197
- throw new Error('Call snapshot t.setupAccount to create a funded account.');
192
+ if (!this.hardcodedAccountData) {
193
+ throw new Error('Call setup to initialize the hardcoded account.');
198
194
  }
199
- return this.deployedAccounts[0];
195
+ return this.hardcodedAccountData;
200
196
  }
201
197
 
202
198
  async addBootstrapNode() {
203
- await this.snapshotManager.snapshot('add-bootstrap-node', async ({ aztecNodeConfig }) => {
204
- const telemetry = getEndToEndTestTelemetryClient(this.metricsPort);
205
- this.bootstrapNode = await createBootstrapNodeFromPrivateKey(
206
- BOOTSTRAP_NODE_PRIVATE_KEY,
207
- this.bootNodePort,
208
- telemetry,
209
- aztecNodeConfig,
210
- );
211
- // Overwrite enr with updated info
212
- this.bootstrapNodeEnr = this.bootstrapNode.getENR().encodeTxt();
213
- });
199
+ this.logger.info('Adding bootstrap node');
200
+ const telemetry = await getEndToEndTestTelemetryClient(this.metricsPort);
201
+ this.bootstrapNode = await createBootstrapNodeFromPrivateKey(
202
+ BOOTSTRAP_NODE_PRIVATE_KEY,
203
+ this.bootNodePort,
204
+ telemetry,
205
+ this.context.config,
206
+ );
207
+ // Overwrite enr with updated info
208
+ this.bootstrapNodeEnr = this.bootstrapNode.getENR().encodeTxt();
214
209
  }
215
210
 
216
211
  getValidators() {
@@ -231,128 +226,120 @@ export class P2PNetworkTest {
231
226
  return { validators };
232
227
  }
233
228
 
234
- async applyBaseSnapshots() {
229
+ async applyBaseSetup() {
235
230
  await this.addBootstrapNode();
236
- await this.snapshotManager.snapshot('add-validators', async ({ deployL1ContractsValues, cheatCodes }) => {
237
- const rollup = getContract({
238
- address: deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
239
- abi: RollupAbi,
240
- client: deployL1ContractsValues.l1Client,
241
- });
242
231
 
243
- this.logger.info(`Adding ${this.numberOfValidators} validators`);
232
+ this.logger.info('Adding validators');
233
+ const rollup = getContract({
234
+ address: this.context.deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
235
+ abi: RollupAbi,
236
+ client: this.context.deployL1ContractsValues.l1Client,
237
+ });
244
238
 
245
- const stakingAsset = getContract({
246
- address: deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
247
- abi: TestERC20Abi,
248
- client: deployL1ContractsValues.l1Client,
249
- });
239
+ this.logger.info(`Adding ${this.numberOfValidators} validators`);
250
240
 
251
- const { address: multiAdderAddress } = await deployL1Contract(
252
- deployL1ContractsValues.l1Client,
253
- MultiAdderArtifact.contractAbi,
254
- MultiAdderArtifact.contractBytecode,
255
- [rollup.address, deployL1ContractsValues.l1Client.account.address],
256
- );
241
+ const stakingAsset = getContract({
242
+ address: this.context.deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
243
+ abi: TestERC20Abi,
244
+ client: this.context.deployL1ContractsValues.l1Client,
245
+ });
257
246
 
258
- const multiAdder = getContract({
259
- address: multiAdderAddress.toString(),
260
- abi: MultiAdderArtifact.contractAbi,
261
- client: deployL1ContractsValues.l1Client,
262
- });
247
+ const { address: multiAdderAddress } = await deployL1Contract(
248
+ this.context.deployL1ContractsValues.l1Client,
249
+ MultiAdderArtifact.contractAbi,
250
+ MultiAdderArtifact.contractBytecode,
251
+ [rollup.address, this.context.deployL1ContractsValues.l1Client.account.address],
252
+ );
263
253
 
264
- const stakeNeeded = (await rollup.read.getActivationThreshold()) * BigInt(this.numberOfValidators);
265
- await Promise.all(
266
- [await stakingAsset.write.mint([multiAdder.address, stakeNeeded], {} as any)].map(txHash =>
267
- deployL1ContractsValues.l1Client.waitForTransactionReceipt({ hash: txHash }),
268
- ),
269
- );
254
+ const multiAdder = getContract({
255
+ address: multiAdderAddress.toString(),
256
+ abi: MultiAdderArtifact.contractAbi,
257
+ client: this.context.deployL1ContractsValues.l1Client,
258
+ });
270
259
 
271
- const { validators } = this.getValidators();
272
- this.validators = validators;
260
+ const stakeNeeded = (await rollup.read.getActivationThreshold()) * BigInt(this.numberOfValidators);
261
+ await Promise.all(
262
+ [await stakingAsset.write.mint([multiAdder.address, stakeNeeded], {} as any)].map(txHash =>
263
+ this.context.deployL1ContractsValues.l1Client.waitForTransactionReceipt({ hash: txHash }),
264
+ ),
265
+ );
273
266
 
274
- const gseAddress = deployL1ContractsValues.l1ContractAddresses.gseAddress!;
275
- if (!gseAddress) {
276
- throw new Error('GSE contract not deployed');
277
- }
267
+ const { validators } = this.getValidators();
268
+ this.validators = validators;
278
269
 
279
- const gseContract = new GSEContract(deployL1ContractsValues.l1Client, gseAddress.toString());
270
+ const gseAddress = this.context.deployL1ContractsValues.l1ContractAddresses.gseAddress!;
271
+ if (!gseAddress) {
272
+ throw new Error('GSE contract not deployed');
273
+ }
274
+
275
+ const gseContract = new GSEContract(this.context.deployL1ContractsValues.l1Client, gseAddress.toString());
280
276
 
281
- const makeValidatorTuples = async (validator: Operator) => {
282
- const registrationTuple = await gseContract.makeRegistrationTuple(validator.bn254SecretKey.getValue());
283
- return {
284
- attester: validator.attester.toString() as `0x${string}`,
285
- withdrawer: validator.withdrawer.toString() as `0x${string}`,
286
- ...registrationTuple,
287
- };
277
+ const makeValidatorTuples = async (validator: Operator) => {
278
+ const registrationTuple = await gseContract.makeRegistrationTuple(validator.bn254SecretKey.getValue());
279
+ return {
280
+ attester: validator.attester.toString() as `0x${string}`,
281
+ withdrawer: validator.withdrawer.toString() as `0x${string}`,
282
+ ...registrationTuple,
288
283
  };
289
- const validatorTuples = await Promise.all(validators.map(makeValidatorTuples));
284
+ };
285
+ const validatorTuples = await Promise.all(validators.map(makeValidatorTuples));
290
286
 
291
- await deployL1ContractsValues.l1Client.waitForTransactionReceipt({
292
- hash: await multiAdder.write.addValidators([validatorTuples]),
293
- });
287
+ await this.context.deployL1ContractsValues.l1Client.waitForTransactionReceipt({
288
+ hash: await multiAdder.write.addValidators([validatorTuples]),
289
+ });
294
290
 
295
- await cheatCodes.rollup.advanceToEpoch(
296
- EpochNumber.fromBigInt(
297
- BigInt(await cheatCodes.rollup.getEpoch()) + (await rollup.read.getLagInEpochsForValidatorSet()) + 1n,
298
- ),
299
- );
291
+ await this.context.cheatCodes.rollup.advanceToEpoch(
292
+ EpochNumber.fromBigInt(
293
+ BigInt(await this.context.cheatCodes.rollup.getEpoch()) +
294
+ (await rollup.read.getLagInEpochsForValidatorSet()) +
295
+ 1n,
296
+ ),
297
+ );
300
298
 
301
- // Send and await a tx to make sure we mine a block for the warp to correctly progress.
302
- await this._sendDummyTx(deployL1ContractsValues.l1Client);
303
- });
299
+ // Send and await a tx to make sure we mine a block for the warp to correctly progress.
300
+ await this._sendDummyTx(this.context.deployL1ContractsValues.l1Client);
304
301
  }
305
302
 
303
+ /** Points the wallet to a P2P-enabled node so transactions can propagate through the network. */
304
+ setupWalletOnNode(node: AztecNodeService) {
305
+ this.logger.info('Pointing wallet to a P2P-enabled node');
306
+ this.context.wallet.updateNode(node);
307
+ }
308
+
309
+ /** Registers the hardcoded account in PXE without on-chain deployment. No sequencer needed. */
306
310
  async setupAccount() {
307
- await this.snapshotManager.snapshot(
308
- 'setup-account',
309
- deployAccounts(1, this.logger),
310
- ({ deployedAccounts }, { wallet }) => {
311
- this.deployedAccounts = deployedAccounts;
312
- [{ address: this.defaultAccountAddress }] = deployedAccounts;
313
- this.wallet = wallet;
314
- return Promise.resolve();
315
- },
316
- );
311
+ this.logger.info('Registering hardcoded account (no deployment)');
312
+ const contract = new SchnorrHardcodedKeyAccountContract();
313
+ const accountManager = await (this.context.wallet as TestWallet).createAccount({
314
+ secret: this.hardcodedAccountData.secret,
315
+ salt: this.hardcodedAccountData.salt,
316
+ contract,
317
+ });
318
+ this.defaultAccountAddress = accountManager.address;
319
+ this.wallet = this.context.wallet;
317
320
  }
318
321
 
319
322
  async deploySpamContract() {
320
- await this.snapshotManager.snapshot(
321
- 'add-spam-contract',
322
- async () => {
323
- if (!this.wallet) {
324
- throw new Error('Call snapshot t.setupAccount before deploying account contract');
325
- }
326
-
327
- const spamContract = await SpamContract.deploy(this.wallet)
328
- .send({ from: this.defaultAccountAddress! })
329
- .deployed();
330
- return { contractAddress: spamContract.address };
331
- },
332
- ({ contractAddress }) => {
333
- if (!this.wallet) {
334
- throw new Error('Call snapshot t.setupAccount before deploying account contract');
335
- }
336
- this.spamContract = SpamContract.at(contractAddress, this.wallet);
337
- return Promise.resolve();
338
- },
339
- );
323
+ this.logger.info('Deploying spam contract');
324
+ if (!this.wallet) {
325
+ throw new Error('Call setupAccount before deploying spam contract');
326
+ }
327
+
328
+ ({ contract: this.spamContract } = await SpamContract.deploy(this.wallet).send({
329
+ from: this.defaultAccountAddress!,
330
+ }));
340
331
  }
341
332
 
342
333
  async removeInitialNode() {
343
- await this.snapshotManager.snapshot(
344
- 'remove-initial-validator',
345
- async ({ deployL1ContractsValues, aztecNode, dateProvider }) => {
346
- // Send and await a tx to make sure we mine a block for the warp to correctly progress.
347
- const { receipt } = await this._sendDummyTx(deployL1ContractsValues.l1Client);
348
- const block = await deployL1ContractsValues.l1Client.getBlock({
349
- blockNumber: receipt.blockNumber,
350
- });
351
- dateProvider.setTime(Number(block.timestamp) * 1000);
352
-
353
- await aztecNode.stop();
354
- },
355
- );
334
+ this.logger.info('Removing initial node');
335
+ // Send and await a tx to make sure we mine a block for the warp to correctly progress.
336
+ const { receipt } = await this._sendDummyTx(this.context.deployL1ContractsValues.l1Client);
337
+ const block = await this.context.deployL1ContractsValues.l1Client.getBlock({
338
+ blockNumber: receipt.blockNumber,
339
+ });
340
+ this.context.dateProvider.setTime(Number(block.timestamp) * 1000);
341
+
342
+ await this.context.aztecNodeService.stop();
356
343
  }
357
344
 
358
345
  async sendDummyTx() {
@@ -360,7 +347,7 @@ export class P2PNetworkTest {
360
347
  }
361
348
 
362
349
  private async _sendDummyTx(l1Client: ExtendedViemWalletClient) {
363
- const l1TxUtils = createL1TxUtilsFromViemWallet(l1Client);
350
+ const l1TxUtils = createL1TxUtils(l1Client);
364
351
  return await l1TxUtils.sendAndMonitorTransaction({
365
352
  to: l1Client.account!.address,
366
353
  value: 1n,
@@ -368,17 +355,53 @@ export class P2PNetworkTest {
368
355
  }
369
356
 
370
357
  async setup() {
371
- this.ctx = await this.snapshotManager.setup();
358
+ this.logger.info('Setting up subsystems from fresh');
359
+
360
+ // Pre-compute hardcoded account data so it gets funded in genesis.
361
+ const contract = new SchnorrHardcodedKeyAccountContract();
362
+ const secret = Fr.random();
363
+ const salt = Fr.random();
364
+ this.hardcodedAccountData = {
365
+ secret,
366
+ salt,
367
+ signingKey: SCHNORR_HARDCODED_PRIVATE_KEY,
368
+ address: await getAccountContractAddress(contract, secret, salt),
369
+ };
370
+
371
+ // Generate regular Schnorr accounts for tests that need deployable accounts (e.g. add_rollup).
372
+ const regularAccounts = await generateSchnorrAccounts(this.setupOptions.numberOfInitialFundedAccounts ?? 2);
373
+
374
+ this.context = await setup(
375
+ 0,
376
+ {
377
+ ...this.setupOptions,
378
+ fundSponsoredFPC: true,
379
+ skipAccountDeployment: true,
380
+ skipInitialSequencer: true,
381
+ initialFundedAccounts: [...regularAccounts, this.hardcodedAccountData],
382
+ slasherEnabled: this.setupOptions.slasherEnabled ?? this.deployL1ContractsArgs.slasherEnabled ?? false,
383
+ aztecTargetCommitteeSize: 0,
384
+ l1ContractsArgs: this.deployL1ContractsArgs,
385
+ },
386
+ // Use checkpointed chain tip for PXE to avoid issues with blocks being dropped due to pruned anchor blocks.
387
+ { syncChainTip: 'checkpointed' },
388
+ );
389
+ this.ctx = this.context;
372
390
 
373
391
  const sponsoredFPCAddress = await getSponsoredFPCAddress();
374
- const initialFundedAccounts = [...this.ctx.initialFundedAccounts.map(a => a.address), sponsoredFPCAddress];
392
+ const initialFundedAccounts = [...this.context.initialFundedAccounts.map(a => a.address), sponsoredFPCAddress];
375
393
 
376
- const { prefilledPublicData } = await getGenesisValues(initialFundedAccounts);
377
- this.prefilledPublicData = prefilledPublicData;
394
+ const { genesis } = await getGenesisValues(
395
+ initialFundedAccounts,
396
+ undefined,
397
+ undefined,
398
+ this.context.genesis!.genesisTimestamp,
399
+ );
400
+ this.genesis = genesis;
378
401
 
379
- const rollupContract = RollupContract.getFromL1ContractsValues(this.ctx.deployL1ContractsValues);
380
- this.monitor = new ChainMonitor(rollupContract, this.ctx.dateProvider).start();
381
- this.monitor.on('l1-block', ({ timestamp }) => this.ctx.dateProvider.setTime(Number(timestamp) * 1000));
402
+ const rollupContract = RollupContract.getFromL1ContractsValues(this.context.deployL1ContractsValues);
403
+ this.monitor = new ChainMonitor(rollupContract, this.context.dateProvider).start();
404
+ this.monitor.on('l1-block', ({ timestamp }) => this.context.dateProvider.setTime(Number(timestamp) * 1000));
382
405
  }
383
406
 
384
407
  async stopNodes(nodes: AztecNodeService[]) {
@@ -409,6 +432,7 @@ export class P2PNetworkTest {
409
432
  expectedNodeCount?: number,
410
433
  timeoutSeconds = 30,
411
434
  checkIntervalSeconds = 0.1,
435
+ topics: TopicType[] = [TopicType.tx],
412
436
  ) {
413
437
  const nodeCount = expectedNodeCount ?? nodes.length;
414
438
  const minPeerCount = nodeCount - 1;
@@ -434,22 +458,44 @@ export class P2PNetworkTest {
434
458
  );
435
459
 
436
460
  this.logger.warn('All nodes connected to P2P mesh');
461
+
462
+ // Wait for GossipSub mesh to form for all specified topics.
463
+ // We only require at least 1 mesh peer per node because GossipSub
464
+ // stops grafting once it reaches Dlo peers and won't fill the mesh to all available peers.
465
+ for (const topic of topics) {
466
+ this.logger.warn(`Waiting for GossipSub mesh to form for ${topic} topic...`);
467
+ await Promise.all(
468
+ nodes.map(async (node, index) => {
469
+ const p2p = node.getP2P();
470
+ await retryUntil(
471
+ async () => {
472
+ const meshPeers = await p2p.getGossipMeshPeerCount(topic);
473
+ this.logger.debug(`Node ${index} has ${meshPeers} gossip mesh peers for ${topic} topic`);
474
+ return meshPeers >= 1 ? true : undefined;
475
+ },
476
+ `Node ${index} to have gossip mesh peers for ${topic} topic`,
477
+ timeoutSeconds,
478
+ checkIntervalSeconds,
479
+ );
480
+ }),
481
+ );
482
+ this.logger.warn(`All nodes have gossip mesh peers for ${topic} topic`);
483
+ }
437
484
  }
438
485
 
439
486
  async teardown() {
440
487
  await this.monitor.stop();
441
488
  await tryStop(this.bootstrapNode, this.logger);
442
- await this.snapshotManager.teardown();
489
+ await teardown(this.context);
443
490
  }
444
491
 
445
492
  async getContracts(): Promise<{
446
493
  rollup: RollupContract;
447
494
  slasherContract: GetContractReturnType<typeof SlasherAbi, ViemClient>;
448
- slashingProposer: EmpireSlashingProposerContract | TallySlashingProposerContract | undefined;
449
- slashFactory: SlashFactoryContract;
495
+ slashingProposer: SlashingProposerContract | undefined;
450
496
  }> {
451
497
  if (!this.ctx.deployL1ContractsValues) {
452
- throw new Error('DeployL1ContractsValues not set');
498
+ throw new Error('DeployAztecL1ContractsValues not set');
453
499
  }
454
500
 
455
501
  const rollup = new RollupContract(
@@ -458,19 +504,14 @@ export class P2PNetworkTest {
458
504
  );
459
505
 
460
506
  const slasherContract = getContract({
461
- address: getAddress(await rollup.getSlasherAddress()),
507
+ address: getAddress((await rollup.getSlasherAddress()).toString()),
462
508
  abi: SlasherAbi,
463
509
  client: this.ctx.deployL1ContractsValues.l1Client,
464
510
  });
465
511
 
466
- // Get the actual slashing proposer from rollup (which handles both empire and tally)
512
+ // Get the actual slashing proposer from rollup
467
513
  const slashingProposer = await rollup.getSlashingProposer();
468
514
 
469
- const slashFactory = new SlashFactoryContract(
470
- this.ctx.deployL1ContractsValues.l1Client,
471
- getAddress(this.ctx.deployL1ContractsValues.l1ContractAddresses.slashFactoryAddress!.toString()),
472
- );
473
-
474
- return { rollup, slasherContract, slashingProposer, slashFactory };
515
+ return { rollup, slasherContract, slashingProposer };
475
516
  }
476
517
  }