@aztec/p2p 0.0.1-commit.6d63667d → 0.0.1-commit.7035c9bd6

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 (393) hide show
  1. package/README.md +129 -3
  2. package/dest/client/factory.d.ts +11 -11
  3. package/dest/client/factory.d.ts.map +1 -1
  4. package/dest/client/factory.js +52 -15
  5. package/dest/client/interface.d.ts +46 -33
  6. package/dest/client/interface.d.ts.map +1 -1
  7. package/dest/client/p2p_client.d.ts +39 -51
  8. package/dest/client/p2p_client.d.ts.map +1 -1
  9. package/dest/client/p2p_client.js +157 -224
  10. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +9 -9
  11. package/dest/config.d.ts +54 -17
  12. package/dest/config.d.ts.map +1 -1
  13. package/dest/config.js +102 -38
  14. package/dest/errors/tx-pool.error.d.ts +8 -0
  15. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  16. package/dest/errors/tx-pool.error.js +9 -0
  17. package/dest/index.d.ts +2 -1
  18. package/dest/index.d.ts.map +1 -1
  19. package/dest/index.js +1 -0
  20. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +104 -88
  21. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  22. package/dest/mem_pools/attestation_pool/attestation_pool.js +445 -3
  23. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  24. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +353 -87
  26. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  27. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  28. package/dest/mem_pools/attestation_pool/index.js +1 -2
  29. package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
  30. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  31. package/dest/mem_pools/attestation_pool/mocks.js +2 -2
  32. package/dest/mem_pools/index.d.ts +3 -2
  33. package/dest/mem_pools/index.d.ts.map +1 -1
  34. package/dest/mem_pools/index.js +1 -1
  35. package/dest/mem_pools/instrumentation.d.ts +4 -2
  36. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  37. package/dest/mem_pools/instrumentation.js +16 -14
  38. package/dest/mem_pools/interface.d.ts +5 -5
  39. package/dest/mem_pools/interface.d.ts.map +1 -1
  40. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  41. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  42. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +2 -1
  43. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +3 -3
  44. package/dest/mem_pools/tx_pool/priority.d.ts +2 -2
  45. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  46. package/dest/mem_pools/tx_pool/priority.js +4 -4
  47. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  48. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  49. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +3 -1
  50. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  51. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  52. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  53. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +3 -3
  54. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -1
  55. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +18 -9
  56. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  57. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  58. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +7 -3
  59. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +3 -3
  60. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
  61. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +12 -4
  62. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -2
  63. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  64. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -1
  65. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +54 -5
  66. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
  67. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +8 -0
  68. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +7 -5
  69. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +7 -5
  70. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +2 -2
  71. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
  72. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +14 -6
  73. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +4 -4
  74. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
  75. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +16 -4
  76. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +3 -3
  77. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
  78. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +3 -3
  79. package/dest/mem_pools/tx_pool_v2/index.d.ts +3 -2
  80. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
  81. package/dest/mem_pools/tx_pool_v2/index.js +2 -1
  82. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  83. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  84. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  85. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +30 -12
  86. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  87. package/dest/mem_pools/tx_pool_v2/interfaces.js +5 -1
  88. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +78 -15
  89. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  90. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +139 -18
  91. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +12 -3
  92. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  93. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +50 -45
  94. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +12 -5
  95. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  96. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +17 -6
  97. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +14 -5
  98. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  99. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +364 -189
  100. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +1 -1
  101. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  102. package/dest/msg_validators/attestation_validator/attestation_validator.js +5 -4
  103. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +3 -3
  104. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  105. package/dest/msg_validators/clock_tolerance.d.ts +1 -1
  106. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  107. package/dest/msg_validators/clock_tolerance.js +4 -3
  108. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -4
  109. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  110. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  111. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -4
  112. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  113. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  114. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -8
  115. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  116. package/dest/msg_validators/proposal_validator/proposal_validator.js +53 -41
  117. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  118. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  119. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
  120. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  121. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  122. package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
  123. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  124. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  125. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  126. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +16 -3
  127. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  128. package/dest/msg_validators/tx_validator/block_header_validator.js +1 -1
  129. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +13 -3
  130. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  131. package/dest/msg_validators/tx_validator/double_spend_validator.js +4 -4
  132. package/dest/msg_validators/tx_validator/factory.d.ts +133 -6
  133. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  134. package/dest/msg_validators/tx_validator/factory.js +240 -59
  135. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  136. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  137. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  138. package/dest/msg_validators/tx_validator/gas_validator.d.ts +67 -3
  139. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  140. package/dest/msg_validators/tx_validator/gas_validator.js +104 -37
  141. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  142. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  143. package/dest/msg_validators/tx_validator/index.js +2 -0
  144. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  145. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  146. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  147. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  148. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  149. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  150. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  151. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  152. package/dest/msg_validators/tx_validator/phases_validator.js +71 -23
  153. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +20 -4
  154. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  155. package/dest/msg_validators/tx_validator/timestamp_validator.js +6 -6
  156. package/dest/services/dummy_service.d.ts +13 -5
  157. package/dest/services/dummy_service.d.ts.map +1 -1
  158. package/dest/services/dummy_service.js +10 -4
  159. package/dest/services/encoding.d.ts +7 -3
  160. package/dest/services/encoding.d.ts.map +1 -1
  161. package/dest/services/encoding.js +18 -11
  162. package/dest/services/gossipsub/index.d.ts +3 -0
  163. package/dest/services/gossipsub/index.d.ts.map +1 -0
  164. package/dest/services/gossipsub/index.js +2 -0
  165. package/dest/services/gossipsub/scoring.d.ts +21 -3
  166. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  167. package/dest/services/gossipsub/scoring.js +24 -7
  168. package/dest/services/gossipsub/topic_score_params.d.ts +173 -0
  169. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  170. package/dest/services/gossipsub/topic_score_params.js +346 -0
  171. package/dest/services/libp2p/libp2p_service.d.ts +95 -50
  172. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  173. package/dest/services/libp2p/libp2p_service.js +464 -364
  174. package/dest/services/peer-manager/metrics.d.ts +3 -1
  175. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  176. package/dest/services/peer-manager/metrics.js +6 -0
  177. package/dest/services/peer-manager/peer_manager.d.ts +1 -1
  178. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  179. package/dest/services/peer-manager/peer_manager.js +4 -3
  180. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  181. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  182. package/dest/services/peer-manager/peer_scoring.js +25 -2
  183. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +12 -8
  184. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  185. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +80 -106
  186. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +4 -7
  187. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  188. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +11 -13
  189. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  190. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +31 -46
  191. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
  192. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  193. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
  194. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +2 -2
  195. package/dest/services/reqresp/interface.d.ts +10 -1
  196. package/dest/services/reqresp/interface.d.ts.map +1 -1
  197. package/dest/services/reqresp/interface.js +15 -1
  198. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +4 -3
  199. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  200. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +7 -1
  201. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  202. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +15 -0
  203. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  204. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  205. package/dest/services/reqresp/protocols/tx.js +20 -0
  206. package/dest/services/reqresp/reqresp.d.ts +1 -1
  207. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  208. package/dest/services/reqresp/reqresp.js +30 -14
  209. package/dest/services/service.d.ts +39 -3
  210. package/dest/services/service.d.ts.map +1 -1
  211. package/dest/services/tx_collection/config.d.ts +19 -1
  212. package/dest/services/tx_collection/config.d.ts.map +1 -1
  213. package/dest/services/tx_collection/config.js +46 -0
  214. package/dest/services/tx_collection/fast_tx_collection.d.ts +3 -4
  215. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  216. package/dest/services/tx_collection/fast_tx_collection.js +80 -76
  217. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  218. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  219. package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
  220. package/dest/services/tx_collection/file_store_tx_source.d.ts +37 -0
  221. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  222. package/dest/services/tx_collection/file_store_tx_source.js +90 -0
  223. package/dest/services/tx_collection/index.d.ts +2 -1
  224. package/dest/services/tx_collection/index.d.ts.map +1 -1
  225. package/dest/services/tx_collection/index.js +1 -0
  226. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  227. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  228. package/dest/services/tx_collection/instrumentation.js +2 -1
  229. package/dest/services/tx_collection/proposal_tx_collector.d.ts +7 -7
  230. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
  231. package/dest/services/tx_collection/proposal_tx_collector.js +5 -4
  232. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  233. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  234. package/dest/services/tx_collection/request_tracker.js +84 -0
  235. package/dest/services/tx_collection/slow_tx_collection.d.ts +7 -3
  236. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  237. package/dest/services/tx_collection/slow_tx_collection.js +60 -26
  238. package/dest/services/tx_collection/tx_collection.d.ts +23 -13
  239. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  240. package/dest/services/tx_collection/tx_collection.js +75 -3
  241. package/dest/services/tx_collection/tx_collection_sink.d.ts +18 -8
  242. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  243. package/dest/services/tx_collection/tx_collection_sink.js +26 -29
  244. package/dest/services/tx_collection/tx_source.d.ts +8 -3
  245. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  246. package/dest/services/tx_collection/tx_source.js +19 -2
  247. package/dest/services/tx_file_store/config.d.ts +1 -3
  248. package/dest/services/tx_file_store/config.d.ts.map +1 -1
  249. package/dest/services/tx_file_store/config.js +0 -4
  250. package/dest/services/tx_file_store/tx_file_store.d.ts +4 -3
  251. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  252. package/dest/services/tx_file_store/tx_file_store.js +9 -6
  253. package/dest/services/tx_provider.d.ts +4 -4
  254. package/dest/services/tx_provider.d.ts.map +1 -1
  255. package/dest/services/tx_provider.js +9 -8
  256. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  257. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  258. package/dest/test-helpers/make-test-p2p-clients.js +1 -2
  259. package/dest/test-helpers/mock-pubsub.d.ts +30 -4
  260. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  261. package/dest/test-helpers/mock-pubsub.js +105 -4
  262. package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
  263. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  264. package/dest/test-helpers/reqresp-nodes.js +4 -3
  265. package/dest/test-helpers/testbench-utils.d.ts +43 -38
  266. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  267. package/dest/test-helpers/testbench-utils.js +149 -61
  268. package/dest/testbench/p2p_client_testbench_worker.d.ts +2 -2
  269. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  270. package/dest/testbench/p2p_client_testbench_worker.js +19 -17
  271. package/dest/testbench/worker_client_manager.d.ts +3 -1
  272. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  273. package/dest/testbench/worker_client_manager.js +6 -2
  274. package/dest/util.d.ts +3 -3
  275. package/dest/util.d.ts.map +1 -1
  276. package/package.json +14 -14
  277. package/src/client/factory.ts +99 -28
  278. package/src/client/interface.ts +56 -34
  279. package/src/client/p2p_client.ts +190 -269
  280. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +22 -14
  281. package/src/config.ts +158 -44
  282. package/src/errors/tx-pool.error.ts +12 -0
  283. package/src/index.ts +1 -0
  284. package/src/mem_pools/attestation_pool/attestation_pool.ts +497 -91
  285. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +442 -102
  286. package/src/mem_pools/attestation_pool/index.ts +9 -2
  287. package/src/mem_pools/attestation_pool/mocks.ts +2 -1
  288. package/src/mem_pools/index.ts +4 -1
  289. package/src/mem_pools/instrumentation.ts +17 -13
  290. package/src/mem_pools/interface.ts +4 -4
  291. package/src/mem_pools/tx_pool/README.md +1 -1
  292. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  293. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +3 -3
  294. package/src/mem_pools/tx_pool/priority.ts +4 -4
  295. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +3 -1
  296. package/src/mem_pools/tx_pool_v2/README.md +85 -11
  297. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  298. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +21 -8
  299. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +7 -3
  300. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +18 -4
  301. package/src/mem_pools/tx_pool_v2/eviction/index.ts +4 -0
  302. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +59 -4
  303. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +5 -5
  304. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +5 -5
  305. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +14 -9
  306. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +33 -6
  307. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +4 -3
  308. package/src/mem_pools/tx_pool_v2/index.ts +2 -1
  309. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  310. package/src/mem_pools/tx_pool_v2/interfaces.ts +32 -12
  311. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +202 -26
  312. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +58 -45
  313. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +34 -8
  314. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +410 -187
  315. package/src/msg_validators/attestation_validator/README.md +49 -0
  316. package/src/msg_validators/attestation_validator/attestation_validator.ts +5 -4
  317. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +2 -2
  318. package/src/msg_validators/clock_tolerance.ts +4 -3
  319. package/src/msg_validators/proposal_validator/README.md +123 -0
  320. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +14 -4
  321. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +20 -7
  322. package/src/msg_validators/proposal_validator/proposal_validator.ts +69 -45
  323. package/src/msg_validators/tx_validator/README.md +119 -0
  324. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +5 -5
  325. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  326. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  327. package/src/msg_validators/tx_validator/block_header_validator.ts +15 -3
  328. package/src/msg_validators/tx_validator/double_spend_validator.ts +11 -6
  329. package/src/msg_validators/tx_validator/factory.ts +387 -78
  330. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  331. package/src/msg_validators/tx_validator/gas_validator.ts +123 -27
  332. package/src/msg_validators/tx_validator/index.ts +2 -0
  333. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  334. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  335. package/src/msg_validators/tx_validator/phases_validator.ts +81 -26
  336. package/src/msg_validators/tx_validator/timestamp_validator.ts +23 -18
  337. package/src/services/dummy_service.ts +18 -6
  338. package/src/services/encoding.ts +18 -10
  339. package/src/services/gossipsub/README.md +641 -0
  340. package/src/services/gossipsub/index.ts +2 -0
  341. package/src/services/gossipsub/scoring.ts +29 -5
  342. package/src/services/gossipsub/topic_score_params.ts +487 -0
  343. package/src/services/libp2p/libp2p_service.ts +483 -392
  344. package/src/services/peer-manager/metrics.ts +7 -0
  345. package/src/services/peer-manager/peer_manager.ts +5 -3
  346. package/src/services/peer-manager/peer_scoring.ts +25 -0
  347. package/src/services/reqresp/README.md +229 -0
  348. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  349. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +76 -112
  350. package/src/services/reqresp/batch-tx-requester/interface.ts +3 -6
  351. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +30 -71
  352. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  353. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +2 -2
  354. package/src/services/reqresp/interface.ts +26 -1
  355. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +4 -3
  356. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +17 -0
  357. package/src/services/reqresp/protocols/tx.ts +22 -0
  358. package/src/services/reqresp/reqresp.ts +35 -15
  359. package/src/services/service.ts +51 -2
  360. package/src/services/tx_collection/config.ts +68 -0
  361. package/src/services/tx_collection/fast_tx_collection.ts +83 -76
  362. package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
  363. package/src/services/tx_collection/file_store_tx_source.ts +117 -0
  364. package/src/services/tx_collection/index.ts +1 -0
  365. package/src/services/tx_collection/instrumentation.ts +7 -1
  366. package/src/services/tx_collection/proposal_tx_collector.ts +9 -13
  367. package/src/services/tx_collection/request_tracker.ts +127 -0
  368. package/src/services/tx_collection/slow_tx_collection.ts +66 -33
  369. package/src/services/tx_collection/tx_collection.ts +114 -19
  370. package/src/services/tx_collection/tx_collection_sink.ts +30 -34
  371. package/src/services/tx_collection/tx_source.ts +22 -3
  372. package/src/services/tx_file_store/config.ts +0 -6
  373. package/src/services/tx_file_store/tx_file_store.ts +10 -8
  374. package/src/services/tx_provider.ts +10 -9
  375. package/src/test-helpers/make-test-p2p-clients.ts +4 -6
  376. package/src/test-helpers/mock-pubsub.ts +146 -9
  377. package/src/test-helpers/reqresp-nodes.ts +5 -7
  378. package/src/test-helpers/testbench-utils.ts +156 -74
  379. package/src/testbench/p2p_client_testbench_worker.ts +27 -25
  380. package/src/testbench/worker_client_manager.ts +13 -5
  381. package/src/util.ts +8 -2
  382. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  383. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  384. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  385. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  386. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  387. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  388. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  389. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  390. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  391. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  392. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  393. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
@@ -6,6 +6,7 @@ export declare class PeerManagerMetrics {
6
6
  private sentGoodbyes;
7
7
  private receivedGoodbyes;
8
8
  private peerCount;
9
+ private healthyPeerCount;
9
10
  private lowScoreDisconnects;
10
11
  private peerConnectionDuration;
11
12
  private peerConnectedAt;
@@ -14,8 +15,9 @@ export declare class PeerManagerMetrics {
14
15
  recordGoodbyeSent(reason: GoodByeReason): void;
15
16
  recordGoodbyeReceived(reason: GoodByeReason): void;
16
17
  recordPeerCount(count: number): void;
18
+ recordHealthyPeerCount(count: number): void;
17
19
  recordLowScoreDisconnect(scoreState: 'Banned' | 'Disconnect'): void;
18
20
  peerConnected(id: PeerId): void;
19
21
  peerDisconnected(id: PeerId): void;
20
22
  }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3BlZXItbWFuYWdlci9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLTCxLQUFLLGVBQWUsRUFDcEIsS0FBSyxNQUFNLEVBSVosTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsYUFBYSxFQUF1QixNQUFNLCtCQUErQixDQUFDO0FBRW5GLHFCQUFhLGtCQUFrQjthQVlYLGVBQWUsRUFBRSxlQUFlO0lBWGxELE9BQU8sQ0FBQyxZQUFZLENBQWdCO0lBQ3BDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBZ0I7SUFDeEMsT0FBTyxDQUFDLFNBQVMsQ0FBUTtJQUN6QixPQUFPLENBQUMsbUJBQW1CLENBQWdCO0lBQzNDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBWTtJQUUxQyxPQUFPLENBQUMsZUFBZSxDQUFrRDtJQUV6RSxTQUFnQixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBRS9CLFlBQ2tCLGVBQWUsR0FBRSxlQUFzQyxFQUN2RSxJQUFJLFNBQWdCLEVBMEJyQjtJQUVNLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxhQUFhLFFBRTdDO0lBRU0scUJBQXFCLENBQUMsTUFBTSxFQUFFLGFBQWEsUUFFakQ7SUFFTSxlQUFlLENBQUMsS0FBSyxFQUFFLE1BQU0sUUFFbkM7SUFFTSx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsUUFBUSxHQUFHLFlBQVksUUFFbEU7SUFFTSxhQUFhLENBQUMsRUFBRSxFQUFFLE1BQU0sUUFFOUI7SUFFTSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsTUFBTSxRQUtqQztDQUNGIn0=
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3BlZXItbWFuYWdlci9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLTCxLQUFLLGVBQWUsRUFDcEIsS0FBSyxNQUFNLEVBSVosTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsYUFBYSxFQUF1QixNQUFNLCtCQUErQixDQUFDO0FBRW5GLHFCQUFhLGtCQUFrQjthQWFYLGVBQWUsRUFBRSxlQUFlO0lBWmxELE9BQU8sQ0FBQyxZQUFZLENBQWdCO0lBQ3BDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBZ0I7SUFDeEMsT0FBTyxDQUFDLFNBQVMsQ0FBUTtJQUN6QixPQUFPLENBQUMsZ0JBQWdCLENBQVE7SUFDaEMsT0FBTyxDQUFDLG1CQUFtQixDQUFnQjtJQUMzQyxPQUFPLENBQUMsc0JBQXNCLENBQVk7SUFFMUMsT0FBTyxDQUFDLGVBQWUsQ0FBa0Q7SUFFekUsU0FBZ0IsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUUvQixZQUNrQixlQUFlLEdBQUUsZUFBc0MsRUFDdkUsSUFBSSxTQUFnQixFQTJCckI7SUFFTSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsYUFBYSxRQUU3QztJQUVNLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxhQUFhLFFBRWpEO0lBRU0sZUFBZSxDQUFDLEtBQUssRUFBRSxNQUFNLFFBRW5DO0lBRU0sc0JBQXNCLENBQUMsS0FBSyxFQUFFLE1BQU0sUUFFMUM7SUFFTSx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsUUFBUSxHQUFHLFlBQVksUUFFbEU7SUFFTSxhQUFhLENBQUMsRUFBRSxFQUFFLE1BQU0sUUFFOUI7SUFFTSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsTUFBTSxRQU1qQztDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/services/peer-manager/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,MAAM,EAIZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAuB,MAAM,+BAA+B,CAAC;AAEnF,qBAAa,kBAAkB;aAYX,eAAe,EAAE,eAAe;IAXlD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,sBAAsB,CAAY;IAE1C,OAAO,CAAC,eAAe,CAAkD;IAEzE,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,YACkB,eAAe,GAAE,eAAsC,EACvE,IAAI,SAAgB,EA0BrB;IAEM,iBAAiB,CAAC,MAAM,EAAE,aAAa,QAE7C;IAEM,qBAAqB,CAAC,MAAM,EAAE,aAAa,QAEjD;IAEM,eAAe,CAAC,KAAK,EAAE,MAAM,QAEnC;IAEM,wBAAwB,CAAC,UAAU,EAAE,QAAQ,GAAG,YAAY,QAElE;IAEM,aAAa,CAAC,EAAE,EAAE,MAAM,QAE9B;IAEM,gBAAgB,CAAC,EAAE,EAAE,MAAM,QAKjC;CACF"}
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/services/peer-manager/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,MAAM,EAIZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAuB,MAAM,+BAA+B,CAAC;AAEnF,qBAAa,kBAAkB;aAaX,eAAe,EAAE,eAAe;IAZlD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,sBAAsB,CAAY;IAE1C,OAAO,CAAC,eAAe,CAAkD;IAEzE,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,YACkB,eAAe,GAAE,eAAsC,EACvE,IAAI,SAAgB,EA2BrB;IAEM,iBAAiB,CAAC,MAAM,EAAE,aAAa,QAE7C;IAEM,qBAAqB,CAAC,MAAM,EAAE,aAAa,QAEjD;IAEM,eAAe,CAAC,KAAK,EAAE,MAAM,QAEnC;IAEM,sBAAsB,CAAC,KAAK,EAAE,MAAM,QAE1C;IAEM,wBAAwB,CAAC,UAAU,EAAE,QAAQ,GAAG,YAAY,QAElE;IAEM,aAAa,CAAC,EAAE,EAAE,MAAM,QAE9B;IAEM,gBAAgB,CAAC,EAAE,EAAE,MAAM,QAMjC;CACF"}
@@ -5,6 +5,7 @@ export class PeerManagerMetrics {
5
5
  sentGoodbyes;
6
6
  receivedGoodbyes;
7
7
  peerCount;
8
+ healthyPeerCount;
8
9
  lowScoreDisconnects;
9
10
  peerConnectionDuration;
10
11
  peerConnectedAt;
@@ -27,6 +28,7 @@ export class PeerManagerMetrics {
27
28
  this.sentGoodbyes = createUpDownCounterWithDefault(meter, Metrics.PEER_MANAGER_GOODBYES_SENT, goodbyeReasonAttrs);
28
29
  this.receivedGoodbyes = createUpDownCounterWithDefault(meter, Metrics.PEER_MANAGER_GOODBYES_RECEIVED, goodbyeReasonAttrs);
29
30
  this.peerCount = meter.createGauge(Metrics.PEER_MANAGER_PEER_COUNT);
31
+ this.healthyPeerCount = meter.createGauge(Metrics.PEER_MANAGER_HEALTHY_PEER_COUNT);
30
32
  this.lowScoreDisconnects = createUpDownCounterWithDefault(meter, Metrics.PEER_MANAGER_LOW_SCORE_DISCONNECTS, {
31
33
  [Attributes.P2P_PEER_SCORE_STATE]: [
32
34
  'Banned',
@@ -48,6 +50,9 @@ export class PeerManagerMetrics {
48
50
  recordPeerCount(count) {
49
51
  this.peerCount.record(count);
50
52
  }
53
+ recordHealthyPeerCount(count) {
54
+ this.healthyPeerCount.record(count);
55
+ }
51
56
  recordLowScoreDisconnect(scoreState) {
52
57
  this.lowScoreDisconnects.add(1, {
53
58
  [Attributes.P2P_PEER_SCORE_STATE]: scoreState
@@ -60,6 +65,7 @@ export class PeerManagerMetrics {
60
65
  const connectedAt = this.peerConnectedAt.get(id.toString());
61
66
  if (connectedAt) {
62
67
  this.peerConnectionDuration.record(Date.now() - connectedAt);
68
+ this.peerConnectedAt.delete(id.toString());
63
69
  }
64
70
  }
65
71
  }
@@ -171,4 +171,4 @@ export declare class PeerManager implements PeerManagerInterface {
171
171
  handleAuthRequestFromPeer(_authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage>;
172
172
  private updateAuthenticatedPeers;
173
173
  }
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlcl9tYW5hZ2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcGVlci1tYW5hZ2VyL3BlZXJfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RixPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRS9ELE9BQU8sS0FBSyxFQUFjLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTTVELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRCxPQUFPLEVBQUUsV0FBVyxFQUFnQixNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQXVCLE1BQU0saUNBQWlDLENBQUM7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJELE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsT0FBTyxFQUFrQixLQUFLLFdBQVcsRUFBRSxNQUFNLG1C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
174
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlcl9tYW5hZ2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcGVlci1tYW5hZ2VyL3BlZXJfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RixPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRS9ELE9BQU8sS0FBSyxFQUFjLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTTVELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRCxPQUFPLEVBQUUsV0FBVyxFQUFnQixNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQXVCLE1BQU0saUNBQWlDLENBQUM7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJELE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsT0FBTyxFQUFrQixLQUFLLFdBQVcsRUFBRSxNQUFNLG1C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
@@ -1 +1 @@
1
- {"version":3,"file":"peer_manager.d.ts","sourceRoot":"","sources":["../../../src/services/peer-manager/peer_manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"peer_manager.d.ts","sourceRoot":"","sources":["../../../src/services/peer-manager/peer_manager.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@ import { PeerScoreState } from './peer_scoring.js';
17
17
  const MAX_DIAL_ATTEMPTS = 3;
18
18
  const MAX_CACHED_PEERS = 100;
19
19
  const MAX_CACHED_PEER_AGE_MS = 5 * 60 * 1000; // 5 minutes
20
- const FAILED_PEER_BAN_TIME_MS = 5 * 60 * 1000; // 5 minutes timeout after failing MAX_DIAL_ATTEMPTS
20
+ const DEFAULT_FAILED_PEER_BAN_TIME_MS = 5 * 60 * 1000; // 5 minutes timeout after failing MAX_DIAL_ATTEMPTS
21
21
  const GOODBYE_DIAL_TIMEOUT_MS = 1000;
22
22
  const FAILED_AUTH_HANDSHAKE_EXPIRY_MS = 60 * 60 * 1000; // 1 hour
23
23
  export class PeerManager {
@@ -406,7 +406,8 @@ export class PeerManager {
406
406
  cachedPeers: this.cachedPeers.size,
407
407
  ...this.peerScoring.getStats()
408
408
  });
409
- this.metrics.recordPeerCount(healthyConnections.length);
409
+ this.metrics.recordPeerCount(connections.length);
410
+ this.metrics.recordHealthyPeerCount(healthyConnections.length);
410
411
  // Exit if no peers to connect
411
412
  if (peersToConnect <= 0) {
412
413
  return;
@@ -623,7 +624,7 @@ export class PeerManager {
623
624
  // Add to timed out peers
624
625
  this.timedOutPeers.set(id, {
625
626
  peerId: id,
626
- timeoutUntilMs: this.dateProvider.now() + FAILED_PEER_BAN_TIME_MS
627
+ timeoutUntilMs: this.dateProvider.now() + (this.config.peerFailedBanTimeMs ?? DEFAULT_FAILED_PEER_BAN_TIME_MS)
627
628
  });
628
629
  }
629
630
  }
@@ -30,4 +30,4 @@ export declare class PeerScoring {
30
30
  bannedCount: number;
31
31
  };
32
32
  }
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlcl9zY29yaW5nLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcGVlci1tYW5hZ2VyL3BlZXJfc2NvcmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBR0wsS0FBSyxlQUFlLEVBSXJCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFRakQsb0JBQVksY0FBYztJQUN4QixNQUFNLElBQUE7SUFDTixVQUFVLElBQUE7SUFDVixPQUFPLElBQUE7Q0FDUjtBQU1ELHFCQUFhLFdBQVc7SUFDdEIsT0FBTyxDQUFDLE1BQU0sQ0FBb0M7SUFDbEQsT0FBTyxDQUFDLE1BQU0sQ0FBa0M7SUFDaEQsT0FBTyxDQUFDLGNBQWMsQ0FBa0M7SUFDeEQsT0FBTyxDQUFDLGFBQWEsQ0FBYTtJQUNsQyxPQUFPLENBQUMsV0FBVyxDQUFPO0lBQzFCLGFBQWEsRUFBRTtTQUFHLEdBQUcsSUFBSSxpQkFBaUIsR0FBRyxNQUFNO0tBQUUsQ0FBQztJQUV0RCxPQUFPLENBQUMsZ0JBQWdCLENBQWdCO0lBRXhDLFlBQVksTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEdBQUUsZUFBc0MsRUFnQi9FO0lBRU0sWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixVQU03RDtJQUVELFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEdBQUcsTUFBTSxDQWlCdEQ7SUFFRCxjQUFjLElBQUksSUFBSSxDQVlyQjtJQUVELFFBQVEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FFL0I7SUFFTSxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxjQUFjLENBVW5EO0lBRUQsUUFBUSxJQUFJO1FBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQztRQUFDLFlBQVksRUFBRSxNQUFNLENBQUM7UUFBQyxlQUFlLEVBQUUsTUFBTSxDQUFDO1FBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQTtLQUFFLENBNEJ0RztDQUNGIn0=
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlcl9zY29yaW5nLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcGVlci1tYW5hZ2VyL3BlZXJfc2NvcmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBR0wsS0FBSyxlQUFlLEVBSXJCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUF1QmpELG9CQUFZLGNBQWM7SUFDeEIsTUFBTSxJQUFBO0lBQ04sVUFBVSxJQUFBO0lBQ1YsT0FBTyxJQUFBO0NBQ1I7QUFnQkQscUJBQWEsV0FBVztJQUN0QixPQUFPLENBQUMsTUFBTSxDQUFvQztJQUNsRCxPQUFPLENBQUMsTUFBTSxDQUFrQztJQUNoRCxPQUFPLENBQUMsY0FBYyxDQUFrQztJQUN4RCxPQUFPLENBQUMsYUFBYSxDQUFhO0lBQ2xDLE9BQU8sQ0FBQyxXQUFXLENBQU87SUFDMUIsYUFBYSxFQUFFO1NBQUcsR0FBRyxJQUFJLGlCQUFpQixHQUFHLE1BQU07S0FBRSxDQUFDO0lBRXRELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBZ0I7SUFFeEMsWUFBWSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsR0FBRSxlQUFzQyxFQWdCL0U7SUFFTSxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsaUJBQWlCLFVBTTdEO0lBRUQsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBaUJ0RDtJQUVELGNBQWMsSUFBSSxJQUFJLENBWXJCO0lBRUQsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUUvQjtJQUVNLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLGNBQWMsQ0FVbkQ7SUFFRCxRQUFRLElBQUk7UUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDO1FBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQztRQUFDLGVBQWUsRUFBRSxNQUFNLENBQUM7UUFBQyxXQUFXLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0E0QnRHO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"peer_scoring.d.ts","sourceRoot":"","sources":["../../../src/services/peer-manager/peer_scoring.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAGL,KAAK,eAAe,EAIrB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAQjD,oBAAY,cAAc;IACxB,MAAM,IAAA;IACN,UAAU,IAAA;IACV,OAAO,IAAA;CACR;AAMD,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,WAAW,CAAO;IAC1B,aAAa,EAAE;SAAG,GAAG,IAAI,iBAAiB,GAAG,MAAM;KAAE,CAAC;IAEtD,OAAO,CAAC,gBAAgB,CAAgB;IAExC,YAAY,MAAM,EAAE,SAAS,EAAE,SAAS,GAAE,eAAsC,EAgB/E;IAEM,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,UAM7D;IAED,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAiBtD;IAED,cAAc,IAAI,IAAI,CAYrB;IAED,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE/B;IAEM,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAUnD;IAED,QAAQ,IAAI;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CA4BtG;CACF"}
1
+ {"version":3,"file":"peer_scoring.d.ts","sourceRoot":"","sources":["../../../src/services/peer-manager/peer_scoring.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAGL,KAAK,eAAe,EAIrB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAuBjD,oBAAY,cAAc;IACxB,MAAM,IAAA;IACN,UAAU,IAAA;IACV,OAAO,IAAA;CACR;AAgBD,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,aAAa,CAAa;IAClC,OAAO,CAAC,WAAW,CAAO;IAC1B,aAAa,EAAE;SAAG,GAAG,IAAI,iBAAiB,GAAG,MAAM;KAAE,CAAC;IAEtD,OAAO,CAAC,gBAAgB,CAAgB;IAExC,YAAY,MAAM,EAAE,SAAS,EAAE,SAAS,GAAE,eAAsC,EAgB/E;IAEM,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,UAM7D;IAED,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAiBtD;IAED,cAAc,IAAI,IAAI,CAYrB;IAED,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE/B;IAEM,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CAUnD;IAED,QAAQ,IAAI;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CA4BtG;CACF"}
@@ -2,7 +2,21 @@ import { median } from '@aztec/foundation/collection';
2
2
  import { createLogger } from '@aztec/foundation/log';
3
3
  import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
4
4
  import { Attributes, Metrics, createUpDownCounterWithDefault, getTelemetryClient } from '@aztec/telemetry-client';
5
- const DefaultPeerPenalties = {
5
+ /**
6
+ * Application-level peer penalties.
7
+ *
8
+ * These scores are multiplied by appSpecificWeight (10) when contributing to gossipsub score.
9
+ * The values are designed to align with gossipsub thresholds:
10
+ *
11
+ * - LowToleranceError (50): 1 error → app score -50 → gossipsub -500 → gossipThreshold
12
+ * - MidToleranceError (10): 5 errors → app score -50 → gossipsub -500 → gossipThreshold
13
+ * - HighToleranceError (2): 25 errors → app score -50 → gossipsub -500 → gossipThreshold
14
+ *
15
+ * Examples of each severity:
16
+ * - LowToleranceError: Invalid messages, deserialization errors, manipulation attempts
17
+ * - MidToleranceError: Hash mismatches, protocol violations
18
+ * - HighToleranceError: Rate limit exceeded, failed responses, transient errors
19
+ */ const DefaultPeerPenalties = {
6
20
  [PeerErrorSeverity.LowToleranceError]: 50,
7
21
  [PeerErrorSeverity.MidToleranceError]: 10,
8
22
  [PeerErrorSeverity.HighToleranceError]: 2
@@ -13,7 +27,16 @@ export var PeerScoreState = /*#__PURE__*/ function(PeerScoreState) {
13
27
  PeerScoreState[PeerScoreState["Healthy"] = 2] = "Healthy";
14
28
  return PeerScoreState;
15
29
  }({});
16
- // TODO: move into config / constants
30
+ /**
31
+ * Score thresholds for peer states.
32
+ *
33
+ * These values align with gossipsub thresholds when multiplied by appSpecificWeight (10):
34
+ * - MIN_SCORE_BEFORE_DISCONNECT (-50) × 10 = -500 = gossipThreshold
35
+ * - MIN_SCORE_BEFORE_BAN (-100) × 10 = -1000 = publishThreshold
36
+ *
37
+ * This ensures that when a peer is disconnected at the application level,
38
+ * they also stop receiving gossip, and when banned, they cannot publish.
39
+ */ // TODO: move into config / constants
17
40
  const MIN_SCORE_BEFORE_BAN = -100;
18
41
  const MIN_SCORE_BEFORE_DISCONNECT = -50;
19
42
  export class PeerScoring {
@@ -1,27 +1,26 @@
1
1
  import { type Logger } from '@aztec/foundation/log';
2
2
  import { DateProvider } from '@aztec/foundation/timer';
3
- import { Tx, TxHash } from '@aztec/stdlib/tx';
3
+ import { Tx } from '@aztec/stdlib/tx';
4
4
  import type { PeerId } from '@libp2p/interface';
5
+ import type { IRequestTracker } from '../../tx_collection/request_tracker.js';
5
6
  import { type BlockTxsSource } from '.././protocols/index.js';
6
7
  import type { BatchTxRequesterLibP2PService, BatchTxRequesterOptions } from './interface.js';
7
8
  export declare class BatchTxRequester {
9
+ private readonly requestTracker;
8
10
  private readonly blockTxsSource;
9
11
  private readonly pinnedPeer;
10
- private readonly timeoutMs;
11
12
  private readonly p2pService;
12
13
  private readonly logger;
13
- private readonly dateProvider;
14
14
  private readonly opts;
15
15
  private readonly peers;
16
16
  private readonly txsMetadata;
17
- private readonly deadline;
18
17
  private readonly smartRequesterSemaphore;
19
18
  private readonly txQueue;
20
19
  private readonly txValidator;
21
20
  private readonly smartParallelWorkerCount;
22
21
  private readonly dumbParallelWorkerCount;
23
22
  private readonly txBatchSize;
24
- constructor(missingTxs: TxHash[], blockTxsSource: BlockTxsSource, pinnedPeer: PeerId | undefined, timeoutMs: number, p2pService: BatchTxRequesterLibP2PService, logger?: Logger, dateProvider?: DateProvider, opts?: BatchTxRequesterOptions);
23
+ constructor(requestTracker: IRequestTracker, blockTxsSource: BlockTxsSource, pinnedPeer: PeerId | undefined, p2pService: BatchTxRequesterLibP2PService, logger?: Logger, dateProvider?: DateProvider, opts?: BatchTxRequesterOptions);
25
24
  run(): AsyncGenerator<Tx, Tx | undefined, unknown>;
26
25
  static collectAllTxs(generator: AsyncGenerator<Tx, Tx | undefined, unknown>): Promise<Tx[]>;
27
26
  private pinnedPeerRequester;
@@ -34,14 +33,19 @@ export declare class BatchTxRequester {
34
33
  private handleSuccessResponseFromPeer;
35
34
  private handleReceivedTxs;
36
35
  private decideIfPeerIsSmart;
37
- private isBlockResponseValid;
36
+ /**
37
+ * Handles an archive root mismatch between local state and peer response.
38
+ *
39
+ * - Response archive is Fr.ZERO (peer pruned proposal, legitimate): marks peer dumb.
40
+ * - Non-zero archive mismatch (malicious response): penalises + marks dumb.
41
+ */
42
+ private handleArchiveRootMismatch;
38
43
  private peerHasSomeTxsWeAreMissing;
39
44
  private markTxsPeerHas;
40
45
  private extractHashesPeerHasFromResponse;
41
46
  private makeRoundRobinIndexer;
42
- private fetchedAllTxs;
43
47
  private shouldStop;
44
48
  private unlockSmartRequesterSemaphores;
45
49
  private sleepClampedToDeadline;
46
50
  }
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hfdHhfcmVxdWVzdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9iYXRjaC10eC1yZXF1ZXN0ZXIvYmF0Y2hfdHhfcmVxdWVzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsWUFBWSxFQUFrQixNQUFNLHlCQUF5QixDQUFDO0FBRXZFLE9BQU8sRUFBRSxFQUFFLEVBQVcsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFdkQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFJaEQsT0FBTyxFQUFxQyxLQUFLLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBUWpHLE9BQU8sS0FBSyxFQUFFLDZCQUE2QixFQUFFLHVCQUF1QixFQUF5QixNQUFNLGdCQUFnQixDQUFDO0FBc0JwSCxxQkFBYSxnQkFBZ0I7SUFDM0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQWlCO0lBQ2hELE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFxQjtJQUNoRCxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBUztJQUNuQyxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBZ0M7SUFDM0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQVM7SUFDaEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQWU7SUFDNUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQTBCO0lBQy9DLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFrQjtJQUN4QyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBd0I7SUFDcEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQVM7SUFDbEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBYTtJQUNyRCxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBc0I7SUFDOUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQTJCO0lBQ3ZELE9BQU8sQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQVM7SUFDbEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBUztJQUNqRCxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBUztJQUVyQyxZQUNFLFVBQVUsRUFBRSxNQUFNLEVBQUUsRUFDcEIsY0FBYyxFQUFFLGNBQWMsRUFDOUIsVUFBVSxFQUFFLE1BQU0sR0FBRyxTQUFTLEVBQzlCLFNBQVMsRUFBRSxNQUFNLEVBQ2pCLFVBQVUsRUFBRSw2QkFBNkIsRUFDekMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUNmLFlBQVksQ0FBQyxFQUFFLFlBQVksRUFDM0IsSUFBSSxDQUFDLEVBQUUsdUJBQXVCLEVBbUMvQjtJQUthLEdBQUcsSUFBSSxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBNkMvRDtJQUtELE9BQW9CLGFBQWEsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQVN2RztZQVVhLG1CQUFtQjtZQWtEbkIsYUFBYTtZQXlEYixjQUFjO1lBZ0RkLGNBQWM7WUF3Q2QsZUFBZTtZQWtGZixjQUFjO0lBbUM1QixPQUFPLENBQUMsMEJBQTBCO1lBaUJwQiw2QkFBNkI7WUFZN0IsaUJBQWlCO0lBcUQvQixPQUFPLENBQUMsbUJBQW1CO0lBa0MzQixPQUFPLENBQUMsb0JBQW9CO0lBTTVCLE9BQU8sQ0FBQywwQkFBMEI7SUFLbEMsT0FBTyxDQUFDLGNBQWM7SUFNdEIsT0FBTyxDQUFDLGdDQUFnQztJQWdCeEMsT0FBTyxDQUFDLHFCQUFxQjtJQXVCN0IsT0FBTyxDQUFDLGFBQWE7SUFhckIsT0FBTyxDQUFDLFVBQVU7SUFhbEIsT0FBTyxDQUFDLDhCQUE4QjtZQVV4QixzQkFBc0I7Q0FPckMifQ==
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hfdHhfcmVxdWVzdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9iYXRjaC10eC1yZXF1ZXN0ZXIvYmF0Y2hfdHhfcmVxdWVzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdkQsT0FBTyxFQUFFLEVBQUUsRUFBbUIsTUFBTSxrQkFBa0IsQ0FBQztBQUV2RCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU5RSxPQUFPLEVBQXFDLEtBQUssY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFRakcsT0FBTyxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsdUJBQXVCLEVBQXlCLE1BQU0sZ0JBQWdCLENBQUM7QUFzQnBILHFCQUFhLGdCQUFnQjtJQUMzQixPQUFPLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBa0I7SUFDakQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQWlCO0lBQ2hELE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFxQjtJQUNoRCxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBZ0M7SUFDM0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQVM7SUFDaEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQTBCO0lBQy9DLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFrQjtJQUN4QyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBd0I7SUFDcEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBYTtJQUNyRCxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBc0I7SUFDOUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQTJCO0lBQ3ZELE9BQU8sQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQVM7SUFDbEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBUztJQUNqRCxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBUztJQUVyQyxZQUNFLGNBQWMsRUFBRSxlQUFlLEVBQy9CLGNBQWMsRUFBRSxjQUFjLEVBQzlCLFVBQVUsRUFBRSxNQUFNLEdBQUcsU0FBUyxFQUM5QixVQUFVLEVBQUUsNkJBQTZCLEVBQ3pDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFDZixZQUFZLENBQUMsRUFBRSxZQUFZLEVBQzNCLElBQUksQ0FBQyxFQUFFLHVCQUF1QixFQStCL0I7SUFLYSxHQUFHLElBQUksY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQW1DL0Q7SUFLRCxPQUFvQixhQUFhLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FTdkc7WUFVYSxtQkFBbUI7WUFrRG5CLGFBQWE7WUFrRGIsY0FBYztZQWdEZCxjQUFjO1lBK0JkLGVBQWU7WUE0RWYsY0FBYztJQW1DNUIsT0FBTyxDQUFDLDBCQUEwQjtZQTBCcEIsNkJBQTZCO1lBWTdCLGlCQUFpQjtJQXFEL0IsT0FBTyxDQUFDLG1CQUFtQjtJQStCM0I7Ozs7O09BS0c7SUFDSCxPQUFPLENBQUMseUJBQXlCO0lBU2pDLE9BQU8sQ0FBQywwQkFBMEI7SUFRbEMsT0FBTyxDQUFDLGNBQWM7SUFNdEIsT0FBTyxDQUFDLGdDQUFnQztJQWdCeEMsT0FBTyxDQUFDLHFCQUFxQjtJQXdCN0IsT0FBTyxDQUFDLFVBQVU7SUFZbEIsT0FBTyxDQUFDLDhCQUE4QjtZQVV4QixzQkFBc0I7Q0FNckMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"batch_tx_requester.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/batch-tx-requester/batch_tx_requester.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAE,YAAY,EAAkB,MAAM,yBAAyB,CAAC;AAEvE,OAAO,EAAE,EAAE,EAAW,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAIhD,OAAO,EAAqC,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAQjG,OAAO,KAAK,EAAE,6BAA6B,EAAE,uBAAuB,EAAyB,MAAM,gBAAgB,CAAC;AAsBpH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgC;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0B;IAC/C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAa;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2B;IACvD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAS;IAClD,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAS;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,YACE,UAAU,EAAE,MAAM,EAAE,EACpB,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,6BAA6B,EACzC,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,YAAY,EAC3B,IAAI,CAAC,EAAE,uBAAuB,EAmC/B;IAKa,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,SAAS,EAAE,OAAO,CAAC,CA6C/D;IAKD,OAAoB,aAAa,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,SAAS,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CASvG;YAUa,mBAAmB;YAkDnB,aAAa;YAyDb,cAAc;YAgDd,cAAc;YAwCd,eAAe;YAkFf,cAAc;IAmC5B,OAAO,CAAC,0BAA0B;YAiBpB,6BAA6B;YAY7B,iBAAiB;IAqD/B,OAAO,CAAC,mBAAmB;IAkC3B,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,0BAA0B;IAKlC,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,gCAAgC;IAgBxC,OAAO,CAAC,qBAAqB;IAuB7B,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,8BAA8B;YAUxB,sBAAsB;CAOrC"}
1
+ {"version":3,"file":"batch_tx_requester.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/batch-tx-requester/batch_tx_requester.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,EAAE,EAAmB,MAAM,kBAAkB,CAAC;AAEvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAE9E,OAAO,EAAqC,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAQjG,OAAO,KAAK,EAAE,6BAA6B,EAAE,uBAAuB,EAAyB,MAAM,gBAAgB,CAAC;AAsBpH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAkB;IACjD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgC;IAC3D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA0B;IAC/C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;IACxC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAa;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2B;IACvD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAS;IAClD,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAS;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IAErC,YACE,cAAc,EAAE,eAAe,EAC/B,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,UAAU,EAAE,6BAA6B,EACzC,MAAM,CAAC,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,YAAY,EAC3B,IAAI,CAAC,EAAE,uBAAuB,EA+B/B;IAKa,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,SAAS,EAAE,OAAO,CAAC,CAmC/D;IAKD,OAAoB,aAAa,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,SAAS,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,CAAC,CASvG;YAUa,mBAAmB;YAkDnB,aAAa;YAkDb,cAAc;YAgDd,cAAc;YA+Bd,eAAe;YA4Ef,cAAc;IAmC5B,OAAO,CAAC,0BAA0B;YA0BpB,6BAA6B;YAY7B,iBAAiB;IAqD/B,OAAO,CAAC,mBAAmB;IA+B3B;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IASjC,OAAO,CAAC,0BAA0B;IAQlC,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,gCAAgC;IAgBxC,OAAO,CAAC,qBAAqB;IAwB7B,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,8BAA8B;YAUxB,sBAAsB;CAMrC"}
@@ -1,17 +1,15 @@
1
1
  import { chunkWrapAround } from '@aztec/foundation/collection';
2
- import { TimeoutError } from '@aztec/foundation/error';
3
2
  import { createLogger } from '@aztec/foundation/log';
4
3
  import { FifoMemoryQueue, Semaphore } from '@aztec/foundation/queue';
5
4
  import { sleep } from '@aztec/foundation/sleep';
6
- import { DateProvider, executeTimeout } from '@aztec/foundation/timer';
5
+ import { DateProvider } from '@aztec/foundation/timer';
7
6
  import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
8
7
  import { TxHash } from '@aztec/stdlib/tx';
9
- import { peerIdFromString } from '@libp2p/peer-id';
10
8
  import { ReqRespSubProtocol } from '.././interface.js';
11
9
  import { BlockTxsRequest, BlockTxsResponse } from '.././protocols/index.js';
12
10
  import { ReqRespStatus } from '.././status.js';
13
11
  import { DEFAULT_BATCH_TX_REQUESTER_BAD_PEER_THRESHOLD, DEFAULT_BATCH_TX_REQUESTER_DUMB_PARALLEL_WORKER_COUNT, DEFAULT_BATCH_TX_REQUESTER_SMART_PARALLEL_WORKER_COUNT, DEFAULT_BATCH_TX_REQUESTER_TX_BATCH_SIZE } from './config.js';
14
- import { MissingTxMetadata, MissingTxMetadataCollection } from './missing_txs.js';
12
+ import { MissingTxMetadataCollection } from './missing_txs.js';
15
13
  import { PeerCollection } from './peer_collection.js';
16
14
  import { BatchRequestTxValidator } from './tx_validator.js';
17
15
  /*
@@ -31,83 +29,64 @@ import { BatchRequestTxValidator } from './tx_validator.js';
31
29
  * - Bad peer:
32
30
  * - Is the peer which was unable to send us successful response N times in a row
33
31
  * */ export class BatchTxRequester {
32
+ requestTracker;
34
33
  blockTxsSource;
35
34
  pinnedPeer;
36
- timeoutMs;
37
35
  p2pService;
38
36
  logger;
39
- dateProvider;
40
37
  opts;
41
38
  peers;
42
39
  txsMetadata;
43
- deadline;
44
40
  smartRequesterSemaphore;
45
41
  txQueue;
46
42
  txValidator;
47
43
  smartParallelWorkerCount;
48
44
  dumbParallelWorkerCount;
49
45
  txBatchSize;
50
- constructor(missingTxs, blockTxsSource, pinnedPeer, timeoutMs, p2pService, logger, dateProvider, opts){
46
+ constructor(requestTracker, blockTxsSource, pinnedPeer, p2pService, logger, dateProvider, opts){
47
+ this.requestTracker = requestTracker;
51
48
  this.blockTxsSource = blockTxsSource;
52
49
  this.pinnedPeer = pinnedPeer;
53
- this.timeoutMs = timeoutMs;
54
50
  this.p2pService = p2pService;
55
51
  this.logger = logger ?? createLogger('p2p:reqresp_batch');
56
- this.dateProvider = dateProvider ?? new DateProvider();
57
52
  this.opts = opts ?? {};
58
53
  this.smartParallelWorkerCount = this.opts.smartParallelWorkerCount ?? DEFAULT_BATCH_TX_REQUESTER_SMART_PARALLEL_WORKER_COUNT;
59
54
  this.dumbParallelWorkerCount = this.opts.dumbParallelWorkerCount ?? DEFAULT_BATCH_TX_REQUESTER_DUMB_PARALLEL_WORKER_COUNT;
60
55
  this.txBatchSize = this.opts.txBatchSize ?? DEFAULT_BATCH_TX_REQUESTER_TX_BATCH_SIZE;
61
- this.deadline = this.dateProvider.now() + this.timeoutMs;
62
56
  this.txQueue = new FifoMemoryQueue(this.logger);
63
57
  this.txValidator = this.opts.txValidator ?? new BatchRequestTxValidator(this.p2pService.txValidatorConfig);
64
58
  if (this.opts.peerCollection) {
65
59
  this.peers = this.opts.peerCollection;
66
60
  } else {
67
- const initialPeers = this.p2pService.connectionSampler.getPeerListSortedByConnectionCountAsc();
68
61
  const badPeerThreshold = this.opts.badPeerThreshold ?? DEFAULT_BATCH_TX_REQUESTER_BAD_PEER_THRESHOLD;
69
- this.peers = new PeerCollection(initialPeers, this.pinnedPeer, this.dateProvider, badPeerThreshold, this.p2pService.peerScoring);
62
+ this.peers = new PeerCollection(this.p2pService.connectionSampler, this.pinnedPeer, dateProvider ?? new DateProvider(), badPeerThreshold, this.p2pService.peerScoring);
70
63
  }
71
- const entries = missingTxs.map((h)=>[
72
- h.toString(),
73
- new MissingTxMetadata(h)
74
- ]);
75
- this.txsMetadata = new MissingTxMetadataCollection(entries, this.txBatchSize);
64
+ this.txsMetadata = new MissingTxMetadataCollection(requestTracker, this.txBatchSize);
76
65
  this.smartRequesterSemaphore = this.opts.semaphore ?? new Semaphore(0);
77
66
  }
78
67
  /*
79
68
  * Fetches all missing transactions and yields them one by one
80
69
  * */ async *run() {
81
- // Our timeout is represented in milliseconds but queue expects seconds
82
- // We also want to make sure we wait at least 1 second in case of very low timeouts
83
- const timeoutQueueAfter = Math.max(Math.ceil(this.timeoutMs / 1_000), 1);
84
70
  try {
85
71
  if (this.txsMetadata.getMissingTxHashes().size === 0) {
86
72
  return undefined;
87
73
  }
88
- // Start workers in background
89
- const workersPromise = executeTimeout(()=>Promise.allSettled([
90
- this.smartRequester(),
91
- this.dumbRequester(),
92
- this.pinnedPeerRequester()
93
- ]), this.timeoutMs).finally(()=>{
74
+ // Start workers in background. Workers stop themselves via requestTracker.checkCancelled().
75
+ const workersPromise = Promise.allSettled([
76
+ this.smartRequester(),
77
+ this.dumbRequester(),
78
+ this.pinnedPeerRequester()
79
+ ]).finally(()=>{
94
80
  this.txQueue.end();
95
81
  });
82
+ // Yield txs as workers put them on the queue. The queue's end() drains remaining items
83
+ // before returning null, so we don't lose any txs.
96
84
  while(true){
97
- const tx = await this.txQueue.get(timeoutQueueAfter);
98
- // null indicates that the queue has ended
85
+ const tx = await this.txQueue.get();
99
86
  if (tx === null) {
100
87
  break;
101
88
  }
102
89
  yield tx;
103
- if (this.shouldStop()) {
104
- // Drain queue before ending
105
- let remaining;
106
- while((remaining = this.txQueue.getImmediate()) !== undefined){
107
- yield remaining;
108
- }
109
- break;
110
- }
111
90
  }
112
91
  this.unlockSmartRequesterSemaphores();
113
92
  await workersPromise;
@@ -181,7 +160,6 @@ import { BatchRequestTxValidator } from './tx_validator.js';
181
160
  /*
182
161
  * Starts dumb worker loops
183
162
  * */ async dumbRequester() {
184
- const nextPeerIndex = this.makeRoundRobinIndexer();
185
163
  const nextBatchIndex = this.makeRoundRobinIndexer();
186
164
  // Chunk missing tx hashes into batches of txBatchSize, wrapping around to ensure no peer gets less than txBatchSize
187
165
  const txChunks = ()=>{
@@ -209,15 +187,10 @@ import { BatchRequestTxValidator } from './tx_validator.js';
209
187
  txs
210
188
  };
211
189
  };
212
- const nextPeer = ()=>{
213
- const peers = this.peers.getDumbPeersToQuery();
214
- const idx = nextPeerIndex(()=>peers.length);
215
- return idx === undefined ? undefined : peerIdFromString(peers[idx]);
216
- };
217
- const workerCount = Math.min(this.dumbParallelWorkerCount, this.peers.getAllPeers().size);
190
+ const workerCount = this.dumbParallelWorkerCount;
218
191
  const workers = Array.from({
219
192
  length: workerCount
220
- }, (_, index)=>this.dumbWorkerLoop(nextPeer, makeRequest, index + 1));
193
+ }, (_, index)=>this.dumbWorkerLoop(this.peers.nextDumbPeerToQuery.bind(this.peers), makeRequest, index + 1));
221
194
  await Promise.allSettled(workers);
222
195
  }
223
196
  /*
@@ -261,12 +234,6 @@ import { BatchRequestTxValidator } from './tx_validator.js';
261
234
  /*
262
235
  * Starts smart worker loops
263
236
  * */ async smartRequester() {
264
- const nextPeerIndex = this.makeRoundRobinIndexer();
265
- const nextPeer = ()=>{
266
- const peers = this.peers.getSmartPeersToQuery();
267
- const idx = nextPeerIndex(()=>peers.length);
268
- return idx === undefined ? undefined : peerIdFromString(peers[idx]);
269
- };
270
237
  const makeRequest = (pid)=>{
271
238
  const txs = this.txsMetadata.getTxsToRequestFromThePeer(pid);
272
239
  const blockRequest = BlockTxsRequest.fromTxsSourceAndMissingTxs(this.blockTxsSource, txs);
@@ -279,8 +246,8 @@ import { BatchRequestTxValidator } from './tx_validator.js';
279
246
  };
280
247
  };
281
248
  const workers = Array.from({
282
- length: Math.min(this.smartParallelWorkerCount, this.peers.getAllPeers().size)
283
- }, (_, index)=>this.smartWorkerLoop(nextPeer, makeRequest, index + 1));
249
+ length: this.smartParallelWorkerCount
250
+ }, (_, index)=>this.smartWorkerLoop(this.peers.nextSmartPeerToQuery.bind(this.peers), makeRequest, index + 1));
284
251
  await Promise.allSettled(workers);
285
252
  }
286
253
  /*
@@ -298,35 +265,40 @@ import { BatchRequestTxValidator } from './tx_validator.js';
298
265
  * */ async smartWorkerLoop(pickNextPeer, request, workerIndex) {
299
266
  try {
300
267
  this.logger.trace(`Smart worker ${workerIndex} started`);
301
- await executeTimeout((_)=>this.smartRequesterSemaphore.acquire(), this.timeoutMs);
268
+ await Promise.race([
269
+ this.smartRequesterSemaphore.acquire(),
270
+ this.requestTracker.cancellationToken
271
+ ]);
272
+ if (this.requestTracker.checkCancelled()) {
273
+ return;
274
+ }
302
275
  this.logger.trace(`Smart worker ${workerIndex} acquired semaphore`);
303
276
  while(!this.shouldStop()){
304
277
  const peerId = pickNextPeer();
305
278
  const weRanOutOfPeersToQuery = peerId === undefined;
306
279
  if (weRanOutOfPeersToQuery) {
307
280
  this.logger.debug(`Worker loop smart: No more peers to query`);
308
- // If there are no more dumb peers to query then none of our peers can become smart,
309
- // thus we can simply exit this worker
310
- const noMoreDumbPeersToQuery = this.peers.getDumbPeersToQuery().length === 0;
311
- if (noMoreDumbPeersToQuery) {
312
- // These might be either smart peers that will get unblocked after _some time_
313
- const nextSmartPeerDelay = this.peers.getNextSmartPeerAvailabilityDelayMs();
314
- const thereAreSomeRateLimitedSmartPeers = nextSmartPeerDelay !== undefined;
315
- if (thereAreSomeRateLimitedSmartPeers) {
316
- await this.sleepClampedToDeadline(nextSmartPeerDelay);
317
- continue;
318
- }
319
- this.logger.debug(`Worker loop smart: No more smart peers to query killing ${workerIndex}`);
320
- break;
281
+ // If we have rate limited peers wait for them.
282
+ const nextSmartPeerDelay = this.peers.getNextSmartPeerAvailabilityDelayMs();
283
+ const thereAreSomeRateLimitedSmartPeers = nextSmartPeerDelay !== undefined;
284
+ if (thereAreSomeRateLimitedSmartPeers) {
285
+ await this.sleepClampedToDeadline(nextSmartPeerDelay);
286
+ continue;
321
287
  }
322
- // Otherwise there are still some dumb peers that could become smart.
323
288
  // We end up here when all known smart peers became temporarily unavailable via combination of
324
289
  // (bad, in-flight, or rate-limited) or in some weird scenario all current smart peers turn bad which is permanent
325
- // but dumb peers still exist that could become smart.
290
+ // but there are dumb peers that could be promoted
291
+ // or new peer can join as dumb and be promoted later
326
292
  //
327
293
  // When a dumb peer responds with valid txIndices, it gets
328
294
  // promoted to smart and releases the semaphore, waking this worker.
329
- await executeTimeout((_)=>this.smartRequesterSemaphore.acquire(), this.timeoutMs);
295
+ await Promise.race([
296
+ this.smartRequesterSemaphore.acquire(),
297
+ this.requestTracker.cancellationToken
298
+ ]);
299
+ if (this.requestTracker.checkCancelled()) {
300
+ break;
301
+ }
330
302
  this.logger.debug(`Worker loop smart: acquired next smart peer`);
331
303
  continue;
332
304
  }
@@ -349,11 +321,7 @@ import { BatchRequestTxValidator } from './tx_validator.js';
349
321
  });
350
322
  }
351
323
  } catch (err) {
352
- if (err instanceof TimeoutError) {
353
- this.logger.debug(`Smart worker ${workerIndex} timed out waiting for semaphore`);
354
- } else {
355
- this.logger.error(`Smart worker ${workerIndex} encountered an error: ${err}`);
356
- }
324
+ this.logger.error(`Smart worker ${workerIndex} encountered an error: ${err}`);
357
325
  } finally{
358
326
  this.logger.debug(`Smart worker ${workerIndex} finished`);
359
327
  }
@@ -391,9 +359,17 @@ import { BatchRequestTxValidator } from './tx_validator.js';
391
359
  * - FAILURE and UNKNOWN: We penalise this, if peer has been penalised this way N times they are not queried again
392
360
  * this implies we will query these peers couple of more times and give them a chance to "redeem" themselves before completely ignoring them
393
361
  */ handleFailResponseFromPeer(peerId, responseStatus) {
394
- //TODO: Should we ban these peers?
395
362
  if (responseStatus === ReqRespStatus.FAILURE || responseStatus === ReqRespStatus.UNKNOWN) {
396
363
  this.peers.penalisePeer(peerId, PeerErrorSeverity.HighToleranceError);
364
+ this.peers.markPeerDumb(peerId);
365
+ this.txsMetadata.clearPeerData(peerId);
366
+ return;
367
+ }
368
+ // NOT_FOUND means the peer pruned its block proposal — it can no longer serve
369
+ // index-based requests, but this is a legitimate state so we don't penalize.
370
+ if (responseStatus === ReqRespStatus.NOT_FOUND) {
371
+ this.peers.markPeerDumb(peerId);
372
+ this.txsMetadata.clearPeerData(peerId);
397
373
  return;
398
374
  }
399
375
  if (responseStatus === ReqRespStatus.RATE_LIMIT_EXCEEDED) {
@@ -462,10 +438,9 @@ import { BatchRequestTxValidator } from './tx_validator.js';
462
438
  if (smartPeersAreDisabled) {
463
439
  return;
464
440
  }
465
- // If block response is invalid we still want to query this peer in the future
466
- // Because they sent successful response, so they might become smart peer in the future
467
- // Or send us needed txs
468
- if (!this.isBlockResponseValid(response)) {
441
+ const hasArchiveRootMismatch = this.blockTxsSource.archive.toString() !== response.archiveRoot.toString();
442
+ if (hasArchiveRootMismatch) {
443
+ this.handleArchiveRootMismatch(peerId, response);
469
444
  return;
470
445
  }
471
446
  // We mark peer as "smart" only if they have some txs we are missing
@@ -477,16 +452,24 @@ import { BatchRequestTxValidator } from './tx_validator.js';
477
452
  this.peers.markPeerSmart(peerId);
478
453
  this.markTxsPeerHas(peerId, response);
479
454
  // Unblock smart workers
480
- if (this.peers.getSmartPeersToQuery().length <= this.smartParallelWorkerCount) {
481
- this.smartRequesterSemaphore.release();
482
- }
455
+ this.smartRequesterSemaphore.release();
483
456
  }
484
- isBlockResponseValid(response) {
485
- const archiveRootsMatch = this.blockTxsSource.archive.toString() === response.archiveRoot.toString();
486
- const peerHasSomeTxsFromProposal = !response.txIndices.isEmpty();
487
- return archiveRootsMatch && peerHasSomeTxsFromProposal;
457
+ /**
458
+ * Handles an archive root mismatch between local state and peer response.
459
+ *
460
+ * - Response archive is Fr.ZERO (peer pruned proposal, legitimate): marks peer dumb.
461
+ * - Non-zero archive mismatch (malicious response): penalises + marks dumb.
462
+ */ handleArchiveRootMismatch(peerId, response) {
463
+ if (!response.archiveRoot.isZero()) {
464
+ this.peers.penalisePeer(peerId, PeerErrorSeverity.LowToleranceError);
465
+ }
466
+ this.peers.markPeerDumb(peerId);
467
+ this.txsMetadata.clearPeerData(peerId);
488
468
  }
489
469
  peerHasSomeTxsWeAreMissing(_peerId, response) {
470
+ if (response.txIndices.isEmpty()) {
471
+ return false;
472
+ }
490
473
  const txsPeerHas = new Set(this.extractHashesPeerHasFromResponse(response).map((h)=>h.toString()));
491
474
  return this.txsMetadata.getMissingTxHashes().intersection(txsPeerHas).size > 0;
492
475
  }
@@ -527,23 +510,12 @@ import { BatchRequestTxValidator } from './tx_validator.js';
527
510
  };
528
511
  }
529
512
  /*
530
- * @returns true if all missing txs have been fetched */ fetchedAllTxs() {
531
- return Array.from(this.txsMetadata.values()).every((tx)=>tx.fetched);
532
- }
533
- /*
534
- * Checks if the BatchTxRequester should stop fetching missing txs
535
- * Conditions for stopping are:
536
- * - There have been no missing transactions to start with
537
- * - All transactions have been fetched
538
- * - The deadline has been hit (no more time to fetch)
539
- * - This process has been cancelled via abortSignal
540
- *
541
- * @returns true if BatchTxRequester should stop, otherwise false*/ shouldStop() {
542
- const aborted = this.opts.abortSignal?.aborted ?? false;
543
- if (aborted) {
513
+ * Checks if the BatchTxRequester should stop fetching missing txs.
514
+ * Delegates to requestTracker which covers: deadline hit, all txs fetched, or external cancellation. */ shouldStop() {
515
+ if (this.requestTracker.checkCancelled()) {
544
516
  this.unlockSmartRequesterSemaphores();
545
517
  }
546
- return aborted || this.txsMetadata.size === 0 || this.fetchedAllTxs() || this.dateProvider.now() > this.deadline;
518
+ return this.requestTracker.checkCancelled();
547
519
  }
548
520
  /*
549
521
  * Helper function which unlocks all smart requester semaphores
@@ -557,10 +529,12 @@ import { BatchRequestTxValidator } from './tx_validator.js';
557
529
  * Sleeps for the given duration, but clamped to the deadline.
558
530
  * This ensures we don't sleep past the deadline.
559
531
  * */ async sleepClampedToDeadline(durationMs) {
560
- const remaining = this.deadline - this.dateProvider.now();
561
- const thereIsTimeRemaining = remaining > 0;
562
- if (thereIsTimeRemaining) {
563
- await sleep(Math.min(durationMs, remaining));
532
+ if (this.requestTracker.checkCancelled()) {
533
+ return;
564
534
  }
535
+ await Promise.race([
536
+ sleep(durationMs),
537
+ this.requestTracker.cancellationToken
538
+ ]);
565
539
  }
566
540
  }