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

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 (116) hide show
  1. package/README.md +27 -0
  2. package/dest/bench/client_flows/client_flows_benchmark.d.ts +1 -1
  3. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  4. package/dest/bench/client_flows/client_flows_benchmark.js +18 -11
  5. package/dest/bench/utils.d.ts +1 -1
  6. package/dest/bench/utils.d.ts.map +1 -1
  7. package/dest/bench/utils.js +6 -3
  8. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +3 -2
  9. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  10. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +15 -15
  11. package/dest/e2e_epochs/epochs_test.d.ts +3 -1
  12. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  13. package/dest/e2e_epochs/epochs_test.js +5 -2
  14. package/dest/e2e_fees/fees_test.d.ts +1 -1
  15. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  16. package/dest/e2e_fees/fees_test.js +14 -7
  17. package/dest/e2e_nested_contract/nested_contract_test.d.ts +1 -1
  18. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  19. package/dest/e2e_nested_contract/nested_contract_test.js +4 -6
  20. package/dest/e2e_p2p/inactivity_slash_test.d.ts +1 -1
  21. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
  22. package/dest/e2e_p2p/inactivity_slash_test.js +1 -0
  23. package/dest/e2e_p2p/p2p_network.d.ts +3 -2
  24. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  25. package/dest/e2e_p2p/p2p_network.js +18 -15
  26. package/dest/e2e_p2p/shared.d.ts +33 -1
  27. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  28. package/dest/e2e_p2p/shared.js +56 -2
  29. package/dest/e2e_token_contract/token_contract_test.d.ts +1 -1
  30. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  31. package/dest/e2e_token_contract/token_contract_test.js +11 -11
  32. package/dest/fixtures/authwit_proxy.d.ts +3 -3
  33. package/dest/fixtures/authwit_proxy.d.ts.map +1 -1
  34. package/dest/fixtures/authwit_proxy.js +4 -0
  35. package/dest/fixtures/e2e_prover_test.d.ts +1 -1
  36. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  37. package/dest/fixtures/e2e_prover_test.js +6 -6
  38. package/dest/fixtures/setup.d.ts +10 -7
  39. package/dest/fixtures/setup.d.ts.map +1 -1
  40. package/dest/fixtures/setup.js +16 -12
  41. package/dest/fixtures/token_utils.d.ts +1 -1
  42. package/dest/fixtures/token_utils.d.ts.map +1 -1
  43. package/dest/fixtures/token_utils.js +2 -2
  44. package/dest/forward-compatibility/wallet_rpc_client.d.ts +7 -0
  45. package/dest/forward-compatibility/wallet_rpc_client.d.ts.map +1 -0
  46. package/dest/forward-compatibility/wallet_rpc_client.js +15 -0
  47. package/dest/forward-compatibility/wallet_service.d.ts +3 -0
  48. package/dest/forward-compatibility/wallet_service.d.ts.map +1 -0
  49. package/dest/forward-compatibility/wallet_service.js +109 -0
  50. package/dest/install_legacy_contracts.d.cts +10 -0
  51. package/dest/install_legacy_contracts.d.cts.map +1 -0
  52. package/dest/legacy-jest-resolver.d.cts +3 -0
  53. package/dest/legacy-jest-resolver.d.cts.map +1 -0
  54. package/dest/shared/cross_chain_test_harness.d.ts +1 -1
  55. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  56. package/dest/shared/cross_chain_test_harness.js +13 -13
  57. package/dest/shared/gas_portal_test_harness.js +2 -2
  58. package/dest/shared/submit-transactions.js +1 -1
  59. package/dest/shared/uniswap_l1_l2.d.ts +1 -1
  60. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  61. package/dest/shared/uniswap_l1_l2.js +14 -17
  62. package/dest/simulators/lending_simulator.d.ts +1 -1
  63. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  64. package/dest/simulators/lending_simulator.js +4 -4
  65. package/dest/simulators/token_simulator.d.ts +1 -1
  66. package/dest/simulators/token_simulator.d.ts.map +1 -1
  67. package/dest/simulators/token_simulator.js +2 -2
  68. package/dest/spartan/setup_test_wallets.d.ts +4 -2
  69. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  70. package/dest/spartan/setup_test_wallets.js +28 -15
  71. package/dest/spartan/utils/index.d.ts +2 -1
  72. package/dest/spartan/utils/index.d.ts.map +1 -1
  73. package/dest/spartan/utils/index.js +2 -0
  74. package/dest/spartan/utils/nodes.d.ts +5 -4
  75. package/dest/spartan/utils/nodes.d.ts.map +1 -1
  76. package/dest/spartan/utils/nodes.js +5 -4
  77. package/dest/test-wallet/test_wallet.d.ts +24 -23
  78. package/dest/test-wallet/test_wallet.d.ts.map +1 -1
  79. package/dest/test-wallet/test_wallet.js +115 -80
  80. package/dest/test-wallet/wallet_worker_script.js +41 -33
  81. package/dest/test-wallet/worker_wallet.d.ts +4 -4
  82. package/dest/test-wallet/worker_wallet.d.ts.map +1 -1
  83. package/dest/test-wallet/worker_wallet.js +51 -3
  84. package/dest/test-wallet/worker_wallet_schema.d.ts +4 -4
  85. package/package.json +41 -40
  86. package/src/bench/client_flows/client_flows_benchmark.ts +40 -32
  87. package/src/bench/utils.ts +7 -2
  88. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +21 -20
  89. package/src/e2e_epochs/epochs_test.ts +14 -2
  90. package/src/e2e_fees/fees_test.ts +14 -7
  91. package/src/e2e_nested_contract/nested_contract_test.ts +6 -4
  92. package/src/e2e_p2p/inactivity_slash_test.ts +1 -0
  93. package/src/e2e_p2p/p2p_network.ts +24 -20
  94. package/src/e2e_p2p/shared.ts +97 -2
  95. package/src/e2e_token_contract/token_contract_test.ts +16 -8
  96. package/src/fixtures/authwit_proxy.ts +4 -0
  97. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  98. package/src/fixtures/e2e_prover_test.ts +11 -5
  99. package/src/fixtures/setup.ts +27 -18
  100. package/src/fixtures/token_utils.ts +4 -2
  101. package/src/forward-compatibility/wallet_rpc_client.ts +14 -0
  102. package/src/forward-compatibility/wallet_service.ts +104 -0
  103. package/src/install_legacy_contracts.cjs +75 -0
  104. package/src/legacy-jest-resolver.cjs +101 -0
  105. package/src/shared/cross_chain_test_harness.ts +13 -9
  106. package/src/shared/gas_portal_test_harness.ts +1 -1
  107. package/src/shared/submit-transactions.ts +1 -1
  108. package/src/shared/uniswap_l1_l2.ts +35 -28
  109. package/src/simulators/lending_simulator.ts +8 -4
  110. package/src/simulators/token_simulator.ts +6 -2
  111. package/src/spartan/setup_test_wallets.ts +51 -19
  112. package/src/spartan/utils/index.ts +3 -0
  113. package/src/spartan/utils/nodes.ts +6 -3
  114. package/src/test-wallet/test_wallet.ts +144 -99
  115. package/src/test-wallet/wallet_worker_script.ts +47 -30
  116. package/src/test-wallet/worker_wallet.ts +54 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/end-to-end",
3
- "version": "0.0.1-commit.ff7989d6c",
3
+ "version": "0.0.1-commit.fff30aa",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "inherits": [
@@ -26,45 +26,45 @@
26
26
  "formatting": "run -T prettier --check ./src && run -T eslint ./src"
27
27
  },
28
28
  "dependencies": {
29
- "@aztec/accounts": "0.0.1-commit.ff7989d6c",
30
- "@aztec/archiver": "0.0.1-commit.ff7989d6c",
31
- "@aztec/aztec": "0.0.1-commit.ff7989d6c",
32
- "@aztec/aztec-node": "0.0.1-commit.ff7989d6c",
33
- "@aztec/aztec.js": "0.0.1-commit.ff7989d6c",
34
- "@aztec/bb-prover": "0.0.1-commit.ff7989d6c",
35
- "@aztec/bb.js": "0.0.1-commit.ff7989d6c",
36
- "@aztec/blob-client": "0.0.1-commit.ff7989d6c",
37
- "@aztec/blob-lib": "0.0.1-commit.ff7989d6c",
38
- "@aztec/bot": "0.0.1-commit.ff7989d6c",
39
- "@aztec/cli": "0.0.1-commit.ff7989d6c",
40
- "@aztec/constants": "0.0.1-commit.ff7989d6c",
41
- "@aztec/entrypoints": "0.0.1-commit.ff7989d6c",
42
- "@aztec/epoch-cache": "0.0.1-commit.ff7989d6c",
43
- "@aztec/ethereum": "0.0.1-commit.ff7989d6c",
44
- "@aztec/foundation": "0.0.1-commit.ff7989d6c",
45
- "@aztec/kv-store": "0.0.1-commit.ff7989d6c",
46
- "@aztec/l1-artifacts": "0.0.1-commit.ff7989d6c",
47
- "@aztec/merkle-tree": "0.0.1-commit.ff7989d6c",
48
- "@aztec/node-keystore": "0.0.1-commit.ff7989d6c",
49
- "@aztec/noir-contracts.js": "0.0.1-commit.ff7989d6c",
50
- "@aztec/noir-noirc_abi": "0.0.1-commit.ff7989d6c",
51
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.ff7989d6c",
52
- "@aztec/noir-test-contracts.js": "0.0.1-commit.ff7989d6c",
53
- "@aztec/p2p": "0.0.1-commit.ff7989d6c",
54
- "@aztec/protocol-contracts": "0.0.1-commit.ff7989d6c",
55
- "@aztec/prover-client": "0.0.1-commit.ff7989d6c",
56
- "@aztec/prover-node": "0.0.1-commit.ff7989d6c",
57
- "@aztec/pxe": "0.0.1-commit.ff7989d6c",
58
- "@aztec/sequencer-client": "0.0.1-commit.ff7989d6c",
59
- "@aztec/simulator": "0.0.1-commit.ff7989d6c",
60
- "@aztec/slasher": "0.0.1-commit.ff7989d6c",
61
- "@aztec/stdlib": "0.0.1-commit.ff7989d6c",
62
- "@aztec/telemetry-client": "0.0.1-commit.ff7989d6c",
63
- "@aztec/validator-client": "0.0.1-commit.ff7989d6c",
64
- "@aztec/validator-ha-signer": "0.0.1-commit.ff7989d6c",
65
- "@aztec/wallet-sdk": "0.0.1-commit.ff7989d6c",
66
- "@aztec/wallets": "0.0.1-commit.ff7989d6c",
67
- "@aztec/world-state": "0.0.1-commit.ff7989d6c",
29
+ "@aztec/accounts": "0.0.1-commit.fff30aa",
30
+ "@aztec/archiver": "0.0.1-commit.fff30aa",
31
+ "@aztec/aztec": "0.0.1-commit.fff30aa",
32
+ "@aztec/aztec-node": "0.0.1-commit.fff30aa",
33
+ "@aztec/aztec.js": "0.0.1-commit.fff30aa",
34
+ "@aztec/bb-prover": "0.0.1-commit.fff30aa",
35
+ "@aztec/bb.js": "0.0.1-commit.fff30aa",
36
+ "@aztec/blob-client": "0.0.1-commit.fff30aa",
37
+ "@aztec/blob-lib": "0.0.1-commit.fff30aa",
38
+ "@aztec/bot": "0.0.1-commit.fff30aa",
39
+ "@aztec/cli": "0.0.1-commit.fff30aa",
40
+ "@aztec/constants": "0.0.1-commit.fff30aa",
41
+ "@aztec/entrypoints": "0.0.1-commit.fff30aa",
42
+ "@aztec/epoch-cache": "0.0.1-commit.fff30aa",
43
+ "@aztec/ethereum": "0.0.1-commit.fff30aa",
44
+ "@aztec/foundation": "0.0.1-commit.fff30aa",
45
+ "@aztec/kv-store": "0.0.1-commit.fff30aa",
46
+ "@aztec/l1-artifacts": "0.0.1-commit.fff30aa",
47
+ "@aztec/merkle-tree": "0.0.1-commit.fff30aa",
48
+ "@aztec/node-keystore": "0.0.1-commit.fff30aa",
49
+ "@aztec/noir-contracts.js": "0.0.1-commit.fff30aa",
50
+ "@aztec/noir-noirc_abi": "0.0.1-commit.fff30aa",
51
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.fff30aa",
52
+ "@aztec/noir-test-contracts.js": "0.0.1-commit.fff30aa",
53
+ "@aztec/p2p": "0.0.1-commit.fff30aa",
54
+ "@aztec/protocol-contracts": "0.0.1-commit.fff30aa",
55
+ "@aztec/prover-client": "0.0.1-commit.fff30aa",
56
+ "@aztec/prover-node": "0.0.1-commit.fff30aa",
57
+ "@aztec/pxe": "0.0.1-commit.fff30aa",
58
+ "@aztec/sequencer-client": "0.0.1-commit.fff30aa",
59
+ "@aztec/simulator": "0.0.1-commit.fff30aa",
60
+ "@aztec/slasher": "0.0.1-commit.fff30aa",
61
+ "@aztec/stdlib": "0.0.1-commit.fff30aa",
62
+ "@aztec/telemetry-client": "0.0.1-commit.fff30aa",
63
+ "@aztec/validator-client": "0.0.1-commit.fff30aa",
64
+ "@aztec/validator-ha-signer": "0.0.1-commit.fff30aa",
65
+ "@aztec/wallet-sdk": "0.0.1-commit.fff30aa",
66
+ "@aztec/wallets": "0.0.1-commit.fff30aa",
67
+ "@aztec/world-state": "0.0.1-commit.fff30aa",
68
68
  "@iarna/toml": "^2.2.5",
69
69
  "@jest/globals": "^30.0.0",
70
70
  "@noble/curves": "=1.0.0",
@@ -161,6 +161,7 @@
161
161
  "moduleNameMapper": {
162
162
  "^(\\.{1,2}/.*)\\.[cm]?js$": "$1"
163
163
  },
164
+ "resolver": "<rootDir>/legacy-jest-resolver.cjs",
164
165
  "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$",
165
166
  "rootDir": "./src",
166
167
  "testTimeout": 120000,
@@ -1,10 +1,11 @@
1
+ import { NO_FROM } from '@aztec/aztec.js/account';
1
2
  import { AztecAddress } from '@aztec/aztec.js/addresses';
2
3
  import { FeeJuicePaymentMethodWithClaim } from '@aztec/aztec.js/fee';
3
4
  import { type FeePaymentMethod, PrivateFeePaymentMethod, SponsoredFeePaymentMethod } from '@aztec/aztec.js/fee';
4
5
  import { type Logger, createLogger } from '@aztec/aztec.js/log';
5
6
  import type { AztecNode } from '@aztec/aztec.js/node';
6
7
  import type { Wallet } from '@aztec/aztec.js/wallet';
7
- import { CheatCodes } from '@aztec/aztec/testing';
8
+ import { CheatCodes, getTokenAllowedSetupFunctions } from '@aztec/aztec/testing';
8
9
  import { createExtendedL1Client } from '@aztec/ethereum/client';
9
10
  import { RollupContract } from '@aztec/ethereum/contracts';
10
11
  import type { DeployAztecL1ContractsArgs } from '@aztec/ethereum/deploy-aztec-l1-contracts';
@@ -130,11 +131,14 @@ export class ClientFlowsBenchmark {
130
131
 
131
132
  async setup() {
132
133
  this.logger.info('Setting up subsystems from fresh');
134
+ // Token allowlist entries are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
135
+ const tokenAllowList = await getTokenAllowedSetupFunctions();
133
136
  this.context = await setup(0, {
134
137
  ...this.setupOptions,
135
138
  fundSponsoredFPC: true,
136
139
  skipAccountDeployment: true,
137
140
  l1ContractsArgs: this.setupOptions,
141
+ txPublicSetupAllowListExtend: [...(this.setupOptions.txPublicSetupAllowListExtend ?? []), ...tokenAllowList],
138
142
  });
139
143
  await this.applyBaseSetup();
140
144
 
@@ -161,11 +165,15 @@ export class ClientFlowsBenchmark {
161
165
 
162
166
  /** Admin mints bananaCoin tokens privately to the target address and redeems them. */
163
167
  async mintPrivateBananas(amount: bigint, address: AztecAddress) {
164
- const balanceBefore = await this.bananaCoin.methods.balance_of_private(address).simulate({ from: address });
168
+ const { result: balanceBefore } = await this.bananaCoin.methods
169
+ .balance_of_private(address)
170
+ .simulate({ from: address });
165
171
 
166
172
  await mintTokensToPrivate(this.bananaCoin, this.adminAddress, address, amount);
167
173
 
168
- const balanceAfter = await this.bananaCoin.methods.balance_of_private(address).simulate({ from: address });
174
+ const { result: balanceAfter } = await this.bananaCoin.methods
175
+ .balance_of_private(address)
176
+ .simulate({ from: address });
169
177
  expect(balanceAfter).toEqual(balanceBefore + amount);
170
178
  }
171
179
 
@@ -241,13 +249,12 @@ export class ClientFlowsBenchmark {
241
249
 
242
250
  async applyDeployBananaToken() {
243
251
  this.logger.info('Applying banana token deployment');
244
- const { contract: bananaCoin, instance: bananaCoinInstance } = await BananaCoin.deploy(
245
- this.adminWallet,
246
- this.adminAddress,
247
- 'BC',
248
- 'BC',
249
- 18n,
250
- ).send({ from: this.adminAddress, wait: { returnReceipt: true } });
252
+ const {
253
+ receipt: { contract: bananaCoin, instance: bananaCoinInstance },
254
+ } = await BananaCoin.deploy(this.adminWallet, this.adminAddress, 'BC', 'BC', 18n).send({
255
+ from: this.adminAddress,
256
+ wait: { returnReceipt: true },
257
+ });
251
258
  this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
252
259
  this.bananaCoin = bananaCoin;
253
260
  this.bananaCoinInstance = bananaCoinInstance;
@@ -255,13 +262,12 @@ export class ClientFlowsBenchmark {
255
262
 
256
263
  async applyDeployCandyBarToken() {
257
264
  this.logger.info('Applying candy bar token deployment');
258
- const { contract: candyBarCoin, instance: candyBarCoinInstance } = await TokenContract.deploy(
259
- this.adminWallet,
260
- this.adminAddress,
261
- 'CBC',
262
- 'CBC',
263
- 18n,
264
- ).send({ from: this.adminAddress, wait: { returnReceipt: true } });
265
+ const {
266
+ receipt: { contract: candyBarCoin, instance: candyBarCoinInstance },
267
+ } = await TokenContract.deploy(this.adminWallet, this.adminAddress, 'CBC', 'CBC', 18n).send({
268
+ from: this.adminAddress,
269
+ wait: { returnReceipt: true },
270
+ });
265
271
  this.logger.info(`CandyBarCoin deployed at ${candyBarCoin.address}`);
266
272
  this.candyBarCoin = candyBarCoin;
267
273
  this.candyBarCoinInstance = candyBarCoinInstance;
@@ -273,11 +279,12 @@ export class ClientFlowsBenchmark {
273
279
  expect((await this.context.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
274
280
 
275
281
  const bananaCoin = this.bananaCoin;
276
- const { contract: bananaFPC, instance: bananaFPCInstance } = await FPCContract.deploy(
277
- this.adminWallet,
278
- bananaCoin.address,
279
- this.adminAddress,
280
- ).send({ from: this.adminAddress, wait: { returnReceipt: true } });
282
+ const {
283
+ receipt: { contract: bananaFPC, instance: bananaFPCInstance },
284
+ } = await FPCContract.deploy(this.adminWallet, bananaCoin.address, this.adminAddress).send({
285
+ from: this.adminAddress,
286
+ wait: { returnReceipt: true },
287
+ });
281
288
 
282
289
  this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
283
290
 
@@ -326,7 +333,7 @@ export class ClientFlowsBenchmark {
326
333
  const claim = await this.feeJuiceBridgeTestHarness.prepareTokensOnL1(benchysAddress);
327
334
  const behchysDeployMethod = await benchysAccountManager.getDeployMethod();
328
335
  await behchysDeployMethod.send({
329
- from: AztecAddress.ZERO,
336
+ from: NO_FROM,
330
337
  fee: { paymentMethod: new FeeJuicePaymentMethodWithClaim(benchysAddress, claim) },
331
338
  });
332
339
  // Register benchy on the user's Wallet, where we're going to be interacting from
@@ -340,14 +347,15 @@ export class ClientFlowsBenchmark {
340
347
 
341
348
  public async applyDeployAmm() {
342
349
  this.logger.info('Applying AMM deployment');
343
- const { contract: liquidityToken, instance: liquidityTokenInstance } = await TokenContract.deploy(
344
- this.adminWallet,
345
- this.adminAddress,
346
- 'LPT',
347
- 'LPT',
348
- 18n,
349
- ).send({ from: this.adminAddress, wait: { returnReceipt: true } });
350
- const { contract: amm, instance: ammInstance } = await AMMContract.deploy(
350
+ const {
351
+ receipt: { contract: liquidityToken, instance: liquidityTokenInstance },
352
+ } = await TokenContract.deploy(this.adminWallet, this.adminAddress, 'LPT', 'LPT', 18n).send({
353
+ from: this.adminAddress,
354
+ wait: { returnReceipt: true },
355
+ });
356
+ const {
357
+ receipt: { contract: amm, instance: ammInstance },
358
+ } = await AMMContract.deploy(
351
359
  this.adminWallet,
352
360
  this.bananaCoin.address,
353
361
  this.candyBarCoin.address,
@@ -370,7 +378,7 @@ export class ClientFlowsBenchmark {
370
378
  // The private fee paying method assembled on the app side requires knowledge of the maximum
371
379
  // fee the user is willing to pay
372
380
  const maxFeesPerGas = (await this.aztecNode.getCurrentMinFees()).mul(1.5);
373
- const gasSettings = GasSettings.default({ maxFeesPerGas });
381
+ const gasSettings = GasSettings.fallback({ maxFeesPerGas });
374
382
  return new PrivateFeePaymentMethod(this.bananaFPC.address, sender, wallet, gasSettings);
375
383
  }
376
384
 
@@ -25,7 +25,7 @@ export async function benchmarkSetup(
25
25
  ) {
26
26
  const context = await setup(1, { ...opts, telemetryConfig: { benchmark: true } });
27
27
  const defaultAccountAddress = context.accounts[0];
28
- const contract = await BenchmarkingContract.deploy(context.wallet).send({ from: defaultAccountAddress });
28
+ const { contract } = await BenchmarkingContract.deploy(context.wallet).send({ from: defaultAccountAddress });
29
29
  context.logger.info(`Deployed benchmarking contract at ${contract.address}`);
30
30
  const sequencer = (context.aztecNode as AztecNodeService).getSequencer()!;
31
31
  const telemetry = context.telemetryClient as BenchmarkTelemetryClient;
@@ -149,7 +149,12 @@ export async function sendTxs(
149
149
  context.logger.info(`Creating ${txCount} txs`);
150
150
  const [from] = context.accounts;
151
151
  context.logger.info(`Sending ${txCount} txs`);
152
- return Promise.all(calls.map(call => call.send({ from, wait: NO_WAIT })));
152
+ return Promise.all(
153
+ calls.map(async call => {
154
+ const { txHash } = await call.send({ from, wait: NO_WAIT });
155
+ return txHash;
156
+ }),
157
+ );
153
158
  }
154
159
 
155
160
  export async function waitTxs(txs: TxHash[], context: EndToEndContext, txWaitOpts?: WaitOpts) {
@@ -10,6 +10,7 @@ import { TokenBlacklistContract } from '@aztec/noir-contracts.js/TokenBlacklist'
10
10
  import { GenericProxyContract } from '@aztec/noir-test-contracts.js/GenericProxy';
11
11
  import { InvalidAccountContract } from '@aztec/noir-test-contracts.js/InvalidAccount';
12
12
  import type { SequencerClient } from '@aztec/sequencer-client';
13
+ import type { AztecNodeDebug } from '@aztec/stdlib/interfaces/client';
13
14
 
14
15
  import { jest } from '@jest/globals';
15
16
 
@@ -57,7 +58,7 @@ export class BlacklistTokenContractTest {
57
58
  authwitProxy!: GenericProxyContract;
58
59
  cheatCodes!: CheatCodes;
59
60
  sequencer!: SequencerClient;
60
- aztecNode!: AztecNode;
61
+ aztecNode!: AztecNode & AztecNodeDebug;
61
62
 
62
63
  adminAddress!: AztecAddress;
63
64
  otherAddress!: AztecAddress;
@@ -68,11 +69,7 @@ export class BlacklistTokenContractTest {
68
69
  }
69
70
 
70
71
  async crossTimestampOfChange() {
71
- await this.cheatCodes.warpL2TimeAtLeastBy(
72
- this.sequencer,
73
- this.aztecNode,
74
- BlacklistTokenContractTest.CHANGE_ROLES_DELAY,
75
- );
72
+ await this.cheatCodes.warpL2TimeAtLeastBy(this.aztecNode, BlacklistTokenContractTest.CHANGE_ROLES_DELAY);
76
73
  }
77
74
 
78
75
  /**
@@ -107,20 +104,24 @@ export class BlacklistTokenContractTest {
107
104
  await publicDeployAccounts(this.wallet, [this.adminAddress, this.otherAddress, this.blacklistedAddress]);
108
105
 
109
106
  this.logger.verbose(`Deploying TokenContract...`);
110
- this.asset = await TokenBlacklistContract.deploy(this.wallet, this.adminAddress).send({
107
+ ({ contract: this.asset } = await TokenBlacklistContract.deploy(this.wallet, this.adminAddress).send({
111
108
  from: this.adminAddress,
112
- });
109
+ }));
113
110
  this.logger.verbose(`Token deployed to ${this.asset.address}`);
114
111
 
115
112
  this.logger.verbose(`Deploying bad account...`);
116
- this.badAccount = await InvalidAccountContract.deploy(this.wallet).send({ from: this.adminAddress });
113
+ ({ contract: this.badAccount } = await InvalidAccountContract.deploy(this.wallet).send({
114
+ from: this.adminAddress,
115
+ }));
117
116
  this.logger.verbose(`Deployed to ${this.badAccount.address}.`);
118
117
 
119
118
  // Deploy a proxy contract for "on behalf of other" tests. The note owner must be the tx sender
120
119
  // (so their notes are in scope), but msg_sender in the target must differ from the note owner
121
120
  // to trigger authwit validation. The proxy forwards calls so that msg_sender != tx sender.
122
121
  this.logger.verbose(`Deploying generic proxy...`);
123
- this.authwitProxy = await GenericProxyContract.deploy(this.wallet).send({ from: this.adminAddress });
122
+ ({ contract: this.authwitProxy } = await GenericProxyContract.deploy(this.wallet).send({
123
+ from: this.adminAddress,
124
+ }));
124
125
  this.logger.verbose(`Deployed to ${this.authwitProxy.address}.`);
125
126
 
126
127
  await this.crossTimestampOfChange();
@@ -133,9 +134,9 @@ export class BlacklistTokenContractTest {
133
134
  [this.adminAddress, this.otherAddress, this.blacklistedAddress],
134
135
  );
135
136
 
136
- expect(await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).toEqual(
137
- new Role().withAdmin().toNoirStruct(),
138
- );
137
+ expect(
138
+ (await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).result,
139
+ ).toEqual(new Role().withAdmin().toNoirStruct());
139
140
  }
140
141
 
141
142
  async setup() {
@@ -189,9 +190,9 @@ export class BlacklistTokenContractTest {
189
190
 
190
191
  await this.crossTimestampOfChange();
191
192
 
192
- expect(await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).toEqual(
193
- adminMinterRole.toNoirStruct(),
194
- );
193
+ expect(
194
+ (await this.asset.methods.get_roles(this.adminAddress).simulate({ from: this.adminAddress })).result,
195
+ ).toEqual(adminMinterRole.toNoirStruct());
195
196
 
196
197
  this.logger.verbose(`Minting ${amount} publicly...`);
197
198
  await asset.methods.mint_public(this.adminAddress, amount).send({ from: this.adminAddress });
@@ -199,7 +200,7 @@ export class BlacklistTokenContractTest {
199
200
  this.logger.verbose(`Minting ${amount} privately...`);
200
201
  const secret = Fr.random();
201
202
  const secretHash = await computeSecretHash(secret);
202
- const receipt = await asset.methods.mint_private(amount, secretHash).send({ from: this.adminAddress });
203
+ const { receipt } = await asset.methods.mint_private(amount, secretHash).send({ from: this.adminAddress });
203
204
 
204
205
  await this.addPendingShieldNoteToPXE(asset, this.adminAddress, amount, secretHash, receipt.txHash);
205
206
  await asset.methods.redeem_shield(this.adminAddress, amount, secret).send({ from: this.adminAddress });
@@ -207,20 +208,20 @@ export class BlacklistTokenContractTest {
207
208
 
208
209
  tokenSim.mintPublic(this.adminAddress, amount);
209
210
 
210
- const publicBalance = await asset.methods
211
+ const { result: publicBalance } = await asset.methods
211
212
  .balance_of_public(this.adminAddress)
212
213
  .simulate({ from: this.adminAddress });
213
214
  this.logger.verbose(`Public balance of wallet 0: ${publicBalance}`);
214
215
  expect(publicBalance).toEqual(this.tokenSim.balanceOfPublic(this.adminAddress));
215
216
 
216
217
  tokenSim.mintPrivate(this.adminAddress, amount);
217
- const privateBalance = await asset.methods
218
+ const { result: privateBalance } = await asset.methods
218
219
  .balance_of_private(this.adminAddress)
219
220
  .simulate({ from: this.adminAddress });
220
221
  this.logger.verbose(`Private balance of wallet 0: ${privateBalance}`);
221
222
  expect(privateBalance).toEqual(tokenSim.balanceOfPrivate(this.adminAddress));
222
223
 
223
- const totalSupply = await asset.methods.total_supply().simulate({ from: this.adminAddress });
224
+ const { result: totalSupply } = await asset.methods.total_supply().simulate({ from: this.adminAddress });
224
225
  this.logger.verbose(`Total supply: ${totalSupply}`);
225
226
  expect(totalSupply).toEqual(tokenSim.totalSupply);
226
227
  }
@@ -28,6 +28,7 @@ import { type SequencerClient, type SequencerEvents, SequencerState } from '@azt
28
28
  import { type BlockParameter, EthAddress } from '@aztec/stdlib/block';
29
29
  import { type L1RollupConstants, getProofSubmissionDeadlineTimestamp } from '@aztec/stdlib/epoch-helpers';
30
30
  import { tryStop } from '@aztec/stdlib/interfaces/server';
31
+ import type { SlashingProtectionDatabase } from '@aztec/validator-ha-signer/types';
31
32
 
32
33
  import { join } from 'path';
33
34
  import type { Hex } from 'viem';
@@ -181,6 +182,7 @@ export class EpochsTestContext {
181
182
  ethereumSlotDuration,
182
183
  proofSubmissionEpochs: Number(await this.rollup.getProofSubmissionEpochs()),
183
184
  targetCommitteeSize: await this.rollup.getTargetCommitteeSize(),
185
+ rollupManaLimit: Number(await this.rollup.getManaLimit()),
184
186
  };
185
187
 
186
188
  this.logger.info(
@@ -237,13 +239,21 @@ export class EpochsTestContext {
237
239
 
238
240
  public createValidatorNode(
239
241
  privateKeys: `0x${string}`[],
240
- opts: Partial<AztecNodeConfig> & { dontStartSequencer?: boolean } = {},
242
+ opts: Partial<AztecNodeConfig> & {
243
+ dontStartSequencer?: boolean;
244
+ slashingProtectionDb?: SlashingProtectionDatabase;
245
+ } = {},
241
246
  ) {
242
247
  this.logger.warn('Creating and syncing a validator node...');
243
248
  return this.createNode({ ...opts, disableValidator: false, validatorPrivateKeys: new SecretValue(privateKeys) });
244
249
  }
245
250
 
246
- private async createNode(opts: Partial<AztecNodeConfig> & { dontStartSequencer?: boolean } = {}) {
251
+ private async createNode(
252
+ opts: Partial<AztecNodeConfig> & {
253
+ dontStartSequencer?: boolean;
254
+ slashingProtectionDb?: SlashingProtectionDatabase;
255
+ } = {},
256
+ ) {
247
257
  const nodeIndex = this.nodes.length + 1;
248
258
  const actorPrefix = opts.disableValidator ? 'node' : 'validator';
249
259
  const { mockGossipSubNetwork } = this.context;
@@ -256,6 +266,7 @@ export class EpochsTestContext {
256
266
  ...resolvedConfig,
257
267
  dataDirectory: join(this.context.config.dataDirectory!, randomBytes(8).toString('hex')),
258
268
  validatorPrivateKeys: opts.validatorPrivateKeys ?? new SecretValue([]),
269
+ nodeId: resolvedConfig.nodeId || `${actorPrefix}-${nodeIndex}`,
259
270
  p2pEnabled,
260
271
  p2pIp,
261
272
  },
@@ -264,6 +275,7 @@ export class EpochsTestContext {
264
275
  p2pClientDeps: {
265
276
  p2pServiceFactory: mockGossipSubNetwork ? getMockPubSubP2PServiceFactory(mockGossipSubNetwork) : undefined,
266
277
  },
278
+ slashingProtectionDb: opts.slashingProtectionDb,
267
279
  },
268
280
  {
269
281
  prefilledPublicData: this.context.prefilledPublicData,
@@ -1,7 +1,7 @@
1
1
  import type { AztecAddress } from '@aztec/aztec.js/addresses';
2
2
  import { type Logger, createLogger } from '@aztec/aztec.js/log';
3
3
  import type { AztecNode } from '@aztec/aztec.js/node';
4
- import { CheatCodes } from '@aztec/aztec/testing';
4
+ import { CheatCodes, getTokenAllowedSetupFunctions } from '@aztec/aztec/testing';
5
5
  import { createExtendedL1Client } from '@aztec/ethereum/client';
6
6
  import { RollupContract } from '@aztec/ethereum/contracts';
7
7
  import type { DeployAztecL1ContractsArgs } from '@aztec/ethereum/deploy-aztec-l1-contracts';
@@ -104,12 +104,15 @@ export class FeesTest {
104
104
 
105
105
  async setup() {
106
106
  this.logger.verbose('Setting up fresh context...');
107
+ // Token allowlist entries are test-only: FPC-based fee payment with custom tokens won't work on mainnet alpha.
108
+ const tokenAllowList = await getTokenAllowedSetupFunctions();
107
109
  this.context = await setup(0, {
108
110
  startProverNode: true,
109
111
  ...this.setupOptions,
110
112
  fundSponsoredFPC: true,
111
113
  skipAccountDeployment: true,
112
114
  l1ContractsArgs: { ...this.setupOptions },
115
+ txPublicSetupAllowListExtend: [...(this.setupOptions.txPublicSetupAllowListExtend ?? []), ...tokenAllowList],
113
116
  });
114
117
 
115
118
  this.rollupContract = RollupContract.getFromConfig(this.context.config);
@@ -157,11 +160,15 @@ export class FeesTest {
157
160
 
158
161
  /** Alice mints bananaCoin tokens privately to the target address and redeems them. */
159
162
  async mintPrivateBananas(amount: bigint, address: AztecAddress) {
160
- const balanceBefore = await this.bananaCoin.methods.balance_of_private(address).simulate({ from: address });
163
+ const { result: balanceBefore } = await this.bananaCoin.methods
164
+ .balance_of_private(address)
165
+ .simulate({ from: address });
161
166
 
162
167
  await mintTokensToPrivate(this.bananaCoin, this.aliceAddress, address, amount);
163
168
 
164
- const balanceAfter = await this.bananaCoin.methods.balance_of_private(address).simulate({ from: address });
169
+ const { result: balanceAfter } = await this.bananaCoin.methods
170
+ .balance_of_private(address)
171
+ .simulate({ from: address });
165
172
  expect(balanceAfter).toEqual(balanceBefore + amount);
166
173
  }
167
174
 
@@ -186,7 +193,7 @@ export class FeesTest {
186
193
  this.wallet = this.context.wallet;
187
194
  this.aztecNode = this.context.aztecNodeService;
188
195
  this.aztecNodeAdmin = this.context.aztecNodeService;
189
- this.gasSettings = GasSettings.default({ maxFeesPerGas: (await this.aztecNode.getCurrentMinFees()).mul(2) });
196
+ this.gasSettings = GasSettings.fallback({ maxFeesPerGas: (await this.aztecNode.getCurrentMinFees()).mul(2) });
190
197
  this.cheatCodes = this.context.cheatCodes;
191
198
  this.accounts = deployedAccounts.map(a => a.address);
192
199
  this.accounts.forEach((a, i) => this.logger.verbose(`Account ${i} address: ${a}`));
@@ -223,7 +230,7 @@ export class FeesTest {
223
230
  async applyDeployBananaToken() {
224
231
  this.logger.info('Applying deploy banana token setup');
225
232
 
226
- const bananaCoin = await BananaCoin.deploy(this.wallet, this.aliceAddress, 'BC', 'BC', 18n).send({
233
+ const { contract: bananaCoin } = await BananaCoin.deploy(this.wallet, this.aliceAddress, 'BC', 'BC', 18n).send({
227
234
  from: this.aliceAddress,
228
235
  });
229
236
  this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
@@ -244,7 +251,7 @@ export class FeesTest {
244
251
  expect((await this.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
245
252
 
246
253
  const bananaCoin = this.bananaCoin;
247
- const bananaFPC = await FPCContract.deploy(this.wallet, bananaCoin.address, this.fpcAdmin).send({
254
+ const { contract: bananaFPC } = await FPCContract.deploy(this.wallet, bananaCoin.address, this.fpcAdmin).send({
248
255
  from: this.aliceAddress,
249
256
  });
250
257
 
@@ -275,7 +282,7 @@ export class FeesTest {
275
282
 
276
283
  // @todo @lherskind As we deal with #13601
277
284
  // Right now the value is from `FeeLib.sol`
278
- const L1_GAS_PER_EPOCH_VERIFIED = 1000000n;
285
+ const L1_GAS_PER_EPOCH_VERIFIED = 3600000n;
279
286
 
280
287
  // We round up
281
288
  const mulDiv = (a: bigint, b: bigint, c: bigint) => (a * b) / c + ((a * b) % c > 0n ? 1n : 0n);
@@ -65,9 +65,11 @@ export class NestedContractTest {
65
65
 
66
66
  async applyManual() {
67
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;
68
+ ({ contract: this.parentContract } = await ParentContract.deploy(this.wallet).send({
69
+ from: this.defaultAccountAddress,
70
+ }));
71
+ ({ contract: this.childContract } = await ChildContract.deploy(this.wallet).send({
72
+ from: this.defaultAccountAddress,
73
+ }));
72
74
  }
73
75
  }
@@ -58,6 +58,7 @@ export class P2PInactivityTest {
58
58
  basePort: BOOT_NODE_UDP_PORT,
59
59
  startProverNode: true,
60
60
  initialConfig: {
61
+ anvilSlotsInAnEpoch: 4,
61
62
  proverNodeConfig: { proverNodeEpochProvingDelayMs: AZTEC_SLOT_DURATION * 1000 },
62
63
  aztecTargetCommitteeSize: COMMITTEE_SIZE,
63
64
  aztecSlotDuration: AZTEC_SLOT_DURATION,
@@ -323,8 +323,9 @@ export class P2PNetworkTest {
323
323
  throw new Error('Call setupAccount before deploying spam contract');
324
324
  }
325
325
 
326
- const spamContract = await SpamContract.deploy(this.wallet).send({ from: this.defaultAccountAddress! });
327
- this.spamContract = spamContract;
326
+ ({ contract: this.spamContract } = await SpamContract.deploy(this.wallet).send({
327
+ from: this.defaultAccountAddress!,
328
+ }));
328
329
  }
329
330
 
330
331
  async removeInitialNode() {
@@ -407,6 +408,7 @@ export class P2PNetworkTest {
407
408
  expectedNodeCount?: number,
408
409
  timeoutSeconds = 30,
409
410
  checkIntervalSeconds = 0.1,
411
+ topics: TopicType[] = [TopicType.tx],
410
412
  ) {
411
413
  const nodeCount = expectedNodeCount ?? nodes.length;
412
414
  const minPeerCount = nodeCount - 1;
@@ -433,26 +435,28 @@ export class P2PNetworkTest {
433
435
 
434
436
  this.logger.warn('All nodes connected to P2P mesh');
435
437
 
436
- // Wait for GossipSub mesh to form for the tx topic.
438
+ // Wait for GossipSub mesh to form for all specified topics.
437
439
  // We only require at least 1 mesh peer per node because GossipSub
438
440
  // 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');
441
+ for (const topic of topics) {
442
+ this.logger.warn(`Waiting for GossipSub mesh to form for ${topic} topic...`);
443
+ await Promise.all(
444
+ nodes.map(async (node, index) => {
445
+ const p2p = node.getP2P();
446
+ await retryUntil(
447
+ async () => {
448
+ const meshPeers = await p2p.getGossipMeshPeerCount(topic);
449
+ this.logger.debug(`Node ${index} has ${meshPeers} gossip mesh peers for ${topic} topic`);
450
+ return meshPeers >= 1 ? true : undefined;
451
+ },
452
+ `Node ${index} to have gossip mesh peers for ${topic} topic`,
453
+ timeoutSeconds,
454
+ checkIntervalSeconds,
455
+ );
456
+ }),
457
+ );
458
+ this.logger.warn(`All nodes have gossip mesh peers for ${topic} topic`);
459
+ }
456
460
  }
457
461
 
458
462
  async teardown() {