@aztec/p2p 0.0.1-commit.a89ec08 → 0.0.1-commit.aa0c64f

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 (427) hide show
  1. package/README.md +7 -6
  2. package/dest/bootstrap/bootstrap.d.ts +1 -1
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +22 -6
  5. package/dest/client/factory.d.ts +5 -4
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +33 -23
  8. package/dest/client/interface.d.ts +48 -11
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +34 -19
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +105 -44
  13. package/dest/config.d.ts +147 -111
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +78 -32
  16. package/dest/errors/p2p-service.error.d.ts +9 -0
  17. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  18. package/dest/errors/p2p-service.error.js +10 -0
  19. package/dest/errors/reqresp.error.d.ts +9 -16
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +10 -17
  22. package/dest/index.d.ts +1 -2
  23. package/dest/index.d.ts.map +1 -1
  24. package/dest/index.js +0 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +101 -59
  26. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool.js +274 -197
  28. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +224 -65
  31. package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
  32. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/mocks.js +6 -4
  34. package/dest/mem_pools/index.d.ts +1 -2
  35. package/dest/mem_pools/index.d.ts.map +1 -1
  36. package/dest/mem_pools/instrumentation.d.ts +12 -5
  37. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  38. package/dest/mem_pools/instrumentation.js +38 -17
  39. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +1 -5
  40. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +1 -7
  42. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +3 -3
  43. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +6 -6
  45. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +1 -1
  46. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  47. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  48. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  49. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  50. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  51. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  52. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  53. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +39 -9
  54. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  55. package/dest/mem_pools/tx_pool_v2/interfaces.js +3 -1
  56. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +9 -7
  57. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  58. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +13 -6
  59. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +15 -1
  60. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  61. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +55 -41
  62. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +9 -3
  63. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  64. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +20 -6
  65. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +17 -3
  66. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  67. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +225 -118
  68. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -3
  69. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  70. package/dest/msg_validators/attestation_validator/attestation_validator.js +38 -15
  71. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  72. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  73. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  74. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +8 -3
  75. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  76. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +2 -2
  77. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +8 -3
  78. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  79. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +8 -2
  80. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +25 -3
  81. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  82. package/dest/msg_validators/proposal_validator/proposal_validator.js +85 -15
  83. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  84. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  85. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  86. package/dest/msg_validators/tx_validator/allowed_public_setup.js +3 -3
  87. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  88. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  89. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  90. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  91. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  92. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  93. package/dest/msg_validators/tx_validator/data_validator.js +1 -0
  94. package/dest/msg_validators/tx_validator/factory.d.ts +14 -15
  95. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  96. package/dest/msg_validators/tx_validator/factory.js +29 -16
  97. package/dest/msg_validators/tx_validator/gas_validator.d.ts +47 -10
  98. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  99. package/dest/msg_validators/tx_validator/gas_validator.js +65 -48
  100. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  101. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  102. package/dest/msg_validators/tx_validator/index.js +2 -0
  103. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  104. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  105. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  106. package/dest/msg_validators/tx_validator/phases_validator.js +2 -2
  107. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  108. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  109. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  110. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  111. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  112. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  113. package/dest/services/data_store.d.ts +1 -1
  114. package/dest/services/data_store.d.ts.map +1 -1
  115. package/dest/services/data_store.js +5 -5
  116. package/dest/services/discv5/discV5_service.d.ts +13 -2
  117. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  118. package/dest/services/discv5/discV5_service.js +119 -23
  119. package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
  120. package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
  121. package/dest/services/discv5/persisted_enr_store.js +145 -0
  122. package/dest/services/dummy_service.d.ts +15 -15
  123. package/dest/services/dummy_service.d.ts.map +1 -1
  124. package/dest/services/dummy_service.js +15 -16
  125. package/dest/services/encoding.d.ts +19 -6
  126. package/dest/services/encoding.d.ts.map +1 -1
  127. package/dest/services/encoding.js +25 -15
  128. package/dest/services/gossipsub/topic_score_params.d.ts +6 -12
  129. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  130. package/dest/services/gossipsub/topic_score_params.js +4 -14
  131. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  132. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  133. package/dest/services/libp2p/instrumentation.js +14 -0
  134. package/dest/services/libp2p/libp2p_service.d.ts +45 -47
  135. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  136. package/dest/services/libp2p/libp2p_service.js +409 -303
  137. package/dest/services/peer-manager/metrics.d.ts +3 -1
  138. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  139. package/dest/services/peer-manager/metrics.js +6 -0
  140. package/dest/services/peer-manager/peer_manager.d.ts +20 -3
  141. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  142. package/dest/services/peer-manager/peer_manager.js +83 -26
  143. package/dest/services/peer-manager/peer_scoring.d.ts +34 -2
  144. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  145. package/dest/services/peer-manager/peer_scoring.js +102 -13
  146. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +4 -8
  147. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  148. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +94 -122
  149. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
  150. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  151. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  152. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  153. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  154. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
  155. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  156. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
  157. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  158. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  159. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  160. package/dest/services/reqresp/config.d.ts +15 -3
  161. package/dest/services/reqresp/config.d.ts.map +1 -1
  162. package/dest/services/reqresp/config.js +11 -0
  163. package/dest/services/reqresp/interface.d.ts +16 -18
  164. package/dest/services/reqresp/interface.d.ts.map +1 -1
  165. package/dest/services/reqresp/interface.js +10 -20
  166. package/dest/services/reqresp/metrics.d.ts +1 -1
  167. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  168. package/dest/services/reqresp/metrics.js +0 -1
  169. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  170. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  171. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  172. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  173. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  174. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
  175. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
  176. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  177. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
  178. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  179. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  180. package/dest/services/reqresp/protocols/index.js +0 -1
  181. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  182. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  183. package/dest/services/reqresp/protocols/tx.js +1 -3
  184. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  185. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  186. package/dest/services/reqresp/rate-limiter/rate_limits.js +3 -13
  187. package/dest/services/reqresp/reqresp.d.ts +7 -29
  188. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  189. package/dest/services/reqresp/reqresp.js +60 -209
  190. package/dest/services/service.d.ts +25 -12
  191. package/dest/services/service.d.ts.map +1 -1
  192. package/dest/services/tx_collection/config.d.ts +2 -23
  193. package/dest/services/tx_collection/config.d.ts.map +1 -1
  194. package/dest/services/tx_collection/config.js +2 -55
  195. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  196. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  197. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  198. package/dest/services/tx_collection/index.d.ts +2 -3
  199. package/dest/services/tx_collection/index.d.ts.map +1 -1
  200. package/dest/services/tx_collection/index.js +0 -1
  201. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  202. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  203. package/dest/services/tx_collection/instrumentation.js +0 -2
  204. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  205. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  206. package/dest/services/tx_collection/request_tracker.js +84 -0
  207. package/dest/services/tx_collection/tx_collection.d.ts +36 -55
  208. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  209. package/dest/services/tx_collection/tx_collection.js +275 -119
  210. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  211. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  212. package/dest/services/tx_collection/tx_source.d.ts +1 -1
  213. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  214. package/dest/services/tx_collection/tx_source.js +4 -1
  215. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  216. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  217. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  218. package/dest/services/tx_provider.d.ts +3 -1
  219. package/dest/services/tx_provider.d.ts.map +1 -1
  220. package/dest/services/tx_provider.js +3 -0
  221. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  222. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  223. package/dest/test-helpers/make-test-p2p-clients.js +5 -2
  224. package/dest/test-helpers/mock-pubsub.d.ts +23 -9
  225. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  226. package/dest/test-helpers/mock-pubsub.js +44 -44
  227. package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
  228. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  229. package/dest/test-helpers/reqresp-nodes.js +16 -18
  230. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  231. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  232. package/dest/test-helpers/test_tx_provider.js +3 -0
  233. package/dest/test-helpers/testbench-utils.d.ts +15 -14
  234. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  235. package/dest/test-helpers/testbench-utils.js +47 -14
  236. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  237. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  238. package/dest/testbench/p2p_client_testbench_worker.js +102 -40
  239. package/dest/testbench/worker_client_manager.d.ts +10 -6
  240. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  241. package/dest/testbench/worker_client_manager.js +53 -10
  242. package/dest/util.d.ts +12 -7
  243. package/dest/util.d.ts.map +1 -1
  244. package/dest/util.js +35 -14
  245. package/dest/versioning.d.ts +3 -6
  246. package/dest/versioning.d.ts.map +1 -1
  247. package/dest/versioning.js +3 -24
  248. package/package.json +16 -16
  249. package/src/bootstrap/bootstrap.ts +17 -3
  250. package/src/client/factory.ts +50 -25
  251. package/src/client/interface.ts +44 -17
  252. package/src/client/p2p_client.ts +125 -77
  253. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  254. package/src/config.ts +156 -44
  255. package/src/errors/p2p-service.error.ts +11 -0
  256. package/src/errors/reqresp.error.ts +13 -19
  257. package/src/index.ts +0 -1
  258. package/src/mem_pools/attestation_pool/attestation_pool.ts +329 -243
  259. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +244 -69
  260. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  261. package/src/mem_pools/index.ts +0 -3
  262. package/src/mem_pools/instrumentation.ts +27 -17
  263. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
  264. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
  265. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +1 -1
  266. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  267. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  268. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  269. package/src/mem_pools/tx_pool_v2/interfaces.ts +38 -8
  270. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +24 -12
  271. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +62 -41
  272. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +23 -6
  273. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +250 -122
  274. package/src/msg_validators/attestation_validator/README.md +1 -1
  275. package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -14
  276. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +15 -7
  277. package/src/msg_validators/proposal_validator/README.md +4 -4
  278. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +15 -3
  279. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +26 -3
  280. package/src/msg_validators/proposal_validator/proposal_validator.ts +95 -12
  281. package/src/msg_validators/tx_validator/README.md +13 -3
  282. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  283. package/src/msg_validators/tx_validator/allowed_public_setup.ts +3 -3
  284. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  285. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  286. package/src/msg_validators/tx_validator/data_validator.ts +2 -0
  287. package/src/msg_validators/tx_validator/factory.ts +37 -20
  288. package/src/msg_validators/tx_validator/gas_validator.ts +99 -54
  289. package/src/msg_validators/tx_validator/index.ts +2 -0
  290. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  291. package/src/msg_validators/tx_validator/phases_validator.ts +2 -2
  292. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  293. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  294. package/src/services/data_store.ts +5 -13
  295. package/src/services/discv5/discV5_service.ts +126 -14
  296. package/src/services/discv5/persisted_enr_store.ts +158 -0
  297. package/src/services/dummy_service.ts +20 -39
  298. package/src/services/encoding.ts +28 -20
  299. package/src/services/gossipsub/README.md +33 -11
  300. package/src/services/gossipsub/topic_score_params.ts +9 -18
  301. package/src/services/libp2p/instrumentation.ts +14 -0
  302. package/src/services/libp2p/libp2p_service.ts +457 -341
  303. package/src/services/peer-manager/metrics.ts +7 -0
  304. package/src/services/peer-manager/peer_manager.ts +91 -25
  305. package/src/services/peer-manager/peer_scoring.ts +102 -8
  306. package/src/services/reqresp/README.md +2 -37
  307. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  308. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +91 -137
  309. package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
  310. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  311. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  312. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  313. package/src/services/reqresp/config.ts +19 -2
  314. package/src/services/reqresp/interface.ts +21 -47
  315. package/src/services/reqresp/metrics.ts +0 -1
  316. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  317. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
  318. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
  319. package/src/services/reqresp/protocols/index.ts +0 -1
  320. package/src/services/reqresp/protocols/tx.ts +1 -3
  321. package/src/services/reqresp/rate-limiter/rate_limits.ts +3 -13
  322. package/src/services/reqresp/reqresp.ts +71 -252
  323. package/src/services/service.ts +31 -28
  324. package/src/services/tx_collection/config.ts +3 -80
  325. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  326. package/src/services/tx_collection/index.ts +1 -6
  327. package/src/services/tx_collection/instrumentation.ts +1 -7
  328. package/src/services/tx_collection/request_tracker.ts +127 -0
  329. package/src/services/tx_collection/tx_collection.ts +331 -176
  330. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  331. package/src/services/tx_collection/tx_source.ts +2 -1
  332. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  333. package/src/services/tx_provider.ts +5 -0
  334. package/src/test-helpers/make-test-p2p-clients.ts +4 -1
  335. package/src/test-helpers/mock-pubsub.ts +46 -60
  336. package/src/test-helpers/reqresp-nodes.ts +13 -23
  337. package/src/test-helpers/test_tx_provider.ts +5 -0
  338. package/src/test-helpers/testbench-utils.ts +62 -28
  339. package/src/testbench/p2p_client_testbench_worker.ts +110 -57
  340. package/src/testbench/worker_client_manager.ts +61 -21
  341. package/src/util.ts +33 -18
  342. package/src/versioning.ts +3 -33
  343. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  344. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  345. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -304
  346. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  347. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  348. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  349. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  350. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  351. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  352. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  353. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  354. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  355. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  356. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  357. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  358. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  359. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  360. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -123
  361. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  362. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  363. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  364. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  365. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  366. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  367. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  368. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  369. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  370. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  371. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  372. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  373. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  374. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  375. package/dest/mem_pools/tx_pool/index.js +0 -2
  376. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  377. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  378. package/dest/mem_pools/tx_pool/priority.js +0 -15
  379. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  380. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  381. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  382. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  383. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  384. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -402
  385. package/dest/msg_validators/clock_tolerance.d.ts +0 -21
  386. package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
  387. package/dest/msg_validators/clock_tolerance.js +0 -37
  388. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  389. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  390. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  391. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  392. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  393. package/dest/services/reqresp/protocols/block.js +0 -32
  394. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -54
  395. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  396. package/dest/services/tx_collection/fast_tx_collection.js +0 -327
  397. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  398. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  399. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  400. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
  401. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  402. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  403. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  404. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  405. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  406. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -345
  407. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  408. package/src/mem_pools/tx_pool/README.md +0 -270
  409. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  410. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  411. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  412. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -163
  413. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  414. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  415. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  416. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  417. package/src/mem_pools/tx_pool/index.ts +0 -2
  418. package/src/mem_pools/tx_pool/priority.ts +0 -20
  419. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  420. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -321
  421. package/src/msg_validators/clock_tolerance.ts +0 -51
  422. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  423. package/src/services/reqresp/protocols/block.ts +0 -37
  424. package/src/services/tx_collection/fast_tx_collection.ts +0 -387
  425. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
  426. package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
  427. package/src/services/tx_collection/slow_tx_collection.ts +0 -266
@@ -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,12 @@ export declare class BatchTxRequester {
35
33
  private handleSuccessResponseFromPeer;
36
34
  private handleReceivedTxs;
37
35
  private decideIfPeerIsSmart;
38
- private isBlockResponseValid;
39
36
  private peerHasSomeTxsWeAreMissing;
40
37
  private markTxsPeerHas;
41
38
  private extractHashesPeerHasFromResponse;
42
39
  private makeRoundRobinIndexer;
43
- private fetchedAllTxs;
44
40
  private shouldStop;
45
41
  private unlockSmartRequesterSemaphores;
46
42
  private sleepClampedToDeadline;
47
43
  }
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hfdHhfcmVxdWVzdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9iYXRjaC10eC1yZXF1ZXN0ZXIvYmF0Y2hfdHhfcmVxdWVzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsWUFBWSxFQUFrQixNQUFNLHlCQUF5QixDQUFDO0FBRXZFLE9BQU8sRUFBRSxFQUFFLEVBQW1CLE1BQU0sa0JBQWtCLENBQUM7QUFFdkQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHaEQsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVyRixPQUFPLEVBQXFDLEtBQUssY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFRakcsT0FBTyxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsdUJBQXVCLEVBQXlCLE1BQU0sZ0JBQWdCLENBQUM7QUFzQnBILHFCQUFhLGdCQUFnQjtJQUMzQixPQUFPLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBaUI7SUFDaEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQXFCO0lBQ2hELE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFTO0lBQ25DLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFnQztJQUMzRCxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBUztJQUNoQyxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBZTtJQUM1QyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBMEI7SUFDL0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQWtCO0lBQ3hDLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUF3QjtJQUNwRCxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBUztJQUNsQyxPQUFPLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFhO0lBQ3JELE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFzQjtJQUM5QyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBMkI7SUFDdkQsT0FBTyxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBUztJQUNsRCxPQUFPLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFTO0lBQ2pELE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFTO0lBRXJDLFlBQ0UsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQ3JDLGNBQWMsRUFBRSxjQUFjLEVBQzlCLFVBQVUsRUFBRSxNQUFNLEdBQUcsU0FBUyxFQUM5QixTQUFTLEVBQUUsTUFBTSxFQUNqQixVQUFVLEVBQUUsNkJBQTZCLEVBQ3pDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFDZixZQUFZLENBQUMsRUFBRSxZQUFZLEVBQzNCLElBQUksQ0FBQyxFQUFFLHVCQUF1QixFQWtDL0I7SUFLYSxHQUFHLElBQUksY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQTZDL0Q7SUFLRCxPQUFvQixhQUFhLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FTdkc7WUFVYSxtQkFBbUI7WUFrRG5CLGFBQWE7WUF5RGIsY0FBYztZQWdEZCxjQUFjO1lBd0NkLGVBQWU7WUFrRmYsY0FBYztJQW1DNUIsT0FBTyxDQUFDLDBCQUEwQjtZQWlCcEIsNkJBQTZCO1lBWTdCLGlCQUFpQjtJQXFEL0IsT0FBTyxDQUFDLG1CQUFtQjtJQWtDM0IsT0FBTyxDQUFDLG9CQUFvQjtJQU01QixPQUFPLENBQUMsMEJBQTBCO0lBS2xDLE9BQU8sQ0FBQyxjQUFjO0lBTXRCLE9BQU8sQ0FBQyxnQ0FBZ0M7SUFnQnhDLE9BQU8sQ0FBQyxxQkFBcUI7SUF1QjdCLE9BQU8sQ0FBQyxhQUFhO0lBYXJCLE9BQU8sQ0FBQyxVQUFVO0lBYWxCLE9BQU8sQ0FBQyw4QkFBOEI7WUFVeEIsc0JBQXNCO0NBT3JDIn0=
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hfdHhfcmVxdWVzdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9iYXRjaC10eC1yZXF1ZXN0ZXIvYmF0Y2hfdHhfcmVxdWVzdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFdkQsT0FBTyxFQUFFLEVBQUUsRUFBcUMsTUFBTSxrQkFBa0IsQ0FBQztBQUV6RSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdoRCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU5RSxPQUFPLEVBQXFDLEtBQUssY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFRakcsT0FBTyxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsdUJBQXVCLEVBQXlCLE1BQU0sZ0JBQWdCLENBQUM7QUFzQnBILHFCQUFhLGdCQUFnQjtJQUMzQixPQUFPLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBa0I7SUFDakQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQWlCO0lBQ2hELE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFxQjtJQUNoRCxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBZ0M7SUFDM0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQVM7SUFDaEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQTBCO0lBQy9DLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFrQjtJQUN4QyxPQUFPLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBd0I7SUFDcEQsT0FBTyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBYTtJQUNyRCxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBc0I7SUFDOUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQWM7SUFDMUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyx3QkFBd0IsQ0FBUztJQUNsRCxPQUFPLENBQUMsUUFBUSxDQUFDLHVCQUF1QixDQUFTO0lBQ2pELE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFTO0lBRXJDLFlBQ0UsY0FBYyxFQUFFLGVBQWUsRUFDL0IsY0FBYyxFQUFFLGNBQWMsRUFDOUIsVUFBVSxFQUFFLE1BQU0sR0FBRyxTQUFTLEVBQzlCLFVBQVUsRUFBRSw2QkFBNkIsRUFDekMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUNmLFlBQVksQ0FBQyxFQUFFLFlBQVksRUFDM0IsSUFBSSxDQUFDLEVBQUUsdUJBQXVCLEVBK0IvQjtJQUthLEdBQUcsSUFBSSxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBbUMvRDtJQUtELE9BQW9CLGFBQWEsQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLE9BQU8sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQVN2RztZQVVhLG1CQUFtQjtZQWtEbkIsYUFBYTtZQWtEYixjQUFjO1lBZ0RkLGNBQWM7WUErQmQsZUFBZTtZQTRFZixjQUFjO0lBNkM1QixPQUFPLENBQUMsMEJBQTBCO1lBc0JwQiw2QkFBNkI7WUFZN0IsaUJBQWlCO0lBd0QvQixPQUFPLENBQUMsbUJBQW1CO0lBZ0MzQixPQUFPLENBQUMsMEJBQTBCO0lBUWxDLE9BQU8sQ0FBQyxjQUFjO0lBTXRCLE9BQU8sQ0FBQyxnQ0FBZ0M7SUFVeEMsT0FBTyxDQUFDLHFCQUFxQjtJQXdCN0IsT0FBTyxDQUFDLFVBQVU7SUFZbEIsT0FBTyxDQUFDLDhCQUE4QjtZQVV4QixzQkFBc0I7Q0FNckMifQ==
@@ -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;AAGhD,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,EAkC/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,EAAqC,MAAM,kBAAkB,CAAC;AAEzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD,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,CAAc;IAC1C,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;IA6C5B,OAAO,CAAC,0BAA0B;YAsBpB,6BAA6B;YAY7B,iBAAiB;IAwD/B,OAAO,CAAC,mBAAmB;IAgC3B,OAAO,CAAC,0BAA0B;IAQlC,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,gCAAgC;IAUxC,OAAO,CAAC,qBAAqB;IAwB7B,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,8BAA8B;YAUxB,sBAAsB;CAMrC"}
@@ -1,19 +1,18 @@
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';
8
+ import { strict as assert } from 'assert';
10
9
  import { ReqRespSubProtocol } from '.././interface.js';
11
10
  import { BlockTxsRequest, BlockTxsResponse } from '.././protocols/index.js';
12
11
  import { ReqRespStatus } from '.././status.js';
13
12
  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
13
  import { MissingTxMetadataCollection } from './missing_txs.js';
15
14
  import { PeerCollection } from './peer_collection.js';
16
- import { BatchRequestTxValidator } from './tx_validator.js';
15
+ import { createBatchRequestTxValidator } from './tx_validator.js';
17
16
  /*
18
17
  * Tries to fetch all missing transaction until deadline is hit.
19
18
  * Transactions are yield by calling run*() method
@@ -31,79 +30,64 @@ import { BatchRequestTxValidator } from './tx_validator.js';
31
30
  * - Bad peer:
32
31
  * - Is the peer which was unable to send us successful response N times in a row
33
32
  * */ export class BatchTxRequester {
33
+ requestTracker;
34
34
  blockTxsSource;
35
35
  pinnedPeer;
36
- timeoutMs;
37
36
  p2pService;
38
37
  logger;
39
- dateProvider;
40
38
  opts;
41
39
  peers;
42
40
  txsMetadata;
43
- deadline;
44
41
  smartRequesterSemaphore;
45
42
  txQueue;
46
43
  txValidator;
47
44
  smartParallelWorkerCount;
48
45
  dumbParallelWorkerCount;
49
46
  txBatchSize;
50
- constructor(missingTxsTracker, blockTxsSource, pinnedPeer, timeoutMs, p2pService, logger, dateProvider, opts){
47
+ constructor(requestTracker, blockTxsSource, pinnedPeer, p2pService, logger, dateProvider, opts){
48
+ this.requestTracker = requestTracker;
51
49
  this.blockTxsSource = blockTxsSource;
52
50
  this.pinnedPeer = pinnedPeer;
53
- this.timeoutMs = timeoutMs;
54
51
  this.p2pService = p2pService;
55
52
  this.logger = logger ?? createLogger('p2p:reqresp_batch');
56
- this.dateProvider = dateProvider ?? new DateProvider();
57
53
  this.opts = opts ?? {};
58
54
  this.smartParallelWorkerCount = this.opts.smartParallelWorkerCount ?? DEFAULT_BATCH_TX_REQUESTER_SMART_PARALLEL_WORKER_COUNT;
59
55
  this.dumbParallelWorkerCount = this.opts.dumbParallelWorkerCount ?? DEFAULT_BATCH_TX_REQUESTER_DUMB_PARALLEL_WORKER_COUNT;
60
56
  this.txBatchSize = this.opts.txBatchSize ?? DEFAULT_BATCH_TX_REQUESTER_TX_BATCH_SIZE;
61
- this.deadline = this.dateProvider.now() + this.timeoutMs;
62
57
  this.txQueue = new FifoMemoryQueue(this.logger);
63
- this.txValidator = this.opts.txValidator ?? new BatchRequestTxValidator(this.p2pService.txValidatorConfig);
58
+ this.txValidator = this.opts.txValidator ?? createBatchRequestTxValidator(this.p2pService.txValidatorConfig);
64
59
  if (this.opts.peerCollection) {
65
60
  this.peers = this.opts.peerCollection;
66
61
  } else {
67
- const initialPeers = this.p2pService.connectionSampler.getPeerListSortedByConnectionCountAsc();
68
62
  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);
63
+ this.peers = new PeerCollection(this.p2pService.connectionSampler, this.pinnedPeer, dateProvider ?? new DateProvider(), badPeerThreshold, this.p2pService.peerScoring);
70
64
  }
71
- this.txsMetadata = new MissingTxMetadataCollection(missingTxsTracker, this.txBatchSize);
65
+ this.txsMetadata = new MissingTxMetadataCollection(requestTracker, this.txBatchSize);
72
66
  this.smartRequesterSemaphore = this.opts.semaphore ?? new Semaphore(0);
73
67
  }
74
68
  /*
75
- * Fetches all missing transactions and yields them one by one
69
+ * Fetches all missing transactions and yields them one by one
76
70
  * */ async *run() {
77
- // Our timeout is represented in milliseconds but queue expects seconds
78
- // We also want to make sure we wait at least 1 second in case of very low timeouts
79
- const timeoutQueueAfter = Math.max(Math.ceil(this.timeoutMs / 1_000), 1);
80
71
  try {
81
72
  if (this.txsMetadata.getMissingTxHashes().size === 0) {
82
73
  return undefined;
83
74
  }
84
- // Start workers in background
85
- const workersPromise = executeTimeout(()=>Promise.allSettled([
86
- this.smartRequester(),
87
- this.dumbRequester(),
88
- this.pinnedPeerRequester()
89
- ]), this.timeoutMs).finally(()=>{
75
+ // Start workers in background. Workers stop themselves via requestTracker.checkCancelled().
76
+ const workersPromise = Promise.allSettled([
77
+ this.smartRequester(),
78
+ this.dumbRequester(),
79
+ this.pinnedPeerRequester()
80
+ ]).finally(()=>{
90
81
  this.txQueue.end();
91
82
  });
83
+ // Yield txs as workers put them on the queue. The queue's end() drains remaining items
84
+ // before returning null, so we don't lose any txs.
92
85
  while(true){
93
- const tx = await this.txQueue.get(timeoutQueueAfter);
94
- // null indicates that the queue has ended
86
+ const tx = await this.txQueue.get();
95
87
  if (tx === null) {
96
88
  break;
97
89
  }
98
90
  yield tx;
99
- if (this.shouldStop()) {
100
- // Drain queue before ending
101
- let remaining;
102
- while((remaining = this.txQueue.getImmediate()) !== undefined){
103
- yield remaining;
104
- }
105
- break;
106
- }
107
91
  }
108
92
  this.unlockSmartRequesterSemaphores();
109
93
  await workersPromise;
@@ -177,7 +161,6 @@ import { BatchRequestTxValidator } from './tx_validator.js';
177
161
  /*
178
162
  * Starts dumb worker loops
179
163
  * */ async dumbRequester() {
180
- const nextPeerIndex = this.makeRoundRobinIndexer();
181
164
  const nextBatchIndex = this.makeRoundRobinIndexer();
182
165
  // Chunk missing tx hashes into batches of txBatchSize, wrapping around to ensure no peer gets less than txBatchSize
183
166
  const txChunks = ()=>{
@@ -205,15 +188,10 @@ import { BatchRequestTxValidator } from './tx_validator.js';
205
188
  txs
206
189
  };
207
190
  };
208
- const nextPeer = ()=>{
209
- const peers = this.peers.getDumbPeersToQuery();
210
- const idx = nextPeerIndex(()=>peers.length);
211
- return idx === undefined ? undefined : peerIdFromString(peers[idx]);
212
- };
213
- const workerCount = Math.min(this.dumbParallelWorkerCount, this.peers.getAllPeers().size);
191
+ const workerCount = this.dumbParallelWorkerCount;
214
192
  const workers = Array.from({
215
193
  length: workerCount
216
- }, (_, index)=>this.dumbWorkerLoop(nextPeer, makeRequest, index + 1));
194
+ }, (_, index)=>this.dumbWorkerLoop(this.peers.nextDumbPeerToQuery.bind(this.peers), makeRequest, index + 1));
217
195
  await Promise.allSettled(workers);
218
196
  }
219
197
  /*
@@ -257,12 +235,6 @@ import { BatchRequestTxValidator } from './tx_validator.js';
257
235
  /*
258
236
  * Starts smart worker loops
259
237
  * */ async smartRequester() {
260
- const nextPeerIndex = this.makeRoundRobinIndexer();
261
- const nextPeer = ()=>{
262
- const peers = this.peers.getSmartPeersToQuery();
263
- const idx = nextPeerIndex(()=>peers.length);
264
- return idx === undefined ? undefined : peerIdFromString(peers[idx]);
265
- };
266
238
  const makeRequest = (pid)=>{
267
239
  const txs = this.txsMetadata.getTxsToRequestFromThePeer(pid);
268
240
  const blockRequest = BlockTxsRequest.fromTxsSourceAndMissingTxs(this.blockTxsSource, txs);
@@ -275,8 +247,8 @@ import { BatchRequestTxValidator } from './tx_validator.js';
275
247
  };
276
248
  };
277
249
  const workers = Array.from({
278
- length: Math.min(this.smartParallelWorkerCount, this.peers.getAllPeers().size)
279
- }, (_, index)=>this.smartWorkerLoop(nextPeer, makeRequest, index + 1));
250
+ length: this.smartParallelWorkerCount
251
+ }, (_, index)=>this.smartWorkerLoop(this.peers.nextSmartPeerToQuery.bind(this.peers), makeRequest, index + 1));
280
252
  await Promise.allSettled(workers);
281
253
  }
282
254
  /*
@@ -294,35 +266,40 @@ import { BatchRequestTxValidator } from './tx_validator.js';
294
266
  * */ async smartWorkerLoop(pickNextPeer, request, workerIndex) {
295
267
  try {
296
268
  this.logger.trace(`Smart worker ${workerIndex} started`);
297
- await executeTimeout((_)=>this.smartRequesterSemaphore.acquire(), this.timeoutMs);
269
+ await Promise.race([
270
+ this.smartRequesterSemaphore.acquire(),
271
+ this.requestTracker.cancellationToken
272
+ ]);
273
+ if (this.requestTracker.checkCancelled()) {
274
+ return;
275
+ }
298
276
  this.logger.trace(`Smart worker ${workerIndex} acquired semaphore`);
299
277
  while(!this.shouldStop()){
300
278
  const peerId = pickNextPeer();
301
279
  const weRanOutOfPeersToQuery = peerId === undefined;
302
280
  if (weRanOutOfPeersToQuery) {
303
281
  this.logger.debug(`Worker loop smart: No more peers to query`);
304
- // If there are no more dumb peers to query then none of our peers can become smart,
305
- // thus we can simply exit this worker
306
- const noMoreDumbPeersToQuery = this.peers.getDumbPeersToQuery().length === 0;
307
- if (noMoreDumbPeersToQuery) {
308
- // These might be either smart peers that will get unblocked after _some time_
309
- const nextSmartPeerDelay = this.peers.getNextSmartPeerAvailabilityDelayMs();
310
- const thereAreSomeRateLimitedSmartPeers = nextSmartPeerDelay !== undefined;
311
- if (thereAreSomeRateLimitedSmartPeers) {
312
- await this.sleepClampedToDeadline(nextSmartPeerDelay);
313
- continue;
314
- }
315
- this.logger.debug(`Worker loop smart: No more smart peers to query killing ${workerIndex}`);
316
- break;
282
+ // If we have rate limited peers wait for them.
283
+ const nextSmartPeerDelay = this.peers.getNextSmartPeerAvailabilityDelayMs();
284
+ const thereAreSomeRateLimitedSmartPeers = nextSmartPeerDelay !== undefined;
285
+ if (thereAreSomeRateLimitedSmartPeers) {
286
+ await this.sleepClampedToDeadline(nextSmartPeerDelay);
287
+ continue;
317
288
  }
318
- // Otherwise there are still some dumb peers that could become smart.
319
289
  // We end up here when all known smart peers became temporarily unavailable via combination of
320
290
  // (bad, in-flight, or rate-limited) or in some weird scenario all current smart peers turn bad which is permanent
321
- // but dumb peers still exist that could become smart.
291
+ // but there are dumb peers that could be promoted
292
+ // or new peer can join as dumb and be promoted later
322
293
  //
323
294
  // When a dumb peer responds with valid txIndices, it gets
324
295
  // promoted to smart and releases the semaphore, waking this worker.
325
- await executeTimeout((_)=>this.smartRequesterSemaphore.acquire(), this.timeoutMs);
296
+ await Promise.race([
297
+ this.smartRequesterSemaphore.acquire(),
298
+ this.requestTracker.cancellationToken
299
+ ]);
300
+ if (this.requestTracker.checkCancelled()) {
301
+ break;
302
+ }
326
303
  this.logger.debug(`Worker loop smart: acquired next smart peer`);
327
304
  continue;
328
305
  }
@@ -345,11 +322,7 @@ import { BatchRequestTxValidator } from './tx_validator.js';
345
322
  });
346
323
  }
347
324
  } catch (err) {
348
- if (err instanceof TimeoutError) {
349
- this.logger.debug(`Smart worker ${workerIndex} timed out waiting for semaphore`);
350
- } else {
351
- this.logger.error(`Smart worker ${workerIndex} encountered an error: ${err}`);
352
- }
325
+ this.logger.error(`Smart worker ${workerIndex} encountered an error: ${err}`);
353
326
  } finally{
354
327
  this.logger.debug(`Smart worker ${workerIndex} finished`);
355
328
  }
@@ -369,6 +342,13 @@ import { BatchRequestTxValidator } from './tx_validator.js';
369
342
  return;
370
343
  }
371
344
  const blockResponse = BlockTxsResponse.fromBuffer(response.data);
345
+ // Validate response. Peers will be penalised by the validator if they send invalid response.
346
+ const isValid = await this.p2pService.validateRequestedBlockTxsConsistency(request, blockResponse, peerId);
347
+ if (!isValid) {
348
+ this.logger.debug(`Peer ${peerId.toString()} sent invalid response`);
349
+ this.handleFailResponseFromPeer(peerId, ReqRespStatus.INTERNAL_ERROR);
350
+ return;
351
+ }
372
352
  await this.handleSuccessResponseFromPeer(peerId, blockResponse);
373
353
  } catch (err) {
374
354
  this.logger.error(`Failed to get valid response from peer ${peerId.toString()}: ${err.message}`, {
@@ -384,16 +364,23 @@ import { BatchRequestTxValidator } from './tx_validator.js';
384
364
  * Handles failed response form the peer
385
365
  * There are 3 scenarios
386
366
  * - RATE_LIMIT_EXCEEDED: We mark this and don't query this peer again for some_time
367
+ * - INTERNAL_ERROR: We use this to cover cases where the request-response consistency validation fails.
387
368
  * - FAILURE and UNKNOWN: We penalise this, if peer has been penalised this way N times they are not queried again
388
369
  * this implies we will query these peers couple of more times and give them a chance to "redeem" themselves before completely ignoring them
389
370
  */ handleFailResponseFromPeer(peerId, responseStatus) {
390
- //TODO: Should we ban these peers?
391
- if (responseStatus === ReqRespStatus.FAILURE || responseStatus === ReqRespStatus.UNKNOWN) {
392
- this.peers.penalisePeer(peerId, PeerErrorSeverity.HighToleranceError);
393
- return;
394
- }
395
- if (responseStatus === ReqRespStatus.RATE_LIMIT_EXCEEDED) {
396
- this.peers.markPeerRateLimitExceeded(peerId);
371
+ switch(responseStatus){
372
+ case ReqRespStatus.RATE_LIMIT_EXCEEDED:
373
+ this.peers.markPeerRateLimitExceeded(peerId);
374
+ return;
375
+ case ReqRespStatus.INTERNAL_ERROR:
376
+ this.peers.markPeerDumb(peerId);
377
+ this.txsMetadata.clearPeerData(peerId);
378
+ return;
379
+ default:
380
+ this.peers.penalisePeer(peerId, PeerErrorSeverity.HighToleranceError);
381
+ this.peers.markPeerDumb(peerId);
382
+ this.txsMetadata.clearPeerData(peerId);
383
+ return;
397
384
  }
398
385
  }
399
386
  /*
@@ -409,16 +396,16 @@ import { BatchRequestTxValidator } from './tx_validator.js';
409
396
  * Handles received txs.
410
397
  * Transactions are validated and then put on async queue
411
398
  * to be yielded by main running loop
412
- * */ async handleReceivedTxs(peerId, txs) {
399
+ */ async handleReceivedTxs(peerId, txs) {
413
400
  const newTxs = txs.filter((tx)=>!this.txsMetadata.alreadyFetched(tx.txHash));
414
401
  if (newTxs.length === 0) {
415
402
  return;
416
403
  }
417
- //TODO: this validation can be slow, maybe spawn worker just for validation
404
+ // TODO: this validation can be slow, maybe spawn worker just for validation
418
405
  // We could use the async queue for communication.
419
406
  const validationResults = await Promise.allSettled(newTxs.map(async (tx)=>({
420
407
  tx,
421
- isValid: (await this.txValidator.validateRequestedTx(tx)).result === 'valid'
408
+ isValid: (await this.txValidator.validateTx(tx)).result === 'valid'
422
409
  })));
423
410
  let hasInvalidTx = false;
424
411
  validationResults.forEach((result)=>{
@@ -431,6 +418,9 @@ import { BatchRequestTxValidator } from './tx_validator.js';
431
418
  }
432
419
  });
433
420
  if (hasInvalidTx) {
421
+ this.logger.warn(`Penalizing peer ${peerId.toString()} for sending invalid transactions in batch response`, {
422
+ peerId
423
+ });
434
424
  this.peers.penalisePeer(peerId, PeerErrorSeverity.LowToleranceError);
435
425
  } else {
436
426
  // If we have received successful response from the peer, they have "redeemed" themselves and not considered bad anymore
@@ -458,10 +448,10 @@ import { BatchRequestTxValidator } from './tx_validator.js';
458
448
  if (smartPeersAreDisabled) {
459
449
  return;
460
450
  }
461
- // If block response is invalid we still want to query this peer in the future
462
- // Because they sent successful response, so they might become smart peer in the future
463
- // Or send us needed txs
464
- if (!this.isBlockResponseValid(response)) {
451
+ // If the peer doesn't have the block, we mark them as dumb.
452
+ if (!response.peerHasBlock()) {
453
+ this.peers.markPeerDumb(peerId);
454
+ this.txsMetadata.clearPeerData(peerId);
465
455
  return;
466
456
  }
467
457
  // We mark peer as "smart" only if they have some txs we are missing
@@ -473,16 +463,12 @@ import { BatchRequestTxValidator } from './tx_validator.js';
473
463
  this.peers.markPeerSmart(peerId);
474
464
  this.markTxsPeerHas(peerId, response);
475
465
  // Unblock smart workers
476
- if (this.peers.getSmartPeersToQuery().length <= this.smartParallelWorkerCount) {
477
- this.smartRequesterSemaphore.release();
478
- }
479
- }
480
- isBlockResponseValid(response) {
481
- const archiveRootsMatch = this.blockTxsSource.archive.toString() === response.archiveRoot.toString();
482
- const peerHasSomeTxsFromProposal = !response.txIndices.isEmpty();
483
- return archiveRootsMatch && peerHasSomeTxsFromProposal;
466
+ this.smartRequesterSemaphore.release();
484
467
  }
485
468
  peerHasSomeTxsWeAreMissing(_peerId, response) {
469
+ if (response.txIndices.isEmpty()) {
470
+ return false;
471
+ }
486
472
  const txsPeerHas = new Set(this.extractHashesPeerHasFromResponse(response).map((h)=>h.toString()));
487
473
  return this.txsMetadata.getMissingTxHashes().intersection(txsPeerHas).size > 0;
488
474
  }
@@ -492,14 +478,9 @@ import { BatchRequestTxValidator } from './tx_validator.js';
492
478
  this.txsMetadata.markPeerHas(peerId, txsPeerHas);
493
479
  }
494
480
  extractHashesPeerHasFromResponse(response) {
495
- const hashes = [];
496
- const indicesOfHashesPeerHas = new Set(response.txIndices.getTrueIndices());
497
- this.blockTxsSource.txHashes.forEach((hash, idx)=>{
498
- if (indicesOfHashesPeerHas.has(idx)) {
499
- hashes.push(hash);
500
- }
501
- });
502
- return hashes;
481
+ // Should already have been validated, but just in case.
482
+ assert(response.txIndices.getLength() === this.blockTxsSource.txHashes.length);
483
+ return response.txIndices.getTrueIndices().map((idx)=>this.blockTxsSource.txHashes[idx]);
503
484
  }
504
485
  /*
505
486
  * Helper function to crate round robin indexer -
@@ -523,23 +504,12 @@ import { BatchRequestTxValidator } from './tx_validator.js';
523
504
  };
524
505
  }
525
506
  /*
526
- * @returns true if all missing txs have been fetched */ fetchedAllTxs() {
527
- return this.txsMetadata.getMissingTxHashes().size == 0;
528
- }
529
- /*
530
- * Checks if the BatchTxRequester should stop fetching missing txs
531
- * Conditions for stopping are:
532
- * - There have been no missing transactions to start with
533
- * - All transactions have been fetched
534
- * - The deadline has been hit (no more time to fetch)
535
- * - This process has been cancelled via abortSignal
536
- *
537
- * @returns true if BatchTxRequester should stop, otherwise false*/ shouldStop() {
538
- const aborted = this.opts.abortSignal?.aborted ?? false;
539
- if (aborted) {
507
+ * Checks if the BatchTxRequester should stop fetching missing txs.
508
+ * Delegates to requestTracker which covers: deadline hit, all txs fetched, or external cancellation. */ shouldStop() {
509
+ if (this.requestTracker.checkCancelled()) {
540
510
  this.unlockSmartRequesterSemaphores();
541
511
  }
542
- return aborted || this.fetchedAllTxs() || this.dateProvider.now() > this.deadline;
512
+ return this.requestTracker.checkCancelled();
543
513
  }
544
514
  /*
545
515
  * Helper function which unlocks all smart requester semaphores
@@ -553,10 +523,12 @@ import { BatchRequestTxValidator } from './tx_validator.js';
553
523
  * Sleeps for the given duration, but clamped to the deadline.
554
524
  * This ensures we don't sleep past the deadline.
555
525
  * */ async sleepClampedToDeadline(durationMs) {
556
- const remaining = this.deadline - this.dateProvider.now();
557
- const thereIsTimeRemaining = remaining > 0;
558
- if (thereIsTimeRemaining) {
559
- await sleep(Math.min(durationMs, remaining));
526
+ if (this.requestTracker.checkCancelled()) {
527
+ return;
560
528
  }
529
+ await Promise.race([
530
+ sleep(durationMs),
531
+ this.requestTracker.cancellationToken
532
+ ]);
561
533
  }
562
534
  }
@@ -1,11 +1,12 @@
1
1
  import type { ISemaphore } from '@aztec/foundation/queue';
2
2
  import type { PeerErrorSeverity } from '@aztec/stdlib/p2p';
3
- import type { Tx, TxHash } from '@aztec/stdlib/tx';
3
+ import type { Tx, TxHash, TxValidator } from '@aztec/stdlib/tx';
4
4
  import type { PeerId } from '@libp2p/interface';
5
5
  import type { ConnectionSampler } from '../connection-sampler/connection_sampler.js';
6
+ import type { BlockTxsRequest, BlockTxsResponse } from '../index.js';
6
7
  import type { ReqRespInterface } from '../interface.js';
7
8
  import type { IPeerCollection } from './peer_collection.js';
8
- import type { BatchRequestTxValidatorConfig, IBatchRequestTxValidator } from './tx_validator.js';
9
+ import type { BatchRequestTxValidatorConfig } from './tx_validator.js';
9
10
  export interface IPeerPenalizer {
10
11
  penalizePeer(peerId: PeerId, penalty: PeerErrorSeverity): void;
11
12
  }
@@ -18,19 +19,23 @@ export interface ITxMetadataCollection {
18
19
  markNotInFlightBySmartPeer(txHash: TxHash): void;
19
20
  alreadyFetched(txHash: TxHash): boolean;
20
21
  markPeerHas(peerId: PeerId, txHashes: TxHash[]): void;
22
+ /** Remove all tx metadata associations for a peer (e.g. on demotion from smart to dumb). */
23
+ clearPeerData(peerId: PeerId): void;
21
24
  }
22
25
  /**
23
26
  * Interface for BatchTxRequester dependencies that can be injected from upstream
24
27
  */
25
28
  export interface BatchTxRequesterLibP2PService {
26
29
  /** ReqResp interface for sending requests to peers */
27
- reqResp: Pick<ReqRespInterface, 'sendBatchRequest' | 'sendRequestToPeer'>;
30
+ reqResp: Pick<ReqRespInterface, 'sendRequestToPeer'>;
28
31
  /** Connection sampler for getting peer lists */
29
32
  connectionSampler: Pick<ConnectionSampler, 'getPeerListSortedByConnectionCountAsc'>;
30
33
  /** Configuration needed for transaction validation */
31
34
  txValidatorConfig: BatchRequestTxValidatorConfig;
32
35
  /** Peer scoring for penalizing peers */
33
36
  peerScoring: IPeerPenalizer;
37
+ /** Validate the requested block transactions request-response consistency */
38
+ validateRequestedBlockTxsConsistency: (request: BlockTxsRequest, response: BlockTxsResponse, peerId: PeerId) => Promise<boolean>;
34
39
  }
35
40
  export interface BatchTxRequesterOptions {
36
41
  smartParallelWorkerCount?: number;
@@ -39,8 +44,7 @@ export interface BatchTxRequesterOptions {
39
44
  badPeerThreshold?: number;
40
45
  semaphore?: ISemaphore;
41
46
  peerCollection?: IPeerCollection;
42
- abortSignal?: AbortSignal;
43
47
  /** Optional tx validator for testing - if not provided, one is created from p2pService.txValidatorConfig */
44
- txValidator?: IBatchRequestTxValidator;
48
+ txValidator?: TxValidator;
45
49
  }
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9iYXRjaC10eC1yZXF1ZXN0ZXIvaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRW5ELE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWhELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDckYsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSw2QkFBNkIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWpHLE1BQU0sV0FBVyxjQUFjO0lBQzdCLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7Q0FDaEU7QUFFRCxNQUFNLFdBQVcscUJBQXFCO0lBQ3BDLGtCQUFrQixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUM3QywwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQ25ELGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNwQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztJQUM5QywwQkFBMEIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNqRCxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFFeEMsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQztDQUN2RDtBQUVEOztHQUVHO0FBQ0gsTUFBTSxXQUFXLDZCQUE2QjtJQUM1QyxzREFBc0Q7SUFDdEQsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDO0lBQzFFLGdEQUFnRDtJQUNoRCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsdUNBQXVDLENBQUMsQ0FBQztJQUNwRixzREFBc0Q7SUFDdEQsaUJBQWlCLEVBQUUsNkJBQTZCLENBQUM7SUFDakQsd0NBQXdDO0lBQ3hDLFdBQVcsRUFBRSxjQUFjLENBQUM7Q0FDN0I7QUFFRCxNQUFNLFdBQVcsdUJBQXVCO0lBQ3RDLHdCQUF3QixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2xDLHVCQUF1QixDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2pDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNyQixnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUUxQixTQUFTLENBQUMsRUFBRSxVQUFVLENBQUM7SUFDdkIsY0FBYyxDQUFDLEVBQUUsZUFBZSxDQUFDO0lBQ2pDLFdBQVcsQ0FBQyxFQUFFLFdBQVcsQ0FBQztJQUMxQiw0R0FBNEc7SUFDNUcsV0FBVyxDQUFDLEVBQUUsd0JBQXdCLENBQUM7Q0FDeEMifQ==
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9iYXRjaC10eC1yZXF1ZXN0ZXIvaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0QsT0FBTyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVoRSxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3JGLE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNyRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sS0FBSyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFdkUsTUFBTSxXQUFXLGNBQWM7SUFDN0IsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixHQUFHLElBQUksQ0FBQztDQUNoRTtBQUVELE1BQU0sV0FBVyxxQkFBcUI7SUFDcEMsa0JBQWtCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQzdDLDBCQUEwQixDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBQUM7SUFDbkQsYUFBYSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ3BDLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQzlDLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDO0lBQ2pELGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQztJQUV4QyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3RELDRGQUE0RjtJQUM1RixhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7Q0FDckM7QUFFRDs7R0FFRztBQUNILE1BQU0sV0FBVyw2QkFBNkI7SUFDNUMsc0RBQXNEO0lBQ3RELE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNyRCxnREFBZ0Q7SUFDaEQsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLHVDQUF1QyxDQUFDLENBQUM7SUFDcEYsc0RBQXNEO0lBQ3RELGlCQUFpQixFQUFFLDZCQUE2QixDQUFDO0lBQ2pELHdDQUF3QztJQUN4QyxXQUFXLEVBQUUsY0FBYyxDQUFDO0lBQzVCLDZFQUE2RTtJQUM3RSxvQ0FBb0MsRUFBRSxDQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUN4QixRQUFRLEVBQUUsZ0JBQWdCLEVBQzFCLE1BQU0sRUFBRSxNQUFNLEtBQ1gsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0NBQ3ZCO0FBRUQsTUFBTSxXQUFXLHVCQUF1QjtJQUN0Qyx3QkFBd0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNsQyx1QkFBdUIsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUNqQyxXQUFXLENBQUMsRUFBRSxNQUFNLENBQUM7SUFDckIsZ0JBQWdCLENBQUMsRUFBRSxNQUFNLENBQUM7SUFFMUIsU0FBUyxDQUFDLEVBQUUsVUFBVSxDQUFDO0lBQ3ZCLGNBQWMsQ0FBQyxFQUFFLGVBQWUsQ0FBQztJQUNqQyw0R0FBNEc7SUFDNUcsV0FBVyxDQUFDLEVBQUUsV0FBVyxDQUFDO0NBQzNCIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/batch-tx-requester/interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,6BAA6B,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAEjG,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAChE;AAED,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IAC7C,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACnD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACjD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAExC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACvD;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,sDAAsD;IACtD,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,GAAG,mBAAmB,CAAC,CAAC;IAC1E,gDAAgD;IAChD,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,uCAAuC,CAAC,CAAC;IACpF,sDAAsD;IACtD,iBAAiB,EAAE,6BAA6B,CAAC;IACjD,wCAAwC;IACxC,WAAW,EAAE,cAAc,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,4GAA4G;IAC5G,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACxC"}
1
+ {"version":3,"file":"interface.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/batch-tx-requester/interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEhE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AAEvE,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,IAAI,CAAC;CAChE;AAED,MAAM,WAAW,qBAAqB;IACpC,kBAAkB,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC;IAC7C,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACnD,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9C,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACjD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAExC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACtD,4FAA4F;IAC5F,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C,sDAAsD;IACtD,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;IACrD,gDAAgD;IAChD,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,uCAAuC,CAAC,CAAC;IACpF,sDAAsD;IACtD,iBAAiB,EAAE,6BAA6B,CAAC;IACjD,wCAAwC;IACxC,WAAW,EAAE,cAAc,CAAC;IAC5B,6EAA6E;IAC7E,oCAAoC,EAAE,CACpC,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,MAAM,KACX,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,SAAS,CAAC,EAAE,UAAU,CAAC;IACvB,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,4GAA4G;IAC5G,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B"}
@@ -1,6 +1,6 @@
1
1
  import { type Tx, TxHash } from '@aztec/stdlib/tx';
2
2
  import type { PeerId } from '@libp2p/interface';
3
- import type { IMissingTxsTracker } from '../../tx_collection/missing_txs_tracker.js';
3
+ import type { IRequestTracker } from '../../tx_collection/request_tracker.js';
4
4
  import type { ITxMetadataCollection } from './interface.js';
5
5
  declare class MissingTxMetadata {
6
6
  readonly txHash: string;
@@ -15,10 +15,10 @@ declare class MissingTxMetadata {
15
15
  isInFlight(): boolean;
16
16
  }
17
17
  export declare class MissingTxMetadataCollection implements ITxMetadataCollection {
18
- private missingTxsTracker;
18
+ private requestTracker;
19
19
  private readonly txBatchSize;
20
20
  private txMetadata;
21
- constructor(missingTxsTracker: IMissingTxsTracker, txBatchSize?: number);
21
+ constructor(requestTracker: IRequestTracker, txBatchSize?: number);
22
22
  getPrioritizingNotInFlightAndLowerRequestCount(txs: string[]): MissingTxMetadata[];
23
23
  getMissingTxHashes(): Set<string>;
24
24
  getTxsPeerHas(peer: PeerId): Set<string>;
@@ -29,6 +29,7 @@ export declare class MissingTxMetadataCollection implements ITxMetadataCollectio
29
29
  alreadyFetched(txHash: TxHash): boolean;
30
30
  markFetched(peerId: PeerId, tx: Tx): boolean;
31
31
  markPeerHas(peerId: PeerId, txHash: TxHash[]): void;
32
+ clearPeerData(peerId: PeerId): void;
32
33
  }
33
34
  export {};
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzc2luZ190eHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL2JhdGNoLXR4LXJlcXVlc3Rlci9taXNzaW5nX3R4cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUVyRixPQUFPLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVELGNBQU0saUJBQWlCO2FBRUgsTUFBTSxFQUFFLE1BQU07SUFDdkIsY0FBYztJQUNkLGFBQWE7SUFDYixFQUFFLEVBQUUsRUFBRSxHQUFHLFNBQVM7YUFDVCxLQUFLO0lBTHZCLFlBQ2tCLE1BQU0sRUFBRSxNQUFNLEVBQ3ZCLGNBQWMsU0FBSSxFQUNsQixhQUFhLFNBQUksRUFDakIsRUFBRSxHQUFFLEVBQUUsR0FBRyxTQUFxQixFQUNyQixLQUFLLGNBQW9CLEVBQ3ZDO0lBRUcsZUFBZSxTQUVyQjtJQUVNLFlBQVksU0FFbEI7SUFFTSxlQUFlLFNBRXJCO0lBRU0sVUFBVSxJQUFJLE9BQU8sQ0FFM0I7Q0FDRjtBQU9ELHFCQUFhLDJCQUE0QixZQUFXLHFCQUFxQjtJQUlyRSxPQUFPLENBQUMsaUJBQWlCO0lBQ3pCLE9BQU8sQ0FBQyxRQUFRLENBQUMsV0FBVztJQUo5QixPQUFPLENBQUMsVUFBVSxDQUF3QztJQUUxRCxZQUNVLGlCQUFpQixFQUFFLGtCQUFrQixFQUM1QixXQUFXLEdBQUUsTUFBaUQsRUFHaEY7SUFFTSw4Q0FBOEMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLEdBQUcsaUJBQWlCLEVBQUUsQ0FleEY7SUFFTSxrQkFBa0IsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLENBRXZDO0lBRU0sYUFBYSxDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQVc5QztJQUVNLDBCQUEwQixDQUFDLElBQUksRUFBRSxNQUFNLEdBQUcsTUFBTSxFQUFFLENBdUJ4RDtJQUVNLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxRQUVsQztJQU9NLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxNQUFNLFFBRTVDO0lBTU0sMEJBQTBCLENBQUMsTUFBTSxFQUFFLE1BQU0sUUFFL0M7SUFFTSxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBRTdDO0lBRU0sV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBY2xEO0lBRU0sV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQVVsRDtDQUNGIn0=
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzc2luZ190eHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL2JhdGNoLXR4LXJlcXVlc3Rlci9taXNzaW5nX3R4cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFOUUsT0FBTyxLQUFLLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RCxjQUFNLGlCQUFpQjthQUVILE1BQU0sRUFBRSxNQUFNO0lBQ3ZCLGNBQWM7SUFDZCxhQUFhO0lBQ2IsRUFBRSxFQUFFLEVBQUUsR0FBRyxTQUFTO2FBQ1QsS0FBSztJQUx2QixZQUNrQixNQUFNLEVBQUUsTUFBTSxFQUN2QixjQUFjLFNBQUksRUFDbEIsYUFBYSxTQUFJLEVBQ2pCLEVBQUUsR0FBRSxFQUFFLEdBQUcsU0FBcUIsRUFDckIsS0FBSyxjQUFvQixFQUN2QztJQUVHLGVBQWUsU0FFckI7SUFFTSxZQUFZLFNBRWxCO0lBRU0sZUFBZSxTQUVyQjtJQUVNLFVBQVUsSUFBSSxPQUFPLENBRTNCO0NBQ0Y7QUFPRCxxQkFBYSwyQkFBNEIsWUFBVyxxQkFBcUI7SUFJckUsT0FBTyxDQUFDLGNBQWM7SUFDdEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXO0lBSjlCLE9BQU8sQ0FBQyxVQUFVLENBQXdDO0lBRTFELFlBQ1UsY0FBYyxFQUFFLGVBQWUsRUFDdEIsV0FBVyxHQUFFLE1BQWlELEVBR2hGO0lBRU0sOENBQThDLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLGlCQUFpQixFQUFFLENBZXhGO0lBRU0sa0JBQWtCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUV2QztJQUVNLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FXOUM7SUFFTSwwQkFBMEIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQXVCeEQ7SUFFTSxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sUUFFbEM7SUFPTSx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsTUFBTSxRQUU1QztJQU1NLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxNQUFNLFFBRS9DO0lBRU0sY0FBYyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUU3QztJQUVNLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQWNsRDtJQUVNLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFVbEQ7SUFFTSxhQUFhLENBQUMsTUFBTSxFQUFFLE1BQU0sUUFLbEM7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"missing_txs.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/batch-tx-requester/missing_txs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAErF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE5D,cAAM,iBAAiB;aAEH,MAAM,EAAE,MAAM;IACvB,cAAc;IACd,aAAa;IACb,EAAE,EAAE,EAAE,GAAG,SAAS;aACT,KAAK;IALvB,YACkB,MAAM,EAAE,MAAM,EACvB,cAAc,SAAI,EAClB,aAAa,SAAI,EACjB,EAAE,GAAE,EAAE,GAAG,SAAqB,EACrB,KAAK,cAAoB,EACvC;IAEG,eAAe,SAErB;IAEM,YAAY,SAElB;IAEM,eAAe,SAErB;IAEM,UAAU,IAAI,OAAO,CAE3B;CACF;AAOD,qBAAa,2BAA4B,YAAW,qBAAqB;IAIrE,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAJ9B,OAAO,CAAC,UAAU,CAAwC;IAE1D,YACU,iBAAiB,EAAE,kBAAkB,EAC5B,WAAW,GAAE,MAAiD,EAGhF;IAEM,8CAA8C,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAexF;IAEM,kBAAkB,IAAI,GAAG,CAAC,MAAM,CAAC,CAEvC;IAEM,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAW9C;IAEM,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAuBxD;IAEM,aAAa,CAAC,MAAM,EAAE,MAAM,QAElC;IAOM,uBAAuB,CAAC,MAAM,EAAE,MAAM,QAE5C;IAMM,0BAA0B,CAAC,MAAM,EAAE,MAAM,QAE/C;IAEM,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE7C;IAEM,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAclD;IAEM,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAUlD;CACF"}
1
+ {"version":3,"file":"missing_txs.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/batch-tx-requester/missing_txs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAE9E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAE5D,cAAM,iBAAiB;aAEH,MAAM,EAAE,MAAM;IACvB,cAAc;IACd,aAAa;IACb,EAAE,EAAE,EAAE,GAAG,SAAS;aACT,KAAK;IALvB,YACkB,MAAM,EAAE,MAAM,EACvB,cAAc,SAAI,EAClB,aAAa,SAAI,EACjB,EAAE,GAAE,EAAE,GAAG,SAAqB,EACrB,KAAK,cAAoB,EACvC;IAEG,eAAe,SAErB;IAEM,YAAY,SAElB;IAEM,eAAe,SAErB;IAEM,UAAU,IAAI,OAAO,CAE3B;CACF;AAOD,qBAAa,2BAA4B,YAAW,qBAAqB;IAIrE,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAJ9B,OAAO,CAAC,UAAU,CAAwC;IAE1D,YACU,cAAc,EAAE,eAAe,EACtB,WAAW,GAAE,MAAiD,EAGhF;IAEM,8CAA8C,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,iBAAiB,EAAE,CAexF;IAEM,kBAAkB,IAAI,GAAG,CAAC,MAAM,CAAC,CAEvC;IAEM,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAW9C;IAEM,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAuBxD;IAEM,aAAa,CAAC,MAAM,EAAE,MAAM,QAElC;IAOM,uBAAuB,CAAC,MAAM,EAAE,MAAM,QAE5C;IAMM,0BAA0B,CAAC,MAAM,EAAE,MAAM,QAE/C;IAEM,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE7C;IAEM,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,OAAO,CAclD;IAEM,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAUlD;IAEM,aAAa,CAAC,MAAM,EAAE,MAAM,QAKlC;CACF"}