@aztec/p2p 0.0.1-commit.c80b6263 → 0.0.1-commit.cd76b27

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 (330) hide show
  1. package/dest/client/factory.d.ts +7 -6
  2. package/dest/client/factory.d.ts.map +1 -1
  3. package/dest/client/factory.js +47 -10
  4. package/dest/client/interface.d.ts +43 -23
  5. package/dest/client/interface.d.ts.map +1 -1
  6. package/dest/client/p2p_client.d.ts +40 -42
  7. package/dest/client/p2p_client.d.ts.map +1 -1
  8. package/dest/client/p2p_client.js +156 -145
  9. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +7 -7
  10. package/dest/config.d.ts +29 -4
  11. package/dest/config.d.ts.map +1 -1
  12. package/dest/config.js +19 -2
  13. package/dest/errors/tx-pool.error.d.ts +8 -0
  14. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  15. package/dest/errors/tx-pool.error.js +9 -0
  16. package/dest/index.d.ts +2 -1
  17. package/dest/index.d.ts.map +1 -1
  18. package/dest/index.js +1 -0
  19. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +104 -88
  20. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  21. package/dest/mem_pools/attestation_pool/attestation_pool.js +441 -3
  22. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  23. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  24. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +353 -87
  25. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  26. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/index.js +1 -2
  28. package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
  29. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/mocks.js +2 -2
  31. package/dest/mem_pools/index.d.ts +3 -2
  32. package/dest/mem_pools/index.d.ts.map +1 -1
  33. package/dest/mem_pools/index.js +1 -1
  34. package/dest/mem_pools/interface.d.ts +5 -5
  35. package/dest/mem_pools/interface.d.ts.map +1 -1
  36. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +3 -3
  37. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  38. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  39. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  40. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
  41. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  42. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
  43. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  44. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  45. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  46. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  47. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  48. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  49. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  50. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  51. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +93 -0
  52. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  53. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  54. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +95 -0
  55. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +10 -0
  56. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  57. package/dest/mem_pools/tx_pool_v2/eviction/index.js +11 -0
  58. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +174 -0
  59. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  60. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  61. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  62. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  63. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +65 -0
  64. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  65. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  66. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
  67. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  68. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  69. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +74 -0
  70. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  71. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  72. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +73 -0
  73. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  74. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  75. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  76. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  77. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  78. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  79. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  80. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  81. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  82. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +209 -0
  83. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  84. package/dest/mem_pools/tx_pool_v2/interfaces.js +8 -0
  85. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +97 -0
  86. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  87. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +152 -0
  88. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  89. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  90. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  91. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
  92. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  93. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +355 -0
  94. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +60 -0
  95. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  96. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +161 -0
  97. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +77 -0
  98. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  99. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +878 -0
  100. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +3 -3
  101. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  102. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +3 -3
  103. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  104. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  105. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  106. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  107. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +18 -5
  108. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  109. package/dest/msg_validators/tx_validator/block_header_validator.js +2 -2
  110. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +13 -3
  111. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  112. package/dest/msg_validators/tx_validator/double_spend_validator.js +4 -4
  113. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +20 -4
  114. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  115. package/dest/msg_validators/tx_validator/timestamp_validator.js +6 -6
  116. package/dest/services/data_store.d.ts +1 -1
  117. package/dest/services/data_store.d.ts.map +1 -1
  118. package/dest/services/data_store.js +10 -6
  119. package/dest/services/dummy_service.d.ts +12 -3
  120. package/dest/services/dummy_service.d.ts.map +1 -1
  121. package/dest/services/dummy_service.js +9 -0
  122. package/dest/services/encoding.d.ts +2 -2
  123. package/dest/services/encoding.d.ts.map +1 -1
  124. package/dest/services/encoding.js +4 -3
  125. package/dest/services/gossipsub/index.d.ts +3 -0
  126. package/dest/services/gossipsub/index.d.ts.map +1 -0
  127. package/dest/services/gossipsub/index.js +2 -0
  128. package/dest/services/gossipsub/scoring.d.ts +21 -3
  129. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  130. package/dest/services/gossipsub/scoring.js +24 -7
  131. package/dest/services/gossipsub/topic_score_params.d.ts +173 -0
  132. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  133. package/dest/services/gossipsub/topic_score_params.js +346 -0
  134. package/dest/services/index.d.ts +2 -1
  135. package/dest/services/index.d.ts.map +1 -1
  136. package/dest/services/index.js +1 -0
  137. package/dest/services/libp2p/libp2p_service.d.ts +85 -35
  138. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  139. package/dest/services/libp2p/libp2p_service.js +379 -280
  140. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  141. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  142. package/dest/services/peer-manager/peer_scoring.js +25 -2
  143. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +6 -5
  144. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  145. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +13 -17
  146. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +2 -6
  147. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  148. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +10 -13
  149. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  150. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +25 -46
  151. package/dest/services/reqresp/interface.d.ts +10 -1
  152. package/dest/services/reqresp/interface.d.ts.map +1 -1
  153. package/dest/services/reqresp/interface.js +15 -1
  154. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  155. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  156. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +17 -12
  157. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +25 -14
  158. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  159. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +40 -24
  160. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  161. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  162. package/dest/services/reqresp/protocols/tx.js +20 -0
  163. package/dest/services/reqresp/reqresp.d.ts +1 -1
  164. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  165. package/dest/services/reqresp/reqresp.js +11 -4
  166. package/dest/services/service.d.ts +38 -2
  167. package/dest/services/service.d.ts.map +1 -1
  168. package/dest/services/tx_collection/config.d.ts +22 -4
  169. package/dest/services/tx_collection/config.d.ts.map +1 -1
  170. package/dest/services/tx_collection/config.js +49 -3
  171. package/dest/services/tx_collection/fast_tx_collection.d.ts +6 -5
  172. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  173. package/dest/services/tx_collection/fast_tx_collection.js +64 -48
  174. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  175. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  176. package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
  177. package/dest/services/tx_collection/file_store_tx_source.d.ts +37 -0
  178. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  179. package/dest/services/tx_collection/file_store_tx_source.js +90 -0
  180. package/dest/services/tx_collection/index.d.ts +3 -2
  181. package/dest/services/tx_collection/index.d.ts.map +1 -1
  182. package/dest/services/tx_collection/index.js +1 -0
  183. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  184. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  185. package/dest/services/tx_collection/instrumentation.js +2 -1
  186. package/dest/services/tx_collection/missing_txs_tracker.d.ts +32 -0
  187. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +1 -0
  188. package/dest/services/tx_collection/missing_txs_tracker.js +27 -0
  189. package/dest/services/tx_collection/proposal_tx_collector.d.ts +15 -14
  190. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
  191. package/dest/services/tx_collection/proposal_tx_collector.js +6 -6
  192. package/dest/services/tx_collection/slow_tx_collection.d.ts +7 -3
  193. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  194. package/dest/services/tx_collection/slow_tx_collection.js +60 -26
  195. package/dest/services/tx_collection/tx_collection.d.ts +23 -10
  196. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  197. package/dest/services/tx_collection/tx_collection.js +75 -3
  198. package/dest/services/tx_collection/tx_collection_sink.d.ts +18 -8
  199. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  200. package/dest/services/tx_collection/tx_collection_sink.js +26 -29
  201. package/dest/services/tx_collection/tx_source.d.ts +8 -3
  202. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  203. package/dest/services/tx_collection/tx_source.js +19 -2
  204. package/dest/services/tx_file_store/config.d.ts +16 -0
  205. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  206. package/dest/services/tx_file_store/config.js +22 -0
  207. package/dest/services/tx_file_store/index.d.ts +4 -0
  208. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  209. package/dest/services/tx_file_store/index.js +3 -0
  210. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  211. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  212. package/dest/services/tx_file_store/instrumentation.js +29 -0
  213. package/dest/services/tx_file_store/tx_file_store.d.ts +48 -0
  214. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  215. package/dest/services/tx_file_store/tx_file_store.js +152 -0
  216. package/dest/services/tx_provider.d.ts +3 -3
  217. package/dest/services/tx_provider.d.ts.map +1 -1
  218. package/dest/services/tx_provider.js +5 -4
  219. package/dest/test-helpers/make-test-p2p-clients.d.ts +3 -3
  220. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  221. package/dest/test-helpers/mock-pubsub.d.ts +29 -2
  222. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  223. package/dest/test-helpers/mock-pubsub.js +103 -2
  224. package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
  225. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  226. package/dest/test-helpers/reqresp-nodes.js +2 -1
  227. package/dest/test-helpers/testbench-utils.d.ts +45 -38
  228. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  229. package/dest/test-helpers/testbench-utils.js +130 -60
  230. package/dest/testbench/p2p_client_testbench_worker.d.ts +2 -2
  231. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  232. package/dest/testbench/p2p_client_testbench_worker.js +11 -11
  233. package/dest/util.d.ts +2 -2
  234. package/dest/util.d.ts.map +1 -1
  235. package/package.json +14 -14
  236. package/src/client/factory.ts +89 -14
  237. package/src/client/interface.ts +59 -23
  238. package/src/client/p2p_client.ts +196 -167
  239. package/src/client/test/tx_proposal_collector/README.md +4 -4
  240. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +20 -10
  241. package/src/config.ts +41 -2
  242. package/src/errors/tx-pool.error.ts +12 -0
  243. package/src/index.ts +1 -0
  244. package/src/mem_pools/attestation_pool/attestation_pool.ts +496 -91
  245. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +442 -102
  246. package/src/mem_pools/attestation_pool/index.ts +9 -2
  247. package/src/mem_pools/attestation_pool/mocks.ts +2 -1
  248. package/src/mem_pools/index.ts +4 -1
  249. package/src/mem_pools/interface.ts +4 -4
  250. package/src/mem_pools/tx_pool/README.md +1 -1
  251. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +3 -3
  252. package/src/mem_pools/tx_pool_v2/README.md +275 -0
  253. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  254. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
  255. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  256. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  257. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +121 -0
  258. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +122 -0
  259. package/src/mem_pools/tx_pool_v2/eviction/index.ts +27 -0
  260. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +209 -0
  261. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  262. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  263. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +87 -0
  264. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +90 -0
  265. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +31 -0
  266. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  267. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  268. package/src/mem_pools/tx_pool_v2/interfaces.ts +239 -0
  269. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +242 -0
  270. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  271. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +444 -0
  272. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +223 -0
  273. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1052 -0
  274. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +2 -2
  275. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +2 -2
  276. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  277. package/src/msg_validators/tx_validator/block_header_validator.ts +18 -8
  278. package/src/msg_validators/tx_validator/double_spend_validator.ts +11 -6
  279. package/src/msg_validators/tx_validator/timestamp_validator.ts +23 -18
  280. package/src/services/data_store.ts +10 -7
  281. package/src/services/dummy_service.ts +17 -1
  282. package/src/services/encoding.ts +4 -3
  283. package/src/services/gossipsub/README.md +641 -0
  284. package/src/services/gossipsub/index.ts +2 -0
  285. package/src/services/gossipsub/scoring.ts +29 -5
  286. package/src/services/gossipsub/topic_score_params.ts +487 -0
  287. package/src/services/index.ts +1 -0
  288. package/src/services/libp2p/libp2p_service.ts +382 -282
  289. package/src/services/peer-manager/peer_scoring.ts +25 -0
  290. package/src/services/reqresp/batch-tx-requester/README.md +14 -14
  291. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +18 -18
  292. package/src/services/reqresp/batch-tx-requester/interface.ts +1 -5
  293. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +23 -71
  294. package/src/services/reqresp/interface.ts +26 -1
  295. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +24 -15
  296. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -24
  297. package/src/services/reqresp/protocols/tx.ts +22 -0
  298. package/src/services/reqresp/reqresp.ts +13 -3
  299. package/src/services/service.ts +50 -1
  300. package/src/services/tx_collection/config.ts +74 -6
  301. package/src/services/tx_collection/fast_tx_collection.ts +74 -51
  302. package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
  303. package/src/services/tx_collection/file_store_tx_source.ts +117 -0
  304. package/src/services/tx_collection/index.ts +2 -1
  305. package/src/services/tx_collection/instrumentation.ts +7 -1
  306. package/src/services/tx_collection/missing_txs_tracker.ts +52 -0
  307. package/src/services/tx_collection/proposal_tx_collector.ts +20 -21
  308. package/src/services/tx_collection/slow_tx_collection.ts +66 -33
  309. package/src/services/tx_collection/tx_collection.ts +113 -16
  310. package/src/services/tx_collection/tx_collection_sink.ts +30 -34
  311. package/src/services/tx_collection/tx_source.ts +22 -3
  312. package/src/services/tx_file_store/config.ts +37 -0
  313. package/src/services/tx_file_store/index.ts +3 -0
  314. package/src/services/tx_file_store/instrumentation.ts +36 -0
  315. package/src/services/tx_file_store/tx_file_store.ts +175 -0
  316. package/src/services/tx_provider.ts +8 -7
  317. package/src/test-helpers/make-test-p2p-clients.ts +3 -3
  318. package/src/test-helpers/mock-pubsub.ts +143 -3
  319. package/src/test-helpers/reqresp-nodes.ts +2 -1
  320. package/src/test-helpers/testbench-utils.ts +129 -71
  321. package/src/testbench/p2p_client_testbench_worker.ts +23 -16
  322. package/src/util.ts +7 -1
  323. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  324. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  325. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  326. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  327. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  328. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  329. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  330. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/p2p",
3
- "version": "0.0.1-commit.c80b6263",
3
+ "version": "0.0.1-commit.cd76b27",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -67,17 +67,17 @@
67
67
  ]
68
68
  },
69
69
  "dependencies": {
70
- "@aztec/constants": "0.0.1-commit.c80b6263",
71
- "@aztec/epoch-cache": "0.0.1-commit.c80b6263",
72
- "@aztec/ethereum": "0.0.1-commit.c80b6263",
73
- "@aztec/foundation": "0.0.1-commit.c80b6263",
74
- "@aztec/kv-store": "0.0.1-commit.c80b6263",
75
- "@aztec/noir-contracts.js": "0.0.1-commit.c80b6263",
76
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.c80b6263",
77
- "@aztec/protocol-contracts": "0.0.1-commit.c80b6263",
78
- "@aztec/simulator": "0.0.1-commit.c80b6263",
79
- "@aztec/stdlib": "0.0.1-commit.c80b6263",
80
- "@aztec/telemetry-client": "0.0.1-commit.c80b6263",
70
+ "@aztec/constants": "0.0.1-commit.cd76b27",
71
+ "@aztec/epoch-cache": "0.0.1-commit.cd76b27",
72
+ "@aztec/ethereum": "0.0.1-commit.cd76b27",
73
+ "@aztec/foundation": "0.0.1-commit.cd76b27",
74
+ "@aztec/kv-store": "0.0.1-commit.cd76b27",
75
+ "@aztec/noir-contracts.js": "0.0.1-commit.cd76b27",
76
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.cd76b27",
77
+ "@aztec/protocol-contracts": "0.0.1-commit.cd76b27",
78
+ "@aztec/simulator": "0.0.1-commit.cd76b27",
79
+ "@aztec/stdlib": "0.0.1-commit.cd76b27",
80
+ "@aztec/telemetry-client": "0.0.1-commit.cd76b27",
81
81
  "@chainsafe/libp2p-gossipsub": "13.0.0",
82
82
  "@chainsafe/libp2p-noise": "^15.0.0",
83
83
  "@chainsafe/libp2p-yamux": "^6.0.2",
@@ -104,8 +104,8 @@
104
104
  "xxhash-wasm": "^1.1.0"
105
105
  },
106
106
  "devDependencies": {
107
- "@aztec/archiver": "0.0.1-commit.c80b6263",
108
- "@aztec/world-state": "0.0.1-commit.c80b6263",
107
+ "@aztec/archiver": "0.0.1-commit.cd76b27",
108
+ "@aztec/world-state": "0.0.1-commit.cd76b27",
109
109
  "@jest/globals": "^30.0.0",
110
110
  "@types/jest": "^30.0.0",
111
111
  "@types/node": "^22.15.17",
@@ -4,31 +4,39 @@ import { DateProvider } from '@aztec/foundation/timer';
4
4
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
5
5
  import type { DataStoreConfig } from '@aztec/kv-store/config';
6
6
  import { AztecLMDBStoreV2, createStore } from '@aztec/kv-store/lmdb-v2';
7
- import type { L2BlockSource } from '@aztec/stdlib/block';
7
+ import type { BlockHash, L2BlockSource } from '@aztec/stdlib/block';
8
8
  import type { ChainConfig } from '@aztec/stdlib/config';
9
9
  import type { ContractDataSource } from '@aztec/stdlib/contract';
10
- import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
10
+ import type { AztecNode, ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
11
11
  import { P2PClientType } from '@aztec/stdlib/p2p';
12
+ import { MerkleTreeId } from '@aztec/stdlib/trees';
12
13
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
13
14
 
14
15
  import { P2PClient } from '../client/p2p_client.js';
15
16
  import type { P2PConfig } from '../config.js';
16
- import type { AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
17
- import { KvAttestationPool } from '../mem_pools/attestation_pool/kv_attestation_pool.js';
17
+ import { AttestationPool, type AttestationPoolApi } from '../mem_pools/attestation_pool/attestation_pool.js';
18
18
  import type { MemPools } from '../mem_pools/interface.js';
19
- import { AztecKVTxPool, type TxPool } from '../mem_pools/tx_pool/index.js';
19
+ import type { TxPoolV2 } from '../mem_pools/tx_pool_v2/interfaces.js';
20
+ import type { TxMetaData } from '../mem_pools/tx_pool_v2/tx_metadata.js';
21
+ import { AztecKVTxPoolV2 } from '../mem_pools/tx_pool_v2/tx_pool_v2.js';
22
+ import { AggregateTxValidator } from '../msg_validators/tx_validator/aggregate_tx_validator.js';
23
+ import { BlockHeaderTxValidator } from '../msg_validators/tx_validator/block_header_validator.js';
24
+ import { DoubleSpendTxValidator } from '../msg_validators/tx_validator/double_spend_validator.js';
20
25
  import { DummyP2PService } from '../services/dummy_service.js';
21
26
  import { LibP2PService } from '../services/index.js';
27
+ import { createFileStoreTxSources } from '../services/tx_collection/file_store_tx_source.js';
22
28
  import { TxCollection } from '../services/tx_collection/tx_collection.js';
23
- import { type TxSource, createNodeRpcTxSources } from '../services/tx_collection/tx_source.js';
29
+ import { NodeRpcTxSource, type TxSource, createNodeRpcTxSources } from '../services/tx_collection/tx_source.js';
30
+ import { TxFileStore } from '../services/tx_file_store/tx_file_store.js';
24
31
  import { configureP2PClientAddresses, createLibP2PPeerIdFromPrivateKey, getPeerIdPrivateKey } from '../util.js';
25
32
 
26
33
  export type P2PClientDeps<T extends P2PClientType> = {
27
- txPool?: TxPool;
34
+ txPool?: TxPoolV2;
28
35
  store?: AztecAsyncKVStore;
29
- attestationPool?: AttestationPool;
36
+ attestationPool?: AttestationPoolApi;
30
37
  logger?: Logger;
31
38
  txCollectionNodeSources?: TxSource[];
39
+ rpcTxProviders?: AztecNode[];
32
40
  p2pServiceFactory?: (...args: Parameters<(typeof LibP2PService)['new']>) => Promise<LibP2PService<T>>;
33
41
  };
34
42
 
@@ -69,14 +77,57 @@ export async function createP2PClient<T extends P2PClientType>(
69
77
  const attestationStore = await createStore(P2P_ATTESTATION_STORE_NAME, 1, config, bindings);
70
78
  const l1Constants = await archiver.getL1Constants();
71
79
 
72
- const mempools: MemPools = {
73
- txPool:
74
- deps.txPool ??
75
- new AztecKVTxPool(store, archive, worldStateSynchronizer, telemetry, {
80
+ const rollupAddress = inputConfig.l1Contracts.rollupAddress.toString().toLowerCase().replace(/^0x/, '');
81
+ const txFileStoreBasePath = `aztec-${inputConfig.l1ChainId}-${inputConfig.rollupVersion}-0x${rollupAddress}`;
82
+
83
+ /** Validator factory for pool re-validation (double-spend + block header only). */
84
+ const createPoolTxValidator = async () => {
85
+ await worldStateSynchronizer.syncImmediate();
86
+ return new AggregateTxValidator<TxMetaData>(
87
+ new DoubleSpendTxValidator<TxMetaData>(
88
+ {
89
+ nullifiersExist: async (nullifiers: Buffer[]) => {
90
+ const merkleTree = worldStateSynchronizer.getCommitted();
91
+ const indices = await merkleTree.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, nullifiers);
92
+ return indices.map(index => index !== undefined);
93
+ },
94
+ },
95
+ bindings,
96
+ ),
97
+ new BlockHeaderTxValidator<TxMetaData>(
98
+ {
99
+ getArchiveIndices: (archives: BlockHash[]) => {
100
+ const merkleTree = worldStateSynchronizer.getCommitted();
101
+ return merkleTree.findLeafIndices(MerkleTreeId.ARCHIVE, archives);
102
+ },
103
+ },
104
+ bindings,
105
+ ),
106
+ );
107
+ };
108
+
109
+ const txPool =
110
+ deps.txPool ??
111
+ new AztecKVTxPoolV2(
112
+ store,
113
+ archive,
114
+ {
115
+ l2BlockSource: archiver,
116
+ worldStateSynchronizer,
117
+ createTxValidator: createPoolTxValidator,
118
+ },
119
+ telemetry,
120
+ {
76
121
  maxPendingTxCount: config.maxPendingTxCount,
77
122
  archivedTxLimit: config.archivedTxLimit,
78
- }),
79
- attestationPool: deps.attestationPool ?? new KvAttestationPool(attestationStore, telemetry),
123
+ minTxPoolAgeMs: config.minTxPoolAgeMs,
124
+ },
125
+ dateProvider,
126
+ );
127
+
128
+ const mempools: MemPools = {
129
+ txPool,
130
+ attestationPool: deps.attestationPool ?? new AttestationPool(attestationStore, telemetry),
80
131
  };
81
132
 
82
133
  const p2pService = await createP2PService<T>(
@@ -97,6 +148,7 @@ export async function createP2PClient<T extends P2PClientType>(
97
148
 
98
149
  const nodeSources = [
99
150
  ...createNodeRpcTxSources(config.txCollectionNodeRpcUrls, config),
151
+ ...(deps.rpcTxProviders ?? []).map((node, i) => new NodeRpcTxSource(node, `node-rpc-provider-${i}`)),
100
152
  ...(deps.txCollectionNodeSources ?? []),
101
153
  ];
102
154
  if (nodeSources.length > 0) {
@@ -105,17 +157,38 @@ export async function createP2PClient<T extends P2PClientType>(
105
157
  });
106
158
  }
107
159
 
160
+ const fileStoreSources = await createFileStoreTxSources(
161
+ config.txCollectionFileStoreUrls,
162
+ txFileStoreBasePath,
163
+ logger.createChild('file-store-tx-source'),
164
+ telemetry,
165
+ );
166
+ if (fileStoreSources.length > 0) {
167
+ logger.info(`Using ${fileStoreSources.length} file store sources for tx collection.`, {
168
+ stores: fileStoreSources.map(s => s.getInfo()),
169
+ });
170
+ }
171
+
108
172
  const txCollection = new TxCollection(
109
173
  p2pService.getBatchTxRequesterService(),
110
174
  nodeSources,
111
175
  l1Constants,
112
176
  mempools.txPool,
113
177
  config,
178
+ fileStoreSources,
114
179
  dateProvider,
115
180
  telemetry,
116
181
  logger.createChild('tx-collection'),
117
182
  );
118
183
 
184
+ const txFileStore = await TxFileStore.create(
185
+ mempools.txPool,
186
+ config,
187
+ txFileStoreBasePath,
188
+ logger.createChild('tx-file-store'),
189
+ telemetry,
190
+ );
191
+
119
192
  return new P2PClient(
120
193
  clientType,
121
194
  store,
@@ -123,6 +196,8 @@ export async function createP2PClient<T extends P2PClientType>(
123
196
  mempools,
124
197
  p2pService,
125
198
  txCollection,
199
+ txFileStore,
200
+ epochCache,
126
201
  config,
127
202
  dateProvider,
128
203
  telemetry,
@@ -1,7 +1,14 @@
1
+ import type { SlotNumber } from '@aztec/foundation/branded-types';
1
2
  import type { EthAddress, L2BlockId } from '@aztec/stdlib/block';
2
- import type { P2PApiFull } from '@aztec/stdlib/interfaces/server';
3
- import type { BlockProposal, CheckpointAttestation, CheckpointProposal, P2PClientType } from '@aztec/stdlib/p2p';
4
- import type { Tx, TxHash } from '@aztec/stdlib/tx';
3
+ import type { ITxProvider, P2PApiFull } from '@aztec/stdlib/interfaces/server';
4
+ import type {
5
+ BlockProposal,
6
+ CheckpointAttestation,
7
+ CheckpointProposal,
8
+ P2PClientType,
9
+ TopicType,
10
+ } from '@aztec/stdlib/p2p';
11
+ import type { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
5
12
 
6
13
  import type { PeerId } from '@libp2p/interface';
7
14
  import type { ENR } from '@nethermindeth/enr';
@@ -13,7 +20,12 @@ import type {
13
20
  ReqRespSubProtocolHandler,
14
21
  ReqRespSubProtocolValidators,
15
22
  } from '../services/reqresp/interface.js';
16
- import type { P2PBlockReceivedCallback, P2PCheckpointReceivedCallback } from '../services/service.js';
23
+ import type {
24
+ DuplicateAttestationInfo,
25
+ DuplicateProposalInfo,
26
+ P2PBlockReceivedCallback,
27
+ P2PCheckpointReceivedCallback,
28
+ } from '../services/service.js';
17
29
 
18
30
  /**
19
31
  * Enum defining the possible states of the p2p client.
@@ -79,12 +91,21 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApiFull<T> &
79
91
  registerCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
80
92
 
81
93
  /**
82
- * Request a list of transactions from another peer by their tx hashes.
83
- * @param txHashes - Hashes of the txs to query.
84
- * @param pinnedPeerId - An optional peer id that will be used to request the tx from (in addition to other random peers).
85
- * @returns A list of transactions or undefined if the transactions are not found.
94
+ * Registers a callback invoked when a duplicate proposal is detected (equivocation).
95
+ * The callback is triggered on the first duplicate (when count goes from 1 to 2).
96
+ *
97
+ * @param callback - Function called with info about the duplicate proposal
86
98
  */
87
- requestTxsByHash(txHashes: TxHash[], pinnedPeerId: PeerId): Promise<Tx[]>;
99
+ registerDuplicateProposalCallback(callback: (info: DuplicateProposalInfo) => void): void;
100
+
101
+ /**
102
+ * Registers a callback invoked when a duplicate attestation is detected (equivocation).
103
+ * A validator signing attestations for different proposals at the same slot.
104
+ * The callback is triggered on the first duplicate (when count goes from 1 to 2).
105
+ *
106
+ * @param callback - Function called with info about the duplicate attestation
107
+ */
108
+ registerDuplicateAttestationCallback(callback: (info: DuplicateAttestationInfo) => void): void;
88
109
 
89
110
  /**
90
111
  * Verifies the 'tx' and, if valid, adds it to local tx pool and forwards it to other peers.
@@ -93,18 +114,10 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApiFull<T> &
93
114
  sendTx(tx: Tx): Promise<void>;
94
115
 
95
116
  /**
96
- * Adds transactions to the pool. Does not send to peers or validate the tx.
97
- * @param txs - The transactions.
98
- * @returns The number of txs added to the pool. Note if the transaction already exists, it will not be added again.
99
- **/
100
- addTxsToPool(txs: Tx[]): Promise<number>;
101
-
102
- /**
103
- * Deletes 'txs' from the pool, given hashes.
104
- * NOT used if we use sendTx as reconcileTxPool will handle this.
105
- * @param txHashes - Hashes to check.
117
+ * Handles failed transaction execution by removing txs from the pool.
118
+ * @param txHashes - Hashes of the transactions that failed execution.
106
119
  **/
107
- deleteTxs(txHashes: TxHash[]): Promise<void>;
120
+ handleFailedExecution(txHashes: TxHash[]): Promise<void>;
108
121
 
109
122
  /**
110
123
  * Returns a transaction in the transaction pool by its hash.
@@ -152,14 +165,28 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApiFull<T> &
152
165
  /** Returns an iterator over pending txs on the mempool. */
153
166
  iteratePendingTxs(): AsyncIterableIterator<Tx>;
154
167
 
168
+ /** Returns an iterator over pending txs that have been in the pool long enough to be eligible for block building. */
169
+ iterateEligiblePendingTxs(): AsyncIterableIterator<Tx>;
170
+
155
171
  /** Returns the number of pending txs in the mempool. */
156
172
  getPendingTxCount(): Promise<number>;
157
173
 
158
174
  /**
159
- * Marks transactions as non-evictable in the pool.
160
- * @param txHashes - Hashes of the transactions to mark as non-evictable.
175
+ * Protects existing transactions by hash for a given slot.
176
+ * Returns hashes of transactions that weren't found in the pool.
177
+ * @param txHashes - Hashes of the transactions to protect.
178
+ * @param blockHeader - The block header providing slot context.
179
+ * @returns Hashes of transactions not found in the pool.
161
180
  */
162
- markTxsAsNonEvictable(txHashes: TxHash[]): Promise<void>;
181
+ protectTxs(txHashes: TxHash[], blockHeader: BlockHeader): Promise<TxHash[]>;
182
+
183
+ /**
184
+ * Prepares the pool for a new slot.
185
+ * Unprotects transactions from earlier slots and validates them before
186
+ * returning to pending state.
187
+ * @param slotNumber - The slot number to prepare for
188
+ */
189
+ prepareForSlot(slotNumber: SlotNumber): Promise<void>;
163
190
 
164
191
  /**
165
192
  * Starts the p2p client.
@@ -192,6 +219,9 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApiFull<T> &
192
219
  /** Identifies a p2p client. */
193
220
  isP2PClient(): true;
194
221
 
222
+ /** Returns the tx provider used for fetching transactions. */
223
+ getTxProvider(): ITxProvider;
224
+
195
225
  updateP2PConfig(config: Partial<P2PConfig>): Promise<void>;
196
226
 
197
227
  /** Validates a set of txs. */
@@ -208,6 +238,12 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApiFull<T> &
208
238
 
209
239
  handleAuthRequestFromPeer(authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage>;
210
240
 
241
+ /** Checks if any block proposals exist for the given slot. */
242
+ hasBlockProposalsForSlot(slot: SlotNumber): Promise<boolean>;
243
+
211
244
  /** If node running this P2P stack is validator, passes in validator address to P2P layer */
212
245
  registerThisValidatorAddresses(address: EthAddress[]): void;
246
+
247
+ /** Returns the number of peers in the GossipSub mesh for a given topic type. */
248
+ getGossipMeshPeerCount(topicType: TopicType): Promise<number>;
213
249
  };