@aztec/p2p 0.0.1-commit.d431d1c → 0.0.1-commit.e310a4c8

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 (255) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +4 -3
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +4 -4
  4. package/dest/client/factory.d.ts +1 -1
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +6 -5
  7. package/dest/client/p2p_client.d.ts +1 -1
  8. package/dest/client/p2p_client.d.ts.map +1 -1
  9. package/dest/client/p2p_client.js +9 -2
  10. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  11. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  12. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
  13. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  14. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  15. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  16. package/dest/config.d.ts +8 -2
  17. package/dest/config.d.ts.map +1 -1
  18. package/dest/config.js +2 -0
  19. package/dest/mem_pools/instrumentation.d.ts +1 -1
  20. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  21. package/dest/mem_pools/instrumentation.js +2 -2
  22. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +3 -3
  23. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  24. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +3 -2
  25. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -1
  26. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +3 -2
  27. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -1
  28. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +3 -3
  29. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  30. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +8 -1
  31. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +3 -3
  32. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
  33. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +2 -0
  34. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +3 -3
  35. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  36. package/dest/msg_validators/attestation_validator/attestation_validator.js +40 -9
  37. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +3 -3
  38. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  39. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +18 -6
  40. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  41. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  42. package/dest/msg_validators/clock_tolerance.js +37 -0
  43. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +3 -3
  44. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  45. package/dest/msg_validators/proposal_validator/proposal_validator.js +46 -15
  46. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +3 -3
  47. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -1
  48. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +66 -11
  49. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  50. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  51. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  52. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +5 -4
  53. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  54. package/dest/msg_validators/tx_validator/block_header_validator.js +3 -2
  55. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  56. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  57. package/dest/msg_validators/tx_validator/data_validator.js +4 -1
  58. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -2
  59. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  60. package/dest/msg_validators/tx_validator/double_spend_validator.js +3 -2
  61. package/dest/msg_validators/tx_validator/factory.d.ts +8 -3
  62. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  63. package/dest/msg_validators/tx_validator/factory.js +21 -11
  64. package/dest/msg_validators/tx_validator/gas_validator.d.ts +3 -2
  65. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  66. package/dest/msg_validators/tx_validator/gas_validator.js +3 -2
  67. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  68. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  69. package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
  70. package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
  71. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  72. package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
  73. package/dest/msg_validators/tx_validator/size_validator.d.ts +3 -1
  74. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -1
  75. package/dest/msg_validators/tx_validator/size_validator.js +4 -1
  76. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +3 -2
  77. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  78. package/dest/msg_validators/tx_validator/timestamp_validator.js +2 -2
  79. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  80. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  81. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  82. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  83. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  84. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  85. package/dest/services/data_store.d.ts +1 -1
  86. package/dest/services/data_store.d.ts.map +1 -1
  87. package/dest/services/data_store.js +10 -6
  88. package/dest/services/discv5/discV5_service.js +1 -1
  89. package/dest/services/dummy_service.d.ts +13 -1
  90. package/dest/services/dummy_service.d.ts.map +1 -1
  91. package/dest/services/dummy_service.js +39 -0
  92. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  93. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  94. package/dest/services/libp2p/instrumentation.js +14 -3
  95. package/dest/services/libp2p/libp2p_service.d.ts +13 -7
  96. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  97. package/dest/services/libp2p/libp2p_service.js +61 -52
  98. package/dest/services/peer-manager/metrics.d.ts +2 -2
  99. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  100. package/dest/services/peer-manager/metrics.js +20 -5
  101. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  102. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  103. package/dest/services/peer-manager/peer_scoring.js +8 -2
  104. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
  105. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  106. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
  107. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  108. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  109. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  110. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  111. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  112. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  113. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
  114. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  115. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
  116. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
  117. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  118. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
  119. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  120. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  121. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  122. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  123. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  124. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  125. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  126. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  127. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  128. package/dest/services/reqresp/interface.d.ts +5 -3
  129. package/dest/services/reqresp/interface.d.ts.map +1 -1
  130. package/dest/services/reqresp/interface.js +2 -2
  131. package/dest/services/reqresp/metrics.d.ts +6 -5
  132. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  133. package/dest/services/reqresp/metrics.js +17 -5
  134. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  135. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  136. package/dest/services/reqresp/protocols/block_txs/bitvector.js +5 -0
  137. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  138. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  139. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +16 -3
  140. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +18 -6
  141. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  142. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +43 -13
  143. package/dest/services/reqresp/reqresp.d.ts +6 -1
  144. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  145. package/dest/services/reqresp/reqresp.js +58 -22
  146. package/dest/services/service.d.ts +4 -1
  147. package/dest/services/service.d.ts.map +1 -1
  148. package/dest/services/tx_collection/config.d.ts +4 -1
  149. package/dest/services/tx_collection/config.d.ts.map +1 -1
  150. package/dest/services/tx_collection/config.js +9 -1
  151. package/dest/services/tx_collection/fast_tx_collection.d.ts +6 -4
  152. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  153. package/dest/services/tx_collection/fast_tx_collection.js +16 -5
  154. package/dest/services/tx_collection/index.d.ts +2 -1
  155. package/dest/services/tx_collection/index.d.ts.map +1 -1
  156. package/dest/services/tx_collection/index.js +1 -0
  157. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  158. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  159. package/dest/services/tx_collection/instrumentation.js +9 -2
  160. package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
  161. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  162. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  163. package/dest/services/tx_collection/slow_tx_collection.d.ts +3 -3
  164. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  165. package/dest/services/tx_collection/tx_collection.d.ts +8 -8
  166. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  167. package/dest/services/tx_collection/tx_collection.js +5 -5
  168. package/dest/services/tx_provider.d.ts +3 -3
  169. package/dest/services/tx_provider.d.ts.map +1 -1
  170. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  171. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  172. package/dest/services/tx_provider_instrumentation.js +5 -5
  173. package/dest/test-helpers/index.d.ts +3 -1
  174. package/dest/test-helpers/index.d.ts.map +1 -1
  175. package/dest/test-helpers/index.js +2 -0
  176. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  177. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  178. package/dest/test-helpers/test_tx_provider.js +41 -0
  179. package/dest/test-helpers/testbench-utils.d.ts +158 -0
  180. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  181. package/dest/test-helpers/testbench-utils.js +297 -0
  182. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  183. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  184. package/dest/testbench/p2p_client_testbench_worker.js +212 -130
  185. package/dest/testbench/worker_client_manager.d.ts +51 -6
  186. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  187. package/dest/testbench/worker_client_manager.js +226 -44
  188. package/package.json +14 -14
  189. package/src/bootstrap/bootstrap.ts +7 -4
  190. package/src/client/factory.ts +6 -10
  191. package/src/client/p2p_client.ts +14 -7
  192. package/src/client/test/tx_proposal_collector/README.md +227 -0
  193. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
  194. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  195. package/src/config.ts +6 -1
  196. package/src/mem_pools/instrumentation.ts +2 -1
  197. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +2 -2
  198. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +2 -1
  199. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +2 -1
  200. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +10 -7
  201. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +4 -2
  202. package/src/msg_validators/attestation_validator/attestation_validator.ts +25 -13
  203. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -8
  204. package/src/msg_validators/clock_tolerance.ts +51 -0
  205. package/src/msg_validators/proposal_validator/proposal_validator.ts +21 -14
  206. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +53 -14
  207. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  208. package/src/msg_validators/tx_validator/block_header_validator.ts +6 -5
  209. package/src/msg_validators/tx_validator/data_validator.ts +6 -2
  210. package/src/msg_validators/tx_validator/double_spend_validator.ts +4 -3
  211. package/src/msg_validators/tx_validator/factory.ts +64 -23
  212. package/src/msg_validators/tx_validator/gas_validator.ts +9 -3
  213. package/src/msg_validators/tx_validator/metadata_validator.ts +6 -3
  214. package/src/msg_validators/tx_validator/phases_validator.ts +5 -3
  215. package/src/msg_validators/tx_validator/size_validator.ts +6 -2
  216. package/src/msg_validators/tx_validator/timestamp_validator.ts +6 -3
  217. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  218. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  219. package/src/services/data_store.ts +10 -7
  220. package/src/services/discv5/discV5_service.ts +1 -1
  221. package/src/services/dummy_service.ts +45 -0
  222. package/src/services/libp2p/instrumentation.ts +15 -2
  223. package/src/services/libp2p/libp2p_service.ts +99 -75
  224. package/src/services/peer-manager/metrics.ts +21 -4
  225. package/src/services/peer-manager/peer_scoring.ts +4 -1
  226. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  227. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
  228. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  229. package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
  230. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
  231. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
  232. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  233. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  234. package/src/services/reqresp/connection-sampler/connection_sampler.ts +16 -0
  235. package/src/services/reqresp/interface.ts +5 -2
  236. package/src/services/reqresp/metrics.ts +34 -9
  237. package/src/services/reqresp/protocols/block_txs/bitvector.ts +7 -0
  238. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +18 -4
  239. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +51 -9
  240. package/src/services/reqresp/reqresp.ts +66 -19
  241. package/src/services/service.ts +4 -0
  242. package/src/services/tx_collection/config.ts +15 -1
  243. package/src/services/tx_collection/fast_tx_collection.ts +36 -13
  244. package/src/services/tx_collection/index.ts +5 -0
  245. package/src/services/tx_collection/instrumentation.ts +11 -2
  246. package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
  247. package/src/services/tx_collection/slow_tx_collection.ts +2 -2
  248. package/src/services/tx_collection/tx_collection.ts +8 -8
  249. package/src/services/tx_provider.ts +2 -2
  250. package/src/services/tx_provider_instrumentation.ts +11 -5
  251. package/src/test-helpers/index.ts +2 -0
  252. package/src/test-helpers/test_tx_provider.ts +64 -0
  253. package/src/test-helpers/testbench-utils.ts +374 -0
  254. package/src/testbench/p2p_client_testbench_worker.ts +321 -122
  255. package/src/testbench/worker_client_manager.ts +304 -47
@@ -1,114 +1,33 @@
1
1
  /**
2
2
  * A testbench worker that creates a p2p client and listens for commands from the parent.
3
3
  *
4
- * Used when running testbench commands
4
+ * Used when running testbench commands.
5
5
  */ import { MockL2BlockSource } from '@aztec/archiver/test';
6
- import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
6
+ import { BlockNumber } from '@aztec/foundation/branded-types';
7
7
  import { SecretValue } from '@aztec/foundation/config';
8
+ import { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
9
+ import { Fr } from '@aztec/foundation/curves/bn254';
8
10
  import { createLogger } from '@aztec/foundation/log';
9
11
  import { sleep } from '@aztec/foundation/sleep';
12
+ import { DateProvider, Timer } from '@aztec/foundation/timer';
10
13
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
14
+ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
15
+ import { protocolContractsHash } from '@aztec/protocol-contracts';
11
16
  import { P2PClientType, P2PMessage } from '@aztec/stdlib/p2p';
12
- import { Tx, TxStatus } from '@aztec/stdlib/tx';
17
+ import { ChonkProof } from '@aztec/stdlib/proofs';
18
+ import { makeAztecAddress, makeBlockHeader, makeBlockProposal, mockTx } from '@aztec/stdlib/testing';
19
+ import { Tx } from '@aztec/stdlib/tx';
13
20
  import { getTelemetryClient } from '@aztec/telemetry-client';
14
21
  import { TopicValidatorResult } from '@libp2p/interface';
15
- import EventEmitter from 'events';
22
+ import { peerIdFromString } from '@libp2p/peer-id';
16
23
  import { createP2PClient } from '../index.js';
17
24
  import { LibP2PService } from '../services/libp2p/libp2p_service.js';
25
+ import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
26
+ import { BatchTxRequesterCollector, SendBatchRequestCollector } from '../services/tx_collection/proposal_tx_collector.js';
18
27
  import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
19
- // Simple mock implementation
20
- function mockTxPool() {
21
- // Mock all methods
22
- const pool = {
23
- isEmpty: ()=>Promise.resolve(false),
24
- addTxs: ()=>Promise.resolve(1),
25
- getTxByHash: ()=>Promise.resolve(undefined),
26
- getArchivedTxByHash: ()=>Promise.resolve(undefined),
27
- markAsMined: ()=>Promise.resolve(),
28
- markMinedAsPending: ()=>Promise.resolve(),
29
- deleteTxs: ()=>Promise.resolve(),
30
- getAllTxs: ()=>Promise.resolve([]),
31
- getAllTxHashes: ()=>Promise.resolve([]),
32
- getPendingTxHashes: ()=>Promise.resolve([]),
33
- getPendingTxCount: ()=>Promise.resolve(0),
34
- getMinedTxHashes: ()=>Promise.resolve([]),
35
- getTxStatus: ()=>Promise.resolve(TxStatus.PENDING),
36
- getTxsByHash: ()=>Promise.resolve([]),
37
- hasTxs: ()=>Promise.resolve([]),
38
- hasTx: ()=>Promise.resolve(false),
39
- updateConfig: ()=>{},
40
- markTxsAsNonEvictable: ()=>Promise.resolve(),
41
- clearNonEvictableTxs: ()=>Promise.resolve(),
42
- cleanupDeletedMinedTxs: ()=>Promise.resolve(0)
43
- };
44
- return Object.assign(new EventEmitter(), pool);
45
- }
46
- function mockAttestationPool() {
47
- return {
48
- isEmpty: ()=>Promise.resolve(false),
49
- addBlockProposal: ()=>Promise.resolve(),
50
- getBlockProposal: ()=>Promise.resolve(undefined),
51
- hasBlockProposal: ()=>Promise.resolve(false),
52
- canAddProposal: ()=>Promise.resolve(true),
53
- // Checkpoint attestation methods
54
- addCheckpointProposal: ()=>Promise.resolve(),
55
- getCheckpointProposal: ()=>Promise.resolve(undefined),
56
- hasCheckpointProposal: ()=>Promise.resolve(false),
57
- addCheckpointAttestations: ()=>Promise.resolve(),
58
- getCheckpointAttestationsForSlot: ()=>Promise.resolve([]),
59
- getCheckpointAttestationsForSlotAndProposal: ()=>Promise.resolve([]),
60
- deleteCheckpointAttestationsOlderThan: ()=>Promise.resolve(),
61
- hasReachedCheckpointProposalCap: ()=>Promise.resolve(false),
62
- hasReachedCheckpointAttestationCap: ()=>Promise.resolve(false),
63
- canAddCheckpointProposal: ()=>Promise.resolve(true),
64
- canAddCheckpointAttestation: ()=>Promise.resolve(true),
65
- hasCheckpointAttestation: ()=>Promise.resolve(false)
66
- };
67
- }
68
- function mockEpochCache() {
69
- return {
70
- getCommittee: ()=>Promise.resolve({
71
- committee: [],
72
- seed: 1n,
73
- epoch: EpochNumber.ZERO,
74
- isEscapeHatchOpen: false
75
- }),
76
- getProposerIndexEncoding: ()=>'0x',
77
- getEpochAndSlotNow: ()=>({
78
- epoch: EpochNumber.ZERO,
79
- slot: SlotNumber.ZERO,
80
- ts: 0n
81
- }),
82
- computeProposerIndex: ()=>0n,
83
- getCurrentAndNextSlot: ()=>({
84
- currentSlot: SlotNumber.ZERO,
85
- nextSlot: SlotNumber.ZERO
86
- }),
87
- getProposerAttesterAddressInSlot: ()=>Promise.resolve(undefined),
88
- getEpochAndSlotInNextL1Slot: ()=>({
89
- epoch: EpochNumber.ZERO,
90
- slot: SlotNumber.ZERO,
91
- ts: 0n,
92
- now: 0n
93
- }),
94
- isInCommittee: ()=>Promise.resolve(false),
95
- getRegisteredValidators: ()=>Promise.resolve([]),
96
- filterInCommittee: ()=>Promise.resolve([])
97
- };
98
- }
99
- function mockWorldStateSynchronizer() {
100
- return {
101
- status: ()=>Promise.resolve({
102
- syncSummary: {
103
- latestBlockNumber: 0,
104
- latestBlockHash: '',
105
- finalizedBlockNumber: 0,
106
- treesAreSynched: false,
107
- oldestHistoricBlockNumber: 0
108
- }
109
- })
110
- };
111
- }
28
+ import { BENCHMARK_CONSTANTS, InMemoryAttestationPool, InMemoryTxPool, UNLIMITED_RATE_LIMIT_QUOTA, createMockEpochCache, createMockWorldStateSynchronizer, filterTxsByDistribution } from '../test-helpers/testbench-utils.js';
29
+ export { COLLECTOR_DISPLAY_NAMES } from '../test-helpers/testbench-utils.js';
30
+ const txCache = new Map();
112
31
  class TestLibP2PService extends LibP2PService {
113
32
  disableTxValidation;
114
33
  gossipMessageCount = 0;
@@ -146,68 +65,231 @@ class TestLibP2PService extends LibP2PService {
146
65
  await super.handleNewGossipMessage(msg, msgId, source);
147
66
  }
148
67
  }
68
+ async function generateDeterministicTxs(txCount, seed, config) {
69
+ const cached = txCache.get(seed) ?? [];
70
+ if (cached.length >= txCount) {
71
+ return cached.slice(0, txCount);
72
+ }
73
+ const includeByTimestampBase = BigInt(seed);
74
+ for(let i = cached.length; i < txCount; i++){
75
+ const txSeed = seed * 10000 + i;
76
+ const tx = await mockTx(txSeed, {
77
+ chainId: new Fr(config.l1ChainId),
78
+ version: new Fr(config.rollupVersion),
79
+ vkTreeRoot: getVKTreeRoot(),
80
+ protocolContractsHash,
81
+ feePayer: makeAztecAddress(txSeed + 1),
82
+ chonkProof: ChonkProof.empty(),
83
+ numberOfNonRevertiblePublicCallRequests: 0,
84
+ numberOfRevertiblePublicCallRequests: 0,
85
+ numberOfRevertibleNullifiers: 0,
86
+ hasPublicTeardownCallRequest: false,
87
+ publicCalldataSize: 0
88
+ });
89
+ tx.data.includeByTimestamp = includeByTimestampBase + BigInt(i);
90
+ await tx.recomputeHash();
91
+ cached.push(tx);
92
+ }
93
+ txCache.set(seed, cached);
94
+ return cached.slice(0, txCount);
95
+ }
96
+ async function createBlockProposal(blockNumber, txHashes, seed) {
97
+ const archiveRoot = new Fr(BigInt(seed) * 1000000n + BigInt(blockNumber));
98
+ return await makeBlockProposal({
99
+ signer: Secp256k1Signer.random(),
100
+ blockHeader: makeBlockHeader(1, {
101
+ blockNumber: BlockNumber(blockNumber)
102
+ }),
103
+ archiveRoot,
104
+ txHashes
105
+ });
106
+ }
107
+ function installUnlimitedRateLimits(client) {
108
+ const reqResp = client.p2pService.reqresp;
109
+ const rateLimiter = reqResp.rateLimiter;
110
+ rateLimiter.getRateLimits = ()=>UNLIMITED_RATE_LIMIT_QUOTA;
111
+ rateLimiter.allow = ()=>RateLimitStatus.Allowed;
112
+ }
113
+ async function runAggregatorBenchmark(client, blockProposal, collectorType, timeoutMs, pinnedPeerId, pinnedPeerIndex, logger, expectedPeerCount) {
114
+ let timer = new Timer();
115
+ try {
116
+ installUnlimitedRateLimits(client);
117
+ const txHashes = blockProposal.txHashes;
118
+ logger.info(`[BENCH] Using block proposal with archive ${blockProposal.archive.toString().slice(0, 10)}...`);
119
+ const p2pService = client.p2pService;
120
+ const batchTxRequesterService = p2pService.getBatchTxRequesterService();
121
+ const minPeersRequired = Math.max(1, expectedPeerCount - 1);
122
+ const maxWaitMs = BENCHMARK_CONSTANTS.MAX_PEER_WAIT_MS;
123
+ const waitInterval = BENCHMARK_CONSTANTS.PEER_CHECK_INTERVAL_MS;
124
+ let waited = 0;
125
+ while(waited < maxWaitMs){
126
+ const connectedPeers = batchTxRequesterService.connectionSampler.getPeerListSortedByConnectionCountAsc();
127
+ if (connectedPeers.length >= minPeersRequired) {
128
+ logger.info(`[BENCH] Aggregator has ${connectedPeers.length} connected peers, starting benchmark`);
129
+ break;
130
+ }
131
+ logger.debug(`[BENCH] Waiting for peers: ${connectedPeers.length}/${minPeersRequired} (waited ${waited}ms)`);
132
+ await sleep(waitInterval);
133
+ waited += waitInterval;
134
+ }
135
+ const connectedPeers = batchTxRequesterService.connectionSampler.getPeerListSortedByConnectionCountAsc();
136
+ logger.info(`[BENCH] Aggregator has ${connectedPeers.length} connected peers`);
137
+ logger.info(`[BENCH] Requesting ${txHashes.length} tx hashes: ${txHashes.slice(0, 3).map((h)=>h.toString()).join(', ')}...`);
138
+ let pinnedPeer;
139
+ if (pinnedPeerId) {
140
+ pinnedPeer = peerIdFromString(pinnedPeerId);
141
+ } else if (pinnedPeerIndex !== undefined) {
142
+ if (pinnedPeerIndex > 0 && pinnedPeerIndex <= connectedPeers.length) {
143
+ pinnedPeer = connectedPeers[pinnedPeerIndex - 1];
144
+ }
145
+ }
146
+ const noopTxValidator = {
147
+ validateRequestedTx: (_tx)=>Promise.resolve({
148
+ result: 'valid'
149
+ }),
150
+ validateRequestedTxs: (txs)=>Promise.resolve(txs.map(()=>({
151
+ result: 'valid'
152
+ })))
153
+ };
154
+ timer = new Timer();
155
+ if (collectorType === 'batch-requester') {
156
+ const collector = new BatchTxRequesterCollector(batchTxRequesterService, logger, new DateProvider(), noopTxValidator);
157
+ const fetchedTxs = await collector.collectTxs(txHashes, blockProposal, pinnedPeer, timeoutMs);
158
+ const durationMs = timer.ms();
159
+ return {
160
+ type: 'BENCH_RESULT',
161
+ durationMs,
162
+ fetchedCount: fetchedTxs.length,
163
+ success: fetchedTxs.length === txHashes.length
164
+ };
165
+ }
166
+ const collector = new SendBatchRequestCollector(batchTxRequesterService, BENCHMARK_CONSTANTS.FIXED_MAX_PEERS, BENCHMARK_CONSTANTS.FIXED_MAX_RETRY_ATTEMPTS);
167
+ const fetchedTxs = await collector.collectTxs(txHashes, blockProposal, pinnedPeer, timeoutMs);
168
+ const durationMs = timer.ms();
169
+ return {
170
+ type: 'BENCH_RESULT',
171
+ durationMs,
172
+ fetchedCount: fetchedTxs.length,
173
+ success: fetchedTxs.length === txHashes.length
174
+ };
175
+ } catch (err) {
176
+ return {
177
+ type: 'BENCH_RESULT',
178
+ durationMs: timer.ms(),
179
+ fetchedCount: 0,
180
+ success: false,
181
+ error: err?.message ?? String(err)
182
+ };
183
+ }
184
+ }
185
+ let workerClient = null;
186
+ let workerTxPool = null;
187
+ let workerAttestationPool = null;
188
+ let workerConfig = null;
189
+ let workerLogger = null;
190
+ let kvStore = null;
149
191
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
150
192
  process.on('message', async (msg)=>{
151
- // Note: peerIdPrivateKey comes as a raw string (not SecretValue) because
152
- // SecretValue's private fields can't be serialized via IPC
153
193
  const { type, config: rawConfig, clientIndex } = msg;
154
194
  try {
155
195
  if (type === 'START') {
156
- // Re-wrap the peerIdPrivateKey with SecretValue
157
196
  const config = {
158
197
  ...rawConfig,
159
198
  peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined
160
199
  };
161
- const txPool = mockTxPool();
162
- const attestationPool = mockAttestationPool();
163
- const epochCache = mockEpochCache();
164
- const worldState = mockWorldStateSynchronizer();
200
+ workerConfig = config;
201
+ workerTxPool = new InMemoryTxPool();
202
+ workerAttestationPool = new InMemoryAttestationPool();
203
+ const epochCache = createMockEpochCache();
204
+ const worldState = createMockWorldStateSynchronizer();
165
205
  const l2BlockSource = new MockL2BlockSource();
166
206
  const proofVerifier = new AlwaysTrueCircuitVerifier();
167
- const kvStore = await openTmpStore(`test-${clientIndex}`);
168
- const logger = createLogger(`p2p:${clientIndex}`);
207
+ kvStore = await openTmpStore(`test-${clientIndex}`, true, BENCHMARK_CONSTANTS.KV_STORE_MAP_SIZE_KB);
208
+ workerLogger = createLogger(`p2p:${clientIndex}`);
209
+ workerTxPool.setLogger(workerLogger);
169
210
  const telemetry = getTelemetryClient();
170
211
  const deps = {
171
- txPool,
172
- attestationPool,
212
+ txPool: workerTxPool,
213
+ attestationPool: workerAttestationPool,
173
214
  store: kvStore,
174
- logger
215
+ logger: workerLogger
175
216
  };
176
217
  const client = await createP2PClient(P2PClientType.Full, config, l2BlockSource, proofVerifier, worldState, epochCache, 'test-p2p-bench-worker', undefined, telemetry, deps);
177
- // Create test service with validation disabled
178
- // Note: Parameter order must match LibP2PService constructor
179
- const testService = new TestLibP2PService(P2PClientType.Full, config, client.p2pService.node, client.p2pService.peerDiscoveryService, client.p2pService.reqresp, client.p2pService.peerManager, client.p2pService.mempools, client.p2pService.archiver, epochCache, proofVerifier, worldState, telemetry, logger, true);
180
- // Replace the existing p2pService with our test version
218
+ const testService = new TestLibP2PService(P2PClientType.Full, config, client.p2pService.node, client.p2pService.peerDiscoveryService, client.p2pService.reqresp, client.p2pService.peerManager, client.p2pService.mempools, client.p2pService.archiver, epochCache, proofVerifier, worldState, telemetry, workerLogger, true);
181
219
  client.p2pService = testService;
182
220
  await client.start();
183
- // Wait until the client is ready
184
221
  for(let i = 0; i < 100; i++){
185
222
  const isReady = client.isReady();
186
- logger.debug(`Client ${clientIndex} isReady: ${isReady}`);
223
+ workerLogger.debug(`Client ${clientIndex} isReady: ${isReady}`);
187
224
  if (isReady) {
188
225
  break;
189
226
  }
190
227
  await sleep(1000);
191
228
  }
192
- // Listen for commands from parent
193
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
194
- process.on('message', async (cmd)=>{
195
- switch(cmd.type){
196
- case 'STOP':
197
- await client.stop();
198
- process.exit(0);
199
- break;
200
- case 'SEND_TX':
201
- await client.sendTx(Tx.fromBuffer(Buffer.from(cmd.tx)));
229
+ workerClient = client;
230
+ const peerId = client.p2pService.node.peerId.toString();
231
+ process.send({
232
+ type: 'READY',
233
+ peerId
234
+ });
235
+ return;
236
+ }
237
+ const cmd = msg;
238
+ switch(cmd.type){
239
+ case 'STOP':
240
+ if (workerClient) {
241
+ await workerClient.stop();
242
+ }
243
+ if (kvStore?.close) {
244
+ await kvStore.close();
245
+ }
246
+ process.exit(0);
247
+ break;
248
+ case 'SEND_TX':
249
+ if (workerClient) {
250
+ await workerClient.sendTx(Tx.fromBuffer(Buffer.from(cmd.tx)));
251
+ process.send({
252
+ type: 'TX_SENT'
253
+ });
254
+ }
255
+ break;
256
+ case 'BENCH_REQRESP':
257
+ {
258
+ const benchCmd = cmd;
259
+ if (!workerClient || !workerTxPool || !workerAttestationPool || !workerConfig || !workerLogger) {
202
260
  process.send({
203
- type: 'TX_SENT'
261
+ type: 'BENCH_RESULT',
262
+ durationMs: 0,
263
+ fetchedCount: 0,
264
+ success: false,
265
+ error: 'Worker not initialized'
204
266
  });
205
267
  break;
268
+ }
269
+ // Reset state before each benchmark run to avoid cross-run contamination
270
+ workerTxPool.resetState();
271
+ workerAttestationPool.resetState();
272
+ installUnlimitedRateLimits(workerClient);
273
+ const allTxs = await generateDeterministicTxs(benchCmd.txCount, benchCmd.seed, workerConfig);
274
+ const txHashes = allTxs.map((tx)=>tx.getTxHash());
275
+ const blockProposal = await createBlockProposal(benchCmd.blockNumber, txHashes, benchCmd.seed);
276
+ await workerAttestationPool.addBlockProposal(blockProposal);
277
+ workerLogger.debug(`[BENCH] Added block proposal with archive ${blockProposal.archive.toString().slice(0, 10)}...`);
278
+ if (benchCmd.isAggregator) {
279
+ workerTxPool.clearTxs();
280
+ workerLogger.info(`[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, collector=${benchCmd.collectorType}, distribution=${benchCmd.distribution}`);
281
+ const result = await runAggregatorBenchmark(workerClient, blockProposal, benchCmd.collectorType, benchCmd.timeoutMs, benchCmd.pinnedPeerId, benchCmd.pinnedPeerIndex, workerLogger, benchCmd.peerCount);
282
+ process.send(result);
283
+ } else {
284
+ const myTxs = filterTxsByDistribution(allTxs, benchCmd.peerIndex, benchCmd.peerCount, benchCmd.distribution, benchCmd.pinnedPeerIndex);
285
+ workerTxPool.setTxs(myTxs);
286
+ workerLogger.info(`[BENCH] Peer ${benchCmd.peerIndex} populated tx pool with ${myTxs.length}/${benchCmd.txCount} txs (${benchCmd.distribution})`);
287
+ process.send({
288
+ type: 'BENCH_READY'
289
+ });
290
+ }
291
+ break;
206
292
  }
207
- });
208
- process.send({
209
- type: 'READY'
210
- });
211
293
  }
212
294
  } catch (err) {
213
295
  process.send({
@@ -2,33 +2,63 @@ import type { Logger } from '@aztec/foundation/log';
2
2
  import type { ChainConfig } from '@aztec/stdlib/config';
3
3
  import { type ChildProcess } from 'child_process';
4
4
  import { type P2PConfig } from '../config.js';
5
+ import type { CollectorType, DistributionPattern } from './p2p_client_testbench_worker.js';
5
6
  declare const testChainConfig: ChainConfig;
7
+ export interface ReqRespBenchmarkConfig {
8
+ txCount: number;
9
+ distribution: DistributionPattern;
10
+ collectorType: CollectorType;
11
+ timeoutMs: number;
12
+ pinnedPeerIndex?: number;
13
+ blockNumber?: number;
14
+ seed?: number;
15
+ }
16
+ export interface ReqRespBenchmarkResult {
17
+ txCount: number;
18
+ distribution: DistributionPattern;
19
+ collector: CollectorType;
20
+ durationMs: number;
21
+ fetchedCount: number;
22
+ success: boolean;
23
+ error?: string;
24
+ }
6
25
  declare class WorkerClientManager {
7
26
  processes: ChildProcess[];
8
27
  peerIdPrivateKeys: string[];
9
28
  peerEnrs: string[];
10
29
  ports: number[];
30
+ peerIds: string[];
11
31
  private p2pConfig;
12
32
  private logger;
13
33
  private messageReceivedByClient;
14
34
  constructor(logger: Logger, p2pConfig: Partial<P2PConfig>);
15
35
  destroy(): void;
16
36
  /**
17
- * Creates a client configuration object
37
+ * Creates a client configuration object for IPC.
38
+ * Note: We send the raw peerIdPrivateKey string instead of SecretValue
39
+ * because SecretValue.toJSON() returns '[Redacted]', losing the value.
40
+ * The worker must re-wrap it in SecretValue.
18
41
  */
19
42
  private createClientConfig;
20
43
  /**
21
- * Spawns a worker process and returns a promise that resolves when the worker is ready
44
+ * Spawns a worker process and returns a promise that resolves when the worker is ready.
45
+ * Config uses raw string for peerIdPrivateKey (not SecretValue) for IPC serialization.
22
46
  */
23
47
  private spawnWorkerProcess;
24
48
  /**
25
- * Creates a number of worker clients in separate processes
26
- * All are configured to connect to each other and overrided with the test specific config
49
+ * Creates a number of worker clients in separate processes.
50
+ * All are configured to connect to each other and overridden with the test-specific config.
27
51
  *
28
52
  * @param numberOfClients - The number of clients to create
53
+ * @param options - Optional overrides for seeding/bootstrapping strategy
29
54
  * @returns The ENRs of the created clients
30
55
  */
31
- makeWorkerClients(numberOfClients: number): Promise<string[]>;
56
+ makeWorkerClients(numberOfClients: number, options?: {
57
+ bootstrapMode?: 'subset' | 'all';
58
+ seedPeerLimit?: number;
59
+ batchSize?: number;
60
+ batchDelayMs?: number;
61
+ }): Promise<string[]>;
32
62
  purgeMessageReceivedByClient(): void;
33
63
  numberOfClientsThatReceivedMessage(): number;
34
64
  /**
@@ -46,6 +76,21 @@ declare class WorkerClientManager {
46
76
  * Cleans up all worker processes with timeout and force kill if needed
47
77
  */
48
78
  cleanup(): Promise<void>;
79
+ /**
80
+ * Run a req/resp benchmark across all worker clients.
81
+ *
82
+ * This sends a BENCH_REQRESP command to all workers:
83
+ * - Aggregator (client 0) runs the collector and returns timing results
84
+ * - Responders (clients 1..N) populate their tx pools based on distribution
85
+ *
86
+ * All workers generate the same txs deterministically from a shared seed,
87
+ * then filter based on their peerIndex and distribution pattern.
88
+ */
89
+ runReqRespBenchmark(config: ReqRespBenchmarkConfig): Promise<ReqRespBenchmarkResult>;
90
+ private waitForBenchReady;
91
+ private waitForBenchResult;
49
92
  }
50
93
  export { WorkerClientManager, testChainConfig };
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyX2NsaWVudF9tYW5hZ2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGJlbmNoL3dvcmtlcl9jbGllbnRfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFJeEQsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUF1QixNQUFNLGNBQWMsQ0FBQztBQVFuRSxRQUFBLE1BQU0sZUFBZSxFQUFFLFdBTXRCLENBQUM7QUFFRixjQUFNLG1CQUFtQjtJQUNoQixTQUFTLEVBQUUsWUFBWSxFQUFFLENBQU07SUFDL0IsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLENBQU07SUFDakMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFNO0lBQ3hCLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBTTtJQUM1QixPQUFPLENBQUMsU0FBUyxDQUFxQjtJQUN0QyxPQUFPLENBQUMsTUFBTSxDQUFTO0lBQ3ZCLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBZ0I7SUFFL0MsWUFBWSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBR3hEO0lBRUQsT0FBTyxTQUtOO0lBRUQ7O09BRUc7SUFDSCxPQUFPLENBQUMsa0JBQWtCO0lBaUIxQjs7T0FFRztJQUNILE9BQU8sQ0FBQyxrQkFBa0I7SUF5RDFCOzs7Ozs7T0FNRztJQUNHLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxNQUFNLHFCQXlDOUM7SUFFRCw0QkFBNEIsU0FFM0I7SUFFRCxrQ0FBa0MsV0FFakM7SUFFRDs7Ozs7T0FLRztJQUNHLFVBQVUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQTRDcEQ7SUFFRDs7T0FFRztJQUNILE9BQU8sQ0FBQyxnQkFBZ0I7SUFzQ3hCOztPQUVHO0lBQ0csT0FBTyxrQkFnQ1o7Q0FDRjtBQUVELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsQ0FBQyJ9
94
+ export type { DistributionPattern, CollectorType } from './p2p_client_testbench_worker.js';
95
+ export { COLLECTOR_DISPLAY_NAMES } from './p2p_client_testbench_worker.js';
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyX2NsaWVudF9tYW5hZ2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGJlbmNoL3dvcmtlcl9jbGllbnRfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVwRCxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsS0FBSyxZQUFZLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFLeEQsT0FBTyxFQUFFLEtBQUssU0FBUyxFQUF1QixNQUFNLGNBQWMsQ0FBQztBQUtuRSxPQUFPLEtBQUssRUFHVixhQUFhLEVBQ2IsbUJBQW1CLEVBQ3BCLE1BQU0sa0NBQWtDLENBQUM7QUFRMUMsUUFBQSxNQUFNLGVBQWUsRUFBRSxXQU10QixDQUFDO0FBRUYsTUFBTSxXQUFXLHNCQUFzQjtJQUNyQyxPQUFPLEVBQUUsTUFBTSxDQUFDO0lBQ2hCLFlBQVksRUFBRSxtQkFBbUIsQ0FBQztJQUNsQyxhQUFhLEVBQUUsYUFBYSxDQUFDO0lBQzdCLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsZUFBZSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ3pCLFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNyQixJQUFJLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDZjtBQUVELE1BQU0sV0FBVyxzQkFBc0I7SUFDckMsT0FBTyxFQUFFLE1BQU0sQ0FBQztJQUNoQixZQUFZLEVBQUUsbUJBQW1CLENBQUM7SUFDbEMsU0FBUyxFQUFFLGFBQWEsQ0FBQztJQUN6QixVQUFVLEVBQUUsTUFBTSxDQUFDO0lBQ25CLFlBQVksRUFBRSxNQUFNLENBQUM7SUFDckIsT0FBTyxFQUFFLE9BQU8sQ0FBQztJQUNqQixLQUFLLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDaEI7QUFFRCxjQUFNLG1CQUFtQjtJQUNoQixTQUFTLEVBQUUsWUFBWSxFQUFFLENBQU07SUFDL0IsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLENBQU07SUFDakMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFNO0lBQ3hCLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBTTtJQUNyQixPQUFPLEVBQUUsTUFBTSxFQUFFLENBQU07SUFDOUIsT0FBTyxDQUFDLFNBQVMsQ0FBcUI7SUFDdEMsT0FBTyxDQUFDLE1BQU0sQ0FBUztJQUN2QixPQUFPLENBQUMsdUJBQXVCLENBQWdCO0lBRS9DLFlBQVksTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUd4RDtJQUVELE9BQU8sU0FLTjtJQUVEOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUFDLGtCQUFrQjtJQWlCMUI7OztPQUdHO0lBQ0gsT0FBTyxDQUFDLGtCQUFrQjtJQWdHMUI7Ozs7Ozs7T0FPRztJQUNHLGlCQUFpQixDQUNyQixlQUFlLEVBQUUsTUFBTSxFQUN2QixPQUFPLEdBQUU7UUFDUCxhQUFhLENBQUMsRUFBRSxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ2pDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUN2QixTQUFTLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDbkIsWUFBWSxDQUFDLEVBQUUsTUFBTSxDQUFDO0tBQ2xCLHFCQStEUDtJQUVELDRCQUE0QixTQUUzQjtJQUVELGtDQUFrQyxXQUVqQztJQUVEOzs7OztPQUtHO0lBQ0csVUFBVSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBOENwRDtJQUVEOztPQUVHO0lBQ0gsT0FBTyxDQUFDLGdCQUFnQjtJQXFDeEI7O09BRUc7SUFDRyxPQUFPLGtCQWdDWjtJQUVEOzs7Ozs7Ozs7T0FTRztJQUNHLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxzQkFBc0IsR0FBRyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FzRXpGO0lBRUQsT0FBTyxDQUFDLGlCQUFpQjtJQWtDekIsT0FBTyxDQUFDLGtCQUFrQjtDQWlDM0I7QUFFRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLENBQUM7QUFDaEQsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzNGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"worker_client_manager.d.ts","sourceRoot":"","sources":["../../src/testbench/worker_client_manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,KAAK,YAAY,EAAQ,MAAM,eAAe,CAAC;AAIxD,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,cAAc,CAAC;AAQnE,QAAA,MAAM,eAAe,EAAE,WAMtB,CAAC;AAEF,cAAM,mBAAmB;IAChB,SAAS,EAAE,YAAY,EAAE,CAAM;IAC/B,iBAAiB,EAAE,MAAM,EAAE,CAAM;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAM;IACxB,KAAK,EAAE,MAAM,EAAE,CAAM;IAC5B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,uBAAuB,CAAgB;IAE/C,YAAY,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,EAGxD;IAED,OAAO,SAKN;IAED;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyD1B;;;;;;OAMG;IACG,iBAAiB,CAAC,eAAe,EAAE,MAAM,qBAyC9C;IAED,4BAA4B,SAE3B;IAED,kCAAkC,WAEjC;IAED;;;;;OAKG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,iBA4CpD;IAED;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsCxB;;OAEG;IACG,OAAO,kBAgCZ;CACF;AAED,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,CAAC"}
1
+ {"version":3,"file":"worker_client_manager.d.ts","sourceRoot":"","sources":["../../src/testbench/worker_client_manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,EAAE,KAAK,YAAY,EAAQ,MAAM,eAAe,CAAC;AAKxD,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,cAAc,CAAC;AAKnE,OAAO,KAAK,EAGV,aAAa,EACb,mBAAmB,EACpB,MAAM,kCAAkC,CAAC;AAQ1C,QAAA,MAAM,eAAe,EAAE,WAMtB,CAAC;AAEF,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,mBAAmB,CAAC;IAClC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,mBAAmB,CAAC;IAClC,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,cAAM,mBAAmB;IAChB,SAAS,EAAE,YAAY,EAAE,CAAM;IAC/B,iBAAiB,EAAE,MAAM,EAAE,CAAM;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAM;IACxB,KAAK,EAAE,MAAM,EAAE,CAAM;IACrB,OAAO,EAAE,MAAM,EAAE,CAAM;IAC9B,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,uBAAuB,CAAgB;IAE/C,YAAY,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,EAGxD;IAED,OAAO,SAKN;IAED;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAgG1B;;;;;;;OAOG;IACG,iBAAiB,CACrB,eAAe,EAAE,MAAM,EACvB,OAAO,GAAE;QACP,aAAa,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;QACjC,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,CAAC;KAClB,qBA+DP;IAED,4BAA4B,SAE3B;IAED,kCAAkC,WAEjC;IAED;;;;;OAKG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,iBA8CpD;IAED;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqCxB;;OAEG;IACG,OAAO,kBAgCZ;IAED;;;;;;;;;OASG;IACG,mBAAmB,CAAC,MAAM,EAAE,sBAAsB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAsEzF;IAED,OAAO,CAAC,iBAAiB;IAkCzB,OAAO,CAAC,kBAAkB;CAiC3B;AAED,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,CAAC;AAChD,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAC3F,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC"}