@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
@@ -1,12 +1,12 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
2
  import { BlockNumber, type SlotNumber } from '@aztec/foundation/branded-types';
3
- import { Fr } from '@aztec/foundation/curves/bn254';
3
+ import { maxBy } from '@aztec/foundation/collection';
4
4
  import { type Logger, createLibp2pComponentLogger, createLogger } from '@aztec/foundation/log';
5
5
  import { RunningPromise } from '@aztec/foundation/running-promise';
6
6
  import { Timer } from '@aztec/foundation/timer';
7
7
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
8
8
  import { protocolContractsHash } from '@aztec/protocol-contracts';
9
- import type { EthAddress, L2Block, L2BlockSource } from '@aztec/stdlib/block';
9
+ import type { EthAddress, L2BlockSource } from '@aztec/stdlib/block';
10
10
  import type { ContractDataSource } from '@aztec/stdlib/contract';
11
11
  import { GasFees } from '@aztec/stdlib/gas';
12
12
  import type { ClientProtocolCircuitVerifier, PeerInfo, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
@@ -16,13 +16,12 @@ import {
16
16
  CheckpointProposal,
17
17
  type CheckpointProposalCore,
18
18
  type Gossipable,
19
- P2PClientType,
20
19
  P2PMessage,
21
- type ValidationResult as P2PValidationResult,
22
20
  PeerErrorSeverity,
21
+ PeerErrorSeverityByHarshness,
23
22
  TopicType,
24
23
  createTopicString,
25
- getTopicsForClientAndConfig,
24
+ getTopicsForConfig,
26
25
  metricsTopicStrToLabels,
27
26
  } from '@aztec/stdlib/p2p';
28
27
  import { MerkleTreeId } from '@aztec/stdlib/trees';
@@ -58,6 +57,7 @@ import { ENR } from '@nethermindeth/enr';
58
57
  import { createLibp2p } from 'libp2p';
59
58
 
60
59
  import type { P2PConfig } from '../../config.js';
60
+ import { CheckpointProposalReceivedCallbackNotRegisteredError } from '../../errors/p2p-service.error.js';
61
61
  import type { MemPools } from '../../mem_pools/interface.js';
62
62
  import {
63
63
  BlockProposalValidator,
@@ -104,7 +104,6 @@ import {
104
104
  ValidationError,
105
105
  pingHandler,
106
106
  reqGoodbyeHandler,
107
- reqRespBlockHandler,
108
107
  reqRespBlockTxsHandler,
109
108
  reqRespStatusHandler,
110
109
  reqRespTxHandler,
@@ -130,12 +129,12 @@ type ValidationOutcome = { allPassed: true } | { allPassed: false; failure: Vali
130
129
  // REFACTOR: Unify with the type above
131
130
  type ReceivedMessageValidationResult<T, M = undefined> =
132
131
  | { obj: T; result: Exclude<TopicValidatorResult, TopicValidatorResult.Reject>; metadata?: M }
133
- | { obj?: T; result: TopicValidatorResult.Reject; metadata?: M };
132
+ | { obj?: T; result: TopicValidatorResult.Reject; metadata?: M; severity: PeerErrorSeverity };
134
133
 
135
134
  /**
136
135
  * Lib P2P implementation of the P2PService interface.
137
136
  */
138
- export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends WithTracer implements P2PService {
137
+ export class LibP2PService extends WithTracer implements P2PService {
139
138
  private discoveryRunningPromise?: RunningPromise;
140
139
  private msgIdSeenValidators: Record<TopicType, MessageSeenValidator> = {} as Record<TopicType, MessageSeenValidator>;
141
140
 
@@ -171,7 +170,13 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
171
170
  * @param checkpoint - The checkpoint proposal received from the peer.
172
171
  * @returns The attestations for the checkpoint, if any.
173
172
  */
174
- private checkpointReceivedCallback: P2PCheckpointReceivedCallback;
173
+ private allNodesCheckpointReceivedCallback: P2PCheckpointReceivedCallback;
174
+ /**
175
+ * Callback for when a checkpoint proposal is received - specifically for validators - from a peer.
176
+ * @param checkpoint - The checkpoint proposal received from the peer.
177
+ * @returns The attestations for the checkpoint, if any.
178
+ */
179
+ private validatorCheckpointReceivedCallback: P2PCheckpointReceivedCallback;
175
180
 
176
181
  private gossipSubEventHandler: (e: CustomEvent<GossipsubMessage>) => void;
177
182
 
@@ -182,7 +187,6 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
182
187
  protected logger: Logger;
183
188
 
184
189
  constructor(
185
- private clientType: T,
186
190
  private config: P2PConfig,
187
191
  protected node: PubSubLibp2p,
188
192
  private peerDiscoveryService: PeerDiscoveryService,
@@ -224,30 +228,39 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
224
228
  this.protocolVersion,
225
229
  );
226
230
 
227
- this.blockProposalValidator = new BlockProposalValidator(epochCache, { txsPermitted: !config.disableTransactions });
228
- this.checkpointProposalValidator = new CheckpointProposalValidator(epochCache, {
231
+ const p2pPropagationTime = config.attestationPropagationTime;
232
+ const proposalValidatorOpts = {
229
233
  txsPermitted: !config.disableTransactions,
230
- });
234
+ maxTxsPerBlock: config.validateMaxTxsPerBlock ?? config.validateMaxTxsPerCheckpoint,
235
+ p2pPropagationTime,
236
+ };
237
+ this.blockProposalValidator = new BlockProposalValidator(epochCache, proposalValidatorOpts);
238
+ this.checkpointProposalValidator = new CheckpointProposalValidator(epochCache, proposalValidatorOpts);
231
239
  this.checkpointAttestationValidator = config.fishermanMode
232
- ? new FishermanAttestationValidator(epochCache, mempools.attestationPool, telemetry)
233
- : new CheckpointAttestationValidator(epochCache);
240
+ ? new FishermanAttestationValidator(epochCache, mempools.attestationPool, telemetry, {
241
+ l1PublishingTime: config.l1PublishingTime,
242
+ })
243
+ : new CheckpointAttestationValidator(epochCache, { l1PublishingTime: config.l1PublishingTime });
234
244
 
235
245
  this.gossipSubEventHandler = this.handleGossipSubEvent.bind(this);
236
246
 
237
247
  this.blockReceivedCallback = async (block: BlockProposal): Promise<boolean> => {
238
- this.logger.debug(
239
- `Handler not yet registered: Block received callback not set. Received block for slot ${block.slotNumber} from peer.`,
248
+ this.logger.warn(
249
+ `Handler for block received not yet registered on P2P service. Received block ${block.blockNumber} for slot ${block.slotNumber} from peer.`,
240
250
  { p2pMessageIdentifier: await block.p2pMessageLoggingIdentifier() },
241
251
  );
242
- return false;
252
+ return true;
243
253
  };
244
254
 
245
- this.checkpointReceivedCallback = (
246
- checkpoint: CheckpointProposalCore,
255
+ this.allNodesCheckpointReceivedCallback = (
256
+ _checkpoint: CheckpointProposalCore,
257
+ ): Promise<CheckpointAttestation[] | undefined> => {
258
+ throw new CheckpointProposalReceivedCallbackNotRegisteredError();
259
+ };
260
+
261
+ this.validatorCheckpointReceivedCallback = (
262
+ _checkpoint: CheckpointProposalCore,
247
263
  ): Promise<CheckpointAttestation[] | undefined> => {
248
- this.logger.debug(
249
- `Handler not yet registered: Checkpoint received callback not set. Received checkpoint for slot ${checkpoint.slotNumber} from peer.`,
250
- );
251
264
  return Promise.resolve(undefined);
252
265
  };
253
266
  }
@@ -262,8 +275,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
262
275
  * @param txPool - The transaction pool to be accessed by the service.
263
276
  * @returns The new service.
264
277
  */
265
- public static async new<T extends P2PClientType>(
266
- clientType: T,
278
+ public static async new(
267
279
  config: P2PConfig,
268
280
  peerId: PeerId,
269
281
  deps: {
@@ -338,9 +350,12 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
338
350
  const l1Constants = epochCache.getL1Constants();
339
351
  const topicScoreParams = createAllTopicScoreParams(protocolVersion, {
340
352
  slotDurationMs: l1Constants.slotDuration * 1000,
353
+ ethereumSlotDuration: l1Constants.ethereumSlotDuration,
341
354
  heartbeatIntervalMs: config.gossipsubInterval,
342
355
  targetCommitteeSize: l1Constants.targetCommitteeSize,
343
356
  blockDurationMs: config.blockDurationMs,
357
+ l1PublishingTime: config.l1PublishingTime,
358
+ p2pPropagationTime: config.attestationPropagationTime,
344
359
  expectedBlockProposalsPerSlot: config.expectedBlockProposalsPerSlot,
345
360
  });
346
361
 
@@ -465,6 +480,9 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
465
480
  epochCache,
466
481
  );
467
482
 
483
+ // Gate req/resp data protocols for unauthenticated peers when p2pAllowOnlyValidators is enabled
484
+ reqresp.setShouldRejectPeer(peerId => peerManager.shouldDisableP2PGossip(peerId));
485
+
468
486
  // Configure application-specific scoring for gossipsub.
469
487
  // The weight scales app score to align with gossipsub thresholds:
470
488
  // - Disconnect (-50) × 10 = -500 = gossipThreshold (stops receiving gossip)
@@ -475,7 +493,6 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
475
493
  peerManager.shouldDisableP2PGossip(peerId) ? -Infinity : peerManager.getPeerScore(peerId);
476
494
 
477
495
  return new LibP2PService(
478
- clientType,
479
496
  config,
480
497
  node,
481
498
  peerDiscoveryService,
@@ -511,14 +528,12 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
511
528
  // Create request response protocol handlers
512
529
  const txHandler = reqRespTxHandler(this.mempools);
513
530
  const goodbyeHandler = reqGoodbyeHandler(this.peerManager);
514
- const blockHandler = reqRespBlockHandler(this.archiver);
515
531
  const statusHandler = reqRespStatusHandler(this.protocolVersion, this.worldStateSynchronizer, this.logger);
516
532
 
517
533
  const requestResponseHandlers: Partial<ReqRespSubProtocolHandlers> = {
518
534
  [ReqRespSubProtocol.PING]: pingHandler,
519
535
  [ReqRespSubProtocol.STATUS]: statusHandler.bind(this),
520
536
  [ReqRespSubProtocol.GOODBYE]: goodbyeHandler.bind(this),
521
- [ReqRespSubProtocol.BLOCK]: blockHandler.bind(this),
522
537
  };
523
538
 
524
539
  if (!this.config.disableTransactions) {
@@ -539,7 +554,6 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
539
554
  ...DEFAULT_SUB_PROTOCOL_VALIDATORS,
540
555
  [ReqRespSubProtocol.TX]: this.validateRequestedTxs.bind(this),
541
556
  [ReqRespSubProtocol.BLOCK_TXS]: this.validateRequestedBlockTxs.bind(this),
542
- [ReqRespSubProtocol.BLOCK]: this.validateRequestedBlock.bind(this),
543
557
  };
544
558
 
545
559
  await this.peerManager.initializePeers();
@@ -549,7 +563,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
549
563
  await this.node.start();
550
564
 
551
565
  // Subscribe to standard GossipSub topics by default
552
- for (const topic of getTopicsForClientAndConfig(this.clientType, this.config.disableTransactions)) {
566
+ for (const topic of getTopicsForConfig(this.config.disableTransactions)) {
553
567
  this.subscribeToTopic(this.topicStrings[topic]);
554
568
  }
555
569
 
@@ -667,8 +681,16 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
667
681
  this.blockReceivedCallback = callback;
668
682
  }
669
683
 
670
- public registerCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback) {
671
- this.checkpointReceivedCallback = callback;
684
+ public registerValidatorCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback) {
685
+ this.validatorCheckpointReceivedCallback = callback;
686
+ }
687
+
688
+ public registerAllNodesCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback) {
689
+ this.allNodesCheckpointReceivedCallback = callback;
690
+ }
691
+
692
+ public async notifyOwnCheckpointProposal(checkpoint: CheckpointProposalCore): Promise<void> {
693
+ await this.allNodesCheckpointReceivedCallback(checkpoint, this.node.peerId);
672
694
  }
673
695
 
674
696
  /**
@@ -754,6 +776,9 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
754
776
  if (!validator || !validator.addMessage(msgId)) {
755
777
  this.instrumentation.incMessagePrevalidationStatus(false, topicType);
756
778
  this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), TopicValidatorResult.Ignore);
779
+ if (topicType === TopicType.tx) {
780
+ this.logger.verbose(`Ignoring already-seen tx gossip message`, { msgId, source: source.toString() });
781
+ }
757
782
  return { result: false, topicType };
758
783
  }
759
784
 
@@ -818,9 +843,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
818
843
  if (msg.topic === this.topicStrings[TopicType.tx]) {
819
844
  await this.handleGossipedTx(p2pMessage.payload, msgId, source);
820
845
  } else if (msg.topic === this.topicStrings[TopicType.checkpoint_attestation]) {
821
- if (this.clientType === P2PClientType.Full) {
822
- await this.processCheckpointAttestationFromPeer(p2pMessage.payload, msgId, source);
823
- }
846
+ await this.processCheckpointAttestationFromPeer(p2pMessage.payload, msgId, source);
824
847
  } else if (msg.topic === this.topicStrings[TopicType.block_proposal]) {
825
848
  await this.processBlockFromPeer(p2pMessage.payload, msgId, source);
826
849
  } else if (msg.topic === this.topicStrings[TopicType.checkpoint_proposal]) {
@@ -882,30 +905,56 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
882
905
  source: PeerId,
883
906
  topicType: TopicType,
884
907
  ): Promise<ReceivedMessageValidationResult<T, M>> {
885
- let resultAndObj: ReceivedMessageValidationResult<T, M> = { result: TopicValidatorResult.Reject };
908
+ // Default to reject result with a penalty if validation function throws an error
909
+ let resultAndObj: ReceivedMessageValidationResult<T, M> = {
910
+ result: TopicValidatorResult.Reject,
911
+ severity: PeerErrorSeverity.MidToleranceError,
912
+ };
886
913
  const timer = new Timer();
887
914
  try {
888
915
  resultAndObj = await validationFunc();
889
916
  } catch (err) {
890
- this.peerManager.penalizePeer(source, PeerErrorSeverity.LowToleranceError);
891
- this.logger.error(`Error deserializing and validating gossipsub message`, err, {
892
- msgId,
893
- source: source.toString(),
894
- topicType,
895
- });
917
+ this.logger.error(`Error validating gossipsub message`, err, { msgId, source: source.toString(), topicType });
896
918
  }
897
919
 
898
920
  if (resultAndObj.result === TopicValidatorResult.Accept) {
921
+ this.logger.debug(`Message ${topicType} accepted by validator`, { msgId, source: source.toString(), topicType });
899
922
  this.instrumentation.recordMessageValidation(topicType, timer);
923
+ } else if (resultAndObj.result === TopicValidatorResult.Reject) {
924
+ this.logger.warn(`Message ${topicType} rejected by validator with severity ${resultAndObj.severity}`, {
925
+ msgId,
926
+ source: source.toString(),
927
+ topicType,
928
+ severity: resultAndObj.severity,
929
+ });
930
+ this.peerManager.penalizePeer(source, resultAndObj.severity);
931
+ } else {
932
+ this.logger.trace(`Message ${topicType} ignored by validator`, { msgId, source: source.toString(), topicType });
900
933
  }
901
934
 
902
935
  this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), resultAndObj.result);
903
936
  return resultAndObj;
904
937
  }
905
938
 
939
+ private tryDeserialize<T>(deserializeFunc: () => T, msgId: string, source: PeerId): T | undefined {
940
+ try {
941
+ return deserializeFunc();
942
+ } catch (err) {
943
+ this.logger.warn(`Failed to deserialize gossipsub message from buffer`, {
944
+ err,
945
+ msgId,
946
+ source: source.toString(),
947
+ });
948
+ return undefined;
949
+ }
950
+ }
951
+
906
952
  protected async handleGossipedTx(payloadData: Buffer, msgId: string, source: PeerId) {
907
953
  const validationFunc: () => Promise<ReceivedMessageValidationResult<Tx>> = async () => {
908
- const tx = Tx.fromBuffer(payloadData);
954
+ const tx = this.tryDeserialize(() => Tx.fromBuffer(payloadData), msgId, source);
955
+ if (!tx) {
956
+ return { result: TopicValidatorResult.Reject, severity: PeerErrorSeverity.LowToleranceError };
957
+ }
909
958
 
910
959
  const currentBlockNumber = await this.archiver.getBlockNumber();
911
960
  const { ts: nextSlotTimestamp } = this.epochCache.getEpochAndSlotInNextL1Slot();
@@ -925,13 +974,20 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
925
974
  severity = await this.handleDoubleSpendFailure(tx, txBlockNumber);
926
975
  }
927
976
 
928
- this.peerManager.penalizePeer(source, severity);
929
- return { result: TopicValidatorResult.Reject };
977
+ this.logger.verbose(`Rejecting gossiped tx ${tx.getTxHash().toString()}: stage 1 validation failed`, {
978
+ validator: name,
979
+ severity,
980
+ source: source.toString(),
981
+ });
982
+ return { result: TopicValidatorResult.Reject, severity };
930
983
  }
931
984
 
932
985
  // Pool pre-check: see if the pool would accept this tx before doing expensive proof verification
933
986
  const canAdd = await this.mempools.txPool.canAddPendingTx(tx);
934
987
  if (canAdd === 'ignored') {
988
+ this.logger.verbose(`Ignoring gossiped tx ${tx.getTxHash().toString()}: pool pre-check returned ignored`, {
989
+ source: source.toString(),
990
+ });
935
991
  return { result: TopicValidatorResult.Ignore, obj: tx };
936
992
  }
937
993
 
@@ -939,9 +995,13 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
939
995
  const secondStageValidators = this.createSecondStageMessageValidators();
940
996
  const secondStageOutcome = await this.runValidations(tx, secondStageValidators);
941
997
  if (!secondStageOutcome.allPassed) {
942
- const { severity } = secondStageOutcome.failure;
943
- this.peerManager.penalizePeer(source, severity);
944
- return { result: TopicValidatorResult.Reject };
998
+ const { severity, name } = secondStageOutcome.failure;
999
+ this.logger.verbose(`Rejecting gossiped tx ${tx.getTxHash().toString()}: stage 2 validation failed`, {
1000
+ validator: name,
1001
+ severity,
1002
+ source: source.toString(),
1003
+ });
1004
+ return { result: TopicValidatorResult.Reject, severity };
945
1005
  }
946
1006
 
947
1007
  // Pool add: persist the tx
@@ -951,7 +1011,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
951
1011
  const wasAccepted = addResult.accepted.some(h => h.equals(txHash));
952
1012
  const wasIgnored = addResult.ignored.some(h => h.equals(txHash));
953
1013
 
954
- this.logger.trace(`Validate propagated tx`, {
1014
+ this.logger.verbose(`Validate propagated tx ${txHash.toString()}`, {
955
1015
  wasAccepted,
956
1016
  wasIgnored,
957
1017
  [Attributes.P2P_ID]: source.toString(),
@@ -962,7 +1022,11 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
962
1022
  } else if (wasIgnored) {
963
1023
  return { result: TopicValidatorResult.Ignore, obj: tx };
964
1024
  } else {
965
- return { result: TopicValidatorResult.Reject };
1025
+ this.logger.warn(`Gossiped tx ${txHash.toString()} unexpectedly rejected by pool`, {
1026
+ source: source.toString(),
1027
+ txHash: txHash.toString(),
1028
+ });
1029
+ return { result: TopicValidatorResult.Reject, severity: PeerErrorSeverity.HighToleranceError };
966
1030
  }
967
1031
  };
968
1032
 
@@ -992,7 +1056,16 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
992
1056
  source: PeerId,
993
1057
  ): Promise<void> {
994
1058
  const { result, obj: attestation } = await this.validateReceivedMessage<CheckpointAttestation>(
995
- () => this.validateAndStoreCheckpointAttestation(source, CheckpointAttestation.fromBuffer(payloadData)),
1059
+ () => {
1060
+ const attestation = this.tryDeserialize(() => CheckpointAttestation.fromBuffer(payloadData), msgId, source);
1061
+ if (!attestation) {
1062
+ return Promise.resolve({
1063
+ result: TopicValidatorResult.Reject,
1064
+ severity: PeerErrorSeverity.LowToleranceError,
1065
+ });
1066
+ }
1067
+ return this.validateAndStoreCheckpointAttestation(source, attestation);
1068
+ },
996
1069
  msgId,
997
1070
  source,
998
1071
  TopicType.checkpoint_attestation,
@@ -1025,8 +1098,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1025
1098
 
1026
1099
  if (validationResult.result === 'reject') {
1027
1100
  this.logger.warn(`Penalizing peer ${peerId} for checkpoint attestation validation failure`);
1028
- this.peerManager.penalizePeer(peerId, validationResult.severity);
1029
- return { result: TopicValidatorResult.Reject };
1101
+ return { result: TopicValidatorResult.Reject, severity: validationResult.severity };
1030
1102
  }
1031
1103
 
1032
1104
  if (validationResult.result === 'ignore') {
@@ -1052,16 +1124,16 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1052
1124
  return { result: TopicValidatorResult.Ignore, obj: attestation };
1053
1125
  }
1054
1126
 
1055
- // Could not add (cap reached for signer), no need to re-broadcast
1127
+ // Could not add (cap reached for signer), penalize and do not re-broadcast
1056
1128
  if (!added) {
1057
- this.logger.warn(`Dropping checkpoint attestation due to cap`, {
1129
+ this.logger.warn(`Rejecting checkpoint attestation due to cap`, {
1058
1130
  slot: slot.toString(),
1059
1131
  archive: attestation.archive.toString(),
1060
1132
  source: peerId.toString(),
1061
1133
  attester: attestation.getSender()?.toString(),
1062
1134
  count,
1063
1135
  });
1064
- return { result: TopicValidatorResult.Ignore, obj: attestation };
1136
+ return { result: TopicValidatorResult.Reject, severity: PeerErrorSeverity.HighToleranceError };
1065
1137
  }
1066
1138
 
1067
1139
  // Check if this is a duplicate attestation (signer attested to a different proposal at the same slot)
@@ -1116,8 +1188,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1116
1188
 
1117
1189
  if (validationResult.result === 'reject') {
1118
1190
  this.logger.warn(`Penalizing peer ${peerId} for block proposal validation failure`);
1119
- this.peerManager.penalizePeer(peerId, validationResult.severity);
1120
- return { result: TopicValidatorResult.Reject };
1191
+ return { result: TopicValidatorResult.Reject, severity: validationResult.severity };
1121
1192
  }
1122
1193
 
1123
1194
  if (validationResult.result === 'ignore') {
@@ -1141,7 +1212,6 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1141
1212
 
1142
1213
  // Too many blocks received for this slot and index, penalize peer and do not re-broadcast
1143
1214
  if (!added) {
1144
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError);
1145
1215
  this.logger.warn(`Penalizing peer for block proposal exceeding per-position cap`, {
1146
1216
  ...block.toBlockInfo(),
1147
1217
  indexWithinCheckpoint: block.indexWithinCheckpoint,
@@ -1149,7 +1219,11 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1149
1219
  proposer: block.getSender()?.toString(),
1150
1220
  source: peerId.toString(),
1151
1221
  });
1152
- return { result: TopicValidatorResult.Reject, metadata: { isEquivocated } };
1222
+ return {
1223
+ result: TopicValidatorResult.Reject,
1224
+ metadata: { isEquivocated },
1225
+ severity: PeerErrorSeverity.HighToleranceError,
1226
+ };
1153
1227
  }
1154
1228
 
1155
1229
  // If this was a duplicate proposal, do not process it, but do invoke the duplicate callback,
@@ -1194,7 +1268,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1194
1268
  // Note: Validators do NOT attest to individual blocks, only to checkpoint proposals.
1195
1269
  const isValid = await this.blockReceivedCallback(block, sender);
1196
1270
  if (!isValid) {
1197
- this.logger.warn(`Block proposal validation failed for block ${block.blockNumber}`, block.toBlockInfo());
1271
+ this.logger.info(`Block proposal validation failed for block ${block.blockNumber}`, block.toBlockInfo());
1198
1272
  }
1199
1273
  }
1200
1274
 
@@ -1242,8 +1316,7 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1242
1316
 
1243
1317
  if (validationResult.result === 'reject') {
1244
1318
  this.logger.warn(`Penalizing peer ${peerId} for checkpoint proposal validation failure`);
1245
- this.peerManager.penalizePeer(peerId, validationResult.severity);
1246
- return { result: TopicValidatorResult.Reject };
1319
+ return { result: TopicValidatorResult.Reject, severity: validationResult.severity };
1247
1320
  }
1248
1321
 
1249
1322
  if (validationResult.result === 'ignore') {
@@ -1258,20 +1331,21 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1258
1331
  [Attributes.SLOT_NUMBER]: checkpoint.slotNumber.toString(),
1259
1332
  [Attributes.P2P_ID]: peerId.toString(),
1260
1333
  });
1261
- const {
1262
- result,
1263
- obj,
1264
- metadata: { isEquivocated } = {},
1265
- } = await this.validateAndStoreBlockProposal(peerId, blockProposal);
1266
- if (result === TopicValidatorResult.Reject || !obj || isEquivocated) {
1334
+ const blockProposalResult = await this.validateAndStoreBlockProposal(peerId, blockProposal);
1335
+ const { obj, metadata: { isEquivocated } = {} } = blockProposalResult;
1336
+ if (blockProposalResult.result === TopicValidatorResult.Reject || !obj || isEquivocated) {
1267
1337
  this.logger.debug(`Rejecting checkpoint due to invalid last block proposal`, {
1268
1338
  [Attributes.SLOT_NUMBER]: checkpoint.slotNumber.toString(),
1269
1339
  [Attributes.P2P_ID]: peerId.toString(),
1270
1340
  isEquivocated,
1271
- result,
1341
+ result: blockProposalResult.result,
1272
1342
  });
1273
- return { result: TopicValidatorResult.Reject };
1274
- } else if (result === TopicValidatorResult.Accept && obj && !isEquivocated) {
1343
+ return {
1344
+ result: TopicValidatorResult.Reject,
1345
+ severity:
1346
+ 'severity' in blockProposalResult ? blockProposalResult.severity : PeerErrorSeverity.MidToleranceError,
1347
+ };
1348
+ } else if (blockProposalResult.result === TopicValidatorResult.Accept && obj && !isEquivocated) {
1275
1349
  processBlock = true;
1276
1350
  }
1277
1351
  }
@@ -1298,13 +1372,17 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1298
1372
  // Too many checkpoint proposals received for this slot, penalize peer and do not re-broadcast
1299
1373
  // Note: We still return the checkpoint obj so the lastBlock can be processed if valid
1300
1374
  if (!added) {
1301
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError);
1302
1375
  this.logger.warn(`Penalizing peer for checkpoint proposal exceeding per-slot cap`, {
1303
1376
  ...checkpoint.toCheckpointInfo(),
1304
1377
  count,
1305
1378
  source: peerId.toString(),
1306
1379
  });
1307
- return { result: TopicValidatorResult.Reject, obj: checkpoint, metadata: { isEquivocated, processBlock } };
1380
+ return {
1381
+ result: TopicValidatorResult.Reject,
1382
+ obj: checkpoint,
1383
+ metadata: { isEquivocated, processBlock },
1384
+ severity: PeerErrorSeverity.HighToleranceError,
1385
+ };
1308
1386
  }
1309
1387
 
1310
1388
  // If this was a duplicate proposal, do not process it, but do invoke the duplicate callback,
@@ -1349,9 +1427,11 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1349
1427
  source: sender.toString(),
1350
1428
  });
1351
1429
 
1430
+ await this.allNodesCheckpointReceivedCallback(checkpoint, sender);
1431
+
1352
1432
  // Call the checkpoint received callback with the core version (without lastBlock)
1353
1433
  // to validate and potentially generate attestations
1354
- const attestations = await this.checkpointReceivedCallback(checkpoint, sender);
1434
+ const attestations = await this.validatorCheckpointReceivedCallback(checkpoint, sender);
1355
1435
  if (attestations && attestations.length > 0) {
1356
1436
  // If the callback returned attestations, add them to the pool and propagate them
1357
1437
  await this.mempools.attestationPool.addOwnCheckpointAttestations(attestations);
@@ -1499,53 +1579,6 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1499
1579
  }
1500
1580
  }
1501
1581
 
1502
- /**
1503
- * Validates a BLOCK response.
1504
- *
1505
- * If a local copy exists, enforces hash equality. If missing, rejects (no penalty) since the hash cannot be verified.
1506
- * Penalizes on block number mismatch or hash mismatch.
1507
- *
1508
- * @param requestedBlockNumber - The requested block number.
1509
- * @param responseBlock - The block returned by the peer.
1510
- * @param peerId - The peer that returned the block.
1511
- * @returns True if the response is valid, false otherwise.
1512
- */
1513
- @trackSpan('Libp2pService.validateRequestedBlock', (requestedBlockNumber, _responseBlock) => ({
1514
- [Attributes.BLOCK_NUMBER]: requestedBlockNumber.toString(),
1515
- }))
1516
- protected async validateRequestedBlock(
1517
- requestedBlockNumber: Fr,
1518
- responseBlock: L2Block,
1519
- peerId: PeerId,
1520
- ): Promise<boolean> {
1521
- try {
1522
- const reqNum = Number(requestedBlockNumber.toString());
1523
- if (responseBlock.number !== reqNum) {
1524
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.LowToleranceError);
1525
- return false;
1526
- }
1527
-
1528
- const local = await this.archiver.getBlock(BlockNumber(reqNum));
1529
- if (!local) {
1530
- // We are missing the local block; we cannot verify the hash yet. Reject without penalizing.
1531
- // TODO: Consider extending this validator to accept an expected hash or
1532
- // performing quorum-based checks when using P2P syncing prior to L1 sync.
1533
- this.logger.warn(`Local block ${reqNum} not found; rejecting BLOCK response without hash verification`);
1534
- return false;
1535
- }
1536
- const [localHash, respHash] = await Promise.all([local.hash(), responseBlock.hash()]);
1537
- if (!localHash.equals(respHash)) {
1538
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.MidToleranceError);
1539
- return false;
1540
- }
1541
-
1542
- return true;
1543
- } catch (e) {
1544
- this.logger.warn(`Error validating requested block`, e);
1545
- return false;
1546
- }
1547
- }
1548
-
1549
1582
  protected async validateRequestedTx(
1550
1583
  tx: Tx,
1551
1584
  peerId: PeerId,
@@ -1623,8 +1656,12 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1623
1656
  nextSlotTimestamp: UInt64,
1624
1657
  ): Promise<Record<string, TransactionValidator>> {
1625
1658
  const gasFees = await this.getGasFees(currentBlockNumber);
1626
- const allowedInSetup = this.config.txPublicSetupAllowList ?? (await getDefaultAllowedSetupFunctions());
1659
+ const allowedInSetup = [
1660
+ ...(await getDefaultAllowedSetupFunctions()),
1661
+ ...(this.config.txPublicSetupAllowListExtend ?? []),
1662
+ ];
1627
1663
  const blockNumber = BlockNumber(currentBlockNumber + 1);
1664
+ const l1Constants = await this.archiver.getL1Constants();
1628
1665
 
1629
1666
  return createFirstStageTxValidationsForGossipedTransactions(
1630
1667
  nextSlotTimestamp,
@@ -1638,6 +1675,11 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1638
1675
  !this.config.disableTransactions,
1639
1676
  allowedInSetup,
1640
1677
  this.logger.getBindings(),
1678
+ {
1679
+ rollupManaLimit: l1Constants.rollupManaLimit,
1680
+ maxBlockL2Gas: this.config.validateMaxL2BlockGas,
1681
+ maxBlockDAGas: this.config.validateMaxDABlockGas,
1682
+ },
1641
1683
  );
1642
1684
  }
1643
1685
 
@@ -1663,8 +1705,10 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1663
1705
 
1664
1706
  // A promise that resolves when all validations have been run
1665
1707
  const allValidations = await Promise.all(validationPromises);
1666
- const failed = allValidations.find(x => !x.isValid);
1667
- if (failed) {
1708
+ const failures = allValidations.filter(x => !x.isValid);
1709
+ if (failures.length > 0) {
1710
+ // Pick the most severe failure (lowest tolerance = harshest penalty)
1711
+ const failed = maxBy(failures, f => PeerErrorSeverityByHarshness.indexOf(f.severity))!;
1668
1712
  return {
1669
1713
  allPassed: false,
1670
1714
  failure: {
@@ -1717,31 +1761,6 @@ export class LibP2PService<T extends P2PClientType = P2PClientType.Full> extends
1717
1761
  return PeerErrorSeverity.HighToleranceError;
1718
1762
  }
1719
1763
 
1720
- /**
1721
- * Validate a checkpoint attestation.
1722
- *
1723
- * @param attestation - The checkpoint attestation to validate.
1724
- * @returns True if the checkpoint attestation is valid, false otherwise.
1725
- */
1726
- @trackSpan('Libp2pService.validateCheckpointAttestation', async (_, attestation) => ({
1727
- [Attributes.SLOT_NUMBER]: attestation.payload.header.slotNumber,
1728
- [Attributes.BLOCK_ARCHIVE]: attestation.archive.toString(),
1729
- [Attributes.P2P_ID]: await attestation.p2pMessageLoggingIdentifier().then(i => i.toString()),
1730
- }))
1731
- public async validateCheckpointAttestation(
1732
- peerId: PeerId,
1733
- attestation: CheckpointAttestation,
1734
- ): Promise<P2PValidationResult> {
1735
- const result = await this.checkpointAttestationValidator.validate(attestation);
1736
-
1737
- if (result.result === 'reject') {
1738
- this.logger.warn(`Penalizing peer ${peerId} for checkpoint attestation validation failure`);
1739
- this.peerManager.penalizePeer(peerId, result.severity);
1740
- }
1741
-
1742
- return result;
1743
- }
1744
-
1745
1764
  public getPeerScore(peerId: PeerId): number {
1746
1765
  return this.node.services.pubsub.score.score(peerId.toString());
1747
1766
  }