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

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 (570) hide show
  1. package/README.md +130 -3
  2. package/dest/bootstrap/bootstrap.d.ts +4 -3
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +26 -10
  5. package/dest/client/factory.d.ts +13 -12
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +70 -20
  8. package/dest/client/interface.d.ts +90 -40
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +69 -64
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +247 -244
  13. package/dest/config.d.ts +169 -84
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +159 -45
  16. package/dest/errors/p2p-service.error.d.ts +9 -0
  17. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  18. package/dest/errors/p2p-service.error.js +10 -0
  19. package/dest/errors/reqresp.error.d.ts +9 -16
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +10 -17
  22. package/dest/errors/tx-pool.error.d.ts +8 -0
  23. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  24. package/dest/errors/tx-pool.error.js +9 -0
  25. package/dest/index.d.ts +2 -2
  26. package/dest/index.d.ts.map +1 -1
  27. package/dest/index.js +1 -1
  28. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +164 -106
  29. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool.js +518 -3
  31. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  32. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +550 -125
  34. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  35. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  36. package/dest/mem_pools/attestation_pool/index.js +1 -2
  37. package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
  38. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  39. package/dest/mem_pools/attestation_pool/mocks.js +7 -5
  40. package/dest/mem_pools/index.d.ts +3 -3
  41. package/dest/mem_pools/index.d.ts.map +1 -1
  42. package/dest/mem_pools/index.js +1 -1
  43. package/dest/mem_pools/instrumentation.d.ts +12 -5
  44. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  45. package/dest/mem_pools/instrumentation.js +40 -19
  46. package/dest/mem_pools/interface.d.ts +5 -5
  47. package/dest/mem_pools/interface.d.ts.map +1 -1
  48. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  49. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  50. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  51. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +39 -0
  52. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  53. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +97 -0
  54. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  55. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  56. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  57. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  58. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  59. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  60. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  61. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  62. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
  63. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  64. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  65. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
  66. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +11 -0
  67. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  68. package/dest/mem_pools/tx_pool_v2/eviction/index.js +12 -0
  69. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  70. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  71. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  72. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  73. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  74. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  75. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  76. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  77. package/dest/mem_pools/{tx_pool → tx_pool_v2}/eviction/invalid_txs_after_mining_rule.js +16 -35
  78. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  82. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  83. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  84. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  85. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  86. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  87. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  88. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  89. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  90. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  91. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  92. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  93. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  94. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  95. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  96. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +243 -0
  97. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  98. package/dest/mem_pools/tx_pool_v2/interfaces.js +11 -0
  99. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +137 -0
  100. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  101. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +223 -0
  102. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  103. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  104. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  105. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +122 -0
  106. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  107. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +368 -0
  108. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +68 -0
  109. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  110. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +178 -0
  111. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +91 -0
  112. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  113. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +1013 -0
  114. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +11 -4
  115. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  116. package/dest/msg_validators/attestation_validator/attestation_validator.js +67 -13
  117. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +9 -5
  118. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  119. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +22 -11
  120. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +12 -5
  121. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  122. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +11 -3
  123. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +12 -5
  124. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  125. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +23 -3
  126. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +36 -9
  127. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  128. package/dest/msg_validators/proposal_validator/proposal_validator.js +156 -43
  129. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  130. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  131. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +11 -18
  132. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  133. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  134. package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
  135. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  136. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  137. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  138. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  139. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  140. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
  141. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  142. package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
  143. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  144. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  145. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  146. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  147. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  148. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  149. package/dest/msg_validators/tx_validator/data_validator.d.ts +4 -1
  150. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  151. package/dest/msg_validators/tx_validator/data_validator.js +40 -3
  152. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -4
  153. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  154. package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
  155. package/dest/msg_validators/tx_validator/factory.d.ts +136 -5
  156. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  157. package/dest/msg_validators/tx_validator/factory.js +268 -58
  158. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  159. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  160. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  161. package/dest/msg_validators/tx_validator/gas_validator.d.ts +105 -3
  162. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  163. package/dest/msg_validators/tx_validator/gas_validator.js +138 -53
  164. package/dest/msg_validators/tx_validator/index.d.ts +5 -1
  165. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  166. package/dest/msg_validators/tx_validator/index.js +4 -0
  167. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  168. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  169. package/dest/msg_validators/tx_validator/metadata_validator.js +6 -6
  170. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  171. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  172. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  173. package/dest/msg_validators/tx_validator/phases_validator.d.ts +24 -3
  174. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  175. package/dest/msg_validators/tx_validator/phases_validator.js +75 -27
  176. package/dest/msg_validators/tx_validator/size_validator.d.ts +3 -1
  177. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -1
  178. package/dest/msg_validators/tx_validator/size_validator.js +4 -1
  179. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +22 -5
  180. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  181. package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
  182. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  183. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  184. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  185. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +4 -2
  186. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  187. package/dest/msg_validators/tx_validator/tx_proof_validator.js +4 -2
  188. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  189. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  190. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  191. package/dest/services/data_store.d.ts +1 -1
  192. package/dest/services/data_store.d.ts.map +1 -1
  193. package/dest/services/data_store.js +14 -10
  194. package/dest/services/discv5/discV5_service.d.ts +13 -2
  195. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  196. package/dest/services/discv5/discV5_service.js +120 -24
  197. package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
  198. package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
  199. package/dest/services/discv5/persisted_enr_store.js +145 -0
  200. package/dest/services/dummy_service.d.ts +37 -17
  201. package/dest/services/dummy_service.d.ts.map +1 -1
  202. package/dest/services/dummy_service.js +59 -15
  203. package/dest/services/encoding.d.ts +24 -7
  204. package/dest/services/encoding.d.ts.map +1 -1
  205. package/dest/services/encoding.js +43 -26
  206. package/dest/services/gossipsub/index.d.ts +3 -0
  207. package/dest/services/gossipsub/index.d.ts.map +1 -0
  208. package/dest/services/gossipsub/index.js +2 -0
  209. package/dest/services/gossipsub/scoring.d.ts +21 -3
  210. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  211. package/dest/services/gossipsub/scoring.js +24 -7
  212. package/dest/services/gossipsub/topic_score_params.d.ts +167 -0
  213. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  214. package/dest/services/gossipsub/topic_score_params.js +336 -0
  215. package/dest/services/index.d.ts +2 -1
  216. package/dest/services/index.d.ts.map +1 -1
  217. package/dest/services/index.js +1 -0
  218. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  219. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  220. package/dest/services/libp2p/instrumentation.js +28 -3
  221. package/dest/services/libp2p/libp2p_service.d.ts +116 -60
  222. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  223. package/dest/services/libp2p/libp2p_service.js +800 -586
  224. package/dest/services/peer-manager/metrics.d.ts +4 -2
  225. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  226. package/dest/services/peer-manager/metrics.js +26 -5
  227. package/dest/services/peer-manager/peer_manager.d.ts +20 -3
  228. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  229. package/dest/services/peer-manager/peer_manager.js +83 -26
  230. package/dest/services/peer-manager/peer_scoring.d.ts +34 -2
  231. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  232. package/dest/services/peer-manager/peer_scoring.js +135 -17
  233. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +44 -0
  234. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  235. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +534 -0
  236. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  237. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  238. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  239. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  240. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  241. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  242. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +35 -0
  243. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  244. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +136 -0
  245. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +62 -0
  246. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  247. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +176 -0
  248. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +11 -0
  249. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  250. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +7 -0
  251. package/dest/services/reqresp/config.d.ts +15 -3
  252. package/dest/services/reqresp/config.d.ts.map +1 -1
  253. package/dest/services/reqresp/config.js +11 -0
  254. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  255. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  256. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  257. package/dest/services/reqresp/interface.d.ts +27 -18
  258. package/dest/services/reqresp/interface.d.ts.map +1 -1
  259. package/dest/services/reqresp/interface.js +23 -19
  260. package/dest/services/reqresp/metrics.d.ts +6 -5
  261. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  262. package/dest/services/reqresp/metrics.js +16 -5
  263. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +8 -3
  264. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  265. package/dest/services/reqresp/protocols/block_txs/bitvector.js +8 -2
  266. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  267. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  268. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +35 -14
  269. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +36 -8
  270. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  271. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +84 -20
  272. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  273. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  274. package/dest/services/reqresp/protocols/index.js +0 -1
  275. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  276. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  277. package/dest/services/reqresp/protocols/tx.js +21 -3
  278. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  279. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  280. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  281. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  282. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  283. package/dest/services/reqresp/rate-limiter/rate_limits.js +3 -13
  284. package/dest/services/reqresp/reqresp.d.ts +12 -29
  285. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  286. package/dest/services/reqresp/reqresp.js +90 -188
  287. package/dest/services/service.d.ts +65 -13
  288. package/dest/services/service.d.ts.map +1 -1
  289. package/dest/services/tx_collection/config.d.ts +11 -11
  290. package/dest/services/tx_collection/config.d.ts.map +1 -1
  291. package/dest/services/tx_collection/config.js +27 -26
  292. package/dest/services/tx_collection/file_store_tx_collection.d.ts +37 -0
  293. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  294. package/dest/services/tx_collection/file_store_tx_collection.js +127 -0
  295. package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
  296. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  297. package/dest/services/tx_collection/file_store_tx_source.js +100 -0
  298. package/dest/services/tx_collection/index.d.ts +3 -2
  299. package/dest/services/tx_collection/index.d.ts.map +1 -1
  300. package/dest/services/tx_collection/index.js +1 -0
  301. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  302. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  303. package/dest/services/tx_collection/instrumentation.js +8 -2
  304. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  305. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  306. package/dest/services/tx_collection/request_tracker.js +84 -0
  307. package/dest/services/tx_collection/tx_collection.d.ts +50 -56
  308. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  309. package/dest/services/tx_collection/tx_collection.js +298 -70
  310. package/dest/services/tx_collection/tx_collection_sink.d.ts +19 -9
  311. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  312. package/dest/services/tx_collection/tx_collection_sink.js +28 -31
  313. package/dest/services/tx_collection/tx_source.d.ts +13 -7
  314. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  315. package/dest/services/tx_collection/tx_source.js +29 -7
  316. package/dest/services/tx_file_store/config.d.ts +16 -0
  317. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  318. package/dest/services/tx_file_store/config.js +22 -0
  319. package/dest/services/tx_file_store/index.d.ts +4 -0
  320. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  321. package/dest/services/tx_file_store/index.js +3 -0
  322. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  323. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  324. package/dest/services/tx_file_store/instrumentation.js +29 -0
  325. package/dest/services/tx_file_store/tx_file_store.d.ts +46 -0
  326. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  327. package/dest/services/tx_file_store/tx_file_store.js +142 -0
  328. package/dest/services/tx_provider.d.ts +8 -6
  329. package/dest/services/tx_provider.d.ts.map +1 -1
  330. package/dest/services/tx_provider.js +12 -8
  331. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  332. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  333. package/dest/services/tx_provider_instrumentation.js +5 -5
  334. package/dest/test-helpers/index.d.ts +3 -1
  335. package/dest/test-helpers/index.d.ts.map +1 -1
  336. package/dest/test-helpers/index.js +2 -0
  337. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  338. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  339. package/dest/test-helpers/make-test-p2p-clients.js +5 -3
  340. package/dest/test-helpers/mock-pubsub.d.ts +46 -6
  341. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  342. package/dest/test-helpers/mock-pubsub.js +115 -14
  343. package/dest/test-helpers/reqresp-nodes.d.ts +5 -7
  344. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  345. package/dest/test-helpers/reqresp-nodes.js +19 -20
  346. package/dest/test-helpers/test_tx_provider.d.ts +42 -0
  347. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  348. package/dest/test-helpers/test_tx_provider.js +44 -0
  349. package/dest/test-helpers/testbench-utils.d.ts +164 -0
  350. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  351. package/dest/test-helpers/testbench-utils.js +400 -0
  352. package/dest/testbench/p2p_client_testbench_worker.d.ts +26 -2
  353. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  354. package/dest/testbench/p2p_client_testbench_worker.js +284 -139
  355. package/dest/testbench/worker_client_manager.d.ts +57 -6
  356. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  357. package/dest/testbench/worker_client_manager.js +277 -49
  358. package/dest/util.d.ts +13 -8
  359. package/dest/util.d.ts.map +1 -1
  360. package/dest/util.js +35 -14
  361. package/dest/versioning.d.ts +3 -6
  362. package/dest/versioning.d.ts.map +1 -1
  363. package/dest/versioning.js +3 -24
  364. package/package.json +16 -16
  365. package/src/bootstrap/bootstrap.ts +24 -7
  366. package/src/client/factory.ts +139 -39
  367. package/src/client/interface.ts +97 -48
  368. package/src/client/p2p_client.ts +291 -312
  369. package/src/client/test/p2p_client.batch_tx_requester.bench.README.md +197 -0
  370. package/src/config.ts +287 -49
  371. package/src/errors/p2p-service.error.ts +11 -0
  372. package/src/errors/reqresp.error.ts +13 -19
  373. package/src/errors/tx-pool.error.ts +12 -0
  374. package/src/index.ts +1 -1
  375. package/src/mem_pools/attestation_pool/attestation_pool.ts +585 -94
  376. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +656 -141
  377. package/src/mem_pools/attestation_pool/index.ts +9 -2
  378. package/src/mem_pools/attestation_pool/mocks.ts +14 -8
  379. package/src/mem_pools/index.ts +2 -2
  380. package/src/mem_pools/instrumentation.ts +29 -18
  381. package/src/mem_pools/interface.ts +4 -4
  382. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  383. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  384. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +112 -0
  385. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  386. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  387. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
  388. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  389. package/src/mem_pools/tx_pool_v2/eviction/index.ts +28 -0
  390. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  391. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  392. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  393. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  394. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  395. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  396. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  397. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  398. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  399. package/src/mem_pools/tx_pool_v2/interfaces.ts +274 -0
  400. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +349 -0
  401. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  402. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +465 -0
  403. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +252 -0
  404. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1215 -0
  405. package/src/msg_validators/attestation_validator/README.md +49 -0
  406. package/src/msg_validators/attestation_validator/attestation_validator.ts +60 -16
  407. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +30 -16
  408. package/src/msg_validators/proposal_validator/README.md +123 -0
  409. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +26 -4
  410. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +43 -7
  411. package/src/msg_validators/proposal_validator/proposal_validator.ts +163 -50
  412. package/src/msg_validators/tx_validator/README.md +129 -0
  413. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +8 -17
  414. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  415. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  416. package/src/msg_validators/tx_validator/archive_cache.ts +2 -2
  417. package/src/msg_validators/tx_validator/block_header_validator.ts +21 -8
  418. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  419. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  420. package/src/msg_validators/tx_validator/data_validator.ts +50 -3
  421. package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
  422. package/src/msg_validators/tx_validator/factory.ts +430 -56
  423. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  424. package/src/msg_validators/tx_validator/gas_validator.ts +198 -51
  425. package/src/msg_validators/tx_validator/index.ts +4 -0
  426. package/src/msg_validators/tx_validator/metadata_validator.ts +18 -7
  427. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  428. package/src/msg_validators/tx_validator/phases_validator.ts +87 -30
  429. package/src/msg_validators/tx_validator/size_validator.ts +6 -2
  430. package/src/msg_validators/tx_validator/timestamp_validator.ts +29 -21
  431. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  432. package/src/msg_validators/tx_validator/tx_proof_validator.ts +10 -3
  433. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  434. package/src/services/data_store.ts +14 -19
  435. package/src/services/discv5/discV5_service.ts +127 -15
  436. package/src/services/discv5/persisted_enr_store.ts +158 -0
  437. package/src/services/dummy_service.ts +77 -39
  438. package/src/services/encoding.ts +42 -26
  439. package/src/services/gossipsub/README.md +663 -0
  440. package/src/services/gossipsub/index.ts +2 -0
  441. package/src/services/gossipsub/scoring.ts +29 -5
  442. package/src/services/gossipsub/topic_score_params.ts +478 -0
  443. package/src/services/index.ts +1 -0
  444. package/src/services/libp2p/instrumentation.ts +29 -2
  445. package/src/services/libp2p/libp2p_service.ts +893 -648
  446. package/src/services/peer-manager/metrics.ts +28 -4
  447. package/src/services/peer-manager/peer_manager.ts +91 -25
  448. package/src/services/peer-manager/peer_scoring.ts +131 -9
  449. package/src/services/reqresp/README.md +194 -0
  450. package/src/services/reqresp/batch-tx-requester/README.md +344 -0
  451. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +660 -0
  452. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  453. package/src/services/reqresp/batch-tx-requester/interface.ts +61 -0
  454. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +168 -0
  455. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +249 -0
  456. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +24 -0
  457. package/src/services/reqresp/config.ts +19 -2
  458. package/src/services/reqresp/connection-sampler/connection_sampler.ts +16 -0
  459. package/src/services/reqresp/interface.ts +48 -46
  460. package/src/services/reqresp/metrics.ts +33 -9
  461. package/src/services/reqresp/protocols/block_txs/bitvector.ts +10 -2
  462. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +44 -17
  463. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +108 -16
  464. package/src/services/reqresp/protocols/index.ts +0 -1
  465. package/src/services/reqresp/protocols/tx.ts +23 -3
  466. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  467. package/src/services/reqresp/rate-limiter/rate_limits.ts +3 -13
  468. package/src/services/reqresp/reqresp.ts +107 -223
  469. package/src/services/service.ts +85 -29
  470. package/src/services/tx_collection/config.ts +41 -36
  471. package/src/services/tx_collection/file_store_tx_collection.ts +153 -0
  472. package/src/services/tx_collection/file_store_tx_source.ts +129 -0
  473. package/src/services/tx_collection/index.ts +2 -1
  474. package/src/services/tx_collection/instrumentation.ts +11 -2
  475. package/src/services/tx_collection/request_tracker.ts +127 -0
  476. package/src/services/tx_collection/tx_collection.ts +367 -115
  477. package/src/services/tx_collection/tx_collection_sink.ts +32 -36
  478. package/src/services/tx_collection/tx_source.ts +29 -8
  479. package/src/services/tx_file_store/config.ts +37 -0
  480. package/src/services/tx_file_store/index.ts +3 -0
  481. package/src/services/tx_file_store/instrumentation.ts +36 -0
  482. package/src/services/tx_file_store/tx_file_store.ts +163 -0
  483. package/src/services/tx_provider.ts +17 -11
  484. package/src/services/tx_provider_instrumentation.ts +11 -5
  485. package/src/test-helpers/index.ts +2 -0
  486. package/src/test-helpers/make-test-p2p-clients.ts +7 -6
  487. package/src/test-helpers/mock-pubsub.ts +137 -14
  488. package/src/test-helpers/reqresp-nodes.ts +17 -29
  489. package/src/test-helpers/test_tx_provider.ts +69 -0
  490. package/src/test-helpers/testbench-utils.ts +465 -0
  491. package/src/testbench/p2p_client_testbench_worker.ts +389 -133
  492. package/src/testbench/worker_client_manager.ts +355 -51
  493. package/src/util.ts +40 -19
  494. package/src/versioning.ts +3 -33
  495. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  496. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  497. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  498. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  499. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  500. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  501. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  502. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  503. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  504. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -31
  505. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  506. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  507. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -156
  508. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  509. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  510. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  511. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  512. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -115
  513. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  514. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  515. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  516. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  517. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -76
  518. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  519. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  520. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  521. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  522. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  523. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  524. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  525. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  526. package/dest/mem_pools/tx_pool/index.js +0 -2
  527. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  528. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  529. package/dest/mem_pools/tx_pool/priority.js +0 -15
  530. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  531. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  532. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  533. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  534. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  535. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  536. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  537. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  538. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -157
  539. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -45
  540. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  541. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -92
  542. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  543. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  544. package/dest/services/reqresp/protocols/block.js +0 -32
  545. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -51
  546. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  547. package/dest/services/tx_collection/fast_tx_collection.js +0 -300
  548. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -53
  549. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  550. package/dest/services/tx_collection/slow_tx_collection.js +0 -177
  551. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  552. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  553. package/src/mem_pools/tx_pool/README.md +0 -270
  554. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  555. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -131
  556. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -207
  557. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -159
  558. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  559. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -91
  560. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  561. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  562. package/src/mem_pools/tx_pool/index.ts +0 -2
  563. package/src/mem_pools/tx_pool/priority.ts +0 -20
  564. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  565. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  566. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -191
  567. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -100
  568. package/src/services/reqresp/protocols/block.ts +0 -37
  569. package/src/services/tx_collection/fast_tx_collection.ts +0 -341
  570. package/src/services/tx_collection/slow_tx_collection.ts +0 -233
@@ -1,129 +1,114 @@
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
  */
6
6
  import { MockL2BlockSource } from '@aztec/archiver/test';
7
7
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
8
- import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
8
+ import { BlockNumber } from '@aztec/foundation/branded-types';
9
9
  import { SecretValue } from '@aztec/foundation/config';
10
- import { createLogger } from '@aztec/foundation/log';
10
+ import { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
11
+ import { Fr } from '@aztec/foundation/curves/bn254';
12
+ import { type Logger, createLogger } from '@aztec/foundation/log';
11
13
  import { sleep } from '@aztec/foundation/sleep';
12
- import type { DataStoreConfig } from '@aztec/kv-store/config';
14
+ import { DateProvider, Timer } from '@aztec/foundation/timer';
13
15
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
16
+ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
17
+ import { protocolContractsHash } from '@aztec/protocol-contracts';
14
18
  import type { L2BlockSource } from '@aztec/stdlib/block';
15
19
  import type { ContractDataSource } from '@aztec/stdlib/contract';
20
+ import { EmptyL1RollupConstants, type L1RollupConstants } from '@aztec/stdlib/epoch-helpers';
21
+ import { GasFees } from '@aztec/stdlib/gas';
16
22
  import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
17
- import { P2PClientType, P2PMessage } from '@aztec/stdlib/p2p';
18
- import { Tx, TxStatus } from '@aztec/stdlib/tx';
23
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
24
+ import { type BlockProposal, P2PMessage } from '@aztec/stdlib/p2p';
25
+ import { ChonkProof } from '@aztec/stdlib/proofs';
26
+ import { makeAztecAddress, makeBlockHeader, makeBlockProposal, mockTx } from '@aztec/stdlib/testing';
27
+ import { Tx, TxHash, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
19
28
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
20
29
 
21
30
  import type { Message, PeerId } from '@libp2p/interface';
22
31
  import { TopicValidatorResult } from '@libp2p/interface';
23
- import EventEmitter from 'events';
32
+ import { peerIdFromString } from '@libp2p/peer-id';
24
33
 
34
+ import type { P2PClient } from '../client/index.js';
25
35
  import type { P2PConfig } from '../config.js';
26
36
  import { createP2PClient } from '../index.js';
27
- import type { AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
28
- import type { MemPools } from '../mem_pools/interface.js';
29
- import type { TxPool } from '../mem_pools/tx_pool/index.js';
30
- import { LibP2PService } from '../services/libp2p/libp2p_service.js';
37
+ import type { MemPools } from '../mem_pools/index.js';
38
+ import { LibP2PService } from '../services/index.js';
31
39
  import type { PeerManager } from '../services/peer-manager/peer_manager.js';
40
+ import { BatchTxRequester } from '../services/reqresp/batch-tx-requester/batch_tx_requester.js';
41
+ import type { BatchTxRequesterLibP2PService } from '../services/reqresp/batch-tx-requester/interface.js';
42
+ import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
32
43
  import type { ReqResp } from '../services/reqresp/reqresp.js';
33
44
  import type { PeerDiscoveryService } from '../services/service.js';
34
- import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
45
+ import { RequestTracker } from '../services/tx_collection/request_tracker.js';
46
+ import { AlwaysTrueCircuitVerifier } from '../test-helpers/index.js';
47
+ import {
48
+ BENCHMARK_CONSTANTS,
49
+ type DistributionPattern,
50
+ InMemoryAttestationPool,
51
+ InMemoryTxPool,
52
+ UNLIMITED_RATE_LIMIT_QUOTA,
53
+ createMockEpochCache,
54
+ createMockWorldStateSynchronizer,
55
+ filterTxsByDistribution,
56
+ } from '../test-helpers/index.js';
35
57
  import type { PubSubLibp2p } from '../util.js';
36
58
 
37
- // Simple mock implementation
38
- function mockTxPool(): TxPool {
39
- // Mock all methods
40
- const pool: Omit<TxPool, keyof EventEmitter> = {
41
- isEmpty: () => Promise.resolve(false),
42
- addTxs: () => Promise.resolve(1),
43
- getTxByHash: () => Promise.resolve(undefined),
44
- getArchivedTxByHash: () => Promise.resolve(undefined),
45
- markAsMined: () => Promise.resolve(),
46
- markMinedAsPending: () => Promise.resolve(),
47
- deleteTxs: () => Promise.resolve(),
48
- getAllTxs: () => Promise.resolve([]),
49
- getAllTxHashes: () => Promise.resolve([]),
50
- getPendingTxHashes: () => Promise.resolve([]),
51
- getPendingTxCount: () => Promise.resolve(0),
52
- getMinedTxHashes: () => Promise.resolve([]),
53
- getTxStatus: () => Promise.resolve(TxStatus.PENDING),
54
- getTxsByHash: () => Promise.resolve([]),
55
- hasTxs: () => Promise.resolve([]),
56
- hasTx: () => Promise.resolve(false),
57
- updateConfig: () => {},
58
- markTxsAsNonEvictable: () => Promise.resolve(),
59
- clearNonEvictableTxs: () => Promise.resolve(),
60
- cleanupDeletedMinedTxs: () => Promise.resolve(0),
61
- };
62
- return Object.assign(new EventEmitter(), pool);
59
+ export type { DistributionPattern } from '../test-helpers/testbench-utils.js';
60
+
61
+ export interface BenchReqRespCommand {
62
+ type: 'BENCH_REQRESP';
63
+ txCount: number;
64
+ peerCount: number;
65
+ distribution: DistributionPattern;
66
+ timeoutMs: number;
67
+ isAggregator: boolean;
68
+ peerIndex: number;
69
+ pinnedPeerIndex?: number;
70
+ pinnedPeerId?: string;
71
+ blockNumber: number;
72
+ seed: number;
63
73
  }
64
74
 
65
- function mockAttestationPool(): AttestationPool {
66
- return {
67
- isEmpty: () => Promise.resolve(false),
68
- addBlockProposal: () => Promise.resolve(),
69
- getBlockProposal: () => Promise.resolve(undefined),
70
- hasBlockProposal: () => Promise.resolve(false),
71
- canAddProposal: () => Promise.resolve(true),
72
- // Checkpoint attestation methods
73
- addCheckpointProposal: () => Promise.resolve(),
74
- getCheckpointProposal: () => Promise.resolve(undefined),
75
- hasCheckpointProposal: () => Promise.resolve(false),
76
- addCheckpointAttestations: () => Promise.resolve(),
77
- getCheckpointAttestationsForSlot: () => Promise.resolve([]),
78
- getCheckpointAttestationsForSlotAndProposal: () => Promise.resolve([]),
79
- deleteCheckpointAttestationsOlderThan: () => Promise.resolve(),
80
- hasReachedCheckpointProposalCap: () => Promise.resolve(false),
81
- hasReachedCheckpointAttestationCap: () => Promise.resolve(false),
82
- canAddCheckpointProposal: () => Promise.resolve(true),
83
- canAddCheckpointAttestation: () => Promise.resolve(true),
84
- hasCheckpointAttestation: () => Promise.resolve(false),
85
- };
75
+ export interface BenchResultMessage {
76
+ type: 'BENCH_RESULT';
77
+ durationMs: number;
78
+ fetchedCount: number;
79
+ success: boolean;
80
+ error?: string;
86
81
  }
87
82
 
88
- function mockEpochCache(): EpochCacheInterface {
89
- return {
90
- getCommittee: () => Promise.resolve({ committee: [], seed: 1n, epoch: EpochNumber.ZERO, isEscapeHatchOpen: false }),
91
- getProposerIndexEncoding: () => '0x' as `0x${string}`,
92
- getEpochAndSlotNow: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n }),
93
- computeProposerIndex: () => 0n,
94
- getCurrentAndNextSlot: () => ({
95
- currentSlot: SlotNumber.ZERO,
96
- nextSlot: SlotNumber.ZERO,
97
- }),
98
- getProposerAttesterAddressInSlot: () => Promise.resolve(undefined),
99
- getEpochAndSlotInNextL1Slot: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n, now: 0n }),
100
- isInCommittee: () => Promise.resolve(false),
101
- getRegisteredValidators: () => Promise.resolve([]),
102
- filterInCommittee: () => Promise.resolve([]),
103
- };
83
+ export interface BenchReadyMessage {
84
+ type: 'BENCH_READY';
104
85
  }
86
+ const txCache = new Map<number, Tx[]>();
105
87
 
106
- function mockWorldStateSynchronizer(): WorldStateSynchronizer {
88
+ const BENCH_L1_CONSTANTS: L1RollupConstants = {
89
+ ...EmptyL1RollupConstants,
90
+ slotDuration: 12,
91
+ ethereumSlotDuration: 4,
92
+ };
93
+
94
+ class TestbenchL2BlockSource extends MockL2BlockSource {
95
+ public override getL1Constants(): Promise<L1RollupConstants> {
96
+ return Promise.resolve(BENCH_L1_CONSTANTS);
97
+ }
98
+ }
99
+
100
+ function createBenchmarkEpochCache(): EpochCacheInterface {
107
101
  return {
108
- status: () =>
109
- Promise.resolve({
110
- syncSummary: {
111
- latestBlockNumber: 0,
112
- latestBlockHash: '',
113
- finalizedBlockNumber: 0,
114
- treesAreSynched: false,
115
- oldestHistoricBlockNumber: 0,
116
- },
117
- }),
118
- } as WorldStateSynchronizer;
102
+ ...createMockEpochCache(),
103
+ getL1Constants: () => BENCH_L1_CONSTANTS,
104
+ };
119
105
  }
120
106
 
121
- class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends LibP2PService<T> {
107
+ class TestLibP2PService extends LibP2PService {
122
108
  private disableTxValidation: boolean;
123
- private gossipMessageCount: number = 0;
109
+ private gossipMessageCount = 0;
124
110
 
125
111
  constructor(
126
- clientType: T,
127
112
  config: P2PConfig,
128
113
  node: PubSubLibp2p,
129
114
  peerDiscoveryService: PeerDiscoveryService,
@@ -139,7 +124,6 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
139
124
  disableTxValidation = true,
140
125
  ) {
141
126
  super(
142
- clientType,
143
127
  config,
144
128
  node,
145
129
  peerDiscoveryService,
@@ -150,6 +134,7 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
150
134
  epochCache,
151
135
  proofVerifier,
152
136
  worldStateSynchronizer,
137
+ { getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
153
138
  telemetry,
154
139
  logger,
155
140
  );
@@ -173,7 +158,7 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
173
158
  const txHash = tx.getTxHash();
174
159
  const txHashString = txHash.toString();
175
160
  this.logger.verbose(`Received tx ${txHashString} from external peer ${source.toString()}.`);
176
- await this.mempools.txPool.addTxs([tx]);
161
+ await this.mempools.txPool.addPendingTxs([tx]);
177
162
  } else {
178
163
  await super.handleGossipedTx(payload, msgId, source);
179
164
  }
@@ -189,10 +174,201 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
189
174
  }
190
175
  }
191
176
 
177
+ async function generateDeterministicTxs(txCount: number, seed: number, config: P2PConfig): Promise<Tx[]> {
178
+ const cached = txCache.get(seed) ?? [];
179
+ if (cached.length >= txCount) {
180
+ return cached.slice(0, txCount);
181
+ }
182
+
183
+ const expirationTimestampBase = BigInt(seed);
184
+ for (let i = cached.length; i < txCount; i++) {
185
+ const txSeed = seed * 10000 + i;
186
+ const tx = await mockTx(txSeed, {
187
+ chainId: new Fr(config.l1ChainId),
188
+ version: new Fr(config.rollupVersion),
189
+ vkTreeRoot: getVKTreeRoot(),
190
+ protocolContractsHash,
191
+ feePayer: makeAztecAddress(txSeed + 1),
192
+ chonkProof: ChonkProof.empty(),
193
+ numberOfNonRevertiblePublicCallRequests: 0,
194
+ numberOfRevertiblePublicCallRequests: 0,
195
+ numberOfRevertibleNullifiers: 0,
196
+ hasPublicTeardownCallRequest: false,
197
+ publicCalldataSize: 0,
198
+ });
199
+ tx.data.expirationTimestamp = expirationTimestampBase + BigInt(i);
200
+ await tx.recomputeHash();
201
+ cached.push(tx);
202
+ }
203
+
204
+ txCache.set(seed, cached);
205
+ return cached.slice(0, txCount);
206
+ }
207
+
208
+ async function createBlockProposal(blockNumber: number, txHashes: TxHash[], seed: number): Promise<BlockProposal> {
209
+ const archiveRoot = new Fr(BigInt(seed) * 1000000n + BigInt(blockNumber));
210
+ return await makeBlockProposal({
211
+ signer: Secp256k1Signer.random(),
212
+ blockHeader: makeBlockHeader(1, { blockNumber: BlockNumber(blockNumber) }),
213
+ archiveRoot,
214
+ txHashes,
215
+ });
216
+ }
217
+
218
+ function installUnlimitedRateLimits(client: P2PClient): void {
219
+ const reqResp = (client as any).p2pService.reqresp as any;
220
+ const rateLimiter = reqResp.rateLimiter as any;
221
+
222
+ rateLimiter.getRateLimits = () => UNLIMITED_RATE_LIMIT_QUOTA;
223
+ rateLimiter.allow = () => RateLimitStatus.Allowed;
224
+ }
225
+
226
+ /** Resets peer scores to prevent cross-case contamination in benchmarks. */
227
+ function resetPeerScores(client: P2PClient): void {
228
+ const peerManager = (client as any).p2pService.peerManager;
229
+ const peerScoring = peerManager?.peerScoring;
230
+ if (peerScoring?.resetAllScores) {
231
+ peerScoring.resetAllScores();
232
+ }
233
+ }
234
+
235
+ /** Returns the number of connected peers for connectivity checks. */
236
+ function getConnectedPeerCount(client: P2PClient): number {
237
+ const p2pService = (client as any).p2pService;
238
+ const connectionSampler = p2pService?.reqresp?.getConnectionSampler?.();
239
+ if (connectionSampler?.getPeerListSortedByConnectionCountAsc) {
240
+ return connectionSampler.getPeerListSortedByConnectionCountAsc().length;
241
+ }
242
+ return 0;
243
+ }
244
+
245
+ async function runAggregatorBenchmark(
246
+ client: P2PClient,
247
+ blockProposal: BlockProposal,
248
+ timeoutMs: number,
249
+ pinnedPeerId: string | undefined,
250
+ pinnedPeerIndex: number | undefined,
251
+ logger: Logger,
252
+ expectedPeerCount: number,
253
+ ): Promise<BenchResultMessage> {
254
+ let timer = new Timer();
255
+ try {
256
+ installUnlimitedRateLimits(client);
257
+
258
+ const txHashes = blockProposal.txHashes;
259
+ logger.info(`[BENCH] Using block proposal with archive ${blockProposal.archive.toString().slice(0, 10)}...`);
260
+
261
+ const p2pService = (client as any).p2pService;
262
+ const batchTxRequesterService: BatchTxRequesterLibP2PService = p2pService.getBatchTxRequesterService();
263
+
264
+ const minPeersRequired = Math.max(1, expectedPeerCount - 1);
265
+ const maxWaitMs = BENCHMARK_CONSTANTS.MAX_PEER_WAIT_MS;
266
+ const waitInterval = BENCHMARK_CONSTANTS.PEER_CHECK_INTERVAL_MS;
267
+ let waited = 0;
268
+
269
+ while (waited < maxWaitMs) {
270
+ const connectedPeers = batchTxRequesterService.connectionSampler.getPeerListSortedByConnectionCountAsc();
271
+ if (connectedPeers.length >= minPeersRequired) {
272
+ logger.info(`[BENCH] Aggregator has ${connectedPeers.length} connected peers, starting benchmark`);
273
+ break;
274
+ }
275
+ logger.debug(`[BENCH] Waiting for peers: ${connectedPeers.length}/${minPeersRequired} (waited ${waited}ms)`);
276
+ await sleep(waitInterval);
277
+ waited += waitInterval;
278
+ }
279
+
280
+ const connectedPeers = batchTxRequesterService.connectionSampler.getPeerListSortedByConnectionCountAsc();
281
+ logger.info(`[BENCH] Aggregator has ${connectedPeers.length} connected peers`);
282
+ logger.info(
283
+ `[BENCH] Requesting ${txHashes.length} tx hashes: ${txHashes
284
+ .slice(0, 3)
285
+ .map(h => h.toString())
286
+ .join(', ')}...`,
287
+ );
288
+
289
+ let pinnedPeer: PeerId | undefined;
290
+ if (pinnedPeerId) {
291
+ pinnedPeer = peerIdFromString(pinnedPeerId);
292
+ } else if (pinnedPeerIndex !== undefined) {
293
+ if (pinnedPeerIndex > 0 && pinnedPeerIndex <= connectedPeers.length) {
294
+ pinnedPeer = connectedPeers[pinnedPeerIndex - 1];
295
+ }
296
+ }
297
+
298
+ const noopTxValidator: TxValidator = {
299
+ validateTx: (_tx: Tx): Promise<TxValidationResult> => Promise.resolve({ result: 'valid' }),
300
+ };
301
+
302
+ timer = new Timer();
303
+ const tracker = RequestTracker.create(txHashes, new Date(Date.now() + timeoutMs));
304
+ const batchRequester = new BatchTxRequester(
305
+ tracker,
306
+ blockProposal,
307
+ pinnedPeer,
308
+ batchTxRequesterService,
309
+ logger,
310
+ new DateProvider(),
311
+ { txValidator: noopTxValidator },
312
+ );
313
+ const fetchedTxs = await BatchTxRequester.collectAllTxs(batchRequester.run());
314
+ const durationMs = timer.ms();
315
+ return {
316
+ type: 'BENCH_RESULT',
317
+ durationMs,
318
+ fetchedCount: fetchedTxs.length,
319
+ success: fetchedTxs.length === txHashes.length,
320
+ };
321
+ } catch (err: any) {
322
+ return {
323
+ type: 'BENCH_RESULT',
324
+ durationMs: timer.ms(),
325
+ fetchedCount: 0,
326
+ success: false,
327
+ error: err?.message ?? String(err),
328
+ };
329
+ }
330
+ }
331
+
332
+ let workerClient: P2PClient | null = null;
333
+ let workerTxPool: InMemoryTxPool | null = null;
334
+ let workerAttestationPool: InMemoryAttestationPool | null = null;
335
+ let workerConfig: P2PConfig | null = null;
336
+ let workerLogger: Logger | null = null;
337
+ let kvStore: Awaited<ReturnType<typeof openTmpStore>> | null = null;
338
+
339
+ async function stopWorker() {
340
+ try {
341
+ if (workerClient) {
342
+ await workerClient.stop();
343
+ workerClient = null;
344
+ }
345
+ } catch (e) {
346
+ workerLogger?.error('Error stopping worker client', e);
347
+ }
348
+ try {
349
+ if (kvStore?.close) {
350
+ await kvStore.close();
351
+ kvStore = null;
352
+ }
353
+ } catch (e) {
354
+ workerLogger?.error('Error closing kv store', e);
355
+ }
356
+ }
357
+
358
+ function gracefulExit(code: number = 0) {
359
+ try {
360
+ if (process.connected) {
361
+ process.disconnect();
362
+ }
363
+ } catch {
364
+ // IPC channel already closed
365
+ }
366
+ // Safety fallback if lingering handles prevent the event loop from draining
367
+ setTimeout(() => process.exit(code), 5000).unref();
368
+ }
369
+
192
370
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
193
371
  process.on('message', async msg => {
194
- // Note: peerIdPrivateKey comes as a raw string (not SecretValue) because
195
- // SecretValue's private fields can't be serialized via IPC
196
372
  const {
197
373
  type,
198
374
  config: rawConfig,
@@ -202,49 +378,50 @@ process.on('message', async msg => {
202
378
  config: Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey?: string };
203
379
  clientIndex: number;
204
380
  };
381
+
205
382
  try {
206
383
  if (type === 'START') {
207
- // Re-wrap the peerIdPrivateKey with SecretValue
208
384
  const config: P2PConfig = {
209
385
  ...rawConfig,
210
386
  peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined,
387
+ priceBumpPercentage: 10n,
211
388
  } as P2PConfig;
212
389
 
213
- const txPool = mockTxPool();
214
- const attestationPool = mockAttestationPool();
215
- const epochCache = mockEpochCache();
216
- const worldState = mockWorldStateSynchronizer();
217
- const l2BlockSource = new MockL2BlockSource();
390
+ workerConfig = config;
391
+ workerTxPool = new InMemoryTxPool();
392
+ workerAttestationPool = new InMemoryAttestationPool();
393
+ const epochCache = createBenchmarkEpochCache();
394
+ const worldState = createMockWorldStateSynchronizer();
395
+ const l2BlockSource = new TestbenchL2BlockSource();
218
396
 
219
397
  const proofVerifier = new AlwaysTrueCircuitVerifier();
220
- const kvStore = await openTmpStore(`test-${clientIndex}`);
221
- const logger = createLogger(`p2p:${clientIndex}`);
398
+ kvStore = await openTmpStore(`test-${clientIndex}`, true, BENCHMARK_CONSTANTS.KV_STORE_MAP_SIZE_KB);
399
+ workerLogger = createLogger(`p2p:${clientIndex}`);
400
+ workerTxPool.setLogger(workerLogger);
222
401
  const telemetry = getTelemetryClient();
223
402
 
224
403
  const deps = {
225
- txPool,
226
- attestationPool,
404
+ txPool: workerTxPool,
405
+ attestationPool: workerAttestationPool,
227
406
  store: kvStore,
228
- logger,
407
+ logger: workerLogger,
229
408
  };
230
409
 
231
410
  const client = await createP2PClient(
232
- P2PClientType.Full,
233
411
  config as P2PConfig & DataStoreConfig,
234
412
  l2BlockSource,
235
- proofVerifier,
413
+ proofVerifier as ClientProtocolCircuitVerifier,
236
414
  worldState,
237
415
  epochCache,
416
+ { getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
238
417
  'test-p2p-bench-worker',
239
418
  undefined,
240
- telemetry,
419
+ telemetry as TelemetryClient,
241
420
  deps,
421
+ await l2BlockSource.getInitialHeader().hash(),
242
422
  );
243
423
 
244
- // Create test service with validation disabled
245
- // Note: Parameter order must match LibP2PService constructor
246
424
  const testService = new TestLibP2PService(
247
- P2PClientType.Full,
248
425
  config,
249
426
  (client as any).p2pService.node,
250
427
  (client as any).p2pService.peerDiscoveryService,
@@ -255,44 +432,123 @@ process.on('message', async msg => {
255
432
  epochCache,
256
433
  proofVerifier,
257
434
  worldState,
258
- telemetry,
259
- logger,
260
- true, // disable validation
435
+ telemetry as TelemetryClient,
436
+ workerLogger,
437
+ true,
261
438
  );
262
439
 
263
- // Replace the existing p2pService with our test version
264
440
  (client as any).p2pService = testService;
265
441
 
266
442
  await client.start();
267
- // Wait until the client is ready
268
443
  for (let i = 0; i < 100; i++) {
269
444
  const isReady = client.isReady();
270
- logger.debug(`Client ${clientIndex} isReady: ${isReady}`);
445
+ workerLogger.debug(`Client ${clientIndex} isReady: ${isReady}`);
271
446
  if (isReady) {
272
447
  break;
273
448
  }
274
449
  await sleep(1000);
275
450
  }
276
451
 
277
- // Listen for commands from parent
278
- // eslint-disable-next-line @typescript-eslint/no-misused-promises
279
- process.on('message', async (cmd: any) => {
280
- switch (cmd.type) {
281
- case 'STOP':
282
- await client.stop();
283
- process.exit(0);
284
- break;
285
- case 'SEND_TX':
286
- await client.sendTx(Tx.fromBuffer(Buffer.from(cmd.tx)));
287
- process.send!({ type: 'TX_SENT' });
288
- break;
452
+ workerClient = client;
453
+ const peerId = (client as any).p2pService.node.peerId.toString();
454
+ process.send!({ type: 'READY', peerId });
455
+ return;
456
+ }
457
+
458
+ const cmd = msg as any;
459
+ switch (cmd.type) {
460
+ case 'STOP':
461
+ await stopWorker();
462
+ gracefulExit(0);
463
+ break;
464
+
465
+ case 'SEND_TX':
466
+ if (workerClient) {
467
+ await workerClient.sendTx(Tx.fromBuffer(Buffer.from(cmd.tx)));
468
+ process.send!({ type: 'TX_SENT' });
289
469
  }
290
- });
470
+ break;
471
+
472
+ case 'GET_PEER_COUNT':
473
+ process.send!({
474
+ type: 'PEER_COUNT',
475
+ count: workerClient ? getConnectedPeerCount(workerClient) : 0,
476
+ });
477
+ break;
478
+
479
+ case 'BENCH_REQRESP': {
480
+ const benchCmd = cmd as BenchReqRespCommand;
481
+ if (!workerClient || !workerTxPool || !workerAttestationPool || !workerConfig || !workerLogger) {
482
+ process.send!({
483
+ type: 'BENCH_RESULT',
484
+ durationMs: 0,
485
+ fetchedCount: 0,
486
+ success: false,
487
+ error: 'Worker not initialized',
488
+ } as BenchResultMessage);
489
+ break;
490
+ }
491
+
492
+ // Reset state before each benchmark run to avoid cross-run contamination
493
+ workerTxPool.resetState();
494
+ workerAttestationPool.resetState();
495
+ resetPeerScores(workerClient);
496
+
497
+ installUnlimitedRateLimits(workerClient);
291
498
 
292
- process.send!({ type: 'READY' });
499
+ const allTxs = await generateDeterministicTxs(benchCmd.txCount, benchCmd.seed, workerConfig);
500
+ const txHashes = allTxs.map(tx => tx.getTxHash());
501
+ const blockProposal = await createBlockProposal(benchCmd.blockNumber, txHashes, benchCmd.seed);
502
+
503
+ await workerAttestationPool.tryAddBlockProposal(blockProposal);
504
+ workerLogger.debug(
505
+ `[BENCH] Added block proposal with archive ${blockProposal.archive.toString().slice(0, 10)}...`,
506
+ );
507
+
508
+ if (benchCmd.isAggregator) {
509
+ workerTxPool.clearTxs();
510
+
511
+ workerLogger.info(
512
+ `[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, distribution=${benchCmd.distribution}`,
513
+ );
514
+
515
+ const result = await runAggregatorBenchmark(
516
+ workerClient,
517
+ blockProposal,
518
+ benchCmd.timeoutMs,
519
+ benchCmd.pinnedPeerId,
520
+ benchCmd.pinnedPeerIndex,
521
+ workerLogger,
522
+ benchCmd.peerCount,
523
+ );
524
+
525
+ process.send!(result);
526
+ } else {
527
+ const myTxs = filterTxsByDistribution(
528
+ allTxs,
529
+ benchCmd.peerIndex,
530
+ benchCmd.peerCount,
531
+ benchCmd.distribution,
532
+ benchCmd.pinnedPeerIndex,
533
+ );
534
+ workerTxPool.setTxs(myTxs);
535
+
536
+ workerLogger.info(
537
+ `[BENCH] Peer ${benchCmd.peerIndex} populated tx pool with ${myTxs.length}/${benchCmd.txCount} txs (${benchCmd.distribution})`,
538
+ );
539
+
540
+ process.send!({ type: 'BENCH_READY' } as BenchReadyMessage);
541
+ }
542
+ break;
543
+ }
293
544
  }
294
545
  } catch (err: any) {
295
- process.send!({ type: 'ERROR', error: err.message });
296
- process.exit(1);
546
+ try {
547
+ process.send!({ type: 'ERROR', error: err.message });
548
+ } catch {
549
+ // IPC channel may be closed
550
+ }
551
+ await stopWorker();
552
+ gracefulExit(1);
297
553
  }
298
554
  });