@aztec/p2p 0.0.1-commit.a072138 → 0.0.1-commit.a4600f49

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 (558) hide show
  1. package/README.md +130 -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 +22 -6
  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 +67 -18
  8. package/dest/client/interface.d.ts +90 -40
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +69 -64
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +240 -244
  13. package/dest/config.d.ts +168 -89
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +157 -45
  16. package/dest/errors/p2p-service.error.d.ts +9 -0
  17. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  18. package/dest/errors/p2p-service.error.js +10 -0
  19. package/dest/errors/reqresp.error.d.ts +9 -16
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +10 -17
  22. package/dest/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 +164 -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 +518 -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 +550 -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 +12 -5
  44. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  45. package/dest/mem_pools/instrumentation.js +38 -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 +39 -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 +97 -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 +243 -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 +11 -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 +122 -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 +368 -0
  108. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +68 -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 +178 -0
  111. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +91 -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 +1013 -0
  114. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -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 +38 -15
  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/proposal_validator/block_proposal_validator.d.ts +12 -5
  121. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  122. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +11 -3
  123. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +12 -5
  124. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  125. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +23 -3
  126. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +36 -9
  127. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  128. package/dest/msg_validators/proposal_validator/proposal_validator.js +130 -48
  129. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  130. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  131. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +11 -18
  132. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  133. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  134. package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
  135. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  136. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  137. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  138. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  139. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +16 -3
  140. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  141. package/dest/msg_validators/tx_validator/block_header_validator.js +1 -1
  142. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  143. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  144. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  145. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  146. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  147. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  148. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  149. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  150. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  151. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +13 -3
  152. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  153. package/dest/msg_validators/tx_validator/double_spend_validator.js +4 -4
  154. package/dest/msg_validators/tx_validator/factory.d.ts +133 -7
  155. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  156. package/dest/msg_validators/tx_validator/factory.js +261 -61
  157. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  158. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  159. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  160. package/dest/msg_validators/tx_validator/gas_validator.d.ts +104 -3
  161. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  162. package/dest/msg_validators/tx_validator/gas_validator.js +137 -53
  163. package/dest/msg_validators/tx_validator/index.d.ts +5 -1
  164. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  165. package/dest/msg_validators/tx_validator/index.js +4 -0
  166. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  167. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  168. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  169. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  170. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  171. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  172. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  173. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  174. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  175. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +20 -4
  176. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  177. package/dest/msg_validators/tx_validator/timestamp_validator.js +6 -6
  178. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  179. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  180. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  181. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  182. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  183. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  184. package/dest/services/data_store.d.ts +1 -1
  185. package/dest/services/data_store.d.ts.map +1 -1
  186. package/dest/services/data_store.js +5 -5
  187. package/dest/services/discv5/discV5_service.d.ts +13 -2
  188. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  189. package/dest/services/discv5/discV5_service.js +119 -23
  190. package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
  191. package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
  192. package/dest/services/discv5/persisted_enr_store.js +145 -0
  193. package/dest/services/dummy_service.d.ts +26 -18
  194. package/dest/services/dummy_service.d.ts.map +1 -1
  195. package/dest/services/dummy_service.js +25 -20
  196. package/dest/services/encoding.d.ts +24 -7
  197. package/dest/services/encoding.d.ts.map +1 -1
  198. package/dest/services/encoding.js +43 -26
  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 +167 -0
  206. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  207. package/dest/services/gossipsub/topic_score_params.js +336 -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 +111 -61
  215. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  216. package/dest/services/libp2p/libp2p_service.js +785 -580
  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 +20 -3
  221. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  222. package/dest/services/peer-manager/peer_manager.js +83 -26
  223. package/dest/services/peer-manager/peer_scoring.d.ts +34 -2
  224. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  225. package/dest/services/peer-manager/peer_scoring.js +127 -15
  226. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +7 -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 +100 -132
  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 +15 -3
  241. package/dest/services/reqresp/config.d.ts.map +1 -1
  242. package/dest/services/reqresp/config.js +11 -0
  243. package/dest/services/reqresp/interface.d.ts +25 -18
  244. package/dest/services/reqresp/interface.d.ts.map +1 -1
  245. package/dest/services/reqresp/interface.js +23 -19
  246. package/dest/services/reqresp/metrics.d.ts +1 -1
  247. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  248. package/dest/services/reqresp/metrics.js +0 -1
  249. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  250. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  251. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  252. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  253. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  254. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +34 -26
  255. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +32 -16
  256. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  257. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +68 -34
  258. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  259. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  260. package/dest/services/reqresp/protocols/index.js +0 -1
  261. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  262. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  263. package/dest/services/reqresp/protocols/tx.js +21 -3
  264. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  265. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  266. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  267. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  268. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  269. package/dest/services/reqresp/rate-limiter/rate_limits.js +3 -13
  270. package/dest/services/reqresp/reqresp.d.ts +7 -29
  271. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  272. package/dest/services/reqresp/reqresp.js +85 -219
  273. package/dest/services/service.d.ts +62 -13
  274. package/dest/services/service.d.ts.map +1 -1
  275. package/dest/services/tx_collection/config.d.ts +11 -14
  276. package/dest/services/tx_collection/config.d.ts.map +1 -1
  277. package/dest/services/tx_collection/config.js +26 -33
  278. package/dest/services/tx_collection/file_store_tx_collection.d.ts +37 -0
  279. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  280. package/dest/services/tx_collection/file_store_tx_collection.js +127 -0
  281. package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
  282. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  283. package/dest/services/tx_collection/file_store_tx_source.js +100 -0
  284. package/dest/services/tx_collection/index.d.ts +3 -3
  285. package/dest/services/tx_collection/index.d.ts.map +1 -1
  286. package/dest/services/tx_collection/index.js +1 -1
  287. package/dest/services/tx_collection/instrumentation.js +1 -2
  288. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  289. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  290. package/dest/services/tx_collection/request_tracker.js +84 -0
  291. package/dest/services/tx_collection/tx_collection.d.ts +45 -51
  292. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  293. package/dest/services/tx_collection/tx_collection.js +296 -68
  294. package/dest/services/tx_collection/tx_collection_sink.d.ts +19 -9
  295. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  296. package/dest/services/tx_collection/tx_collection_sink.js +28 -31
  297. package/dest/services/tx_collection/tx_source.d.ts +13 -7
  298. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  299. package/dest/services/tx_collection/tx_source.js +29 -7
  300. package/dest/services/tx_file_store/config.d.ts +16 -0
  301. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  302. package/dest/services/tx_file_store/config.js +22 -0
  303. package/dest/services/tx_file_store/index.d.ts +4 -0
  304. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  305. package/dest/services/tx_file_store/index.js +3 -0
  306. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  307. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  308. package/dest/services/tx_file_store/instrumentation.js +29 -0
  309. package/dest/services/tx_file_store/tx_file_store.d.ts +46 -0
  310. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  311. package/dest/services/tx_file_store/tx_file_store.js +142 -0
  312. package/dest/services/tx_provider.d.ts +6 -4
  313. package/dest/services/tx_provider.d.ts.map +1 -1
  314. package/dest/services/tx_provider.js +12 -8
  315. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  316. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  317. package/dest/test-helpers/make-test-p2p-clients.js +5 -3
  318. package/dest/test-helpers/mock-pubsub.d.ts +46 -6
  319. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  320. package/dest/test-helpers/mock-pubsub.js +115 -14
  321. package/dest/test-helpers/reqresp-nodes.d.ts +5 -7
  322. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  323. package/dest/test-helpers/reqresp-nodes.js +19 -20
  324. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  325. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  326. package/dest/test-helpers/test_tx_provider.js +3 -0
  327. package/dest/test-helpers/testbench-utils.d.ts +56 -50
  328. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  329. package/dest/test-helpers/testbench-utils.js +178 -75
  330. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  331. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  332. package/dest/testbench/p2p_client_testbench_worker.js +113 -50
  333. package/dest/testbench/worker_client_manager.d.ts +12 -6
  334. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  335. package/dest/testbench/worker_client_manager.js +57 -11
  336. package/dest/util.d.ts +13 -8
  337. package/dest/util.d.ts.map +1 -1
  338. package/dest/util.js +35 -14
  339. package/dest/versioning.d.ts +3 -6
  340. package/dest/versioning.d.ts.map +1 -1
  341. package/dest/versioning.js +3 -24
  342. package/package.json +16 -16
  343. package/src/bootstrap/bootstrap.ts +17 -3
  344. package/src/client/factory.ts +135 -31
  345. package/src/client/interface.ts +97 -48
  346. package/src/client/p2p_client.ts +282 -310
  347. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  348. package/src/config.ts +282 -49
  349. package/src/errors/p2p-service.error.ts +11 -0
  350. package/src/errors/reqresp.error.ts +13 -19
  351. package/src/errors/tx-pool.error.ts +12 -0
  352. package/src/index.ts +1 -1
  353. package/src/mem_pools/attestation_pool/attestation_pool.ts +585 -94
  354. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +656 -141
  355. package/src/mem_pools/attestation_pool/index.ts +9 -2
  356. package/src/mem_pools/attestation_pool/mocks.ts +14 -8
  357. package/src/mem_pools/index.ts +2 -2
  358. package/src/mem_pools/instrumentation.ts +27 -17
  359. package/src/mem_pools/interface.ts +4 -4
  360. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  361. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  362. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +112 -0
  363. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  364. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  365. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
  366. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  367. package/src/mem_pools/tx_pool_v2/eviction/index.ts +28 -0
  368. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  369. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  370. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  371. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  372. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  373. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  374. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  375. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  376. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  377. package/src/mem_pools/tx_pool_v2/interfaces.ts +274 -0
  378. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +349 -0
  379. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  380. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +465 -0
  381. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +252 -0
  382. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1215 -0
  383. package/src/msg_validators/attestation_validator/README.md +49 -0
  384. package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -14
  385. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +17 -9
  386. package/src/msg_validators/proposal_validator/README.md +123 -0
  387. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +26 -4
  388. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +43 -7
  389. package/src/msg_validators/proposal_validator/proposal_validator.ts +155 -49
  390. package/src/msg_validators/tx_validator/README.md +129 -0
  391. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +8 -17
  392. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  393. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  394. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  395. package/src/msg_validators/tx_validator/block_header_validator.ts +15 -3
  396. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  397. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  398. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  399. package/src/msg_validators/tx_validator/double_spend_validator.ts +11 -6
  400. package/src/msg_validators/tx_validator/factory.ts +413 -80
  401. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  402. package/src/msg_validators/tx_validator/gas_validator.ts +195 -54
  403. package/src/msg_validators/tx_validator/index.ts +4 -0
  404. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  405. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  406. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  407. package/src/msg_validators/tx_validator/timestamp_validator.ts +23 -18
  408. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  409. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  410. package/src/services/data_store.ts +5 -13
  411. package/src/services/discv5/discV5_service.ts +126 -14
  412. package/src/services/discv5/persisted_enr_store.ts +158 -0
  413. package/src/services/dummy_service.ts +38 -45
  414. package/src/services/encoding.ts +42 -26
  415. package/src/services/gossipsub/README.md +663 -0
  416. package/src/services/gossipsub/index.ts +2 -0
  417. package/src/services/gossipsub/scoring.ts +29 -5
  418. package/src/services/gossipsub/topic_score_params.ts +478 -0
  419. package/src/services/index.ts +1 -0
  420. package/src/services/libp2p/instrumentation.ts +14 -0
  421. package/src/services/libp2p/libp2p_service.ts +858 -637
  422. package/src/services/peer-manager/metrics.ts +7 -0
  423. package/src/services/peer-manager/peer_manager.ts +91 -25
  424. package/src/services/peer-manager/peer_scoring.ts +127 -8
  425. package/src/services/reqresp/README.md +194 -0
  426. package/src/services/reqresp/batch-tx-requester/README.md +53 -14
  427. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +101 -147
  428. package/src/services/reqresp/batch-tx-requester/interface.ts +14 -10
  429. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +30 -71
  430. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  431. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  432. package/src/services/reqresp/config.ts +19 -2
  433. package/src/services/reqresp/interface.ts +45 -46
  434. package/src/services/reqresp/metrics.ts +0 -1
  435. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  436. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +43 -30
  437. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +84 -34
  438. package/src/services/reqresp/protocols/index.ts +0 -1
  439. package/src/services/reqresp/protocols/tx.ts +23 -3
  440. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  441. package/src/services/reqresp/rate-limiter/rate_limits.ts +3 -13
  442. package/src/services/reqresp/reqresp.ts +100 -263
  443. package/src/services/service.ts +81 -29
  444. package/src/services/tx_collection/config.ts +40 -49
  445. package/src/services/tx_collection/file_store_tx_collection.ts +153 -0
  446. package/src/services/tx_collection/file_store_tx_source.ts +129 -0
  447. package/src/services/tx_collection/index.ts +2 -6
  448. package/src/services/tx_collection/instrumentation.ts +1 -1
  449. package/src/services/tx_collection/request_tracker.ts +127 -0
  450. package/src/services/tx_collection/tx_collection.ts +362 -110
  451. package/src/services/tx_collection/tx_collection_sink.ts +32 -36
  452. package/src/services/tx_collection/tx_source.ts +29 -8
  453. package/src/services/tx_file_store/config.ts +37 -0
  454. package/src/services/tx_file_store/index.ts +3 -0
  455. package/src/services/tx_file_store/instrumentation.ts +36 -0
  456. package/src/services/tx_file_store/tx_file_store.ts +163 -0
  457. package/src/services/tx_provider.ts +15 -9
  458. package/src/test-helpers/make-test-p2p-clients.ts +7 -6
  459. package/src/test-helpers/mock-pubsub.ts +137 -14
  460. package/src/test-helpers/reqresp-nodes.ts +17 -29
  461. package/src/test-helpers/test_tx_provider.ts +5 -0
  462. package/src/test-helpers/testbench-utils.ts +185 -94
  463. package/src/testbench/p2p_client_testbench_worker.ts +122 -65
  464. package/src/testbench/worker_client_manager.ts +72 -25
  465. package/src/util.ts +40 -19
  466. package/src/versioning.ts +3 -33
  467. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  468. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  469. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -305
  470. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  471. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  472. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  473. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  474. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  475. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  476. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  477. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  478. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  479. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  480. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  481. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  482. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  483. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  484. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  485. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  486. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  487. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  488. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  489. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  490. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  491. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  492. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  493. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  494. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  495. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  496. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  497. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  498. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  499. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  500. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  501. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  502. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  503. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  504. package/dest/mem_pools/tx_pool/index.js +0 -2
  505. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  506. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  507. package/dest/mem_pools/tx_pool/priority.js +0 -15
  508. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  509. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  510. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  511. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  512. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  513. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  514. package/dest/msg_validators/clock_tolerance.d.ts +0 -21
  515. package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
  516. package/dest/msg_validators/clock_tolerance.js +0 -37
  517. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  518. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  519. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  520. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  521. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  522. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  523. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  524. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  525. package/dest/services/reqresp/protocols/block.js +0 -32
  526. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -53
  527. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  528. package/dest/services/tx_collection/fast_tx_collection.js +0 -311
  529. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -48
  530. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  531. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  532. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -53
  533. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  534. package/dest/services/tx_collection/slow_tx_collection.js +0 -177
  535. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -336
  536. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  537. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  538. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  539. package/src/mem_pools/tx_pool/README.md +0 -270
  540. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  541. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  542. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  543. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  544. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  545. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  546. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  547. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  548. package/src/mem_pools/tx_pool/index.ts +0 -2
  549. package/src/mem_pools/tx_pool/priority.ts +0 -20
  550. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  551. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  552. package/src/msg_validators/clock_tolerance.ts +0 -51
  553. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  554. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  555. package/src/services/reqresp/protocols/block.ts +0 -37
  556. package/src/services/tx_collection/fast_tx_collection.ts +0 -364
  557. package/src/services/tx_collection/proposal_tx_collector.ts +0 -114
  558. package/src/services/tx_collection/slow_tx_collection.ts +0 -233
@@ -1,13 +1,37 @@
1
1
  import type { PeerScoreThresholds } from '@chainsafe/libp2p-gossipsub/score';
2
2
 
3
3
  /**
4
- * The following params is implemented by Lighthouse at
5
- * https://github.com/sigp/lighthouse/blob/b0ac3464ca5fb1e9d75060b56c83bfaf990a3d25/beacon_node/eth2_libp2p/src/behaviour/gossipsub_scoring_parameters.rs#L83
4
+ * Weight applied to application-level peer scores before contributing to gossipsub score.
5
+ *
6
+ * Note: positive topic scores can partially offset app penalties, so alignment with
7
+ * app-level thresholds is best-effort rather than strict.
8
+ */
9
+ export const APP_SPECIFIC_WEIGHT = 10;
10
+
11
+ /**
12
+ * Gossipsub peer score thresholds aligned with application-level scoring.
13
+ *
14
+ * These thresholds work with appSpecificWeight=10 to align gossipsub behavior
15
+ * with application-level peer states (Healthy → Disconnect → Banned).
16
+ *
17
+ * Alignment:
18
+ * - gossipThreshold (-500): Matches Disconnect state (app score -50 × weight 10)
19
+ * - publishThreshold (-1000): Matches Ban state (app score -100 × weight 10)
20
+ * - graylistThreshold (-2000): For severe attacks (ban + topic penalties)
21
+ *
22
+ * The 1:2:4 ratio follows Lodestar's approach and gossipsub spec recommendations.
23
+ *
24
+ * @see https://github.com/libp2p/specs/blob/master/pubsub/gossipsub/gossipsub-v1.1.md#peer-scoring
6
25
  */
7
26
  export const gossipScoreThresholds: PeerScoreThresholds = {
8
- gossipThreshold: -4000,
9
- publishThreshold: -8000,
10
- graylistThreshold: -16000,
27
+ /** Below this, peer is not gossiped to (matches Disconnect state) */
28
+ gossipThreshold: -500,
29
+ /** Below this, self-published messages are not propagated to peer (matches Ban state) */
30
+ publishThreshold: -1000,
31
+ /** Below this, all RPCs from peer are ignored (severe attack scenario) */
32
+ graylistThreshold: -2000,
33
+ /** Above this, peer can offer peer exchange (PX) */
11
34
  acceptPXThreshold: 100,
35
+ /** Above this, peer can be grafted to mesh opportunistically */
12
36
  opportunisticGraftThreshold: 5,
13
37
  };
@@ -0,0 +1,478 @@
1
+ import { TopicType, createTopicString } from '@aztec/stdlib/p2p';
2
+
3
+ import { createTopicScoreParams } from '@chainsafe/libp2p-gossipsub/score';
4
+
5
+ /**
6
+ * Network parameters needed to compute topic-specific gossipsub scoring parameters.
7
+ */
8
+ export type TopicScoringNetworkParams = {
9
+ /** L2 slot duration in milliseconds */
10
+ slotDurationMs: number;
11
+ /** Gossipsub heartbeat interval in milliseconds */
12
+ heartbeatIntervalMs: number;
13
+ /** Target committee size (number of validators expected to attest per slot) */
14
+ targetCommitteeSize: number;
15
+ /**
16
+ * Max blocks per checkpoint, the network-wide config value. Used to derive expected per-slot message rates
17
+ * for scoring; it is a peer-rate threshold input, not a consensus deadline.
18
+ */
19
+ maxBlocksPerCheckpoint: number;
20
+ /** Expected number of block proposals per slot for scoring override. 0 disables scoring, undefined falls back to blocksPerSlot - 1. */
21
+ expectedBlockProposalsPerSlot?: number;
22
+ };
23
+
24
+ /**
25
+ * Determines the decay window in slots based on expected message frequency.
26
+ * Low-frequency topics need longer decay windows to accumulate meaningful counter values.
27
+ *
28
+ * @param expectedMessagesPerSlot - Expected messages per slot for this topic
29
+ * @returns Number of slots over which the counter should decay to ~1%
30
+ */
31
+ export function getDecayWindowSlots(expectedMessagesPerSlot: number): number {
32
+ if (expectedMessagesPerSlot <= 1) {
33
+ return 5; // Low frequency: decay over 5 slots
34
+ } else if (expectedMessagesPerSlot <= 10) {
35
+ return 3; // Medium frequency: decay over 3 slots
36
+ } else {
37
+ return 2; // High frequency: decay over 2 slots
38
+ }
39
+ }
40
+
41
+ /**
42
+ * Computes the decay factor for exponential decay over a given window.
43
+ * After `heartbeatsInWindow` heartbeats, the counter decays to ~1% of its original value.
44
+ *
45
+ * @param heartbeatIntervalMs - Gossipsub heartbeat interval in milliseconds
46
+ * @param slotDurationMs - L2 slot duration in milliseconds
47
+ * @param decayWindowSlots - Number of slots over which to decay
48
+ * @returns Decay factor (0 < decay < 1), applied each heartbeat
49
+ */
50
+ export function computeDecay(heartbeatIntervalMs: number, slotDurationMs: number, decayWindowSlots: number): number {
51
+ const heartbeatsPerSlot = slotDurationMs / heartbeatIntervalMs;
52
+ const heartbeatsInWindow = heartbeatsPerSlot * decayWindowSlots;
53
+
54
+ // Decay to 1% over the window: decay^heartbeatsInWindow = 0.01
55
+ // decay = 0.01^(1/heartbeatsInWindow)
56
+ return Math.pow(0.01, 1 / heartbeatsInWindow);
57
+ }
58
+
59
+ /**
60
+ * Computes the steady-state convergence value for a decaying counter.
61
+ * If messages arrive at a constant rate and decay is applied each heartbeat,
62
+ * the counter converges to: rate / (1 - decay)
63
+ *
64
+ * @param messagesPerHeartbeat - Expected messages per heartbeat
65
+ * @param decay - Decay factor applied each heartbeat
66
+ * @returns Convergence value (steady-state counter value)
67
+ */
68
+ export function computeConvergence(messagesPerHeartbeat: number, decay: number): number {
69
+ return messagesPerHeartbeat / (1 - decay);
70
+ }
71
+
72
+ /**
73
+ * Computes a conservative threshold for mesh message deliveries.
74
+ * The threshold should be low enough to avoid penalizing honest peers with normal variance.
75
+ *
76
+ * @param convergence - Steady-state counter value
77
+ * @param conservativeFactor - Fraction of convergence to use as threshold (e.g., 0.3)
78
+ * @returns Threshold value
79
+ */
80
+ export function computeThreshold(convergence: number, conservativeFactor: number): number {
81
+ return convergence * conservativeFactor;
82
+ }
83
+
84
+ /**
85
+ * Determines the effective expected block proposals per slot for scoring.
86
+ * Returns undefined if scoring should be disabled, or a positive number if enabled.
87
+ *
88
+ * @param blocksPerSlot - Number of blocks per slot from timetable
89
+ * @param expectedBlockProposalsPerSlot - Config override. 0 disables scoring, undefined falls back to blocksPerSlot - 1.
90
+ * @returns Positive number of expected block proposals, or undefined if scoring is disabled
91
+ */
92
+ export function getEffectiveBlockProposalsPerSlot(
93
+ blocksPerSlot: number,
94
+ expectedBlockProposalsPerSlot?: number,
95
+ ): number | undefined {
96
+ if (expectedBlockProposalsPerSlot !== undefined) {
97
+ return expectedBlockProposalsPerSlot > 0 ? expectedBlockProposalsPerSlot : undefined;
98
+ }
99
+ // Fallback: In MBPS mode, N-1 block proposals per slot (last one bundled with checkpoint)
100
+ // In single block mode (blocksPerSlot=1), this is 0 → disabled
101
+ const fallback = Math.max(0, blocksPerSlot - 1);
102
+ return fallback > 0 ? fallback : undefined;
103
+ }
104
+
105
+ /**
106
+ * Gets the expected messages per slot for a given topic type.
107
+ *
108
+ * @param topicType - The topic type
109
+ * @param targetCommitteeSize - Target committee size
110
+ * @param blocksPerSlot - Number of blocks per slot
111
+ * @param expectedBlockProposalsPerSlot - Override for block proposals. 0 disables scoring, undefined falls back to blocksPerSlot - 1.
112
+ * @returns Expected messages per slot, or undefined if unpredictable
113
+ */
114
+ export function getExpectedMessagesPerSlot(
115
+ topicType: TopicType,
116
+ targetCommitteeSize: number,
117
+ blocksPerSlot: number,
118
+ expectedBlockProposalsPerSlot?: number,
119
+ ): number | undefined {
120
+ switch (topicType) {
121
+ case TopicType.tx:
122
+ // Transactions are unpredictable - disable mesh message delivery scoring
123
+ return undefined;
124
+
125
+ case TopicType.block_proposal:
126
+ return getEffectiveBlockProposalsPerSlot(blocksPerSlot, expectedBlockProposalsPerSlot);
127
+
128
+ case TopicType.checkpoint_proposal:
129
+ // Exactly 1 checkpoint proposal per slot
130
+ return 1;
131
+
132
+ case TopicType.checkpoint_attestation:
133
+ // Each committee member sends one attestation per slot
134
+ return targetCommitteeSize;
135
+
136
+ default:
137
+ return undefined;
138
+ }
139
+ }
140
+
141
+ /** Conservative factor for threshold calculation (30% of convergence) */
142
+ const CONSERVATIVE_FACTOR = 0.3;
143
+
144
+ /** Number of slots over which invalid message penalty decays */
145
+ const INVALID_DECAY_WINDOW_SLOTS = 4;
146
+
147
+ /** Weight for invalid message deliveries penalty */
148
+ const INVALID_MESSAGE_WEIGHT = -20;
149
+
150
+ /** Mesh message deliveries window in milliseconds (5 seconds - balanced for TypeScript runtime) */
151
+ const MESH_DELIVERIES_WINDOW_MS = 5000;
152
+
153
+ /**
154
+ * Multiplier for activation time to provide extra grace period during network bootstrap.
155
+ * The activation timer starts from mesh join time, not from first message received.
156
+ * During bootstrap, peers may join before messages start flowing, so we need extra time.
157
+ */
158
+ const ACTIVATION_MULTIPLIER = 5;
159
+
160
+ // ============================================================================
161
+ // P1 (timeInMesh) Configuration
162
+ // ============================================================================
163
+ // P1 rewards peers for time spent in the mesh. Following Lodestar's approach,
164
+ // we normalize the score so that max P1 = MAX_P1_SCORE after P1_CAP_TIME_SECONDS.
165
+ //
166
+ // Formula: P1 = min(timeInMesh / quantum, cap) * weight
167
+ // - quantum = slotDurationMs (one increment per slot worth of time)
168
+ // - cap = P1_CAP_TIME_SECONDS / slotSeconds (number of slots to reach cap)
169
+ // - weight = MAX_P1_SCORE / cap
170
+ //
171
+ // This ensures: max P1 = cap * weight = MAX_P1_SCORE
172
+
173
+ /** Maximum P1 score contribution per topic */
174
+ export const MAX_P1_SCORE = 8;
175
+
176
+ /** Time in seconds to reach P1 cap (1 hour) */
177
+ const P1_CAP_TIME_SECONDS = 3600;
178
+
179
+ // ============================================================================
180
+ // P2 (firstMessageDeliveries) Configuration
181
+ // ============================================================================
182
+ // P2 rewards peers who deliver messages first. We normalize so max P2 = MAX_P2_SCORE.
183
+ // P2 uses a decaying counter, so we set the cap based on convergence and scale the weight.
184
+ //
185
+ // Formula: P2 = min(firstMessageDeliveries, cap) * weight
186
+ // - cap = convergence value for first deliveries
187
+ // - weight = MAX_P2_SCORE / cap
188
+
189
+ /** Maximum P2 score contribution per topic */
190
+ export const MAX_P2_SCORE = 25;
191
+
192
+ /** Decay window for first message deliveries in slots (fast decay) */
193
+ const P2_DECAY_WINDOW_SLOTS = 2;
194
+
195
+ // ============================================================================
196
+ // P3 (meshMessageDeliveries) Configuration
197
+ // ============================================================================
198
+ // P3 penalizes peers who under-deliver messages. For a peer to be pruned from
199
+ // the mesh, their topic score must be negative: P1 + P2 + P3 < 0
200
+ //
201
+ // Therefore, P3 max penalty must exceed (P1 + P2) to cause pruning:
202
+ // |P3| > P1 + P2
203
+ // |P3| > 8 + 25 = 33
204
+ //
205
+ // We set P3 max = -34 per topic (slightly more than P1+P2) to ensure pruning.
206
+ // The number of P3-enabled topics depends on config: by default 2 (checkpoint_proposal +
207
+ // checkpoint_attestation), or 3 if block proposal scoring is enabled via
208
+ // expectedBlockProposalsPerSlot. Total P3b after pruning = -68 (2 topics) or -102 (3 topics).
209
+ //
210
+ // With appSpecificWeight=10, ~20 HighTolerance errors (-40 app score) plus max P3b (-68 or -102)
211
+ // would not cross gossipThreshold (-500). This keeps non-contributors from being disconnected
212
+ // unless they also accrue app-level penalties.
213
+ //
214
+ // The weight formula ensures max penalty equals MAX_P3_PENALTY_PER_TOPIC:
215
+ // weight = MAX_P3_PENALTY_PER_TOPIC / threshold²
216
+ // When deficit = threshold: penalty = threshold² * weight = MAX_P3_PENALTY_PER_TOPIC
217
+
218
+ /** Maximum P3 penalty per topic (must exceed P1 + P2 to cause pruning) */
219
+ export const MAX_P3_PENALTY_PER_TOPIC = -(MAX_P1_SCORE + MAX_P2_SCORE + 1); // -34
220
+
221
+ /**
222
+ * Factory class for creating gossipsub topic scoring parameters.
223
+ * Computes shared values once and reuses them across all topics.
224
+ */
225
+ export class TopicScoreParamsFactory {
226
+ /** Number of blocks per slot based on timetable configuration */
227
+ public readonly blocksPerSlot: number;
228
+
229
+ /** Decay factor for invalid message penalties (P4) */
230
+ public readonly invalidDecay: number;
231
+
232
+ /** Number of heartbeats per slot */
233
+ public readonly heartbeatsPerSlot: number;
234
+
235
+ /** P1: Time in mesh quantum (slot duration in ms - score increases by ~1 per slot) */
236
+ public readonly timeInMeshQuantum: number;
237
+
238
+ /** P1: Time in mesh cap (number of slots to reach max score) */
239
+ public readonly timeInMeshCap: number;
240
+
241
+ /** P1: Time in mesh weight (normalized so max P1 = MAX_P1_SCORE) */
242
+ public readonly timeInMeshWeight: number;
243
+
244
+ /** P2: First message deliveries decay factor */
245
+ public readonly firstMessageDeliveriesDecay: number;
246
+
247
+ /** P2: First message deliveries cap (convergence-based) */
248
+ public readonly firstMessageDeliveriesCap: number;
249
+
250
+ /** P2: First message deliveries weight (normalized so max P2 = MAX_P2_SCORE) */
251
+ public readonly firstMessageDeliveriesWeight: number;
252
+
253
+ /** Base parameters common to all topics */
254
+ private readonly baseParams: {
255
+ topicWeight: number;
256
+ invalidMessageDeliveriesWeight: number;
257
+ invalidMessageDeliveriesDecay: number;
258
+ // P1: timeInMesh
259
+ timeInMeshQuantum: number;
260
+ timeInMeshCap: number;
261
+ timeInMeshWeight: number;
262
+ // P2: firstMessageDeliveries
263
+ firstMessageDeliveriesDecay: number;
264
+ firstMessageDeliveriesCap: number;
265
+ firstMessageDeliveriesWeight: number;
266
+ };
267
+
268
+ constructor(private readonly params: TopicScoringNetworkParams) {
269
+ const { slotDurationMs, heartbeatIntervalMs } = params;
270
+
271
+ // Compute values that are the same for all topics. The block count comes straight from the network-wide
272
+ // max-blocks-per-checkpoint config value.
273
+ this.blocksPerSlot = params.maxBlocksPerCheckpoint;
274
+ this.heartbeatsPerSlot = slotDurationMs / heartbeatIntervalMs;
275
+ this.invalidDecay = computeDecay(heartbeatIntervalMs, slotDurationMs, INVALID_DECAY_WINDOW_SLOTS);
276
+
277
+ // P1: timeInMesh - Lodestar style slot-based normalization
278
+ // quantum = slot duration, so score increases by ~1 per slot of mesh membership
279
+ // cap = number of slots in P1_CAP_TIME_SECONDS (1 hour)
280
+ // weight = MAX_P1_SCORE / cap, so max P1 = cap * weight = MAX_P1_SCORE
281
+ const slotDurationSeconds = slotDurationMs / 1000;
282
+ this.timeInMeshQuantum = slotDurationMs;
283
+ this.timeInMeshCap = P1_CAP_TIME_SECONDS / slotDurationSeconds;
284
+ this.timeInMeshWeight = MAX_P1_SCORE / this.timeInMeshCap;
285
+
286
+ // P2: firstMessageDeliveries - convergence-based cap with normalized weight
287
+ // Uses fast decay (2 slots) so it rewards recent first deliveries
288
+ // cap = convergence at 1 first delivery per heartbeat (theoretical max rate)
289
+ // weight = MAX_P2_SCORE / cap, so max P2 = cap * weight = MAX_P2_SCORE
290
+ this.firstMessageDeliveriesDecay = computeDecay(heartbeatIntervalMs, slotDurationMs, P2_DECAY_WINDOW_SLOTS);
291
+ // Convergence for 1 message per heartbeat (generous estimate for first deliveries)
292
+ this.firstMessageDeliveriesCap = computeConvergence(1, this.firstMessageDeliveriesDecay);
293
+ this.firstMessageDeliveriesWeight = MAX_P2_SCORE / this.firstMessageDeliveriesCap;
294
+
295
+ // Base params are identical for all topics
296
+ this.baseParams = {
297
+ topicWeight: 1,
298
+ invalidMessageDeliveriesWeight: INVALID_MESSAGE_WEIGHT,
299
+ invalidMessageDeliveriesDecay: this.invalidDecay,
300
+ // P1: timeInMesh (same for all topics)
301
+ timeInMeshQuantum: this.timeInMeshQuantum,
302
+ timeInMeshCap: this.timeInMeshCap,
303
+ timeInMeshWeight: this.timeInMeshWeight,
304
+ // P2: firstMessageDeliveries (same for all topics)
305
+ firstMessageDeliveriesDecay: this.firstMessageDeliveriesDecay,
306
+ firstMessageDeliveriesCap: this.firstMessageDeliveriesCap,
307
+ firstMessageDeliveriesWeight: this.firstMessageDeliveriesWeight,
308
+ };
309
+ }
310
+
311
+ /**
312
+ * Creates scoring parameters for topics with unpredictable or zero message rates.
313
+ * Disables P1, P2, P3, and P3b to avoid unbalanced positive score accumulation.
314
+ *
315
+ * Rationale: If P1/P2 were enabled without P3, the topic would contribute free
316
+ * positive scores that could offset penalties from other topics, preventing
317
+ * proper mesh pruning of non-contributing peers.
318
+ */
319
+ private createDisabledP3Params(): ReturnType<typeof createTopicScoreParams> {
320
+ return createTopicScoreParams({
321
+ topicWeight: 1,
322
+ // P1: timeInMesh - disabled (no free positive scores)
323
+ timeInMeshQuantum: 1,
324
+ timeInMeshCap: 0,
325
+ timeInMeshWeight: 0,
326
+ // P2: firstMessageDeliveries - disabled
327
+ firstMessageDeliveriesDecay: 0.5,
328
+ firstMessageDeliveriesCap: 0,
329
+ firstMessageDeliveriesWeight: 0,
330
+ // P3: meshMessageDeliveries - disabled
331
+ meshMessageDeliveriesWeight: 0,
332
+ meshMessageDeliveriesDecay: 0.5,
333
+ meshMessageDeliveriesThreshold: 0,
334
+ meshMessageDeliveriesWindow: 0,
335
+ meshMessageDeliveriesActivation: 0,
336
+ meshMessageDeliveriesCap: 0,
337
+ // P3b: meshFailurePenalty - disabled
338
+ meshFailurePenaltyWeight: 0,
339
+ meshFailurePenaltyDecay: 0.5,
340
+ // P4: invalidMessageDeliveries - still enabled for attack detection
341
+ invalidMessageDeliveriesWeight: INVALID_MESSAGE_WEIGHT,
342
+ invalidMessageDeliveriesDecay: this.invalidDecay,
343
+ });
344
+ }
345
+
346
+ /**
347
+ * Creates scoring parameters for topics with predictable message rates.
348
+ * Enables P1, P2, P3, and P3b for balanced scoring.
349
+ *
350
+ * The scoring is designed so that:
351
+ * - P1 + P2 max = 8 + 25 = 33 (positive rewards for good behavior)
352
+ * - P3 max = -34 (penalty exceeds P1+P2 to ensure pruning of non-contributors)
353
+ * - After pruning: P1 resets, P2 decays, P3b persists with slow decay
354
+ *
355
+ * @param expectedPerSlot - Expected messages per slot
356
+ */
357
+ private createEnabledP3Params(expectedPerSlot: number): ReturnType<typeof createTopicScoreParams> {
358
+ const { slotDurationMs, heartbeatIntervalMs } = this.params;
359
+
360
+ // Calculate decay based on message frequency
361
+ const decayWindowSlots = getDecayWindowSlots(expectedPerSlot);
362
+ const decay = computeDecay(heartbeatIntervalMs, slotDurationMs, decayWindowSlots);
363
+
364
+ // Calculate convergence and threshold
365
+ const messagesPerHeartbeat = expectedPerSlot / this.heartbeatsPerSlot;
366
+ const convergence = computeConvergence(messagesPerHeartbeat, decay);
367
+ const threshold = computeThreshold(convergence, CONSERVATIVE_FACTOR);
368
+
369
+ // Cap factor: higher for high-volume topics
370
+ const capFactor = expectedPerSlot > 10 ? 8 : 4;
371
+
372
+ // P3 Weight: scaled so max penalty = MAX_P3_PENALTY_PER_TOPIC (-34)
373
+ // When deficit = threshold (peer delivers nothing):
374
+ // penalty = deficit² × weight = threshold² × (MAX_P3_PENALTY_PER_TOPIC / threshold²) = MAX_P3_PENALTY_PER_TOPIC
375
+ const meshDeliveriesWeight = threshold > 0 ? MAX_P3_PENALTY_PER_TOPIC / (threshold * threshold) : 0;
376
+
377
+ // Activation time: use the decay window multiplied by ACTIVATION_MULTIPLIER for extra grace
378
+ // during network bootstrap. The timer starts from mesh join time, not from first message,
379
+ // so peers joining before messages flow need extra time to accumulate counter values.
380
+ const activationMs = slotDurationMs * decayWindowSlots * ACTIVATION_MULTIPLIER;
381
+
382
+ return createTopicScoreParams({
383
+ ...this.baseParams,
384
+ // P3: meshMessageDeliveries
385
+ meshMessageDeliveriesWeight: meshDeliveriesWeight,
386
+ meshMessageDeliveriesDecay: decay,
387
+ meshMessageDeliveriesThreshold: threshold,
388
+ meshMessageDeliveriesWindow: MESH_DELIVERIES_WINDOW_MS,
389
+ meshMessageDeliveriesActivation: activationMs,
390
+ meshMessageDeliveriesCap: Math.max(threshold * capFactor, 2),
391
+ // P3b: meshFailurePenalty (same weight and decay as P3)
392
+ meshFailurePenaltyWeight: meshDeliveriesWeight,
393
+ meshFailurePenaltyDecay: decay,
394
+ });
395
+ }
396
+
397
+ /** Number of topics with P3 enabled, computed from config. Always 2 (checkpoint_proposal + checkpoint_attestation) plus optionally block_proposal. */
398
+ get numP3EnabledTopics(): number {
399
+ const blockProposalP3Enabled =
400
+ getEffectiveBlockProposalsPerSlot(this.blocksPerSlot, this.params.expectedBlockProposalsPerSlot) !== undefined;
401
+ return blockProposalP3Enabled ? 3 : 2;
402
+ }
403
+
404
+ /** Total maximum P3b penalty across all topics after pruning, computed from config */
405
+ get totalMaxP3bPenalty(): number {
406
+ return MAX_P3_PENALTY_PER_TOPIC * this.numP3EnabledTopics;
407
+ }
408
+
409
+ /**
410
+ * Creates topic score parameters for a specific topic type.
411
+ *
412
+ * @param topicType - The topic type
413
+ * @returns TopicScoreParams for the topic
414
+ */
415
+ createForTopic(topicType: TopicType): ReturnType<typeof createTopicScoreParams> {
416
+ const expectedPerSlot = getExpectedMessagesPerSlot(
417
+ topicType,
418
+ this.params.targetCommitteeSize,
419
+ this.blocksPerSlot,
420
+ this.params.expectedBlockProposalsPerSlot,
421
+ );
422
+
423
+ // For unpredictable topics (tx) or topics with 0 expected messages, disable P3/P3b
424
+ if (expectedPerSlot === undefined || expectedPerSlot === 0) {
425
+ return this.createDisabledP3Params();
426
+ }
427
+
428
+ return this.createEnabledP3Params(expectedPerSlot);
429
+ }
430
+
431
+ /**
432
+ * Creates all topic score parameters for gossipsub configuration.
433
+ *
434
+ * @param protocolVersion - Protocol version string for topic naming
435
+ * @returns Record mapping topic strings to their score parameters
436
+ */
437
+ createAll(protocolVersion: string): Record<string, ReturnType<typeof createTopicScoreParams>> {
438
+ const topics: Record<string, ReturnType<typeof createTopicScoreParams>> = {};
439
+
440
+ for (const topicType of Object.values(TopicType)) {
441
+ const topicString = createTopicString(topicType, protocolVersion);
442
+ topics[topicString] = this.createForTopic(topicType);
443
+ }
444
+
445
+ return topics;
446
+ }
447
+ }
448
+
449
+ /**
450
+ * Creates topic score parameters for a specific topic type.
451
+ * Convenience function that creates a factory internally.
452
+ *
453
+ * @param topicType - The topic type
454
+ * @param params - Network parameters for scoring calculation
455
+ * @returns TopicScoreParams for the topic
456
+ */
457
+ export function createTopicScoreParamsForTopic(
458
+ topicType: TopicType,
459
+ params: TopicScoringNetworkParams,
460
+ ): ReturnType<typeof createTopicScoreParams> {
461
+ const factory = new TopicScoreParamsFactory(params);
462
+ return factory.createForTopic(topicType);
463
+ }
464
+
465
+ /**
466
+ * Creates all topic score parameters for gossipsub configuration.
467
+ *
468
+ * @param protocolVersion - Protocol version string for topic naming
469
+ * @param params - Network parameters for scoring calculation
470
+ * @returns Record mapping topic strings to their score parameters
471
+ */
472
+ export function createAllTopicScoreParams(
473
+ protocolVersion: string,
474
+ params: TopicScoringNetworkParams,
475
+ ): Record<string, ReturnType<typeof createTopicScoreParams>> {
476
+ const factory = new TopicScoreParamsFactory(params);
477
+ return factory.createAll(protocolVersion);
478
+ }
@@ -3,4 +3,5 @@ export * from './libp2p/libp2p_service.js';
3
3
  export * from './tx_provider.js';
4
4
  export * from './dummy_service.js';
5
5
  export * from './reqresp/index.js';
6
+ export * from './tx_file_store/index.js';
6
7
  export * from './tx_collection/index.js';
@@ -18,6 +18,7 @@ export class P2PInstrumentation {
18
18
  private messagePrevalidationCount: UpDownCounter;
19
19
  private messageLatency: Histogram;
20
20
  private txReceivedCount: UpDownCounter;
21
+ private slowValidationCount: UpDownCounter;
21
22
 
22
23
  private aggLatencyHisto = new Map<TopicType, RecordableHistogram>();
23
24
  private aggValidationHisto = new Map<TopicType, RecordableHistogram>();
@@ -48,6 +49,15 @@ export class P2PInstrumentation {
48
49
 
49
50
  this.txReceivedCount = createUpDownCounterWithDefault(meter, Metrics.P2P_GOSSIP_TX_RECEIVED_COUNT);
50
51
 
52
+ this.slowValidationCount = createUpDownCounterWithDefault(meter, Metrics.P2P_GOSSIP_SLOW_VALIDATION_COUNT, {
53
+ [Attributes.TOPIC_NAME]: [
54
+ TopicType.tx,
55
+ TopicType.block_proposal,
56
+ TopicType.checkpoint_proposal,
57
+ TopicType.checkpoint_attestation,
58
+ ],
59
+ });
60
+
51
61
  this.aggLatencyMetrics = {
52
62
  avg: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_AVG),
53
63
  max: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_MAX),
@@ -87,6 +97,10 @@ export class P2PInstrumentation {
87
97
  this.txReceivedCount.add(count);
88
98
  }
89
99
 
100
+ public incSlowValidation(topicName: TopicType) {
101
+ this.slowValidationCount.add(1, { [Attributes.TOPIC_NAME]: topicName });
102
+ }
103
+
90
104
  public incMessagePrevalidationStatus(passed: boolean, topicName: TopicType | undefined) {
91
105
  this.messagePrevalidationCount.add(1, { [Attributes.TOPIC_NAME]: topicName, [Attributes.OK]: passed });
92
106
  }