@aztec/p2p 0.0.1-commit.ee80a48 → 0.0.1-commit.f103f88

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 (497) hide show
  1. package/README.md +129 -3
  2. package/dest/client/factory.d.ts +11 -11
  3. package/dest/client/factory.d.ts.map +1 -1
  4. package/dest/client/factory.js +55 -15
  5. package/dest/client/interface.d.ts +54 -34
  6. package/dest/client/interface.d.ts.map +1 -1
  7. package/dest/client/p2p_client.d.ts +43 -52
  8. package/dest/client/p2p_client.d.ts.map +1 -1
  9. package/dest/client/p2p_client.js +183 -226
  10. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +21 -11
  11. package/dest/config.d.ts +134 -87
  12. package/dest/config.d.ts.map +1 -1
  13. package/dest/config.js +111 -40
  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/errors/tx-pool.error.d.ts +8 -0
  18. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  19. package/dest/errors/tx-pool.error.js +9 -0
  20. package/dest/index.d.ts +2 -2
  21. package/dest/index.d.ts.map +1 -1
  22. package/dest/index.js +1 -1
  23. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +106 -88
  24. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool.js +448 -3
  26. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  27. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  28. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +353 -87
  29. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  30. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  31. package/dest/mem_pools/attestation_pool/index.js +1 -2
  32. package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
  33. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  34. package/dest/mem_pools/attestation_pool/mocks.js +2 -2
  35. package/dest/mem_pools/index.d.ts +3 -3
  36. package/dest/mem_pools/index.d.ts.map +1 -1
  37. package/dest/mem_pools/index.js +1 -1
  38. package/dest/mem_pools/instrumentation.d.ts +4 -2
  39. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  40. package/dest/mem_pools/instrumentation.js +16 -14
  41. package/dest/mem_pools/interface.d.ts +5 -5
  42. package/dest/mem_pools/interface.d.ts.map +1 -1
  43. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  44. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  45. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  46. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
  47. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  48. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
  49. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  50. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  51. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  52. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  53. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  54. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  55. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  56. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  57. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
  58. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  59. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  60. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
  61. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +10 -0
  62. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  63. package/dest/mem_pools/tx_pool_v2/eviction/index.js +11 -0
  64. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  65. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  66. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  67. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  68. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  69. package/dest/mem_pools/{tx_pool → tx_pool_v2}/eviction/invalid_txs_after_mining_rule.js +16 -35
  70. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  71. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  72. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
  73. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  74. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  75. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  76. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  77. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  78. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  82. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  83. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  84. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  85. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  86. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  87. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  88. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +215 -0
  89. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  90. package/dest/mem_pools/tx_pool_v2/interfaces.js +10 -0
  91. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +134 -0
  92. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  93. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +220 -0
  94. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  95. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  96. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  97. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
  98. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  99. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +337 -0
  100. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +62 -0
  101. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  102. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +167 -0
  103. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +78 -0
  104. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  105. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +923 -0
  106. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +5 -2
  107. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  108. package/dest/msg_validators/attestation_validator/attestation_validator.js +20 -11
  109. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +5 -3
  110. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  111. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +2 -2
  112. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  113. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  114. package/dest/msg_validators/clock_tolerance.js +54 -3
  115. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +7 -4
  116. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  117. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  118. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +7 -4
  119. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  120. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  121. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +15 -8
  122. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  123. package/dest/msg_validators/proposal_validator/proposal_validator.js +67 -47
  124. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  125. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  126. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
  127. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  128. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  129. package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
  130. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  131. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  132. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  133. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  134. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +16 -3
  135. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  136. package/dest/msg_validators/tx_validator/block_header_validator.js +1 -1
  137. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  138. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  139. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  140. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  141. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  142. package/dest/msg_validators/tx_validator/data_validator.js +35 -2
  143. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +13 -3
  144. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  145. package/dest/msg_validators/tx_validator/double_spend_validator.js +4 -4
  146. package/dest/msg_validators/tx_validator/factory.d.ts +133 -6
  147. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  148. package/dest/msg_validators/tx_validator/factory.js +247 -60
  149. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  150. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  151. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  152. package/dest/msg_validators/tx_validator/gas_validator.d.ts +67 -3
  153. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  154. package/dest/msg_validators/tx_validator/gas_validator.js +112 -43
  155. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  156. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  157. package/dest/msg_validators/tx_validator/index.js +2 -0
  158. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  159. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  160. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  161. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  162. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  163. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  164. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  165. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  166. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  167. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +20 -4
  168. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  169. package/dest/msg_validators/tx_validator/timestamp_validator.js +6 -6
  170. package/dest/services/data_store.d.ts +1 -1
  171. package/dest/services/data_store.d.ts.map +1 -1
  172. package/dest/services/data_store.js +5 -5
  173. package/dest/services/dummy_service.d.ts +17 -6
  174. package/dest/services/dummy_service.d.ts.map +1 -1
  175. package/dest/services/dummy_service.js +16 -5
  176. package/dest/services/encoding.d.ts +7 -3
  177. package/dest/services/encoding.d.ts.map +1 -1
  178. package/dest/services/encoding.js +18 -11
  179. package/dest/services/gossipsub/index.d.ts +3 -0
  180. package/dest/services/gossipsub/index.d.ts.map +1 -0
  181. package/dest/services/gossipsub/index.js +2 -0
  182. package/dest/services/gossipsub/scoring.d.ts +21 -3
  183. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  184. package/dest/services/gossipsub/scoring.js +24 -7
  185. package/dest/services/gossipsub/topic_score_params.d.ts +184 -0
  186. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  187. package/dest/services/gossipsub/topic_score_params.js +363 -0
  188. package/dest/services/index.d.ts +2 -1
  189. package/dest/services/index.d.ts.map +1 -1
  190. package/dest/services/index.js +1 -0
  191. package/dest/services/libp2p/libp2p_service.d.ts +92 -50
  192. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  193. package/dest/services/libp2p/libp2p_service.js +549 -427
  194. package/dest/services/peer-manager/metrics.d.ts +3 -1
  195. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  196. package/dest/services/peer-manager/metrics.js +6 -0
  197. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  198. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  199. package/dest/services/peer-manager/peer_manager.js +39 -11
  200. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  201. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  202. package/dest/services/peer-manager/peer_scoring.js +57 -12
  203. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +14 -10
  204. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  205. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +89 -112
  206. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +4 -7
  207. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  208. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +11 -13
  209. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  210. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +31 -46
  211. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
  212. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  213. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
  214. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +2 -2
  215. package/dest/services/reqresp/config.d.ts +3 -3
  216. package/dest/services/reqresp/config.d.ts.map +1 -1
  217. package/dest/services/reqresp/interface.d.ts +23 -9
  218. package/dest/services/reqresp/interface.d.ts.map +1 -1
  219. package/dest/services/reqresp/interface.js +23 -10
  220. package/dest/services/reqresp/metrics.d.ts +1 -1
  221. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  222. package/dest/services/reqresp/metrics.js +0 -1
  223. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  224. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  225. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +16 -11
  226. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +21 -10
  227. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  228. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +27 -11
  229. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  230. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  231. package/dest/services/reqresp/protocols/index.js +0 -1
  232. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  233. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  234. package/dest/services/reqresp/protocols/tx.js +21 -3
  235. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  236. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  237. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  238. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  239. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  240. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  241. package/dest/services/reqresp/reqresp.d.ts +4 -2
  242. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  243. package/dest/services/reqresp/reqresp.js +40 -15
  244. package/dest/services/service.d.ts +43 -4
  245. package/dest/services/service.d.ts.map +1 -1
  246. package/dest/services/tx_collection/config.d.ts +22 -4
  247. package/dest/services/tx_collection/config.d.ts.map +1 -1
  248. package/dest/services/tx_collection/config.js +49 -3
  249. package/dest/services/tx_collection/fast_tx_collection.d.ts +6 -8
  250. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  251. package/dest/services/tx_collection/fast_tx_collection.js +88 -88
  252. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  253. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  254. package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
  255. package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
  256. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  257. package/dest/services/tx_collection/file_store_tx_source.js +100 -0
  258. package/dest/services/tx_collection/index.d.ts +3 -2
  259. package/dest/services/tx_collection/index.d.ts.map +1 -1
  260. package/dest/services/tx_collection/index.js +1 -0
  261. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  262. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  263. package/dest/services/tx_collection/instrumentation.js +2 -1
  264. package/dest/services/tx_collection/proposal_tx_collector.d.ts +15 -15
  265. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
  266. package/dest/services/tx_collection/proposal_tx_collector.js +6 -6
  267. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  268. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  269. package/dest/services/tx_collection/request_tracker.js +84 -0
  270. package/dest/services/tx_collection/slow_tx_collection.d.ts +7 -3
  271. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  272. package/dest/services/tx_collection/slow_tx_collection.js +60 -26
  273. package/dest/services/tx_collection/tx_collection.d.ts +23 -13
  274. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  275. package/dest/services/tx_collection/tx_collection.js +75 -3
  276. package/dest/services/tx_collection/tx_collection_sink.d.ts +18 -8
  277. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  278. package/dest/services/tx_collection/tx_collection_sink.js +26 -29
  279. package/dest/services/tx_collection/tx_source.d.ts +13 -7
  280. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  281. package/dest/services/tx_collection/tx_source.js +26 -7
  282. package/dest/services/tx_file_store/config.d.ts +16 -0
  283. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  284. package/dest/services/tx_file_store/config.js +22 -0
  285. package/dest/services/tx_file_store/index.d.ts +4 -0
  286. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  287. package/dest/services/tx_file_store/index.js +3 -0
  288. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  289. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  290. package/dest/services/tx_file_store/instrumentation.js +29 -0
  291. package/dest/services/tx_file_store/tx_file_store.d.ts +48 -0
  292. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  293. package/dest/services/tx_file_store/tx_file_store.js +152 -0
  294. package/dest/services/tx_provider.d.ts +4 -4
  295. package/dest/services/tx_provider.d.ts.map +1 -1
  296. package/dest/services/tx_provider.js +9 -8
  297. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  298. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  299. package/dest/test-helpers/make-test-p2p-clients.js +1 -2
  300. package/dest/test-helpers/mock-pubsub.d.ts +40 -6
  301. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  302. package/dest/test-helpers/mock-pubsub.js +139 -13
  303. package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
  304. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  305. package/dest/test-helpers/reqresp-nodes.js +5 -5
  306. package/dest/test-helpers/testbench-utils.d.ts +43 -38
  307. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  308. package/dest/test-helpers/testbench-utils.js +150 -61
  309. package/dest/testbench/p2p_client_testbench_worker.d.ts +2 -2
  310. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  311. package/dest/testbench/p2p_client_testbench_worker.js +80 -28
  312. package/dest/testbench/worker_client_manager.d.ts +10 -1
  313. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  314. package/dest/testbench/worker_client_manager.js +55 -3
  315. package/dest/util.d.ts +3 -3
  316. package/dest/util.d.ts.map +1 -1
  317. package/package.json +14 -14
  318. package/src/client/factory.ts +108 -28
  319. package/src/client/interface.ts +65 -35
  320. package/src/client/p2p_client.ts +221 -272
  321. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +34 -15
  322. package/src/config.ts +178 -45
  323. package/src/errors/p2p-service.error.ts +11 -0
  324. package/src/errors/tx-pool.error.ts +12 -0
  325. package/src/index.ts +1 -1
  326. package/src/mem_pools/attestation_pool/attestation_pool.ts +501 -91
  327. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +442 -102
  328. package/src/mem_pools/attestation_pool/index.ts +9 -2
  329. package/src/mem_pools/attestation_pool/mocks.ts +2 -1
  330. package/src/mem_pools/index.ts +2 -2
  331. package/src/mem_pools/instrumentation.ts +17 -13
  332. package/src/mem_pools/interface.ts +4 -4
  333. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  334. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  335. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
  336. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  337. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  338. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
  339. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  340. package/src/mem_pools/tx_pool_v2/eviction/index.ts +27 -0
  341. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  342. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  343. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  344. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  345. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  346. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  347. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  348. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  349. package/src/mem_pools/tx_pool_v2/interfaces.ts +247 -0
  350. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +343 -0
  351. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  352. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +430 -0
  353. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +238 -0
  354. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1105 -0
  355. package/src/msg_validators/attestation_validator/README.md +49 -0
  356. package/src/msg_validators/attestation_validator/attestation_validator.ts +21 -9
  357. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +6 -3
  358. package/src/msg_validators/clock_tolerance.ts +72 -3
  359. package/src/msg_validators/proposal_validator/README.md +123 -0
  360. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +17 -4
  361. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +23 -7
  362. package/src/msg_validators/proposal_validator/proposal_validator.ts +79 -49
  363. package/src/msg_validators/tx_validator/README.md +119 -0
  364. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +5 -5
  365. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  366. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  367. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  368. package/src/msg_validators/tx_validator/block_header_validator.ts +15 -3
  369. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  370. package/src/msg_validators/tx_validator/data_validator.ts +42 -1
  371. package/src/msg_validators/tx_validator/double_spend_validator.ts +11 -6
  372. package/src/msg_validators/tx_validator/factory.ts +394 -78
  373. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  374. package/src/msg_validators/tx_validator/gas_validator.ts +145 -33
  375. package/src/msg_validators/tx_validator/index.ts +2 -0
  376. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  377. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  378. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  379. package/src/msg_validators/tx_validator/timestamp_validator.ts +23 -18
  380. package/src/services/data_store.ts +5 -13
  381. package/src/services/dummy_service.ts +25 -7
  382. package/src/services/encoding.ts +18 -10
  383. package/src/services/gossipsub/README.md +641 -0
  384. package/src/services/gossipsub/index.ts +2 -0
  385. package/src/services/gossipsub/scoring.ts +29 -5
  386. package/src/services/gossipsub/topic_score_params.ts +519 -0
  387. package/src/services/index.ts +1 -0
  388. package/src/services/libp2p/libp2p_service.ts +575 -465
  389. package/src/services/peer-manager/metrics.ts +7 -0
  390. package/src/services/peer-manager/peer_manager.ts +45 -11
  391. package/src/services/peer-manager/peer_scoring.ts +52 -5
  392. package/src/services/reqresp/README.md +229 -0
  393. package/src/services/reqresp/batch-tx-requester/README.md +53 -14
  394. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +89 -122
  395. package/src/services/reqresp/batch-tx-requester/interface.ts +3 -6
  396. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +30 -71
  397. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  398. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +2 -2
  399. package/src/services/reqresp/config.ts +2 -2
  400. package/src/services/reqresp/interface.ts +45 -10
  401. package/src/services/reqresp/metrics.ts +0 -1
  402. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +23 -14
  403. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +38 -15
  404. package/src/services/reqresp/protocols/index.ts +0 -1
  405. package/src/services/reqresp/protocols/tx.ts +23 -3
  406. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  407. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  408. package/src/services/reqresp/reqresp.ts +53 -16
  409. package/src/services/service.ts +57 -3
  410. package/src/services/tx_collection/config.ts +74 -6
  411. package/src/services/tx_collection/fast_tx_collection.ts +94 -97
  412. package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
  413. package/src/services/tx_collection/file_store_tx_source.ts +129 -0
  414. package/src/services/tx_collection/index.ts +2 -1
  415. package/src/services/tx_collection/instrumentation.ts +7 -1
  416. package/src/services/tx_collection/proposal_tx_collector.ts +21 -27
  417. package/src/services/tx_collection/request_tracker.ts +127 -0
  418. package/src/services/tx_collection/slow_tx_collection.ts +66 -33
  419. package/src/services/tx_collection/tx_collection.ts +114 -19
  420. package/src/services/tx_collection/tx_collection_sink.ts +30 -34
  421. package/src/services/tx_collection/tx_source.ts +28 -8
  422. package/src/services/tx_file_store/config.ts +37 -0
  423. package/src/services/tx_file_store/index.ts +3 -0
  424. package/src/services/tx_file_store/instrumentation.ts +36 -0
  425. package/src/services/tx_file_store/tx_file_store.ts +175 -0
  426. package/src/services/tx_provider.ts +10 -9
  427. package/src/test-helpers/make-test-p2p-clients.ts +4 -6
  428. package/src/test-helpers/mock-pubsub.ts +177 -14
  429. package/src/test-helpers/reqresp-nodes.ts +7 -9
  430. package/src/test-helpers/testbench-utils.ts +157 -74
  431. package/src/testbench/p2p_client_testbench_worker.ts +91 -31
  432. package/src/testbench/worker_client_manager.ts +68 -6
  433. package/src/util.ts +8 -2
  434. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  435. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  436. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  437. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  438. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  439. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  440. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  441. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  442. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  443. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  444. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  445. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  446. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  447. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  448. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  449. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  450. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  451. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  452. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  453. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  454. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  455. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  456. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  457. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  458. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  459. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  460. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  461. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  462. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  463. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  464. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  465. package/dest/mem_pools/tx_pool/index.js +0 -2
  466. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  467. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  468. package/dest/mem_pools/tx_pool/priority.js +0 -15
  469. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  470. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  471. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  472. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  473. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  474. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  475. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  476. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  477. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  478. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  479. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  480. package/dest/services/reqresp/protocols/block.js +0 -32
  481. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  482. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  483. package/src/mem_pools/tx_pool/README.md +0 -270
  484. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  485. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  486. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  487. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  488. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  489. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  490. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  491. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  492. package/src/mem_pools/tx_pool/index.ts +0 -2
  493. package/src/mem_pools/tx_pool/priority.ts +0 -20
  494. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  495. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  496. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  497. package/src/services/reqresp/protocols/block.ts +0 -37
@@ -1,11 +1,13 @@
1
- import type { AttestationPool } from '../../../../mem_pools/attestation_pool/attestation_pool.js';
2
- import type { TxPool } from '../../../../mem_pools/index.js';
1
+ import type { L2BlockSource } from '@aztec/stdlib/block';
2
+ import type { AttestationPoolApi } from '../../../../mem_pools/attestation_pool/attestation_pool.js';
3
+ import type { TxPoolV2 } from '../../../../mem_pools/tx_pool_v2/interfaces.js';
3
4
  import type { ReqRespSubProtocolHandler } from '../../interface.js';
4
5
  /**
5
6
  * Handler for block txs requests
6
7
  * @param attestationPool - the attestation pool to check for block proposals
7
- * @param mempools - the mempools containing the tx pool
8
+ * @param archiver - the archiver to look up blocks by archive root
9
+ * @param txPool - the tx pool to fetch transactions from
8
10
  * @returns the BlockTxs request handler
9
11
  */
10
- export declare function reqRespBlockTxsHandler(attestationPool: AttestationPool, txPool: TxPool): ReqRespSubProtocolHandler;
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfdHhzX2hhbmRsZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL3Byb3RvY29scy9ibG9ja190eHMvYmxvY2tfdHhzX2hhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0EsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDbEcsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDN0QsT0FBTyxLQUFLLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUtwRTs7Ozs7R0FLRztBQUNILHdCQUFnQixzQkFBc0IsQ0FBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLEdBQUcseUJBQXlCLENBZ0RsSCJ9
12
+ export declare function reqRespBlockTxsHandler(attestationPool: AttestationPoolApi, archiver: L2BlockSource, txPool: TxPoolV2): ReqRespSubProtocolHandler;
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfdHhzX2hhbmRsZXIuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL3Byb3RvY29scy9ibG9ja190eHMvYmxvY2tfdHhzX2hhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFLekQsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUNyRyxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUMvRSxPQUFPLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBS3BFOzs7Ozs7R0FNRztBQUNILHdCQUFnQixzQkFBc0IsQ0FDcEMsZUFBZSxFQUFFLGtCQUFrQixFQUNuQyxRQUFRLEVBQUUsYUFBYSxFQUN2QixNQUFNLEVBQUUsUUFBUSxHQUNmLHlCQUF5QixDQW1EM0IifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"block_txs_handler.d.ts","sourceRoot":"","sources":["../../../../../src/services/reqresp/protocols/block_txs/block_txs_handler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4DAA4D,CAAC;AAClG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAKpE;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,eAAe,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,yBAAyB,CAgDlH"}
1
+ {"version":3,"file":"block_txs_handler.d.ts","sourceRoot":"","sources":["../../../../../src/services/reqresp/protocols/block_txs/block_txs_handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4DAA4D,CAAC;AACrG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAC/E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAKpE;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,eAAe,EAAE,kBAAkB,EACnC,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,QAAQ,GACf,yBAAyB,CAmD3B"}
@@ -6,9 +6,10 @@ import { BlockTxsRequest, BlockTxsResponse } from './block_txs_reqresp.js';
6
6
  /**
7
7
  * Handler for block txs requests
8
8
  * @param attestationPool - the attestation pool to check for block proposals
9
- * @param mempools - the mempools containing the tx pool
9
+ * @param archiver - the archiver to look up blocks by archive root
10
+ * @param txPool - the tx pool to fetch transactions from
10
11
  * @returns the BlockTxs request handler
11
- */ export function reqRespBlockTxsHandler(attestationPool, txPool) {
12
+ */ export function reqRespBlockTxsHandler(attestationPool, archiver, txPool) {
12
13
  /**
13
14
  * Handler for block txs requests
14
15
  * @param msg - the block txs request message
@@ -23,28 +24,32 @@ import { BlockTxsRequest, BlockTxsResponse } from './block_txs_reqresp.js';
23
24
  cause: err
24
25
  });
25
26
  }
26
- const blockProposal = await attestationPool.getBlockProposal(request.archiveRoot.toString());
27
+ // First try attestation pool, then fall back to archiver
28
+ let txHashes = (await attestationPool.getBlockProposal(request.archiveRoot.toString()))?.txHashes;
29
+ if (!txHashes) {
30
+ txHashes = (await archiver.getL2BlockByArchive(request.archiveRoot))?.body.txEffects.map((effect)=>effect.txHash);
31
+ }
27
32
  let requestedTxsHashes;
28
33
  if (request.txHashes.length > 0) {
29
34
  requestedTxsHashes = request.txHashes;
30
35
  }
31
- // This is scenario in which we don't have this block proposal the peer is requesting from us
36
+ // This is scenario in which we don't have this block the peer is requesting from us
32
37
  // But peer has sent requested tx hashes, so we can send them the transactions
33
- if (!blockProposal && requestedTxsHashes !== undefined) {
38
+ if (!txHashes && requestedTxsHashes !== undefined) {
34
39
  const responseTxs = (await txPool.getTxsByHash(requestedTxsHashes)).filter((tx)=>!!tx);
35
40
  const response = new BlockTxsResponse(Fr.zero(), new TxArray(...responseTxs), BitVector.init(0, []));
36
41
  return response.toBuffer();
37
42
  }
38
- // If don't have this block proposal and peer has not sent requested tx hashes
39
- if (!blockProposal) {
43
+ // If we don't have this block and peer has not sent requested tx hashes
44
+ if (!txHashes) {
40
45
  throw new ReqRespStatusError(ReqRespStatus.NOT_FOUND);
41
46
  }
42
- const txsAvailableInPool = await txPool.hasTxs(blockProposal.txHashes);
43
- //Map txs in the pool to their indices in the block proposal
47
+ const txsAvailableInPool = await txPool.hasTxs(txHashes);
48
+ // Map txs in the pool to their indices in the block
44
49
  const availableIndices = txsAvailableInPool.map((hasTx, idx)=>hasTx ? idx : -1).filter((idx)=>idx !== -1);
45
- const responseBitVector = BitVector.init(blockProposal.txHashes.length, availableIndices);
50
+ const responseBitVector = BitVector.init(txHashes.length, availableIndices);
46
51
  const requestedIndices = new Set(request.txIndices.getTrueIndices());
47
- requestedTxsHashes = blockProposal.txHashes.filter((_, idx)=>requestedIndices.has(idx));
52
+ requestedTxsHashes = txHashes.filter((_, idx)=>requestedIndices.has(idx));
48
53
  const responseTxs = (await txPool.getTxsByHash(requestedTxsHashes)).filter((tx)=>!!tx);
49
54
  const response = new BlockTxsResponse(request.archiveRoot, new TxArray(...responseTxs), responseBitVector);
50
55
  return response.toBuffer();
@@ -1,8 +1,12 @@
1
1
  import { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import { BufferReader } from '@aztec/foundation/serialize';
3
- import type { BlockProposal } from '@aztec/stdlib/p2p';
4
- import { TxArray, TxHash, TxHashArray } from '@aztec/stdlib/tx';
3
+ import { TxArray, type TxHash, TxHashArray } from '@aztec/stdlib/tx';
5
4
  import { BitVector } from './bitvector.js';
5
+ /** Minimal interface for a block source that provides tx hashes and an archive root. */
6
+ export interface BlockTxsSource {
7
+ txHashes: TxHash[];
8
+ archive: Fr;
9
+ }
6
10
  /**
7
11
  * Request message for requesting specific transactions from a block
8
12
  */
@@ -12,15 +16,16 @@ export declare class BlockTxsRequest {
12
16
  readonly txIndices: BitVector;
13
17
  constructor(archiveRoot: Fr, txHashes: TxHashArray, txIndices: BitVector);
14
18
  /**
15
- * Creates new BlockTxsRequest given proposal and missing tx hashes
19
+ * Creates new BlockTxsRequest given a block txs source and missing tx hashes.
16
20
  *
17
- * @param: blockProposal - The block proposal for which we are making request
18
- * @param: missingTxHashes - Tx hashes from the proposal we are missing
19
- * @param: includeFullTxHashes - Whether to include full list of missing tx hashes in the request or just Bitvector indices
21
+ * @param blockTxsSource - The block or proposal for which we are making the request
22
+ * @param missingTxHashes - Tx hashes from the source we are missing
23
+ * @param includeFullTxHashes - Whether to include full list of missing tx hashes in the request or just Bitvector indices
20
24
  *
21
- * @returns undefined if there were no missingTxHashes matching BlockProposal hashes, otherwise
22
- * returns new BlockTxsRequest*/
23
- static fromBlockProposalAndMissingTxs(blockProposal: BlockProposal, missingTxHashes: TxHash[], includeFullTxHashes?: boolean): BlockTxsRequest | undefined;
25
+ * @returns undefined if there were no missingTxHashes matching the source hashes, otherwise
26
+ * returns new BlockTxsRequest
27
+ */
28
+ static fromTxsSourceAndMissingTxs(blockTxsSource: BlockTxsSource, missingTxHashes: TxHash[], includeFullTxHashes?: boolean): BlockTxsRequest | undefined;
24
29
  /**
25
30
  * Deserializes the BlockTxRequest object from a Buffer
26
31
  * @param buffer - Buffer or BufferReader object to deserialize
@@ -56,4 +61,10 @@ export declare class BlockTxsResponse {
56
61
  toBuffer(): Buffer;
57
62
  static empty(): BlockTxsResponse;
58
63
  }
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfdHhzX3JlcXJlc3AuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL3Byb3RvY29scy9ibG9ja190eHMvYmxvY2tfdHhzX3JlcXJlc3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQXFCLE1BQU0sNkJBQTZCLENBQUM7QUFDOUUsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTNDOztHQUVHO0FBQ0gscUJBQWEsZUFBZTtJQUd4QixRQUFRLENBQUMsV0FBVyxFQUFFLEVBQUU7SUFFeEIsUUFBUSxDQUFDLFFBQVEsRUFBRSxXQUFXO0lBSzlCLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUztJQVQvQixZQUVXLFdBQVcsRUFBRSxFQUFFLEVBRWYsUUFBUSxFQUFFLFdBQVcsRUFLckIsU0FBUyxFQUFFLFNBQVMsRUFDM0I7SUFFSjs7Ozs7Ozs7b0NBUWdDO0lBQ2hDLE1BQU0sQ0FBQyw4QkFBOEIsQ0FDbkMsYUFBYSxFQUFFLGFBQWEsRUFDNUIsZUFBZSxFQUFFLE1BQU0sRUFBRSxFQUN6QixtQkFBbUIsVUFBUSxHQUMxQixlQUFlLEdBQUcsU0FBUyxDQW9CN0I7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLFlBQVksR0FBRyxlQUFlLENBT2hFO0lBRUQ7OztPQUdHO0lBQ0gsUUFBUSxJQUFJLE1BQU0sQ0FFakI7Q0FDRjtBQUVEOztHQUVHO0FBQ0gscUJBQWEsZ0JBQWdCO0lBRXpCLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBRTtJQUN4QixRQUFRLENBQUMsR0FBRyxFQUFFLE9BQU87SUFHckIsUUFBUSxDQUFDLFNBQVMsRUFBRSxTQUFTO0lBTC9CLFlBQ1csV0FBVyxFQUFFLEVBQUUsRUFDZixHQUFHLEVBQUUsT0FBTyxFQUdaLFNBQVMsRUFBRSxTQUFTLEVBQzNCO0lBRUo7Ozs7T0FJRztJQUNILE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxZQUFZLEdBQUcsZ0JBQWdCLENBT2pFO0lBRUQ7Ozs7O09BS0c7SUFDSCxRQUFRLElBQUksTUFBTSxDQUVqQjtJQUVELE1BQU0sQ0FBQyxLQUFLLElBQUksZ0JBQWdCLENBRS9CO0NBQ0YifQ==
64
+ /**
65
+ * Calculate the expected response size for a BLOCK_TXS request.
66
+ * @param requestBuffer - The serialized request buffer containing BlockTxsRequest
67
+ * @returns Expected response size in KB
68
+ */
69
+ export declare function calculateBlockTxsResponseSize(requestBuffer: Buffer): number;
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfdHhzX3JlcXJlc3AuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL3Byb3RvY29scy9ibG9ja190eHMvYmxvY2tfdHhzX3JlcXJlc3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQXFCLE1BQU0sNkJBQTZCLENBQUM7QUFFOUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVyRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0Msd0ZBQXdGO0FBQ3hGLE1BQU0sV0FBVyxjQUFjO0lBQzdCLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUNuQixPQUFPLEVBQUUsRUFBRSxDQUFDO0NBQ2I7QUFFRDs7R0FFRztBQUNILHFCQUFhLGVBQWU7SUFHeEIsUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFFO0lBRXhCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsV0FBVztJQUs5QixRQUFRLENBQUMsU0FBUyxFQUFFLFNBQVM7SUFUL0IsWUFFVyxXQUFXLEVBQUUsRUFBRSxFQUVmLFFBQVEsRUFBRSxXQUFXLEVBS3JCLFNBQVMsRUFBRSxTQUFTLEVBQzNCO0lBRUo7Ozs7Ozs7OztPQVNHO0lBQ0gsTUFBTSxDQUFDLDBCQUEwQixDQUMvQixjQUFjLEVBQUUsY0FBYyxFQUM5QixlQUFlLEVBQUUsTUFBTSxFQUFFLEVBQ3pCLG1CQUFtQixVQUFRLEdBQzFCLGVBQWUsR0FBRyxTQUFTLENBb0I3QjtJQUVEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsWUFBWSxHQUFHLGVBQWUsQ0FPaEU7SUFFRDs7O09BR0c7SUFDSCxRQUFRLElBQUksTUFBTSxDQUVqQjtDQUNGO0FBRUQ7O0dBRUc7QUFDSCxxQkFBYSxnQkFBZ0I7SUFFekIsUUFBUSxDQUFDLFdBQVcsRUFBRSxFQUFFO0lBQ3hCLFFBQVEsQ0FBQyxHQUFHLEVBQUUsT0FBTztJQUdyQixRQUFRLENBQUMsU0FBUyxFQUFFLFNBQVM7SUFML0IsWUFDVyxXQUFXLEVBQUUsRUFBRSxFQUNmLEdBQUcsRUFBRSxPQUFPLEVBR1osU0FBUyxFQUFFLFNBQVMsRUFDM0I7SUFFSjs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLFlBQVksR0FBRyxnQkFBZ0IsQ0FPakU7SUFFRDs7Ozs7T0FLRztJQUNILFFBQVEsSUFBSSxNQUFNLENBRWpCO0lBRUQsTUFBTSxDQUFDLEtBQUssSUFBSSxnQkFBZ0IsQ0FFL0I7Q0FDRjtBQUVEOzs7O0dBSUc7QUFDSCx3QkFBZ0IsNkJBQTZCLENBQUMsYUFBYSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBUzNFIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"block_txs_reqresp.d.ts","sourceRoot":"","sources":["../../../../../src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEhE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C;;GAEG;AACH,qBAAa,eAAe;IAGxB,QAAQ,CAAC,WAAW,EAAE,EAAE;IAExB,QAAQ,CAAC,QAAQ,EAAE,WAAW;IAK9B,QAAQ,CAAC,SAAS,EAAE,SAAS;IAT/B,YAEW,WAAW,EAAE,EAAE,EAEf,QAAQ,EAAE,WAAW,EAKrB,SAAS,EAAE,SAAS,EAC3B;IAEJ;;;;;;;;oCAQgC;IAChC,MAAM,CAAC,8BAA8B,CACnC,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,MAAM,EAAE,EACzB,mBAAmB,UAAQ,GAC1B,eAAe,GAAG,SAAS,CAoB7B;IAED;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,eAAe,CAOhE;IAED;;;OAGG;IACH,QAAQ,IAAI,MAAM,CAEjB;CACF;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAEzB,QAAQ,CAAC,WAAW,EAAE,EAAE;IACxB,QAAQ,CAAC,GAAG,EAAE,OAAO;IAGrB,QAAQ,CAAC,SAAS,EAAE,SAAS;IAL/B,YACW,WAAW,EAAE,EAAE,EACf,GAAG,EAAE,OAAO,EAGZ,SAAS,EAAE,SAAS,EAC3B;IAEJ;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,gBAAgB,CAOjE;IAED;;;;;OAKG;IACH,QAAQ,IAAI,MAAM,CAEjB;IAED,MAAM,CAAC,KAAK,IAAI,gBAAgB,CAE/B;CACF"}
1
+ {"version":3,"file":"block_txs_reqresp.d.ts","sourceRoot":"","sources":["../../../../../src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,EAAE,YAAY,EAAqB,MAAM,6BAA6B,CAAC;AAE9E,OAAO,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,wFAAwF;AACxF,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,EAAE,CAAC;CACb;AAED;;GAEG;AACH,qBAAa,eAAe;IAGxB,QAAQ,CAAC,WAAW,EAAE,EAAE;IAExB,QAAQ,CAAC,QAAQ,EAAE,WAAW;IAK9B,QAAQ,CAAC,SAAS,EAAE,SAAS;IAT/B,YAEW,WAAW,EAAE,EAAE,EAEf,QAAQ,EAAE,WAAW,EAKrB,SAAS,EAAE,SAAS,EAC3B;IAEJ;;;;;;;;;OASG;IACH,MAAM,CAAC,0BAA0B,CAC/B,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,MAAM,EAAE,EACzB,mBAAmB,UAAQ,GAC1B,eAAe,GAAG,SAAS,CAoB7B;IAED;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,eAAe,CAOhE;IAED;;;OAGG;IACH,QAAQ,IAAI,MAAM,CAEjB;CACF;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAEzB,QAAQ,CAAC,WAAW,EAAE,EAAE;IACxB,QAAQ,CAAC,GAAG,EAAE,OAAO;IAGrB,QAAQ,CAAC,SAAS,EAAE,SAAS;IAL/B,YACW,WAAW,EAAE,EAAE,EACf,GAAG,EAAE,OAAO,EAGZ,SAAS,EAAE,SAAS,EAC3B;IAEJ;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,gBAAgB,CAOjE;IAED;;;;;OAKG;IACH,QAAQ,IAAI,MAAM,CAEjB;IAED,MAAM,CAAC,KAAK,IAAI,gBAAgB,CAE/B;CACF;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAS3E"}
@@ -1,5 +1,6 @@
1
1
  import { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
3
+ import { MAX_TX_SIZE_KB } from '@aztec/stdlib/p2p';
3
4
  import { TxArray, TxHashArray } from '@aztec/stdlib/tx';
4
5
  import { BitVector } from './bitvector.js';
5
6
  /**
@@ -20,26 +21,27 @@ import { BitVector } from './bitvector.js';
20
21
  this.txIndices = txIndices;
21
22
  }
22
23
  /**
23
- * Creates new BlockTxsRequest given proposal and missing tx hashes
24
+ * Creates new BlockTxsRequest given a block txs source and missing tx hashes.
24
25
  *
25
- * @param: blockProposal - The block proposal for which we are making request
26
- * @param: missingTxHashes - Tx hashes from the proposal we are missing
27
- * @param: includeFullTxHashes - Whether to include full list of missing tx hashes in the request or just Bitvector indices
26
+ * @param blockTxsSource - The block or proposal for which we are making the request
27
+ * @param missingTxHashes - Tx hashes from the source we are missing
28
+ * @param includeFullTxHashes - Whether to include full list of missing tx hashes in the request or just Bitvector indices
28
29
  *
29
- * @returns undefined if there were no missingTxHashes matching BlockProposal hashes, otherwise
30
- * returns new BlockTxsRequest*/ static fromBlockProposalAndMissingTxs(blockProposal, missingTxHashes, includeFullTxHashes = false) {
30
+ * @returns undefined if there were no missingTxHashes matching the source hashes, otherwise
31
+ * returns new BlockTxsRequest
32
+ */ static fromTxsSourceAndMissingTxs(blockTxsSource, missingTxHashes, includeFullTxHashes = false) {
31
33
  if (missingTxHashes.length === 0) {
32
34
  return undefined; // No missing txs to request
33
35
  }
34
36
  const missingHashesSet = new Set(missingTxHashes.map((t)=>t.toString()));
35
- // We cannot request txs that are not part of the block proposal
36
- if (!missingHashesSet.isSubsetOf(new Set(blockProposal.txHashes.map((t)=>t.toString())))) {
37
+ // We cannot request txs that are not part of the block
38
+ if (!missingHashesSet.isSubsetOf(new Set(blockTxsSource.txHashes.map((t)=>t.toString())))) {
37
39
  return undefined;
38
40
  }
39
- const missingIndices = blockProposal.txHashes.map((hash, idx)=>missingHashesSet.has(hash.toString()) ? idx : -1).filter((i)=>i != -1);
40
- const requestBitVector = BitVector.init(blockProposal.txHashes.length, missingIndices);
41
+ const missingIndices = blockTxsSource.txHashes.map((hash, idx)=>missingHashesSet.has(hash.toString()) ? idx : -1).filter((i)=>i != -1);
42
+ const requestBitVector = BitVector.init(blockTxsSource.txHashes.length, missingIndices);
41
43
  const hashes = includeFullTxHashes ? new TxHashArray(...missingTxHashes) : new TxHashArray();
42
- return new BlockTxsRequest(blockProposal.archive, hashes, requestBitVector);
44
+ return new BlockTxsRequest(blockTxsSource.archive, hashes, requestBitVector);
43
45
  }
44
46
  /**
45
47
  * Deserializes the BlockTxRequest object from a Buffer
@@ -103,3 +105,17 @@ import { BitVector } from './bitvector.js';
103
105
  return new BlockTxsResponse(Fr.ZERO, new TxArray(), BitVector.init(0, []));
104
106
  }
105
107
  }
108
+ /**
109
+ * Calculate the expected response size for a BLOCK_TXS request.
110
+ * @param requestBuffer - The serialized request buffer containing BlockTxsRequest
111
+ * @returns Expected response size in KB
112
+ */ export function calculateBlockTxsResponseSize(requestBuffer) {
113
+ try {
114
+ const request = BlockTxsRequest.fromBuffer(requestBuffer);
115
+ const requestedTxCount = request.txIndices.getTrueIndices().length;
116
+ return requestedTxCount * MAX_TX_SIZE_KB + 1; // +1 KB overhead for serialization
117
+ } catch {
118
+ // If we can't parse the request, fall back to allowing a single transaction response
119
+ return MAX_TX_SIZE_KB + 1;
120
+ }
121
+ }
@@ -5,7 +5,6 @@ export * from './ping.js';
5
5
  export * from './status.js';
6
6
  export * from './tx.js';
7
7
  export * from './goodbye.js';
8
- export * from './block.js';
9
8
  export * from './auth.js';
10
9
  export * from './block_txs/index.js';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL3Byb3RvY29scy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsc0JBQXNCLENBQUMifQ==
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL3Byb3RvY29scy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsc0JBQXNCLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,sBAAsB,CAAC"}
@@ -4,6 +4,5 @@
4
4
  export * from './status.js';
5
5
  export * from './tx.js';
6
6
  export * from './goodbye.js';
7
- export * from './block.js';
8
7
  export * from './auth.js';
9
8
  export * from './block_txs/index.js';
@@ -20,4 +20,10 @@ export declare function reqRespTxHandler(mempools: MemPools): ReqRespSubProtocol
20
20
  * we define Q as max number of transactions per batch, the comment explains why we use 8.
21
21
  */
22
22
  export declare function chunkTxHashesRequest(hashes: TxHash[], chunkSize?: number): Array<TxHashArray>;
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL3Byb3RvY29scy90eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQVcsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSWhFLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHakU7Ozs7Ozs7R0FPRztBQUNILHdCQUFnQixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxHQUFHLHlCQUF5QixDQXdCOUU7QUFFRDs7Ozs7Ozs7R0FRRztBQUdILHdCQUFnQixvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsU0FBUyxTQUFJLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUV4RiJ9
23
+ /**
24
+ * Calculate the expected response size for a TX request.
25
+ * @param requestBuffer - The serialized request buffer containing TxHashArray
26
+ * @returns Expected response size in KB
27
+ */
28
+ export declare function calculateTxResponseSize(requestBuffer: Buffer): number;
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL3Byb3RvY29scy90eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQVcsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSWhFLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHakU7Ozs7Ozs7R0FPRztBQUNILHdCQUFnQixnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsUUFBUSxHQUFHLHlCQUF5QixDQXdCOUU7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILHdCQUFnQixvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLEVBQUUsU0FBUyxTQUFJLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUV4RjtBQUVEOzs7O0dBSUc7QUFDSCx3QkFBZ0IsdUJBQXVCLENBQUMsYUFBYSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBY3JFIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/tx.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAIhE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAGjE;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,yBAAyB,CAwB9E;AAED;;;;;;;;GAQG;AAGH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,SAAI,GAAG,KAAK,CAAC,WAAW,CAAC,CAExF"}
1
+ {"version":3,"file":"tx.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/tx.ts"],"names":[],"mappings":"AAEA,OAAO,EAAW,MAAM,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAIhE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAGjE;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,GAAG,yBAAyB,CAwB9E;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,SAAI,GAAG,KAAK,CAAC,WAAW,CAAC,CAExF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAcrE"}
@@ -1,4 +1,5 @@
1
1
  import { chunk } from '@aztec/foundation/collection';
2
+ import { MAX_TX_SIZE_KB } from '@aztec/stdlib/p2p';
2
3
  import { TxArray, TxHashArray } from '@aztec/stdlib/tx';
3
4
  import { ReqRespStatus, ReqRespStatusError } from '../status.js';
4
5
  /**
@@ -41,8 +42,25 @@ import { ReqRespStatus, ReqRespStatusError } from '../status.js';
41
42
  * @param chunkSize - The size of each chunk. Default is 8. Reasoning:
42
43
  * Per: https://github.com/AztecProtocol/aztec-packages/issues/15149#issuecomment-2999054485
43
44
  * we define Q as max number of transactions per batch, the comment explains why we use 8.
44
- */ //TODO: (mralj) chunk size should by default be 8, this is just temporary until the protocol is implemented correctly
45
- //more info: https://github.com/AztecProtocol/aztec-packages/pull/15516#pullrequestreview-2995474321
46
- export function chunkTxHashesRequest(hashes, chunkSize = 1) {
45
+ */ export function chunkTxHashesRequest(hashes, chunkSize = 8) {
47
46
  return chunk(hashes, chunkSize).map((chunk)=>new TxHashArray(...chunk));
48
47
  }
48
+ /**
49
+ * Calculate the expected response size for a TX request.
50
+ * @param requestBuffer - The serialized request buffer containing TxHashArray
51
+ * @returns Expected response size in KB
52
+ */ export function calculateTxResponseSize(requestBuffer) {
53
+ try {
54
+ const txHashes = TxHashArray.fromBuffer(requestBuffer);
55
+ // TxHashArray.fromBuffer returns empty array on parse failure, so check for that
56
+ if (txHashes.length === 0 && requestBuffer.length > 0) {
57
+ // If we got an empty array but had a non-empty buffer, parsing likely failed
58
+ // Fall back to allowing a single transaction response
59
+ return MAX_TX_SIZE_KB + 1;
60
+ }
61
+ return Math.max(txHashes.length, 1) * MAX_TX_SIZE_KB + 1; // +1 KB overhead, at least 1 tx
62
+ } catch {
63
+ // If we can't parse the request, fall back to allowing a single transaction response
64
+ return MAX_TX_SIZE_KB + 1;
65
+ }
66
+ }
@@ -46,9 +46,10 @@ export declare function prettyPrintRateLimitStatus(status: RateLimitStatus): "Al
46
46
  * 2. Individual rate limits for each peer.
47
47
  *
48
48
  * How it works:
49
- * - When a request comes in, it first checks against the global rate limit.
50
- * - If the global limit allows, it then checks against the specific peer's rate limit.
51
- * - The request is only allowed if both the global and peer-specific limits allow it.
49
+ * - When a request comes in, it first checks against the peer's individual rate limit.
50
+ * - If the peer limit allows, it then checks against the global rate limit.
51
+ * - The request is only allowed if both the peer-specific and global limits allow it.
52
+ * - Checking peer limit first ensures a rate-limited peer cannot exhaust the global quota.
52
53
  * - It automatically creates and manages rate limiters for new peers as they make requests.
53
54
  * - It periodically cleans up rate limiters for inactive peers to conserve memory.
54
55
  *
@@ -101,4 +102,4 @@ export declare class RequestResponseRateLimiter {
101
102
  stop(): void;
102
103
  getRateLimits(protocol: ReqRespSubProtocol): ProtocolRateLimitQuota;
103
104
  }
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZV9saW1pdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9yYXRlLWxpbWl0ZXIvcmF0ZV9saW1pdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWhELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sS0FBSyxFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLDRCQUE0QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFNaEg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxxQkFBYSxlQUFlO0lBRTFCLE9BQU8sQ0FBQyxHQUFHLENBQVM7SUFFcEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBUztJQUUxQyxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBUztJQUV2Qzs7O09BR0c7SUFDSCxZQUFZLFVBQVUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFJbEQ7SUFFRCxLQUFLLElBQUksT0FBTyxDQVVmO0NBQ0Y7QUFTRCxvQkFBWSxlQUFlO0lBQ3pCLFlBQVksSUFBQTtJQUNaLFVBQVUsSUFBQTtJQUNWLE9BQU8sSUFBQTtDQUNSO0FBRUQsd0JBQWdCLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxlQUFlLDZDQVNqRTtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILHFCQUFhLHNCQUFzQjtJQUNqQyxPQUFPLENBQUMsWUFBWSxDQUEyQztJQUMvRCxPQUFPLENBQUMsYUFBYSxDQUFrQjtJQUN2QyxPQUFPLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBUztJQUN4QyxPQUFPLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBUztJQUV6QyxZQUFZLGNBQWMsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUsvRztJQUVELEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLGVBQWUsQ0FzQnJDO0lBRUQsb0JBQW9CLFNBT25CO0NBQ0Y7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUNILHFCQUFhLDBCQUEwQjtJQU9uQyxPQUFPLENBQUMsV0FBVztJQU5yQixPQUFPLENBQUMsdUJBQXVCLENBQWtEO0lBQ2pGLE9BQU8sQ0FBQyxVQUFVLENBQStCO0lBRWpELE9BQU8sQ0FBQyxlQUFlLENBQXlDO0lBRWhFLFlBQ1UsV0FBVyxFQUFFLFdBQVcsRUFDaEMsVUFBVSxHQUFFLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBTSxFQWdCdkQ7SUFFRCxLQUFLLFNBSUo7SUFFRCxLQUFLLENBQUMsV0FBVyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sRUFBRSxNQUFNLEdBQUcsZUFBZSxDQVd0RTtJQUVELG9CQUFvQixTQUVuQjtJQUVEOztPQUVHO0lBQ0gsSUFBSSxTQUVIO0lBRUQsYUFBYSxDQUFDLFFBQVEsRUFBRSxrQkFBa0IsR0FBRyxzQkFBc0IsQ0FFbEU7Q0FDRiJ9
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZV9saW1pdGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9yYXRlLWxpbWl0ZXIvcmF0ZV9saW1pdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWhELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RFLE9BQU8sS0FBSyxFQUFFLHNCQUFzQixFQUFFLGtCQUFrQixFQUFFLDRCQUE0QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFNaEg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxxQkFBYSxlQUFlO0lBRTFCLE9BQU8sQ0FBQyxHQUFHLENBQVM7SUFFcEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBUztJQUUxQyxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBUztJQUV2Qzs7O09BR0c7SUFDSCxZQUFZLFVBQVUsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFJbEQ7SUFFRCxLQUFLLElBQUksT0FBTyxDQVVmO0NBQ0Y7QUFTRCxvQkFBWSxlQUFlO0lBQ3pCLFlBQVksSUFBQTtJQUNaLFVBQVUsSUFBQTtJQUNWLE9BQU8sSUFBQTtDQUNSO0FBRUQsd0JBQWdCLDBCQUEwQixDQUFDLE1BQU0sRUFBRSxlQUFlLDZDQVNqRTtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gscUJBQWEsc0JBQXNCO0lBQ2pDLE9BQU8sQ0FBQyxZQUFZLENBQTJDO0lBQy9ELE9BQU8sQ0FBQyxhQUFhLENBQWtCO0lBQ3ZDLE9BQU8sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFTO0lBQ3hDLE9BQU8sQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFTO0lBRXpDLFlBQVksY0FBYyxFQUFFLE1BQU0sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBSy9HO0lBRUQsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsZUFBZSxDQXlCckM7SUFFRCxvQkFBb0IsU0FPbkI7Q0FDRjtBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ0gscUJBQWEsMEJBQTBCO0lBT25DLE9BQU8sQ0FBQyxXQUFXO0lBTnJCLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBa0Q7SUFDakYsT0FBTyxDQUFDLFVBQVUsQ0FBK0I7SUFFakQsT0FBTyxDQUFDLGVBQWUsQ0FBeUM7SUFFaEUsWUFDVSxXQUFXLEVBQUUsV0FBVyxFQUNoQyxVQUFVLEdBQUUsT0FBTyxDQUFDLDRCQUE0QixDQUFNLEVBZ0J2RDtJQUVELEtBQUssU0FJSjtJQUVELEtBQUssQ0FBQyxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxFQUFFLE1BQU0sR0FBRyxlQUFlLENBV3RFO0lBRUQsb0JBQW9CLFNBRW5CO0lBRUQ7O09BRUc7SUFDSCxJQUFJLFNBRUg7SUFFRCxhQUFhLENBQUMsUUFBUSxFQUFFLGtCQUFrQixHQUFHLHNCQUFzQixDQUVsRTtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"rate_limiter.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/rate-limiter/rate_limiter.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAMhH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,eAAe;IAE1B,OAAO,CAAC,GAAG,CAAS;IAEpB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAE1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC;;;OAGG;IACH,YAAY,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAIlD;IAED,KAAK,IAAI,OAAO,CAUf;CACF;AASD,oBAAY,eAAe;IACzB,YAAY,IAAA;IACZ,UAAU,IAAA;IACV,OAAO,IAAA;CACR;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,eAAe,6CASjE;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,YAAY,CAA2C;IAC/D,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IAEzC,YAAY,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAK/G;IAED,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAsBrC;IAED,oBAAoB,SAOnB;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,0BAA0B;IAOnC,OAAO,CAAC,WAAW;IANrB,OAAO,CAAC,uBAAuB,CAAkD;IACjF,OAAO,CAAC,UAAU,CAA+B;IAEjD,OAAO,CAAC,eAAe,CAAyC;IAEhE,YACU,WAAW,EAAE,WAAW,EAChC,UAAU,GAAE,OAAO,CAAC,4BAA4B,CAAM,EAgBvD;IAED,KAAK,SAIJ;IAED,KAAK,CAAC,WAAW,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAWtE;IAED,oBAAoB,SAEnB;IAED;;OAEG;IACH,IAAI,SAEH;IAED,aAAa,CAAC,QAAQ,EAAE,kBAAkB,GAAG,sBAAsB,CAElE;CACF"}
1
+ {"version":3,"file":"rate_limiter.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/rate-limiter/rate_limiter.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAMhH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,eAAe;IAE1B,OAAO,CAAC,GAAG,CAAS;IAEpB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAE1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAEvC;;;OAGG;IACH,YAAY,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAIlD;IAED,KAAK,IAAI,OAAO,CAUf;CACF;AASD,oBAAY,eAAe;IACzB,YAAY,IAAA;IACZ,UAAU,IAAA;IACV,OAAO,IAAA;CACR;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,eAAe,6CASjE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,YAAY,CAA2C;IAC/D,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IAEzC,YAAY,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAK/G;IAED,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAyBrC;IAED,oBAAoB,SAOnB;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,0BAA0B;IAOnC,OAAO,CAAC,WAAW;IANrB,OAAO,CAAC,uBAAuB,CAAkD;IACjF,OAAO,CAAC,UAAU,CAA+B;IAEjD,OAAO,CAAC,eAAe,CAAyC;IAEhE,YACU,WAAW,EAAE,WAAW,EAChC,UAAU,GAAE,OAAO,CAAC,4BAA4B,CAAM,EAgBvD;IAED,KAAK,SAIJ;IAED,KAAK,CAAC,WAAW,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG,eAAe,CAWtE;IAED,oBAAoB,SAEnB;IAED;;OAEG;IACH,IAAI,SAEH;IAED,aAAa,CAAC,QAAQ,EAAE,kBAAkB,GAAG,sBAAsB,CAElE;CACF"}
@@ -74,9 +74,10 @@ export function prettyPrintRateLimitStatus(status) {
74
74
  * 2. Individual rate limits for each peer.
75
75
  *
76
76
  * How it works:
77
- * - When a request comes in, it first checks against the global rate limit.
78
- * - If the global limit allows, it then checks against the specific peer's rate limit.
79
- * - The request is only allowed if both the global and peer-specific limits allow it.
77
+ * - When a request comes in, it first checks against the peer's individual rate limit.
78
+ * - If the peer limit allows, it then checks against the global rate limit.
79
+ * - The request is only allowed if both the peer-specific and global limits allow it.
80
+ * - Checking peer limit first ensures a rate-limited peer cannot exhaust the global quota.
80
81
  * - It automatically creates and manages rate limiters for new peers as they make requests.
81
82
  * - It periodically cleans up rate limiters for inactive peers to conserve memory.
82
83
  *
@@ -93,9 +94,6 @@ export function prettyPrintRateLimitStatus(status) {
93
94
  this.peerQuotaTimeMs = peerQuotaTimeMs;
94
95
  }
95
96
  allow(peerId) {
96
- if (!this.globalLimiter.allow()) {
97
- return 0;
98
- }
99
97
  const peerIdStr = peerId.toString();
100
98
  let peerLimiter = this.peerLimiters.get(peerIdStr);
101
99
  if (!peerLimiter) {
@@ -108,10 +106,14 @@ export function prettyPrintRateLimitStatus(status) {
108
106
  } else {
109
107
  peerLimiter.lastAccess = Date.now();
110
108
  }
111
- const peerLimitAllowed = peerLimiter.limiter.allow();
112
- if (!peerLimitAllowed) {
109
+ // Check peer limit first: a rate-limited peer must not consume global quota,
110
+ // otherwise one spamming peer can starve all others by exhausting the global bucket.
111
+ if (!peerLimiter.limiter.allow()) {
113
112
  return 1;
114
113
  }
114
+ if (!this.globalLimiter.allow()) {
115
+ return 0;
116
+ }
115
117
  return 2;
116
118
  }
117
119
  cleanupInactivePeers() {
@@ -1,3 +1,3 @@
1
1
  import { type ReqRespSubProtocolRateLimits } from '../interface.js';
2
2
  export declare const DEFAULT_RATE_LIMITS: ReqRespSubProtocolRateLimits;
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZV9saW1pdHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL3JhdGUtbGltaXRlci9yYXRlX2xpbWl0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXNCLEtBQUssNEJBQTRCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUd4RixlQUFPLE1BQU0sbUJBQW1CLEVBQUUsNEJBdUVqQyxDQUFDIn0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF0ZV9saW1pdHMuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL3JhdGUtbGltaXRlci9yYXRlX2xpbWl0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXNCLEtBQUssNEJBQTRCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUd4RixlQUFPLE1BQU0sbUJBQW1CLEVBQUUsNEJBNkRqQyxDQUFDIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"rate_limits.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/rate-limiter/rate_limits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAGxF,eAAO,MAAM,mBAAmB,EAAE,4BAuEjC,CAAC"}
1
+ {"version":3,"file":"rate_limits.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/rate-limiter/rate_limits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAGxF,eAAO,MAAM,mBAAmB,EAAE,4BA6DjC,CAAC"}
@@ -41,16 +41,6 @@ export const DEFAULT_RATE_LIMITS = {
41
41
  quotaCount: 200
42
42
  }
43
43
  },
44
- [ReqRespSubProtocol.BLOCK]: {
45
- peerLimit: {
46
- quotaTimeMs: 1000,
47
- quotaCount: 2
48
- },
49
- globalLimit: {
50
- quotaTimeMs: 1000,
51
- quotaCount: 5
52
- }
53
- },
54
44
  [ReqRespSubProtocol.GOODBYE]: {
55
45
  peerLimit: {
56
46
  quotaTimeMs: 1000,
@@ -4,7 +4,7 @@ import type { Libp2p } from 'libp2p';
4
4
  import type { PeerScoring } from '../peer-manager/peer_scoring.js';
5
5
  import { type P2PReqRespConfig } from './config.js';
6
6
  import { ConnectionSampler } from './connection-sampler/connection_sampler.js';
7
- import { type ReqRespInterface, type ReqRespResponse, ReqRespSubProtocol, type ReqRespSubProtocolHandler, type ReqRespSubProtocolHandlers, type ReqRespSubProtocolRateLimits, type ReqRespSubProtocolValidators, type SubProtocolMap } from './interface.js';
7
+ import { type ReqRespInterface, type ReqRespResponse, ReqRespSubProtocol, type ReqRespSubProtocolHandler, type ReqRespSubProtocolHandlers, type ReqRespSubProtocolRateLimits, type ReqRespSubProtocolValidators, type ShouldRejectPeer, type SubProtocolMap } from './interface.js';
8
8
  /**
9
9
  * The Request Response Service
10
10
  *
@@ -30,9 +30,11 @@ export declare class ReqResp implements ReqRespInterface {
30
30
  private connectionSampler;
31
31
  private rateLimiter;
32
32
  private snappyTransform;
33
+ private shouldRejectPeer;
33
34
  private metrics;
34
35
  constructor(config: P2PReqRespConfig, libp2p: Libp2p, peerScoring: PeerScoring, logger?: import("@aztec/foundation/log").Logger, rateLimits?: Partial<ReqRespSubProtocolRateLimits>, telemetryClient?: TelemetryClient);
35
36
  updateConfig(config: Partial<P2PReqRespConfig>): void;
37
+ setShouldRejectPeer(checker: ShouldRejectPeer): void;
36
38
  get tracer(): import("@aztec/telemetry-client").Tracer;
37
39
  /**
38
40
  * Get the connection sampler instance
@@ -126,4 +128,4 @@ export declare class ReqResp implements ReqRespInterface {
126
128
  private categorizeResponseError;
127
129
  private categorizeConnectionErrors;
128
130
  }
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxcmVzcC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3JlcXJlc3AvcmVxcmVzcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQWMsS0FBSyxlQUFlLEVBQWlDLE1BQU0seUJBQXlCLENBQUM7QUFFMUcsT0FBTyxLQUFLLEVBQXNCLE1BQU0sRUFBVSxNQUFNLG1CQUFtQixDQUFDO0FBQzVFLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQVVyQyxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBR0wsS0FBSyxnQkFBZ0IsRUFDdEIsTUFBTSxhQUFhLENBQUM7QUFFckIsT0FBTyxFQUFFLGlCQUFpQixFQUFpQixNQUFNLDRDQUE0QyxDQUFDO0FBQzlGLE9BQU8sRUFFTCxLQUFLLGdCQUFnQixFQUNyQixLQUFLLGVBQWUsRUFDcEIsa0JBQWtCLEVBQ2xCLEtBQUsseUJBQXlCLEVBQzlCLEtBQUssMEJBQTBCLEVBQy9CLEtBQUssNEJBQTRCLEVBQ2pDLEtBQUssNEJBQTRCLEVBQ2pDLEtBQUssY0FBYyxFQUVwQixNQUFNLGdCQUFnQixDQUFDO0FBU3hCOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxxQkFBYSxPQUFRLFlBQVcsZ0JBQWdCO0lBZ0I1QyxPQUFPLENBQUMsTUFBTTtJQUNkLE9BQU8sQ0FBQyxXQUFXO0lBQ25CLE9BQU8sQ0FBQyxNQUFNO0lBakJoQixPQUFPLENBQUMsMEJBQTBCLENBQWlEO0lBQ25GLE9BQU8sQ0FBQyxhQUFhLENBQTJDO0lBRWhFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBMkM7SUFDdEUsT0FBTyxDQUFDLHFCQUFxQixDQUE2QztJQUUxRSxPQUFPLENBQUMsaUJBQWlCLENBQW9CO0lBQzdDLE9BQU8sQ0FBQyxXQUFXLENBQTZCO0lBRWhELE9BQU8sQ0FBQyxlQUFlLENBQWtCO0lBRXpDLE9BQU8sQ0FBQyxPQUFPLENBQWlCO0lBRWhDLFlBQ0UsTUFBTSxFQUFFLGdCQUFnQixFQUNoQixNQUFNLEVBQUUsTUFBTSxFQUNkLFdBQVcsRUFBRSxXQUFXLEVBQ3hCLE1BQU0seUNBQThCLEVBQzVDLFVBQVUsR0FBRSxPQUFPLENBQUMsNEJBQTRCLENBQU0sRUFDdEQsZUFBZSxHQUFFLGVBQXNDLEVBZ0J4RDtJQUVNLFlBQVksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQVEzRDtJQUVELElBQUksTUFBTSw2Q0FFVDtJQUVEOztPQUVHO0lBQ0gsb0JBQW9CLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLHVDQUF1QyxDQUFDLENBRXZGO0lBRUQ7O09BRUc7SUFDRyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsMEJBQTBCLEVBQUUscUJBQXFCLEVBQUUsNEJBQTRCLGlCQWdCL0c7SUFFSyxjQUFjLENBQ2xCLFdBQVcsRUFBRSxrQkFBa0IsRUFDL0IsT0FBTyxFQUFFLHlCQUF5QixFQUNsQyxTQUFTLEdBQUUsNEJBQTRCLENBQUMsa0JBQWtCLENBQWdELEdBQ3pHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FXZjtJQUVEOztPQUVHO0lBQ0csSUFBSSxrQkFrQlQ7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09BcUJHO0lBUUcsZ0JBQWdCLENBQUMsV0FBVyxTQUFTLGtCQUFrQixFQUMzRCxXQUFXLEVBQUUsV0FBVyxFQUN4QixRQUFRLEVBQUUsWUFBWSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQ2hFLFVBQVUsRUFBRSxNQUFNLEdBQUcsU0FBUyxFQUM5QixTQUFTLFNBQVEsRUFDakIsUUFBUSxTQUErQyxFQUN2RCxnQkFBZ0IsU0FBSSxHQUNuQixPQUFPLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FxTGxFO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXdCRztJQUtVLGlCQUFpQixDQUM1QixNQUFNLEVBQUUsTUFBTSxFQUNkLFdBQVcsRUFBRSxrQkFBa0IsRUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFDZixXQUFXLEdBQUUsTUFBMkIsR0FDdkMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQXFEMUI7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxPQUFPLENBQUMsbUJBQW1CO1lBY2IsV0FBVztZQWtFWCxhQUFhO1lBK0RiLGFBQWE7WUF3Q2IsWUFBWTtJQW1DMUIsT0FBTyxDQUFDLGtCQUFrQjtJQU8xQjs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLHNCQUFzQjtJQWlCOUI7Ozs7T0FJRztJQUNILE9BQU8sQ0FBQyx1QkFBdUI7SUF5Qi9CLE9BQU8sQ0FBQywwQkFBMEI7Q0E4RG5DIn0=
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxcmVzcC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3JlcXJlc3AvcmVxcmVzcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFNQSxPQUFPLEVBQWMsS0FBSyxlQUFlLEVBQWlDLE1BQU0seUJBQXlCLENBQUM7QUFFMUcsT0FBTyxLQUFLLEVBQXNCLE1BQU0sRUFBVSxNQUFNLG1CQUFtQixDQUFDO0FBQzVFLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQVVyQyxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBR0wsS0FBSyxnQkFBZ0IsRUFDdEIsTUFBTSxhQUFhLENBQUM7QUFFckIsT0FBTyxFQUFFLGlCQUFpQixFQUFpQixNQUFNLDRDQUE0QyxDQUFDO0FBQzlGLE9BQU8sRUFFTCxLQUFLLGdCQUFnQixFQUNyQixLQUFLLGVBQWUsRUFDcEIsa0JBQWtCLEVBQ2xCLEtBQUsseUJBQXlCLEVBQzlCLEtBQUssMEJBQTBCLEVBQy9CLEtBQUssNEJBQTRCLEVBQ2pDLEtBQUssNEJBQTRCLEVBQ2pDLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssY0FBYyxFQUlwQixNQUFNLGdCQUFnQixDQUFDO0FBU3hCOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxxQkFBYSxPQUFRLFlBQVcsZ0JBQWdCO0lBa0I1QyxPQUFPLENBQUMsTUFBTTtJQUNkLE9BQU8sQ0FBQyxXQUFXO0lBQ25CLE9BQU8sQ0FBQyxNQUFNO0lBbkJoQixPQUFPLENBQUMsMEJBQTBCLENBQWlEO0lBQ25GLE9BQU8sQ0FBQyxhQUFhLENBQTJDO0lBRWhFLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBMkM7SUFDdEUsT0FBTyxDQUFDLHFCQUFxQixDQUE2QztJQUUxRSxPQUFPLENBQUMsaUJBQWlCLENBQW9CO0lBQzdDLE9BQU8sQ0FBQyxXQUFXLENBQTZCO0lBRWhELE9BQU8sQ0FBQyxlQUFlLENBQWtCO0lBRXpDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBK0I7SUFFdkQsT0FBTyxDQUFDLE9BQU8sQ0FBaUI7SUFFaEMsWUFDRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQ2hCLE1BQU0sRUFBRSxNQUFNLEVBQ2QsV0FBVyxFQUFFLFdBQVcsRUFDeEIsTUFBTSx5Q0FBOEIsRUFDNUMsVUFBVSxHQUFFLE9BQU8sQ0FBQyw0QkFBNEIsQ0FBTSxFQUN0RCxlQUFlLEdBQUUsZUFBc0MsRUFnQnhEO0lBRU0sWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxJQUFJLENBUTNEO0lBRU0sbUJBQW1CLENBQUMsT0FBTyxFQUFFLGdCQUFnQixHQUFHLElBQUksQ0FFMUQ7SUFFRCxJQUFJLE1BQU0sNkNBRVQ7SUFFRDs7T0FFRztJQUNILG9CQUFvQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSx1Q0FBdUMsQ0FBQyxDQUV2RjtJQUVEOztPQUVHO0lBQ0csS0FBSyxDQUFDLG1CQUFtQixFQUFFLDBCQUEwQixFQUFFLHFCQUFxQixFQUFFLDRCQUE0QixpQkFnQi9HO0lBRUssY0FBYyxDQUNsQixXQUFXLEVBQUUsa0JBQWtCLEVBQy9CLE9BQU8sRUFBRSx5QkFBeUIsRUFDbEMsU0FBUyxHQUFFLDRCQUE0QixDQUFDLGtCQUFrQixDQUFnRCxHQUN6RyxPQUFPLENBQUMsSUFBSSxDQUFDLENBV2Y7SUFFRDs7T0FFRztJQUNHLElBQUksa0JBa0JUO0lBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQXFCRztJQVFHLGdCQUFnQixDQUFDLFdBQVcsU0FBUyxrQkFBa0IsRUFDM0QsV0FBVyxFQUFFLFdBQVcsRUFDeEIsUUFBUSxFQUFFLFlBQVksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUNoRSxVQUFVLEVBQUUsTUFBTSxHQUFHLFNBQVMsRUFDOUIsU0FBUyxTQUFRLEVBQ2pCLFFBQVEsU0FBK0MsRUFDdkQsZ0JBQWdCLFNBQUksR0FDbkIsT0FBTyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLENBcUxsRTtJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0F3Qkc7SUFLVSxpQkFBaUIsQ0FDNUIsTUFBTSxFQUFFLE1BQU0sRUFDZCxXQUFXLEVBQUUsa0JBQWtCLEVBQy9CLE9BQU8sRUFBRSxNQUFNLEVBQ2YsV0FBVyxHQUFFLE1BQTJCLEdBQ3ZDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0EyRDFCO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsT0FBTyxDQUFDLG1CQUFtQjtZQWlCYixXQUFXO1lBNERYLGFBQWE7WUEwRWIsYUFBYTtZQXdDYixZQUFZO0lBbUMxQixPQUFPLENBQUMsa0JBQWtCO0lBTzFCOzs7O09BSUc7SUFDSCxPQUFPLENBQUMsc0JBQXNCO0lBaUI5Qjs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLHVCQUF1QjtJQXVDL0IsT0FBTyxDQUFDLDBCQUEwQjtDQThEbkMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"reqresp.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/reqresp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reqresp.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/reqresp.ts"],"names":[],"mappings":"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"}
@@ -380,11 +380,11 @@ import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
380
380
  import { Attributes, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
381
381
  import { pipeline } from 'node:stream/promises';
382
382
  import { CollectiveReqRespTimeoutError, IndividualReqRespTimeoutError, InvalidResponseError } from '../../errors/reqresp.error.js';
383
- import { SnappyTransform } from '../encoding.js';
383
+ import { OversizedSnappyResponseError, SnappyTransform } from '../encoding.js';
384
384
  import { DEFAULT_INDIVIDUAL_REQUEST_TIMEOUT_MS, DEFAULT_REQRESP_DIAL_TIMEOUT_MS } from './config.js';
385
385
  import { BatchConnectionSampler } from './connection-sampler/batch_connection_sampler.js';
386
386
  import { ConnectionSampler, RandomSampler } from './connection-sampler/connection_sampler.js';
387
- import { DEFAULT_SUB_PROTOCOL_VALIDATORS, ReqRespSubProtocol, responseFromBuffer } from './interface.js';
387
+ import { DEFAULT_SUB_PROTOCOL_VALIDATORS, ReqRespSubProtocol, UNAUTHENTICATED_ALLOWED_PROTOCOLS, responseFromBuffer, subProtocolSizeCalculators } from './interface.js';
388
388
  import { ReqRespMetrics } from './metrics.js';
389
389
  import { RateLimitStatus, RequestResponseRateLimiter, prettyPrintRateLimitStatus } from './rate-limiter/rate_limiter.js';
390
390
  import { ReqRespStatus, ReqRespStatusError, parseStatusChunk, prettyPrintReqRespStatus } from './status.js';
@@ -441,6 +441,7 @@ _dec = trackSpan('ReqResp.sendBatchRequest', (subProtocol, requests)=>({
441
441
  connectionSampler;
442
442
  rateLimiter;
443
443
  snappyTransform;
444
+ shouldRejectPeer;
444
445
  metrics;
445
446
  constructor(config, libp2p, peerScoring, logger = createLogger('p2p:reqresp'), rateLimits = {}, telemetryClient = getTelemetryClient()){
446
447
  this.libp2p = libp2p;
@@ -465,6 +466,9 @@ _dec = trackSpan('ReqResp.sendBatchRequest', (subProtocol, requests)=>({
465
466
  this.dialTimeoutMs = config.dialTimeoutMs;
466
467
  }
467
468
  }
469
+ setShouldRejectPeer(checker) {
470
+ this.shouldRejectPeer = checker;
471
+ }
468
472
  get tracer() {
469
473
  return this.metrics.tracer;
470
474
  }
@@ -611,7 +615,7 @@ _dec = trackSpan('ReqResp.sendBatchRequest', (subProtocol, requests)=>({
611
615
  return status === ReqRespStatus.RATE_LIMIT_EXCEEDED;
612
616
  };
613
617
  for (const index of indices){
614
- this.logger.info(`Sending request ${index} to peer ${peerAsString}`);
618
+ this.logger.trace(`Sending request ${index} to peer ${peerAsString}`);
615
619
  const response = await this.sendRequestToPeer(peer, subProtocol, requestBuffers[index]);
616
620
  // Check the status of the response buffer
617
621
  if (response.status !== ReqRespStatus.SUCCESS) {
@@ -709,23 +713,27 @@ _dec = trackSpan('ReqResp.sendBatchRequest', (subProtocol, requests)=>({
709
713
  let stream;
710
714
  try {
711
715
  this.metrics.recordRequestSent(subProtocol);
716
+ // Calculate expected response size based on the request payload
717
+ const expectedSizeKb = subProtocolSizeCalculators[subProtocol](payload);
712
718
  this.logger.trace(`Sending request to peer ${peerId.toString()} on sub protocol ${subProtocol}`);
713
719
  stream = await this.connectionSampler.dialProtocol(peerId, subProtocol, dialTimeout);
714
720
  this.logger.trace(`Opened stream ${stream.id} for sending request to peer ${peerId.toString()} on sub protocol ${subProtocol}`);
715
721
  const timeoutErr = new IndividualReqRespTimeoutError();
722
+ // Create a wrapper to pass the expected size to readMessage
723
+ const readMessageWithSizeLimit = (source)=>this.readMessage(source, expectedSizeKb);
716
724
  const [_, resp] = await executeTimeout((signal)=>Promise.all([
717
725
  pipeline([
718
726
  payload
719
727
  ], stream.sink, {
720
728
  signal
721
729
  }),
722
- pipeline(stream.source, this.readMessage.bind(this), {
730
+ pipeline(stream.source, readMessageWithSizeLimit, {
723
731
  signal
724
732
  })
725
733
  ]), this.individualRequestTimeoutMs, ()=>timeoutErr);
726
734
  return resp;
727
735
  } catch (e) {
728
- this.logger.warn(`SUBPROTOCOL: ${subProtocol}\n`, e);
736
+ this.logger.debug(`SUBPROTOCOL: ${subProtocol}\n`, e);
729
737
  // On error we immediately abort the stream, this is preferred way,
730
738
  // because it signals to the sender that error happened, whereas
731
739
  // closing the stream only closes our side and is much slower
@@ -773,7 +781,10 @@ _dec = trackSpan('ReqResp.sendBatchRequest', (subProtocol, requests)=>({
773
781
  * The message is split into two components
774
782
  * - The first chunk should contain a control byte, indicating the status of the response see `ReqRespStatus`
775
783
  * - The second chunk should contain the response data
776
- */ async readMessage(source) {
784
+ *
785
+ * @param source - The async iterable source of data chunks
786
+ * @param maxSizeKb - Optional maximum expected size in KB for the decompressed response
787
+ */ async readMessage(source, maxSizeKb) {
777
788
  let status;
778
789
  const chunks = [];
779
790
  try {
@@ -794,20 +805,16 @@ _dec = trackSpan('ReqResp.sendBatchRequest', (subProtocol, requests)=>({
794
805
  }
795
806
  }
796
807
  const messageData = Buffer.concat(chunks);
797
- const message = this.snappyTransform.inboundTransformData(messageData);
808
+ const message = this.snappyTransform.inboundTransformData(messageData, undefined, maxSizeKb);
798
809
  return {
799
810
  status: status ?? ReqRespStatus.UNKNOWN,
800
811
  data: message
801
812
  };
802
813
  } catch (e) {
814
+ // All errors (invalid status bytes, oversized snappy responses, corrupt data, etc.)
815
+ // are re-thrown so the caller can penalize the peer via handleResponseError.
803
816
  this.logger.debug(`Reading message failed: ${e.message}`);
804
- let status = ReqRespStatus.UNKNOWN;
805
- if (e instanceof ReqRespStatusError) {
806
- status = e.status;
807
- }
808
- return {
809
- status
810
- };
817
+ throw e;
811
818
  }
812
819
  }
813
820
  /**
@@ -835,6 +842,11 @@ _dec = trackSpan('ReqResp.sendBatchRequest', (subProtocol, requests)=>({
835
842
  this.logger.verbose(`Rate limit exceeded ${prettyPrintRateLimitStatus(rateLimitStatus)} for ${protocol} from ${connection.remotePeer}`);
836
843
  throw new ReqRespStatusError(ReqRespStatus.RATE_LIMIT_EXCEEDED);
837
844
  }
845
+ // When p2pAllowOnlyValidators is enabled, reject unauthenticated peers on data protocols
846
+ if (!UNAUTHENTICATED_ALLOWED_PROTOCOLS.has(protocol) && (this.shouldRejectPeer?.(connection.remotePeer.toString()) ?? false)) {
847
+ this.logger.debug(`Rejecting unauthenticated peer ${connection.remotePeer} on gated protocol ${protocol}`);
848
+ throw new ReqRespStatusError(ReqRespStatus.FAILURE);
849
+ }
838
850
  await this.processStream(protocol, incomingStream);
839
851
  } catch (err) {
840
852
  this.metrics.recordResponseError(protocol);
@@ -855,7 +867,8 @@ _dec = trackSpan('ReqResp.sendBatchRequest', (subProtocol, requests)=>({
855
867
  // and that this stream should be dropped
856
868
  const isMessageToNotWarn = err instanceof Error && [
857
869
  'stream reset',
858
- 'Cannot push value onto an ended pushable'
870
+ 'Cannot push value onto an ended pushable',
871
+ 'read ECONNRESET'
859
872
  ].some((msg)=>err.message.includes(msg));
860
873
  const level = isMessageToNotWarn ? 'debug' : 'warn';
861
874
  this.logger[level]('Unknown stream error while handling the stream, aborting', {
@@ -970,6 +983,18 @@ _dec = trackSpan('ReqResp.sendBatchRequest', (subProtocol, requests)=>({
970
983
  this.logger.debug(`Non-punishable error in ${subProtocol}: ${e.message}`, logTags);
971
984
  return undefined;
972
985
  }
986
+ // Invalid status byte: the peer sent a status byte that doesn't match any known status code.
987
+ // This is a protocol violation, penalize harshly.
988
+ if (e instanceof ReqRespStatusError) {
989
+ this.logger.warn(`Invalid status byte from peer ${peerId.toString()} in ${subProtocol}: ${e.message}`, logTags);
990
+ return PeerErrorSeverity.LowToleranceError;
991
+ }
992
+ // Oversized snappy response: the peer is sending data that exceeds the allowed size.
993
+ // This is a protocol violation that wastes bandwidth, so penalize harshly.
994
+ if (e instanceof OversizedSnappyResponseError) {
995
+ this.logger.warn(`Oversized response from peer ${peerId.toString()} in ${subProtocol}: ${e.message}`, logTags);
996
+ return PeerErrorSeverity.LowToleranceError;
997
+ }
973
998
  return this.categorizeConnectionErrors(e, peerId, subProtocol);
974
999
  }
975
1000
  /*