@aztec/p2p 0.0.1-commit.7d4e6cd → 0.0.1-commit.9372f48

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 (298) 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 +10 -3
  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 +4 -2
  19. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  20. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  21. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +20 -9
  22. package/dest/mem_pools/attestation_pool/mocks.d.ts +4 -2
  23. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  24. package/dest/mem_pools/attestation_pool/mocks.js +8 -5
  25. package/dest/mem_pools/instrumentation.d.ts +1 -1
  26. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  27. package/dest/mem_pools/instrumentation.js +2 -2
  28. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +15 -10
  29. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  30. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +91 -50
  31. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +19 -5
  32. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -1
  33. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +59 -3
  34. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +79 -5
  35. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -1
  36. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +47 -0
  37. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  38. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  39. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  40. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +2 -2
  41. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -1
  42. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +4 -4
  43. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +2 -0
  45. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +2 -2
  46. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -1
  47. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  48. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  49. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  50. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +3 -3
  51. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  52. package/dest/msg_validators/attestation_validator/attestation_validator.js +41 -10
  53. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +3 -3
  54. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  55. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +18 -6
  56. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  57. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  58. package/dest/msg_validators/clock_tolerance.js +37 -0
  59. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +3 -3
  60. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  61. package/dest/msg_validators/proposal_validator/proposal_validator.js +55 -31
  62. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +3 -3
  63. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -1
  64. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +93 -64
  65. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  66. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  67. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  68. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +5 -4
  69. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  70. package/dest/msg_validators/tx_validator/block_header_validator.js +3 -2
  71. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  72. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  73. package/dest/msg_validators/tx_validator/data_validator.js +4 -1
  74. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -2
  75. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  76. package/dest/msg_validators/tx_validator/double_spend_validator.js +3 -2
  77. package/dest/msg_validators/tx_validator/factory.d.ts +8 -3
  78. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  79. package/dest/msg_validators/tx_validator/factory.js +21 -11
  80. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  81. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  82. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  83. package/dest/msg_validators/tx_validator/gas_validator.d.ts +3 -2
  84. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  85. package/dest/msg_validators/tx_validator/gas_validator.js +11 -16
  86. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  87. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  88. package/dest/msg_validators/tx_validator/index.js +1 -0
  89. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  90. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  91. package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
  92. package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
  93. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  94. package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
  95. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  96. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  97. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  98. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +3 -2
  99. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  100. package/dest/msg_validators/tx_validator/timestamp_validator.js +2 -2
  101. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  102. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  103. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  104. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  105. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  106. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  107. package/dest/services/data_store.d.ts +1 -1
  108. package/dest/services/data_store.d.ts.map +1 -1
  109. package/dest/services/data_store.js +10 -6
  110. package/dest/services/discv5/discV5_service.js +1 -1
  111. package/dest/services/dummy_service.d.ts +13 -1
  112. package/dest/services/dummy_service.d.ts.map +1 -1
  113. package/dest/services/dummy_service.js +39 -0
  114. package/dest/services/encoding.d.ts +1 -1
  115. package/dest/services/encoding.d.ts.map +1 -1
  116. package/dest/services/encoding.js +2 -3
  117. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  118. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  119. package/dest/services/libp2p/instrumentation.js +19 -8
  120. package/dest/services/libp2p/libp2p_service.d.ts +13 -7
  121. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  122. package/dest/services/libp2p/libp2p_service.js +60 -51
  123. package/dest/services/peer-manager/metrics.d.ts +2 -2
  124. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  125. package/dest/services/peer-manager/metrics.js +20 -5
  126. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  127. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  128. package/dest/services/peer-manager/peer_scoring.js +8 -2
  129. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
  130. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  131. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
  132. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  133. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  134. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  135. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  136. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  137. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  138. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
  139. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  140. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
  141. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
  142. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  143. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
  144. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  145. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  146. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  147. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  148. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  149. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  150. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  151. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  152. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  153. package/dest/services/reqresp/constants.d.ts +12 -0
  154. package/dest/services/reqresp/constants.d.ts.map +1 -0
  155. package/dest/services/reqresp/constants.js +7 -0
  156. package/dest/services/reqresp/interface.d.ts +3 -1
  157. package/dest/services/reqresp/interface.d.ts.map +1 -1
  158. package/dest/services/reqresp/metrics.d.ts +6 -5
  159. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  160. package/dest/services/reqresp/metrics.js +17 -5
  161. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  162. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  163. package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
  164. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  165. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  166. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +16 -3
  167. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +18 -6
  168. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  169. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +43 -13
  170. package/dest/services/reqresp/protocols/status.d.ts +1 -1
  171. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  172. package/dest/services/reqresp/protocols/status.js +2 -1
  173. package/dest/services/reqresp/reqresp.d.ts +6 -1
  174. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  175. package/dest/services/reqresp/reqresp.js +58 -22
  176. package/dest/services/service.d.ts +4 -1
  177. package/dest/services/service.d.ts.map +1 -1
  178. package/dest/services/tx_collection/config.d.ts +4 -1
  179. package/dest/services/tx_collection/config.d.ts.map +1 -1
  180. package/dest/services/tx_collection/config.js +9 -1
  181. package/dest/services/tx_collection/fast_tx_collection.d.ts +6 -4
  182. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  183. package/dest/services/tx_collection/fast_tx_collection.js +16 -5
  184. package/dest/services/tx_collection/index.d.ts +2 -1
  185. package/dest/services/tx_collection/index.d.ts.map +1 -1
  186. package/dest/services/tx_collection/index.js +1 -0
  187. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  188. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  189. package/dest/services/tx_collection/instrumentation.js +9 -2
  190. package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
  191. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  192. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  193. package/dest/services/tx_collection/slow_tx_collection.d.ts +3 -3
  194. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  195. package/dest/services/tx_collection/tx_collection.d.ts +8 -8
  196. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  197. package/dest/services/tx_collection/tx_collection.js +5 -5
  198. package/dest/services/tx_provider.d.ts +3 -3
  199. package/dest/services/tx_provider.d.ts.map +1 -1
  200. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  201. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  202. package/dest/services/tx_provider_instrumentation.js +5 -5
  203. package/dest/test-helpers/index.d.ts +3 -1
  204. package/dest/test-helpers/index.d.ts.map +1 -1
  205. package/dest/test-helpers/index.js +2 -0
  206. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  207. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  208. package/dest/test-helpers/test_tx_provider.js +41 -0
  209. package/dest/test-helpers/testbench-utils.d.ts +158 -0
  210. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  211. package/dest/test-helpers/testbench-utils.js +297 -0
  212. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  213. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  214. package/dest/testbench/p2p_client_testbench_worker.js +212 -132
  215. package/dest/testbench/worker_client_manager.d.ts +51 -6
  216. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  217. package/dest/testbench/worker_client_manager.js +226 -44
  218. package/package.json +16 -16
  219. package/src/bootstrap/bootstrap.ts +7 -4
  220. package/src/client/factory.ts +6 -10
  221. package/src/client/p2p_client.ts +15 -8
  222. package/src/client/test/tx_proposal_collector/README.md +227 -0
  223. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
  224. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  225. package/src/config.ts +8 -3
  226. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +17 -9
  227. package/src/mem_pools/attestation_pool/mocks.ts +6 -4
  228. package/src/mem_pools/instrumentation.ts +2 -1
  229. package/src/mem_pools/tx_pool/README.md +28 -13
  230. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +130 -75
  231. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +66 -5
  232. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +119 -4
  233. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  234. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +4 -2
  235. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  236. package/src/msg_validators/attestation_validator/attestation_validator.ts +26 -14
  237. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -8
  238. package/src/msg_validators/clock_tolerance.ts +51 -0
  239. package/src/msg_validators/proposal_validator/proposal_validator.ts +31 -31
  240. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +91 -67
  241. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  242. package/src/msg_validators/tx_validator/block_header_validator.ts +6 -5
  243. package/src/msg_validators/tx_validator/data_validator.ts +6 -2
  244. package/src/msg_validators/tx_validator/double_spend_validator.ts +4 -3
  245. package/src/msg_validators/tx_validator/factory.ts +64 -23
  246. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  247. package/src/msg_validators/tx_validator/gas_validator.ts +17 -28
  248. package/src/msg_validators/tx_validator/index.ts +1 -0
  249. package/src/msg_validators/tx_validator/metadata_validator.ts +6 -3
  250. package/src/msg_validators/tx_validator/phases_validator.ts +5 -3
  251. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  252. package/src/msg_validators/tx_validator/timestamp_validator.ts +6 -3
  253. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  254. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  255. package/src/services/data_store.ts +10 -7
  256. package/src/services/discv5/discV5_service.ts +1 -1
  257. package/src/services/dummy_service.ts +45 -0
  258. package/src/services/encoding.ts +2 -3
  259. package/src/services/libp2p/instrumentation.ts +20 -7
  260. package/src/services/libp2p/libp2p_service.ts +97 -71
  261. package/src/services/peer-manager/metrics.ts +21 -4
  262. package/src/services/peer-manager/peer_scoring.ts +4 -1
  263. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  264. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
  265. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  266. package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
  267. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
  268. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
  269. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  270. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  271. package/src/services/reqresp/connection-sampler/connection_sampler.ts +16 -0
  272. package/src/services/reqresp/constants.ts +14 -0
  273. package/src/services/reqresp/interface.ts +3 -0
  274. package/src/services/reqresp/metrics.ts +34 -9
  275. package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
  276. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +18 -4
  277. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +51 -9
  278. package/src/services/reqresp/protocols/status.ts +5 -3
  279. package/src/services/reqresp/reqresp.ts +66 -19
  280. package/src/services/service.ts +4 -0
  281. package/src/services/tx_collection/config.ts +15 -1
  282. package/src/services/tx_collection/fast_tx_collection.ts +36 -13
  283. package/src/services/tx_collection/index.ts +5 -0
  284. package/src/services/tx_collection/instrumentation.ts +11 -2
  285. package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
  286. package/src/services/tx_collection/slow_tx_collection.ts +2 -2
  287. package/src/services/tx_collection/tx_collection.ts +8 -8
  288. package/src/services/tx_provider.ts +2 -2
  289. package/src/services/tx_provider_instrumentation.ts +11 -5
  290. package/src/test-helpers/index.ts +2 -0
  291. package/src/test-helpers/test_tx_provider.ts +64 -0
  292. package/src/test-helpers/testbench-utils.ts +374 -0
  293. package/src/testbench/p2p_client_testbench_worker.ts +321 -126
  294. package/src/testbench/worker_client_manager.ts +304 -47
  295. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts +0 -15
  296. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts.map +0 -1
  297. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.js +0 -88
  298. package/src/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.ts +0 -108
@@ -1,116 +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 { EthAddress } from '@aztec/foundation/eth-address';
8
+ import { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
9
+ import { Fr } from '@aztec/foundation/curves/bn254';
9
10
  import { createLogger } from '@aztec/foundation/log';
10
11
  import { sleep } from '@aztec/foundation/sleep';
12
+ import { DateProvider, Timer } from '@aztec/foundation/timer';
11
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';
12
16
  import { P2PClientType, P2PMessage } from '@aztec/stdlib/p2p';
13
- 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';
14
20
  import { getTelemetryClient } from '@aztec/telemetry-client';
15
21
  import { TopicValidatorResult } from '@libp2p/interface';
16
- import EventEmitter from 'events';
22
+ import { peerIdFromString } from '@libp2p/peer-id';
17
23
  import { createP2PClient } from '../index.js';
18
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';
19
27
  import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
20
- // Simple mock implementation
21
- function mockTxPool() {
22
- // Mock all methods
23
- const pool = {
24
- isEmpty: ()=>Promise.resolve(false),
25
- addTxs: ()=>Promise.resolve(1),
26
- getTxByHash: ()=>Promise.resolve(undefined),
27
- getArchivedTxByHash: ()=>Promise.resolve(undefined),
28
- markAsMined: ()=>Promise.resolve(),
29
- markMinedAsPending: ()=>Promise.resolve(),
30
- deleteTxs: ()=>Promise.resolve(),
31
- getAllTxs: ()=>Promise.resolve([]),
32
- getAllTxHashes: ()=>Promise.resolve([]),
33
- getPendingTxHashes: ()=>Promise.resolve([]),
34
- getPendingTxCount: ()=>Promise.resolve(0),
35
- getMinedTxHashes: ()=>Promise.resolve([]),
36
- getTxStatus: ()=>Promise.resolve(TxStatus.PENDING),
37
- getTxsByHash: ()=>Promise.resolve([]),
38
- hasTxs: ()=>Promise.resolve([]),
39
- hasTx: ()=>Promise.resolve(false),
40
- updateConfig: ()=>{},
41
- markTxsAsNonEvictable: ()=>Promise.resolve(),
42
- clearNonEvictableTxs: ()=>Promise.resolve(),
43
- cleanupDeletedMinedTxs: ()=>Promise.resolve(0)
44
- };
45
- return Object.assign(new EventEmitter(), pool);
46
- }
47
- function mockAttestationPool() {
48
- return {
49
- isEmpty: ()=>Promise.resolve(false),
50
- addBlockProposal: ()=>Promise.resolve(),
51
- getBlockProposal: ()=>Promise.resolve(undefined),
52
- hasBlockProposal: ()=>Promise.resolve(false),
53
- canAddProposal: ()=>Promise.resolve(true),
54
- // Checkpoint attestation methods
55
- addCheckpointProposal: ()=>Promise.resolve(),
56
- getCheckpointProposal: ()=>Promise.resolve(undefined),
57
- hasCheckpointProposal: ()=>Promise.resolve(false),
58
- addCheckpointAttestations: ()=>Promise.resolve(),
59
- getCheckpointAttestationsForSlot: ()=>Promise.resolve([]),
60
- getCheckpointAttestationsForSlotAndProposal: ()=>Promise.resolve([]),
61
- deleteCheckpointAttestationsOlderThan: ()=>Promise.resolve(),
62
- hasReachedCheckpointProposalCap: ()=>Promise.resolve(false),
63
- hasReachedCheckpointAttestationCap: ()=>Promise.resolve(false),
64
- canAddCheckpointProposal: ()=>Promise.resolve(true),
65
- canAddCheckpointAttestation: ()=>Promise.resolve(true),
66
- hasCheckpointAttestation: ()=>Promise.resolve(false)
67
- };
68
- }
69
- function mockEpochCache() {
70
- return {
71
- getCommittee: ()=>Promise.resolve({
72
- committee: [],
73
- seed: 1n,
74
- epoch: EpochNumber.ZERO
75
- }),
76
- getProposerIndexEncoding: ()=>'0x',
77
- getEpochAndSlotNow: ()=>({
78
- epoch: EpochNumber.ZERO,
79
- slot: SlotNumber.ZERO,
80
- ts: 0n
81
- }),
82
- computeProposerIndex: ()=>0n,
83
- getProposerAttesterAddressInCurrentOrNextSlot: ()=>Promise.resolve({
84
- currentProposer: EthAddress.ZERO,
85
- nextProposer: EthAddress.ZERO,
86
- currentSlot: SlotNumber.ZERO,
87
- nextSlot: SlotNumber.ZERO
88
- }),
89
- getProposerAttesterAddressInSlot: ()=>Promise.resolve(undefined),
90
- getEpochAndSlotInNextL1Slot: ()=>({
91
- epoch: EpochNumber.ZERO,
92
- slot: SlotNumber.ZERO,
93
- ts: 0n,
94
- now: 0n
95
- }),
96
- isInCommittee: ()=>Promise.resolve(false),
97
- getRegisteredValidators: ()=>Promise.resolve([]),
98
- filterInCommittee: ()=>Promise.resolve([])
99
- };
100
- }
101
- function mockWorldStateSynchronizer() {
102
- return {
103
- status: ()=>Promise.resolve({
104
- syncSummary: {
105
- latestBlockNumber: 0,
106
- latestBlockHash: '',
107
- finalizedBlockNumber: 0,
108
- treesAreSynched: false,
109
- oldestHistoricBlockNumber: 0
110
- }
111
- })
112
- };
113
- }
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();
114
31
  class TestLibP2PService extends LibP2PService {
115
32
  disableTxValidation;
116
33
  gossipMessageCount = 0;
@@ -148,68 +65,231 @@ class TestLibP2PService extends LibP2PService {
148
65
  await super.handleNewGossipMessage(msg, msgId, source);
149
66
  }
150
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;
151
191
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
152
192
  process.on('message', async (msg)=>{
153
- // Note: peerIdPrivateKey comes as a raw string (not SecretValue) because
154
- // SecretValue's private fields can't be serialized via IPC
155
193
  const { type, config: rawConfig, clientIndex } = msg;
156
194
  try {
157
195
  if (type === 'START') {
158
- // Re-wrap the peerIdPrivateKey with SecretValue
159
196
  const config = {
160
197
  ...rawConfig,
161
198
  peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined
162
199
  };
163
- const txPool = mockTxPool();
164
- const attestationPool = mockAttestationPool();
165
- const epochCache = mockEpochCache();
166
- const worldState = mockWorldStateSynchronizer();
200
+ workerConfig = config;
201
+ workerTxPool = new InMemoryTxPool();
202
+ workerAttestationPool = new InMemoryAttestationPool();
203
+ const epochCache = createMockEpochCache();
204
+ const worldState = createMockWorldStateSynchronizer();
167
205
  const l2BlockSource = new MockL2BlockSource();
168
206
  const proofVerifier = new AlwaysTrueCircuitVerifier();
169
- const kvStore = await openTmpStore(`test-${clientIndex}`);
170
- 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);
171
210
  const telemetry = getTelemetryClient();
172
211
  const deps = {
173
- txPool,
174
- attestationPool,
212
+ txPool: workerTxPool,
213
+ attestationPool: workerAttestationPool,
175
214
  store: kvStore,
176
- logger
215
+ logger: workerLogger
177
216
  };
178
217
  const client = await createP2PClient(P2PClientType.Full, config, l2BlockSource, proofVerifier, worldState, epochCache, 'test-p2p-bench-worker', undefined, telemetry, deps);
179
- // Create test service with validation disabled
180
- // Note: Parameter order must match LibP2PService constructor
181
- 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);
182
- // 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);
183
219
  client.p2pService = testService;
184
220
  await client.start();
185
- // Wait until the client is ready
186
221
  for(let i = 0; i < 100; i++){
187
222
  const isReady = client.isReady();
188
- logger.debug(`Client ${clientIndex} isReady: ${isReady}`);
223
+ workerLogger.debug(`Client ${clientIndex} isReady: ${isReady}`);
189
224
  if (isReady) {
190
225
  break;
191
226
  }
192
227
  await sleep(1000);
193
228
  }
194
- // Listen for commands from parent
195
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
196
- process.on('message', async (cmd)=>{
197
- switch(cmd.type){
198
- case 'STOP':
199
- await client.stop();
200
- process.exit(0);
201
- break;
202
- case 'SEND_TX':
203
- 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) {
204
260
  process.send({
205
- type: 'TX_SENT'
261
+ type: 'BENCH_RESULT',
262
+ durationMs: 0,
263
+ fetchedCount: 0,
264
+ success: false,
265
+ error: 'Worker not initialized'
206
266
  });
207
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;
208
292
  }
209
- });
210
- process.send({
211
- type: 'READY'
212
- });
213
293
  }
214
294
  } catch (err) {
215
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"}