@aztec/end-to-end 0.0.1-commit.6d3c34e → 0.0.1-commit.7035c9bd6

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 (236) 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 +13 -14
  5. package/dest/bench/client_flows/client_flows_benchmark.d.ts.map +1 -1
  6. package/dest/bench/client_flows/client_flows_benchmark.js +130 -137
  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/utils.d.ts +6 -5
  11. package/dest/bench/utils.d.ts.map +1 -1
  12. package/dest/bench/utils.js +13 -8
  13. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts +9 -8
  14. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.d.ts.map +1 -1
  15. package/dest/e2e_blacklist_token_contract/blacklist_token_contract_test.js +107 -113
  16. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts +7 -8
  17. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.d.ts.map +1 -1
  18. package/dest/e2e_cross_chain_messaging/cross_chain_messaging_test.js +68 -64
  19. package/dest/e2e_deploy_contract/deploy_test.d.ts +5 -4
  20. package/dest/e2e_deploy_contract/deploy_test.d.ts.map +1 -1
  21. package/dest/e2e_deploy_contract/deploy_test.js +18 -13
  22. package/dest/e2e_epochs/epochs_test.d.ts +17 -7
  23. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  24. package/dest/e2e_epochs/epochs_test.js +90 -40
  25. package/dest/e2e_fees/bridging_race.notest.js +3 -5
  26. package/dest/e2e_fees/fees_test.d.ts +14 -14
  27. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  28. package/dest/e2e_fees/fees_test.js +133 -144
  29. package/dest/e2e_l1_publisher/write_json.d.ts +4 -3
  30. package/dest/e2e_l1_publisher/write_json.d.ts.map +1 -1
  31. package/dest/e2e_l1_publisher/write_json.js +14 -13
  32. package/dest/e2e_nested_contract/nested_contract_test.d.ts +6 -9
  33. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  34. package/dest/e2e_nested_contract/nested_contract_test.js +30 -40
  35. package/dest/e2e_p2p/inactivity_slash_test.d.ts +3 -3
  36. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
  37. package/dest/e2e_p2p/inactivity_slash_test.js +3 -3
  38. package/dest/e2e_p2p/p2p_network.d.ts +11 -9
  39. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  40. package/dest/e2e_p2p/p2p_network.js +132 -108
  41. package/dest/e2e_p2p/reqresp/utils.d.ts +22 -0
  42. package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -0
  43. package/dest/e2e_p2p/reqresp/utils.js +190 -0
  44. package/dest/e2e_p2p/shared.d.ts +26 -6
  45. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  46. package/dest/e2e_p2p/shared.js +46 -18
  47. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
  48. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
  49. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
  50. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
  51. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
  52. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
  53. package/dest/e2e_token_contract/token_contract_test.d.ts +19 -10
  54. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  55. package/dest/e2e_token_contract/token_contract_test.js +100 -92
  56. package/dest/fixtures/authwit_proxy.d.ts +15 -0
  57. package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
  58. package/dest/fixtures/authwit_proxy.js +30 -0
  59. package/dest/fixtures/e2e_prover_test.d.ts +11 -17
  60. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  61. package/dest/fixtures/e2e_prover_test.js +112 -127
  62. package/dest/fixtures/elu_monitor.d.ts +21 -0
  63. package/dest/fixtures/elu_monitor.d.ts.map +1 -0
  64. package/dest/fixtures/elu_monitor.js +102 -0
  65. package/dest/fixtures/fixtures.d.ts +5 -1
  66. package/dest/fixtures/fixtures.d.ts.map +1 -1
  67. package/dest/fixtures/fixtures.js +6 -0
  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/setup.d.ts +239 -0
  75. package/dest/fixtures/setup.d.ts.map +1 -0
  76. package/dest/fixtures/setup.js +606 -0
  77. package/dest/fixtures/setup_p2p_test.d.ts +16 -9
  78. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  79. package/dest/fixtures/setup_p2p_test.js +40 -29
  80. package/dest/fixtures/token_utils.d.ts +2 -2
  81. package/dest/fixtures/token_utils.d.ts.map +1 -1
  82. package/dest/fixtures/token_utils.js +12 -8
  83. package/dest/fixtures/utils.d.ts +5 -191
  84. package/dest/fixtures/utils.d.ts.map +1 -1
  85. package/dest/fixtures/utils.js +4 -615
  86. package/dest/quality_of_service/prometheus_client.d.ts +38 -0
  87. package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
  88. package/dest/quality_of_service/prometheus_client.js +67 -0
  89. package/dest/shared/cross_chain_test_harness.d.ts +14 -4
  90. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  91. package/dest/shared/cross_chain_test_harness.js +24 -24
  92. package/dest/shared/gas_portal_test_harness.d.ts +11 -1
  93. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  94. package/dest/shared/gas_portal_test_harness.js +3 -3
  95. package/dest/shared/index.d.ts +2 -1
  96. package/dest/shared/index.d.ts.map +1 -1
  97. package/dest/shared/index.js +1 -0
  98. package/dest/shared/jest_setup.js +41 -1
  99. package/dest/shared/mock_state_view.d.ts +86 -0
  100. package/dest/shared/mock_state_view.d.ts.map +1 -0
  101. package/dest/shared/mock_state_view.js +186 -0
  102. package/dest/shared/submit-transactions.d.ts +4 -4
  103. package/dest/shared/submit-transactions.d.ts.map +1 -1
  104. package/dest/shared/submit-transactions.js +9 -11
  105. package/dest/shared/uniswap_l1_l2.d.ts +1 -1
  106. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  107. package/dest/shared/uniswap_l1_l2.js +27 -28
  108. package/dest/simulators/lending_simulator.d.ts +5 -1
  109. package/dest/simulators/lending_simulator.d.ts.map +1 -1
  110. package/dest/simulators/lending_simulator.js +4 -4
  111. package/dest/simulators/token_simulator.d.ts +1 -1
  112. package/dest/simulators/token_simulator.d.ts.map +1 -1
  113. package/dest/simulators/token_simulator.js +3 -24
  114. package/dest/spartan/setup_test_wallets.d.ts +12 -3
  115. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  116. package/dest/spartan/setup_test_wallets.js +107 -37
  117. package/dest/spartan/tx_metrics.d.ts +51 -2
  118. package/dest/spartan/tx_metrics.d.ts.map +1 -1
  119. package/dest/spartan/tx_metrics.js +334 -7
  120. package/dest/spartan/utils/bot.d.ts +28 -0
  121. package/dest/spartan/utils/bot.d.ts.map +1 -0
  122. package/dest/spartan/utils/bot.js +142 -0
  123. package/dest/spartan/utils/chaos.d.ts +79 -0
  124. package/dest/spartan/utils/chaos.d.ts.map +1 -0
  125. package/dest/spartan/utils/chaos.js +142 -0
  126. package/dest/spartan/utils/clients.d.ts +39 -0
  127. package/dest/spartan/utils/clients.d.ts.map +1 -0
  128. package/dest/spartan/utils/clients.js +90 -0
  129. package/dest/spartan/utils/config.d.ts +45 -0
  130. package/dest/spartan/utils/config.d.ts.map +1 -0
  131. package/dest/spartan/utils/config.js +23 -0
  132. package/dest/spartan/utils/health.d.ts +63 -0
  133. package/dest/spartan/utils/health.d.ts.map +1 -0
  134. package/dest/spartan/utils/health.js +202 -0
  135. package/dest/spartan/utils/helm.d.ts +15 -0
  136. package/dest/spartan/utils/helm.d.ts.map +1 -0
  137. package/dest/spartan/utils/helm.js +47 -0
  138. package/dest/spartan/utils/index.d.ts +11 -0
  139. package/dest/spartan/utils/index.d.ts.map +1 -0
  140. package/dest/spartan/utils/index.js +22 -0
  141. package/dest/spartan/utils/k8s.d.ts +128 -0
  142. package/dest/spartan/utils/k8s.d.ts.map +1 -0
  143. package/dest/spartan/utils/k8s.js +381 -0
  144. package/dest/spartan/utils/nodes.d.ts +40 -0
  145. package/dest/spartan/utils/nodes.d.ts.map +1 -0
  146. package/dest/spartan/utils/nodes.js +461 -0
  147. package/dest/spartan/utils/pod_logs.d.ts +25 -0
  148. package/dest/spartan/utils/pod_logs.d.ts.map +1 -0
  149. package/dest/spartan/utils/pod_logs.js +74 -0
  150. package/dest/spartan/utils/scripts.d.ts +30 -0
  151. package/dest/spartan/utils/scripts.d.ts.map +1 -0
  152. package/dest/spartan/utils/scripts.js +81 -0
  153. package/dest/spartan/utils.d.ts +2 -253
  154. package/dest/spartan/utils.d.ts.map +1 -1
  155. package/dest/spartan/utils.js +1 -892
  156. package/dest/test-wallet/test_wallet.d.ts +76 -0
  157. package/dest/test-wallet/test_wallet.d.ts.map +1 -0
  158. package/dest/test-wallet/test_wallet.js +214 -0
  159. package/dest/test-wallet/utils.d.ts +41 -0
  160. package/dest/test-wallet/utils.d.ts.map +1 -0
  161. package/dest/test-wallet/utils.js +71 -0
  162. package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
  163. package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
  164. package/dest/test-wallet/wallet_worker_script.js +48 -0
  165. package/dest/test-wallet/worker_wallet.d.ts +52 -0
  166. package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
  167. package/dest/test-wallet/worker_wallet.js +151 -0
  168. package/dest/test-wallet/worker_wallet_schema.d.ts +274 -0
  169. package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
  170. package/dest/test-wallet/worker_wallet_schema.js +10 -0
  171. package/package.json +46 -43
  172. package/src/bench/client_flows/benchmark.ts +24 -2
  173. package/src/bench/client_flows/client_flows_benchmark.ts +148 -210
  174. package/src/bench/client_flows/config.ts +9 -1
  175. package/src/bench/utils.ts +15 -8
  176. package/src/e2e_blacklist_token_contract/blacklist_token_contract_test.ts +120 -145
  177. package/src/e2e_cross_chain_messaging/cross_chain_messaging_test.ts +103 -111
  178. package/src/e2e_deploy_contract/deploy_test.ts +22 -15
  179. package/src/e2e_epochs/epochs_test.ts +139 -91
  180. package/src/e2e_fees/bridging_race.notest.ts +4 -10
  181. package/src/e2e_fees/fees_test.ts +170 -224
  182. package/src/e2e_l1_publisher/write_json.ts +16 -13
  183. package/src/e2e_nested_contract/nested_contract_test.ts +35 -56
  184. package/src/e2e_p2p/inactivity_slash_test.ts +3 -3
  185. package/src/e2e_p2p/p2p_network.ts +196 -166
  186. package/src/e2e_p2p/reqresp/utils.ts +256 -0
  187. package/src/e2e_p2p/shared.ts +76 -23
  188. package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
  189. package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
  190. package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
  191. package/src/e2e_token_contract/token_contract_test.ts +121 -119
  192. package/src/fixtures/authwit_proxy.ts +50 -0
  193. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  194. package/src/fixtures/e2e_prover_test.ts +133 -171
  195. package/src/fixtures/elu_monitor.ts +126 -0
  196. package/src/fixtures/fixtures.ts +10 -0
  197. package/src/fixtures/ha_setup.ts +186 -0
  198. package/src/fixtures/index.ts +1 -0
  199. package/src/fixtures/setup.ts +903 -0
  200. package/src/fixtures/setup_p2p_test.ts +40 -44
  201. package/src/fixtures/token_utils.ts +10 -6
  202. package/src/fixtures/utils.ts +27 -901
  203. package/src/guides/up_quick_start.sh +3 -3
  204. package/src/quality_of_service/prometheus_client.ts +113 -0
  205. package/src/shared/cross_chain_test_harness.ts +24 -34
  206. package/src/shared/gas_portal_test_harness.ts +2 -2
  207. package/src/shared/index.ts +1 -0
  208. package/src/shared/jest_setup.ts +51 -1
  209. package/src/shared/mock_state_view.ts +188 -0
  210. package/src/shared/submit-transactions.ts +11 -16
  211. package/src/shared/uniswap_l1_l2.ts +49 -51
  212. package/src/simulators/lending_simulator.ts +6 -4
  213. package/src/simulators/token_simulator.ts +6 -30
  214. package/src/spartan/setup_test_wallets.ts +158 -25
  215. package/src/spartan/tx_metrics.ts +256 -10
  216. package/src/spartan/utils/bot.ts +188 -0
  217. package/src/spartan/utils/chaos.ts +253 -0
  218. package/src/spartan/utils/clients.ts +100 -0
  219. package/src/spartan/utils/config.ts +29 -0
  220. package/src/spartan/utils/health.ts +255 -0
  221. package/src/spartan/utils/helm.ts +84 -0
  222. package/src/spartan/utils/index.ts +71 -0
  223. package/src/spartan/utils/k8s.ts +535 -0
  224. package/src/spartan/utils/nodes.ts +543 -0
  225. package/src/spartan/utils/pod_logs.ts +99 -0
  226. package/src/spartan/utils/scripts.ts +99 -0
  227. package/src/spartan/utils.ts +1 -1158
  228. package/src/test-wallet/test_wallet.ts +294 -0
  229. package/src/test-wallet/utils.ts +112 -0
  230. package/src/test-wallet/wallet_worker_script.ts +60 -0
  231. package/src/test-wallet/worker_wallet.ts +213 -0
  232. package/src/test-wallet/worker_wallet_schema.ts +13 -0
  233. package/dest/fixtures/snapshot_manager.d.ts +0 -93
  234. package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
  235. package/dest/fixtures/snapshot_manager.js +0 -488
  236. package/src/fixtures/snapshot_manager.ts +0 -646
@@ -4,23 +4,23 @@ import { createLogger } from '@aztec/aztec.js/log';
4
4
  import { createExtendedL1Client } from '@aztec/ethereum/client';
5
5
  import { InboxContract, OutboxContract, RollupContract } from '@aztec/ethereum/contracts';
6
6
  import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
7
- import { CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
7
+ import { EpochNumber } from '@aztec/foundation/branded-types';
8
8
  import { sleep } from '@aztec/foundation/sleep';
9
9
  import { TestERC20Abi, TestERC20Bytecode } from '@aztec/l1-artifacts';
10
10
  import { TokenContract } from '@aztec/noir-contracts.js/Token';
11
11
  import { TokenBridgeContract } from '@aztec/noir-contracts.js/TokenBridge';
12
12
  import { MNEMONIC } from '../fixtures/fixtures.js';
13
- import { createSnapshotManager, deployAccounts, publicDeployAccounts } from '../fixtures/snapshot_manager.js';
13
+ import { deployAccounts, publicDeployAccounts, setup, teardown } from '../fixtures/setup.js';
14
14
  import { CrossChainTestHarness } from '../shared/cross_chain_test_harness.js';
15
- const { E2E_DATA_PATH: dataPath } = process.env;
16
15
  export class CrossChainMessagingTest {
17
- snapshotManager;
18
16
  requireEpochProven;
17
+ setupOptions;
18
+ deployL1ContractsArgs;
19
19
  logger;
20
+ context;
20
21
  aztecNode;
21
22
  aztecNodeConfig;
22
23
  aztecNodeAdmin;
23
- ctx;
24
24
  l1Client;
25
25
  wallet;
26
26
  ownerAddress;
@@ -37,27 +37,26 @@ export class CrossChainMessagingTest {
37
37
  deployL1ContractsValues;
38
38
  constructor(testName, opts = {}, deployL1ContractsArgs = {}){
39
39
  this.logger = createLogger(`e2e:e2e_cross_chain_messaging:${testName}`);
40
- this.snapshotManager = createSnapshotManager(`e2e_cross_chain_messaging/${testName}`, dataPath, opts, {
40
+ this.setupOptions = opts;
41
+ this.deployL1ContractsArgs = {
41
42
  initialValidators: [],
42
43
  ...deployL1ContractsArgs
43
- });
44
+ };
44
45
  this.requireEpochProven = opts.startProverNode ?? false;
45
46
  }
46
47
  async setup() {
47
- this.ctx = await this.snapshotManager.setup();
48
- this.aztecNode = this.ctx.aztecNode;
49
- this.wallet = this.ctx.wallet;
50
- this.aztecNodeConfig = this.ctx.aztecNodeConfig;
51
- this.cheatCodes = this.ctx.cheatCodes;
52
- this.deployL1ContractsValues = this.ctx.deployL1ContractsValues;
53
- this.aztecNodeAdmin = this.ctx.aztecNode;
54
- if (this.requireEpochProven) {
55
- // Turn off the watcher to prevent it from keep marking blocks as proven.
56
- this.ctx.watcher.setIsMarkingAsProven(false);
57
- }
48
+ this.logger.info('Setting up cross chain messaging test');
49
+ this.context = await setup(0, {
50
+ ...this.setupOptions,
51
+ fundSponsoredFPC: true,
52
+ skipAccountDeployment: true,
53
+ l1ContractsArgs: this.deployL1ContractsArgs
54
+ });
55
+ await this.applyBaseSetup();
58
56
  }
59
57
  async advanceToEpochProven(l2TxReceipt) {
60
- const epoch = await this.rollup.getEpochNumberForCheckpoint(CheckpointNumber.fromBlockNumber(l2TxReceipt.blockNumber));
58
+ const block = await this.aztecNode.getBlock(l2TxReceipt.blockNumber);
59
+ const epoch = await this.rollup.getEpochNumberForCheckpoint(block.checkpointNumber);
61
60
  // Warp to the next epoch.
62
61
  await this.cheatCodes.rollup.advanceToEpoch(EpochNumber(epoch + 1));
63
62
  // Wait for the tx to be proven.
@@ -73,53 +72,58 @@ export class CrossChainMessagingTest {
73
72
  await sleep(1000);
74
73
  }
75
74
  }
76
- snapshot = (name, apply, restore = ()=>Promise.resolve())=>this.snapshotManager.snapshot(name, apply, restore);
77
75
  async teardown() {
78
- await this.snapshotManager.teardown();
76
+ await teardown(this.context);
79
77
  }
80
- async applyBaseSnapshots() {
81
- // Note that we are using the same `wallet`, `aztecNodeConfig` and `aztecNode` across all snapshots.
82
- // This is to not have issues with different networks.
83
- await this.snapshotManager.snapshot('3_accounts', deployAccounts(3, this.logger), ({ deployedAccounts }, { wallet, aztecNodeConfig, aztecNode })=>{
84
- [this.ownerAddress, this.user1Address, this.user2Address] = deployedAccounts.map((a)=>a.address);
85
- this.wallet = wallet;
86
- this.aztecNode = aztecNode;
87
- this.aztecNodeConfig = aztecNodeConfig;
88
- return Promise.resolve();
89
- });
90
- await this.snapshotManager.snapshot('e2e_cross_chain_messaging', async ()=>{
91
- // Create the token contract state.
92
- // Move this account thing to addAccounts above?
93
- this.logger.verbose(`Public deploy accounts...`);
94
- await publicDeployAccounts(this.wallet, [
95
- this.ownerAddress,
96
- this.user1Address,
97
- this.user2Address
98
- ]);
99
- this.l1Client = createExtendedL1Client(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
100
- const underlyingERC20Address = await deployL1Contract(this.l1Client, TestERC20Abi, TestERC20Bytecode, [
101
- 'Underlying',
102
- 'UND',
103
- this.l1Client.account.address
104
- ]).then(({ address })=>address);
105
- this.logger.verbose(`Setting up cross chain harness...`);
106
- this.crossChainTestHarness = await CrossChainTestHarness.new(this.aztecNode, this.l1Client, this.wallet, this.ownerAddress, this.logger, underlyingERC20Address);
107
- this.logger.verbose(`L2 token deployed to: ${this.crossChainTestHarness.l2Token.address}`);
108
- return this.crossChainTestHarness.toCrossChainContext();
109
- }, (crossChainContext)=>{
110
- this.l2Token = TokenContract.at(crossChainContext.l2Token, this.wallet);
111
- this.l2Bridge = TokenBridgeContract.at(crossChainContext.l2Bridge, this.wallet);
112
- // There is an issue with the reviver so we are getting strings sometimes. Working around it here.
113
- this.ethAccount = EthAddress.fromString(crossChainContext.ethAccount.toString());
114
- const tokenPortalAddress = EthAddress.fromString(crossChainContext.tokenPortal.toString());
115
- const l1Client = createExtendedL1Client(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
116
- this.l1Client = l1Client;
117
- const l1Contracts = this.aztecNodeConfig.l1Contracts;
118
- this.rollup = new RollupContract(l1Client, l1Contracts.rollupAddress.toString());
119
- this.inbox = new InboxContract(l1Client, l1Contracts.inboxAddress.toString());
120
- this.outbox = new OutboxContract(l1Client, l1Contracts.outboxAddress.toString());
121
- this.crossChainTestHarness = new CrossChainTestHarness(this.aztecNode, this.logger, this.l2Token, this.l2Bridge, this.ethAccount, tokenPortalAddress, crossChainContext.underlying, l1Client, this.aztecNodeConfig.l1Contracts, this.wallet, this.ownerAddress);
122
- return Promise.resolve();
78
+ async applyBaseSetup() {
79
+ // Set up base context fields
80
+ this.aztecNode = this.context.aztecNodeService;
81
+ this.wallet = this.context.wallet;
82
+ this.aztecNodeConfig = this.context.config;
83
+ this.cheatCodes = this.context.cheatCodes;
84
+ this.deployL1ContractsValues = this.context.deployL1ContractsValues;
85
+ this.aztecNodeAdmin = this.context.aztecNodeService;
86
+ if (this.requireEpochProven) {
87
+ // Turn off the watcher to prevent it from keep marking blocks as proven.
88
+ this.context.watcher.setIsMarkingAsProven(false);
89
+ }
90
+ // Deploy 3 accounts
91
+ this.logger.info('Applying 3_accounts setup');
92
+ const { deployedAccounts } = await deployAccounts(3, this.logger)({
93
+ wallet: this.context.wallet,
94
+ initialFundedAccounts: this.context.initialFundedAccounts
123
95
  });
96
+ [this.ownerAddress, this.user1Address, this.user2Address] = deployedAccounts.map((a)=>a.address);
97
+ // Set up cross chain messaging
98
+ this.logger.info('Applying e2e_cross_chain_messaging setup');
99
+ // Create the token contract state.
100
+ this.logger.verbose(`Public deploy accounts...`);
101
+ await publicDeployAccounts(this.wallet, [
102
+ this.ownerAddress,
103
+ this.user1Address,
104
+ this.user2Address
105
+ ]);
106
+ this.l1Client = createExtendedL1Client(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
107
+ const underlyingERC20Address = await deployL1Contract(this.l1Client, TestERC20Abi, TestERC20Bytecode, [
108
+ 'Underlying',
109
+ 'UND',
110
+ this.l1Client.account.address
111
+ ]).then(({ address })=>address);
112
+ this.logger.verbose(`Setting up cross chain harness...`);
113
+ this.crossChainTestHarness = await CrossChainTestHarness.new(this.aztecNode, this.l1Client, this.wallet, this.ownerAddress, this.logger, underlyingERC20Address);
114
+ this.logger.verbose(`L2 token deployed to: ${this.crossChainTestHarness.l2Token.address}`);
115
+ const crossChainContext = this.crossChainTestHarness.toCrossChainContext();
116
+ this.l2Token = TokenContract.at(crossChainContext.l2Token, this.wallet);
117
+ this.l2Bridge = TokenBridgeContract.at(crossChainContext.l2Bridge, this.wallet);
118
+ // There is an issue with the reviver so we are getting strings sometimes. Working around it here.
119
+ this.ethAccount = EthAddress.fromString(crossChainContext.ethAccount.toString());
120
+ const tokenPortalAddress = EthAddress.fromString(crossChainContext.tokenPortal.toString());
121
+ const l1Client = createExtendedL1Client(this.aztecNodeConfig.l1RpcUrls, MNEMONIC);
122
+ this.l1Client = l1Client;
123
+ const l1Contracts = this.aztecNodeConfig.l1Contracts;
124
+ this.rollup = new RollupContract(l1Client, l1Contracts.rollupAddress.toString());
125
+ this.inbox = new InboxContract(l1Client, l1Contracts.inboxAddress.toString());
126
+ this.outbox = new OutboxContract(l1Client, l1Contracts.outboxAddress.toString());
127
+ this.crossChainTestHarness = new CrossChainTestHarness(this.aztecNode, this.logger, this.l2Token, this.l2Bridge, this.ethAccount, tokenPortalAddress, crossChainContext.underlying, l1Client, this.aztecNodeConfig.l1Contracts, this.wallet, this.ownerAddress);
124
128
  }
125
129
  }
@@ -8,9 +8,10 @@ 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';
11
+ import { type EndToEndContext } from '../fixtures/setup.js';
12
+ import type { TestWallet } from '../test-wallet/test_wallet.js';
12
13
  export declare class DeployTest {
13
- private snapshotManager;
14
+ context: EndToEndContext;
14
15
  logger: Logger;
15
16
  wallet: TestWallet;
16
17
  defaultAccountAddress: AztecAddress;
@@ -19,7 +20,7 @@ export declare class DeployTest {
19
20
  constructor(testName: string);
20
21
  setup(): Promise<this>;
21
22
  teardown(): Promise<void>;
22
- private applyInitialAccountSnapshot;
23
+ private applyInitialAccount;
23
24
  registerContract<T extends ContractBase>(wallet: Wallet, contractArtifact: ContractArtifactClass<T>, opts?: {
24
25
  salt?: Fr;
25
26
  publicKeys?: PublicKeys;
@@ -33,4 +34,4 @@ export type ContractArtifactClass<T extends ContractBase> = {
33
34
  at(address: AztecAddress, wallet: Wallet): T;
34
35
  artifact: ContractArtifact;
35
36
  };
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X3Rlc3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfZGVwbG95X2NvbnRyYWN0L2RlcGxveV90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUssWUFBWSxFQUE4QyxNQUFNLDJCQUEyQixDQUFDO0FBQzFHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN2RixPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN0RSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQU01RCxxQkFBYSxVQUFVO0lBQ3JCLE9BQU8sQ0FBQyxlQUFlLENBQW1CO0lBQ25DLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDZixNQUFNLEVBQUcsVUFBVSxDQUFDO0lBQ3BCLHFCQUFxQixFQUFHLFlBQVksQ0FBQztJQUNyQyxTQUFTLEVBQUcsU0FBUyxDQUFDO0lBQ3RCLGNBQWMsRUFBRyxjQUFjLENBQUM7SUFFdkMsWUFBWSxRQUFRLEVBQUUsTUFBTSxFQUczQjtJQUVLLEtBQUssa0JBTVY7SUFFSyxRQUFRLGtCQUViO1lBRWEsMkJBQTJCO0lBT25DLGdCQUFnQixDQUFDLENBQUMsU0FBUyxZQUFZLEVBQzNDLE1BQU0sRUFBRSxNQUFNLEVBQ2QsZ0JBQWdCLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQzFDLElBQUksR0FBRTtRQUNKLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNWLFVBQVUsQ0FBQyxFQUFFLFVBQVUsQ0FBQztRQUN4QixRQUFRLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNqQixlQUFlLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDekIsUUFBUSxDQUFDLEVBQUUsWUFBWSxDQUFDO0tBQ3BCLEdBQ0wsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQVdaO0NBQ0Y7QUFFRCxNQUFNLE1BQU0sd0JBQXdCLEdBQUcsVUFBVSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFFbEcsTUFBTSxNQUFNLHFCQUFxQixDQUFDLENBQUMsU0FBUyxZQUFZLElBQUk7SUFDMUQsRUFBRSxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDN0MsUUFBUSxFQUFFLGdCQUFnQixDQUFDO0NBQzVCLENBQUMifQ==
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwbG95X3Rlc3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfZGVwbG95X2NvbnRyYWN0L2RlcGxveV90ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUssWUFBWSxFQUE4QyxNQUFNLDJCQUEyQixDQUFDO0FBQzFHLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0scUJBQXFCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUN2RixPQUFPLEtBQUssRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV0RSxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQW1DLE1BQU0sc0JBQXNCLENBQUM7QUFDN0YsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFaEUscUJBQWEsVUFBVTtJQUNkLE9BQU8sRUFBRyxlQUFlLENBQUM7SUFDMUIsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUNmLE1BQU0sRUFBRyxVQUFVLENBQUM7SUFDcEIscUJBQXFCLEVBQUcsWUFBWSxDQUFDO0lBQ3JDLFNBQVMsRUFBRyxTQUFTLENBQUM7SUFDdEIsY0FBYyxFQUFHLGNBQWMsQ0FBQztJQUV2QyxZQUFZLFFBQVEsRUFBRSxNQUFNLEVBRTNCO0lBRUssS0FBSyxrQkFXVjtJQUVLLFFBQVEsa0JBRWI7WUFFYSxtQkFBbUI7SUFZM0IsZ0JBQWdCLENBQUMsQ0FBQyxTQUFTLFlBQVksRUFDM0MsTUFBTSxFQUFFLE1BQU0sRUFDZCxnQkFBZ0IsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFDMUMsSUFBSSxHQUFFO1FBQ0osSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1YsVUFBVSxDQUFDLEVBQUUsVUFBVSxDQUFDO1FBQ3hCLFFBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLGVBQWUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUN6QixRQUFRLENBQUMsRUFBRSxZQUFZLENBQUM7S0FDcEIsR0FDTCxPQUFPLENBQUMsQ0FBQyxDQUFDLENBV1o7Q0FDRjtBQUVELE1BQU0sTUFBTSx3QkFBd0IsR0FBRyxVQUFVLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztBQUVsRyxNQUFNLE1BQU0scUJBQXFCLENBQUMsQ0FBQyxTQUFTLFlBQVksSUFBSTtJQUMxRCxFQUFFLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM3QyxRQUFRLEVBQUUsZ0JBQWdCLENBQUM7Q0FDNUIsQ0FBQyJ9
@@ -1 +1 @@
1
- {"version":3,"file":"deploy_test.d.ts","sourceRoot":"","sources":["../../src/e2e_deploy_contract/deploy_test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,KAAK,YAAY,EAA8C,MAAM,2BAA2B,CAAC;AAC1G,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAM5D,qBAAa,UAAU;IACrB,OAAO,CAAC,eAAe,CAAmB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAG,UAAU,CAAC;IACpB,qBAAqB,EAAG,YAAY,CAAC;IACrC,SAAS,EAAG,SAAS,CAAC;IACtB,cAAc,EAAG,cAAc,CAAC;IAEvC,YAAY,QAAQ,EAAE,MAAM,EAG3B;IAEK,KAAK,kBAMV;IAEK,QAAQ,kBAEb;YAEa,2BAA2B;IAOnC,gBAAgB,CAAC,CAAC,SAAS,YAAY,EAC3C,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAC1C,IAAI,GAAE;QACJ,IAAI,CAAC,EAAE,EAAE,CAAC;QACV,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,YAAY,CAAC;KACpB,GACL,OAAO,CAAC,CAAC,CAAC,CAWZ;CACF;AAED,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AAElG,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,YAAY,IAAI;IAC1D,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC;IAC7C,QAAQ,EAAE,gBAAgB,CAAC;CAC5B,CAAC"}
1
+ {"version":3,"file":"deploy_test.d.ts","sourceRoot":"","sources":["../../src/e2e_deploy_contract/deploy_test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,KAAK,YAAY,EAA8C,MAAM,2BAA2B,CAAC;AAC1G,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE,OAAO,EAAE,KAAK,eAAe,EAAmC,MAAM,sBAAsB,CAAC;AAC7F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAEhE,qBAAa,UAAU;IACd,OAAO,EAAG,eAAe,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAG,UAAU,CAAC;IACpB,qBAAqB,EAAG,YAAY,CAAC;IACrC,SAAS,EAAG,SAAS,CAAC;IACtB,cAAc,EAAG,cAAc,CAAC;IAEvC,YAAY,QAAQ,EAAE,MAAM,EAE3B;IAEK,KAAK,kBAWV;IAEK,QAAQ,kBAEb;YAEa,mBAAmB;IAY3B,gBAAgB,CAAC,CAAC,SAAS,YAAY,EAC3C,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAC1C,IAAI,GAAE;QACJ,IAAI,CAAC,EAAE,EAAE,CAAC;QACV,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;QACjB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,YAAY,CAAC;KACpB,GACL,OAAO,CAAC,CAAC,CAAC,CAWZ;CACF;AAED,MAAM,MAAM,wBAAwB,GAAG,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;AAElG,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,YAAY,IAAI;IAC1D,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC;IAC7C,QAAQ,EAAE,gBAAgB,CAAC;CAC5B,CAAC"}
@@ -1,10 +1,9 @@
1
1
  import { getContractInstanceFromInstantiationParams } from '@aztec/aztec.js/contracts';
2
2
  import { Fr } from '@aztec/aztec.js/fields';
3
3
  import { createLogger } from '@aztec/aztec.js/log';
4
- import { createSnapshotManager, deployAccounts } from '../fixtures/snapshot_manager.js';
5
- const { E2E_DATA_PATH: dataPath } = process.env;
4
+ import { deployAccounts, setup, teardown } from '../fixtures/setup.js';
6
5
  export class DeployTest {
7
- snapshotManager;
6
+ context;
8
7
  logger;
9
8
  wallet;
10
9
  defaultAccountAddress;
@@ -12,23 +11,29 @@ export class DeployTest {
12
11
  aztecNodeAdmin;
13
12
  constructor(testName){
14
13
  this.logger = createLogger(`e2e:e2e_deploy_contract:${testName}`);
15
- this.snapshotManager = createSnapshotManager(`e2e_deploy_contract/${testName}`, dataPath);
16
14
  }
17
15
  async setup() {
18
- await this.applyInitialAccountSnapshot();
19
- const context = await this.snapshotManager.setup();
20
- ({ aztecNode: this.aztecNode, wallet: this.wallet } = context);
21
- this.aztecNodeAdmin = context.aztecNode;
16
+ this.logger.info('Setting up test environment');
17
+ this.context = await setup(0, {
18
+ fundSponsoredFPC: true,
19
+ skipAccountDeployment: true
20
+ });
21
+ this.aztecNode = this.context.aztecNodeService;
22
+ this.wallet = this.context.wallet;
23
+ this.aztecNodeAdmin = this.context.aztecNodeService;
24
+ await this.applyInitialAccount();
22
25
  return this;
23
26
  }
24
27
  async teardown() {
25
- await this.snapshotManager.teardown();
28
+ await teardown(this.context);
26
29
  }
27
- async applyInitialAccountSnapshot() {
28
- await this.snapshotManager.snapshot('initial_account', deployAccounts(1, this.logger), ({ deployedAccounts })=>{
29
- this.defaultAccountAddress = deployedAccounts[0].address;
30
- return Promise.resolve();
30
+ async applyInitialAccount() {
31
+ this.logger.info('Applying initial account setup');
32
+ const { deployedAccounts } = await deployAccounts(1, this.logger)({
33
+ wallet: this.context.wallet,
34
+ initialFundedAccounts: this.context.initialFundedAccounts
31
35
  });
36
+ this.defaultAccountAddress = deployedAccounts[0].address;
32
37
  }
33
38
  async registerContract(wallet, contractArtifact, opts = {}) {
34
39
  const { salt, publicKeys, initArgs, constructorName, deployer } = opts;
@@ -4,21 +4,27 @@ import type { Logger } from '@aztec/aztec.js/log';
4
4
  import type { Wallet } from '@aztec/aztec.js/wallet';
5
5
  import { EpochCache } from '@aztec/epoch-cache';
6
6
  import { RollupContract } from '@aztec/ethereum/contracts';
7
- import { ChainMonitor, type Delayer } from '@aztec/ethereum/test';
7
+ import { Delayer } from '@aztec/ethereum/l1-tx-utils';
8
+ import { ChainMonitor } from '@aztec/ethereum/test';
8
9
  import type { ExtendedViemWalletClient } from '@aztec/ethereum/types';
9
10
  import { BlockNumber, CheckpointNumber } from '@aztec/foundation/branded-types';
10
11
  import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
11
- import { ProverNode, type ProverNodeConfig } from '@aztec/prover-node';
12
+ import { TestContract } from '@aztec/noir-test-contracts.js/Test';
13
+ import type { ProverNodeConfig } from '@aztec/prover-node';
14
+ import type { PXEConfig } from '@aztec/pxe/config';
12
15
  import { type SequencerClient, type SequencerEvents } from '@aztec/sequencer-client';
13
16
  import { type BlockParameter, EthAddress } from '@aztec/stdlib/block';
14
17
  import { type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
18
+ import type { SlashingProtectionDatabase } from '@aztec/validator-ha-signer/types';
15
19
  import { type EndToEndContext, type SetupOptions } from '../fixtures/utils.js';
16
- export declare const WORLD_STATE_BLOCK_HISTORY = 2;
20
+ export declare const WORLD_STATE_CHECKPOINT_HISTORY = 2;
17
21
  export declare const WORLD_STATE_BLOCK_CHECK_INTERVAL = 50;
18
22
  export declare const ARCHIVER_POLL_INTERVAL = 50;
19
23
  export declare const DEFAULT_L1_BLOCK_TIME: number;
20
24
  export type EpochsTestOpts = Partial<SetupOptions> & {
21
25
  numberOfAccounts?: number;
26
+ pxeOpts?: Partial<PXEConfig>;
27
+ aztecSlotDurationInL1Slots?: number;
22
28
  };
23
29
  export type TrackedSequencerEvent = {
24
30
  [K in keyof SequencerEvents]: Parameters<SequencerEvents[K]>[0] & {
@@ -42,7 +48,7 @@ export declare class EpochsTestContext {
42
48
  epochCache: EpochCache;
43
49
  proverDelayer: Delayer;
44
50
  sequencerDelayer: Delayer;
45
- proverNodes: ProverNode[];
51
+ proverNodes: AztecNodeService[];
46
52
  nodes: AztecNodeService[];
47
53
  epochDuration: number;
48
54
  L1_BLOCK_TIME_IN_S: number;
@@ -59,11 +65,11 @@ export declare class EpochsTestContext {
59
65
  teardown(): Promise<void>;
60
66
  createProverNode(opts?: {
61
67
  dontStart?: boolean;
62
- } & Partial<ProverNodeConfig>): Promise<ProverNode>;
68
+ } & Partial<ProverNodeConfig>): Promise<AztecNodeService>;
63
69
  createNonValidatorNode(opts?: Partial<AztecNodeConfig>): Promise<AztecNodeService>;
64
70
  createValidatorNode(privateKeys: `0x${string}`[], opts?: Partial<AztecNodeConfig> & {
65
- txDelayerMaxInclusionTimeIntoSlot?: number;
66
71
  dontStartSequencer?: boolean;
72
+ slashingProtectionDb?: SlashingProtectionDatabase;
67
73
  }): Promise<AztecNodeService>;
68
74
  private createNode;
69
75
  private getNextPrivateKey;
@@ -79,6 +85,8 @@ export declare class EpochsTestContext {
79
85
  waitForNodeToSync(blockNumber: BlockNumber, type: 'proven' | 'finalized' | 'historic'): Promise<void>;
80
86
  /** Registers the SpamContract on the given wallet. */
81
87
  registerSpamContract(wallet: Wallet, salt?: Fr): Promise<SpamContract>;
88
+ /** Registers the TestContract on the given wallet. */
89
+ registerTestContract(wallet: Wallet, salt?: Fr): Promise<TestContract>;
82
90
  /** Creates an L1 client using a fresh account with funds from anvil, with a tx delayer already set up. */
83
91
  createL1Client(): Promise<{
84
92
  client: ExtendedViemWalletClient;
@@ -86,9 +94,11 @@ export declare class EpochsTestContext {
86
94
  }>;
87
95
  /** Verifies whether the given block number is found on the aztec node. */
88
96
  verifyHistoricBlock(blockNumber: BlockParameter, expectedSuccess: boolean): Promise<void>;
97
+ /** Verifies at least one checkpoint has the target number of blocks (for MBPS validation). */
98
+ assertMultipleBlocksPerSlot(targetBlockCount: number): Promise<void>;
89
99
  watchSequencerEvents(sequencers: SequencerClient[], getMetadata?: (i: number) => Record<string, any>): {
90
100
  failEvents: TrackedSequencerEvent[];
91
101
  stateChanges: TrackedSequencerEvent[];
92
102
  };
93
103
  }
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2hzX3Rlc3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfZXBvY2hzL2Vwb2Noc190ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRzNFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxZQUFZLEVBQWtCLEtBQUssT0FBTyxFQUFxQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3JILE9BQU8sS0FBSyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBTTdGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssZ0JBQWdCLEVBQXVCLE1BQU0sb0JBQW9CLENBQUM7QUFFNUYsT0FBTyxFQUNMLEtBQUssZUFBZSxFQUNwQixLQUFLLGVBQWUsRUFHckIsTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEVBQUUsS0FBSyxjQUFjLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLEtBQUssaUJBQWlCLEVBQXVDLE1BQU0sNkJBQTZCLENBQUM7QUFPMUcsT0FBTyxFQUNMLEtBQUssZUFBZSxFQUNwQixLQUFLLFlBQVksRUFJ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
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXBvY2hzX3Rlc3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfZXBvY2hzL2Vwb2Noc190ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRzNFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxPQUFPLEVBQThELE1BQU0sNkJBQTZCLENBQUM7QUFDbEgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBTTdGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFbEUsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMzRCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQUUsS0FBSyxlQUFlLEVBQWtCLE1BQU0seUJBQXlCLENBQUM7QUFDckcsT0FBTyxFQUFFLEtBQUssY0FBYyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFC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
@@ -1 +1 @@
1
- {"version":3,"file":"epochs_test.d.ts","sourceRoot":"","sources":["../../src/e2e_epochs/epochs_test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"epochs_test.d.ts","sourceRoot":"","sources":["../../src/e2e_epochs/epochs_test.ts"],"names":[],"mappings":"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"}
@@ -7,14 +7,16 @@ import { EpochCache } from '@aztec/epoch-cache';
7
7
  import { createExtendedL1Client } from '@aztec/ethereum/client';
8
8
  import { DefaultL1ContractsConfig } from '@aztec/ethereum/config';
9
9
  import { RollupContract } from '@aztec/ethereum/contracts';
10
- import { ChainMonitor, DelayedTxUtils, waitUntilL1Timestamp, withDelayer } from '@aztec/ethereum/test';
11
- import { EpochNumber } from '@aztec/foundation/branded-types';
10
+ import { createDelayer, waitUntilL1Timestamp, wrapClientWithDelayer } from '@aztec/ethereum/l1-tx-utils';
11
+ import { ChainMonitor } from '@aztec/ethereum/test';
12
+ import { CheckpointNumber, EpochNumber } from '@aztec/foundation/branded-types';
12
13
  import { SecretValue } from '@aztec/foundation/config';
13
14
  import { randomBytes } from '@aztec/foundation/crypto/random';
14
- import { withLogNameSuffix } from '@aztec/foundation/log';
15
+ import { withLoggerBindings } from '@aztec/foundation/log/server';
15
16
  import { retryUntil } from '@aztec/foundation/retry';
16
17
  import { sleep } from '@aztec/foundation/sleep';
17
18
  import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
19
+ import { TestContract } from '@aztec/noir-test-contracts.js/Test';
18
20
  import { getMockPubSubP2PServiceFactory } from '@aztec/p2p/test-helpers';
19
21
  import { SequencerState } from '@aztec/sequencer-client';
20
22
  import { EthAddress } from '@aztec/stdlib/block';
@@ -23,7 +25,7 @@ import { tryStop } from '@aztec/stdlib/interfaces/server';
23
25
  import { join } from 'path';
24
26
  import { privateKeyToAccount } from 'viem/accounts';
25
27
  import { createAndSyncProverNode, getPrivateKeyFromIndex, setup } from '../fixtures/utils.js';
26
- export const WORLD_STATE_BLOCK_HISTORY = 2;
28
+ export const WORLD_STATE_CHECKPOINT_HISTORY = 2;
27
29
  export const WORLD_STATE_BLOCK_CHECK_INTERVAL = 50;
28
30
  export const ARCHIVER_POLL_INTERVAL = 50;
29
31
  export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
@@ -54,7 +56,7 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
54
56
  static getSlotDurations(opts = {}) {
55
57
  const envEthereumSlotDuration = process.env.L1_BLOCK_TIME ? parseInt(process.env.L1_BLOCK_TIME) : DEFAULT_L1_BLOCK_TIME;
56
58
  const ethereumSlotDuration = opts.ethereumSlotDuration ?? envEthereumSlotDuration;
57
- const aztecSlotDuration = opts.aztecSlotDuration ?? ethereumSlotDuration * 2;
59
+ const aztecSlotDuration = opts.aztecSlotDuration ?? (opts.aztecSlotDurationInL1Slots ?? 2) * ethereumSlotDuration;
58
60
  const aztecEpochDuration = opts.aztecEpochDuration ?? 6;
59
61
  const aztecProofSubmissionEpochs = opts.aztecProofSubmissionEpochs ?? 1;
60
62
  const l1PublishingTime = opts.l1PublishingTime ?? 1;
@@ -90,11 +92,16 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
90
92
  // using the prover's eth address if the proverId is used for something in the rollup contract
91
93
  // Use numeric EthAddress for deterministic prover id
92
94
  proverId: EthAddress.fromNumber(1),
93
- worldStateBlockHistory: WORLD_STATE_BLOCK_HISTORY,
95
+ worldStateCheckpointHistory: WORLD_STATE_CHECKPOINT_HISTORY,
94
96
  exitDelaySeconds: DefaultL1ContractsConfig.exitDelaySeconds,
95
97
  slasherFlavor: 'none',
96
98
  l1PublishingTime,
97
99
  ...opts
100
+ }, // Use checkpointed chain tip for PXE by default to avoid issues with blocks being dropped due to pruned anchor blocks.
101
+ // Can be overridden via opts.pxeOpts.
102
+ {
103
+ syncChainTip: 'checkpointed',
104
+ ...opts.pxeOpts
98
105
  });
99
106
  this.context = context;
100
107
  this.proverNodes = context.proverNode ? [
@@ -111,10 +118,8 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
111
118
  });
112
119
  // Loop that tracks L1 and L2 block numbers and logs whenever there's a new one.
113
120
  this.monitor = new ChainMonitor(this.rollup, context.dateProvider, this.logger).start();
114
- // This is hideous.
115
- // We ought to have a definite reference to the l1TxUtils that we're using in both places, provided by the test context.
116
- this.proverDelayer = context.proverNode ? context.proverNode.publisher.l1TxUtils.delayer : undefined;
117
- this.sequencerDelayer = context.sequencer ? context.sequencer.sequencer.publisher.l1TxUtils.delayer : undefined;
121
+ this.proverDelayer = context.proverDelayer;
122
+ this.sequencerDelayer = context.sequencerDelayer;
118
123
  if (context.proverNode && !this.proverDelayer || context.sequencer && !this.sequencerDelayer) {
119
124
  throw new Error(`Could not find prover or sequencer delayer`);
120
125
  }
@@ -126,7 +131,9 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
126
131
  l1StartBlock: await this.rollup.getL1StartBlock(),
127
132
  l1GenesisTime: await this.rollup.getL1GenesisTime(),
128
133
  ethereumSlotDuration,
129
- proofSubmissionEpochs: Number(await this.rollup.getProofSubmissionEpochs())
134
+ proofSubmissionEpochs: Number(await this.rollup.getProofSubmissionEpochs()),
135
+ targetCommitteeSize: await this.rollup.getTargetCommitteeSize(),
136
+ rollupManaLimit: Number(await this.rollup.getManaLimit())
130
137
  };
131
138
  this.logger.info(`L2 genesis at L1 block ${this.constants.l1StartBlock} (timestamp ${this.constants.l1GenesisTime})`);
132
139
  }
@@ -139,16 +146,29 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
139
146
  async createProverNode(opts = {}) {
140
147
  this.logger.warn('Creating and syncing a simulated prover node...');
141
148
  const proverNodePrivateKey = this.getNextPrivateKey();
142
- const suffix = (this.proverNodes.length + 1).toString();
143
- const proverNode = await withLogNameSuffix(suffix, ()=>createAndSyncProverNode(proverNodePrivateKey, {
144
- ...this.context.config
145
- }, {
146
- dataDirectory: join(this.context.config.dataDirectory, randomBytes(8).toString('hex')),
147
- proverId: EthAddress.fromNumber(parseInt(suffix, 10)),
149
+ const proverIndex = this.proverNodes.length + 1;
150
+ const { mockGossipSubNetwork } = this.context;
151
+ const { proverNode } = await withLoggerBindings({
152
+ actor: `prover-${proverIndex}`
153
+ }, ()=>createAndSyncProverNode(proverNodePrivateKey, {
154
+ ...this.context.config,
155
+ p2pEnabled: this.context.config.p2pEnabled || mockGossipSubNetwork !== undefined,
156
+ proverId: EthAddress.fromNumber(proverIndex),
148
157
  dontStart: opts.dontStart,
149
158
  ...opts
150
- }, this.context.aztecNode, undefined, {
151
- dateProvider: this.context.dateProvider
159
+ }, {
160
+ dataDirectory: join(this.context.config.dataDirectory, randomBytes(8).toString('hex'))
161
+ }, {
162
+ dateProvider: this.context.dateProvider,
163
+ p2pClientDeps: {
164
+ p2pServiceFactory: mockGossipSubNetwork ? getMockPubSubP2PServiceFactory(mockGossipSubNetwork) : undefined,
165
+ rpcTxProviders: [
166
+ this.context.aztecNode
167
+ ]
168
+ }
169
+ }, {
170
+ prefilledPublicData: this.context.prefilledPublicData ?? [],
171
+ dontStart: opts.dontStart
152
172
  }));
153
173
  this.proverNodes.push(proverNode);
154
174
  return proverNode;
@@ -169,7 +189,8 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
169
189
  });
170
190
  }
171
191
  async createNode(opts = {}) {
172
- const suffix = (this.nodes.length + 1).toString();
192
+ const nodeIndex = this.nodes.length + 1;
193
+ const actorPrefix = opts.disableValidator ? 'node' : 'validator';
173
194
  const { mockGossipSubNetwork } = this.context;
174
195
  const resolvedConfig = {
175
196
  ...this.context.config,
@@ -177,35 +198,25 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
177
198
  };
178
199
  const p2pEnabled = resolvedConfig.p2pEnabled || mockGossipSubNetwork !== undefined;
179
200
  const p2pIp = resolvedConfig.p2pIp ?? (p2pEnabled ? '127.0.0.1' : undefined);
180
- const node = await withLogNameSuffix(suffix, ()=>AztecNodeService.createAndSync({
201
+ const node = await withLoggerBindings({
202
+ actor: `${actorPrefix}-${nodeIndex}`
203
+ }, ()=>AztecNodeService.createAndSync({
181
204
  ...resolvedConfig,
182
205
  dataDirectory: join(this.context.config.dataDirectory, randomBytes(8).toString('hex')),
183
206
  validatorPrivateKeys: opts.validatorPrivateKeys ?? new SecretValue([]),
207
+ nodeId: resolvedConfig.nodeId || `${actorPrefix}-${nodeIndex}`,
184
208
  p2pEnabled,
185
209
  p2pIp
186
210
  }, {
187
211
  dateProvider: this.context.dateProvider,
188
212
  p2pClientDeps: {
189
213
  p2pServiceFactory: mockGossipSubNetwork ? getMockPubSubP2PServiceFactory(mockGossipSubNetwork) : undefined
190
- }
214
+ },
215
+ slashingProtectionDb: opts.slashingProtectionDb
191
216
  }, {
192
217
  prefilledPublicData: this.context.prefilledPublicData,
193
218
  ...opts
194
219
  }));
195
- // REFACTOR: We're getting too much into the internals of the sequencer here.
196
- // We should have a single method for constructing an aztec node that returns a TestAztecNodeService
197
- // which directly exposes the delayer and sets any test config.
198
- if (opts.txDelayerMaxInclusionTimeIntoSlot !== undefined) {
199
- this.logger.info(`Setting tx delayer max inclusion time into slot to ${opts.txDelayerMaxInclusionTimeIntoSlot} seconds`);
200
- // 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.
201
- // The delayer needs a wallet (a client that can sign), so we have to create one here.
202
- const l1Client = createExtendedL1Client(resolvedConfig.l1RpcUrls, resolvedConfig.publisherPrivateKeys[0].getValue());
203
- const sequencer = node.getSequencer();
204
- const publisher = sequencer.sequencer.publisher;
205
- const delayed = DelayedTxUtils.fromL1TxUtils(publisher.l1TxUtils, this.L1_BLOCK_TIME_IN_S, l1Client);
206
- delayed.delayer.setMaxInclusionTimeIntoSlot(opts.txDelayerMaxInclusionTimeIntoSlot);
207
- publisher.l1TxUtils = delayed;
208
- }
209
220
  this.nodes.push(node);
210
221
  return node;
211
222
  }
@@ -233,7 +244,9 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
233
244
  this.logger.info(`Waiting until last slot of submission window for epoch ${epochNumber} at ${date}`, {
234
245
  oneSlotBefore
235
246
  });
236
- await waitUntilL1Timestamp(this.l1Client, oneSlotBefore);
247
+ // Use a timeout that accounts for the full proof submission window
248
+ const proofSubmissionWindowDuration = this.constants.proofSubmissionEpochs * this.epochDuration * this.L2_SLOT_DURATION_IN_S;
249
+ await waitUntilL1Timestamp(this.l1Client, oneSlotBefore, undefined, proofSubmissionWindowDuration * 2);
237
250
  }
238
251
  /** Waits for the aztec node to sync to the target block number. */ async waitForNodeToSync(blockNumber, type) {
239
252
  const waitTime = ARCHIVER_POLL_INTERVAL + WORLD_STATE_BLOCK_CHECK_INTERVAL;
@@ -270,12 +283,25 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
270
283
  await wallet.registerContract(instance, SpamContract.artifact);
271
284
  return SpamContract.at(instance.address, wallet);
272
285
  }
286
+ /** Registers the TestContract on the given wallet. */ async registerTestContract(wallet, salt = Fr.ZERO) {
287
+ const instance = await getContractInstanceFromInstantiationParams(TestContract.artifact, {
288
+ constructorArgs: [],
289
+ constructorArtifact: undefined,
290
+ salt,
291
+ publicKeys: undefined,
292
+ deployer: undefined
293
+ });
294
+ await wallet.registerContract(instance, TestContract.artifact);
295
+ return TestContract.at(instance.address, wallet);
296
+ }
273
297
  /** Creates an L1 client using a fresh account with funds from anvil, with a tx delayer already set up. */ async createL1Client() {
274
- const { client, delayer } = withDelayer(createExtendedL1Client([
298
+ const rawClient = createExtendedL1Client([
275
299
  ...this.l1Client.chain.rpcUrls.default.http
276
- ], privateKeyToAccount(this.getNextPrivateKey()), this.l1Client.chain), this.context.dateProvider, {
300
+ ], privateKeyToAccount(this.getNextPrivateKey()), this.l1Client.chain);
301
+ const delayer = createDelayer(this.context.dateProvider, {
277
302
  ethereumSlotDuration: this.L1_BLOCK_TIME_IN_S
278
- });
303
+ }, {});
304
+ const client = wrapClientWithDelayer(rawClient, delayer);
279
305
  expect(await client.getBalance({
280
306
  address: client.account.address
281
307
  })).toBeGreaterThan(0n);
@@ -293,6 +319,30 @@ export const DEFAULT_L1_BLOCK_TIME = process.env.CI ? 12 : 8;
293
319
  ]).then((_)=>true).catch((_)=>false);
294
320
  expect(result).toBe(expectedSuccess);
295
321
  }
322
+ /** Verifies at least one checkpoint has the target number of blocks (for MBPS validation). */ async assertMultipleBlocksPerSlot(targetBlockCount) {
323
+ const archiver = this.context.aztecNode.getBlockSource();
324
+ const checkpoints = await archiver.getCheckpoints(CheckpointNumber(1), 50);
325
+ this.logger.warn(`Retrieved ${checkpoints.length} checkpoints from archiver`, {
326
+ checkpoints: checkpoints.map((pc)=>pc.checkpoint.getStats())
327
+ });
328
+ let expectedBlockNumber = checkpoints[0].checkpoint.blocks[0].number;
329
+ let targetFound = false;
330
+ for (const checkpoint of checkpoints){
331
+ const blockCount = checkpoint.checkpoint.blocks.length;
332
+ targetFound = targetFound || blockCount >= targetBlockCount;
333
+ this.logger.verbose(`Checkpoint ${checkpoint.checkpoint.number} has ${blockCount} blocks`, {
334
+ checkpoint: checkpoint.checkpoint.getStats()
335
+ });
336
+ for(let i = 0; i < blockCount; i++){
337
+ const block = checkpoint.checkpoint.blocks[i];
338
+ expect(block.indexWithinCheckpoint).toBe(i);
339
+ expect(block.checkpointNumber).toBe(checkpoint.checkpoint.number);
340
+ expect(block.number).toBe(expectedBlockNumber);
341
+ expectedBlockNumber++;
342
+ }
343
+ }
344
+ expect(targetFound).toBe(true);
345
+ }
296
346
  watchSequencerEvents(sequencers, getMetadata = ()=>({})) {
297
347
  const stateChanges = [];
298
348
  const failEvents = [];