@aztec/p2p 0.0.1-commit.87a0206 → 0.0.1-commit.88e6f9396

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 (381) hide show
  1. package/README.md +129 -3
  2. package/dest/client/factory.d.ts +9 -9
  3. package/dest/client/factory.d.ts.map +1 -1
  4. package/dest/client/factory.js +50 -13
  5. package/dest/client/interface.d.ts +39 -33
  6. package/dest/client/interface.d.ts.map +1 -1
  7. package/dest/client/p2p_client.d.ts +37 -50
  8. package/dest/client/p2p_client.d.ts.map +1 -1
  9. package/dest/client/p2p_client.js +150 -223
  10. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +8 -8
  11. package/dest/config.d.ts +54 -17
  12. package/dest/config.d.ts.map +1 -1
  13. package/dest/config.js +102 -38
  14. package/dest/errors/tx-pool.error.d.ts +8 -0
  15. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  16. package/dest/errors/tx-pool.error.js +9 -0
  17. package/dest/index.d.ts +2 -1
  18. package/dest/index.d.ts.map +1 -1
  19. package/dest/index.js +1 -0
  20. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +21 -12
  21. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  22. package/dest/mem_pools/attestation_pool/attestation_pool.js +72 -38
  23. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  24. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +57 -57
  26. package/dest/mem_pools/attestation_pool/index.d.ts +2 -2
  27. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  28. package/dest/mem_pools/attestation_pool/index.js +1 -1
  29. package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
  30. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  31. package/dest/mem_pools/attestation_pool/mocks.js +2 -2
  32. package/dest/mem_pools/index.d.ts +2 -1
  33. package/dest/mem_pools/index.d.ts.map +1 -1
  34. package/dest/mem_pools/instrumentation.d.ts +4 -2
  35. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  36. package/dest/mem_pools/instrumentation.js +16 -14
  37. package/dest/mem_pools/interface.d.ts +3 -3
  38. package/dest/mem_pools/interface.d.ts.map +1 -1
  39. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  40. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +2 -1
  42. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +3 -3
  43. package/dest/mem_pools/tx_pool/priority.d.ts +2 -2
  44. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  45. package/dest/mem_pools/tx_pool/priority.js +4 -4
  46. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  47. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  48. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +3 -1
  49. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  50. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  51. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  52. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +3 -3
  53. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -1
  54. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +18 -9
  55. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  56. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  57. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +7 -3
  58. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +3 -3
  59. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
  60. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +12 -4
  61. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -2
  62. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  63. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -1
  64. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +54 -5
  65. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
  66. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +8 -0
  67. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +7 -5
  68. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +7 -5
  69. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +2 -2
  70. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
  71. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +14 -6
  72. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +4 -4
  73. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
  74. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +16 -4
  75. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +3 -3
  76. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
  77. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +3 -3
  78. package/dest/mem_pools/tx_pool_v2/index.d.ts +3 -2
  79. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
  80. package/dest/mem_pools/tx_pool_v2/index.js +2 -1
  81. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  82. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  83. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  84. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +30 -12
  85. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  86. package/dest/mem_pools/tx_pool_v2/interfaces.js +5 -1
  87. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +78 -15
  88. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  89. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +139 -18
  90. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +12 -3
  91. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  92. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +50 -45
  93. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +12 -5
  94. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  95. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +17 -6
  96. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +14 -5
  97. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  98. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +364 -189
  99. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +1 -1
  100. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  101. package/dest/msg_validators/attestation_validator/attestation_validator.js +5 -4
  102. package/dest/msg_validators/clock_tolerance.d.ts +1 -1
  103. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  104. package/dest/msg_validators/clock_tolerance.js +4 -3
  105. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -4
  106. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  107. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  108. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -4
  109. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  110. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  111. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -8
  112. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  113. package/dest/msg_validators/proposal_validator/proposal_validator.js +53 -41
  114. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  115. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  116. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
  117. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  118. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  119. package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
  120. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  121. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  122. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  123. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +16 -3
  124. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  125. package/dest/msg_validators/tx_validator/block_header_validator.js +1 -1
  126. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +13 -3
  127. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  128. package/dest/msg_validators/tx_validator/double_spend_validator.js +4 -4
  129. package/dest/msg_validators/tx_validator/factory.d.ts +133 -6
  130. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  131. package/dest/msg_validators/tx_validator/factory.js +240 -59
  132. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  133. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  134. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  135. package/dest/msg_validators/tx_validator/gas_validator.d.ts +67 -3
  136. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  137. package/dest/msg_validators/tx_validator/gas_validator.js +104 -37
  138. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  139. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  140. package/dest/msg_validators/tx_validator/index.js +2 -0
  141. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  142. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  143. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  144. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  145. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  146. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  147. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  148. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  149. package/dest/msg_validators/tx_validator/phases_validator.js +71 -23
  150. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +20 -4
  151. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  152. package/dest/msg_validators/tx_validator/timestamp_validator.js +6 -6
  153. package/dest/services/dummy_service.d.ts +9 -5
  154. package/dest/services/dummy_service.d.ts.map +1 -1
  155. package/dest/services/dummy_service.js +7 -4
  156. package/dest/services/encoding.d.ts +7 -3
  157. package/dest/services/encoding.d.ts.map +1 -1
  158. package/dest/services/encoding.js +18 -11
  159. package/dest/services/gossipsub/index.d.ts +3 -0
  160. package/dest/services/gossipsub/index.d.ts.map +1 -0
  161. package/dest/services/gossipsub/index.js +2 -0
  162. package/dest/services/gossipsub/scoring.d.ts +21 -3
  163. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  164. package/dest/services/gossipsub/scoring.js +24 -7
  165. package/dest/services/gossipsub/topic_score_params.d.ts +173 -0
  166. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  167. package/dest/services/gossipsub/topic_score_params.js +346 -0
  168. package/dest/services/libp2p/libp2p_service.d.ts +25 -21
  169. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  170. package/dest/services/libp2p/libp2p_service.js +199 -174
  171. package/dest/services/peer-manager/metrics.d.ts +3 -1
  172. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  173. package/dest/services/peer-manager/metrics.js +6 -0
  174. package/dest/services/peer-manager/peer_manager.d.ts +1 -1
  175. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  176. package/dest/services/peer-manager/peer_manager.js +6 -3
  177. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  178. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  179. package/dest/services/peer-manager/peer_scoring.js +25 -2
  180. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +12 -8
  181. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  182. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +80 -106
  183. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +4 -7
  184. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  185. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +11 -13
  186. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  187. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +31 -46
  188. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
  189. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  190. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
  191. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +2 -2
  192. package/dest/services/reqresp/interface.d.ts +10 -1
  193. package/dest/services/reqresp/interface.d.ts.map +1 -1
  194. package/dest/services/reqresp/interface.js +15 -1
  195. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +3 -3
  196. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  197. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +7 -1
  198. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  199. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +15 -0
  200. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  201. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  202. package/dest/services/reqresp/protocols/tx.js +20 -0
  203. package/dest/services/reqresp/reqresp.d.ts +1 -1
  204. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  205. package/dest/services/reqresp/reqresp.js +30 -14
  206. package/dest/services/service.d.ts +22 -3
  207. package/dest/services/service.d.ts.map +1 -1
  208. package/dest/services/tx_collection/config.d.ts +19 -1
  209. package/dest/services/tx_collection/config.d.ts.map +1 -1
  210. package/dest/services/tx_collection/config.js +46 -0
  211. package/dest/services/tx_collection/fast_tx_collection.d.ts +3 -4
  212. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  213. package/dest/services/tx_collection/fast_tx_collection.js +80 -76
  214. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  215. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  216. package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
  217. package/dest/services/tx_collection/file_store_tx_source.d.ts +37 -0
  218. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  219. package/dest/services/tx_collection/file_store_tx_source.js +90 -0
  220. package/dest/services/tx_collection/index.d.ts +2 -1
  221. package/dest/services/tx_collection/index.d.ts.map +1 -1
  222. package/dest/services/tx_collection/index.js +1 -0
  223. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  224. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  225. package/dest/services/tx_collection/instrumentation.js +2 -1
  226. package/dest/services/tx_collection/proposal_tx_collector.d.ts +7 -7
  227. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
  228. package/dest/services/tx_collection/proposal_tx_collector.js +5 -4
  229. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  230. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  231. package/dest/services/tx_collection/request_tracker.js +84 -0
  232. package/dest/services/tx_collection/slow_tx_collection.d.ts +7 -3
  233. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  234. package/dest/services/tx_collection/slow_tx_collection.js +60 -26
  235. package/dest/services/tx_collection/tx_collection.d.ts +23 -13
  236. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  237. package/dest/services/tx_collection/tx_collection.js +75 -3
  238. package/dest/services/tx_collection/tx_collection_sink.d.ts +18 -8
  239. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  240. package/dest/services/tx_collection/tx_collection_sink.js +26 -29
  241. package/dest/services/tx_collection/tx_source.d.ts +8 -3
  242. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  243. package/dest/services/tx_collection/tx_source.js +19 -2
  244. package/dest/services/tx_file_store/config.d.ts +1 -3
  245. package/dest/services/tx_file_store/config.d.ts.map +1 -1
  246. package/dest/services/tx_file_store/config.js +0 -4
  247. package/dest/services/tx_file_store/tx_file_store.d.ts +4 -3
  248. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  249. package/dest/services/tx_file_store/tx_file_store.js +9 -6
  250. package/dest/services/tx_provider.d.ts +4 -4
  251. package/dest/services/tx_provider.d.ts.map +1 -1
  252. package/dest/services/tx_provider.js +9 -8
  253. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  254. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  255. package/dest/test-helpers/make-test-p2p-clients.js +1 -2
  256. package/dest/test-helpers/mock-pubsub.d.ts +30 -4
  257. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  258. package/dest/test-helpers/mock-pubsub.js +105 -4
  259. package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
  260. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  261. package/dest/test-helpers/reqresp-nodes.js +4 -3
  262. package/dest/test-helpers/testbench-utils.d.ts +35 -24
  263. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  264. package/dest/test-helpers/testbench-utils.js +124 -38
  265. package/dest/testbench/p2p_client_testbench_worker.d.ts +2 -2
  266. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  267. package/dest/testbench/p2p_client_testbench_worker.js +18 -16
  268. package/dest/testbench/worker_client_manager.d.ts +3 -1
  269. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  270. package/dest/testbench/worker_client_manager.js +6 -2
  271. package/dest/util.d.ts +3 -3
  272. package/dest/util.d.ts.map +1 -1
  273. package/package.json +14 -14
  274. package/src/client/factory.ts +96 -24
  275. package/src/client/interface.ts +43 -33
  276. package/src/client/p2p_client.ts +174 -265
  277. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +21 -13
  278. package/src/config.ts +158 -44
  279. package/src/errors/tx-pool.error.ts +12 -0
  280. package/src/index.ts +1 -0
  281. package/src/mem_pools/attestation_pool/attestation_pool.ts +100 -48
  282. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +61 -57
  283. package/src/mem_pools/attestation_pool/index.ts +3 -3
  284. package/src/mem_pools/attestation_pool/mocks.ts +2 -1
  285. package/src/mem_pools/index.ts +3 -0
  286. package/src/mem_pools/instrumentation.ts +17 -13
  287. package/src/mem_pools/interface.ts +2 -2
  288. package/src/mem_pools/tx_pool/README.md +1 -1
  289. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  290. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +3 -3
  291. package/src/mem_pools/tx_pool/priority.ts +4 -4
  292. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +3 -1
  293. package/src/mem_pools/tx_pool_v2/README.md +85 -11
  294. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  295. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +21 -8
  296. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +7 -3
  297. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +18 -4
  298. package/src/mem_pools/tx_pool_v2/eviction/index.ts +4 -0
  299. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +59 -4
  300. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +5 -5
  301. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +5 -5
  302. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +14 -9
  303. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +33 -6
  304. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +4 -3
  305. package/src/mem_pools/tx_pool_v2/index.ts +2 -1
  306. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  307. package/src/mem_pools/tx_pool_v2/interfaces.ts +32 -12
  308. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +202 -26
  309. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +58 -45
  310. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +34 -8
  311. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +410 -187
  312. package/src/msg_validators/attestation_validator/README.md +49 -0
  313. package/src/msg_validators/attestation_validator/attestation_validator.ts +5 -4
  314. package/src/msg_validators/clock_tolerance.ts +4 -3
  315. package/src/msg_validators/proposal_validator/README.md +123 -0
  316. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +14 -4
  317. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +20 -7
  318. package/src/msg_validators/proposal_validator/proposal_validator.ts +69 -45
  319. package/src/msg_validators/tx_validator/README.md +119 -0
  320. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +5 -5
  321. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  322. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  323. package/src/msg_validators/tx_validator/block_header_validator.ts +15 -3
  324. package/src/msg_validators/tx_validator/double_spend_validator.ts +11 -6
  325. package/src/msg_validators/tx_validator/factory.ts +387 -78
  326. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  327. package/src/msg_validators/tx_validator/gas_validator.ts +123 -27
  328. package/src/msg_validators/tx_validator/index.ts +2 -0
  329. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  330. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  331. package/src/msg_validators/tx_validator/phases_validator.ts +81 -26
  332. package/src/msg_validators/tx_validator/timestamp_validator.ts +23 -18
  333. package/src/services/dummy_service.ts +12 -6
  334. package/src/services/encoding.ts +18 -10
  335. package/src/services/gossipsub/README.md +641 -0
  336. package/src/services/gossipsub/index.ts +2 -0
  337. package/src/services/gossipsub/scoring.ts +29 -5
  338. package/src/services/gossipsub/topic_score_params.ts +487 -0
  339. package/src/services/libp2p/libp2p_service.ts +211 -190
  340. package/src/services/peer-manager/metrics.ts +7 -0
  341. package/src/services/peer-manager/peer_manager.ts +7 -3
  342. package/src/services/peer-manager/peer_scoring.ts +25 -0
  343. package/src/services/reqresp/README.md +229 -0
  344. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  345. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +76 -112
  346. package/src/services/reqresp/batch-tx-requester/interface.ts +3 -6
  347. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +30 -71
  348. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  349. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +2 -2
  350. package/src/services/reqresp/interface.ts +26 -1
  351. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +2 -2
  352. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +17 -0
  353. package/src/services/reqresp/protocols/tx.ts +22 -0
  354. package/src/services/reqresp/reqresp.ts +35 -15
  355. package/src/services/service.ts +31 -2
  356. package/src/services/tx_collection/config.ts +68 -0
  357. package/src/services/tx_collection/fast_tx_collection.ts +83 -76
  358. package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
  359. package/src/services/tx_collection/file_store_tx_source.ts +117 -0
  360. package/src/services/tx_collection/index.ts +1 -0
  361. package/src/services/tx_collection/instrumentation.ts +7 -1
  362. package/src/services/tx_collection/proposal_tx_collector.ts +9 -13
  363. package/src/services/tx_collection/request_tracker.ts +127 -0
  364. package/src/services/tx_collection/slow_tx_collection.ts +66 -33
  365. package/src/services/tx_collection/tx_collection.ts +114 -19
  366. package/src/services/tx_collection/tx_collection_sink.ts +30 -34
  367. package/src/services/tx_collection/tx_source.ts +22 -3
  368. package/src/services/tx_file_store/config.ts +0 -6
  369. package/src/services/tx_file_store/tx_file_store.ts +10 -8
  370. package/src/services/tx_provider.ts +10 -9
  371. package/src/test-helpers/make-test-p2p-clients.ts +4 -6
  372. package/src/test-helpers/mock-pubsub.ts +146 -9
  373. package/src/test-helpers/reqresp-nodes.ts +5 -7
  374. package/src/test-helpers/testbench-utils.ts +146 -43
  375. package/src/testbench/p2p_client_testbench_worker.ts +26 -24
  376. package/src/testbench/worker_client_manager.ts +13 -5
  377. package/src/util.ts +8 -2
  378. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  379. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  380. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  381. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
@@ -1,6 +1,7 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import { type BlockNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
2
+ import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
3
3
  import type { Logger } from '@aztec/foundation/log';
4
+ import type { L2Block, L2BlockId } from '@aztec/stdlib/block';
4
5
  import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
5
6
  import type {
6
7
  BlockProposal,
@@ -13,14 +14,16 @@ import { type BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
13
14
  import EventEmitter from 'events';
14
15
 
15
16
  import type { TryAddResult } from '../mem_pools/attestation_pool/attestation_pool.js';
16
- import type { TxPool } from '../mem_pools/tx_pool/index.js';
17
+ import type { AddTxsResult, TxPoolV2, TxPoolV2Config } from '../mem_pools/tx_pool_v2/interfaces.js';
18
+ import type { TxState } from '../mem_pools/tx_pool_v2/tx_metadata.js';
17
19
  import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
18
20
 
19
21
  /**
20
22
  * In-memory TxPool implementation for testing.
21
23
  * Provides basic tx storage without persistence.
24
+ * Implements TxPoolV2 interface with stub implementations for testing.
22
25
  */
23
- export class InMemoryTxPool extends EventEmitter implements TxPool {
26
+ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
24
27
  private txsByHash = new Map<string, Tx>();
25
28
  private logger: Logger | null = null;
26
29
 
@@ -54,93 +57,154 @@ export class InMemoryTxPool extends EventEmitter implements TxPool {
54
57
  this.removeAllListeners();
55
58
  }
56
59
 
57
- addTxs(txs: Tx[], opts?: { source?: string }): Promise<number> {
60
+ // === Core Operations (TxPoolV2) ===
61
+
62
+ addPendingTxs(txs: Tx[], opts?: { source?: string; feeComparisonOnly?: boolean }): Promise<AddTxsResult> {
63
+ const accepted: TxHash[] = [];
58
64
  const newTxs: Tx[] = [];
59
- let added = 0;
60
65
  for (const tx of txs) {
61
66
  const key = tx.getTxHash().toString();
62
67
  if (!this.txsByHash.has(key)) {
63
68
  newTxs.push(tx);
64
- added += 1;
69
+ accepted.push(tx.getTxHash());
65
70
  }
66
71
  this.txsByHash.set(key, tx);
67
72
  }
68
73
  if (newTxs.length > 0) {
69
74
  this.emit('txs-added', { txs: newTxs, source: opts?.source });
70
75
  }
71
- return Promise.resolve(added);
76
+ return Promise.resolve({ accepted, ignored: [], rejected: [] });
72
77
  }
73
78
 
74
- getTxByHash(hash: TxHash): Promise<Tx | undefined> {
75
- return Promise.resolve(this.txsByHash.get(hash.toString()));
79
+ canAddPendingTx(tx: Tx): Promise<'accepted' | 'ignored'> {
80
+ const key = tx.getTxHash().toString();
81
+ if (this.txsByHash.has(key)) {
82
+ return Promise.resolve('ignored');
83
+ }
84
+ return Promise.resolve('accepted');
76
85
  }
77
86
 
78
- getTxsByHash(hashes: TxHash[]): Promise<(Tx | undefined)[]> {
79
- const result = hashes.map(h => this.txsByHash.get(h.toString()));
80
- const found = result.filter(tx => tx !== undefined).length;
81
- this.logger?.debug(`[TxPool] getTxsByHash: requested ${hashes.length}, found ${found}`);
82
- return Promise.resolve(result);
87
+ addProtectedTxs(txs: Tx[], _block: BlockHeader, opts?: { source?: string }): Promise<void> {
88
+ for (const tx of txs) {
89
+ const key = tx.getTxHash().toString();
90
+ this.txsByHash.set(key, tx);
91
+ }
92
+ if (txs.length > 0) {
93
+ this.emit('txs-added', { txs, source: opts?.source });
94
+ }
95
+ return Promise.resolve();
83
96
  }
84
97
 
85
- hasTxs(hashes: TxHash[]): Promise<boolean[]> {
86
- return Promise.resolve(hashes.map(h => this.txsByHash.has(h.toString())));
98
+ protectTxs(txHashes: TxHash[], _block: BlockHeader): Promise<TxHash[]> {
99
+ const notFound: TxHash[] = [];
100
+ for (const txHash of txHashes) {
101
+ if (!this.txsByHash.has(txHash.toString())) {
102
+ notFound.push(txHash);
103
+ }
104
+ }
105
+ return Promise.resolve(notFound);
87
106
  }
88
107
 
89
- hasTx(hash: TxHash): Promise<boolean> {
90
- return Promise.resolve(this.txsByHash.has(hash.toString()));
108
+ addMinedTxs(txs: Tx[], _block: BlockHeader, _opts?: { source?: string }): Promise<void> {
109
+ for (const tx of txs) {
110
+ const key = tx.getTxHash().toString();
111
+ this.txsByHash.set(key, tx);
112
+ }
113
+ return Promise.resolve();
91
114
  }
92
115
 
93
- getArchivedTxByHash(_hash: TxHash): Promise<Tx | undefined> {
94
- return Promise.resolve(undefined);
116
+ // === State Transition Handlers (TxPoolV2) ===
117
+
118
+ handleMinedBlock(_block: L2Block): Promise<void> {
119
+ return Promise.resolve();
95
120
  }
96
121
 
97
- async markAsMined(_txHashes: TxHash[], _blockHeader: BlockHeader): Promise<void> {}
122
+ prepareForSlot(_slotNumber: SlotNumber): Promise<void> {
123
+ return Promise.resolve();
124
+ }
98
125
 
99
- async markMinedAsPending(_txHashes: TxHash[], _latestBlock: BlockNumber): Promise<void> {}
126
+ handlePrunedBlocks(_latestBlock: L2BlockId, _options?: { deleteAllTxs?: boolean }): Promise<void> {
127
+ return Promise.resolve();
128
+ }
100
129
 
101
- deleteTxs(txHashes: TxHash[], _opts?: { permanently?: boolean }): Promise<void> {
130
+ handleFailedExecution(txHashes: TxHash[]): Promise<void> {
102
131
  for (const txHash of txHashes) {
103
132
  this.txsByHash.delete(txHash.toString());
104
133
  }
105
134
  return Promise.resolve();
106
135
  }
107
136
 
108
- getAllTxs(): Promise<Tx[]> {
109
- return Promise.resolve([...this.txsByHash.values()]);
137
+ handleFinalizedBlock(_block: BlockHeader): Promise<void> {
138
+ return Promise.resolve();
110
139
  }
111
140
 
112
- getAllTxHashes(): Promise<TxHash[]> {
113
- return Promise.resolve([...this.txsByHash.keys()].map(key => TxHash.fromString(key)));
141
+ // === Query Operations (TxPoolV2) ===
142
+
143
+ getTxByHash(hash: TxHash): Promise<Tx | undefined> {
144
+ return Promise.resolve(this.txsByHash.get(hash.toString()));
145
+ }
146
+
147
+ getTxsByHash(hashes: TxHash[]): Promise<(Tx | undefined)[]> {
148
+ const result = hashes.map(h => this.txsByHash.get(h.toString()));
149
+ const found = result.filter(tx => tx !== undefined).length;
150
+ this.logger?.debug(`[TxPool] getTxsByHash: requested ${hashes.length}, found ${found}`);
151
+ return Promise.resolve(result);
152
+ }
153
+
154
+ hasTxs(hashes: TxHash[]): Promise<boolean[]> {
155
+ return Promise.resolve(hashes.map(h => this.txsByHash.has(h.toString())));
156
+ }
157
+
158
+ getArchivedTxByHash(_hash: TxHash): Promise<Tx | undefined> {
159
+ return Promise.resolve(undefined);
114
160
  }
115
161
 
116
162
  getPendingTxHashes(): Promise<TxHash[]> {
117
163
  return Promise.resolve([...this.txsByHash.keys()].map(key => TxHash.fromString(key)));
118
164
  }
119
165
 
166
+ getEligiblePendingTxHashes(): Promise<TxHash[]> {
167
+ return this.getPendingTxHashes();
168
+ }
169
+
120
170
  getPendingTxCount(): Promise<number> {
121
171
  return Promise.resolve(this.txsByHash.size);
122
172
  }
123
173
 
124
- getMinedTxHashes(): Promise<[tx: TxHash, blockNumber: BlockNumber][]> {
174
+ getMinedTxHashes(): Promise<[TxHash, L2BlockId][]> {
125
175
  return Promise.resolve([]);
126
176
  }
127
177
 
128
- getTxStatus(hash: TxHash): Promise<'pending' | 'mined' | 'deleted' | undefined> {
129
- return Promise.resolve(this.txsByHash.has(hash.toString()) ? 'pending' : undefined);
178
+ getMinedTxCount(): Promise<number> {
179
+ return Promise.resolve(0);
130
180
  }
131
181
 
132
- updateConfig(_config: { maxPendingTxCount?: number; archivedTxLimit?: number }): void {}
182
+ getTxStatus(hash: TxHash): Promise<TxState | 'deleted' | undefined> {
183
+ return Promise.resolve(this.txsByHash.has(hash.toString()) ? 'pending' : undefined);
184
+ }
133
185
 
134
186
  isEmpty(): Promise<boolean> {
135
187
  return Promise.resolve(this.txsByHash.size === 0);
136
188
  }
137
189
 
138
- async markTxsAsNonEvictable(_txHashes: TxHash[]): Promise<void> {}
190
+ getLowestPriorityPending(_limit: number): Promise<TxHash[]> {
191
+ return Promise.resolve([]);
192
+ }
139
193
 
140
- async clearNonEvictableTxs(): Promise<void> {}
194
+ // === Configuration (TxPoolV2) ===
141
195
 
142
- cleanupDeletedMinedTxs(_blockNumber: BlockNumber): Promise<number> {
143
- return Promise.resolve(0);
196
+ updateConfig(_config: Partial<TxPoolV2Config>): Promise<void> {
197
+ return Promise.resolve();
198
+ }
199
+
200
+ // === Lifecycle (TxPoolV2) ===
201
+
202
+ start(): Promise<void> {
203
+ return Promise.resolve();
204
+ }
205
+
206
+ stop(): Promise<void> {
207
+ return Promise.resolve();
144
208
  }
145
209
  }
146
210
 
@@ -155,10 +219,10 @@ export class InMemoryAttestationPool {
155
219
  const id = blockProposal.archive.toString();
156
220
  const alreadyExists = this.proposals.has(id);
157
221
  if (alreadyExists) {
158
- return Promise.resolve({ added: false, alreadyExists: true, totalForPosition: 1 });
222
+ return Promise.resolve({ added: false, alreadyExists: true, count: 1 });
159
223
  }
160
224
  this.proposals.set(id, blockProposal);
161
- return Promise.resolve({ added: true, alreadyExists: false, totalForPosition: 1 });
225
+ return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
162
226
  }
163
227
 
164
228
  getBlockProposal(id: string): Promise<BlockProposal | undefined> {
@@ -166,7 +230,7 @@ export class InMemoryAttestationPool {
166
230
  }
167
231
 
168
232
  tryAddCheckpointProposal(_proposal: CheckpointProposal): Promise<TryAddResult> {
169
- return Promise.resolve({ added: true, alreadyExists: false, totalForPosition: 1 });
233
+ return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
170
234
  }
171
235
 
172
236
  getCheckpointProposal(_id: string): Promise<CheckpointProposalCore | undefined> {
@@ -188,8 +252,12 @@ export class InMemoryAttestationPool {
188
252
  return Promise.resolve([]);
189
253
  }
190
254
 
191
- tryAddCheckpointAttestation(_attestation: CheckpointAttestation, _committeeSize: number): Promise<TryAddResult> {
192
- return Promise.resolve({ added: true, alreadyExists: false, totalForPosition: 1 });
255
+ tryAddCheckpointAttestation(_attestation: CheckpointAttestation): Promise<TryAddResult> {
256
+ return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
257
+ }
258
+
259
+ hasBlockProposalsForSlot(_slot: SlotNumber): Promise<boolean> {
260
+ return Promise.resolve(false);
193
261
  }
194
262
 
195
263
  isEmpty(): Promise<boolean> {
@@ -205,18 +273,53 @@ export class InMemoryAttestationPool {
205
273
  * Creates a mock EpochCache for testing.
206
274
  */
207
275
  export function createMockEpochCache(): EpochCacheInterface {
208
- return {
276
+ const cache: EpochCacheInterface = {
209
277
  getCommittee: () => Promise.resolve({ committee: [], seed: 1n, epoch: EpochNumber.ZERO, isEscapeHatchOpen: false }),
210
278
  getProposerIndexEncoding: () => '0x' as `0x${string}`,
211
- getEpochAndSlotNow: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n, nowMs: 0n }),
279
+ getSlotNow: () => SlotNumber.ZERO,
280
+ getTargetSlot: () => SlotNumber.ZERO,
281
+ getEpochNow: () => EpochNumber.ZERO,
282
+ getTargetEpoch: () => EpochNumber.ZERO,
283
+ getEpochAndSlotNow: () => ({
284
+ epoch: EpochNumber.ZERO,
285
+ slot: SlotNumber.ZERO,
286
+ ts: 0n,
287
+ nowMs: 0n,
288
+ }),
289
+ isProposerPipeliningEnabled: () => false,
212
290
  computeProposerIndex: () => 0n,
213
291
  getCurrentAndNextSlot: () => ({ currentSlot: SlotNumber.ZERO, nextSlot: SlotNumber.ZERO }),
292
+ getTargetAndNextSlot: () => ({ targetSlot: SlotNumber.ZERO, nextSlot: SlotNumber.ZERO }),
214
293
  getProposerAttesterAddressInSlot: () => Promise.resolve(undefined),
215
- getEpochAndSlotInNextL1Slot: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n, now: 0n }),
294
+ getEpochAndSlotInNextL1Slot: () => ({
295
+ epoch: EpochNumber.ZERO,
296
+ slot: SlotNumber.ZERO,
297
+ ts: 0n,
298
+ nowSeconds: 0n,
299
+ }),
300
+ getTargetEpochAndSlotInNextL1Slot: () => ({
301
+ epoch: EpochNumber.ZERO,
302
+ slot: SlotNumber.ZERO,
303
+ ts: 0n,
304
+ nowSeconds: 0n,
305
+ }),
216
306
  isInCommittee: () => Promise.resolve(false),
217
307
  getRegisteredValidators: () => Promise.resolve([]),
218
308
  filterInCommittee: () => Promise.resolve([]),
309
+ isEscapeHatchOpen: () => Promise.resolve(false),
310
+ isEscapeHatchOpenAtSlot: () => Promise.resolve(false),
311
+ getL1Constants: () => ({
312
+ l1StartBlock: 0n,
313
+ l1GenesisTime: 0n,
314
+ epochDuration: 1,
315
+ slotDuration: 1,
316
+ ethereumSlotDuration: 1,
317
+ proofSubmissionEpochs: 1,
318
+ targetCommitteeSize: 48,
319
+ rollupManaLimit: Number.MAX_SAFE_INTEGER,
320
+ }),
219
321
  };
322
+ return cache;
220
323
  }
221
324
 
222
325
  /**
@@ -4,7 +4,7 @@
4
4
  * Used when running testbench commands.
5
5
  */
6
6
  import { MockL2BlockSource } from '@aztec/archiver/test';
7
- import type { EpochCacheInterface } from '@aztec/epoch-cache';
7
+ import type { EpochCache, EpochCacheInterface } from '@aztec/epoch-cache';
8
8
  import { BlockNumber } from '@aztec/foundation/branded-types';
9
9
  import { SecretValue } from '@aztec/foundation/config';
10
10
  import { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
@@ -12,14 +12,14 @@ import { Fr } from '@aztec/foundation/curves/bn254';
12
12
  import { type Logger, createLogger } from '@aztec/foundation/log';
13
13
  import { sleep } from '@aztec/foundation/sleep';
14
14
  import { DateProvider, Timer } from '@aztec/foundation/timer';
15
- import type { DataStoreConfig } from '@aztec/kv-store/config';
16
15
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
17
16
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
18
17
  import { protocolContractsHash } from '@aztec/protocol-contracts';
19
18
  import type { L2BlockSource } from '@aztec/stdlib/block';
20
19
  import type { ContractDataSource } from '@aztec/stdlib/contract';
21
20
  import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
22
- import { type BlockProposal, P2PClientType, P2PMessage } from '@aztec/stdlib/p2p';
21
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
22
+ import { type BlockProposal, P2PMessage } from '@aztec/stdlib/p2p';
23
23
  import { ChonkProof } from '@aztec/stdlib/proofs';
24
24
  import { makeAztecAddress, makeBlockHeader, makeBlockProposal, mockTx } from '@aztec/stdlib/testing';
25
25
  import { Tx, TxHash, type TxValidationResult } from '@aztec/stdlib/tx';
@@ -28,23 +28,21 @@ import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-clien
28
28
  import type { Message, PeerId } from '@libp2p/interface';
29
29
  import { TopicValidatorResult } from '@libp2p/interface';
30
30
  import { peerIdFromString } from '@libp2p/peer-id';
31
+ import { mock } from 'jest-mock-extended';
31
32
 
32
- import type { P2PClient } from '../client/p2p_client.js';
33
+ import type { P2PClient } from '../client/index.js';
33
34
  import type { P2PConfig } from '../config.js';
34
35
  import { createP2PClient } from '../index.js';
35
- import type { MemPools } from '../mem_pools/interface.js';
36
- import { LibP2PService } from '../services/libp2p/libp2p_service.js';
36
+ import type { MemPools } from '../mem_pools/index.js';
37
+ import { BatchTxRequesterCollector, LibP2PService, SendBatchRequestCollector } from '../services/index.js';
37
38
  import type { PeerManager } from '../services/peer-manager/peer_manager.js';
38
39
  import type { BatchTxRequesterLibP2PService } from '../services/reqresp/batch-tx-requester/interface.js';
39
40
  import type { IBatchRequestTxValidator } from '../services/reqresp/batch-tx-requester/tx_validator.js';
40
41
  import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
41
42
  import type { ReqResp } from '../services/reqresp/reqresp.js';
42
43
  import type { PeerDiscoveryService } from '../services/service.js';
43
- import {
44
- BatchTxRequesterCollector,
45
- SendBatchRequestCollector,
46
- } from '../services/tx_collection/proposal_tx_collector.js';
47
- import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
44
+ import { RequestTracker } from '../services/tx_collection/request_tracker.js';
45
+ import { AlwaysTrueCircuitVerifier } from '../test-helpers/index.js';
48
46
  import {
49
47
  BENCHMARK_CONSTANTS,
50
48
  type CollectorType,
@@ -52,10 +50,9 @@ import {
52
50
  InMemoryAttestationPool,
53
51
  InMemoryTxPool,
54
52
  UNLIMITED_RATE_LIMIT_QUOTA,
55
- createMockEpochCache,
56
53
  createMockWorldStateSynchronizer,
57
54
  filterTxsByDistribution,
58
- } from '../test-helpers/testbench-utils.js';
55
+ } from '../test-helpers/index.js';
59
56
  import type { PubSubLibp2p } from '../util.js';
60
57
 
61
58
  export type { DistributionPattern, CollectorType } from '../test-helpers/testbench-utils.js';
@@ -89,12 +86,11 @@ export interface BenchReadyMessage {
89
86
  }
90
87
  const txCache = new Map<number, Tx[]>();
91
88
 
92
- class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends LibP2PService<T> {
89
+ class TestLibP2PService extends LibP2PService {
93
90
  private disableTxValidation: boolean;
94
91
  private gossipMessageCount = 0;
95
92
 
96
93
  constructor(
97
- clientType: T,
98
94
  config: P2PConfig,
99
95
  node: PubSubLibp2p,
100
96
  peerDiscoveryService: PeerDiscoveryService,
@@ -110,7 +106,6 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
110
106
  disableTxValidation = true,
111
107
  ) {
112
108
  super(
113
- clientType,
114
109
  config,
115
110
  node,
116
111
  peerDiscoveryService,
@@ -144,7 +139,7 @@ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends Li
144
139
  const txHash = tx.getTxHash();
145
140
  const txHashString = txHash.toString();
146
141
  this.logger.verbose(`Received tx ${txHashString} from external peer ${source.toString()}.`);
147
- await this.mempools.txPool.addTxs([tx]);
142
+ await this.mempools.txPool.addPendingTxs([tx]);
148
143
  } else {
149
144
  await super.handleGossipedTx(payload, msgId, source);
150
145
  }
@@ -166,7 +161,7 @@ async function generateDeterministicTxs(txCount: number, seed: number, config: P
166
161
  return cached.slice(0, txCount);
167
162
  }
168
163
 
169
- const includeByTimestampBase = BigInt(seed);
164
+ const expirationTimestampBase = BigInt(seed);
170
165
  for (let i = cached.length; i < txCount; i++) {
171
166
  const txSeed = seed * 10000 + i;
172
167
  const tx = await mockTx(txSeed, {
@@ -182,7 +177,7 @@ async function generateDeterministicTxs(txCount: number, seed: number, config: P
182
177
  hasPublicTeardownCallRequest: false,
183
178
  publicCalldataSize: 0,
184
179
  });
185
- tx.data.includeByTimestamp = includeByTimestampBase + BigInt(i);
180
+ tx.data.expirationTimestamp = expirationTimestampBase + BigInt(i);
186
181
  await tx.recomputeHash();
187
182
  cached.push(tx);
188
183
  }
@@ -277,7 +272,11 @@ async function runAggregatorBenchmark(
277
272
  new DateProvider(),
278
273
  noopTxValidator,
279
274
  );
280
- const fetchedTxs = await collector.collectTxs(txHashes, blockProposal, pinnedPeer, timeoutMs);
275
+ const fetchedTxs = await collector.collectTxs(
276
+ RequestTracker.create(txHashes, new Date(Date.now() + timeoutMs)),
277
+ blockProposal,
278
+ pinnedPeer,
279
+ );
281
280
  const durationMs = timer.ms();
282
281
  return {
283
282
  type: 'BENCH_RESULT',
@@ -292,7 +291,11 @@ async function runAggregatorBenchmark(
292
291
  BENCHMARK_CONSTANTS.FIXED_MAX_PEERS,
293
292
  BENCHMARK_CONSTANTS.FIXED_MAX_RETRY_ATTEMPTS,
294
293
  );
295
- const fetchedTxs = await collector.collectTxs(txHashes, blockProposal, pinnedPeer, timeoutMs);
294
+ const fetchedTxs = await collector.collectTxs(
295
+ RequestTracker.create(txHashes, new Date(Date.now() + timeoutMs)),
296
+ blockProposal,
297
+ pinnedPeer,
298
+ );
296
299
  const durationMs = timer.ms();
297
300
  return {
298
301
  type: 'BENCH_RESULT',
@@ -335,12 +338,13 @@ process.on('message', async msg => {
335
338
  const config: P2PConfig = {
336
339
  ...rawConfig,
337
340
  peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined,
341
+ priceBumpPercentage: 10n,
338
342
  } as P2PConfig;
339
343
 
340
344
  workerConfig = config;
341
345
  workerTxPool = new InMemoryTxPool();
342
346
  workerAttestationPool = new InMemoryAttestationPool();
343
- const epochCache = createMockEpochCache();
347
+ const epochCache = mock<EpochCache>();
344
348
  const worldState = createMockWorldStateSynchronizer();
345
349
  const l2BlockSource = new MockL2BlockSource();
346
350
 
@@ -358,7 +362,6 @@ process.on('message', async msg => {
358
362
  };
359
363
 
360
364
  const client = await createP2PClient(
361
- P2PClientType.Full,
362
365
  config as P2PConfig & DataStoreConfig,
363
366
  l2BlockSource,
364
367
  proofVerifier as ClientProtocolCircuitVerifier,
@@ -371,7 +374,6 @@ process.on('message', async msg => {
371
374
  );
372
375
 
373
376
  const testService = new TestLibP2PService(
374
- P2PClientType.Full,
375
377
  config,
376
378
  (client as any).p2pService.node,
377
379
  (client as any).p2pService.peerDiscoveryService,
@@ -81,13 +81,15 @@ class WorkerClientManager {
81
81
  * Note: We send the raw peerIdPrivateKey string instead of SecretValue
82
82
  * because SecretValue.toJSON() returns '[Redacted]', losing the value.
83
83
  * The worker must re-wrap it in SecretValue.
84
+ * We also omit priceBumpPercentage since it's a bigint and can't be
85
+ * serialized over IPC (which uses JSON under the hood).
84
86
  */
85
87
  private createClientConfig(
86
88
  clientIndex: number,
87
89
  port: number,
88
90
  otherNodes: string[],
89
- ): Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig> {
90
- return {
91
+ ): Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & { peerIdPrivateKey: string } & Partial<ChainConfig> {
92
+ const { priceBumpPercentage: _, ...config } = {
91
93
  ...getP2PDefaultConfig(),
92
94
  p2pEnabled: true,
93
95
  peerIdPrivateKey: this.peerIdPrivateKeys[clientIndex],
@@ -96,7 +98,10 @@ class WorkerClientManager {
96
98
  p2pPort: port,
97
99
  bootstrapNodes: [...otherNodes],
98
100
  ...this.p2pConfig,
99
- } as Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig>;
101
+ };
102
+ return config as Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & {
103
+ peerIdPrivateKey: string;
104
+ } & Partial<ChainConfig>;
100
105
  }
101
106
 
102
107
  /**
@@ -104,7 +109,9 @@ class WorkerClientManager {
104
109
  * Config uses raw string for peerIdPrivateKey (not SecretValue) for IPC serialization.
105
110
  */
106
111
  private spawnWorkerProcess(
107
- config: Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig>,
112
+ config: Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & {
113
+ peerIdPrivateKey: string;
114
+ } & Partial<ChainConfig>,
108
115
  clientIndex: number,
109
116
  ): [ChildProcess, Promise<void>] {
110
117
  const useCompiled = existsSync(workerJsPath);
@@ -483,7 +490,8 @@ class WorkerClientManager {
483
490
  };
484
491
 
485
492
  this.processes[0].send(aggregatorCmd);
486
- const result = await this.waitForBenchResult(0, config.timeoutMs + 30000);
493
+ const aggregatorBudgetMs = config.timeoutMs + BENCHMARK_CONSTANTS.MAX_PEER_WAIT_MS + 30000;
494
+ const result = await this.waitForBenchResult(0, aggregatorBudgetMs);
487
495
 
488
496
  this.logger.info(
489
497
  `Benchmark complete: fetched=${result.fetchedCount}/${config.txCount}, duration=${result.durationMs.toFixed(0)}ms, success=${result.success}`,
package/src/util.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { SecretValue } from '@aztec/foundation/config';
2
2
  import type { Logger } from '@aztec/foundation/log';
3
3
  import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
4
- import type { DataStoreConfig } from '@aztec/kv-store/config';
4
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
5
5
 
6
6
  import type { GossipSub } from '@chainsafe/libp2p-gossipsub';
7
7
  import { generateKeyPair, marshalPrivateKey, unmarshalPrivateKey } from '@libp2p/crypto/keys';
@@ -23,7 +23,13 @@ export interface PubSubLibp2p extends Pick<Libp2p, 'status' | 'start' | 'stop' |
23
23
  services: {
24
24
  pubsub: Pick<
25
25
  GossipSub,
26
- 'addEventListener' | 'removeEventListener' | 'publish' | 'subscribe' | 'reportMessageValidationResult' | 'direct'
26
+ | 'addEventListener'
27
+ | 'removeEventListener'
28
+ | 'publish'
29
+ | 'subscribe'
30
+ | 'reportMessageValidationResult'
31
+ | 'direct'
32
+ | 'getMeshPeers'
27
33
  > & { score: Pick<GossipSub['score'], 'score'> };
28
34
  };
29
35
  }
@@ -1,23 +0,0 @@
1
- import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import type { Secp256k1Signer } from '@aztec/foundation/crypto/secp256k1-signer';
3
- import type { EthAddress } from '@aztec/foundation/eth-address';
4
- import { type BlockProposal, type CheckpointProposal, type ValidationResult } from '@aztec/stdlib/p2p';
5
- import type { TxHash } from '@aztec/stdlib/tx';
6
- import type { MockProxy } from 'jest-mock-extended';
7
- export interface ProposalValidatorTestParams<TProposal extends BlockProposal | CheckpointProposal> {
8
- validatorFactory: (epochCache: EpochCacheInterface, opts: {
9
- txsPermitted: boolean;
10
- }) => {
11
- validate: (proposal: TProposal) => Promise<ValidationResult>;
12
- };
13
- makeProposal: (options?: any) => Promise<TProposal>;
14
- makeHeader: (epochNumber: number | bigint, slotNumber: number | bigint, blockNumber: number | bigint) => any;
15
- getSigner: () => Secp256k1Signer;
16
- getAddress: (signer?: Secp256k1Signer) => EthAddress;
17
- getSlot: (slot: number | bigint) => any;
18
- getTxHashes: (n: number) => TxHash[];
19
- getTxs: () => any[];
20
- epochCacheMock: () => MockProxy<EpochCacheInterface>;
21
- }
22
- export declare function sharedProposalValidatorTests<TProposal extends BlockProposal | CheckpointProposal>(params: ProposalValidatorTestParams<TProposal>): void;
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfdmFsaWRhdG9yX3Rlc3Rfc3VpdGUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9wcm9wb3NhbF92YWxpZGF0b3IvcHJvcG9zYWxfdmFsaWRhdG9yX3Rlc3Rfc3VpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsS0FBSyxhQUFhLEVBQ2xCLEtBQUssa0JBQWtCLEVBRXZCLEtBQUssZ0JBQWdCLEVBQ3RCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFL0MsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFcEQsTUFBTSxXQUFXLDJCQUEyQixDQUFDLFNBQVMsU0FBUyxhQUFhLEdBQUcsa0JBQWtCO0lBQy9GLGdCQUFnQixFQUFFLENBQ2hCLFVBQVUsRUFBRSxtQkFBbUIsRUFDL0IsSUFBSSxFQUFFO1FBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQTtLQUFFLEtBQzVCO1FBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsS0FBSyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtLQUFFLENBQUM7SUFDdEUsWUFBWSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsR0FBRyxLQUFLLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNwRCxVQUFVLEVBQUUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxHQUFHLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxHQUFHLE1BQU0sRUFBRSxXQUFXLEVBQUUsTUFBTSxHQUFHLE1BQU0sS0FBSyxHQUFHLENBQUM7SUFDN0csU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0lBQ2pDLFVBQVUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLGVBQWUsS0FBSyxVQUFVLENBQUM7SUFDckQsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLE1BQU0sR0FBRyxNQUFNLEtBQUssR0FBRyxDQUFDO0lBQ3hDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEtBQUssTUFBTSxFQUFFLENBQUM7SUFDckMsTUFBTSxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDcEIsY0FBYyxFQUFFLE1BQU0sU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7Q0FDdEQ7QUFFRCx3QkFBZ0IsNEJBQTRCLENBQUMsU0FBUyxTQUFTLGFBQWEsR0FBRyxrQkFBa0IsRUFDL0YsTUFBTSxFQUFFLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxRQXdNL0MifQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"proposal_validator_test_suite.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/proposal_validator_test_suite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,kBAAkB,EAEvB,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,WAAW,2BAA2B,CAAC,SAAS,SAAS,aAAa,GAAG,kBAAkB;IAC/F,gBAAgB,EAAE,CAChB,UAAU,EAAE,mBAAmB,EAC/B,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,KAC5B;QAAE,QAAQ,EAAE,CAAC,QAAQ,EAAE,SAAS,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAA;KAAE,CAAC;IACtE,YAAY,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACpD,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,KAAK,GAAG,CAAC;IAC7G,SAAS,EAAE,MAAM,eAAe,CAAC;IACjC,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,eAAe,KAAK,UAAU,CAAC;IACrD,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,KAAK,GAAG,CAAC;IACxC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;IACrC,MAAM,EAAE,MAAM,GAAG,EAAE,CAAC;IACpB,cAAc,EAAE,MAAM,SAAS,CAAC,mBAAmB,CAAC,CAAC;CACtD;AAED,wBAAgB,4BAA4B,CAAC,SAAS,SAAS,aAAa,GAAG,kBAAkB,EAC/F,MAAM,EAAE,2BAA2B,CAAC,SAAS,CAAC,QAwM/C"}