@aztec/end-to-end 0.0.1-commit.d3ec352c → 0.0.1-commit.d431d1c

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 (141) 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 +14 -15
  5. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  6. package/dest/bench/client_flows/client_flows_benchmark.js +110 -138
  7. package/dest/bench/client_flows/data_extractor.js +3 -1
  8. package/dest/bench/utils.d.ts +6 -6
  9. package/dest/bench/utils.d.ts.map +1 -1
  10. package/dest/bench/utils.js +18 -11
  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 +98 -113
  14. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +19 -13
  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 +91 -71
  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 +3 -2
  21. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  22. package/dest/e2e_epochs/epochs_test.js +13 -11
  23. package/dest/e2e_fees/bridging_race.notest.js +3 -5
  24. package/dest/e2e_fees/fees_test.d.ts +18 -15
  25. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  26. package/dest/e2e_fees/fees_test.js +126 -141
  27. package/dest/e2e_l1_publisher/write_json.d.ts +3 -3
  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_multi_validator/utils.js +1 -1
  31. package/dest/e2e_nested_contract/nested_contract_test.d.ts +6 -9
  32. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  33. package/dest/e2e_nested_contract/nested_contract_test.js +32 -40
  34. package/dest/e2e_p2p/inactivity_slash_test.d.ts +4 -4
  35. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
  36. package/dest/e2e_p2p/inactivity_slash_test.js +6 -9
  37. package/dest/e2e_p2p/p2p_network.d.ts +13 -11
  38. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  39. package/dest/e2e_p2p/p2p_network.js +116 -111
  40. package/dest/e2e_p2p/shared.d.ts +2 -2
  41. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  42. package/dest/e2e_p2p/shared.js +4 -4
  43. package/dest/e2e_token_contract/token_contract_test.d.ts +16 -9
  44. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  45. package/dest/e2e_token_contract/token_contract_test.js +90 -92
  46. package/dest/fixtures/e2e_prover_test.d.ts +10 -18
  47. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  48. package/dest/fixtures/e2e_prover_test.js +88 -103
  49. package/dest/fixtures/fixtures.d.ts +2 -3
  50. package/dest/fixtures/fixtures.d.ts.map +1 -1
  51. package/dest/fixtures/fixtures.js +1 -2
  52. package/dest/fixtures/get_acvm_config.js +1 -1
  53. package/dest/fixtures/l1_to_l2_messaging.d.ts +4 -3
  54. package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
  55. package/dest/fixtures/l1_to_l2_messaging.js +2 -2
  56. package/dest/fixtures/setup.d.ts +216 -0
  57. package/dest/fixtures/setup.d.ts.map +1 -0
  58. package/dest/fixtures/setup.js +684 -0
  59. package/dest/fixtures/setup_p2p_test.js +3 -3
  60. package/dest/fixtures/utils.d.ts +5 -638
  61. package/dest/fixtures/utils.d.ts.map +1 -1
  62. package/dest/fixtures/utils.js +4 -647
  63. package/dest/fixtures/web3signer.js +1 -1
  64. package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
  65. package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
  66. package/dest/fixtures/with_telemetry_utils.js +2 -2
  67. package/dest/quality_of_service/grafana_client.d.ts +41 -0
  68. package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
  69. package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
  70. package/dest/quality_of_service/prometheus_client.d.ts +38 -0
  71. package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
  72. package/dest/quality_of_service/prometheus_client.js +67 -0
  73. package/dest/shared/cross_chain_test_harness.d.ts +16 -4
  74. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  75. package/dest/shared/cross_chain_test_harness.js +3 -3
  76. package/dest/shared/gas_portal_test_harness.d.ts +12 -2
  77. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  78. package/dest/shared/index.d.ts +2 -2
  79. package/dest/shared/index.d.ts.map +1 -1
  80. package/dest/shared/uniswap_l1_l2.d.ts +3 -27
  81. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  82. package/dest/shared/uniswap_l1_l2.js +43 -23
  83. package/dest/simulators/lending_simulator.d.ts +6 -2
  84. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  85. package/dest/simulators/lending_simulator.js +1 -1
  86. package/dest/spartan/setup_test_wallets.d.ts +4 -3
  87. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  88. package/dest/spartan/setup_test_wallets.js +2 -1
  89. package/dest/spartan/tx_metrics.d.ts +52 -0
  90. package/dest/spartan/tx_metrics.d.ts.map +1 -0
  91. package/dest/spartan/tx_metrics.js +248 -0
  92. package/dest/spartan/utils.d.ts +51 -12
  93. package/dest/spartan/utils.d.ts.map +1 -1
  94. package/dest/spartan/utils.js +262 -102
  95. package/package.json +40 -39
  96. package/src/bench/client_flows/benchmark.ts +24 -2
  97. package/src/bench/client_flows/client_flows_benchmark.ts +150 -200
  98. package/src/bench/client_flows/data_extractor.ts +1 -1
  99. package/src/bench/utils.ts +22 -14
  100. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +107 -142
  101. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +140 -125
  102. package/src/e2e_deploy_contract/deploy_test.ts +21 -14
  103. package/src/e2e_epochs/epochs_test.ts +26 -13
  104. package/src/e2e_fees/bridging_race.notest.ts +3 -6
  105. package/src/e2e_fees/fees_test.ts +177 -216
  106. package/src/e2e_l1_publisher/write_json.ts +22 -17
  107. package/src/e2e_multi_validator/utils.ts +1 -1
  108. package/src/e2e_nested_contract/nested_contract_test.ts +35 -56
  109. package/src/e2e_p2p/inactivity_slash_test.ts +9 -12
  110. package/src/e2e_p2p/p2p_network.ts +174 -183
  111. package/src/e2e_p2p/shared.ts +11 -6
  112. package/src/e2e_token_contract/token_contract_test.ts +105 -118
  113. package/src/fixtures/e2e_prover_test.ts +112 -144
  114. package/src/fixtures/fixtures.ts +1 -3
  115. package/src/fixtures/get_acvm_config.ts +1 -1
  116. package/src/fixtures/l1_to_l2_messaging.ts +4 -2
  117. package/src/fixtures/setup.ts +1010 -0
  118. package/src/fixtures/setup_p2p_test.ts +3 -3
  119. package/src/fixtures/utils.ts +27 -966
  120. package/src/fixtures/web3signer.ts +1 -1
  121. package/src/fixtures/with_telemetry_utils.ts +2 -2
  122. package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
  123. package/src/quality_of_service/prometheus_client.ts +113 -0
  124. package/src/shared/cross_chain_test_harness.ts +6 -10
  125. package/src/shared/gas_portal_test_harness.ts +1 -1
  126. package/src/shared/index.ts +1 -1
  127. package/src/shared/uniswap_l1_l2.ts +53 -67
  128. package/src/simulators/lending_simulator.ts +2 -2
  129. package/src/spartan/setup_test_wallets.ts +9 -2
  130. package/src/spartan/tx_metrics.ts +231 -0
  131. package/src/spartan/utils.ts +308 -45
  132. package/dest/fixtures/setup_l1_contracts.d.ts +0 -477
  133. package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
  134. package/dest/fixtures/setup_l1_contracts.js +0 -17
  135. package/dest/fixtures/snapshot_manager.d.ts +0 -95
  136. package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
  137. package/dest/fixtures/snapshot_manager.js +0 -505
  138. package/dest/quality_of_service/alert_checker.d.ts +0 -41
  139. package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
  140. package/src/fixtures/setup_l1_contracts.ts +0 -26
  141. 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 { createL1TxUtilsFromViemWallet } 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';
@@ -35,18 +34,20 @@ 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';
51
52
 
52
53
  // Use a fixed bootstrap node private key so that we can re-use the same snapshot and the nodes can find each other
@@ -61,14 +62,14 @@ export const SHORTENED_BLOCK_TIME_CONFIG_NO_PRUNES = {
61
62
  };
62
63
 
63
64
  export class P2PNetworkTest {
64
- private snapshotManager: ISnapshotManager;
65
+ public context!: EndToEndContext;
65
66
  public baseAccountPrivateKey: `0x${string}`;
66
67
  public baseAccount;
67
68
 
68
69
  public logger: Logger;
69
70
  public monitor!: ChainMonitor;
70
71
 
71
- public ctx!: SubsystemsContext;
72
+ public ctx!: EndToEndContext;
72
73
  public attesterPrivateKeys: `0x${string}`[] = [];
73
74
  public attesterPublicKeys: string[] = [];
74
75
  public peerIdPrivateKeys: string[] = [];
@@ -84,6 +85,10 @@ export class P2PNetworkTest {
84
85
 
85
86
  public bootstrapNode?: BootstrapNode;
86
87
 
88
+ // Store setup options for use in setup()
89
+ private setupOptions: SetupOptions;
90
+ private deployL1ContractsArgs: any;
91
+
87
92
  constructor(
88
93
  public readonly testName: string,
89
94
  public bootstrapNodeEnr: string,
@@ -94,7 +99,6 @@ export class P2PNetworkTest {
94
99
  // If set enable metrics collection
95
100
  private metricsPort?: number,
96
101
  startProverNode?: boolean,
97
- mockZkPassportVerifier?: boolean,
98
102
  ) {
99
103
  this.logger = createLogger(`e2e:e2e_p2p:${testName}`);
100
104
 
@@ -109,45 +113,41 @@ export class P2PNetworkTest {
109
113
 
110
114
  const zkPassportParams = ZkPassportProofParams.random();
111
115
 
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
- },
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,
149
149
  },
150
- );
150
+ };
151
151
  }
152
152
 
153
153
  static async create({
@@ -158,7 +158,6 @@ export class P2PNetworkTest {
158
158
  metricsPort,
159
159
  initialConfig,
160
160
  startProverNode,
161
- mockZkPassportVerifier,
162
161
  }: {
163
162
  testName: string;
164
163
  numberOfNodes: number;
@@ -167,7 +166,6 @@ export class P2PNetworkTest {
167
166
  metricsPort?: number;
168
167
  initialConfig?: SetupOptions;
169
168
  startProverNode?: boolean;
170
- mockZkPassportVerifier?: boolean;
171
169
  }) {
172
170
  const port = basePort || (await getPort());
173
171
 
@@ -188,29 +186,27 @@ export class P2PNetworkTest {
188
186
  numberOfNodes,
189
187
  metricsPort,
190
188
  startProverNode,
191
- mockZkPassportVerifier,
192
189
  );
193
190
  }
194
191
 
195
192
  get fundedAccount() {
196
193
  if (!this.deployedAccounts[0]) {
197
- throw new Error('Call snapshot t.setupAccount to create a funded account.');
194
+ throw new Error('Call setupAccount to create a funded account.');
198
195
  }
199
196
  return this.deployedAccounts[0];
200
197
  }
201
198
 
202
199
  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
- });
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();
214
210
  }
215
211
 
216
212
  getValidators() {
@@ -231,128 +227,114 @@ export class P2PNetworkTest {
231
227
  return { validators };
232
228
  }
233
229
 
234
- async applyBaseSnapshots() {
230
+ async applyBaseSetup() {
235
231
  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
232
 
243
- 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
+ });
244
239
 
245
- const stakingAsset = getContract({
246
- address: deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
247
- abi: TestERC20Abi,
248
- client: deployL1ContractsValues.l1Client,
249
- });
240
+ this.logger.info(`Adding ${this.numberOfValidators} validators`);
250
241
 
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
- });
242
+ const stakingAsset = getContract({
243
+ address: this.context.deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
244
+ abi: TestERC20Abi,
245
+ client: this.context.deployL1ContractsValues.l1Client,
246
+ });
263
247
 
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));
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
+ );
290
254
 
291
- await deployL1ContractsValues.l1Client.waitForTransactionReceipt({
292
- hash: await multiAdder.write.addValidators([validatorTuples]),
293
- });
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
+ );
294
267
 
295
- await cheatCodes.rollup.advanceToEpoch(
296
- EpochNumber.fromBigInt(
297
- BigInt(await cheatCodes.rollup.getEpoch()) + (await rollup.read.getLagInEpochsForValidatorSet()) + 1n,
298
- ),
299
- );
268
+ const { validators } = this.getValidators();
269
+ this.validators = validators;
300
270
 
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);
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]),
303
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);
304
302
  }
305
303
 
306
304
  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
- );
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;
317
316
  }
318
317
 
319
318
  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
- );
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! }).deployed();
325
+ this.spamContract = spamContract;
340
326
  }
341
327
 
342
328
  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
- );
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();
356
338
  }
357
339
 
358
340
  async sendDummyTx() {
@@ -368,17 +350,26 @@ export class P2PNetworkTest {
368
350
  }
369
351
 
370
352
  async setup() {
371
- this.ctx = await this.snapshotManager.setup();
353
+ this.logger.info('Setting up subsystems from fresh');
354
+ this.context = await setup(0, {
355
+ ...this.setupOptions,
356
+ fundSponsoredFPC: true,
357
+ skipAccountDeployment: true,
358
+ slasherFlavor: this.setupOptions.slasherFlavor ?? this.deployL1ContractsArgs.slasherFlavor ?? 'none',
359
+ aztecTargetCommitteeSize: 0,
360
+ l1ContractsArgs: this.deployL1ContractsArgs,
361
+ });
362
+ this.ctx = this.context;
372
363
 
373
364
  const sponsoredFPCAddress = await getSponsoredFPCAddress();
374
- const initialFundedAccounts = [...this.ctx.initialFundedAccounts.map(a => a.address), sponsoredFPCAddress];
365
+ const initialFundedAccounts = [...this.context.initialFundedAccounts.map(a => a.address), sponsoredFPCAddress];
375
366
 
376
367
  const { prefilledPublicData } = await getGenesisValues(initialFundedAccounts);
377
368
  this.prefilledPublicData = prefilledPublicData;
378
369
 
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));
370
+ const rollupContract = RollupContract.getFromL1ContractsValues(this.context.deployL1ContractsValues);
371
+ this.monitor = new ChainMonitor(rollupContract, this.context.dateProvider!).start();
372
+ this.monitor.on('l1-block', ({ timestamp }) => this.context.dateProvider!.setTime(Number(timestamp) * 1000));
382
373
  }
383
374
 
384
375
  async stopNodes(nodes: AztecNodeService[]) {
@@ -439,7 +430,7 @@ export class P2PNetworkTest {
439
430
  async teardown() {
440
431
  await this.monitor.stop();
441
432
  await tryStop(this.bootstrapNode, this.logger);
442
- await this.snapshotManager.teardown();
433
+ await teardown(this.context);
443
434
  }
444
435
 
445
436
  async getContracts(): Promise<{
@@ -449,7 +440,7 @@ export class P2PNetworkTest {
449
440
  slashFactory: SlashFactoryContract;
450
441
  }> {
451
442
  if (!this.ctx.deployL1ContractsValues) {
452
- throw new Error('DeployL1ContractsValues not set');
443
+ throw new Error('DeployAztecL1ContractsValues not set');
453
444
  }
454
445
 
455
446
  const rollup = new RollupContract(
@@ -458,7 +449,7 @@ export class P2PNetworkTest {
458
449
  );
459
450
 
460
451
  const slasherContract = getContract({
461
- address: getAddress(await rollup.getSlasherAddress()),
452
+ address: getAddress((await rollup.getSlasherAddress()).toString()),
462
453
  abi: SlasherAbi,
463
454
  client: this.ctx.deployL1ContractsValues.l1Client,
464
455
  });
@@ -6,9 +6,14 @@ import { Fr } from '@aztec/aztec.js/fields';
6
6
  import type { Logger } from '@aztec/aztec.js/log';
7
7
  import { Tx, TxStatus } from '@aztec/aztec.js/tx';
8
8
  import type { RollupCheatCodes } from '@aztec/aztec/testing';
9
- import type { EmpireSlashingProposerContract, RollupContract, TallySlashingProposerContract } from '@aztec/ethereum';
9
+ import type {
10
+ EmpireSlashingProposerContract,
11
+ RollupContract,
12
+ TallySlashingProposerContract,
13
+ } from '@aztec/ethereum/contracts';
10
14
  import { EpochNumber } from '@aztec/foundation/branded-types';
11
15
  import { timesAsync, unique } from '@aztec/foundation/collection';
16
+ import { EthAddress } from '@aztec/foundation/eth-address';
12
17
  import { retryUntil } from '@aztec/foundation/retry';
13
18
  import { pluralize } from '@aztec/foundation/string';
14
19
  import type { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
@@ -133,7 +138,7 @@ export async function awaitCommitteeExists({
133
138
  logger: Logger;
134
139
  }): Promise<readonly `0x${string}`[]> {
135
140
  logger.info(`Waiting for committee to be set`);
136
- let committee: readonly `0x${string}`[] | undefined;
141
+ let committee: EthAddress[] | undefined;
137
142
  await retryUntil(
138
143
  async () => {
139
144
  committee = await rollup.getCurrentEpochCommittee();
@@ -142,7 +147,7 @@ export async function awaitCommitteeExists({
142
147
  'non-empty committee',
143
148
  60,
144
149
  );
145
- return committee!;
150
+ return committee!.map(c => c.toString() as `0x${string}`);
146
151
  }
147
152
 
148
153
  export async function awaitOffenseDetected({
@@ -214,9 +219,9 @@ export async function awaitCommitteeKicked({
214
219
 
215
220
  if (slashingProposer.type === 'empire') {
216
221
  // Await for the slash payload to be created if empire (no payload is created on tally until execution time)
217
- const targetEpoch = BigInt(await cheatCodes.getEpoch()) + (await rollup.getLagInEpochsForValidatorSet()) + 1n;
222
+ const targetEpoch = EpochNumber((await cheatCodes.getEpoch()) + (await rollup.getLagInEpochsForValidatorSet()) + 1);
218
223
  logger.info(`Advancing to epoch ${targetEpoch} so we start slashing`);
219
- await cheatCodes.advanceToEpoch(EpochNumber.fromBigInt(targetEpoch));
224
+ await cheatCodes.advanceToEpoch(targetEpoch);
220
225
 
221
226
  const slashPayloadEvents = await retryUntil(
222
227
  async () => {
@@ -271,7 +276,7 @@ export async function awaitCommitteeKicked({
271
276
  logger.info(`Advancing to check current committee`);
272
277
  await cheatCodes.debugRollup();
273
278
  await cheatCodes.advanceToEpoch(
274
- EpochNumber.fromBigInt(BigInt(await cheatCodes.getEpoch()) + (await rollup.getLagInEpochsForValidatorSet()) + 1n),
279
+ EpochNumber((await cheatCodes.getEpoch()) + (await rollup.getLagInEpochsForValidatorSet()) + 1),
275
280
  );
276
281
  await cheatCodes.debugRollup();
277
282