@aztec/p2p 0.0.1-commit.358457c → 0.0.1-commit.3750d92a7

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 (348) hide show
  1. package/README.md +129 -3
  2. package/dest/client/factory.d.ts +5 -6
  3. package/dest/client/factory.d.ts.map +1 -1
  4. package/dest/client/factory.js +30 -16
  5. package/dest/client/interface.d.ts +12 -5
  6. package/dest/client/interface.d.ts.map +1 -1
  7. package/dest/client/p2p_client.d.ts +6 -5
  8. package/dest/client/p2p_client.d.ts.map +1 -1
  9. package/dest/client/p2p_client.js +47 -39
  10. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +18 -8
  11. package/dest/config.d.ts +125 -100
  12. package/dest/config.d.ts.map +1 -1
  13. package/dest/config.js +92 -33
  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/fee_payer_balance_pre_add_rule.d.ts +1 -1
  33. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
  34. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +2 -0
  35. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +7 -1
  36. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
  37. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  38. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
  39. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
  40. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
  41. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
  42. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
  43. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +2 -2
  44. package/dest/mem_pools/tx_pool_v2/index.d.ts +2 -2
  45. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
  46. package/dest/mem_pools/tx_pool_v2/index.js +1 -1
  47. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +9 -5
  48. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  49. package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
  50. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +40 -11
  51. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  52. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +75 -19
  53. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
  54. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  55. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +26 -44
  56. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
  57. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  58. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +6 -0
  59. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +2 -1
  60. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  61. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +60 -28
  62. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +5 -2
  63. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  64. package/dest/msg_validators/attestation_validator/attestation_validator.js +20 -11
  65. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +4 -2
  66. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  67. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +2 -2
  68. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  69. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  70. package/dest/msg_validators/clock_tolerance.js +54 -3
  71. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +7 -4
  72. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  73. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  74. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +7 -4
  75. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  76. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  77. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +15 -8
  78. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  79. package/dest/msg_validators/proposal_validator/proposal_validator.js +67 -47
  80. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  81. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  82. package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
  83. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  84. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  85. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  86. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  87. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  88. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  89. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  90. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  91. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  92. package/dest/msg_validators/tx_validator/data_validator.js +35 -2
  93. package/dest/msg_validators/tx_validator/factory.d.ts +23 -4
  94. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  95. package/dest/msg_validators/tx_validator/factory.js +36 -10
  96. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  97. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  99. package/dest/msg_validators/tx_validator/gas_validator.d.ts +13 -4
  100. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/gas_validator.js +49 -17
  102. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  103. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  104. package/dest/msg_validators/tx_validator/index.js +1 -0
  105. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  106. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  107. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  108. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  109. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  110. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  111. package/dest/services/data_store.d.ts +1 -1
  112. package/dest/services/data_store.d.ts.map +1 -1
  113. package/dest/services/data_store.js +5 -5
  114. package/dest/services/dummy_service.d.ts +6 -3
  115. package/dest/services/dummy_service.d.ts.map +1 -1
  116. package/dest/services/dummy_service.js +6 -1
  117. package/dest/services/encoding.d.ts +6 -2
  118. package/dest/services/encoding.d.ts.map +1 -1
  119. package/dest/services/encoding.js +14 -8
  120. package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
  121. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  122. package/dest/services/gossipsub/topic_score_params.js +21 -4
  123. package/dest/services/libp2p/libp2p_service.d.ts +19 -30
  124. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  125. package/dest/services/libp2p/libp2p_service.js +171 -135
  126. package/dest/services/peer-manager/metrics.d.ts +3 -1
  127. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  128. package/dest/services/peer-manager/metrics.js +6 -0
  129. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  130. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  131. package/dest/services/peer-manager/peer_manager.js +39 -11
  132. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  133. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  134. package/dest/services/peer-manager/peer_scoring.js +32 -10
  135. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -8
  136. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  137. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +69 -65
  138. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +3 -2
  139. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  140. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  141. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  142. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  143. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
  144. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  145. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
  146. package/dest/services/reqresp/config.d.ts +3 -3
  147. package/dest/services/reqresp/config.d.ts.map +1 -1
  148. package/dest/services/reqresp/interface.d.ts +14 -9
  149. package/dest/services/reqresp/interface.d.ts.map +1 -1
  150. package/dest/services/reqresp/interface.js +10 -11
  151. package/dest/services/reqresp/metrics.d.ts +1 -1
  152. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  153. package/dest/services/reqresp/metrics.js +0 -1
  154. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  155. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  156. package/dest/services/reqresp/protocols/index.js +0 -1
  157. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  158. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  159. package/dest/services/reqresp/protocols/tx.js +1 -3
  160. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  161. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  162. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  163. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  164. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  165. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  166. package/dest/services/reqresp/reqresp.d.ts +4 -2
  167. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  168. package/dest/services/reqresp/reqresp.js +30 -12
  169. package/dest/services/service.d.ts +5 -2
  170. package/dest/services/service.d.ts.map +1 -1
  171. package/dest/services/tx_collection/fast_tx_collection.d.ts +1 -4
  172. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  173. package/dest/services/tx_collection/fast_tx_collection.js +57 -73
  174. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  175. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  176. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  177. package/dest/services/tx_collection/proposal_tx_collector.d.ts +6 -7
  178. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
  179. package/dest/services/tx_collection/proposal_tx_collector.js +4 -4
  180. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  181. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  182. package/dest/services/tx_collection/request_tracker.js +84 -0
  183. package/dest/services/tx_collection/slow_tx_collection.js +1 -1
  184. package/dest/services/tx_collection/tx_collection.d.ts +3 -6
  185. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  186. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  187. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  188. package/dest/services/tx_collection/tx_source.js +9 -7
  189. package/dest/test-helpers/make-test-p2p-clients.d.ts +5 -6
  190. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  191. package/dest/test-helpers/make-test-p2p-clients.js +1 -2
  192. package/dest/test-helpers/mock-pubsub.d.ts +12 -5
  193. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  194. package/dest/test-helpers/mock-pubsub.js +37 -12
  195. package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
  196. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  197. package/dest/test-helpers/reqresp-nodes.js +3 -4
  198. package/dest/test-helpers/testbench-utils.d.ts +1 -1
  199. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  200. package/dest/test-helpers/testbench-utils.js +23 -3
  201. package/dest/testbench/p2p_client_testbench_worker.js +73 -21
  202. package/dest/testbench/worker_client_manager.d.ts +10 -1
  203. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  204. package/dest/testbench/worker_client_manager.js +55 -3
  205. package/dest/util.d.ts +1 -1
  206. package/package.json +14 -14
  207. package/src/client/factory.ts +51 -27
  208. package/src/client/interface.ts +12 -10
  209. package/src/client/p2p_client.ts +52 -51
  210. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +20 -11
  211. package/src/config.ts +137 -35
  212. package/src/errors/p2p-service.error.ts +11 -0
  213. package/src/index.ts +0 -1
  214. package/src/mem_pools/attestation_pool/attestation_pool.ts +17 -12
  215. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +6 -6
  216. package/src/mem_pools/index.ts +0 -3
  217. package/src/mem_pools/instrumentation.ts +17 -13
  218. package/src/mem_pools/tx_pool_v2/README.md +9 -1
  219. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  220. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +3 -0
  221. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
  222. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  223. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
  224. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
  225. package/src/mem_pools/tx_pool_v2/index.ts +1 -1
  226. package/src/mem_pools/tx_pool_v2/interfaces.ts +9 -4
  227. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +110 -22
  228. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +29 -43
  229. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +16 -1
  230. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +68 -26
  231. package/src/msg_validators/attestation_validator/README.md +49 -0
  232. package/src/msg_validators/attestation_validator/attestation_validator.ts +21 -9
  233. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +4 -1
  234. package/src/msg_validators/clock_tolerance.ts +72 -3
  235. package/src/msg_validators/proposal_validator/README.md +123 -0
  236. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +17 -4
  237. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +23 -7
  238. package/src/msg_validators/proposal_validator/proposal_validator.ts +79 -49
  239. package/src/msg_validators/tx_validator/README.md +5 -1
  240. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  241. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  242. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  243. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  244. package/src/msg_validators/tx_validator/data_validator.ts +42 -1
  245. package/src/msg_validators/tx_validator/factory.ts +43 -3
  246. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  247. package/src/msg_validators/tx_validator/gas_validator.ts +65 -16
  248. package/src/msg_validators/tx_validator/index.ts +1 -0
  249. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  250. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  251. package/src/services/data_store.ts +5 -13
  252. package/src/services/dummy_service.ts +8 -2
  253. package/src/services/encoding.ts +14 -7
  254. package/src/services/gossipsub/topic_score_params.ts +36 -4
  255. package/src/services/libp2p/libp2p_service.ts +169 -150
  256. package/src/services/peer-manager/metrics.ts +7 -0
  257. package/src/services/peer-manager/peer_manager.ts +45 -11
  258. package/src/services/peer-manager/peer_scoring.ts +27 -5
  259. package/src/services/reqresp/README.md +229 -0
  260. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  261. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +64 -69
  262. package/src/services/reqresp/batch-tx-requester/interface.ts +2 -1
  263. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  264. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
  265. package/src/services/reqresp/config.ts +2 -2
  266. package/src/services/reqresp/interface.ts +21 -11
  267. package/src/services/reqresp/metrics.ts +0 -1
  268. package/src/services/reqresp/protocols/index.ts +0 -1
  269. package/src/services/reqresp/protocols/tx.ts +1 -3
  270. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  271. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  272. package/src/services/reqresp/reqresp.ts +40 -13
  273. package/src/services/service.ts +6 -1
  274. package/src/services/tx_collection/fast_tx_collection.ts +57 -83
  275. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  276. package/src/services/tx_collection/proposal_tx_collector.ts +8 -13
  277. package/src/services/tx_collection/request_tracker.ts +127 -0
  278. package/src/services/tx_collection/slow_tx_collection.ts +1 -1
  279. package/src/services/tx_collection/tx_collection.ts +3 -5
  280. package/src/services/tx_collection/tx_source.ts +8 -7
  281. package/src/test-helpers/make-test-p2p-clients.ts +1 -3
  282. package/src/test-helpers/mock-pubsub.ts +34 -11
  283. package/src/test-helpers/reqresp-nodes.ts +5 -8
  284. package/src/test-helpers/testbench-utils.ts +30 -3
  285. package/src/testbench/p2p_client_testbench_worker.ts +74 -21
  286. package/src/testbench/worker_client_manager.ts +68 -6
  287. package/src/util.ts +1 -1
  288. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  289. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  290. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  291. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  292. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  293. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  294. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  295. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  296. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  297. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  298. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  299. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  300. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  301. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  302. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  303. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  304. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  305. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  306. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  307. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  308. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  309. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  310. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  311. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  312. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  313. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  314. package/dest/mem_pools/tx_pool/index.js +0 -2
  315. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  316. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  317. package/dest/mem_pools/tx_pool/priority.js +0 -15
  318. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  319. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  320. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  321. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  322. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  323. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  324. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  325. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  326. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  327. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  328. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  329. package/dest/services/reqresp/protocols/block.js +0 -32
  330. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  331. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  332. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  333. package/src/mem_pools/tx_pool/README.md +0 -270
  334. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  335. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  336. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  337. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  338. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  339. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  340. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  341. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  342. package/src/mem_pools/tx_pool/index.ts +0 -2
  343. package/src/mem_pools/tx_pool/priority.ts +0 -20
  344. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  345. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  346. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  347. package/src/services/reqresp/protocols/block.ts +0 -37
  348. 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, P2PClientType, P2PMessage, PeerErrorSeverity, TopicType, createTopicString, getTopicsForClientAndConfig, 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,17 +431,10 @@ _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.
441
437
  */ export class LibP2PService extends WithTracer {
442
- clientType;
443
438
  config;
444
439
  node;
445
440
  peerDiscoveryService;
@@ -486,16 +481,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
486
481
  _dec6,
487
482
  2,
488
483
  "validateRequestedTxs"
489
- ],
490
- [
491
- _dec7,
492
- 2,
493
- "validateRequestedBlock"
494
- ],
495
- [
496
- _dec8,
497
- 2,
498
- "validateCheckpointAttestation"
499
484
  ]
500
485
  ], []));
501
486
  }
@@ -519,13 +504,18 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
519
504
  * Callback for when a checkpoint proposal is received from a peer.
520
505
  * @param checkpoint - The checkpoint proposal received from the peer.
521
506
  * @returns The attestations for the checkpoint, if any.
522
- */ 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;
523
513
  gossipSubEventHandler;
524
514
  instrumentation;
525
515
  telemetry;
526
516
  logger;
527
- constructor(clientType, config, node, peerDiscoveryService, reqresp, peerManager, mempools, archiver, epochCache, proofVerifier, worldStateSynchronizer, telemetry, logger = createLogger('p2p:libp2p_service')){
528
- 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 = (_initProto(this), {}), this.protocolVersion = '', this.topicStrings = {};
517
+ constructor(config, node, peerDiscoveryService, reqresp, peerManager, mempools, archiver, epochCache, proofVerifier, worldStateSynchronizer, telemetry, logger = createLogger('p2p:libp2p_service')){
518
+ super(telemetry, 'LibP2PService'), 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 = (_initProto(this), {}), this.protocolVersion = '', this.topicStrings = {};
529
519
  this.telemetry = telemetry;
530
520
  // Create child logger with fisherman prefix if in fisherman mode
531
521
  this.logger = config.fishermanMode ? logger.createChild('[FISHERMAN]') : logger;
@@ -541,22 +531,30 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
541
531
  this.topicStrings[TopicType.block_proposal] = createTopicString(TopicType.block_proposal, this.protocolVersion);
542
532
  this.topicStrings[TopicType.checkpoint_proposal] = createTopicString(TopicType.checkpoint_proposal, this.protocolVersion);
543
533
  this.topicStrings[TopicType.checkpoint_attestation] = createTopicString(TopicType.checkpoint_attestation, this.protocolVersion);
544
- this.blockProposalValidator = new BlockProposalValidator(epochCache, {
545
- txsPermitted: !config.disableTransactions
546
- });
547
- this.checkpointProposalValidator = new CheckpointProposalValidator(epochCache, {
548
- txsPermitted: !config.disableTransactions
534
+ const p2pPropagationTime = config.attestationPropagationTime;
535
+ const proposalValidatorOpts = {
536
+ txsPermitted: !config.disableTransactions,
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
549
546
  });
550
- this.checkpointAttestationValidator = config.fishermanMode ? new FishermanAttestationValidator(epochCache, mempools.attestationPool, telemetry) : new CheckpointAttestationValidator(epochCache);
551
547
  this.gossipSubEventHandler = this.handleGossipSubEvent.bind(this);
552
548
  this.blockReceivedCallback = async (block)=>{
553
- 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.`, {
554
550
  p2pMessageIdentifier: await block.p2pMessageLoggingIdentifier()
555
551
  });
556
- return false;
552
+ return true;
553
+ };
554
+ this.allNodesCheckpointReceivedCallback = (_checkpoint)=>{
555
+ throw new CheckpointProposalReceivedCallbackNotRegisteredError();
557
556
  };
558
- this.checkpointReceivedCallback = (checkpoint)=>{
559
- this.logger.debug(`Handler not yet registered: Checkpoint received callback not set. Received checkpoint for slot ${checkpoint.slotNumber} from peer.`);
557
+ this.validatorCheckpointReceivedCallback = (_checkpoint)=>{
560
558
  return Promise.resolve(undefined);
561
559
  };
562
560
  }
@@ -568,7 +566,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
568
566
  * @param config - The configuration to use when creating the service.
569
567
  * @param txPool - The transaction pool to be accessed by the service.
570
568
  * @returns The new service.
571
- */ static async new(clientType, config, peerId, deps) {
569
+ */ static async new(config, peerId, deps) {
572
570
  const { worldStateSynchronizer, epochCache, l2BlockSource, mempools, proofVerifier, peerStore, telemetry, logger, packageVersion } = deps;
573
571
  const { p2pPort, maxPeerCount, listenAddress } = config;
574
572
  const bindAddrTcp = convertToMultiaddr(listenAddress, p2pPort, 'tcp');
@@ -609,9 +607,12 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
609
607
  const l1Constants = epochCache.getL1Constants();
610
608
  const topicScoreParams = createAllTopicScoreParams(protocolVersion, {
611
609
  slotDurationMs: l1Constants.slotDuration * 1000,
610
+ ethereumSlotDuration: l1Constants.ethereumSlotDuration,
612
611
  heartbeatIntervalMs: config.gossipsubInterval,
613
612
  targetCommitteeSize: l1Constants.targetCommitteeSize,
614
613
  blockDurationMs: config.blockDurationMs,
614
+ l1PublishingTime: config.l1PublishingTime,
615
+ p2pPropagationTime: config.attestationPropagationTime,
615
616
  expectedBlockProposalsPerSlot: config.expectedBlockProposalsPerSlot
616
617
  });
617
618
  const node = await createLibp2p({
@@ -726,6 +727,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
726
727
  const peerScoring = new PeerScoring(config, telemetry);
727
728
  const reqresp = new ReqResp(config, node, peerScoring, createLogger(`${logger.module}:reqresp`));
728
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));
729
732
  // Configure application-specific scoring for gossipsub.
730
733
  // The weight scales app score to align with gossipsub thresholds:
731
734
  // - Disconnect (-50) × 10 = -500 = gossipThreshold (stops receiving gossip)
@@ -733,7 +736,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
733
736
  // Note: positive topic scores can offset penalties, so alignment is best-effort.
734
737
  node.services.pubsub.score.params.appSpecificWeight = APP_SPECIFIC_WEIGHT;
735
738
  node.services.pubsub.score.params.appSpecificScore = (peerId)=>peerManager.shouldDisableP2PGossip(peerId) ? -Infinity : peerManager.getPeerScore(peerId);
736
- return new LibP2PService(clientType, config, node, peerDiscoveryService, reqresp, peerManager, mempools, l2BlockSource, epochCache, proofVerifier, worldStateSynchronizer, telemetry, logger);
739
+ return new LibP2PService(config, node, peerDiscoveryService, reqresp, peerManager, mempools, l2BlockSource, epochCache, proofVerifier, worldStateSynchronizer, telemetry, logger);
737
740
  }
738
741
  /**
739
742
  * Starts the LibP2P service.
@@ -752,13 +755,11 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
752
755
  // Create request response protocol handlers
753
756
  const txHandler = reqRespTxHandler(this.mempools);
754
757
  const goodbyeHandler = reqGoodbyeHandler(this.peerManager);
755
- const blockHandler = reqRespBlockHandler(this.archiver);
756
758
  const statusHandler = reqRespStatusHandler(this.protocolVersion, this.worldStateSynchronizer, this.logger);
757
759
  const requestResponseHandlers = {
758
760
  [ReqRespSubProtocol.PING]: pingHandler,
759
761
  [ReqRespSubProtocol.STATUS]: statusHandler.bind(this),
760
- [ReqRespSubProtocol.GOODBYE]: goodbyeHandler.bind(this),
761
- [ReqRespSubProtocol.BLOCK]: blockHandler.bind(this)
762
+ [ReqRespSubProtocol.GOODBYE]: goodbyeHandler.bind(this)
762
763
  };
763
764
  if (!this.config.disableTransactions) {
764
765
  const blockTxsHandler = reqRespBlockTxsHandler(this.mempools.attestationPool, this.archiver, this.mempools.txPool);
@@ -771,14 +772,13 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
771
772
  const reqrespSubProtocolValidators = {
772
773
  ...DEFAULT_SUB_PROTOCOL_VALIDATORS,
773
774
  [ReqRespSubProtocol.TX]: this.validateRequestedTxs.bind(this),
774
- [ReqRespSubProtocol.BLOCK_TXS]: this.validateRequestedBlockTxs.bind(this),
775
- [ReqRespSubProtocol.BLOCK]: this.validateRequestedBlock.bind(this)
775
+ [ReqRespSubProtocol.BLOCK_TXS]: this.validateRequestedBlockTxs.bind(this)
776
776
  };
777
777
  await this.peerManager.initializePeers();
778
778
  await this.reqresp.start(requestResponseHandlers, reqrespSubProtocolValidators);
779
779
  await this.node.start();
780
780
  // Subscribe to standard GossipSub topics by default
781
- for (const topic of getTopicsForClientAndConfig(this.clientType, this.config.disableTransactions)){
781
+ for (const topic of getTopicsForConfig(this.config.disableTransactions)){
782
782
  this.subscribeToTopic(this.topicStrings[topic]);
783
783
  }
784
784
  // add GossipSub listener
@@ -860,8 +860,14 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
860
860
  registerBlockReceivedCallback(callback) {
861
861
  this.blockReceivedCallback = callback;
862
862
  }
863
- registerCheckpointReceivedCallback(callback) {
864
- 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);
865
871
  }
866
872
  /**
867
873
  * Registers a callback to be invoked when a duplicate proposal is detected.
@@ -927,6 +933,12 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
927
933
  if (!validator || !validator.addMessage(msgId)) {
928
934
  this.instrumentation.incMessagePrevalidationStatus(false, topicType);
929
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
+ }
930
942
  return {
931
943
  result: false,
932
944
  topicType
@@ -987,9 +999,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
987
999
  if (msg.topic === this.topicStrings[TopicType.tx]) {
988
1000
  await this.handleGossipedTx(p2pMessage.payload, msgId, source);
989
1001
  } else if (msg.topic === this.topicStrings[TopicType.checkpoint_attestation]) {
990
- if (this.clientType === P2PClientType.Full) {
991
- await this.processCheckpointAttestationFromPeer(p2pMessage.payload, msgId, source);
992
- }
1002
+ await this.processCheckpointAttestationFromPeer(p2pMessage.payload, msgId, source);
993
1003
  } else if (msg.topic === this.topicStrings[TopicType.block_proposal]) {
994
1004
  await this.processBlockFromPeer(p2pMessage.payload, msgId, source);
995
1005
  } else if (msg.topic === this.topicStrings[TopicType.checkpoint_proposal]) {
@@ -1034,29 +1044,67 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1034
1044
  return;
1035
1045
  }
1036
1046
  async validateReceivedMessage(validationFunc, msgId, source, topicType) {
1047
+ // Default to reject result with a penalty if validation function throws an error
1037
1048
  let resultAndObj = {
1038
- result: TopicValidatorResult.Reject
1049
+ result: TopicValidatorResult.Reject,
1050
+ severity: PeerErrorSeverity.MidToleranceError
1039
1051
  };
1040
1052
  const timer = new Timer();
1041
1053
  try {
1042
1054
  resultAndObj = await validationFunc();
1043
1055
  } catch (err) {
1044
- this.peerManager.penalizePeer(source, PeerErrorSeverity.LowToleranceError);
1045
- this.logger.error(`Error deserializing and validating gossipsub message`, err, {
1056
+ this.logger.error(`Error validating gossipsub message`, err, {
1046
1057
  msgId,
1047
1058
  source: source.toString(),
1048
1059
  topicType
1049
1060
  });
1050
1061
  }
1051
1062
  if (resultAndObj.result === TopicValidatorResult.Accept) {
1063
+ this.logger.debug(`Message ${topicType} accepted by validator`, {
1064
+ msgId,
1065
+ source: source.toString(),
1066
+ topicType
1067
+ });
1052
1068
  this.instrumentation.recordMessageValidation(topicType, timer);
1069
+ } else if (resultAndObj.result === TopicValidatorResult.Reject) {
1070
+ this.logger.warn(`Message ${topicType} rejected by validator with severity ${resultAndObj.severity}`, {
1071
+ msgId,
1072
+ source: source.toString(),
1073
+ topicType,
1074
+ severity: resultAndObj.severity
1075
+ });
1076
+ this.peerManager.penalizePeer(source, resultAndObj.severity);
1077
+ } else {
1078
+ this.logger.trace(`Message ${topicType} ignored by validator`, {
1079
+ msgId,
1080
+ source: source.toString(),
1081
+ topicType
1082
+ });
1053
1083
  }
1054
1084
  this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), resultAndObj.result);
1055
1085
  return resultAndObj;
1056
1086
  }
1087
+ tryDeserialize(deserializeFunc, msgId, source) {
1088
+ try {
1089
+ return deserializeFunc();
1090
+ } catch (err) {
1091
+ this.logger.warn(`Failed to deserialize gossipsub message from buffer`, {
1092
+ err,
1093
+ msgId,
1094
+ source: source.toString()
1095
+ });
1096
+ return undefined;
1097
+ }
1098
+ }
1057
1099
  async handleGossipedTx(payloadData, msgId, source) {
1058
1100
  const validationFunc = async ()=>{
1059
- const tx = Tx.fromBuffer(payloadData);
1101
+ const tx = this.tryDeserialize(()=>Tx.fromBuffer(payloadData), msgId, source);
1102
+ if (!tx) {
1103
+ return {
1104
+ result: TopicValidatorResult.Reject,
1105
+ severity: PeerErrorSeverity.LowToleranceError
1106
+ };
1107
+ }
1060
1108
  const currentBlockNumber = await this.archiver.getBlockNumber();
1061
1109
  const { ts: nextSlotTimestamp } = this.epochCache.getEpochAndSlotInNextL1Slot();
1062
1110
  // Stage 1: fast validators (metadata, data, timestamps, double-spend, gas, phases, block header)
@@ -1072,14 +1120,22 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1072
1120
  const txBlockNumber = BlockNumber(currentBlockNumber + 1);
1073
1121
  severity = await this.handleDoubleSpendFailure(tx, txBlockNumber);
1074
1122
  }
1075
- this.peerManager.penalizePeer(source, severity);
1123
+ this.logger.verbose(`Rejecting gossiped tx ${tx.getTxHash().toString()}: stage 1 validation failed`, {
1124
+ validator: name,
1125
+ severity,
1126
+ source: source.toString()
1127
+ });
1076
1128
  return {
1077
- result: TopicValidatorResult.Reject
1129
+ result: TopicValidatorResult.Reject,
1130
+ severity
1078
1131
  };
1079
1132
  }
1080
1133
  // Pool pre-check: see if the pool would accept this tx before doing expensive proof verification
1081
1134
  const canAdd = await this.mempools.txPool.canAddPendingTx(tx);
1082
1135
  if (canAdd === 'ignored') {
1136
+ this.logger.verbose(`Ignoring gossiped tx ${tx.getTxHash().toString()}: pool pre-check returned ignored`, {
1137
+ source: source.toString()
1138
+ });
1083
1139
  return {
1084
1140
  result: TopicValidatorResult.Ignore,
1085
1141
  obj: tx
@@ -1089,10 +1145,15 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1089
1145
  const secondStageValidators = this.createSecondStageMessageValidators();
1090
1146
  const secondStageOutcome = await this.runValidations(tx, secondStageValidators);
1091
1147
  if (!secondStageOutcome.allPassed) {
1092
- const { severity } = secondStageOutcome.failure;
1093
- this.peerManager.penalizePeer(source, severity);
1148
+ const { severity, name } = secondStageOutcome.failure;
1149
+ this.logger.verbose(`Rejecting gossiped tx ${tx.getTxHash().toString()}: stage 2 validation failed`, {
1150
+ validator: name,
1151
+ severity,
1152
+ source: source.toString()
1153
+ });
1094
1154
  return {
1095
- result: TopicValidatorResult.Reject
1155
+ result: TopicValidatorResult.Reject,
1156
+ severity
1096
1157
  };
1097
1158
  }
1098
1159
  // Pool add: persist the tx
@@ -1104,7 +1165,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1104
1165
  });
1105
1166
  const wasAccepted = addResult.accepted.some((h)=>h.equals(txHash));
1106
1167
  const wasIgnored = addResult.ignored.some((h)=>h.equals(txHash));
1107
- this.logger.trace(`Validate propagated tx`, {
1168
+ this.logger.verbose(`Validate propagated tx ${txHash.toString()}`, {
1108
1169
  wasAccepted,
1109
1170
  wasIgnored,
1110
1171
  [Attributes.P2P_ID]: source.toString()
@@ -1120,8 +1181,13 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1120
1181
  obj: tx
1121
1182
  };
1122
1183
  } else {
1184
+ this.logger.warn(`Gossiped tx ${txHash.toString()} unexpectedly rejected by pool`, {
1185
+ source: source.toString(),
1186
+ txHash: txHash.toString()
1187
+ });
1123
1188
  return {
1124
- result: TopicValidatorResult.Reject
1189
+ result: TopicValidatorResult.Reject,
1190
+ severity: PeerErrorSeverity.HighToleranceError
1125
1191
  };
1126
1192
  }
1127
1193
  };
@@ -1142,7 +1208,16 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1142
1208
  * Process a checkpoint attestation from a peer.
1143
1209
  * Validates the attestation and adds it to the pool.
1144
1210
  */ async processCheckpointAttestationFromPeer(payloadData, msgId, source) {
1145
- const { result, obj: attestation } = await this.validateReceivedMessage(()=>this.validateAndStoreCheckpointAttestation(source, CheckpointAttestation.fromBuffer(payloadData)), msgId, source, TopicType.checkpoint_attestation);
1211
+ const { result, obj: attestation } = await this.validateReceivedMessage(()=>{
1212
+ const attestation = this.tryDeserialize(()=>CheckpointAttestation.fromBuffer(payloadData), msgId, source);
1213
+ if (!attestation) {
1214
+ return Promise.resolve({
1215
+ result: TopicValidatorResult.Reject,
1216
+ severity: PeerErrorSeverity.LowToleranceError
1217
+ });
1218
+ }
1219
+ return this.validateAndStoreCheckpointAttestation(source, attestation);
1220
+ }, msgId, source, TopicType.checkpoint_attestation);
1146
1221
  if (result !== TopicValidatorResult.Accept || !attestation) {
1147
1222
  return;
1148
1223
  }
@@ -1157,9 +1232,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1157
1232
  const validationResult = await this.checkpointAttestationValidator.validate(attestation);
1158
1233
  if (validationResult.result === 'reject') {
1159
1234
  this.logger.warn(`Penalizing peer ${peerId} for checkpoint attestation validation failure`);
1160
- this.peerManager.penalizePeer(peerId, validationResult.severity);
1161
1235
  return {
1162
- result: TopicValidatorResult.Reject
1236
+ result: TopicValidatorResult.Reject,
1237
+ severity: validationResult.severity
1163
1238
  };
1164
1239
  }
1165
1240
  if (validationResult.result === 'ignore') {
@@ -1186,9 +1261,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1186
1261
  obj: attestation
1187
1262
  };
1188
1263
  }
1189
- // Could not add (cap reached for signer), no need to re-broadcast
1264
+ // Could not add (cap reached for signer), penalize and do not re-broadcast
1190
1265
  if (!added) {
1191
- this.logger.warn(`Dropping checkpoint attestation due to cap`, {
1266
+ this.logger.warn(`Rejecting checkpoint attestation due to cap`, {
1192
1267
  slot: slot.toString(),
1193
1268
  archive: attestation.archive.toString(),
1194
1269
  source: peerId.toString(),
@@ -1196,8 +1271,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1196
1271
  count
1197
1272
  });
1198
1273
  return {
1199
- result: TopicValidatorResult.Ignore,
1200
- obj: attestation
1274
+ result: TopicValidatorResult.Reject,
1275
+ severity: PeerErrorSeverity.HighToleranceError
1201
1276
  };
1202
1277
  }
1203
1278
  // Check if this is a duplicate attestation (signer attested to a different proposal at the same slot)
@@ -1235,9 +1310,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1235
1310
  const validationResult = await this.blockProposalValidator.validate(block);
1236
1311
  if (validationResult.result === 'reject') {
1237
1312
  this.logger.warn(`Penalizing peer ${peerId} for block proposal validation failure`);
1238
- this.peerManager.penalizePeer(peerId, validationResult.severity);
1239
1313
  return {
1240
- result: TopicValidatorResult.Reject
1314
+ result: TopicValidatorResult.Reject,
1315
+ severity: validationResult.severity
1241
1316
  };
1242
1317
  }
1243
1318
  if (validationResult.result === 'ignore') {
@@ -1267,7 +1342,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1267
1342
  }
1268
1343
  // Too many blocks received for this slot and index, penalize peer and do not re-broadcast
1269
1344
  if (!added) {
1270
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError);
1271
1345
  this.logger.warn(`Penalizing peer for block proposal exceeding per-position cap`, {
1272
1346
  ...block.toBlockInfo(),
1273
1347
  indexWithinCheckpoint: block.indexWithinCheckpoint,
@@ -1279,7 +1353,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1279
1353
  result: TopicValidatorResult.Reject,
1280
1354
  metadata: {
1281
1355
  isEquivocated
1282
- }
1356
+ },
1357
+ severity: PeerErrorSeverity.HighToleranceError
1283
1358
  };
1284
1359
  }
1285
1360
  // If this was a duplicate proposal, do not process it, but do invoke the duplicate callback,
@@ -1328,7 +1403,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1328
1403
  // Note: Validators do NOT attest to individual blocks, only to checkpoint proposals.
1329
1404
  const isValid = await this.blockReceivedCallback(block, sender);
1330
1405
  if (!isValid) {
1331
- this.logger.warn(`Block proposal validation failed for block ${block.blockNumber}`, block.toBlockInfo());
1406
+ this.logger.info(`Block proposal validation failed for block ${block.blockNumber}`, block.toBlockInfo());
1332
1407
  }
1333
1408
  }
1334
1409
  /**
@@ -1353,9 +1428,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1353
1428
  const validationResult = await this.checkpointProposalValidator.validate(checkpoint);
1354
1429
  if (validationResult.result === 'reject') {
1355
1430
  this.logger.warn(`Penalizing peer ${peerId} for checkpoint proposal validation failure`);
1356
- this.peerManager.penalizePeer(peerId, validationResult.severity);
1357
1431
  return {
1358
- result: TopicValidatorResult.Reject
1432
+ result: TopicValidatorResult.Reject,
1433
+ severity: validationResult.severity
1359
1434
  };
1360
1435
  }
1361
1436
  if (validationResult.result === 'ignore') {
@@ -1372,18 +1447,20 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1372
1447
  [Attributes.SLOT_NUMBER]: checkpoint.slotNumber.toString(),
1373
1448
  [Attributes.P2P_ID]: peerId.toString()
1374
1449
  });
1375
- const { result, obj, metadata: { isEquivocated } = {} } = await this.validateAndStoreBlockProposal(peerId, blockProposal);
1376
- if (result === TopicValidatorResult.Reject || !obj || isEquivocated) {
1450
+ const blockProposalResult = await this.validateAndStoreBlockProposal(peerId, blockProposal);
1451
+ const { obj, metadata: { isEquivocated } = {} } = blockProposalResult;
1452
+ if (blockProposalResult.result === TopicValidatorResult.Reject || !obj || isEquivocated) {
1377
1453
  this.logger.debug(`Rejecting checkpoint due to invalid last block proposal`, {
1378
1454
  [Attributes.SLOT_NUMBER]: checkpoint.slotNumber.toString(),
1379
1455
  [Attributes.P2P_ID]: peerId.toString(),
1380
1456
  isEquivocated,
1381
- result
1457
+ result: blockProposalResult.result
1382
1458
  });
1383
1459
  return {
1384
- result: TopicValidatorResult.Reject
1460
+ result: TopicValidatorResult.Reject,
1461
+ severity: 'severity' in blockProposalResult ? blockProposalResult.severity : PeerErrorSeverity.MidToleranceError
1385
1462
  };
1386
- } else if (result === TopicValidatorResult.Accept && obj && !isEquivocated) {
1463
+ } else if (blockProposalResult.result === TopicValidatorResult.Accept && obj && !isEquivocated) {
1387
1464
  processBlock = true;
1388
1465
  }
1389
1466
  }
@@ -1410,7 +1487,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1410
1487
  // Too many checkpoint proposals received for this slot, penalize peer and do not re-broadcast
1411
1488
  // Note: We still return the checkpoint obj so the lastBlock can be processed if valid
1412
1489
  if (!added) {
1413
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError);
1414
1490
  this.logger.warn(`Penalizing peer for checkpoint proposal exceeding per-slot cap`, {
1415
1491
  ...checkpoint.toCheckpointInfo(),
1416
1492
  count,
@@ -1422,7 +1498,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1422
1498
  metadata: {
1423
1499
  isEquivocated,
1424
1500
  processBlock
1425
- }
1501
+ },
1502
+ severity: PeerErrorSeverity.HighToleranceError
1426
1503
  };
1427
1504
  }
1428
1505
  // If this was a duplicate proposal, do not process it, but do invoke the duplicate callback,
@@ -1472,9 +1549,10 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1472
1549
  archive: checkpoint.archive.toString(),
1473
1550
  source: sender.toString()
1474
1551
  });
1552
+ await this.allNodesCheckpointReceivedCallback(checkpoint, sender);
1475
1553
  // Call the checkpoint received callback with the core version (without lastBlock)
1476
1554
  // to validate and potentially generate attestations
1477
- const attestations = await this.checkpointReceivedCallback(checkpoint, sender);
1555
+ const attestations = await this.validatorCheckpointReceivedCallback(checkpoint, sender);
1478
1556
  if (attestations && attestations.length > 0) {
1479
1557
  // If the callback returned attestations, add them to the pool and propagate them
1480
1558
  await this.mempools.attestationPool.addOwnCheckpointAttestations(attestations);
@@ -1594,45 +1672,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1594
1672
  return false;
1595
1673
  }
1596
1674
  }
1597
- /**
1598
- * Validates a BLOCK response.
1599
- *
1600
- * If a local copy exists, enforces hash equality. If missing, rejects (no penalty) since the hash cannot be verified.
1601
- * Penalizes on block number mismatch or hash mismatch.
1602
- *
1603
- * @param requestedBlockNumber - The requested block number.
1604
- * @param responseBlock - The block returned by the peer.
1605
- * @param peerId - The peer that returned the block.
1606
- * @returns True if the response is valid, false otherwise.
1607
- */ async validateRequestedBlock(requestedBlockNumber, responseBlock, peerId) {
1608
- try {
1609
- const reqNum = Number(requestedBlockNumber.toString());
1610
- if (responseBlock.number !== reqNum) {
1611
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.LowToleranceError);
1612
- return false;
1613
- }
1614
- const local = await this.archiver.getBlock(BlockNumber(reqNum));
1615
- if (!local) {
1616
- // We are missing the local block; we cannot verify the hash yet. Reject without penalizing.
1617
- // TODO: Consider extending this validator to accept an expected hash or
1618
- // performing quorum-based checks when using P2P syncing prior to L1 sync.
1619
- this.logger.warn(`Local block ${reqNum} not found; rejecting BLOCK response without hash verification`);
1620
- return false;
1621
- }
1622
- const [localHash, respHash] = await Promise.all([
1623
- local.hash(),
1624
- responseBlock.hash()
1625
- ]);
1626
- if (!localHash.equals(respHash)) {
1627
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError);
1628
- return false;
1629
- }
1630
- return true;
1631
- } catch (e) {
1632
- this.logger.warn(`Error validating requested block`, e);
1633
- return false;
1634
- }
1635
- }
1636
1675
  async validateRequestedTx(tx, peerId, txValidator, requested) {
1637
1676
  const penalize = (severity)=>this.peerManager.penalizePeer(peerId, severity);
1638
1677
  if (requested && !requested.has(tx.getTxHash().toString())) {
@@ -1692,9 +1731,17 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1692
1731
  }
1693
1732
  /** Creates the first stage (fast) validators for gossiped transactions. */ async createFirstStageMessageValidators(currentBlockNumber, nextSlotTimestamp) {
1694
1733
  const gasFees = await this.getGasFees(currentBlockNumber);
1695
- const allowedInSetup = this.config.txPublicSetupAllowList ?? await getDefaultAllowedSetupFunctions();
1734
+ const allowedInSetup = [
1735
+ ...await getDefaultAllowedSetupFunctions(),
1736
+ ...this.config.txPublicSetupAllowListExtend ?? []
1737
+ ];
1696
1738
  const blockNumber = BlockNumber(currentBlockNumber + 1);
1697
- return createFirstStageTxValidationsForGossipedTransactions(nextSlotTimestamp, blockNumber, this.worldStateSynchronizer, gasFees, this.config.l1ChainId, this.config.rollupVersion, protocolContractsHash, this.archiver, !this.config.disableTransactions, allowedInSetup, this.logger.getBindings());
1739
+ const l1Constants = await this.archiver.getL1Constants();
1740
+ return createFirstStageTxValidationsForGossipedTransactions(nextSlotTimestamp, blockNumber, this.worldStateSynchronizer, gasFees, this.config.l1ChainId, this.config.rollupVersion, protocolContractsHash, this.archiver, !this.config.disableTransactions, allowedInSetup, this.logger.getBindings(), {
1741
+ rollupManaLimit: l1Constants.rollupManaLimit,
1742
+ maxBlockL2Gas: this.config.validateMaxL2BlockGas,
1743
+ maxBlockDAGas: this.config.validateMaxDABlockGas
1744
+ });
1698
1745
  }
1699
1746
  /** Creates the second stage (expensive proof verification) validators for gossiped transactions. */ createSecondStageMessageValidators() {
1700
1747
  return createSecondStageTxValidationsForGossipedTransactions(this.proofVerifier, this.logger.getBindings());
@@ -1715,8 +1762,10 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1715
1762
  });
1716
1763
  // A promise that resolves when all validations have been run
1717
1764
  const allValidations = await Promise.all(validationPromises);
1718
- const failed = allValidations.find((x)=>!x.isValid);
1719
- if (failed) {
1765
+ const failures = allValidations.filter((x)=>!x.isValid);
1766
+ if (failures.length > 0) {
1767
+ // Pick the most severe failure (lowest tolerance = harshest penalty)
1768
+ const failed = maxBy(failures, (f)=>PeerErrorSeverityByHarshness.indexOf(f.severity));
1720
1769
  return {
1721
1770
  allPassed: false,
1722
1771
  failure: {
@@ -1763,19 +1812,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1763
1812
  }
1764
1813
  return PeerErrorSeverity.HighToleranceError;
1765
1814
  }
1766
- /**
1767
- * Validate a checkpoint attestation.
1768
- *
1769
- * @param attestation - The checkpoint attestation to validate.
1770
- * @returns True if the checkpoint attestation is valid, false otherwise.
1771
- */ async validateCheckpointAttestation(peerId, attestation) {
1772
- const result = await this.checkpointAttestationValidator.validate(attestation);
1773
- if (result.result === 'reject') {
1774
- this.logger.warn(`Penalizing peer ${peerId} for checkpoint attestation validation failure`);
1775
- this.peerManager.penalizePeer(peerId, result.severity);
1776
- }
1777
- return result;
1778
- }
1779
1815
  getPeerScore(peerId) {
1780
1816
  return this.node.services.pubsub.score.score(peerId.toString());
1781
1817
  }