@aztec/p2p 0.0.1-commit.b655e406 → 0.0.1-commit.c7c42ec

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 (300) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +1 -1
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/client/factory.d.ts +2 -2
  4. package/dest/client/factory.d.ts.map +1 -1
  5. package/dest/client/factory.js +2 -3
  6. package/dest/client/index.d.ts +1 -1
  7. package/dest/client/interface.d.ts +4 -2
  8. package/dest/client/interface.d.ts.map +1 -1
  9. package/dest/client/p2p_client.d.ts +9 -27
  10. package/dest/client/p2p_client.d.ts.map +1 -1
  11. package/dest/client/p2p_client.js +39 -32
  12. package/dest/config.d.ts +62 -59
  13. package/dest/config.d.ts.map +1 -1
  14. package/dest/config.js +19 -12
  15. package/dest/enr/generate-enr.d.ts +1 -1
  16. package/dest/enr/index.d.ts +1 -1
  17. package/dest/errors/attestation-pool.error.d.ts +7 -0
  18. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  19. package/dest/errors/attestation-pool.error.js +12 -0
  20. package/dest/errors/reqresp.error.d.ts +1 -1
  21. package/dest/errors/reqresp.error.d.ts.map +1 -1
  22. package/dest/index.d.ts +1 -1
  23. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +28 -6
  24. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  26. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +35 -34
  28. package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +13 -6
  30. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  31. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +41 -18
  32. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +11 -6
  33. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  34. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +30 -8
  35. package/dest/mem_pools/attestation_pool/mocks.d.ts +226 -5
  36. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  37. package/dest/mem_pools/attestation_pool/mocks.js +2 -2
  38. package/dest/mem_pools/index.d.ts +1 -1
  39. package/dest/mem_pools/instrumentation.d.ts +9 -1
  40. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  41. package/dest/mem_pools/instrumentation.js +38 -2
  42. package/dest/mem_pools/interface.d.ts +3 -4
  43. package/dest/mem_pools/interface.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +30 -60
  45. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  46. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +262 -324
  47. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +18 -0
  48. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  49. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +56 -0
  50. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +83 -0
  51. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  52. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +5 -0
  53. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts +15 -0
  54. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts.map +1 -0
  55. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.js +88 -0
  56. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  57. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  58. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  59. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  60. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  61. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +76 -0
  62. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  63. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  64. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  65. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  66. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  67. package/dest/mem_pools/tx_pool/index.js +0 -1
  68. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  69. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  70. package/dest/mem_pools/tx_pool/priority.js +6 -1
  71. package/dest/mem_pools/tx_pool/tx_pool.d.ts +11 -6
  72. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  73. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  74. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  75. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +30 -24
  76. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -3
  77. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  78. package/dest/msg_validators/attestation_validator/attestation_validator.js +12 -12
  79. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
  80. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  81. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +67 -0
  82. package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
  83. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
  84. package/dest/msg_validators/attestation_validator/index.js +1 -0
  85. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +1 -1
  86. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +1 -1
  87. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +22 -10
  88. package/dest/msg_validators/block_proposal_validator/index.d.ts +1 -1
  89. package/dest/msg_validators/index.d.ts +1 -1
  90. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +1 -1
  91. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -1
  92. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  93. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  94. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +1 -1
  95. package/dest/msg_validators/tx_validator/archive_cache.d.ts +2 -2
  96. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  97. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +2 -2
  98. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  99. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  100. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +1 -1
  102. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  103. package/dest/msg_validators/tx_validator/factory.d.ts +4 -3
  104. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  105. package/dest/msg_validators/tx_validator/factory.js +1 -1
  106. package/dest/msg_validators/tx_validator/gas_validator.d.ts +1 -1
  107. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  108. package/dest/msg_validators/tx_validator/index.d.ts +1 -1
  109. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +2 -2
  110. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  111. package/dest/msg_validators/tx_validator/phases_validator.d.ts +1 -1
  112. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  113. package/dest/msg_validators/tx_validator/phases_validator.js +3 -1
  114. package/dest/msg_validators/tx_validator/test_utils.d.ts +2 -2
  115. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
  116. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +3 -2
  117. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  118. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +1 -1
  119. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  120. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +1 -1
  121. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  122. package/dest/services/data_store.d.ts +1 -1
  123. package/dest/services/data_store.d.ts.map +1 -1
  124. package/dest/services/discv5/discV5_service.d.ts +1 -1
  125. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  126. package/dest/services/dummy_service.d.ts +1 -1
  127. package/dest/services/dummy_service.d.ts.map +1 -1
  128. package/dest/services/encoding.d.ts +1 -1
  129. package/dest/services/encoding.d.ts.map +1 -1
  130. package/dest/services/encoding.js +1 -1
  131. package/dest/services/gossipsub/scoring.d.ts +1 -1
  132. package/dest/services/index.d.ts +1 -1
  133. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  134. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  135. package/dest/services/libp2p/instrumentation.js +9 -2
  136. package/dest/services/libp2p/libp2p_service.d.ts +14 -70
  137. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  138. package/dest/services/libp2p/libp2p_service.js +231 -66
  139. package/dest/services/peer-manager/interface.d.ts +1 -1
  140. package/dest/services/peer-manager/metrics.d.ts +8 -1
  141. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  142. package/dest/services/peer-manager/metrics.js +28 -0
  143. package/dest/services/peer-manager/peer_manager.d.ts +1 -32
  144. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  145. package/dest/services/peer-manager/peer_manager.js +6 -2
  146. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  147. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  148. package/dest/services/peer-manager/peer_scoring.js +40 -2
  149. package/dest/services/reqresp/config.d.ts +1 -1
  150. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +1 -1
  151. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  152. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +1 -4
  153. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  154. package/dest/services/reqresp/index.d.ts +1 -1
  155. package/dest/services/reqresp/interface.d.ts +2 -2
  156. package/dest/services/reqresp/interface.d.ts.map +1 -1
  157. package/dest/services/reqresp/interface.js +1 -1
  158. package/dest/services/reqresp/metrics.d.ts +1 -1
  159. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  160. package/dest/services/reqresp/protocols/auth.d.ts +2 -2
  161. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
  162. package/dest/services/reqresp/protocols/auth.js +2 -2
  163. package/dest/services/reqresp/protocols/block.d.ts +1 -1
  164. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  165. package/dest/services/reqresp/protocols/block.js +3 -2
  166. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +1 -1
  167. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  168. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  169. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +4 -6
  170. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  171. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +1 -1
  172. package/dest/services/reqresp/protocols/block_txs/index.d.ts +1 -1
  173. package/dest/services/reqresp/protocols/goodbye.d.ts +1 -1
  174. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  175. package/dest/services/reqresp/protocols/index.d.ts +1 -1
  176. package/dest/services/reqresp/protocols/ping.d.ts +1 -1
  177. package/dest/services/reqresp/protocols/status.d.ts +6 -5
  178. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  179. package/dest/services/reqresp/protocols/status.js +4 -3
  180. package/dest/services/reqresp/protocols/tx.d.ts +2 -3
  181. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  182. package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
  183. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +2 -2
  184. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  185. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  186. package/dest/services/reqresp/reqresp.d.ts +1 -41
  187. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  188. package/dest/services/reqresp/status.d.ts +2 -2
  189. package/dest/services/reqresp/status.d.ts.map +1 -1
  190. package/dest/services/service.d.ts +1 -1
  191. package/dest/services/tx_collection/config.d.ts +1 -1
  192. package/dest/services/tx_collection/config.js +1 -1
  193. package/dest/services/tx_collection/fast_tx_collection.d.ts +4 -9
  194. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  195. package/dest/services/tx_collection/index.d.ts +1 -1
  196. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  197. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  198. package/dest/services/tx_collection/slow_tx_collection.d.ts +6 -7
  199. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  200. package/dest/services/tx_collection/slow_tx_collection.js +2 -1
  201. package/dest/services/tx_collection/tx_collection.d.ts +11 -11
  202. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  203. package/dest/services/tx_collection/tx_collection_sink.d.ts +3 -3
  204. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  205. package/dest/services/tx_collection/tx_source.d.ts +1 -1
  206. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  207. package/dest/services/tx_provider.d.ts +6 -4
  208. package/dest/services/tx_provider.d.ts.map +1 -1
  209. package/dest/services/tx_provider.js +11 -2
  210. package/dest/services/tx_provider_instrumentation.d.ts +5 -2
  211. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  212. package/dest/services/tx_provider_instrumentation.js +14 -1
  213. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
  214. package/dest/test-helpers/get-ports.d.ts +1 -1
  215. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  216. package/dest/test-helpers/index.d.ts +1 -1
  217. package/dest/test-helpers/make-enrs.d.ts +1 -1
  218. package/dest/test-helpers/make-test-p2p-clients.d.ts +2 -2
  219. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  220. package/dest/test-helpers/mock-pubsub.d.ts +4 -4
  221. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  222. package/dest/test-helpers/mock-tx-helpers.d.ts +2 -2
  223. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -1
  224. package/dest/test-helpers/mock-tx-helpers.js +1 -1
  225. package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
  226. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  227. package/dest/testbench/p2p_client_testbench_worker.d.ts +1 -1
  228. package/dest/testbench/p2p_client_testbench_worker.js +12 -8
  229. package/dest/testbench/parse_log_file.d.ts +1 -1
  230. package/dest/testbench/testbench.d.ts +1 -1
  231. package/dest/testbench/worker_client_manager.d.ts +1 -1
  232. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  233. package/dest/types/index.d.ts +1 -1
  234. package/dest/util.d.ts +2 -1
  235. package/dest/util.d.ts.map +1 -1
  236. package/dest/util.js +11 -2
  237. package/dest/versioning.d.ts +1 -1
  238. package/package.json +19 -18
  239. package/src/client/factory.ts +5 -10
  240. package/src/client/interface.ts +4 -1
  241. package/src/client/p2p_client.ts +63 -60
  242. package/src/config.ts +28 -17
  243. package/src/errors/attestation-pool.error.ts +13 -0
  244. package/src/mem_pools/attestation_pool/attestation_pool.ts +29 -5
  245. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +47 -34
  246. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +66 -24
  247. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +50 -16
  248. package/src/mem_pools/attestation_pool/mocks.ts +3 -3
  249. package/src/mem_pools/instrumentation.ts +46 -0
  250. package/src/mem_pools/interface.ts +2 -4
  251. package/src/mem_pools/tx_pool/README.md +255 -0
  252. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +314 -373
  253. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +71 -0
  254. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +93 -0
  255. package/src/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.ts +108 -0
  256. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  257. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +91 -0
  258. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  259. package/src/mem_pools/tx_pool/index.ts +0 -1
  260. package/src/mem_pools/tx_pool/priority.ts +8 -1
  261. package/src/mem_pools/tx_pool/tx_pool.ts +11 -5
  262. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +23 -17
  263. package/src/msg_validators/attestation_validator/attestation_validator.ts +14 -16
  264. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +91 -0
  265. package/src/msg_validators/attestation_validator/index.ts +1 -0
  266. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +26 -10
  267. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  268. package/src/msg_validators/tx_validator/block_header_validator.ts +1 -1
  269. package/src/msg_validators/tx_validator/factory.ts +3 -2
  270. package/src/msg_validators/tx_validator/metadata_validator.ts +1 -1
  271. package/src/msg_validators/tx_validator/phases_validator.ts +3 -1
  272. package/src/msg_validators/tx_validator/test_utils.ts +1 -1
  273. package/src/msg_validators/tx_validator/timestamp_validator.ts +2 -1
  274. package/src/services/encoding.ts +1 -1
  275. package/src/services/libp2p/instrumentation.ts +10 -1
  276. package/src/services/libp2p/libp2p_service.ts +263 -79
  277. package/src/services/peer-manager/metrics.ts +32 -0
  278. package/src/services/peer-manager/peer_manager.ts +6 -2
  279. package/src/services/peer-manager/peer_scoring.ts +46 -3
  280. package/src/services/reqresp/interface.ts +1 -1
  281. package/src/services/reqresp/protocols/auth.ts +2 -2
  282. package/src/services/reqresp/protocols/block.ts +3 -2
  283. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +1 -1
  284. package/src/services/reqresp/protocols/status.ts +9 -8
  285. package/src/services/reqresp/protocols/tx.ts +1 -2
  286. package/src/services/tx_collection/config.ts +1 -1
  287. package/src/services/tx_collection/fast_tx_collection.ts +3 -2
  288. package/src/services/tx_collection/slow_tx_collection.ts +7 -6
  289. package/src/services/tx_collection/tx_collection.ts +10 -9
  290. package/src/services/tx_provider.ts +21 -5
  291. package/src/services/tx_provider_instrumentation.ts +19 -2
  292. package/src/test-helpers/mock-pubsub.ts +1 -1
  293. package/src/test-helpers/mock-tx-helpers.ts +1 -1
  294. package/src/test-helpers/reqresp-nodes.ts +1 -1
  295. package/src/testbench/p2p_client_testbench_worker.ts +10 -6
  296. package/src/util.ts +12 -2
  297. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -80
  298. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  299. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -238
  300. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -283
@@ -1 +1 @@
1
- {"version":3,"file":"libp2p_service.d.ts","sourceRoot":"","sources":["../../../src/services/libp2p/libp2p_service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,KAAK,MAAM,EAA6C,MAAM,uBAAuB,CAAC;AAI/F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,OAAO,KAAK,EAAE,6BAA6B,EAAE,QAAQ,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACvH,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,KAAK,UAAU,EACf,aAAa,EAGb,SAAS,EAIV,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,EAAE,EAA0D,MAAM,kBAAkB,CAAC;AAG9F,OAAO,EAAkC,KAAK,eAAe,EAAE,UAAU,EAAa,MAAM,yBAAyB,CAAC;AActH,OAAO,EAAE,KAAK,OAAO,EAA4B,KAAK,MAAM,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAI9G,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAGzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAa7D,OAAO,EAAE,KAAK,YAAY,EAAsB,MAAM,eAAe,CAAC;AAMtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAGzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAEL,KAAK,gBAAgB,EACrB,kBAAkB,EAClB,KAAK,yBAAyB,EAE9B,KAAK,4BAA4B,EACjC,KAAK,cAAc,EAEpB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,WAAW,EAGX,aAAa,EAKd,MAAM,+BAA+B,CAAC;AAEvC,OAAO,KAAK,EAAE,wBAAwB,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAYhG,KAAK,+BAA+B,CAAC,CAAC,IAClC;IAAE,GAAG,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAA;CAAE,GAC9E;IAAE,GAAG,CAAC,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,oBAAoB,CAAC,MAAM,CAAA;CAAE,CAAC;AAE7D;;GAEG;AACH,qBAAa,aAAa,CAAC,CAAC,SAAS,aAAa,GAAG,aAAa,CAAC,IAAI,CAAE,SAAQ,UAAW,YAAW,UAAU;IA0B7G,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IACd,SAAS,CAAC,IAAI,EAAE,YAAY;IAC5B,OAAO,CAAC,oBAAoB;IAC5B,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,WAAW;IACnB,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC/B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,sBAAsB;IAE9B,SAAS,CAAC,MAAM;IArClB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,uBAAuB,CAAC,CAAiB;IACjD,OAAO,CAAC,mBAAmB,CAA0F;IAGrH,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,sBAAsB,CAAyB;IAEvD,OAAO,CAAC,eAAe,CAAM;IAC7B,OAAO,CAAC,YAAY,CAA8D;IAElF,OAAO,CAAC,SAAS,CAAwD;IAEzE;;;;OAIG;IACH,OAAO,CAAC,qBAAqB,CAA2B;IAExD,OAAO,CAAC,qBAAqB,CAA6C;IAE1E,OAAO,CAAC,eAAe,CAAqB;gBAGlC,UAAU,EAAE,CAAC,EACb,MAAM,EAAE,SAAS,EACf,IAAI,EAAE,YAAY,EACpB,oBAAoB,EAAE,oBAAoB,EAC1C,OAAO,EAAE,gBAAgB,EACzB,WAAW,EAAE,oBAAoB,EAC/B,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,EACvB,QAAQ,EAAE,aAAa,GAAG,kBAAkB,EAC5C,UAAU,EAAE,mBAAmB,EAC/B,aAAa,EAAE,6BAA6B,EAC5C,sBAAsB,EAAE,sBAAsB,EACtD,SAAS,EAAE,eAAe,EAChB,MAAM,SAAqC;IAmChD,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAIrD;;;;;OAKG;WACiB,GAAG,CAAC,CAAC,SAAS,aAAa,EAC7C,UAAU,EAAE,CAAC,EACb,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;QACJ,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QACtB,aAAa,EAAE,aAAa,GAAG,kBAAkB,CAAC;QAClD,UAAU,EAAE,mBAAmB,CAAC;QAChC,aAAa,EAAE,6BAA6B,CAAC;QAC7C,sBAAsB,EAAE,sBAAsB,CAAC;QAC/C,SAAS,EAAE,iBAAiB,CAAC;QAC7B,SAAS,EAAE,eAAe,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAC;QACf,cAAc,EAAE,MAAM,CAAC;KACxB;IA6NH;;;OAGG;IACU,KAAK;IA6ElB;;;OAGG;IACU,IAAI;IAqBjB,qBAAqB,CACnB,WAAW,EAAE,kBAAkB,EAC/B,OAAO,EAAE,yBAAyB,EAClC,SAAS,CAAC,EAAE,4BAA4B,CAAC,kBAAkB,CAAC,GAC3D,OAAO,CAAC,IAAI,CAAC;IAIT,8BAA8B,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAI3D,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,QAAQ,EAAE;IAIrD,OAAO,CAAC,oBAAoB;IAa5B;;;;;OAKG;IACH,gBAAgB,CAAC,WAAW,SAAS,kBAAkB,EACrD,QAAQ,EAAE,WAAW,EACrB,QAAQ,EAAE,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAChE,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;IAInE;;;OAGG;IACI,MAAM,IAAI,GAAG,GAAG,SAAS;IAIzB,6BAA6B,CAAC,QAAQ,EAAE,wBAAwB;IAIvE;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;;;;OAKG;YACW,cAAc;IAS5B;;;;OAIG;IACH,SAAS,CAAC,0BAA0B,CAClC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,CAAA;KAAE;IA+B7C;;;;OAIG;cACa,sBAAsB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;cAsBlE,uBAAuB,CAAC,CAAC,EACvC,cAAc,EAAE,MAAM,OAAO,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC,EACjE,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,+BAA+B,CAAC,CAAC,CAAC,CAAC;cAqB9B,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAyCnF;;;;;OAKG;YACW,0BAA0B;YA8C1B,oBAAoB;YA6CpB,yBAAyB;IAiCvC;;;OAGG;YAMW,oBAAoB;IAIlC;;;OAGG;IACU,SAAS,CAAC,CAAC,SAAS,UAAU,EAAE,OAAO,EAAE,CAAC;IAYvD;;;;;;OAMG;YAIW,yBAAyB;IAsBvC;;;;;;;;;;;;;OAaG;YAIW,oBAAoB;IAoBlC,OAAO,CAAC,0BAA0B;YAapB,mBAAmB;YAqBnB,oBAAoB;YA4BpB,UAAU;IAWX,QAAQ,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB/C;;;;;;;;;OASG;YACW,uBAAuB;IAwBrC;;;;;OAKG;YACW,cAAc;IA4B5B;;;;;;;;;;OAUG;YACW,wBAAwB;IAuBtC;;;;;OAKG;IAMU,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAUjG;;;;;OAKG;IAIU,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAWnF,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAIpC,yBAAyB,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;YAIpF,WAAW;YAcX,UAAU;CAYzB"}
1
+ {"version":3,"file":"libp2p_service.d.ts","sourceRoot":"","sources":["../../../src/services/libp2p/libp2p_service.ts"],"names":[],"mappings":"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"}
@@ -4,10 +4,10 @@ function _ts_decorate(decorators, target, key, desc) {
4
4
  else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  }
7
- import { randomInt } from '@aztec/foundation/crypto';
8
- import { Fr } from '@aztec/foundation/fields';
7
+ import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
8
+ import { randomInt } from '@aztec/foundation/crypto/random';
9
+ import { Fr } from '@aztec/foundation/curves/bn254';
9
10
  import { createLibp2pComponentLogger, createLogger } from '@aztec/foundation/log';
10
- import { SerialQueue } from '@aztec/foundation/queue';
11
11
  import { RunningPromise } from '@aztec/foundation/running-promise';
12
12
  import { Timer } from '@aztec/foundation/timer';
13
13
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
@@ -30,7 +30,8 @@ import { mplex } from '@libp2p/mplex';
30
30
  import { tcp } from '@libp2p/tcp';
31
31
  import { ENR } from '@nethermindeth/enr';
32
32
  import { createLibp2p } from 'libp2p';
33
- import { AttestationValidator, BlockProposalValidator } from '../../msg_validators/index.js';
33
+ import { ProposalSlotCapExceededError } from '../../errors/attestation-pool.error.js';
34
+ import { AttestationValidator, BlockProposalValidator, FishermanAttestationValidator } from '../../msg_validators/index.js';
34
35
  import { MessageSeenValidator } from '../../msg_validators/msg_seen_validator/msg_seen_validator.js';
35
36
  import { getDefaultAllowedSetupFunctions } from '../../msg_validators/tx_validator/allowed_public_setup.js';
36
37
  import { createTxMessageValidators } from '../../msg_validators/tx_validator/factory.js';
@@ -64,8 +65,6 @@ import { P2PInstrumentation } from './instrumentation.js';
64
65
  epochCache;
65
66
  proofVerifier;
66
67
  worldStateSynchronizer;
67
- logger;
68
- jobQueue;
69
68
  discoveryRunningPromise;
70
69
  msgIdSeenValidators;
71
70
  // Message validators
@@ -81,8 +80,11 @@ import { P2PInstrumentation } from './instrumentation.js';
81
80
  */ blockReceivedCallback;
82
81
  gossipSubEventHandler;
83
82
  instrumentation;
83
+ logger;
84
84
  constructor(clientType, config, node, peerDiscoveryService, reqresp, peerManager, mempools, archiver, epochCache, proofVerifier, worldStateSynchronizer, telemetry, logger = createLogger('p2p:libp2p_service')){
85
- super(telemetry, 'LibP2PService'), this.clientType = clientType, this.config = config, this.node = node, this.peerDiscoveryService = peerDiscoveryService, this.reqresp = reqresp, this.peerManager = peerManager, this.mempools = mempools, this.archiver = archiver, this.epochCache = epochCache, this.proofVerifier = proofVerifier, this.worldStateSynchronizer = worldStateSynchronizer, this.logger = logger, this.jobQueue = new SerialQueue(), this.msgIdSeenValidators = {}, this.protocolVersion = '', this.topicStrings = {};
85
+ super(telemetry, 'LibP2PService'), this.clientType = clientType, this.config = config, this.node = node, this.peerDiscoveryService = peerDiscoveryService, this.reqresp = reqresp, this.peerManager = peerManager, this.mempools = mempools, this.archiver = archiver, this.epochCache = epochCache, this.proofVerifier = proofVerifier, this.worldStateSynchronizer = worldStateSynchronizer, this.msgIdSeenValidators = {}, this.protocolVersion = '', this.topicStrings = {};
86
+ // Create child logger with fisherman prefix if in fisherman mode
87
+ this.logger = config.fishermanMode ? logger.createChild('[FISHERMAN]') : logger;
86
88
  this.instrumentation = new P2PInstrumentation(telemetry, 'LibP2PService');
87
89
  this.msgIdSeenValidators[TopicType.tx] = new MessageSeenValidator(config.seenMessageCacheSize);
88
90
  this.msgIdSeenValidators[TopicType.block_proposal] = new MessageSeenValidator(config.seenMessageCacheSize);
@@ -93,14 +95,15 @@ import { P2PInstrumentation } from './instrumentation.js';
93
95
  this.topicStrings[TopicType.tx] = createTopicString(TopicType.tx, this.protocolVersion);
94
96
  this.topicStrings[TopicType.block_proposal] = createTopicString(TopicType.block_proposal, this.protocolVersion);
95
97
  this.topicStrings[TopicType.block_attestation] = createTopicString(TopicType.block_attestation, this.protocolVersion);
96
- this.attestationValidator = new AttestationValidator(epochCache);
98
+ // Use FishermanAttestationValidator in fisherman mode to validate attestation payloads against proposals
99
+ this.attestationValidator = config.fishermanMode ? new FishermanAttestationValidator(epochCache, mempools.attestationPool, telemetry) : new AttestationValidator(epochCache);
97
100
  this.blockProposalValidator = new BlockProposalValidator(epochCache, {
98
101
  txsPermitted: !config.disableTransactions
99
102
  });
100
103
  this.gossipSubEventHandler = this.handleGossipSubEvent.bind(this);
101
104
  this.blockReceivedCallback = async (block)=>{
102
- this.logger.debug(`Handler not yet registered: Block received callback not set. Received block for slot ${block.slotNumber.toNumber()} from peer.`, {
103
- p2pMessageIdentifier: await block.p2pMessageIdentifier()
105
+ this.logger.debug(`Handler not yet registered: Block received callback not set. Received block for slot ${block.slotNumber} from peer.`, {
106
+ p2pMessageIdentifier: await block.p2pMessageLoggingIdentifier()
104
107
  });
105
108
  return undefined;
106
109
  };
@@ -278,7 +281,7 @@ import { P2PInstrumentation } from './instrumentation.js';
278
281
  },
279
282
  logger: createLibp2pComponentLogger(logger.module)
280
283
  });
281
- const peerScoring = new PeerScoring(config);
284
+ const peerScoring = new PeerScoring(config, telemetry);
282
285
  const reqresp = new ReqResp(config, node, peerScoring, createLogger(`${logger.module}:reqresp`));
283
286
  const peerManager = new PeerManager(node, peerDiscoveryService, config, telemetry, createLogger(`${logger.module}:peer_manager`), peerScoring, reqresp, worldStateSynchronizer, protocolVersion, epochCache);
284
287
  // Update gossipsub score params
@@ -300,8 +303,6 @@ import { P2PInstrumentation } from './instrumentation.js';
300
303
  throw new Error('Announce address not provided.');
301
304
  }
302
305
  const announceTcpMultiaddr = convertToMultiaddr(p2pIp, p2pPort, 'tcp');
303
- // Start job queue, peer discovery service and libp2p node
304
- this.jobQueue.start();
305
306
  await this.peerManager.initializePeers();
306
307
  if (!this.config.p2pDiscoveryDisabled) {
307
308
  await this.peerDiscoveryService.start();
@@ -322,8 +323,7 @@ import { P2PInstrumentation } from './instrumentation.js';
322
323
  [ReqRespSubProtocol.GOODBYE]: goodbyeHandler.bind(this),
323
324
  [ReqRespSubProtocol.BLOCK]: blockHandler.bind(this)
324
325
  };
325
- // Only handle block transactions request if attestation pool is available to the client
326
- if (this.mempools.attestationPool && !this.config.disableTransactions) {
326
+ if (!this.config.disableTransactions) {
327
327
  const blockTxsHandler = reqRespBlockTxsHandler(this.mempools.attestationPool, this.mempools.txPool);
328
328
  requestResponseHandlers[ReqRespSubProtocol.BLOCK_TXS] = blockTxsHandler.bind(this);
329
329
  }
@@ -332,15 +332,17 @@ import { P2PInstrumentation } from './instrumentation.js';
332
332
  }
333
333
  // add GossipSub listener
334
334
  this.node.services.pubsub.addEventListener(GossipSubEvent.MESSAGE, this.gossipSubEventHandler);
335
- // Start running promise for peer discovery
336
- this.discoveryRunningPromise = new RunningPromise(()=>this.peerManager.heartbeat(), this.logger, this.config.peerCheckIntervalMS);
335
+ // Start running promise for peer discovery and metrics collection
336
+ this.discoveryRunningPromise = new RunningPromise(async ()=>{
337
+ await this.peerManager.heartbeat();
338
+ }, this.logger, this.config.peerCheckIntervalMS);
337
339
  this.discoveryRunningPromise.start();
338
340
  // Define the sub protocol validators - This is done within this start() method to gain a callback to the existing validateTx function
339
341
  const reqrespSubProtocolValidators = {
340
342
  ...DEFAULT_SUB_PROTOCOL_VALIDATORS,
341
- // TODO(#11336): A request validator for blocks
342
343
  [ReqRespSubProtocol.TX]: this.validateRequestedTxs.bind(this),
343
- [ReqRespSubProtocol.BLOCK_TXS]: this.validateRequestedBlockTxs.bind(this)
344
+ [ReqRespSubProtocol.BLOCK_TXS]: this.validateRequestedBlockTxs.bind(this),
345
+ [ReqRespSubProtocol.BLOCK]: this.validateRequestedBlock.bind(this)
344
346
  };
345
347
  await this.reqresp.start(requestResponseHandlers, reqrespSubProtocolValidators);
346
348
  this.logger.info(`Started P2P service`, {
@@ -359,8 +361,6 @@ import { P2PInstrumentation } from './instrumentation.js';
359
361
  // Stop peer manager
360
362
  this.logger.debug('Stopping peer manager...');
361
363
  await this.peerManager.stop();
362
- this.logger.debug('Stopping job queue...');
363
- await this.jobQueue.end();
364
364
  this.logger.debug('Stopping running promise...');
365
365
  await this.discoveryRunningPromise?.stop();
366
366
  this.logger.debug('Stopping peer discovery service...');
@@ -426,7 +426,7 @@ import { P2PInstrumentation } from './instrumentation.js';
426
426
  if (!this.node.services.pubsub) {
427
427
  throw new Error('Pubsub service not available.');
428
428
  }
429
- const p2pMessage = P2PMessage.fromGossipable(message);
429
+ const p2pMessage = P2PMessage.fromGossipable(message, this.config.debugP2PInstrumentMessages);
430
430
  const result = await this.node.services.pubsub.publish(topic, p2pMessage.toMessageData());
431
431
  return result.recipients.length;
432
432
  }
@@ -466,24 +466,57 @@ import { P2PInstrumentation } from './instrumentation.js';
466
466
  };
467
467
  }
468
468
  /**
469
+ * Safely deserializes a P2PMessage from raw message data.
470
+ * @param msgId - The message ID.
471
+ * @param source - The peer ID of the message source.
472
+ * @param data - The raw message data.
473
+ * @returns The deserialized P2PMessage or undefined if deserialization fails.
474
+ */ safelyDeserializeP2PMessage(msgId, source, data) {
475
+ try {
476
+ return P2PMessage.fromMessageData(Buffer.from(data), this.config.debugP2PInstrumentMessages);
477
+ } catch (err) {
478
+ this.logger.error(`Error deserializing P2PMessage`, err, {
479
+ msgId,
480
+ source: source.toString()
481
+ });
482
+ this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), TopicValidatorResult.Reject);
483
+ this.peerManager.penalizePeer(source, PeerErrorSeverity.LowToleranceError);
484
+ return undefined;
485
+ }
486
+ }
487
+ /**
469
488
  * Handles a new gossip message that was received by the client.
470
489
  * @param topic - The message's topic.
471
490
  * @param data - The message data
472
491
  */ async handleNewGossipMessage(msg, msgId, source) {
473
- const p2pMessage = P2PMessage.fromMessageData(Buffer.from(msg.data));
492
+ const msgReceivedTime = Date.now();
493
+ let topicType;
494
+ const p2pMessage = this.safelyDeserializeP2PMessage(msgId, source, msg.data);
495
+ if (!p2pMessage) {
496
+ return;
497
+ }
474
498
  const preValidationResult = this.preValidateReceivedMessage(msg, msgId, source);
475
499
  if (!preValidationResult.result) {
476
500
  return;
477
501
  }
478
502
  if (msg.topic === this.topicStrings[TopicType.tx]) {
503
+ topicType = TopicType.tx;
479
504
  await this.handleGossipedTx(p2pMessage.payload, msgId, source);
480
505
  }
481
- if (msg.topic === this.topicStrings[TopicType.block_attestation] && this.clientType === P2PClientType.Full) {
482
- await this.processAttestationFromPeer(p2pMessage.payload, msgId, source);
506
+ if (msg.topic === this.topicStrings[TopicType.block_attestation]) {
507
+ topicType = TopicType.block_attestation;
508
+ if (this.clientType === P2PClientType.Full) {
509
+ await this.processAttestationFromPeer(p2pMessage.payload, msgId, source);
510
+ }
483
511
  }
484
512
  if (msg.topic === this.topicStrings[TopicType.block_proposal]) {
513
+ topicType = TopicType.block_proposal;
485
514
  await this.processBlockFromPeer(p2pMessage.payload, msgId, source);
486
515
  }
516
+ if (p2pMessage.timestamp !== undefined && topicType !== undefined) {
517
+ const latency = msgReceivedTime - p2pMessage.timestamp.getTime();
518
+ this.instrumentation.recordMessageLatency(topicType, latency);
519
+ }
487
520
  return;
488
521
  }
489
522
  async validateReceivedMessage(validationFunc, msgId, source, topicType) {
@@ -494,6 +527,7 @@ import { P2PInstrumentation } from './instrumentation.js';
494
527
  try {
495
528
  resultAndObj = await validationFunc();
496
529
  } catch (err) {
530
+ this.peerManager.penalizePeer(source, PeerErrorSeverity.LowToleranceError);
497
531
  this.logger.error(`Error deserializing and validating gossipsub message`, err, {
498
532
  msgId,
499
533
  source: source.toString(),
@@ -546,6 +580,7 @@ import { P2PInstrumentation } from './instrumentation.js';
546
580
  this.logger.warn(`Intentionally dropping tx ${txHashString} (probability rule)`);
547
581
  return;
548
582
  }
583
+ this.instrumentation.incrementTxReceived(1);
549
584
  await this.mempools.txPool.addTxs([
550
585
  tx
551
586
  ]);
@@ -558,11 +593,20 @@ import { P2PInstrumentation } from './instrumentation.js';
558
593
  */ async processAttestationFromPeer(payloadData, msgId, source) {
559
594
  const validationFunc = async ()=>{
560
595
  const attestation = BlockAttestation.fromBuffer(payloadData);
596
+ const pool = this.mempools.attestationPool;
561
597
  const isValid = await this.validateAttestation(source, attestation);
562
- const exists = isValid && await this.mempools.attestationPool.hasAttestation(attestation);
598
+ const exists = isValid && await pool.hasAttestation(attestation);
599
+ let canAdd = true;
600
+ if (isValid && !exists) {
601
+ const slot = attestation.payload.header.slotNumber;
602
+ const { committee } = await this.epochCache.getCommittee(slot);
603
+ const committeeSize = committee?.length ?? 0;
604
+ canAdd = await pool.canAddAttestation(attestation, committeeSize);
605
+ }
563
606
  this.logger.trace(`Validate propagated block attestation`, {
564
607
  isValid,
565
608
  exists,
609
+ canAdd,
566
610
  [Attributes.SLOT_NUMBER]: attestation.payload.header.slotNumber.toString(),
567
611
  [Attributes.P2P_ID]: source.toString()
568
612
  });
@@ -575,6 +619,16 @@ import { P2PInstrumentation } from './instrumentation.js';
575
619
  result: TopicValidatorResult.Ignore,
576
620
  obj: attestation
577
621
  };
622
+ } else if (!canAdd) {
623
+ this.logger.warn(`Dropping block attestation due to per-(slot, proposalId) attestation cap`, {
624
+ slot: attestation.payload.header.slotNumber.toString(),
625
+ archive: attestation.archive.toString(),
626
+ source: source.toString()
627
+ });
628
+ return {
629
+ result: TopicValidatorResult.Ignore,
630
+ obj: attestation
631
+ };
578
632
  } else {
579
633
  return {
580
634
  result: TopicValidatorResult.Accept,
@@ -586,9 +640,9 @@ import { P2PInstrumentation } from './instrumentation.js';
586
640
  if (result !== TopicValidatorResult.Accept || !attestation) {
587
641
  return;
588
642
  }
589
- this.logger.debug(`Received attestation for slot ${attestation.slotNumber.toNumber()} from external peer ${source.toString()}`, {
590
- p2pMessageIdentifier: await attestation.p2pMessageIdentifier(),
591
- slot: attestation.slotNumber.toNumber(),
643
+ this.logger.debug(`Received attestation for slot ${attestation.slotNumber} from external peer ${source.toString()}`, {
644
+ p2pMessageIdentifier: await attestation.p2pMessageLoggingIdentifier(),
645
+ slot: attestation.slotNumber,
592
646
  archive: attestation.archive.toString(),
593
647
  source: source.toString()
594
648
  });
@@ -600,12 +654,13 @@ import { P2PInstrumentation } from './instrumentation.js';
600
654
  const validationFunc = async ()=>{
601
655
  const block = BlockProposal.fromBuffer(payloadData);
602
656
  const isValid = await this.validateBlockProposal(source, block);
603
- // Note that we dont have an attestation pool if we're a prover node, but we still
604
- // subscribe to block proposal topics in order to prevent their txs from being cleared.
605
- const exists = isValid && await this.mempools.attestationPool?.hasBlockProposal(block);
657
+ const pool = this.mempools.attestationPool;
658
+ const exists = isValid && await pool.hasBlockProposal(block);
659
+ const canAdd = isValid && await pool.canAddProposal(block);
606
660
  this.logger.trace(`Validate propagated block proposal`, {
607
661
  isValid,
608
662
  exists,
663
+ canAdd,
609
664
  [Attributes.SLOT_NUMBER]: block.payload.header.slotNumber.toString(),
610
665
  [Attributes.P2P_ID]: source.toString()
611
666
  });
@@ -618,6 +673,16 @@ import { P2PInstrumentation } from './instrumentation.js';
618
673
  result: TopicValidatorResult.Ignore,
619
674
  obj: block
620
675
  };
676
+ } else if (!canAdd) {
677
+ this.peerManager.penalizePeer(source, PeerErrorSeverity.MidToleranceError);
678
+ this.logger.warn(`Penalizing peer for block proposal exceeding per-slot cap`, {
679
+ slot: block.slotNumber.toString(),
680
+ archive: block.archive.toString(),
681
+ source: source.toString()
682
+ });
683
+ return {
684
+ result: TopicValidatorResult.Reject
685
+ };
621
686
  } else {
622
687
  return {
623
688
  result: TopicValidatorResult.Accept,
@@ -633,29 +698,40 @@ import { P2PInstrumentation } from './instrumentation.js';
633
698
  }
634
699
  // REVIEW: callback pattern https://github.com/AztecProtocol/aztec-packages/issues/7963
635
700
  async processValidBlockProposal(block, sender) {
636
- const slot = block.slotNumber.toBigInt();
637
- const previousSlot = slot - 1n;
701
+ const slot = block.slotNumber;
702
+ const previousSlot = SlotNumber(slot - 1);
638
703
  this.logger.verbose(`Received block proposal for slot ${slot} from external peer ${sender.toString()}.`, {
639
- p2pMessageIdentifier: await block.p2pMessageIdentifier(),
640
- slot: block.slotNumber.toNumber(),
704
+ p2pMessageIdentifier: await block.p2pMessageLoggingIdentifier(),
705
+ slot: block.slotNumber,
641
706
  archive: block.archive.toString(),
642
707
  source: sender.toString()
643
708
  });
644
- const attestationsForPreviousSlot = await this.mempools.attestationPool?.getAttestationsForSlot(previousSlot);
645
- if (attestationsForPreviousSlot !== undefined) {
646
- this.logger.verbose(`Received ${attestationsForPreviousSlot.length} attestations for slot ${previousSlot}`);
709
+ const attestationsForPreviousSlot = await this.mempools.attestationPool.getAttestationsForSlot(previousSlot);
710
+ this.logger.verbose(`Received ${attestationsForPreviousSlot.length} attestations for slot ${previousSlot}`);
711
+ // Attempt to add proposal, then mark the txs in this proposal as non-evictable
712
+ try {
713
+ await this.mempools.attestationPool.addBlockProposal(block);
714
+ } catch (err) {
715
+ // Drop proposals if we hit per-slot cap in the attestation pool; rethrow unknown errors
716
+ if (err instanceof ProposalSlotCapExceededError) {
717
+ this.logger.warn(`Dropping block proposal due to per-slot proposal cap`, {
718
+ slot: String(slot),
719
+ archive: block.archive.toString(),
720
+ error: err.message
721
+ });
722
+ return;
723
+ }
724
+ throw err;
647
725
  }
648
- // Mark the txs in this proposal as non-evictable
649
726
  await this.mempools.txPool.markTxsAsNonEvictable(block.txHashes);
650
- await this.mempools.attestationPool?.addBlockProposal(block);
651
727
  const attestations = await this.blockReceivedCallback(block, sender);
652
728
  // TODO: fix up this pattern - the abstraction is not nice
653
- // The attestation can be undefined if no handler is registered / the validator deems the block invalid
729
+ // The attestation can be undefined if no handler is registered / the validator deems the block invalid / in fisherman mode
654
730
  if (attestations?.length) {
655
731
  for (const attestation of attestations){
656
- this.logger.verbose(`Broadcasting attestation for slot ${attestation.slotNumber.toNumber()}`, {
657
- p2pMessageIdentifier: await attestation.p2pMessageIdentifier(),
658
- slot: attestation.slotNumber.toNumber(),
732
+ this.logger.verbose(`Broadcasting attestation for slot ${attestation.slotNumber}`, {
733
+ p2pMessageIdentifier: await attestation.p2pMessageLoggingIdentifier(),
734
+ slot: attestation.slotNumber,
659
735
  archive: attestation.archive.toString()
660
736
  });
661
737
  await this.broadcastAttestation(attestation);
@@ -672,28 +748,72 @@ import { P2PInstrumentation } from './instrumentation.js';
672
748
  * Propagates provided message to peers.
673
749
  * @param message - The message to propagate.
674
750
  */ async propagate(message) {
675
- const p2pMessageIdentifier = await message.p2pMessageIdentifier();
751
+ const p2pMessageIdentifier = await message.p2pMessageLoggingIdentifier();
676
752
  this.logger.trace(`Message ${p2pMessageIdentifier} queued`, {
677
753
  p2pMessageIdentifier
678
754
  });
679
- void this.jobQueue.put(async ()=>{
680
- await this.sendToPeers(message);
681
- }).catch((error)=>{
755
+ void this.sendToPeers(message).catch((error)=>{
682
756
  this.logger.error(`Error propagating message ${p2pMessageIdentifier}`, {
683
757
  error
684
758
  });
685
759
  });
686
760
  }
687
761
  /**
688
- * Validate the requested block transactions.
762
+ * Validate the requested block transactions. Allow partial returns.
689
763
  * @param request - The block transactions request.
690
764
  * @param response - The block transactions response.
691
765
  * @param peerId - The ID of the peer that made the request.
692
766
  * @returns True if the requested block transactions are valid, false otherwise.
693
- */ async validateRequestedBlockTxs(_request, response, peerId) {
767
+ */ async validateRequestedBlockTxs(request, response, peerId) {
694
768
  const requestedTxValidator = this.createRequestedTxValidator();
695
769
  try {
696
- // TODO(palla/txs): Validate that this tx belongs to the block hash being requested
770
+ if (!response.blockHash.equals(request.blockHash)) {
771
+ this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError);
772
+ throw new ValidationError(`Received block txs for unexpected block: expected ${request.blockHash.toString()}, got ${response.blockHash.toString()}`);
773
+ }
774
+ if (response.txIndices.getLength() !== request.txIndices.getLength()) {
775
+ this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError);
776
+ throw new ValidationError(`Received block txs with mismatched bitvector length: expected ${request.txIndices.getLength()}, got ${response.txIndices.getLength()}`);
777
+ }
778
+ // Check no duplicates and not exceeding returnable count
779
+ const requestedIndices = new Set(request.txIndices.getTrueIndices());
780
+ const availableIndices = new Set(response.txIndices.getTrueIndices());
781
+ const maxReturnable = [
782
+ ...requestedIndices
783
+ ].filter((i)=>availableIndices.has(i)).length;
784
+ const returnedHashes = await Promise.all(response.txs.map((tx)=>tx.getTxHash().toString()));
785
+ const uniqueReturned = new Set(returnedHashes.map((h)=>h.toString()));
786
+ if (uniqueReturned.size !== returnedHashes.length) {
787
+ this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError);
788
+ throw new ValidationError(`Received duplicate txs in block txs response`);
789
+ }
790
+ if (response.txs.length > maxReturnable) {
791
+ this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError);
792
+ throw new ValidationError(`Received more txs (${response.txs.length}) than requested-and-available (${maxReturnable})`);
793
+ }
794
+ // Given proposal (should have locally), ensure returned txs are valid subset and match request indices
795
+ const proposal = await this.mempools.attestationPool.getBlockProposal(request.blockHash.toString());
796
+ if (proposal) {
797
+ // Build intersected indices
798
+ const intersectIdx = request.txIndices.getTrueIndices().filter((i)=>response.txIndices.isSet(i));
799
+ // Enforce subset membership and preserve increasing order by index.
800
+ const hashToIndexInProposal = new Map(proposal.txHashes.map((h, i)=>[
801
+ h.toString(),
802
+ i
803
+ ]));
804
+ const allowedIndexSet = new Set(intersectIdx);
805
+ const indices = returnedHashes.map((h)=>hashToIndexInProposal.get(h));
806
+ const allAllowed = indices.every((idx)=>idx !== undefined && allowedIndexSet.has(idx));
807
+ const strictlyIncreasing = indices.every((idx, i)=>i === 0 ? idx !== undefined : idx > indices[i - 1]);
808
+ if (!allAllowed || !strictlyIncreasing) {
809
+ this.peerManager.penalizePeer(peerId, PeerErrorSeverity.LowToleranceError);
810
+ throw new ValidationError('Returned txs do not match expected subset/order for requested indices');
811
+ }
812
+ } else {
813
+ // No local proposal, cannot check the membership/order of the returned txs
814
+ this.logger.warn(`Block proposal not found for block hash ${request.blockHash.toString()}; cannot validate membership/order of returned txs`);
815
+ return false;
816
+ }
697
817
  await Promise.all(response.txs.map((tx)=>this.validateRequestedTx(tx, peerId, requestedTxValidator)));
698
818
  return true;
699
819
  } catch (e) {
@@ -715,7 +835,7 @@ import { P2PInstrumentation } from './instrumentation.js';
715
835
  * ReqRespSubProtocol.TX subprotocol validation.
716
836
  *
717
837
  * @param requestedTxHash - The collection of the txs that was requested.
718
- * @param responseTx - The collectin of txs that was received as a response to the request.
838
+ * @param responseTx - The collection of txs that was received as a response to the request.
719
839
  * @param peerId - The peer ID of the peer that sent the tx.
720
840
  * @returns True if the whole collection of txs is valid, false otherwise.
721
841
  */ async validateRequestedTxs(requestedTxHash, responseTx, peerId) {
@@ -735,6 +855,45 @@ import { P2PInstrumentation } from './instrumentation.js';
735
855
  return false;
736
856
  }
737
857
  }
858
+ /**
859
+ * Validates a BLOCK response.
860
+ *
861
+ * If a local copy exists, enforces hash equality. If missing, rejects (no penalty) since the hash cannot be verified.
862
+ * Penalizes on block number mismatch or hash mismatch.
863
+ *
864
+ * @param requestedBlockNumber - The requested block number.
865
+ * @param responseBlock - The block returned by the peer.
866
+ * @param peerId - The peer that returned the block.
867
+ * @returns True if the response is valid, false otherwise.
868
+ */ async validateRequestedBlock(requestedBlockNumber, responseBlock, peerId) {
869
+ try {
870
+ const reqNum = Number(requestedBlockNumber.toString());
871
+ if (responseBlock.number !== reqNum) {
872
+ this.peerManager.penalizePeer(peerId, PeerErrorSeverity.LowToleranceError);
873
+ return false;
874
+ }
875
+ const local = await this.archiver.getBlock(BlockNumber(reqNum));
876
+ if (!local) {
877
+ // We are missing the local block; we cannot verify the hash yet. Reject without penalizing.
878
+ // TODO: Consider extending this validator to accept an expected hash or
879
+ // performing quorum-based checks when using P2P syncing prior to L1 sync.
880
+ this.logger.warn(`Local block ${reqNum} not found; rejecting BLOCK response without hash verification`);
881
+ return false;
882
+ }
883
+ const [localHash, respHash] = await Promise.all([
884
+ local.hash(),
885
+ responseBlock.hash()
886
+ ]);
887
+ if (!localHash.equals(respHash)) {
888
+ this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError);
889
+ return false;
890
+ }
891
+ return true;
892
+ } catch (e) {
893
+ this.logger.warn(`Error validating requested block`, e);
894
+ return false;
895
+ }
896
+ }
738
897
  createRequestedTxValidator() {
739
898
  return new AggregateTxValidator(new DataTxValidator(), new MetadataTxValidator({
740
899
  l1ChainId: new Fr(this.config.l1ChainId),
@@ -744,17 +903,18 @@ import { P2PInstrumentation } from './instrumentation.js';
744
903
  }), new TxProofValidator(this.proofVerifier));
745
904
  }
746
905
  async validateRequestedTx(tx, peerId, txValidator, requested) {
906
+ const penalize = (severity)=>this.peerManager.penalizePeer(peerId, severity);
747
907
  if (!await tx.validateTxHash()) {
748
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError);
908
+ penalize(PeerErrorSeverity.MidToleranceError);
749
909
  throw new ValidationError(`Received tx with invalid hash ${tx.getTxHash().toString()}.`);
750
910
  }
751
911
  if (requested && !requested.has(tx.getTxHash().toString())) {
752
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError);
912
+ penalize(PeerErrorSeverity.MidToleranceError);
753
913
  throw new ValidationError(`Received tx with hash ${tx.getTxHash().toString()} that was not requested.`);
754
914
  }
755
915
  const { result } = await txValidator.validateTx(tx);
756
916
  if (result === 'invalid') {
757
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.LowToleranceError);
917
+ penalize(PeerErrorSeverity.LowToleranceError);
758
918
  throw new ValidationError(`Received tx with hash ${tx.getTxHash().toString()} that is invalid.`);
759
919
  }
760
920
  }
@@ -772,7 +932,7 @@ import { P2PInstrumentation } from './instrumentation.js';
772
932
  let { severity } = outcome.failure;
773
933
  // Double spend validator has a special case handler
774
934
  if (name === 'doubleSpendValidator') {
775
- const txBlockNumber = currentBlockNumber + 1; // tx is expected to be in the next block
935
+ const txBlockNumber = BlockNumber(currentBlockNumber + 1); // tx is expected to be in the next block
776
936
  severity = await this.handleDoubleSpendFailure(tx, txBlockNumber);
777
937
  }
778
938
  this.peerManager.penalizePeer(peerId, severity);
@@ -822,7 +982,7 @@ import { P2PInstrumentation } from './instrumentation.js';
822
982
  */ async createMessageValidators(currentBlockNumber, nextSlotTimestamp) {
823
983
  const gasFees = await this.getGasFees(currentBlockNumber);
824
984
  const allowedInSetup = this.config.txPublicSetupAllowList ?? await getDefaultAllowedSetupFunctions();
825
- const blockNumberInWhichTheTxIsConsideredToBeIncluded = currentBlockNumber + 1;
985
+ const blockNumberInWhichTheTxIsConsideredToBeIncluded = BlockNumber(currentBlockNumber + 1);
826
986
  return createTxMessageValidators(nextSlotTimestamp, blockNumberInWhichTheTxIsConsideredToBeIncluded, this.worldStateSynchronizer, gasFees, this.config.l1ChainId, this.config.rollupVersion, protocolContractsHash, this.archiver, this.proofVerifier, !this.config.disableTransactions, allowedInSetup);
827
987
  }
828
988
  /**
@@ -878,7 +1038,7 @@ import { P2PInstrumentation } from './instrumentation.js';
878
1038
  }
879
1039
  const snapshotValidator = new DoubleSpendTxValidator({
880
1040
  nullifiersExist: async (nullifiers)=>{
881
- const merkleTree = this.worldStateSynchronizer.getSnapshot(blockNumber - this.config.doubleSpendSeverePeerPenaltyWindow);
1041
+ const merkleTree = this.worldStateSynchronizer.getSnapshot(BlockNumber(blockNumber - this.config.doubleSpendSeverePeerPenaltyWindow));
882
1042
  const indices = await merkleTree.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, nullifiers);
883
1043
  return indices.map((index)=>index !== undefined);
884
1044
  }
@@ -924,7 +1084,7 @@ import { P2PInstrumentation } from './instrumentation.js';
924
1084
  }
925
1085
  async sendToPeers(message) {
926
1086
  const parent = message.constructor;
927
- const identifier = await message.p2pMessageIdentifier().then((i)=>i.toString());
1087
+ const identifier = await message.p2pMessageLoggingIdentifier().then((i)=>i.toString());
928
1088
  this.logger.trace(`Sending message ${identifier}`, {
929
1089
  p2pMessageIdentifier: identifier
930
1090
  });
@@ -953,16 +1113,16 @@ import { P2PInstrumentation } from './instrumentation.js';
953
1113
  }
954
1114
  _ts_decorate([
955
1115
  trackSpan('Libp2pService.processValidBlockProposal', async (block)=>({
956
- [Attributes.SLOT_NUMBER]: block.slotNumber.toNumber(),
1116
+ [Attributes.SLOT_NUMBER]: block.slotNumber,
957
1117
  [Attributes.BLOCK_ARCHIVE]: block.archive.toString(),
958
- [Attributes.P2P_ID]: await block.p2pMessageIdentifier().then((i)=>i.toString())
1118
+ [Attributes.P2P_ID]: await block.p2pMessageLoggingIdentifier().then((i)=>i.toString())
959
1119
  }))
960
1120
  ], LibP2PService.prototype, "processValidBlockProposal", null);
961
1121
  _ts_decorate([
962
1122
  trackSpan('Libp2pService.broadcastAttestation', async (attestation)=>({
963
- [Attributes.SLOT_NUMBER]: attestation.payload.header.slotNumber.toNumber(),
1123
+ [Attributes.SLOT_NUMBER]: attestation.payload.header.slotNumber,
964
1124
  [Attributes.BLOCK_ARCHIVE]: attestation.archive.toString(),
965
- [Attributes.P2P_ID]: await attestation.p2pMessageIdentifier().then((i)=>i.toString())
1125
+ [Attributes.P2P_ID]: await attestation.p2pMessageLoggingIdentifier().then((i)=>i.toString())
966
1126
  }))
967
1127
  ], LibP2PService.prototype, "broadcastAttestation", null);
968
1128
  _ts_decorate([
@@ -975,6 +1135,11 @@ _ts_decorate([
975
1135
  [Attributes.TX_HASH]: requestedTxHash.toString()
976
1136
  }))
977
1137
  ], LibP2PService.prototype, "validateRequestedTxs", null);
1138
+ _ts_decorate([
1139
+ trackSpan('Libp2pService.validateRequestedBlock', (requestedBlockNumber, _responseBlock)=>({
1140
+ [Attributes.BLOCK_NUMBER]: requestedBlockNumber.toString()
1141
+ }))
1142
+ ], LibP2PService.prototype, "validateRequestedBlock", null);
978
1143
  _ts_decorate([
979
1144
  trackSpan('Libp2pService.validatePropagatedTx', (tx)=>({
980
1145
  [Attributes.TX_HASH]: tx.getTxHash().toString()
@@ -982,9 +1147,9 @@ _ts_decorate([
982
1147
  ], LibP2PService.prototype, "validatePropagatedTx", null);
983
1148
  _ts_decorate([
984
1149
  trackSpan('Libp2pService.validateAttestation', async (_, attestation)=>({
985
- [Attributes.SLOT_NUMBER]: attestation.payload.header.slotNumber.toNumber(),
1150
+ [Attributes.SLOT_NUMBER]: attestation.payload.header.slotNumber,
986
1151
  [Attributes.BLOCK_ARCHIVE]: attestation.archive.toString(),
987
- [Attributes.P2P_ID]: await attestation.p2pMessageIdentifier().then((i)=>i.toString())
1152
+ [Attributes.P2P_ID]: await attestation.p2pMessageLoggingIdentifier().then((i)=>i.toString())
988
1153
  }))
989
1154
  ], LibP2PService.prototype, "validateAttestation", null);
990
1155
  _ts_decorate([
@@ -20,4 +20,4 @@ export interface PeerManagerInterface {
20
20
  /** If node running this P2P stack is validator, passes in validator address to P2P layer */
21
21
  registerThisValidatorAddresses(address: EthAddress[]): void;
22
22
  }
23
- //# sourceMappingURL=interface.d.ts.map
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcGVlci1tYW5hZ2VyL2ludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNoRSxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTNELE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWhELE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVyRSxNQUFNLFdBQVcsb0JBQW9CO0lBQ25DLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxPQUFPLEdBQUcsUUFBUSxFQUFFLENBQUM7SUFFaEQsZUFBZSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxTQUFTLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQztJQUNyQyxjQUFjLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDckMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDdkMsZUFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDN0QsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixHQUFHLElBQUksQ0FBQztJQUMvRCx5QkFBeUIsQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRTVGLFlBQVksQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FBQztJQUNyQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQztJQUVoRCxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRXRCLDRGQUE0RjtJQUM1Riw4QkFBOEIsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsSUFBSSxDQUFDO0NBQzdEIn0=
@@ -1,14 +1,21 @@
1
1
  import { type TelemetryClient, type Tracer } from '@aztec/telemetry-client';
2
+ import type { PeerId } from '@libp2p/interface';
2
3
  import { type GoodByeReason } from '../reqresp/protocols/index.js';
3
4
  export declare class PeerManagerMetrics {
4
5
  readonly telemetryClient: TelemetryClient;
5
6
  private sentGoodbyes;
6
7
  private receivedGoodbyes;
7
8
  private peerCount;
9
+ private lowScoreDisconnects;
10
+ private peerConnectionDuration;
11
+ private peerConnectedAt;
8
12
  readonly tracer: Tracer;
9
13
  constructor(telemetryClient?: TelemetryClient, name?: string);
10
14
  recordGoodbyeSent(reason: GoodByeReason): void;
11
15
  recordGoodbyeReceived(reason: GoodByeReason): void;
12
16
  recordPeerCount(count: number): void;
17
+ recordLowScoreDisconnect(scoreState: 'Banned' | 'Disconnect'): void;
18
+ peerConnected(id: PeerId): void;
19
+ peerDisconnected(id: PeerId): void;
13
20
  }
14
- //# sourceMappingURL=metrics.d.ts.map
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3BlZXItbWFuYWdlci9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLTCxLQUFLLGVBQWUsRUFDcEIsS0FBSyxNQUFNLEVBSVosTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsS0FBSyxhQUFhLEVBQXVCLE1BQU0sK0JBQStCLENBQUM7QUFFeEYscUJBQWEsa0JBQWtCO2FBWVgsZUFBZSxFQUFFLGVBQWU7SUFYbEQsT0FBTyxDQUFDLFlBQVksQ0FBZ0I7SUFDcEMsT0FBTyxDQUFDLGdCQUFnQixDQUFnQjtJQUN4QyxPQUFPLENBQUMsU0FBUyxDQUFRO0lBQ3pCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBZ0I7SUFDM0MsT0FBTyxDQUFDLHNCQUFzQixDQUFZO0lBRTFDLE9BQU8sQ0FBQyxlQUFlLENBQWtEO0lBRXpFLFNBQWdCLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFFL0IsWUFDa0IsZUFBZSxHQUFFLGVBQXNDLEVBQ3ZFLElBQUksU0FBZ0IsRUE4QnJCO0lBRU0saUJBQWlCLENBQUMsTUFBTSxFQUFFLGFBQWEsUUFFN0M7SUFFTSxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsYUFBYSxRQUVqRDtJQUVNLGVBQWUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxRQUVuQztJQUVNLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxRQUFRLEdBQUcsWUFBWSxRQUVsRTtJQUVNLGFBQWEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxRQUU5QjtJQUVNLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxNQUFNLFFBS2pDO0NBQ0YifQ==