@aztec/p2p 0.0.1-commit.96bb3f7 → 0.0.1-commit.993d240

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