@aztec/p2p 0.0.1-commit.b655e406 → 0.0.1-commit.c7c42ec

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 (300) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +1 -1
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/client/factory.d.ts +2 -2
  4. package/dest/client/factory.d.ts.map +1 -1
  5. package/dest/client/factory.js +2 -3
  6. package/dest/client/index.d.ts +1 -1
  7. package/dest/client/interface.d.ts +4 -2
  8. package/dest/client/interface.d.ts.map +1 -1
  9. package/dest/client/p2p_client.d.ts +9 -27
  10. package/dest/client/p2p_client.d.ts.map +1 -1
  11. package/dest/client/p2p_client.js +39 -32
  12. package/dest/config.d.ts +62 -59
  13. package/dest/config.d.ts.map +1 -1
  14. package/dest/config.js +19 -12
  15. package/dest/enr/generate-enr.d.ts +1 -1
  16. package/dest/enr/index.d.ts +1 -1
  17. package/dest/errors/attestation-pool.error.d.ts +7 -0
  18. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  19. package/dest/errors/attestation-pool.error.js +12 -0
  20. package/dest/errors/reqresp.error.d.ts +1 -1
  21. package/dest/errors/reqresp.error.d.ts.map +1 -1
  22. package/dest/index.d.ts +1 -1
  23. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +28 -6
  24. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  26. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +35 -34
  28. package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +13 -6
  30. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  31. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +41 -18
  32. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +11 -6
  33. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  34. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +30 -8
  35. package/dest/mem_pools/attestation_pool/mocks.d.ts +226 -5
  36. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  37. package/dest/mem_pools/attestation_pool/mocks.js +2 -2
  38. package/dest/mem_pools/index.d.ts +1 -1
  39. package/dest/mem_pools/instrumentation.d.ts +9 -1
  40. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  41. package/dest/mem_pools/instrumentation.js +38 -2
  42. package/dest/mem_pools/interface.d.ts +3 -4
  43. package/dest/mem_pools/interface.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +30 -60
  45. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  46. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +262 -324
  47. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +18 -0
  48. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  49. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +56 -0
  50. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +83 -0
  51. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  52. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +5 -0
  53. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts +15 -0
  54. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts.map +1 -0
  55. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.js +88 -0
  56. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  57. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  58. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  59. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  60. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  61. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +76 -0
  62. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  63. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  64. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  65. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  66. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  67. package/dest/mem_pools/tx_pool/index.js +0 -1
  68. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  69. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  70. package/dest/mem_pools/tx_pool/priority.js +6 -1
  71. package/dest/mem_pools/tx_pool/tx_pool.d.ts +11 -6
  72. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  73. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  74. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  75. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +30 -24
  76. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -3
  77. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  78. package/dest/msg_validators/attestation_validator/attestation_validator.js +12 -12
  79. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
  80. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  81. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +67 -0
  82. package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
  83. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
  84. package/dest/msg_validators/attestation_validator/index.js +1 -0
  85. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +1 -1
  86. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +1 -1
  87. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +22 -10
  88. package/dest/msg_validators/block_proposal_validator/index.d.ts +1 -1
  89. package/dest/msg_validators/index.d.ts +1 -1
  90. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +1 -1
  91. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -1
  92. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  93. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  94. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +1 -1
  95. package/dest/msg_validators/tx_validator/archive_cache.d.ts +2 -2
  96. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  97. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +2 -2
  98. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  99. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  100. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +1 -1
  102. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  103. package/dest/msg_validators/tx_validator/factory.d.ts +4 -3
  104. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  105. package/dest/msg_validators/tx_validator/factory.js +1 -1
  106. package/dest/msg_validators/tx_validator/gas_validator.d.ts +1 -1
  107. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  108. package/dest/msg_validators/tx_validator/index.d.ts +1 -1
  109. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +2 -2
  110. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  111. package/dest/msg_validators/tx_validator/phases_validator.d.ts +1 -1
  112. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  113. package/dest/msg_validators/tx_validator/phases_validator.js +3 -1
  114. package/dest/msg_validators/tx_validator/test_utils.d.ts +2 -2
  115. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
  116. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +3 -2
  117. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  118. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +1 -1
  119. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  120. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +1 -1
  121. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  122. package/dest/services/data_store.d.ts +1 -1
  123. package/dest/services/data_store.d.ts.map +1 -1
  124. package/dest/services/discv5/discV5_service.d.ts +1 -1
  125. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  126. package/dest/services/dummy_service.d.ts +1 -1
  127. package/dest/services/dummy_service.d.ts.map +1 -1
  128. package/dest/services/encoding.d.ts +1 -1
  129. package/dest/services/encoding.d.ts.map +1 -1
  130. package/dest/services/encoding.js +1 -1
  131. package/dest/services/gossipsub/scoring.d.ts +1 -1
  132. package/dest/services/index.d.ts +1 -1
  133. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  134. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  135. package/dest/services/libp2p/instrumentation.js +9 -2
  136. package/dest/services/libp2p/libp2p_service.d.ts +14 -70
  137. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  138. package/dest/services/libp2p/libp2p_service.js +231 -66
  139. package/dest/services/peer-manager/interface.d.ts +1 -1
  140. package/dest/services/peer-manager/metrics.d.ts +8 -1
  141. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  142. package/dest/services/peer-manager/metrics.js +28 -0
  143. package/dest/services/peer-manager/peer_manager.d.ts +1 -32
  144. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  145. package/dest/services/peer-manager/peer_manager.js +6 -2
  146. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  147. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  148. package/dest/services/peer-manager/peer_scoring.js +40 -2
  149. package/dest/services/reqresp/config.d.ts +1 -1
  150. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +1 -1
  151. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  152. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +1 -4
  153. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  154. package/dest/services/reqresp/index.d.ts +1 -1
  155. package/dest/services/reqresp/interface.d.ts +2 -2
  156. package/dest/services/reqresp/interface.d.ts.map +1 -1
  157. package/dest/services/reqresp/interface.js +1 -1
  158. package/dest/services/reqresp/metrics.d.ts +1 -1
  159. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  160. package/dest/services/reqresp/protocols/auth.d.ts +2 -2
  161. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
  162. package/dest/services/reqresp/protocols/auth.js +2 -2
  163. package/dest/services/reqresp/protocols/block.d.ts +1 -1
  164. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  165. package/dest/services/reqresp/protocols/block.js +3 -2
  166. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +1 -1
  167. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  168. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  169. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +4 -6
  170. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  171. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +1 -1
  172. package/dest/services/reqresp/protocols/block_txs/index.d.ts +1 -1
  173. package/dest/services/reqresp/protocols/goodbye.d.ts +1 -1
  174. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  175. package/dest/services/reqresp/protocols/index.d.ts +1 -1
  176. package/dest/services/reqresp/protocols/ping.d.ts +1 -1
  177. package/dest/services/reqresp/protocols/status.d.ts +6 -5
  178. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  179. package/dest/services/reqresp/protocols/status.js +4 -3
  180. package/dest/services/reqresp/protocols/tx.d.ts +2 -3
  181. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  182. package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
  183. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +2 -2
  184. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  185. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  186. package/dest/services/reqresp/reqresp.d.ts +1 -41
  187. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  188. package/dest/services/reqresp/status.d.ts +2 -2
  189. package/dest/services/reqresp/status.d.ts.map +1 -1
  190. package/dest/services/service.d.ts +1 -1
  191. package/dest/services/tx_collection/config.d.ts +1 -1
  192. package/dest/services/tx_collection/config.js +1 -1
  193. package/dest/services/tx_collection/fast_tx_collection.d.ts +4 -9
  194. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  195. package/dest/services/tx_collection/index.d.ts +1 -1
  196. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  197. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  198. package/dest/services/tx_collection/slow_tx_collection.d.ts +6 -7
  199. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  200. package/dest/services/tx_collection/slow_tx_collection.js +2 -1
  201. package/dest/services/tx_collection/tx_collection.d.ts +11 -11
  202. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  203. package/dest/services/tx_collection/tx_collection_sink.d.ts +3 -3
  204. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  205. package/dest/services/tx_collection/tx_source.d.ts +1 -1
  206. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  207. package/dest/services/tx_provider.d.ts +6 -4
  208. package/dest/services/tx_provider.d.ts.map +1 -1
  209. package/dest/services/tx_provider.js +11 -2
  210. package/dest/services/tx_provider_instrumentation.d.ts +5 -2
  211. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  212. package/dest/services/tx_provider_instrumentation.js +14 -1
  213. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
  214. package/dest/test-helpers/get-ports.d.ts +1 -1
  215. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  216. package/dest/test-helpers/index.d.ts +1 -1
  217. package/dest/test-helpers/make-enrs.d.ts +1 -1
  218. package/dest/test-helpers/make-test-p2p-clients.d.ts +2 -2
  219. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  220. package/dest/test-helpers/mock-pubsub.d.ts +4 -4
  221. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  222. package/dest/test-helpers/mock-tx-helpers.d.ts +2 -2
  223. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -1
  224. package/dest/test-helpers/mock-tx-helpers.js +1 -1
  225. package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
  226. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  227. package/dest/testbench/p2p_client_testbench_worker.d.ts +1 -1
  228. package/dest/testbench/p2p_client_testbench_worker.js +12 -8
  229. package/dest/testbench/parse_log_file.d.ts +1 -1
  230. package/dest/testbench/testbench.d.ts +1 -1
  231. package/dest/testbench/worker_client_manager.d.ts +1 -1
  232. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  233. package/dest/types/index.d.ts +1 -1
  234. package/dest/util.d.ts +2 -1
  235. package/dest/util.d.ts.map +1 -1
  236. package/dest/util.js +11 -2
  237. package/dest/versioning.d.ts +1 -1
  238. package/package.json +19 -18
  239. package/src/client/factory.ts +5 -10
  240. package/src/client/interface.ts +4 -1
  241. package/src/client/p2p_client.ts +63 -60
  242. package/src/config.ts +28 -17
  243. package/src/errors/attestation-pool.error.ts +13 -0
  244. package/src/mem_pools/attestation_pool/attestation_pool.ts +29 -5
  245. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +47 -34
  246. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +66 -24
  247. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +50 -16
  248. package/src/mem_pools/attestation_pool/mocks.ts +3 -3
  249. package/src/mem_pools/instrumentation.ts +46 -0
  250. package/src/mem_pools/interface.ts +2 -4
  251. package/src/mem_pools/tx_pool/README.md +255 -0
  252. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +314 -373
  253. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +71 -0
  254. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +93 -0
  255. package/src/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.ts +108 -0
  256. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  257. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +91 -0
  258. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  259. package/src/mem_pools/tx_pool/index.ts +0 -1
  260. package/src/mem_pools/tx_pool/priority.ts +8 -1
  261. package/src/mem_pools/tx_pool/tx_pool.ts +11 -5
  262. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +23 -17
  263. package/src/msg_validators/attestation_validator/attestation_validator.ts +14 -16
  264. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +91 -0
  265. package/src/msg_validators/attestation_validator/index.ts +1 -0
  266. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +26 -10
  267. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  268. package/src/msg_validators/tx_validator/block_header_validator.ts +1 -1
  269. package/src/msg_validators/tx_validator/factory.ts +3 -2
  270. package/src/msg_validators/tx_validator/metadata_validator.ts +1 -1
  271. package/src/msg_validators/tx_validator/phases_validator.ts +3 -1
  272. package/src/msg_validators/tx_validator/test_utils.ts +1 -1
  273. package/src/msg_validators/tx_validator/timestamp_validator.ts +2 -1
  274. package/src/services/encoding.ts +1 -1
  275. package/src/services/libp2p/instrumentation.ts +10 -1
  276. package/src/services/libp2p/libp2p_service.ts +263 -79
  277. package/src/services/peer-manager/metrics.ts +32 -0
  278. package/src/services/peer-manager/peer_manager.ts +6 -2
  279. package/src/services/peer-manager/peer_scoring.ts +46 -3
  280. package/src/services/reqresp/interface.ts +1 -1
  281. package/src/services/reqresp/protocols/auth.ts +2 -2
  282. package/src/services/reqresp/protocols/block.ts +3 -2
  283. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +1 -1
  284. package/src/services/reqresp/protocols/status.ts +9 -8
  285. package/src/services/reqresp/protocols/tx.ts +1 -2
  286. package/src/services/tx_collection/config.ts +1 -1
  287. package/src/services/tx_collection/fast_tx_collection.ts +3 -2
  288. package/src/services/tx_collection/slow_tx_collection.ts +7 -6
  289. package/src/services/tx_collection/tx_collection.ts +10 -9
  290. package/src/services/tx_provider.ts +21 -5
  291. package/src/services/tx_provider_instrumentation.ts +19 -2
  292. package/src/test-helpers/mock-pubsub.ts +1 -1
  293. package/src/test-helpers/mock-tx-helpers.ts +1 -1
  294. package/src/test-helpers/reqresp-nodes.ts +1 -1
  295. package/src/testbench/p2p_client_testbench_worker.ts +10 -6
  296. package/src/util.ts +12 -2
  297. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -80
  298. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  299. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -238
  300. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -283
package/src/util.ts CHANGED
@@ -12,6 +12,7 @@ import { createFromPrivKey } from '@libp2p/peer-id-factory';
12
12
  import { resolve } from 'dns/promises';
13
13
  import { promises as fs } from 'fs';
14
14
  import type { Libp2p } from 'libp2p';
15
+ import net from 'net';
15
16
  import path from 'path';
16
17
 
17
18
  import type { P2PConfig } from './config.js';
@@ -56,9 +57,18 @@ export function convertToMultiaddr(address: string, port: number, protocol: 'tcp
56
57
  * Queries the public IP address of the machine.
57
58
  */
58
59
  export async function getPublicIp(): Promise<string> {
59
- const resp = await fetch('http://checkip.amazonaws.com/');
60
+ const resp = await fetch('https://checkip.amazonaws.com/');
60
61
  const text = await resp.text();
61
- return text.trim();
62
+ const address = text.trim();
63
+ if (!isValidIpAddress(address)) {
64
+ throw new Error(`Received invalid IP address from checkip service: ${address}`);
65
+ }
66
+ return address;
67
+ }
68
+
69
+ export function isValidIpAddress(address: string): boolean {
70
+ const netType = net.isIP(address);
71
+ return netType === 4;
62
72
  }
63
73
 
64
74
  export async function resolveAddressIfNecessary(address: string, port: string): Promise<string> {
@@ -1,80 +0,0 @@
1
- import type { TypedEventEmitter } from '@aztec/foundation/types';
2
- import { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
3
- import { type TelemetryClient } from '@aztec/telemetry-client';
4
- import type { TxPool, TxPoolEvents, TxPoolOptions } from './tx_pool.js';
5
- declare const InMemoryTxPool_base: new () => TypedEventEmitter<TxPoolEvents>;
6
- /**
7
- * In-memory implementation of the Transaction Pool.
8
- */
9
- export declare class InMemoryTxPool extends InMemoryTxPool_base implements TxPool {
10
- private log;
11
- /**
12
- * Our tx pool, stored as a Map in-memory, with K: tx hash and V: the transaction.
13
- */
14
- private txs;
15
- private minedTxs;
16
- private pendingTxs;
17
- private deletedMinedTxHashes;
18
- private blockToDeletedMinedTxHash;
19
- private metrics;
20
- /**
21
- * Class constructor for in-memory TxPool. Initiates our transaction pool as a JS Map.
22
- * @param log - A logger.
23
- */
24
- constructor(telemetry?: TelemetryClient, log?: import("@aztec/foundation/log").Logger);
25
- private countTx;
26
- isEmpty(): Promise<boolean>;
27
- markAsMined(txHashes: TxHash[], blockHeader: BlockHeader): Promise<void>;
28
- markMinedAsPending(txHashes: TxHash[]): Promise<void>;
29
- getPendingTxHashes(): Promise<TxHash[]>;
30
- getMinedTxHashes(): Promise<[TxHash, number][]>;
31
- getPendingTxCount(): Promise<number>;
32
- getTxStatus(txHash: TxHash): Promise<'pending' | 'mined' | 'deleted' | undefined>;
33
- /**
34
- * Checks if a transaction exists in the pool and returns it.
35
- * @param txHash - The generated tx hash.
36
- * @returns The transaction, if found, 'undefined' otherwise.
37
- */
38
- getTxByHash(txHash: TxHash): Promise<Tx | undefined>;
39
- getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
40
- hasTxs(txHashes: TxHash[]): Promise<boolean[]>;
41
- hasTx(txHash: TxHash): Promise<boolean>;
42
- getArchivedTxByHash(): Promise<Tx | undefined>;
43
- /**
44
- * Adds a list of transactions to the pool. Duplicates are ignored.
45
- * @param txs - An array of txs to be added to the pool.
46
- * @returns Empty promise.
47
- */
48
- addTxs(txs: Tx[], opts?: {
49
- source?: string;
50
- }): Promise<number>;
51
- /**
52
- * Deletes transactions from the pool. Tx hashes that are not present are ignored.
53
- * Mined transactions are soft-deleted with a timestamp, pending transactions are permanently deleted.
54
- * @param txHashes - An array of tx hashes to be deleted from the tx pool.
55
- * @returns Empty promise.
56
- */
57
- deleteTxs(txHashes: TxHash[], opts?: {
58
- permanently?: boolean;
59
- }): Promise<void>;
60
- /**
61
- * Gets all the transactions stored in the pool.
62
- * @returns Array of tx objects in the order they were added to the pool.
63
- */
64
- getAllTxs(): Promise<Tx[]>;
65
- /**
66
- * Gets the hashes of all transactions currently in the tx pool.
67
- * @returns An array of transaction hashes found in the tx pool.
68
- */
69
- getAllTxHashes(): Promise<TxHash[]>;
70
- updateConfig(_config: TxPoolOptions): void;
71
- markTxsAsNonEvictable(_: TxHash[]): Promise<void>;
72
- /**
73
- * Permanently deletes deleted mined transactions from blocks up to and including the specified block number.
74
- * @param blockNumber - Block number threshold. Deleted mined txs from this block or earlier will be permanently deleted.
75
- * @returns The number of transactions permanently deleted.
76
- */
77
- cleanupDeletedMinedTxs(blockNumber: number): Promise<number>;
78
- }
79
- export {};
80
- //# sourceMappingURL=memory_tx_pool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"memory_tx_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/tx_pool/memory_tx_pool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAMnF,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;mCAKnB,UAAU,iBAAiB,CAAC,YAAY,CAAC;AAH9F;;GAEG;AACH,qBAAa,cAAe,SAAQ,mBAA4D,YAAW,MAAM;IAkB7G,OAAO,CAAC,GAAG;IAjBb;;OAEG;IACH,OAAO,CAAC,GAAG,CAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,UAAU,CAAc;IAChC,OAAO,CAAC,oBAAoB,CAAsB;IAClD,OAAO,CAAC,yBAAyB,CAA2B;IAE5D,OAAO,CAAC,OAAO,CAA0B;IAEzC;;;OAGG;gBAED,SAAS,GAAE,eAAsC,EACzC,GAAG,yCAA8B;IAW3C,OAAO,CAAC,OAAO,CAOb;IAEK,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAI3B,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBxE,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB/C,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAa7C,gBAAgB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAM/C,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKpC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IAexF;;;;OAIG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAK3D,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;IAG7D,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAIxC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtC,mBAAmB,IAAI,OAAO,CAAC,EAAE,GAAG,SAAS,CAAC;IAIrD;;;;OAIG;IACI,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IA0BzE;;;;;OAKG;IACI,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BrF;;;OAGG;IACI,SAAS,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;IAIjC;;;OAGG;IACI,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAI1C,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAE1C,qBAAqB,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD;;;;OAIG;IACI,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA2BpE"}
@@ -1,238 +0,0 @@
1
- import { createLogger } from '@aztec/foundation/log';
2
- import { Tx, TxHash } from '@aztec/stdlib/tx';
3
- import { getTelemetryClient } from '@aztec/telemetry-client';
4
- import EventEmitter from 'node:events';
5
- import { PoolInstrumentation, PoolName } from '../instrumentation.js';
6
- import { getPendingTxPriority } from './priority.js';
7
- /**
8
- * In-memory implementation of the Transaction Pool.
9
- */ export class InMemoryTxPool extends EventEmitter {
10
- log;
11
- /**
12
- * Our tx pool, stored as a Map in-memory, with K: tx hash and V: the transaction.
13
- */ txs;
14
- minedTxs;
15
- pendingTxs;
16
- deletedMinedTxHashes;
17
- blockToDeletedMinedTxHash;
18
- metrics;
19
- /**
20
- * Class constructor for in-memory TxPool. Initiates our transaction pool as a JS Map.
21
- * @param log - A logger.
22
- */ constructor(telemetry = getTelemetryClient(), log = createLogger('p2p:tx_pool')){
23
- super(), this.log = log, this.countTx = ()=>{
24
- return Promise.resolve({
25
- itemCount: {
26
- mined: this.minedTxs.size,
27
- pending: this.pendingTxs.size
28
- }
29
- });
30
- };
31
- this.txs = new Map();
32
- this.minedTxs = new Map();
33
- this.pendingTxs = new Set();
34
- this.deletedMinedTxHashes = new Map();
35
- this.blockToDeletedMinedTxHash = new Map();
36
- this.metrics = new PoolInstrumentation(telemetry, PoolName.TX_POOL, this.countTx);
37
- }
38
- countTx;
39
- isEmpty() {
40
- return Promise.resolve(this.txs.size === 0);
41
- }
42
- markAsMined(txHashes, blockHeader) {
43
- const keys = txHashes.map((x)=>x.toBigInt());
44
- for (const key of keys){
45
- // If this tx was previously soft-deleted, remove it from the deleted sets
46
- if (this.deletedMinedTxHashes.has(key)) {
47
- const originalBlock = this.deletedMinedTxHashes.get(key);
48
- this.deletedMinedTxHashes.delete(key);
49
- // Remove from block-to-hash mapping
50
- const txHashesForBlock = this.blockToDeletedMinedTxHash.get(originalBlock);
51
- if (txHashesForBlock) {
52
- txHashesForBlock.delete(key);
53
- if (txHashesForBlock.size === 0) {
54
- this.blockToDeletedMinedTxHash.delete(originalBlock);
55
- }
56
- }
57
- }
58
- this.minedTxs.set(key, blockHeader.globalVariables.blockNumber);
59
- this.pendingTxs.delete(key);
60
- }
61
- return Promise.resolve();
62
- }
63
- markMinedAsPending(txHashes) {
64
- if (txHashes.length === 0) {
65
- return Promise.resolve();
66
- }
67
- const keys = txHashes.map((x)=>x.toBigInt());
68
- for (const key of keys){
69
- this.minedTxs.delete(key);
70
- // only add back to the pending set if we have the tx object
71
- if (this.txs.has(key)) {
72
- this.pendingTxs.add(key);
73
- }
74
- }
75
- return Promise.resolve();
76
- }
77
- async getPendingTxHashes() {
78
- const txs = (await this.getAllTxs()).sort((tx1, tx2)=>-getPendingTxPriority(tx1).localeCompare(getPendingTxPriority(tx2)));
79
- const txHashes = await Promise.all(txs.map((tx)=>tx.getTxHash()));
80
- // No need to check deleted since pending txs are never soft-deleted
81
- return txHashes.filter((txHash)=>{
82
- const key = txHash.toBigInt();
83
- return this.pendingTxs.has(key);
84
- });
85
- }
86
- getMinedTxHashes() {
87
- return Promise.resolve(Array.from(this.minedTxs.entries()).map(([txHash, blockNumber])=>[
88
- TxHash.fromBigInt(txHash),
89
- blockNumber
90
- ]));
91
- }
92
- getPendingTxCount() {
93
- // Soft-deleted transactions are always mined, never pending
94
- return Promise.resolve(this.pendingTxs.size);
95
- }
96
- getTxStatus(txHash) {
97
- const key = txHash.toBigInt();
98
- if (this.deletedMinedTxHashes.has(key)) {
99
- return Promise.resolve('deleted');
100
- }
101
- if (this.minedTxs.has(key)) {
102
- return Promise.resolve('mined');
103
- }
104
- if (this.pendingTxs.has(key)) {
105
- return Promise.resolve('pending');
106
- }
107
- return Promise.resolve(undefined);
108
- }
109
- /**
110
- * Checks if a transaction exists in the pool and returns it.
111
- * @param txHash - The generated tx hash.
112
- * @returns The transaction, if found, 'undefined' otherwise.
113
- */ getTxByHash(txHash) {
114
- const result = this.txs.get(txHash.toBigInt());
115
- return Promise.resolve(result === undefined ? undefined : Tx.clone(result));
116
- }
117
- getTxsByHash(txHashes) {
118
- return Promise.all(txHashes.map((txHash)=>this.getTxByHash(txHash)));
119
- }
120
- hasTxs(txHashes) {
121
- return Promise.resolve(txHashes.map((txHash)=>this.txs.has(txHash.toBigInt())));
122
- }
123
- async hasTx(txHash) {
124
- const result = await this.hasTxs([
125
- txHash
126
- ]);
127
- return result[0];
128
- }
129
- getArchivedTxByHash() {
130
- return Promise.resolve(undefined);
131
- }
132
- /**
133
- * Adds a list of transactions to the pool. Duplicates are ignored.
134
- * @param txs - An array of txs to be added to the pool.
135
- * @returns Empty promise.
136
- */ addTxs(txs, opts = {}) {
137
- const added = [];
138
- for (const tx of txs){
139
- const txHash = tx.getTxHash();
140
- this.log.verbose(`Adding tx ${txHash.toString()} to pool`, {
141
- eventName: 'tx-added-to-pool',
142
- ...tx.getStats()
143
- });
144
- const key = txHash.toBigInt();
145
- if (!this.txs.has(key)) {
146
- added.push(tx);
147
- this.txs.set(key, tx);
148
- }
149
- if (!this.minedTxs.has(key)) {
150
- this.metrics.recordSize(tx);
151
- this.pendingTxs.add(key);
152
- }
153
- }
154
- if (added.length > 0) {
155
- this.emit('txs-added', {
156
- ...opts,
157
- txs: added
158
- });
159
- }
160
- return Promise.resolve(added.length);
161
- }
162
- /**
163
- * Deletes transactions from the pool. Tx hashes that are not present are ignored.
164
- * Mined transactions are soft-deleted with a timestamp, pending transactions are permanently deleted.
165
- * @param txHashes - An array of tx hashes to be deleted from the tx pool.
166
- * @returns Empty promise.
167
- */ deleteTxs(txHashes, opts) {
168
- for (const txHash of txHashes){
169
- const key = txHash.toBigInt();
170
- if (this.txs.has(key)) {
171
- if (this.minedTxs.has(key)) {
172
- const blockNumber = this.minedTxs.get(key);
173
- this.minedTxs.delete(key);
174
- // Soft-delete mined transactions: remove from mined set but keep in storage
175
- if (opts?.permanently) {
176
- // Permanently delete mined transactions if specified
177
- this.txs.delete(key);
178
- } else {
179
- this.deletedMinedTxHashes.set(key, blockNumber);
180
- if (!this.blockToDeletedMinedTxHash.has(blockNumber)) {
181
- this.blockToDeletedMinedTxHash.set(blockNumber, new Set());
182
- }
183
- this.blockToDeletedMinedTxHash.get(blockNumber).add(key);
184
- }
185
- } else {
186
- // Permanently delete pending transactions
187
- this.txs.delete(key);
188
- this.pendingTxs.delete(key);
189
- }
190
- }
191
- }
192
- return Promise.resolve();
193
- }
194
- /**
195
- * Gets all the transactions stored in the pool.
196
- * @returns Array of tx objects in the order they were added to the pool.
197
- */ getAllTxs() {
198
- return Promise.resolve(Array.from(this.txs.values()).map((x)=>Tx.clone(x)));
199
- }
200
- /**
201
- * Gets the hashes of all transactions currently in the tx pool.
202
- * @returns An array of transaction hashes found in the tx pool.
203
- */ getAllTxHashes() {
204
- return Promise.resolve(Array.from(this.txs.keys()).map((x)=>TxHash.fromBigInt(x)));
205
- }
206
- updateConfig(_config) {}
207
- markTxsAsNonEvictable(_) {
208
- return Promise.resolve();
209
- }
210
- /**
211
- * Permanently deletes deleted mined transactions from blocks up to and including the specified block number.
212
- * @param blockNumber - Block number threshold. Deleted mined txs from this block or earlier will be permanently deleted.
213
- * @returns The number of transactions permanently deleted.
214
- */ cleanupDeletedMinedTxs(blockNumber) {
215
- let deletedCount = 0;
216
- const blocksToDelete = [];
217
- // Find all blocks up to the specified block number
218
- for (const [block, txHashes] of this.blockToDeletedMinedTxHash.entries()){
219
- if (block <= blockNumber) {
220
- // Permanently delete all transactions from this block
221
- for (const txHash of txHashes){
222
- this.txs.delete(txHash);
223
- this.deletedMinedTxHashes.delete(txHash);
224
- deletedCount++;
225
- }
226
- blocksToDelete.push(block);
227
- }
228
- }
229
- // Clean up block-to-hash mapping
230
- for (const block of blocksToDelete){
231
- this.blockToDeletedMinedTxHash.delete(block);
232
- }
233
- if (deletedCount > 0) {
234
- this.log.debug(`Permanently deleted ${deletedCount} deleted mined txs from blocks up to ${blockNumber}`);
235
- }
236
- return Promise.resolve(deletedCount);
237
- }
238
- }
@@ -1,283 +0,0 @@
1
- import { createLogger } from '@aztec/foundation/log';
2
- import type { TypedEventEmitter } from '@aztec/foundation/types';
3
- import type { TxAddedToPoolStats } from '@aztec/stdlib/stats';
4
- import { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
5
- import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
6
-
7
- import EventEmitter from 'node:events';
8
-
9
- import { PoolInstrumentation, PoolName, type PoolStatsCallback } from '../instrumentation.js';
10
- import { getPendingTxPriority } from './priority.js';
11
- import type { TxPool, TxPoolEvents, TxPoolOptions } from './tx_pool.js';
12
-
13
- /**
14
- * In-memory implementation of the Transaction Pool.
15
- */
16
- export class InMemoryTxPool extends (EventEmitter as new () => TypedEventEmitter<TxPoolEvents>) implements TxPool {
17
- /**
18
- * Our tx pool, stored as a Map in-memory, with K: tx hash and V: the transaction.
19
- */
20
- private txs: Map<bigint, Tx>;
21
- private minedTxs: Map<bigint, number>;
22
- private pendingTxs: Set<bigint>;
23
- private deletedMinedTxHashes: Map<bigint, number>;
24
- private blockToDeletedMinedTxHash: Map<number, Set<bigint>>;
25
-
26
- private metrics: PoolInstrumentation<Tx>;
27
-
28
- /**
29
- * Class constructor for in-memory TxPool. Initiates our transaction pool as a JS Map.
30
- * @param log - A logger.
31
- */
32
- constructor(
33
- telemetry: TelemetryClient = getTelemetryClient(),
34
- private log = createLogger('p2p:tx_pool'),
35
- ) {
36
- super();
37
- this.txs = new Map<bigint, Tx>();
38
- this.minedTxs = new Map();
39
- this.pendingTxs = new Set();
40
- this.deletedMinedTxHashes = new Map();
41
- this.blockToDeletedMinedTxHash = new Map();
42
- this.metrics = new PoolInstrumentation(telemetry, PoolName.TX_POOL, this.countTx);
43
- }
44
-
45
- private countTx: PoolStatsCallback = () => {
46
- return Promise.resolve({
47
- itemCount: {
48
- mined: this.minedTxs.size,
49
- pending: this.pendingTxs.size,
50
- },
51
- });
52
- };
53
-
54
- public isEmpty(): Promise<boolean> {
55
- return Promise.resolve(this.txs.size === 0);
56
- }
57
-
58
- public markAsMined(txHashes: TxHash[], blockHeader: BlockHeader): Promise<void> {
59
- const keys = txHashes.map(x => x.toBigInt());
60
- for (const key of keys) {
61
- // If this tx was previously soft-deleted, remove it from the deleted sets
62
- if (this.deletedMinedTxHashes.has(key)) {
63
- const originalBlock = this.deletedMinedTxHashes.get(key)!;
64
- this.deletedMinedTxHashes.delete(key);
65
- // Remove from block-to-hash mapping
66
- const txHashesForBlock = this.blockToDeletedMinedTxHash.get(originalBlock);
67
- if (txHashesForBlock) {
68
- txHashesForBlock.delete(key);
69
- if (txHashesForBlock.size === 0) {
70
- this.blockToDeletedMinedTxHash.delete(originalBlock);
71
- }
72
- }
73
- }
74
- this.minedTxs.set(key, blockHeader.globalVariables.blockNumber);
75
- this.pendingTxs.delete(key);
76
- }
77
- return Promise.resolve();
78
- }
79
-
80
- public markMinedAsPending(txHashes: TxHash[]): Promise<void> {
81
- if (txHashes.length === 0) {
82
- return Promise.resolve();
83
- }
84
-
85
- const keys = txHashes.map(x => x.toBigInt());
86
- for (const key of keys) {
87
- this.minedTxs.delete(key);
88
-
89
- // only add back to the pending set if we have the tx object
90
- if (this.txs.has(key)) {
91
- this.pendingTxs.add(key);
92
- }
93
- }
94
-
95
- return Promise.resolve();
96
- }
97
-
98
- public async getPendingTxHashes(): Promise<TxHash[]> {
99
- const txs = (await this.getAllTxs()).sort(
100
- (tx1, tx2) => -getPendingTxPriority(tx1).localeCompare(getPendingTxPriority(tx2)),
101
- );
102
- const txHashes = await Promise.all(txs.map(tx => tx.getTxHash()));
103
-
104
- // No need to check deleted since pending txs are never soft-deleted
105
- return txHashes.filter(txHash => {
106
- const key = txHash.toBigInt();
107
- return this.pendingTxs.has(key);
108
- });
109
- }
110
-
111
- public getMinedTxHashes(): Promise<[TxHash, number][]> {
112
- return Promise.resolve(
113
- Array.from(this.minedTxs.entries()).map(([txHash, blockNumber]) => [TxHash.fromBigInt(txHash), blockNumber]),
114
- );
115
- }
116
-
117
- public getPendingTxCount(): Promise<number> {
118
- // Soft-deleted transactions are always mined, never pending
119
- return Promise.resolve(this.pendingTxs.size);
120
- }
121
-
122
- public getTxStatus(txHash: TxHash): Promise<'pending' | 'mined' | 'deleted' | undefined> {
123
- const key = txHash.toBigInt();
124
-
125
- if (this.deletedMinedTxHashes.has(key)) {
126
- return Promise.resolve('deleted');
127
- }
128
- if (this.minedTxs.has(key)) {
129
- return Promise.resolve('mined');
130
- }
131
- if (this.pendingTxs.has(key)) {
132
- return Promise.resolve('pending');
133
- }
134
- return Promise.resolve(undefined);
135
- }
136
-
137
- /**
138
- * Checks if a transaction exists in the pool and returns it.
139
- * @param txHash - The generated tx hash.
140
- * @returns The transaction, if found, 'undefined' otherwise.
141
- */
142
- public getTxByHash(txHash: TxHash): Promise<Tx | undefined> {
143
- const result = this.txs.get(txHash.toBigInt());
144
- return Promise.resolve(result === undefined ? undefined : Tx.clone(result));
145
- }
146
-
147
- getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]> {
148
- return Promise.all(txHashes.map(txHash => this.getTxByHash(txHash)));
149
- }
150
- hasTxs(txHashes: TxHash[]): Promise<boolean[]> {
151
- return Promise.resolve(txHashes.map(txHash => this.txs.has(txHash.toBigInt())));
152
- }
153
-
154
- async hasTx(txHash: TxHash): Promise<boolean> {
155
- const result = await this.hasTxs([txHash]);
156
- return result[0];
157
- }
158
-
159
- public getArchivedTxByHash(): Promise<Tx | undefined> {
160
- return Promise.resolve(undefined);
161
- }
162
-
163
- /**
164
- * Adds a list of transactions to the pool. Duplicates are ignored.
165
- * @param txs - An array of txs to be added to the pool.
166
- * @returns Empty promise.
167
- */
168
- public addTxs(txs: Tx[], opts: { source?: string } = {}): Promise<number> {
169
- const added: Tx[] = [];
170
- for (const tx of txs) {
171
- const txHash = tx.getTxHash();
172
- this.log.verbose(`Adding tx ${txHash.toString()} to pool`, {
173
- eventName: 'tx-added-to-pool',
174
- ...tx.getStats(),
175
- } satisfies TxAddedToPoolStats);
176
-
177
- const key = txHash.toBigInt();
178
- if (!this.txs.has(key)) {
179
- added.push(tx as Tx);
180
- this.txs.set(key, tx);
181
- }
182
-
183
- if (!this.minedTxs.has(key)) {
184
- this.metrics.recordSize(tx);
185
- this.pendingTxs.add(key);
186
- }
187
- }
188
- if (added.length > 0) {
189
- this.emit('txs-added', { ...opts, txs: added });
190
- }
191
- return Promise.resolve(added.length);
192
- }
193
-
194
- /**
195
- * Deletes transactions from the pool. Tx hashes that are not present are ignored.
196
- * Mined transactions are soft-deleted with a timestamp, pending transactions are permanently deleted.
197
- * @param txHashes - An array of tx hashes to be deleted from the tx pool.
198
- * @returns Empty promise.
199
- */
200
- public deleteTxs(txHashes: TxHash[], opts?: { permanently?: boolean }): Promise<void> {
201
- for (const txHash of txHashes) {
202
- const key = txHash.toBigInt();
203
- if (this.txs.has(key)) {
204
- if (this.minedTxs.has(key)) {
205
- const blockNumber = this.minedTxs.get(key)!;
206
- this.minedTxs.delete(key);
207
- // Soft-delete mined transactions: remove from mined set but keep in storage
208
- if (opts?.permanently) {
209
- // Permanently delete mined transactions if specified
210
- this.txs.delete(key);
211
- } else {
212
- this.deletedMinedTxHashes.set(key, blockNumber);
213
- if (!this.blockToDeletedMinedTxHash.has(blockNumber)) {
214
- this.blockToDeletedMinedTxHash.set(blockNumber, new Set());
215
- }
216
- this.blockToDeletedMinedTxHash.get(blockNumber)!.add(key);
217
- }
218
- } else {
219
- // Permanently delete pending transactions
220
- this.txs.delete(key);
221
- this.pendingTxs.delete(key);
222
- }
223
- }
224
- }
225
-
226
- return Promise.resolve();
227
- }
228
-
229
- /**
230
- * Gets all the transactions stored in the pool.
231
- * @returns Array of tx objects in the order they were added to the pool.
232
- */
233
- public getAllTxs(): Promise<Tx[]> {
234
- return Promise.resolve(Array.from(this.txs.values()).map(x => Tx.clone(x)));
235
- }
236
-
237
- /**
238
- * Gets the hashes of all transactions currently in the tx pool.
239
- * @returns An array of transaction hashes found in the tx pool.
240
- */
241
- public getAllTxHashes(): Promise<TxHash[]> {
242
- return Promise.resolve(Array.from(this.txs.keys()).map(x => TxHash.fromBigInt(x)));
243
- }
244
-
245
- updateConfig(_config: TxPoolOptions): void {}
246
-
247
- markTxsAsNonEvictable(_: TxHash[]): Promise<void> {
248
- return Promise.resolve();
249
- }
250
-
251
- /**
252
- * Permanently deletes deleted mined transactions from blocks up to and including the specified block number.
253
- * @param blockNumber - Block number threshold. Deleted mined txs from this block or earlier will be permanently deleted.
254
- * @returns The number of transactions permanently deleted.
255
- */
256
- public cleanupDeletedMinedTxs(blockNumber: number): Promise<number> {
257
- let deletedCount = 0;
258
- const blocksToDelete: number[] = [];
259
-
260
- // Find all blocks up to the specified block number
261
- for (const [block, txHashes] of this.blockToDeletedMinedTxHash.entries()) {
262
- if (block <= blockNumber) {
263
- // Permanently delete all transactions from this block
264
- for (const txHash of txHashes) {
265
- this.txs.delete(txHash);
266
- this.deletedMinedTxHashes.delete(txHash);
267
- deletedCount++;
268
- }
269
- blocksToDelete.push(block);
270
- }
271
- }
272
-
273
- // Clean up block-to-hash mapping
274
- for (const block of blocksToDelete) {
275
- this.blockToDeletedMinedTxHash.delete(block);
276
- }
277
-
278
- if (deletedCount > 0) {
279
- this.log.debug(`Permanently deleted ${deletedCount} deleted mined txs from blocks up to ${blockNumber}`);
280
- }
281
- return Promise.resolve(deletedCount);
282
- }
283
- }