@aztec/end-to-end 0.0.1-commit.e0f15ab9b → 0.0.1-commit.e304674f1

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 (53) 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 +11 -26
  5. package/dest/e2e_epochs/epochs_test.js +3 -3
  6. package/dest/e2e_fees/fees_test.js +1 -1
  7. package/dest/e2e_p2p/inactivity_slash_test.js +3 -3
  8. package/dest/e2e_p2p/p2p_network.d.ts +5 -7
  9. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  10. package/dest/e2e_p2p/p2p_network.js +8 -12
  11. package/dest/e2e_p2p/reqresp/utils.js +1 -1
  12. package/dest/e2e_p2p/shared.d.ts +5 -7
  13. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  14. package/dest/e2e_p2p/shared.js +16 -42
  15. package/dest/fixtures/authwit_proxy.d.ts +1 -1
  16. package/dest/fixtures/authwit_proxy.d.ts.map +1 -1
  17. package/dest/fixtures/authwit_proxy.js +4 -0
  18. package/dest/fixtures/e2e_prover_test.d.ts +1 -1
  19. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  20. package/dest/fixtures/e2e_prover_test.js +4 -7
  21. package/dest/fixtures/setup.d.ts +5 -4
  22. package/dest/fixtures/setup.d.ts.map +1 -1
  23. package/dest/fixtures/setup.js +7 -6
  24. package/dest/fixtures/setup_p2p_test.d.ts +6 -6
  25. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  26. package/dest/fixtures/setup_p2p_test.js +8 -8
  27. package/dest/fixtures/token_utils.d.ts +1 -1
  28. package/dest/fixtures/token_utils.d.ts.map +1 -1
  29. package/dest/fixtures/token_utils.js +2 -5
  30. package/dest/legacy-jest-resolver.d.cts +3 -0
  31. package/dest/legacy-jest-resolver.d.cts.map +1 -0
  32. package/dest/spartan/setup_test_wallets.d.ts +1 -1
  33. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  34. package/dest/spartan/setup_test_wallets.js +58 -40
  35. package/dest/test-wallet/test_wallet.d.ts +6 -7
  36. package/dest/test-wallet/test_wallet.d.ts.map +1 -1
  37. package/dest/test-wallet/test_wallet.js +36 -27
  38. package/package.json +40 -39
  39. package/src/bench/client_flows/client_flows_benchmark.ts +29 -21
  40. package/src/e2e_epochs/epochs_test.ts +3 -3
  41. package/src/e2e_fees/fees_test.ts +1 -1
  42. package/src/e2e_p2p/inactivity_slash_test.ts +3 -3
  43. package/src/e2e_p2p/p2p_network.ts +16 -23
  44. package/src/e2e_p2p/reqresp/utils.ts +1 -1
  45. package/src/e2e_p2p/shared.ts +16 -57
  46. package/src/fixtures/authwit_proxy.ts +4 -0
  47. package/src/fixtures/e2e_prover_test.ts +7 -6
  48. package/src/fixtures/setup.ts +12 -13
  49. package/src/fixtures/setup_p2p_test.ts +9 -9
  50. package/src/fixtures/token_utils.ts +1 -4
  51. package/src/legacy-jest-resolver.cjs +135 -0
  52. package/src/spartan/setup_test_wallets.ts +59 -36
  53. package/src/test-wallet/test_wallet.ts +53 -28
@@ -11,6 +11,7 @@ import { getPXEConfig } from '@aztec/pxe/config';
11
11
  import { createPXE } from '@aztec/pxe/server';
12
12
  import { getContractInstanceFromInstantiationParams } from '@aztec/stdlib/contract';
13
13
  import { deriveSigningKey } from '@aztec/stdlib/keys';
14
+ import { SimulationOverrides } from '@aztec/stdlib/tx';
14
15
  import { mergeExecutionPayloads } from '@aztec/stdlib/tx';
15
16
  import { BaseWallet } from '@aztec/wallet-sdk/base-wallet';
16
17
  import { AztecNodeProxy, ProvenTx } from './utils.js';
@@ -65,22 +66,29 @@ import { AztecNodeProxy, ProvenTx } from './utils.js';
65
66
  };
66
67
  return this.createAccount(accountData);
67
68
  }
68
- async getFakeAccountDataFor(address) {
69
- const originalAccount = await this.getAccountFromAddress(address);
70
- const originalAddress = originalAccount.getCompleteAddress();
71
- const contractInstance = await this.pxe.getContractInstance(originalAddress.address);
72
- if (!contractInstance) {
73
- throw new Error(`No contract instance found for address: ${originalAddress.address}`);
69
+ /**
70
+ * Builds contract overrides for all provided addresses by replacing their account contracts with stub implementations.
71
+ */ async buildAccountOverrides(addresses) {
72
+ const accounts = await this.getAccounts();
73
+ const contracts = {};
74
+ const filtered = accounts.filter((acc)=>addresses.some((addr)=>addr.equals(acc.item)));
75
+ for (const account of filtered){
76
+ const address = account.item;
77
+ const originalAccount = await this.getAccountFromAddress(address);
78
+ const completeAddress = originalAccount.getCompleteAddress();
79
+ const contractInstance = await this.pxe.getContractInstance(completeAddress.address);
80
+ if (!contractInstance) {
81
+ throw new Error(`No contract instance found for address: ${completeAddress.address} during account override building. This is a bug!`);
82
+ }
83
+ const stubInstance = await getContractInstanceFromInstantiationParams(StubAccountContractArtifact, {
84
+ salt: Fr.random()
85
+ });
86
+ contracts[address.toString()] = {
87
+ instance: stubInstance,
88
+ artifact: StubAccountContractArtifact
89
+ };
74
90
  }
75
- const stubAccount = createStubAccount(originalAddress);
76
- const instance = await getContractInstanceFromInstantiationParams(StubAccountContractArtifact, {
77
- salt: Fr.random()
78
- });
79
- return {
80
- account: stubAccount,
81
- instance,
82
- artifact: StubAccountContractArtifact
83
- };
91
+ return contracts;
84
92
  }
85
93
  accounts;
86
94
  /**
@@ -144,6 +152,7 @@ import { AztecNodeProxy, ProvenTx } from './utils.js';
144
152
  async simulateViaEntrypoint(executionPayload, opts) {
145
153
  const { from, feeOptions, scopes, skipTxValidation, skipFeeEnforcement } = opts;
146
154
  const skipKernels = this.simulationMode !== 'full';
155
+ const useOverride = this.simulationMode === 'kernelless-override';
147
156
  const feeExecutionPayload = await feeOptions.walletFeePaymentMethod?.getExecutionPayload();
148
157
  const finalExecutionPayload = feeExecutionPayload ? mergeExecutionPayloads([
149
158
  feeExecutionPayload,
@@ -152,23 +161,19 @@ import { AztecNodeProxy, ProvenTx } from './utils.js';
152
161
  const chainInfo = await this.getChainInfo();
153
162
  let overrides;
154
163
  let txRequest;
164
+ if (useOverride) {
165
+ const accountOverrides = await this.buildAccountOverrides(this.scopesFrom(from, opts.additionalScopes));
166
+ overrides = new SimulationOverrides(accountOverrides);
167
+ }
155
168
  if (from === NO_FROM) {
156
169
  const entrypoint = new DefaultEntrypoint();
157
170
  txRequest = await entrypoint.createTxExecutionRequest(finalExecutionPayload, feeOptions.gasSettings, chainInfo);
158
171
  } else {
159
- const useOverride = this.simulationMode === 'kernelless-override';
160
172
  let fromAccount;
161
173
  if (useOverride) {
162
- const { account, instance, artifact } = await this.getFakeAccountDataFor(from);
163
- fromAccount = account;
164
- overrides = {
165
- contracts: {
166
- [from.toString()]: {
167
- instance,
168
- artifact
169
- }
170
- }
171
- };
174
+ const originalAccount = await this.getAccountFromAddress(from);
175
+ const completeAddress = originalAccount.getCompleteAddress();
176
+ fromAccount = createStubAccount(completeAddress);
172
177
  } else {
173
178
  fromAccount = await this.getAccountFromAddress(from);
174
179
  }
@@ -190,7 +195,11 @@ import { AztecNodeProxy, ProvenTx } from './utils.js';
190
195
  });
191
196
  }
192
197
  async proveTx(exec, opts) {
193
- const fee = await this.completeFeeOptions(opts.from, exec.feePayer, opts.fee?.gasSettings);
198
+ const fee = await this.completeFeeOptions({
199
+ from: opts.from,
200
+ feePayer: exec.feePayer,
201
+ gasSettings: opts.fee?.gasSettings
202
+ });
194
203
  const txRequest = await this.createTxExecutionRequestFromPayloadAndFee(exec, opts.from, fee);
195
204
  const txProvingResult = await this.pxe.proveTx(txRequest, this.scopesFrom(opts.from, opts.additionalScopes));
196
205
  return new ProvenTx(this.aztecNode, await txProvingResult.toTx(), txProvingResult.getOffchainEffects(), txProvingResult.stats);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/end-to-end",
3
- "version": "0.0.1-commit.e0f15ab9b",
3
+ "version": "0.0.1-commit.e304674f1",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "inherits": [
@@ -26,44 +26,44 @@
26
26
  "formatting": "run -T prettier --check ./src && run -T eslint ./src"
27
27
  },
28
28
  "dependencies": {
29
- "@aztec/accounts": "0.0.1-commit.e0f15ab9b",
30
- "@aztec/archiver": "0.0.1-commit.e0f15ab9b",
31
- "@aztec/aztec": "0.0.1-commit.e0f15ab9b",
32
- "@aztec/aztec-node": "0.0.1-commit.e0f15ab9b",
33
- "@aztec/aztec.js": "0.0.1-commit.e0f15ab9b",
34
- "@aztec/bb-prover": "0.0.1-commit.e0f15ab9b",
35
- "@aztec/bb.js": "0.0.1-commit.e0f15ab9b",
36
- "@aztec/blob-client": "0.0.1-commit.e0f15ab9b",
37
- "@aztec/blob-lib": "0.0.1-commit.e0f15ab9b",
38
- "@aztec/bot": "0.0.1-commit.e0f15ab9b",
39
- "@aztec/cli": "0.0.1-commit.e0f15ab9b",
40
- "@aztec/constants": "0.0.1-commit.e0f15ab9b",
41
- "@aztec/entrypoints": "0.0.1-commit.e0f15ab9b",
42
- "@aztec/epoch-cache": "0.0.1-commit.e0f15ab9b",
43
- "@aztec/ethereum": "0.0.1-commit.e0f15ab9b",
44
- "@aztec/foundation": "0.0.1-commit.e0f15ab9b",
45
- "@aztec/kv-store": "0.0.1-commit.e0f15ab9b",
46
- "@aztec/l1-artifacts": "0.0.1-commit.e0f15ab9b",
47
- "@aztec/node-keystore": "0.0.1-commit.e0f15ab9b",
48
- "@aztec/noir-contracts.js": "0.0.1-commit.e0f15ab9b",
49
- "@aztec/noir-noirc_abi": "0.0.1-commit.e0f15ab9b",
50
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.e0f15ab9b",
51
- "@aztec/noir-test-contracts.js": "0.0.1-commit.e0f15ab9b",
52
- "@aztec/p2p": "0.0.1-commit.e0f15ab9b",
53
- "@aztec/protocol-contracts": "0.0.1-commit.e0f15ab9b",
54
- "@aztec/prover-client": "0.0.1-commit.e0f15ab9b",
55
- "@aztec/prover-node": "0.0.1-commit.e0f15ab9b",
56
- "@aztec/pxe": "0.0.1-commit.e0f15ab9b",
57
- "@aztec/sequencer-client": "0.0.1-commit.e0f15ab9b",
58
- "@aztec/simulator": "0.0.1-commit.e0f15ab9b",
59
- "@aztec/slasher": "0.0.1-commit.e0f15ab9b",
60
- "@aztec/stdlib": "0.0.1-commit.e0f15ab9b",
61
- "@aztec/telemetry-client": "0.0.1-commit.e0f15ab9b",
62
- "@aztec/validator-client": "0.0.1-commit.e0f15ab9b",
63
- "@aztec/validator-ha-signer": "0.0.1-commit.e0f15ab9b",
64
- "@aztec/wallet-sdk": "0.0.1-commit.e0f15ab9b",
65
- "@aztec/wallets": "0.0.1-commit.e0f15ab9b",
66
- "@aztec/world-state": "0.0.1-commit.e0f15ab9b",
29
+ "@aztec/accounts": "0.0.1-commit.e304674f1",
30
+ "@aztec/archiver": "0.0.1-commit.e304674f1",
31
+ "@aztec/aztec": "0.0.1-commit.e304674f1",
32
+ "@aztec/aztec-node": "0.0.1-commit.e304674f1",
33
+ "@aztec/aztec.js": "0.0.1-commit.e304674f1",
34
+ "@aztec/bb-prover": "0.0.1-commit.e304674f1",
35
+ "@aztec/bb.js": "0.0.1-commit.e304674f1",
36
+ "@aztec/blob-client": "0.0.1-commit.e304674f1",
37
+ "@aztec/blob-lib": "0.0.1-commit.e304674f1",
38
+ "@aztec/bot": "0.0.1-commit.e304674f1",
39
+ "@aztec/cli": "0.0.1-commit.e304674f1",
40
+ "@aztec/constants": "0.0.1-commit.e304674f1",
41
+ "@aztec/entrypoints": "0.0.1-commit.e304674f1",
42
+ "@aztec/epoch-cache": "0.0.1-commit.e304674f1",
43
+ "@aztec/ethereum": "0.0.1-commit.e304674f1",
44
+ "@aztec/foundation": "0.0.1-commit.e304674f1",
45
+ "@aztec/kv-store": "0.0.1-commit.e304674f1",
46
+ "@aztec/l1-artifacts": "0.0.1-commit.e304674f1",
47
+ "@aztec/node-keystore": "0.0.1-commit.e304674f1",
48
+ "@aztec/noir-contracts.js": "0.0.1-commit.e304674f1",
49
+ "@aztec/noir-noirc_abi": "0.0.1-commit.e304674f1",
50
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.e304674f1",
51
+ "@aztec/noir-test-contracts.js": "0.0.1-commit.e304674f1",
52
+ "@aztec/p2p": "0.0.1-commit.e304674f1",
53
+ "@aztec/protocol-contracts": "0.0.1-commit.e304674f1",
54
+ "@aztec/prover-client": "0.0.1-commit.e304674f1",
55
+ "@aztec/prover-node": "0.0.1-commit.e304674f1",
56
+ "@aztec/pxe": "0.0.1-commit.e304674f1",
57
+ "@aztec/sequencer-client": "0.0.1-commit.e304674f1",
58
+ "@aztec/simulator": "0.0.1-commit.e304674f1",
59
+ "@aztec/slasher": "0.0.1-commit.e304674f1",
60
+ "@aztec/stdlib": "0.0.1-commit.e304674f1",
61
+ "@aztec/telemetry-client": "0.0.1-commit.e304674f1",
62
+ "@aztec/validator-client": "0.0.1-commit.e304674f1",
63
+ "@aztec/validator-ha-signer": "0.0.1-commit.e304674f1",
64
+ "@aztec/wallet-sdk": "0.0.1-commit.e304674f1",
65
+ "@aztec/wallets": "0.0.1-commit.e304674f1",
66
+ "@aztec/world-state": "0.0.1-commit.e304674f1",
67
67
  "@iarna/toml": "^2.2.5",
68
68
  "@jest/globals": "^30.0.0",
69
69
  "@noble/curves": "=1.0.0",
@@ -159,6 +159,7 @@
159
159
  "moduleNameMapper": {
160
160
  "^(\\.{1,2}/.*)\\.[cm]?js$": "$1"
161
161
  },
162
+ "resolver": "<rootDir>/legacy-jest-resolver.cjs",
162
163
  "testRegex": "./src/.*\\.test\\.(js|mjs|ts)$",
163
164
  "rootDir": "./src",
164
165
  "testTimeout": 120000,
@@ -250,11 +250,14 @@ export class ClientFlowsBenchmark {
250
250
 
251
251
  async applyDeployBananaToken() {
252
252
  this.logger.info('Applying banana token deployment');
253
- const {
254
- receipt: { contract: bananaCoin, instance: bananaCoinInstance },
255
- } = await BananaCoin.deploy(this.adminWallet, this.adminAddress, 'BC', 'BC', 18n).send({
253
+ const { contract: bananaCoin, instance: bananaCoinInstance } = await BananaCoin.deploy(
254
+ this.adminWallet,
255
+ this.adminAddress,
256
+ 'BC',
257
+ 'BC',
258
+ 18n,
259
+ ).send({
256
260
  from: this.adminAddress,
257
- wait: { returnReceipt: true },
258
261
  });
259
262
  this.logger.info(`BananaCoin deployed at ${bananaCoin.address}`);
260
263
  this.bananaCoin = bananaCoin;
@@ -263,11 +266,14 @@ export class ClientFlowsBenchmark {
263
266
 
264
267
  async applyDeployCandyBarToken() {
265
268
  this.logger.info('Applying candy bar token deployment');
266
- const {
267
- receipt: { contract: candyBarCoin, instance: candyBarCoinInstance },
268
- } = await TokenContract.deploy(this.adminWallet, this.adminAddress, 'CBC', 'CBC', 18n).send({
269
+ const { contract: candyBarCoin, instance: candyBarCoinInstance } = await TokenContract.deploy(
270
+ this.adminWallet,
271
+ this.adminAddress,
272
+ 'CBC',
273
+ 'CBC',
274
+ 18n,
275
+ ).send({
269
276
  from: this.adminAddress,
270
- wait: { returnReceipt: true },
271
277
  });
272
278
  this.logger.info(`CandyBarCoin deployed at ${candyBarCoin.address}`);
273
279
  this.candyBarCoin = candyBarCoin;
@@ -280,11 +286,12 @@ export class ClientFlowsBenchmark {
280
286
  expect((await this.context.wallet.getContractMetadata(feeJuiceContract.address)).isContractPublished).toBe(true);
281
287
 
282
288
  const bananaCoin = this.bananaCoin;
283
- const {
284
- receipt: { contract: bananaFPC, instance: bananaFPCInstance },
285
- } = await FPCContract.deploy(this.adminWallet, bananaCoin.address, this.adminAddress).send({
289
+ const { contract: bananaFPC, instance: bananaFPCInstance } = await FPCContract.deploy(
290
+ this.adminWallet,
291
+ bananaCoin.address,
292
+ this.adminAddress,
293
+ ).send({
286
294
  from: this.adminAddress,
287
- wait: { returnReceipt: true },
288
295
  });
289
296
 
290
297
  this.logger.info(`BananaPay deployed at ${bananaFPC.address}`);
@@ -348,20 +355,21 @@ export class ClientFlowsBenchmark {
348
355
 
349
356
  public async applyDeployAmm() {
350
357
  this.logger.info('Applying AMM deployment');
351
- const {
352
- receipt: { contract: liquidityToken, instance: liquidityTokenInstance },
353
- } = await TokenContract.deploy(this.adminWallet, this.adminAddress, 'LPT', 'LPT', 18n).send({
358
+ const { contract: liquidityToken, instance: liquidityTokenInstance } = await TokenContract.deploy(
359
+ this.adminWallet,
360
+ this.adminAddress,
361
+ 'LPT',
362
+ 'LPT',
363
+ 18n,
364
+ ).send({
354
365
  from: this.adminAddress,
355
- wait: { returnReceipt: true },
356
366
  });
357
- const {
358
- receipt: { contract: amm, instance: ammInstance },
359
- } = await AMMContract.deploy(
367
+ const { contract: amm, instance: ammInstance } = await AMMContract.deploy(
360
368
  this.adminWallet,
361
369
  this.bananaCoin.address,
362
370
  this.candyBarCoin.address,
363
371
  liquidityToken.address,
364
- ).send({ from: this.adminAddress, wait: { returnReceipt: true } });
372
+ ).send({ from: this.adminAddress });
365
373
  this.logger.info(`AMM deployed at ${amm.address}`);
366
374
  await liquidityToken.methods.set_minter(amm.address, true).send({ from: this.adminAddress });
367
375
  this.liquidityToken = liquidityToken;
@@ -379,7 +387,7 @@ export class ClientFlowsBenchmark {
379
387
  // The private fee paying method assembled on the app side requires knowledge of the maximum
380
388
  // fee the user is willing to pay
381
389
  const maxFeesPerGas = (await this.aztecNode.getCurrentMinFees()).mul(1.5);
382
- const gasSettings = GasSettings.default({ maxFeesPerGas });
390
+ const gasSettings = GasSettings.fallback({ maxFeesPerGas });
383
391
  return new PrivateFeePaymentMethod(this.bananaFPC.address, sender, wallet, gasSettings);
384
392
  }
385
393
 
@@ -145,7 +145,7 @@ export class EpochsTestContext {
145
145
  proverId: EthAddress.fromNumber(1),
146
146
  worldStateCheckpointHistory: WORLD_STATE_CHECKPOINT_HISTORY,
147
147
  exitDelaySeconds: DefaultL1ContractsConfig.exitDelaySeconds,
148
- slasherFlavor: 'none',
148
+ slasherEnabled: false,
149
149
  l1PublishingTime,
150
150
  ...opts,
151
151
  },
@@ -223,7 +223,7 @@ export class EpochsTestContext {
223
223
  },
224
224
  },
225
225
  {
226
- prefilledPublicData: this.context.prefilledPublicData ?? [],
226
+ genesis: this.context.genesis,
227
227
  dontStart: opts.dontStart,
228
228
  },
229
229
  ),
@@ -278,7 +278,7 @@ export class EpochsTestContext {
278
278
  slashingProtectionDb: opts.slashingProtectionDb,
279
279
  },
280
280
  {
281
- prefilledPublicData: this.context.prefilledPublicData,
281
+ genesis: this.context.genesis,
282
282
  ...opts,
283
283
  },
284
284
  ),
@@ -193,7 +193,7 @@ export class FeesTest {
193
193
  this.wallet = this.context.wallet;
194
194
  this.aztecNode = this.context.aztecNodeService;
195
195
  this.aztecNodeAdmin = this.context.aztecNodeService;
196
- this.gasSettings = GasSettings.default({ maxFeesPerGas: (await this.aztecNode.getCurrentMinFees()).mul(2) });
196
+ this.gasSettings = GasSettings.fallback({ maxFeesPerGas: (await this.aztecNode.getCurrentMinFees()).mul(2) });
197
197
  this.cheatCodes = this.context.cheatCodes;
198
198
  this.accounts = deployedAccounts.map(a => a.address);
199
199
  this.accounts.forEach((a, i) => this.logger.verbose(`Account ${i} address: ${a}`));
@@ -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,
@@ -66,7 +67,6 @@ export class P2PInactivityTest {
66
67
  listenAddress: '127.0.0.1',
67
68
  minTxsPerBlock: 0,
68
69
  aztecEpochDuration: EPOCH_DURATION,
69
- validatorReexecute: false,
70
70
  sentinelEnabled: true,
71
71
  slashingQuorum: SLASHING_QUORUM,
72
72
  slashingRoundSizeInEpochs: SLASHING_ROUND_SIZE_IN_EPOCHS,
@@ -108,7 +108,7 @@ export class P2PInactivityTest {
108
108
  this.test.bootstrapNodeEnr,
109
109
  NUM_NODES - this.inactiveNodeCount - Number(this.keepInitialNode),
110
110
  BOOT_NODE_UDP_PORT,
111
- this.test.prefilledPublicData,
111
+ this.test.genesis,
112
112
  this.dataDir,
113
113
  undefined,
114
114
  Number(this.keepInitialNode),
@@ -122,7 +122,7 @@ export class P2PInactivityTest {
122
122
  this.test.bootstrapNodeEnr,
123
123
  this.inactiveNodeCount,
124
124
  BOOT_NODE_UDP_PORT,
125
- this.test.prefilledPublicData,
125
+ this.test.genesis,
126
126
  this.dataDir,
127
127
  undefined,
128
128
  NUM_NODES - this.inactiveNodeCount,
@@ -3,12 +3,7 @@ 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
5
  import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
6
- import {
7
- type EmpireSlashingProposerContract,
8
- GSEContract,
9
- RollupContract,
10
- type TallySlashingProposerContract,
11
- } from '@aztec/ethereum/contracts';
6
+ import { GSEContract, RollupContract, type SlashingProposerContract } from '@aztec/ethereum/contracts';
12
7
  import type { Operator } from '@aztec/ethereum/deploy-aztec-l1-contracts';
13
8
  import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
14
9
  import { MultiAdderArtifact } from '@aztec/ethereum/l1-artifacts';
@@ -24,9 +19,8 @@ import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
24
19
  import type { BootstrapNode } from '@aztec/p2p/bootstrap';
25
20
  import { createBootstrapNodeFromPrivateKey, getBootstrapNodeEnr } from '@aztec/p2p/test-helpers';
26
21
  import { tryStop } from '@aztec/stdlib/interfaces/server';
27
- import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
28
22
  import { TopicType } from '@aztec/stdlib/p2p';
29
- import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
23
+ import type { GenesisData } from '@aztec/stdlib/world-state';
30
24
  import { ZkPassportProofParams } from '@aztec/stdlib/zkpassport';
31
25
  import { getGenesisValues } from '@aztec/world-state/testing';
32
26
 
@@ -77,7 +71,7 @@ export class P2PNetworkTest {
77
71
  public validators: Operator[] = [];
78
72
 
79
73
  public deployedAccounts: InitialAccountData[] = [];
80
- public prefilledPublicData: PublicDataTreeLeaf[] = [];
74
+ public genesis: GenesisData | undefined;
81
75
 
82
76
  // The re-execution test needs a wallet and a spam contract
83
77
  public wallet?: TestWallet;
@@ -124,7 +118,7 @@ export class P2PNetworkTest {
124
118
  initialValidatorConfig.aztecProofSubmissionEpochs ?? l1ContractsConfig.aztecProofSubmissionEpochs,
125
119
  slashingRoundSizeInEpochs:
126
120
  initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
127
- slasherFlavor: initialValidatorConfig.slasherFlavor ?? 'tally',
121
+ slasherEnabled: initialValidatorConfig.slasherEnabled ?? true,
128
122
  aztecTargetCommitteeSize: numberOfValidators,
129
123
  metricsPort: metricsPort,
130
124
  numberOfInitialFundedAccounts: 2,
@@ -137,7 +131,7 @@ export class P2PNetworkTest {
137
131
  aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
138
132
  slashingRoundSizeInEpochs:
139
133
  initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
140
- slasherFlavor: initialValidatorConfig.slasherFlavor ?? 'tally',
134
+ slasherEnabled: initialValidatorConfig.slasherEnabled ?? true,
141
135
 
142
136
  ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
143
137
  aztecSlotDuration: initialValidatorConfig.aztecSlotDuration ?? l1ContractsConfig.aztecSlotDuration,
@@ -360,7 +354,7 @@ export class P2PNetworkTest {
360
354
  ...this.setupOptions,
361
355
  fundSponsoredFPC: true,
362
356
  skipAccountDeployment: true,
363
- slasherFlavor: this.setupOptions.slasherFlavor ?? this.deployL1ContractsArgs.slasherFlavor ?? 'none',
357
+ slasherEnabled: this.setupOptions.slasherEnabled ?? this.deployL1ContractsArgs.slasherEnabled ?? false,
364
358
  aztecTargetCommitteeSize: 0,
365
359
  l1ContractsArgs: this.deployL1ContractsArgs,
366
360
  },
@@ -372,8 +366,13 @@ export class P2PNetworkTest {
372
366
  const sponsoredFPCAddress = await getSponsoredFPCAddress();
373
367
  const initialFundedAccounts = [...this.context.initialFundedAccounts.map(a => a.address), sponsoredFPCAddress];
374
368
 
375
- const { prefilledPublicData } = await getGenesisValues(initialFundedAccounts);
376
- this.prefilledPublicData = prefilledPublicData;
369
+ const { genesis } = await getGenesisValues(
370
+ initialFundedAccounts,
371
+ undefined,
372
+ undefined,
373
+ this.context.genesis!.genesisTimestamp,
374
+ );
375
+ this.genesis = genesis;
377
376
 
378
377
  const rollupContract = RollupContract.getFromL1ContractsValues(this.context.deployL1ContractsValues);
379
378
  this.monitor = new ChainMonitor(rollupContract, this.context.dateProvider).start();
@@ -468,8 +467,7 @@ export class P2PNetworkTest {
468
467
  async getContracts(): Promise<{
469
468
  rollup: RollupContract;
470
469
  slasherContract: GetContractReturnType<typeof SlasherAbi, ViemClient>;
471
- slashingProposer: EmpireSlashingProposerContract | TallySlashingProposerContract | undefined;
472
- slashFactory: SlashFactoryContract;
470
+ slashingProposer: SlashingProposerContract | undefined;
473
471
  }> {
474
472
  if (!this.ctx.deployL1ContractsValues) {
475
473
  throw new Error('DeployAztecL1ContractsValues not set');
@@ -486,14 +484,9 @@ export class P2PNetworkTest {
486
484
  client: this.ctx.deployL1ContractsValues.l1Client,
487
485
  });
488
486
 
489
- // Get the actual slashing proposer from rollup (which handles both empire and tally)
487
+ // Get the actual slashing proposer from rollup
490
488
  const slashingProposer = await rollup.getSlashingProposer();
491
489
 
492
- const slashFactory = new SlashFactoryContract(
493
- this.ctx.deployL1ContractsValues.l1Client,
494
- getAddress(this.ctx.deployL1ContractsValues.l1ContractAddresses.slashFactoryAddress!.toString()),
495
- );
496
-
497
- return { rollup, slasherContract, slashingProposer, slashFactory };
490
+ return { rollup, slasherContract, slashingProposer };
498
491
  }
499
492
  }
@@ -91,7 +91,7 @@ export async function runReqrespTxTest(params: {
91
91
  t.bootstrapNodeEnr,
92
92
  NUM_VALIDATORS,
93
93
  BOOT_NODE_UDP_PORT,
94
- t.prefilledPublicData,
94
+ t.genesis,
95
95
  dataDir,
96
96
  shouldCollectMetrics(),
97
97
  );
@@ -7,11 +7,7 @@ import type { Logger } from '@aztec/aztec.js/log';
7
7
  import { TxHash } from '@aztec/aztec.js/tx';
8
8
  import type { RollupCheatCodes } from '@aztec/aztec/testing';
9
9
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
10
- import type {
11
- EmpireSlashingProposerContract,
12
- RollupContract,
13
- TallySlashingProposerContract,
14
- } from '@aztec/ethereum/contracts';
10
+ import type { RollupContract, SlashingProposerContract } from '@aztec/ethereum/contracts';
15
11
  import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
16
12
  import { timesAsync, unique } from '@aztec/foundation/collection';
17
13
  import { EthAddress } from '@aztec/foundation/eth-address';
@@ -22,7 +18,6 @@ import { TestContract, TestContractArtifact } from '@aztec/noir-test-contracts.j
22
18
  import { getPXEConfig, getPXEConfig as getRpcConfig } from '@aztec/pxe/server';
23
19
  import { getRoundForOffense } from '@aztec/slasher';
24
20
  import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
25
- import type { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
26
21
 
27
22
  import { submitTxsTo } from '../shared/submit-transactions.js';
28
23
  import { TestWallet } from '../test-wallet/test_wallet.js';
@@ -99,7 +94,7 @@ export async function prepareTransactions(
99
94
  }
100
95
 
101
96
  export function awaitProposalExecution(
102
- slashingProposer: EmpireSlashingProposerContract | TallySlashingProposerContract,
97
+ slashingProposer: SlashingProposerContract,
103
98
  timeoutSeconds: number,
104
99
  logger: Logger,
105
100
  ): Promise<bigint> {
@@ -109,24 +104,12 @@ export function awaitProposalExecution(
109
104
  reject(new Error(`Timeout waiting for proposal execution after ${timeoutSeconds}s`));
110
105
  }, timeoutSeconds * 1000);
111
106
 
112
- if (slashingProposer.type === 'empire') {
113
- const unwatch = slashingProposer.listenToPayloadSubmitted(args => {
114
- logger.warn(`Proposal ${args.payload} from round ${args.round} executed`);
115
- clearTimeout(timeout);
116
- unwatch();
117
- resolve(args.round);
118
- });
119
- } else if (slashingProposer.type === 'tally') {
120
- const unwatch = slashingProposer.listenToRoundExecuted(args => {
121
- logger.warn(`Slash from round ${args.round} executed`);
122
- clearTimeout(timeout);
123
- unwatch();
124
- resolve(args.round);
125
- });
126
- } else {
107
+ const unwatch = slashingProposer.listenToRoundExecuted(args => {
108
+ logger.warn(`Slash from round ${args.round} executed`);
127
109
  clearTimeout(timeout);
128
- reject(new Error(`Unknown slashing proposer type: ${(slashingProposer as any).type}`));
129
- }
110
+ unwatch();
111
+ resolve(args.round);
112
+ });
130
113
  });
131
114
  }
132
115
 
@@ -245,7 +228,6 @@ export async function awaitCommitteeKicked({
245
228
  rollup,
246
229
  cheatCodes,
247
230
  committee,
248
- slashFactory,
249
231
  slashingProposer,
250
232
  slashingRoundSize,
251
233
  aztecSlotDuration,
@@ -256,8 +238,7 @@ export async function awaitCommitteeKicked({
256
238
  rollup: RollupContract;
257
239
  cheatCodes: RollupCheatCodes;
258
240
  committee: readonly `0x${string}`[];
259
- slashFactory: SlashFactoryContract;
260
- slashingProposer: EmpireSlashingProposerContract | TallySlashingProposerContract | undefined;
241
+ slashingProposer: SlashingProposerContract | undefined;
261
242
  slashingRoundSize: number;
262
243
  aztecSlotDuration: number;
263
244
  aztecEpochDuration: number;
@@ -270,36 +251,14 @@ export async function awaitCommitteeKicked({
270
251
 
271
252
  await cheatCodes.debugRollup();
272
253
 
273
- if (slashingProposer.type === 'empire') {
274
- // Await for the slash payload to be created if empire (no payload is created on tally until execution time)
275
- const targetEpoch = EpochNumber((await cheatCodes.getEpoch()) + (await rollup.getLagInEpochsForValidatorSet()) + 1);
276
- logger.info(`Advancing to epoch ${targetEpoch} so we start slashing`);
277
- await cheatCodes.advanceToEpoch(targetEpoch);
278
-
279
- const slashPayloadEvents = await retryUntil(
280
- async () => {
281
- const events = await slashFactory.getSlashPayloadCreatedEvents();
282
- return events.length > 0 ? events : undefined;
283
- },
284
- 'slash payload created',
285
- 120,
286
- 1,
287
- );
288
- expect(slashPayloadEvents.length).toBe(1);
289
- // The uniqueness check is needed since a validator may be slashed more than once on the same round (eg because they let two epochs be pruned)
290
- expect(unique(slashPayloadEvents[0].slashes.map(slash => slash.validator.toString()))).toHaveLength(
291
- committee.length,
292
- );
293
- } else {
294
- // Use the slash offset to ensure we are in the right epoch for tally
295
- const slashOffsetInRounds = await slashingProposer.getSlashOffsetInRounds();
296
- const slashingRoundSizeInEpochs = slashingRoundSize / aztecEpochDuration;
297
- const slashingOffsetInEpochs = Number(slashOffsetInRounds) * slashingRoundSizeInEpochs;
298
- const firstEpochInOffenseRound = offenseEpoch - (offenseEpoch % slashingRoundSizeInEpochs);
299
- const targetEpoch = firstEpochInOffenseRound + slashingOffsetInEpochs;
300
- logger.info(`Advancing to epoch ${targetEpoch} so we start slashing`);
301
- await cheatCodes.advanceToEpoch(EpochNumber(targetEpoch), { offset: -aztecSlotDuration / 2 });
302
- }
254
+ // Use the slash offset to ensure we are in the right epoch for tally
255
+ const slashOffsetInRounds = await slashingProposer.getSlashOffsetInRounds();
256
+ const slashingRoundSizeInEpochs = slashingRoundSize / aztecEpochDuration;
257
+ const slashingOffsetInEpochs = Number(slashOffsetInRounds) * slashingRoundSizeInEpochs;
258
+ const firstEpochInOffenseRound = offenseEpoch - (offenseEpoch % slashingRoundSizeInEpochs);
259
+ const targetEpoch = firstEpochInOffenseRound + slashingOffsetInEpochs;
260
+ logger.info(`Advancing to epoch ${targetEpoch} so we start slashing`);
261
+ await cheatCodes.advanceToEpoch(EpochNumber(targetEpoch), { offset: -aztecSlotDuration / 2 });
303
262
 
304
263
  const attestersPre = await rollup.getAttesters();
305
264
  expect(attestersPre.length).toBe(committee.length);
@@ -17,6 +17,10 @@ async function buildProxyCall(proxy: GenericProxyContract, action: ContractFunct
17
17
  return proxy.methods.forward_private_3(call.to, call.selector, call.args);
18
18
  } else if (argCount === 4) {
19
19
  return proxy.methods.forward_private_4(call.to, call.selector, call.args);
20
+ } else if (argCount === 5) {
21
+ return proxy.methods.forward_private_5(call.to, call.selector, call.args);
22
+ } else if (argCount === 6) {
23
+ return proxy.methods.forward_private_6(call.to, call.selector, call.args);
20
24
  }
21
25
  throw new Error(`No forward_private_${argCount} method on proxy`);
22
26
  }