@aztec/end-to-end 0.0.1-commit.fce3e4f → 0.0.1-commit.ff7989d6c

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