@aztec/p2p 0.0.0-test.1 → 0.0.1-commit.0208eb9

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 (528) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +4 -3
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +26 -13
  4. package/dest/client/factory.d.ts +15 -5
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +63 -25
  7. package/dest/client/index.d.ts +2 -1
  8. package/dest/client/index.d.ts.map +1 -1
  9. package/dest/client/index.js +1 -0
  10. package/dest/client/interface.d.ts +170 -0
  11. package/dest/client/interface.d.ts.map +1 -0
  12. package/dest/client/interface.js +9 -0
  13. package/dest/client/p2p_client.d.ts +77 -193
  14. package/dest/client/p2p_client.d.ts.map +1 -1
  15. package/dest/client/p2p_client.js +769 -229
  16. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  17. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  18. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
  19. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  20. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  21. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  22. package/dest/config.d.ts +160 -125
  23. package/dest/config.d.ts.map +1 -1
  24. package/dest/config.js +184 -34
  25. package/dest/enr/generate-enr.d.ts +11 -3
  26. package/dest/enr/generate-enr.d.ts.map +1 -1
  27. package/dest/enr/generate-enr.js +27 -5
  28. package/dest/enr/index.d.ts +1 -1
  29. package/dest/errors/attestation-pool.error.d.ts +7 -0
  30. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  31. package/dest/errors/attestation-pool.error.js +12 -0
  32. package/dest/errors/reqresp.error.d.ts +1 -1
  33. package/dest/errors/reqresp.error.d.ts.map +1 -1
  34. package/dest/index.d.ts +4 -1
  35. package/dest/index.d.ts.map +1 -1
  36. package/dest/index.js +2 -0
  37. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +104 -25
  38. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  39. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  40. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  41. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +299 -174
  42. package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
  43. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +29 -11
  44. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  45. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +168 -62
  46. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +24 -10
  47. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  48. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +133 -82
  49. package/dest/mem_pools/attestation_pool/mocks.d.ts +234 -11
  50. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  51. package/dest/mem_pools/attestation_pool/mocks.js +19 -21
  52. package/dest/mem_pools/index.d.ts +1 -1
  53. package/dest/mem_pools/instrumentation.d.ts +16 -12
  54. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  55. package/dest/mem_pools/instrumentation.js +56 -41
  56. package/dest/mem_pools/interface.d.ts +3 -4
  57. package/dest/mem_pools/interface.d.ts.map +1 -1
  58. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +75 -16
  59. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  60. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +493 -142
  61. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
  62. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  63. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
  64. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
  65. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  66. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
  67. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  68. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  69. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  70. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  71. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  72. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  73. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  74. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  75. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
  76. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  77. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  78. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  79. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  80. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  81. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  82. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  83. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  84. package/dest/mem_pools/tx_pool/index.js +0 -1
  85. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  86. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  87. package/dest/mem_pools/tx_pool/priority.js +7 -2
  88. package/dest/mem_pools/tx_pool/tx_pool.d.ts +72 -11
  89. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  90. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  91. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  92. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +276 -45
  93. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +7 -5
  94. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  95. package/dest/msg_validators/attestation_validator/attestation_validator.js +79 -10
  96. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
  97. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  98. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +76 -0
  99. package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
  100. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
  101. package/dest/msg_validators/attestation_validator/index.js +1 -0
  102. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  103. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  104. package/dest/msg_validators/clock_tolerance.js +37 -0
  105. package/dest/msg_validators/index.d.ts +2 -2
  106. package/dest/msg_validators/index.d.ts.map +1 -1
  107. package/dest/msg_validators/index.js +1 -1
  108. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +10 -0
  109. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -0
  110. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.js +36 -0
  111. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  112. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  113. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  114. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  115. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  116. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  117. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  118. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  119. package/dest/msg_validators/proposal_validator/index.js +3 -0
  120. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  121. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  122. package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
  123. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  124. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  125. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
  126. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  127. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  128. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +3 -0
  129. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -0
  130. package/dest/msg_validators/tx_validator/allowed_public_setup.js +27 -0
  131. package/dest/msg_validators/tx_validator/archive_cache.d.ts +14 -0
  132. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -0
  133. package/dest/msg_validators/tx_validator/archive_cache.js +22 -0
  134. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +5 -4
  135. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  136. package/dest/msg_validators/tx_validator/block_header_validator.js +7 -6
  137. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  138. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  139. package/dest/msg_validators/tx_validator/data_validator.js +60 -87
  140. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -4
  141. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  142. package/dest/msg_validators/tx_validator/double_spend_validator.js +24 -29
  143. package/dest/msg_validators/tx_validator/factory.d.ts +21 -0
  144. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
  145. package/dest/msg_validators/tx_validator/factory.js +84 -0
  146. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  147. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  148. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  149. package/dest/msg_validators/tx_validator/gas_validator.d.ts +12 -0
  150. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -0
  151. package/dest/msg_validators/tx_validator/gas_validator.js +110 -0
  152. package/dest/msg_validators/tx_validator/index.d.ts +9 -1
  153. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  154. package/dest/msg_validators/tx_validator/index.js +8 -0
  155. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +10 -5
  156. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  157. package/dest/msg_validators/tx_validator/metadata_validator.js +40 -21
  158. package/dest/msg_validators/tx_validator/phases_validator.d.ts +15 -0
  159. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -0
  160. package/dest/msg_validators/tx_validator/phases_validator.js +93 -0
  161. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  162. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  163. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  164. package/dest/msg_validators/tx_validator/test_utils.d.ts +17 -0
  165. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -0
  166. package/dest/msg_validators/tx_validator/test_utils.js +22 -0
  167. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +14 -0
  168. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -0
  169. package/dest/msg_validators/tx_validator/timestamp_validator.js +32 -0
  170. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +9 -0
  171. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -0
  172. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +24 -0
  173. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  174. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  175. package/dest/msg_validators/tx_validator/tx_proof_validator.js +8 -7
  176. package/dest/services/data_store.d.ts +1 -1
  177. package/dest/services/data_store.d.ts.map +1 -1
  178. package/dest/services/data_store.js +10 -6
  179. package/dest/services/discv5/discV5_service.d.ts +10 -9
  180. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  181. package/dest/services/discv5/discV5_service.js +64 -37
  182. package/dest/services/dummy_service.d.ts +66 -11
  183. package/dest/services/dummy_service.d.ts.map +1 -1
  184. package/dest/services/dummy_service.js +130 -5
  185. package/dest/services/encoding.d.ts +26 -7
  186. package/dest/services/encoding.d.ts.map +1 -1
  187. package/dest/services/encoding.js +75 -6
  188. package/dest/services/gossipsub/scoring.d.ts +1 -1
  189. package/dest/services/index.d.ts +6 -1
  190. package/dest/services/index.d.ts.map +1 -1
  191. package/dest/services/index.js +5 -0
  192. package/dest/services/libp2p/instrumentation.d.ts +20 -0
  193. package/dest/services/libp2p/instrumentation.d.ts.map +1 -0
  194. package/dest/services/libp2p/instrumentation.js +122 -0
  195. package/dest/services/libp2p/libp2p_service.d.ts +107 -95
  196. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  197. package/dest/services/libp2p/libp2p_service.js +1328 -313
  198. package/dest/services/peer-manager/interface.d.ts +23 -0
  199. package/dest/services/peer-manager/interface.d.ts.map +1 -0
  200. package/dest/services/peer-manager/interface.js +1 -0
  201. package/dest/services/peer-manager/metrics.d.ts +12 -3
  202. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  203. package/dest/services/peer-manager/metrics.js +44 -12
  204. package/dest/services/peer-manager/peer_manager.d.ts +103 -23
  205. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  206. package/dest/services/peer-manager/peer_manager.js +551 -82
  207. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  208. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  209. package/dest/services/peer-manager/peer_scoring.js +43 -2
  210. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
  211. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  212. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
  213. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  214. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  215. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  216. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  217. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  218. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  219. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
  220. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  221. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
  222. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
  223. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  224. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
  225. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  226. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  227. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  228. package/dest/services/reqresp/config.d.ts +11 -9
  229. package/dest/services/reqresp/config.d.ts.map +1 -1
  230. package/dest/services/reqresp/config.js +18 -4
  231. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +23 -4
  232. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  233. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +73 -10
  234. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +32 -17
  235. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  236. package/dest/services/reqresp/connection-sampler/connection_sampler.js +154 -84
  237. package/dest/services/reqresp/constants.d.ts +12 -0
  238. package/dest/services/reqresp/constants.d.ts.map +1 -0
  239. package/dest/services/reqresp/constants.js +7 -0
  240. package/dest/services/reqresp/index.d.ts +3 -2
  241. package/dest/services/reqresp/index.d.ts.map +1 -1
  242. package/dest/services/reqresp/index.js +2 -1
  243. package/dest/services/reqresp/interface.d.ts +75 -24
  244. package/dest/services/reqresp/interface.d.ts.map +1 -1
  245. package/dest/services/reqresp/interface.js +46 -27
  246. package/dest/services/reqresp/metrics.d.ts +6 -5
  247. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  248. package/dest/services/reqresp/metrics.js +17 -21
  249. package/dest/services/reqresp/protocols/auth.d.ts +43 -0
  250. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -0
  251. package/dest/services/reqresp/protocols/auth.js +71 -0
  252. package/dest/services/reqresp/protocols/block.d.ts +6 -1
  253. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  254. package/dest/services/reqresp/protocols/block.js +30 -6
  255. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +34 -0
  256. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -0
  257. package/dest/services/reqresp/protocols/block_txs/bitvector.js +87 -0
  258. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +11 -0
  259. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -0
  260. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +52 -0
  261. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +59 -0
  262. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -0
  263. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +105 -0
  264. package/dest/services/reqresp/protocols/block_txs/index.d.ts +4 -0
  265. package/dest/services/reqresp/protocols/block_txs/index.d.ts.map +1 -0
  266. package/dest/services/reqresp/protocols/block_txs/index.js +3 -0
  267. package/dest/services/reqresp/protocols/goodbye.d.ts +3 -5
  268. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  269. package/dest/services/reqresp/protocols/goodbye.js +7 -7
  270. package/dest/services/reqresp/protocols/index.d.ts +3 -1
  271. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  272. package/dest/services/reqresp/protocols/index.js +2 -0
  273. package/dest/services/reqresp/protocols/ping.d.ts +1 -3
  274. package/dest/services/reqresp/protocols/ping.d.ts.map +1 -1
  275. package/dest/services/reqresp/protocols/status.d.ts +40 -7
  276. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  277. package/dest/services/reqresp/protocols/status.js +76 -5
  278. package/dest/services/reqresp/protocols/tx.d.ts +14 -4
  279. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  280. package/dest/services/reqresp/protocols/tx.js +34 -6
  281. package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
  282. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +6 -4
  283. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  284. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -2
  285. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  286. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  287. package/dest/services/reqresp/rate-limiter/rate_limits.js +21 -1
  288. package/dest/services/reqresp/reqresp.d.ts +29 -66
  289. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  290. package/dest/services/reqresp/reqresp.js +753 -248
  291. package/dest/services/reqresp/status.d.ts +10 -4
  292. package/dest/services/reqresp/status.d.ts.map +1 -1
  293. package/dest/services/reqresp/status.js +9 -2
  294. package/dest/services/service.d.ts +40 -20
  295. package/dest/services/service.d.ts.map +1 -1
  296. package/dest/services/tx_collection/config.d.ts +28 -0
  297. package/dest/services/tx_collection/config.d.ts.map +1 -0
  298. package/dest/services/tx_collection/config.js +66 -0
  299. package/dest/services/tx_collection/fast_tx_collection.d.ts +53 -0
  300. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -0
  301. package/dest/services/tx_collection/fast_tx_collection.js +311 -0
  302. package/dest/services/tx_collection/index.d.ts +4 -0
  303. package/dest/services/tx_collection/index.d.ts.map +1 -0
  304. package/dest/services/tx_collection/index.js +3 -0
  305. package/dest/services/tx_collection/instrumentation.d.ts +10 -0
  306. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -0
  307. package/dest/services/tx_collection/instrumentation.js +31 -0
  308. package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
  309. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  310. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  311. package/dest/services/tx_collection/slow_tx_collection.d.ts +53 -0
  312. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -0
  313. package/dest/services/tx_collection/slow_tx_collection.js +177 -0
  314. package/dest/services/tx_collection/tx_collection.d.ts +110 -0
  315. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -0
  316. package/dest/services/tx_collection/tx_collection.js +128 -0
  317. package/dest/services/tx_collection/tx_collection_sink.d.ts +30 -0
  318. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -0
  319. package/dest/services/tx_collection/tx_collection_sink.js +111 -0
  320. package/dest/services/tx_collection/tx_source.d.ts +18 -0
  321. package/dest/services/tx_collection/tx_source.d.ts.map +1 -0
  322. package/dest/services/tx_collection/tx_source.js +31 -0
  323. package/dest/services/tx_file_store/config.d.ts +18 -0
  324. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  325. package/dest/services/tx_file_store/config.js +26 -0
  326. package/dest/services/tx_file_store/index.d.ts +4 -0
  327. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  328. package/dest/services/tx_file_store/index.js +3 -0
  329. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  330. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  331. package/dest/services/tx_file_store/instrumentation.js +29 -0
  332. package/dest/services/tx_file_store/tx_file_store.d.ts +47 -0
  333. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  334. package/dest/services/tx_file_store/tx_file_store.js +149 -0
  335. package/dest/services/tx_provider.d.ts +51 -0
  336. package/dest/services/tx_provider.d.ts.map +1 -0
  337. package/dest/services/tx_provider.js +219 -0
  338. package/dest/services/tx_provider_instrumentation.d.ts +16 -0
  339. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -0
  340. package/dest/services/tx_provider_instrumentation.js +34 -0
  341. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
  342. package/dest/test-helpers/get-ports.d.ts +1 -1
  343. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  344. package/dest/test-helpers/index.d.ts +4 -1
  345. package/dest/test-helpers/index.d.ts.map +1 -1
  346. package/dest/test-helpers/index.js +3 -0
  347. package/dest/test-helpers/make-enrs.d.ts +1 -1
  348. package/dest/test-helpers/make-enrs.d.ts.map +1 -1
  349. package/dest/test-helpers/make-enrs.js +4 -5
  350. package/dest/test-helpers/make-test-p2p-clients.d.ts +33 -5
  351. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  352. package/dest/test-helpers/make-test-p2p-clients.js +86 -16
  353. package/dest/test-helpers/mock-pubsub.d.ts +59 -0
  354. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -0
  355. package/dest/test-helpers/mock-pubsub.js +130 -0
  356. package/dest/test-helpers/mock-tx-helpers.d.ts +12 -0
  357. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -0
  358. package/dest/test-helpers/mock-tx-helpers.js +19 -0
  359. package/dest/test-helpers/reqresp-nodes.d.ts +15 -11
  360. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  361. package/dest/test-helpers/reqresp-nodes.js +62 -28
  362. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  363. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  364. package/dest/test-helpers/test_tx_provider.js +41 -0
  365. package/dest/test-helpers/testbench-utils.d.ts +158 -0
  366. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  367. package/dest/test-helpers/testbench-utils.js +297 -0
  368. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  369. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  370. package/dest/testbench/p2p_client_testbench_worker.js +259 -90
  371. package/dest/testbench/parse_log_file.d.ts +1 -1
  372. package/dest/testbench/parse_log_file.js +4 -4
  373. package/dest/testbench/testbench.d.ts +1 -1
  374. package/dest/testbench/testbench.js +4 -4
  375. package/dest/testbench/worker_client_manager.d.ts +51 -11
  376. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  377. package/dest/testbench/worker_client_manager.js +232 -53
  378. package/dest/types/index.d.ts +4 -2
  379. package/dest/types/index.d.ts.map +1 -1
  380. package/dest/types/index.js +2 -0
  381. package/dest/util.d.ts +24 -16
  382. package/dest/util.d.ts.map +1 -1
  383. package/dest/util.js +75 -69
  384. package/dest/versioning.d.ts +4 -4
  385. package/dest/versioning.d.ts.map +1 -1
  386. package/dest/versioning.js +8 -3
  387. package/package.json +32 -27
  388. package/src/bootstrap/bootstrap.ts +34 -15
  389. package/src/client/factory.ts +139 -53
  390. package/src/client/index.ts +1 -0
  391. package/src/client/interface.ts +213 -0
  392. package/src/client/p2p_client.ts +481 -383
  393. package/src/client/test/tx_proposal_collector/README.md +227 -0
  394. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
  395. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  396. package/src/config.ts +311 -134
  397. package/src/enr/generate-enr.ts +39 -6
  398. package/src/errors/attestation-pool.error.ts +13 -0
  399. package/src/index.ts +4 -0
  400. package/src/mem_pools/attestation_pool/attestation_pool.ts +119 -24
  401. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +352 -201
  402. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +233 -72
  403. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +199 -96
  404. package/src/mem_pools/attestation_pool/mocks.ts +24 -17
  405. package/src/mem_pools/instrumentation.ts +72 -48
  406. package/src/mem_pools/interface.ts +2 -4
  407. package/src/mem_pools/tx_pool/README.md +270 -0
  408. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +580 -143
  409. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
  410. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
  411. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  412. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  413. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
  414. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  415. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  416. package/src/mem_pools/tx_pool/index.ts +0 -1
  417. package/src/mem_pools/tx_pool/priority.ts +9 -2
  418. package/src/mem_pools/tx_pool/tx_pool.ts +75 -10
  419. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +225 -36
  420. package/src/msg_validators/attestation_validator/attestation_validator.ts +72 -14
  421. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +94 -0
  422. package/src/msg_validators/attestation_validator/index.ts +1 -0
  423. package/src/msg_validators/clock_tolerance.ts +51 -0
  424. package/src/msg_validators/index.ts +1 -1
  425. package/src/msg_validators/msg_seen_validator/msg_seen_validator.ts +36 -0
  426. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  427. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  428. package/src/msg_validators/proposal_validator/index.ts +3 -0
  429. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  430. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  431. package/src/msg_validators/tx_validator/allowed_public_setup.ts +35 -0
  432. package/src/msg_validators/tx_validator/archive_cache.ts +28 -0
  433. package/src/msg_validators/tx_validator/block_header_validator.ts +10 -9
  434. package/src/msg_validators/tx_validator/data_validator.ts +95 -71
  435. package/src/msg_validators/tx_validator/double_spend_validator.ts +23 -20
  436. package/src/msg_validators/tx_validator/factory.ts +151 -0
  437. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  438. package/src/msg_validators/tx_validator/gas_validator.ts +123 -0
  439. package/src/msg_validators/tx_validator/index.ts +8 -0
  440. package/src/msg_validators/tx_validator/metadata_validator.ts +72 -24
  441. package/src/msg_validators/tx_validator/phases_validator.ts +118 -0
  442. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  443. package/src/msg_validators/tx_validator/test_utils.ts +43 -0
  444. package/src/msg_validators/tx_validator/timestamp_validator.ts +52 -0
  445. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +22 -0
  446. package/src/msg_validators/tx_validator/tx_proof_validator.ts +14 -8
  447. package/src/services/data_store.ts +10 -7
  448. package/src/services/discv5/discV5_service.ts +85 -39
  449. package/src/services/dummy_service.ts +198 -9
  450. package/src/services/encoding.ts +82 -6
  451. package/src/services/index.ts +5 -0
  452. package/src/services/libp2p/instrumentation.ts +126 -0
  453. package/src/services/libp2p/libp2p_service.ts +1170 -353
  454. package/src/services/peer-manager/interface.ts +29 -0
  455. package/src/services/peer-manager/metrics.ts +55 -12
  456. package/src/services/peer-manager/peer_manager.ts +657 -80
  457. package/src/services/peer-manager/peer_scoring.ts +45 -3
  458. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  459. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
  460. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  461. package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
  462. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
  463. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
  464. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  465. package/src/services/reqresp/config.ts +26 -9
  466. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +77 -10
  467. package/src/services/reqresp/connection-sampler/connection_sampler.ts +166 -95
  468. package/src/services/reqresp/constants.ts +14 -0
  469. package/src/services/reqresp/index.ts +2 -0
  470. package/src/services/reqresp/interface.ts +95 -37
  471. package/src/services/reqresp/metrics.ts +40 -28
  472. package/src/services/reqresp/protocols/auth.ts +83 -0
  473. package/src/services/reqresp/protocols/block.ts +26 -4
  474. package/src/services/reqresp/protocols/block_txs/bitvector.ts +106 -0
  475. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +67 -0
  476. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +121 -0
  477. package/src/services/reqresp/protocols/block_txs/index.ts +3 -0
  478. package/src/services/reqresp/protocols/goodbye.ts +9 -7
  479. package/src/services/reqresp/protocols/index.ts +2 -0
  480. package/src/services/reqresp/protocols/status.ts +121 -5
  481. package/src/services/reqresp/protocols/tx.ts +36 -8
  482. package/src/services/reqresp/rate-limiter/rate_limiter.ts +12 -3
  483. package/src/services/reqresp/rate-limiter/rate_limits.ts +21 -1
  484. package/src/services/reqresp/reqresp.ts +449 -271
  485. package/src/services/reqresp/status.ts +12 -3
  486. package/src/services/service.ts +65 -22
  487. package/src/services/tx_collection/config.ts +98 -0
  488. package/src/services/tx_collection/fast_tx_collection.ts +364 -0
  489. package/src/services/tx_collection/index.ts +7 -0
  490. package/src/services/tx_collection/instrumentation.ts +35 -0
  491. package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
  492. package/src/services/tx_collection/slow_tx_collection.ts +233 -0
  493. package/src/services/tx_collection/tx_collection.ts +216 -0
  494. package/src/services/tx_collection/tx_collection_sink.ts +129 -0
  495. package/src/services/tx_collection/tx_source.ts +37 -0
  496. package/src/services/tx_file_store/config.ts +43 -0
  497. package/src/services/tx_file_store/index.ts +3 -0
  498. package/src/services/tx_file_store/instrumentation.ts +36 -0
  499. package/src/services/tx_file_store/tx_file_store.ts +173 -0
  500. package/src/services/tx_provider.ts +232 -0
  501. package/src/services/tx_provider_instrumentation.ts +54 -0
  502. package/src/test-helpers/index.ts +3 -0
  503. package/src/test-helpers/make-enrs.ts +4 -5
  504. package/src/test-helpers/make-test-p2p-clients.ts +111 -21
  505. package/src/test-helpers/mock-pubsub.ts +188 -0
  506. package/src/test-helpers/mock-tx-helpers.ts +24 -0
  507. package/src/test-helpers/reqresp-nodes.ts +87 -36
  508. package/src/test-helpers/test_tx_provider.ts +64 -0
  509. package/src/test-helpers/testbench-utils.ts +374 -0
  510. package/src/testbench/p2p_client_testbench_worker.ts +434 -89
  511. package/src/testbench/parse_log_file.ts +4 -4
  512. package/src/testbench/testbench.ts +4 -4
  513. package/src/testbench/worker_client_manager.ts +315 -59
  514. package/src/types/index.ts +2 -0
  515. package/src/util.ts +105 -91
  516. package/src/versioning.ts +11 -4
  517. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -56
  518. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  519. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -141
  520. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -8
  521. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  522. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -21
  523. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  524. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  525. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  526. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -174
  527. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -29
  528. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -0,0 +1,37 @@
1
+ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
2
+ import { protocolContractsHash } from '@aztec/protocol-contracts';
3
+ import type { ChainConfig } from '@aztec/stdlib/config';
4
+ import { type AztecNode, createAztecNodeClient } from '@aztec/stdlib/interfaces/client';
5
+ import type { Tx, TxHash } from '@aztec/stdlib/tx';
6
+ import { type ComponentsVersions, getComponentsVersionsFromConfig } from '@aztec/stdlib/versioning';
7
+ import { makeTracedFetch } from '@aztec/telemetry-client';
8
+
9
+ export interface TxSource {
10
+ getInfo(): string;
11
+ getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
12
+ }
13
+
14
+ export class NodeRpcTxSource implements TxSource {
15
+ constructor(
16
+ private readonly client: Pick<AztecNode, 'getTxsByHash'>,
17
+ private readonly info: string,
18
+ ) {}
19
+
20
+ public static fromUrl(nodeUrl: string, versions: ComponentsVersions): NodeRpcTxSource {
21
+ const client = createAztecNodeClient(nodeUrl, versions, makeTracedFetch([1, 2, 3], false));
22
+ return new NodeRpcTxSource(client, nodeUrl);
23
+ }
24
+
25
+ public getInfo() {
26
+ return this.info;
27
+ }
28
+
29
+ public getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]> {
30
+ return this.client.getTxsByHash(txHashes);
31
+ }
32
+ }
33
+
34
+ export function createNodeRpcTxSources(urls: string[], chainConfig: ChainConfig) {
35
+ const versions = getComponentsVersionsFromConfig(chainConfig, protocolContractsHash, getVKTreeRoot());
36
+ return urls.map(url => NodeRpcTxSource.fromUrl(url, versions));
37
+ }
@@ -0,0 +1,43 @@
1
+ import { type ConfigMappingsType, booleanConfigHelper, numberConfigHelper } from '@aztec/foundation/config';
2
+
3
+ /**
4
+ * Configuration for the TxFileStore service.
5
+ */
6
+ export type TxFileStoreConfig = {
7
+ /** URL for uploading txs to file storage (s3://, gs://, file://) */
8
+ txFileStoreUrl?: string;
9
+ /** URL for downloading txs from file storage */
10
+ txFileStoreDownloadUrl?: string;
11
+ /** Max concurrent uploads */
12
+ txFileStoreUploadConcurrency: number;
13
+ /** Max queue size to prevent unbounded memory growth */
14
+ txFileStoreMaxQueueSize: number;
15
+ /** Enable tx file store upload */
16
+ txFileStoreEnabled: boolean;
17
+ };
18
+
19
+ export const txFileStoreConfigMappings: ConfigMappingsType<TxFileStoreConfig> = {
20
+ txFileStoreUrl: {
21
+ env: 'TX_FILE_STORE_URL',
22
+ description: 'URL for uploading txs to file storage (s3://, gs://, file://)',
23
+ },
24
+ txFileStoreDownloadUrl: {
25
+ env: 'TX_FILE_STORE_DOWNLOAD_URL',
26
+ description: 'URL for downloading txs from file storage',
27
+ },
28
+ txFileStoreUploadConcurrency: {
29
+ env: 'TX_FILE_STORE_UPLOAD_CONCURRENCY',
30
+ description: 'Maximum number of concurrent tx uploads',
31
+ ...numberConfigHelper(10),
32
+ },
33
+ txFileStoreMaxQueueSize: {
34
+ env: 'TX_FILE_STORE_MAX_QUEUE_SIZE',
35
+ description: 'Maximum queue size for pending uploads (oldest dropped when exceeded)',
36
+ ...numberConfigHelper(1000),
37
+ },
38
+ txFileStoreEnabled: {
39
+ env: 'TX_FILE_STORE_ENABLED',
40
+ description: 'Enable uploading transactions to file storage',
41
+ ...booleanConfigHelper(false),
42
+ },
43
+ };
@@ -0,0 +1,3 @@
1
+ export { TxFileStore } from './tx_file_store.js';
2
+ export { TxFileStoreInstrumentation } from './instrumentation.js';
3
+ export { type TxFileStoreConfig, txFileStoreConfigMappings } from './config.js';
@@ -0,0 +1,36 @@
1
+ import { type Gauge, type Histogram, Metrics, type TelemetryClient, type UpDownCounter } from '@aztec/telemetry-client';
2
+
3
+ /** Instrumentation for the TxFileStore service. */
4
+ export class TxFileStoreInstrumentation {
5
+ private uploadsSuccess: UpDownCounter;
6
+ private uploadsFailed: UpDownCounter;
7
+ private uploadsSkipped: UpDownCounter;
8
+ private uploadDuration: Histogram;
9
+ private queueSize: Gauge;
10
+
11
+ constructor(client: TelemetryClient, name: string) {
12
+ const meter = client.getMeter(name);
13
+ this.uploadsSuccess = meter.createUpDownCounter(Metrics.TX_FILE_STORE_UPLOADS_SUCCESS);
14
+ this.uploadsFailed = meter.createUpDownCounter(Metrics.TX_FILE_STORE_UPLOADS_FAILED);
15
+ this.uploadsSkipped = meter.createUpDownCounter(Metrics.TX_FILE_STORE_UPLOADS_SKIPPED);
16
+ this.uploadDuration = meter.createHistogram(Metrics.TX_FILE_STORE_UPLOAD_DURATION);
17
+ this.queueSize = meter.createGauge(Metrics.TX_FILE_STORE_QUEUE_SIZE);
18
+ }
19
+
20
+ recordUploadSuccess(durationMs: number) {
21
+ this.uploadsSuccess.add(1);
22
+ this.uploadDuration.record(durationMs);
23
+ }
24
+
25
+ recordUploadFailed() {
26
+ this.uploadsFailed.add(1);
27
+ }
28
+
29
+ recordUploadSkipped() {
30
+ this.uploadsSkipped.add(1);
31
+ }
32
+
33
+ recordQueueSize(size: number) {
34
+ this.queueSize.record(size);
35
+ }
36
+ }
@@ -0,0 +1,173 @@
1
+ import { type Logger, createLogger } from '@aztec/foundation/log';
2
+ import { RunningPromise } from '@aztec/foundation/promise';
3
+ import { makeBackoff, retry } from '@aztec/foundation/retry';
4
+ import { Timer } from '@aztec/foundation/timer';
5
+ import { type FileStore, createFileStore } from '@aztec/stdlib/file-store';
6
+ import type { Tx } from '@aztec/stdlib/tx';
7
+ import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
8
+
9
+ import type { TxPool, TxPoolEvents } from '../../mem_pools/tx_pool/index.js';
10
+ import type { TxFileStoreConfig } from './config.js';
11
+ import { TxFileStoreInstrumentation } from './instrumentation.js';
12
+
13
+ /**
14
+ * Uploads validated transactions to a file store as a fallback retrieval mechanism.
15
+ * Listens to TxPool txs-added events and uploads txs asynchronously with bounded concurrency.
16
+ */
17
+ export class TxFileStore {
18
+ private uploadQueue: Tx[] = [];
19
+ private activeUploads = 0;
20
+ private readonly queueProcessor: RunningPromise;
21
+ private readonly handleTxsAdded: TxPoolEvents['txs-added'];
22
+
23
+ /** Recently uploaded tx hashes for deduplication. */
24
+ private recentUploads: Set<string> = new Set();
25
+ private recentUploadsOrder: string[] = [];
26
+ private readonly maxRecentUploads = 1000;
27
+
28
+ private constructor(
29
+ private readonly fileStore: FileStore,
30
+ private readonly txPool: TxPool,
31
+ private readonly config: TxFileStoreConfig,
32
+ private readonly instrumentation: TxFileStoreInstrumentation,
33
+ private readonly log: Logger,
34
+ ) {
35
+ this.handleTxsAdded = (args: { txs: Tx[]; source?: string }) => {
36
+ this.enqueueTxs(args.txs);
37
+ };
38
+ this.queueProcessor = new RunningPromise(() => this.processQueueBatch(), this.log, 100);
39
+ }
40
+
41
+ /**
42
+ * Creates and initializes the file store.
43
+ * @param txPool - The transaction pool to listen to.
44
+ * @param config - The file store configuration.
45
+ * @param log - Optional logger.
46
+ * @param telemetry - Optional telemetry client.
47
+ * @param fileStoreOverride - Optional FileStore for testing (bypasses createFileStore).
48
+ * @returns The file store instance, or undefined if not configured/enabled.
49
+ */
50
+ static async create(
51
+ txPool: TxPool,
52
+ config: TxFileStoreConfig,
53
+ log: Logger = createLogger('p2p:tx_file_store'),
54
+ telemetry: TelemetryClient = getTelemetryClient(),
55
+ fileStoreOverride?: FileStore,
56
+ ): Promise<TxFileStore | undefined> {
57
+ if (!config.txFileStoreEnabled) {
58
+ log.debug('Tx file store is disabled');
59
+ return undefined;
60
+ }
61
+
62
+ if (!config.txFileStoreUrl) {
63
+ log.warn('Tx file store is enabled but URL is not configured');
64
+ return undefined;
65
+ }
66
+
67
+ const fileStore = fileStoreOverride ?? (await createFileStore(config.txFileStoreUrl, log));
68
+ if (!fileStore) {
69
+ log.warn('Failed to create file store for tx file store');
70
+ return undefined;
71
+ }
72
+
73
+ const instrumentation = new TxFileStoreInstrumentation(telemetry, 'TxFileStore');
74
+ log.info('Created tx file store', { url: config.txFileStoreUrl });
75
+ return new TxFileStore(fileStore, txPool, config, instrumentation, log);
76
+ }
77
+
78
+ /** Starts listening to TxPool events and uploading txs. */
79
+ public start(): void {
80
+ this.queueProcessor.start();
81
+ this.txPool.on('txs-added', this.handleTxsAdded);
82
+ this.log.info('Started tx file store', {
83
+ concurrency: this.config.txFileStoreUploadConcurrency,
84
+ maxQueueSize: this.config.txFileStoreMaxQueueSize,
85
+ });
86
+ }
87
+
88
+ /** Stops listening and waits for pending uploads to complete. */
89
+ public async stop(): Promise<void> {
90
+ this.txPool.removeListener('txs-added', this.handleTxsAdded);
91
+ await this.queueProcessor.stop();
92
+ this.log.info('Stopped tx file store');
93
+ }
94
+
95
+ private enqueueTxs(txs: Tx[]): void {
96
+ this.uploadQueue.push(...txs);
97
+
98
+ // Enforce max queue size by dropping oldest entries
99
+ const overflow = this.uploadQueue.length - this.config.txFileStoreMaxQueueSize;
100
+ if (overflow > 0) {
101
+ this.log.warn(`Upload queue overflow, dropping ${overflow} oldest txs`);
102
+ this.uploadQueue.splice(0, overflow);
103
+ }
104
+
105
+ this.instrumentation.recordQueueSize(this.uploadQueue.length);
106
+
107
+ // Immediately start uploading txs
108
+ void this.queueProcessor.trigger();
109
+ }
110
+
111
+ private async processQueueBatch(): Promise<void> {
112
+ const batch = this.uploadQueue.splice(0, this.config.txFileStoreUploadConcurrency);
113
+ this.instrumentation.recordQueueSize(this.uploadQueue.length);
114
+
115
+ this.activeUploads += batch.length;
116
+ try {
117
+ await Promise.all(batch.map(tx => this.uploadTx(tx)));
118
+ } finally {
119
+ this.activeUploads -= batch.length;
120
+ }
121
+ }
122
+
123
+ private async uploadTx(tx: Tx): Promise<void> {
124
+ const txHash = tx.getTxHash().toString();
125
+ const path = `txs/${txHash}.bin`;
126
+ const timer = new Timer();
127
+
128
+ if (this.recentUploads.has(txHash)) {
129
+ return;
130
+ }
131
+
132
+ try {
133
+ this.recentUploads.add(txHash);
134
+ this.recentUploadsOrder.push(txHash);
135
+
136
+ if (this.recentUploadsOrder.length > this.maxRecentUploads) {
137
+ // delete old entries in recentUploads
138
+ for (const txHashToRemove of this.recentUploadsOrder.splice(
139
+ 0,
140
+ this.recentUploadsOrder.length - this.maxRecentUploads,
141
+ )) {
142
+ this.recentUploads.delete(txHashToRemove);
143
+ }
144
+ }
145
+
146
+ await retry(
147
+ () => this.fileStore.save(path, tx.toBuffer(), { compress: false }),
148
+ `Uploading tx ${txHash}`,
149
+ makeBackoff([0.1, 0.5, 2]),
150
+ this.log,
151
+ true, // failSilently - don't log errors during retries
152
+ );
153
+ const durationMs = Math.trunc(timer.ms());
154
+ this.log.debug(`Uploaded tx to file store`, { txHash, path, durationMs });
155
+ this.instrumentation.recordUploadSuccess(durationMs);
156
+ } catch (err) {
157
+ this.log.warn(`Failed to upload tx to file store after retries`, { txHash, error: err });
158
+ this.instrumentation.recordUploadFailed();
159
+ }
160
+ }
161
+
162
+ /** Waits for all queued and in-flight uploads to complete. For testing. */
163
+ public async flush(): Promise<void> {
164
+ while (this.uploadQueue.length > 0 || this.activeUploads > 0) {
165
+ await this.queueProcessor.trigger();
166
+ }
167
+ }
168
+
169
+ /** Returns the number of pending uploads (queued + in-flight). */
170
+ public getPendingUploadCount(): number {
171
+ return this.uploadQueue.length + this.activeUploads;
172
+ }
173
+ }
@@ -0,0 +1,232 @@
1
+ import { BlockNumber } from '@aztec/foundation/branded-types';
2
+ import { compactArray } from '@aztec/foundation/collection';
3
+ import { type Logger, createLogger } from '@aztec/foundation/log';
4
+ import { elapsed } from '@aztec/foundation/timer';
5
+ import type { L2Block, L2BlockInfo } from '@aztec/stdlib/block';
6
+ import type { ITxProvider } from '@aztec/stdlib/interfaces/server';
7
+ import type { BlockProposal } from '@aztec/stdlib/p2p';
8
+ import { Tx, TxHash } from '@aztec/stdlib/tx';
9
+ import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
10
+
11
+ import type { PeerId } from '@libp2p/interface';
12
+
13
+ import type { P2PClient } from '../client/p2p_client.js';
14
+ import type { TxPool } from '../mem_pools/index.js';
15
+ import type { FastCollectionRequestInput, TxCollection } from './tx_collection/tx_collection.js';
16
+ import { TxProviderInstrumentation } from './tx_provider_instrumentation.js';
17
+
18
+ /**
19
+ * Gathers and returns txs given a block proposal, block, or their hashes.
20
+ * Loads available txs from the tx pool, and relies on a TxCollection service to collect txs from the network and other nodes.
21
+ */
22
+ export class TxProvider implements ITxProvider {
23
+ protected instrumentation: TxProviderInstrumentation;
24
+
25
+ constructor(
26
+ private txCollection: TxCollection,
27
+ private txPool: TxPool,
28
+ private txValidator: Pick<P2PClient, 'validate'>,
29
+ private log: Logger = createLogger('p2p:tx-collector'),
30
+ client: TelemetryClient = getTelemetryClient(),
31
+ ) {
32
+ this.instrumentation = new TxProviderInstrumentation(client, 'TxProvider');
33
+ }
34
+
35
+ /** Returns txs from the tx pool given their hashes.*/
36
+ public async getAvailableTxs(txHashes: TxHash[]): Promise<{ txs: Tx[]; missingTxs: TxHash[] }> {
37
+ const response = await this.txPool.getTxsByHash(txHashes);
38
+ if (response.length !== txHashes.length) {
39
+ throw new Error(`Unexpected response size from tx pool: expected ${txHashes.length} but got ${response.length}`);
40
+ }
41
+ const txs: Tx[] = [];
42
+ const missingTxs: TxHash[] = [];
43
+
44
+ for (let i = 0; i < txHashes.length; i++) {
45
+ const tx = response[i];
46
+ if (tx === undefined) {
47
+ missingTxs.push(txHashes[i]);
48
+ } else {
49
+ txs.push(tx);
50
+ }
51
+ }
52
+
53
+ return { txs, missingTxs };
54
+ }
55
+
56
+ /** Gathers txs from the tx pool, proposal body, remote rpc nodes, and reqresp. */
57
+ public getTxsForBlockProposal(
58
+ blockProposal: BlockProposal,
59
+ blockNumber: BlockNumber,
60
+ opts: { pinnedPeer: PeerId | undefined; deadline: Date },
61
+ ): Promise<{ txs: Tx[]; missingTxs: TxHash[] }> {
62
+ return this.getOrderedTxsFromAllSources(
63
+ { type: 'proposal', blockProposal, blockNumber },
64
+ { ...blockProposal.toBlockInfo(), blockNumber },
65
+ blockProposal.txHashes,
66
+ { ...opts, pinnedPeer: opts.pinnedPeer },
67
+ );
68
+ }
69
+
70
+ /** Gathers txs from the tx pool, remote rpc nodes, and reqresp. */
71
+ public getTxsForBlock(block: L2Block, opts: { deadline: Date }): Promise<{ txs: Tx[]; missingTxs: TxHash[] }> {
72
+ return this.getOrderedTxsFromAllSources(
73
+ { type: 'block', block },
74
+ block.toBlockInfo(),
75
+ block.body.txEffects.map(tx => tx.txHash),
76
+ { ...opts, pinnedPeer: undefined },
77
+ );
78
+ }
79
+
80
+ private async getOrderedTxsFromAllSources(
81
+ request: FastCollectionRequestInput,
82
+ blockInfo: L2BlockInfo,
83
+ txHashes: TxHash[],
84
+ opts: { pinnedPeer: PeerId | undefined; deadline: Date },
85
+ ) {
86
+ const [durationMs, result] = await elapsed(() => this.getTxsFromAllSources(request, blockInfo, txHashes, opts));
87
+ const { missingTxHashes, txsFromMempool, txsFromNetwork, txsFromProposal } = result;
88
+
89
+ const txs = [...(txsFromMempool ?? []), ...(txsFromProposal ?? []), ...(txsFromNetwork ?? [])];
90
+ const missingTxs = missingTxHashes?.length ?? 0;
91
+
92
+ const level = missingTxs === 0 ? 'verbose' : 'warn';
93
+ this.log[level](`Retrieved ${txs.length} out of ${blockInfo.txCount} txs for ${request.type}`, {
94
+ ...blockInfo,
95
+ txsFromProposal: txsFromProposal?.length,
96
+ txsFromMempool: txsFromMempool?.length,
97
+ txsFromNetwork: txsFromNetwork?.length,
98
+ missingTxs,
99
+ durationMs,
100
+ });
101
+
102
+ const orderedTxs = this.orderTxs(txs, txHashes);
103
+ if (orderedTxs.length + missingTxs !== txHashes.length) {
104
+ throw new Error(
105
+ `Error collecting txs for ${request.type} with ${txHashes.length} txs: found ${orderedTxs.length} and flagged ${missingTxs} as missing`,
106
+ );
107
+ }
108
+
109
+ return { txs: orderedTxs, missingTxs: (missingTxHashes ?? []).map(TxHash.fromString), durationMs };
110
+ }
111
+
112
+ private orderTxs(txs: Tx[], order: TxHash[]): Tx[] {
113
+ const txsMap = new Map(txs.map(tx => [tx.txHash.toString(), tx]));
114
+ return order.map(hash => txsMap.get(hash.toString())!).filter(tx => tx !== undefined);
115
+ }
116
+
117
+ private async getTxsFromAllSources(
118
+ request: FastCollectionRequestInput,
119
+ blockInfo: L2BlockInfo,
120
+ txHashes: TxHash[],
121
+ opts: { pinnedPeer: PeerId | undefined; deadline: Date },
122
+ ) {
123
+ const missingTxHashes = new Set(txHashes.map(txHash => txHash.toString()));
124
+ if (missingTxHashes.size === 0) {
125
+ this.log.debug(`Received request with no transactions`, blockInfo);
126
+ return {};
127
+ }
128
+
129
+ // First go to our tx pool and fetch whatever txs we have there
130
+ // We go to the mempool first since those txs are already validated
131
+ const txsFromMempool = compactArray(await this.txPool.getTxsByHash(txHashes));
132
+ txsFromMempool.forEach(tx => missingTxHashes.delete(tx.getTxHash().toString()));
133
+ this.instrumentation.incTxsFromMempool(txsFromMempool.length);
134
+ this.log.debug(
135
+ `Retrieved ${txsFromMempool.length} txs from mempool for block proposal (${missingTxHashes.size} pending)`,
136
+ { ...blockInfo, missingTxHashes: [...missingTxHashes] },
137
+ );
138
+
139
+ if (missingTxHashes.size === 0) {
140
+ this.instrumentation.incTxsFromP2P(0, txHashes.length);
141
+ return { txsFromMempool };
142
+ }
143
+
144
+ // Take txs from the proposal body if there are any
145
+ // Note that we still have to validate these txs, but we do it in parallel with tx collection
146
+ const proposal = request.type === 'proposal' ? request.blockProposal : undefined;
147
+ const txsFromProposal = this.extractFromProposal(proposal, [...missingTxHashes]);
148
+ if (txsFromProposal.length > 0) {
149
+ this.instrumentation.incTxsFromProposals(txsFromProposal.length);
150
+ txsFromProposal.forEach(tx => missingTxHashes.delete(tx.txHash.toString()));
151
+ this.log.debug(`Retrieved ${txsFromProposal.length} txs from proposal body (${missingTxHashes.size} pending)`, {
152
+ ...blockInfo,
153
+ missingTxHashes: [...missingTxHashes],
154
+ });
155
+ }
156
+
157
+ if (missingTxHashes.size === 0) {
158
+ await this.processProposalTxs(txsFromProposal);
159
+ this.instrumentation.incTxsFromP2P(0, txHashes.length);
160
+ return { txsFromMempool, txsFromProposal };
161
+ }
162
+
163
+ // Start tx collection from the network if needed, while we validate the txs taken from the proposal in parallel
164
+ const [txsFromNetwork] = await Promise.all([
165
+ this.collectFromP2P(request, [...missingTxHashes], opts),
166
+ this.processProposalTxs(txsFromProposal),
167
+ ] as const);
168
+
169
+ if (txsFromNetwork.length > 0) {
170
+ txsFromNetwork.forEach(tx => missingTxHashes.delete(tx.txHash.toString()));
171
+ this.log.debug(
172
+ `Retrieved ${txsFromNetwork.length} txs from network for block proposal (${missingTxHashes.size} pending)`,
173
+ { ...blockInfo, missingTxHashes: [...missingTxHashes] },
174
+ );
175
+ }
176
+
177
+ this.instrumentation.incTxsFromP2P(txsFromNetwork.length, txHashes.length);
178
+
179
+ if (missingTxHashes.size === 0) {
180
+ return { txsFromNetwork, txsFromMempool, txsFromProposal };
181
+ }
182
+
183
+ // We are still missing txs, make one last attempt to collect them from our pool, in case they showed up somehow else
184
+ const moreTxsFromPool = compactArray(await this.txPool.getTxsByHash([...missingTxHashes].map(TxHash.fromString)));
185
+
186
+ if (moreTxsFromPool.length > 0) {
187
+ this.instrumentation.incTxsFromMempool(moreTxsFromPool.length);
188
+ this.log.debug(
189
+ `Retrieved ${moreTxsFromPool.length} txs from pool retry for block proposal (${missingTxHashes.size} pending)`,
190
+ { ...blockInfo, missingTxHashes: [...missingTxHashes] },
191
+ );
192
+ }
193
+
194
+ if (missingTxHashes.size > 0) {
195
+ this.instrumentation.incMissingTxs(missingTxHashes.size);
196
+ }
197
+
198
+ return {
199
+ txsFromNetwork,
200
+ txsFromMempool: [...txsFromMempool, ...moreTxsFromPool],
201
+ txsFromProposal,
202
+ missingTxHashes: [...missingTxHashes],
203
+ };
204
+ }
205
+
206
+ private async collectFromP2P(
207
+ input: FastCollectionRequestInput,
208
+ txHashes: TxHash[] | string[],
209
+ opts: { deadline: Date; pinnedPeer?: PeerId },
210
+ ): Promise<Tx[]> {
211
+ const requestedAt = Date.now();
212
+ const result = await this.txCollection.collectFastFor(input, txHashes, opts);
213
+ const requestProcessedAt = Date.now();
214
+ this.instrumentation.recordTxsRequestDelay(requestProcessedAt - requestedAt);
215
+ return result;
216
+ }
217
+
218
+ private extractFromProposal(proposal: BlockProposal | undefined, missingTxHashes: string[]): Tx[] {
219
+ if (!proposal) {
220
+ return [];
221
+ }
222
+ return compactArray(proposal.txs ?? []).filter(tx => missingTxHashes.includes(tx.getTxHash().toString()));
223
+ }
224
+
225
+ private async processProposalTxs(txs: Tx[]): Promise<void> {
226
+ if (txs.length === 0) {
227
+ return;
228
+ }
229
+ await this.txValidator.validate(txs);
230
+ await this.txPool.addTxs(txs);
231
+ }
232
+ }
@@ -0,0 +1,54 @@
1
+ import {
2
+ type Histogram,
3
+ Metrics,
4
+ type TelemetryClient,
5
+ type UpDownCounter,
6
+ createUpDownCounterWithDefault,
7
+ } from '@aztec/telemetry-client';
8
+
9
+ export class TxProviderInstrumentation {
10
+ private txFromProposalCount: UpDownCounter;
11
+ private txFromMempoolCount: UpDownCounter;
12
+ private txFromP2PCount: UpDownCounter;
13
+ private missingTxsCount: UpDownCounter;
14
+
15
+ private fractionOfTxsRequestedFromP2P: Histogram;
16
+ private txsRequestDelay: Histogram;
17
+
18
+ constructor(client: TelemetryClient, name: string) {
19
+ const meter = client.getMeter(name);
20
+
21
+ this.txFromProposalCount = createUpDownCounterWithDefault(meter, Metrics.TX_PROVIDER_TXS_FROM_PROPOSALS_COUNT);
22
+
23
+ this.txFromMempoolCount = createUpDownCounterWithDefault(meter, Metrics.TX_PROVIDER_TXS_FROM_MEMPOOL_COUNT);
24
+
25
+ this.txFromP2PCount = createUpDownCounterWithDefault(meter, Metrics.TX_PROVIDER_TXS_FROM_P2P_COUNT);
26
+
27
+ this.missingTxsCount = createUpDownCounterWithDefault(meter, Metrics.TX_PROVIDER_MISSING_TXS_COUNT);
28
+
29
+ this.fractionOfTxsRequestedFromP2P = meter.createHistogram(Metrics.TX_PROVIDER_P2P_TXS_REQUESTED_FRACTION);
30
+
31
+ this.txsRequestDelay = meter.createHistogram(Metrics.TX_PROVIDER_P2P_TXS_REQUEST_DELAY);
32
+ }
33
+
34
+ incTxsFromProposals(count: number) {
35
+ this.txFromProposalCount.add(count);
36
+ }
37
+
38
+ incTxsFromMempool(count: number) {
39
+ this.txFromMempoolCount.add(count);
40
+ }
41
+
42
+ incTxsFromP2P(count: number, total: number) {
43
+ this.txFromP2PCount.add(count);
44
+ this.fractionOfTxsRequestedFromP2P.record(count / total);
45
+ }
46
+
47
+ recordTxsRequestDelay(delay: number) {
48
+ this.txsRequestDelay.record(delay);
49
+ }
50
+
51
+ incMissingTxs(count: number) {
52
+ this.missingTxsCount.add(count);
53
+ }
54
+ }
@@ -3,3 +3,6 @@ export * from './get-ports.js';
3
3
  export * from './make-enrs.js';
4
4
  export * from './make-test-p2p-clients.js';
5
5
  export * from './reqresp-nodes.js';
6
+ export * from './mock-pubsub.js';
7
+ export * from './test_tx_provider.js';
8
+ export * from './testbench-utils.js';
@@ -1,7 +1,7 @@
1
1
  import type { ChainConfig } from '@aztec/stdlib/config';
2
2
 
3
- import { SignableENR } from '@chainsafe/enr';
4
3
  import { multiaddr } from '@multiformats/multiaddr';
4
+ import { SignableENR } from '@nethermindeth/enr';
5
5
 
6
6
  import { convertToMultiaddr, createLibP2PPeerIdFromPrivateKey } from '../util.js';
7
7
  import { setAztecEnrKey } from '../versioning.js';
@@ -30,10 +30,9 @@ export async function makeEnr(p2pPrivateKey: string, port: number, config: Chain
30
30
  const peerId = await createLibP2PPeerIdFromPrivateKey(p2pPrivateKey);
31
31
  const enr = SignableENR.createFromPeerId(peerId);
32
32
 
33
- const udpAnnounceAddress = `127.0.0.1:${port}`;
34
- const tcpAnnounceAddress = `127.0.0.1:${port}`;
35
- const udpPublicAddr = multiaddr(convertToMultiaddr(udpAnnounceAddress, 'udp'));
36
- const tcpPublicAddr = multiaddr(convertToMultiaddr(tcpAnnounceAddress, 'tcp'));
33
+ const p2pIp = `127.0.0.1`;
34
+ const udpPublicAddr = multiaddr(convertToMultiaddr(p2pIp, port, 'udp'));
35
+ const tcpPublicAddr = multiaddr(convertToMultiaddr(p2pIp, port, 'tcp'));
37
36
 
38
37
  // ENRS must include the network and a discoverable address (udp for discv5)
39
38
  setAztecEnrKey(enr, config);