@aztec/p2p 0.0.1-commit.a072138 → 0.0.1-commit.a4600f49

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