@aztec/p2p 5.0.0-private.20260319 → 5.0.0-rc.2

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 (411) hide show
  1. package/README.md +4 -1
  2. package/dest/bootstrap/bootstrap.d.ts +1 -1
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +22 -6
  5. package/dest/client/factory.d.ts +4 -3
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +33 -24
  8. package/dest/client/interface.d.ts +43 -11
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +33 -19
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +100 -44
  13. package/dest/config.d.ts +137 -107
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +64 -23
  16. package/dest/errors/p2p-service.error.d.ts +9 -0
  17. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  18. package/dest/errors/p2p-service.error.js +10 -0
  19. package/dest/errors/reqresp.error.d.ts +1 -20
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +0 -21
  22. package/dest/index.d.ts +1 -2
  23. package/dest/index.d.ts.map +1 -1
  24. package/dest/index.js +0 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +98 -56
  26. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool.js +265 -196
  28. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +175 -59
  31. package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
  32. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/mocks.js +6 -4
  34. package/dest/mem_pools/index.d.ts +1 -2
  35. package/dest/mem_pools/index.d.ts.map +1 -1
  36. package/dest/mem_pools/instrumentation.d.ts +1 -1
  37. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  38. package/dest/mem_pools/instrumentation.js +17 -1
  39. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +1 -5
  40. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +1 -7
  42. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +3 -3
  43. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +6 -6
  45. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +1 -1
  46. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  47. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  48. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  49. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  50. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  51. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  52. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  53. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +22 -5
  54. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  55. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +5 -2
  56. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  57. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +13 -6
  58. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +7 -1
  59. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  60. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +10 -0
  61. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +8 -3
  62. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  63. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +7 -4
  64. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +8 -3
  65. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  66. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +153 -111
  67. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -3
  68. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  69. package/dest/msg_validators/attestation_validator/attestation_validator.js +38 -16
  70. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  71. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  72. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  73. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +8 -3
  74. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  75. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +2 -2
  76. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +8 -3
  77. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  78. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +8 -2
  79. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +25 -3
  80. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  81. package/dest/msg_validators/proposal_validator/proposal_validator.js +77 -14
  82. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  83. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  84. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  85. package/dest/msg_validators/tx_validator/allowed_public_setup.js +3 -3
  86. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  87. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  88. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  89. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  90. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  91. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  92. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  93. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  94. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  95. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  96. package/dest/msg_validators/tx_validator/factory.d.ts +14 -15
  97. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/factory.js +36 -17
  99. package/dest/msg_validators/tx_validator/gas_validator.d.ts +47 -10
  100. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/gas_validator.js +65 -48
  102. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  103. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  104. package/dest/msg_validators/tx_validator/index.js +2 -0
  105. package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
  106. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  107. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  108. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  109. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  110. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  111. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  112. package/dest/services/data_store.d.ts +1 -1
  113. package/dest/services/data_store.d.ts.map +1 -1
  114. package/dest/services/data_store.js +5 -5
  115. package/dest/services/discv5/discV5_service.d.ts +13 -2
  116. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  117. package/dest/services/discv5/discV5_service.js +119 -23
  118. package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
  119. package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
  120. package/dest/services/discv5/persisted_enr_store.js +145 -0
  121. package/dest/services/dummy_service.d.ts +15 -15
  122. package/dest/services/dummy_service.d.ts.map +1 -1
  123. package/dest/services/dummy_service.js +15 -16
  124. package/dest/services/encoding.d.ts +8 -8
  125. package/dest/services/encoding.d.ts.map +1 -1
  126. package/dest/services/encoding.js +11 -15
  127. package/dest/services/gossipsub/topic_score_params.d.ts +6 -12
  128. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  129. package/dest/services/gossipsub/topic_score_params.js +4 -14
  130. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  131. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  132. package/dest/services/libp2p/instrumentation.js +14 -0
  133. package/dest/services/libp2p/libp2p_service.d.ts +44 -39
  134. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  135. package/dest/services/libp2p/libp2p_service.js +383 -278
  136. package/dest/services/peer-manager/peer_manager.d.ts +20 -3
  137. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  138. package/dest/services/peer-manager/peer_manager.js +79 -23
  139. package/dest/services/peer-manager/peer_scoring.d.ts +34 -2
  140. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  141. package/dest/services/peer-manager/peer_scoring.js +102 -13
  142. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +1 -8
  143. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  144. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +38 -44
  145. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +8 -5
  146. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  147. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  148. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  149. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  150. package/dest/services/reqresp/config.d.ts +3 -3
  151. package/dest/services/reqresp/config.d.ts.map +1 -1
  152. package/dest/services/reqresp/interface.d.ts +16 -18
  153. package/dest/services/reqresp/interface.d.ts.map +1 -1
  154. package/dest/services/reqresp/interface.js +10 -20
  155. package/dest/services/reqresp/metrics.d.ts +1 -1
  156. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  157. package/dest/services/reqresp/metrics.js +0 -1
  158. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  159. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  160. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  161. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  162. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  163. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
  164. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
  165. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  166. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
  167. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  168. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  169. package/dest/services/reqresp/protocols/index.js +0 -1
  170. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  171. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  172. package/dest/services/reqresp/protocols/tx.js +1 -3
  173. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  174. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  175. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  176. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  177. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  178. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  179. package/dest/services/reqresp/reqresp.d.ts +7 -29
  180. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  181. package/dest/services/reqresp/reqresp.js +26 -207
  182. package/dest/services/service.d.ts +25 -12
  183. package/dest/services/service.d.ts.map +1 -1
  184. package/dest/services/tx_collection/config.d.ts +2 -23
  185. package/dest/services/tx_collection/config.d.ts.map +1 -1
  186. package/dest/services/tx_collection/config.js +2 -55
  187. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  188. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  189. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  190. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  191. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  192. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  193. package/dest/services/tx_collection/index.d.ts +2 -3
  194. package/dest/services/tx_collection/index.d.ts.map +1 -1
  195. package/dest/services/tx_collection/index.js +0 -1
  196. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  197. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  198. package/dest/services/tx_collection/instrumentation.js +0 -2
  199. package/dest/services/tx_collection/tx_collection.d.ts +35 -51
  200. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  201. package/dest/services/tx_collection/tx_collection.js +275 -119
  202. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  203. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  204. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  205. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  206. package/dest/services/tx_collection/tx_source.js +13 -8
  207. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  208. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  209. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  210. package/dest/services/tx_provider.d.ts +3 -1
  211. package/dest/services/tx_provider.d.ts.map +1 -1
  212. package/dest/services/tx_provider.js +3 -0
  213. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  214. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  215. package/dest/test-helpers/make-test-p2p-clients.js +5 -2
  216. package/dest/test-helpers/mock-pubsub.d.ts +23 -9
  217. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  218. package/dest/test-helpers/mock-pubsub.js +44 -44
  219. package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
  220. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  221. package/dest/test-helpers/reqresp-nodes.js +16 -18
  222. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  223. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  224. package/dest/test-helpers/test_tx_provider.js +3 -0
  225. package/dest/test-helpers/testbench-utils.d.ts +14 -14
  226. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  227. package/dest/test-helpers/testbench-utils.js +25 -13
  228. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  229. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  230. package/dest/testbench/p2p_client_testbench_worker.js +102 -41
  231. package/dest/testbench/worker_client_manager.d.ts +10 -6
  232. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  233. package/dest/testbench/worker_client_manager.js +51 -9
  234. package/dest/util.d.ts +11 -6
  235. package/dest/util.d.ts.map +1 -1
  236. package/dest/util.js +35 -14
  237. package/dest/versioning.d.ts +3 -6
  238. package/dest/versioning.d.ts.map +1 -1
  239. package/dest/versioning.js +3 -24
  240. package/package.json +16 -16
  241. package/src/bootstrap/bootstrap.ts +17 -3
  242. package/src/client/factory.ts +52 -24
  243. package/src/client/interface.ts +38 -17
  244. package/src/client/p2p_client.ts +118 -76
  245. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  246. package/src/config.ts +130 -31
  247. package/src/errors/p2p-service.error.ts +11 -0
  248. package/src/errors/reqresp.error.ts +0 -25
  249. package/src/index.ts +0 -1
  250. package/src/mem_pools/attestation_pool/attestation_pool.ts +319 -238
  251. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +198 -62
  252. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  253. package/src/mem_pools/index.ts +0 -3
  254. package/src/mem_pools/instrumentation.ts +5 -1
  255. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
  256. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
  257. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +1 -1
  258. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  259. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  260. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  261. package/src/mem_pools/tx_pool_v2/interfaces.ts +18 -4
  262. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +20 -8
  263. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +12 -0
  264. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +8 -4
  265. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +163 -117
  266. package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -15
  267. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +15 -7
  268. package/src/msg_validators/proposal_validator/README.md +1 -1
  269. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +15 -3
  270. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +26 -3
  271. package/src/msg_validators/proposal_validator/proposal_validator.ts +89 -11
  272. package/src/msg_validators/tx_validator/README.md +13 -3
  273. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  274. package/src/msg_validators/tx_validator/allowed_public_setup.ts +3 -3
  275. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  276. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  277. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  278. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  279. package/src/msg_validators/tx_validator/factory.ts +44 -20
  280. package/src/msg_validators/tx_validator/gas_validator.ts +99 -54
  281. package/src/msg_validators/tx_validator/index.ts +2 -0
  282. package/src/msg_validators/tx_validator/phases_validator.ts +3 -3
  283. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  284. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  285. package/src/services/data_store.ts +5 -13
  286. package/src/services/discv5/discV5_service.ts +126 -14
  287. package/src/services/discv5/persisted_enr_store.ts +158 -0
  288. package/src/services/dummy_service.ts +20 -39
  289. package/src/services/encoding.ts +11 -21
  290. package/src/services/gossipsub/README.md +33 -11
  291. package/src/services/gossipsub/topic_score_params.ts +9 -18
  292. package/src/services/libp2p/instrumentation.ts +14 -0
  293. package/src/services/libp2p/libp2p_service.ts +436 -311
  294. package/src/services/peer-manager/peer_manager.ts +86 -22
  295. package/src/services/peer-manager/peer_scoring.ts +102 -8
  296. package/src/services/reqresp/README.md +0 -14
  297. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +42 -52
  298. package/src/services/reqresp/batch-tx-requester/interface.ts +11 -4
  299. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  300. package/src/services/reqresp/config.ts +2 -2
  301. package/src/services/reqresp/interface.ts +21 -47
  302. package/src/services/reqresp/metrics.ts +0 -1
  303. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  304. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
  305. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
  306. package/src/services/reqresp/protocols/index.ts +0 -1
  307. package/src/services/reqresp/protocols/tx.ts +1 -3
  308. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  309. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  310. package/src/services/reqresp/reqresp.ts +29 -252
  311. package/src/services/service.ts +31 -28
  312. package/src/services/tx_collection/config.ts +3 -80
  313. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  314. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  315. package/src/services/tx_collection/index.ts +1 -6
  316. package/src/services/tx_collection/instrumentation.ts +1 -7
  317. package/src/services/tx_collection/tx_collection.ts +330 -173
  318. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  319. package/src/services/tx_collection/tx_source.ts +10 -8
  320. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  321. package/src/services/tx_provider.ts +5 -0
  322. package/src/test-helpers/make-test-p2p-clients.ts +3 -0
  323. package/src/test-helpers/mock-pubsub.ts +46 -60
  324. package/src/test-helpers/reqresp-nodes.ts +12 -22
  325. package/src/test-helpers/test_tx_provider.ts +5 -0
  326. package/src/test-helpers/testbench-utils.ts +31 -26
  327. package/src/testbench/p2p_client_testbench_worker.ts +110 -55
  328. package/src/testbench/worker_client_manager.ts +59 -20
  329. package/src/util.ts +32 -17
  330. package/src/versioning.ts +3 -33
  331. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  332. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  333. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -305
  334. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  335. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  336. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  337. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  338. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  339. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  340. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  341. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  342. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  343. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  344. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  345. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  346. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  347. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  348. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -123
  349. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  350. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  351. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  352. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  353. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  354. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  355. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  356. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  357. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  358. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  359. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  360. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  361. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  362. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  363. package/dest/mem_pools/tx_pool/index.js +0 -2
  364. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  365. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  366. package/dest/mem_pools/tx_pool/priority.js +0 -15
  367. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  368. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  369. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  370. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  371. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  372. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -402
  373. package/dest/msg_validators/clock_tolerance.d.ts +0 -21
  374. package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
  375. package/dest/msg_validators/clock_tolerance.js +0 -38
  376. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  377. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  378. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  379. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  380. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  381. package/dest/services/reqresp/protocols/block.js +0 -32
  382. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -51
  383. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  384. package/dest/services/tx_collection/fast_tx_collection.js +0 -311
  385. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -48
  386. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  387. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  388. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  389. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  390. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  391. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -344
  392. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  393. package/src/mem_pools/tx_pool/README.md +0 -270
  394. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  395. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  396. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  397. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -163
  398. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  399. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  400. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  401. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  402. package/src/mem_pools/tx_pool/index.ts +0 -2
  403. package/src/mem_pools/tx_pool/priority.ts +0 -20
  404. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  405. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -321
  406. package/src/msg_validators/clock_tolerance.ts +0 -52
  407. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  408. package/src/services/reqresp/protocols/block.ts +0 -37
  409. package/src/services/tx_collection/fast_tx_collection.ts +0 -361
  410. package/src/services/tx_collection/proposal_tx_collector.ts +0 -108
  411. package/src/services/tx_collection/slow_tx_collection.ts +0 -266
@@ -1,6 +1,6 @@
1
- # ProposalTxCollector Benchmarks
1
+ # BatchTxRequester Benchmarks
2
2
 
3
- This benchmark suite measures **how quickly a proposer node can fetch missing transactions from P2P peers** when building a block proposal. It compares two alternative transaction-collection implementations under several controlled "who-has-which-txs" distributions.
3
+ This benchmark suite measures **how quickly a proposer node can fetch missing transactions from P2P peers** when building a block proposal under several controlled "who-has-which-txs" distributions.
4
4
 
5
5
  ## Purpose
6
6
 
@@ -10,12 +10,6 @@ This benchmark answers:
10
10
 
11
11
  - How long does it take to fetch **N missing txs** (N ∈ **{10, 50, 100, 500}**)?
12
12
  - How do different **peer availability patterns** affect performance?
13
- - Which collector strategy performs better under each pattern?
14
-
15
- The suite compares two collectors:
16
-
17
- - **`BatchTxRequesterCollector`** (collector type: `batch-requester`)
18
- - **`SendBatchRequestCollector`** (collector type: `send-batch-request`)
19
13
 
20
14
  ## Architecture
21
15
 
@@ -24,7 +18,7 @@ The benchmark runs a small simulated network on localhost:
24
18
  ```
25
19
  ┌─────────────────────────────────────────────────────────────────────┐
26
20
  │ Test Process (Driver) │
27
- │ p2p_client.proposal_tx_collector.bench.test.ts
21
+ │ p2p_client.batch_tx_requester.bench.test.ts
28
22
  │ ┌─────────────────────────────────────────────────────────────┐ │
29
23
  │ │ WorkerClientManager │ │
30
24
  │ │ (src/testbench/worker_client_manager.ts) │ │
@@ -34,7 +28,7 @@ The benchmark runs a small simulated network on localhost:
34
28
  │ ▼ ▼ ▼ │
35
29
  │ ┌───────────┐ ┌───────────┐ ┌───────────┐ │
36
30
  │ │ Worker 0 │◄──────►│ Worker 1 │◄──────►│ Worker N-1│ │
37
- │ │ (Collector│ P2P │(Responder)│ P2P │(Responder)│ │
31
+ │ │(Aggregator│ P2P │(Responder)│ P2P │(Responder)│ │
38
32
  │ │ Node) │ │ │ │ │ │
39
33
  │ │ TxPool:[] │ │ TxPool: │ │ TxPool: │ │
40
34
  │ │ │ │ [txs...] │ │ [txs...] │ │
@@ -54,12 +48,12 @@ Using separate OS processes makes the setup closer to real networking behavior (
54
48
 
55
49
  The network is intentionally asymmetric:
56
50
 
57
- - **Worker 0 is the collector/proposer node**
51
+ - **Worker 0 is the aggregator/proposer node**
58
52
  - Starts with an **empty tx pool** (`[]`)
59
- - Is the only worker instructed to run the collector for each `BENCH_REQRESP` command
53
+ - Is the only worker instructed to run `BatchTxRequester` for each `BENCH_REQRESP` command
60
54
  - **Workers 1..N-1 are responder peers**
61
55
  - Locally generate and filter txs according to the distribution pattern
62
- - Respond to req/resp queries made by Worker 0's collector
56
+ - Respond to req/resp queries made by Worker 0's `BatchTxRequester`
63
57
 
64
58
  This models a proposer that has only `txHashes` in a proposal and must fetch the full tx bodies from the network.
65
59
 
@@ -72,7 +66,7 @@ Each benchmark case generates `missingTxCount` mock txs and assigns them to peer
72
66
  **Every responder peer has every transaction.**
73
67
 
74
68
  - Simulates the best-case: high replication / high gossip success
75
- - Expectation: collector should quickly succeed; differences mostly reflect collector overhead and batching strategy
69
+ - Expectation: the requester should quickly succeed; differences mostly reflect requester overhead and batching strategy
76
70
 
77
71
  ### `sparse`
78
72
 
@@ -81,7 +75,7 @@ Each benchmark case generates `missingTxCount` mock txs and assigns them to peer
81
75
  Each responder is bucketed and holds txs whose index falls into its bucket or the "next" bucket (striped by tx index).
82
76
 
83
77
  - Simulates partial propagation, churn, or uneven mempool convergence
84
- - Expectation: collector must query multiple peers and cope with "misses"
78
+ - Expectation: the requester must query multiple peers and cope with "misses"
85
79
 
86
80
  ### `pinned-only`
87
81
 
@@ -92,33 +86,13 @@ Each responder is bucketed and holds txs whose index falls into its bucket or th
92
86
 
93
87
  > **Guardrail:** the pinned peer index must be within `(0, numberOfPeers)` (Worker 0 cannot be pinned).
94
88
 
95
- ## Collectors Under Test
96
-
97
- ### `BatchTxRequesterCollector` (`batch-requester`)
98
-
99
- ```typescript
100
- new BatchTxRequesterCollector(p2pService, logger, new DateProvider())
101
- ```
102
-
103
- Uses the P2P service plus internal logic to fetch missing txs, coordinating requests in a batched or staged way.
104
-
105
- ### `SendBatchRequestCollector` (`send-batch-request`)
106
-
107
- ```typescript
108
- const maxPeers = 10;
109
- const maxRetryAttempts = Math.max(peerIds.length, 3);
110
- new SendBatchRequestCollector(p2pService, maxPeers, maxRetryAttempts)
111
- ```
112
-
113
- Explicitly caps the number of peers it will involve (`maxPeers`) and uses a retry budget derived from peer count.
114
-
115
89
  ## Test Parameters
116
90
 
117
91
  | Parameter | Value | Description |
118
92
  |-----------|-------|-------------|
119
93
  | `PEERS_PER_RUN` | 30 | Number of worker processes spawned |
120
94
  | `MISSING_TX_COUNTS` | 10, 50, 100, 500 | Number of missing transactions to fetch |
121
- | `TIMEOUT_MS` | 30,000 ms | Collector timeout per case |
95
+ | `TIMEOUT_MS` | 30,000 ms | Per-case timeout for the requester |
122
96
  | `TEST_TIMEOUT_MS` | 600,000 ms | Overall Jest timeout (10 minutes) |
123
97
 
124
98
  ## Running
@@ -127,13 +101,13 @@ From the p2p package:
127
101
 
128
102
  ```bash
129
103
  cd yarn-project/p2p
130
- yarn test src/client/test/tx_proposal_collector/p2p_client.proposal_tx_collector.bench.test.ts
104
+ yarn test src/client/test/p2p_client.batch_tx_requester.bench.test.ts
131
105
  ```
132
106
 
133
107
  Or from repo root:
134
108
 
135
109
  ```bash
136
- yarn test p2p_client.proposal_tx_collector.bench.test.ts
110
+ yarn test p2p_client.batch_tx_requester.bench.test.ts
137
111
  ```
138
112
 
139
113
  The benchmark is intentionally long due to spawning many processes and running multiple cases.
@@ -145,14 +119,12 @@ The benchmark is intentionally long due to spawning many processes and running m
145
119
  If no env vars are set, the suite prints a table:
146
120
 
147
121
  ```
148
- | Collector | Distribution | Missing | Duration (ms) | Fetched | Success |
149
- |---------------------|--------------|---------|---------------|---------|---------|
150
- | batch-requester | pinned-only | 10 | 123 | 10 | Yes |
151
- | send-batch-request | pinned-only | 10 | 145 | 10 | Yes |
122
+ | Distribution | Missing | Duration (ms) | Fetched | Success |
123
+ |--------------|---------|---------------|---------|---------|
124
+ | pinned-only | 10 | 123 | 10 | Yes |
125
+ | pinned-only | 50 | 145 | 50 | Yes |
152
126
  ```
153
127
 
154
- Plus a comparison summary stating which collector was faster per `(distribution, missing)` pair.
155
-
156
128
  ### JSON metrics (for CI/dashboards)
157
129
 
158
130
  ```bash
@@ -160,8 +132,8 @@ BENCH_OUTPUT=/path/results.json yarn test ...
160
132
  ```
161
133
 
162
134
  Writes JSON metrics like:
163
- - `ProposalTxCollector/<collector>/<distribution>/missing_<N>/duration` (ms)
164
- - `ProposalTxCollector/<collector>/<distribution>/missing_<N>/fetched` (txs)
135
+ - `BatchTxRequester/<distribution>/missing_<N>/duration` (ms)
136
+ - `BatchTxRequester/<distribution>/missing_<N>/fetched` (txs)
165
137
 
166
138
  ### Markdown file output
167
139
 
@@ -175,14 +147,14 @@ Writes the pretty table + summary to disk.
175
147
 
176
148
  For each case the benchmark records:
177
149
 
178
- - `durationMs`: wall-clock time spent inside the collector call
179
- - `fetchedCount`: how many txs were returned by the collector
150
+ - `durationMs`: wall-clock time spent inside the requester call
151
+ - `fetchedCount`: how many txs were returned by the requester
180
152
  - `success`: `fetchedCount === missingTxCount`
181
153
 
182
154
  **Guidelines:**
183
155
 
184
156
  - **Always check `Success` first.** A faster run that fetched fewer txs is not a win.
185
- - Compare collectors **within the same distribution + missing count** only.
157
+ - Compare runs **within the same distribution + missing count** only.
186
158
  - Expect `pinned-only` to highlight pinned-peer behavior (fast if pinned peer is used effectively; slow if the algorithm wastes time sampling other peers).
187
159
  - Expect `sparse` to be the most "network-like" stress case, since many peers won't have each requested tx.
188
160
 
@@ -193,7 +165,7 @@ Inside each worker, the benchmark intentionally reduces variability:
193
165
  - **Unlimited rate limits** are installed so the req/resp rate limiter doesn't dominate results
194
166
  - **Deterministic tx generation** ensures all workers see the same tx set without large IPC payloads
195
167
 
196
- This makes the benchmark better for *comparing collectors* (A vs B), but it is **not** a perfect model of production networking conditions.
168
+ This makes the benchmark better for tracking regressions, but it is **not** a perfect model of production networking conditions.
197
169
 
198
170
  ## Limitations
199
171
 
@@ -207,9 +179,7 @@ This benchmark does **not** measure:
207
179
 
208
180
  | File | Purpose |
209
181
  |------|---------|
210
- | `p2p_client.proposal_tx_collector.bench.test.ts` | Test suite (cases, distributions, output formatting) |
211
- | `proposal_tx_collector_worker.ts` | Collector-specific worker implementation |
212
- | `proposal_tx_collector_worker_protocol.ts` | IPC message types and serialization |
182
+ | `p2p_client.batch_tx_requester.bench.test.ts` | Test suite (cases, distributions, output formatting) |
213
183
  | `src/testbench/worker_client_manager.ts` | Worker process manager (forking, IPC, orchestration) |
214
184
  | `src/testbench/p2p_client_testbench_worker.ts` | General testbench worker implementation |
215
185
  | `src/test-helpers/testbench-utils.ts` | Shared mocks and utilities (InMemoryTxPool, InMemoryAttestationPool, etc.) |
package/src/config.ts CHANGED
@@ -6,6 +6,7 @@ import {
6
6
  getConfigFromMappings,
7
7
  getDefaultConfig,
8
8
  numberConfigHelper,
9
+ optionalNumberConfigHelper,
9
10
  percentageConfigHelper,
10
11
  pickConfigMappings,
11
12
  secretStringConfigHelper,
@@ -39,28 +40,28 @@ export interface P2PConfig
39
40
  ChainConfig,
40
41
  TxCollectionConfig,
41
42
  TxFileStoreConfig,
42
- Pick<SequencerConfig, 'blockDurationMs' | 'expectedBlockProposalsPerSlot' | 'maxTxsPerBlock'> {
43
+ Pick<
44
+ SequencerConfig,
45
+ | 'expectedBlockProposalsPerSlot'
46
+ | 'maxTxsPerBlock'
47
+ | 'checkpointProposalSyncGraceSeconds'
48
+ | 'maxBlocksPerCheckpoint'
49
+ >,
50
+ // `blockDurationMs` is optional on the loose `SequencerConfig` but is always populated for p2p via
51
+ // the shared `numberConfigHelper(3000)` mapping, so it is required here.
52
+ Required<Pick<SequencerConfig, 'blockDurationMs'>> {
43
53
  /** Maximum transactions per block for validation. Overrides maxTxsPerBlock for gossip validation when set. */
44
54
  validateMaxTxsPerBlock?: number;
45
55
 
46
56
  /** Maximum transactions per checkpoint for validation. Used as fallback for maxTxsPerBlock when that is not set. */
47
57
  validateMaxTxsPerCheckpoint?: number;
48
58
 
49
- /** Maximum L2 gas per block for validation. When set, txs exceeding this limit are rejected. */
50
- validateMaxL2BlockGas?: number;
51
-
52
- /** Maximum DA gas per block for validation. When set, txs exceeding this limit are rejected. */
53
- validateMaxDABlockGas?: number;
54
-
55
59
  /** A flag dictating whether the P2P subsystem should be enabled. */
56
60
  p2pEnabled: boolean;
57
61
 
58
62
  /** The frequency in which to check for new L2 blocks. */
59
63
  blockCheckIntervalMS: number;
60
64
 
61
- /** The frequency in which to check for new L2 slots. */
62
- slotCheckIntervalMS: number;
63
-
64
65
  /** The number of blocks to fetch in a single batch. */
65
66
  blockRequestBatchSize: number;
66
67
 
@@ -109,6 +110,11 @@ export interface P2PConfig
109
110
  /** If announceUdpAddress or announceTcpAddress are not provided, query for the IP address of the machine. Default is false. */
110
111
  queryForIp: boolean;
111
112
 
113
+ /**
114
+ * HTTPS URLs that return plain-text public IPv4, tried in order when resolving the announce IP (e.g. when `queryForIp` is true and `p2pIp` is unset).
115
+ */
116
+ publicIpServices: string[];
117
+
112
118
  /** The interval of the gossipsub heartbeat to perform maintenance tasks. */
113
119
  gossipsubInterval: number;
114
120
 
@@ -136,6 +142,13 @@ export interface P2PConfig
136
142
  /** How long to keep message IDs in the seen cache (ms). */
137
143
  gossipsubSeenTTL: number;
138
144
 
145
+ /**
146
+ * Maximum clock-disparity tolerance (ms) applied to proposal/attestation gossip receive windows. Both
147
+ * ends of each acceptance window are widened by this much so peers are not penalized for messages valid
148
+ * when sent but arriving slightly early or late due to clock skew (Ethereum's MAXIMUM_GOSSIP_CLOCK_DISPARITY).
149
+ */
150
+ maxGossipClockDisparityMs: number;
151
+
139
152
  /** The 'age' (in # of L2 blocks) of a processed tx after which we heavily penalize a peer for re-sending it. */
140
153
  doubleSpendSeverePeerPenaltyWindow: number;
141
154
 
@@ -151,6 +164,9 @@ export interface P2PConfig
151
164
  /** The values for the peer scoring system. Passed as a comma separated list of values in order: low, mid, high tolerance errors. */
152
165
  peerPenaltyValues: number[];
153
166
 
167
+ /** How long (in seconds) a peer is banned for once its score drops below the ban threshold. */
168
+ peerBanDurationSeconds: number;
169
+
154
170
  /** Limit of transactions to archive in the tx pool. Once the archived tx limit is reached, the oldest archived txs will be purged. */
155
171
  archivedTxLimit: number;
156
172
 
@@ -175,6 +191,9 @@ export interface P2PConfig
175
191
  /** The node's seen message ID cache size */
176
192
  seenMessageCacheSize: number;
177
193
 
194
+ /** Maximum number of (validator, tx) pairs to keep in the tx validation LRU cache. */
195
+ txValidationCacheSize: number;
196
+
178
197
  /** True to disable the status handshake on peer connected. */
179
198
  p2pDisableStatusHandshake?: boolean;
180
199
 
@@ -207,34 +226,59 @@ export interface P2PConfig
207
226
  /** Minimum age (ms) a transaction must have been in the pool before it's eligible for block building. */
208
227
  minTxPoolAgeMs: number;
209
228
 
229
+ /**
230
+ * Number of full L2 slots to wait after a checkpoint's slot before declaring its txs missing
231
+ * for data-withholding slashing.
232
+ */
233
+ slashDataWithholdingToleranceSlots: number;
234
+
235
+ /**
236
+ * Number of L2 slots after a mined block's slot to keep collecting its missing txs. Clamped
237
+ * up so that collection always runs at least until the data-withholding slash verdict is
238
+ * rendered (`block.slot + slashDataWithholdingToleranceSlots + 1`). Defaults to undefined,
239
+ * in which case the tolerance window is used directly.
240
+ */
241
+ p2pMissingTxCollectionDeadlineSlots?: number;
242
+
210
243
  /** Minimum percentage fee increase required to replace an existing tx via RPC (0 = no bump). */
211
244
  priceBumpPercentage: bigint;
245
+
246
+ /** Drop incoming block and checkpoint proposals at the libp2p dispatch layer (for testing only) */
247
+ skipIncomingProposals?: boolean;
248
+
249
+ /** Accept proposal gossip regardless of slot timing (for testing only). */
250
+ skipProposalSlotValidation?: boolean;
251
+
252
+ /**
253
+ * Whether this node skips checkpoint proposal validation and always attests. When set, the checkpoint
254
+ * attestation is created and broadcast before the embedded last block is processed, so it is not delayed
255
+ * past the slot's attestation window by that block's re-execution. Mirrors the validator config flag.
256
+ */
257
+ skipCheckpointProposalValidation?: boolean;
212
258
  }
213
259
 
214
260
  export const DEFAULT_P2P_PORT = 40400;
215
261
 
262
+ /** Default endpoints used to discover this machine's public IPv4 when `queryForIp` is enabled. */
263
+ export const DEFAULT_PUBLIC_IP_SERVICES: string[] = [
264
+ 'https://api.ipify.org/',
265
+ 'https://checkip.amazonaws.com/',
266
+ 'https://ifconfig.me/ip',
267
+ 'https://icanhazip.com/',
268
+ ];
269
+
216
270
  export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
217
271
  validateMaxTxsPerBlock: {
218
272
  env: 'VALIDATOR_MAX_TX_PER_BLOCK',
219
273
  description:
220
274
  'Maximum transactions per block for validation. Overrides maxTxsPerBlock for gossip validation when set.',
221
- parseEnv: (val: string) => (val ? parseInt(val, 10) : undefined),
275
+ ...optionalNumberConfigHelper(),
222
276
  },
223
277
  validateMaxTxsPerCheckpoint: {
224
278
  env: 'VALIDATOR_MAX_TX_PER_CHECKPOINT',
225
279
  description:
226
280
  'Maximum transactions per checkpoint for validation. Used as fallback for maxTxsPerBlock when that is not set.',
227
- parseEnv: (val: string) => (val ? parseInt(val, 10) : undefined),
228
- },
229
- validateMaxL2BlockGas: {
230
- env: 'VALIDATOR_MAX_L2_BLOCK_GAS',
231
- description: 'Maximum L2 gas per block for validation. When set, txs exceeding this limit are rejected.',
232
- parseEnv: (val: string) => (val ? parseInt(val, 10) : undefined),
233
- },
234
- validateMaxDABlockGas: {
235
- env: 'VALIDATOR_MAX_DA_BLOCK_GAS',
236
- description: 'Maximum DA gas per block for validation. When set, txs exceeding this limit are rejected.',
237
- parseEnv: (val: string) => (val ? parseInt(val, 10) : undefined),
281
+ ...optionalNumberConfigHelper(),
238
282
  },
239
283
  p2pEnabled: {
240
284
  env: 'P2P_ENABLED',
@@ -251,11 +295,6 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
251
295
  description: 'The frequency in which to check for new L2 blocks.',
252
296
  ...numberConfigHelper(100),
253
297
  },
254
- slotCheckIntervalMS: {
255
- env: 'P2P_SLOT_CHECK_INTERVAL_MS',
256
- description: 'The frequency in which to check for new L2 slots.',
257
- ...numberConfigHelper(1000),
258
- },
259
298
  debugDisableColocationPenalty: {
260
299
  env: 'DEBUG_P2P_DISABLE_COLOCATION_PENALTY',
261
300
  description: 'DEBUG: Disable colocation penalty - NEVER set to true in production',
@@ -331,6 +370,17 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
331
370
  'If announceUdpAddress or announceTcpAddress are not provided, query for the IP address of the machine. Default is false.',
332
371
  ...booleanConfigHelper(),
333
372
  },
373
+ publicIpServices: {
374
+ env: 'P2P_PUBLIC_IP_SERVICES',
375
+ parseEnv: (val: string) =>
376
+ val
377
+ .split(',')
378
+ .map(s => s.trim())
379
+ .filter(Boolean),
380
+ description:
381
+ 'Comma-separated HTTPS URLs that return plain-text public IPv4. Used when P2P_QUERY_FOR_IP is true and P2P_IP is unset. Tried in order until one succeeds.',
382
+ defaultValue: DEFAULT_PUBLIC_IP_SERVICES,
383
+ },
334
384
  gossipsubInterval: {
335
385
  env: 'P2P_GOSSIPSUB_INTERVAL_MS',
336
386
  description: 'The interval of the gossipsub heartbeat to perform maintenance tasks.',
@@ -364,7 +414,7 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
364
414
  gossipsubMcacheLength: {
365
415
  env: 'P2P_GOSSIPSUB_MCACHE_LENGTH',
366
416
  description: 'The number of gossipsub interval message cache windows to keep.',
367
- ...numberConfigHelper(6),
417
+ ...numberConfigHelper(12),
368
418
  },
369
419
  gossipsubMcacheGossip: {
370
420
  env: 'P2P_GOSSIPSUB_MCACHE_GOSSIP',
@@ -376,6 +426,12 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
376
426
  description: 'How long to keep message IDs in the seen cache.',
377
427
  ...numberConfigHelper(20 * 60 * 1000),
378
428
  },
429
+ maxGossipClockDisparityMs: {
430
+ env: 'P2P_MAX_GOSSIP_CLOCK_DISPARITY_MS',
431
+ description:
432
+ 'Maximum clock-disparity tolerance (ms) applied to both ends of proposal/attestation gossip receive windows.',
433
+ ...numberConfigHelper(500),
434
+ },
379
435
  gossipsubTxTopicWeight: {
380
436
  env: 'P2P_GOSSIPSUB_TX_TOPIC_WEIGHT',
381
437
  description: 'The weight of the tx topic for the gossipsub protocol.',
@@ -398,6 +454,11 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
398
454
  'The values for the peer scoring system. Passed as a comma separated list of values in order: low, mid, high tolerance errors.',
399
455
  defaultValue: [2, 10, 50],
400
456
  },
457
+ peerBanDurationSeconds: {
458
+ env: 'P2P_PEER_BAN_DURATION_SECONDS',
459
+ description: 'How long (in seconds) a peer is banned for once its score drops below the ban threshold.',
460
+ ...numberConfigHelper(24 * 60 * 60),
461
+ },
401
462
  doubleSpendSeverePeerPenaltyWindow: {
402
463
  env: 'P2P_DOUBLE_SPEND_SEVERE_PEER_PENALTY_WINDOW',
403
464
  description: 'The "age" (in L2 blocks) of a tx after which we heavily penalize a peer for sending it.',
@@ -436,7 +497,7 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
436
497
  },
437
498
  p2pStoreMapSizeKb: {
438
499
  env: 'P2P_STORE_MAP_SIZE_KB',
439
- parseEnv: (val: string | undefined) => (val ? +val : undefined),
500
+ ...optionalNumberConfigHelper(),
440
501
  description: 'The maximum possible size of the P2P DB in KB. Overwrites the general dataStoreMapSizeKb.',
441
502
  },
442
503
  txPublicSetupAllowListExtend: {
@@ -459,6 +520,11 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
459
520
  description: 'The number of messages to keep in the seen message cache',
460
521
  ...numberConfigHelper(100_000), // 100K
461
522
  },
523
+ txValidationCacheSize: {
524
+ env: 'P2P_TX_VALIDATION_CACHE_SIZE',
525
+ description: 'Maximum number of items to keep in the tx validation LRU cache.',
526
+ ...numberConfigHelper(5_000),
527
+ },
462
528
  p2pDisableStatusHandshake: {
463
529
  env: 'P2P_DISABLE_STATUS_HANDSHAKE',
464
530
  description: 'True to disable the status handshake on peer connected.',
@@ -506,18 +572,49 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
506
572
  'Broadcast block proposals even when a conflicting proposal for the same slot already exists in the pool (for testing purposes only).',
507
573
  ...booleanConfigHelper(false),
508
574
  },
575
+ skipIncomingProposals: {
576
+ description: 'Drop incoming block and checkpoint proposals at the libp2p dispatch layer (for testing only)',
577
+ ...booleanConfigHelper(false),
578
+ },
579
+ skipProposalSlotValidation: {
580
+ description: 'Accept proposal gossip regardless of slot timing (for testing only)',
581
+ ...booleanConfigHelper(false),
582
+ },
583
+ skipCheckpointProposalValidation: {
584
+ description:
585
+ 'Skip checkpoint proposal validation and always attest, broadcasting the attestation before processing the embedded last block',
586
+ ...booleanConfigHelper(false),
587
+ },
509
588
  minTxPoolAgeMs: {
510
589
  env: 'P2P_MIN_TX_POOL_AGE_MS',
511
590
  description: 'Minimum age (ms) a transaction must have been in the pool before it is eligible for block building.',
512
591
  ...numberConfigHelper(2_000),
513
592
  },
593
+ slashDataWithholdingToleranceSlots: {
594
+ env: 'SLASH_DATA_WITHHOLDING_TOLERANCE_SLOTS',
595
+ description:
596
+ 'L2 slots to wait after a checkpoint slot before declaring its txs missing. Drives both the data-withholding slasher check and the missing-tx collection deadline.',
597
+ ...numberConfigHelper(3),
598
+ },
599
+ p2pMissingTxCollectionDeadlineSlots: {
600
+ env: 'P2P_MISSING_TX_COLLECTION_DEADLINE_SLOTS',
601
+ description:
602
+ 'Optional deadline (in L2 slots after the block slot) for collecting missing txs for unproven mined blocks. Clamped up to the data-withholding tolerance window so collection never gives up before the slash verdict.',
603
+ ...optionalNumberConfigHelper(),
604
+ },
514
605
  priceBumpPercentage: {
515
606
  env: 'P2P_RPC_PRICE_BUMP_PERCENTAGE',
516
607
  description:
517
608
  'Minimum percentage fee increase required to replace an existing tx via RPC. Even at 0%, replacement still requires paying at least 1 unit more.',
518
609
  ...bigintConfigHelper(10n),
519
610
  },
520
- ...sharedSequencerConfigMappings,
611
+ ...pickConfigMappings(sharedSequencerConfigMappings, [
612
+ 'expectedBlockProposalsPerSlot',
613
+ 'maxTxsPerBlock',
614
+ 'checkpointProposalSyncGraceSeconds',
615
+ 'maxBlocksPerCheckpoint',
616
+ 'blockDurationMs',
617
+ ]),
521
618
  ...p2pReqRespConfigMappings,
522
619
  ...batchTxRequesterConfigMappings,
523
620
  ...chainConfigMappings,
@@ -550,6 +647,7 @@ export type BootnodeConfig = Pick<
550
647
  | 'bootstrapNodes'
551
648
  | 'listenAddress'
552
649
  | 'queryForIp'
650
+ | 'publicIpServices'
553
651
  > &
554
652
  Required<Pick<P2PConfig, 'p2pIp' | 'p2pPort'>> &
555
653
  Pick<DataStoreConfig, 'dataDirectory' | 'dataStoreMapSizeKb'> &
@@ -567,6 +665,7 @@ const bootnodeConfigKeys: (keyof BootnodeConfig)[] = [
567
665
  'bootstrapNodes',
568
666
  'l1ChainId',
569
667
  'queryForIp',
668
+ 'publicIpServices',
570
669
  ];
571
670
 
572
671
  export const bootnodeConfigMappings = pickConfigMappings(
@@ -641,7 +740,7 @@ export function parseAllowList(value: string): AllowedElement[] {
641
740
 
642
741
  if (typeString === 'I') {
643
742
  entries.push({
644
- address: AztecAddress.fromString(identifierString),
743
+ address: AztecAddress.fromStringUnsafe(identifierString),
645
744
  selector,
646
745
  ...flags,
647
746
  });
@@ -0,0 +1,11 @@
1
+ /** Checkpoint Proposal Received Callback Not Registered Error
2
+ *
3
+ * Error triggered if the allNodesCheckpointReceivedCallback is not registered
4
+ * @category Errors
5
+ */
6
+ export class CheckpointProposalReceivedCallbackNotRegisteredError extends Error {
7
+ constructor() {
8
+ super('FATAL (allNodesCheckpointReceivedCallback): All nodes should register a checkpoint proposal handler');
9
+ this.name = 'CheckpointProposalReceivedCallbackNotRegisteredError';
10
+ }
11
+ }
@@ -8,28 +8,3 @@ export class IndividualReqRespTimeoutError extends Error {
8
8
  super(`Request to peer timed out`);
9
9
  }
10
10
  }
11
-
12
- /** Collective request timeout error
13
- *
14
- * This error will be thrown when a req resp request times out regardless of the peer.
15
- * @category Errors
16
- */
17
- export class CollectiveReqRespTimeoutError extends Error {
18
- constructor() {
19
- super(`Request to all peers timed out`);
20
- }
21
- }
22
-
23
- /** Invalid response error
24
- *
25
- * This error will be thrown when a response is received that is not valid.
26
- *
27
- * This error does not need to be punished as message validators will handle punishing invalid
28
- * requests
29
- * @category Errors
30
- */
31
- export class InvalidResponseError extends Error {
32
- constructor() {
33
- super(`Invalid response received`);
34
- }
35
- }
package/src/index.ts CHANGED
@@ -6,7 +6,6 @@ export * from './client/index.js';
6
6
  export * from './enr/index.js';
7
7
  export * from './config.js';
8
8
  export * from './mem_pools/attestation_pool/index.js';
9
- export * from './mem_pools/tx_pool/index.js';
10
9
  export * from './mem_pools/tx_pool_v2/index.js';
11
10
  export * from './msg_validators/index.js';
12
11
  export * from './services/index.js';