@aztec/end-to-end 0.0.1-commit.21caa21 → 0.0.1-commit.21ecf947b

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 (241) hide show
  1. package/dest/bench/client_flows/benchmark.d.ts +3 -2
  2. package/dest/bench/client_flows/benchmark.d.ts.map +1 -1
  3. package/dest/bench/client_flows/benchmark.js +21 -1
  4. package/dest/bench/client_flows/client_flows_benchmark.d.ts +15 -16
  5. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  6. package/dest/bench/client_flows/client_flows_benchmark.js +126 -139
  7. package/dest/bench/client_flows/config.d.ts +2 -2
  8. package/dest/bench/client_flows/config.d.ts.map +1 -1
  9. package/dest/bench/client_flows/config.js +18 -0
  10. package/dest/bench/client_flows/data_extractor.js +3 -1
  11. package/dest/bench/utils.d.ts +9 -8
  12. package/dest/bench/utils.d.ts.map +1 -1
  13. package/dest/bench/utils.js +27 -18
  14. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +9 -8
  15. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  16. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +106 -112
  17. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +20 -14
  18. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
  19. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +92 -71
  20. package/dest/e2e_deploy_contract/deploy_test.d.ts +5 -4
  21. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  22. package/dest/e2e_deploy_contract/deploy_test.js +18 -13
  23. package/dest/e2e_epochs/epochs_test.d.ts +17 -9
  24. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  25. package/dest/e2e_epochs/epochs_test.js +53 -23
  26. package/dest/e2e_fees/bridging_race.notest.js +4 -6
  27. package/dest/e2e_fees/fees_test.d.ts +21 -17
  28. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  29. package/dest/e2e_fees/fees_test.js +128 -143
  30. package/dest/e2e_l1_publisher/write_json.d.ts +4 -3
  31. package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
  32. package/dest/e2e_l1_publisher/write_json.js +14 -16
  33. package/dest/e2e_multi_validator/utils.js +1 -1
  34. package/dest/e2e_nested_contract/nested_contract_test.d.ts +6 -9
  35. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  36. package/dest/e2e_nested_contract/nested_contract_test.js +31 -39
  37. package/dest/e2e_p2p/inactivity_slash_test.d.ts +4 -4
  38. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
  39. package/dest/e2e_p2p/inactivity_slash_test.js +6 -9
  40. package/dest/e2e_p2p/p2p_network.d.ts +14 -12
  41. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  42. package/dest/e2e_p2p/p2p_network.js +120 -111
  43. package/dest/e2e_p2p/reqresp/utils.d.ts +22 -0
  44. package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -0
  45. package/dest/e2e_p2p/reqresp/utils.js +153 -0
  46. package/dest/e2e_p2p/shared.d.ts +7 -7
  47. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  48. package/dest/e2e_p2p/shared.js +18 -21
  49. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
  50. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
  51. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
  52. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
  53. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
  54. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
  55. package/dest/e2e_token_contract/token_contract_test.d.ts +19 -10
  56. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  57. package/dest/e2e_token_contract/token_contract_test.js +99 -91
  58. package/dest/fixtures/authwit_proxy.d.ts +15 -0
  59. package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
  60. package/dest/fixtures/authwit_proxy.js +30 -0
  61. package/dest/fixtures/e2e_prover_test.d.ts +11 -19
  62. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  63. package/dest/fixtures/e2e_prover_test.js +91 -103
  64. package/dest/fixtures/fixtures.d.ts +2 -3
  65. package/dest/fixtures/fixtures.d.ts.map +1 -1
  66. package/dest/fixtures/fixtures.js +2 -3
  67. package/dest/fixtures/get_acvm_config.js +1 -1
  68. package/dest/fixtures/ha_setup.d.ts +71 -0
  69. package/dest/fixtures/ha_setup.d.ts.map +1 -0
  70. package/dest/fixtures/ha_setup.js +116 -0
  71. package/dest/fixtures/index.d.ts +2 -1
  72. package/dest/fixtures/index.d.ts.map +1 -1
  73. package/dest/fixtures/index.js +1 -0
  74. package/dest/fixtures/l1_to_l2_messaging.d.ts +4 -3
  75. package/dest/fixtures/l1_to_l2_messaging.d.ts.map +1 -1
  76. package/dest/fixtures/l1_to_l2_messaging.js +2 -2
  77. package/dest/fixtures/setup.d.ts +218 -0
  78. package/dest/fixtures/setup.d.ts.map +1 -0
  79. package/dest/fixtures/setup.js +636 -0
  80. package/dest/fixtures/setup_p2p_test.d.ts +12 -8
  81. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  82. package/dest/fixtures/setup_p2p_test.js +32 -24
  83. package/dest/fixtures/token_utils.d.ts +1 -1
  84. package/dest/fixtures/token_utils.d.ts.map +1 -1
  85. package/dest/fixtures/token_utils.js +7 -4
  86. package/dest/fixtures/utils.d.ts +5 -637
  87. package/dest/fixtures/utils.d.ts.map +1 -1
  88. package/dest/fixtures/utils.js +4 -647
  89. package/dest/fixtures/web3signer.js +1 -1
  90. package/dest/fixtures/with_telemetry_utils.d.ts +2 -2
  91. package/dest/fixtures/with_telemetry_utils.d.ts.map +1 -1
  92. package/dest/fixtures/with_telemetry_utils.js +2 -2
  93. package/dest/quality_of_service/grafana_client.d.ts +41 -0
  94. package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
  95. package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
  96. package/dest/quality_of_service/prometheus_client.d.ts +38 -0
  97. package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
  98. package/dest/quality_of_service/prometheus_client.js +67 -0
  99. package/dest/shared/cross_chain_test_harness.d.ts +18 -6
  100. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  101. package/dest/shared/cross_chain_test_harness.js +14 -14
  102. package/dest/shared/gas_portal_test_harness.d.ts +12 -2
  103. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  104. package/dest/shared/gas_portal_test_harness.js +1 -1
  105. package/dest/shared/index.d.ts +3 -2
  106. package/dest/shared/index.d.ts.map +1 -1
  107. package/dest/shared/index.js +1 -0
  108. package/dest/shared/mock_state_view.d.ts +86 -0
  109. package/dest/shared/mock_state_view.d.ts.map +1 -0
  110. package/dest/shared/mock_state_view.js +186 -0
  111. package/dest/shared/submit-transactions.d.ts +4 -4
  112. package/dest/shared/submit-transactions.d.ts.map +1 -1
  113. package/dest/shared/submit-transactions.js +9 -11
  114. package/dest/shared/uniswap_l1_l2.d.ts +3 -27
  115. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  116. package/dest/shared/uniswap_l1_l2.js +57 -35
  117. package/dest/simulators/lending_simulator.d.ts +6 -2
  118. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  119. package/dest/simulators/lending_simulator.js +2 -2
  120. package/dest/simulators/token_simulator.d.ts +1 -1
  121. package/dest/simulators/token_simulator.d.ts.map +1 -1
  122. package/dest/simulators/token_simulator.js +2 -23
  123. package/dest/spartan/setup_test_wallets.d.ts +5 -4
  124. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  125. package/dest/spartan/setup_test_wallets.js +66 -36
  126. package/dest/spartan/tx_metrics.d.ts +88 -0
  127. package/dest/spartan/tx_metrics.d.ts.map +1 -0
  128. package/dest/spartan/tx_metrics.js +422 -0
  129. package/dest/spartan/utils/bot.d.ts +27 -0
  130. package/dest/spartan/utils/bot.d.ts.map +1 -0
  131. package/dest/spartan/utils/bot.js +141 -0
  132. package/dest/spartan/utils/chaos.d.ts +79 -0
  133. package/dest/spartan/utils/chaos.d.ts.map +1 -0
  134. package/dest/spartan/utils/chaos.js +142 -0
  135. package/dest/spartan/utils/clients.d.ts +39 -0
  136. package/dest/spartan/utils/clients.d.ts.map +1 -0
  137. package/dest/spartan/utils/clients.js +90 -0
  138. package/dest/spartan/utils/config.d.ts +39 -0
  139. package/dest/spartan/utils/config.d.ts.map +1 -0
  140. package/dest/spartan/utils/config.js +21 -0
  141. package/dest/spartan/utils/health.d.ts +63 -0
  142. package/dest/spartan/utils/health.d.ts.map +1 -0
  143. package/dest/spartan/utils/health.js +202 -0
  144. package/dest/spartan/utils/helm.d.ts +15 -0
  145. package/dest/spartan/utils/helm.d.ts.map +1 -0
  146. package/dest/spartan/utils/helm.js +47 -0
  147. package/dest/spartan/utils/index.d.ts +9 -0
  148. package/dest/spartan/utils/index.d.ts.map +1 -0
  149. package/dest/spartan/utils/index.js +18 -0
  150. package/dest/spartan/utils/k8s.d.ts +126 -0
  151. package/dest/spartan/utils/k8s.d.ts.map +1 -0
  152. package/dest/spartan/utils/k8s.js +375 -0
  153. package/dest/spartan/utils/nodes.d.ts +41 -0
  154. package/dest/spartan/utils/nodes.d.ts.map +1 -0
  155. package/dest/spartan/utils/nodes.js +461 -0
  156. package/dest/spartan/utils/scripts.d.ts +30 -0
  157. package/dest/spartan/utils/scripts.d.ts.map +1 -0
  158. package/dest/spartan/utils/scripts.js +81 -0
  159. package/dest/spartan/utils.d.ts +2 -218
  160. package/dest/spartan/utils.d.ts.map +1 -1
  161. package/dest/spartan/utils.js +1 -749
  162. package/dest/test-wallet/test_wallet.d.ts +83 -0
  163. package/dest/test-wallet/test_wallet.d.ts.map +1 -0
  164. package/dest/test-wallet/test_wallet.js +214 -0
  165. package/dest/test-wallet/utils.d.ts +41 -0
  166. package/dest/test-wallet/utils.d.ts.map +1 -0
  167. package/dest/test-wallet/utils.js +71 -0
  168. package/package.json +46 -41
  169. package/src/bench/client_flows/benchmark.ts +24 -2
  170. package/src/bench/client_flows/client_flows_benchmark.ts +148 -215
  171. package/src/bench/client_flows/config.ts +9 -1
  172. package/src/bench/client_flows/data_extractor.ts +1 -1
  173. package/src/bench/utils.ts +31 -21
  174. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +114 -143
  175. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +140 -126
  176. package/src/e2e_deploy_contract/deploy_test.ts +22 -15
  177. package/src/e2e_epochs/epochs_test.ts +105 -56
  178. package/src/e2e_fees/bridging_race.notest.ts +5 -11
  179. package/src/e2e_fees/fees_test.ts +171 -228
  180. package/src/e2e_l1_publisher/write_json.ts +16 -16
  181. package/src/e2e_multi_validator/utils.ts +1 -1
  182. package/src/e2e_nested_contract/nested_contract_test.ts +33 -56
  183. package/src/e2e_p2p/inactivity_slash_test.ts +7 -10
  184. package/src/e2e_p2p/p2p_network.ts +181 -184
  185. package/src/e2e_p2p/reqresp/utils.ts +207 -0
  186. package/src/e2e_p2p/shared.ts +33 -28
  187. package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
  188. package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
  189. package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
  190. package/src/e2e_token_contract/token_contract_test.ts +113 -119
  191. package/src/fixtures/authwit_proxy.ts +50 -0
  192. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  193. package/src/fixtures/e2e_prover_test.ts +104 -141
  194. package/src/fixtures/fixtures.ts +2 -5
  195. package/src/fixtures/get_acvm_config.ts +1 -1
  196. package/src/fixtures/ha_setup.ts +186 -0
  197. package/src/fixtures/index.ts +1 -0
  198. package/src/fixtures/l1_to_l2_messaging.ts +4 -2
  199. package/src/fixtures/setup.ts +939 -0
  200. package/src/fixtures/setup_p2p_test.ts +34 -30
  201. package/src/fixtures/token_utils.ts +6 -5
  202. package/src/fixtures/utils.ts +27 -966
  203. package/src/fixtures/web3signer.ts +1 -1
  204. package/src/fixtures/with_telemetry_utils.ts +2 -2
  205. package/src/guides/up_quick_start.sh +3 -3
  206. package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
  207. package/src/quality_of_service/prometheus_client.ts +113 -0
  208. package/src/shared/cross_chain_test_harness.ts +19 -36
  209. package/src/shared/gas_portal_test_harness.ts +2 -2
  210. package/src/shared/index.ts +2 -1
  211. package/src/shared/mock_state_view.ts +188 -0
  212. package/src/shared/submit-transactions.ts +11 -16
  213. package/src/shared/uniswap_l1_l2.ts +66 -89
  214. package/src/simulators/lending_simulator.ts +3 -3
  215. package/src/simulators/token_simulator.ts +1 -29
  216. package/src/spartan/DEVELOP.md +7 -0
  217. package/src/spartan/setup_test_wallets.ts +84 -27
  218. package/src/spartan/tx_metrics.ts +376 -0
  219. package/src/spartan/utils/bot.ts +185 -0
  220. package/src/spartan/utils/chaos.ts +253 -0
  221. package/src/spartan/utils/clients.ts +100 -0
  222. package/src/spartan/utils/config.ts +27 -0
  223. package/src/spartan/utils/health.ts +255 -0
  224. package/src/spartan/utils/helm.ts +84 -0
  225. package/src/spartan/utils/index.ts +64 -0
  226. package/src/spartan/utils/k8s.ts +527 -0
  227. package/src/spartan/utils/nodes.ts +538 -0
  228. package/src/spartan/utils/scripts.ts +99 -0
  229. package/src/spartan/utils.ts +1 -942
  230. package/src/test-wallet/test_wallet.ts +306 -0
  231. package/src/test-wallet/utils.ts +112 -0
  232. package/dest/fixtures/setup_l1_contracts.d.ts +0 -477
  233. package/dest/fixtures/setup_l1_contracts.d.ts.map +0 -1
  234. package/dest/fixtures/setup_l1_contracts.js +0 -17
  235. package/dest/fixtures/snapshot_manager.d.ts +0 -95
  236. package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
  237. package/dest/fixtures/snapshot_manager.js +0 -505
  238. package/dest/quality_of_service/alert_checker.d.ts +0 -41
  239. package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
  240. package/src/fixtures/setup_l1_contracts.ts +0 -26
  241. package/src/fixtures/snapshot_manager.ts +0 -665
@@ -8,14 +8,12 @@ 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
- import { type ISnapshotManager, createSnapshotManager, deployAccounts } from '../fixtures/snapshot_manager.js';
14
-
15
- const { E2E_DATA_PATH: dataPath } = process.env;
12
+ import { type EndToEndContext, deployAccounts, setup, teardown } from '../fixtures/setup.js';
13
+ import type { TestWallet } from '../test-wallet/test_wallet.js';
16
14
 
17
15
  export class DeployTest {
18
- private snapshotManager: ISnapshotManager;
16
+ public context!: EndToEndContext;
19
17
  public logger: Logger;
20
18
  public wallet!: TestWallet;
21
19
  public defaultAccountAddress!: AztecAddress;
@@ -24,26 +22,35 @@ export class DeployTest {
24
22
 
25
23
  constructor(testName: string) {
26
24
  this.logger = createLogger(`e2e:e2e_deploy_contract:${testName}`);
27
- this.snapshotManager = createSnapshotManager(`e2e_deploy_contract/${testName}`, dataPath);
28
25
  }
29
26
 
30
27
  async setup() {
31
- await this.applyInitialAccountSnapshot();
32
- const context = await this.snapshotManager.setup();
33
- ({ aztecNode: this.aztecNode, wallet: this.wallet } = context);
34
- this.aztecNodeAdmin = context.aztecNode;
28
+ this.logger.info('Setting up test environment');
29
+ this.context = await setup(0, {
30
+ fundSponsoredFPC: true,
31
+ skipAccountDeployment: true,
32
+ });
33
+ this.aztecNode = this.context.aztecNodeService;
34
+ this.wallet = this.context.wallet;
35
+ this.aztecNodeAdmin = this.context.aztecNodeService;
36
+ await this.applyInitialAccount();
35
37
  return this;
36
38
  }
37
39
 
38
40
  async teardown() {
39
- await this.snapshotManager.teardown();
41
+ await teardown(this.context);
40
42
  }
41
43
 
42
- private async applyInitialAccountSnapshot() {
43
- await this.snapshotManager.snapshot('initial_account', deployAccounts(1, this.logger), ({ deployedAccounts }) => {
44
- this.defaultAccountAddress = deployedAccounts[0].address;
45
- return Promise.resolve();
44
+ private async applyInitialAccount() {
45
+ this.logger.info('Applying initial account setup');
46
+ const { deployedAccounts } = await deployAccounts(
47
+ 1,
48
+ this.logger,
49
+ )({
50
+ wallet: this.context.wallet,
51
+ initialFundedAccounts: this.context.initialFundedAccounts,
46
52
  });
53
+ this.defaultAccountAddress = deployedAccounts[0].address;
47
54
  }
48
55
 
49
56
  async registerContract<T extends ContractBase>(
@@ -6,19 +6,23 @@ import type { Logger } from '@aztec/aztec.js/log';
6
6
  import { MerkleTreeId } from '@aztec/aztec.js/trees';
7
7
  import type { Wallet } from '@aztec/aztec.js/wallet';
8
8
  import { EpochCache } from '@aztec/epoch-cache';
9
- import { DefaultL1ContractsConfig, type ExtendedViemWalletClient, createExtendedL1Client } from '@aztec/ethereum';
9
+ import { createExtendedL1Client } from '@aztec/ethereum/client';
10
+ import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
10
11
  import { RollupContract } from '@aztec/ethereum/contracts';
11
12
  import { ChainMonitor, DelayedTxUtils, type Delayer, waitUntilL1Timestamp, withDelayer } from '@aztec/ethereum/test';
12
- import { EpochNumber } from '@aztec/foundation/branded-types';
13
+ import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
14
+ import { BlockNumber, CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
13
15
  import { SecretValue } from '@aztec/foundation/config';
14
- import { randomBytes } from '@aztec/foundation/crypto';
15
- import { withLogNameSuffix } from '@aztec/foundation/log';
16
+ import { randomBytes } from '@aztec/foundation/crypto/random';
17
+ import { withLoggerBindings } from '@aztec/foundation/log/server';
16
18
  import { retryUntil } from '@aztec/foundation/retry';
17
19
  import { sleep } from '@aztec/foundation/sleep';
18
20
  import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
21
+ import { TestContract } from '@aztec/noir-test-contracts.js/Test';
19
22
  import { getMockPubSubP2PServiceFactory } from '@aztec/p2p/test-helpers';
20
23
  import { ProverNode, type ProverNodeConfig, ProverNodePublisher } from '@aztec/prover-node';
21
24
  import type { TestProverNode } from '@aztec/prover-node/test';
25
+ import type { PXEConfig } from '@aztec/pxe/config';
22
26
  import {
23
27
  type SequencerClient,
24
28
  type SequencerEvents,
@@ -26,7 +30,7 @@ import {
26
30
  SequencerState,
27
31
  } from '@aztec/sequencer-client';
28
32
  import type { TestSequencerClient } from '@aztec/sequencer-client/test';
29
- import { EthAddress, type L2BlockNumber } from '@aztec/stdlib/block';
33
+ import { type BlockParameter, EthAddress } from '@aztec/stdlib/block';
30
34
  import { type L1RollupConstants, getProofSubmissionDeadlineTimestamp } from '@aztec/stdlib/epoch-helpers';
31
35
  import { tryStop } from '@aztec/stdlib/interfaces/server';
32
36
 
@@ -47,7 +51,11 @@ export const WORLD_STATE_BLOCK_CHECK_INTERVAL = 50;
47
51
  export const ARCHIVER_POLL_INTERVAL = 50;
48
52
  export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
49
53
 
50
- export type EpochsTestOpts = Partial<SetupOptions> & { numberOfAccounts?: number };
54
+ export type EpochsTestOpts = Partial<SetupOptions> & {
55
+ numberOfAccounts?: number;
56
+ pxeOpts?: Partial<PXEConfig>;
57
+ aztecSlotDurationInL1Slots?: number;
58
+ };
51
59
 
52
60
  export type TrackedSequencerEvent = {
53
61
  [K in keyof SequencerEvents]: Parameters<SequencerEvents[K]>[0] & {
@@ -92,46 +100,63 @@ export class EpochsTestContext {
92
100
  ? parseInt(process.env.L1_BLOCK_TIME)
93
101
  : DEFAULT_L1_BLOCK_TIME;
94
102
  const ethereumSlotDuration = opts.ethereumSlotDuration ?? envEthereumSlotDuration;
95
- const aztecSlotDuration = opts.aztecSlotDuration ?? ethereumSlotDuration * 2;
103
+ const aztecSlotDuration = opts.aztecSlotDuration ?? (opts.aztecSlotDurationInL1Slots ?? 2) * ethereumSlotDuration;
96
104
  const aztecEpochDuration = opts.aztecEpochDuration ?? 6;
97
105
  const aztecProofSubmissionEpochs = opts.aztecProofSubmissionEpochs ?? 1;
98
- return { ethereumSlotDuration, aztecSlotDuration, aztecEpochDuration, aztecProofSubmissionEpochs };
106
+ const l1PublishingTime = opts.l1PublishingTime ?? 1;
107
+ return {
108
+ l1PublishingTime,
109
+ ethereumSlotDuration,
110
+ aztecSlotDuration,
111
+ aztecEpochDuration,
112
+ aztecProofSubmissionEpochs,
113
+ };
99
114
  }
100
115
 
101
116
  public async setup(opts: EpochsTestOpts = {}) {
102
- const { ethereumSlotDuration, aztecSlotDuration, aztecEpochDuration, aztecProofSubmissionEpochs } =
103
- EpochsTestContext.getSlotDurations(opts);
117
+ const {
118
+ ethereumSlotDuration,
119
+ aztecSlotDuration,
120
+ aztecEpochDuration,
121
+ aztecProofSubmissionEpochs,
122
+ l1PublishingTime,
123
+ } = EpochsTestContext.getSlotDurations(opts);
104
124
 
105
125
  this.L1_BLOCK_TIME_IN_S = ethereumSlotDuration;
106
126
  this.L2_SLOT_DURATION_IN_S = aztecSlotDuration;
107
127
 
108
128
  // Set up system without any account nor protocol contracts
109
129
  // and with faster block times and shorter epochs.
110
- const context = await setup(opts.numberOfAccounts ?? 0, {
111
- automineL1Setup: true,
112
- checkIntervalMs: 50,
113
- archiverPollingIntervalMS: ARCHIVER_POLL_INTERVAL,
114
- worldStateBlockCheckIntervalMS: WORLD_STATE_BLOCK_CHECK_INTERVAL,
115
- skipProtocolContracts: true,
116
- salt: 1,
117
- aztecEpochDuration,
118
- aztecSlotDuration,
119
- ethereumSlotDuration,
120
- aztecProofSubmissionEpochs,
121
- aztecTargetCommitteeSize: opts.initialValidators?.length ?? 0,
122
- minTxsPerBlock: 0,
123
- realProofs: false,
124
- startProverNode: true,
125
- proverTestDelayMs: opts.proverTestDelayMs ?? 0,
126
- // We use numeric incremental prover ids for simplicity, but we can switch to
127
- // using the prover's eth address if the proverId is used for something in the rollup contract
128
- // Use numeric EthAddress for deterministic prover id
129
- proverId: EthAddress.fromNumber(1),
130
- worldStateBlockHistory: WORLD_STATE_BLOCK_HISTORY,
131
- exitDelaySeconds: DefaultL1ContractsConfig.exitDelaySeconds,
132
- slasherFlavor: 'none',
133
- ...opts,
134
- });
130
+ const context = await setup(
131
+ opts.numberOfAccounts ?? 0,
132
+ {
133
+ automineL1Setup: true,
134
+ checkIntervalMs: 50,
135
+ archiverPollingIntervalMS: ARCHIVER_POLL_INTERVAL,
136
+ worldStateBlockCheckIntervalMS: WORLD_STATE_BLOCK_CHECK_INTERVAL,
137
+ aztecEpochDuration,
138
+ aztecSlotDuration,
139
+ ethereumSlotDuration,
140
+ aztecProofSubmissionEpochs,
141
+ aztecTargetCommitteeSize: opts.initialValidators?.length ?? 0,
142
+ minTxsPerBlock: 0,
143
+ realProofs: false,
144
+ startProverNode: true,
145
+ proverTestDelayMs: opts.proverTestDelayMs ?? 0,
146
+ // We use numeric incremental prover ids for simplicity, but we can switch to
147
+ // using the prover's eth address if the proverId is used for something in the rollup contract
148
+ // Use numeric EthAddress for deterministic prover id
149
+ proverId: EthAddress.fromNumber(1),
150
+ worldStateBlockHistory: WORLD_STATE_BLOCK_HISTORY,
151
+ exitDelaySeconds: DefaultL1ContractsConfig.exitDelaySeconds,
152
+ slasherFlavor: 'none',
153
+ l1PublishingTime,
154
+ ...opts,
155
+ },
156
+ // Use checkpointed chain tip for PXE by default to avoid issues with blocks being dropped due to pruned anchor blocks.
157
+ // Can be overridden via opts.pxeOpts.
158
+ { syncChainTip: 'checkpointed', ...opts.pxeOpts },
159
+ );
135
160
 
136
161
  this.context = context;
137
162
  this.proverNodes = context.proverNode ? [context.proverNode] : [];
@@ -169,6 +194,7 @@ export class EpochsTestContext {
169
194
  l1GenesisTime: await this.rollup.getL1GenesisTime(),
170
195
  ethereumSlotDuration,
171
196
  proofSubmissionEpochs: Number(await this.rollup.getProofSubmissionEpochs()),
197
+ targetCommitteeSize: await this.rollup.getTargetCommitteeSize(),
172
198
  };
173
199
 
174
200
  this.logger.info(
@@ -186,20 +212,29 @@ export class EpochsTestContext {
186
212
  public async createProverNode(opts: { dontStart?: boolean } & Partial<ProverNodeConfig> = {}) {
187
213
  this.logger.warn('Creating and syncing a simulated prover node...');
188
214
  const proverNodePrivateKey = this.getNextPrivateKey();
189
- const suffix = (this.proverNodes.length + 1).toString();
190
- const proverNode = await withLogNameSuffix(suffix, () =>
215
+ const proverIndex = this.proverNodes.length + 1;
216
+ const { mockGossipSubNetwork } = this.context;
217
+ const proverNode = await withLoggerBindings({ actor: `prover-${proverIndex}` }, () =>
191
218
  createAndSyncProverNode(
192
219
  proverNodePrivateKey,
193
- { ...this.context.config },
220
+ {
221
+ ...this.context.config,
222
+ p2pEnabled: this.context.config.p2pEnabled || mockGossipSubNetwork !== undefined,
223
+ },
194
224
  {
195
225
  dataDirectory: join(this.context.config.dataDirectory!, randomBytes(8).toString('hex')),
196
- proverId: EthAddress.fromNumber(parseInt(suffix, 10)),
226
+ proverId: EthAddress.fromNumber(proverIndex),
197
227
  dontStart: opts.dontStart,
198
228
  ...opts,
199
229
  },
200
230
  this.context.aztecNode,
201
- undefined,
202
- { dateProvider: this.context.dateProvider },
231
+ this.context.prefilledPublicData ?? [],
232
+ {
233
+ dateProvider: this.context.dateProvider,
234
+ p2pClientDeps: mockGossipSubNetwork
235
+ ? { p2pServiceFactory: getMockPubSubP2PServiceFactory(mockGossipSubNetwork) }
236
+ : undefined,
237
+ },
203
238
  ),
204
239
  );
205
240
  this.proverNodes.push(proverNode);
@@ -222,12 +257,13 @@ export class EpochsTestContext {
222
257
  private async createNode(
223
258
  opts: Partial<AztecNodeConfig> & { txDelayerMaxInclusionTimeIntoSlot?: number; dontStartSequencer?: boolean } = {},
224
259
  ) {
225
- const suffix = (this.nodes.length + 1).toString();
260
+ const nodeIndex = this.nodes.length + 1;
261
+ const actorPrefix = opts.disableValidator ? 'node' : 'validator';
226
262
  const { mockGossipSubNetwork } = this.context;
227
263
  const resolvedConfig = { ...this.context.config, ...opts };
228
264
  const p2pEnabled = resolvedConfig.p2pEnabled || mockGossipSubNetwork !== undefined;
229
265
  const p2pIp = resolvedConfig.p2pIp ?? (p2pEnabled ? '127.0.0.1' : undefined);
230
- const node = await withLogNameSuffix(suffix, () =>
266
+ const node = await withLoggerBindings({ actor: `${actorPrefix}-${nodeIndex}` }, () =>
231
267
  AztecNodeService.createAndSync(
232
268
  {
233
269
  ...resolvedConfig,
@@ -291,21 +327,21 @@ export class EpochsTestContext {
291
327
  return start;
292
328
  }
293
329
 
294
- /** Waits until the given L2 block number is mined. */
295
- public async waitUntilL2BlockNumber(target: number, timeout = 60) {
330
+ /** Waits until the given checkpoint number is mined. */
331
+ public async waitUntilCheckpointNumber(target: CheckpointNumber, timeout = 120) {
296
332
  await retryUntil(
297
333
  () => Promise.resolve(target <= this.monitor.checkpointNumber),
298
- `Wait until L2 block ${target}`,
334
+ `Wait until checkpoint ${target}`,
299
335
  timeout,
300
336
  0.1,
301
337
  );
302
338
  }
303
339
 
304
- /** Waits until the given L2 block number is marked as proven. */
305
- public async waitUntilProvenL2BlockNumber(t: number, timeout = 60) {
340
+ /** Waits until the given checkpoint number is marked as proven. */
341
+ public async waitUntilProvenCheckpointNumber(target: CheckpointNumber, timeout = 120) {
306
342
  await retryUntil(
307
- () => Promise.resolve(t <= this.monitor.provenCheckpointNumber),
308
- `Wait proven L2 block ${t}`,
343
+ () => Promise.resolve(target <= this.monitor.provenCheckpointNumber),
344
+ `Wait proven checkpoint ${target}`,
309
345
  timeout,
310
346
  0.1,
311
347
  );
@@ -324,7 +360,7 @@ export class EpochsTestContext {
324
360
  }
325
361
 
326
362
  /** Waits for the aztec node to sync to the target block number. */
327
- public async waitForNodeToSync(blockNumber: number, type: 'proven' | 'finalized' | 'historic') {
363
+ public async waitForNodeToSync(blockNumber: BlockNumber, type: 'proven' | 'finalized' | 'historic') {
328
364
  const waitTime = ARCHIVER_POLL_INTERVAL + WORLD_STATE_BLOCK_CHECK_INTERVAL;
329
365
  let synched = false;
330
366
  while (!synched) {
@@ -335,7 +371,7 @@ export class EpochsTestContext {
335
371
  ]);
336
372
  this.logger.info(`Wait for node synch ${blockNumber} ${type}`, { blockNumber, type, syncState, tips });
337
373
  if (type === 'proven') {
338
- synched = tips.proven.number >= blockNumber && syncState.latestBlockNumber >= blockNumber;
374
+ synched = tips.proven.block.number >= blockNumber && syncState.latestBlockNumber >= blockNumber;
339
375
  } else if (type === 'finalized') {
340
376
  synched = syncState.finalizedBlockNumber >= blockNumber;
341
377
  } else {
@@ -357,6 +393,19 @@ export class EpochsTestContext {
357
393
  return SpamContract.at(instance.address, wallet);
358
394
  }
359
395
 
396
+ /** Registers the TestContract on the given wallet. */
397
+ public async registerTestContract(wallet: Wallet, salt = Fr.ZERO) {
398
+ const instance = await getContractInstanceFromInstantiationParams(TestContract.artifact, {
399
+ constructorArgs: [],
400
+ constructorArtifact: undefined,
401
+ salt,
402
+ publicKeys: undefined,
403
+ deployer: undefined,
404
+ });
405
+ await wallet.registerContract(instance, TestContract.artifact);
406
+ return TestContract.at(instance.address, wallet);
407
+ }
408
+
360
409
  /** Creates an L1 client using a fresh account with funds from anvil, with a tx delayer already set up. */
361
410
  public async createL1Client() {
362
411
  const { client, delayer } = withDelayer(
@@ -365,7 +414,7 @@ export class EpochsTestContext {
365
414
  privateKeyToAccount(this.getNextPrivateKey()),
366
415
  this.l1Client.chain,
367
416
  ),
368
- this.context.dateProvider!,
417
+ this.context.dateProvider,
369
418
  { ethereumSlotDuration: this.L1_BLOCK_TIME_IN_S },
370
419
  );
371
420
  expect(await client.getBalance({ address: client.account.address })).toBeGreaterThan(0n);
@@ -373,7 +422,7 @@ export class EpochsTestContext {
373
422
  }
374
423
 
375
424
  /** Verifies whether the given block number is found on the aztec node. */
376
- public async verifyHistoricBlock(blockNumber: L2BlockNumber, expectedSuccess: boolean) {
425
+ public async verifyHistoricBlock(blockNumber: BlockParameter, expectedSuccess: boolean) {
377
426
  // We use `findLeavesIndexes` here, but could use any function that queries the world-state
378
427
  // at a particular block, so we know whether that historic block is available or has been
379
428
  // pruned. Note that `getBlock` would not work here, since it only hits the archiver.
@@ -391,11 +440,11 @@ export class EpochsTestContext {
391
440
  const stateChanges: TrackedSequencerEvent[] = [];
392
441
  const failEvents: TrackedSequencerEvent[] = [];
393
442
 
394
- // Note we do not include the 'tx-count-check-failed' event here, since it is fine if we dont build
443
+ // Note we do not include the 'block-tx-count-check-failed' event here, since it is fine if we dont build
395
444
  // due to lack of txs available.
396
445
  const failEventsKeys: (keyof SequencerEvents)[] = [
397
446
  'block-build-failed',
398
- 'block-publish-failed',
447
+ 'checkpoint-publish-failed',
399
448
  'proposer-rollup-check-failed',
400
449
  ];
401
450
 
@@ -1,14 +1,14 @@
1
1
  import { SchnorrAccountContract } from '@aztec/accounts/schnorr';
2
2
  import { Fr } from '@aztec/aztec.js/fields';
3
3
  import type { Logger } from '@aztec/aztec.js/log';
4
- import { Fq } from '@aztec/foundation/fields';
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);
@@ -26,11 +26,8 @@ describe('e2e_fees bridging_race', () => {
26
26
  });
27
27
 
28
28
  beforeAll(async () => {
29
- await t.applyInitialAccountsSnapshot();
30
- await t.applyPublicDeployAccountsSnapshot();
31
- await t.applySetupFeeJuiceSnapshot();
32
-
33
- ({ wallet, logger } = await t.setup());
29
+ await t.setup();
30
+ ({ wallet, logger } = t);
34
31
  });
35
32
 
36
33
  afterAll(async () => {
@@ -70,10 +67,7 @@ describe('e2e_fees bridging_race', () => {
70
67
  // Yes, we need to REFACTOR it at some point
71
68
  const claim = await t.feeJuiceBridgeTestHarness.prepareTokensOnL1(bobsAddress);
72
69
  const { claimSecret: secret, messageLeafIndex: index } = claim;
73
- await t.feeJuiceContract.methods
74
- .claim(bobsAddress, claim.claimAmount, secret, index)
75
- .send({ from: bobsAddress })
76
- .wait();
70
+ await t.feeJuiceContract.methods.claim(bobsAddress, claim.claimAmount, secret, index).send({ from: bobsAddress });
77
71
  const [balance] = await t.getGasBalanceFn(bobsAddress);
78
72
  expect(balance).toEqual(claim.claimAmount);
79
73
  });