@aztec/p2p 0.0.1-commit.96bb3f7 → 0.0.1-commit.993d240

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 (573) hide show
  1. package/README.md +129 -3
  2. package/dest/bootstrap/bootstrap.d.ts +4 -3
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +13 -5
  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 +65 -20
  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 +236 -236
  13. package/dest/config.d.ts +163 -84
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +156 -43
  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 +525 -132
  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 +4 -2
  38. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  39. package/dest/mem_pools/attestation_pool/mocks.js +13 -8
  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 +35 -17
  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 +10 -4
  115. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  116. package/dest/msg_validators/attestation_validator/attestation_validator.js +69 -13
  117. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +9 -5
  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 +22 -11
  120. package/dest/msg_validators/clock_tolerance.d.ts +32 -0
  121. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  122. package/dest/msg_validators/clock_tolerance.js +95 -0
  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 +123 -53
  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.d.ts +3 -3
  142. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  143. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
  144. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  145. package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
  146. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  147. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  148. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  149. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  150. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  151. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  152. package/dest/msg_validators/tx_validator/data_validator.d.ts +4 -1
  153. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  154. package/dest/msg_validators/tx_validator/data_validator.js +40 -3
  155. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -4
  156. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  157. package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
  158. package/dest/msg_validators/tx_validator/factory.d.ts +138 -5
  159. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  160. package/dest/msg_validators/tx_validator/factory.js +259 -58
  161. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  162. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  163. package/dest/msg_validators/tx_validator/fee_payer_balance.js +24 -0
  164. package/dest/msg_validators/tx_validator/gas_validator.d.ts +100 -3
  165. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  166. package/dest/msg_validators/tx_validator/gas_validator.js +146 -67
  167. package/dest/msg_validators/tx_validator/index.d.ts +6 -1
  168. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  169. package/dest/msg_validators/tx_validator/index.js +5 -0
  170. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  171. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  172. package/dest/msg_validators/tx_validator/metadata_validator.js +6 -6
  173. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  174. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  175. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  176. package/dest/msg_validators/tx_validator/phases_validator.d.ts +24 -3
  177. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  178. package/dest/msg_validators/tx_validator/phases_validator.js +75 -27
  179. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  180. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  181. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  182. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +22 -5
  183. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  184. package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
  185. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  186. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  187. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  188. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +4 -2
  189. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  190. package/dest/msg_validators/tx_validator/tx_proof_validator.js +4 -2
  191. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  192. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  193. package/dest/msg_validators/tx_validator/tx_validation_cache.js +69 -0
  194. package/dest/services/data_store.d.ts +1 -1
  195. package/dest/services/data_store.d.ts.map +1 -1
  196. package/dest/services/data_store.js +14 -10
  197. package/dest/services/discv5/discV5_service.d.ts +2 -1
  198. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  199. package/dest/services/discv5/discV5_service.js +36 -9
  200. package/dest/services/dummy_service.d.ts +33 -17
  201. package/dest/services/dummy_service.d.ts.map +1 -1
  202. package/dest/services/dummy_service.js +56 -15
  203. package/dest/services/encoding.d.ts +7 -3
  204. package/dest/services/encoding.d.ts.map +1 -1
  205. package/dest/services/encoding.js +20 -14
  206. package/dest/services/gossipsub/index.d.ts +3 -0
  207. package/dest/services/gossipsub/index.d.ts.map +1 -0
  208. package/dest/services/gossipsub/index.js +2 -0
  209. package/dest/services/gossipsub/scoring.d.ts +21 -3
  210. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  211. package/dest/services/gossipsub/scoring.js +24 -7
  212. package/dest/services/gossipsub/topic_score_params.d.ts +184 -0
  213. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  214. package/dest/services/gossipsub/topic_score_params.js +363 -0
  215. package/dest/services/index.d.ts +2 -1
  216. package/dest/services/index.d.ts.map +1 -1
  217. package/dest/services/index.js +1 -0
  218. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  219. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  220. package/dest/services/libp2p/instrumentation.js +33 -8
  221. package/dest/services/libp2p/libp2p_service.d.ts +107 -59
  222. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  223. package/dest/services/libp2p/libp2p_service.js +683 -539
  224. package/dest/services/peer-manager/metrics.d.ts +4 -2
  225. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  226. package/dest/services/peer-manager/metrics.js +26 -5
  227. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  228. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  229. package/dest/services/peer-manager/peer_manager.js +40 -11
  230. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  231. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  232. package/dest/services/peer-manager/peer_scoring.js +65 -14
  233. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +51 -0
  234. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  235. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +552 -0
  236. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  237. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  238. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  239. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  240. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  241. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  242. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +35 -0
  243. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  244. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +136 -0
  245. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +62 -0
  246. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  247. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +176 -0
  248. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +11 -0
  249. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  250. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +7 -0
  251. package/dest/services/reqresp/config.d.ts +3 -3
  252. package/dest/services/reqresp/config.d.ts.map +1 -1
  253. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  254. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  255. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  256. package/dest/services/reqresp/constants.d.ts +12 -0
  257. package/dest/services/reqresp/constants.d.ts.map +1 -0
  258. package/dest/services/reqresp/constants.js +7 -0
  259. package/dest/services/reqresp/interface.d.ts +27 -18
  260. package/dest/services/reqresp/interface.d.ts.map +1 -1
  261. package/dest/services/reqresp/interface.js +23 -19
  262. package/dest/services/reqresp/metrics.d.ts +6 -5
  263. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  264. package/dest/services/reqresp/metrics.js +16 -5
  265. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  266. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  267. package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
  268. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  269. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  270. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +29 -9
  271. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +29 -6
  272. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  273. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +59 -13
  274. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  275. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  276. package/dest/services/reqresp/protocols/index.js +0 -1
  277. package/dest/services/reqresp/protocols/status.d.ts +1 -1
  278. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  279. package/dest/services/reqresp/protocols/status.js +2 -1
  280. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  281. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  282. package/dest/services/reqresp/protocols/tx.js +21 -3
  283. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  284. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  285. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  286. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  287. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  288. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  289. package/dest/services/reqresp/reqresp.d.ts +12 -29
  290. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  291. package/dest/services/reqresp/reqresp.js +58 -187
  292. package/dest/services/service.d.ts +49 -13
  293. package/dest/services/service.d.ts.map +1 -1
  294. package/dest/services/tx_collection/config.d.ts +11 -11
  295. package/dest/services/tx_collection/config.d.ts.map +1 -1
  296. package/dest/services/tx_collection/config.js +27 -26
  297. package/dest/services/tx_collection/file_store_tx_collection.d.ts +37 -0
  298. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  299. package/dest/services/tx_collection/file_store_tx_collection.js +127 -0
  300. package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
  301. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  302. package/dest/services/tx_collection/file_store_tx_source.js +100 -0
  303. package/dest/services/tx_collection/index.d.ts +3 -2
  304. package/dest/services/tx_collection/index.d.ts.map +1 -1
  305. package/dest/services/tx_collection/index.js +1 -0
  306. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  307. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  308. package/dest/services/tx_collection/instrumentation.js +8 -2
  309. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  310. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  311. package/dest/services/tx_collection/request_tracker.js +84 -0
  312. package/dest/services/tx_collection/tx_collection.d.ts +50 -56
  313. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  314. package/dest/services/tx_collection/tx_collection.js +298 -70
  315. package/dest/services/tx_collection/tx_collection_sink.d.ts +19 -9
  316. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  317. package/dest/services/tx_collection/tx_collection_sink.js +28 -31
  318. package/dest/services/tx_collection/tx_source.d.ts +13 -7
  319. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  320. package/dest/services/tx_collection/tx_source.js +26 -7
  321. package/dest/services/tx_file_store/config.d.ts +16 -0
  322. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  323. package/dest/services/tx_file_store/config.js +22 -0
  324. package/dest/services/tx_file_store/index.d.ts +4 -0
  325. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  326. package/dest/services/tx_file_store/index.js +3 -0
  327. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  328. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  329. package/dest/services/tx_file_store/instrumentation.js +29 -0
  330. package/dest/services/tx_file_store/tx_file_store.d.ts +46 -0
  331. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  332. package/dest/services/tx_file_store/tx_file_store.js +142 -0
  333. package/dest/services/tx_provider.d.ts +8 -6
  334. package/dest/services/tx_provider.d.ts.map +1 -1
  335. package/dest/services/tx_provider.js +12 -8
  336. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  337. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  338. package/dest/services/tx_provider_instrumentation.js +5 -5
  339. package/dest/test-helpers/index.d.ts +3 -1
  340. package/dest/test-helpers/index.d.ts.map +1 -1
  341. package/dest/test-helpers/index.js +2 -0
  342. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  343. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  344. package/dest/test-helpers/make-test-p2p-clients.js +5 -3
  345. package/dest/test-helpers/mock-pubsub.d.ts +46 -6
  346. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  347. package/dest/test-helpers/mock-pubsub.js +115 -14
  348. package/dest/test-helpers/reqresp-nodes.d.ts +5 -7
  349. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  350. package/dest/test-helpers/reqresp-nodes.js +19 -20
  351. package/dest/test-helpers/test_tx_provider.d.ts +42 -0
  352. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  353. package/dest/test-helpers/test_tx_provider.js +44 -0
  354. package/dest/test-helpers/testbench-utils.d.ts +161 -0
  355. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  356. package/dest/test-helpers/testbench-utils.js +393 -0
  357. package/dest/testbench/p2p_client_testbench_worker.d.ts +26 -2
  358. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  359. package/dest/testbench/p2p_client_testbench_worker.js +270 -144
  360. package/dest/testbench/worker_client_manager.d.ts +57 -6
  361. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  362. package/dest/testbench/worker_client_manager.js +277 -49
  363. package/dest/util.d.ts +13 -8
  364. package/dest/util.d.ts.map +1 -1
  365. package/dest/util.js +35 -14
  366. package/dest/versioning.d.ts +3 -6
  367. package/dest/versioning.d.ts.map +1 -1
  368. package/dest/versioning.js +3 -24
  369. package/package.json +17 -16
  370. package/src/bootstrap/bootstrap.ts +16 -5
  371. package/src/client/factory.ts +135 -39
  372. package/src/client/interface.ts +70 -44
  373. package/src/client/p2p_client.ts +283 -302
  374. package/src/client/test/p2p_client.batch_tx_requester.bench.README.md +197 -0
  375. package/src/config.ts +274 -48
  376. package/src/errors/p2p-service.error.ts +11 -0
  377. package/src/errors/reqresp.error.ts +0 -25
  378. package/src/errors/tx-pool.error.ts +12 -0
  379. package/src/index.ts +1 -1
  380. package/src/mem_pools/attestation_pool/attestation_pool.ts +575 -94
  381. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +633 -149
  382. package/src/mem_pools/attestation_pool/index.ts +9 -2
  383. package/src/mem_pools/attestation_pool/mocks.ts +19 -11
  384. package/src/mem_pools/index.ts +2 -2
  385. package/src/mem_pools/instrumentation.ts +24 -15
  386. package/src/mem_pools/interface.ts +4 -4
  387. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  388. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  389. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
  390. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  391. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  392. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
  393. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  394. package/src/mem_pools/tx_pool_v2/eviction/index.ts +28 -0
  395. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  396. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  397. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  398. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  399. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  400. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  401. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  402. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  403. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  404. package/src/mem_pools/tx_pool_v2/interfaces.ts +250 -0
  405. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +349 -0
  406. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  407. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +430 -0
  408. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +238 -0
  409. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1090 -0
  410. package/src/msg_validators/attestation_validator/README.md +49 -0
  411. package/src/msg_validators/attestation_validator/attestation_validator.ts +60 -16
  412. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +29 -16
  413. package/src/msg_validators/clock_tolerance.ts +127 -0
  414. package/src/msg_validators/proposal_validator/README.md +123 -0
  415. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +24 -4
  416. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +35 -7
  417. package/src/msg_validators/proposal_validator/proposal_validator.ts +129 -62
  418. package/src/msg_validators/tx_validator/README.md +127 -0
  419. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +8 -17
  420. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  421. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  422. package/src/msg_validators/tx_validator/archive_cache.ts +2 -2
  423. package/src/msg_validators/tx_validator/block_header_validator.ts +21 -8
  424. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  425. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  426. package/src/msg_validators/tx_validator/data_validator.ts +50 -3
  427. package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
  428. package/src/msg_validators/tx_validator/factory.ts +424 -56
  429. package/src/msg_validators/tx_validator/fee_payer_balance.ts +44 -0
  430. package/src/msg_validators/tx_validator/gas_validator.ts +211 -77
  431. package/src/msg_validators/tx_validator/index.ts +5 -0
  432. package/src/msg_validators/tx_validator/metadata_validator.ts +18 -7
  433. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  434. package/src/msg_validators/tx_validator/phases_validator.ts +87 -30
  435. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  436. package/src/msg_validators/tx_validator/timestamp_validator.ts +29 -21
  437. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  438. package/src/msg_validators/tx_validator/tx_proof_validator.ts +10 -3
  439. package/src/msg_validators/tx_validator/tx_validation_cache.ts +102 -0
  440. package/src/services/data_store.ts +14 -19
  441. package/src/services/discv5/discV5_service.ts +39 -6
  442. package/src/services/dummy_service.ts +71 -39
  443. package/src/services/encoding.ts +20 -13
  444. package/src/services/gossipsub/README.md +641 -0
  445. package/src/services/gossipsub/index.ts +2 -0
  446. package/src/services/gossipsub/scoring.ts +29 -5
  447. package/src/services/gossipsub/topic_score_params.ts +519 -0
  448. package/src/services/index.ts +1 -0
  449. package/src/services/libp2p/instrumentation.ts +34 -7
  450. package/src/services/libp2p/libp2p_service.ts +753 -597
  451. package/src/services/peer-manager/metrics.ts +28 -4
  452. package/src/services/peer-manager/peer_manager.ts +46 -11
  453. package/src/services/peer-manager/peer_scoring.ts +56 -6
  454. package/src/services/reqresp/README.md +215 -0
  455. package/src/services/reqresp/batch-tx-requester/README.md +344 -0
  456. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +684 -0
  457. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  458. package/src/services/reqresp/batch-tx-requester/interface.ts +61 -0
  459. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +168 -0
  460. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +249 -0
  461. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +24 -0
  462. package/src/services/reqresp/config.ts +2 -2
  463. package/src/services/reqresp/connection-sampler/connection_sampler.ts +16 -0
  464. package/src/services/reqresp/constants.ts +14 -0
  465. package/src/services/reqresp/interface.ts +48 -46
  466. package/src/services/reqresp/metrics.ts +33 -9
  467. package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
  468. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +37 -12
  469. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +74 -9
  470. package/src/services/reqresp/protocols/index.ts +0 -1
  471. package/src/services/reqresp/protocols/status.ts +5 -3
  472. package/src/services/reqresp/protocols/tx.ts +23 -3
  473. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  474. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  475. package/src/services/reqresp/reqresp.ts +68 -224
  476. package/src/services/service.ts +66 -29
  477. package/src/services/tx_collection/config.ts +41 -36
  478. package/src/services/tx_collection/file_store_tx_collection.ts +153 -0
  479. package/src/services/tx_collection/file_store_tx_source.ts +129 -0
  480. package/src/services/tx_collection/index.ts +2 -1
  481. package/src/services/tx_collection/instrumentation.ts +11 -2
  482. package/src/services/tx_collection/request_tracker.ts +127 -0
  483. package/src/services/tx_collection/tx_collection.ts +367 -115
  484. package/src/services/tx_collection/tx_collection_sink.ts +32 -36
  485. package/src/services/tx_collection/tx_source.ts +28 -8
  486. package/src/services/tx_file_store/config.ts +37 -0
  487. package/src/services/tx_file_store/index.ts +3 -0
  488. package/src/services/tx_file_store/instrumentation.ts +36 -0
  489. package/src/services/tx_file_store/tx_file_store.ts +163 -0
  490. package/src/services/tx_provider.ts +17 -11
  491. package/src/services/tx_provider_instrumentation.ts +11 -5
  492. package/src/test-helpers/index.ts +2 -0
  493. package/src/test-helpers/make-test-p2p-clients.ts +7 -6
  494. package/src/test-helpers/mock-pubsub.ts +137 -14
  495. package/src/test-helpers/reqresp-nodes.ts +17 -29
  496. package/src/test-helpers/test_tx_provider.ts +69 -0
  497. package/src/test-helpers/testbench-utils.ts +455 -0
  498. package/src/testbench/p2p_client_testbench_worker.ts +370 -138
  499. package/src/testbench/worker_client_manager.ts +355 -51
  500. package/src/util.ts +40 -19
  501. package/src/versioning.ts +3 -33
  502. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  503. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  504. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  505. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  506. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  507. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  508. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -120
  509. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  510. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -555
  511. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -18
  512. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  513. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -56
  514. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -83
  515. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  516. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -5
  517. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts +0 -15
  518. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts.map +0 -1
  519. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.js +0 -88
  520. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  521. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  522. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  523. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  524. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -76
  525. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  526. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  527. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  528. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  529. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  530. package/dest/mem_pools/tx_pool/index.js +0 -2
  531. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  532. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  533. package/dest/mem_pools/tx_pool/priority.js +0 -15
  534. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  535. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  536. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  537. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  538. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  539. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  540. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  541. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  542. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -183
  543. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -45
  544. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  545. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -92
  546. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  547. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  548. package/dest/services/reqresp/protocols/block.js +0 -32
  549. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -51
  550. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  551. package/dest/services/tx_collection/fast_tx_collection.js +0 -300
  552. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -53
  553. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  554. package/dest/services/tx_collection/slow_tx_collection.js +0 -177
  555. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  556. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  557. package/src/mem_pools/tx_pool/README.md +0 -255
  558. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -691
  559. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -71
  560. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -93
  561. package/src/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.ts +0 -108
  562. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  563. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -91
  564. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  565. package/src/mem_pools/tx_pool/index.ts +0 -2
  566. package/src/mem_pools/tx_pool/priority.ts +0 -20
  567. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  568. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  569. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -206
  570. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -100
  571. package/src/services/reqresp/protocols/block.ts +0 -37
  572. package/src/services/tx_collection/fast_tx_collection.ts +0 -341
  573. 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,18 +101,29 @@ 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
  }
113
111
 
112
+ /**
113
+ * Get the connection sampler instance
114
+ */
115
+ getConnectionSampler(): Pick<ConnectionSampler, 'getPeerListSortedByConnectionCountAsc'> {
116
+ return this.connectionSampler;
117
+ }
118
+
114
119
  /**
115
120
  * Start the reqresp service
116
121
  */
117
- async start(subProtocolHandlers: ReqRespSubProtocolHandlers, subProtocolValidators: ReqRespSubProtocolValidators) {
122
+ async start(subProtocolHandlers: ReqRespSubProtocolHandlers) {
118
123
  Object.assign(this.subProtocolHandlers, subProtocolHandlers);
119
- Object.assign(this.subProtocolValidators, subProtocolValidators);
120
124
 
121
- // 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.
122
127
  for (const subProtocol of Object.keys(subProtocolHandlers)) {
123
128
  this.logger.debug(`Registering handler for sub protocol ${subProtocol}`);
124
129
  await this.libp2p.handle(
@@ -132,13 +137,8 @@ export class ReqResp implements ReqRespInterface {
132
137
  this.rateLimiter.start();
133
138
  }
134
139
 
135
- async addSubProtocol(
136
- subProtocol: ReqRespSubProtocol,
137
- handler: ReqRespSubProtocolHandler,
138
- validator: ReqRespSubProtocolValidators[ReqRespSubProtocol] = DEFAULT_SUB_PROTOCOL_VALIDATORS[subProtocol],
139
- ): Promise<void> {
140
+ async addSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void> {
140
141
  this.subProtocolHandlers[subProtocol] = handler;
141
- this.subProtocolValidators[subProtocol] = validator;
142
142
  this.logger.debug(`Registering handler for sub protocol ${subProtocol}`);
143
143
  await this.libp2p.handle(
144
144
  subProtocol,
@@ -172,186 +172,6 @@ export class ReqResp implements ReqRespInterface {
172
172
  // NOTE: We assume libp2p instance is managed by the caller
173
173
  }
174
174
 
175
- /**
176
- * Request multiple messages over the same sub protocol, balancing the requests across peers.
177
- *
178
- * @devnote
179
- * - The function prioritizes sending requests to free peers using a batch sampling strategy.
180
- * - If a peer fails to respond or returns an invalid response, it is removed from the sampling pool and replaced.
181
- * - The function stops retrying once all requests are processed, no active peers remain, or the maximum retry attempts are reached.
182
- * - Responses are validated using a custom validator for the sub-protocol.*
183
- *
184
- * Requests are sent in parallel to each peer, but multiple requests are sent to the same peer in series
185
- * - If a peer fails to respond or returns an invalid response, it is removed from the sampling pool and replaced.
186
- * - The function stops retrying once all requests are processed, no active peers remain, or the maximum retry attempts are reached.
187
- * - Responses are validated using a custom validator for the sub-protocol.*
188
- *
189
- * @param subProtocol
190
- * @param requests
191
- * @param timeoutMs
192
- * @param maxPeers
193
- * @returns
194
- *
195
- * @throws {CollectiveReqRespTimeoutError} - If the request batch exceeds the specified timeout (`timeoutMs`).
196
- */
197
- @trackSpan(
198
- 'ReqResp.sendBatchRequest',
199
- (subProtocol: ReqRespSubProtocol, requests: InstanceType<SubProtocolMap[ReqRespSubProtocol]['request']>[]) => ({
200
- [Attributes.P2P_REQ_RESP_PROTOCOL]: subProtocol,
201
- [Attributes.P2P_REQ_RESP_BATCH_REQUESTS_COUNT]: requests.length,
202
- }),
203
- )
204
- async sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(
205
- subProtocol: SubProtocol,
206
- requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[],
207
- pinnedPeer: PeerId | undefined,
208
- timeoutMs = 10000,
209
- maxPeers = Math.max(10, Math.ceil(requests.length / 3)),
210
- maxRetryAttempts = 3,
211
- ): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]> {
212
- const responseValidator = this.subProtocolValidators[subProtocol] ?? DEFAULT_SUB_PROTOCOL_VALIDATORS[subProtocol];
213
- const responses: InstanceType<SubProtocolMap[SubProtocol]['response']>[] = new Array(requests.length);
214
- const requestBuffers = requests.map(req => req.toBuffer());
215
-
216
- const requestFunction = async (signal: AbortSignal) => {
217
- // Track which requests still need to be processed
218
- const pendingRequestIndices = new Set(requestBuffers.map((_, i) => i));
219
-
220
- // Create batch sampler with the total number of requests and max peers
221
- const batchSampler = new BatchConnectionSampler(
222
- this.connectionSampler,
223
- requests.length,
224
- maxPeers,
225
- compactArray([pinnedPeer]), // Exclude pinned peer from sampling, we will forcefully send all requests to it
226
- createLogger(`${this.logger.module}:batch-connection-sampler`),
227
- );
228
-
229
- if (batchSampler.activePeerCount === 0 && !pinnedPeer) {
230
- this.logger.warn('No active peers to send requests to');
231
- return [];
232
- }
233
-
234
- // This is where it gets fun
235
- // The outer loop is the retry loop, we will continue to retry until we process all indices we have
236
- // not received a response for, or we have reached the max retry attempts
237
-
238
- // The inner loop is the batch loop, we will process all requests for each peer in parallel
239
- // We will then process the results of the requests, and resample any peers that failed to respond
240
- // We will continue to retry until we have processed all indices, or we have reached the max retry attempts
241
-
242
- let retryAttempts = 0;
243
- while (pendingRequestIndices.size > 0 && batchSampler.activePeerCount > 0 && retryAttempts < maxRetryAttempts) {
244
- if (signal.aborted) {
245
- throw new AbortError('Batch request aborted');
246
- }
247
- // Process requests in parallel for each available peer
248
- type BatchEntry = { peerId: PeerId; indices: number[] };
249
- const requestBatches = new Map<string, BatchEntry>();
250
-
251
- // Group requests by peer
252
- for (const requestIndex of pendingRequestIndices) {
253
- const peer = batchSampler.getPeerForRequest(requestIndex);
254
- if (!peer) {
255
- break;
256
- }
257
- const peerAsString = peer.toString();
258
- if (!requestBatches.has(peerAsString)) {
259
- requestBatches.set(peerAsString, { peerId: peer, indices: [] });
260
- }
261
- requestBatches.get(peerAsString)!.indices.push(requestIndex);
262
- }
263
-
264
- // If there is a pinned peer, we will always send every request to that peer
265
- // We use the default limits for the subprotocol to avoid hitting the rate limiter
266
- if (pinnedPeer) {
267
- const limit = this.rateLimiter.getRateLimits(subProtocol).peerLimit.quotaCount;
268
- requestBatches.set(pinnedPeer.toString(), {
269
- peerId: pinnedPeer,
270
- indices: Array.from(pendingRequestIndices.values()).slice(0, limit),
271
- });
272
- }
273
-
274
- // Make parallel requests for each peer's batch
275
- // A batch entry will look something like this:
276
- // PeerId0: [0, 1, 2, 3]
277
- // PeerId1: [4, 5, 6, 7]
278
-
279
- // Peer Id 0 will send requests 0, 1, 2, 3 in serial
280
- // while simultaneously Peer Id 1 will send requests 4, 5, 6, 7 in serial
281
-
282
- const batchResults = await Promise.all(
283
- Array.from(requestBatches.entries()).map(async ([peerAsString, { peerId: peer, indices }]) => {
284
- try {
285
- // Requests all going to the same peer are sent synchronously
286
- const peerResults: { index: number; response: InstanceType<SubProtocolMap[SubProtocol]['response']> }[] =
287
- [];
288
- for (const index of indices) {
289
- this.logger.trace(`Sending request ${index} to peer ${peerAsString}`);
290
- const response = await this.sendRequestToPeer(peer, subProtocol, requestBuffers[index]);
291
-
292
- // Check the status of the response buffer
293
- if (response.status !== ReqRespStatus.SUCCESS) {
294
- this.logger.debug(
295
- `Request to peer ${peerAsString} failed with status ${prettyPrintReqRespStatus(response.status)}`,
296
- );
297
-
298
- // If we hit a rate limit or some failure, we remove the peer and return the results,
299
- // they will be split among remaining peers and the new sampled peer
300
- batchSampler.removePeerAndReplace(peer);
301
- return { peer, results: peerResults };
302
- }
303
-
304
- if (response && response.data.length > 0) {
305
- const object = responseFromBuffer(subProtocol, response.data);
306
- const isValid = await responseValidator(requests[index], object, peer);
307
-
308
- if (isValid) {
309
- peerResults.push({ index, response: object });
310
- }
311
- }
312
- }
313
-
314
- return { peer, results: peerResults };
315
- } catch (error) {
316
- this.logger.debug(`Failed batch request to peer ${peerAsString}:`, error);
317
- batchSampler.removePeerAndReplace(peer);
318
- return { peer, results: [] };
319
- }
320
- }),
321
- );
322
-
323
- // Process results
324
- for (const { results } of batchResults) {
325
- for (const { index, response } of results) {
326
- if (response) {
327
- responses[index] = response;
328
- pendingRequestIndices.delete(index);
329
- }
330
- }
331
- }
332
-
333
- retryAttempts++;
334
- }
335
-
336
- if (retryAttempts >= maxRetryAttempts) {
337
- this.logger.debug(`Max retry attempts ${maxRetryAttempts} reached for batch request`);
338
- }
339
-
340
- return responses;
341
- };
342
-
343
- try {
344
- return await executeTimeout<InstanceType<SubProtocolMap[SubProtocol]['response']>[]>(
345
- requestFunction,
346
- timeoutMs,
347
- () => new CollectiveReqRespTimeoutError(),
348
- );
349
- } catch (e: any) {
350
- this.logger.debug(`${e.message} | subProtocol: ${subProtocol}`);
351
- return [];
352
- }
353
- }
354
-
355
175
  /**
356
176
  * Sends a request to a specific peer
357
177
  *
@@ -391,6 +211,9 @@ export class ReqResp implements ReqRespInterface {
391
211
  try {
392
212
  this.metrics.recordRequestSent(subProtocol);
393
213
 
214
+ // Calculate expected response size based on the request payload
215
+ const expectedSizeKb = subProtocolSizeCalculators[subProtocol](payload);
216
+
394
217
  this.logger.trace(`Sending request to peer ${peerId.toString()} on sub protocol ${subProtocol}`);
395
218
  stream = await this.connectionSampler.dialProtocol(peerId, subProtocol, dialTimeout);
396
219
  this.logger.trace(
@@ -398,17 +221,21 @@ export class ReqResp implements ReqRespInterface {
398
221
  );
399
222
 
400
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);
401
227
  const [_, resp] = await executeTimeout(
402
228
  signal =>
403
229
  Promise.all([
404
230
  pipeline([payload], stream!.sink, { signal }),
405
- pipeline(stream!.source, this.readMessage.bind(this), { signal }),
231
+ pipeline(stream!.source, readMessageWithSizeLimit, { signal }),
406
232
  ]),
407
233
  this.individualRequestTimeoutMs,
408
234
  () => timeoutErr,
409
235
  );
410
236
  return resp;
411
237
  } catch (e: any) {
238
+ this.logger.debug(`SUBPROTOCOL: ${subProtocol}\n`, e);
412
239
  // On error we immediately abort the stream, this is preferred way,
413
240
  // because it signals to the sender that error happened, whereas
414
241
  // closing the stream only closes our side and is much slower
@@ -463,8 +290,11 @@ export class ReqResp implements ReqRespInterface {
463
290
  * The message is split into two components
464
291
  * - The first chunk should contain a control byte, indicating the status of the response see `ReqRespStatus`
465
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
466
296
  */
467
- private async readMessage(source: AsyncIterable<Uint8ArrayList>): Promise<ReqRespResponse> {
297
+ private async readMessage(source: AsyncIterable<Uint8ArrayList>, maxSizeKb?: number): Promise<ReqRespResponse> {
468
298
  let status: ReqRespStatus | undefined;
469
299
  const chunks: Uint8Array[] = [];
470
300
 
@@ -489,23 +319,17 @@ export class ReqResp implements ReqRespInterface {
489
319
  }
490
320
 
491
321
  const messageData = Buffer.concat(chunks);
492
- const message: Buffer = this.snappyTransform.inboundTransformData(messageData);
322
+ const message: Buffer = this.snappyTransform.inboundTransformData(messageData, undefined, maxSizeKb);
493
323
 
494
324
  return {
495
325
  status: status ?? ReqRespStatus.UNKNOWN,
496
326
  data: message,
497
327
  };
498
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.
499
331
  this.logger.debug(`Reading message failed: ${e.message}`);
500
-
501
- let status = ReqRespStatus.UNKNOWN;
502
- if (e instanceof ReqRespStatusError) {
503
- status = e.status;
504
- }
505
-
506
- return {
507
- status,
508
- };
332
+ throw e;
509
333
  }
510
334
  }
511
335
 
@@ -545,6 +369,15 @@ export class ReqResp implements ReqRespInterface {
545
369
  throw new ReqRespStatusError(ReqRespStatus.RATE_LIMIT_EXCEEDED);
546
370
  }
547
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
+
548
381
  await this.processStream(protocol, incomingStream);
549
382
  } catch (err: any) {
550
383
  this.metrics.recordResponseError(protocol);
@@ -570,7 +403,9 @@ export class ReqResp implements ReqRespInterface {
570
403
  // and that this stream should be dropped
571
404
  const isMessageToNotWarn =
572
405
  err instanceof Error &&
573
- ['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
+ );
574
409
  const level = isMessageToNotWarn ? 'debug' : 'warn';
575
410
  this.logger[level]('Unknown stream error while handling the stream, aborting', {
576
411
  protocol,
@@ -687,13 +522,13 @@ export class ReqResp implements ReqRespInterface {
687
522
  ): PeerErrorSeverity | undefined {
688
523
  const logTags = { peerId: peerId.toString(), subProtocol };
689
524
 
690
- //Punishable error - peer should never send badly formed request
525
+ // Punishable error - peer should never send badly formed request
691
526
  if (e instanceof ReqRespStatusError && e.status === ReqRespStatus.BADLY_FORMED_REQUEST) {
692
527
  this.logger.debug(`Punishable error in ${subProtocol}: ${e.cause}`, logTags);
693
528
  return PeerErrorSeverity.LowToleranceError;
694
529
  }
695
530
 
696
- //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
697
532
  return undefined;
698
533
  }
699
534
 
@@ -715,10 +550,18 @@ export class ReqResp implements ReqRespInterface {
715
550
  return undefined;
716
551
  }
717
552
 
718
- // We do not punish a collective timeout, as the node triggers this interupt, independent of the peer's behaviour
719
- if (e instanceof CollectiveReqRespTimeoutError || e instanceof InvalidResponseError) {
720
- this.logger.debug(`Non-punishable error in ${subProtocol}: ${e.message}`, logTags);
721
- 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;
722
565
  }
723
566
 
724
567
  return this.categorizeConnectionErrors(e, peerId, subProtocol);
@@ -726,7 +569,8 @@ export class ReqResp implements ReqRespInterface {
726
569
 
727
570
  /*
728
571
  * Errors specific to connection handling
729
- * These can happen both when sending request and response*/
572
+ * These can happen both when sending request and response.
573
+ */
730
574
  private categorizeConnectionErrors(
731
575
  e: any,
732
576
  peerId: PeerId,
@@ -1,20 +1,23 @@
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';
7
14
  import type { ENR } from '@nethermindeth/enr';
8
15
  import type EventEmitter from 'events';
9
16
 
17
+ import type { BatchTxRequesterLibP2PService } from './reqresp/batch-tx-requester/interface.js';
10
18
  import type { P2PReqRespConfig } from './reqresp/config.js';
11
19
  import type { StatusMessage } from './reqresp/index.js';
12
- import type {
13
- ReqRespSubProtocol,
14
- ReqRespSubProtocolHandler,
15
- ReqRespSubProtocolValidators,
16
- SubProtocolMap,
17
- } from './reqresp/interface.js';
20
+ import type { ReqRespSubProtocol, ReqRespSubProtocolHandler } from './reqresp/interface.js';
18
21
  import type { AuthRequest, AuthResponse } from './reqresp/protocols/auth.js';
19
22
 
20
23
  export enum PeerDiscoveryState {
@@ -42,6 +45,34 @@ export type P2PCheckpointReceivedCallback = (
42
45
 
43
46
  export type AuthReceivedCallback = (peerId: PeerId, authRequest: AuthRequest) => Promise<AuthResponse | undefined>;
44
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
+
45
76
  /**
46
77
  * The interface for a P2P service implementation.
47
78
  */
@@ -64,38 +95,38 @@ export interface P2PService {
64
95
  */
65
96
  propagate<T extends Gossipable>(message: T): Promise<void>;
66
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
+
67
105
  /**
68
- * Send a batch of requests to peers, and return the responses
69
- *
70
- * @param protocol - The request response protocol to use
71
- * @param requests - The requests to send to the peers
72
- * @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).
73
108
  */
74
- sendBatchRequest<Protocol extends ReqRespSubProtocol>(
75
- protocol: Protocol,
76
- requests: InstanceType<SubProtocolMap[Protocol]['request']>[],
77
- pinnedPeerId?: PeerId,
78
- timeoutMs?: number,
79
- maxPeers?: number,
80
- maxRetryAttempts?: number,
81
- ): Promise<InstanceType<SubProtocolMap[Protocol]['response']>[]>;
109
+ registerDuplicateProposalCallback(callback: P2PDuplicateProposalCallback): void;
82
110
 
83
- // Leaky abstraction: fix https://github.com/AztecProtocol/aztec-packages/issues/7963
84
- 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;
85
117
 
86
- registerCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback): void;
118
+ registerCheckpointAttestationCallback(callback: P2PCheckpointAttestationCallback): void;
87
119
 
88
120
  getEnr(): ENR | undefined;
89
121
 
90
122
  getPeers(includePending?: boolean): PeerInfo[];
91
123
 
92
- 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;
126
+
127
+ validateTxsReceivedInBlockProposal(txs: Tx[]): Promise<void>;
93
128
 
94
- addReqRespSubProtocol(
95
- subProtocol: ReqRespSubProtocol,
96
- handler: ReqRespSubProtocolHandler,
97
- validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
98
- ): Promise<void>;
129
+ addReqRespSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void>;
99
130
 
100
131
  handleAuthRequestFromPeer(authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage>;
101
132
 
@@ -103,6 +134,9 @@ export interface P2PService {
103
134
 
104
135
  /** If node running this P2P stack is validator, passes in validator address to P2P layer */
105
136
  registerThisValidatorAddresses(address: EthAddress[]): void;
137
+
138
+ /** Get BatchTxRequester service dependencies */
139
+ getBatchTxRequesterService(): BatchTxRequesterLibP2PService;
106
140
  }
107
141
 
108
142
  /**
@@ -143,6 +177,9 @@ export interface PeerDiscoveryService extends EventEmitter {
143
177
  on(event: 'peer:discovered', listener: (enr: ENR) => void): this;
144
178
  emit(event: 'peer:discovered', enr: ENR): boolean;
145
179
 
180
+ on(event: 'ip:changed', listener: (ip: string) => void): this;
181
+ emit(event: 'ip:changed', ip: string): boolean;
182
+
146
183
  getStatus(): PeerDiscoveryState;
147
184
 
148
185
  getEnr(): ENR | undefined;