@aztec/end-to-end 4.0.0-nightly.20260113 → 4.0.0-nightly.20260114

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 (63) hide show
  1. package/dest/bench/client_flows/client_flows_benchmark.d.ts +10 -10
  2. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  3. package/dest/bench/client_flows/client_flows_benchmark.js +98 -133
  4. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +5 -6
  5. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  6. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +94 -112
  7. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +5 -5
  8. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
  9. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +60 -62
  10. package/dest/e2e_deploy_contract/deploy_test.d.ts +4 -3
  11. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  12. package/dest/e2e_deploy_contract/deploy_test.js +15 -13
  13. package/dest/e2e_fees/bridging_race.notest.js +2 -4
  14. package/dest/e2e_fees/fees_test.d.ts +11 -11
  15. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  16. package/dest/e2e_fees/fees_test.js +118 -139
  17. package/dest/e2e_l1_publisher/write_json.d.ts +1 -1
  18. package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
  19. package/dest/e2e_l1_publisher/write_json.js +1 -0
  20. package/dest/e2e_nested_contract/nested_contract_test.d.ts +5 -8
  21. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  22. package/dest/e2e_nested_contract/nested_contract_test.js +29 -40
  23. package/dest/e2e_p2p/inactivity_slash_test.js +1 -1
  24. package/dest/e2e_p2p/p2p_network.d.ts +5 -3
  25. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  26. package/dest/e2e_p2p/p2p_network.js +99 -102
  27. package/dest/e2e_token_contract/token_contract_test.d.ts +15 -8
  28. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  29. package/dest/e2e_token_contract/token_contract_test.js +88 -92
  30. package/dest/fixtures/e2e_prover_test.d.ts +7 -13
  31. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  32. package/dest/fixtures/e2e_prover_test.js +78 -91
  33. package/dest/fixtures/snapshot_manager.d.ts +10 -44
  34. package/dest/fixtures/snapshot_manager.d.ts.map +1 -1
  35. package/dest/fixtures/snapshot_manager.js +12 -255
  36. package/dest/fixtures/utils.js +3 -3
  37. package/dest/quality_of_service/prometheus_client.d.ts +38 -0
  38. package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
  39. package/dest/quality_of_service/prometheus_client.js +67 -0
  40. package/dest/spartan/tx_metrics.d.ts +4 -1
  41. package/dest/spartan/tx_metrics.d.ts.map +1 -1
  42. package/dest/spartan/tx_metrics.js +21 -1
  43. package/dest/spartan/utils.d.ts +5 -1
  44. package/dest/spartan/utils.d.ts.map +1 -1
  45. package/dest/spartan/utils.js +25 -8
  46. package/package.json +38 -38
  47. package/src/bench/client_flows/client_flows_benchmark.ts +134 -192
  48. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +104 -136
  49. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +91 -103
  50. package/src/e2e_deploy_contract/deploy_test.ts +18 -14
  51. package/src/e2e_fees/bridging_race.notest.ts +2 -5
  52. package/src/e2e_fees/fees_test.ts +165 -210
  53. package/src/e2e_l1_publisher/write_json.ts +1 -0
  54. package/src/e2e_nested_contract/nested_contract_test.ts +30 -54
  55. package/src/e2e_p2p/inactivity_slash_test.ts +1 -1
  56. package/src/e2e_p2p/p2p_network.ts +149 -165
  57. package/src/e2e_token_contract/token_contract_test.ts +104 -113
  58. package/src/fixtures/e2e_prover_test.ts +97 -130
  59. package/src/fixtures/snapshot_manager.ts +12 -325
  60. package/src/fixtures/utils.ts +3 -3
  61. package/src/quality_of_service/prometheus_client.ts +113 -0
  62. package/src/spartan/tx_metrics.ts +21 -1
  63. package/src/spartan/utils.ts +26 -8
@@ -30,16 +30,14 @@ import { TokenSimulator } from '../simulators/token_simulator.js';
30
30
  import { getACVMConfig } from './get_acvm_config.js';
31
31
  import { getBBConfig } from './get_bb_config.js';
32
32
  import {
33
- type ISnapshotManager,
34
33
  type SubsystemsContext,
35
- createSnapshotManager,
36
34
  deployAccounts,
37
35
  publicDeployAccounts,
36
+ setupFromFresh,
37
+ teardown,
38
38
  } from './snapshot_manager.js';
39
39
  import { getPrivateKeyFromIndex, getSponsoredFPCAddress, setupPXEAndGetWallet } from './utils.js';
40
40
 
41
- const { E2E_DATA_PATH: dataPath } = process.env;
42
-
43
41
  type ProvenSetup = {
44
42
  wallet: TestWallet;
45
43
  teardown: () => Promise<void>;
@@ -56,7 +54,6 @@ export class FullProverTest {
56
54
  static TOKEN_NAME = 'USDC';
57
55
  static TOKEN_SYMBOL = 'USD';
58
56
  static TOKEN_DECIMALS = 18n;
59
- private snapshotManager: ISnapshotManager;
60
57
  logger: Logger;
61
58
  wallet!: TestWallet;
62
59
  provenWallet!: TestWallet;
@@ -73,91 +70,76 @@ export class FullProverTest {
73
70
  private acvmConfigCleanup?: () => Promise<void>;
74
71
  circuitProofVerifier?: ClientProtocolCircuitVerifier;
75
72
  provenAsset!: TokenContract;
76
- private context!: SubsystemsContext;
73
+ context!: SubsystemsContext;
77
74
  private proverNode!: ProverNode;
78
75
  private simulatedProverNode!: ProverNode;
79
76
  public l1Contracts!: DeployAztecL1ContractsReturnType;
80
77
  public proverAddress!: EthAddress;
78
+ private minNumberOfTxsPerBlock: number;
79
+ private coinbase: EthAddress;
80
+ private realProofs: boolean;
81
81
 
82
- constructor(
83
- testName: string,
84
- private minNumberOfTxsPerBlock: number,
85
- coinbase: EthAddress,
86
- private realProofs = true,
87
- ) {
82
+ constructor(testName: string, minNumberOfTxsPerBlock: number, coinbase: EthAddress, realProofs = true) {
88
83
  this.logger = createLogger(`e2e:full_prover_test:${testName}`);
89
- this.snapshotManager = createSnapshotManager(
90
- `full_prover_integration/${testName}`,
91
- dataPath,
92
- { startProverNode: true, coinbase },
93
- {
94
- realVerifier: realProofs,
95
- },
96
- );
84
+ this.minNumberOfTxsPerBlock = minNumberOfTxsPerBlock;
85
+ this.coinbase = coinbase;
86
+ this.realProofs = realProofs;
97
87
  }
98
88
 
99
89
  /**
100
- * Adds two state shifts to snapshot manager.
101
- * 1. Add 2 accounts.
102
- * 2. Publicly deploy accounts, deploy token contract
90
+ * Applies base setup: deploys 2 accounts and token contract.
103
91
  */
104
- async applyBaseSnapshots() {
105
- await this.snapshotManager.snapshot(
106
- '2_accounts',
107
- deployAccounts(2, this.logger),
108
- ({ deployedAccounts }, { wallet }) => {
109
- this.deployedAccounts = deployedAccounts;
110
- this.accounts = deployedAccounts.map(a => a.address);
111
- this.wallet = wallet;
112
- return Promise.resolve();
113
- },
114
- );
115
-
116
- await this.snapshotManager.snapshot(
117
- 'client_prover_integration',
118
- async () => {
119
- // Create the token contract state.
120
- // Move this account thing to addAccounts above?
121
- this.logger.verbose(`Public deploy accounts...`);
122
- await publicDeployAccounts(this.wallet, this.accounts.slice(0, 2));
123
-
124
- this.logger.verbose(`Deploying TokenContract...`);
125
- const { contract: asset, instance } = await TokenContract.deploy(
126
- this.wallet,
127
- this.accounts[0],
128
- FullProverTest.TOKEN_NAME,
129
- FullProverTest.TOKEN_SYMBOL,
130
- FullProverTest.TOKEN_DECIMALS,
131
- )
132
- .send({ from: this.accounts[0] })
133
- .wait();
134
- this.logger.verbose(`Token deployed to ${asset.address}`);
135
-
136
- return { tokenContractAddress: asset.address, tokenContractInstance: instance };
137
- },
138
- async ({ tokenContractAddress, tokenContractInstance }) => {
139
- // Restore the token contract state.
140
- this.fakeProofsAsset = TokenContract.at(tokenContractAddress, this.wallet);
141
- this.fakeProofsAssetInstance = tokenContractInstance;
142
- this.logger.verbose(`Token contract address: ${this.fakeProofsAsset.address}`);
143
-
144
- this.tokenSim = new TokenSimulator(
145
- this.fakeProofsAsset,
146
- this.wallet,
147
- this.accounts[0],
148
- this.logger,
149
- this.accounts,
150
- );
151
-
152
- expect(await this.fakeProofsAsset.methods.get_admin().simulate({ from: this.accounts[0] })).toBe(
153
- this.accounts[0].toBigInt(),
154
- );
155
- },
92
+ private async applyBaseSetup() {
93
+ this.logger.info('Applying base setup: deploying accounts');
94
+ const { deployedAccounts } = await deployAccounts(
95
+ 2,
96
+ this.logger,
97
+ )({
98
+ wallet: this.context.wallet,
99
+ initialFundedAccounts: this.context.initialFundedAccounts,
100
+ });
101
+ this.deployedAccounts = deployedAccounts;
102
+ this.accounts = deployedAccounts.map(a => a.address);
103
+ this.wallet = this.context.wallet;
104
+
105
+ this.logger.info('Applying base setup: publicly deploying accounts');
106
+ await publicDeployAccounts(this.wallet, this.accounts.slice(0, 2));
107
+
108
+ this.logger.info('Applying base setup: deploying token contract');
109
+ const { contract: asset, instance } = await TokenContract.deploy(
110
+ this.wallet,
111
+ this.accounts[0],
112
+ FullProverTest.TOKEN_NAME,
113
+ FullProverTest.TOKEN_SYMBOL,
114
+ FullProverTest.TOKEN_DECIMALS,
115
+ )
116
+ .send({ from: this.accounts[0] })
117
+ .wait();
118
+ this.logger.verbose(`Token deployed to ${asset.address}`);
119
+
120
+ this.fakeProofsAsset = asset;
121
+ this.fakeProofsAssetInstance = instance;
122
+ this.logger.verbose(`Token contract address: ${this.fakeProofsAsset.address}`);
123
+
124
+ this.tokenSim = new TokenSimulator(this.fakeProofsAsset, this.wallet, this.accounts[0], this.logger, this.accounts);
125
+
126
+ expect(await this.fakeProofsAsset.methods.get_admin().simulate({ from: this.accounts[0] })).toBe(
127
+ this.accounts[0].toBigInt(),
156
128
  );
157
129
  }
158
130
 
159
131
  async setup() {
160
- this.context = await this.snapshotManager.setup();
132
+ this.logger.info('Setting up subsystems from fresh');
133
+ this.context = await setupFromFresh(
134
+ this.logger,
135
+ { startProverNode: true, coinbase: this.coinbase },
136
+ { realVerifier: this.realProofs },
137
+ );
138
+
139
+ await this.applyBaseSetup();
140
+ await this.applyMint();
141
+
142
+ this.logger.info(`Enabling proving`, { realProofs: this.realProofs });
161
143
 
162
144
  // We don't wish to mark as proven automatically, so we set the flag to false
163
145
  this.context.watcher.setIsMarkingAsProven(false);
@@ -286,7 +268,7 @@ export class FullProverTest {
286
268
  );
287
269
  await this.proverNode.start();
288
270
 
289
- this.logger.warn(`Proofs are now enabled`);
271
+ this.logger.warn(`Proofs are now enabled`, { realProofs: this.realProofs });
290
272
  return this;
291
273
  }
292
274
 
@@ -299,15 +281,7 @@ export class FullProverTest {
299
281
  await this.context.deployL1ContractsValues.l1Client.waitForTransactionReceipt({ hash });
300
282
  }
301
283
 
302
- snapshot = <T>(
303
- name: string,
304
- apply: (context: SubsystemsContext) => Promise<T>,
305
- restore: (snapshotData: T, context: SubsystemsContext) => Promise<void> = () => Promise.resolve(),
306
- ): Promise<void> => this.snapshotManager.snapshot(name, apply, restore);
307
-
308
284
  async teardown() {
309
- await this.snapshotManager.teardown();
310
-
311
285
  // Cleanup related to the full prover PXEs
312
286
  for (let i = 0; i < this.provenComponents.length; i++) {
313
287
  await this.provenComponents[i].teardown();
@@ -319,52 +293,45 @@ export class FullProverTest {
319
293
  await Barretenberg.destroySingleton();
320
294
  await this.bbConfigCleanup?.();
321
295
  await this.acvmConfigCleanup?.();
322
- }
323
-
324
- async applyMintSnapshot() {
325
- await this.snapshotManager.snapshot(
326
- 'mint',
327
- async () => {
328
- const { fakeProofsAsset: asset, accounts } = this;
329
- const privateAmount = 10000n;
330
- const publicAmount = 10000n;
331
-
332
- this.logger.verbose(`Minting ${privateAmount + publicAmount} publicly...`);
333
- await asset.methods
334
- .mint_to_public(accounts[0], privateAmount + publicAmount)
335
- .send({ from: accounts[0] })
336
- .wait();
337
296
 
338
- this.logger.verbose(`Transferring ${privateAmount} to private...`);
339
- await asset.methods.transfer_to_private(accounts[0], privateAmount).send({ from: accounts[0] }).wait();
340
-
341
- this.logger.verbose(`Minting complete.`);
297
+ await teardown(this.context);
298
+ }
342
299
 
343
- return { amount: publicAmount };
344
- },
345
- async ({ amount }) => {
346
- const {
347
- fakeProofsAsset: asset,
348
- accounts: [address],
349
- tokenSim,
350
- } = this;
351
- tokenSim.mintPublic(address, amount);
352
-
353
- const publicBalance = await asset.methods.balance_of_public(address).simulate({ from: address });
354
- this.logger.verbose(`Public balance of wallet 0: ${publicBalance}`);
355
- expect(publicBalance).toEqual(this.tokenSim.balanceOfPublic(address));
356
-
357
- tokenSim.mintPrivate(address, amount);
358
- const privateBalance = await asset.methods.balance_of_private(address).simulate({ from: address });
359
- this.logger.verbose(`Private balance of wallet 0: ${privateBalance}`);
360
- expect(privateBalance).toEqual(tokenSim.balanceOfPrivate(address));
361
-
362
- const totalSupply = await asset.methods.total_supply().simulate({ from: address });
363
- this.logger.verbose(`Total supply: ${totalSupply}`);
364
- expect(totalSupply).toEqual(tokenSim.totalSupply);
365
-
366
- return Promise.resolve();
367
- },
368
- );
300
+ private async applyMint() {
301
+ this.logger.info('Applying mint setup');
302
+ const { fakeProofsAsset: asset, accounts } = this;
303
+ const privateAmount = 10000n;
304
+ const publicAmount = 10000n;
305
+
306
+ this.logger.verbose(`Minting ${privateAmount + publicAmount} publicly...`);
307
+ await asset.methods
308
+ .mint_to_public(accounts[0], privateAmount + publicAmount)
309
+ .send({ from: accounts[0] })
310
+ .wait();
311
+
312
+ this.logger.verbose(`Transferring ${privateAmount} to private...`);
313
+ await asset.methods.transfer_to_private(accounts[0], privateAmount).send({ from: accounts[0] }).wait();
314
+
315
+ this.logger.info(`Minting complete`);
316
+
317
+ const {
318
+ fakeProofsAsset,
319
+ accounts: [address],
320
+ tokenSim,
321
+ } = this;
322
+ tokenSim.mintPublic(address, publicAmount);
323
+
324
+ const publicBalance = await fakeProofsAsset.methods.balance_of_public(address).simulate({ from: address });
325
+ this.logger.verbose(`Public balance of wallet 0: ${publicBalance}`);
326
+ expect(publicBalance).toEqual(this.tokenSim.balanceOfPublic(address));
327
+
328
+ tokenSim.mintPrivate(address, publicAmount);
329
+ const privateBalance = await fakeProofsAsset.methods.balance_of_private(address).simulate({ from: address });
330
+ this.logger.verbose(`Private balance of wallet 0: ${privateBalance}`);
331
+ expect(privateBalance).toEqual(tokenSim.balanceOfPrivate(address));
332
+
333
+ const totalSupply = await fakeProofsAsset.methods.total_supply().simulate({ from: address });
334
+ this.logger.verbose(`Total supply: ${totalSupply}`);
335
+ expect(totalSupply).toEqual(tokenSim.totalSupply);
369
336
  }
370
337
  }