@aztec/end-to-end 0.0.1-commit.6d63667d → 0.0.1-commit.733c4a3

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 (151) hide show
  1. package/dest/bench/client_flows/client_flows_benchmark.d.ts +2 -2
  2. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  3. package/dest/bench/client_flows/client_flows_benchmark.js +3 -3
  4. package/dest/bench/client_flows/config.d.ts +2 -2
  5. package/dest/bench/client_flows/config.d.ts.map +1 -1
  6. package/dest/bench/client_flows/config.js +18 -0
  7. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +4 -2
  8. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  9. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +10 -0
  10. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +2 -2
  11. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
  12. package/dest/e2e_deploy_contract/deploy_test.d.ts +2 -2
  13. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  14. package/dest/e2e_epochs/epochs_test.d.ts +9 -7
  15. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  16. package/dest/e2e_epochs/epochs_test.js +58 -33
  17. package/dest/e2e_fees/fees_test.d.ts +2 -2
  18. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  19. package/dest/e2e_fees/fees_test.js +6 -6
  20. package/dest/e2e_p2p/p2p_network.d.ts +2 -2
  21. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  22. package/dest/e2e_p2p/p2p_network.js +16 -2
  23. package/dest/e2e_p2p/reqresp/utils.d.ts +3 -3
  24. package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -1
  25. package/dest/e2e_p2p/reqresp/utils.js +32 -8
  26. package/dest/e2e_p2p/shared.d.ts +2 -2
  27. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  28. package/dest/e2e_p2p/shared.js +5 -1
  29. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
  30. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
  31. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
  32. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
  33. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
  34. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
  35. package/dest/e2e_token_contract/token_contract_test.d.ts +4 -2
  36. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  37. package/dest/e2e_token_contract/token_contract_test.js +10 -0
  38. package/dest/fixtures/authwit_proxy.d.ts +15 -0
  39. package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
  40. package/dest/fixtures/authwit_proxy.js +30 -0
  41. package/dest/fixtures/e2e_prover_test.d.ts +4 -4
  42. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  43. package/dest/fixtures/e2e_prover_test.js +27 -34
  44. package/dest/fixtures/elu_monitor.d.ts +21 -0
  45. package/dest/fixtures/elu_monitor.d.ts.map +1 -0
  46. package/dest/fixtures/elu_monitor.js +102 -0
  47. package/dest/fixtures/fixtures.d.ts +5 -1
  48. package/dest/fixtures/fixtures.d.ts.map +1 -1
  49. package/dest/fixtures/fixtures.js +6 -0
  50. package/dest/fixtures/ha_setup.d.ts +1 -1
  51. package/dest/fixtures/ha_setup.d.ts.map +1 -1
  52. package/dest/fixtures/ha_setup.js +3 -1
  53. package/dest/fixtures/setup.d.ts +39 -22
  54. package/dest/fixtures/setup.d.ts.map +1 -1
  55. package/dest/fixtures/setup.js +59 -149
  56. package/dest/fixtures/setup_p2p_test.d.ts +15 -7
  57. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  58. package/dest/fixtures/setup_p2p_test.js +18 -12
  59. package/dest/fixtures/token_utils.d.ts +2 -2
  60. package/dest/fixtures/token_utils.d.ts.map +1 -1
  61. package/dest/fixtures/token_utils.js +3 -2
  62. package/dest/shared/index.d.ts +2 -1
  63. package/dest/shared/index.d.ts.map +1 -1
  64. package/dest/shared/index.js +1 -0
  65. package/dest/shared/jest_setup.js +10 -1
  66. package/dest/shared/mock_state_view.d.ts +86 -0
  67. package/dest/shared/mock_state_view.d.ts.map +1 -0
  68. package/dest/shared/mock_state_view.js +186 -0
  69. package/dest/shared/submit-transactions.d.ts +2 -2
  70. package/dest/shared/submit-transactions.d.ts.map +1 -1
  71. package/dest/shared/uniswap_l1_l2.d.ts +1 -1
  72. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  73. package/dest/shared/uniswap_l1_l2.js +1 -1
  74. package/dest/simulators/token_simulator.d.ts +1 -1
  75. package/dest/simulators/token_simulator.d.ts.map +1 -1
  76. package/dest/simulators/token_simulator.js +2 -23
  77. package/dest/spartan/setup_test_wallets.d.ts +9 -2
  78. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  79. package/dest/spartan/setup_test_wallets.js +31 -1
  80. package/dest/spartan/utils/bot.d.ts +3 -2
  81. package/dest/spartan/utils/bot.d.ts.map +1 -1
  82. package/dest/spartan/utils/bot.js +2 -1
  83. package/dest/spartan/utils/index.d.ts +2 -2
  84. package/dest/spartan/utils/index.d.ts.map +1 -1
  85. package/dest/spartan/utils/index.js +1 -1
  86. package/dest/spartan/utils/k8s.d.ts +3 -1
  87. package/dest/spartan/utils/k8s.d.ts.map +1 -1
  88. package/dest/spartan/utils/k8s.js +6 -0
  89. package/dest/spartan/utils/nodes.d.ts +4 -5
  90. package/dest/spartan/utils/nodes.d.ts.map +1 -1
  91. package/dest/spartan/utils/nodes.js +8 -8
  92. package/dest/test-wallet/test_wallet.d.ts +83 -0
  93. package/dest/test-wallet/test_wallet.d.ts.map +1 -0
  94. package/dest/test-wallet/test_wallet.js +214 -0
  95. package/dest/test-wallet/utils.d.ts +41 -0
  96. package/dest/test-wallet/utils.d.ts.map +1 -0
  97. package/dest/test-wallet/utils.js +71 -0
  98. package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
  99. package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
  100. package/dest/test-wallet/wallet_worker_script.js +48 -0
  101. package/dest/test-wallet/worker_wallet.d.ts +52 -0
  102. package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
  103. package/dest/test-wallet/worker_wallet.js +151 -0
  104. package/dest/test-wallet/worker_wallet_schema.d.ts +274 -0
  105. package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
  106. package/dest/test-wallet/worker_wallet_schema.js +10 -0
  107. package/package.json +40 -39
  108. package/src/bench/client_flows/client_flows_benchmark.ts +8 -12
  109. package/src/bench/client_flows/config.ts +9 -1
  110. package/src/bench/utils.ts +1 -1
  111. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +11 -2
  112. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +4 -4
  113. package/src/e2e_deploy_contract/deploy_test.ts +3 -3
  114. package/src/e2e_epochs/epochs_test.ts +73 -63
  115. package/src/e2e_fees/bridging_race.notest.ts +1 -1
  116. package/src/e2e_fees/fees_test.ts +12 -27
  117. package/src/e2e_nested_contract/nested_contract_test.ts +1 -1
  118. package/src/e2e_p2p/inactivity_slash_test.ts +4 -4
  119. package/src/e2e_p2p/p2p_network.ts +29 -7
  120. package/src/e2e_p2p/reqresp/utils.ts +40 -12
  121. package/src/e2e_p2p/shared.ts +3 -1
  122. package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
  123. package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
  124. package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
  125. package/src/e2e_token_contract/token_contract_test.ts +11 -2
  126. package/src/fixtures/authwit_proxy.ts +50 -0
  127. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  128. package/src/fixtures/e2e_prover_test.ts +28 -38
  129. package/src/fixtures/elu_monitor.ts +126 -0
  130. package/src/fixtures/fixtures.ts +10 -0
  131. package/src/fixtures/ha_setup.ts +3 -1
  132. package/src/fixtures/setup.ts +89 -210
  133. package/src/fixtures/setup_p2p_test.ts +25 -24
  134. package/src/fixtures/token_utils.ts +2 -1
  135. package/src/guides/up_quick_start.sh +3 -3
  136. package/src/shared/index.ts +1 -0
  137. package/src/shared/jest_setup.ts +16 -1
  138. package/src/shared/mock_state_view.ts +188 -0
  139. package/src/shared/submit-transactions.ts +6 -2
  140. package/src/shared/uniswap_l1_l2.ts +2 -2
  141. package/src/simulators/token_simulator.ts +1 -29
  142. package/src/spartan/setup_test_wallets.ts +58 -4
  143. package/src/spartan/utils/bot.ts +4 -1
  144. package/src/spartan/utils/index.ts +1 -0
  145. package/src/spartan/utils/k8s.ts +8 -0
  146. package/src/spartan/utils/nodes.ts +14 -9
  147. package/src/test-wallet/test_wallet.ts +306 -0
  148. package/src/test-wallet/utils.ts +112 -0
  149. package/src/test-wallet/wallet_worker_script.ts +60 -0
  150. package/src/test-wallet/worker_wallet.ts +213 -0
  151. package/src/test-wallet/worker_wallet_schema.ts +13 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/end-to-end",
3
- "version": "0.0.1-commit.6d63667d",
3
+ "version": "0.0.1-commit.733c4a3",
4
4
  "type": "module",
5
5
  "exports": "./dest/index.js",
6
6
  "inherits": [
@@ -26,44 +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.6d63667d",
30
- "@aztec/archiver": "0.0.1-commit.6d63667d",
31
- "@aztec/aztec": "0.0.1-commit.6d63667d",
32
- "@aztec/aztec-node": "0.0.1-commit.6d63667d",
33
- "@aztec/aztec.js": "0.0.1-commit.6d63667d",
34
- "@aztec/bb-prover": "0.0.1-commit.6d63667d",
35
- "@aztec/bb.js": "0.0.1-commit.6d63667d",
36
- "@aztec/blob-client": "0.0.1-commit.6d63667d",
37
- "@aztec/blob-lib": "0.0.1-commit.6d63667d",
38
- "@aztec/bot": "0.0.1-commit.6d63667d",
39
- "@aztec/cli": "0.0.1-commit.6d63667d",
40
- "@aztec/constants": "0.0.1-commit.6d63667d",
41
- "@aztec/entrypoints": "0.0.1-commit.6d63667d",
42
- "@aztec/epoch-cache": "0.0.1-commit.6d63667d",
43
- "@aztec/ethereum": "0.0.1-commit.6d63667d",
44
- "@aztec/foundation": "0.0.1-commit.6d63667d",
45
- "@aztec/kv-store": "0.0.1-commit.6d63667d",
46
- "@aztec/l1-artifacts": "0.0.1-commit.6d63667d",
47
- "@aztec/merkle-tree": "0.0.1-commit.6d63667d",
48
- "@aztec/node-keystore": "0.0.1-commit.6d63667d",
49
- "@aztec/noir-contracts.js": "0.0.1-commit.6d63667d",
50
- "@aztec/noir-noirc_abi": "0.0.1-commit.6d63667d",
51
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.6d63667d",
52
- "@aztec/noir-test-contracts.js": "0.0.1-commit.6d63667d",
53
- "@aztec/p2p": "0.0.1-commit.6d63667d",
54
- "@aztec/protocol-contracts": "0.0.1-commit.6d63667d",
55
- "@aztec/prover-client": "0.0.1-commit.6d63667d",
56
- "@aztec/prover-node": "0.0.1-commit.6d63667d",
57
- "@aztec/pxe": "0.0.1-commit.6d63667d",
58
- "@aztec/sequencer-client": "0.0.1-commit.6d63667d",
59
- "@aztec/simulator": "0.0.1-commit.6d63667d",
60
- "@aztec/slasher": "0.0.1-commit.6d63667d",
61
- "@aztec/stdlib": "0.0.1-commit.6d63667d",
62
- "@aztec/telemetry-client": "0.0.1-commit.6d63667d",
63
- "@aztec/test-wallet": "0.0.1-commit.6d63667d",
64
- "@aztec/validator-client": "0.0.1-commit.6d63667d",
65
- "@aztec/validator-ha-signer": "0.0.1-commit.6d63667d",
66
- "@aztec/world-state": "0.0.1-commit.6d63667d",
29
+ "@aztec/accounts": "0.0.1-commit.733c4a3",
30
+ "@aztec/archiver": "0.0.1-commit.733c4a3",
31
+ "@aztec/aztec": "0.0.1-commit.733c4a3",
32
+ "@aztec/aztec-node": "0.0.1-commit.733c4a3",
33
+ "@aztec/aztec.js": "0.0.1-commit.733c4a3",
34
+ "@aztec/bb-prover": "0.0.1-commit.733c4a3",
35
+ "@aztec/bb.js": "0.0.1-commit.733c4a3",
36
+ "@aztec/blob-client": "0.0.1-commit.733c4a3",
37
+ "@aztec/blob-lib": "0.0.1-commit.733c4a3",
38
+ "@aztec/bot": "0.0.1-commit.733c4a3",
39
+ "@aztec/cli": "0.0.1-commit.733c4a3",
40
+ "@aztec/constants": "0.0.1-commit.733c4a3",
41
+ "@aztec/entrypoints": "0.0.1-commit.733c4a3",
42
+ "@aztec/epoch-cache": "0.0.1-commit.733c4a3",
43
+ "@aztec/ethereum": "0.0.1-commit.733c4a3",
44
+ "@aztec/foundation": "0.0.1-commit.733c4a3",
45
+ "@aztec/kv-store": "0.0.1-commit.733c4a3",
46
+ "@aztec/l1-artifacts": "0.0.1-commit.733c4a3",
47
+ "@aztec/merkle-tree": "0.0.1-commit.733c4a3",
48
+ "@aztec/node-keystore": "0.0.1-commit.733c4a3",
49
+ "@aztec/noir-contracts.js": "0.0.1-commit.733c4a3",
50
+ "@aztec/noir-noirc_abi": "0.0.1-commit.733c4a3",
51
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.733c4a3",
52
+ "@aztec/noir-test-contracts.js": "0.0.1-commit.733c4a3",
53
+ "@aztec/p2p": "0.0.1-commit.733c4a3",
54
+ "@aztec/protocol-contracts": "0.0.1-commit.733c4a3",
55
+ "@aztec/prover-client": "0.0.1-commit.733c4a3",
56
+ "@aztec/prover-node": "0.0.1-commit.733c4a3",
57
+ "@aztec/pxe": "0.0.1-commit.733c4a3",
58
+ "@aztec/sequencer-client": "0.0.1-commit.733c4a3",
59
+ "@aztec/simulator": "0.0.1-commit.733c4a3",
60
+ "@aztec/slasher": "0.0.1-commit.733c4a3",
61
+ "@aztec/stdlib": "0.0.1-commit.733c4a3",
62
+ "@aztec/telemetry-client": "0.0.1-commit.733c4a3",
63
+ "@aztec/validator-client": "0.0.1-commit.733c4a3",
64
+ "@aztec/validator-ha-signer": "0.0.1-commit.733c4a3",
65
+ "@aztec/wallet-sdk": "0.0.1-commit.733c4a3",
66
+ "@aztec/wallets": "0.0.1-commit.733c4a3",
67
+ "@aztec/world-state": "0.0.1-commit.733c4a3",
67
68
  "@iarna/toml": "^2.2.5",
68
69
  "@jest/globals": "^30.0.0",
69
70
  "@noble/curves": "=1.0.0",
@@ -26,7 +26,6 @@ import { type PXEConfig, getPXEConfig } from '@aztec/pxe/server';
26
26
  import type { ContractInstanceWithAddress } from '@aztec/stdlib/contract';
27
27
  import { GasSettings } from '@aztec/stdlib/gas';
28
28
  import { deriveSigningKey } from '@aztec/stdlib/keys';
29
- import { TestWallet } from '@aztec/test-wallet/server';
30
29
 
31
30
  import { MNEMONIC } from '../../fixtures/fixtures.js';
32
31
  import { type EndToEndContext, type SetupOptions, deployAccounts, setup, teardown } from '../../fixtures/setup.js';
@@ -37,6 +36,7 @@ import {
37
36
  FeeJuicePortalTestingHarnessFactory,
38
37
  type GasBridgingTestHarness,
39
38
  } from '../../shared/gas_portal_test_harness.js';
39
+ import { TestWallet } from '../../test-wallet/test_wallet.js';
40
40
  import { ProxyLogger } from './benchmark.js';
41
41
  import { type ClientFlowsConfig, FULL_FLOWS_CONFIG, KEY_FLOWS_CONFIG } from './config.js';
42
42
 
@@ -138,10 +138,10 @@ export class ClientFlowsBenchmark {
138
138
  });
139
139
  await this.applyBaseSetup();
140
140
 
141
- await this.context.aztecNodeService!.setConfig({ feeRecipient: this.sequencerAddress, coinbase: this.coinbase });
141
+ await this.context.aztecNodeService.setConfig({ feeRecipient: this.sequencerAddress, coinbase: this.coinbase });
142
142
 
143
143
  const rollupContract = RollupContract.getFromConfig(this.context.config);
144
- this.chainMonitor = new ChainMonitor(rollupContract, this.context.dateProvider!, this.logger, 200).start();
144
+ this.chainMonitor = new ChainMonitor(rollupContract, this.context.dateProvider, this.logger, 200).start();
145
145
 
146
146
  return this;
147
147
  }
@@ -161,15 +161,11 @@ export class ClientFlowsBenchmark {
161
161
 
162
162
  /** Admin mints bananaCoin tokens privately to the target address and redeems them. */
163
163
  async mintPrivateBananas(amount: bigint, address: AztecAddress) {
164
- const balanceBefore = await this.bananaCoin.methods
165
- .balance_of_private(address)
166
- .simulate({ from: this.adminAddress });
164
+ const balanceBefore = await this.bananaCoin.methods.balance_of_private(address).simulate({ from: address });
167
165
 
168
166
  await mintTokensToPrivate(this.bananaCoin, this.adminAddress, address, amount);
169
167
 
170
- const balanceAfter = await this.bananaCoin.methods
171
- .balance_of_private(address)
172
- .simulate({ from: this.adminAddress });
168
+ const balanceAfter = await this.bananaCoin.methods.balance_of_private(address).simulate({ from: address });
173
169
  expect(balanceAfter).toEqual(balanceBefore + amount);
174
170
  }
175
171
 
@@ -207,7 +203,7 @@ export class ClientFlowsBenchmark {
207
203
  const [{ address: adminAddress }, { address: sequencerAddress }] = deployedAccounts;
208
204
 
209
205
  this.adminWallet = this.context.wallet;
210
- this.aztecNode = this.context.aztecNodeService!;
206
+ this.aztecNode = this.context.aztecNodeService;
211
207
  this.cheatCodes = this.context.cheatCodes;
212
208
 
213
209
  this.adminAddress = adminAddress;
@@ -235,8 +231,8 @@ export class ClientFlowsBenchmark {
235
231
  this.feeJuiceContract = FeeJuiceContract.at(ProtocolContractAddress.FeeJuice, this.adminWallet);
236
232
 
237
233
  this.feeJuiceBridgeTestHarness = await FeeJuicePortalTestingHarnessFactory.create({
238
- aztecNode: this.context.aztecNodeService!,
239
- aztecNodeAdmin: this.context.aztecNodeService!,
234
+ aztecNode: this.context.aztecNodeService,
235
+ aztecNodeAdmin: this.context.aztecNodeService,
240
236
  l1Client: this.context.deployL1ContractsValues.l1Client,
241
237
  wallet: this.adminWallet,
242
238
  logger: this.logger,
@@ -6,7 +6,7 @@ export type ClientFlowConfig = {
6
6
  recursions?: number[];
7
7
  };
8
8
 
9
- type ClientFlows = 'accountDeployments' | 'deployments' | 'transfers' | 'bridging' | 'amm';
9
+ type ClientFlows = 'accountDeployments' | 'deployments' | 'transfers' | 'bridging' | 'amm' | 'storageProof';
10
10
 
11
11
  export type ClientFlowsConfig = {
12
12
  [key in ClientFlows]: ClientFlowConfig;
@@ -34,6 +34,10 @@ export const KEY_FLOWS_CONFIG: ClientFlowsConfig = {
34
34
  feePaymentMethods: ['sponsored_fpc', 'private_fpc'],
35
35
  recursions: [0, 1],
36
36
  },
37
+ storageProof: {
38
+ accounts: ['ecdsar1'],
39
+ feePaymentMethods: ['sponsored_fpc'],
40
+ },
37
41
  };
38
42
 
39
43
  export const FULL_FLOWS_CONFIG: ClientFlowsConfig = {
@@ -58,4 +62,8 @@ export const FULL_FLOWS_CONFIG: ClientFlowsConfig = {
58
62
  feePaymentMethods: ['sponsored_fpc', 'private_fpc'],
59
63
  recursions: [0, 1, 2],
60
64
  },
65
+ storageProof: {
66
+ accounts: ['ecdsar1', 'schnorr'],
67
+ feePaymentMethods: ['sponsored_fpc', 'private_fpc'],
68
+ },
61
69
  };
@@ -28,7 +28,7 @@ export async function benchmarkSetup(
28
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
- const telemetry = context.telemetryClient! as BenchmarkTelemetryClient;
31
+ const telemetry = context.telemetryClient as BenchmarkTelemetryClient;
32
32
  context.logger.warn(`Cleared benchmark data points from setup`);
33
33
  telemetry.clear();
34
34
  const origTeardown = context.teardown.bind(context);
@@ -7,14 +7,15 @@ import type { TxHash } from '@aztec/aztec.js/tx';
7
7
  import type { CheatCodes } from '@aztec/aztec/testing';
8
8
  import type { TokenContract } from '@aztec/noir-contracts.js/Token';
9
9
  import { TokenBlacklistContract } from '@aztec/noir-contracts.js/TokenBlacklist';
10
+ import { GenericProxyContract } from '@aztec/noir-test-contracts.js/GenericProxy';
10
11
  import { InvalidAccountContract } from '@aztec/noir-test-contracts.js/InvalidAccount';
11
12
  import type { SequencerClient } from '@aztec/sequencer-client';
12
- import type { TestWallet } from '@aztec/test-wallet/server';
13
13
 
14
14
  import { jest } from '@jest/globals';
15
15
 
16
16
  import { type EndToEndContext, deployAccounts, publicDeployAccounts, setup, teardown } from '../fixtures/setup.js';
17
17
  import { TokenSimulator } from '../simulators/token_simulator.js';
18
+ import type { TestWallet } from '../test-wallet/test_wallet.js';
18
19
 
19
20
  export class Role {
20
21
  private isAdmin = false;
@@ -53,6 +54,7 @@ export class BlacklistTokenContractTest {
53
54
  asset!: TokenBlacklistContract;
54
55
  tokenSim!: TokenSimulator;
55
56
  badAccount!: InvalidAccountContract;
57
+ authwitProxy!: GenericProxyContract;
56
58
  cheatCodes!: CheatCodes;
57
59
  sequencer!: SequencerClient;
58
60
  aztecNode!: AztecNode;
@@ -92,7 +94,7 @@ export class BlacklistTokenContractTest {
92
94
  });
93
95
 
94
96
  this.cheatCodes = this.context.cheatCodes;
95
- this.aztecNode = this.context.aztecNodeService!;
97
+ this.aztecNode = this.context.aztecNodeService;
96
98
  this.sequencer = this.context.sequencer!;
97
99
  this.wallet = this.context.wallet;
98
100
  this.adminAddress = deployedAccounts[0].address;
@@ -114,6 +116,13 @@ export class BlacklistTokenContractTest {
114
116
  this.badAccount = await InvalidAccountContract.deploy(this.wallet).send({ from: this.adminAddress });
115
117
  this.logger.verbose(`Deployed to ${this.badAccount.address}.`);
116
118
 
119
+ // Deploy a proxy contract for "on behalf of other" tests. The note owner must be the tx sender
120
+ // (so their notes are in scope), but msg_sender in the target must differ from the note owner
121
+ // to trigger authwit validation. The proxy forwards calls so that msg_sender != tx sender.
122
+ this.logger.verbose(`Deploying generic proxy...`);
123
+ this.authwitProxy = await GenericProxyContract.deploy(this.wallet).send({ from: this.adminAddress });
124
+ this.logger.verbose(`Deployed to ${this.authwitProxy.address}.`);
125
+
117
126
  await this.crossTimestampOfChange();
118
127
 
119
128
  this.tokenSim = new TokenSimulator(
@@ -19,7 +19,6 @@ import { TestERC20Abi, TestERC20Bytecode } from '@aztec/l1-artifacts';
19
19
  import { TokenContract } from '@aztec/noir-contracts.js/Token';
20
20
  import { TokenBridgeContract } from '@aztec/noir-contracts.js/TokenBridge';
21
21
  import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
22
- import type { TestWallet } from '@aztec/test-wallet/server';
23
22
 
24
23
  import { MNEMONIC } from '../fixtures/fixtures.js';
25
24
  import {
@@ -31,6 +30,7 @@ import {
31
30
  teardown,
32
31
  } from '../fixtures/setup.js';
33
32
  import { CrossChainTestHarness } from '../shared/cross_chain_test_harness.js';
33
+ import type { TestWallet } from '../test-wallet/test_wallet.js';
34
34
 
35
35
  export class CrossChainMessagingTest {
36
36
  private requireEpochProven: boolean;
@@ -109,16 +109,16 @@ export class CrossChainMessagingTest {
109
109
 
110
110
  async applyBaseSetup() {
111
111
  // Set up base context fields
112
- this.aztecNode = this.context.aztecNodeService!;
112
+ this.aztecNode = this.context.aztecNodeService;
113
113
  this.wallet = this.context.wallet;
114
114
  this.aztecNodeConfig = this.context.config;
115
115
  this.cheatCodes = this.context.cheatCodes;
116
116
  this.deployL1ContractsValues = this.context.deployL1ContractsValues;
117
- this.aztecNodeAdmin = this.context.aztecNodeService!;
117
+ this.aztecNodeAdmin = this.context.aztecNodeService;
118
118
 
119
119
  if (this.requireEpochProven) {
120
120
  // Turn off the watcher to prevent it from keep marking blocks as proven.
121
- this.context.watcher!.setIsMarkingAsProven(false);
121
+ this.context.watcher.setIsMarkingAsProven(false);
122
122
  }
123
123
 
124
124
  // Deploy 3 accounts
@@ -8,9 +8,9 @@ import type { AztecNode } from '@aztec/aztec.js/node';
8
8
  import type { Wallet } from '@aztec/aztec.js/wallet';
9
9
  import type { StatefulTestContract } from '@aztec/noir-test-contracts.js/StatefulTest';
10
10
  import type { AztecNodeAdmin } from '@aztec/stdlib/interfaces/client';
11
- import type { TestWallet } from '@aztec/test-wallet/server';
12
11
 
13
12
  import { type EndToEndContext, deployAccounts, setup, teardown } from '../fixtures/setup.js';
13
+ import type { TestWallet } from '../test-wallet/test_wallet.js';
14
14
 
15
15
  export class DeployTest {
16
16
  public context!: EndToEndContext;
@@ -30,9 +30,9 @@ export class DeployTest {
30
30
  fundSponsoredFPC: true,
31
31
  skipAccountDeployment: true,
32
32
  });
33
- this.aztecNode = this.context.aztecNodeService!;
33
+ this.aztecNode = this.context.aztecNodeService;
34
34
  this.wallet = this.context.wallet;
35
- this.aztecNodeAdmin = this.context.aztecNodeService!;
35
+ this.aztecNodeAdmin = this.context.aztecNodeService;
36
36
  await this.applyInitialAccount();
37
37
  return this;
38
38
  }
@@ -1,3 +1,4 @@
1
+ import type { Archiver } from '@aztec/archiver';
1
2
  import { type AztecNodeConfig, AztecNodeService } from '@aztec/aztec-node';
2
3
  import { getTimestampRangeForEpoch } from '@aztec/aztec.js/block';
3
4
  import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
@@ -9,7 +10,8 @@ import { EpochCache } from '@aztec/epoch-cache';
9
10
  import { createExtendedL1Client } from '@aztec/ethereum/client';
10
11
  import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
11
12
  import { RollupContract } from '@aztec/ethereum/contracts';
12
- import { ChainMonitor, DelayedTxUtils, type Delayer, waitUntilL1Timestamp, withDelayer } from '@aztec/ethereum/test';
13
+ import { Delayer, createDelayer, waitUntilL1Timestamp, wrapClientWithDelayer } from '@aztec/ethereum/l1-tx-utils';
14
+ import { ChainMonitor } from '@aztec/ethereum/test';
13
15
  import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
14
16
  import { BlockNumber, CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
15
17
  import { SecretValue } from '@aztec/foundation/config';
@@ -20,16 +22,9 @@ import { sleep } from '@aztec/foundation/sleep';
20
22
  import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
21
23
  import { TestContract } from '@aztec/noir-test-contracts.js/Test';
22
24
  import { getMockPubSubP2PServiceFactory } from '@aztec/p2p/test-helpers';
23
- import { ProverNode, type ProverNodeConfig, ProverNodePublisher } from '@aztec/prover-node';
24
- import type { TestProverNode } from '@aztec/prover-node/test';
25
+ import type { ProverNodeConfig } from '@aztec/prover-node';
25
26
  import type { PXEConfig } from '@aztec/pxe/config';
26
- import {
27
- type SequencerClient,
28
- type SequencerEvents,
29
- type SequencerPublisher,
30
- SequencerState,
31
- } from '@aztec/sequencer-client';
32
- import type { TestSequencerClient } from '@aztec/sequencer-client/test';
27
+ import { type SequencerClient, type SequencerEvents, SequencerState } from '@aztec/sequencer-client';
33
28
  import { type BlockParameter, EthAddress } from '@aztec/stdlib/block';
34
29
  import { type L1RollupConstants, getProofSubmissionDeadlineTimestamp } from '@aztec/stdlib/epoch-helpers';
35
30
  import { tryStop } from '@aztec/stdlib/interfaces/server';
@@ -46,7 +41,7 @@ import {
46
41
  setup,
47
42
  } from '../fixtures/utils.js';
48
43
 
49
- export const WORLD_STATE_BLOCK_HISTORY = 2;
44
+ export const WORLD_STATE_CHECKPOINT_HISTORY = 2;
50
45
  export const WORLD_STATE_BLOCK_CHECK_INTERVAL = 50;
51
46
  export const ARCHIVER_POLL_INTERVAL = 50;
52
47
  export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
@@ -81,7 +76,7 @@ export class EpochsTestContext {
81
76
  public proverDelayer!: Delayer;
82
77
  public sequencerDelayer!: Delayer;
83
78
 
84
- public proverNodes: ProverNode[] = [];
79
+ public proverNodes: AztecNodeService[] = [];
85
80
  public nodes: AztecNodeService[] = [];
86
81
 
87
82
  public epochDuration!: number;
@@ -147,7 +142,7 @@ export class EpochsTestContext {
147
142
  // using the prover's eth address if the proverId is used for something in the rollup contract
148
143
  // Use numeric EthAddress for deterministic prover id
149
144
  proverId: EthAddress.fromNumber(1),
150
- worldStateBlockHistory: WORLD_STATE_BLOCK_HISTORY,
145
+ worldStateCheckpointHistory: WORLD_STATE_CHECKPOINT_HISTORY,
151
146
  exitDelaySeconds: DefaultL1ContractsConfig.exitDelaySeconds,
152
147
  slasherFlavor: 'none',
153
148
  l1PublishingTime,
@@ -169,17 +164,8 @@ export class EpochsTestContext {
169
164
  // Loop that tracks L1 and L2 block numbers and logs whenever there's a new one.
170
165
  this.monitor = new ChainMonitor(this.rollup, context.dateProvider, this.logger).start();
171
166
 
172
- // This is hideous.
173
- // We ought to have a definite reference to the l1TxUtils that we're using in both places, provided by the test context.
174
- this.proverDelayer = context.proverNode
175
- ? (((context.proverNode as TestProverNode).publisher as ProverNodePublisher).l1TxUtils as DelayedTxUtils).delayer!
176
- : undefined!;
177
- this.sequencerDelayer = context.sequencer
178
- ? (
179
- ((context.sequencer as TestSequencerClient).sequencer.publisher as SequencerPublisher)
180
- .l1TxUtils as DelayedTxUtils
181
- ).delayer!
182
- : undefined!;
167
+ this.proverDelayer = context.proverDelayer!;
168
+ this.sequencerDelayer = context.sequencerDelayer!;
183
169
 
184
170
  if ((context.proverNode && !this.proverDelayer) || (context.sequencer && !this.sequencerDelayer)) {
185
171
  throw new Error(`Could not find prover or sequencer delayer`);
@@ -194,6 +180,7 @@ export class EpochsTestContext {
194
180
  l1GenesisTime: await this.rollup.getL1GenesisTime(),
195
181
  ethereumSlotDuration,
196
182
  proofSubmissionEpochs: Number(await this.rollup.getProofSubmissionEpochs()),
183
+ targetCommitteeSize: await this.rollup.getTargetCommitteeSize(),
197
184
  };
198
185
 
199
186
  this.logger.info(
@@ -212,19 +199,31 @@ export class EpochsTestContext {
212
199
  this.logger.warn('Creating and syncing a simulated prover node...');
213
200
  const proverNodePrivateKey = this.getNextPrivateKey();
214
201
  const proverIndex = this.proverNodes.length + 1;
215
- const proverNode = await withLoggerBindings({ actor: `prover-${proverIndex}` }, () =>
202
+ const { mockGossipSubNetwork } = this.context;
203
+ const { proverNode } = await withLoggerBindings({ actor: `prover-${proverIndex}` }, () =>
216
204
  createAndSyncProverNode(
217
205
  proverNodePrivateKey,
218
- { ...this.context.config },
219
206
  {
220
- dataDirectory: join(this.context.config.dataDirectory!, randomBytes(8).toString('hex')),
207
+ ...this.context.config,
208
+ p2pEnabled: this.context.config.p2pEnabled || mockGossipSubNetwork !== undefined,
221
209
  proverId: EthAddress.fromNumber(proverIndex),
222
210
  dontStart: opts.dontStart,
223
211
  ...opts,
224
212
  },
225
- this.context.aztecNode,
226
- this.context.prefilledPublicData ?? [],
227
- { dateProvider: this.context.dateProvider },
213
+ {
214
+ dataDirectory: join(this.context.config.dataDirectory!, randomBytes(8).toString('hex')),
215
+ },
216
+ {
217
+ dateProvider: this.context.dateProvider,
218
+ p2pClientDeps: {
219
+ p2pServiceFactory: mockGossipSubNetwork ? getMockPubSubP2PServiceFactory(mockGossipSubNetwork) : undefined,
220
+ rpcTxProviders: [this.context.aztecNode],
221
+ },
222
+ },
223
+ {
224
+ prefilledPublicData: this.context.prefilledPublicData ?? [],
225
+ dontStart: opts.dontStart,
226
+ },
228
227
  ),
229
228
  );
230
229
  this.proverNodes.push(proverNode);
@@ -238,15 +237,13 @@ export class EpochsTestContext {
238
237
 
239
238
  public createValidatorNode(
240
239
  privateKeys: `0x${string}`[],
241
- opts: Partial<AztecNodeConfig> & { txDelayerMaxInclusionTimeIntoSlot?: number; dontStartSequencer?: boolean } = {},
240
+ opts: Partial<AztecNodeConfig> & { dontStartSequencer?: boolean } = {},
242
241
  ) {
243
242
  this.logger.warn('Creating and syncing a validator node...');
244
243
  return this.createNode({ ...opts, disableValidator: false, validatorPrivateKeys: new SecretValue(privateKeys) });
245
244
  }
246
245
 
247
- private async createNode(
248
- opts: Partial<AztecNodeConfig> & { txDelayerMaxInclusionTimeIntoSlot?: number; dontStartSequencer?: boolean } = {},
249
- ) {
246
+ private async createNode(opts: Partial<AztecNodeConfig> & { dontStartSequencer?: boolean } = {}) {
250
247
  const nodeIndex = this.nodes.length + 1;
251
248
  const actorPrefix = opts.disableValidator ? 'node' : 'validator';
252
249
  const { mockGossipSubNetwork } = this.context;
@@ -275,26 +272,6 @@ export class EpochsTestContext {
275
272
  ),
276
273
  );
277
274
 
278
- // REFACTOR: We're getting too much into the internals of the sequencer here.
279
- // We should have a single method for constructing an aztec node that returns a TestAztecNodeService
280
- // which directly exposes the delayer and sets any test config.
281
- if (opts.txDelayerMaxInclusionTimeIntoSlot !== undefined) {
282
- this.logger.info(
283
- `Setting tx delayer max inclusion time into slot to ${opts.txDelayerMaxInclusionTimeIntoSlot} seconds`,
284
- );
285
- // Here we reach into the sequencer and hook in a tx delayer. The problem is that the sequencer's l1 utils only uses a public client, not a wallet.
286
- // The delayer needs a wallet (a client that can sign), so we have to create one here.
287
- const l1Client = createExtendedL1Client(
288
- resolvedConfig.l1RpcUrls!,
289
- resolvedConfig.publisherPrivateKeys![0]!.getValue(),
290
- );
291
- const sequencer = node.getSequencer() as TestSequencerClient;
292
- const publisher = sequencer.sequencer.publisher;
293
- const delayed = DelayedTxUtils.fromL1TxUtils(publisher.l1TxUtils, this.L1_BLOCK_TIME_IN_S, l1Client);
294
- delayed.delayer!.setMaxInclusionTimeIntoSlot(opts.txDelayerMaxInclusionTimeIntoSlot);
295
- publisher.l1TxUtils = delayed;
296
- }
297
-
298
275
  this.nodes.push(node);
299
276
  return node;
300
277
  }
@@ -346,7 +323,10 @@ export class EpochsTestContext {
346
323
  this.logger.info(`Waiting until last slot of submission window for epoch ${epochNumber} at ${date}`, {
347
324
  oneSlotBefore,
348
325
  });
349
- await waitUntilL1Timestamp(this.l1Client, oneSlotBefore);
326
+ // Use a timeout that accounts for the full proof submission window
327
+ const proofSubmissionWindowDuration =
328
+ this.constants.proofSubmissionEpochs * this.epochDuration * this.L2_SLOT_DURATION_IN_S;
329
+ await waitUntilL1Timestamp(this.l1Client, oneSlotBefore, undefined, proofSubmissionWindowDuration * 2);
350
330
  }
351
331
 
352
332
  /** Waits for the aztec node to sync to the target block number. */
@@ -398,15 +378,13 @@ export class EpochsTestContext {
398
378
 
399
379
  /** Creates an L1 client using a fresh account with funds from anvil, with a tx delayer already set up. */
400
380
  public async createL1Client() {
401
- const { client, delayer } = withDelayer(
402
- createExtendedL1Client(
403
- [...this.l1Client.chain.rpcUrls.default.http],
404
- privateKeyToAccount(this.getNextPrivateKey()),
405
- this.l1Client.chain,
406
- ),
407
- this.context.dateProvider!,
408
- { ethereumSlotDuration: this.L1_BLOCK_TIME_IN_S },
381
+ const rawClient = createExtendedL1Client(
382
+ [...this.l1Client.chain.rpcUrls.default.http],
383
+ privateKeyToAccount(this.getNextPrivateKey()),
384
+ this.l1Client.chain,
409
385
  );
386
+ const delayer = createDelayer(this.context.dateProvider, { ethereumSlotDuration: this.L1_BLOCK_TIME_IN_S }, {});
387
+ const client = wrapClientWithDelayer(rawClient, delayer);
410
388
  expect(await client.getBalance({ address: client.account.address })).toBeGreaterThan(0n);
411
389
  return { client, delayer };
412
390
  }
@@ -423,6 +401,38 @@ export class EpochsTestContext {
423
401
  expect(result).toBe(expectedSuccess);
424
402
  }
425
403
 
404
+ /** Verifies at least one checkpoint has the target number of blocks (for MBPS validation). */
405
+ public async assertMultipleBlocksPerSlot(targetBlockCount: number) {
406
+ const archiver = (this.context.aztecNode as AztecNodeService).getBlockSource() as Archiver;
407
+ const checkpoints = await archiver.getCheckpoints(CheckpointNumber(1), 50);
408
+
409
+ this.logger.warn(`Retrieved ${checkpoints.length} checkpoints from archiver`, {
410
+ checkpoints: checkpoints.map(pc => pc.checkpoint.getStats()),
411
+ });
412
+
413
+ let expectedBlockNumber = checkpoints[0].checkpoint.blocks[0].number;
414
+ let targetFound = false;
415
+
416
+ for (const checkpoint of checkpoints) {
417
+ const blockCount = checkpoint.checkpoint.blocks.length;
418
+ targetFound = targetFound || blockCount >= targetBlockCount;
419
+
420
+ this.logger.verbose(`Checkpoint ${checkpoint.checkpoint.number} has ${blockCount} blocks`, {
421
+ checkpoint: checkpoint.checkpoint.getStats(),
422
+ });
423
+
424
+ for (let i = 0; i < blockCount; i++) {
425
+ const block = checkpoint.checkpoint.blocks[i];
426
+ expect(block.indexWithinCheckpoint).toBe(i);
427
+ expect(block.checkpointNumber).toBe(checkpoint.checkpoint.number);
428
+ expect(block.number).toBe(expectedBlockNumber);
429
+ expectedBlockNumber++;
430
+ }
431
+ }
432
+
433
+ expect(targetFound).toBe(true);
434
+ }
435
+
426
436
  public watchSequencerEvents(
427
437
  sequencers: SequencerClient[],
428
438
  getMetadata: (i: number) => Record<string, any> = () => ({}),
@@ -4,11 +4,11 @@ import type { Logger } from '@aztec/aztec.js/log';
4
4
  import { Fq } from '@aztec/foundation/curves/bn254';
5
5
  import { sleep } from '@aztec/foundation/sleep';
6
6
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
7
- import type { TestWallet } from '@aztec/test-wallet/server';
8
7
 
9
8
  import { jest } from '@jest/globals';
10
9
  import type { Hex } from 'viem';
11
10
 
11
+ import type { TestWallet } from '../test-wallet/test_wallet.js';
12
12
  import { FeesTest } from './fees_test.js';
13
13
 
14
14
  jest.setTimeout(300_000);