@aztec/p2p 0.0.1-commit.86469d5 → 0.0.1-commit.8655d4a

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 (549) hide show
  1. package/README.md +129 -3
  2. package/dest/bootstrap/bootstrap.d.ts +1 -1
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +9 -1
  5. package/dest/client/factory.d.ts +13 -12
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +61 -17
  8. package/dest/client/interface.d.ts +58 -36
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +52 -58
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +228 -235
  13. package/dest/config.d.ts +162 -89
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +153 -42
  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 +1 -20
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +0 -21
  22. package/dest/errors/tx-pool.error.d.ts +8 -0
  23. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  24. package/dest/errors/tx-pool.error.js +9 -0
  25. package/dest/index.d.ts +2 -2
  26. package/dest/index.d.ts.map +1 -1
  27. package/dest/index.js +1 -1
  28. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +162 -106
  29. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool.js +511 -3
  31. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  32. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +507 -125
  34. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  35. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  36. package/dest/mem_pools/attestation_pool/index.js +1 -2
  37. package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
  38. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  39. package/dest/mem_pools/attestation_pool/mocks.js +7 -5
  40. package/dest/mem_pools/index.d.ts +3 -3
  41. package/dest/mem_pools/index.d.ts.map +1 -1
  42. package/dest/mem_pools/index.js +1 -1
  43. package/dest/mem_pools/instrumentation.d.ts +4 -2
  44. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  45. package/dest/mem_pools/instrumentation.js +33 -15
  46. package/dest/mem_pools/interface.d.ts +5 -5
  47. package/dest/mem_pools/interface.d.ts.map +1 -1
  48. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  49. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  50. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  51. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
  52. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  53. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
  54. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  55. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  56. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  57. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  58. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  59. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  60. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  61. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  62. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
  63. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  64. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  65. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
  66. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +11 -0
  67. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  68. package/dest/mem_pools/tx_pool_v2/eviction/index.js +12 -0
  69. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  70. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  71. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  72. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  73. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  74. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  75. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  76. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  77. package/dest/mem_pools/{tx_pool → tx_pool_v2}/eviction/invalid_txs_after_mining_rule.js +16 -35
  78. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  82. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  83. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  84. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  85. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  86. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  87. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  88. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  89. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  90. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  91. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  92. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  93. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  94. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  95. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  96. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +218 -0
  97. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  98. package/dest/mem_pools/tx_pool_v2/interfaces.js +10 -0
  99. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +137 -0
  100. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  101. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +223 -0
  102. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  103. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  104. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  105. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
  106. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  107. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +337 -0
  108. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +62 -0
  109. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  110. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +167 -0
  111. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +78 -0
  112. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  113. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +914 -0
  114. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
  115. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  116. package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
  117. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +8 -4
  118. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  119. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  120. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  121. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  122. package/dest/msg_validators/clock_tolerance.js +61 -3
  123. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +10 -4
  124. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  125. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  126. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +10 -4
  127. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  128. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  129. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +21 -8
  130. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  131. package/dest/msg_validators/proposal_validator/proposal_validator.js +90 -44
  132. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  133. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  134. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +11 -18
  135. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  136. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  137. package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
  138. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  139. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  140. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  141. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  142. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +16 -3
  143. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  144. package/dest/msg_validators/tx_validator/block_header_validator.js +1 -1
  145. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  146. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  147. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  148. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  149. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  150. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  151. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  152. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  153. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  154. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +13 -3
  155. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  156. package/dest/msg_validators/tx_validator/double_spend_validator.js +4 -4
  157. package/dest/msg_validators/tx_validator/factory.d.ts +135 -7
  158. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  159. package/dest/msg_validators/tx_validator/factory.js +252 -61
  160. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  161. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  162. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  163. package/dest/msg_validators/tx_validator/gas_validator.d.ts +99 -3
  164. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  165. package/dest/msg_validators/tx_validator/gas_validator.js +137 -53
  166. package/dest/msg_validators/tx_validator/index.d.ts +5 -1
  167. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  168. package/dest/msg_validators/tx_validator/index.js +4 -0
  169. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  170. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  171. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  172. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  173. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  174. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  175. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  176. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  177. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  178. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +20 -4
  179. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  180. package/dest/msg_validators/tx_validator/timestamp_validator.js +6 -6
  181. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  182. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  183. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  184. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  185. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  186. package/dest/msg_validators/tx_validator/tx_validation_cache.js +69 -0
  187. package/dest/services/data_store.d.ts +1 -1
  188. package/dest/services/data_store.d.ts.map +1 -1
  189. package/dest/services/data_store.js +5 -5
  190. package/dest/services/discv5/discV5_service.d.ts +2 -1
  191. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  192. package/dest/services/discv5/discV5_service.js +35 -8
  193. package/dest/services/dummy_service.d.ts +22 -18
  194. package/dest/services/dummy_service.d.ts.map +1 -1
  195. package/dest/services/dummy_service.js +22 -20
  196. package/dest/services/encoding.d.ts +7 -3
  197. package/dest/services/encoding.d.ts.map +1 -1
  198. package/dest/services/encoding.js +18 -11
  199. package/dest/services/gossipsub/index.d.ts +3 -0
  200. package/dest/services/gossipsub/index.d.ts.map +1 -0
  201. package/dest/services/gossipsub/index.js +2 -0
  202. package/dest/services/gossipsub/scoring.d.ts +21 -3
  203. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  204. package/dest/services/gossipsub/scoring.js +24 -7
  205. package/dest/services/gossipsub/topic_score_params.d.ts +184 -0
  206. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  207. package/dest/services/gossipsub/topic_score_params.js +363 -0
  208. package/dest/services/index.d.ts +2 -1
  209. package/dest/services/index.d.ts.map +1 -1
  210. package/dest/services/index.js +1 -0
  211. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  212. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  213. package/dest/services/libp2p/instrumentation.js +14 -0
  214. package/dest/services/libp2p/libp2p_service.d.ts +102 -60
  215. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  216. package/dest/services/libp2p/libp2p_service.js +665 -530
  217. package/dest/services/peer-manager/metrics.d.ts +3 -1
  218. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  219. package/dest/services/peer-manager/metrics.js +6 -0
  220. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  221. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  222. package/dest/services/peer-manager/peer_manager.js +40 -11
  223. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  224. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  225. package/dest/services/peer-manager/peer_scoring.js +57 -12
  226. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +14 -10
  227. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  228. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +104 -118
  229. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +11 -11
  230. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  231. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +11 -13
  232. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  233. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +31 -46
  234. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
  235. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  236. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
  237. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  238. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  239. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  240. package/dest/services/reqresp/config.d.ts +3 -3
  241. package/dest/services/reqresp/config.d.ts.map +1 -1
  242. package/dest/services/reqresp/interface.d.ts +25 -18
  243. package/dest/services/reqresp/interface.d.ts.map +1 -1
  244. package/dest/services/reqresp/interface.js +23 -19
  245. package/dest/services/reqresp/metrics.d.ts +1 -1
  246. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  247. package/dest/services/reqresp/metrics.js +0 -1
  248. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  249. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  250. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +18 -11
  251. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +21 -10
  252. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  253. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +27 -11
  254. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  255. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  256. package/dest/services/reqresp/protocols/index.js +0 -1
  257. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  258. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  259. package/dest/services/reqresp/protocols/tx.js +21 -3
  260. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  261. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  262. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  263. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  264. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  265. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  266. package/dest/services/reqresp/reqresp.d.ts +7 -29
  267. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  268. package/dest/services/reqresp/reqresp.js +53 -218
  269. package/dest/services/service.d.ts +46 -13
  270. package/dest/services/service.d.ts.map +1 -1
  271. package/dest/services/tx_collection/config.d.ts +11 -14
  272. package/dest/services/tx_collection/config.d.ts.map +1 -1
  273. package/dest/services/tx_collection/config.js +26 -33
  274. package/dest/services/tx_collection/file_store_tx_collection.d.ts +37 -0
  275. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  276. package/dest/services/tx_collection/file_store_tx_collection.js +127 -0
  277. package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
  278. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  279. package/dest/services/tx_collection/file_store_tx_source.js +100 -0
  280. package/dest/services/tx_collection/index.d.ts +3 -3
  281. package/dest/services/tx_collection/index.d.ts.map +1 -1
  282. package/dest/services/tx_collection/index.js +1 -1
  283. package/dest/services/tx_collection/instrumentation.js +1 -2
  284. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  285. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  286. package/dest/services/tx_collection/request_tracker.js +84 -0
  287. package/dest/services/tx_collection/tx_collection.d.ts +45 -51
  288. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  289. package/dest/services/tx_collection/tx_collection.js +296 -68
  290. package/dest/services/tx_collection/tx_collection_sink.d.ts +19 -9
  291. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  292. package/dest/services/tx_collection/tx_collection_sink.js +28 -31
  293. package/dest/services/tx_collection/tx_source.d.ts +13 -7
  294. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  295. package/dest/services/tx_collection/tx_source.js +26 -7
  296. package/dest/services/tx_file_store/config.d.ts +16 -0
  297. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  298. package/dest/services/tx_file_store/config.js +22 -0
  299. package/dest/services/tx_file_store/index.d.ts +4 -0
  300. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  301. package/dest/services/tx_file_store/index.js +3 -0
  302. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  303. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  304. package/dest/services/tx_file_store/instrumentation.js +29 -0
  305. package/dest/services/tx_file_store/tx_file_store.d.ts +46 -0
  306. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  307. package/dest/services/tx_file_store/tx_file_store.js +142 -0
  308. package/dest/services/tx_provider.d.ts +6 -4
  309. package/dest/services/tx_provider.d.ts.map +1 -1
  310. package/dest/services/tx_provider.js +12 -8
  311. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  312. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  313. package/dest/test-helpers/make-test-p2p-clients.js +5 -3
  314. package/dest/test-helpers/mock-pubsub.d.ts +46 -6
  315. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  316. package/dest/test-helpers/mock-pubsub.js +115 -14
  317. package/dest/test-helpers/reqresp-nodes.d.ts +5 -7
  318. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  319. package/dest/test-helpers/reqresp-nodes.js +19 -20
  320. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  321. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  322. package/dest/test-helpers/test_tx_provider.js +3 -0
  323. package/dest/test-helpers/testbench-utils.d.ts +53 -50
  324. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  325. package/dest/test-helpers/testbench-utils.js +171 -75
  326. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  327. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  328. package/dest/testbench/p2p_client_testbench_worker.js +94 -48
  329. package/dest/testbench/worker_client_manager.d.ts +12 -6
  330. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  331. package/dest/testbench/worker_client_manager.js +57 -11
  332. package/dest/util.d.ts +13 -8
  333. package/dest/util.d.ts.map +1 -1
  334. package/dest/util.js +35 -14
  335. package/dest/versioning.d.ts +3 -6
  336. package/dest/versioning.d.ts.map +1 -1
  337. package/dest/versioning.js +3 -24
  338. package/package.json +15 -14
  339. package/src/bootstrap/bootstrap.ts +9 -1
  340. package/src/client/factory.ts +130 -30
  341. package/src/client/interface.ts +70 -44
  342. package/src/client/p2p_client.ts +273 -299
  343. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  344. package/src/config.ts +267 -46
  345. package/src/errors/p2p-service.error.ts +11 -0
  346. package/src/errors/reqresp.error.ts +0 -25
  347. package/src/errors/tx-pool.error.ts +12 -0
  348. package/src/index.ts +1 -1
  349. package/src/mem_pools/attestation_pool/attestation_pool.ts +575 -94
  350. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +617 -141
  351. package/src/mem_pools/attestation_pool/index.ts +9 -2
  352. package/src/mem_pools/attestation_pool/mocks.ts +14 -8
  353. package/src/mem_pools/index.ts +2 -2
  354. package/src/mem_pools/instrumentation.ts +22 -14
  355. package/src/mem_pools/interface.ts +4 -4
  356. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  357. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  358. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
  359. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  360. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  361. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
  362. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  363. package/src/mem_pools/tx_pool_v2/eviction/index.ts +28 -0
  364. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  365. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  366. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  367. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  368. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  369. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  370. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  371. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  372. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  373. package/src/mem_pools/tx_pool_v2/interfaces.ts +250 -0
  374. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +349 -0
  375. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  376. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +430 -0
  377. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +238 -0
  378. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1090 -0
  379. package/src/msg_validators/attestation_validator/README.md +49 -0
  380. package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
  381. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +16 -9
  382. package/src/msg_validators/clock_tolerance.ts +79 -3
  383. package/src/msg_validators/proposal_validator/README.md +123 -0
  384. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +24 -4
  385. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +35 -7
  386. package/src/msg_validators/proposal_validator/proposal_validator.ts +114 -47
  387. package/src/msg_validators/tx_validator/README.md +127 -0
  388. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +8 -17
  389. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  390. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  391. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  392. package/src/msg_validators/tx_validator/block_header_validator.ts +15 -3
  393. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  394. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  395. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  396. package/src/msg_validators/tx_validator/double_spend_validator.ts +11 -6
  397. package/src/msg_validators/tx_validator/factory.ts +407 -80
  398. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  399. package/src/msg_validators/tx_validator/gas_validator.ts +199 -54
  400. package/src/msg_validators/tx_validator/index.ts +4 -0
  401. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  402. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  403. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  404. package/src/msg_validators/tx_validator/timestamp_validator.ts +23 -18
  405. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  406. package/src/msg_validators/tx_validator/tx_validation_cache.ts +102 -0
  407. package/src/services/data_store.ts +5 -13
  408. package/src/services/discv5/discV5_service.ts +38 -5
  409. package/src/services/dummy_service.ts +32 -45
  410. package/src/services/encoding.ts +18 -10
  411. package/src/services/gossipsub/README.md +641 -0
  412. package/src/services/gossipsub/index.ts +2 -0
  413. package/src/services/gossipsub/scoring.ts +29 -5
  414. package/src/services/gossipsub/topic_score_params.ts +519 -0
  415. package/src/services/index.ts +1 -0
  416. package/src/services/libp2p/instrumentation.ts +14 -0
  417. package/src/services/libp2p/libp2p_service.ts +716 -586
  418. package/src/services/peer-manager/metrics.ts +7 -0
  419. package/src/services/peer-manager/peer_manager.ts +46 -11
  420. package/src/services/peer-manager/peer_scoring.ts +52 -5
  421. package/src/services/reqresp/README.md +215 -0
  422. package/src/services/reqresp/batch-tx-requester/README.md +53 -14
  423. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +108 -130
  424. package/src/services/reqresp/batch-tx-requester/interface.ts +14 -10
  425. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +30 -71
  426. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  427. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  428. package/src/services/reqresp/config.ts +2 -2
  429. package/src/services/reqresp/interface.ts +45 -46
  430. package/src/services/reqresp/metrics.ts +0 -1
  431. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +25 -14
  432. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +38 -15
  433. package/src/services/reqresp/protocols/index.ts +0 -1
  434. package/src/services/reqresp/protocols/tx.ts +23 -3
  435. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  436. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  437. package/src/services/reqresp/reqresp.ts +61 -264
  438. package/src/services/service.ts +62 -29
  439. package/src/services/tx_collection/config.ts +40 -49
  440. package/src/services/tx_collection/file_store_tx_collection.ts +153 -0
  441. package/src/services/tx_collection/file_store_tx_source.ts +129 -0
  442. package/src/services/tx_collection/index.ts +2 -6
  443. package/src/services/tx_collection/instrumentation.ts +1 -1
  444. package/src/services/tx_collection/request_tracker.ts +127 -0
  445. package/src/services/tx_collection/tx_collection.ts +362 -110
  446. package/src/services/tx_collection/tx_collection_sink.ts +32 -36
  447. package/src/services/tx_collection/tx_source.ts +28 -8
  448. package/src/services/tx_file_store/config.ts +37 -0
  449. package/src/services/tx_file_store/index.ts +3 -0
  450. package/src/services/tx_file_store/instrumentation.ts +36 -0
  451. package/src/services/tx_file_store/tx_file_store.ts +163 -0
  452. package/src/services/tx_provider.ts +15 -9
  453. package/src/test-helpers/make-test-p2p-clients.ts +7 -6
  454. package/src/test-helpers/mock-pubsub.ts +137 -14
  455. package/src/test-helpers/reqresp-nodes.ts +17 -29
  456. package/src/test-helpers/test_tx_provider.ts +5 -0
  457. package/src/test-helpers/testbench-utils.ts +177 -96
  458. package/src/testbench/p2p_client_testbench_worker.ts +100 -63
  459. package/src/testbench/worker_client_manager.ts +72 -25
  460. package/src/util.ts +40 -19
  461. package/src/versioning.ts +3 -33
  462. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  463. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  464. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -305
  465. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  466. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  467. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  468. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  469. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  470. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  471. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  472. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  473. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  474. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  475. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  476. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  477. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  478. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  479. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  480. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  481. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  482. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  483. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  484. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  485. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  486. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  487. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  488. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  489. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  490. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  491. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  492. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  493. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  494. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  495. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  496. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  497. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  498. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  499. package/dest/mem_pools/tx_pool/index.js +0 -2
  500. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  501. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  502. package/dest/mem_pools/tx_pool/priority.js +0 -15
  503. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  504. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  505. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  506. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  507. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  508. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  509. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  510. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  511. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  512. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  513. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  514. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  515. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  516. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  517. package/dest/services/reqresp/protocols/block.js +0 -32
  518. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -53
  519. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  520. package/dest/services/tx_collection/fast_tx_collection.js +0 -311
  521. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -48
  522. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  523. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  524. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -53
  525. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  526. package/dest/services/tx_collection/slow_tx_collection.js +0 -177
  527. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -336
  528. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  529. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  530. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  531. package/src/mem_pools/tx_pool/README.md +0 -270
  532. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  533. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  534. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  535. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  536. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  537. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  538. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  539. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  540. package/src/mem_pools/tx_pool/index.ts +0 -2
  541. package/src/mem_pools/tx_pool/priority.ts +0 -20
  542. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  543. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  544. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  545. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  546. package/src/services/reqresp/protocols/block.ts +0 -37
  547. package/src/services/tx_collection/fast_tx_collection.ts +0 -364
  548. package/src/services/tx_collection/proposal_tx_collector.ts +0 -114
  549. package/src/services/tx_collection/slow_tx_collection.ts +0 -233
@@ -1,5 +1,4 @@
1
1
  // @attribution: lodestar impl for inspiration
2
- import { compactArray } from '@aztec/foundation/collection';
3
2
  import { AbortError, TimeoutError } from '@aztec/foundation/error';
4
3
  import { createLogger } from '@aztec/foundation/log';
5
4
  import { executeTimeout } from '@aztec/foundation/timer';
@@ -11,31 +10,25 @@ import type { Libp2p } from 'libp2p';
11
10
  import { pipeline } from 'node:stream/promises';
12
11
  import type { Uint8ArrayList } from 'uint8arraylist';
13
12
 
14
- import {
15
- CollectiveReqRespTimeoutError,
16
- IndividualReqRespTimeoutError,
17
- InvalidResponseError,
18
- } from '../../errors/reqresp.error.js';
19
- import { SnappyTransform } from '../encoding.js';
13
+ import { IndividualReqRespTimeoutError } from '../../errors/reqresp.error.js';
14
+ import { OversizedSnappyResponseError, SnappyTransform } from '../encoding.js';
20
15
  import type { PeerScoring } from '../peer-manager/peer_scoring.js';
21
16
  import {
22
17
  DEFAULT_INDIVIDUAL_REQUEST_TIMEOUT_MS,
23
18
  DEFAULT_REQRESP_DIAL_TIMEOUT_MS,
24
19
  type P2PReqRespConfig,
25
20
  } from './config.js';
26
- import { BatchConnectionSampler } from './connection-sampler/batch_connection_sampler.js';
27
21
  import { ConnectionSampler, RandomSampler } from './connection-sampler/connection_sampler.js';
28
22
  import {
29
- DEFAULT_SUB_PROTOCOL_VALIDATORS,
30
23
  type ReqRespInterface,
31
24
  type ReqRespResponse,
32
25
  ReqRespSubProtocol,
33
26
  type ReqRespSubProtocolHandler,
34
27
  type ReqRespSubProtocolHandlers,
35
28
  type ReqRespSubProtocolRateLimits,
36
- type ReqRespSubProtocolValidators,
37
- type SubProtocolMap,
38
- responseFromBuffer,
29
+ type ShouldRejectPeer,
30
+ UNAUTHENTICATED_ALLOWED_PROTOCOLS,
31
+ subProtocolSizeCalculators,
39
32
  } from './interface.js';
40
33
  import { ReqRespMetrics } from './metrics.js';
41
34
  import {
@@ -43,13 +36,13 @@ import {
43
36
  RequestResponseRateLimiter,
44
37
  prettyPrintRateLimitStatus,
45
38
  } from './rate-limiter/rate_limiter.js';
46
- import { ReqRespStatus, ReqRespStatusError, parseStatusChunk, prettyPrintReqRespStatus } from './status.js';
39
+ import { ReqRespStatus, ReqRespStatusError, parseStatusChunk } from './status.js';
47
40
 
48
41
  /**
49
42
  * The Request Response Service
50
43
  *
51
44
  * It allows nodes to request specific information from their peers, its use case covers recovering
52
- * information that was missed during a syncronisation or a gossip event.
45
+ * information that was missed during a synchronisation or a gossip event.
53
46
  *
54
47
  * This service implements the request response sub protocol, it is heavily inspired from
55
48
  * ethereum implementations of the same name.
@@ -64,13 +57,14 @@ export class ReqResp implements ReqRespInterface {
64
57
  private dialTimeoutMs: number = DEFAULT_REQRESP_DIAL_TIMEOUT_MS;
65
58
 
66
59
  private subProtocolHandlers: Partial<ReqRespSubProtocolHandlers> = {};
67
- private subProtocolValidators: Partial<ReqRespSubProtocolValidators> = {};
68
60
 
69
61
  private connectionSampler: ConnectionSampler;
70
62
  private rateLimiter: RequestResponseRateLimiter;
71
63
 
72
64
  private snappyTransform: SnappyTransform;
73
65
 
66
+ private shouldRejectPeer: ShouldRejectPeer | undefined;
67
+
74
68
  private metrics: ReqRespMetrics;
75
69
 
76
70
  constructor(
@@ -107,6 +101,10 @@ export class ReqResp implements ReqRespInterface {
107
101
  }
108
102
  }
109
103
 
104
+ public setShouldRejectPeer(checker: ShouldRejectPeer): void {
105
+ this.shouldRejectPeer = checker;
106
+ }
107
+
110
108
  get tracer() {
111
109
  return this.metrics.tracer;
112
110
  }
@@ -121,11 +119,11 @@ export class ReqResp implements ReqRespInterface {
121
119
  /**
122
120
  * Start the reqresp service
123
121
  */
124
- async start(subProtocolHandlers: ReqRespSubProtocolHandlers, subProtocolValidators: ReqRespSubProtocolValidators) {
122
+ async start(subProtocolHandlers: ReqRespSubProtocolHandlers) {
125
123
  Object.assign(this.subProtocolHandlers, subProtocolHandlers);
126
- Object.assign(this.subProtocolValidators, subProtocolValidators);
127
124
 
128
- // Register all protocol handlers
125
+ // Register streamHandler with libp2p.
126
+ // The streamHandler is responsible for reading the incoming stream, determining the protocol, then triggering the appropriate handler.
129
127
  for (const subProtocol of Object.keys(subProtocolHandlers)) {
130
128
  this.logger.debug(`Registering handler for sub protocol ${subProtocol}`);
131
129
  await this.libp2p.handle(
@@ -139,13 +137,8 @@ export class ReqResp implements ReqRespInterface {
139
137
  this.rateLimiter.start();
140
138
  }
141
139
 
142
- async addSubProtocol(
143
- subProtocol: ReqRespSubProtocol,
144
- handler: ReqRespSubProtocolHandler,
145
- validator: ReqRespSubProtocolValidators[ReqRespSubProtocol] = DEFAULT_SUB_PROTOCOL_VALIDATORS[subProtocol],
146
- ): Promise<void> {
140
+ async addSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void> {
147
141
  this.subProtocolHandlers[subProtocol] = handler;
148
- this.subProtocolValidators[subProtocol] = validator;
149
142
  this.logger.debug(`Registering handler for sub protocol ${subProtocol}`);
150
143
  await this.libp2p.handle(
151
144
  subProtocol,
@@ -179,225 +172,6 @@ export class ReqResp implements ReqRespInterface {
179
172
  // NOTE: We assume libp2p instance is managed by the caller
180
173
  }
181
174
 
182
- /**
183
- * Request multiple messages over the same sub protocol, balancing the requests across peers.
184
- *
185
- * @devnote
186
- * - The function prioritizes sending requests to free peers using a batch sampling strategy.
187
- * - If a peer fails to respond or returns an invalid response, it is removed from the sampling pool and replaced.
188
- * - The function stops retrying once all requests are processed, no active peers remain, or the maximum retry attempts are reached.
189
- * - Responses are validated using a custom validator for the sub-protocol.*
190
- *
191
- * Requests are sent in parallel to each peer, but multiple requests are sent to the same peer in series
192
- * - If a peer fails to respond or returns an invalid response, it is removed from the sampling pool and replaced.
193
- * - The function stops retrying once all requests are processed, no active peers remain, or the maximum retry attempts are reached.
194
- * - Responses are validated using a custom validator for the sub-protocol.*
195
- *
196
- * @param subProtocol
197
- * @param requests
198
- * @param timeoutMs
199
- * @param maxPeers
200
- * @returns
201
- *
202
- * @throws {CollectiveReqRespTimeoutError} - If the request batch exceeds the specified timeout (`timeoutMs`).
203
- */
204
- @trackSpan(
205
- 'ReqResp.sendBatchRequest',
206
- (subProtocol: ReqRespSubProtocol, requests: InstanceType<SubProtocolMap[ReqRespSubProtocol]['request']>[]) => ({
207
- [Attributes.P2P_REQ_RESP_PROTOCOL]: subProtocol,
208
- [Attributes.P2P_REQ_RESP_BATCH_REQUESTS_COUNT]: requests.length,
209
- }),
210
- )
211
- async sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(
212
- subProtocol: SubProtocol,
213
- requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[],
214
- pinnedPeer: PeerId | undefined,
215
- timeoutMs = 10000,
216
- maxPeers = Math.max(10, Math.ceil(requests.length / 3)),
217
- maxRetryAttempts = 3,
218
- ): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]> {
219
- const responseValidator = this.subProtocolValidators[subProtocol] ?? DEFAULT_SUB_PROTOCOL_VALIDATORS[subProtocol];
220
- const responses: InstanceType<SubProtocolMap[SubProtocol]['response']>[] = new Array(requests.length);
221
- const requestBuffers = requests.map(req => req.toBuffer());
222
- const isEmptyResponse = (value: unknown): boolean => {
223
- // Some responses serialize to a non-empty buffer even when they contain no items (e.g., empty TxArray).
224
- if (!value || typeof value !== 'object') {
225
- return false;
226
- }
227
- const length = (value as { length?: number }).length;
228
- return typeof length === 'number' && length === 0;
229
- };
230
-
231
- const requestFunction = async (signal: AbortSignal) => {
232
- // Track which requests still need to be processed
233
- const pendingRequestIndices = new Set(requestBuffers.map((_, i) => i));
234
-
235
- // Create batch sampler with the total number of requests and max peers
236
- const batchSampler = new BatchConnectionSampler(
237
- this.connectionSampler,
238
- requests.length,
239
- maxPeers,
240
- compactArray([pinnedPeer]), // Exclude pinned peer from sampling, we will forcefully send all requests to it
241
- createLogger(`${this.logger.module}:batch-connection-sampler`),
242
- );
243
-
244
- if (batchSampler.activePeerCount === 0 && !pinnedPeer) {
245
- this.logger.warn('No active peers to send requests to');
246
- return [];
247
- }
248
-
249
- // This is where it gets fun
250
- // The outer loop is the retry loop, we will continue to retry until we process all indices we have
251
- // not received a response for, or we have reached the max retry attempts
252
-
253
- // The inner loop is the batch loop, we will process all requests for each peer in parallel
254
- // We will then process the results of the requests, and resample any peers that failed to respond
255
- // We will continue to retry until we have processed all indices, or we have reached the max retry attempts
256
-
257
- let retryAttempts = 0;
258
- while (pendingRequestIndices.size > 0 && batchSampler.activePeerCount > 0 && retryAttempts < maxRetryAttempts) {
259
- if (signal.aborted) {
260
- throw new AbortError('Batch request aborted');
261
- }
262
- // Process requests in parallel for each available peer
263
- type BatchEntry = { peerId: PeerId; indices: number[] };
264
- const requestBatches = new Map<string, BatchEntry>();
265
-
266
- // Group requests by peer
267
- for (const requestIndex of pendingRequestIndices) {
268
- const peer = batchSampler.getPeerForRequest(requestIndex);
269
- if (!peer) {
270
- // No peer available for this specific index (all peers exhausted for it)
271
- // Skip this index for now - it stays in pendingRequestIndices for retry
272
- continue;
273
- }
274
- const peerAsString = peer.toString();
275
- if (!requestBatches.has(peerAsString)) {
276
- requestBatches.set(peerAsString, { peerId: peer, indices: [] });
277
- }
278
- requestBatches.get(peerAsString)!.indices.push(requestIndex);
279
- }
280
-
281
- // If there is a pinned peer, we will always send every request to that peer
282
- // We use the default limits for the subprotocol to avoid hitting the rate limiter
283
- if (pinnedPeer) {
284
- const limit = this.rateLimiter.getRateLimits(subProtocol).peerLimit.quotaCount;
285
- requestBatches.set(pinnedPeer.toString(), {
286
- peerId: pinnedPeer,
287
- indices: Array.from(pendingRequestIndices.values()).slice(0, limit),
288
- });
289
- }
290
-
291
- // If no requests could be assigned (all peers exhausted for all indices), exit early
292
- if (requestBatches.size === 0) {
293
- this.logger.warn('No peers available for any pending request indices, stopping batch request');
294
- break;
295
- }
296
-
297
- // Make parallel requests for each peer's batch
298
- // A batch entry will look something like this:
299
- // PeerId0: [0, 1, 2, 3]
300
- // PeerId1: [4, 5, 6, 7]
301
-
302
- // Peer Id 0 will send requests 0, 1, 2, 3 in serial
303
- // while simultaneously Peer Id 1 will send requests 4, 5, 6, 7 in serial
304
-
305
- const batchResults = await Promise.all(
306
- Array.from(requestBatches.entries()).map(async ([peerAsString, { peerId: peer, indices }]) => {
307
- try {
308
- const markIndexFailed = (index: number) => batchSampler.markPeerFailedForIndex(peer, index);
309
- // Requests all going to the same peer are sent synchronously
310
- const peerResults: { index: number; response: InstanceType<SubProtocolMap[SubProtocol]['response']> }[] =
311
- [];
312
- let shouldReplacePeer = false;
313
- const handleFailure = (status: ReqRespStatus, index: number) => {
314
- this.logger.warn(
315
- `Request to peer ${peerAsString} failed with status ${prettyPrintReqRespStatus(status)}`,
316
- );
317
- markIndexFailed(index);
318
- return status === ReqRespStatus.RATE_LIMIT_EXCEEDED;
319
- };
320
-
321
- for (const index of indices) {
322
- this.logger.info(`Sending request ${index} to peer ${peerAsString}`);
323
- const response = await this.sendRequestToPeer(peer, subProtocol, requestBuffers[index]);
324
-
325
- // Check the status of the response buffer
326
- if (response.status !== ReqRespStatus.SUCCESS) {
327
- shouldReplacePeer = handleFailure(response.status, index);
328
- if (shouldReplacePeer) {
329
- break;
330
- }
331
- continue;
332
- }
333
-
334
- if (response.data.length === 0) {
335
- markIndexFailed(index);
336
- continue;
337
- }
338
-
339
- const object = responseFromBuffer(subProtocol, response.data);
340
- if (isEmptyResponse(object)) {
341
- markIndexFailed(index);
342
- continue;
343
- }
344
-
345
- const isValid = await responseValidator(requests[index], object, peer);
346
- if (!isValid) {
347
- markIndexFailed(index);
348
- continue;
349
- }
350
-
351
- peerResults.push({ index, response: object });
352
- }
353
-
354
- // If peer had a hard failure (rate limit), replace it for future iterations
355
- if (shouldReplacePeer) {
356
- this.logger.warn(`Peer ${peerAsString} hit a hard failure, removing from sampler`);
357
- batchSampler.removePeerAndReplace(peer);
358
- }
359
-
360
- return { peer, results: peerResults };
361
- } catch (error) {
362
- this.logger.warn(`Failed batch request to peer ${peerAsString}:`, error);
363
- batchSampler.removePeerAndReplace(peer);
364
- return { peer, results: [] };
365
- }
366
- }),
367
- );
368
-
369
- // Process results
370
- for (const { results } of batchResults) {
371
- for (const { index, response } of results) {
372
- if (response) {
373
- responses[index] = response;
374
- pendingRequestIndices.delete(index);
375
- }
376
- }
377
- }
378
-
379
- retryAttempts++;
380
- }
381
-
382
- if (retryAttempts >= maxRetryAttempts) {
383
- this.logger.warn(`Max retry attempts ${maxRetryAttempts} reached for batch request`);
384
- }
385
-
386
- return responses;
387
- };
388
-
389
- try {
390
- return await executeTimeout<InstanceType<SubProtocolMap[SubProtocol]['response']>[]>(
391
- requestFunction,
392
- timeoutMs,
393
- () => new CollectiveReqRespTimeoutError(),
394
- );
395
- } catch (e: any) {
396
- this.logger.warn(`${e.message} | subProtocol: ${subProtocol}`);
397
- return [];
398
- }
399
- }
400
-
401
175
  /**
402
176
  * Sends a request to a specific peer
403
177
  *
@@ -437,6 +211,9 @@ export class ReqResp implements ReqRespInterface {
437
211
  try {
438
212
  this.metrics.recordRequestSent(subProtocol);
439
213
 
214
+ // Calculate expected response size based on the request payload
215
+ const expectedSizeKb = subProtocolSizeCalculators[subProtocol](payload);
216
+
440
217
  this.logger.trace(`Sending request to peer ${peerId.toString()} on sub protocol ${subProtocol}`);
441
218
  stream = await this.connectionSampler.dialProtocol(peerId, subProtocol, dialTimeout);
442
219
  this.logger.trace(
@@ -444,18 +221,21 @@ export class ReqResp implements ReqRespInterface {
444
221
  );
445
222
 
446
223
  const timeoutErr = new IndividualReqRespTimeoutError();
224
+ // Create a wrapper to pass the expected size to readMessage
225
+ const readMessageWithSizeLimit = (source: AsyncIterable<Uint8ArrayList>) =>
226
+ this.readMessage(source, expectedSizeKb);
447
227
  const [_, resp] = await executeTimeout(
448
228
  signal =>
449
229
  Promise.all([
450
230
  pipeline([payload], stream!.sink, { signal }),
451
- pipeline(stream!.source, this.readMessage.bind(this), { signal }),
231
+ pipeline(stream!.source, readMessageWithSizeLimit, { signal }),
452
232
  ]),
453
233
  this.individualRequestTimeoutMs,
454
234
  () => timeoutErr,
455
235
  );
456
236
  return resp;
457
237
  } catch (e: any) {
458
- this.logger.warn(`SUBPROTOCOL: ${subProtocol}\n`, e);
238
+ this.logger.debug(`SUBPROTOCOL: ${subProtocol}\n`, e);
459
239
  // On error we immediately abort the stream, this is preferred way,
460
240
  // because it signals to the sender that error happened, whereas
461
241
  // closing the stream only closes our side and is much slower
@@ -510,8 +290,11 @@ export class ReqResp implements ReqRespInterface {
510
290
  * The message is split into two components
511
291
  * - The first chunk should contain a control byte, indicating the status of the response see `ReqRespStatus`
512
292
  * - The second chunk should contain the response data
293
+ *
294
+ * @param source - The async iterable source of data chunks
295
+ * @param maxSizeKb - Optional maximum expected size in KB for the decompressed response
513
296
  */
514
- private async readMessage(source: AsyncIterable<Uint8ArrayList>): Promise<ReqRespResponse> {
297
+ private async readMessage(source: AsyncIterable<Uint8ArrayList>, maxSizeKb?: number): Promise<ReqRespResponse> {
515
298
  let status: ReqRespStatus | undefined;
516
299
  const chunks: Uint8Array[] = [];
517
300
 
@@ -536,23 +319,17 @@ export class ReqResp implements ReqRespInterface {
536
319
  }
537
320
 
538
321
  const messageData = Buffer.concat(chunks);
539
- const message: Buffer = this.snappyTransform.inboundTransformData(messageData);
322
+ const message: Buffer = this.snappyTransform.inboundTransformData(messageData, undefined, maxSizeKb);
540
323
 
541
324
  return {
542
325
  status: status ?? ReqRespStatus.UNKNOWN,
543
326
  data: message,
544
327
  };
545
328
  } catch (e: any) {
329
+ // All errors (invalid status bytes, oversized snappy responses, corrupt data, etc.)
330
+ // are re-thrown so the caller can penalize the peer via handleResponseError.
546
331
  this.logger.debug(`Reading message failed: ${e.message}`);
547
-
548
- let status = ReqRespStatus.UNKNOWN;
549
- if (e instanceof ReqRespStatusError) {
550
- status = e.status;
551
- }
552
-
553
- return {
554
- status,
555
- };
332
+ throw e;
556
333
  }
557
334
  }
558
335
 
@@ -592,6 +369,15 @@ export class ReqResp implements ReqRespInterface {
592
369
  throw new ReqRespStatusError(ReqRespStatus.RATE_LIMIT_EXCEEDED);
593
370
  }
594
371
 
372
+ // When p2pAllowOnlyValidators is enabled, reject unauthenticated peers on data protocols
373
+ if (
374
+ !UNAUTHENTICATED_ALLOWED_PROTOCOLS.has(protocol) &&
375
+ (this.shouldRejectPeer?.(connection.remotePeer.toString()) ?? false)
376
+ ) {
377
+ this.logger.debug(`Rejecting unauthenticated peer ${connection.remotePeer} on gated protocol ${protocol}`);
378
+ throw new ReqRespStatusError(ReqRespStatus.FAILURE);
379
+ }
380
+
595
381
  await this.processStream(protocol, incomingStream);
596
382
  } catch (err: any) {
597
383
  this.metrics.recordResponseError(protocol);
@@ -617,7 +403,9 @@ export class ReqResp implements ReqRespInterface {
617
403
  // and that this stream should be dropped
618
404
  const isMessageToNotWarn =
619
405
  err instanceof Error &&
620
- ['stream reset', 'Cannot push value onto an ended pushable'].some(msg => err.message.includes(msg));
406
+ ['stream reset', 'Cannot push value onto an ended pushable', 'read ECONNRESET'].some(msg =>
407
+ err.message.includes(msg),
408
+ );
621
409
  const level = isMessageToNotWarn ? 'debug' : 'warn';
622
410
  this.logger[level]('Unknown stream error while handling the stream, aborting', {
623
411
  protocol,
@@ -734,13 +522,13 @@ export class ReqResp implements ReqRespInterface {
734
522
  ): PeerErrorSeverity | undefined {
735
523
  const logTags = { peerId: peerId.toString(), subProtocol };
736
524
 
737
- //Punishable error - peer should never send badly formed request
525
+ // Punishable error - peer should never send badly formed request
738
526
  if (e instanceof ReqRespStatusError && e.status === ReqRespStatus.BADLY_FORMED_REQUEST) {
739
527
  this.logger.debug(`Punishable error in ${subProtocol}: ${e.cause}`, logTags);
740
528
  return PeerErrorSeverity.LowToleranceError;
741
529
  }
742
530
 
743
- //TODO: (mralj): think if we should penalize peer here based on connection errors
531
+ // TODO: (mralj): think if we should penalize peer here based on connection errors
744
532
  return undefined;
745
533
  }
746
534
 
@@ -762,10 +550,18 @@ export class ReqResp implements ReqRespInterface {
762
550
  return undefined;
763
551
  }
764
552
 
765
- // We do not punish a collective timeout, as the node triggers this interupt, independent of the peer's behaviour
766
- if (e instanceof CollectiveReqRespTimeoutError || e instanceof InvalidResponseError) {
767
- this.logger.debug(`Non-punishable error in ${subProtocol}: ${e.message}`, logTags);
768
- return undefined;
553
+ // Invalid status byte: the peer sent a status byte that doesn't match any known status code.
554
+ // This is a protocol violation, penalize harshly.
555
+ if (e instanceof ReqRespStatusError) {
556
+ this.logger.warn(`Invalid status byte from peer ${peerId.toString()} in ${subProtocol}: ${e.message}`, logTags);
557
+ return PeerErrorSeverity.LowToleranceError;
558
+ }
559
+
560
+ // Oversized snappy response: the peer is sending data that exceeds the allowed size.
561
+ // This is a protocol violation that wastes bandwidth, so penalize harshly.
562
+ if (e instanceof OversizedSnappyResponseError) {
563
+ this.logger.warn(`Oversized response from peer ${peerId.toString()} in ${subProtocol}: ${e.message}`, logTags);
564
+ return PeerErrorSeverity.LowToleranceError;
769
565
  }
770
566
 
771
567
  return this.categorizeConnectionErrors(e, peerId, subProtocol);
@@ -773,7 +569,8 @@ export class ReqResp implements ReqRespInterface {
773
569
 
774
570
  /*
775
571
  * Errors specific to connection handling
776
- * These can happen both when sending request and response*/
572
+ * These can happen both when sending request and response.
573
+ */
777
574
  private categorizeConnectionErrors(
778
575
  e: any,
779
576
  peerId: PeerId,
@@ -1,6 +1,13 @@
1
+ import type { SlotNumber } from '@aztec/foundation/branded-types';
1
2
  import type { EthAddress } from '@aztec/foundation/eth-address';
2
3
  import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
3
- import type { BlockProposal, CheckpointAttestation, CheckpointProposalCore, Gossipable } from '@aztec/stdlib/p2p';
4
+ import type {
5
+ BlockProposal,
6
+ CheckpointAttestation,
7
+ CheckpointProposalCore,
8
+ Gossipable,
9
+ TopicType,
10
+ } from '@aztec/stdlib/p2p';
4
11
  import type { Tx } from '@aztec/stdlib/tx';
5
12
 
6
13
  import type { PeerId } from '@libp2p/interface';
@@ -10,12 +17,7 @@ import type EventEmitter from 'events';
10
17
  import type { BatchTxRequesterLibP2PService } from './reqresp/batch-tx-requester/interface.js';
11
18
  import type { P2PReqRespConfig } from './reqresp/config.js';
12
19
  import type { StatusMessage } from './reqresp/index.js';
13
- import type {
14
- ReqRespSubProtocol,
15
- ReqRespSubProtocolHandler,
16
- ReqRespSubProtocolValidators,
17
- SubProtocolMap,
18
- } from './reqresp/interface.js';
20
+ import type { ReqRespSubProtocol, ReqRespSubProtocolHandler } from './reqresp/interface.js';
19
21
  import type { AuthRequest, AuthResponse } from './reqresp/protocols/auth.js';
20
22
 
21
23
  export enum PeerDiscoveryState {
@@ -43,6 +45,34 @@ export type P2PCheckpointReceivedCallback = (
43
45
 
44
46
  export type AuthReceivedCallback = (peerId: PeerId, authRequest: AuthRequest) => Promise<AuthResponse | undefined>;
45
47
 
48
+ /** Minimal info passed to the duplicate proposal callback. */
49
+ export type DuplicateProposalInfo = {
50
+ slot: SlotNumber;
51
+ proposer: EthAddress;
52
+ type: 'checkpoint' | 'block';
53
+ };
54
+
55
+ /**
56
+ * Callback for when a duplicate proposal is detected (equivocation).
57
+ * Invoked on the first duplicate (when count goes from 1 to 2).
58
+ */
59
+ export type P2PDuplicateProposalCallback = (info: DuplicateProposalInfo) => void;
60
+
61
+ /** Minimal info passed to the duplicate attestation callback. */
62
+ export type DuplicateAttestationInfo = {
63
+ slot: SlotNumber;
64
+ attester: EthAddress;
65
+ };
66
+
67
+ /**
68
+ * Callback for when a duplicate attestation is detected (equivocation).
69
+ * A validator signing attestations for different proposals at the same slot.
70
+ * Invoked on the first duplicate (when count goes from 1 to 2).
71
+ */
72
+ export type P2PDuplicateAttestationCallback = (info: DuplicateAttestationInfo) => void;
73
+
74
+ export type P2PCheckpointAttestationCallback = (attestation: CheckpointAttestation) => void;
75
+
46
76
  /**
47
77
  * The interface for a P2P service implementation.
48
78
  */
@@ -65,38 +95,38 @@ export interface P2PService {
65
95
  */
66
96
  propagate<T extends Gossipable>(message: T): Promise<void>;
67
97
 
98
+ // Leaky abstraction: fix https://github.com/AztecProtocol/aztec-packages/issues/7963
99
+ registerBlockReceivedCallback(callback: P2PBlockReceivedCallback): void;
100
+
101
+ registerValidatorCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback): void;
102
+
103
+ registerAllNodesCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback): void;
104
+
68
105
  /**
69
- * Send a batch of requests to peers, and return the responses
70
- *
71
- * @param protocol - The request response protocol to use
72
- * @param requests - The requests to send to the peers
73
- * @returns The responses to the requests
106
+ * Registers a callback invoked when a duplicate proposal is detected (equivocation).
107
+ * The callback is triggered on the first duplicate (when count goes from 1 to 2).
74
108
  */
75
- sendBatchRequest<Protocol extends ReqRespSubProtocol>(
76
- protocol: Protocol,
77
- requests: InstanceType<SubProtocolMap[Protocol]['request']>[],
78
- pinnedPeerId?: PeerId,
79
- timeoutMs?: number,
80
- maxPeers?: number,
81
- maxRetryAttempts?: number,
82
- ): Promise<InstanceType<SubProtocolMap[Protocol]['response']>[]>;
109
+ registerDuplicateProposalCallback(callback: P2PDuplicateProposalCallback): void;
83
110
 
84
- // Leaky abstraction: fix https://github.com/AztecProtocol/aztec-packages/issues/7963
85
- registerBlockReceivedCallback(callback: P2PBlockReceivedCallback): void;
111
+ /**
112
+ * Registers a callback invoked when a duplicate attestation is detected (equivocation).
113
+ * A validator signing attestations for different proposals at the same slot.
114
+ * The callback is triggered on the first duplicate (when count goes from 1 to 2).
115
+ */
116
+ registerDuplicateAttestationCallback(callback: P2PDuplicateAttestationCallback): void;
86
117
 
87
- registerCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback): void;
118
+ registerCheckpointAttestationCallback(callback: P2PCheckpointAttestationCallback): void;
88
119
 
89
120
  getEnr(): ENR | undefined;
90
121
 
91
122
  getPeers(includePending?: boolean): PeerInfo[];
92
123
 
93
- validate(txs: Tx[]): Promise<void>;
124
+ /** Returns the number of peers in the GossipSub mesh for a given topic type. */
125
+ getGossipMeshPeerCount(topicType: TopicType): number;
94
126
 
95
- addReqRespSubProtocol(
96
- subProtocol: ReqRespSubProtocol,
97
- handler: ReqRespSubProtocolHandler,
98
- validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
99
- ): Promise<void>;
127
+ validateTxsReceivedInBlockProposal(txs: Tx[]): Promise<void>;
128
+
129
+ addReqRespSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void>;
100
130
 
101
131
  handleAuthRequestFromPeer(authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage>;
102
132
 
@@ -147,6 +177,9 @@ export interface PeerDiscoveryService extends EventEmitter {
147
177
  on(event: 'peer:discovered', listener: (enr: ENR) => void): this;
148
178
  emit(event: 'peer:discovered', enr: ENR): boolean;
149
179
 
180
+ on(event: 'ip:changed', listener: (ip: string) => void): this;
181
+ emit(event: 'ip:changed', ip: string): boolean;
182
+
150
183
  getStatus(): PeerDiscoveryState;
151
184
 
152
185
  getEnr(): ENR | undefined;