@aztec/p2p 0.0.1-commit.7035c9bd6 → 0.0.1-commit.71324e566

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 (225) hide show
  1. package/dest/client/factory.d.ts +1 -1
  2. package/dest/client/factory.d.ts.map +1 -1
  3. package/dest/client/factory.js +5 -4
  4. package/dest/client/interface.d.ts +9 -2
  5. package/dest/client/interface.d.ts.map +1 -1
  6. package/dest/client/p2p_client.d.ts +3 -2
  7. package/dest/client/p2p_client.d.ts.map +1 -1
  8. package/dest/client/p2p_client.js +30 -10
  9. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +16 -6
  10. package/dest/config.d.ts +103 -99
  11. package/dest/config.d.ts.map +1 -1
  12. package/dest/config.js +10 -5
  13. package/dest/errors/p2p-service.error.d.ts +9 -0
  14. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  15. package/dest/errors/p2p-service.error.js +10 -0
  16. package/dest/index.d.ts +1 -2
  17. package/dest/index.d.ts.map +1 -1
  18. package/dest/index.js +0 -1
  19. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +4 -2
  20. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  21. package/dest/mem_pools/attestation_pool/attestation_pool.js +8 -5
  22. package/dest/mem_pools/index.d.ts +1 -2
  23. package/dest/mem_pools/index.d.ts.map +1 -1
  24. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  25. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +1 -1
  26. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  27. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +6 -2
  28. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +5 -2
  29. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  30. package/dest/msg_validators/attestation_validator/attestation_validator.js +17 -9
  31. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +4 -2
  32. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  33. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +2 -2
  34. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  35. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  36. package/dest/msg_validators/clock_tolerance.js +50 -0
  37. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +2 -1
  38. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  39. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +2 -1
  40. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  41. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +3 -1
  42. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  43. package/dest/msg_validators/proposal_validator/proposal_validator.js +16 -8
  44. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  45. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  46. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  47. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  48. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  49. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  50. package/dest/msg_validators/tx_validator/data_validator.js +35 -2
  51. package/dest/msg_validators/tx_validator/factory.d.ts +1 -1
  52. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  53. package/dest/msg_validators/tx_validator/factory.js +8 -2
  54. package/dest/msg_validators/tx_validator/gas_validator.d.ts +1 -1
  55. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  56. package/dest/msg_validators/tx_validator/gas_validator.js +11 -9
  57. package/dest/msg_validators/tx_validator/phases_validator.js +1 -1
  58. package/dest/services/data_store.d.ts +1 -1
  59. package/dest/services/data_store.d.ts.map +1 -1
  60. package/dest/services/data_store.js +5 -5
  61. package/dest/services/dummy_service.d.ts +6 -3
  62. package/dest/services/dummy_service.d.ts.map +1 -1
  63. package/dest/services/dummy_service.js +6 -1
  64. package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
  65. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  66. package/dest/services/gossipsub/topic_score_params.js +21 -4
  67. package/dest/services/libp2p/libp2p_service.d.ts +15 -18
  68. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  69. package/dest/services/libp2p/libp2p_service.js +117 -91
  70. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  71. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  72. package/dest/services/peer-manager/peer_manager.js +35 -8
  73. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  74. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  75. package/dest/services/peer-manager/peer_scoring.js +32 -10
  76. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +1 -1
  77. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  78. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +3 -0
  79. package/dest/services/reqresp/config.d.ts +3 -3
  80. package/dest/services/reqresp/config.d.ts.map +1 -1
  81. package/dest/services/reqresp/interface.d.ts +14 -9
  82. package/dest/services/reqresp/interface.d.ts.map +1 -1
  83. package/dest/services/reqresp/interface.js +10 -11
  84. package/dest/services/reqresp/metrics.d.ts +1 -1
  85. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  86. package/dest/services/reqresp/metrics.js +0 -1
  87. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  88. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  89. package/dest/services/reqresp/protocols/index.js +0 -1
  90. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  91. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  92. package/dest/services/reqresp/protocols/tx.js +1 -3
  93. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  94. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  95. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  96. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  97. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  98. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  99. package/dest/services/reqresp/reqresp.d.ts +4 -2
  100. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  101. package/dest/services/reqresp/reqresp.js +11 -2
  102. package/dest/services/service.d.ts +5 -2
  103. package/dest/services/service.d.ts.map +1 -1
  104. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  105. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  106. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  107. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  108. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  109. package/dest/services/tx_collection/tx_source.js +9 -7
  110. package/dest/test-helpers/mock-pubsub.d.ts +11 -3
  111. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  112. package/dest/test-helpers/mock-pubsub.js +35 -10
  113. package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
  114. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  115. package/dest/test-helpers/reqresp-nodes.js +1 -2
  116. package/dest/test-helpers/testbench-utils.d.ts +1 -1
  117. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  118. package/dest/test-helpers/testbench-utils.js +1 -0
  119. package/dest/testbench/p2p_client_testbench_worker.d.ts +1 -1
  120. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  121. package/dest/testbench/p2p_client_testbench_worker.js +65 -15
  122. package/dest/testbench/worker_client_manager.d.ts +8 -1
  123. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  124. package/dest/testbench/worker_client_manager.js +49 -1
  125. package/package.json +14 -14
  126. package/src/client/factory.ts +7 -2
  127. package/src/client/interface.ts +9 -1
  128. package/src/client/p2p_client.ts +34 -11
  129. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +17 -6
  130. package/src/config.ts +18 -6
  131. package/src/errors/p2p-service.error.ts +11 -0
  132. package/src/index.ts +0 -1
  133. package/src/mem_pools/attestation_pool/attestation_pool.ts +9 -5
  134. package/src/mem_pools/index.ts +0 -3
  135. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  136. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +8 -2
  137. package/src/msg_validators/attestation_validator/attestation_validator.ts +18 -7
  138. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +4 -1
  139. package/src/msg_validators/clock_tolerance.ts +68 -0
  140. package/src/msg_validators/proposal_validator/README.md +1 -1
  141. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +4 -1
  142. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +4 -1
  143. package/src/msg_validators/proposal_validator/proposal_validator.ts +13 -7
  144. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  145. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  146. package/src/msg_validators/tx_validator/data_validator.ts +42 -1
  147. package/src/msg_validators/tx_validator/factory.ts +7 -0
  148. package/src/msg_validators/tx_validator/gas_validator.ts +25 -9
  149. package/src/msg_validators/tx_validator/phases_validator.ts +1 -1
  150. package/src/services/data_store.ts +5 -13
  151. package/src/services/dummy_service.ts +8 -2
  152. package/src/services/gossipsub/topic_score_params.ts +36 -4
  153. package/src/services/libp2p/libp2p_service.ts +117 -102
  154. package/src/services/peer-manager/peer_manager.ts +40 -8
  155. package/src/services/peer-manager/peer_scoring.ts +27 -5
  156. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +3 -0
  157. package/src/services/reqresp/config.ts +2 -2
  158. package/src/services/reqresp/interface.ts +21 -11
  159. package/src/services/reqresp/metrics.ts +0 -1
  160. package/src/services/reqresp/protocols/index.ts +0 -1
  161. package/src/services/reqresp/protocols/tx.ts +1 -3
  162. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  163. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  164. package/src/services/reqresp/reqresp.ts +18 -1
  165. package/src/services/service.ts +6 -1
  166. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  167. package/src/services/tx_collection/tx_source.ts +8 -7
  168. package/src/test-helpers/mock-pubsub.ts +31 -5
  169. package/src/test-helpers/reqresp-nodes.ts +2 -2
  170. package/src/test-helpers/testbench-utils.ts +1 -0
  171. package/src/testbench/p2p_client_testbench_worker.ts +70 -12
  172. package/src/testbench/worker_client_manager.ts +55 -1
  173. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  174. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  175. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  176. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  177. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  178. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  179. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  180. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  181. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  182. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  183. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  184. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -123
  185. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  186. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  187. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  188. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  189. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  190. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  191. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  192. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  193. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  194. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  195. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  196. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  197. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  198. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  199. package/dest/mem_pools/tx_pool/index.js +0 -2
  200. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  201. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  202. package/dest/mem_pools/tx_pool/priority.js +0 -15
  203. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  204. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  205. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  206. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  207. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  208. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -402
  209. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  210. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  211. package/dest/services/reqresp/protocols/block.js +0 -32
  212. package/src/mem_pools/tx_pool/README.md +0 -270
  213. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  214. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  215. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  216. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -163
  217. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  218. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  219. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  220. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  221. package/src/mem_pools/tx_pool/index.ts +0 -2
  222. package/src/mem_pools/tx_pool/priority.ts +0 -20
  223. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  224. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -321
  225. package/src/services/reqresp/protocols/block.ts +0 -37
@@ -4,7 +4,7 @@
4
4
  * Used when running testbench commands.
5
5
  */
6
6
  import { MockL2BlockSource } from '@aztec/archiver/test';
7
- import type { EpochCache, EpochCacheInterface } from '@aztec/epoch-cache';
7
+ import type { EpochCacheInterface } from '@aztec/epoch-cache';
8
8
  import { BlockNumber } from '@aztec/foundation/branded-types';
9
9
  import { SecretValue } from '@aztec/foundation/config';
10
10
  import { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
@@ -28,7 +28,6 @@ import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-clien
28
28
  import type { Message, PeerId } from '@libp2p/interface';
29
29
  import { TopicValidatorResult } from '@libp2p/interface';
30
30
  import { peerIdFromString } from '@libp2p/peer-id';
31
- import { mock } from 'jest-mock-extended';
32
31
 
33
32
  import type { P2PClient } from '../client/index.js';
34
33
  import type { P2PConfig } from '../config.js';
@@ -50,6 +49,7 @@ import {
50
49
  InMemoryAttestationPool,
51
50
  InMemoryTxPool,
52
51
  UNLIMITED_RATE_LIMIT_QUOTA,
52
+ createMockEpochCache,
53
53
  createMockWorldStateSynchronizer,
54
54
  filterTxsByDistribution,
55
55
  } from '../test-helpers/index.js';
@@ -204,6 +204,25 @@ function installUnlimitedRateLimits(client: P2PClient): void {
204
204
  rateLimiter.allow = () => RateLimitStatus.Allowed;
205
205
  }
206
206
 
207
+ /** Resets peer scores to prevent cross-case contamination in benchmarks. */
208
+ function resetPeerScores(client: P2PClient): void {
209
+ const peerManager = (client as any).p2pService.peerManager;
210
+ const peerScoring = peerManager?.peerScoring;
211
+ if (peerScoring?.resetAllScores) {
212
+ peerScoring.resetAllScores();
213
+ }
214
+ }
215
+
216
+ /** Returns the number of connected peers for connectivity checks. */
217
+ function getConnectedPeerCount(client: P2PClient): number {
218
+ const p2pService = (client as any).p2pService;
219
+ const connectionSampler = p2pService?.reqresp?.getConnectionSampler?.();
220
+ if (connectionSampler?.getPeerListSortedByConnectionCountAsc) {
221
+ return connectionSampler.getPeerListSortedByConnectionCountAsc().length;
222
+ }
223
+ return 0;
224
+ }
225
+
207
226
  async function runAggregatorBenchmark(
208
227
  client: P2PClient,
209
228
  blockProposal: BlockProposal,
@@ -321,6 +340,37 @@ let workerConfig: P2PConfig | null = null;
321
340
  let workerLogger: Logger | null = null;
322
341
  let kvStore: Awaited<ReturnType<typeof openTmpStore>> | null = null;
323
342
 
343
+ async function stopWorker() {
344
+ try {
345
+ if (workerClient) {
346
+ await workerClient.stop();
347
+ workerClient = null;
348
+ }
349
+ } catch (e) {
350
+ workerLogger?.error('Error stopping worker client', e);
351
+ }
352
+ try {
353
+ if (kvStore?.close) {
354
+ await kvStore.close();
355
+ kvStore = null;
356
+ }
357
+ } catch (e) {
358
+ workerLogger?.error('Error closing kv store', e);
359
+ }
360
+ }
361
+
362
+ function gracefulExit(code: number = 0) {
363
+ try {
364
+ if (process.connected) {
365
+ process.disconnect();
366
+ }
367
+ } catch {
368
+ // IPC channel already closed
369
+ }
370
+ // Safety fallback if lingering handles prevent the event loop from draining
371
+ setTimeout(() => process.exit(code), 5000).unref();
372
+ }
373
+
324
374
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
325
375
  process.on('message', async msg => {
326
376
  const {
@@ -344,7 +394,7 @@ process.on('message', async msg => {
344
394
  workerConfig = config;
345
395
  workerTxPool = new InMemoryTxPool();
346
396
  workerAttestationPool = new InMemoryAttestationPool();
347
- const epochCache = mock<EpochCache>();
397
+ const epochCache = createMockEpochCache();
348
398
  const worldState = createMockWorldStateSynchronizer();
349
399
  const l2BlockSource = new MockL2BlockSource();
350
400
 
@@ -410,13 +460,8 @@ process.on('message', async msg => {
410
460
  const cmd = msg as any;
411
461
  switch (cmd.type) {
412
462
  case 'STOP':
413
- if (workerClient) {
414
- await workerClient.stop();
415
- }
416
- if (kvStore?.close) {
417
- await kvStore.close();
418
- }
419
- process.exit(0);
463
+ await stopWorker();
464
+ gracefulExit(0);
420
465
  break;
421
466
 
422
467
  case 'SEND_TX':
@@ -426,6 +471,13 @@ process.on('message', async msg => {
426
471
  }
427
472
  break;
428
473
 
474
+ case 'GET_PEER_COUNT':
475
+ process.send!({
476
+ type: 'PEER_COUNT',
477
+ count: workerClient ? getConnectedPeerCount(workerClient) : 0,
478
+ });
479
+ break;
480
+
429
481
  case 'BENCH_REQRESP': {
430
482
  const benchCmd = cmd as BenchReqRespCommand;
431
483
  if (!workerClient || !workerTxPool || !workerAttestationPool || !workerConfig || !workerLogger) {
@@ -442,6 +494,7 @@ process.on('message', async msg => {
442
494
  // Reset state before each benchmark run to avoid cross-run contamination
443
495
  workerTxPool.resetState();
444
496
  workerAttestationPool.resetState();
497
+ resetPeerScores(workerClient);
445
498
 
446
499
  installUnlimitedRateLimits(workerClient);
447
500
 
@@ -493,7 +546,12 @@ process.on('message', async msg => {
493
546
  }
494
547
  }
495
548
  } catch (err: any) {
496
- process.send!({ type: 'ERROR', error: err.message });
497
- process.exit(1);
549
+ try {
550
+ process.send!({ type: 'ERROR', error: err.message });
551
+ } catch {
552
+ // IPC channel may be closed
553
+ }
554
+ await stopWorker();
555
+ gracefulExit(1);
498
556
  }
499
557
  });
@@ -72,7 +72,6 @@ class WorkerClientManager {
72
72
  destroy() {
73
73
  this.cleanup().catch((error: Error) => {
74
74
  this.logger.error('Failed to cleanup worker client manager', error);
75
- process.exit(1);
76
75
  });
77
76
  }
78
77
 
@@ -425,6 +424,61 @@ class WorkerClientManager {
425
424
  this.logger.info('All worker processes cleaned up');
426
425
  }
427
426
 
427
+ /**
428
+ * Checks that the aggregator (client 0) has sufficient peer connections before running a benchmark.
429
+ * This prevents benchmark cases from starting with degraded connectivity after a previous case
430
+ * caused connection failures.
431
+ */
432
+ async waitForConnectivity(minPeers: number, timeoutMs: number = 15_000): Promise<number> {
433
+ const waitInterval = 1000;
434
+ let waited = 0;
435
+
436
+ while (waited < timeoutMs) {
437
+ const count = await this.getPeerCount(0, 5000);
438
+ if (count >= minPeers) {
439
+ this.logger.info(`Connectivity check passed: ${count}/${minPeers} peers connected`);
440
+ return count;
441
+ }
442
+ this.logger.debug(`Waiting for connectivity: ${count}/${minPeers} (waited ${waited}ms)`);
443
+ await sleep(waitInterval);
444
+ waited += waitInterval;
445
+ }
446
+
447
+ const finalCount = await this.getPeerCount(0, 5000);
448
+ this.logger.warn(`Connectivity check: only ${finalCount}/${minPeers} peers after ${timeoutMs}ms`);
449
+ return finalCount;
450
+ }
451
+
452
+ private getPeerCount(clientIndex: number, timeoutMs: number): Promise<number> {
453
+ return new Promise<number>(resolve => {
454
+ let resolved = false;
455
+
456
+ const handler = (msg: any) => {
457
+ if (resolved) {
458
+ return;
459
+ }
460
+ if (msg.type === 'PEER_COUNT') {
461
+ resolved = true;
462
+ clearTimeout(timeout);
463
+ this.processes[clientIndex].off('message', handler);
464
+ resolve(msg.count as number);
465
+ }
466
+ };
467
+
468
+ const timeout = setTimeout(() => {
469
+ if (resolved) {
470
+ return;
471
+ }
472
+ resolved = true;
473
+ this.processes[clientIndex].off('message', handler);
474
+ resolve(0);
475
+ }, timeoutMs);
476
+
477
+ this.processes[clientIndex].on('message', handler);
478
+ this.processes[clientIndex].send({ type: 'GET_PEER_COUNT' });
479
+ });
480
+ }
481
+
428
482
  /**
429
483
  * Run a req/resp benchmark across all worker clients.
430
484
  *
@@ -1,125 +0,0 @@
1
- import { BlockNumber } from '@aztec/foundation/branded-types';
2
- import { Fr } from '@aztec/foundation/curves/bn254';
3
- import { type Logger } from '@aztec/foundation/log';
4
- import type { TypedEventEmitter } from '@aztec/foundation/types';
5
- import type { AztecAsyncKVStore } from '@aztec/kv-store';
6
- import { AztecAddress } from '@aztec/stdlib/aztec-address';
7
- import type { MerkleTreeReadOperations, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
8
- import { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
9
- import { type TelemetryClient } from '@aztec/telemetry-client';
10
- import { ArchiveCache } from '../../msg_validators/tx_validator/archive_cache.js';
11
- import { FeePayerTxInfo, type PendingTxInfo, type TxBlockReference, type TxPoolOperations } from './eviction/eviction_strategy.js';
12
- import type { TxPool, TxPoolEvents, TxPoolOptions } from './tx_pool.js';
13
- declare const AztecKVTxPool_base: new () => TypedEventEmitter<TxPoolEvents>;
14
- /**
15
- * KV implementation of the Transaction Pool.
16
- */
17
- export declare class AztecKVTxPool extends AztecKVTxPool_base implements TxPool, TxPoolOperations {
18
- #private;
19
- /**
20
- * Class constructor for KV TxPool. Initiates our transaction pool as an AztecMap.
21
- * @param store - A KV store for live txs in the pool.
22
- * @param archive - A KV store for archived txs.
23
- * @param telemetry - A telemetry client.
24
- * @param archivedTxLimit - The number of txs to archive.
25
- * @param log - A logger.
26
- */
27
- constructor(store: AztecAsyncKVStore, archive: AztecAsyncKVStore, worldState: WorldStateSynchronizer, telemetry?: TelemetryClient, config?: TxPoolOptions, log?: Logger);
28
- private countTxs;
29
- isEmpty(): Promise<boolean>;
30
- /**
31
- * Marks transactions as mined in a block and updates the pool state accordingly.
32
- * Removes the transactions from the pending set and adds them to the mined set.
33
- * Also evicts any transactions that become invalid after the block is mined.
34
- * @param txHashes - Array of transaction hashes that were mined
35
- * @param blockHeader - The header of the block the transactions were mined in
36
- */
37
- markAsMined(txHashes: TxHash[], blockHeader: BlockHeader): Promise<void>;
38
- markMinedAsPending(txHashes: TxHash[], latestBlock: BlockNumber): Promise<void>;
39
- getPendingTxHashes(): Promise<TxHash[]>;
40
- /**
41
- * Checks if a transaction exists in the pool and returns it.
42
- * @param txHash - The generated tx hash.
43
- * @returns The transaction, if found, 'undefined' otherwise.
44
- */
45
- getTxByHash(txHash: TxHash): Promise<Tx | undefined>;
46
- getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
47
- hasTxs(txHashes: TxHash[]): Promise<boolean[]>;
48
- hasTx(txHash: TxHash): Promise<boolean>;
49
- /**
50
- * Checks if an archived tx exists and returns it.
51
- * @param txHash - The tx hash.
52
- * @returns The transaction metadata, if found, 'undefined' otherwise.
53
- */
54
- getArchivedTxByHash(txHash: TxHash): Promise<Tx | undefined>;
55
- /**
56
- * Adds a list of transactions to the pool. Duplicates are ignored.
57
- * Handles nullifier deduplication: if an incoming tx has a nullifier conflict with
58
- * existing pending txs, it will either replace them (if higher fee) or be rejected.
59
- * @param txs - An array of txs to be added to the pool.
60
- * @returns count of added transactions
61
- */
62
- addTxs(txs: Tx[], opts?: {
63
- source?: string;
64
- }): Promise<number>;
65
- /**
66
- * Deletes transactions from the pool. Tx hashes that are not present are ignored.
67
- * Mined transactions are soft-deleted with a timestamp, pending transactions are permanently deleted.
68
- * @param txHashes - An array of tx hashes to be deleted from the tx pool.
69
- * @returns Empty promise.
70
- */
71
- deleteTxs(txHashes: TxHash[], opts?: {
72
- permanently?: boolean;
73
- }): Promise<void>;
74
- private deleteMinedTx;
75
- private deletePendingTxInDbTx;
76
- /**
77
- * Gets all the transactions stored in the pool.
78
- * @returns Array of tx objects in the order they were added to the pool.
79
- */
80
- getAllTxs(): Promise<Tx[]>;
81
- /**
82
- * Gets the hashes of all transactions currently in the tx pool.
83
- * @returns An array of transaction hashes found in the tx pool.
84
- */
85
- getAllTxHashes(): Promise<TxHash[]>;
86
- getPendingTxInfos(): Promise<PendingTxInfo[]>;
87
- private getPendingTxInfo;
88
- getPendingTxsReferencingBlocks(blockHashes: Fr[]): Promise<TxBlockReference[]>;
89
- getPendingFeePayers(): Promise<AztecAddress[]>;
90
- getFeePayerTxInfos(feePayer: AztecAddress): AsyncIterable<FeePayerTxInfo>;
91
- getMinedTxHashes(): Promise<[TxHash, BlockNumber][]>;
92
- getPendingTxCount(): Promise<number>;
93
- getMinedTxCount(): Promise<number>;
94
- getTxStatus(txHash: TxHash): Promise<'pending' | 'mined' | 'deleted' | undefined>;
95
- updateConfig(cfg: TxPoolOptions): void;
96
- markTxsAsNonEvictable(txHashes: TxHash[]): Promise<void>;
97
- clearNonEvictableTxs(): Promise<void>;
98
- /**
99
- * Permanently deletes deleted mined transactions from blocks up to and including the specified block number.
100
- * @param blockNumber - Block number threshold. Deleted mined txs from this block or earlier will be permanently deleted.
101
- * @returns The number of transactions permanently deleted.
102
- */
103
- cleanupDeletedMinedTxs(blockNumber: BlockNumber): Promise<number>;
104
- /**
105
- * Creates an ArchiveCache instance.
106
- * @param db - DB for the cache to use
107
- * @returns An ArchiveCache instance
108
- */
109
- protected createArchiveCache(db: MerkleTreeReadOperations): ArchiveCache;
110
- private archiveTxs;
111
- private addPendingTxIndicesInDbTx;
112
- private removePendingTxIndicesInDbTx;
113
- /**
114
- * Returns up to `limit` lowest-priority evictable pending tx hashes without hydrating transactions.
115
- * Iterates the priority index in ascending order and skips non-evictable txs.
116
- */
117
- getLowestPriorityEvictable(limit: number): Promise<TxHash[]>;
118
- /**
119
- * Creates a PreAddPoolAccess object for use by pre-add eviction rules.
120
- * Provides read-only access to pool state during addTxs transaction.
121
- */
122
- private getPreAddPoolAccess;
123
- }
124
- export {};
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXp0ZWNfa3ZfdHhfcG9vbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21lbV9wb29scy90eF9wb29sL2F6dGVjX2t2X3R4X3Bvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVwRCxPQUFPLEVBQUUsS0FBSyxNQUFNLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDbEUsT0FBTyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBcUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUd4RyxPQUFPLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0seUJBQXlCLENBQUM7QUFLbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBR2xGLE9BQU8sRUFDTCxjQUFjLEVBQ2QsS0FBSyxhQUFhLEVBRWxCLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssZ0JBQWdCLEVBQ3RCLE1BQU0saUNBQWlDLENBQUM7QUFPekMsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBRXhFOztHQUVHO0FBQ0gscUJBQWEsYUFDWCxTQUFRLGtCQUNSLFlBQVcsTUFBTSxFQUFFLGdCQUFnQjs7SUFrRG5DOzs7Ozs7O09BT0c7SUFDSCxZQUNFLEtBQUssRUFBRSxpQkFBaUIsRUFDeEIsT0FBTyxFQUFFLGlCQUFpQixFQUMxQixVQUFVLEVBQUUsc0JBQXNCLEVBQ2xDLFNBQVMsR0FBRSxlQUFzQyxFQUNqRCxNQUFNLEdBQUUsYUFBa0IsRUFDMUIsR0FBRyxTQUE4QixFQXdDbEM7SUFFRCxPQUFPLENBQUMsUUFBUSxDQVNkO0lBRVcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FLdkM7SUFFRDs7Ozs7O09BTUc7SUFDVSxXQUFXLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLFdBQVcsRUFBRSxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQStDcEY7SUFFWSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEVBQUUsV0FBVyxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBOEIzRjtJQUVZLGtCQUFrQixJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUduRDtJQUVEOzs7O09BSUc7SUFDVSxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUdoRTtJQUVLLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FHbEU7SUFFSyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUVuRDtJQUVLLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FHNUM7SUFFRDs7OztPQUlHO0lBQ1UsbUJBQW1CLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUd4RTtJQUVEOzs7Ozs7T0FNRztJQUNVLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxHQUFFO1FBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBMEU5RTtJQUVEOzs7OztPQUtHO0lBQ0ksU0FBUyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtRQUFFLFdBQVcsQ0FBQyxFQUFFLE9BQU8sQ0FBQTtLQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQWdDcEY7WUFFYSxhQUFhO1lBZWIscUJBQXFCO0lBUW5DOzs7T0FHRztJQUNVLFNBQVMsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FHdEM7SUFFRDs7O09BR0c7SUFDVSxjQUFjLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBRy9DO0lBRVksaUJBQWlCLElBQUksT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBSXpEO1lBRWEsZ0JBQWdCO0lBcUJqQiw4QkFBOEIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FjMUY7SUFFWSxtQkFBbUIsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FPMUQ7SUFFYSxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsWUFBWSxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FNdEY7SUFFWSxnQkFBZ0IsSUFBSSxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUdoRTtJQUVZLGlCQUFpQixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FFaEQ7SUFFWSxlQUFlLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUU5QztJQUVZLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxTQUFTLEdBQUcsT0FBTyxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FpQjdGO0lBRU0sWUFBWSxDQUFDLEdBQUcsRUFBRSxhQUFhLEdBQUcsSUFBSSxDQVM1QztJQUVNLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBRzlEO0lBRU0sb0JBQW9CLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQU8zQztJQUVEOzs7O09BSUc7SUFDVSxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FrQzdFO0lBRUQ7Ozs7T0FJRztJQUNILFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsd0JBQXdCLEdBQUcsWUFBWSxDQUV2RTtZQVFhLFVBQVU7WUFnRFYseUJBQXlCO1lBYXpCLDRCQUE0QjtJQWtCMUM7OztPQUdHO0lBQ1UsMEJBQTBCLENBQUMsS0FBSyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FrQnhFO0lBRUQ7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLG1CQUFtQjtDQVU1QiJ9
@@ -1 +0,0 @@
1
- {"version":3,"file":"aztec_kv_tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/aztec_kv_tx_pool.ts"],"names":[],"mappings":"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"}