@aztec/end-to-end 0.0.1-commit.c7c42ec → 0.0.1-commit.d1f2d6c

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 (166) 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 +12 -13
  5. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  6. package/dest/bench/client_flows/client_flows_benchmark.js +118 -133
  7. package/dest/bench/client_flows/data_extractor.js +3 -1
  8. package/dest/bench/utils.d.ts +9 -8
  9. package/dest/bench/utils.d.ts.map +1 -1
  10. package/dest/bench/utils.js +17 -12
  11. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +6 -7
  12. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  13. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +96 -112
  14. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +15 -10
  15. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
  16. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +89 -70
  17. package/dest/e2e_deploy_contract/deploy_test.d.ts +4 -3
  18. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  19. package/dest/e2e_deploy_contract/deploy_test.js +18 -13
  20. package/dest/e2e_epochs/epochs_test.d.ts +1 -1
  21. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  22. package/dest/e2e_epochs/epochs_test.js +5 -2
  23. package/dest/e2e_fees/bridging_race.notest.js +3 -5
  24. package/dest/e2e_fees/fees_test.d.ts +13 -13
  25. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  26. package/dest/e2e_fees/fees_test.js +123 -141
  27. package/dest/e2e_l1_publisher/write_json.d.ts +2 -2
  28. package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
  29. package/dest/e2e_l1_publisher/write_json.js +19 -15
  30. package/dest/e2e_nested_contract/nested_contract_test.d.ts +6 -9
  31. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  32. package/dest/e2e_nested_contract/nested_contract_test.js +31 -39
  33. package/dest/e2e_p2p/inactivity_slash_test.d.ts +3 -3
  34. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
  35. package/dest/e2e_p2p/inactivity_slash_test.js +3 -3
  36. package/dest/e2e_p2p/p2p_network.d.ts +7 -6
  37. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  38. package/dest/e2e_p2p/p2p_network.js +109 -103
  39. package/dest/e2e_p2p/shared.d.ts +6 -6
  40. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  41. package/dest/e2e_p2p/shared.js +11 -18
  42. package/dest/e2e_token_contract/token_contract_test.d.ts +16 -9
  43. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  44. package/dest/e2e_token_contract/token_contract_test.js +89 -91
  45. package/dest/fixtures/e2e_prover_test.d.ts +8 -14
  46. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  47. package/dest/fixtures/e2e_prover_test.js +85 -94
  48. package/dest/fixtures/setup.d.ts +216 -0
  49. package/dest/fixtures/setup.d.ts.map +1 -0
  50. package/dest/fixtures/setup.js +684 -0
  51. package/dest/fixtures/token_utils.d.ts +1 -1
  52. package/dest/fixtures/token_utils.d.ts.map +1 -1
  53. package/dest/fixtures/token_utils.js +7 -4
  54. package/dest/fixtures/utils.d.ts +5 -194
  55. package/dest/fixtures/utils.d.ts.map +1 -1
  56. package/dest/fixtures/utils.js +4 -619
  57. package/dest/quality_of_service/grafana_client.d.ts +41 -0
  58. package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
  59. package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
  60. package/dest/quality_of_service/prometheus_client.d.ts +38 -0
  61. package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
  62. package/dest/quality_of_service/prometheus_client.js +67 -0
  63. package/dest/shared/cross_chain_test_harness.d.ts +16 -6
  64. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  65. package/dest/shared/cross_chain_test_harness.js +13 -13
  66. package/dest/shared/gas_portal_test_harness.d.ts +11 -1
  67. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  68. package/dest/shared/gas_portal_test_harness.js +1 -1
  69. package/dest/shared/index.d.ts +2 -2
  70. package/dest/shared/index.d.ts.map +1 -1
  71. package/dest/shared/submit-transactions.d.ts +3 -3
  72. package/dest/shared/submit-transactions.d.ts.map +1 -1
  73. package/dest/shared/submit-transactions.js +9 -11
  74. package/dest/shared/uniswap_l1_l2.d.ts +3 -28
  75. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  76. package/dest/shared/uniswap_l1_l2.js +51 -33
  77. package/dest/simulators/lending_simulator.d.ts +5 -1
  78. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  79. package/dest/simulators/lending_simulator.js +2 -2
  80. package/dest/spartan/setup_test_wallets.d.ts +4 -3
  81. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  82. package/dest/spartan/setup_test_wallets.js +61 -34
  83. package/dest/spartan/tx_metrics.d.ts +17 -2
  84. package/dest/spartan/tx_metrics.d.ts.map +1 -1
  85. package/dest/spartan/tx_metrics.js +183 -6
  86. package/dest/spartan/utils/bot.d.ts +27 -0
  87. package/dest/spartan/utils/bot.d.ts.map +1 -0
  88. package/dest/spartan/utils/bot.js +141 -0
  89. package/dest/spartan/utils/chaos.d.ts +79 -0
  90. package/dest/spartan/utils/chaos.d.ts.map +1 -0
  91. package/dest/spartan/utils/chaos.js +142 -0
  92. package/dest/spartan/utils/clients.d.ts +39 -0
  93. package/dest/spartan/utils/clients.d.ts.map +1 -0
  94. package/dest/spartan/utils/clients.js +90 -0
  95. package/dest/spartan/utils/config.d.ts +36 -0
  96. package/dest/spartan/utils/config.d.ts.map +1 -0
  97. package/dest/spartan/utils/config.js +20 -0
  98. package/dest/spartan/utils/health.d.ts +63 -0
  99. package/dest/spartan/utils/health.d.ts.map +1 -0
  100. package/dest/spartan/utils/health.js +202 -0
  101. package/dest/spartan/utils/helm.d.ts +15 -0
  102. package/dest/spartan/utils/helm.d.ts.map +1 -0
  103. package/dest/spartan/utils/helm.js +47 -0
  104. package/dest/spartan/utils/index.d.ts +9 -0
  105. package/dest/spartan/utils/index.d.ts.map +1 -0
  106. package/dest/spartan/utils/index.js +18 -0
  107. package/dest/spartan/utils/k8s.d.ts +98 -0
  108. package/dest/spartan/utils/k8s.d.ts.map +1 -0
  109. package/dest/spartan/utils/k8s.js +257 -0
  110. package/dest/spartan/utils/nodes.d.ts +31 -0
  111. package/dest/spartan/utils/nodes.d.ts.map +1 -0
  112. package/dest/spartan/utils/nodes.js +290 -0
  113. package/dest/spartan/utils/scripts.d.ts +16 -0
  114. package/dest/spartan/utils/scripts.d.ts.map +1 -0
  115. package/dest/spartan/utils/scripts.js +66 -0
  116. package/dest/spartan/utils.d.ts +2 -253
  117. package/dest/spartan/utils.d.ts.map +1 -1
  118. package/dest/spartan/utils.js +1 -892
  119. package/package.json +40 -39
  120. package/src/bench/client_flows/benchmark.ts +24 -2
  121. package/src/bench/client_flows/client_flows_benchmark.ts +138 -204
  122. package/src/bench/client_flows/data_extractor.ts +1 -1
  123. package/src/bench/utils.ts +20 -14
  124. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +104 -142
  125. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +127 -116
  126. package/src/e2e_deploy_contract/deploy_test.ts +21 -14
  127. package/src/e2e_epochs/epochs_test.ts +31 -26
  128. package/src/e2e_fees/bridging_race.notest.ts +3 -9
  129. package/src/e2e_fees/fees_test.ts +172 -220
  130. package/src/e2e_l1_publisher/write_json.ts +21 -16
  131. package/src/e2e_nested_contract/nested_contract_test.ts +33 -56
  132. package/src/e2e_p2p/inactivity_slash_test.ts +5 -5
  133. package/src/e2e_p2p/p2p_network.ts +171 -168
  134. package/src/e2e_p2p/shared.ts +16 -25
  135. package/src/e2e_token_contract/token_contract_test.ts +103 -118
  136. package/src/fixtures/e2e_prover_test.ts +98 -133
  137. package/src/fixtures/setup.ts +1006 -0
  138. package/src/fixtures/token_utils.ts +6 -5
  139. package/src/fixtures/utils.ts +27 -907
  140. package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
  141. package/src/quality_of_service/prometheus_client.ts +113 -0
  142. package/src/shared/cross_chain_test_harness.ts +16 -36
  143. package/src/shared/gas_portal_test_harness.ts +1 -1
  144. package/src/shared/index.ts +1 -1
  145. package/src/shared/submit-transactions.ts +9 -15
  146. package/src/shared/uniswap_l1_l2.ts +58 -77
  147. package/src/simulators/lending_simulator.ts +2 -2
  148. package/src/spartan/setup_test_wallets.ts +79 -25
  149. package/src/spartan/tx_metrics.ts +129 -9
  150. package/src/spartan/utils/bot.ts +185 -0
  151. package/src/spartan/utils/chaos.ts +253 -0
  152. package/src/spartan/utils/clients.ts +100 -0
  153. package/src/spartan/utils/config.ts +26 -0
  154. package/src/spartan/utils/health.ts +255 -0
  155. package/src/spartan/utils/helm.ts +84 -0
  156. package/src/spartan/utils/index.ts +62 -0
  157. package/src/spartan/utils/k8s.ts +375 -0
  158. package/src/spartan/utils/nodes.ts +323 -0
  159. package/src/spartan/utils/scripts.ts +63 -0
  160. package/src/spartan/utils.ts +1 -1158
  161. package/dest/fixtures/snapshot_manager.d.ts +0 -93
  162. package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
  163. package/dest/fixtures/snapshot_manager.js +0 -493
  164. package/dest/quality_of_service/alert_checker.d.ts +0 -41
  165. package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
  166. package/src/fixtures/snapshot_manager.ts +0 -651
@@ -6,17 +6,15 @@ import { ChildContract } from '@aztec/noir-test-contracts.js/Child';
6
6
  import { ParentContract } from '@aztec/noir-test-contracts.js/Parent';
7
7
 
8
8
  import {
9
- type ISnapshotManager,
10
- type SubsystemsContext,
11
- createSnapshotManager,
9
+ type EndToEndContext,
12
10
  deployAccounts,
13
11
  publicDeployAccounts,
14
- } from '../fixtures/snapshot_manager.js';
15
-
16
- const { E2E_DATA_PATH: dataPath } = process.env;
12
+ setup,
13
+ teardown as teardownSubsystems,
14
+ } from '../fixtures/setup.js';
17
15
 
18
16
  export class NestedContractTest {
19
- private snapshotManager: ISnapshotManager;
17
+ context!: EndToEndContext;
20
18
  logger: Logger;
21
19
  wallet!: Wallet;
22
20
  defaultAccountAddress!: AztecAddress;
@@ -30,67 +28,46 @@ export class NestedContractTest {
30
28
  private numberOfAccounts = 1,
31
29
  ) {
32
30
  this.logger = createLogger(`e2e:e2e_nested_contract:${testName}`);
33
- this.snapshotManager = createSnapshotManager(`e2e_nested_contract/${testName}-${numberOfAccounts}`, dataPath);
34
31
  }
35
32
 
36
33
  /**
37
- * Adds two state shifts to snapshot manager.
38
- * 1. Add 3 accounts.
39
- * 2. Publicly deploy accounts
34
+ * Applies base setup by deploying accounts and publicly deploying them.
40
35
  */
41
- async applyBaseSnapshots() {
42
- await this.snapshotManager.snapshot(
43
- 'accounts',
44
- deployAccounts(this.numberOfAccounts, this.logger),
45
- ({ deployedAccounts }, { wallet, aztecNode }) => {
46
- this.wallet = wallet;
47
- [{ address: this.defaultAccountAddress }] = deployedAccounts;
48
- this.aztecNode = aztecNode;
49
- return Promise.resolve();
50
- },
51
- );
36
+ async applyBaseSetup() {
37
+ this.logger.info('Deploying accounts');
38
+ const { deployedAccounts } = await deployAccounts(
39
+ this.numberOfAccounts,
40
+ this.logger,
41
+ )({
42
+ wallet: this.context.wallet,
43
+ initialFundedAccounts: this.context.initialFundedAccounts,
44
+ });
45
+ this.wallet = this.context.wallet;
46
+ [{ address: this.defaultAccountAddress }] = deployedAccounts;
47
+ this.aztecNode = this.context.aztecNodeService!;
52
48
 
53
- await this.snapshotManager.snapshot(
54
- 'public_deploy',
55
- async () => {},
56
- async () => {
57
- this.logger.verbose(`Public deploy accounts...`);
58
- await publicDeployAccounts(this.wallet, [this.defaultAccountAddress]);
59
- },
60
- );
49
+ this.logger.info('Public deploy accounts');
50
+ await publicDeployAccounts(this.wallet, [this.defaultAccountAddress]);
61
51
  }
62
52
 
63
53
  async setup() {
64
- await this.snapshotManager.setup();
54
+ this.logger.info('Setting up fresh subsystems');
55
+ this.context = await setup(0, {
56
+ fundSponsoredFPC: true,
57
+ skipAccountDeployment: true,
58
+ });
59
+ await this.applyBaseSetup();
65
60
  }
66
61
 
67
62
  async teardown() {
68
- await this.snapshotManager.teardown();
63
+ await teardownSubsystems(this.context);
69
64
  }
70
65
 
71
- snapshot = <T>(
72
- name: string,
73
- apply: (context: SubsystemsContext) => Promise<T>,
74
- restore: (snapshotData: T, context: SubsystemsContext) => Promise<void> = () => Promise.resolve(),
75
- ): Promise<void> => this.snapshotManager.snapshot(name, apply, restore);
76
-
77
- async applyManualSnapshots() {
78
- await this.snapshotManager.snapshot(
79
- 'manual',
80
- async () => {
81
- const parentContract = await ParentContract.deploy(this.wallet)
82
- .send({ from: this.defaultAccountAddress })
83
- .deployed();
84
- const childContract = await ChildContract.deploy(this.wallet)
85
- .send({ from: this.defaultAccountAddress })
86
- .deployed();
87
- return { parentContractAddress: parentContract.address, childContractAddress: childContract.address };
88
- },
89
- ({ parentContractAddress, childContractAddress }) => {
90
- this.parentContract = ParentContract.at(parentContractAddress, this.wallet);
91
- this.childContract = ChildContract.at(childContractAddress, this.wallet);
92
- return Promise.resolve();
93
- },
94
- );
66
+ async applyManual() {
67
+ this.logger.info('Deploying parent and child contracts');
68
+ const parentContract = await ParentContract.deploy(this.wallet).send({ from: this.defaultAccountAddress });
69
+ const childContract = await ChildContract.deploy(this.wallet).send({ from: this.defaultAccountAddress });
70
+ this.parentContract = parentContract;
71
+ this.childContract = childContract;
95
72
  }
96
73
  }
@@ -82,8 +82,8 @@ export class P2PInactivityTest {
82
82
  }
83
83
 
84
84
  public async setup() {
85
- await this.test.applyBaseSnapshots();
86
85
  await this.test.setup();
86
+ await this.test.applyBaseSetup();
87
87
 
88
88
  // Set slashing penalties for inactivity
89
89
  const { rollup } = await this.test.getContracts();
@@ -98,13 +98,13 @@ export class P2PInactivityTest {
98
98
  this.rollup = rollup;
99
99
 
100
100
  if (!this.keepInitialNode) {
101
- await this.test.ctx.aztecNode.stop();
101
+ await this.test.ctx.aztecNodeService!.stop();
102
102
  }
103
103
 
104
104
  // Create all active nodes
105
105
  this.activeNodes = await createNodes(
106
106
  this.test.ctx.aztecNodeConfig,
107
- this.test.ctx.dateProvider,
107
+ this.test.ctx.dateProvider!,
108
108
  this.test.bootstrapNodeEnr,
109
109
  NUM_NODES - this.inactiveNodeCount - Number(this.keepInitialNode),
110
110
  BOOT_NODE_UDP_PORT,
@@ -118,7 +118,7 @@ export class P2PInactivityTest {
118
118
  const inactiveConfig = { ...this.test.ctx.aztecNodeConfig, dontStartSequencer: true };
119
119
  this.inactiveNodes = await createNodes(
120
120
  inactiveConfig,
121
- this.test.ctx.dateProvider,
121
+ this.test.ctx.dateProvider!,
122
122
  this.test.bootstrapNodeEnr,
123
123
  this.inactiveNodeCount,
124
124
  BOOT_NODE_UDP_PORT,
@@ -129,7 +129,7 @@ export class P2PInactivityTest {
129
129
  );
130
130
 
131
131
  this.nodes = [
132
- ...(this.keepInitialNode ? [this.test.ctx.aztecNode] : []),
132
+ ...(this.keepInitialNode ? [this.test.ctx.aztecNodeService!] : []),
133
133
  ...this.activeNodes,
134
134
  ...this.inactiveNodes,
135
135
  ];
@@ -34,18 +34,20 @@ 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';
50
52
 
51
53
  // Use a fixed bootstrap node private key so that we can re-use the same snapshot and the nodes can find each other
@@ -60,14 +62,14 @@ export const SHORTENED_BLOCK_TIME_CONFIG_NO_PRUNES = {
60
62
  };
61
63
 
62
64
  export class P2PNetworkTest {
63
- private snapshotManager: ISnapshotManager;
65
+ public context!: EndToEndContext;
64
66
  public baseAccountPrivateKey: `0x${string}`;
65
67
  public baseAccount;
66
68
 
67
69
  public logger: Logger;
68
70
  public monitor!: ChainMonitor;
69
71
 
70
- public ctx!: SubsystemsContext;
72
+ public ctx!: EndToEndContext;
71
73
  public attesterPrivateKeys: `0x${string}`[] = [];
72
74
  public attesterPublicKeys: string[] = [];
73
75
  public peerIdPrivateKeys: string[] = [];
@@ -83,6 +85,10 @@ export class P2PNetworkTest {
83
85
 
84
86
  public bootstrapNode?: BootstrapNode;
85
87
 
88
+ // Store setup options for use in setup()
89
+ private setupOptions: SetupOptions;
90
+ private deployL1ContractsArgs: any;
91
+
86
92
  constructor(
87
93
  public readonly testName: string,
88
94
  public bootstrapNodeEnr: string,
@@ -107,43 +113,41 @@ export class P2PNetworkTest {
107
113
 
108
114
  const zkPassportParams = ZkPassportProofParams.random();
109
115
 
110
- this.snapshotManager = createSnapshotManager(
111
- `e2e_p2p_network/${testName}`,
112
- process.env.E2E_DATA_PATH,
113
- {
114
- ...initialValidatorConfig,
115
- ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
116
- aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
117
- aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
118
- aztecProofSubmissionEpochs:
119
- initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
120
- slashingRoundSizeInEpochs:
121
- initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
122
- slasherFlavor: initialValidatorConfig.slasherFlavor ?? 'tally',
123
- aztecTargetCommitteeSize: numberOfValidators,
124
- metricsPort: metricsPort,
125
- numberOfInitialFundedAccounts: 2,
126
- startProverNode,
127
- },
128
- {
129
- ...initialValidatorConfig,
130
- aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
131
- slashingRoundSizeInEpochs:
132
- initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
133
- slasherFlavor: initialValidatorConfig.slasherFlavor ?? 'tally',
134
-
135
- ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
136
- aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
137
- aztecProofSubmissionEpochs:
138
- initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
139
- aztecTargetCommitteeSize: numberOfValidators,
140
- initialValidators: [],
141
- zkPassportArgs: {
142
- zkPassportDomain: zkPassportParams.domain,
143
- zkPassportScope: zkPassportParams.scope,
144
- },
116
+ // Store setup options for later use
117
+ this.setupOptions = {
118
+ ...initialValidatorConfig,
119
+ ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
120
+ aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
121
+ aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
122
+ aztecProofSubmissionEpochs:
123
+ initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
124
+ slashingRoundSizeInEpochs:
125
+ initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
126
+ slasherFlavor: initialValidatorConfig.slasherFlavor ?? 'tally',
127
+ aztecTargetCommitteeSize: numberOfValidators,
128
+ metricsPort: metricsPort,
129
+ numberOfInitialFundedAccounts: 2,
130
+ startProverNode,
131
+ };
132
+
133
+ this.deployL1ContractsArgs = {
134
+ ...initialValidatorConfig,
135
+ aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
136
+ slashingRoundSizeInEpochs:
137
+ initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
138
+ slasherFlavor: initialValidatorConfig.slasherFlavor ?? 'tally',
139
+
140
+ ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
141
+ aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
142
+ aztecProofSubmissionEpochs:
143
+ initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
144
+ aztecTargetCommitteeSize: numberOfValidators,
145
+ initialValidators: [],
146
+ zkPassportArgs: {
147
+ zkPassportDomain: zkPassportParams.domain,
148
+ zkPassportScope: zkPassportParams.scope,
145
149
  },
146
- );
150
+ };
147
151
  }
148
152
 
149
153
  static async create({
@@ -187,23 +191,22 @@ export class P2PNetworkTest {
187
191
 
188
192
  get fundedAccount() {
189
193
  if (!this.deployedAccounts[0]) {
190
- throw new Error('Call snapshot t.setupAccount to create a funded account.');
194
+ throw new Error('Call setupAccount to create a funded account.');
191
195
  }
192
196
  return this.deployedAccounts[0];
193
197
  }
194
198
 
195
199
  async addBootstrapNode() {
196
- await this.snapshotManager.snapshot('add-bootstrap-node', async ({ aztecNodeConfig }) => {
197
- const telemetry = await getEndToEndTestTelemetryClient(this.metricsPort);
198
- this.bootstrapNode = await createBootstrapNodeFromPrivateKey(
199
- BOOTSTRAP_NODE_PRIVATE_KEY,
200
- this.bootNodePort,
201
- telemetry,
202
- aztecNodeConfig,
203
- );
204
- // Overwrite enr with updated info
205
- this.bootstrapNodeEnr = this.bootstrapNode.getENR().encodeTxt();
206
- });
200
+ this.logger.info('Adding bootstrap node');
201
+ const telemetry = await getEndToEndTestTelemetryClient(this.metricsPort);
202
+ this.bootstrapNode = await createBootstrapNodeFromPrivateKey(
203
+ BOOTSTRAP_NODE_PRIVATE_KEY,
204
+ this.bootNodePort,
205
+ telemetry,
206
+ this.context.config,
207
+ );
208
+ // Overwrite enr with updated info
209
+ this.bootstrapNodeEnr = this.bootstrapNode.getENR().encodeTxt();
207
210
  }
208
211
 
209
212
  getValidators() {
@@ -224,128 +227,114 @@ export class P2PNetworkTest {
224
227
  return { validators };
225
228
  }
226
229
 
227
- async applyBaseSnapshots() {
230
+ async applyBaseSetup() {
228
231
  await this.addBootstrapNode();
229
- await this.snapshotManager.snapshot('add-validators', async ({ deployL1ContractsValues, cheatCodes }) => {
230
- const rollup = getContract({
231
- address: deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
232
- abi: RollupAbi,
233
- client: deployL1ContractsValues.l1Client,
234
- });
235
232
 
236
- this.logger.info(`Adding ${this.numberOfValidators} validators`);
233
+ this.logger.info('Adding validators');
234
+ const rollup = getContract({
235
+ address: this.context.deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
236
+ abi: RollupAbi,
237
+ client: this.context.deployL1ContractsValues.l1Client,
238
+ });
237
239
 
238
- const stakingAsset = getContract({
239
- address: deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
240
- abi: TestERC20Abi,
241
- client: deployL1ContractsValues.l1Client,
242
- });
240
+ this.logger.info(`Adding ${this.numberOfValidators} validators`);
243
241
 
244
- const { address: multiAdderAddress } = await deployL1Contract(
245
- deployL1ContractsValues.l1Client,
246
- MultiAdderArtifact.contractAbi,
247
- MultiAdderArtifact.contractBytecode,
248
- [rollup.address, deployL1ContractsValues.l1Client.account.address],
249
- );
250
-
251
- const multiAdder = getContract({
252
- address: multiAdderAddress.toString(),
253
- abi: MultiAdderArtifact.contractAbi,
254
- client: deployL1ContractsValues.l1Client,
255
- });
242
+ const stakingAsset = getContract({
243
+ address: this.context.deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
244
+ abi: TestERC20Abi,
245
+ client: this.context.deployL1ContractsValues.l1Client,
246
+ });
256
247
 
257
- const stakeNeeded = (await rollup.read.getActivationThreshold()) * BigInt(this.numberOfValidators);
258
- await Promise.all(
259
- [await stakingAsset.write.mint([multiAdder.address, stakeNeeded], {} as any)].map(txHash =>
260
- deployL1ContractsValues.l1Client.waitForTransactionReceipt({ hash: txHash }),
261
- ),
262
- );
263
-
264
- const { validators } = this.getValidators();
265
- this.validators = validators;
266
-
267
- const gseAddress = deployL1ContractsValues.l1ContractAddresses.gseAddress!;
268
- if (!gseAddress) {
269
- throw new Error('GSE contract not deployed');
270
- }
271
-
272
- const gseContract = new GSEContract(deployL1ContractsValues.l1Client, gseAddress.toString());
273
-
274
- const makeValidatorTuples = async (validator: Operator) => {
275
- const registrationTuple = await gseContract.makeRegistrationTuple(validator.bn254SecretKey.getValue());
276
- return {
277
- attester: validator.attester.toString() as `0x${string}`,
278
- withdrawer: validator.withdrawer.toString() as `0x${string}`,
279
- ...registrationTuple,
280
- };
281
- };
282
- const validatorTuples = await Promise.all(validators.map(makeValidatorTuples));
248
+ const { address: multiAdderAddress } = await deployL1Contract(
249
+ this.context.deployL1ContractsValues.l1Client,
250
+ MultiAdderArtifact.contractAbi,
251
+ MultiAdderArtifact.contractBytecode,
252
+ [rollup.address, this.context.deployL1ContractsValues.l1Client.account.address],
253
+ );
283
254
 
284
- await deployL1ContractsValues.l1Client.waitForTransactionReceipt({
285
- hash: await multiAdder.write.addValidators([validatorTuples]),
286
- });
255
+ const multiAdder = getContract({
256
+ address: multiAdderAddress.toString(),
257
+ abi: MultiAdderArtifact.contractAbi,
258
+ client: this.context.deployL1ContractsValues.l1Client,
259
+ });
260
+
261
+ const stakeNeeded = (await rollup.read.getActivationThreshold()) * BigInt(this.numberOfValidators);
262
+ await Promise.all(
263
+ [await stakingAsset.write.mint([multiAdder.address, stakeNeeded], {} as any)].map(txHash =>
264
+ this.context.deployL1ContractsValues.l1Client.waitForTransactionReceipt({ hash: txHash }),
265
+ ),
266
+ );
287
267
 
288
- await cheatCodes.rollup.advanceToEpoch(
289
- EpochNumber.fromBigInt(
290
- BigInt(await cheatCodes.rollup.getEpoch()) + (await rollup.read.getLagInEpochsForValidatorSet()) + 1n,
291
- ),
292
- );
268
+ const { validators } = this.getValidators();
269
+ this.validators = validators;
293
270
 
294
- // Send and await a tx to make sure we mine a block for the warp to correctly progress.
295
- await this._sendDummyTx(deployL1ContractsValues.l1Client);
271
+ const gseAddress = this.context.deployL1ContractsValues.l1ContractAddresses.gseAddress!;
272
+ if (!gseAddress) {
273
+ throw new Error('GSE contract not deployed');
274
+ }
275
+
276
+ const gseContract = new GSEContract(this.context.deployL1ContractsValues.l1Client, gseAddress.toString());
277
+
278
+ const makeValidatorTuples = async (validator: Operator) => {
279
+ const registrationTuple = await gseContract.makeRegistrationTuple(validator.bn254SecretKey.getValue());
280
+ return {
281
+ attester: validator.attester.toString() as `0x${string}`,
282
+ withdrawer: validator.withdrawer.toString() as `0x${string}`,
283
+ ...registrationTuple,
284
+ };
285
+ };
286
+ const validatorTuples = await Promise.all(validators.map(makeValidatorTuples));
287
+
288
+ await this.context.deployL1ContractsValues.l1Client.waitForTransactionReceipt({
289
+ hash: await multiAdder.write.addValidators([validatorTuples]),
296
290
  });
291
+
292
+ await this.context.cheatCodes.rollup.advanceToEpoch(
293
+ EpochNumber.fromBigInt(
294
+ BigInt(await this.context.cheatCodes.rollup.getEpoch()) +
295
+ (await rollup.read.getLagInEpochsForValidatorSet()) +
296
+ 1n,
297
+ ),
298
+ );
299
+
300
+ // Send and await a tx to make sure we mine a block for the warp to correctly progress.
301
+ await this._sendDummyTx(this.context.deployL1ContractsValues.l1Client);
297
302
  }
298
303
 
299
304
  async setupAccount() {
300
- await this.snapshotManager.snapshot(
301
- 'setup-account',
302
- deployAccounts(1, this.logger),
303
- ({ deployedAccounts }, { wallet }) => {
304
- this.deployedAccounts = deployedAccounts;
305
- [{ address: this.defaultAccountAddress }] = deployedAccounts;
306
- this.wallet = wallet;
307
- return Promise.resolve();
308
- },
309
- );
305
+ this.logger.info('Setting up account');
306
+ const { deployedAccounts } = await deployAccounts(
307
+ 1,
308
+ this.logger,
309
+ )({
310
+ wallet: this.context.wallet,
311
+ initialFundedAccounts: this.context.initialFundedAccounts,
312
+ });
313
+ this.deployedAccounts = deployedAccounts;
314
+ [{ address: this.defaultAccountAddress }] = deployedAccounts;
315
+ this.wallet = this.context.wallet;
310
316
  }
311
317
 
312
318
  async deploySpamContract() {
313
- await this.snapshotManager.snapshot(
314
- 'add-spam-contract',
315
- async () => {
316
- if (!this.wallet) {
317
- throw new Error('Call snapshot t.setupAccount before deploying account contract');
318
- }
319
-
320
- const spamContract = await SpamContract.deploy(this.wallet)
321
- .send({ from: this.defaultAccountAddress! })
322
- .deployed();
323
- return { contractAddress: spamContract.address };
324
- },
325
- ({ contractAddress }) => {
326
- if (!this.wallet) {
327
- throw new Error('Call snapshot t.setupAccount before deploying account contract');
328
- }
329
- this.spamContract = SpamContract.at(contractAddress, this.wallet);
330
- return Promise.resolve();
331
- },
332
- );
319
+ this.logger.info('Deploying spam contract');
320
+ if (!this.wallet) {
321
+ throw new Error('Call setupAccount before deploying spam contract');
322
+ }
323
+
324
+ const spamContract = await SpamContract.deploy(this.wallet).send({ from: this.defaultAccountAddress! });
325
+ this.spamContract = spamContract;
333
326
  }
334
327
 
335
328
  async removeInitialNode() {
336
- await this.snapshotManager.snapshot(
337
- 'remove-initial-validator',
338
- async ({ deployL1ContractsValues, aztecNode, dateProvider }) => {
339
- // Send and await a tx to make sure we mine a block for the warp to correctly progress.
340
- const { receipt } = await this._sendDummyTx(deployL1ContractsValues.l1Client);
341
- const block = await deployL1ContractsValues.l1Client.getBlock({
342
- blockNumber: receipt.blockNumber,
343
- });
344
- dateProvider.setTime(Number(block.timestamp) * 1000);
345
-
346
- await aztecNode.stop();
347
- },
348
- );
329
+ this.logger.info('Removing initial node');
330
+ // Send and await a tx to make sure we mine a block for the warp to correctly progress.
331
+ const { receipt } = await this._sendDummyTx(this.context.deployL1ContractsValues.l1Client);
332
+ const block = await this.context.deployL1ContractsValues.l1Client.getBlock({
333
+ blockNumber: receipt.blockNumber,
334
+ });
335
+ this.context.dateProvider!.setTime(Number(block.timestamp) * 1000);
336
+
337
+ await this.context.aztecNodeService!.stop();
349
338
  }
350
339
 
351
340
  async sendDummyTx() {
@@ -361,17 +350,31 @@ export class P2PNetworkTest {
361
350
  }
362
351
 
363
352
  async setup() {
364
- this.ctx = await this.snapshotManager.setup();
353
+ this.logger.info('Setting up subsystems from fresh');
354
+ this.context = await setup(
355
+ 0,
356
+ {
357
+ ...this.setupOptions,
358
+ fundSponsoredFPC: true,
359
+ skipAccountDeployment: true,
360
+ slasherFlavor: this.setupOptions.slasherFlavor ?? this.deployL1ContractsArgs.slasherFlavor ?? 'none',
361
+ aztecTargetCommitteeSize: 0,
362
+ l1ContractsArgs: this.deployL1ContractsArgs,
363
+ },
364
+ // Use checkpointed chain tip for PXE to avoid issues with blocks being dropped due to pruned anchor blocks.
365
+ { syncChainTip: 'checkpointed' },
366
+ );
367
+ this.ctx = this.context;
365
368
 
366
369
  const sponsoredFPCAddress = await getSponsoredFPCAddress();
367
- const initialFundedAccounts = [...this.ctx.initialFundedAccounts.map(a => a.address), sponsoredFPCAddress];
370
+ const initialFundedAccounts = [...this.context.initialFundedAccounts.map(a => a.address), sponsoredFPCAddress];
368
371
 
369
372
  const { prefilledPublicData } = await getGenesisValues(initialFundedAccounts);
370
373
  this.prefilledPublicData = prefilledPublicData;
371
374
 
372
- const rollupContract = RollupContract.getFromL1ContractsValues(this.ctx.deployL1ContractsValues);
373
- this.monitor = new ChainMonitor(rollupContract, this.ctx.dateProvider).start();
374
- this.monitor.on('l1-block', ({ timestamp }) => this.ctx.dateProvider.setTime(Number(timestamp) * 1000));
375
+ const rollupContract = RollupContract.getFromL1ContractsValues(this.context.deployL1ContractsValues);
376
+ this.monitor = new ChainMonitor(rollupContract, this.context.dateProvider!).start();
377
+ this.monitor.on('l1-block', ({ timestamp }) => this.context.dateProvider!.setTime(Number(timestamp) * 1000));
375
378
  }
376
379
 
377
380
  async stopNodes(nodes: AztecNodeService[]) {
@@ -432,7 +435,7 @@ export class P2PNetworkTest {
432
435
  async teardown() {
433
436
  await this.monitor.stop();
434
437
  await tryStop(this.bootstrapNode, this.logger);
435
- await this.snapshotManager.teardown();
438
+ await teardown(this.context);
436
439
  }
437
440
 
438
441
  async getContracts(): Promise<{
@@ -451,7 +454,7 @@ export class P2PNetworkTest {
451
454
  );
452
455
 
453
456
  const slasherContract = getContract({
454
- address: getAddress(await rollup.getSlasherAddress()),
457
+ address: getAddress((await rollup.getSlasherAddress()).toString()),
455
458
  abi: SlasherAbi,
456
459
  client: this.ctx.deployL1ContractsValues.l1Client,
457
460
  });