@aztec/p2p 0.0.1-commit.2ed92850 → 0.0.1-commit.2f68f620

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 (569) 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 +13 -5
  5. package/dest/client/factory.d.ts +13 -12
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +65 -20
  8. package/dest/client/interface.d.ts +58 -36
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +52 -58
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +235 -235
  13. package/dest/config.d.ts +163 -84
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +155 -42
  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/errors/tx-pool.error.d.ts +8 -0
  23. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  24. package/dest/errors/tx-pool.error.js +9 -0
  25. package/dest/index.d.ts +2 -2
  26. package/dest/index.d.ts.map +1 -1
  27. package/dest/index.js +1 -1
  28. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +162 -106
  29. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool.js +511 -3
  31. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  32. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +507 -125
  34. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  35. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  36. package/dest/mem_pools/attestation_pool/index.js +1 -2
  37. package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
  38. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  39. package/dest/mem_pools/attestation_pool/mocks.js +7 -5
  40. package/dest/mem_pools/index.d.ts +3 -3
  41. package/dest/mem_pools/index.d.ts.map +1 -1
  42. package/dest/mem_pools/index.js +1 -1
  43. package/dest/mem_pools/instrumentation.d.ts +4 -2
  44. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  45. package/dest/mem_pools/instrumentation.js +35 -17
  46. package/dest/mem_pools/interface.d.ts +5 -5
  47. package/dest/mem_pools/interface.d.ts.map +1 -1
  48. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  49. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  50. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  51. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +39 -0
  52. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  53. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +97 -0
  54. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  55. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  56. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  57. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  58. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  59. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  60. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  61. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  62. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
  63. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  64. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  65. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
  66. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +11 -0
  67. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  68. package/dest/mem_pools/tx_pool_v2/eviction/index.js +12 -0
  69. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  70. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  71. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  72. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  73. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  74. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  75. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  76. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  77. package/dest/mem_pools/{tx_pool → tx_pool_v2}/eviction/invalid_txs_after_mining_rule.js +16 -35
  78. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  82. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  83. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  84. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  85. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  86. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  87. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  88. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  89. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  90. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  91. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  92. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  93. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  94. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  95. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  96. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +218 -0
  97. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  98. package/dest/mem_pools/tx_pool_v2/interfaces.js +10 -0
  99. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +137 -0
  100. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  101. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +223 -0
  102. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  103. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  104. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  105. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
  106. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  107. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +337 -0
  108. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +62 -0
  109. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  110. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +167 -0
  111. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +78 -0
  112. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  113. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +914 -0
  114. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
  115. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  116. package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
  117. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +8 -4
  118. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  119. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +11 -7
  120. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  121. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  122. package/dest/msg_validators/clock_tolerance.js +56 -3
  123. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +10 -4
  124. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  125. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  126. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +10 -4
  127. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  128. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  129. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +21 -8
  130. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  131. package/dest/msg_validators/proposal_validator/proposal_validator.js +93 -47
  132. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  133. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  134. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +11 -18
  135. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  136. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  137. package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
  138. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  139. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  140. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  141. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  142. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  143. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
  144. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  145. package/dest/msg_validators/tx_validator/block_header_validator.js +5 -4
  146. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  147. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  148. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  149. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  150. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  151. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  152. package/dest/msg_validators/tx_validator/data_validator.d.ts +4 -1
  153. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  154. package/dest/msg_validators/tx_validator/data_validator.js +40 -3
  155. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -4
  156. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  157. package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
  158. package/dest/msg_validators/tx_validator/factory.d.ts +138 -5
  159. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  160. package/dest/msg_validators/tx_validator/factory.js +259 -58
  161. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  162. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  163. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  164. package/dest/msg_validators/tx_validator/gas_validator.d.ts +100 -3
  165. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  166. package/dest/msg_validators/tx_validator/gas_validator.js +138 -53
  167. package/dest/msg_validators/tx_validator/index.d.ts +5 -1
  168. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  169. package/dest/msg_validators/tx_validator/index.js +4 -0
  170. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  171. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  172. package/dest/msg_validators/tx_validator/metadata_validator.js +6 -6
  173. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  174. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  175. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  176. package/dest/msg_validators/tx_validator/phases_validator.d.ts +24 -3
  177. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  178. package/dest/msg_validators/tx_validator/phases_validator.js +75 -27
  179. package/dest/msg_validators/tx_validator/size_validator.d.ts +3 -1
  180. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -1
  181. package/dest/msg_validators/tx_validator/size_validator.js +4 -1
  182. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +22 -5
  183. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  184. package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
  185. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  186. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  187. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  188. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +4 -2
  189. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  190. package/dest/msg_validators/tx_validator/tx_proof_validator.js +4 -2
  191. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  192. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  193. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  194. package/dest/services/data_store.d.ts +1 -1
  195. package/dest/services/data_store.d.ts.map +1 -1
  196. package/dest/services/data_store.js +14 -10
  197. package/dest/services/discv5/discV5_service.d.ts +2 -1
  198. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  199. package/dest/services/discv5/discV5_service.js +36 -9
  200. package/dest/services/dummy_service.d.ts +33 -17
  201. package/dest/services/dummy_service.d.ts.map +1 -1
  202. package/dest/services/dummy_service.js +56 -15
  203. package/dest/services/encoding.d.ts +7 -3
  204. package/dest/services/encoding.d.ts.map +1 -1
  205. package/dest/services/encoding.js +18 -11
  206. package/dest/services/gossipsub/index.d.ts +3 -0
  207. package/dest/services/gossipsub/index.d.ts.map +1 -0
  208. package/dest/services/gossipsub/index.js +2 -0
  209. package/dest/services/gossipsub/scoring.d.ts +21 -3
  210. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  211. package/dest/services/gossipsub/scoring.js +24 -7
  212. package/dest/services/gossipsub/topic_score_params.d.ts +184 -0
  213. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  214. package/dest/services/gossipsub/topic_score_params.js +363 -0
  215. package/dest/services/index.d.ts +2 -1
  216. package/dest/services/index.d.ts.map +1 -1
  217. package/dest/services/index.js +1 -0
  218. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  219. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  220. package/dest/services/libp2p/instrumentation.js +28 -3
  221. package/dest/services/libp2p/libp2p_service.d.ts +107 -59
  222. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  223. package/dest/services/libp2p/libp2p_service.js +701 -569
  224. package/dest/services/peer-manager/metrics.d.ts +4 -2
  225. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  226. package/dest/services/peer-manager/metrics.js +26 -5
  227. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  228. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  229. package/dest/services/peer-manager/peer_manager.js +40 -11
  230. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  231. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  232. package/dest/services/peer-manager/peer_scoring.js +65 -14
  233. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +44 -0
  234. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  235. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +534 -0
  236. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  237. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  238. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  239. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  240. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  241. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  242. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +35 -0
  243. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  244. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +136 -0
  245. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +62 -0
  246. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  247. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +176 -0
  248. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +11 -0
  249. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  250. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +7 -0
  251. package/dest/services/reqresp/config.d.ts +3 -3
  252. package/dest/services/reqresp/config.d.ts.map +1 -1
  253. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  254. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  255. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  256. package/dest/services/reqresp/interface.d.ts +27 -18
  257. package/dest/services/reqresp/interface.d.ts.map +1 -1
  258. package/dest/services/reqresp/interface.js +23 -19
  259. package/dest/services/reqresp/metrics.d.ts +6 -5
  260. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  261. package/dest/services/reqresp/metrics.js +16 -5
  262. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +8 -3
  263. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  264. package/dest/services/reqresp/protocols/block_txs/bitvector.js +8 -2
  265. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  266. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  267. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +35 -14
  268. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +36 -8
  269. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  270. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +84 -20
  271. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  272. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  273. package/dest/services/reqresp/protocols/index.js +0 -1
  274. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  275. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  276. package/dest/services/reqresp/protocols/tx.js +21 -3
  277. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  278. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  279. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  280. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  281. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  282. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  283. package/dest/services/reqresp/reqresp.d.ts +12 -29
  284. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  285. package/dest/services/reqresp/reqresp.js +58 -187
  286. package/dest/services/service.d.ts +49 -13
  287. package/dest/services/service.d.ts.map +1 -1
  288. package/dest/services/tx_collection/config.d.ts +11 -11
  289. package/dest/services/tx_collection/config.d.ts.map +1 -1
  290. package/dest/services/tx_collection/config.js +27 -26
  291. package/dest/services/tx_collection/file_store_tx_collection.d.ts +37 -0
  292. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  293. package/dest/services/tx_collection/file_store_tx_collection.js +127 -0
  294. package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
  295. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  296. package/dest/services/tx_collection/file_store_tx_source.js +100 -0
  297. package/dest/services/tx_collection/index.d.ts +3 -2
  298. package/dest/services/tx_collection/index.d.ts.map +1 -1
  299. package/dest/services/tx_collection/index.js +1 -0
  300. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  301. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  302. package/dest/services/tx_collection/instrumentation.js +8 -2
  303. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  304. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  305. package/dest/services/tx_collection/request_tracker.js +84 -0
  306. package/dest/services/tx_collection/tx_collection.d.ts +47 -53
  307. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  308. package/dest/services/tx_collection/tx_collection.js +298 -70
  309. package/dest/services/tx_collection/tx_collection_sink.d.ts +19 -9
  310. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  311. package/dest/services/tx_collection/tx_collection_sink.js +28 -31
  312. package/dest/services/tx_collection/tx_source.d.ts +13 -7
  313. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  314. package/dest/services/tx_collection/tx_source.js +26 -7
  315. package/dest/services/tx_file_store/config.d.ts +16 -0
  316. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  317. package/dest/services/tx_file_store/config.js +22 -0
  318. package/dest/services/tx_file_store/index.d.ts +4 -0
  319. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  320. package/dest/services/tx_file_store/index.js +3 -0
  321. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  322. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  323. package/dest/services/tx_file_store/instrumentation.js +29 -0
  324. package/dest/services/tx_file_store/tx_file_store.d.ts +46 -0
  325. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  326. package/dest/services/tx_file_store/tx_file_store.js +142 -0
  327. package/dest/services/tx_provider.d.ts +6 -4
  328. package/dest/services/tx_provider.d.ts.map +1 -1
  329. package/dest/services/tx_provider.js +12 -8
  330. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  331. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  332. package/dest/services/tx_provider_instrumentation.js +5 -5
  333. package/dest/test-helpers/index.d.ts +3 -1
  334. package/dest/test-helpers/index.d.ts.map +1 -1
  335. package/dest/test-helpers/index.js +2 -0
  336. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  337. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  338. package/dest/test-helpers/make-test-p2p-clients.js +5 -3
  339. package/dest/test-helpers/mock-pubsub.d.ts +46 -6
  340. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  341. package/dest/test-helpers/mock-pubsub.js +115 -14
  342. package/dest/test-helpers/reqresp-nodes.d.ts +5 -7
  343. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  344. package/dest/test-helpers/reqresp-nodes.js +19 -20
  345. package/dest/test-helpers/test_tx_provider.d.ts +42 -0
  346. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  347. package/dest/test-helpers/test_tx_provider.js +44 -0
  348. package/dest/test-helpers/testbench-utils.d.ts +161 -0
  349. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  350. package/dest/test-helpers/testbench-utils.js +391 -0
  351. package/dest/testbench/p2p_client_testbench_worker.d.ts +26 -2
  352. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  353. package/dest/testbench/p2p_client_testbench_worker.js +270 -143
  354. package/dest/testbench/worker_client_manager.d.ts +57 -6
  355. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  356. package/dest/testbench/worker_client_manager.js +277 -49
  357. package/dest/util.d.ts +13 -8
  358. package/dest/util.d.ts.map +1 -1
  359. package/dest/util.js +35 -14
  360. package/dest/versioning.d.ts +3 -6
  361. package/dest/versioning.d.ts.map +1 -1
  362. package/dest/versioning.js +3 -24
  363. package/package.json +15 -14
  364. package/src/bootstrap/bootstrap.ts +16 -5
  365. package/src/client/factory.ts +135 -39
  366. package/src/client/interface.ts +70 -44
  367. package/src/client/p2p_client.ts +280 -299
  368. package/src/client/test/p2p_client.batch_tx_requester.bench.README.md +197 -0
  369. package/src/config.ts +272 -46
  370. package/src/errors/p2p-service.error.ts +11 -0
  371. package/src/errors/reqresp.error.ts +0 -25
  372. package/src/errors/tx-pool.error.ts +12 -0
  373. package/src/index.ts +1 -1
  374. package/src/mem_pools/attestation_pool/attestation_pool.ts +575 -94
  375. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +617 -141
  376. package/src/mem_pools/attestation_pool/index.ts +9 -2
  377. package/src/mem_pools/attestation_pool/mocks.ts +14 -8
  378. package/src/mem_pools/index.ts +2 -2
  379. package/src/mem_pools/instrumentation.ts +24 -15
  380. package/src/mem_pools/interface.ts +4 -4
  381. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  382. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  383. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +112 -0
  384. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  385. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  386. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
  387. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  388. package/src/mem_pools/tx_pool_v2/eviction/index.ts +28 -0
  389. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  390. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  391. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  392. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  393. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  394. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  395. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  396. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  397. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  398. package/src/mem_pools/tx_pool_v2/interfaces.ts +250 -0
  399. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +349 -0
  400. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  401. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +430 -0
  402. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +238 -0
  403. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1090 -0
  404. package/src/msg_validators/attestation_validator/README.md +49 -0
  405. package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
  406. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +24 -11
  407. package/src/msg_validators/clock_tolerance.ts +73 -3
  408. package/src/msg_validators/proposal_validator/README.md +123 -0
  409. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +24 -4
  410. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +35 -7
  411. package/src/msg_validators/proposal_validator/proposal_validator.ts +116 -49
  412. package/src/msg_validators/tx_validator/README.md +127 -0
  413. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +8 -17
  414. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  415. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  416. package/src/msg_validators/tx_validator/archive_cache.ts +2 -2
  417. package/src/msg_validators/tx_validator/block_header_validator.ts +22 -11
  418. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  419. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  420. package/src/msg_validators/tx_validator/data_validator.ts +50 -3
  421. package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
  422. package/src/msg_validators/tx_validator/factory.ts +424 -56
  423. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  424. package/src/msg_validators/tx_validator/gas_validator.ts +203 -52
  425. package/src/msg_validators/tx_validator/index.ts +4 -0
  426. package/src/msg_validators/tx_validator/metadata_validator.ts +18 -7
  427. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  428. package/src/msg_validators/tx_validator/phases_validator.ts +87 -30
  429. package/src/msg_validators/tx_validator/size_validator.ts +6 -2
  430. package/src/msg_validators/tx_validator/timestamp_validator.ts +29 -21
  431. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  432. package/src/msg_validators/tx_validator/tx_proof_validator.ts +10 -3
  433. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  434. package/src/services/data_store.ts +14 -19
  435. package/src/services/discv5/discV5_service.ts +39 -6
  436. package/src/services/dummy_service.ts +71 -39
  437. package/src/services/encoding.ts +18 -10
  438. package/src/services/gossipsub/README.md +641 -0
  439. package/src/services/gossipsub/index.ts +2 -0
  440. package/src/services/gossipsub/scoring.ts +29 -5
  441. package/src/services/gossipsub/topic_score_params.ts +519 -0
  442. package/src/services/index.ts +1 -0
  443. package/src/services/libp2p/instrumentation.ts +29 -2
  444. package/src/services/libp2p/libp2p_service.ts +775 -643
  445. package/src/services/peer-manager/metrics.ts +28 -4
  446. package/src/services/peer-manager/peer_manager.ts +46 -11
  447. package/src/services/peer-manager/peer_scoring.ts +56 -6
  448. package/src/services/reqresp/README.md +215 -0
  449. package/src/services/reqresp/batch-tx-requester/README.md +344 -0
  450. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +660 -0
  451. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  452. package/src/services/reqresp/batch-tx-requester/interface.ts +61 -0
  453. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +168 -0
  454. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +249 -0
  455. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +24 -0
  456. package/src/services/reqresp/config.ts +2 -2
  457. package/src/services/reqresp/connection-sampler/connection_sampler.ts +16 -0
  458. package/src/services/reqresp/interface.ts +48 -46
  459. package/src/services/reqresp/metrics.ts +33 -9
  460. package/src/services/reqresp/protocols/block_txs/bitvector.ts +10 -2
  461. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +44 -17
  462. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +108 -16
  463. package/src/services/reqresp/protocols/index.ts +0 -1
  464. package/src/services/reqresp/protocols/tx.ts +23 -3
  465. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  466. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  467. package/src/services/reqresp/reqresp.ts +68 -224
  468. package/src/services/service.ts +66 -29
  469. package/src/services/tx_collection/config.ts +41 -36
  470. package/src/services/tx_collection/file_store_tx_collection.ts +153 -0
  471. package/src/services/tx_collection/file_store_tx_source.ts +129 -0
  472. package/src/services/tx_collection/index.ts +2 -1
  473. package/src/services/tx_collection/instrumentation.ts +11 -2
  474. package/src/services/tx_collection/request_tracker.ts +127 -0
  475. package/src/services/tx_collection/tx_collection.ts +364 -112
  476. package/src/services/tx_collection/tx_collection_sink.ts +32 -36
  477. package/src/services/tx_collection/tx_source.ts +28 -8
  478. package/src/services/tx_file_store/config.ts +37 -0
  479. package/src/services/tx_file_store/index.ts +3 -0
  480. package/src/services/tx_file_store/instrumentation.ts +36 -0
  481. package/src/services/tx_file_store/tx_file_store.ts +163 -0
  482. package/src/services/tx_provider.ts +15 -9
  483. package/src/services/tx_provider_instrumentation.ts +11 -5
  484. package/src/test-helpers/index.ts +2 -0
  485. package/src/test-helpers/make-test-p2p-clients.ts +7 -6
  486. package/src/test-helpers/mock-pubsub.ts +137 -14
  487. package/src/test-helpers/reqresp-nodes.ts +17 -29
  488. package/src/test-helpers/test_tx_provider.ts +69 -0
  489. package/src/test-helpers/testbench-utils.ts +453 -0
  490. package/src/testbench/p2p_client_testbench_worker.ts +370 -134
  491. package/src/testbench/worker_client_manager.ts +355 -51
  492. package/src/util.ts +40 -19
  493. package/src/versioning.ts +3 -33
  494. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  495. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  496. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  497. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  498. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  499. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  500. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  501. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  502. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  503. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  504. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  505. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  506. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  507. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  508. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  509. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  510. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  511. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  512. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  513. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  514. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  515. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  516. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  517. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  518. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  519. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  520. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  521. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  522. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  523. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  524. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  525. package/dest/mem_pools/tx_pool/index.js +0 -2
  526. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  527. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  528. package/dest/mem_pools/tx_pool/priority.js +0 -15
  529. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  530. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  531. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  532. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  533. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  534. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  535. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  536. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  537. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  538. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -45
  539. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  540. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -92
  541. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  542. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  543. package/dest/services/reqresp/protocols/block.js +0 -32
  544. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -51
  545. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  546. package/dest/services/tx_collection/fast_tx_collection.js +0 -300
  547. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -53
  548. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  549. package/dest/services/tx_collection/slow_tx_collection.js +0 -177
  550. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  551. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  552. package/src/mem_pools/tx_pool/README.md +0 -270
  553. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  554. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  555. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  556. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  557. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  558. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  559. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  560. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  561. package/src/mem_pools/tx_pool/index.ts +0 -2
  562. package/src/mem_pools/tx_pool/priority.ts +0 -20
  563. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  564. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  565. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  566. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -100
  567. package/src/services/reqresp/protocols/block.ts +0 -37
  568. package/src/services/tx_collection/fast_tx_collection.ts +0 -341
  569. package/src/services/tx_collection/slow_tx_collection.ts +0 -233
@@ -0,0 +1,344 @@
1
+ # BatchTxRequester
2
+
3
+ The `BatchTxRequester` is a specialized P2P service that aggressively fetches missing transactions from peers when a node lacks some of the referenced transactions. It serves two pathways: (1) block proposals, where validators need all transactions to attest, and (2) block proving, where provers need all transactions to generate proofs.
4
+
5
+ ## Overview
6
+
7
+ When a validator receives a block proposal or a prover needs to prove a block, they must have all transactions. If some transactions are missing from the local mempool (e.g., due to gossip delays), the `BatchTxRequester` kicks in to fetch them via direct peer-to-peer requests before the deadline.
8
+
9
+ ```
10
+ ┌─────────────────────────────────────────────────────────────────────────────┐
11
+ │ Block Proposal or Block Received │
12
+ │ (contains hashes of N transactions) │
13
+ └─────────────────────────────────────────────────────────────────────────────┘
14
+ │
15
+ ▼
16
+ ┌─────────────────────────────────┐
17
+ │ Check local mempool for txs │
18
+ └─────────────────────────────────┘
19
+ │
20
+ ┌─────────────────┴─────────────────┐
21
+ │ │
22
+ ▼ ▼
23
+ ┌─────────────────┐ ┌─────────────────┐
24
+ │ All txs found │ │ Missing M txs │
25
+ │ → Attest now │ │ │
26
+ └─────────────────┘ └─────────────────┘
27
+ │
28
+ ▼
29
+ ┌───────────────────────────────┐
30
+ │ BatchTxRequester.run() │
31
+ │ Fetch missing txs until │
32
+ │ deadline or all collected │
33
+ └───────────────────────────────┘
34
+ ```
35
+
36
+ ## Architecture
37
+
38
+ ### Peer Classification
39
+
40
+ The requester classifies peers into three categories to optimize fetching:
41
+
42
+ ```
43
+ ┌─────────────────────────────┐
44
+ │ All Known Peers │
45
+ └─────────────────────────────┘
46
+ │
47
+ ┌────────────────────────────┼────────────────────────────┐
48
+ │ │ │
49
+ ▼ ▼ ▼
50
+ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
51
+ │ Pinned Peer │ │ Dumb Peers │ │ Smart Peers │
52
+ │ │ │ │ │ │
53
+ │ The peer who │ │ Peers we query │ │ Peers that have │
54
+ │ sent us the │ │ blindly - we │ │ told us which │
55
+ │ block proposal. │ │ don't know what │ │ txs they have │
56
+ │ Should have ALL │ │ txs they have. │ │ via BitVector │
57
+ │ transactions. │ │ │ │ responses. │
58
+ └─────────────────┘ └─────────────────┘ └─────────────────┘
59
+ │ │ │
60
+ │ │ │
61
+ ▼ ▼ ▼
62
+ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
63
+ │ Queried in │ │ Queried with │ │ Queried with │
64
+ │ dedicated loop, │ │ full tx hashes │ │ BitVector only │
65
+ │ prioritizes │ │ (peer may not │ │ (peer has the │
66
+ │ least-requested │ │ have proposal) │ │ block proposal) │
67
+ │ transactions │ │ │ │ │
68
+ └─────────────────┘ └─────────────────┘ └─────────────────┘
69
+ ```
70
+
71
+ ### Blind Phase → Smart Phase Transition
72
+
73
+ Peers transition from "dumb" to "smart" when they respond with a valid `BlockTxsResponse` containing:
74
+ 1. A matching `archiveRoot`
75
+ 2. A non-empty `txIndices` BitVector indicating which transactions they have
76
+ 3. At least one transaction we're still missing
77
+
78
+ ```
79
+ ┌──────────────────────────────────────────────────────────────────────────────┐
80
+ │ BLIND PHASE │
81
+ │ ┌────────────────────────────────────────────────────────────────────────┐ │
82
+ │ │ Initial State: All peers are "dumb" (except pinned peer) │ │
83
+ │ │ │ │
84
+ │ │ Request: [archiveRoot, txHashes (full list), txIndices (BitVector)] │ │
85
+ │ │ └─ Include full hashes because peer may not have proposal │ │
86
+ │ │ │ │
87
+ │ │ Response: [archiveRoot, txs[], txIndices (what peer has)] │ │
88
+ │ │ └─ Tells us exactly which txs this peer can provide │ │
89
+ │ └────────────────────────────────────────────────────────────────────────┘ │
90
+ └──────────────────────────────────────────────────────────────────────────────┘
91
+ │
92
+ │ Peer responds with valid txIndices
93
+ │ AND has txs we're missing
94
+ ▼
95
+ ┌──────────────────────────────────────────────────────────────────────────────┐
96
+ │ SMART PHASE │
97
+ │ ┌────────────────────────────────────────────────────────────────────────┐ │
98
+ │ │ Peer promoted to "smart" - we know exactly what they have │ │
99
+ │ │ │ │
100
+ │ │ Request: [archiveRoot, txIndices (BitVector only)] │ │
101
+ │ │ └─ No need for full hashes, peer has the proposal │ │
102
+ │ │ │ │
103
+ │ │ Response: [archiveRoot, txs[], txIndices (updated availability)] │ │
104
+ │ │ └─ May have received more txs since last response │ │
105
+ │ └────────────────────────────────────────────────────────────────────────┘ │
106
+ └──────────────────────────────────────────────────────────────────────────────┘
107
+ ```
108
+
109
+ ## Concurrent Worker Architecture
110
+
111
+ The `BatchTxRequester` runs three types of workers concurrently:
112
+
113
+ ```
114
+ ┌─────────────────────────────────────┐
115
+ │ BatchTxRequester.run() │
116
+ │ │
117
+ │ ┌─────────────────────────────┐ │
118
+ │ │ txQueue (FifoMemoryQueue)│◄───┼──── Yields Tx objects
119
+ │ └─────────────────────────────┘ │ to caller
120
+ └─────────────────────────────────────┘
121
+ ▲
122
+ │ put(tx)
123
+ ┌──────────────────────────────┼────────────────────────────┐
124
+ │ │ │
125
+ │ │ │
126
+ ┌──────────┴──────────┐ ┌───────────┴─────────┐ ┌──────────┴──────────┐
127
+ │ pinnedPeerRequester │ │ dumbRequester │ │ smartRequester │
128
+ │ │ │ │ │ │
129
+ │ Single dedicated │ │ N parallel workers │ │ M parallel workers │
130
+ │ loop for pinned │ │ (default: 10) │ │ (default: 10) │
131
+ │ peer │ │ │ │ │
132
+ │ │ │ Round-robin through │ │ Wait on semaphore │
133
+ │ Prioritizes txs │ │ available dumb │ │ until peers become │
134
+ │ that have been │ │ peers │ │ smart │
135
+ │ requested least │ │ │ │ │
136
+ └─────────────────────┘ └─────────────────────┘ └─────────────────────┘
137
+ │ │ │
138
+ └──────────────────────────────┼──────────────────────────────┘
139
+ │
140
+ ▼
141
+ ┌───────────────────────┐
142
+ │ requestTxBatch() │
143
+ │ │
144
+ │ sendRequestToPeer() │
145
+ │ via libp2p ReqResp │
146
+ └───────────────────────┘
147
+ ```
148
+
149
+ ## Wire Protocol
150
+
151
+ ### BlockTxsRequest
152
+
153
+ ```typescript
154
+ class BlockTxsRequest {
155
+ archiveRoot: Fr; // Archive root after the proposed block is applied
156
+ txHashes: TxHashArray; // Full tx hashes (for dumb peers without proposal)
157
+ txIndices: BitVector; // Which txs from proposal we're requesting (1 = want)
158
+ }
159
+ ```
160
+
161
+ ### BlockTxsResponse
162
+
163
+ ```typescript
164
+ class BlockTxsResponse {
165
+ archiveRoot: Fr; // Echo back the proposal archive root
166
+ txs: TxArray; // Actual transaction data
167
+ txIndices: BitVector; // Which txs the peer has available (1 = have)
168
+ }
169
+ ```
170
+
171
+ The `BitVector` is a compact representation where each bit corresponds to a transaction index in the block proposal. This allows efficient capability advertisement without repeating full hashes.
172
+
173
+ ## Cancellation
174
+
175
+ All cancellation is managed by a single `RequestTracker` instance, shared across the entire collection
176
+ flow. The `RequestTracker` owns the deadline, tracks which txs are still missing, and exposes a
177
+ `cancellationToken` promise that resolves when the request should stop (deadline hit, all txs fetched,
178
+ or external `cancel()` call).
179
+
180
+ Cancellation propagates from the deepest stack level upward:
181
+
182
+ ```
183
+ RequestTracker.finish()
184
+ ├── resolves cancellationToken promise
185
+ │
186
+ ├── BatchTxRequester workers (deepest)
187
+ │ ├── shouldStop() checks requestTracker.cancelled → exit loop
188
+ │ ├── sleepClampedToDeadline races sleep vs cancellationToken → wakes
189
+ │ └── semaphore.acquire races vs cancellationToken → wakes
190
+ │ │
191
+ │ ▼ workers settle → txQueue.end() → generator returns
192
+ │
193
+ ├── Node collection loops
194
+ │ ├── notFinished() checks requestTracker.cancelled → exit loop
195
+ │ └── inter-retry sleep races vs cancellationToken → wakes
196
+ │ │
197
+ │ ▼ all node loops settle
198
+ │
199
+ └── collectFast (outermost)
200
+ awaits Promise.allSettled([reqresp, nodes]) → settles after inner tasks
201
+ finally: requestTracker.cancel() (idempotent), cleanup
202
+ ```
203
+
204
+ ## Key Files
205
+
206
+ | File | Description |
207
+ |------|-------------|
208
+ | `batch_tx_requester.ts` | Main orchestrator with worker loops |
209
+ | `missing_txs.ts` | Tracks metadata for each missing tx (request count, in-flight status, which peers have it) |
210
+ | `peer_collection.ts` | Manages peer classification (dumb/smart/bad) and rate limiting |
211
+ | `interface.ts` | Type definitions for dependencies |
212
+ | `../protocols/block_txs/` | Wire protocol definitions (`BlockTxsRequest`, `BlockTxsResponse`, `BitVector`) |
213
+ | `../../tx_collection/request_tracker.ts` | Centralized deadline, missing tx tracking, and cancellation signal |
214
+
215
+ ## Stopping Conditions
216
+
217
+ The `BatchTxRequester` stops when any of these conditions are met, all managed by the `RequestTracker`:
218
+
219
+ 1. **All transactions fetched** - `markFetched()` removes the last missing tx, triggering `finish()`
220
+ 2. **Deadline exceeded** - `setTimeout` in `RequestTracker` fires, triggering `finish()`
221
+ 3. **External cancellation** - `RequestTracker.cancel()` called (e.g., from `stop()`, `stopCollectingForBlocksUpTo`)
222
+ 4. **No transactions to fetch** - Empty hash set at construction, `RequestTracker` finishes immediately
223
+
224
+ ## Configuration
225
+
226
+ | Parameter | Default | Description |
227
+ |-----------|---------|-------------|
228
+ | `batchTxRequesterSmartParallelWorkerCount` | 10 | Max concurrent requests to smart peers |
229
+ | `batchTxRequesterDumbParallelWorkerCount` | 10 | Max concurrent requests to dumb peers |
230
+ | `batchTxRequesterTxBatchSize` | 8 | Max transactions per request |
231
+ | `batchTxRequesterBadPeerThreshold` | 2 | Penalties before marking peer as bad (see > threshold logic) |
232
+ | `RATE_LIMIT_EXCEEDED_PEER_CACHE_TTL` | 1000ms | Cooldown after rate limit hit |
233
+
234
+ ## Error Handling
235
+
236
+ ### Peer States
237
+
238
+ - **Bad Peer**: After `batchTxRequesterBadPeerThreshold` penalties, peer is excluded from queries
239
+ - **Bad Peer Penalties**: A penalty is applied on `FAILURE`/`UNKNOWN` responses or when transaction validation fails
240
+ - **Rate Limited**: On `RATE_LIMIT_EXCEEDED` response, peer is temporarily excluded
241
+ - **Redemption**: A peer is removed from the bad set only after a successful response with all transactions valid (this clears the penalty counter)
242
+ - **Peer Scoring**: Each penalty is forwarded to the injected `peerScoring` service with a severity
243
+
244
+ ### Failure Recovery
245
+
246
+ ```
247
+ Request to peer fails
248
+ │
249
+ ├── RATE_LIMIT_EXCEEDED → Mark peer rate-limited, sleep, retry later
250
+ │
251
+ ├── FAILURE/UNKNOWN → Penalise peer (severity), increment penalty counter
252
+ │ │
253
+ │ ├── Counter < threshold → Continue querying
254
+ │ │
255
+ │ └── Counter ≥ threshold → Exclude peer
256
+ │
257
+ └── SUCCESS → Process response, if all transactions are valid clear penalties
258
+ ```
259
+
260
+ ## Usage Example
261
+
262
+ ```typescript
263
+ const requestTracker = RequestTracker.create(
264
+ missingTxHashes, // TxHash[] - what we need
265
+ new Date(Date.now() + 5_000), // deadline
266
+ );
267
+
268
+ const requester = new BatchTxRequester(
269
+ requestTracker, // IRequestTracker - tracks missing txs, deadline, and cancellation
270
+ blockTxsSource, // BlockTxsSource - the proposal or block we need txs for
271
+ pinnedPeer, // PeerId | undefined - peer expected to have the txs
272
+ p2pService, // BatchTxRequesterLibP2PService
273
+ );
274
+
275
+ // Async generator yields transactions as they arrive
276
+ for await (const tx of requester.run()) {
277
+ // Process each transaction as it's fetched and validated
278
+ mempool.addTx(tx);
279
+ }
280
+
281
+ // Or collect all at once
282
+ const txs = await BatchTxRequester.collectAllTxs(requester.run());
283
+ ```
284
+
285
+ ## Integration with Broader Codebase
286
+
287
+ ```
288
+ ┌─────────────────────────────────────────────────────────────────────────────┐
289
+ │ P2PClient │
290
+ │ │
291
+ │ Receives block proposals via gossipsub │
292
+ │ Triggers transaction collection when needed │
293
+ └───────────────────────────────────┬─────────────────────────────────────────┘
294
+ │
295
+ ▼
296
+ ┌─────────────────────────────────────────────────────────────────────────────┐
297
+ │ TxCollection │
298
+ │ │
299
+ │ Coordinates Fast and Slow collection strategies │
300
+ │ Manages lifecycle of collection requests │
301
+ └───────────────────┬─────────────────────────────────┬───────────────────────┘
302
+ │ │
303
+ ▼ ▼
304
+ ┌───────────────────────────────────┐ ┌─────────────────────────────────────┐
305
+ │ FastTxCollection │ │ SlowTxCollection │
306
+ │ │ │ │
307
+ │ Time-critical: proposals/proving │ │ Background: unproven blocks │
308
+ │ │ │ │
309
+ │ 1. Try RPC nodes first (fast) │ │ Periodic polling of RPC nodes │
310
+ │ 2. Fall back to BatchTxRequester │ │ and peers for missing txs │
311
+ │ │ │ │
312
+ │ Creates RequestTracker per │ │ │
313
+ │ request with deadline │ │ │
314
+ └───────────────────┬───────────────┘ └─────────────────────────────────────┘
315
+ │
316
+ │ For 'proposal' and 'block' requests
317
+ ▼
318
+ ┌─────────────────────────────────────────────────────────────────────────────┐
319
+ │ BatchTxRequester │
320
+ │ │
321
+ │ Aggressive parallel fetching from multiple peers │
322
+ │ Shares RequestTracker with FastTxCollection for unified cancellation │
323
+ │ Uses BLOCK_TXS sub-protocol for efficient batching │
324
+ └───────────────────┬─────────────────────────────────────────────────────────┘
325
+ │
326
+ ▼
327
+ ┌─────────────────────────────────────────────────────────────────────────────┐
328
+ │ ReqResp (libp2p) │
329
+ │ │
330
+ │ Low-level stream management │
331
+ │ sendRequestToPeer() → opens stream → sends request → awaits response │
332
+ └───────────────────┬─────────────────────────────────────────────────────────┘
333
+ │
334
+ ▼
335
+ ┌─────────────────────────────────────────────────────────────────────────────┐
336
+ │ reqRespBlockTxsHandler (on peer) │
337
+ │ │
338
+ │ 1. Parse BlockTxsRequest │
339
+ │ 2. Look up block proposal in AttestationPool │
340
+ │ 3. Check TxPool for available transactions │
341
+ │ 4. Build BitVector of available tx indices │
342
+ │ 5. Return BlockTxsResponse with txs + availability info │
343
+ └─────────────────────────────────────────────────────────────────────────────┘
344
+ ```