@aztec/p2p 0.0.1-commit.0208eb9 → 0.0.1-commit.031e54b

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 (541) hide show
  1. package/README.md +129 -3
  2. package/dest/bootstrap/bootstrap.d.ts +1 -1
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +9 -1
  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 +60 -18
  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 +50 -58
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +224 -235
  13. package/dest/config.d.ts +161 -94
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +150 -41
  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 +507 -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 +4 -2
  44. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  45. package/dest/mem_pools/instrumentation.js +33 -15
  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 +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 +9 -3
  115. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  116. package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
  117. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +8 -4
  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 +4 -5
  120. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  121. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  122. package/dest/msg_validators/clock_tolerance.js +56 -3
  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 +90 -44
  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.js +1 -1
  142. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +16 -3
  143. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  144. package/dest/msg_validators/tx_validator/block_header_validator.js +1 -1
  145. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  146. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  147. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  148. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  149. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  150. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  151. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  152. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  153. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  154. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +13 -3
  155. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  156. package/dest/msg_validators/tx_validator/double_spend_validator.js +4 -4
  157. package/dest/msg_validators/tx_validator/factory.d.ts +135 -7
  158. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  159. package/dest/msg_validators/tx_validator/factory.js +252 -61
  160. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  161. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  162. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  163. package/dest/msg_validators/tx_validator/gas_validator.d.ts +99 -3
  164. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  165. package/dest/msg_validators/tx_validator/gas_validator.js +137 -53
  166. package/dest/msg_validators/tx_validator/index.d.ts +5 -1
  167. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  168. package/dest/msg_validators/tx_validator/index.js +4 -0
  169. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  170. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  171. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  172. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  173. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  174. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  175. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  176. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  177. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  178. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +20 -4
  179. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  180. package/dest/msg_validators/tx_validator/timestamp_validator.js +6 -6
  181. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  182. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  183. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  184. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  185. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  186. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  187. package/dest/services/data_store.d.ts +1 -1
  188. package/dest/services/data_store.d.ts.map +1 -1
  189. package/dest/services/data_store.js +5 -5
  190. package/dest/services/discv5/discV5_service.d.ts +2 -1
  191. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  192. package/dest/services/discv5/discV5_service.js +35 -8
  193. package/dest/services/dummy_service.d.ts +22 -18
  194. package/dest/services/dummy_service.d.ts.map +1 -1
  195. package/dest/services/dummy_service.js +22 -20
  196. package/dest/services/encoding.d.ts +7 -3
  197. package/dest/services/encoding.d.ts.map +1 -1
  198. package/dest/services/encoding.js +18 -11
  199. package/dest/services/gossipsub/index.d.ts +3 -0
  200. package/dest/services/gossipsub/index.d.ts.map +1 -0
  201. package/dest/services/gossipsub/index.js +2 -0
  202. package/dest/services/gossipsub/scoring.d.ts +21 -3
  203. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  204. package/dest/services/gossipsub/scoring.js +24 -7
  205. package/dest/services/gossipsub/topic_score_params.d.ts +184 -0
  206. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  207. package/dest/services/gossipsub/topic_score_params.js +363 -0
  208. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  209. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  210. package/dest/services/libp2p/instrumentation.js +14 -0
  211. package/dest/services/libp2p/libp2p_service.d.ts +102 -60
  212. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  213. package/dest/services/libp2p/libp2p_service.js +685 -562
  214. package/dest/services/peer-manager/metrics.d.ts +3 -1
  215. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  216. package/dest/services/peer-manager/metrics.js +6 -0
  217. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  218. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  219. package/dest/services/peer-manager/peer_manager.js +40 -11
  220. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  221. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  222. package/dest/services/peer-manager/peer_scoring.js +57 -12
  223. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +7 -10
  224. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  225. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +100 -132
  226. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +11 -11
  227. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  228. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +11 -13
  229. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  230. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +31 -46
  231. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
  232. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  233. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
  234. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  235. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  236. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  237. package/dest/services/reqresp/config.d.ts +3 -3
  238. package/dest/services/reqresp/config.d.ts.map +1 -1
  239. package/dest/services/reqresp/interface.d.ts +25 -18
  240. package/dest/services/reqresp/interface.d.ts.map +1 -1
  241. package/dest/services/reqresp/interface.js +23 -19
  242. package/dest/services/reqresp/metrics.d.ts +1 -1
  243. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  244. package/dest/services/reqresp/metrics.js +0 -1
  245. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  246. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  247. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  248. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  249. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  250. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +34 -26
  251. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +32 -16
  252. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  253. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +68 -34
  254. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  255. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  256. package/dest/services/reqresp/protocols/index.js +0 -1
  257. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  258. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  259. package/dest/services/reqresp/protocols/tx.js +21 -3
  260. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  261. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  262. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  263. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  264. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  265. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  266. package/dest/services/reqresp/reqresp.d.ts +7 -29
  267. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  268. package/dest/services/reqresp/reqresp.js +53 -218
  269. package/dest/services/service.d.ts +46 -13
  270. package/dest/services/service.d.ts.map +1 -1
  271. package/dest/services/tx_collection/config.d.ts +11 -14
  272. package/dest/services/tx_collection/config.d.ts.map +1 -1
  273. package/dest/services/tx_collection/config.js +26 -33
  274. package/dest/services/tx_collection/file_store_tx_collection.d.ts +37 -0
  275. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  276. package/dest/services/tx_collection/file_store_tx_collection.js +127 -0
  277. package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
  278. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  279. package/dest/services/tx_collection/file_store_tx_source.js +100 -0
  280. package/dest/services/tx_collection/index.d.ts +3 -3
  281. package/dest/services/tx_collection/index.d.ts.map +1 -1
  282. package/dest/services/tx_collection/index.js +1 -1
  283. package/dest/services/tx_collection/instrumentation.js +1 -2
  284. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  285. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  286. package/dest/services/tx_collection/request_tracker.js +84 -0
  287. package/dest/services/tx_collection/tx_collection.d.ts +45 -51
  288. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  289. package/dest/services/tx_collection/tx_collection.js +296 -68
  290. package/dest/services/tx_collection/tx_collection_sink.d.ts +19 -9
  291. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  292. package/dest/services/tx_collection/tx_collection_sink.js +28 -31
  293. package/dest/services/tx_collection/tx_source.d.ts +13 -7
  294. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  295. package/dest/services/tx_collection/tx_source.js +26 -7
  296. package/dest/services/tx_file_store/config.d.ts +1 -3
  297. package/dest/services/tx_file_store/config.d.ts.map +1 -1
  298. package/dest/services/tx_file_store/config.js +0 -4
  299. package/dest/services/tx_file_store/tx_file_store.d.ts +4 -5
  300. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  301. package/dest/services/tx_file_store/tx_file_store.js +13 -20
  302. package/dest/services/tx_provider.d.ts +6 -4
  303. package/dest/services/tx_provider.d.ts.map +1 -1
  304. package/dest/services/tx_provider.js +12 -8
  305. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  306. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  307. package/dest/test-helpers/make-test-p2p-clients.js +5 -3
  308. package/dest/test-helpers/mock-pubsub.d.ts +46 -6
  309. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  310. package/dest/test-helpers/mock-pubsub.js +115 -14
  311. package/dest/test-helpers/reqresp-nodes.d.ts +5 -7
  312. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  313. package/dest/test-helpers/reqresp-nodes.js +19 -20
  314. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  315. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  316. package/dest/test-helpers/test_tx_provider.js +3 -0
  317. package/dest/test-helpers/testbench-utils.d.ts +53 -50
  318. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  319. package/dest/test-helpers/testbench-utils.js +169 -75
  320. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  321. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  322. package/dest/testbench/p2p_client_testbench_worker.js +94 -48
  323. package/dest/testbench/worker_client_manager.d.ts +12 -6
  324. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  325. package/dest/testbench/worker_client_manager.js +57 -11
  326. package/dest/util.d.ts +13 -8
  327. package/dest/util.d.ts.map +1 -1
  328. package/dest/util.js +35 -14
  329. package/dest/versioning.d.ts +3 -6
  330. package/dest/versioning.d.ts.map +1 -1
  331. package/dest/versioning.js +3 -24
  332. package/package.json +15 -14
  333. package/src/bootstrap/bootstrap.ts +9 -1
  334. package/src/client/factory.ts +127 -31
  335. package/src/client/interface.ts +70 -44
  336. package/src/client/p2p_client.ts +268 -299
  337. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  338. package/src/config.ts +260 -46
  339. package/src/errors/p2p-service.error.ts +11 -0
  340. package/src/errors/reqresp.error.ts +0 -25
  341. package/src/errors/tx-pool.error.ts +12 -0
  342. package/src/index.ts +1 -1
  343. package/src/mem_pools/attestation_pool/attestation_pool.ts +575 -94
  344. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +617 -141
  345. package/src/mem_pools/attestation_pool/index.ts +9 -2
  346. package/src/mem_pools/attestation_pool/mocks.ts +14 -8
  347. package/src/mem_pools/index.ts +2 -2
  348. package/src/mem_pools/instrumentation.ts +22 -14
  349. package/src/mem_pools/interface.ts +4 -4
  350. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  351. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  352. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +112 -0
  353. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  354. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  355. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
  356. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  357. package/src/mem_pools/tx_pool_v2/eviction/index.ts +28 -0
  358. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  359. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  360. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  361. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  362. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  363. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  364. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  365. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  366. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  367. package/src/mem_pools/tx_pool_v2/interfaces.ts +250 -0
  368. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +349 -0
  369. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  370. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +430 -0
  371. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +238 -0
  372. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1090 -0
  373. package/src/msg_validators/attestation_validator/README.md +49 -0
  374. package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
  375. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +16 -9
  376. package/src/msg_validators/clock_tolerance.ts +73 -3
  377. package/src/msg_validators/proposal_validator/README.md +123 -0
  378. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +24 -4
  379. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +35 -7
  380. package/src/msg_validators/proposal_validator/proposal_validator.ts +114 -47
  381. package/src/msg_validators/tx_validator/README.md +127 -0
  382. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +8 -17
  383. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  384. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  385. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  386. package/src/msg_validators/tx_validator/block_header_validator.ts +15 -3
  387. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  388. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  389. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  390. package/src/msg_validators/tx_validator/double_spend_validator.ts +11 -6
  391. package/src/msg_validators/tx_validator/factory.ts +407 -80
  392. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  393. package/src/msg_validators/tx_validator/gas_validator.ts +199 -54
  394. package/src/msg_validators/tx_validator/index.ts +4 -0
  395. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  396. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  397. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  398. package/src/msg_validators/tx_validator/timestamp_validator.ts +23 -18
  399. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  400. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  401. package/src/services/data_store.ts +5 -13
  402. package/src/services/discv5/discV5_service.ts +38 -5
  403. package/src/services/dummy_service.ts +32 -45
  404. package/src/services/encoding.ts +18 -10
  405. package/src/services/gossipsub/README.md +641 -0
  406. package/src/services/gossipsub/index.ts +2 -0
  407. package/src/services/gossipsub/scoring.ts +29 -5
  408. package/src/services/gossipsub/topic_score_params.ts +519 -0
  409. package/src/services/libp2p/instrumentation.ts +14 -0
  410. package/src/services/libp2p/libp2p_service.ts +738 -620
  411. package/src/services/peer-manager/metrics.ts +7 -0
  412. package/src/services/peer-manager/peer_manager.ts +46 -11
  413. package/src/services/peer-manager/peer_scoring.ts +52 -5
  414. package/src/services/reqresp/README.md +215 -0
  415. package/src/services/reqresp/batch-tx-requester/README.md +53 -14
  416. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +101 -147
  417. package/src/services/reqresp/batch-tx-requester/interface.ts +14 -10
  418. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +30 -71
  419. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  420. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  421. package/src/services/reqresp/config.ts +2 -2
  422. package/src/services/reqresp/interface.ts +45 -46
  423. package/src/services/reqresp/metrics.ts +0 -1
  424. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  425. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +43 -30
  426. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +84 -34
  427. package/src/services/reqresp/protocols/index.ts +0 -1
  428. package/src/services/reqresp/protocols/tx.ts +23 -3
  429. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  430. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  431. package/src/services/reqresp/reqresp.ts +61 -264
  432. package/src/services/service.ts +62 -29
  433. package/src/services/tx_collection/config.ts +40 -49
  434. package/src/services/tx_collection/file_store_tx_collection.ts +153 -0
  435. package/src/services/tx_collection/file_store_tx_source.ts +129 -0
  436. package/src/services/tx_collection/index.ts +2 -6
  437. package/src/services/tx_collection/instrumentation.ts +1 -1
  438. package/src/services/tx_collection/request_tracker.ts +127 -0
  439. package/src/services/tx_collection/tx_collection.ts +362 -110
  440. package/src/services/tx_collection/tx_collection_sink.ts +32 -36
  441. package/src/services/tx_collection/tx_source.ts +28 -8
  442. package/src/services/tx_file_store/config.ts +0 -6
  443. package/src/services/tx_file_store/tx_file_store.ts +15 -25
  444. package/src/services/tx_provider.ts +15 -9
  445. package/src/test-helpers/make-test-p2p-clients.ts +7 -6
  446. package/src/test-helpers/mock-pubsub.ts +137 -14
  447. package/src/test-helpers/reqresp-nodes.ts +17 -29
  448. package/src/test-helpers/test_tx_provider.ts +5 -0
  449. package/src/test-helpers/testbench-utils.ts +175 -96
  450. package/src/testbench/p2p_client_testbench_worker.ts +100 -63
  451. package/src/testbench/worker_client_manager.ts +72 -25
  452. package/src/util.ts +40 -19
  453. package/src/versioning.ts +3 -33
  454. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  455. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  456. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -305
  457. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  458. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  459. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  460. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  461. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  462. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  463. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  464. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  465. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  466. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  467. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  468. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  469. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  470. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  471. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  472. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  473. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  474. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  475. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  476. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  477. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  478. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  479. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  480. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  481. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  482. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  483. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  484. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  485. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  486. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  487. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  488. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  489. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  490. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  491. package/dest/mem_pools/tx_pool/index.js +0 -2
  492. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  493. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  494. package/dest/mem_pools/tx_pool/priority.js +0 -15
  495. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  496. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  497. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  498. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  499. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  500. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  501. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  502. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  503. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  504. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  505. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  506. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  507. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  508. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  509. package/dest/services/reqresp/protocols/block.js +0 -32
  510. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -53
  511. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  512. package/dest/services/tx_collection/fast_tx_collection.js +0 -311
  513. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -48
  514. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  515. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  516. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -53
  517. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  518. package/dest/services/tx_collection/slow_tx_collection.js +0 -177
  519. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -336
  520. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  521. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  522. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  523. package/src/mem_pools/tx_pool/README.md +0 -270
  524. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  525. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  526. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  527. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  528. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  529. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  530. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  531. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  532. package/src/mem_pools/tx_pool/index.ts +0 -2
  533. package/src/mem_pools/tx_pool/priority.ts +0 -20
  534. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  535. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  536. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  537. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  538. package/src/services/reqresp/protocols/block.ts +0 -37
  539. package/src/services/tx_collection/fast_tx_collection.ts +0 -364
  540. package/src/services/tx_collection/proposal_tx_collector.ts +0 -114
  541. package/src/services/tx_collection/slow_tx_collection.ts +0 -233
@@ -5,6 +5,7 @@ import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.j
5
5
  /**
6
6
  * In-memory TxPool implementation for testing.
7
7
  * Provides basic tx storage without persistence.
8
+ * Implements TxPoolV2 interface with stub implementations for testing.
8
9
  */ export class InMemoryTxPool extends EventEmitter {
9
10
  txsByHash = new Map();
10
11
  logger = null;
@@ -33,14 +34,15 @@ import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.j
33
34
  this.txsByHash.clear();
34
35
  this.removeAllListeners();
35
36
  }
36
- addTxs(txs, opts) {
37
+ // === Core Operations (TxPoolV2) ===
38
+ addPendingTxs(txs, opts) {
39
+ const accepted = [];
37
40
  const newTxs = [];
38
- let added = 0;
39
41
  for (const tx of txs){
40
42
  const key = tx.getTxHash().toString();
41
43
  if (!this.txsByHash.has(key)) {
42
44
  newTxs.push(tx);
43
- added += 1;
45
+ accepted.push(tx.getTxHash());
44
46
  }
45
47
  this.txsByHash.set(key, tx);
46
48
  }
@@ -50,8 +52,68 @@ import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.j
50
52
  source: opts?.source
51
53
  });
52
54
  }
53
- return Promise.resolve(added);
55
+ return Promise.resolve({
56
+ accepted,
57
+ ignored: [],
58
+ rejected: []
59
+ });
60
+ }
61
+ canAddPendingTx(tx) {
62
+ const key = tx.getTxHash().toString();
63
+ if (this.txsByHash.has(key)) {
64
+ return Promise.resolve('ignored');
65
+ }
66
+ return Promise.resolve('accepted');
67
+ }
68
+ addProtectedTxs(txs, _block, opts) {
69
+ for (const tx of txs){
70
+ const key = tx.getTxHash().toString();
71
+ this.txsByHash.set(key, tx);
72
+ }
73
+ if (txs.length > 0) {
74
+ this.emit('txs-added', {
75
+ txs,
76
+ source: opts?.source
77
+ });
78
+ }
79
+ return Promise.resolve();
80
+ }
81
+ protectTxs(txHashes, _block) {
82
+ const notFound = [];
83
+ for (const txHash of txHashes){
84
+ if (!this.txsByHash.has(txHash.toString())) {
85
+ notFound.push(txHash);
86
+ }
87
+ }
88
+ return Promise.resolve(notFound);
89
+ }
90
+ addMinedTxs(txs, _block, _opts) {
91
+ for (const tx of txs){
92
+ const key = tx.getTxHash().toString();
93
+ this.txsByHash.set(key, tx);
94
+ }
95
+ return Promise.resolve();
96
+ }
97
+ // === State Transition Handlers (TxPoolV2) ===
98
+ handleMinedBlock(_block) {
99
+ return Promise.resolve();
100
+ }
101
+ prepareForSlot(_slotNumber) {
102
+ return Promise.resolve();
54
103
  }
104
+ handlePrunedBlocks(_latestBlock, _options) {
105
+ return Promise.resolve();
106
+ }
107
+ handleFailedExecution(txHashes) {
108
+ for (const txHash of txHashes){
109
+ this.txsByHash.delete(txHash.toString());
110
+ }
111
+ return Promise.resolve();
112
+ }
113
+ handleFinalizedBlock(_block) {
114
+ return Promise.resolve();
115
+ }
116
+ // === Query Operations (TxPoolV2) ===
55
117
  getTxByHash(hash) {
56
118
  return Promise.resolve(this.txsByHash.get(hash.toString()));
57
119
  }
@@ -64,113 +126,124 @@ import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.j
64
126
  hasTxs(hashes) {
65
127
  return Promise.resolve(hashes.map((h)=>this.txsByHash.has(h.toString())));
66
128
  }
67
- hasTx(hash) {
68
- return Promise.resolve(this.txsByHash.has(hash.toString()));
69
- }
70
129
  getArchivedTxByHash(_hash) {
71
130
  return Promise.resolve(undefined);
72
131
  }
73
- async markAsMined(_txHashes, _blockHeader) {}
74
- async markMinedAsPending(_txHashes, _latestBlock) {}
75
- deleteTxs(txHashes, _opts) {
76
- for (const txHash of txHashes){
77
- this.txsByHash.delete(txHash.toString());
78
- }
79
- return Promise.resolve();
80
- }
81
- getAllTxs() {
82
- return Promise.resolve([
83
- ...this.txsByHash.values()
84
- ]);
85
- }
86
- getAllTxHashes() {
87
- return Promise.resolve([
88
- ...this.txsByHash.keys()
89
- ].map((key)=>TxHash.fromString(key)));
90
- }
91
132
  getPendingTxHashes() {
92
133
  return Promise.resolve([
93
134
  ...this.txsByHash.keys()
94
135
  ].map((key)=>TxHash.fromString(key)));
95
136
  }
137
+ getEligiblePendingTxHashes() {
138
+ return this.getPendingTxHashes();
139
+ }
96
140
  getPendingTxCount() {
97
141
  return Promise.resolve(this.txsByHash.size);
98
142
  }
99
143
  getMinedTxHashes() {
100
144
  return Promise.resolve([]);
101
145
  }
146
+ getMinedTxCount() {
147
+ return Promise.resolve(0);
148
+ }
102
149
  getTxStatus(hash) {
103
150
  return Promise.resolve(this.txsByHash.has(hash.toString()) ? 'pending' : undefined);
104
151
  }
105
- updateConfig(_config) {}
106
152
  isEmpty() {
107
153
  return Promise.resolve(this.txsByHash.size === 0);
108
154
  }
109
- async markTxsAsNonEvictable(_txHashes) {}
110
- async clearNonEvictableTxs() {}
111
- cleanupDeletedMinedTxs(_blockNumber) {
112
- return Promise.resolve(0);
155
+ getLowestPriorityPending(_limit) {
156
+ return Promise.resolve([]);
157
+ }
158
+ // === Configuration (TxPoolV2) ===
159
+ updateConfig(_config) {
160
+ return Promise.resolve();
161
+ }
162
+ // === Lifecycle (TxPoolV2) ===
163
+ start() {
164
+ return Promise.resolve();
165
+ }
166
+ stop() {
167
+ return Promise.resolve();
113
168
  }
114
169
  }
115
170
  /**
116
- * In-memory AttestationPool implementation for testing.
171
+ * In-memory AttestationPool mock for testing/benchmarking.
172
+ * Provides minimal implementation without persistence.
117
173
  */ export class InMemoryAttestationPool {
118
174
  proposals = new Map();
119
- addBlockProposal(blockProposal) {
120
- this.proposals.set(blockProposal.archive.toString(), blockProposal);
121
- return Promise.resolve();
122
- }
123
- getBlockProposal(id) {
175
+ checkpoints = new Map();
176
+ tryAddBlockProposal(blockProposal) {
177
+ const id = blockProposal.archive.toString();
178
+ const alreadyExists = this.proposals.has(id);
179
+ if (alreadyExists) {
180
+ return Promise.resolve({
181
+ added: false,
182
+ alreadyExists: true,
183
+ count: 1
184
+ });
185
+ }
186
+ this.proposals.set(id, blockProposal);
187
+ return Promise.resolve({
188
+ added: true,
189
+ alreadyExists: false,
190
+ count: 1
191
+ });
192
+ }
193
+ getBlockProposalByArchive(id) {
124
194
  return Promise.resolve(this.proposals.get(id));
125
195
  }
126
- hasBlockProposal(idOrProposal) {
127
- const id = typeof idOrProposal === 'string' ? idOrProposal : idOrProposal.archive.toString();
128
- return Promise.resolve(this.proposals.has(id));
129
- }
130
- canAddProposal(_block) {
131
- return Promise.resolve(true);
132
- }
133
- async addCheckpointProposal(_proposal) {}
134
- getCheckpointProposal(_id) {
135
- return Promise.resolve(undefined);
136
- }
137
- hasCheckpointProposal(_idOrProposal) {
138
- return Promise.resolve(false);
139
- }
140
- async addCheckpointAttestations(_attestations) {}
141
- async deleteCheckpointAttestationsOlderThan(_slot) {}
196
+ tryAddCheckpointProposal(proposal) {
197
+ const proposals = this.checkpoints.get(proposal.slotNumber) ?? [];
198
+ proposals.push(proposal);
199
+ this.checkpoints.set(proposal.slotNumber, proposals);
200
+ return Promise.resolve({
201
+ added: true,
202
+ alreadyExists: false,
203
+ count: 1
204
+ });
205
+ }
206
+ getCheckpointProposal(slot) {
207
+ return Promise.resolve(this.checkpoints.get(slot)?.[0]);
208
+ }
209
+ getProposalsForSlot(slot) {
210
+ return Promise.resolve({
211
+ blockProposals: [
212
+ ...this.proposals.values()
213
+ ].filter((proposal)=>proposal.slotNumber === slot),
214
+ checkpointProposals: this.checkpoints.get(slot) ?? []
215
+ });
216
+ }
217
+ async addOwnCheckpointAttestations(_attestations) {}
218
+ async deleteOlderThan(_slot) {}
142
219
  getCheckpointAttestationsForSlot(_slot) {
143
220
  return Promise.resolve([]);
144
221
  }
145
- getCheckpointAttestationsForSlotAndProposal(_slot, _proposalId) {
222
+ getCheckpointAttestationsForSlotAndProposal(_slot, _proposalPayloadHash) {
146
223
  return Promise.resolve([]);
147
224
  }
148
- hasCheckpointAttestation(_attestation) {
149
- return Promise.resolve(false);
150
- }
151
- canAddCheckpointProposal(_proposal) {
152
- return Promise.resolve(true);
153
- }
154
- canAddCheckpointAttestation(_attestation, _committeeSize) {
155
- return Promise.resolve(true);
156
- }
157
- hasReachedCheckpointProposalCap(_slot) {
158
- return Promise.resolve(false);
225
+ tryAddCheckpointAttestation(_attestation) {
226
+ return Promise.resolve({
227
+ added: true,
228
+ alreadyExists: false,
229
+ count: 1
230
+ });
159
231
  }
160
- hasReachedCheckpointAttestationCap(_slot, _proposalId, _committeeSize) {
232
+ hasBlockProposalsForSlot(_slot) {
161
233
  return Promise.resolve(false);
162
234
  }
163
235
  isEmpty() {
164
- return Promise.resolve(this.proposals.size === 0);
236
+ return Promise.resolve(this.proposals.size === 0 && this.checkpoints.size === 0);
165
237
  }
166
238
  resetState() {
167
239
  this.proposals.clear();
240
+ this.checkpoints.clear();
168
241
  }
169
242
  }
170
243
  /**
171
244
  * Creates a mock EpochCache for testing.
172
245
  */ export function createMockEpochCache() {
173
- return {
246
+ const cache = {
174
247
  getCommittee: ()=>Promise.resolve({
175
248
  committee: [],
176
249
  seed: 1n,
@@ -178,6 +251,10 @@ import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.j
178
251
  isEscapeHatchOpen: false
179
252
  }),
180
253
  getProposerIndexEncoding: ()=>'0x',
254
+ getSlotNow: ()=>SlotNumber.ZERO,
255
+ getTargetSlot: ()=>SlotNumber.ZERO,
256
+ getEpochNow: ()=>EpochNumber.ZERO,
257
+ getTargetEpoch: ()=>EpochNumber.ZERO,
181
258
  getEpochAndSlotNow: ()=>({
182
259
  epoch: EpochNumber.ZERO,
183
260
  slot: SlotNumber.ZERO,
@@ -189,17 +266,40 @@ import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.j
189
266
  currentSlot: SlotNumber.ZERO,
190
267
  nextSlot: SlotNumber.ZERO
191
268
  }),
269
+ getTargetAndNextSlot: ()=>({
270
+ targetSlot: SlotNumber.ZERO,
271
+ nextSlot: SlotNumber.ZERO
272
+ }),
192
273
  getProposerAttesterAddressInSlot: ()=>Promise.resolve(undefined),
193
274
  getEpochAndSlotInNextL1Slot: ()=>({
194
275
  epoch: EpochNumber.ZERO,
195
276
  slot: SlotNumber.ZERO,
196
277
  ts: 0n,
197
- now: 0n
278
+ nowSeconds: 0n
279
+ }),
280
+ getTargetEpochAndSlotInNextL1Slot: ()=>({
281
+ epoch: EpochNumber.ZERO,
282
+ slot: SlotNumber.ZERO,
283
+ ts: 0n,
284
+ nowSeconds: 0n
198
285
  }),
199
286
  isInCommittee: ()=>Promise.resolve(false),
200
287
  getRegisteredValidators: ()=>Promise.resolve([]),
201
- filterInCommittee: ()=>Promise.resolve([])
288
+ filterInCommittee: ()=>Promise.resolve([]),
289
+ isEscapeHatchOpen: ()=>Promise.resolve(false),
290
+ isEscapeHatchOpenAtSlot: ()=>Promise.resolve(false),
291
+ getL1Constants: ()=>({
292
+ l1StartBlock: 0n,
293
+ l1GenesisTime: 0n,
294
+ epochDuration: 1,
295
+ slotDuration: 1,
296
+ ethereumSlotDuration: 1,
297
+ proofSubmissionEpochs: 1,
298
+ targetCommitteeSize: 48,
299
+ rollupManaLimit: Number.MAX_SAFE_INTEGER
300
+ })
202
301
  };
302
+ return cache;
203
303
  }
204
304
  /**
205
305
  * Creates a mock WorldStateSynchronizer for testing.
@@ -239,12 +339,6 @@ import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.j
239
339
  rateLimiter.getRateLimits = ()=>UNLIMITED_RATE_LIMIT_QUOTA;
240
340
  rateLimiter.allow = ()=>RateLimitStatus.Allowed;
241
341
  }
242
- /**
243
- * Display names for collector types (for output/logging only).
244
- */ export const COLLECTOR_DISPLAY_NAMES = {
245
- 'batch-requester': 'batch-requester (new)',
246
- 'send-batch-request': 'send-batch-request (old)'
247
- };
248
342
  /**
249
343
  * Benchmark timing constants.
250
344
  */ export const BENCHMARK_CONSTANTS = {
@@ -1,12 +1,10 @@
1
- import { type CollectorType, type DistributionPattern } from '../test-helpers/testbench-utils.js';
2
- export type { DistributionPattern, CollectorType } from '../test-helpers/testbench-utils.js';
3
- export { COLLECTOR_DISPLAY_NAMES } from '../test-helpers/testbench-utils.js';
1
+ import { type DistributionPattern } from '../test-helpers/index.js';
2
+ export type { DistributionPattern } from '../test-helpers/testbench-utils.js';
4
3
  export interface BenchReqRespCommand {
5
4
  type: 'BENCH_REQRESP';
6
5
  txCount: number;
7
6
  peerCount: number;
8
7
  distribution: DistributionPattern;
9
- collectorType: CollectorType;
10
8
  timeoutMs: number;
11
9
  isAggregator: boolean;
12
10
  peerIndex: number;
@@ -25,4 +23,4 @@ export interface BenchResultMessage {
25
23
  export interface BenchReadyMessage {
26
24
  type: 'BENCH_READY';
27
25
  }
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJwX2NsaWVudF90ZXN0YmVuY2hfd29ya2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGJlbmNoL3AycF9jbGllbnRfdGVzdGJlbmNoX3dvcmtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQ0EsT0FBTyxFQUVMLEtBQUssYUFBYSxFQUNsQixLQUFLLG1CQUFtQixFQU96QixNQUFNLG9DQUFvQyxDQUFDO0FBRzVDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM3RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUU3RSxNQUFNLFdBQVcsbUJBQW1CO0lBQ2xDLElBQUksRUFBRSxlQUFlLENBQUM7SUFDdEIsT0FBTyxFQUFFLE1BQU0sQ0FBQztJQUNoQixTQUFTLEVBQUUsTUFBTSxDQUFDO0lBQ2xCLFlBQVksRUFBRSxtQkFBbUIsQ0FBQztJQUNsQyxhQUFhLEVBQUUsYUFBYSxDQUFDO0lBQzdCLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsWUFBWSxFQUFFLE9BQU8sQ0FBQztJQUN0QixTQUFTLEVBQUUsTUFBTSxDQUFDO0lBQ2xCLGVBQWUsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUN6QixZQUFZLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDdEIsV0FBVyxFQUFFLE1BQU0sQ0FBQztJQUNwQixJQUFJLEVBQUUsTUFBTSxDQUFDO0NBQ2Q7QUFFRCxNQUFNLFdBQVcsa0JBQWtCO0lBQ2pDLElBQUksRUFBRSxjQUFjLENBQUM7SUFDckIsVUFBVSxFQUFFLE1BQU0sQ0FBQztJQUNuQixZQUFZLEVBQUUsTUFBTSxDQUFDO0lBQ3JCLE9BQU8sRUFBRSxPQUFPLENBQUM7SUFDakIsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDO0NBQ2hCO0FBRUQsTUFBTSxXQUFXLGlCQUFpQjtJQUNoQyxJQUFJLEVBQUUsYUFBYSxDQUFDO0NBQ3JCIn0=
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDJwX2NsaWVudF90ZXN0YmVuY2hfd29ya2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdGJlbmNoL3AycF9jbGllbnRfdGVzdGJlbmNoX3dvcmtlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE2Q0EsT0FBTyxFQUVMLEtBQUssbUJBQW1CLEVBT3pCLE1BQU0sMEJBQTBCLENBQUM7QUFHbEMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFOUUsTUFBTSxXQUFXLG1CQUFtQjtJQUNsQyxJQUFJLEVBQUUsZUFBZSxDQUFDO0lBQ3RCLE9BQU8sRUFBRSxNQUFNLENBQUM7SUFDaEIsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUNsQixZQUFZLEVBQUUsbUJBQW1CLENBQUM7SUFDbEMsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUNsQixZQUFZLEVBQUUsT0FBTyxDQUFDO0lBQ3RCLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsZUFBZSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ3pCLFlBQVksQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUN0QixXQUFXLEVBQUUsTUFBTSxDQUFDO0lBQ3BCLElBQUksRUFBRSxNQUFNLENBQUM7Q0FDZDtBQUVELE1BQU0sV0FBVyxrQkFBa0I7SUFDakMsSUFBSSxFQUFFLGNBQWMsQ0FBQztJQUNyQixVQUFVLEVBQUUsTUFBTSxDQUFDO0lBQ25CLFlBQVksRUFBRSxNQUFNLENBQUM7SUFDckIsT0FBTyxFQUFFLE9BQU8sQ0FBQztJQUNqQixLQUFLLENBQUMsRUFBRSxNQUFNLENBQUM7Q0FDaEI7QUFFRCxNQUFNLFdBQVcsaUJBQWlCO0lBQ2hDLElBQUksRUFBRSxhQUFhLENBQUM7Q0FDckIifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"p2p_client_testbench_worker.d.ts","sourceRoot":"","sources":["../../src/testbench/p2p_client_testbench_worker.ts"],"names":[],"mappings":"AA+CA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,mBAAmB,EAOzB,MAAM,oCAAoC,CAAC;AAG5C,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,mBAAmB,CAAC;IAClC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;CACrB"}
1
+ {"version":3,"file":"p2p_client_testbench_worker.d.ts","sourceRoot":"","sources":["../../src/testbench/p2p_client_testbench_worker.ts"],"names":[],"mappings":"AA6CA,OAAO,EAEL,KAAK,mBAAmB,EAOzB,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAE9E,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,mBAAmB,CAAC;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;CACrB"}
@@ -13,7 +13,8 @@ import { DateProvider, Timer } from '@aztec/foundation/timer';
13
13
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
14
14
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
15
15
  import { protocolContractsHash } from '@aztec/protocol-contracts';
16
- import { P2PClientType, P2PMessage } from '@aztec/stdlib/p2p';
16
+ import { GasFees } from '@aztec/stdlib/gas';
17
+ import { P2PMessage } from '@aztec/stdlib/p2p';
17
18
  import { ChonkProof } from '@aztec/stdlib/proofs';
18
19
  import { makeAztecAddress, makeBlockHeader, makeBlockProposal, mockTx } from '@aztec/stdlib/testing';
19
20
  import { Tx } from '@aztec/stdlib/tx';
@@ -21,18 +22,20 @@ import { getTelemetryClient } from '@aztec/telemetry-client';
21
22
  import { TopicValidatorResult } from '@libp2p/interface';
22
23
  import { peerIdFromString } from '@libp2p/peer-id';
23
24
  import { createP2PClient } from '../index.js';
24
- import { LibP2PService } from '../services/libp2p/libp2p_service.js';
25
+ import { LibP2PService } from '../services/index.js';
26
+ import { BatchTxRequester } from '../services/reqresp/batch-tx-requester/batch_tx_requester.js';
25
27
  import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
26
- import { BatchTxRequesterCollector, SendBatchRequestCollector } from '../services/tx_collection/proposal_tx_collector.js';
27
- import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
28
- import { BENCHMARK_CONSTANTS, InMemoryAttestationPool, InMemoryTxPool, UNLIMITED_RATE_LIMIT_QUOTA, createMockEpochCache, createMockWorldStateSynchronizer, filterTxsByDistribution } from '../test-helpers/testbench-utils.js';
29
- export { COLLECTOR_DISPLAY_NAMES } from '../test-helpers/testbench-utils.js';
28
+ import { RequestTracker } from '../services/tx_collection/request_tracker.js';
29
+ import { AlwaysTrueCircuitVerifier } from '../test-helpers/index.js';
30
+ import { BENCHMARK_CONSTANTS, InMemoryAttestationPool, InMemoryTxPool, UNLIMITED_RATE_LIMIT_QUOTA, createMockEpochCache, createMockWorldStateSynchronizer, filterTxsByDistribution } from '../test-helpers/index.js';
30
31
  const txCache = new Map();
31
32
  class TestLibP2PService extends LibP2PService {
32
33
  disableTxValidation;
33
34
  gossipMessageCount = 0;
34
- constructor(clientType, config, node, peerDiscoveryService, reqresp, peerManager, mempools, archiver, epochCache, proofVerifier, worldStateSynchronizer, telemetry, logger = createLogger('p2p:test:libp2p_service'), disableTxValidation = true){
35
- super(clientType, config, node, peerDiscoveryService, reqresp, peerManager, mempools, archiver, epochCache, proofVerifier, worldStateSynchronizer, telemetry, logger);
35
+ constructor(config, node, peerDiscoveryService, reqresp, peerManager, mempools, archiver, epochCache, proofVerifier, worldStateSynchronizer, telemetry, logger = createLogger('p2p:test:libp2p_service'), disableTxValidation = true){
36
+ super(config, node, peerDiscoveryService, reqresp, peerManager, mempools, archiver, epochCache, proofVerifier, worldStateSynchronizer, {
37
+ getCurrentMinFees: ()=>Promise.resolve(GasFees.empty())
38
+ }, telemetry, logger);
36
39
  this.disableTxValidation = disableTxValidation;
37
40
  }
38
41
  getGossipMessageCount() {
@@ -49,7 +52,7 @@ class TestLibP2PService extends LibP2PService {
49
52
  const txHash = tx.getTxHash();
50
53
  const txHashString = txHash.toString();
51
54
  this.logger.verbose(`Received tx ${txHashString} from external peer ${source.toString()}.`);
52
- await this.mempools.txPool.addTxs([
55
+ await this.mempools.txPool.addPendingTxs([
53
56
  tx
54
57
  ]);
55
58
  } else {
@@ -70,7 +73,7 @@ async function generateDeterministicTxs(txCount, seed, config) {
70
73
  if (cached.length >= txCount) {
71
74
  return cached.slice(0, txCount);
72
75
  }
73
- const includeByTimestampBase = BigInt(seed);
76
+ const expirationTimestampBase = BigInt(seed);
74
77
  for(let i = cached.length; i < txCount; i++){
75
78
  const txSeed = seed * 10000 + i;
76
79
  const tx = await mockTx(txSeed, {
@@ -86,7 +89,7 @@ async function generateDeterministicTxs(txCount, seed, config) {
86
89
  hasPublicTeardownCallRequest: false,
87
90
  publicCalldataSize: 0
88
91
  });
89
- tx.data.includeByTimestamp = includeByTimestampBase + BigInt(i);
92
+ tx.data.expirationTimestamp = expirationTimestampBase + BigInt(i);
90
93
  await tx.recomputeHash();
91
94
  cached.push(tx);
92
95
  }
@@ -110,7 +113,22 @@ function installUnlimitedRateLimits(client) {
110
113
  rateLimiter.getRateLimits = ()=>UNLIMITED_RATE_LIMIT_QUOTA;
111
114
  rateLimiter.allow = ()=>RateLimitStatus.Allowed;
112
115
  }
113
- async function runAggregatorBenchmark(client, blockProposal, collectorType, timeoutMs, pinnedPeerId, pinnedPeerIndex, logger, expectedPeerCount) {
116
+ /** Resets peer scores to prevent cross-case contamination in benchmarks. */ function resetPeerScores(client) {
117
+ const peerManager = client.p2pService.peerManager;
118
+ const peerScoring = peerManager?.peerScoring;
119
+ if (peerScoring?.resetAllScores) {
120
+ peerScoring.resetAllScores();
121
+ }
122
+ }
123
+ /** Returns the number of connected peers for connectivity checks. */ function getConnectedPeerCount(client) {
124
+ const p2pService = client.p2pService;
125
+ const connectionSampler = p2pService?.reqresp?.getConnectionSampler?.();
126
+ if (connectionSampler?.getPeerListSortedByConnectionCountAsc) {
127
+ return connectionSampler.getPeerListSortedByConnectionCountAsc().length;
128
+ }
129
+ return 0;
130
+ }
131
+ async function runAggregatorBenchmark(client, blockProposal, timeoutMs, pinnedPeerId, pinnedPeerIndex, logger, expectedPeerCount) {
114
132
  let timer = new Timer();
115
133
  try {
116
134
  installUnlimitedRateLimits(client);
@@ -144,27 +162,16 @@ async function runAggregatorBenchmark(client, blockProposal, collectorType, time
144
162
  }
145
163
  }
146
164
  const noopTxValidator = {
147
- validateRequestedTx: (_tx)=>Promise.resolve({
165
+ validateTx: (_tx)=>Promise.resolve({
148
166
  result: 'valid'
149
- }),
150
- validateRequestedTxs: (txs)=>Promise.resolve(txs.map(()=>({
151
- result: 'valid'
152
- })))
167
+ })
153
168
  };
154
169
  timer = new Timer();
155
- if (collectorType === 'batch-requester') {
156
- const collector = new BatchTxRequesterCollector(batchTxRequesterService, logger, new DateProvider(), noopTxValidator);
157
- const fetchedTxs = await collector.collectTxs(txHashes, blockProposal, pinnedPeer, timeoutMs);
158
- const durationMs = timer.ms();
159
- return {
160
- type: 'BENCH_RESULT',
161
- durationMs,
162
- fetchedCount: fetchedTxs.length,
163
- success: fetchedTxs.length === txHashes.length
164
- };
165
- }
166
- const collector = new SendBatchRequestCollector(batchTxRequesterService, BENCHMARK_CONSTANTS.FIXED_MAX_PEERS, BENCHMARK_CONSTANTS.FIXED_MAX_RETRY_ATTEMPTS);
167
- const fetchedTxs = await collector.collectTxs(txHashes, blockProposal, pinnedPeer, timeoutMs);
170
+ const tracker = RequestTracker.create(txHashes, new Date(Date.now() + timeoutMs));
171
+ const batchRequester = new BatchTxRequester(tracker, blockProposal, pinnedPeer, batchTxRequesterService, logger, new DateProvider(), {
172
+ txValidator: noopTxValidator
173
+ });
174
+ const fetchedTxs = await BatchTxRequester.collectAllTxs(batchRequester.run());
168
175
  const durationMs = timer.ms();
169
176
  return {
170
177
  type: 'BENCH_RESULT',
@@ -188,6 +195,35 @@ let workerAttestationPool = null;
188
195
  let workerConfig = null;
189
196
  let workerLogger = null;
190
197
  let kvStore = null;
198
+ async function stopWorker() {
199
+ try {
200
+ if (workerClient) {
201
+ await workerClient.stop();
202
+ workerClient = null;
203
+ }
204
+ } catch (e) {
205
+ workerLogger?.error('Error stopping worker client', e);
206
+ }
207
+ try {
208
+ if (kvStore?.close) {
209
+ await kvStore.close();
210
+ kvStore = null;
211
+ }
212
+ } catch (e) {
213
+ workerLogger?.error('Error closing kv store', e);
214
+ }
215
+ }
216
+ function gracefulExit(code = 0) {
217
+ try {
218
+ if (process.connected) {
219
+ process.disconnect();
220
+ }
221
+ } catch {
222
+ // IPC channel already closed
223
+ }
224
+ // Safety fallback if lingering handles prevent the event loop from draining
225
+ setTimeout(()=>process.exit(code), 5000).unref();
226
+ }
191
227
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
192
228
  process.on('message', async (msg)=>{
193
229
  const { type, config: rawConfig, clientIndex } = msg;
@@ -195,7 +231,8 @@ process.on('message', async (msg)=>{
195
231
  if (type === 'START') {
196
232
  const config = {
197
233
  ...rawConfig,
198
- peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined
234
+ peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined,
235
+ priceBumpPercentage: 10n
199
236
  };
200
237
  workerConfig = config;
201
238
  workerTxPool = new InMemoryTxPool();
@@ -214,8 +251,10 @@ process.on('message', async (msg)=>{
214
251
  store: kvStore,
215
252
  logger: workerLogger
216
253
  };
217
- const client = await createP2PClient(P2PClientType.Full, config, l2BlockSource, proofVerifier, worldState, epochCache, 'test-p2p-bench-worker', undefined, telemetry, deps);
218
- const testService = new TestLibP2PService(P2PClientType.Full, config, client.p2pService.node, client.p2pService.peerDiscoveryService, client.p2pService.reqresp, client.p2pService.peerManager, client.p2pService.mempools, client.p2pService.archiver, epochCache, proofVerifier, worldState, telemetry, workerLogger, true);
254
+ const client = await createP2PClient(config, l2BlockSource, proofVerifier, worldState, epochCache, {
255
+ getCurrentMinFees: ()=>Promise.resolve(GasFees.empty())
256
+ }, 'test-p2p-bench-worker', undefined, telemetry, deps, await l2BlockSource.getInitialHeader().hash());
257
+ const testService = new TestLibP2PService(config, client.p2pService.node, client.p2pService.peerDiscoveryService, client.p2pService.reqresp, client.p2pService.peerManager, client.p2pService.mempools, client.p2pService.archiver, epochCache, proofVerifier, worldState, telemetry, workerLogger, true);
219
258
  client.p2pService = testService;
220
259
  await client.start();
221
260
  for(let i = 0; i < 100; i++){
@@ -237,13 +276,8 @@ process.on('message', async (msg)=>{
237
276
  const cmd = msg;
238
277
  switch(cmd.type){
239
278
  case 'STOP':
240
- if (workerClient) {
241
- await workerClient.stop();
242
- }
243
- if (kvStore?.close) {
244
- await kvStore.close();
245
- }
246
- process.exit(0);
279
+ await stopWorker();
280
+ gracefulExit(0);
247
281
  break;
248
282
  case 'SEND_TX':
249
283
  if (workerClient) {
@@ -253,6 +287,12 @@ process.on('message', async (msg)=>{
253
287
  });
254
288
  }
255
289
  break;
290
+ case 'GET_PEER_COUNT':
291
+ process.send({
292
+ type: 'PEER_COUNT',
293
+ count: workerClient ? getConnectedPeerCount(workerClient) : 0
294
+ });
295
+ break;
256
296
  case 'BENCH_REQRESP':
257
297
  {
258
298
  const benchCmd = cmd;
@@ -269,16 +309,17 @@ process.on('message', async (msg)=>{
269
309
  // Reset state before each benchmark run to avoid cross-run contamination
270
310
  workerTxPool.resetState();
271
311
  workerAttestationPool.resetState();
312
+ resetPeerScores(workerClient);
272
313
  installUnlimitedRateLimits(workerClient);
273
314
  const allTxs = await generateDeterministicTxs(benchCmd.txCount, benchCmd.seed, workerConfig);
274
315
  const txHashes = allTxs.map((tx)=>tx.getTxHash());
275
316
  const blockProposal = await createBlockProposal(benchCmd.blockNumber, txHashes, benchCmd.seed);
276
- await workerAttestationPool.addBlockProposal(blockProposal);
317
+ await workerAttestationPool.tryAddBlockProposal(blockProposal);
277
318
  workerLogger.debug(`[BENCH] Added block proposal with archive ${blockProposal.archive.toString().slice(0, 10)}...`);
278
319
  if (benchCmd.isAggregator) {
279
320
  workerTxPool.clearTxs();
280
- workerLogger.info(`[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, collector=${benchCmd.collectorType}, distribution=${benchCmd.distribution}`);
281
- const result = await runAggregatorBenchmark(workerClient, blockProposal, benchCmd.collectorType, benchCmd.timeoutMs, benchCmd.pinnedPeerId, benchCmd.pinnedPeerIndex, workerLogger, benchCmd.peerCount);
321
+ workerLogger.info(`[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, distribution=${benchCmd.distribution}`);
322
+ const result = await runAggregatorBenchmark(workerClient, blockProposal, benchCmd.timeoutMs, benchCmd.pinnedPeerId, benchCmd.pinnedPeerIndex, workerLogger, benchCmd.peerCount);
282
323
  process.send(result);
283
324
  } else {
284
325
  const myTxs = filterTxsByDistribution(allTxs, benchCmd.peerIndex, benchCmd.peerCount, benchCmd.distribution, benchCmd.pinnedPeerIndex);
@@ -292,10 +333,15 @@ process.on('message', async (msg)=>{
292
333
  }
293
334
  }
294
335
  } catch (err) {
295
- process.send({
296
- type: 'ERROR',
297
- error: err.message
298
- });
299
- process.exit(1);
336
+ try {
337
+ process.send({
338
+ type: 'ERROR',
339
+ error: err.message
340
+ });
341
+ } catch {
342
+ // IPC channel may be closed
343
+ }
344
+ await stopWorker();
345
+ gracefulExit(1);
300
346
  }
301
347
  });