@aztec/p2p 0.0.1-commit.ec5f612 → 0.0.1-commit.ec7ac5448

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 (332) hide show
  1. package/README.md +129 -3
  2. package/dest/client/factory.d.ts +2 -2
  3. package/dest/client/factory.d.ts.map +1 -1
  4. package/dest/client/factory.js +25 -11
  5. package/dest/client/interface.d.ts +9 -2
  6. package/dest/client/interface.d.ts.map +1 -1
  7. package/dest/client/p2p_client.d.ts +3 -2
  8. package/dest/client/p2p_client.d.ts.map +1 -1
  9. package/dest/client/p2p_client.js +37 -36
  10. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +17 -6
  11. package/dest/config.d.ts +34 -11
  12. package/dest/config.d.ts.map +1 -1
  13. package/dest/config.js +91 -32
  14. package/dest/errors/p2p-service.error.d.ts +9 -0
  15. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  16. package/dest/errors/p2p-service.error.js +10 -0
  17. package/dest/index.d.ts +1 -2
  18. package/dest/index.d.ts.map +1 -1
  19. package/dest/index.js +0 -1
  20. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +7 -5
  21. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  22. package/dest/mem_pools/attestation_pool/attestation_pool.js +16 -9
  23. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +6 -6
  24. package/dest/mem_pools/index.d.ts +1 -2
  25. package/dest/mem_pools/index.d.ts.map +1 -1
  26. package/dest/mem_pools/instrumentation.d.ts +4 -2
  27. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  28. package/dest/mem_pools/instrumentation.js +16 -14
  29. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  30. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  31. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +2 -1
  32. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +7 -1
  33. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
  34. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
  35. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
  36. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
  37. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
  38. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
  39. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +2 -2
  40. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +9 -5
  41. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  42. package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
  43. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +25 -10
  44. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  45. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +38 -11
  46. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
  47. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  48. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +26 -43
  49. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
  50. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  51. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +6 -0
  52. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +2 -1
  53. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  54. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +24 -6
  55. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +5 -2
  56. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  57. package/dest/msg_validators/attestation_validator/attestation_validator.js +20 -11
  58. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +4 -2
  59. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  60. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +2 -2
  61. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  62. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  63. package/dest/msg_validators/clock_tolerance.js +54 -3
  64. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +7 -4
  65. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  66. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  67. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +7 -4
  68. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  69. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  70. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +15 -8
  71. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  72. package/dest/msg_validators/proposal_validator/proposal_validator.js +67 -47
  73. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  74. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  75. package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
  76. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  77. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  78. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  79. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  80. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  81. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  82. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  83. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  84. package/dest/msg_validators/tx_validator/data_validator.js +35 -2
  85. package/dest/msg_validators/tx_validator/factory.d.ts +23 -4
  86. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  87. package/dest/msg_validators/tx_validator/factory.js +36 -10
  88. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  89. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  90. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  91. package/dest/msg_validators/tx_validator/gas_validator.d.ts +13 -4
  92. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  93. package/dest/msg_validators/tx_validator/gas_validator.js +49 -17
  94. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  95. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  96. package/dest/msg_validators/tx_validator/index.js +1 -0
  97. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  98. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  99. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  100. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  101. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  102. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  103. package/dest/services/data_store.d.ts +1 -1
  104. package/dest/services/data_store.d.ts.map +1 -1
  105. package/dest/services/data_store.js +5 -5
  106. package/dest/services/dummy_service.d.ts +6 -3
  107. package/dest/services/dummy_service.d.ts.map +1 -1
  108. package/dest/services/dummy_service.js +6 -1
  109. package/dest/services/encoding.d.ts +5 -1
  110. package/dest/services/encoding.d.ts.map +1 -1
  111. package/dest/services/encoding.js +7 -1
  112. package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
  113. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  114. package/dest/services/gossipsub/topic_score_params.js +21 -4
  115. package/dest/services/libp2p/libp2p_service.d.ts +15 -25
  116. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  117. package/dest/services/libp2p/libp2p_service.js +165 -126
  118. package/dest/services/peer-manager/metrics.d.ts +3 -1
  119. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  120. package/dest/services/peer-manager/metrics.js +6 -0
  121. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  122. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  123. package/dest/services/peer-manager/peer_manager.js +24 -9
  124. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  125. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  126. package/dest/services/peer-manager/peer_scoring.js +32 -10
  127. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -8
  128. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  129. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +69 -65
  130. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +3 -2
  131. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  132. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  133. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  134. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  135. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
  136. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  137. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
  138. package/dest/services/reqresp/interface.d.ts +14 -9
  139. package/dest/services/reqresp/interface.d.ts.map +1 -1
  140. package/dest/services/reqresp/interface.js +10 -11
  141. package/dest/services/reqresp/metrics.d.ts +1 -1
  142. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  143. package/dest/services/reqresp/metrics.js +0 -1
  144. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  145. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  146. package/dest/services/reqresp/protocols/index.js +0 -1
  147. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  148. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  149. package/dest/services/reqresp/protocols/tx.js +1 -3
  150. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  151. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  152. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  153. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  154. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  155. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  156. package/dest/services/reqresp/reqresp.d.ts +4 -2
  157. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  158. package/dest/services/reqresp/reqresp.js +28 -11
  159. package/dest/services/service.d.ts +5 -2
  160. package/dest/services/service.d.ts.map +1 -1
  161. package/dest/services/tx_collection/fast_tx_collection.d.ts +1 -4
  162. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  163. package/dest/services/tx_collection/fast_tx_collection.js +57 -73
  164. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  165. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  166. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  167. package/dest/services/tx_collection/proposal_tx_collector.d.ts +6 -7
  168. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
  169. package/dest/services/tx_collection/proposal_tx_collector.js +4 -4
  170. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  171. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  172. package/dest/services/tx_collection/request_tracker.js +84 -0
  173. package/dest/services/tx_collection/slow_tx_collection.js +1 -1
  174. package/dest/services/tx_collection/tx_collection.d.ts +3 -6
  175. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  176. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  177. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  178. package/dest/services/tx_collection/tx_source.js +9 -7
  179. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  180. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  181. package/dest/test-helpers/mock-pubsub.d.ts +11 -3
  182. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  183. package/dest/test-helpers/mock-pubsub.js +35 -10
  184. package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
  185. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  186. package/dest/test-helpers/reqresp-nodes.js +1 -2
  187. package/dest/test-helpers/testbench-utils.d.ts +1 -1
  188. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  189. package/dest/test-helpers/testbench-utils.js +23 -3
  190. package/dest/testbench/p2p_client_testbench_worker.js +68 -16
  191. package/dest/testbench/worker_client_manager.d.ts +10 -1
  192. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  193. package/dest/testbench/worker_client_manager.js +55 -3
  194. package/dest/util.d.ts +1 -1
  195. package/package.json +14 -14
  196. package/src/client/factory.ts +43 -14
  197. package/src/client/interface.ts +9 -1
  198. package/src/client/p2p_client.ts +39 -36
  199. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +19 -9
  200. package/src/config.ts +136 -34
  201. package/src/errors/p2p-service.error.ts +11 -0
  202. package/src/index.ts +0 -1
  203. package/src/mem_pools/attestation_pool/attestation_pool.ts +17 -12
  204. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +6 -6
  205. package/src/mem_pools/index.ts +0 -3
  206. package/src/mem_pools/instrumentation.ts +17 -13
  207. package/src/mem_pools/tx_pool_v2/README.md +9 -1
  208. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  209. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
  210. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
  211. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
  212. package/src/mem_pools/tx_pool_v2/interfaces.ts +9 -4
  213. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +59 -13
  214. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +29 -43
  215. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +16 -1
  216. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +28 -6
  217. package/src/msg_validators/attestation_validator/README.md +49 -0
  218. package/src/msg_validators/attestation_validator/attestation_validator.ts +21 -9
  219. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +4 -1
  220. package/src/msg_validators/clock_tolerance.ts +72 -3
  221. package/src/msg_validators/proposal_validator/README.md +123 -0
  222. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +17 -4
  223. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +23 -7
  224. package/src/msg_validators/proposal_validator/proposal_validator.ts +79 -49
  225. package/src/msg_validators/tx_validator/README.md +5 -1
  226. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  227. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  228. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  229. package/src/msg_validators/tx_validator/data_validator.ts +42 -1
  230. package/src/msg_validators/tx_validator/factory.ts +43 -3
  231. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  232. package/src/msg_validators/tx_validator/gas_validator.ts +65 -16
  233. package/src/msg_validators/tx_validator/index.ts +1 -0
  234. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  235. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  236. package/src/services/data_store.ts +5 -13
  237. package/src/services/dummy_service.ts +8 -2
  238. package/src/services/encoding.ts +9 -1
  239. package/src/services/gossipsub/topic_score_params.ts +36 -4
  240. package/src/services/libp2p/libp2p_service.ts +164 -139
  241. package/src/services/peer-manager/metrics.ts +7 -0
  242. package/src/services/peer-manager/peer_manager.ts +28 -9
  243. package/src/services/peer-manager/peer_scoring.ts +27 -5
  244. package/src/services/reqresp/README.md +229 -0
  245. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  246. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +64 -69
  247. package/src/services/reqresp/batch-tx-requester/interface.ts +2 -1
  248. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  249. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
  250. package/src/services/reqresp/interface.ts +21 -11
  251. package/src/services/reqresp/metrics.ts +0 -1
  252. package/src/services/reqresp/protocols/index.ts +0 -1
  253. package/src/services/reqresp/protocols/tx.ts +1 -3
  254. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  255. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  256. package/src/services/reqresp/reqresp.ts +37 -12
  257. package/src/services/service.ts +6 -1
  258. package/src/services/tx_collection/fast_tx_collection.ts +57 -83
  259. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  260. package/src/services/tx_collection/proposal_tx_collector.ts +8 -13
  261. package/src/services/tx_collection/request_tracker.ts +127 -0
  262. package/src/services/tx_collection/slow_tx_collection.ts +1 -1
  263. package/src/services/tx_collection/tx_collection.ts +3 -5
  264. package/src/services/tx_collection/tx_source.ts +8 -7
  265. package/src/test-helpers/make-test-p2p-clients.ts +1 -1
  266. package/src/test-helpers/mock-pubsub.ts +31 -5
  267. package/src/test-helpers/reqresp-nodes.ts +3 -3
  268. package/src/test-helpers/testbench-utils.ts +30 -3
  269. package/src/testbench/p2p_client_testbench_worker.ts +72 -15
  270. package/src/testbench/worker_client_manager.ts +68 -6
  271. package/src/util.ts +1 -1
  272. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  273. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  274. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  275. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  276. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  277. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  278. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  279. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  280. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  281. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  282. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  283. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  284. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  285. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  286. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  287. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  288. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  289. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  290. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  291. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  292. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  293. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  294. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  295. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  296. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  297. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  298. package/dest/mem_pools/tx_pool/index.js +0 -2
  299. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  300. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  301. package/dest/mem_pools/tx_pool/priority.js +0 -15
  302. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  303. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  304. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  305. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  306. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  307. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  308. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  309. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  310. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  311. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  312. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  313. package/dest/services/reqresp/protocols/block.js +0 -32
  314. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  315. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  316. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  317. package/src/mem_pools/tx_pool/README.md +0 -270
  318. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  319. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  320. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  321. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  322. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  323. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  324. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  325. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  326. package/src/mem_pools/tx_pool/index.ts +0 -2
  327. package/src/mem_pools/tx_pool/priority.ts +0 -20
  328. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  329. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  330. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  331. package/src/services/reqresp/protocols/block.ts +0 -37
  332. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
@@ -53,11 +53,15 @@ export declare class PeerManager implements PeerManagerInterface {
53
53
  heartbeat(): Promise<void>;
54
54
  setupDirectPeersIfValidator(): Promise<void>;
55
55
  /**
56
- * Cleans up expired timeouts.
56
+ * Cleans up expired timeouts and stale failed-auth-handshake entries.
57
57
  *
58
58
  * When peers fail to dial after a number of retries, they are temporarily timed out.
59
59
  * This function removes any peers that have been in the timed out state for too long.
60
60
  * To give them a chance to reconnect.
61
+ *
62
+ * Also evicts entries from the failed-auth-handshake map whose expiry window has passed.
63
+ * Without this, peers that probe once and never reconnect would leave their entries in the
64
+ * map forever, causing an unbounded memory leak.
61
65
  */
62
66
  private cleanupExpiredTimeouts;
63
67
  private processScheduledDisconnects;
@@ -171,4 +175,4 @@ export declare class PeerManager implements PeerManagerInterface {
171
175
  handleAuthRequestFromPeer(_authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage>;
172
176
  private updateAuthenticatedPeers;
173
177
  }
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlcl9tYW5hZ2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcGVlci1tYW5hZ2VyL3BlZXJfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RixPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRS9ELE9BQU8sS0FBSyxFQUFjLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTTVELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRCxPQUFPLEVBQUUsV0FBVyxFQUFnQixNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQXVCLE1BQU0saUNBQWlDLENBQUM7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJELE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsT0FBTyxFQUFrQixLQUFLLFdBQVcsRUFBRSxNQUFNLG1C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
178
+ //# 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":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAGhE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACxF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAc,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAM5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAgB,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,aAAa,EAAuB,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAE3D,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA2BrE,qBAAa,WAAY,YAAW,oBAAoB;IAyBpD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAlC/B,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,8BAA8B,CAAa;IACnD,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,uBAAuB,CAAkB;IACjD,OAAO,CAAC,YAAY,CAA0B;IAC9C,OAAO,CAAC,uBAAuB,CAAkB;IACjD,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,qCAAqC,CAAsC;IACnF,OAAO,CAAC,qCAAqC,CAAkC;IAC/E,OAAO,CAAC,qBAAqB,CAA0B;IACvD,OAAO,CAAC,oBAAoB,CAAoD;IAChF,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,yBAAyB,CAAkB;IAEnD,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,QAAQ,CAId;IAEF,YACU,UAAU,EAAE,UAAU,EACtB,oBAAoB,EAAE,oBAAoB,EAC1C,MAAM,EAAE,SAAS,EACzB,eAAe,EAAE,eAAe,EACxB,MAAM,oDAAmC,EACzC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,OAAO,EACP,sBAAsB,EAAE,sBAAsB,EAC9C,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,mBAAmB,EAC/B,YAAY,GAAE,YAAiC,EAyBjE;IACD;;;;OAIG;IACG,eAAe,kBAmCpB;IAED,IAAI,MAAM,6CAET;IAEY,SAAS,kBAUrB;IAIK,2BAA2B,kBAgDhC;IAED;;;;;;;;;;OAUG;IACH,OAAO,CAAC,sBAAsB;YAsBhB,2BAA2B;IAsBzC;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAuBhC;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAmB5B,8BAA8B,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAEjE;IAED;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAQrB;;;OAGG;IACI,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAM1C;IAED;;;OAGG;IACI,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAQ1C;IAED;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAQrB;;;OAGG;IACI,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAK5C;IAED;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAIvB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAIvB;;;;;;OAMG;IACI,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,QAM3D;IAEM,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,QAE7D;IAEM,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1C;IAEM,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGrD;IAEM,QAAQ,CAAC,cAAc,UAAQ,GAAG,QAAQ,EAAE,CA+BlD;IAEM,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAQlD;IASM,sBAAsB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAa1D;IAED;;OAEG;IACH,OAAO,CAAC,QAAQ;IAmEhB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,mBAAmB;IAsB3B;;;;;OAKG;IACH,OAAO,CAAC,eAAe;YAyBT,wBAAwB;IAgCtC,OAAO,CAAC,qBAAqB;YAYf,cAAc;YAkBd,oBAAoB;YAoEpB,QAAQ;IA4BtB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,gBAAgB;YAsBV,mBAAmB;YAenB,uBAAuB;YA2CvB,qBAAqB;IA2FnC,OAAO,CAAC,uBAAuB;IA0B/B,OAAO,CAAC,wBAAwB;IAUhC;;;OAGG;IACU,IAAI,kBAWhB;IAED,OAAO,CAAC,uBAAuB;IAI/B;;;;;;;;;SASK;IACQ,yBAAyB,CAAC,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAOxG;YAEa,wBAAwB;CAwBvC"}
@@ -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 {
@@ -172,19 +172,27 @@ export class PeerManager {
172
172
  this.initializedPreferredPeers = true;
173
173
  }
174
174
  /**
175
- * Cleans up expired timeouts.
175
+ * Cleans up expired timeouts and stale failed-auth-handshake entries.
176
176
  *
177
177
  * When peers fail to dial after a number of retries, they are temporarily timed out.
178
178
  * This function removes any peers that have been in the timed out state for too long.
179
179
  * To give them a chance to reconnect.
180
+ *
181
+ * Also evicts entries from the failed-auth-handshake map whose expiry window has passed.
182
+ * Without this, peers that probe once and never reconnect would leave their entries in the
183
+ * map forever, causing an unbounded memory leak.
180
184
  */ cleanupExpiredTimeouts() {
181
- // Clean up expired timeouts
182
185
  const now = this.dateProvider.now();
183
186
  for (const [peerId, timedOutPeer] of this.timedOutPeers.entries()){
184
187
  if (now >= timedOutPeer.timeoutUntilMs) {
185
188
  this.timedOutPeers.delete(peerId);
186
189
  }
187
190
  }
191
+ for (const [id, entry] of this.failedAuthHandshakes.entries()){
192
+ if (now - entry.lastFailureTimestamp > FAILED_AUTH_HANDSHAKE_EXPIRY_MS) {
193
+ this.failedAuthHandshakes.delete(id);
194
+ }
195
+ }
188
196
  }
189
197
  /**
190
198
  * Processes scheduled disconnects during heartbeat.
@@ -238,13 +246,17 @@ export class PeerManager {
238
246
  * @param e - The disconnected peer event.
239
247
  */ handleDisconnectedPeerEvent(e) {
240
248
  const peerId = e.detail;
249
+ const peerIdStr = peerId.toString();
241
250
  this.metrics.peerDisconnected(peerId);
242
- this.logger.verbose(`Disconnected from peer ${peerId.toString()}`);
243
- const validatorAddress = this.authenticatedPeerIdToValidatorAddress.get(peerId.toString());
251
+ this.logger.verbose(`Disconnected from peer ${peerIdStr}`);
252
+ const validatorAddress = this.authenticatedPeerIdToValidatorAddress.get(peerIdStr);
244
253
  if (validatorAddress !== undefined) {
245
- this.logger.info(`Removing authentication for validator ${validatorAddress} at peer id ${peerId.toString()} due to disconnection`);
254
+ this.logger.info(`Removing authentication for validator ${validatorAddress} at peer id ${peerIdStr} due to disconnection`);
246
255
  this.authenticatedValidatorAddressToPeerId.delete(validatorAddress.toString());
247
- this.authenticatedPeerIdToValidatorAddress.delete(peerId.toString());
256
+ this.authenticatedPeerIdToValidatorAddress.delete(peerIdStr);
257
+ }
258
+ if (this.peerScoring.getScoreState(peerIdStr) === PeerScoreState.Healthy) {
259
+ this.peerScoring.removePeer(peerIdStr);
248
260
  }
249
261
  }
250
262
  registerThisValidatorAddresses(address) {
@@ -406,7 +418,8 @@ export class PeerManager {
406
418
  cachedPeers: this.cachedPeers.size,
407
419
  ...this.peerScoring.getStats()
408
420
  });
409
- this.metrics.recordPeerCount(healthyConnections.length);
421
+ this.metrics.recordPeerCount(connections.length);
422
+ this.metrics.recordHealthyPeerCount(healthyConnections.length);
410
423
  // Exit if no peers to connect
411
424
  if (peersToConnect <= 0) {
412
425
  return;
@@ -623,7 +636,7 @@ export class PeerManager {
623
636
  // Add to timed out peers
624
637
  this.timedOutPeers.set(id, {
625
638
  peerId: id,
626
- timeoutUntilMs: this.dateProvider.now() + FAILED_PEER_BAN_TIME_MS
639
+ timeoutUntilMs: this.dateProvider.now() + (this.config.peerFailedBanTimeMs ?? DEFAULT_FAILED_PEER_BAN_TIME_MS)
627
640
  });
628
641
  }
629
642
  }
@@ -773,6 +786,8 @@ export class PeerManager {
773
786
  ...logData,
774
787
  address: sender.toString()
775
788
  });
789
+ this.markAuthHandshakeFailed(peerId);
790
+ this.markPeerForDisconnect(peerId);
776
791
  return;
777
792
  }
778
793
  this.markAuthHandshakeSuccess(peerId);
@@ -1,3 +1,4 @@
1
+ import { DateProvider } from '@aztec/foundation/timer';
1
2
  import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
2
3
  import { type TelemetryClient } from '@aztec/telemetry-client';
3
4
  import type { PeerId } from '@libp2p/interface';
@@ -8,6 +9,7 @@ export declare enum PeerScoreState {
8
9
  Healthy = 2
9
10
  }
10
11
  export declare class PeerScoring {
12
+ private readonly dateProvider;
11
13
  private logger;
12
14
  private scores;
13
15
  private lastUpdateTime;
@@ -17,10 +19,13 @@ export declare class PeerScoring {
17
19
  [key in PeerErrorSeverity]: number;
18
20
  };
19
21
  private peerStateCounter;
20
- constructor(config: P2PConfig, telemetry?: TelemetryClient);
22
+ constructor(config: P2PConfig, telemetry?: TelemetryClient, dateProvider?: DateProvider);
21
23
  penalizePeer(peerId: PeerId, penalty: PeerErrorSeverity): number;
22
24
  updateScore(peerId: string, scoreDelta: number): number;
23
25
  decayAllScores(): void;
26
+ /** Resets all peer scores. Useful for benchmarks to prevent cross-case contamination. */
27
+ resetAllScores(): void;
28
+ removePeer(peerId: string): void;
24
29
  getScore(peerId: string): number;
25
30
  getScoreState(peerId: string): PeerScoreState;
26
31
  getStats(): {
@@ -30,4 +35,4 @@ export declare class PeerScoring {
30
35
  bannedCount: number;
31
36
  };
32
37
  }
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlcl9zY29yaW5nLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcGVlci1tYW5hZ2VyL3BlZXJfc2NvcmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBR0wsS0FBSyxlQUFlLEVBSXJCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUF1QmpELG9CQUFZLGNBQWM7SUFDeEIsTUFBTSxJQUFBO0lBQ04sVUFBVSxJQUFBO0lBQ1YsT0FBTyxJQUFBO0NBQ1I7QUFnQkQscUJBQWEsV0FBVztJQUN0QixPQUFPLENBQUMsTUFBTSxDQUFvQztJQUNsRCxPQUFPLENBQUMsTUFBTSxDQUFrQztJQUNoRCxPQUFPLENBQUMsY0FBYyxDQUFrQztJQUN4RCxPQUFPLENBQUMsYUFBYSxDQUFhO0lBQ2xDLE9BQU8sQ0FBQyxXQUFXLENBQU87SUFDMUIsYUFBYSxFQUFFO1NBQUcsR0FBRyxJQUFJLGlCQUFpQixHQUFHLE1BQU07S0FBRSxDQUFDO0lBRXRELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBZ0I7SUFFeEMsWUFBWSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsR0FBRSxlQUFzQyxFQWdCL0U7SUFFTSxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsaUJBQWlCLFVBTTdEO0lBRUQsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBaUJ0RDtJQUVELGNBQWMsSUFBSSxJQUFJLENBWXJCO0lBRUQsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUUvQjtJQUVNLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLGNBQWMsQ0FVbkQ7SUFFRCxRQUFRLElBQUk7UUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDO1FBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQztRQUFDLGVBQWUsRUFBRSxNQUFNLENBQUM7UUFBQyxXQUFXLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0E0QnRHO0NBQ0YifQ==
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlcl9zY29yaW5nLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcGVlci1tYW5hZ2VyL3BlZXJfc2NvcmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUdMLEtBQUssZUFBZSxFQUlyQixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWhELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBdUJqRCxvQkFBWSxjQUFjO0lBQ3hCLE1BQU0sSUFBQTtJQUNOLFVBQVUsSUFBQTtJQUNWLE9BQU8sSUFBQTtDQUNSO0FBaUJELHFCQUFhLFdBQVc7SUFhcEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZO0lBWi9CLE9BQU8sQ0FBQyxNQUFNLENBQW9DO0lBQ2xELE9BQU8sQ0FBQyxNQUFNLENBQWtDO0lBQ2hELE9BQU8sQ0FBQyxjQUFjLENBQWtDO0lBQ3hELE9BQU8sQ0FBQyxhQUFhLENBQWE7SUFDbEMsT0FBTyxDQUFDLFdBQVcsQ0FBTztJQUMxQixhQUFhLEVBQUU7U0FBRyxHQUFHLElBQUksaUJBQWlCLEdBQUcsTUFBTTtLQUFFLENBQUM7SUFFdEQsT0FBTyxDQUFDLGdCQUFnQixDQUFnQjtJQUV4QyxZQUNFLE1BQU0sRUFBRSxTQUFTLEVBQ2pCLFNBQVMsR0FBRSxlQUFzQyxFQUNoQyxZQUFZLEdBQUUsWUFBaUMsRUFpQmpFO0lBRU0sWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixVQU03RDtJQUVELFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEdBQUcsTUFBTSxDQWlCdEQ7SUFFRCxjQUFjLElBQUksSUFBSSxDQWlCckI7SUFFRCx5RkFBeUY7SUFDekYsY0FBYyxJQUFJLElBQUksQ0FHckI7SUFFRCxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBRy9CO0lBRUQsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUUvQjtJQUVNLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLGNBQWMsQ0FVbkQ7SUFFRCxRQUFRLElBQUk7UUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDO1FBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQztRQUFDLGVBQWUsRUFBRSxNQUFNLENBQUM7UUFBQyxXQUFXLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0E0QnRHO0NBQ0YifQ==
@@ -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;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"}
1
+ {"version":3,"file":"peer_scoring.d.ts","sourceRoot":"","sources":["../../../src/services/peer-manager/peer_scoring.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,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;AAiBD,qBAAa,WAAW;IAapB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAZ/B,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,YACE,MAAM,EAAE,SAAS,EACjB,SAAS,GAAE,eAAsC,EAChC,YAAY,GAAE,YAAiC,EAiBjE;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,CAiBrB;IAED,yFAAyF;IACzF,cAAc,IAAI,IAAI,CAGrB;IAED,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAG/B;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,5 +1,6 @@
1
1
  import { median } from '@aztec/foundation/collection';
2
2
  import { createLogger } from '@aztec/foundation/log';
3
+ import { DateProvider } from '@aztec/foundation/timer';
3
4
  import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
4
5
  import { Attributes, Metrics, createUpDownCounterWithDefault, getTelemetryClient } from '@aztec/telemetry-client';
5
6
  /**
@@ -39,15 +40,23 @@ export var PeerScoreState = /*#__PURE__*/ function(PeerScoreState) {
39
40
  */ // TODO: move into config / constants
40
41
  const MIN_SCORE_BEFORE_BAN = -100;
41
42
  const MIN_SCORE_BEFORE_DISCONNECT = -50;
43
+ const SCORE_CLEANUP_THRESHOLD = 0.1;
42
44
  export class PeerScoring {
43
- logger = createLogger('p2p:peer-scoring');
44
- scores = new Map();
45
- lastUpdateTime = new Map();
46
- decayInterval = 1000 * 60;
47
- decayFactor = 0.9;
45
+ dateProvider;
46
+ logger;
47
+ scores;
48
+ lastUpdateTime;
49
+ decayInterval;
50
+ decayFactor;
48
51
  peerPenalties;
49
52
  peerStateCounter;
50
- constructor(config, telemetry = getTelemetryClient()){
53
+ constructor(config, telemetry = getTelemetryClient(), dateProvider = new DateProvider()){
54
+ this.dateProvider = dateProvider;
55
+ this.logger = createLogger('p2p:peer-scoring');
56
+ this.scores = new Map();
57
+ this.lastUpdateTime = new Map();
58
+ this.decayInterval = 1000 * 60;
59
+ this.decayFactor = 0.9;
51
60
  const orderedValues = config.peerPenaltyValues?.sort((a, b)=>a - b);
52
61
  this.peerPenalties = {
53
62
  [PeerErrorSeverity.HighToleranceError]: orderedValues?.[0] ?? DefaultPeerPenalties[PeerErrorSeverity.HighToleranceError],
@@ -71,7 +80,7 @@ export class PeerScoring {
71
80
  return newScore;
72
81
  }
73
82
  updateScore(peerId, scoreDelta) {
74
- const currentTime = Date.now();
83
+ const currentTime = this.dateProvider.now();
75
84
  const lastUpdate = this.lastUpdateTime.get(peerId) || currentTime;
76
85
  const timePassed = currentTime - lastUpdate;
77
86
  const decayPeriods = Math.floor(timePassed / this.decayInterval);
@@ -85,18 +94,31 @@ export class PeerScoring {
85
94
  return currentScore;
86
95
  }
87
96
  decayAllScores() {
88
- const currentTime = Date.now();
97
+ const currentTime = this.dateProvider.now();
89
98
  for (const [peerId, lastUpdate] of this.lastUpdateTime.entries()){
90
99
  const timePassed = currentTime - lastUpdate;
91
100
  const decayPeriods = Math.floor(timePassed / this.decayInterval);
92
101
  if (decayPeriods > 0) {
93
102
  let score = this.scores.get(peerId) || 0;
94
103
  score *= Math.pow(this.decayFactor, decayPeriods);
95
- this.scores.set(peerId, score);
96
- this.lastUpdateTime.set(peerId, currentTime);
104
+ if (Math.abs(score) < SCORE_CLEANUP_THRESHOLD) {
105
+ this.scores.delete(peerId);
106
+ this.lastUpdateTime.delete(peerId);
107
+ } else {
108
+ this.scores.set(peerId, score);
109
+ this.lastUpdateTime.set(peerId, currentTime);
110
+ }
97
111
  }
98
112
  }
99
113
  }
114
+ /** Resets all peer scores. Useful for benchmarks to prevent cross-case contamination. */ resetAllScores() {
115
+ this.scores.clear();
116
+ this.lastUpdateTime.clear();
117
+ }
118
+ removePeer(peerId) {
119
+ this.scores.delete(peerId);
120
+ this.lastUpdateTime.delete(peerId);
121
+ }
100
122
  getScore(peerId) {
101
123
  return this.scores.get(peerId) || 0;
102
124
  }
@@ -2,27 +2,25 @@ import { type Logger } from '@aztec/foundation/log';
2
2
  import { DateProvider } from '@aztec/foundation/timer';
3
3
  import { Tx } from '@aztec/stdlib/tx';
4
4
  import type { PeerId } from '@libp2p/interface';
5
- import type { IMissingTxsTracker } from '../../tx_collection/missing_txs_tracker.js';
5
+ import type { IRequestTracker } from '../../tx_collection/request_tracker.js';
6
6
  import { type BlockTxsSource } from '.././protocols/index.js';
7
7
  import type { BatchTxRequesterLibP2PService, BatchTxRequesterOptions } from './interface.js';
8
8
  export declare class BatchTxRequester {
9
+ private readonly requestTracker;
9
10
  private readonly blockTxsSource;
10
11
  private readonly pinnedPeer;
11
- private readonly timeoutMs;
12
12
  private readonly p2pService;
13
13
  private readonly logger;
14
- private readonly dateProvider;
15
14
  private readonly opts;
16
15
  private readonly peers;
17
16
  private readonly txsMetadata;
18
- private readonly deadline;
19
17
  private readonly smartRequesterSemaphore;
20
18
  private readonly txQueue;
21
19
  private readonly txValidator;
22
20
  private readonly smartParallelWorkerCount;
23
21
  private readonly dumbParallelWorkerCount;
24
22
  private readonly txBatchSize;
25
- constructor(missingTxsTracker: IMissingTxsTracker, 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);
26
24
  run(): AsyncGenerator<Tx, Tx | undefined, unknown>;
27
25
  static collectAllTxs(generator: AsyncGenerator<Tx, Tx | undefined, unknown>): Promise<Tx[]>;
28
26
  private pinnedPeerRequester;
@@ -35,14 +33,19 @@ export declare class BatchTxRequester {
35
33
  private handleSuccessResponseFromPeer;
36
34
  private handleReceivedTxs;
37
35
  private decideIfPeerIsSmart;
38
- 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;
39
43
  private peerHasSomeTxsWeAreMissing;
40
44
  private markTxsPeerHas;
41
45
  private extractHashesPeerHasFromResponse;
42
46
  private makeRoundRobinIndexer;
43
- private fetchedAllTxs;
44
47
  private shouldStop;
45
48
  private unlockSmartRequesterSemaphores;
46
49
  private sleepClampedToDeadline;
47
50
  }
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hfdHhfcmVxdWVzdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9iYXRjaC10eC1yZXF1ZXN0ZXIvYmF0Y2hfdHhfcmVxdWVzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsWUFBWSxFQUFrQixNQUFNLHlCQUF5QixDQUFDO0FBRXZFLE9BQU8sRUFBRSxFQUFFLEVBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFFdkQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVyRixPQUFPLEVBQXFDLEtBQUssY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFRakcsT0FBTyxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsdUJBQXVCLEVBQXlCLE1BQU0sZ0JBQWdCLENBQUM7QUFzQnBILHFCQUFhLGdCQUFnQjtJQUMzQixPQUFPLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBaUI7SUFDaEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQXFCO0lBQ2hELE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFTO0lBQ25DLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFnQztJQUMzRCxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBUztJQUNoQyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBZTtJQUM1QyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBMEI7SUFDL0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQWtCO0lBQ3hDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUF3QjtJQUNwRCxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBUztJQUNsQyxPQUFPLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFhO0lBQ3JELE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFzQjtJQUM5QyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBMkI7SUFDdkQsT0FBTyxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBUztJQUNsRCxPQUFPLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFTO0lBQ2pELE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFTO0lBRXJDLFlBQ0UsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQ3JDLGNBQWMsRUFBRSxjQUFjLEVBQzlCLFVBQVUsRUFBRSxNQUFNLEdBQUcsU0FBUyxFQUM5QixTQUFTLEVBQUUsTUFBTSxFQUNqQixVQUFVLEVBQUUsNkJBQTZCLEVBQ3pDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFDZixZQUFZLENBQUMsRUFBRSxZQUFZLEVBQzNCLElBQUksQ0FBQyxFQUFFLHVCQUF1QixFQWlDL0I7SUFLYSxHQUFHLElBQUksY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQTZDL0Q7SUFLRCxPQUFvQixhQUFhLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FTdkc7WUFVYSxtQkFBbUI7WUFrRG5CLGFBQWE7WUFrRGIsY0FBYztZQWdEZCxjQUFjO1lBK0JkLGVBQWU7WUEwRWYsY0FBYztJQW1DNUIsT0FBTyxDQUFDLDBCQUEwQjtZQWlCcEIsNkJBQTZCO1lBWTdCLGlCQUFpQjtJQXFEL0IsT0FBTyxDQUFDLG1CQUFtQjtJQWdDM0IsT0FBTyxDQUFDLG9CQUFvQjtJQU01QixPQUFPLENBQUMsMEJBQTBCO0lBS2xDLE9BQU8sQ0FBQyxjQUFjO0lBTXRCLE9BQU8sQ0FBQyxnQ0FBZ0M7SUFnQnhDLE9BQU8sQ0FBQyxxQkFBcUI7SUF1QjdCLE9BQU8sQ0FBQyxhQUFhO0lBYXJCLE9BQU8sQ0FBQyxVQUFVO0lBYWxCLE9BQU8sQ0FBQyw4QkFBOEI7WUFVeEIsc0JBQXNCO0NBT3JDIn0=
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hfdHhfcmVxdWVzdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9iYXRjaC10eC1yZXF1ZXN0ZXIvYmF0Y2hfdHhfcmVxdWVzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdkQsT0FBTyxFQUFFLEVBQUUsRUFBbUIsTUFBTSxrQkFBa0IsQ0FBQztBQUV2RCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU5RSxPQUFPLEVBQXFDLEtBQUssY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFRakcsT0FBTyxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsdUJBQXVCLEVBQXlCLE1BQU0sZ0JBQWdCLENBQUM7QUFzQnBILHFCQUFhLGdCQUFnQjtJQUMzQixPQUFPLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBa0I7SUFDakQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQWlCO0lBQ2hELE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFxQjtJQUNoRCxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBZ0M7SUFDM0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQVM7SUFDaEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQTBCO0lBQy9DLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFrQjtJQUN4QyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBd0I7SUFDcEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBYTtJQUNyRCxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBc0I7SUFDOUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQTJCO0lBQ3ZELE9BQU8sQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQVM7SUFDbEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBUztJQUNqRCxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBUztJQUVyQyxZQUNFLGNBQWMsRUFBRSxlQUFlLEVBQy9CLGNBQWMsRUFBRSxjQUFjLEVBQzlCLFVBQVUsRUFBRSxNQUFNLEdBQUcsU0FBUyxFQUM5QixVQUFVLEVBQUUsNkJBQTZCLEVBQ3pDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFDZixZQUFZLENBQUMsRUFBRSxZQUFZLEVBQzNCLElBQUksQ0FBQyxFQUFFLHVCQUF1QixFQStCL0I7SUFLYSxHQUFHLElBQUksY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQW1DL0Q7SUFLRCxPQUFvQixhQUFhLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FTdkc7WUFVYSxtQkFBbUI7WUFrRG5CLGFBQWE7WUFrRGIsY0FBYztZQWdEZCxjQUFjO1lBK0JkLGVBQWU7WUE0RWYsY0FBYztJQW1DNUIsT0FBTyxDQUFDLDBCQUEwQjtZQTBCcEIsNkJBQTZCO1lBWTdCLGlCQUFpQjtJQXdEL0IsT0FBTyxDQUFDLG1CQUFtQjtJQStCM0I7Ozs7O09BS0c7SUFDSCxPQUFPLENBQUMseUJBQXlCO0lBU2pDLE9BQU8sQ0FBQywwQkFBMEI7SUFRbEMsT0FBTyxDQUFDLGNBQWM7SUFNdEIsT0FBTyxDQUFDLGdDQUFnQztJQWdCeEMsT0FBTyxDQUFDLHFCQUFxQjtJQXdCN0IsT0FBTyxDQUFDLFVBQVU7SUFZbEIsT0FBTyxDQUFDLDhCQUE4QjtZQVV4QixzQkFBc0I7Q0FNckMifQ==
@@ -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,EAAmB,MAAM,kBAAkB,CAAC;AAEvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAErF,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,iBAAiB,EAAE,kBAAkB,EACrC,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,EAiC/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;YAkDb,cAAc;YAgDd,cAAc;YA+Bd,eAAe;YA0Ef,cAAc;IAmC5B,OAAO,CAAC,0BAA0B;YAiBpB,6BAA6B;YAY7B,iBAAiB;IAqD/B,OAAO,CAAC,mBAAmB;IAgC3B,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;IAwD/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,9 +1,8 @@
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
8
  import { ReqRespSubProtocol } from '.././interface.js';
@@ -30,78 +29,64 @@ import { BatchRequestTxValidator } from './tx_validator.js';
30
29
  * - Bad peer:
31
30
  * - Is the peer which was unable to send us successful response N times in a row
32
31
  * */ export class BatchTxRequester {
32
+ requestTracker;
33
33
  blockTxsSource;
34
34
  pinnedPeer;
35
- timeoutMs;
36
35
  p2pService;
37
36
  logger;
38
- dateProvider;
39
37
  opts;
40
38
  peers;
41
39
  txsMetadata;
42
- deadline;
43
40
  smartRequesterSemaphore;
44
41
  txQueue;
45
42
  txValidator;
46
43
  smartParallelWorkerCount;
47
44
  dumbParallelWorkerCount;
48
45
  txBatchSize;
49
- constructor(missingTxsTracker, blockTxsSource, pinnedPeer, timeoutMs, p2pService, logger, dateProvider, opts){
46
+ constructor(requestTracker, blockTxsSource, pinnedPeer, p2pService, logger, dateProvider, opts){
47
+ this.requestTracker = requestTracker;
50
48
  this.blockTxsSource = blockTxsSource;
51
49
  this.pinnedPeer = pinnedPeer;
52
- this.timeoutMs = timeoutMs;
53
50
  this.p2pService = p2pService;
54
51
  this.logger = logger ?? createLogger('p2p:reqresp_batch');
55
- this.dateProvider = dateProvider ?? new DateProvider();
56
52
  this.opts = opts ?? {};
57
53
  this.smartParallelWorkerCount = this.opts.smartParallelWorkerCount ?? DEFAULT_BATCH_TX_REQUESTER_SMART_PARALLEL_WORKER_COUNT;
58
54
  this.dumbParallelWorkerCount = this.opts.dumbParallelWorkerCount ?? DEFAULT_BATCH_TX_REQUESTER_DUMB_PARALLEL_WORKER_COUNT;
59
55
  this.txBatchSize = this.opts.txBatchSize ?? DEFAULT_BATCH_TX_REQUESTER_TX_BATCH_SIZE;
60
- this.deadline = this.dateProvider.now() + this.timeoutMs;
61
56
  this.txQueue = new FifoMemoryQueue(this.logger);
62
57
  this.txValidator = this.opts.txValidator ?? new BatchRequestTxValidator(this.p2pService.txValidatorConfig);
63
58
  if (this.opts.peerCollection) {
64
59
  this.peers = this.opts.peerCollection;
65
60
  } else {
66
61
  const badPeerThreshold = this.opts.badPeerThreshold ?? DEFAULT_BATCH_TX_REQUESTER_BAD_PEER_THRESHOLD;
67
- this.peers = new PeerCollection(this.p2pService.connectionSampler, 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);
68
63
  }
69
- this.txsMetadata = new MissingTxMetadataCollection(missingTxsTracker, this.txBatchSize);
64
+ this.txsMetadata = new MissingTxMetadataCollection(requestTracker, this.txBatchSize);
70
65
  this.smartRequesterSemaphore = this.opts.semaphore ?? new Semaphore(0);
71
66
  }
72
67
  /*
73
68
  * Fetches all missing transactions and yields them one by one
74
69
  * */ async *run() {
75
- // Our timeout is represented in milliseconds but queue expects seconds
76
- // We also want to make sure we wait at least 1 second in case of very low timeouts
77
- const timeoutQueueAfter = Math.max(Math.ceil(this.timeoutMs / 1_000), 1);
78
70
  try {
79
71
  if (this.txsMetadata.getMissingTxHashes().size === 0) {
80
72
  return undefined;
81
73
  }
82
- // Start workers in background
83
- const workersPromise = executeTimeout(()=>Promise.allSettled([
84
- this.smartRequester(),
85
- this.dumbRequester(),
86
- this.pinnedPeerRequester()
87
- ]), 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(()=>{
88
80
  this.txQueue.end();
89
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.
90
84
  while(true){
91
- const tx = await this.txQueue.get(timeoutQueueAfter);
92
- // null indicates that the queue has ended
85
+ const tx = await this.txQueue.get();
93
86
  if (tx === null) {
94
87
  break;
95
88
  }
96
89
  yield tx;
97
- if (this.shouldStop()) {
98
- // Drain queue before ending
99
- let remaining;
100
- while((remaining = this.txQueue.getImmediate()) !== undefined){
101
- yield remaining;
102
- }
103
- break;
104
- }
105
90
  }
106
91
  this.unlockSmartRequesterSemaphores();
107
92
  await workersPromise;
@@ -280,7 +265,13 @@ import { BatchRequestTxValidator } from './tx_validator.js';
280
265
  * */ async smartWorkerLoop(pickNextPeer, request, workerIndex) {
281
266
  try {
282
267
  this.logger.trace(`Smart worker ${workerIndex} started`);
283
- 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
+ }
284
275
  this.logger.trace(`Smart worker ${workerIndex} acquired semaphore`);
285
276
  while(!this.shouldStop()){
286
277
  const peerId = pickNextPeer();
@@ -301,7 +292,13 @@ import { BatchRequestTxValidator } from './tx_validator.js';
301
292
  //
302
293
  // When a dumb peer responds with valid txIndices, it gets
303
294
  // promoted to smart and releases the semaphore, waking this worker.
304
- 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
+ }
305
302
  this.logger.debug(`Worker loop smart: acquired next smart peer`);
306
303
  continue;
307
304
  }
@@ -324,11 +321,7 @@ import { BatchRequestTxValidator } from './tx_validator.js';
324
321
  });
325
322
  }
326
323
  } catch (err) {
327
- if (err instanceof TimeoutError) {
328
- this.logger.debug(`Smart worker ${workerIndex} timed out waiting for semaphore`);
329
- } else {
330
- this.logger.error(`Smart worker ${workerIndex} encountered an error: ${err}`);
331
- }
324
+ this.logger.error(`Smart worker ${workerIndex} encountered an error: ${err}`);
332
325
  } finally{
333
326
  this.logger.debug(`Smart worker ${workerIndex} finished`);
334
327
  }
@@ -366,9 +359,17 @@ import { BatchRequestTxValidator } from './tx_validator.js';
366
359
  * - FAILURE and UNKNOWN: We penalise this, if peer has been penalised this way N times they are not queried again
367
360
  * this implies we will query these peers couple of more times and give them a chance to "redeem" themselves before completely ignoring them
368
361
  */ handleFailResponseFromPeer(peerId, responseStatus) {
369
- //TODO: Should we ban these peers?
370
362
  if (responseStatus === ReqRespStatus.FAILURE || responseStatus === ReqRespStatus.UNKNOWN) {
371
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);
372
373
  return;
373
374
  }
374
375
  if (responseStatus === ReqRespStatus.RATE_LIMIT_EXCEEDED) {
@@ -410,6 +411,9 @@ import { BatchRequestTxValidator } from './tx_validator.js';
410
411
  }
411
412
  });
412
413
  if (hasInvalidTx) {
414
+ this.logger.warn(`Penalizing peer ${peerId.toString()} for sending invalid transactions in batch response`, {
415
+ peerId
416
+ });
413
417
  this.peers.penalisePeer(peerId, PeerErrorSeverity.LowToleranceError);
414
418
  } else {
415
419
  // If we have received successful response from the peer, they have "redeemed" themselves and not considered bad anymore
@@ -437,10 +441,9 @@ import { BatchRequestTxValidator } from './tx_validator.js';
437
441
  if (smartPeersAreDisabled) {
438
442
  return;
439
443
  }
440
- // If block response is invalid we still want to query this peer in the future
441
- // Because they sent successful response, so they might become smart peer in the future
442
- // Or send us needed txs
443
- if (!this.isBlockResponseValid(response)) {
444
+ const hasArchiveRootMismatch = this.blockTxsSource.archive.toString() !== response.archiveRoot.toString();
445
+ if (hasArchiveRootMismatch) {
446
+ this.handleArchiveRootMismatch(peerId, response);
444
447
  return;
445
448
  }
446
449
  // We mark peer as "smart" only if they have some txs we are missing
@@ -454,12 +457,22 @@ import { BatchRequestTxValidator } from './tx_validator.js';
454
457
  // Unblock smart workers
455
458
  this.smartRequesterSemaphore.release();
456
459
  }
457
- isBlockResponseValid(response) {
458
- const archiveRootsMatch = this.blockTxsSource.archive.toString() === response.archiveRoot.toString();
459
- const peerHasSomeTxsFromProposal = !response.txIndices.isEmpty();
460
- return archiveRootsMatch && peerHasSomeTxsFromProposal;
460
+ /**
461
+ * Handles an archive root mismatch between local state and peer response.
462
+ *
463
+ * - Response archive is Fr.ZERO (peer pruned proposal, legitimate): marks peer dumb.
464
+ * - Non-zero archive mismatch (malicious response): penalises + marks dumb.
465
+ */ handleArchiveRootMismatch(peerId, response) {
466
+ if (!response.archiveRoot.isZero()) {
467
+ this.peers.penalisePeer(peerId, PeerErrorSeverity.LowToleranceError);
468
+ }
469
+ this.peers.markPeerDumb(peerId);
470
+ this.txsMetadata.clearPeerData(peerId);
461
471
  }
462
472
  peerHasSomeTxsWeAreMissing(_peerId, response) {
473
+ if (response.txIndices.isEmpty()) {
474
+ return false;
475
+ }
463
476
  const txsPeerHas = new Set(this.extractHashesPeerHasFromResponse(response).map((h)=>h.toString()));
464
477
  return this.txsMetadata.getMissingTxHashes().intersection(txsPeerHas).size > 0;
465
478
  }
@@ -500,23 +513,12 @@ import { BatchRequestTxValidator } from './tx_validator.js';
500
513
  };
501
514
  }
502
515
  /*
503
- * @returns true if all missing txs have been fetched */ fetchedAllTxs() {
504
- return this.txsMetadata.getMissingTxHashes().size == 0;
505
- }
506
- /*
507
- * Checks if the BatchTxRequester should stop fetching missing txs
508
- * Conditions for stopping are:
509
- * - There have been no missing transactions to start with
510
- * - All transactions have been fetched
511
- * - The deadline has been hit (no more time to fetch)
512
- * - This process has been cancelled via abortSignal
513
- *
514
- * @returns true if BatchTxRequester should stop, otherwise false*/ shouldStop() {
515
- const aborted = this.opts.abortSignal?.aborted ?? false;
516
- if (aborted) {
516
+ * Checks if the BatchTxRequester should stop fetching missing txs.
517
+ * Delegates to requestTracker which covers: deadline hit, all txs fetched, or external cancellation. */ shouldStop() {
518
+ if (this.requestTracker.checkCancelled()) {
517
519
  this.unlockSmartRequesterSemaphores();
518
520
  }
519
- return aborted || this.fetchedAllTxs() || this.dateProvider.now() > this.deadline;
521
+ return this.requestTracker.checkCancelled();
520
522
  }
521
523
  /*
522
524
  * Helper function which unlocks all smart requester semaphores
@@ -530,10 +532,12 @@ import { BatchRequestTxValidator } from './tx_validator.js';
530
532
  * Sleeps for the given duration, but clamped to the deadline.
531
533
  * This ensures we don't sleep past the deadline.
532
534
  * */ async sleepClampedToDeadline(durationMs) {
533
- const remaining = this.deadline - this.dateProvider.now();
534
- const thereIsTimeRemaining = remaining > 0;
535
- if (thereIsTimeRemaining) {
536
- await sleep(Math.min(durationMs, remaining));
535
+ if (this.requestTracker.checkCancelled()) {
536
+ return;
537
537
  }
538
+ await Promise.race([
539
+ sleep(durationMs),
540
+ this.requestTracker.cancellationToken
541
+ ]);
538
542
  }
539
543
  }