@aztec/p2p 0.0.1-commit.29c6b1a3 → 0.0.1-commit.2d9cb6034

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 (510) hide show
  1. package/README.md +129 -3
  2. package/dest/bootstrap/bootstrap.d.ts +4 -3
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +4 -4
  5. package/dest/client/factory.d.ts +11 -11
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +60 -19
  8. package/dest/client/interface.d.ts +54 -34
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +43 -52
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +181 -224
  13. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +22 -12
  14. package/dest/config.d.ts +60 -17
  15. package/dest/config.d.ts.map +1 -1
  16. package/dest/config.js +105 -39
  17. package/dest/errors/p2p-service.error.d.ts +9 -0
  18. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  19. package/dest/errors/p2p-service.error.js +10 -0
  20. package/dest/errors/tx-pool.error.d.ts +8 -0
  21. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  22. package/dest/errors/tx-pool.error.js +9 -0
  23. package/dest/index.d.ts +2 -2
  24. package/dest/index.d.ts.map +1 -1
  25. package/dest/index.js +1 -1
  26. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +104 -88
  27. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  28. package/dest/mem_pools/attestation_pool/attestation_pool.js +446 -3
  29. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  30. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  31. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +353 -87
  32. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  33. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  34. package/dest/mem_pools/attestation_pool/index.js +1 -2
  35. package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
  36. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  37. package/dest/mem_pools/attestation_pool/mocks.js +2 -2
  38. package/dest/mem_pools/index.d.ts +3 -3
  39. package/dest/mem_pools/index.d.ts.map +1 -1
  40. package/dest/mem_pools/index.js +1 -1
  41. package/dest/mem_pools/instrumentation.d.ts +4 -2
  42. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  43. package/dest/mem_pools/instrumentation.js +18 -16
  44. package/dest/mem_pools/interface.d.ts +5 -5
  45. package/dest/mem_pools/interface.d.ts.map +1 -1
  46. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  47. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  48. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  49. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
  50. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  51. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
  52. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  53. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  54. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  55. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  56. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  57. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  58. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  59. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  60. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
  61. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  62. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  63. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
  64. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +10 -0
  65. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  66. package/dest/mem_pools/tx_pool_v2/eviction/index.js +11 -0
  67. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  68. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  69. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  70. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  71. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  72. package/dest/mem_pools/{tx_pool → tx_pool_v2}/eviction/invalid_txs_after_mining_rule.js +16 -35
  73. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  74. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  75. package/dest/mem_pools/{tx_pool → tx_pool_v2}/eviction/invalid_txs_after_reorg_rule.js +39 -24
  76. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  77. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  78. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  82. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  83. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  84. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  85. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  86. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  87. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  88. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  89. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  90. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  91. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +215 -0
  92. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  93. package/dest/mem_pools/tx_pool_v2/interfaces.js +10 -0
  94. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +134 -0
  95. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  96. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +220 -0
  97. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  98. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  99. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  100. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
  101. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  102. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +337 -0
  103. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +62 -0
  104. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  105. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +167 -0
  106. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +78 -0
  107. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  108. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +923 -0
  109. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +1 -1
  110. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  111. package/dest/msg_validators/attestation_validator/attestation_validator.js +5 -4
  112. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +3 -3
  113. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  114. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +7 -2
  115. package/dest/msg_validators/clock_tolerance.d.ts +1 -1
  116. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  117. package/dest/msg_validators/clock_tolerance.js +4 -3
  118. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -4
  119. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  120. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  121. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -4
  122. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  123. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  124. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -8
  125. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  126. package/dest/msg_validators/proposal_validator/proposal_validator.js +53 -41
  127. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  128. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  129. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
  130. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  131. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  132. package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
  133. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  134. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  135. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  136. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  137. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  138. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  139. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
  140. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  141. package/dest/msg_validators/tx_validator/block_header_validator.js +5 -4
  142. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  143. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  144. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  145. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  146. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  147. package/dest/msg_validators/tx_validator/data_validator.js +39 -3
  148. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -4
  149. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  150. package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
  151. package/dest/msg_validators/tx_validator/factory.d.ts +135 -7
  152. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  153. package/dest/msg_validators/tx_validator/factory.js +247 -60
  154. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  155. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  156. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  157. package/dest/msg_validators/tx_validator/gas_validator.d.ts +68 -3
  158. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  159. package/dest/msg_validators/tx_validator/gas_validator.js +106 -38
  160. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  161. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  162. package/dest/msg_validators/tx_validator/index.js +2 -0
  163. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  164. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  165. package/dest/msg_validators/tx_validator/metadata_validator.js +6 -6
  166. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  167. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  168. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  169. package/dest/msg_validators/tx_validator/phases_validator.d.ts +24 -3
  170. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  171. package/dest/msg_validators/tx_validator/phases_validator.js +75 -27
  172. package/dest/msg_validators/tx_validator/size_validator.d.ts +3 -1
  173. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -1
  174. package/dest/msg_validators/tx_validator/size_validator.js +4 -1
  175. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +22 -5
  176. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  177. package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
  178. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  179. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  180. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  181. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  182. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  183. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  184. package/dest/services/data_store.d.ts +1 -1
  185. package/dest/services/data_store.d.ts.map +1 -1
  186. package/dest/services/data_store.js +10 -6
  187. package/dest/services/discv5/discV5_service.js +1 -1
  188. package/dest/services/dummy_service.d.ts +16 -6
  189. package/dest/services/dummy_service.d.ts.map +1 -1
  190. package/dest/services/dummy_service.js +15 -5
  191. package/dest/services/encoding.d.ts +7 -3
  192. package/dest/services/encoding.d.ts.map +1 -1
  193. package/dest/services/encoding.js +18 -11
  194. package/dest/services/gossipsub/index.d.ts +3 -0
  195. package/dest/services/gossipsub/index.d.ts.map +1 -0
  196. package/dest/services/gossipsub/index.js +2 -0
  197. package/dest/services/gossipsub/scoring.d.ts +21 -3
  198. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  199. package/dest/services/gossipsub/scoring.js +24 -7
  200. package/dest/services/gossipsub/topic_score_params.d.ts +173 -0
  201. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  202. package/dest/services/gossipsub/topic_score_params.js +346 -0
  203. package/dest/services/index.d.ts +2 -1
  204. package/dest/services/index.d.ts.map +1 -1
  205. package/dest/services/index.js +1 -0
  206. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  207. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  208. package/dest/services/libp2p/instrumentation.js +14 -3
  209. package/dest/services/libp2p/libp2p_service.d.ts +106 -51
  210. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  211. package/dest/services/libp2p/libp2p_service.js +547 -387
  212. package/dest/services/peer-manager/metrics.d.ts +4 -2
  213. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  214. package/dest/services/peer-manager/metrics.js +26 -5
  215. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  216. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  217. package/dest/services/peer-manager/peer_manager.js +24 -9
  218. package/dest/services/peer-manager/peer_scoring.d.ts +5 -2
  219. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  220. package/dest/services/peer-manager/peer_scoring.js +61 -14
  221. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +14 -10
  222. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  223. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +89 -112
  224. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +4 -7
  225. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  226. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +11 -13
  227. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  228. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +31 -46
  229. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
  230. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  231. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
  232. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +2 -2
  233. package/dest/services/reqresp/interface.d.ts +10 -1
  234. package/dest/services/reqresp/interface.d.ts.map +1 -1
  235. package/dest/services/reqresp/interface.js +15 -1
  236. package/dest/services/reqresp/metrics.d.ts +6 -5
  237. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  238. package/dest/services/reqresp/metrics.js +17 -5
  239. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  240. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  241. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +17 -12
  242. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +25 -14
  243. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  244. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +40 -24
  245. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  246. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  247. package/dest/services/reqresp/protocols/tx.js +20 -0
  248. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  249. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  250. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  251. package/dest/services/reqresp/reqresp.d.ts +1 -1
  252. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  253. package/dest/services/reqresp/reqresp.js +30 -14
  254. package/dest/services/service.d.ts +43 -4
  255. package/dest/services/service.d.ts.map +1 -1
  256. package/dest/services/tx_collection/config.d.ts +22 -4
  257. package/dest/services/tx_collection/config.d.ts.map +1 -1
  258. package/dest/services/tx_collection/config.js +49 -3
  259. package/dest/services/tx_collection/fast_tx_collection.d.ts +6 -8
  260. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  261. package/dest/services/tx_collection/fast_tx_collection.js +88 -88
  262. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  263. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  264. package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
  265. package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
  266. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  267. package/dest/services/tx_collection/file_store_tx_source.js +100 -0
  268. package/dest/services/tx_collection/index.d.ts +3 -2
  269. package/dest/services/tx_collection/index.d.ts.map +1 -1
  270. package/dest/services/tx_collection/index.js +1 -0
  271. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  272. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  273. package/dest/services/tx_collection/instrumentation.js +10 -2
  274. package/dest/services/tx_collection/proposal_tx_collector.d.ts +15 -15
  275. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
  276. package/dest/services/tx_collection/proposal_tx_collector.js +6 -6
  277. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  278. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  279. package/dest/services/tx_collection/request_tracker.js +84 -0
  280. package/dest/services/tx_collection/slow_tx_collection.d.ts +7 -3
  281. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  282. package/dest/services/tx_collection/slow_tx_collection.js +60 -26
  283. package/dest/services/tx_collection/tx_collection.d.ts +23 -13
  284. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  285. package/dest/services/tx_collection/tx_collection.js +75 -3
  286. package/dest/services/tx_collection/tx_collection_sink.d.ts +18 -8
  287. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  288. package/dest/services/tx_collection/tx_collection_sink.js +26 -29
  289. package/dest/services/tx_collection/tx_source.d.ts +13 -7
  290. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  291. package/dest/services/tx_collection/tx_source.js +26 -7
  292. package/dest/services/tx_file_store/config.d.ts +16 -0
  293. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  294. package/dest/services/tx_file_store/config.js +22 -0
  295. package/dest/services/tx_file_store/index.d.ts +4 -0
  296. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  297. package/dest/services/tx_file_store/index.js +3 -0
  298. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  299. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  300. package/dest/services/tx_file_store/instrumentation.js +29 -0
  301. package/dest/services/tx_file_store/tx_file_store.d.ts +48 -0
  302. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  303. package/dest/services/tx_file_store/tx_file_store.js +152 -0
  304. package/dest/services/tx_provider.d.ts +4 -4
  305. package/dest/services/tx_provider.d.ts.map +1 -1
  306. package/dest/services/tx_provider.js +9 -8
  307. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  308. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  309. package/dest/services/tx_provider_instrumentation.js +5 -5
  310. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  311. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  312. package/dest/test-helpers/make-test-p2p-clients.js +1 -2
  313. package/dest/test-helpers/mock-pubsub.d.ts +30 -4
  314. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  315. package/dest/test-helpers/mock-pubsub.js +105 -4
  316. package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
  317. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  318. package/dest/test-helpers/reqresp-nodes.js +4 -3
  319. package/dest/test-helpers/testbench-utils.d.ts +45 -38
  320. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  321. package/dest/test-helpers/testbench-utils.js +151 -62
  322. package/dest/testbench/p2p_client_testbench_worker.d.ts +2 -2
  323. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  324. package/dest/testbench/p2p_client_testbench_worker.js +59 -29
  325. package/dest/testbench/worker_client_manager.d.ts +3 -1
  326. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  327. package/dest/testbench/worker_client_manager.js +6 -3
  328. package/dest/util.d.ts +3 -3
  329. package/dest/util.d.ts.map +1 -1
  330. package/package.json +14 -14
  331. package/src/bootstrap/bootstrap.ts +7 -4
  332. package/src/client/factory.ts +113 -37
  333. package/src/client/interface.ts +65 -35
  334. package/src/client/p2p_client.ts +217 -269
  335. package/src/client/test/tx_proposal_collector/README.md +4 -4
  336. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +35 -16
  337. package/src/config.ts +165 -44
  338. package/src/errors/p2p-service.error.ts +11 -0
  339. package/src/errors/tx-pool.error.ts +12 -0
  340. package/src/index.ts +1 -1
  341. package/src/mem_pools/attestation_pool/attestation_pool.ts +499 -91
  342. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +442 -102
  343. package/src/mem_pools/attestation_pool/index.ts +9 -2
  344. package/src/mem_pools/attestation_pool/mocks.ts +2 -1
  345. package/src/mem_pools/index.ts +2 -2
  346. package/src/mem_pools/instrumentation.ts +19 -14
  347. package/src/mem_pools/interface.ts +4 -4
  348. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  349. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  350. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
  351. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  352. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  353. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
  354. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  355. package/src/mem_pools/tx_pool_v2/eviction/index.ts +27 -0
  356. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  357. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  358. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  359. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  360. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  361. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  362. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  363. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  364. package/src/mem_pools/tx_pool_v2/interfaces.ts +247 -0
  365. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +343 -0
  366. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  367. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +430 -0
  368. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +238 -0
  369. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1105 -0
  370. package/src/msg_validators/attestation_validator/README.md +49 -0
  371. package/src/msg_validators/attestation_validator/attestation_validator.ts +5 -4
  372. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +10 -4
  373. package/src/msg_validators/clock_tolerance.ts +4 -3
  374. package/src/msg_validators/proposal_validator/README.md +123 -0
  375. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +14 -4
  376. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +20 -7
  377. package/src/msg_validators/proposal_validator/proposal_validator.ts +69 -45
  378. package/src/msg_validators/tx_validator/README.md +119 -0
  379. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +5 -5
  380. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  381. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  382. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  383. package/src/msg_validators/tx_validator/block_header_validator.ts +22 -11
  384. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  385. package/src/msg_validators/tx_validator/data_validator.ts +48 -3
  386. package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
  387. package/src/msg_validators/tx_validator/factory.ts +401 -69
  388. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  389. package/src/msg_validators/tx_validator/gas_validator.ts +132 -30
  390. package/src/msg_validators/tx_validator/index.ts +2 -0
  391. package/src/msg_validators/tx_validator/metadata_validator.ts +18 -7
  392. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  393. package/src/msg_validators/tx_validator/phases_validator.ts +87 -30
  394. package/src/msg_validators/tx_validator/size_validator.ts +6 -2
  395. package/src/msg_validators/tx_validator/timestamp_validator.ts +29 -21
  396. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  397. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  398. package/src/services/data_store.ts +10 -7
  399. package/src/services/discv5/discV5_service.ts +1 -1
  400. package/src/services/dummy_service.ts +24 -7
  401. package/src/services/encoding.ts +18 -10
  402. package/src/services/gossipsub/README.md +641 -0
  403. package/src/services/gossipsub/index.ts +2 -0
  404. package/src/services/gossipsub/scoring.ts +29 -5
  405. package/src/services/gossipsub/topic_score_params.ts +487 -0
  406. package/src/services/index.ts +1 -0
  407. package/src/services/libp2p/instrumentation.ts +15 -2
  408. package/src/services/libp2p/libp2p_service.ts +584 -428
  409. package/src/services/peer-manager/metrics.ts +28 -4
  410. package/src/services/peer-manager/peer_manager.ts +28 -9
  411. package/src/services/peer-manager/peer_scoring.ts +50 -6
  412. package/src/services/reqresp/README.md +229 -0
  413. package/src/services/reqresp/batch-tx-requester/README.md +60 -21
  414. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +89 -122
  415. package/src/services/reqresp/batch-tx-requester/interface.ts +3 -6
  416. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +30 -71
  417. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  418. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +2 -2
  419. package/src/services/reqresp/interface.ts +26 -1
  420. package/src/services/reqresp/metrics.ts +34 -9
  421. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +24 -15
  422. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -24
  423. package/src/services/reqresp/protocols/tx.ts +22 -0
  424. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  425. package/src/services/reqresp/reqresp.ts +35 -15
  426. package/src/services/service.ts +57 -3
  427. package/src/services/tx_collection/config.ts +74 -6
  428. package/src/services/tx_collection/fast_tx_collection.ts +94 -97
  429. package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
  430. package/src/services/tx_collection/file_store_tx_source.ts +129 -0
  431. package/src/services/tx_collection/index.ts +2 -1
  432. package/src/services/tx_collection/instrumentation.ts +17 -2
  433. package/src/services/tx_collection/proposal_tx_collector.ts +21 -27
  434. package/src/services/tx_collection/request_tracker.ts +127 -0
  435. package/src/services/tx_collection/slow_tx_collection.ts +66 -33
  436. package/src/services/tx_collection/tx_collection.ts +114 -19
  437. package/src/services/tx_collection/tx_collection_sink.ts +30 -34
  438. package/src/services/tx_collection/tx_source.ts +28 -8
  439. package/src/services/tx_file_store/config.ts +37 -0
  440. package/src/services/tx_file_store/index.ts +3 -0
  441. package/src/services/tx_file_store/instrumentation.ts +36 -0
  442. package/src/services/tx_file_store/tx_file_store.ts +175 -0
  443. package/src/services/tx_provider.ts +10 -9
  444. package/src/services/tx_provider_instrumentation.ts +11 -5
  445. package/src/test-helpers/make-test-p2p-clients.ts +4 -6
  446. package/src/test-helpers/mock-pubsub.ts +146 -9
  447. package/src/test-helpers/reqresp-nodes.ts +5 -7
  448. package/src/test-helpers/testbench-utils.ts +158 -74
  449. package/src/testbench/p2p_client_testbench_worker.ts +65 -32
  450. package/src/testbench/worker_client_manager.ts +13 -6
  451. package/src/util.ts +8 -2
  452. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  453. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  454. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  455. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  456. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  457. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  458. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  459. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  460. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  461. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  462. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  463. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  464. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  465. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  466. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  467. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  468. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  469. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  470. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  471. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  472. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  473. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  474. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  475. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  476. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  477. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  478. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  479. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  480. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  481. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  482. package/dest/mem_pools/tx_pool/index.js +0 -2
  483. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  484. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  485. package/dest/mem_pools/tx_pool/priority.js +0 -15
  486. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  487. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  488. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  489. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  490. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  491. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  492. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  493. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  494. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  495. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  496. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  497. package/src/mem_pools/tx_pool/README.md +0 -270
  498. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  499. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  500. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  501. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  502. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  503. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  504. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  505. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  506. package/src/mem_pools/tx_pool/index.ts +0 -2
  507. package/src/mem_pools/tx_pool/priority.ts +0 -20
  508. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  509. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  510. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
@@ -1,17 +1,23 @@
1
1
  import { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
3
- import type { BlockProposal } from '@aztec/stdlib/p2p';
4
- import { TxArray, TxHash, TxHashArray } from '@aztec/stdlib/tx';
3
+ import { MAX_TX_SIZE_KB } from '@aztec/stdlib/p2p';
4
+ import { TxArray, type TxHash, TxHashArray } from '@aztec/stdlib/tx';
5
5
 
6
6
  import { BitVector } from './bitvector.js';
7
7
 
8
+ /** Minimal interface for a block source that provides tx hashes and an archive root. */
9
+ export interface BlockTxsSource {
10
+ txHashes: TxHash[];
11
+ archive: Fr;
12
+ }
13
+
8
14
  /**
9
15
  * Request message for requesting specific transactions from a block
10
16
  */
11
17
  export class BlockTxsRequest {
12
18
  constructor(
13
- // 32 byte hash of the proposed block header
14
- readonly blockHash: Fr,
19
+ // Archive root after the proposed block is applied (proposal identifier)
20
+ readonly archiveRoot: Fr,
15
21
  // Hashes of txs we are requesting
16
22
  readonly txHashes: TxHashArray,
17
23
  // BitVector indicating which txs from the proposal we are requesting
@@ -22,16 +28,17 @@ export class BlockTxsRequest {
22
28
  ) {}
23
29
 
24
30
  /**
25
- * Crates new BlockTxsRequest given proposal and missing tx hashes
31
+ * Creates new BlockTxsRequest given a block txs source and missing tx hashes.
26
32
  *
27
- * @param: blockProposal - The block proposal for which we are making request
28
- * @param: missingTxHashes - Tx hashes from the proposal we are missing
29
- * @param: includeFullTxHashes - Whether to include full list of missing tx hashes in the request or just Bitvector indices
33
+ * @param blockTxsSource - The block or proposal for which we are making the request
34
+ * @param missingTxHashes - Tx hashes from the source we are missing
35
+ * @param includeFullTxHashes - Whether to include full list of missing tx hashes in the request or just Bitvector indices
30
36
  *
31
- * @returns undefined if there were no missingTxHashes matching BlockProposal hashes, otherwise
32
- * returns new BlockTxsRequest*/
33
- static fromBlockProposalAndMissingTxs(
34
- blockProposal: BlockProposal,
37
+ * @returns undefined if there were no missingTxHashes matching the source hashes, otherwise
38
+ * returns new BlockTxsRequest
39
+ */
40
+ static fromTxsSourceAndMissingTxs(
41
+ blockTxsSource: BlockTxsSource,
35
42
  missingTxHashes: TxHash[],
36
43
  includeFullTxHashes = false,
37
44
  ): BlockTxsRequest | undefined {
@@ -41,19 +48,19 @@ export class BlockTxsRequest {
41
48
 
42
49
  const missingHashesSet = new Set(missingTxHashes.map(t => t.toString()));
43
50
 
44
- // We cannot request txs that are not part of the block proposal
45
- if (!missingHashesSet.isSubsetOf(new Set(blockProposal.txHashes.map(t => t.toString())))) {
51
+ // We cannot request txs that are not part of the block
52
+ if (!missingHashesSet.isSubsetOf(new Set(blockTxsSource.txHashes.map(t => t.toString())))) {
46
53
  return undefined;
47
54
  }
48
55
 
49
- const missingIndices = blockProposal.txHashes
56
+ const missingIndices = blockTxsSource.txHashes
50
57
  .map((hash, idx) => (missingHashesSet.has(hash.toString()) ? idx : -1))
51
58
  .filter(i => i != -1);
52
59
 
53
- const requestBitVector = BitVector.init(blockProposal.txHashes.length, missingIndices);
60
+ const requestBitVector = BitVector.init(blockTxsSource.txHashes.length, missingIndices);
54
61
  const hashes = includeFullTxHashes ? new TxHashArray(...missingTxHashes) : new TxHashArray();
55
62
 
56
- return new BlockTxsRequest(blockProposal.archive, hashes, requestBitVector);
63
+ return new BlockTxsRequest(blockTxsSource.archive, hashes, requestBitVector);
57
64
  }
58
65
 
59
66
  /**
@@ -63,11 +70,11 @@ export class BlockTxsRequest {
63
70
  */
64
71
  static fromBuffer(buffer: Buffer | BufferReader): BlockTxsRequest {
65
72
  const reader = BufferReader.asReader(buffer);
66
- const blockHash = Fr.fromBuffer(reader);
73
+ const archiveRoot = Fr.fromBuffer(reader);
67
74
  const txHashes = TxHashArray.fromBuffer(reader);
68
75
  const txIndices = BitVector.fromBuffer(reader);
69
76
 
70
- return new BlockTxsRequest(blockHash, txHashes, txIndices);
77
+ return new BlockTxsRequest(archiveRoot, txHashes, txIndices);
71
78
  }
72
79
 
73
80
  /**
@@ -75,7 +82,7 @@ export class BlockTxsRequest {
75
82
  * @returns Buffer representation of the BlockTxRequest object
76
83
  */
77
84
  toBuffer(): Buffer {
78
- return serializeToBuffer([this.blockHash, this.txHashes.toBuffer(), this.txIndices.toBuffer()]);
85
+ return serializeToBuffer([this.archiveRoot, this.txHashes.toBuffer(), this.txIndices.toBuffer()]);
79
86
  }
80
87
  }
81
88
 
@@ -84,7 +91,7 @@ export class BlockTxsRequest {
84
91
  */
85
92
  export class BlockTxsResponse {
86
93
  constructor(
87
- readonly blockHash: Fr,
94
+ readonly archiveRoot: Fr,
88
95
  readonly txs: TxArray, // List of transactions we requested and peer has
89
96
  // BitVector indicating which txs from the proposal are available at the peer
90
97
  // 1 means the tx is available, 0 means it is not
@@ -98,11 +105,11 @@ export class BlockTxsResponse {
98
105
  */
99
106
  static fromBuffer(buffer: Buffer | BufferReader): BlockTxsResponse {
100
107
  const reader = BufferReader.asReader(buffer);
101
- const blockHash = Fr.fromBuffer(reader);
108
+ const archiveRoot = Fr.fromBuffer(reader);
102
109
  const txs = TxArray.fromBuffer(reader);
103
110
  const txIndices = BitVector.fromBuffer(reader);
104
111
 
105
- return new BlockTxsResponse(blockHash, txs, txIndices);
112
+ return new BlockTxsResponse(archiveRoot, txs, txIndices);
106
113
  }
107
114
 
108
115
  /**
@@ -112,10 +119,26 @@ export class BlockTxsResponse {
112
119
  * @returns Buffer representation of the BlockTxResponse object
113
120
  */
114
121
  toBuffer(): Buffer {
115
- return serializeToBuffer([this.blockHash, this.txs.toBuffer(), this.txIndices.toBuffer()]);
122
+ return serializeToBuffer([this.archiveRoot, this.txs.toBuffer(), this.txIndices.toBuffer()]);
116
123
  }
117
124
 
118
125
  static empty(): BlockTxsResponse {
119
126
  return new BlockTxsResponse(Fr.ZERO, new TxArray(), BitVector.init(0, []));
120
127
  }
121
128
  }
129
+
130
+ /**
131
+ * Calculate the expected response size for a BLOCK_TXS request.
132
+ * @param requestBuffer - The serialized request buffer containing BlockTxsRequest
133
+ * @returns Expected response size in KB
134
+ */
135
+ export function calculateBlockTxsResponseSize(requestBuffer: Buffer): number {
136
+ try {
137
+ const request = BlockTxsRequest.fromBuffer(requestBuffer);
138
+ const requestedTxCount = request.txIndices.getTrueIndices().length;
139
+ return requestedTxCount * MAX_TX_SIZE_KB + 1; // +1 KB overhead for serialization
140
+ } catch {
141
+ // If we can't parse the request, fall back to allowing a single transaction response
142
+ return MAX_TX_SIZE_KB + 1;
143
+ }
144
+ }
@@ -1,4 +1,5 @@
1
1
  import { chunk } from '@aztec/foundation/collection';
2
+ import { MAX_TX_SIZE_KB } from '@aztec/stdlib/p2p';
2
3
  import { TxArray, TxHash, TxHashArray } from '@aztec/stdlib/tx';
3
4
 
4
5
  import type { PeerId } from '@libp2p/interface';
@@ -55,3 +56,24 @@ export function reqRespTxHandler(mempools: MemPools): ReqRespSubProtocolHandler
55
56
  export function chunkTxHashesRequest(hashes: TxHash[], chunkSize = 1): Array<TxHashArray> {
56
57
  return chunk(hashes, chunkSize).map(chunk => new TxHashArray(...chunk));
57
58
  }
59
+
60
+ /**
61
+ * Calculate the expected response size for a TX request.
62
+ * @param requestBuffer - The serialized request buffer containing TxHashArray
63
+ * @returns Expected response size in KB
64
+ */
65
+ export function calculateTxResponseSize(requestBuffer: Buffer): number {
66
+ try {
67
+ const txHashes = TxHashArray.fromBuffer(requestBuffer);
68
+ // TxHashArray.fromBuffer returns empty array on parse failure, so check for that
69
+ if (txHashes.length === 0 && requestBuffer.length > 0) {
70
+ // If we got an empty array but had a non-empty buffer, parsing likely failed
71
+ // Fall back to allowing a single transaction response
72
+ return MAX_TX_SIZE_KB + 1;
73
+ }
74
+ return Math.max(txHashes.length, 1) * MAX_TX_SIZE_KB + 1; // +1 KB overhead, at least 1 tx
75
+ } catch {
76
+ // If we can't parse the request, fall back to allowing a single transaction response
77
+ return MAX_TX_SIZE_KB + 1;
78
+ }
79
+ }
@@ -97,9 +97,10 @@ export function prettyPrintRateLimitStatus(status: RateLimitStatus) {
97
97
  * 2. Individual rate limits for each peer.
98
98
  *
99
99
  * How it works:
100
- * - When a request comes in, it first checks against the global rate limit.
101
- * - If the global limit allows, it then checks against the specific peer's rate limit.
102
- * - The request is only allowed if both the global and peer-specific limits allow it.
100
+ * - When a request comes in, it first checks against the peer's individual rate limit.
101
+ * - If the peer limit allows, it then checks against the global rate limit.
102
+ * - The request is only allowed if both the peer-specific and global limits allow it.
103
+ * - Checking peer limit first ensures a rate-limited peer cannot exhaust the global quota.
103
104
  * - It automatically creates and manages rate limiters for new peers as they make requests.
104
105
  * - It periodically cleans up rate limiters for inactive peers to conserve memory.
105
106
  *
@@ -119,10 +120,6 @@ export class SubProtocolRateLimiter {
119
120
  }
120
121
 
121
122
  allow(peerId: PeerId): RateLimitStatus {
122
- if (!this.globalLimiter.allow()) {
123
- return RateLimitStatus.DeniedGlobal;
124
- }
125
-
126
123
  const peerIdStr = peerId.toString();
127
124
  let peerLimiter: PeerRateLimiter | undefined = this.peerLimiters.get(peerIdStr);
128
125
  if (!peerLimiter) {
@@ -135,10 +132,17 @@ export class SubProtocolRateLimiter {
135
132
  } else {
136
133
  peerLimiter.lastAccess = Date.now();
137
134
  }
138
- const peerLimitAllowed = peerLimiter.limiter.allow();
139
- if (!peerLimitAllowed) {
135
+
136
+ // Check peer limit first: a rate-limited peer must not consume global quota,
137
+ // otherwise one spamming peer can starve all others by exhausting the global bucket.
138
+ if (!peerLimiter.limiter.allow()) {
140
139
  return RateLimitStatus.DeniedPeer;
141
140
  }
141
+
142
+ if (!this.globalLimiter.allow()) {
143
+ return RateLimitStatus.DeniedGlobal;
144
+ }
145
+
142
146
  return RateLimitStatus.Allowed;
143
147
  }
144
148
 
@@ -16,7 +16,7 @@ import {
16
16
  IndividualReqRespTimeoutError,
17
17
  InvalidResponseError,
18
18
  } from '../../errors/reqresp.error.js';
19
- import { SnappyTransform } from '../encoding.js';
19
+ import { OversizedSnappyResponseError, SnappyTransform } from '../encoding.js';
20
20
  import type { PeerScoring } from '../peer-manager/peer_scoring.js';
21
21
  import {
22
22
  DEFAULT_INDIVIDUAL_REQUEST_TIMEOUT_MS,
@@ -36,6 +36,7 @@ import {
36
36
  type ReqRespSubProtocolValidators,
37
37
  type SubProtocolMap,
38
38
  responseFromBuffer,
39
+ subProtocolSizeCalculators,
39
40
  } from './interface.js';
40
41
  import { ReqRespMetrics } from './metrics.js';
41
42
  import {
@@ -319,7 +320,7 @@ export class ReqResp implements ReqRespInterface {
319
320
  };
320
321
 
321
322
  for (const index of indices) {
322
- this.logger.info(`Sending request ${index} to peer ${peerAsString}`);
323
+ this.logger.trace(`Sending request ${index} to peer ${peerAsString}`);
323
324
  const response = await this.sendRequestToPeer(peer, subProtocol, requestBuffers[index]);
324
325
 
325
326
  // Check the status of the response buffer
@@ -437,6 +438,9 @@ export class ReqResp implements ReqRespInterface {
437
438
  try {
438
439
  this.metrics.recordRequestSent(subProtocol);
439
440
 
441
+ // Calculate expected response size based on the request payload
442
+ const expectedSizeKb = subProtocolSizeCalculators[subProtocol](payload);
443
+
440
444
  this.logger.trace(`Sending request to peer ${peerId.toString()} on sub protocol ${subProtocol}`);
441
445
  stream = await this.connectionSampler.dialProtocol(peerId, subProtocol, dialTimeout);
442
446
  this.logger.trace(
@@ -444,11 +448,14 @@ export class ReqResp implements ReqRespInterface {
444
448
  );
445
449
 
446
450
  const timeoutErr = new IndividualReqRespTimeoutError();
451
+ // Create a wrapper to pass the expected size to readMessage
452
+ const readMessageWithSizeLimit = (source: AsyncIterable<Uint8ArrayList>) =>
453
+ this.readMessage(source, expectedSizeKb);
447
454
  const [_, resp] = await executeTimeout(
448
455
  signal =>
449
456
  Promise.all([
450
457
  pipeline([payload], stream!.sink, { signal }),
451
- pipeline(stream!.source, this.readMessage.bind(this), { signal }),
458
+ pipeline(stream!.source, readMessageWithSizeLimit, { signal }),
452
459
  ]),
453
460
  this.individualRequestTimeoutMs,
454
461
  () => timeoutErr,
@@ -510,8 +517,11 @@ export class ReqResp implements ReqRespInterface {
510
517
  * The message is split into two components
511
518
  * - The first chunk should contain a control byte, indicating the status of the response see `ReqRespStatus`
512
519
  * - The second chunk should contain the response data
520
+ *
521
+ * @param source - The async iterable source of data chunks
522
+ * @param maxSizeKb - Optional maximum expected size in KB for the decompressed response
513
523
  */
514
- private async readMessage(source: AsyncIterable<Uint8ArrayList>): Promise<ReqRespResponse> {
524
+ private async readMessage(source: AsyncIterable<Uint8ArrayList>, maxSizeKb?: number): Promise<ReqRespResponse> {
515
525
  let status: ReqRespStatus | undefined;
516
526
  const chunks: Uint8Array[] = [];
517
527
 
@@ -536,23 +546,17 @@ export class ReqResp implements ReqRespInterface {
536
546
  }
537
547
 
538
548
  const messageData = Buffer.concat(chunks);
539
- const message: Buffer = this.snappyTransform.inboundTransformData(messageData);
549
+ const message: Buffer = this.snappyTransform.inboundTransformData(messageData, undefined, maxSizeKb);
540
550
 
541
551
  return {
542
552
  status: status ?? ReqRespStatus.UNKNOWN,
543
553
  data: message,
544
554
  };
545
555
  } catch (e: any) {
556
+ // All errors (invalid status bytes, oversized snappy responses, corrupt data, etc.)
557
+ // are re-thrown so the caller can penalize the peer via handleResponseError.
546
558
  this.logger.debug(`Reading message failed: ${e.message}`);
547
-
548
- let status = ReqRespStatus.UNKNOWN;
549
- if (e instanceof ReqRespStatusError) {
550
- status = e.status;
551
- }
552
-
553
- return {
554
- status,
555
- };
559
+ throw e;
556
560
  }
557
561
  }
558
562
 
@@ -617,7 +621,9 @@ export class ReqResp implements ReqRespInterface {
617
621
  // and that this stream should be dropped
618
622
  const isMessageToNotWarn =
619
623
  err instanceof Error &&
620
- ['stream reset', 'Cannot push value onto an ended pushable'].some(msg => err.message.includes(msg));
624
+ ['stream reset', 'Cannot push value onto an ended pushable', 'read ECONNRESET'].some(msg =>
625
+ err.message.includes(msg),
626
+ );
621
627
  const level = isMessageToNotWarn ? 'debug' : 'warn';
622
628
  this.logger[level]('Unknown stream error while handling the stream, aborting', {
623
629
  protocol,
@@ -768,6 +774,20 @@ export class ReqResp implements ReqRespInterface {
768
774
  return undefined;
769
775
  }
770
776
 
777
+ // Invalid status byte: the peer sent a status byte that doesn't match any known status code.
778
+ // This is a protocol violation, penalize harshly.
779
+ if (e instanceof ReqRespStatusError) {
780
+ this.logger.warn(`Invalid status byte from peer ${peerId.toString()} in ${subProtocol}: ${e.message}`, logTags);
781
+ return PeerErrorSeverity.LowToleranceError;
782
+ }
783
+
784
+ // Oversized snappy response: the peer is sending data that exceeds the allowed size.
785
+ // This is a protocol violation that wastes bandwidth, so penalize harshly.
786
+ if (e instanceof OversizedSnappyResponseError) {
787
+ this.logger.warn(`Oversized response from peer ${peerId.toString()} in ${subProtocol}: ${e.message}`, logTags);
788
+ return PeerErrorSeverity.LowToleranceError;
789
+ }
790
+
771
791
  return this.categorizeConnectionErrors(e, peerId, subProtocol);
772
792
  }
773
793
 
@@ -1,6 +1,13 @@
1
+ import type { SlotNumber } from '@aztec/foundation/branded-types';
1
2
  import type { EthAddress } from '@aztec/foundation/eth-address';
2
3
  import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
3
- import type { BlockProposal, CheckpointAttestation, CheckpointProposalCore, Gossipable } from '@aztec/stdlib/p2p';
4
+ import type {
5
+ BlockProposal,
6
+ CheckpointAttestation,
7
+ CheckpointProposalCore,
8
+ Gossipable,
9
+ TopicType,
10
+ } from '@aztec/stdlib/p2p';
4
11
  import type { Tx } from '@aztec/stdlib/tx';
5
12
 
6
13
  import type { PeerId } from '@libp2p/interface';
@@ -43,6 +50,32 @@ export type P2PCheckpointReceivedCallback = (
43
50
 
44
51
  export type AuthReceivedCallback = (peerId: PeerId, authRequest: AuthRequest) => Promise<AuthResponse | undefined>;
45
52
 
53
+ /** Minimal info passed to the duplicate proposal callback. */
54
+ export type DuplicateProposalInfo = {
55
+ slot: SlotNumber;
56
+ proposer: EthAddress;
57
+ type: 'checkpoint' | 'block';
58
+ };
59
+
60
+ /**
61
+ * Callback for when a duplicate proposal is detected (equivocation).
62
+ * Invoked on the first duplicate (when count goes from 1 to 2).
63
+ */
64
+ export type P2PDuplicateProposalCallback = (info: DuplicateProposalInfo) => void;
65
+
66
+ /** Minimal info passed to the duplicate attestation callback. */
67
+ export type DuplicateAttestationInfo = {
68
+ slot: SlotNumber;
69
+ attester: EthAddress;
70
+ };
71
+
72
+ /**
73
+ * Callback for when a duplicate attestation is detected (equivocation).
74
+ * A validator signing attestations for different proposals at the same slot.
75
+ * Invoked on the first duplicate (when count goes from 1 to 2).
76
+ */
77
+ export type P2PDuplicateAttestationCallback = (info: DuplicateAttestationInfo) => void;
78
+
46
79
  /**
47
80
  * The interface for a P2P service implementation.
48
81
  */
@@ -84,13 +117,34 @@ export interface P2PService {
84
117
  // Leaky abstraction: fix https://github.com/AztecProtocol/aztec-packages/issues/7963
85
118
  registerBlockReceivedCallback(callback: P2PBlockReceivedCallback): void;
86
119
 
87
- registerCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback): void;
120
+ registerValidatorCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback): void;
121
+
122
+ registerAllNodesCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback): void;
123
+
124
+ /** Fires the all-nodes checkpoint callback for our own proposal (gossipsub doesn't deliver own messages). */
125
+ notifyOwnCheckpointProposal(checkpoint: CheckpointProposalCore): Promise<void>;
126
+
127
+ /**
128
+ * Registers a callback invoked when a duplicate proposal is detected (equivocation).
129
+ * The callback is triggered on the first duplicate (when count goes from 1 to 2).
130
+ */
131
+ registerDuplicateProposalCallback(callback: P2PDuplicateProposalCallback): void;
132
+
133
+ /**
134
+ * Registers a callback invoked when a duplicate attestation is detected (equivocation).
135
+ * A validator signing attestations for different proposals at the same slot.
136
+ * The callback is triggered on the first duplicate (when count goes from 1 to 2).
137
+ */
138
+ registerDuplicateAttestationCallback(callback: P2PDuplicateAttestationCallback): void;
88
139
 
89
140
  getEnr(): ENR | undefined;
90
141
 
91
142
  getPeers(includePending?: boolean): PeerInfo[];
92
143
 
93
- validate(txs: Tx[]): Promise<void>;
144
+ /** Returns the number of peers in the GossipSub mesh for a given topic type. */
145
+ getGossipMeshPeerCount(topicType: TopicType): number;
146
+
147
+ validateTxsReceivedInBlockProposal(txs: Tx[]): Promise<void>;
94
148
 
95
149
  addReqRespSubProtocol(
96
150
  subProtocol: ReqRespSubProtocol,
@@ -6,7 +6,7 @@ import {
6
6
  } from '@aztec/foundation/config';
7
7
  import { MAX_RPC_TXS_LEN } from '@aztec/stdlib/interfaces/api-limit';
8
8
 
9
- export type ProposalTxCollectorType = 'new' | 'old';
9
+ export type MissingTxsCollectorType = 'new' | 'old';
10
10
 
11
11
  export type TxCollectionConfig = {
12
12
  /** How long to wait before starting reqresp for fast collection */
@@ -29,8 +29,26 @@ export type TxCollectionConfig = {
29
29
  txCollectionFastMaxParallelRequestsPerNode: number;
30
30
  /** Maximum number of transactions to request from a node in a single batch */
31
31
  txCollectionNodeRpcMaxBatchSize: number;
32
- /** Which collector implementation to use for proposal tx collection */
33
- txCollectionProposalTxCollectorType: ProposalTxCollectorType;
32
+ /** Which collector implementation to use for missing txs collection */
33
+ txCollectionMissingTxsCollectorType: MissingTxsCollectorType;
34
+ /** A comma-separated list of file store URLs (s3://, gs://, file://, http://) for tx collection */
35
+ txCollectionFileStoreUrls: string[];
36
+ /** Delay in ms before file store collection starts after slow collection is triggered */
37
+ txCollectionFileStoreSlowDelayMs: number;
38
+ /** Delay in ms before file store collection starts after fast collection is triggered */
39
+ txCollectionFileStoreFastDelayMs: number;
40
+ /** Number of concurrent workers for fast file store collection */
41
+ txCollectionFileStoreFastWorkerCount: number;
42
+ /** Number of concurrent workers for slow file store collection */
43
+ txCollectionFileStoreSlowWorkerCount: number;
44
+ /** Base backoff time in ms for fast file store collection retries */
45
+ txCollectionFileStoreFastBackoffBaseMs: number;
46
+ /** Base backoff time in ms for slow file store collection retries */
47
+ txCollectionFileStoreSlowBackoffBaseMs: number;
48
+ /** Max backoff time in ms for fast file store collection retries */
49
+ txCollectionFileStoreFastBackoffMaxMs: number;
50
+ /** Max backoff time in ms for slow file store collection retries */
51
+ txCollectionFileStoreSlowBackoffMaxMs: number;
34
52
  };
35
53
 
36
54
  export const txCollectionConfigMappings: ConfigMappingsType<TxCollectionConfig> = {
@@ -90,9 +108,59 @@ export const txCollectionConfigMappings: ConfigMappingsType<TxCollectionConfig>
90
108
  description: 'Maximum number of transactions to request from a node in a single batch',
91
109
  ...numberConfigHelper(MAX_RPC_TXS_LEN),
92
110
  },
93
- txCollectionProposalTxCollectorType: {
94
- env: 'TX_COLLECTION_PROPOSAL_TX_COLLECTOR_TYPE',
95
- description: 'Which collector implementation to use for proposal tx collection (new or old)',
111
+ txCollectionMissingTxsCollectorType: {
112
+ env: 'TX_COLLECTION_MISSING_TXS_COLLECTOR_TYPE',
113
+ description: 'Which collector implementation to use for missing txs collection (new or old)',
96
114
  ...enumConfigHelper(['new', 'old'] as const, 'new'),
97
115
  },
116
+ txCollectionFileStoreUrls: {
117
+ env: 'TX_COLLECTION_FILE_STORE_URLS',
118
+ description: 'A comma-separated list of file store URLs (s3://, gs://, file://, http://) for tx collection',
119
+ parseEnv: (val: string) =>
120
+ val
121
+ .split(',')
122
+ .map(url => url.trim())
123
+ .filter(url => url.length > 0),
124
+ defaultValue: [],
125
+ },
126
+ txCollectionFileStoreSlowDelayMs: {
127
+ env: 'TX_COLLECTION_FILE_STORE_SLOW_DELAY_MS',
128
+ description: 'Delay before file store collection starts after slow collection',
129
+ ...numberConfigHelper(24_000),
130
+ },
131
+ txCollectionFileStoreFastDelayMs: {
132
+ env: 'TX_COLLECTION_FILE_STORE_FAST_DELAY_MS',
133
+ description: 'Delay before file store collection starts after fast collection',
134
+ ...numberConfigHelper(2_000),
135
+ },
136
+ txCollectionFileStoreFastWorkerCount: {
137
+ env: 'TX_COLLECTION_FILE_STORE_FAST_WORKER_COUNT',
138
+ description: 'Number of concurrent workers for fast file store collection',
139
+ ...numberConfigHelper(5),
140
+ },
141
+ txCollectionFileStoreSlowWorkerCount: {
142
+ env: 'TX_COLLECTION_FILE_STORE_SLOW_WORKER_COUNT',
143
+ description: 'Number of concurrent workers for slow file store collection',
144
+ ...numberConfigHelper(2),
145
+ },
146
+ txCollectionFileStoreFastBackoffBaseMs: {
147
+ env: 'TX_COLLECTION_FILE_STORE_FAST_BACKOFF_BASE_MS',
148
+ description: 'Base backoff time in ms for fast file store collection retries',
149
+ ...numberConfigHelper(1_000),
150
+ },
151
+ txCollectionFileStoreSlowBackoffBaseMs: {
152
+ env: 'TX_COLLECTION_FILE_STORE_SLOW_BACKOFF_BASE_MS',
153
+ description: 'Base backoff time in ms for slow file store collection retries',
154
+ ...numberConfigHelper(5_000),
155
+ },
156
+ txCollectionFileStoreFastBackoffMaxMs: {
157
+ env: 'TX_COLLECTION_FILE_STORE_FAST_BACKOFF_MAX_MS',
158
+ description: 'Max backoff time in ms for fast file store collection retries',
159
+ ...numberConfigHelper(5_000),
160
+ },
161
+ txCollectionFileStoreSlowBackoffMaxMs: {
162
+ env: 'TX_COLLECTION_FILE_STORE_SLOW_BACKOFF_MAX_MS',
163
+ description: 'Max backoff time in ms for slow file store collection retries',
164
+ ...numberConfigHelper(30_000),
165
+ },
98
166
  };