@aztec/end-to-end 0.0.1-commit.b655e406 → 0.0.1-commit.b6e433891

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