@aztec/p2p 0.0.1-commit.2448fdb → 0.0.1-commit.2606882

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 (402) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +1 -1
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +9 -1
  4. package/dest/client/factory.d.ts +5 -4
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +26 -21
  7. package/dest/client/interface.d.ts +14 -5
  8. package/dest/client/interface.d.ts.map +1 -1
  9. package/dest/client/p2p_client.d.ts +13 -9
  10. package/dest/client/p2p_client.d.ts.map +1 -1
  11. package/dest/client/p2p_client.js +78 -20
  12. package/dest/config.d.ts +135 -105
  13. package/dest/config.d.ts.map +1 -1
  14. package/dest/config.js +59 -14
  15. package/dest/errors/p2p-service.error.d.ts +9 -0
  16. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  17. package/dest/errors/p2p-service.error.js +10 -0
  18. package/dest/errors/reqresp.error.d.ts +1 -20
  19. package/dest/errors/reqresp.error.d.ts.map +1 -1
  20. package/dest/errors/reqresp.error.js +0 -21
  21. package/dest/index.d.ts +1 -2
  22. package/dest/index.d.ts.map +1 -1
  23. package/dest/index.js +0 -1
  24. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +99 -59
  25. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  26. package/dest/mem_pools/attestation_pool/attestation_pool.js +267 -197
  27. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  28. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +181 -65
  30. package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
  31. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  32. package/dest/mem_pools/attestation_pool/mocks.js +6 -4
  33. package/dest/mem_pools/index.d.ts +1 -2
  34. package/dest/mem_pools/index.d.ts.map +1 -1
  35. package/dest/mem_pools/instrumentation.d.ts +4 -2
  36. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  37. package/dest/mem_pools/instrumentation.js +33 -15
  38. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +1 -5
  39. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
  40. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +1 -7
  41. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  42. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  43. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  44. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  45. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  46. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  47. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  48. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +10 -5
  49. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  50. package/dest/mem_pools/tx_pool_v2/interfaces.js +1 -0
  51. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +9 -7
  52. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +13 -6
  54. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
  55. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  56. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +26 -43
  57. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +1 -1
  58. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  59. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +3 -0
  60. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +2 -1
  61. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  62. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +93 -85
  63. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
  64. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  65. package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
  66. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  67. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  68. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  69. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  70. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  71. package/dest/msg_validators/clock_tolerance.js +56 -3
  72. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -2
  73. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  74. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -2
  75. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  76. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +10 -2
  77. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  78. package/dest/msg_validators/proposal_validator/proposal_validator.js +46 -12
  79. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  80. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  81. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  82. package/dest/msg_validators/tx_validator/allowed_public_setup.js +3 -3
  83. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  84. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  85. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  86. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  87. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  88. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  89. package/dest/msg_validators/tx_validator/data_validator.js +1 -0
  90. package/dest/msg_validators/tx_validator/factory.d.ts +6 -5
  91. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  92. package/dest/msg_validators/tx_validator/factory.js +14 -10
  93. package/dest/msg_validators/tx_validator/gas_validator.d.ts +36 -4
  94. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  95. package/dest/msg_validators/tx_validator/gas_validator.js +50 -33
  96. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  97. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/index.js +2 -0
  99. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  100. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  102. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  103. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  104. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  105. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  106. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  107. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  108. package/dest/services/data_store.d.ts +1 -1
  109. package/dest/services/data_store.d.ts.map +1 -1
  110. package/dest/services/data_store.js +5 -5
  111. package/dest/services/discv5/discV5_service.d.ts +2 -1
  112. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  113. package/dest/services/discv5/discV5_service.js +35 -8
  114. package/dest/services/dummy_service.d.ts +11 -15
  115. package/dest/services/dummy_service.d.ts.map +1 -1
  116. package/dest/services/dummy_service.js +12 -16
  117. package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
  118. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  119. package/dest/services/gossipsub/topic_score_params.js +21 -4
  120. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  121. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  122. package/dest/services/libp2p/instrumentation.js +14 -0
  123. package/dest/services/libp2p/libp2p_service.d.ts +36 -46
  124. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  125. package/dest/services/libp2p/libp2p_service.js +289 -265
  126. package/dest/services/peer-manager/metrics.d.ts +3 -1
  127. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  128. package/dest/services/peer-manager/metrics.js +6 -0
  129. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  130. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  131. package/dest/services/peer-manager/peer_manager.js +40 -11
  132. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  133. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  134. package/dest/services/peer-manager/peer_scoring.js +32 -10
  135. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +4 -8
  136. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  137. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +94 -122
  138. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
  139. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  140. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  141. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  142. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  143. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
  144. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  145. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
  146. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  147. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  148. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  149. package/dest/services/reqresp/config.d.ts +3 -3
  150. package/dest/services/reqresp/config.d.ts.map +1 -1
  151. package/dest/services/reqresp/interface.d.ts +16 -18
  152. package/dest/services/reqresp/interface.d.ts.map +1 -1
  153. package/dest/services/reqresp/interface.js +10 -20
  154. package/dest/services/reqresp/metrics.d.ts +1 -1
  155. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  156. package/dest/services/reqresp/metrics.js +0 -1
  157. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  158. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  159. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  160. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  161. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  162. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
  163. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
  164. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  165. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
  166. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  167. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  168. package/dest/services/reqresp/protocols/index.js +0 -1
  169. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  170. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  171. package/dest/services/reqresp/protocols/tx.js +1 -3
  172. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  173. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  174. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  175. package/dest/services/reqresp/reqresp.d.ts +7 -29
  176. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  177. package/dest/services/reqresp/reqresp.js +27 -207
  178. package/dest/services/service.d.ts +9 -12
  179. package/dest/services/service.d.ts.map +1 -1
  180. package/dest/services/tx_collection/config.d.ts +2 -23
  181. package/dest/services/tx_collection/config.d.ts.map +1 -1
  182. package/dest/services/tx_collection/config.js +2 -55
  183. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  184. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  185. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  186. package/dest/services/tx_collection/index.d.ts +2 -3
  187. package/dest/services/tx_collection/index.d.ts.map +1 -1
  188. package/dest/services/tx_collection/index.js +0 -1
  189. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  190. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  191. package/dest/services/tx_collection/instrumentation.js +0 -2
  192. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  193. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  194. package/dest/services/tx_collection/request_tracker.js +84 -0
  195. package/dest/services/tx_collection/tx_collection.d.ts +36 -55
  196. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  197. package/dest/services/tx_collection/tx_collection.js +275 -119
  198. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  199. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  200. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  201. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  202. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  203. package/dest/services/tx_provider.d.ts +3 -1
  204. package/dest/services/tx_provider.d.ts.map +1 -1
  205. package/dest/services/tx_provider.js +3 -0
  206. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  207. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  208. package/dest/test-helpers/make-test-p2p-clients.js +5 -2
  209. package/dest/test-helpers/mock-pubsub.d.ts +23 -9
  210. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  211. package/dest/test-helpers/mock-pubsub.js +44 -44
  212. package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
  213. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  214. package/dest/test-helpers/reqresp-nodes.js +16 -18
  215. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  216. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  217. package/dest/test-helpers/test_tx_provider.js +3 -0
  218. package/dest/test-helpers/testbench-utils.d.ts +12 -14
  219. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  220. package/dest/test-helpers/testbench-utils.js +38 -14
  221. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  222. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  223. package/dest/testbench/p2p_client_testbench_worker.js +83 -38
  224. package/dest/testbench/worker_client_manager.d.ts +10 -6
  225. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  226. package/dest/testbench/worker_client_manager.js +53 -10
  227. package/dest/util.d.ts +12 -7
  228. package/dest/util.d.ts.map +1 -1
  229. package/dest/util.js +35 -14
  230. package/dest/versioning.d.ts +3 -6
  231. package/dest/versioning.d.ts.map +1 -1
  232. package/dest/versioning.js +3 -24
  233. package/package.json +15 -14
  234. package/src/bootstrap/bootstrap.ts +9 -1
  235. package/src/client/factory.ts +45 -24
  236. package/src/client/interface.ts +15 -11
  237. package/src/client/p2p_client.ts +91 -41
  238. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  239. package/src/config.ts +117 -17
  240. package/src/errors/p2p-service.error.ts +11 -0
  241. package/src/errors/reqresp.error.ts +0 -25
  242. package/src/index.ts +0 -1
  243. package/src/mem_pools/attestation_pool/attestation_pool.ts +318 -242
  244. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +204 -68
  245. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  246. package/src/mem_pools/index.ts +0 -3
  247. package/src/mem_pools/instrumentation.ts +22 -14
  248. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
  249. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  250. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  251. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  252. package/src/mem_pools/tx_pool_v2/interfaces.ts +10 -4
  253. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +24 -12
  254. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +29 -43
  255. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +3 -0
  256. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +94 -91
  257. package/src/msg_validators/attestation_validator/README.md +1 -1
  258. package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
  259. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -7
  260. package/src/msg_validators/clock_tolerance.ts +73 -3
  261. package/src/msg_validators/proposal_validator/README.md +4 -4
  262. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +12 -2
  263. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +17 -2
  264. package/src/msg_validators/proposal_validator/proposal_validator.ts +54 -10
  265. package/src/msg_validators/tx_validator/README.md +11 -3
  266. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  267. package/src/msg_validators/tx_validator/allowed_public_setup.ts +3 -3
  268. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  269. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  270. package/src/msg_validators/tx_validator/data_validator.ts +2 -0
  271. package/src/msg_validators/tx_validator/factory.ts +18 -7
  272. package/src/msg_validators/tx_validator/gas_validator.ts +82 -33
  273. package/src/msg_validators/tx_validator/index.ts +2 -0
  274. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  275. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  276. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  277. package/src/services/data_store.ts +5 -13
  278. package/src/services/discv5/discV5_service.ts +38 -5
  279. package/src/services/dummy_service.ts +14 -39
  280. package/src/services/gossipsub/topic_score_params.ts +36 -4
  281. package/src/services/libp2p/instrumentation.ts +14 -0
  282. package/src/services/libp2p/libp2p_service.ts +315 -302
  283. package/src/services/peer-manager/metrics.ts +7 -0
  284. package/src/services/peer-manager/peer_manager.ts +46 -11
  285. package/src/services/peer-manager/peer_scoring.ts +27 -5
  286. package/src/services/reqresp/README.md +0 -14
  287. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  288. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +91 -137
  289. package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
  290. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  291. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  292. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  293. package/src/services/reqresp/config.ts +2 -2
  294. package/src/services/reqresp/interface.ts +21 -47
  295. package/src/services/reqresp/metrics.ts +0 -1
  296. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  297. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
  298. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
  299. package/src/services/reqresp/protocols/index.ts +0 -1
  300. package/src/services/reqresp/protocols/tx.ts +1 -3
  301. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  302. package/src/services/reqresp/reqresp.ts +31 -252
  303. package/src/services/service.ts +12 -28
  304. package/src/services/tx_collection/config.ts +3 -80
  305. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  306. package/src/services/tx_collection/index.ts +1 -6
  307. package/src/services/tx_collection/instrumentation.ts +1 -7
  308. package/src/services/tx_collection/request_tracker.ts +127 -0
  309. package/src/services/tx_collection/tx_collection.ts +331 -176
  310. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  311. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  312. package/src/services/tx_provider.ts +5 -0
  313. package/src/test-helpers/make-test-p2p-clients.ts +4 -1
  314. package/src/test-helpers/mock-pubsub.ts +46 -60
  315. package/src/test-helpers/reqresp-nodes.ts +13 -23
  316. package/src/test-helpers/test_tx_provider.ts +5 -0
  317. package/src/test-helpers/testbench-utils.ts +50 -28
  318. package/src/testbench/p2p_client_testbench_worker.ts +88 -55
  319. package/src/testbench/worker_client_manager.ts +61 -21
  320. package/src/util.ts +33 -18
  321. package/src/versioning.ts +3 -33
  322. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  323. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  324. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -304
  325. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  326. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  327. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  328. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  329. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  330. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  331. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  332. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  333. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  334. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  335. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  336. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  337. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  338. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  339. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -123
  340. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  341. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  342. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  343. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  344. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  345. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  346. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  347. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  348. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  349. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  350. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  351. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  352. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  353. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  354. package/dest/mem_pools/tx_pool/index.js +0 -2
  355. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  356. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  357. package/dest/mem_pools/tx_pool/priority.js +0 -15
  358. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  359. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  360. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  361. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  362. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  363. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -402
  364. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  365. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  366. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  367. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  368. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  369. package/dest/services/reqresp/protocols/block.js +0 -32
  370. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -54
  371. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  372. package/dest/services/tx_collection/fast_tx_collection.js +0 -327
  373. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  374. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  375. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  376. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
  377. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  378. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  379. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  380. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  381. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  382. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -345
  383. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  384. package/src/mem_pools/tx_pool/README.md +0 -270
  385. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  386. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  387. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  388. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -163
  389. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  390. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  391. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  392. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  393. package/src/mem_pools/tx_pool/index.ts +0 -2
  394. package/src/mem_pools/tx_pool/priority.ts +0 -20
  395. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  396. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -321
  397. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  398. package/src/services/reqresp/protocols/block.ts +0 -37
  399. package/src/services/tx_collection/fast_tx_collection.ts +0 -387
  400. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
  401. package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
  402. package/src/services/tx_collection/slow_tx_collection.ts +0 -266
@@ -1,402 +0,0 @@
1
- import { BlockNumber } from '@aztec/foundation/branded-types';
2
- import { unfreeze } from '@aztec/foundation/types';
3
- import { GasFees } from '@aztec/stdlib/gas';
4
- import { mockTx } from '@aztec/stdlib/testing';
5
- import { BlockHeader, GlobalVariables } from '@aztec/stdlib/tx';
6
- /**
7
- * Tests a TxPool implementation.
8
- * @param getTxPool - Gets a fresh TxPool
9
- */ export function describeTxPool(getTxPool) {
10
- let pool;
11
- const minedBlockHeader = BlockHeader.empty({
12
- globalVariables: GlobalVariables.empty({
13
- blockNumber: BlockNumber(1),
14
- timestamp: 0n
15
- })
16
- });
17
- beforeEach(()=>{
18
- pool = getTxPool();
19
- });
20
- afterEach(()=>{
21
- pool.removeAllListeners('txs-added');
22
- });
23
- it('adds txs to the pool as pending', async ()=>{
24
- const tx1 = await mockTx(1);
25
- await pool.addTxs([
26
- tx1
27
- ]);
28
- const poolTx = await pool.getTxByHash(tx1.getTxHash());
29
- expect(poolTx.getTxHash()).toEqual(tx1.getTxHash());
30
- await expect(pool.getTxStatus(tx1.getTxHash())).resolves.toEqual('pending');
31
- await expect(pool.getPendingTxHashes()).resolves.toEqual([
32
- tx1.getTxHash()
33
- ]);
34
- await expect(pool.getPendingTxCount()).resolves.toEqual(1);
35
- });
36
- it('emits txs-added event with new txs', async ()=>{
37
- const tx1 = await mockTx(1); // existing and pending
38
- const tx2 = await mockTx(2); // mined but not known
39
- const tx3 = await mockTx(3); // brand new
40
- await pool.addTxs([
41
- tx1
42
- ]);
43
- await pool.markAsMined([
44
- tx2.getTxHash()
45
- ], minedBlockHeader);
46
- let txsFromEvent = undefined;
47
- pool.once('txs-added', ({ txs })=>{
48
- txsFromEvent = txs;
49
- });
50
- await pool.addTxs([
51
- tx1,
52
- tx2,
53
- tx3
54
- ]);
55
- expect(txsFromEvent).toBeDefined();
56
- expect(txsFromEvent).toHaveLength(2);
57
- const eventHashes = txsFromEvent.map((tx)=>tx.getTxHash());
58
- expect(eventHashes).toEqual(expect.arrayContaining([
59
- tx2.getTxHash(),
60
- tx3.getTxHash()
61
- ]));
62
- });
63
- it('removes txs from the pool', async ()=>{
64
- const pendingTx = await mockTx(1);
65
- const minedTx = await mockTx(2);
66
- await pool.addTxs([
67
- pendingTx,
68
- minedTx
69
- ]);
70
- await pool.markAsMined([
71
- minedTx.getTxHash()
72
- ], minedBlockHeader);
73
- // Delete a pending tx - should be permanently deleted
74
- await pool.deleteTxs([
75
- pendingTx.getTxHash()
76
- ]);
77
- await expect(pool.getTxByHash(pendingTx.getTxHash())).resolves.toBeUndefined();
78
- await expect(pool.getTxStatus(pendingTx.getTxHash())).resolves.toBeUndefined();
79
- // Delete a mined tx - should be soft-deleted (still in storage)
80
- await pool.deleteTxs([
81
- minedTx.getTxHash()
82
- ]);
83
- await expect(pool.getTxByHash(minedTx.getTxHash())).resolves.toBeDefined();
84
- await expect(pool.getTxStatus(minedTx.getTxHash())).resolves.toEqual('deleted');
85
- await expect(pool.getMinedTxHashes()).resolves.toEqual([]);
86
- await expect(pool.getPendingTxCount()).resolves.toEqual(0);
87
- });
88
- it('marks txs as mined', async ()=>{
89
- const tx1 = await mockTx(1);
90
- const tx2 = await mockTx(2);
91
- await pool.addTxs([
92
- tx1,
93
- tx2
94
- ]);
95
- await pool.markAsMined([
96
- tx1.getTxHash()
97
- ], minedBlockHeader);
98
- const retrievedTx = await pool.getTxByHash(tx1.getTxHash());
99
- expect(retrievedTx?.getTxHash()).toEqual(tx1.getTxHash());
100
- await expect(pool.getTxStatus(tx1.getTxHash())).resolves.toEqual('mined');
101
- await expect(pool.getMinedTxHashes()).resolves.toEqual([
102
- [
103
- tx1.getTxHash(),
104
- 1
105
- ]
106
- ]);
107
- await expect(pool.getPendingTxHashes()).resolves.toEqual([
108
- tx2.getTxHash()
109
- ]);
110
- await expect(pool.getPendingTxCount()).resolves.toEqual(1);
111
- });
112
- it('marks txs as pending after being mined', async ()=>{
113
- const tx1 = await mockTx(1);
114
- const tx2 = await mockTx(2);
115
- await pool.addTxs([
116
- tx1,
117
- tx2
118
- ]);
119
- await pool.markAsMined([
120
- tx1.getTxHash()
121
- ], minedBlockHeader);
122
- await pool.markMinedAsPending([
123
- tx1.getTxHash()
124
- ], BlockNumber(1));
125
- await expect(pool.getMinedTxHashes()).resolves.toEqual([]);
126
- const pending = await pool.getPendingTxHashes();
127
- expect(pending).toHaveLength(2);
128
- expect(pending).toEqual(expect.arrayContaining([
129
- tx1.getTxHash(),
130
- tx2.getTxHash()
131
- ]));
132
- await expect(pool.getPendingTxCount()).resolves.toEqual(2);
133
- });
134
- it('only marks txs as pending if they are known', async ()=>{
135
- const tx1 = await mockTx(1);
136
- // simulate a situation where not all peers have all the txs
137
- const tx2 = await mockTx(2);
138
- const someTxHashThatThisPeerDidNotSee = tx2.getTxHash();
139
- await pool.addTxs([
140
- tx1
141
- ]);
142
- // this peer knows that tx2 was mined, but it does not have the tx object
143
- await pool.markAsMined([
144
- tx1.getTxHash(),
145
- someTxHashThatThisPeerDidNotSee
146
- ], minedBlockHeader);
147
- expect(await pool.getMinedTxHashes()).toEqual(expect.arrayContaining([
148
- [
149
- tx1.getTxHash(),
150
- 1
151
- ],
152
- [
153
- someTxHashThatThisPeerDidNotSee,
154
- 1
155
- ]
156
- ]));
157
- // reorg: both txs should now become available again
158
- await pool.markMinedAsPending([
159
- tx1.getTxHash(),
160
- someTxHashThatThisPeerDidNotSee
161
- ], BlockNumber(1));
162
- await expect(pool.getMinedTxHashes()).resolves.toEqual([]);
163
- await expect(pool.getPendingTxHashes()).resolves.toEqual([
164
- tx1.getTxHash()
165
- ]); // tx2 is not in the pool
166
- await expect(pool.getPendingTxCount()).resolves.toEqual(1);
167
- });
168
- it('returns all transactions in the pool', async ()=>{
169
- const tx1 = await mockTx(1);
170
- const tx2 = await mockTx(2);
171
- const tx3 = await mockTx(3);
172
- await pool.addTxs([
173
- tx1,
174
- tx2,
175
- tx3
176
- ]);
177
- const poolTxs = await pool.getAllTxs();
178
- expect(poolTxs).toHaveLength(3);
179
- const poolHashes = poolTxs.map((tx)=>tx.getTxHash());
180
- expect(poolHashes).toEqual(expect.arrayContaining([
181
- tx1.getTxHash(),
182
- tx2.getTxHash(),
183
- tx3.getTxHash()
184
- ]));
185
- await expect(pool.getPendingTxCount()).resolves.toEqual(3);
186
- });
187
- it('returns all txHashes in the pool', async ()=>{
188
- const tx1 = await mockTx(1);
189
- const tx2 = await mockTx(2);
190
- const tx3 = await mockTx(3);
191
- await pool.addTxs([
192
- tx1,
193
- tx2,
194
- tx3
195
- ]);
196
- const poolTxHashes = await pool.getAllTxHashes();
197
- const expectedHashes = [
198
- tx1,
199
- tx2,
200
- tx3
201
- ].map((tx)=>tx.getTxHash());
202
- expect(poolTxHashes).toHaveLength(3);
203
- expect(poolTxHashes).toEqual(expect.arrayContaining(expectedHashes));
204
- await expect(pool.getPendingTxCount()).resolves.toEqual(3);
205
- });
206
- it('returns txs by their hash', async ()=>{
207
- const tx1 = await mockTx(1);
208
- const tx2 = await mockTx(2);
209
- const tx3 = await mockTx(3);
210
- await pool.addTxs([
211
- tx1,
212
- tx2,
213
- tx3
214
- ]);
215
- const requestedTxs = await pool.getTxsByHash([
216
- tx1.getTxHash(),
217
- tx3.getTxHash()
218
- ]);
219
- expect(requestedTxs).toHaveLength(2);
220
- const requestedHashes = requestedTxs.map((tx)=>tx.getTxHash());
221
- expect(requestedHashes).toEqual(expect.arrayContaining([
222
- tx1.getTxHash(),
223
- tx3.getTxHash()
224
- ]));
225
- });
226
- it('returns a large number of transactions by their hash', async ()=>{
227
- const numTxs = 1_000;
228
- const txs = await Promise.all(Array.from({
229
- length: numTxs
230
- }, (_, i)=>mockTx(i)));
231
- const hashes = txs.map((tx)=>tx.getTxHash());
232
- await pool.addTxs(txs);
233
- const requestedTxs = await pool.getTxsByHash(hashes);
234
- expect(requestedTxs).toHaveLength(numTxs);
235
- const requestedHashes = requestedTxs.map((tx)=>tx.getTxHash());
236
- expect(requestedHashes).toEqual(expect.arrayContaining(hashes));
237
- });
238
- it('returns whether or not txs exist', async ()=>{
239
- const tx1 = await mockTx(1);
240
- const tx2 = await mockTx(2);
241
- const tx3 = await mockTx(3);
242
- await pool.addTxs([
243
- tx1,
244
- tx2,
245
- tx3
246
- ]);
247
- const tx4 = await mockTx(4);
248
- const tx5 = await mockTx(5);
249
- const availability = await pool.hasTxs([
250
- tx1.getTxHash(),
251
- tx2.getTxHash(),
252
- tx3.getTxHash(),
253
- tx4.getTxHash(),
254
- tx5.getTxHash()
255
- ]);
256
- expect(availability).toHaveLength(5);
257
- expect(availability).toEqual(expect.arrayContaining([
258
- true,
259
- true,
260
- true,
261
- false,
262
- false
263
- ]));
264
- });
265
- it('returns pending tx hashes sorted by priority', async ()=>{
266
- const withPriorityFee = (tx, fee)=>{
267
- const gs = unfreeze(tx.data.constants.txContext.gasSettings);
268
- gs.maxPriorityFeesPerGas = new GasFees(fee, fee);
269
- gs.maxFeesPerGas = new GasFees(fee, fee);
270
- return tx;
271
- };
272
- const tx1 = withPriorityFee(await mockTx(0), 1000);
273
- const tx2 = withPriorityFee(await mockTx(1), 100);
274
- const tx3 = withPriorityFee(await mockTx(2), 200);
275
- const tx4 = withPriorityFee(await mockTx(3), 3000);
276
- await pool.addTxs([
277
- tx1,
278
- tx2,
279
- tx3,
280
- tx4
281
- ]);
282
- const poolTxHashes = await pool.getPendingTxHashes();
283
- expect(poolTxHashes).toHaveLength(4);
284
- expect(poolTxHashes).toEqual([
285
- tx4,
286
- tx1,
287
- tx3,
288
- tx2
289
- ].map((tx)=>tx.getTxHash()));
290
- });
291
- describe('soft-delete', ()=>{
292
- it('soft-deletes mined txs and keeps them in storage', async ()=>{
293
- const txs = await Promise.all([
294
- mockTx(1),
295
- mockTx(2),
296
- mockTx(3)
297
- ]);
298
- await pool.addTxs(txs);
299
- // Mark first tx as mined
300
- await pool.markAsMined([
301
- txs[0].getTxHash()
302
- ], minedBlockHeader);
303
- // Verify initial state
304
- await expect(pool.getPendingTxCount()).resolves.toBe(2);
305
- await expect(pool.getTxByHash(txs[0].getTxHash())).resolves.toBeDefined();
306
- await expect(pool.getTxByHash(txs[1].getTxHash())).resolves.toBeDefined();
307
- // Delete mined tx - should be soft-deleted
308
- await pool.deleteTxs([
309
- txs[0].getTxHash()
310
- ]);
311
- // Delete pending tx - should be permanently deleted
312
- await pool.deleteTxs([
313
- txs[1].getTxHash()
314
- ]);
315
- // Verify mined tx still exists in storage but has 'deleted' status
316
- await expect(pool.getTxByHash(txs[0].getTxHash())).resolves.toBeDefined();
317
- await expect(pool.getTxStatus(txs[0].getTxHash())).resolves.toEqual('deleted');
318
- // Verify pending tx is permanently deleted
319
- await expect(pool.getTxByHash(txs[1].getTxHash())).resolves.toBeUndefined();
320
- await expect(pool.getTxStatus(txs[1].getTxHash())).resolves.toBeUndefined();
321
- // Verify remaining pending count
322
- await expect(pool.getPendingTxCount()).resolves.toBe(1);
323
- // Verify pending hashes don't include deleted txs
324
- const pendingHashes = await pool.getPendingTxHashes();
325
- expect(pendingHashes).toHaveLength(1);
326
- expect(pendingHashes.map((h)=>h.toString())).toContain(txs[2].getTxHash().toString());
327
- });
328
- it('cleans up old deleted mined transactions', async ()=>{
329
- const txs = await Promise.all([
330
- mockTx(1),
331
- mockTx(2),
332
- mockTx(3)
333
- ]);
334
- await pool.addTxs(txs);
335
- // Mark first two as mined in block 1
336
- await pool.markAsMined([
337
- txs[0].getTxHash(),
338
- txs[1].getTxHash()
339
- ], minedBlockHeader);
340
- // Soft-delete mined transactions
341
- await pool.deleteTxs([
342
- txs[0].getTxHash(),
343
- txs[1].getTxHash()
344
- ]);
345
- // Clean up deleted mined txs from block 1 and earlier
346
- const deletedCount = await pool.cleanupDeletedMinedTxs(BlockNumber(1));
347
- // Verify old transactions are permanently deleted
348
- expect(deletedCount).toBe(2);
349
- await expect(pool.getTxByHash(txs[0].getTxHash())).resolves.toBeUndefined();
350
- await expect(pool.getTxByHash(txs[1].getTxHash())).resolves.toBeUndefined();
351
- await expect(pool.getTxByHash(txs[2].getTxHash())).resolves.toBeDefined();
352
- });
353
- it('does not clean up recent deleted mined transactions', async ()=>{
354
- const txs = await Promise.all([
355
- mockTx(1),
356
- mockTx(2)
357
- ]);
358
- await pool.addTxs(txs);
359
- // Mark as mined in block 2
360
- const laterBlockHeader = BlockHeader.empty({
361
- globalVariables: GlobalVariables.empty({
362
- blockNumber: BlockNumber(2),
363
- timestamp: 0n
364
- })
365
- });
366
- await pool.markAsMined([
367
- txs[0].getTxHash()
368
- ], laterBlockHeader);
369
- // Soft-delete a mined transaction
370
- await pool.deleteTxs([
371
- txs[0].getTxHash()
372
- ]);
373
- // Try to clean up with block 1 (before the mined block)
374
- const deletedCount = await pool.cleanupDeletedMinedTxs(BlockNumber(1));
375
- // Verify no transactions were cleaned up
376
- expect(deletedCount).toBe(0);
377
- await expect(pool.getTxByHash(txs[0].getTxHash())).resolves.toBeDefined();
378
- });
379
- it('restores deleted mined tx when it is mined again', async ()=>{
380
- const tx = await mockTx(1);
381
- await pool.addTxs([
382
- tx
383
- ]);
384
- // Mark as mined
385
- await pool.markAsMined([
386
- tx.getTxHash()
387
- ], minedBlockHeader);
388
- // Soft-delete it
389
- await pool.deleteTxs([
390
- tx.getTxHash()
391
- ]);
392
- await expect(pool.getTxStatus(tx.getTxHash())).resolves.toEqual('deleted');
393
- // Mark as mined again (e.g., after a reorg)
394
- await pool.markAsMined([
395
- tx.getTxHash()
396
- ], minedBlockHeader);
397
- // Should be back to mined status
398
- await expect(pool.getTxStatus(tx.getTxHash())).resolves.toEqual('mined');
399
- await expect(pool.getTxByHash(tx.getTxHash())).resolves.toBeDefined();
400
- });
401
- });
402
- }
@@ -1,64 +0,0 @@
1
- import type { PeerId } from '@libp2p/interface';
2
- import type { ConnectionSampler } from './connection_sampler.js';
3
- /**
4
- * Manages batches of peers for parallel request processing.
5
- * Tracks active peers and provides deterministic peer assignment for requests.
6
- *
7
- * Example with 3 peers and 10 requests:
8
- *
9
- * Peers: [P1] [P2] [P3]
10
- * ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
11
- * Requests: 0,1,2,9 | 3,4,5 | 6,7,8
12
- *
13
- * Each peer handles a bucket of consecutive requests.
14
- * If a peer fails, it is replaced while maintaining the same bucket.
15
- */
16
- export declare class BatchConnectionSampler {
17
- private readonly connectionSampler;
18
- private readonly logger;
19
- private readonly batch;
20
- private readonly requestsPerPeer;
21
- /** Tracks peer-index combinations that returned empty/invalid responses */
22
- private readonly failedPeerIndices;
23
- constructor(connectionSampler: ConnectionSampler, batchSize: number, maxPeers: number, exclude?: PeerId[], logger?: import("@aztec/foundation/log").Logger);
24
- /**
25
- * Gets the peer responsible for handling a specific request index.
26
- * If the primary peer has previously failed for this index, tries other peers.
27
- * If all batch peers have failed, attempts to sample a new peer.
28
- *
29
- * @param index - The request index
30
- * @returns The peer assigned to handle this request, or undefined if no peer available
31
- */
32
- getPeerForRequest(index: number): PeerId | undefined;
33
- /**
34
- * Attempts to sample a new peer that isn't already in the batch.
35
- * If successful, adds the peer to the batch.
36
- *
37
- * @returns The new peer if one was sampled, undefined otherwise
38
- */
39
- private sampleNewPeer;
40
- /**
41
- * Marks that a peer returned an empty/invalid response for a specific request index.
42
- * The peer will not be assigned this index again.
43
- *
44
- * @param peerId - The peer that failed
45
- * @param index - The request index that failed
46
- */
47
- markPeerFailedForIndex(peerId: PeerId, index: number): void;
48
- /**
49
- * Removes a peer and replaces it with a new one, maintaining the same position
50
- * in the batch array to keep request distribution consistent
51
- *
52
- * @param peerId - The peer to remove and replace
53
- */
54
- removePeerAndReplace(peerId: PeerId): void;
55
- /**
56
- * Gets the number of active peers
57
- */
58
- get activePeerCount(): number;
59
- /**
60
- * Gets the number of requests each peer is assigned to handle
61
- */
62
- get requestsPerBucket(): number;
63
- }
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmF0Y2hfY29ubmVjdGlvbl9zYW1wbGVyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9jb25uZWN0aW9uLXNhbXBsZXIvYmF0Y2hfY29ubmVjdGlvbl9zYW1wbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWhELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFakU7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gscUJBQWEsc0JBQXNCO0lBTy9CLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCO0lBSWxDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTTtJQVZ6QixPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBZ0I7SUFDdEMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQVM7SUFDekMsMkVBQTJFO0lBQzNFLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQXVDO0lBRXpFLFlBQ21CLGlCQUFpQixFQUFFLGlCQUFpQixFQUNyRCxTQUFTLEVBQUUsTUFBTSxFQUNqQixRQUFRLEVBQUUsTUFBTSxFQUNoQixPQUFPLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFDRCxNQUFNLHlDQUF1RCxFQWUvRTtJQUVEOzs7Ozs7O09BT0c7SUFDSCxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLE1BQU0sR0FBRyxTQUFTLENBMkJuRDtJQUVEOzs7OztPQUtHO0lBQ0gsT0FBTyxDQUFDLGFBQWE7SUFjckI7Ozs7OztPQU1HO0lBQ0gsc0JBQXNCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FTMUQ7SUFFRDs7Ozs7T0FLRztJQUNILG9CQUFvQixDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsSUFBSSxDQWlCekM7SUFFRDs7T0FFRztJQUNILElBQUksZUFBZSxJQUFJLE1BQU0sQ0FFNUI7SUFFRDs7T0FFRztJQUNILElBQUksaUJBQWlCLElBQUksTUFBTSxDQUU5QjtDQUNGIn0=
@@ -1 +0,0 @@
1
- {"version":3,"file":"batch_connection_sampler.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/connection-sampler/batch_connection_sampler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE;;;;;;;;;;;;GAYG;AACH,qBAAa,sBAAsB;IAO/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAIlC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAVzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgB;IACtC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,2EAA2E;IAC3E,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAuC;IAEzE,YACmB,iBAAiB,EAAE,iBAAiB,EACrD,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,EAAE,EACD,MAAM,yCAAuD,EAe/E;IAED;;;;;;;OAOG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA2BnD;IAED;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAcrB;;;;;;OAMG;IACH,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAS1D;IAED;;;;;OAKG;IACH,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAiBzC;IAED;;OAEG;IACH,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED;;OAEG;IACH,IAAI,iBAAiB,IAAI,MAAM,CAE9B;CACF"}
@@ -1,151 +0,0 @@
1
- import { createLogger } from '@aztec/foundation/log';
2
- /**
3
- * Manages batches of peers for parallel request processing.
4
- * Tracks active peers and provides deterministic peer assignment for requests.
5
- *
6
- * Example with 3 peers and 10 requests:
7
- *
8
- * Peers: [P1] [P2] [P3]
9
- * ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
10
- * Requests: 0,1,2,9 | 3,4,5 | 6,7,8
11
- *
12
- * Each peer handles a bucket of consecutive requests.
13
- * If a peer fails, it is replaced while maintaining the same bucket.
14
- */ export class BatchConnectionSampler {
15
- connectionSampler;
16
- logger;
17
- batch;
18
- requestsPerPeer;
19
- /** Tracks peer-index combinations that returned empty/invalid responses */ failedPeerIndices;
20
- constructor(connectionSampler, batchSize, maxPeers, exclude, logger = createLogger('p2p:reqresp:batch-connection-sampler')){
21
- this.connectionSampler = connectionSampler;
22
- this.logger = logger;
23
- this.batch = [];
24
- this.failedPeerIndices = new Map();
25
- if (maxPeers <= 0) {
26
- throw new Error('Max peers cannot be 0');
27
- }
28
- if (batchSize <= 0) {
29
- throw new Error('Batch size cannot be 0');
30
- }
31
- // Calculate how many requests each peer should handle, cannot be 0
32
- this.requestsPerPeer = Math.max(1, Math.floor(batchSize / maxPeers));
33
- // Sample initial peers
34
- const excluding = exclude && new Map(exclude.map((peerId)=>[
35
- peerId.toString(),
36
- true
37
- ]));
38
- this.batch = this.connectionSampler.samplePeersBatch(maxPeers, excluding);
39
- }
40
- /**
41
- * Gets the peer responsible for handling a specific request index.
42
- * If the primary peer has previously failed for this index, tries other peers.
43
- * If all batch peers have failed, attempts to sample a new peer.
44
- *
45
- * @param index - The request index
46
- * @returns The peer assigned to handle this request, or undefined if no peer available
47
- */ getPeerForRequest(index) {
48
- if (this.batch.length === 0) {
49
- return undefined;
50
- }
51
- // Calculate which peer bucket this index belongs to
52
- const primaryPeerIndex = Math.floor(index / this.requestsPerPeer) % this.batch.length;
53
- // Try peers starting from primary, wrapping around
54
- for(let offset = 0; offset < this.batch.length; offset++){
55
- const peerIndex = (primaryPeerIndex + offset) % this.batch.length;
56
- const peer = this.batch[peerIndex];
57
- const peerKey = peer.toString();
58
- const failedIndices = this.failedPeerIndices.get(peerKey);
59
- if (!failedIndices || !failedIndices.has(index)) {
60
- return peer;
61
- }
62
- }
63
- // All batch peers have failed for this index - try to sample a new peer
64
- const newPeer = this.sampleNewPeer();
65
- if (newPeer) {
66
- return newPeer;
67
- }
68
- return undefined;
69
- }
70
- /**
71
- * Attempts to sample a new peer that isn't already in the batch.
72
- * If successful, adds the peer to the batch.
73
- *
74
- * @returns The new peer if one was sampled, undefined otherwise
75
- */ sampleNewPeer() {
76
- // Exclude all current batch peers
77
- const excluding = new Map(this.batch.map((p)=>[
78
- p.toString(),
79
- true
80
- ]));
81
- const newPeer = this.connectionSampler.getPeer(excluding);
82
- if (newPeer) {
83
- this.batch.push(newPeer);
84
- this.logger.trace('Sampled new peer for exhausted index', {
85
- newPeer: newPeer.toString()
86
- });
87
- return newPeer;
88
- }
89
- return undefined;
90
- }
91
- /**
92
- * Marks that a peer returned an empty/invalid response for a specific request index.
93
- * The peer will not be assigned this index again.
94
- *
95
- * @param peerId - The peer that failed
96
- * @param index - The request index that failed
97
- */ markPeerFailedForIndex(peerId, index) {
98
- const peerKey = peerId.toString();
99
- let failedIndices = this.failedPeerIndices.get(peerKey);
100
- if (!failedIndices) {
101
- failedIndices = new Set();
102
- this.failedPeerIndices.set(peerKey, failedIndices);
103
- }
104
- failedIndices.add(index);
105
- this.logger.trace('Marked peer failed for index', {
106
- peerId: peerKey,
107
- index
108
- });
109
- }
110
- /**
111
- * Removes a peer and replaces it with a new one, maintaining the same position
112
- * in the batch array to keep request distribution consistent
113
- *
114
- * @param peerId - The peer to remove and replace
115
- */ removePeerAndReplace(peerId) {
116
- const index = this.batch.findIndex((p)=>p === peerId);
117
- if (index === -1) {
118
- return;
119
- }
120
- const excluding = new Map([
121
- [
122
- peerId.toString(),
123
- true
124
- ]
125
- ]);
126
- const newPeer = this.connectionSampler.getPeer(excluding); // Q: Shouldn't we accumulate all excluded peers? Otherwise the sampler could return us a previously excluded peer?
127
- if (newPeer) {
128
- this.batch[index] = newPeer;
129
- this.logger.trace('Replaced peer', {
130
- peerId,
131
- newPeer
132
- });
133
- } else {
134
- // If we couldn't get a replacement, remove the peer and compact the array
135
- this.batch.splice(index, 1);
136
- this.logger.trace('Removed peer', {
137
- peerId
138
- });
139
- }
140
- }
141
- /**
142
- * Gets the number of active peers
143
- */ get activePeerCount() {
144
- return this.batch.length;
145
- }
146
- /**
147
- * Gets the number of requests each peer is assigned to handle
148
- */ get requestsPerBucket() {
149
- return this.requestsPerPeer;
150
- }
151
- }
@@ -1,9 +0,0 @@
1
- import type { L2BlockSource } from '@aztec/stdlib/block';
2
- import type { ReqRespSubProtocolHandler } from '../interface.js';
3
- /**
4
- * Handler for L2 Block requests
5
- * @param l2BlockSource - source for L2 blocks
6
- * @returns the Block request handler
7
- * */
8
- export declare function reqRespBlockHandler(l2BlockSource: L2BlockSource): ReqRespSubProtocolHandler;
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2suZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9yZXFyZXNwL3Byb3RvY29scy9ibG9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUl6RCxPQUFPLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR2pFOzs7O0tBSUs7QUFDTCx3QkFBZ0IsbUJBQW1CLENBQUMsYUFBYSxFQUFFLGFBQWEsR0FBRyx5QkFBeUIsQ0FzQjNGIn0=
@@ -1 +0,0 @@
1
- {"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../../../../src/services/reqresp/protocols/block.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAIzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAGjE;;;;KAIK;AACL,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,aAAa,GAAG,yBAAyB,CAsB3F"}
@@ -1,32 +0,0 @@
1
- import { BlockNumber } from '@aztec/foundation/branded-types';
2
- import { Fr } from '@aztec/foundation/curves/bn254';
3
- import { ReqRespStatus, ReqRespStatusError } from '../status.js';
4
- /**
5
- * Handler for L2 Block requests
6
- * @param l2BlockSource - source for L2 blocks
7
- * @returns the Block request handler
8
- * */ export function reqRespBlockHandler(l2BlockSource) {
9
- /**
10
- * @param peerId - the peer ID of the requester
11
- * @param msg - the block request message, which is expected to contain valid block number as a Buffer
12
- * @returns a Buffer containing the requested block data, or an empty Buffer if the block is not found
13
- * @throws ReqRespStatusError if the input msg is not a valid block number
14
- * */ return async (_peerId, msg)=>{
15
- let blockNumber;
16
- try {
17
- blockNumber = Fr.fromBuffer(msg);
18
- } catch (err) {
19
- throw new ReqRespStatusError(ReqRespStatus.BADLY_FORMED_REQUEST, {
20
- cause: err
21
- });
22
- }
23
- try {
24
- const foundBlock = await l2BlockSource.getBlock(BlockNumber(Number(blockNumber)));
25
- return foundBlock ? foundBlock.toBuffer() : Buffer.alloc(0);
26
- } catch (err) {
27
- throw new ReqRespStatusError(ReqRespStatus.INTERNAL_ERROR, {
28
- cause: err
29
- });
30
- }
31
- };
32
- }