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

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 (234) 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 +121 -136
  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 +17 -12
  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 +16 -11
  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 +90 -70
  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 +15 -7
  24. package/dest/e2e_epochs/epochs_test.d.ts.map +1 -1
  25. package/dest/e2e_epochs/epochs_test.js +87 -40
  26. package/dest/e2e_fees/bridging_race.notest.js +3 -5
  27. package/dest/e2e_fees/fees_test.d.ts +14 -14
  28. package/dest/e2e_fees/fees_test.d.ts.map +1 -1
  29. package/dest/e2e_fees/fees_test.js +125 -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_nested_contract/nested_contract_test.d.ts +6 -9
  34. package/dest/e2e_nested_contract/nested_contract_test.d.ts.map +1 -1
  35. package/dest/e2e_nested_contract/nested_contract_test.js +31 -39
  36. package/dest/e2e_p2p/inactivity_slash_test.d.ts +3 -3
  37. package/dest/e2e_p2p/inactivity_slash_test.d.ts.map +1 -1
  38. package/dest/e2e_p2p/inactivity_slash_test.js +3 -3
  39. package/dest/e2e_p2p/p2p_network.d.ts +8 -7
  40. package/dest/e2e_p2p/p2p_network.d.ts.map +1 -1
  41. package/dest/e2e_p2p/p2p_network.js +127 -106
  42. package/dest/e2e_p2p/reqresp/utils.d.ts +22 -0
  43. package/dest/e2e_p2p/reqresp/utils.d.ts.map +1 -0
  44. package/dest/e2e_p2p/reqresp/utils.js +177 -0
  45. package/dest/e2e_p2p/shared.d.ts +6 -6
  46. package/dest/e2e_p2p/shared.d.ts.map +1 -1
  47. package/dest/e2e_p2p/shared.js +18 -21
  48. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts +2 -0
  49. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.d.ts.map +1 -0
  50. package/dest/e2e_storage_proof/fixtures/storage_proof_fetcher.js +184 -0
  51. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts +18 -0
  52. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.d.ts.map +1 -0
  53. package/dest/e2e_storage_proof/fixtures/storage_proof_fixture.js +120 -0
  54. package/dest/e2e_token_contract/token_contract_test.d.ts +19 -10
  55. package/dest/e2e_token_contract/token_contract_test.d.ts.map +1 -1
  56. package/dest/e2e_token_contract/token_contract_test.js +99 -91
  57. package/dest/fixtures/authwit_proxy.d.ts +15 -0
  58. package/dest/fixtures/authwit_proxy.d.ts.map +1 -0
  59. package/dest/fixtures/authwit_proxy.js +30 -0
  60. package/dest/fixtures/e2e_prover_test.d.ts +11 -17
  61. package/dest/fixtures/e2e_prover_test.d.ts.map +1 -1
  62. package/dest/fixtures/e2e_prover_test.js +112 -128
  63. package/dest/fixtures/fixtures.d.ts +5 -1
  64. package/dest/fixtures/fixtures.d.ts.map +1 -1
  65. package/dest/fixtures/fixtures.js +6 -0
  66. package/dest/fixtures/ha_setup.d.ts +71 -0
  67. package/dest/fixtures/ha_setup.d.ts.map +1 -0
  68. package/dest/fixtures/ha_setup.js +116 -0
  69. package/dest/fixtures/index.d.ts +2 -1
  70. package/dest/fixtures/index.d.ts.map +1 -1
  71. package/dest/fixtures/index.js +1 -0
  72. package/dest/fixtures/setup.d.ts +235 -0
  73. package/dest/fixtures/setup.d.ts.map +1 -0
  74. package/dest/fixtures/setup.js +605 -0
  75. package/dest/fixtures/setup_p2p_test.d.ts +16 -9
  76. package/dest/fixtures/setup_p2p_test.d.ts.map +1 -1
  77. package/dest/fixtures/setup_p2p_test.js +40 -29
  78. package/dest/fixtures/token_utils.d.ts +2 -2
  79. package/dest/fixtures/token_utils.d.ts.map +1 -1
  80. package/dest/fixtures/token_utils.js +10 -6
  81. package/dest/fixtures/utils.d.ts +5 -194
  82. package/dest/fixtures/utils.d.ts.map +1 -1
  83. package/dest/fixtures/utils.js +4 -619
  84. package/dest/quality_of_service/grafana_client.d.ts +41 -0
  85. package/dest/quality_of_service/grafana_client.d.ts.map +1 -0
  86. package/dest/quality_of_service/{alert_checker.js → grafana_client.js} +1 -1
  87. package/dest/quality_of_service/prometheus_client.d.ts +38 -0
  88. package/dest/quality_of_service/prometheus_client.d.ts.map +1 -0
  89. package/dest/quality_of_service/prometheus_client.js +67 -0
  90. package/dest/shared/cross_chain_test_harness.d.ts +16 -6
  91. package/dest/shared/cross_chain_test_harness.d.ts.map +1 -1
  92. package/dest/shared/cross_chain_test_harness.js +13 -13
  93. package/dest/shared/gas_portal_test_harness.d.ts +11 -1
  94. package/dest/shared/gas_portal_test_harness.d.ts.map +1 -1
  95. package/dest/shared/gas_portal_test_harness.js +1 -1
  96. package/dest/shared/index.d.ts +3 -2
  97. package/dest/shared/index.d.ts.map +1 -1
  98. package/dest/shared/index.js +1 -0
  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 +3 -28
  106. package/dest/shared/uniswap_l1_l2.d.ts.map +1 -1
  107. package/dest/shared/uniswap_l1_l2.js +53 -33
  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 +2 -2
  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 +2 -23
  114. package/dest/spartan/setup_test_wallets.d.ts +12 -4
  115. package/dest/spartan/setup_test_wallets.d.ts.map +1 -1
  116. package/dest/spartan/setup_test_wallets.js +92 -35
  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 +333 -6
  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 +39 -0
  130. package/dest/spartan/utils/config.d.ts.map +1 -0
  131. package/dest/spartan/utils/config.js +21 -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 +9 -0
  139. package/dest/spartan/utils/index.d.ts.map +1 -0
  140. package/dest/spartan/utils/index.js +18 -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 +460 -0
  147. package/dest/spartan/utils/scripts.d.ts +30 -0
  148. package/dest/spartan/utils/scripts.d.ts.map +1 -0
  149. package/dest/spartan/utils/scripts.js +81 -0
  150. package/dest/spartan/utils.d.ts +2 -253
  151. package/dest/spartan/utils.d.ts.map +1 -1
  152. package/dest/spartan/utils.js +1 -892
  153. package/dest/test-wallet/test_wallet.d.ts +83 -0
  154. package/dest/test-wallet/test_wallet.d.ts.map +1 -0
  155. package/dest/test-wallet/test_wallet.js +214 -0
  156. package/dest/test-wallet/utils.d.ts +41 -0
  157. package/dest/test-wallet/utils.d.ts.map +1 -0
  158. package/dest/test-wallet/utils.js +71 -0
  159. package/dest/test-wallet/wallet_worker_script.d.ts +2 -0
  160. package/dest/test-wallet/wallet_worker_script.d.ts.map +1 -0
  161. package/dest/test-wallet/wallet_worker_script.js +40 -0
  162. package/dest/test-wallet/worker_wallet.d.ts +52 -0
  163. package/dest/test-wallet/worker_wallet.d.ts.map +1 -0
  164. package/dest/test-wallet/worker_wallet.js +103 -0
  165. package/dest/test-wallet/worker_wallet_schema.d.ts +274 -0
  166. package/dest/test-wallet/worker_wallet_schema.d.ts.map +1 -0
  167. package/dest/test-wallet/worker_wallet_schema.js +10 -0
  168. package/package.json +44 -39
  169. package/src/bench/client_flows/benchmark.ts +24 -2
  170. package/src/bench/client_flows/client_flows_benchmark.ts +141 -211
  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 +21 -15
  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 +127 -117
  176. package/src/e2e_deploy_contract/deploy_test.ts +22 -15
  177. package/src/e2e_epochs/epochs_test.ts +130 -94
  178. package/src/e2e_fees/bridging_race.notest.ts +4 -10
  179. package/src/e2e_fees/fees_test.ts +164 -227
  180. package/src/e2e_l1_publisher/write_json.ts +16 -16
  181. package/src/e2e_nested_contract/nested_contract_test.ts +33 -56
  182. package/src/e2e_p2p/inactivity_slash_test.ts +3 -3
  183. package/src/e2e_p2p/p2p_network.ts +197 -171
  184. package/src/e2e_p2p/reqresp/utils.ts +235 -0
  185. package/src/e2e_p2p/shared.ts +28 -27
  186. package/src/e2e_storage_proof/fixtures/storage_proof.json +915 -0
  187. package/src/e2e_storage_proof/fixtures/storage_proof_fetcher.ts +190 -0
  188. package/src/e2e_storage_proof/fixtures/storage_proof_fixture.ts +173 -0
  189. package/src/e2e_token_contract/token_contract_test.ts +113 -119
  190. package/src/fixtures/authwit_proxy.ts +50 -0
  191. package/src/fixtures/dumps/epoch_proof_result.json +1 -1
  192. package/src/fixtures/e2e_prover_test.ts +127 -172
  193. package/src/fixtures/fixtures.ts +10 -0
  194. package/src/fixtures/ha_setup.ts +186 -0
  195. package/src/fixtures/index.ts +1 -0
  196. package/src/fixtures/setup.ts +896 -0
  197. package/src/fixtures/setup_p2p_test.ts +40 -44
  198. package/src/fixtures/token_utils.ts +7 -5
  199. package/src/fixtures/utils.ts +27 -907
  200. package/src/guides/up_quick_start.sh +3 -3
  201. package/src/quality_of_service/{alert_checker.ts → grafana_client.ts} +1 -1
  202. package/src/quality_of_service/prometheus_client.ts +113 -0
  203. package/src/shared/cross_chain_test_harness.ts +16 -36
  204. package/src/shared/gas_portal_test_harness.ts +1 -1
  205. package/src/shared/index.ts +2 -1
  206. package/src/shared/mock_state_view.ts +188 -0
  207. package/src/shared/submit-transactions.ts +14 -16
  208. package/src/shared/uniswap_l1_l2.ts +59 -80
  209. package/src/simulators/lending_simulator.ts +2 -2
  210. package/src/simulators/token_simulator.ts +1 -29
  211. package/src/spartan/setup_test_wallets.ts +134 -26
  212. package/src/spartan/tx_metrics.ts +255 -9
  213. package/src/spartan/utils/bot.ts +188 -0
  214. package/src/spartan/utils/chaos.ts +253 -0
  215. package/src/spartan/utils/clients.ts +100 -0
  216. package/src/spartan/utils/config.ts +27 -0
  217. package/src/spartan/utils/health.ts +255 -0
  218. package/src/spartan/utils/helm.ts +84 -0
  219. package/src/spartan/utils/index.ts +65 -0
  220. package/src/spartan/utils/k8s.ts +535 -0
  221. package/src/spartan/utils/nodes.ts +535 -0
  222. package/src/spartan/utils/scripts.ts +99 -0
  223. package/src/spartan/utils.ts +1 -1158
  224. package/src/test-wallet/test_wallet.ts +306 -0
  225. package/src/test-wallet/utils.ts +112 -0
  226. package/src/test-wallet/wallet_worker_script.ts +43 -0
  227. package/src/test-wallet/worker_wallet.ts +165 -0
  228. package/src/test-wallet/worker_wallet_schema.ts +13 -0
  229. package/dest/fixtures/snapshot_manager.d.ts +0 -93
  230. package/dest/fixtures/snapshot_manager.d.ts.map +0 -1
  231. package/dest/fixtures/snapshot_manager.js +0 -493
  232. package/dest/quality_of_service/alert_checker.d.ts +0 -41
  233. package/dest/quality_of_service/alert_checker.d.ts.map +0 -1
  234. package/src/fixtures/snapshot_manager.ts +0 -651
@@ -11,10 +11,9 @@ import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
11
11
  import type { BootstrapNode } from '@aztec/p2p/bootstrap';
12
12
  import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
13
13
  import type { PublicDataTreeLeaf } from '@aztec/stdlib/trees';
14
- import type { TestWallet } from '@aztec/test-wallet/server';
15
14
  import { type GetContractReturnType } from 'viem';
16
- import { type SubsystemsContext } from '../fixtures/snapshot_manager.js';
17
- import { type SetupOptions } from '../fixtures/utils.js';
15
+ import { type EndToEndContext, type SetupOptions } from '../fixtures/setup.js';
16
+ import type { TestWallet } from '../test-wallet/test_wallet.js';
18
17
  export declare const WAIT_FOR_TX_TIMEOUT: number;
19
18
  export declare const SHORTENED_BLOCK_TIME_CONFIG_NO_PRUNES: {
20
19
  aztecSlotDuration: number;
@@ -28,7 +27,7 @@ export declare class P2PNetworkTest {
28
27
  numberOfValidators: number;
29
28
  numberOfNodes: number;
30
29
  private metricsPort?;
31
- private snapshotManager;
30
+ context: EndToEndContext;
32
31
  baseAccountPrivateKey: `0x${string}`;
33
32
  baseAccount: {
34
33
  address: `0x${string}`;
@@ -255,7 +254,7 @@ export declare class P2PNetworkTest {
255
254
  };
256
255
  logger: Logger;
257
256
  monitor: ChainMonitor;
258
- ctx: SubsystemsContext;
257
+ ctx: EndToEndContext;
259
258
  attesterPrivateKeys: `0x${string}`[];
260
259
  attesterPublicKeys: string[];
261
260
  peerIdPrivateKeys: string[];
@@ -266,6 +265,8 @@ export declare class P2PNetworkTest {
266
265
  defaultAccountAddress?: AztecAddress;
267
266
  spamContract?: SpamContract;
268
267
  bootstrapNode?: BootstrapNode;
268
+ private setupOptions;
269
+ private deployL1ContractsArgs;
269
270
  constructor(testName: string, bootstrapNodeEnr: string, bootNodePort: number, numberOfValidators: number, initialValidatorConfig: SetupOptions, numberOfNodes?: number, metricsPort?: number | undefined, startProverNode?: boolean);
270
271
  static create({ testName, numberOfNodes, numberOfValidators, basePort, metricsPort, initialConfig, startProverNode }: {
271
272
  testName: string;
@@ -281,7 +282,7 @@ export declare class P2PNetworkTest {
281
282
  getValidators(): {
282
283
  validators: Operator[];
283
284
  };
284
- applyBaseSnapshots(): Promise<void>;
285
+ applyBaseSetup(): Promise<void>;
285
286
  setupAccount(): Promise<void>;
286
287
  deploySpamContract(): Promise<void>;
287
288
  removeInitialNode(): Promise<void>;
@@ -311,4 +312,4 @@ export declare class P2PNetworkTest {
311
312
  slashFactory: SlashFactoryContract;
312
313
  }>;
313
314
  }
314
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJwX25ldHdvcmsuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfcDJwL3AycF9uZXR3b3JrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEUsT0FBTyxLQUFLLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBYyxNQUFNLDJCQUEyQixDQUFDO0FBR3JFLE9BQU8sRUFDTCxLQUFLLDhCQUE4QixFQUVuQyxjQUFjLEVBQ2QsS0FBSyw2QkFBNkIsRUFDbkMsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUkxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQTRCLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR2xGLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUVsRSxPQUFPLEVBQWEsVUFBVSxFQUFnQixNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRSxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUcxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTlELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBSTVELE9BQU8sRUFBRSxLQUFLLHFCQUFxQixFQUEyQixNQUFNLE1BQU0sQ0FBQztBQVEzRSxPQUFPLEVBRUwsS0FBSyxpQkFBaUIsRUFHdkIsTUFB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
315
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJwX25ldHdvcmsuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lMmVfcDJwL3AycF9uZXR3b3JrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEUsT0FBTyxLQUFLLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBYyxNQUFNLDJCQUEyQixDQUFDO0FBR3JFLE9BQU8sRUFDTCxLQUFLLDhCQUE4QixFQUVuQyxjQUFjLEVBQ2QsS0FBSyw2QkFBNkIsRUFDbkMsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUkxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxLQUFLLEVBQTRCLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBR2xGLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUVsRSxPQUFPLEVBQWEsVUFBVSxFQUFnQixNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNsRSxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUcxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVsRSxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSzlELE9BQU8sRUFBRSxLQUFLLHFCQUFxQixFQUEyQixNQUFNLE1BQU0sQ0FBQztBQUczRSxPQUFPLEVBQ0wsS0FBSyxlQUFlLEVBQ3BCLEtBQUssWUFBWSxFQU1sQixNQUFNLHNCQUFzQixDQUFDO0FBTzlCLE9BQU8sS0FBSyxFQUFF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
@@ -1 +1 @@
1
- {"version":3,"file":"p2p_network.d.ts","sourceRoot":"","sources":["../../src/e2e_p2p/p2p_network.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"p2p_network.d.ts","sourceRoot":"","sources":["../../src/e2e_p2p/p2p_network.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ import { getL1ContractsConfigEnvVars } from '@aztec/ethereum/config';
4
4
  import { GSEContract, RollupContract } from '@aztec/ethereum/contracts';
5
5
  import { deployL1Contract } from '@aztec/ethereum/deploy-l1-contract';
6
6
  import { MultiAdderArtifact } from '@aztec/ethereum/l1-artifacts';
7
- import { createL1TxUtilsFromViemWallet } from '@aztec/ethereum/l1-tx-utils';
7
+ import { createL1TxUtils } from '@aztec/ethereum/l1-tx-utils';
8
8
  import { ChainMonitor } from '@aztec/ethereum/test';
9
9
  import { EpochNumber } from '@aztec/foundation/branded-types';
10
10
  import { SecretValue } from '@aztec/foundation/config';
@@ -15,14 +15,14 @@ import { SpamContract } from '@aztec/noir-test-contracts.js/Spam';
15
15
  import { createBootstrapNodeFromPrivateKey, getBootstrapNodeEnr } from '@aztec/p2p/test-helpers';
16
16
  import { tryStop } from '@aztec/stdlib/interfaces/server';
17
17
  import { SlashFactoryContract } from '@aztec/stdlib/l1-contracts';
18
+ import { TopicType } from '@aztec/stdlib/p2p';
18
19
  import { ZkPassportProofParams } from '@aztec/stdlib/zkpassport';
19
20
  import { getGenesisValues } from '@aztec/world-state/testing';
20
21
  import getPort from 'get-port';
21
22
  import { getAddress, getContract } from 'viem';
22
23
  import { privateKeyToAccount } from 'viem/accounts';
24
+ import { deployAccounts, getPrivateKeyFromIndex, getSponsoredFPCAddress, setup, teardown } from '../fixtures/setup.js';
23
25
  import { ATTESTER_PRIVATE_KEYS_START_INDEX, createValidatorConfig, generatePrivateKeys } from '../fixtures/setup_p2p_test.js';
24
- import { createSnapshotManager, deployAccounts } from '../fixtures/snapshot_manager.js';
25
- import { getPrivateKeyFromIndex, getSponsoredFPCAddress } from '../fixtures/utils.js';
26
26
  import { getEndToEndTestTelemetryClient } from '../fixtures/with_telemetry_utils.js';
27
27
  // Use a fixed bootstrap node private key so that we can re-use the same snapshot and the nodes can find each other
28
28
  const BOOTSTRAP_NODE_PRIVATE_KEY = '080212208f988fc0899e4a73a5aee4d271a5f20670603a756ad8d84f2c94263a6427c591';
@@ -40,7 +40,7 @@ export class P2PNetworkTest {
40
40
  numberOfValidators;
41
41
  numberOfNodes;
42
42
  metricsPort;
43
- snapshotManager;
43
+ context;
44
44
  baseAccountPrivateKey;
45
45
  baseAccount;
46
46
  logger;
@@ -57,6 +57,9 @@ export class P2PNetworkTest {
57
57
  defaultAccountAddress;
58
58
  spamContract;
59
59
  bootstrapNode;
60
+ // Store setup options for use in setup()
61
+ setupOptions;
62
+ deployL1ContractsArgs;
60
63
  constructor(testName, bootstrapNodeEnr, bootNodePort, numberOfValidators, initialValidatorConfig, numberOfNodes = 0, // If set enable metrics collection
61
64
  metricsPort, startProverNode){
62
65
  this.testName = testName;
@@ -78,7 +81,8 @@ export class P2PNetworkTest {
78
81
  this.attesterPrivateKeys = generatePrivateKeys(ATTESTER_PRIVATE_KEYS_START_INDEX + numberOfNodes, numberOfValidators);
79
82
  this.attesterPublicKeys = this.attesterPrivateKeys.map((privateKey)=>privateKeyToAccount(privateKey).address);
80
83
  const zkPassportParams = ZkPassportProofParams.random();
81
- this.snapshotManager = createSnapshotManager(`e2e_p2p_network/${testName}`, process.env.E2E_DATA_PATH, {
84
+ // Store setup options for later use
85
+ this.setupOptions = {
82
86
  ...initialValidatorConfig,
83
87
  ethereumSlotDuration: initialValidatorConfig.ethereumSlotDuration ?? l1ContractsConfig.ethereumSlotDuration,
84
88
  aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
@@ -89,8 +93,10 @@ export class P2PNetworkTest {
89
93
  aztecTargetCommitteeSize: numberOfValidators,
90
94
  metricsPort: metricsPort,
91
95
  numberOfInitialFundedAccounts: 2,
92
- startProverNode
93
- }, {
96
+ startProverNode,
97
+ walletMinFeePadding: 2.0
98
+ };
99
+ this.deployL1ContractsArgs = {
94
100
  ...initialValidatorConfig,
95
101
  aztecEpochDuration: initialValidatorConfig.aztecEpochDuration ?? l1ContractsConfig.aztecEpochDuration,
96
102
  slashingRoundSizeInEpochs: initialValidatorConfig.slashingRoundSizeInEpochs ?? l1ContractsConfig.slashingRoundSizeInEpochs,
@@ -104,7 +110,7 @@ export class P2PNetworkTest {
104
110
  zkPassportDomain: zkPassportParams.domain,
105
111
  zkPassportScope: zkPassportParams.scope
106
112
  }
107
- });
113
+ };
108
114
  }
109
115
  static async create({ testName, numberOfNodes, numberOfValidators, basePort, metricsPort, initialConfig, startProverNode }) {
110
116
  const port = basePort || await getPort();
@@ -115,17 +121,16 @@ export class P2PNetworkTest {
115
121
  }
116
122
  get fundedAccount() {
117
123
  if (!this.deployedAccounts[0]) {
118
- throw new Error('Call snapshot t.setupAccount to create a funded account.');
124
+ throw new Error('Call setupAccount to create a funded account.');
119
125
  }
120
126
  return this.deployedAccounts[0];
121
127
  }
122
128
  async addBootstrapNode() {
123
- await this.snapshotManager.snapshot('add-bootstrap-node', async ({ aztecNodeConfig })=>{
124
- const telemetry = await getEndToEndTestTelemetryClient(this.metricsPort);
125
- this.bootstrapNode = await createBootstrapNodeFromPrivateKey(BOOTSTRAP_NODE_PRIVATE_KEY, this.bootNodePort, telemetry, aztecNodeConfig);
126
- // Overwrite enr with updated info
127
- this.bootstrapNodeEnr = this.bootstrapNode.getENR().encodeTxt();
128
- });
129
+ this.logger.info('Adding bootstrap node');
130
+ const telemetry = await getEndToEndTestTelemetryClient(this.metricsPort);
131
+ this.bootstrapNode = await createBootstrapNodeFromPrivateKey(BOOTSTRAP_NODE_PRIVATE_KEY, this.bootNodePort, telemetry, this.context.config);
132
+ // Overwrite enr with updated info
133
+ this.bootstrapNodeEnr = this.bootstrapNode.getENR().encodeTxt();
129
134
  }
130
135
  getValidators() {
131
136
  const validators = [];
@@ -143,124 +148,127 @@ export class P2PNetworkTest {
143
148
  validators
144
149
  };
145
150
  }
146
- async applyBaseSnapshots() {
151
+ async applyBaseSetup() {
147
152
  await this.addBootstrapNode();
148
- await this.snapshotManager.snapshot('add-validators', async ({ deployL1ContractsValues, cheatCodes })=>{
149
- const rollup = getContract({
150
- address: deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
151
- abi: RollupAbi,
152
- client: deployL1ContractsValues.l1Client
153
- });
154
- this.logger.info(`Adding ${this.numberOfValidators} validators`);
155
- const stakingAsset = getContract({
156
- address: deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
157
- abi: TestERC20Abi,
158
- client: deployL1ContractsValues.l1Client
159
- });
160
- const { address: multiAdderAddress } = await deployL1Contract(deployL1ContractsValues.l1Client, MultiAdderArtifact.contractAbi, MultiAdderArtifact.contractBytecode, [
161
- rollup.address,
162
- deployL1ContractsValues.l1Client.account.address
163
- ]);
164
- const multiAdder = getContract({
165
- address: multiAdderAddress.toString(),
166
- abi: MultiAdderArtifact.contractAbi,
167
- client: deployL1ContractsValues.l1Client
168
- });
169
- const stakeNeeded = await rollup.read.getActivationThreshold() * BigInt(this.numberOfValidators);
170
- await Promise.all([
171
- await stakingAsset.write.mint([
172
- multiAdder.address,
173
- stakeNeeded
174
- ], {})
175
- ].map((txHash)=>deployL1ContractsValues.l1Client.waitForTransactionReceipt({
176
- hash: txHash
177
- })));
178
- const { validators } = this.getValidators();
179
- this.validators = validators;
180
- const gseAddress = deployL1ContractsValues.l1ContractAddresses.gseAddress;
181
- if (!gseAddress) {
182
- throw new Error('GSE contract not deployed');
183
- }
184
- const gseContract = new GSEContract(deployL1ContractsValues.l1Client, gseAddress.toString());
185
- const makeValidatorTuples = async (validator)=>{
186
- const registrationTuple = await gseContract.makeRegistrationTuple(validator.bn254SecretKey.getValue());
187
- return {
188
- attester: validator.attester.toString(),
189
- withdrawer: validator.withdrawer.toString(),
190
- ...registrationTuple
191
- };
153
+ this.logger.info('Adding validators');
154
+ const rollup = getContract({
155
+ address: this.context.deployL1ContractsValues.l1ContractAddresses.rollupAddress.toString(),
156
+ abi: RollupAbi,
157
+ client: this.context.deployL1ContractsValues.l1Client
158
+ });
159
+ this.logger.info(`Adding ${this.numberOfValidators} validators`);
160
+ const stakingAsset = getContract({
161
+ address: this.context.deployL1ContractsValues.l1ContractAddresses.stakingAssetAddress.toString(),
162
+ abi: TestERC20Abi,
163
+ client: this.context.deployL1ContractsValues.l1Client
164
+ });
165
+ const { address: multiAdderAddress } = await deployL1Contract(this.context.deployL1ContractsValues.l1Client, MultiAdderArtifact.contractAbi, MultiAdderArtifact.contractBytecode, [
166
+ rollup.address,
167
+ this.context.deployL1ContractsValues.l1Client.account.address
168
+ ]);
169
+ const multiAdder = getContract({
170
+ address: multiAdderAddress.toString(),
171
+ abi: MultiAdderArtifact.contractAbi,
172
+ client: this.context.deployL1ContractsValues.l1Client
173
+ });
174
+ const stakeNeeded = await rollup.read.getActivationThreshold() * BigInt(this.numberOfValidators);
175
+ await Promise.all([
176
+ await stakingAsset.write.mint([
177
+ multiAdder.address,
178
+ stakeNeeded
179
+ ], {})
180
+ ].map((txHash)=>this.context.deployL1ContractsValues.l1Client.waitForTransactionReceipt({
181
+ hash: txHash
182
+ })));
183
+ const { validators } = this.getValidators();
184
+ this.validators = validators;
185
+ const gseAddress = this.context.deployL1ContractsValues.l1ContractAddresses.gseAddress;
186
+ if (!gseAddress) {
187
+ throw new Error('GSE contract not deployed');
188
+ }
189
+ const gseContract = new GSEContract(this.context.deployL1ContractsValues.l1Client, gseAddress.toString());
190
+ const makeValidatorTuples = async (validator)=>{
191
+ const registrationTuple = await gseContract.makeRegistrationTuple(validator.bn254SecretKey.getValue());
192
+ return {
193
+ attester: validator.attester.toString(),
194
+ withdrawer: validator.withdrawer.toString(),
195
+ ...registrationTuple
192
196
  };
193
- const validatorTuples = await Promise.all(validators.map(makeValidatorTuples));
194
- await deployL1ContractsValues.l1Client.waitForTransactionReceipt({
195
- hash: await multiAdder.write.addValidators([
196
- validatorTuples
197
- ])
198
- });
199
- await cheatCodes.rollup.advanceToEpoch(EpochNumber.fromBigInt(BigInt(await cheatCodes.rollup.getEpoch()) + await rollup.read.getLagInEpochsForValidatorSet() + 1n));
200
- // Send and await a tx to make sure we mine a block for the warp to correctly progress.
201
- await this._sendDummyTx(deployL1ContractsValues.l1Client);
197
+ };
198
+ const validatorTuples = await Promise.all(validators.map(makeValidatorTuples));
199
+ await this.context.deployL1ContractsValues.l1Client.waitForTransactionReceipt({
200
+ hash: await multiAdder.write.addValidators([
201
+ validatorTuples
202
+ ])
202
203
  });
204
+ await this.context.cheatCodes.rollup.advanceToEpoch(EpochNumber.fromBigInt(BigInt(await this.context.cheatCodes.rollup.getEpoch()) + await rollup.read.getLagInEpochsForValidatorSet() + 1n));
205
+ // Send and await a tx to make sure we mine a block for the warp to correctly progress.
206
+ await this._sendDummyTx(this.context.deployL1ContractsValues.l1Client);
203
207
  }
204
208
  async setupAccount() {
205
- await this.snapshotManager.snapshot('setup-account', deployAccounts(1, this.logger), ({ deployedAccounts }, { wallet })=>{
206
- this.deployedAccounts = deployedAccounts;
207
- [{ address: this.defaultAccountAddress }] = deployedAccounts;
208
- this.wallet = wallet;
209
- return Promise.resolve();
209
+ this.logger.info('Setting up account');
210
+ const { deployedAccounts } = await deployAccounts(1, this.logger)({
211
+ wallet: this.context.wallet,
212
+ initialFundedAccounts: this.context.initialFundedAccounts
210
213
  });
214
+ this.deployedAccounts = deployedAccounts;
215
+ [{ address: this.defaultAccountAddress }] = deployedAccounts;
216
+ this.wallet = this.context.wallet;
211
217
  }
212
218
  async deploySpamContract() {
213
- await this.snapshotManager.snapshot('add-spam-contract', async ()=>{
214
- if (!this.wallet) {
215
- throw new Error('Call snapshot t.setupAccount before deploying account contract');
216
- }
217
- const spamContract = await SpamContract.deploy(this.wallet).send({
218
- from: this.defaultAccountAddress
219
- }).deployed();
220
- return {
221
- contractAddress: spamContract.address
222
- };
223
- }, ({ contractAddress })=>{
224
- if (!this.wallet) {
225
- throw new Error('Call snapshot t.setupAccount before deploying account contract');
226
- }
227
- this.spamContract = SpamContract.at(contractAddress, this.wallet);
228
- return Promise.resolve();
219
+ this.logger.info('Deploying spam contract');
220
+ if (!this.wallet) {
221
+ throw new Error('Call setupAccount before deploying spam contract');
222
+ }
223
+ const spamContract = await SpamContract.deploy(this.wallet).send({
224
+ from: this.defaultAccountAddress
229
225
  });
226
+ this.spamContract = spamContract;
230
227
  }
231
228
  async removeInitialNode() {
232
- await this.snapshotManager.snapshot('remove-initial-validator', async ({ deployL1ContractsValues, aztecNode, dateProvider })=>{
233
- // Send and await a tx to make sure we mine a block for the warp to correctly progress.
234
- const { receipt } = await this._sendDummyTx(deployL1ContractsValues.l1Client);
235
- const block = await deployL1ContractsValues.l1Client.getBlock({
236
- blockNumber: receipt.blockNumber
237
- });
238
- dateProvider.setTime(Number(block.timestamp) * 1000);
239
- await aztecNode.stop();
229
+ this.logger.info('Removing initial node');
230
+ // Send and await a tx to make sure we mine a block for the warp to correctly progress.
231
+ const { receipt } = await this._sendDummyTx(this.context.deployL1ContractsValues.l1Client);
232
+ const block = await this.context.deployL1ContractsValues.l1Client.getBlock({
233
+ blockNumber: receipt.blockNumber
240
234
  });
235
+ this.context.dateProvider.setTime(Number(block.timestamp) * 1000);
236
+ await this.context.aztecNodeService.stop();
241
237
  }
242
238
  async sendDummyTx() {
243
239
  return await this._sendDummyTx(this.ctx.deployL1ContractsValues.l1Client);
244
240
  }
245
241
  async _sendDummyTx(l1Client) {
246
- const l1TxUtils = createL1TxUtilsFromViemWallet(l1Client);
242
+ const l1TxUtils = createL1TxUtils(l1Client);
247
243
  return await l1TxUtils.sendAndMonitorTransaction({
248
244
  to: l1Client.account.address,
249
245
  value: 1n
250
246
  });
251
247
  }
252
248
  async setup() {
253
- this.ctx = await this.snapshotManager.setup();
249
+ this.logger.info('Setting up subsystems from fresh');
250
+ this.context = await setup(0, {
251
+ ...this.setupOptions,
252
+ fundSponsoredFPC: true,
253
+ skipAccountDeployment: true,
254
+ slasherFlavor: this.setupOptions.slasherFlavor ?? this.deployL1ContractsArgs.slasherFlavor ?? 'none',
255
+ aztecTargetCommitteeSize: 0,
256
+ l1ContractsArgs: this.deployL1ContractsArgs
257
+ }, // Use checkpointed chain tip for PXE to avoid issues with blocks being dropped due to pruned anchor blocks.
258
+ {
259
+ syncChainTip: 'checkpointed'
260
+ });
261
+ this.ctx = this.context;
254
262
  const sponsoredFPCAddress = await getSponsoredFPCAddress();
255
263
  const initialFundedAccounts = [
256
- ...this.ctx.initialFundedAccounts.map((a)=>a.address),
264
+ ...this.context.initialFundedAccounts.map((a)=>a.address),
257
265
  sponsoredFPCAddress
258
266
  ];
259
267
  const { prefilledPublicData } = await getGenesisValues(initialFundedAccounts);
260
268
  this.prefilledPublicData = prefilledPublicData;
261
- const rollupContract = RollupContract.getFromL1ContractsValues(this.ctx.deployL1ContractsValues);
262
- this.monitor = new ChainMonitor(rollupContract, this.ctx.dateProvider).start();
263
- this.monitor.on('l1-block', ({ timestamp })=>this.ctx.dateProvider.setTime(Number(timestamp) * 1000));
269
+ const rollupContract = RollupContract.getFromL1ContractsValues(this.context.deployL1ContractsValues);
270
+ this.monitor = new ChainMonitor(rollupContract, this.context.dateProvider).start();
271
+ this.monitor.on('l1-block', ({ timestamp })=>this.context.dateProvider.setTime(Number(timestamp) * 1000));
264
272
  }
265
273
  async stopNodes(nodes) {
266
274
  this.logger.info('Stopping nodes');
@@ -293,11 +301,24 @@ export class P2PNetworkTest {
293
301
  }, `Node ${index} to connect to at least ${minPeerCount} peers`, timeoutSeconds, checkIntervalSeconds);
294
302
  }));
295
303
  this.logger.warn('All nodes connected to P2P mesh');
304
+ // Wait for GossipSub mesh to form for the tx topic.
305
+ // We only require at least 1 mesh peer per node because GossipSub
306
+ // stops grafting once it reaches Dlo peers and won't fill the mesh to all available peers.
307
+ this.logger.warn('Waiting for GossipSub mesh to form for tx topic...');
308
+ await Promise.all(nodes.map(async (node, index)=>{
309
+ const p2p = node.getP2P();
310
+ await retryUntil(async ()=>{
311
+ const meshPeers = await p2p.getGossipMeshPeerCount(TopicType.tx);
312
+ this.logger.debug(`Node ${index} has ${meshPeers} gossip mesh peers for tx topic`);
313
+ return meshPeers >= 1 ? true : undefined;
314
+ }, `Node ${index} to have gossip mesh peers for tx topic`, timeoutSeconds, checkIntervalSeconds);
315
+ }));
316
+ this.logger.warn('All nodes have gossip mesh peers for tx topic');
296
317
  }
297
318
  async teardown() {
298
319
  await this.monitor.stop();
299
320
  await tryStop(this.bootstrapNode, this.logger);
300
- await this.snapshotManager.teardown();
321
+ await teardown(this.context);
301
322
  }
302
323
  async getContracts() {
303
324
  if (!this.ctx.deployL1ContractsValues) {
@@ -305,7 +326,7 @@ export class P2PNetworkTest {
305
326
  }
306
327
  const rollup = new RollupContract(this.ctx.deployL1ContractsValues.l1Client, this.ctx.deployL1ContractsValues.l1ContractAddresses.rollupAddress);
307
328
  const slasherContract = getContract({
308
- address: getAddress(await rollup.getSlasherAddress()),
329
+ address: getAddress((await rollup.getSlasherAddress()).toString()),
309
330
  abi: SlasherAbi,
310
331
  client: this.ctx.deployL1ContractsValues.l1Client
311
332
  });
@@ -0,0 +1,22 @@
1
+ import type { AztecNodeService } from '@aztec/aztec-node';
2
+ import { P2PNetworkTest } from '../p2p_network.js';
3
+ export declare const NUM_VALIDATORS = 6;
4
+ export declare const NUM_TXS_PER_NODE = 4;
5
+ export declare const BOOT_NODE_UDP_PORT: number;
6
+ export declare const createReqrespDataDir: () => string;
7
+ type ReqrespOptions = {
8
+ disableStatusHandshake?: boolean;
9
+ };
10
+ export declare function createReqrespTest(options?: ReqrespOptions): Promise<P2PNetworkTest>;
11
+ export declare function cleanupReqrespTest(params: {
12
+ t: P2PNetworkTest;
13
+ nodes?: AztecNodeService[];
14
+ dataDir: string;
15
+ }): Promise<void>;
16
+ export declare function runReqrespTxTest(params: {
17
+ t: P2PNetworkTest;
18
+ dataDir: string;
19
+ disableStatusHandshake?: boolean;
20
+ }): Promise<AztecNodeService[]>;
21
+ export {};
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lMmVfcDJwL3JlcXJlc3AvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWdCMUQsT0FBTyxFQUFFLGNBQWMsRUFBdUIsTUFBTSxtQkFBbUIsQ0FBQztBQUl4RSxlQUFPLE1BQU0sY0FBYyxJQUFJLENBQUM7QUFDaEMsZUFBTyxNQUFNLGdCQUFnQixJQUFJLENBQUM7QUFDbEMsZUFBTyxNQUFNLGtCQUFrQixRQUF1QixDQUFDO0FBRXZELGVBQU8sTUFBTSxvQkFBb0IsY0FBMkQsQ0FBQztBQUU3RixLQUFLLGNBQWMsR0FBRztJQUNwQixzQkFBc0IsQ0FBQyxFQUFFLE9BQU8sQ0FBQztDQUNsQyxDQUFDO0FBRUYsd0JBQXNCLGlCQUFpQixDQUFDLE9BQU8sR0FBRSxjQUFtQixHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0EwQjdGO0FBRUQsd0JBQXNCLGtCQUFrQixDQUFDLE1BQU0sRUFBRTtJQUFFLENBQUMsRUFBRSxjQUFjLENBQUM7SUFBQyxLQUFLLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO0lBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQTtDQUFFLGlCQVNsSDtBQUlELHdCQUFzQixnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7SUFDN0MsQ0FBQyxFQUFFLGNBQWMsQ0FBQztJQUNsQixPQUFPLEVBQUUsTUFBTSxDQUFDO0lBQ2hCLHNCQUFzQixDQUFDLEVBQUUsT0FBTyxDQUFDO0NBQ2xDLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0E4SDlCIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/e2e_p2p/reqresp/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAgB1D,OAAO,EAAE,cAAc,EAAuB,MAAM,mBAAmB,CAAC;AAIxE,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAClC,eAAO,MAAM,kBAAkB,QAAuB,CAAC;AAEvD,eAAO,MAAM,oBAAoB,cAA2D,CAAC;AAE7F,KAAK,cAAc,GAAG;IACpB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,CAAC;AAEF,wBAAsB,iBAAiB,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CA0B7F;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE;IAAE,CAAC,EAAE,cAAc,CAAC;IAAC,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,iBASlH;AAID,wBAAsB,gBAAgB,CAAC,MAAM,EAAE;IAC7C,CAAC,EAAE,cAAc,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAClC,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CA8H9B"}
@@ -0,0 +1,177 @@
1
+ import { createLogger } from '@aztec/aztec.js/log';
2
+ import { waitForTx } from '@aztec/aztec.js/node';
3
+ import { Tx } from '@aztec/aztec.js/tx';
4
+ import { RollupContract } from '@aztec/ethereum/contracts';
5
+ import { CheckpointNumber, SlotNumber } from '@aztec/foundation/branded-types';
6
+ import { timesAsync } from '@aztec/foundation/collection';
7
+ import { retryUntil } from '@aztec/foundation/retry';
8
+ import { expect, jest } from '@jest/globals';
9
+ import fs from 'fs';
10
+ import os from 'os';
11
+ import path from 'path';
12
+ import { getBootNodeUdpPort, shouldCollectMetrics } from '../../fixtures/fixtures.js';
13
+ import { createNodes } from '../../fixtures/setup_p2p_test.js';
14
+ import { P2PNetworkTest, WAIT_FOR_TX_TIMEOUT } from '../p2p_network.js';
15
+ import { prepareTransactions } from '../shared.js';
16
+ // Don't set this to a higher value than 9 because each node will use a different L1 publisher account and anvil seeds
17
+ export const NUM_VALIDATORS = 6;
18
+ export const NUM_TXS_PER_NODE = 4;
19
+ export const BOOT_NODE_UDP_PORT = getBootNodeUdpPort();
20
+ export const createReqrespDataDir = ()=>fs.mkdtempSync(path.join(os.tmpdir(), 'reqresp-'));
21
+ export async function createReqrespTest(options = {}) {
22
+ const { disableStatusHandshake = false } = options;
23
+ const t = await P2PNetworkTest.create({
24
+ testName: 'e2e_p2p_reqresp_tx',
25
+ numberOfNodes: 0,
26
+ numberOfValidators: NUM_VALIDATORS,
27
+ basePort: BOOT_NODE_UDP_PORT,
28
+ // To collect metrics - run in aztec-packages `docker compose --profile metrics up`
29
+ metricsPort: shouldCollectMetrics(),
30
+ initialConfig: {
31
+ ethereumSlotDuration: 8,
32
+ aztecSlotDuration: 36,
33
+ blockDurationMs: 6000,
34
+ l1PublishingTime: 8,
35
+ minTxsPerBlock: 1,
36
+ maxTxsPerBlock: 2,
37
+ enforceTimeTable: true,
38
+ aztecProofSubmissionEpochs: 1024,
39
+ ...disableStatusHandshake ? {
40
+ p2pDisableStatusHandshake: true
41
+ } : {},
42
+ listenAddress: '127.0.0.1',
43
+ aztecEpochDuration: 64
44
+ }
45
+ });
46
+ await t.setup();
47
+ await t.applyBaseSetup();
48
+ return t;
49
+ }
50
+ export async function cleanupReqrespTest(params) {
51
+ const { t, nodes, dataDir } = params;
52
+ if (nodes) {
53
+ await t.stopNodes(nodes);
54
+ }
55
+ await t.teardown();
56
+ for(let i = 0; i < NUM_VALIDATORS; i++){
57
+ fs.rmSync(`${dataDir}-${i}`, {
58
+ recursive: true,
59
+ force: true,
60
+ maxRetries: 3
61
+ });
62
+ }
63
+ }
64
+ const getNodePort = (nodeIndex)=>BOOT_NODE_UDP_PORT + 1 + nodeIndex;
65
+ export async function runReqrespTxTest(params) {
66
+ const { t, dataDir, disableStatusHandshake = false } = params;
67
+ if (!t.bootstrapNodeEnr) {
68
+ throw new Error('Bootstrap node ENR is not available');
69
+ }
70
+ t.logger.info('Creating nodes');
71
+ const aztecNodeConfig = disableStatusHandshake ? {
72
+ ...t.ctx.aztecNodeConfig,
73
+ p2pDisableStatusHandshake: true
74
+ } : t.ctx.aztecNodeConfig;
75
+ const nodes = await createNodes(aztecNodeConfig, t.ctx.dateProvider, t.bootstrapNodeEnr, NUM_VALIDATORS, BOOT_NODE_UDP_PORT, t.prefilledPublicData, dataDir, shouldCollectMetrics());
76
+ t.logger.info('Waiting for nodes to connect');
77
+ await t.waitForP2PMeshConnectivity(nodes, NUM_VALIDATORS);
78
+ await t.setupAccount();
79
+ const targetBlockNumber = await t.ctx.aztecNodeService.getBlockNumber();
80
+ await retryUntil(async ()=>{
81
+ const blockNumbers = await Promise.all(nodes.map((node)=>node.getBlockNumber()));
82
+ return blockNumbers.every((blockNumber)=>blockNumber >= targetBlockNumber) ? true : undefined;
83
+ }, `validators to sync to L2 block ${targetBlockNumber}`, 60, 0.5);
84
+ t.logger.info('Preparing transactions to send');
85
+ const txBatches = await timesAsync(2, ()=>prepareTransactions(t.logger, t.ctx.aztecNodeService, NUM_TXS_PER_NODE, t.fundedAccount));
86
+ t.logger.info('Removing initial node');
87
+ await t.removeInitialNode();
88
+ t.logger.info('Starting fresh slot');
89
+ const [timestamp] = await t.ctx.cheatCodes.rollup.advanceToNextSlot();
90
+ t.ctx.dateProvider.setTime(Number(timestamp) * 1000);
91
+ const startSlotTimestamp = BigInt(timestamp);
92
+ const { proposerIndexes, nodesToTurnOffTxGossip } = await getProposerIndexes(t, startSlotTimestamp);
93
+ t.logger.info(`Turning off tx gossip for nodes: ${nodesToTurnOffTxGossip.map(getNodePort)}`);
94
+ t.logger.info(`Sending txs to proposer nodes: ${proposerIndexes.map(getNodePort)}`);
95
+ // Replace the p2p node implementation of some of the nodes with a spy such that it does not store transactions that are gossiped to it
96
+ // Original implementation of `handleGossipedTx` will store received transactions in the tx pool.
97
+ // We chose the first 2 nodes that will be the proposers for the next few slots
98
+ for (const nodeIndex of nodesToTurnOffTxGossip){
99
+ const logger = createLogger(`p2p:${getNodePort(nodeIndex)}`);
100
+ jest.spyOn(nodes[nodeIndex].p2pClient.p2pService, 'handleGossipedTx').mockImplementation((payloadData)=>{
101
+ const txHash = Tx.fromBuffer(payloadData).getTxHash();
102
+ logger.info(`Skipping storage of gossiped transaction ${txHash.toString()}`);
103
+ return Promise.resolve();
104
+ });
105
+ }
106
+ // We send the tx to the proposer nodes directly, ignoring the pxe and node in each context
107
+ // We cannot just call tx.send since they were created using a pxe wired to the first node which is now stopped
108
+ t.logger.info('Sending transactions through proposer nodes');
109
+ const submittedTxs = await Promise.all(txBatches.map(async (batch, batchIndex)=>{
110
+ const proposerNode = nodes[proposerIndexes[batchIndex]];
111
+ await Promise.all(batch.map(async (tx)=>{
112
+ try {
113
+ await proposerNode.sendTx(tx);
114
+ } catch (err) {
115
+ t.logger.error(`Error sending tx: ${err}`);
116
+ throw err;
117
+ }
118
+ }));
119
+ return batch.map((tx)=>({
120
+ node: proposerNode,
121
+ txHash: tx.getTxHash()
122
+ }));
123
+ }));
124
+ t.logger.info('Waiting for all transactions to be mined');
125
+ await Promise.all(submittedTxs.flatMap((batch, batchIndex)=>batch.map(async (submittedTx, txIndex)=>{
126
+ t.logger.info(`Waiting for tx ${batchIndex}-${txIndex} ${submittedTx.txHash.toString()} to be mined`);
127
+ await waitForTx(submittedTx.node, submittedTx.txHash, {
128
+ timeout: WAIT_FOR_TX_TIMEOUT * 1.5
129
+ });
130
+ t.logger.info(`Tx ${batchIndex}-${txIndex} ${submittedTx.txHash.toString()} has been mined`);
131
+ })));
132
+ t.logger.info('All transactions mined');
133
+ // Assert that multiple blocks were built for at least one slot
134
+ t.logger.info('Verifying multiple blocks for at least one checkpoint');
135
+ const checkpoints = await nodes[0].getCheckpoints(CheckpointNumber(1), 50);
136
+ expect(checkpoints.length).toBeGreaterThan(0);
137
+ let mbpsFound = false;
138
+ let expectedBlockNumber = checkpoints[0].checkpoint.blocks[0].number;
139
+ for (const published of checkpoints){
140
+ const blockCount = published.checkpoint.blocks.length;
141
+ mbpsFound = mbpsFound || blockCount >= 2;
142
+ for(let i = 0; i < blockCount; i++){
143
+ const block = published.checkpoint.blocks[i];
144
+ expect(block.indexWithinCheckpoint).toBe(i);
145
+ expect(block.checkpointNumber).toBe(published.checkpoint.number);
146
+ expect(block.number).toBe(expectedBlockNumber);
147
+ expectedBlockNumber++;
148
+ }
149
+ }
150
+ expect(mbpsFound).toBe(true);
151
+ return nodes;
152
+ }
153
+ async function getProposerIndexes(t, startSlotTimestamp) {
154
+ // Get the nodes for the next set of slots
155
+ const rollupContract = new RollupContract(t.ctx.deployL1ContractsValues.l1Client, t.ctx.deployL1ContractsValues.l1ContractAddresses.rollupAddress);
156
+ const attesters = await rollupContract.getAttesters();
157
+ const startSlot = await rollupContract.getSlotAt(startSlotTimestamp);
158
+ const proposers = await Promise.all(Array.from({
159
+ length: 3
160
+ }, async (_, i)=>{
161
+ const slot = SlotNumber(startSlot + i);
162
+ const slotTimestamp = await rollupContract.getTimestampForSlot(slot);
163
+ return await rollupContract.getProposerAt(slotTimestamp);
164
+ }));
165
+ // Get the indexes of the nodes that are responsible for the next two slots
166
+ const proposerIndexes = proposers.map((proposer)=>attesters.findIndex((a)=>a.equals(proposer)));
167
+ if (proposerIndexes.some((i)=>i === -1)) {
168
+ throw new Error(`Proposer index not found for proposer ` + `(proposers=${proposers.map((p)=>p.toString()).join(',')}, indices=${proposerIndexes.join(',')})`);
169
+ }
170
+ const nodesToTurnOffTxGossip = Array.from({
171
+ length: NUM_VALIDATORS
172
+ }, (_, i)=>i).filter((i)=>!proposerIndexes.includes(i));
173
+ return {
174
+ proposerIndexes,
175
+ nodesToTurnOffTxGossip
176
+ };
177
+ }