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

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