@aztec/p2p 0.0.1-commit.993d52e → 0.0.1-commit.9badcec54

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 (331) hide show
  1. package/README.md +129 -3
  2. package/dest/client/factory.d.ts +2 -2
  3. package/dest/client/factory.d.ts.map +1 -1
  4. package/dest/client/factory.js +24 -10
  5. package/dest/client/interface.d.ts +9 -2
  6. package/dest/client/interface.d.ts.map +1 -1
  7. package/dest/client/p2p_client.d.ts +3 -2
  8. package/dest/client/p2p_client.d.ts.map +1 -1
  9. package/dest/client/p2p_client.js +46 -38
  10. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +17 -6
  11. package/dest/config.d.ts +124 -106
  12. package/dest/config.d.ts.map +1 -1
  13. package/dest/config.js +87 -38
  14. package/dest/errors/p2p-service.error.d.ts +9 -0
  15. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  16. package/dest/errors/p2p-service.error.js +10 -0
  17. package/dest/index.d.ts +1 -2
  18. package/dest/index.d.ts.map +1 -1
  19. package/dest/index.js +0 -1
  20. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +7 -5
  21. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  22. package/dest/mem_pools/attestation_pool/attestation_pool.js +16 -9
  23. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +6 -6
  24. package/dest/mem_pools/index.d.ts +1 -2
  25. package/dest/mem_pools/index.d.ts.map +1 -1
  26. package/dest/mem_pools/instrumentation.d.ts +4 -2
  27. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  28. package/dest/mem_pools/instrumentation.js +16 -14
  29. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  30. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  31. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +2 -1
  32. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  33. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +9 -5
  34. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  35. package/dest/mem_pools/tx_pool_v2/interfaces.js +1 -0
  36. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +13 -7
  37. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  38. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +13 -3
  39. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
  40. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +26 -43
  42. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
  43. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +6 -0
  45. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +2 -1
  46. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  47. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +29 -5
  48. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +5 -2
  49. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  50. package/dest/msg_validators/attestation_validator/attestation_validator.js +20 -11
  51. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +4 -2
  52. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  53. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +2 -2
  54. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  55. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  56. package/dest/msg_validators/clock_tolerance.js +54 -3
  57. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -4
  58. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  59. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  60. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -4
  61. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  62. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  63. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +14 -9
  64. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  65. package/dest/msg_validators/proposal_validator/proposal_validator.js +65 -55
  66. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  67. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  68. package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
  69. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  70. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  71. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  72. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  73. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  74. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  75. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  76. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  77. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  78. package/dest/msg_validators/tx_validator/data_validator.js +35 -2
  79. package/dest/msg_validators/tx_validator/factory.d.ts +23 -4
  80. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  81. package/dest/msg_validators/tx_validator/factory.js +36 -10
  82. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  83. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  84. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  85. package/dest/msg_validators/tx_validator/gas_validator.d.ts +13 -4
  86. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  87. package/dest/msg_validators/tx_validator/gas_validator.js +49 -17
  88. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  89. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  90. package/dest/msg_validators/tx_validator/index.js +1 -0
  91. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  92. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  93. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  94. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  95. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  96. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  97. package/dest/services/data_store.d.ts +1 -1
  98. package/dest/services/data_store.d.ts.map +1 -1
  99. package/dest/services/data_store.js +5 -5
  100. package/dest/services/dummy_service.d.ts +6 -3
  101. package/dest/services/dummy_service.d.ts.map +1 -1
  102. package/dest/services/dummy_service.js +6 -1
  103. package/dest/services/encoding.d.ts +5 -1
  104. package/dest/services/encoding.d.ts.map +1 -1
  105. package/dest/services/encoding.js +7 -1
  106. package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
  107. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  108. package/dest/services/gossipsub/topic_score_params.js +21 -4
  109. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  110. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  111. package/dest/services/libp2p/instrumentation.js +14 -0
  112. package/dest/services/libp2p/libp2p_service.d.ts +15 -25
  113. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  114. package/dest/services/libp2p/libp2p_service.js +176 -127
  115. package/dest/services/peer-manager/metrics.d.ts +3 -1
  116. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  117. package/dest/services/peer-manager/metrics.js +6 -0
  118. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  119. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  120. package/dest/services/peer-manager/peer_manager.js +39 -11
  121. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  122. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  123. package/dest/services/peer-manager/peer_scoring.js +32 -10
  124. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -8
  125. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  126. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +82 -101
  127. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +3 -2
  128. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  129. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  130. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  131. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  132. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
  133. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  134. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
  135. package/dest/services/reqresp/config.d.ts +3 -3
  136. package/dest/services/reqresp/config.d.ts.map +1 -1
  137. package/dest/services/reqresp/interface.d.ts +14 -9
  138. package/dest/services/reqresp/interface.d.ts.map +1 -1
  139. package/dest/services/reqresp/interface.js +10 -11
  140. package/dest/services/reqresp/metrics.d.ts +1 -1
  141. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  142. package/dest/services/reqresp/metrics.js +0 -1
  143. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  144. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  145. package/dest/services/reqresp/protocols/index.js +0 -1
  146. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  147. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  148. package/dest/services/reqresp/protocols/tx.js +1 -3
  149. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  150. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  151. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  152. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  153. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  154. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  155. package/dest/services/reqresp/reqresp.d.ts +4 -2
  156. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  157. package/dest/services/reqresp/reqresp.js +30 -12
  158. package/dest/services/service.d.ts +5 -2
  159. package/dest/services/service.d.ts.map +1 -1
  160. package/dest/services/tx_collection/fast_tx_collection.d.ts +1 -4
  161. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  162. package/dest/services/tx_collection/fast_tx_collection.js +57 -73
  163. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  164. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  165. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  166. package/dest/services/tx_collection/proposal_tx_collector.d.ts +6 -7
  167. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
  168. package/dest/services/tx_collection/proposal_tx_collector.js +4 -4
  169. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  170. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  171. package/dest/services/tx_collection/request_tracker.js +84 -0
  172. package/dest/services/tx_collection/slow_tx_collection.js +1 -1
  173. package/dest/services/tx_collection/tx_collection.d.ts +3 -6
  174. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  175. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  176. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  177. package/dest/services/tx_collection/tx_source.js +9 -7
  178. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  179. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  180. package/dest/test-helpers/mock-pubsub.d.ts +11 -3
  181. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  182. package/dest/test-helpers/mock-pubsub.js +35 -10
  183. package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
  184. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  185. package/dest/test-helpers/reqresp-nodes.js +1 -2
  186. package/dest/test-helpers/testbench-utils.d.ts +1 -1
  187. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  188. package/dest/test-helpers/testbench-utils.js +23 -3
  189. package/dest/testbench/p2p_client_testbench_worker.js +68 -16
  190. package/dest/testbench/worker_client_manager.d.ts +10 -1
  191. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  192. package/dest/testbench/worker_client_manager.js +55 -3
  193. package/dest/util.d.ts +1 -1
  194. package/package.json +14 -14
  195. package/src/client/factory.ts +43 -14
  196. package/src/client/interface.ts +9 -1
  197. package/src/client/p2p_client.ts +50 -39
  198. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +19 -9
  199. package/src/config.ts +129 -45
  200. package/src/errors/p2p-service.error.ts +11 -0
  201. package/src/index.ts +0 -1
  202. package/src/mem_pools/attestation_pool/attestation_pool.ts +17 -12
  203. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +6 -6
  204. package/src/mem_pools/index.ts +0 -3
  205. package/src/mem_pools/instrumentation.ts +17 -13
  206. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  207. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  208. package/src/mem_pools/tx_pool_v2/interfaces.ts +9 -4
  209. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +23 -7
  210. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +29 -43
  211. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +16 -1
  212. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +31 -5
  213. package/src/msg_validators/attestation_validator/README.md +49 -0
  214. package/src/msg_validators/attestation_validator/attestation_validator.ts +21 -9
  215. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +4 -1
  216. package/src/msg_validators/clock_tolerance.ts +72 -3
  217. package/src/msg_validators/proposal_validator/README.md +123 -0
  218. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +17 -4
  219. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +23 -7
  220. package/src/msg_validators/proposal_validator/proposal_validator.ts +74 -58
  221. package/src/msg_validators/tx_validator/README.md +5 -1
  222. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  223. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  224. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  225. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  226. package/src/msg_validators/tx_validator/data_validator.ts +42 -1
  227. package/src/msg_validators/tx_validator/factory.ts +43 -3
  228. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  229. package/src/msg_validators/tx_validator/gas_validator.ts +65 -16
  230. package/src/msg_validators/tx_validator/index.ts +1 -0
  231. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  232. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  233. package/src/services/data_store.ts +5 -13
  234. package/src/services/dummy_service.ts +8 -2
  235. package/src/services/encoding.ts +9 -1
  236. package/src/services/gossipsub/topic_score_params.ts +36 -4
  237. package/src/services/libp2p/instrumentation.ts +14 -0
  238. package/src/services/libp2p/libp2p_service.ts +175 -143
  239. package/src/services/peer-manager/metrics.ts +7 -0
  240. package/src/services/peer-manager/peer_manager.ts +45 -11
  241. package/src/services/peer-manager/peer_scoring.ts +27 -5
  242. package/src/services/reqresp/README.md +229 -0
  243. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  244. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +78 -111
  245. package/src/services/reqresp/batch-tx-requester/interface.ts +2 -1
  246. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  247. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  248. package/src/services/reqresp/config.ts +2 -2
  249. package/src/services/reqresp/interface.ts +21 -11
  250. package/src/services/reqresp/metrics.ts +0 -1
  251. package/src/services/reqresp/protocols/index.ts +0 -1
  252. package/src/services/reqresp/protocols/tx.ts +1 -3
  253. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  254. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  255. package/src/services/reqresp/reqresp.ts +40 -13
  256. package/src/services/service.ts +6 -1
  257. package/src/services/tx_collection/fast_tx_collection.ts +57 -83
  258. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  259. package/src/services/tx_collection/proposal_tx_collector.ts +8 -13
  260. package/src/services/tx_collection/request_tracker.ts +127 -0
  261. package/src/services/tx_collection/slow_tx_collection.ts +1 -1
  262. package/src/services/tx_collection/tx_collection.ts +3 -5
  263. package/src/services/tx_collection/tx_source.ts +8 -7
  264. package/src/test-helpers/make-test-p2p-clients.ts +1 -1
  265. package/src/test-helpers/mock-pubsub.ts +31 -5
  266. package/src/test-helpers/reqresp-nodes.ts +3 -3
  267. package/src/test-helpers/testbench-utils.ts +30 -3
  268. package/src/testbench/p2p_client_testbench_worker.ts +72 -15
  269. package/src/testbench/worker_client_manager.ts +68 -6
  270. package/src/util.ts +1 -1
  271. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  272. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  273. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  274. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  275. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  276. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  277. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  278. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  279. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  280. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  281. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  282. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  283. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  284. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  285. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  286. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  287. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  288. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  289. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  290. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  291. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  292. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  293. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  294. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  295. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  296. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  297. package/dest/mem_pools/tx_pool/index.js +0 -2
  298. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  299. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  300. package/dest/mem_pools/tx_pool/priority.js +0 -15
  301. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  302. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  303. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  304. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  305. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  306. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  307. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -24
  308. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  309. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -378
  310. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  311. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  312. package/dest/services/reqresp/protocols/block.js +0 -32
  313. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  314. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  315. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  316. package/src/mem_pools/tx_pool/README.md +0 -270
  317. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  318. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  319. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  320. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  321. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  322. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  323. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  324. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  325. package/src/mem_pools/tx_pool/index.ts +0 -2
  326. package/src/mem_pools/tx_pool/priority.ts +0 -20
  327. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  328. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  329. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -373
  330. package/src/services/reqresp/protocols/block.ts +0 -37
  331. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
@@ -370,14 +370,15 @@ function applyDecs2203RFactory() {
370
370
  function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {
371
371
  return (_apply_decs_2203_r = applyDecs2203RFactory())(targetClass, memberDecs, classDecs, parentClass);
372
372
  }
373
- var _dec, _dec1, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _initProto;
373
+ var _dec, _dec1, _dec2, _dec3, _dec4, _dec5, _dec6, _initProto;
374
374
  import { BlockNumber } from '@aztec/foundation/branded-types';
375
+ import { maxBy } from '@aztec/foundation/collection';
375
376
  import { createLibp2pComponentLogger, createLogger } from '@aztec/foundation/log';
376
377
  import { RunningPromise } from '@aztec/foundation/running-promise';
377
378
  import { Timer } from '@aztec/foundation/timer';
378
379
  import { protocolContractsHash } from '@aztec/protocol-contracts';
379
380
  import { GasFees } from '@aztec/stdlib/gas';
380
- import { BlockProposal, CheckpointAttestation, CheckpointProposal, P2PMessage, PeerErrorSeverity, TopicType, createTopicString, getTopicsForConfig, metricsTopicStrToLabels } from '@aztec/stdlib/p2p';
381
+ import { BlockProposal, CheckpointAttestation, CheckpointProposal, P2PMessage, PeerErrorSeverity, PeerErrorSeverityByHarshness, TopicType, createTopicString, getTopicsForConfig, metricsTopicStrToLabels } from '@aztec/stdlib/p2p';
381
382
  import { MerkleTreeId } from '@aztec/stdlib/trees';
382
383
  import { Tx } from '@aztec/stdlib/tx';
383
384
  import { compressComponentVersions } from '@aztec/stdlib/versioning';
@@ -394,6 +395,7 @@ import { mplex } from '@libp2p/mplex';
394
395
  import { tcp } from '@libp2p/tcp';
395
396
  import { ENR } from '@nethermindeth/enr';
396
397
  import { createLibp2p } from 'libp2p';
398
+ import { CheckpointProposalReceivedCallbackNotRegisteredError } from '../../errors/p2p-service.error.js';
397
399
  import { BlockProposalValidator, CheckpointAttestationValidator, CheckpointProposalValidator, DoubleSpendTxValidator, FishermanAttestationValidator, getDefaultAllowedSetupFunctions } from '../../msg_validators/index.js';
398
400
  import { MessageSeenValidator } from '../../msg_validators/msg_seen_validator/msg_seen_validator.js';
399
401
  import { createFirstStageTxValidationsForGossipedTransactions, createSecondStageTxValidationsForGossipedTransactions, createTxValidatorForBlockProposalReceivedTxs, createTxValidatorForReqResponseReceivedTxs } from '../../msg_validators/tx_validator/factory.js';
@@ -407,7 +409,7 @@ import { APP_SPECIFIC_WEIGHT, gossipScoreThresholds } from '../gossipsub/scoring
407
409
  import { createAllTopicScoreParams } from '../gossipsub/topic_score_params.js';
408
410
  import { PeerManager } from '../peer-manager/peer_manager.js';
409
411
  import { PeerScoring } from '../peer-manager/peer_scoring.js';
410
- import { DEFAULT_SUB_PROTOCOL_VALIDATORS, ReqRespSubProtocol, ValidationError, pingHandler, reqGoodbyeHandler, reqRespBlockHandler, reqRespBlockTxsHandler, reqRespStatusHandler, reqRespTxHandler } from '../reqresp/index.js';
412
+ import { DEFAULT_SUB_PROTOCOL_VALIDATORS, ReqRespSubProtocol, ValidationError, pingHandler, reqGoodbyeHandler, reqRespBlockTxsHandler, reqRespStatusHandler, reqRespTxHandler } from '../reqresp/index.js';
411
413
  import { ReqResp } from '../reqresp/reqresp.js';
412
414
  import { P2PInstrumentation } from './instrumentation.js';
413
415
  _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId, attestation)=>({
@@ -429,12 +431,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
429
431
  [Attributes.BLOCK_ARCHIVE]: request.archiveRoot.toString()
430
432
  })), _dec6 = trackSpan('Libp2pService.validateRequestedTx', (requestedTxHash, _responseTx)=>({
431
433
  [Attributes.TX_HASH]: requestedTxHash.toString()
432
- })), _dec7 = trackSpan('Libp2pService.validateRequestedBlock', (requestedBlockNumber, _responseBlock)=>({
433
- [Attributes.BLOCK_NUMBER]: requestedBlockNumber.toString()
434
- })), _dec8 = trackSpan('Libp2pService.validateCheckpointAttestation', async (_, attestation)=>({
435
- [Attributes.SLOT_NUMBER]: attestation.payload.header.slotNumber,
436
- [Attributes.BLOCK_ARCHIVE]: attestation.archive.toString(),
437
- [Attributes.P2P_ID]: await attestation.p2pMessageLoggingIdentifier().then((i)=>i.toString())
438
434
  }));
439
435
  /**
440
436
  * Lib P2P implementation of the P2PService interface.
@@ -485,16 +481,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
485
481
  _dec6,
486
482
  2,
487
483
  "validateRequestedTxs"
488
- ],
489
- [
490
- _dec7,
491
- 2,
492
- "validateRequestedBlock"
493
- ],
494
- [
495
- _dec8,
496
- 2,
497
- "validateCheckpointAttestation"
498
484
  ]
499
485
  ], []));
500
486
  }
@@ -518,7 +504,12 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
518
504
  * Callback for when a checkpoint proposal is received from a peer.
519
505
  * @param checkpoint - The checkpoint proposal received from the peer.
520
506
  * @returns The attestations for the checkpoint, if any.
521
- */ checkpointReceivedCallback;
507
+ */ allNodesCheckpointReceivedCallback;
508
+ /**
509
+ * Callback for when a checkpoint proposal is received - specifically for validators - from a peer.
510
+ * @param checkpoint - The checkpoint proposal received from the peer.
511
+ * @returns The attestations for the checkpoint, if any.
512
+ */ validatorCheckpointReceivedCallback;
522
513
  gossipSubEventHandler;
523
514
  instrumentation;
524
515
  telemetry;
@@ -540,24 +531,30 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
540
531
  this.topicStrings[TopicType.block_proposal] = createTopicString(TopicType.block_proposal, this.protocolVersion);
541
532
  this.topicStrings[TopicType.checkpoint_proposal] = createTopicString(TopicType.checkpoint_proposal, this.protocolVersion);
542
533
  this.topicStrings[TopicType.checkpoint_attestation] = createTopicString(TopicType.checkpoint_attestation, this.protocolVersion);
543
- this.blockProposalValidator = new BlockProposalValidator(epochCache, {
544
- txsPermitted: !config.disableTransactions,
545
- maxTxsPerBlock: config.maxTxsPerBlock
546
- });
547
- this.checkpointProposalValidator = new CheckpointProposalValidator(epochCache, {
534
+ const p2pPropagationTime = config.attestationPropagationTime;
535
+ const proposalValidatorOpts = {
548
536
  txsPermitted: !config.disableTransactions,
549
- maxTxsPerBlock: config.maxTxsPerBlock
537
+ maxTxsPerBlock: config.validateMaxTxsPerBlock ?? config.validateMaxTxsPerCheckpoint,
538
+ p2pPropagationTime
539
+ };
540
+ this.blockProposalValidator = new BlockProposalValidator(epochCache, proposalValidatorOpts);
541
+ this.checkpointProposalValidator = new CheckpointProposalValidator(epochCache, proposalValidatorOpts);
542
+ this.checkpointAttestationValidator = config.fishermanMode ? new FishermanAttestationValidator(epochCache, mempools.attestationPool, telemetry, {
543
+ l1PublishingTime: config.l1PublishingTime
544
+ }) : new CheckpointAttestationValidator(epochCache, {
545
+ l1PublishingTime: config.l1PublishingTime
550
546
  });
551
- this.checkpointAttestationValidator = config.fishermanMode ? new FishermanAttestationValidator(epochCache, mempools.attestationPool, telemetry) : new CheckpointAttestationValidator(epochCache);
552
547
  this.gossipSubEventHandler = this.handleGossipSubEvent.bind(this);
553
548
  this.blockReceivedCallback = async (block)=>{
554
- this.logger.debug(`Handler not yet registered: Block received callback not set. Received block for slot ${block.slotNumber} from peer.`, {
549
+ this.logger.warn(`Handler for block received not yet registered on P2P service. Received block ${block.blockNumber} for slot ${block.slotNumber} from peer.`, {
555
550
  p2pMessageIdentifier: await block.p2pMessageLoggingIdentifier()
556
551
  });
557
- return false;
552
+ return true;
558
553
  };
559
- this.checkpointReceivedCallback = (checkpoint)=>{
560
- this.logger.debug(`Handler not yet registered: Checkpoint received callback not set. Received checkpoint for slot ${checkpoint.slotNumber} from peer.`);
554
+ this.allNodesCheckpointReceivedCallback = (_checkpoint)=>{
555
+ throw new CheckpointProposalReceivedCallbackNotRegisteredError();
556
+ };
557
+ this.validatorCheckpointReceivedCallback = (_checkpoint)=>{
561
558
  return Promise.resolve(undefined);
562
559
  };
563
560
  }
@@ -610,9 +607,12 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
610
607
  const l1Constants = epochCache.getL1Constants();
611
608
  const topicScoreParams = createAllTopicScoreParams(protocolVersion, {
612
609
  slotDurationMs: l1Constants.slotDuration * 1000,
610
+ ethereumSlotDuration: l1Constants.ethereumSlotDuration,
613
611
  heartbeatIntervalMs: config.gossipsubInterval,
614
612
  targetCommitteeSize: l1Constants.targetCommitteeSize,
615
613
  blockDurationMs: config.blockDurationMs,
614
+ l1PublishingTime: config.l1PublishingTime,
615
+ p2pPropagationTime: config.attestationPropagationTime,
616
616
  expectedBlockProposalsPerSlot: config.expectedBlockProposalsPerSlot
617
617
  });
618
618
  const node = await createLibp2p({
@@ -727,6 +727,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
727
727
  const peerScoring = new PeerScoring(config, telemetry);
728
728
  const reqresp = new ReqResp(config, node, peerScoring, createLogger(`${logger.module}:reqresp`));
729
729
  const peerManager = new PeerManager(node, peerDiscoveryService, config, telemetry, createLogger(`${logger.module}:peer_manager`), peerScoring, reqresp, worldStateSynchronizer, protocolVersion, epochCache);
730
+ // Gate req/resp data protocols for unauthenticated peers when p2pAllowOnlyValidators is enabled
731
+ reqresp.setShouldRejectPeer((peerId)=>peerManager.shouldDisableP2PGossip(peerId));
730
732
  // Configure application-specific scoring for gossipsub.
731
733
  // The weight scales app score to align with gossipsub thresholds:
732
734
  // - Disconnect (-50) × 10 = -500 = gossipThreshold (stops receiving gossip)
@@ -753,13 +755,11 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
753
755
  // Create request response protocol handlers
754
756
  const txHandler = reqRespTxHandler(this.mempools);
755
757
  const goodbyeHandler = reqGoodbyeHandler(this.peerManager);
756
- const blockHandler = reqRespBlockHandler(this.archiver);
757
758
  const statusHandler = reqRespStatusHandler(this.protocolVersion, this.worldStateSynchronizer, this.logger);
758
759
  const requestResponseHandlers = {
759
760
  [ReqRespSubProtocol.PING]: pingHandler,
760
761
  [ReqRespSubProtocol.STATUS]: statusHandler.bind(this),
761
- [ReqRespSubProtocol.GOODBYE]: goodbyeHandler.bind(this),
762
- [ReqRespSubProtocol.BLOCK]: blockHandler.bind(this)
762
+ [ReqRespSubProtocol.GOODBYE]: goodbyeHandler.bind(this)
763
763
  };
764
764
  if (!this.config.disableTransactions) {
765
765
  const blockTxsHandler = reqRespBlockTxsHandler(this.mempools.attestationPool, this.archiver, this.mempools.txPool);
@@ -772,8 +772,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
772
772
  const reqrespSubProtocolValidators = {
773
773
  ...DEFAULT_SUB_PROTOCOL_VALIDATORS,
774
774
  [ReqRespSubProtocol.TX]: this.validateRequestedTxs.bind(this),
775
- [ReqRespSubProtocol.BLOCK_TXS]: this.validateRequestedBlockTxs.bind(this),
776
- [ReqRespSubProtocol.BLOCK]: this.validateRequestedBlock.bind(this)
775
+ [ReqRespSubProtocol.BLOCK_TXS]: this.validateRequestedBlockTxs.bind(this)
777
776
  };
778
777
  await this.peerManager.initializePeers();
779
778
  await this.reqresp.start(requestResponseHandlers, reqrespSubProtocolValidators);
@@ -861,8 +860,14 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
861
860
  registerBlockReceivedCallback(callback) {
862
861
  this.blockReceivedCallback = callback;
863
862
  }
864
- registerCheckpointReceivedCallback(callback) {
865
- this.checkpointReceivedCallback = callback;
863
+ registerValidatorCheckpointReceivedCallback(callback) {
864
+ this.validatorCheckpointReceivedCallback = callback;
865
+ }
866
+ registerAllNodesCheckpointReceivedCallback(callback) {
867
+ this.allNodesCheckpointReceivedCallback = callback;
868
+ }
869
+ async notifyOwnCheckpointProposal(checkpoint) {
870
+ await this.allNodesCheckpointReceivedCallback(checkpoint, this.node.peerId);
866
871
  }
867
872
  /**
868
873
  * Registers a callback to be invoked when a duplicate proposal is detected.
@@ -928,6 +933,12 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
928
933
  if (!validator || !validator.addMessage(msgId)) {
929
934
  this.instrumentation.incMessagePrevalidationStatus(false, topicType);
930
935
  this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), TopicValidatorResult.Ignore);
936
+ if (topicType === TopicType.tx) {
937
+ this.logger.verbose(`Ignoring already-seen tx gossip message`, {
938
+ msgId,
939
+ source: source.toString()
940
+ });
941
+ }
931
942
  return {
932
943
  result: false,
933
944
  topicType
@@ -1033,29 +1044,79 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1033
1044
  return;
1034
1045
  }
1035
1046
  async validateReceivedMessage(validationFunc, msgId, source, topicType) {
1047
+ // Default to reject result with a penalty if validation function throws an error
1036
1048
  let resultAndObj = {
1037
- result: TopicValidatorResult.Reject
1049
+ result: TopicValidatorResult.Reject,
1050
+ severity: PeerErrorSeverity.MidToleranceError
1038
1051
  };
1039
1052
  const timer = new Timer();
1040
1053
  try {
1041
1054
  resultAndObj = await validationFunc();
1042
1055
  } catch (err) {
1043
- this.peerManager.penalizePeer(source, PeerErrorSeverity.LowToleranceError);
1044
- this.logger.error(`Error deserializing and validating gossipsub message`, err, {
1056
+ this.logger.error(`Error validating gossipsub message`, err, {
1045
1057
  msgId,
1046
1058
  source: source.toString(),
1047
1059
  topicType
1048
1060
  });
1049
1061
  }
1062
+ const validationTimeMs = timer.ms();
1063
+ const mcacheWindowMs = this.config.gossipsubMcacheLength * this.config.gossipsubInterval;
1064
+ if (validationTimeMs > mcacheWindowMs * 0.75) {
1065
+ this.instrumentation.incSlowValidation(topicType);
1066
+ this.logger.warn(`Gossip validation for ${topicType} took ${validationTimeMs}ms, approaching mcache eviction window of ${mcacheWindowMs}ms. ` + `Message forwarding may be skipped if validation exceeds the window.`, {
1067
+ msgId,
1068
+ source: source.toString(),
1069
+ topicType,
1070
+ validationTimeMs,
1071
+ mcacheWindowMs
1072
+ });
1073
+ }
1050
1074
  if (resultAndObj.result === TopicValidatorResult.Accept) {
1075
+ this.logger.debug(`Message ${topicType} accepted by validator`, {
1076
+ msgId,
1077
+ source: source.toString(),
1078
+ topicType
1079
+ });
1051
1080
  this.instrumentation.recordMessageValidation(topicType, timer);
1081
+ } else if (resultAndObj.result === TopicValidatorResult.Reject) {
1082
+ this.logger.warn(`Message ${topicType} rejected by validator with severity ${resultAndObj.severity}`, {
1083
+ msgId,
1084
+ source: source.toString(),
1085
+ topicType,
1086
+ severity: resultAndObj.severity
1087
+ });
1088
+ this.peerManager.penalizePeer(source, resultAndObj.severity);
1089
+ } else {
1090
+ this.logger.trace(`Message ${topicType} ignored by validator`, {
1091
+ msgId,
1092
+ source: source.toString(),
1093
+ topicType
1094
+ });
1052
1095
  }
1053
1096
  this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), resultAndObj.result);
1054
1097
  return resultAndObj;
1055
1098
  }
1099
+ tryDeserialize(deserializeFunc, msgId, source) {
1100
+ try {
1101
+ return deserializeFunc();
1102
+ } catch (err) {
1103
+ this.logger.warn(`Failed to deserialize gossipsub message from buffer`, {
1104
+ err,
1105
+ msgId,
1106
+ source: source.toString()
1107
+ });
1108
+ return undefined;
1109
+ }
1110
+ }
1056
1111
  async handleGossipedTx(payloadData, msgId, source) {
1057
1112
  const validationFunc = async ()=>{
1058
- const tx = Tx.fromBuffer(payloadData);
1113
+ const tx = this.tryDeserialize(()=>Tx.fromBuffer(payloadData), msgId, source);
1114
+ if (!tx) {
1115
+ return {
1116
+ result: TopicValidatorResult.Reject,
1117
+ severity: PeerErrorSeverity.LowToleranceError
1118
+ };
1119
+ }
1059
1120
  const currentBlockNumber = await this.archiver.getBlockNumber();
1060
1121
  const { ts: nextSlotTimestamp } = this.epochCache.getEpochAndSlotInNextL1Slot();
1061
1122
  // Stage 1: fast validators (metadata, data, timestamps, double-spend, gas, phases, block header)
@@ -1071,14 +1132,22 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1071
1132
  const txBlockNumber = BlockNumber(currentBlockNumber + 1);
1072
1133
  severity = await this.handleDoubleSpendFailure(tx, txBlockNumber);
1073
1134
  }
1074
- this.peerManager.penalizePeer(source, severity);
1135
+ this.logger.verbose(`Rejecting gossiped tx ${tx.getTxHash().toString()}: stage 1 validation failed`, {
1136
+ validator: name,
1137
+ severity,
1138
+ source: source.toString()
1139
+ });
1075
1140
  return {
1076
- result: TopicValidatorResult.Reject
1141
+ result: TopicValidatorResult.Reject,
1142
+ severity
1077
1143
  };
1078
1144
  }
1079
1145
  // Pool pre-check: see if the pool would accept this tx before doing expensive proof verification
1080
1146
  const canAdd = await this.mempools.txPool.canAddPendingTx(tx);
1081
1147
  if (canAdd === 'ignored') {
1148
+ this.logger.verbose(`Ignoring gossiped tx ${tx.getTxHash().toString()}: pool pre-check returned ignored`, {
1149
+ source: source.toString()
1150
+ });
1082
1151
  return {
1083
1152
  result: TopicValidatorResult.Ignore,
1084
1153
  obj: tx
@@ -1088,10 +1157,15 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1088
1157
  const secondStageValidators = this.createSecondStageMessageValidators();
1089
1158
  const secondStageOutcome = await this.runValidations(tx, secondStageValidators);
1090
1159
  if (!secondStageOutcome.allPassed) {
1091
- const { severity } = secondStageOutcome.failure;
1092
- this.peerManager.penalizePeer(source, severity);
1160
+ const { severity, name } = secondStageOutcome.failure;
1161
+ this.logger.verbose(`Rejecting gossiped tx ${tx.getTxHash().toString()}: stage 2 validation failed`, {
1162
+ validator: name,
1163
+ severity,
1164
+ source: source.toString()
1165
+ });
1093
1166
  return {
1094
- result: TopicValidatorResult.Reject
1167
+ result: TopicValidatorResult.Reject,
1168
+ severity
1095
1169
  };
1096
1170
  }
1097
1171
  // Pool add: persist the tx
@@ -1103,7 +1177,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1103
1177
  });
1104
1178
  const wasAccepted = addResult.accepted.some((h)=>h.equals(txHash));
1105
1179
  const wasIgnored = addResult.ignored.some((h)=>h.equals(txHash));
1106
- this.logger.trace(`Validate propagated tx`, {
1180
+ this.logger.verbose(`Validate propagated tx ${txHash.toString()}`, {
1107
1181
  wasAccepted,
1108
1182
  wasIgnored,
1109
1183
  [Attributes.P2P_ID]: source.toString()
@@ -1119,8 +1193,13 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1119
1193
  obj: tx
1120
1194
  };
1121
1195
  } else {
1196
+ this.logger.warn(`Gossiped tx ${txHash.toString()} unexpectedly rejected by pool`, {
1197
+ source: source.toString(),
1198
+ txHash: txHash.toString()
1199
+ });
1122
1200
  return {
1123
- result: TopicValidatorResult.Reject
1201
+ result: TopicValidatorResult.Reject,
1202
+ severity: PeerErrorSeverity.HighToleranceError
1124
1203
  };
1125
1204
  }
1126
1205
  };
@@ -1141,7 +1220,16 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1141
1220
  * Process a checkpoint attestation from a peer.
1142
1221
  * Validates the attestation and adds it to the pool.
1143
1222
  */ async processCheckpointAttestationFromPeer(payloadData, msgId, source) {
1144
- const { result, obj: attestation } = await this.validateReceivedMessage(()=>this.validateAndStoreCheckpointAttestation(source, CheckpointAttestation.fromBuffer(payloadData)), msgId, source, TopicType.checkpoint_attestation);
1223
+ const { result, obj: attestation } = await this.validateReceivedMessage(()=>{
1224
+ const attestation = this.tryDeserialize(()=>CheckpointAttestation.fromBuffer(payloadData), msgId, source);
1225
+ if (!attestation) {
1226
+ return Promise.resolve({
1227
+ result: TopicValidatorResult.Reject,
1228
+ severity: PeerErrorSeverity.LowToleranceError
1229
+ });
1230
+ }
1231
+ return this.validateAndStoreCheckpointAttestation(source, attestation);
1232
+ }, msgId, source, TopicType.checkpoint_attestation);
1145
1233
  if (result !== TopicValidatorResult.Accept || !attestation) {
1146
1234
  return;
1147
1235
  }
@@ -1156,9 +1244,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1156
1244
  const validationResult = await this.checkpointAttestationValidator.validate(attestation);
1157
1245
  if (validationResult.result === 'reject') {
1158
1246
  this.logger.warn(`Penalizing peer ${peerId} for checkpoint attestation validation failure`);
1159
- this.peerManager.penalizePeer(peerId, validationResult.severity);
1160
1247
  return {
1161
- result: TopicValidatorResult.Reject
1248
+ result: TopicValidatorResult.Reject,
1249
+ severity: validationResult.severity
1162
1250
  };
1163
1251
  }
1164
1252
  if (validationResult.result === 'ignore') {
@@ -1185,9 +1273,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1185
1273
  obj: attestation
1186
1274
  };
1187
1275
  }
1188
- // Could not add (cap reached for signer), no need to re-broadcast
1276
+ // Could not add (cap reached for signer), penalize and do not re-broadcast
1189
1277
  if (!added) {
1190
- this.logger.warn(`Dropping checkpoint attestation due to cap`, {
1278
+ this.logger.warn(`Rejecting checkpoint attestation due to cap`, {
1191
1279
  slot: slot.toString(),
1192
1280
  archive: attestation.archive.toString(),
1193
1281
  source: peerId.toString(),
@@ -1195,8 +1283,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1195
1283
  count
1196
1284
  });
1197
1285
  return {
1198
- result: TopicValidatorResult.Ignore,
1199
- obj: attestation
1286
+ result: TopicValidatorResult.Reject,
1287
+ severity: PeerErrorSeverity.HighToleranceError
1200
1288
  };
1201
1289
  }
1202
1290
  // Check if this is a duplicate attestation (signer attested to a different proposal at the same slot)
@@ -1234,9 +1322,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1234
1322
  const validationResult = await this.blockProposalValidator.validate(block);
1235
1323
  if (validationResult.result === 'reject') {
1236
1324
  this.logger.warn(`Penalizing peer ${peerId} for block proposal validation failure`);
1237
- this.peerManager.penalizePeer(peerId, validationResult.severity);
1238
1325
  return {
1239
- result: TopicValidatorResult.Reject
1326
+ result: TopicValidatorResult.Reject,
1327
+ severity: validationResult.severity
1240
1328
  };
1241
1329
  }
1242
1330
  if (validationResult.result === 'ignore') {
@@ -1266,7 +1354,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1266
1354
  }
1267
1355
  // Too many blocks received for this slot and index, penalize peer and do not re-broadcast
1268
1356
  if (!added) {
1269
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError);
1270
1357
  this.logger.warn(`Penalizing peer for block proposal exceeding per-position cap`, {
1271
1358
  ...block.toBlockInfo(),
1272
1359
  indexWithinCheckpoint: block.indexWithinCheckpoint,
@@ -1278,7 +1365,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1278
1365
  result: TopicValidatorResult.Reject,
1279
1366
  metadata: {
1280
1367
  isEquivocated
1281
- }
1368
+ },
1369
+ severity: PeerErrorSeverity.HighToleranceError
1282
1370
  };
1283
1371
  }
1284
1372
  // If this was a duplicate proposal, do not process it, but do invoke the duplicate callback,
@@ -1327,7 +1415,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1327
1415
  // Note: Validators do NOT attest to individual blocks, only to checkpoint proposals.
1328
1416
  const isValid = await this.blockReceivedCallback(block, sender);
1329
1417
  if (!isValid) {
1330
- this.logger.warn(`Block proposal validation failed for block ${block.blockNumber}`, block.toBlockInfo());
1418
+ this.logger.info(`Block proposal validation failed for block ${block.blockNumber}`, block.toBlockInfo());
1331
1419
  }
1332
1420
  }
1333
1421
  /**
@@ -1352,9 +1440,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1352
1440
  const validationResult = await this.checkpointProposalValidator.validate(checkpoint);
1353
1441
  if (validationResult.result === 'reject') {
1354
1442
  this.logger.warn(`Penalizing peer ${peerId} for checkpoint proposal validation failure`);
1355
- this.peerManager.penalizePeer(peerId, validationResult.severity);
1356
1443
  return {
1357
- result: TopicValidatorResult.Reject
1444
+ result: TopicValidatorResult.Reject,
1445
+ severity: validationResult.severity
1358
1446
  };
1359
1447
  }
1360
1448
  if (validationResult.result === 'ignore') {
@@ -1371,18 +1459,20 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1371
1459
  [Attributes.SLOT_NUMBER]: checkpoint.slotNumber.toString(),
1372
1460
  [Attributes.P2P_ID]: peerId.toString()
1373
1461
  });
1374
- const { result, obj, metadata: { isEquivocated } = {} } = await this.validateAndStoreBlockProposal(peerId, blockProposal);
1375
- if (result === TopicValidatorResult.Reject || !obj || isEquivocated) {
1462
+ const blockProposalResult = await this.validateAndStoreBlockProposal(peerId, blockProposal);
1463
+ const { obj, metadata: { isEquivocated } = {} } = blockProposalResult;
1464
+ if (blockProposalResult.result === TopicValidatorResult.Reject || !obj || isEquivocated) {
1376
1465
  this.logger.debug(`Rejecting checkpoint due to invalid last block proposal`, {
1377
1466
  [Attributes.SLOT_NUMBER]: checkpoint.slotNumber.toString(),
1378
1467
  [Attributes.P2P_ID]: peerId.toString(),
1379
1468
  isEquivocated,
1380
- result
1469
+ result: blockProposalResult.result
1381
1470
  });
1382
1471
  return {
1383
- result: TopicValidatorResult.Reject
1472
+ result: TopicValidatorResult.Reject,
1473
+ severity: 'severity' in blockProposalResult ? blockProposalResult.severity : PeerErrorSeverity.MidToleranceError
1384
1474
  };
1385
- } else if (result === TopicValidatorResult.Accept && obj && !isEquivocated) {
1475
+ } else if (blockProposalResult.result === TopicValidatorResult.Accept && obj && !isEquivocated) {
1386
1476
  processBlock = true;
1387
1477
  }
1388
1478
  }
@@ -1409,7 +1499,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1409
1499
  // Too many checkpoint proposals received for this slot, penalize peer and do not re-broadcast
1410
1500
  // Note: We still return the checkpoint obj so the lastBlock can be processed if valid
1411
1501
  if (!added) {
1412
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError);
1413
1502
  this.logger.warn(`Penalizing peer for checkpoint proposal exceeding per-slot cap`, {
1414
1503
  ...checkpoint.toCheckpointInfo(),
1415
1504
  count,
@@ -1421,7 +1510,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1421
1510
  metadata: {
1422
1511
  isEquivocated,
1423
1512
  processBlock
1424
- }
1513
+ },
1514
+ severity: PeerErrorSeverity.HighToleranceError
1425
1515
  };
1426
1516
  }
1427
1517
  // If this was a duplicate proposal, do not process it, but do invoke the duplicate callback,
@@ -1471,9 +1561,10 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1471
1561
  archive: checkpoint.archive.toString(),
1472
1562
  source: sender.toString()
1473
1563
  });
1564
+ await this.allNodesCheckpointReceivedCallback(checkpoint, sender);
1474
1565
  // Call the checkpoint received callback with the core version (without lastBlock)
1475
1566
  // to validate and potentially generate attestations
1476
- const attestations = await this.checkpointReceivedCallback(checkpoint, sender);
1567
+ const attestations = await this.validatorCheckpointReceivedCallback(checkpoint, sender);
1477
1568
  if (attestations && attestations.length > 0) {
1478
1569
  // If the callback returned attestations, add them to the pool and propagate them
1479
1570
  await this.mempools.attestationPool.addOwnCheckpointAttestations(attestations);
@@ -1593,45 +1684,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1593
1684
  return false;
1594
1685
  }
1595
1686
  }
1596
- /**
1597
- * Validates a BLOCK response.
1598
- *
1599
- * If a local copy exists, enforces hash equality. If missing, rejects (no penalty) since the hash cannot be verified.
1600
- * Penalizes on block number mismatch or hash mismatch.
1601
- *
1602
- * @param requestedBlockNumber - The requested block number.
1603
- * @param responseBlock - The block returned by the peer.
1604
- * @param peerId - The peer that returned the block.
1605
- * @returns True if the response is valid, false otherwise.
1606
- */ async validateRequestedBlock(requestedBlockNumber, responseBlock, peerId) {
1607
- try {
1608
- const reqNum = Number(requestedBlockNumber.toString());
1609
- if (responseBlock.number !== reqNum) {
1610
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.LowToleranceError);
1611
- return false;
1612
- }
1613
- const local = await this.archiver.getBlock(BlockNumber(reqNum));
1614
- if (!local) {
1615
- // We are missing the local block; we cannot verify the hash yet. Reject without penalizing.
1616
- // TODO: Consider extending this validator to accept an expected hash or
1617
- // performing quorum-based checks when using P2P syncing prior to L1 sync.
1618
- this.logger.warn(`Local block ${reqNum} not found; rejecting BLOCK response without hash verification`);
1619
- return false;
1620
- }
1621
- const [localHash, respHash] = await Promise.all([
1622
- local.hash(),
1623
- responseBlock.hash()
1624
- ]);
1625
- if (!localHash.equals(respHash)) {
1626
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError);
1627
- return false;
1628
- }
1629
- return true;
1630
- } catch (e) {
1631
- this.logger.warn(`Error validating requested block`, e);
1632
- return false;
1633
- }
1634
- }
1635
1687
  async validateRequestedTx(tx, peerId, txValidator, requested) {
1636
1688
  const penalize = (severity)=>this.peerManager.penalizePeer(peerId, severity);
1637
1689
  if (requested && !requested.has(tx.getTxHash().toString())) {
@@ -1691,9 +1743,17 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1691
1743
  }
1692
1744
  /** Creates the first stage (fast) validators for gossiped transactions. */ async createFirstStageMessageValidators(currentBlockNumber, nextSlotTimestamp) {
1693
1745
  const gasFees = await this.getGasFees(currentBlockNumber);
1694
- const allowedInSetup = this.config.txPublicSetupAllowList ?? await getDefaultAllowedSetupFunctions();
1746
+ const allowedInSetup = [
1747
+ ...await getDefaultAllowedSetupFunctions(),
1748
+ ...this.config.txPublicSetupAllowListExtend ?? []
1749
+ ];
1695
1750
  const blockNumber = BlockNumber(currentBlockNumber + 1);
1696
- return createFirstStageTxValidationsForGossipedTransactions(nextSlotTimestamp, blockNumber, this.worldStateSynchronizer, gasFees, this.config.l1ChainId, this.config.rollupVersion, protocolContractsHash, this.archiver, !this.config.disableTransactions, allowedInSetup, this.logger.getBindings());
1751
+ const l1Constants = await this.archiver.getL1Constants();
1752
+ return createFirstStageTxValidationsForGossipedTransactions(nextSlotTimestamp, blockNumber, this.worldStateSynchronizer, gasFees, this.config.l1ChainId, this.config.rollupVersion, protocolContractsHash, this.archiver, !this.config.disableTransactions, allowedInSetup, this.logger.getBindings(), {
1753
+ rollupManaLimit: l1Constants.rollupManaLimit,
1754
+ maxBlockL2Gas: this.config.validateMaxL2BlockGas,
1755
+ maxBlockDAGas: this.config.validateMaxDABlockGas
1756
+ });
1697
1757
  }
1698
1758
  /** Creates the second stage (expensive proof verification) validators for gossiped transactions. */ createSecondStageMessageValidators() {
1699
1759
  return createSecondStageTxValidationsForGossipedTransactions(this.proofVerifier, this.logger.getBindings());
@@ -1714,8 +1774,10 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1714
1774
  });
1715
1775
  // A promise that resolves when all validations have been run
1716
1776
  const allValidations = await Promise.all(validationPromises);
1717
- const failed = allValidations.find((x)=>!x.isValid);
1718
- if (failed) {
1777
+ const failures = allValidations.filter((x)=>!x.isValid);
1778
+ if (failures.length > 0) {
1779
+ // Pick the most severe failure (lowest tolerance = harshest penalty)
1780
+ const failed = maxBy(failures, (f)=>PeerErrorSeverityByHarshness.indexOf(f.severity));
1719
1781
  return {
1720
1782
  allPassed: false,
1721
1783
  failure: {
@@ -1762,19 +1824,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1762
1824
  }
1763
1825
  return PeerErrorSeverity.HighToleranceError;
1764
1826
  }
1765
- /**
1766
- * Validate a checkpoint attestation.
1767
- *
1768
- * @param attestation - The checkpoint attestation to validate.
1769
- * @returns True if the checkpoint attestation is valid, false otherwise.
1770
- */ async validateCheckpointAttestation(peerId, attestation) {
1771
- const result = await this.checkpointAttestationValidator.validate(attestation);
1772
- if (result.result === 'reject') {
1773
- this.logger.warn(`Penalizing peer ${peerId} for checkpoint attestation validation failure`);
1774
- this.peerManager.penalizePeer(peerId, result.severity);
1775
- }
1776
- return result;
1777
- }
1778
1827
  getPeerScore(peerId) {
1779
1828
  return this.node.services.pubsub.score.score(peerId.toString());
1780
1829
  }
@@ -6,6 +6,7 @@ export declare class PeerManagerMetrics {
6
6
  private sentGoodbyes;
7
7
  private receivedGoodbyes;
8
8
  private peerCount;
9
+ private healthyPeerCount;
9
10
  private lowScoreDisconnects;
10
11
  private peerConnectionDuration;
11
12
  private peerConnectedAt;
@@ -14,8 +15,9 @@ export declare class PeerManagerMetrics {
14
15
  recordGoodbyeSent(reason: GoodByeReason): void;
15
16
  recordGoodbyeReceived(reason: GoodByeReason): void;
16
17
  recordPeerCount(count: number): void;
18
+ recordHealthyPeerCount(count: number): void;
17
19
  recordLowScoreDisconnect(scoreState: 'Banned' | 'Disconnect'): void;
18
20
  peerConnected(id: PeerId): void;
19
21
  peerDisconnected(id: PeerId): void;
20
22
  }
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3BlZXItbWFuYWdlci9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLTCxLQUFLLGVBQWUsRUFDcEIsS0FBSyxNQUFNLEVBSVosTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsYUFBYSxFQUF1QixNQUFNLCtCQUErQixDQUFDO0FBRW5GLHFCQUFhLGtCQUFrQjthQVlYLGVBQWUsRUFBRSxlQUFlO0lBWGxELE9BQU8sQ0FBQyxZQUFZLENBQWdCO0lBQ3BDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBZ0I7SUFDeEMsT0FBTyxDQUFDLFNBQVMsQ0FBUTtJQUN6QixPQUFPLENBQUMsbUJBQW1CLENBQWdCO0lBQzNDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBWTtJQUUxQyxPQUFPLENBQUMsZUFBZSxDQUFrRDtJQUV6RSxTQUFnQixNQUFNLEVBQUUsTUFBTSxDQUFDO0lBRS9CLFlBQ2tCLGVBQWUsR0FBRSxlQUFzQyxFQUN2RSxJQUFJLFNBQWdCLEVBMEJyQjtJQUVNLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxhQUFhLFFBRTdDO0lBRU0scUJBQXFCLENBQUMsTUFBTSxFQUFFLGFBQWEsUUFFakQ7SUFFTSxlQUFlLENBQUMsS0FBSyxFQUFFLE1BQU0sUUFFbkM7SUFFTSx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsUUFBUSxHQUFHLFlBQVksUUFFbEU7SUFFTSxhQUFhLENBQUMsRUFBRSxFQUFFLE1BQU0sUUFFOUI7SUFFTSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsTUFBTSxRQUtqQztDQUNGIn0=
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0cmljcy5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL3BlZXItbWFuYWdlci9tZXRyaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLTCxLQUFLLGVBQWUsRUFDcEIsS0FBSyxNQUFNLEVBSVosTUFBTSx5QkFBeUIsQ0FBQztBQUVqQyxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUsYUFBYSxFQUF1QixNQUFNLCtCQUErQixDQUFDO0FBRW5GLHFCQUFhLGtCQUFrQjthQWFYLGVBQWUsRUFBRSxlQUFlO0lBWmxELE9BQU8sQ0FBQyxZQUFZLENBQWdCO0lBQ3BDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBZ0I7SUFDeEMsT0FBTyxDQUFDLFNBQVMsQ0FBUTtJQUN6QixPQUFPLENBQUMsZ0JBQWdCLENBQVE7SUFDaEMsT0FBTyxDQUFDLG1CQUFtQixDQUFnQjtJQUMzQyxPQUFPLENBQUMsc0JBQXNCLENBQVk7SUFFMUMsT0FBTyxDQUFDLGVBQWUsQ0FBa0Q7SUFFekUsU0FBZ0IsTUFBTSxFQUFFLE1BQU0sQ0FBQztJQUUvQixZQUNrQixlQUFlLEdBQUUsZUFBc0MsRUFDdkUsSUFBSSxTQUFnQixFQTJCckI7SUFFTSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsYUFBYSxRQUU3QztJQUVNLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxhQUFhLFFBRWpEO0lBRU0sZUFBZSxDQUFDLEtBQUssRUFBRSxNQUFNLFFBRW5DO0lBRU0sc0JBQXNCLENBQUMsS0FBSyxFQUFFLE1BQU0sUUFFMUM7SUFFTSx3QkFBd0IsQ0FBQyxVQUFVLEVBQUUsUUFBUSxHQUFHLFlBQVksUUFFbEU7SUFFTSxhQUFhLENBQUMsRUFBRSxFQUFFLE1BQU0sUUFFOUI7SUFFTSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsTUFBTSxRQU1qQztDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/services/peer-manager/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,MAAM,EAIZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAuB,MAAM,+BAA+B,CAAC;AAEnF,qBAAa,kBAAkB;aAYX,eAAe,EAAE,eAAe;IAXlD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,sBAAsB,CAAY;IAE1C,OAAO,CAAC,eAAe,CAAkD;IAEzE,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,YACkB,eAAe,GAAE,eAAsC,EACvE,IAAI,SAAgB,EA0BrB;IAEM,iBAAiB,CAAC,MAAM,EAAE,aAAa,QAE7C;IAEM,qBAAqB,CAAC,MAAM,EAAE,aAAa,QAEjD;IAEM,eAAe,CAAC,KAAK,EAAE,MAAM,QAEnC;IAEM,wBAAwB,CAAC,UAAU,EAAE,QAAQ,GAAG,YAAY,QAElE;IAEM,aAAa,CAAC,EAAE,EAAE,MAAM,QAE9B;IAEM,gBAAgB,CAAC,EAAE,EAAE,MAAM,QAKjC;CACF"}
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/services/peer-manager/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,MAAM,EAIZ,MAAM,yBAAyB,CAAC;AAEjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAuB,MAAM,+BAA+B,CAAC;AAEnF,qBAAa,kBAAkB;aAaX,eAAe,EAAE,eAAe;IAZlD,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,gBAAgB,CAAgB;IACxC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,gBAAgB,CAAQ;IAChC,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,sBAAsB,CAAY;IAE1C,OAAO,CAAC,eAAe,CAAkD;IAEzE,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B,YACkB,eAAe,GAAE,eAAsC,EACvE,IAAI,SAAgB,EA2BrB;IAEM,iBAAiB,CAAC,MAAM,EAAE,aAAa,QAE7C;IAEM,qBAAqB,CAAC,MAAM,EAAE,aAAa,QAEjD;IAEM,eAAe,CAAC,KAAK,EAAE,MAAM,QAEnC;IAEM,sBAAsB,CAAC,KAAK,EAAE,MAAM,QAE1C;IAEM,wBAAwB,CAAC,UAAU,EAAE,QAAQ,GAAG,YAAY,QAElE;IAEM,aAAa,CAAC,EAAE,EAAE,MAAM,QAE9B;IAEM,gBAAgB,CAAC,EAAE,EAAE,MAAM,QAMjC;CACF"}