@aztec/p2p 0.0.1-commit.9ef841308 → 0.0.1-commit.a5db02d

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 (344) hide show
  1. package/README.md +7 -6
  2. package/dest/bootstrap/bootstrap.d.ts +1 -1
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +22 -6
  5. package/dest/client/factory.d.ts +4 -3
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +33 -24
  8. package/dest/client/interface.d.ts +48 -11
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +34 -19
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +105 -46
  13. package/dest/config.d.ts +143 -107
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +72 -26
  16. package/dest/errors/p2p-service.error.d.ts +9 -0
  17. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  18. package/dest/errors/p2p-service.error.js +10 -0
  19. package/dest/errors/reqresp.error.d.ts +9 -16
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +10 -17
  22. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +98 -56
  23. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  24. package/dest/mem_pools/attestation_pool/attestation_pool.js +269 -196
  25. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  26. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +218 -59
  28. package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/mocks.js +6 -4
  31. package/dest/mem_pools/instrumentation.d.ts +9 -4
  32. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  33. package/dest/mem_pools/instrumentation.js +28 -9
  34. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +1 -5
  35. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
  36. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +1 -7
  37. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +3 -3
  38. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
  39. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +6 -6
  40. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +1 -1
  41. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  42. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  43. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  44. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  45. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  46. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  47. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  48. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +33 -5
  49. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  50. package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
  51. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +5 -2
  52. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +8 -5
  54. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +15 -1
  55. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  56. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +31 -0
  57. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +9 -3
  58. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  59. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +19 -8
  60. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +17 -4
  61. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  62. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +208 -118
  63. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -3
  64. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  65. package/dest/msg_validators/attestation_validator/attestation_validator.js +38 -16
  66. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  67. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  68. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  69. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +8 -3
  70. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  71. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +2 -2
  72. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +8 -3
  73. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  74. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +8 -2
  75. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +25 -3
  76. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  77. package/dest/msg_validators/proposal_validator/proposal_validator.js +85 -15
  78. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  79. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  80. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  81. package/dest/msg_validators/tx_validator/allowed_public_setup.js +3 -3
  82. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  83. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  84. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  85. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  86. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  87. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  88. package/dest/msg_validators/tx_validator/data_validator.js +1 -0
  89. package/dest/msg_validators/tx_validator/factory.d.ts +14 -15
  90. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  91. package/dest/msg_validators/tx_validator/factory.js +29 -16
  92. package/dest/msg_validators/tx_validator/gas_validator.d.ts +47 -10
  93. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  94. package/dest/msg_validators/tx_validator/gas_validator.js +65 -48
  95. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  96. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  97. package/dest/msg_validators/tx_validator/index.js +2 -0
  98. package/dest/msg_validators/tx_validator/phases_validator.js +2 -2
  99. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  100. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  102. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  103. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  104. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  105. package/dest/services/data_store.d.ts +1 -1
  106. package/dest/services/data_store.d.ts.map +1 -1
  107. package/dest/services/data_store.js +5 -5
  108. package/dest/services/discv5/discV5_service.d.ts +13 -2
  109. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  110. package/dest/services/discv5/discV5_service.js +119 -25
  111. package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
  112. package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
  113. package/dest/services/discv5/persisted_enr_store.js +145 -0
  114. package/dest/services/dummy_service.d.ts +15 -15
  115. package/dest/services/dummy_service.d.ts.map +1 -1
  116. package/dest/services/dummy_service.js +15 -16
  117. package/dest/services/encoding.d.ts +19 -6
  118. package/dest/services/encoding.d.ts.map +1 -1
  119. package/dest/services/encoding.js +25 -15
  120. package/dest/services/gossipsub/topic_score_params.d.ts +6 -12
  121. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  122. package/dest/services/gossipsub/topic_score_params.js +4 -14
  123. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  124. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  125. package/dest/services/libp2p/instrumentation.js +14 -0
  126. package/dest/services/libp2p/libp2p_service.d.ts +40 -40
  127. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  128. package/dest/services/libp2p/libp2p_service.js +292 -264
  129. package/dest/services/peer-manager/peer_manager.d.ts +15 -2
  130. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  131. package/dest/services/peer-manager/peer_manager.js +59 -17
  132. package/dest/services/peer-manager/peer_scoring.d.ts +30 -1
  133. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  134. package/dest/services/peer-manager/peer_scoring.js +74 -3
  135. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +1 -8
  136. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  137. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +35 -44
  138. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +8 -5
  139. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  140. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  141. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  142. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  143. package/dest/services/reqresp/config.d.ts +15 -3
  144. package/dest/services/reqresp/config.d.ts.map +1 -1
  145. package/dest/services/reqresp/config.js +11 -0
  146. package/dest/services/reqresp/interface.d.ts +16 -18
  147. package/dest/services/reqresp/interface.d.ts.map +1 -1
  148. package/dest/services/reqresp/interface.js +10 -20
  149. package/dest/services/reqresp/metrics.d.ts +1 -1
  150. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  151. package/dest/services/reqresp/metrics.js +0 -1
  152. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  153. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  154. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  155. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  156. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  157. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
  158. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
  159. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  160. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
  161. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  162. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  163. package/dest/services/reqresp/protocols/index.js +0 -1
  164. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  165. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  166. package/dest/services/reqresp/protocols/tx.js +1 -3
  167. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  168. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  169. package/dest/services/reqresp/rate-limiter/rate_limits.js +3 -13
  170. package/dest/services/reqresp/reqresp.d.ts +7 -29
  171. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  172. package/dest/services/reqresp/reqresp.js +59 -209
  173. package/dest/services/service.d.ts +23 -16
  174. package/dest/services/service.d.ts.map +1 -1
  175. package/dest/services/tx_collection/config.d.ts +2 -23
  176. package/dest/services/tx_collection/config.d.ts.map +1 -1
  177. package/dest/services/tx_collection/config.js +2 -55
  178. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  179. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  180. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  181. package/dest/services/tx_collection/index.d.ts +2 -3
  182. package/dest/services/tx_collection/index.d.ts.map +1 -1
  183. package/dest/services/tx_collection/index.js +0 -1
  184. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  185. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  186. package/dest/services/tx_collection/instrumentation.js +0 -2
  187. package/dest/services/tx_collection/tx_collection.d.ts +35 -51
  188. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  189. package/dest/services/tx_collection/tx_collection.js +275 -119
  190. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  191. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  192. package/dest/services/tx_collection/tx_source.d.ts +1 -1
  193. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  194. package/dest/services/tx_collection/tx_source.js +4 -1
  195. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  196. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  197. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  198. package/dest/services/tx_provider.d.ts +3 -1
  199. package/dest/services/tx_provider.d.ts.map +1 -1
  200. package/dest/services/tx_provider.js +3 -0
  201. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  202. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  203. package/dest/test-helpers/make-test-p2p-clients.js +5 -2
  204. package/dest/test-helpers/mock-pubsub.d.ts +21 -12
  205. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  206. package/dest/test-helpers/mock-pubsub.js +39 -47
  207. package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
  208. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  209. package/dest/test-helpers/reqresp-nodes.js +16 -18
  210. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  211. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  212. package/dest/test-helpers/test_tx_provider.js +3 -0
  213. package/dest/test-helpers/testbench-utils.d.ts +15 -14
  214. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  215. package/dest/test-helpers/testbench-utils.js +28 -13
  216. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  217. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  218. package/dest/testbench/p2p_client_testbench_worker.js +60 -27
  219. package/dest/testbench/worker_client_manager.d.ts +10 -6
  220. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  221. package/dest/testbench/worker_client_manager.js +51 -8
  222. package/dest/util.d.ts +8 -8
  223. package/dest/util.d.ts.map +1 -1
  224. package/dest/util.js +38 -10
  225. package/dest/versioning.d.ts +3 -6
  226. package/dest/versioning.d.ts.map +1 -1
  227. package/dest/versioning.js +3 -24
  228. package/package.json +16 -16
  229. package/src/bootstrap/bootstrap.ts +17 -3
  230. package/src/client/factory.ts +49 -25
  231. package/src/client/interface.ts +44 -17
  232. package/src/client/p2p_client.ts +125 -79
  233. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  234. package/src/config.ts +146 -34
  235. package/src/errors/p2p-service.error.ts +11 -0
  236. package/src/errors/reqresp.error.ts +13 -19
  237. package/src/mem_pools/attestation_pool/attestation_pool.ts +324 -239
  238. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +238 -63
  239. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  240. package/src/mem_pools/instrumentation.ts +18 -12
  241. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
  242. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
  243. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +1 -1
  244. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  245. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  246. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  247. package/src/mem_pools/tx_pool_v2/interfaces.ts +31 -4
  248. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +13 -7
  249. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +35 -0
  250. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +22 -8
  251. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +233 -123
  252. package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -15
  253. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +15 -7
  254. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +15 -3
  255. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +26 -3
  256. package/src/msg_validators/proposal_validator/proposal_validator.ts +94 -12
  257. package/src/msg_validators/tx_validator/README.md +13 -3
  258. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  259. package/src/msg_validators/tx_validator/allowed_public_setup.ts +3 -3
  260. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  261. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  262. package/src/msg_validators/tx_validator/data_validator.ts +2 -0
  263. package/src/msg_validators/tx_validator/factory.ts +37 -20
  264. package/src/msg_validators/tx_validator/gas_validator.ts +99 -54
  265. package/src/msg_validators/tx_validator/index.ts +2 -0
  266. package/src/msg_validators/tx_validator/phases_validator.ts +2 -2
  267. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  268. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  269. package/src/services/data_store.ts +5 -13
  270. package/src/services/discv5/discV5_service.ts +126 -16
  271. package/src/services/discv5/persisted_enr_store.ts +158 -0
  272. package/src/services/dummy_service.ts +20 -39
  273. package/src/services/encoding.ts +28 -20
  274. package/src/services/gossipsub/README.md +33 -11
  275. package/src/services/gossipsub/topic_score_params.ts +9 -18
  276. package/src/services/libp2p/instrumentation.ts +14 -0
  277. package/src/services/libp2p/libp2p_service.ts +342 -290
  278. package/src/services/peer-manager/peer_manager.ts +63 -16
  279. package/src/services/peer-manager/peer_scoring.ts +81 -3
  280. package/src/services/reqresp/README.md +2 -37
  281. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +39 -52
  282. package/src/services/reqresp/batch-tx-requester/interface.ts +11 -4
  283. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  284. package/src/services/reqresp/config.ts +19 -2
  285. package/src/services/reqresp/interface.ts +21 -47
  286. package/src/services/reqresp/metrics.ts +0 -1
  287. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  288. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
  289. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
  290. package/src/services/reqresp/protocols/index.ts +0 -1
  291. package/src/services/reqresp/protocols/tx.ts +1 -3
  292. package/src/services/reqresp/rate-limiter/rate_limits.ts +3 -13
  293. package/src/services/reqresp/reqresp.ts +69 -252
  294. package/src/services/service.ts +28 -32
  295. package/src/services/tx_collection/config.ts +3 -80
  296. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  297. package/src/services/tx_collection/index.ts +1 -6
  298. package/src/services/tx_collection/instrumentation.ts +1 -7
  299. package/src/services/tx_collection/tx_collection.ts +330 -173
  300. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  301. package/src/services/tx_collection/tx_source.ts +2 -1
  302. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  303. package/src/services/tx_provider.ts +5 -0
  304. package/src/test-helpers/make-test-p2p-clients.ts +3 -0
  305. package/src/test-helpers/mock-pubsub.ts +41 -64
  306. package/src/test-helpers/reqresp-nodes.ts +12 -22
  307. package/src/test-helpers/test_tx_provider.ts +5 -0
  308. package/src/test-helpers/testbench-utils.ts +35 -26
  309. package/src/testbench/p2p_client_testbench_worker.ts +68 -44
  310. package/src/testbench/worker_client_manager.ts +59 -19
  311. package/src/util.ts +33 -14
  312. package/src/versioning.ts +3 -33
  313. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  314. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  315. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -315
  316. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  317. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  318. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  319. package/dest/msg_validators/clock_tolerance.d.ts +0 -21
  320. package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
  321. package/dest/msg_validators/clock_tolerance.js +0 -38
  322. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  323. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  324. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  325. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  326. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  327. package/dest/services/reqresp/protocols/block.js +0 -32
  328. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -51
  329. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  330. package/dest/services/tx_collection/fast_tx_collection.js +0 -311
  331. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -48
  332. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  333. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  334. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  335. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  336. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  337. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -355
  338. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  339. package/src/msg_validators/clock_tolerance.ts +0 -52
  340. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  341. package/src/services/reqresp/protocols/block.ts +0 -37
  342. package/src/services/tx_collection/fast_tx_collection.ts +0 -361
  343. package/src/services/tx_collection/proposal_tx_collector.ts +0 -108
  344. package/src/services/tx_collection/slow_tx_collection.ts +0 -266
@@ -1,3 +1,4 @@
1
+ import { FifoSet } from '@aztec/foundation/fifo-set';
1
2
  import { type Logger, createLogger } from '@aztec/foundation/log';
2
3
  import { RunningPromise } from '@aztec/foundation/promise';
3
4
  import { makeBackoff, retry } from '@aztec/foundation/retry';
@@ -10,6 +11,8 @@ import type { TxPoolV2 } from '../../mem_pools/index.js';
10
11
  import type { TxFileStoreConfig } from './config.js';
11
12
  import { TxFileStoreInstrumentation } from './instrumentation.js';
12
13
 
14
+ const MAX_RECENT_UPLOADS = 1000;
15
+
13
16
  /**
14
17
  * Uploads validated transactions to a file store as a fallback retrieval mechanism.
15
18
  * Listens to TxPool txs-added events and uploads txs asynchronously with bounded concurrency.
@@ -21,9 +24,7 @@ export class TxFileStore {
21
24
  private readonly handleTxsAdded: (args: { txs: Tx[]; source?: string }) => void;
22
25
 
23
26
  /** Recently uploaded tx hashes for deduplication. */
24
- private recentUploads: Set<string> = new Set();
25
- private recentUploadsOrder: string[] = [];
26
- private readonly maxRecentUploads = 1000;
27
+ private recentUploads = FifoSet.withLimit<string>(MAX_RECENT_UPLOADS);
27
28
 
28
29
  private constructor(
29
30
  private readonly fileStore: FileStore,
@@ -127,24 +128,11 @@ export class TxFileStore {
127
128
  const path = `${this.basePath}/txs/${txHash}.bin`;
128
129
  const timer = new Timer();
129
130
 
130
- if (this.recentUploads.has(txHash)) {
131
+ if (!this.recentUploads.addIfAbsent(txHash)) {
131
132
  return;
132
133
  }
133
134
 
134
135
  try {
135
- this.recentUploads.add(txHash);
136
- this.recentUploadsOrder.push(txHash);
137
-
138
- if (this.recentUploadsOrder.length > this.maxRecentUploads) {
139
- // delete old entries in recentUploads
140
- for (const txHashToRemove of this.recentUploadsOrder.splice(
141
- 0,
142
- this.recentUploadsOrder.length - this.maxRecentUploads,
143
- )) {
144
- this.recentUploads.delete(txHashToRemove);
145
- }
146
- }
147
-
148
136
  await retry(
149
137
  () => this.fileStore.save(path, tx.toBuffer(), { compress: true }),
150
138
  `Uploading tx ${txHash}`,
@@ -32,6 +32,11 @@ export class TxProvider implements ITxProvider {
32
32
  this.instrumentation = new TxProviderInstrumentation(client, 'TxProvider');
33
33
  }
34
34
 
35
+ /** Returns whether each tx hash is currently in the local tx pool. */
36
+ public hasTxs(txHashes: TxHash[]): Promise<boolean[]> {
37
+ return this.txPool.hasTxs(txHashes);
38
+ }
39
+
35
40
  /** Returns txs from the tx pool given their hashes.*/
36
41
  public async getAvailableTxs(txHashes: TxHash[]): Promise<{ txs: Tx[]; missingTxs: TxHash[] }> {
37
42
  const response = await this.txPool.getTxsByHash(txHashes);
@@ -5,6 +5,7 @@ import { type Logger, createLogger } from '@aztec/foundation/log';
5
5
  import { retryUntil } from '@aztec/foundation/retry';
6
6
  import { sleep } from '@aztec/foundation/sleep';
7
7
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
8
+ import { GasFees } from '@aztec/stdlib/gas';
8
9
  import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
9
10
  import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
10
11
 
@@ -102,6 +103,7 @@ export async function makeTestP2PClient(
102
103
  proofVerifier,
103
104
  mockWorldState,
104
105
  mockEpochCache,
106
+ { getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
105
107
  'test-p2p-client',
106
108
  undefined,
107
109
  undefined,
@@ -112,6 +114,7 @@ export async function makeTestP2PClient(
112
114
  logger,
113
115
  p2pServiceFactory: mockGossipSubNetwork && getMockPubSubP2PServiceFactory(mockGossipSubNetwork),
114
116
  },
117
+ await l2BlockSource.getInitialHeader().hash(),
115
118
  );
116
119
 
117
120
  return client;
@@ -1,8 +1,10 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
2
  import { type Logger, createLogger } from '@aztec/foundation/log';
3
+ import { sleep } from '@aztec/foundation/sleep';
3
4
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
4
5
  import type { L2BlockSource } from '@aztec/stdlib/block';
5
6
  import type { ContractDataSource } from '@aztec/stdlib/contract';
7
+ import type { BlockMinFeesProvider } from '@aztec/stdlib/gas';
6
8
  import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
7
9
  import type { TelemetryClient } from '@aztec/telemetry-client';
8
10
 
@@ -15,22 +17,18 @@ import {
15
17
  type TopicValidatorResult,
16
18
  TypedEventEmitter,
17
19
  } from '@libp2p/interface';
18
- import type { AddressManager, ConnectionManager } from '@libp2p/interface-internal';
19
20
 
20
21
  import type { P2PConfig } from '../config.js';
21
22
  import type { MemPools } from '../mem_pools/interface.js';
22
23
  import { DummyPeerDiscoveryService, DummyPeerManager, LibP2PService } from '../services/index.js';
23
24
  import type { P2PReqRespConfig } from '../services/reqresp/config.js';
24
25
  import type { ConnectionSampler } from '../services/reqresp/connection-sampler/connection_sampler.js';
25
- import {
26
- type ReqRespInterface,
27
- type ReqRespResponse,
28
- type ReqRespSubProtocol,
29
- type ReqRespSubProtocolHandler,
30
- type ReqRespSubProtocolHandlers,
31
- type ReqRespSubProtocolValidators,
32
- type SubProtocolMap,
33
- responseFromBuffer,
26
+ import type {
27
+ ReqRespInterface,
28
+ ReqRespResponse,
29
+ ReqRespSubProtocol,
30
+ ReqRespSubProtocolHandler,
31
+ ReqRespSubProtocolHandlers,
34
32
  } from '../services/reqresp/interface.js';
35
33
  import { ReqRespStatus } from '../services/reqresp/status.js';
36
34
  import { GossipSubEvent } from '../types/index.js';
@@ -56,6 +54,7 @@ export function getMockPubSubP2PServiceFactory(
56
54
  proofVerifier: ClientProtocolCircuitVerifier;
57
55
  worldStateSynchronizer: WorldStateSynchronizer;
58
56
  peerStore: AztecAsyncKVStore;
57
+ blockMinFeesProvider: BlockMinFeesProvider;
59
58
  telemetry: TelemetryClient;
60
59
  logger: Logger;
61
60
  },
@@ -76,6 +75,7 @@ export function getMockPubSubP2PServiceFactory(
76
75
  deps.epochCache,
77
76
  deps.proofVerifier,
78
77
  deps.worldStateSynchronizer,
78
+ deps.blockMinFeesProvider,
79
79
  deps.telemetry,
80
80
  deps.logger,
81
81
  );
@@ -86,8 +86,8 @@ export function getMockPubSubP2PServiceFactory(
86
86
 
87
87
  /**
88
88
  * Mock implementation of ReqRespInterface that routes requests to other peers' handlers through the mock network.
89
- * When a peer calls sendBatchRequest, the mock iterates over network peers and invokes their registered handler
90
- * for the sub-protocol, simulating the request-response protocol without actual libp2p streams.
89
+ * When a peer calls sendRequestToPeer, the mock looks up the target peer's registered handler for the
90
+ * sub-protocol and invokes it, simulating the request-response protocol without actual libp2p streams.
91
91
  */
92
92
  class MockReqResp implements ReqRespInterface {
93
93
  private handlers: Partial<ReqRespSubProtocolHandlers> = {};
@@ -101,20 +101,14 @@ class MockReqResp implements ReqRespInterface {
101
101
  }
102
102
 
103
103
  updateConfig(_config: Partial<P2PReqRespConfig>): void {}
104
+ setShouldRejectPeer(): void {}
104
105
 
105
- start(
106
- subProtocolHandlers: Partial<ReqRespSubProtocolHandlers>,
107
- _subProtocolValidators: ReqRespSubProtocolValidators,
108
- ): Promise<void> {
106
+ start(subProtocolHandlers: Partial<ReqRespSubProtocolHandlers>): Promise<void> {
109
107
  Object.assign(this.handlers, subProtocolHandlers);
110
108
  return Promise.resolve();
111
109
  }
112
110
 
113
- addSubProtocol(
114
- subProtocol: ReqRespSubProtocol,
115
- handler: ReqRespSubProtocolHandler,
116
- _validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
117
- ): Promise<void> {
111
+ addSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void> {
118
112
  this.handlers[subProtocol] = handler;
119
113
  return Promise.resolve();
120
114
  }
@@ -128,41 +122,6 @@ class MockReqResp implements ReqRespInterface {
128
122
  return this.handlers[subProtocol];
129
123
  }
130
124
 
131
- async sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(
132
- subProtocol: SubProtocol,
133
- requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[],
134
- pinnedPeer: PeerId | undefined,
135
- _timeoutMs?: number,
136
- _maxPeers?: number,
137
- _maxRetryAttempts?: number,
138
- ): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]> {
139
- const responses: InstanceType<SubProtocolMap[SubProtocol]['response']>[] = [];
140
- const peers = this.network.getReqRespPeers().filter(p => !p.peerId.equals(this.peerId));
141
- const targetPeers = pinnedPeer ? peers.filter(p => p.peerId.equals(pinnedPeer)) : peers;
142
-
143
- for (const request of requests) {
144
- const requestBuffer = request.toBuffer();
145
- for (const peer of targetPeers) {
146
- const handler = peer.getHandler(subProtocol);
147
- if (!handler) {
148
- continue;
149
- }
150
- try {
151
- const responseBuffer = await handler(this.peerId, requestBuffer);
152
- if (responseBuffer.length > 0) {
153
- const response = responseFromBuffer(subProtocol, responseBuffer);
154
- responses.push(response as InstanceType<SubProtocolMap[SubProtocol]['response']>);
155
- break;
156
- }
157
- } catch (err) {
158
- this.logger.debug(`Mock reqresp handler error from peer ${peer.peerId}`, { err });
159
- }
160
- }
161
- }
162
-
163
- return responses;
164
- }
165
-
166
125
  async sendRequestToPeer(
167
126
  peerId: PeerId,
168
127
  subProtocol: ReqRespSubProtocol,
@@ -175,7 +134,12 @@ class MockReqResp implements ReqRespInterface {
175
134
  return { status: ReqRespStatus.SUCCESS, data: Buffer.from([]) };
176
135
  }
177
136
  try {
137
+ const delayMs = this.network.getPropagationDelayMs();
138
+ if (delayMs > 0) {
139
+ await sleep(delayMs);
140
+ }
178
141
  const data = await handler(this.peerId, payload);
142
+
179
143
  return { status: ReqRespStatus.SUCCESS, data };
180
144
  } catch {
181
145
  return { status: ReqRespStatus.FAILURE };
@@ -215,11 +179,10 @@ export class MockPubSub implements PubSubLibp2p {
215
179
  pubsub: this.gossipSub,
216
180
  components: {
217
181
  addressManager: {
218
- removeObservedAddr: () => {},
219
182
  addObservedAddr: () => {},
220
183
  confirmObservedAddr: () => {},
221
- } as unknown as AddressManager,
222
- connectionManager: {} as unknown as ConnectionManager,
184
+ removeObservedAddr: () => {},
185
+ },
223
186
  },
224
187
  };
225
188
  }
@@ -251,10 +214,10 @@ class MockGossipSubService extends TypedEventEmitter<GossipsubEvents> implements
251
214
  score: (_peerId: PeerIdStr) => 0,
252
215
  };
253
216
 
254
- publish(topic: TopicStr, data: Uint8Array, _opts?: PublishOpts): Promise<PublishResult> {
217
+ async publish(topic: TopicStr, data: Uint8Array, _opts?: PublishOpts): Promise<PublishResult> {
255
218
  this.logger.debug(`Publishing message on topic ${topic}`, { topic, sender: this.peerId.toString() });
256
- this.network.publishToPeers(topic, data, this.peerId);
257
- return Promise.resolve({ recipients: this.network.getPeers().filter(peer => !this.peerId.equals(peer)) });
219
+ await this.network.publishToPeers(topic, data, this.peerId);
220
+ return { recipients: this.network.getPeers().filter(peer => !this.peerId.equals(peer)) };
258
221
  }
259
222
 
260
223
  receive(msg: GossipsubMessage) {
@@ -290,7 +253,8 @@ class MockGossipSubService extends TypedEventEmitter<GossipsubEvents> implements
290
253
 
291
254
  /**
292
255
  * Mock gossip sub network used for testing.
293
- * All instances of MockGossipSubService connected to the same network will instantly receive the same messages.
256
+ * All instances of MockGossipSubService connected to the same network receive the same messages,
257
+ * optionally delayed by a configurable propagation time.
294
258
  */
295
259
  export class MockGossipSubNetwork {
296
260
  private peers: MockGossipSubService[] = [];
@@ -299,6 +263,15 @@ export class MockGossipSubNetwork {
299
263
 
300
264
  private logger = createLogger('p2p:test:mock-gossipsub-network');
301
265
 
266
+ constructor(
267
+ /** Artificial propagation delay in milliseconds applied to each message delivery. */
268
+ private propagationDelayMs: number = 0,
269
+ ) {}
270
+
271
+ public getPropagationDelayMs(): number {
272
+ return this.propagationDelayMs;
273
+ }
274
+
302
275
  public getPeers(): PeerId[] {
303
276
  return this.peers.map(peer => peer.peerId);
304
277
  }
@@ -315,7 +288,7 @@ export class MockGossipSubNetwork {
315
288
  return this.reqRespPeers;
316
289
  }
317
290
 
318
- public publishToPeers(topic: TopicStr, data: Uint8Array, sender: PeerId): void {
291
+ public async publishToPeers(topic: TopicStr, data: Uint8Array, sender: PeerId): Promise<void> {
319
292
  const msgId = (this.nextMsgId++).toString();
320
293
  this.logger.debug(`Network is distributing message on topic ${topic}`, {
321
294
  topic,
@@ -324,6 +297,10 @@ export class MockGossipSubNetwork {
324
297
  msgId,
325
298
  });
326
299
 
300
+ if (this.propagationDelayMs > 0) {
301
+ await sleep(this.propagationDelayMs);
302
+ }
303
+
327
304
  const gossipSubMsg: GossipsubMessage = { msgId, msg: { type: 'unsigned', topic, data }, propagationSource: sender };
328
305
  for (const peer of this.peers) {
329
306
  if (peer.subscribedTopics.has(topic)) {
@@ -6,6 +6,7 @@ import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
6
6
  import type { L2BlockSource } from '@aztec/stdlib/block';
7
7
  import { type ChainConfig, emptyChainConfig } from '@aztec/stdlib/config';
8
8
  import type { ContractDataSource } from '@aztec/stdlib/contract';
9
+ import { GasFees } from '@aztec/stdlib/gas';
9
10
  import type {
10
11
  ClientProtocolCircuitVerifier,
11
12
  IVCProofVerificationResult,
@@ -30,7 +31,7 @@ import getPort from 'get-port';
30
31
  import { type Libp2p, type Libp2pOptions, createLibp2p } from 'libp2p';
31
32
 
32
33
  import { BootstrapNode } from '../bootstrap/bootstrap.js';
33
- import type { BootnodeConfig, P2PConfig } from '../config.js';
34
+ import { type BootnodeConfig, DEFAULT_PUBLIC_IP_SERVICES, type P2PConfig } from '../config.js';
34
35
  import type { MemPools } from '../mem_pools/interface.js';
35
36
  import { DiscV5Service } from '../services/discv5/discV5_service.js';
36
37
  import { APP_SPECIFIC_WEIGHT } from '../services/gossipsub/scoring.js';
@@ -42,8 +43,6 @@ import {
42
43
  ReqRespSubProtocol,
43
44
  type ReqRespSubProtocolHandlers,
44
45
  type ReqRespSubProtocolRateLimits,
45
- type ReqRespSubProtocolValidators,
46
- noopValidator,
47
46
  } from '../services/reqresp/interface.js';
48
47
  import { pingHandler } from '../services/reqresp/protocols/index.js';
49
48
  import { ReqResp } from '../services/reqresp/reqresp.js';
@@ -76,6 +75,10 @@ export async function createLibp2pNode(
76
75
  identify: identify({
77
76
  protocolPrefix: 'aztec',
78
77
  }),
78
+ components: (components: { connectionManager: any; addressManager: any }) => ({
79
+ connectionManager: components.connectionManager,
80
+ addressManager: components.addressManager,
81
+ }),
79
82
  },
80
83
  };
81
84
 
@@ -153,6 +156,8 @@ export async function createTestLibP2PService(
153
156
  epochCache,
154
157
  );
155
158
 
159
+ reqresp.setShouldRejectPeer(peerId => peerManager.shouldDisableP2PGossip(peerId));
160
+
156
161
  p2pNode.services.pubsub.score.params.appSpecificWeight = APP_SPECIFIC_WEIGHT;
157
162
  p2pNode.services.pubsub.score.params.appSpecificScore = (peerId: string) =>
158
163
  peerManager.shouldDisableP2PGossip(peerId) ? -Infinity : peerManager.getPeerScore(peerId);
@@ -168,6 +173,7 @@ export async function createTestLibP2PService(
168
173
  epochCache,
169
174
  proofVerifier,
170
175
  worldStateSynchronizer,
176
+ { getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
171
177
  telemetry,
172
178
  );
173
179
  }
@@ -187,23 +193,10 @@ export const MOCK_SUB_PROTOCOL_HANDLERS: ReqRespSubProtocolHandlers = {
187
193
  [ReqRespSubProtocol.STATUS]: (_msg: any) => Promise.resolve(Buffer.from('status')),
188
194
  [ReqRespSubProtocol.TX]: (_msg: any) => Promise.resolve(Buffer.from('tx')),
189
195
  [ReqRespSubProtocol.GOODBYE]: (_msg: any) => Promise.resolve(Buffer.from('goodbye')),
190
- [ReqRespSubProtocol.BLOCK]: (_msg: any) => Promise.resolve(Buffer.from('block')),
191
196
  [ReqRespSubProtocol.AUTH]: (_msg: any) => Promise.resolve(Buffer.from('auth')),
192
197
  [ReqRespSubProtocol.BLOCK_TXS]: (_msg: any) => Promise.resolve(Buffer.from('block_txs')),
193
198
  };
194
199
 
195
- // By default, all requests are valid
196
- // If you want to test an invalid response, you can override the validator
197
- export const MOCK_SUB_PROTOCOL_VALIDATORS: ReqRespSubProtocolValidators = {
198
- [ReqRespSubProtocol.PING]: noopValidator,
199
- [ReqRespSubProtocol.STATUS]: noopValidator,
200
- [ReqRespSubProtocol.TX]: noopValidator,
201
- [ReqRespSubProtocol.GOODBYE]: noopValidator,
202
- [ReqRespSubProtocol.BLOCK]: noopValidator,
203
- [ReqRespSubProtocol.AUTH]: noopValidator,
204
- [ReqRespSubProtocol.BLOCK_TXS]: noopValidator,
205
- };
206
-
207
200
  /**
208
201
  * @param numberOfNodes - the number of nodes to create
209
202
  * @returns An array of the created nodes
@@ -216,13 +209,9 @@ export const createNodes = (
216
209
  return timesParallel(numberOfNodes, () => createReqResp(peerScoring, rateLimits));
217
210
  };
218
211
 
219
- export const startNodes = async (
220
- nodes: ReqRespNode[],
221
- subProtocolHandlers = MOCK_SUB_PROTOCOL_HANDLERS,
222
- subProtocolValidators = MOCK_SUB_PROTOCOL_VALIDATORS,
223
- ) => {
212
+ export const startNodes = async (nodes: ReqRespNode[], subProtocolHandlers = MOCK_SUB_PROTOCOL_HANDLERS) => {
224
213
  for (const node of nodes) {
225
- await node.req.start(subProtocolHandlers, subProtocolValidators);
214
+ await node.req.start(subProtocolHandlers);
226
215
  }
227
216
  };
228
217
 
@@ -290,6 +279,7 @@ export function createBootstrapNodeConfig(privateKey: string, port: number, chai
290
279
  bootstrapNodes: [],
291
280
  listenAddress: '127.0.0.1',
292
281
  queryForIp: false,
282
+ publicIpServices: DEFAULT_PUBLIC_IP_SERVICES,
293
283
  };
294
284
  }
295
285
 
@@ -31,6 +31,11 @@ export class TestTxProvider implements ITxProvider {
31
31
  return this.getTxsByHashes(txHashes);
32
32
  }
33
33
 
34
+ /** Returns whether each tx hash is in the seeded collection. */
35
+ hasTxs(txHashes: TxHash[]): Promise<boolean[]> {
36
+ return Promise.resolve(txHashes.map(h => this.txs.has(h.toString())));
37
+ }
38
+
34
39
  /** Get txs for a block proposal, returning any seeded txs that match the requested hashes. */
35
40
  getTxsForBlockProposal(
36
41
  blockProposal: BlockProposal,
@@ -1,14 +1,10 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
+ import type { CheckpointProposalHash } from '@aztec/foundation/branded-types';
2
3
  import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
3
4
  import type { Logger } from '@aztec/foundation/log';
4
5
  import type { L2Block, L2BlockId } from '@aztec/stdlib/block';
5
6
  import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
6
- import type {
7
- BlockProposal,
8
- CheckpointAttestation,
9
- CheckpointProposal,
10
- CheckpointProposalCore,
11
- } from '@aztec/stdlib/p2p';
7
+ import type { BlockProposal, CheckpointAttestation, CheckpointProposalCore } from '@aztec/stdlib/p2p';
12
8
  import { type BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
13
9
 
14
10
  import EventEmitter from 'events';
@@ -123,6 +119,10 @@ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
123
119
  return Promise.resolve();
124
120
  }
125
121
 
122
+ unprotectTxs(_txHashes: TxHash[], _slotNumber: SlotNumber): Promise<void> {
123
+ return Promise.resolve();
124
+ }
125
+
126
126
  handlePrunedBlocks(_latestBlock: L2BlockId, _options?: { deleteAllTxs?: boolean }): Promise<void> {
127
127
  return Promise.resolve();
128
128
  }
@@ -171,6 +171,10 @@ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
171
171
  return Promise.resolve(this.txsByHash.size);
172
172
  }
173
173
 
174
+ async hasEligiblePendingTxs(minCount: number): Promise<boolean> {
175
+ return (await this.getPendingTxCount()) >= minCount;
176
+ }
177
+
174
178
  getMinedTxHashes(): Promise<[TxHash, L2BlockId][]> {
175
179
  return Promise.resolve([]);
176
180
  }
@@ -214,6 +218,7 @@ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
214
218
  */
215
219
  export class InMemoryAttestationPool {
216
220
  private proposals = new Map<string, BlockProposal>();
221
+ private checkpoints = new Map<SlotNumber, CheckpointProposalCore[]>();
217
222
 
218
223
  tryAddBlockProposal(blockProposal: BlockProposal): Promise<TryAddResult> {
219
224
  const id = blockProposal.archive.toString();
@@ -225,16 +230,33 @@ export class InMemoryAttestationPool {
225
230
  return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
226
231
  }
227
232
 
228
- getBlockProposal(id: string): Promise<BlockProposal | undefined> {
233
+ getBlockProposalByArchive(id: string): Promise<BlockProposal | undefined> {
229
234
  return Promise.resolve(this.proposals.get(id));
230
235
  }
231
236
 
232
- tryAddCheckpointProposal(_proposal: CheckpointProposal): Promise<TryAddResult> {
237
+ tryAddCheckpointProposal(proposal: CheckpointProposalCore): Promise<TryAddResult> {
238
+ const proposals = this.checkpoints.get(proposal.slotNumber) ?? [];
239
+ proposals.push(proposal);
240
+ this.checkpoints.set(proposal.slotNumber, proposals);
233
241
  return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
234
242
  }
235
243
 
236
- getCheckpointProposal(_id: string): Promise<CheckpointProposalCore | undefined> {
237
- return Promise.resolve(undefined);
244
+ getCheckpointProposal(slot: SlotNumber): Promise<CheckpointProposalCore | undefined> {
245
+ return Promise.resolve(this.checkpoints.get(slot)?.[0]);
246
+ }
247
+
248
+ hasCheckpointProposalForSlot(slot: SlotNumber): Promise<boolean> {
249
+ return Promise.resolve(this.checkpoints.has(slot));
250
+ }
251
+
252
+ getProposalsForSlot(slot: SlotNumber): Promise<{
253
+ blockProposals: BlockProposal[];
254
+ checkpointProposals: CheckpointProposalCore[];
255
+ }> {
256
+ return Promise.resolve({
257
+ blockProposals: [...this.proposals.values()].filter(proposal => proposal.slotNumber === slot),
258
+ checkpointProposals: this.checkpoints.get(slot) ?? [],
259
+ });
238
260
  }
239
261
 
240
262
  async addOwnCheckpointAttestations(_attestations: CheckpointAttestation[]): Promise<void> {}
@@ -247,7 +269,7 @@ export class InMemoryAttestationPool {
247
269
 
248
270
  getCheckpointAttestationsForSlotAndProposal(
249
271
  _slot: SlotNumber,
250
- _proposalId: string,
272
+ _proposalPayloadHash: CheckpointProposalHash,
251
273
  ): Promise<CheckpointAttestation[]> {
252
274
  return Promise.resolve([]);
253
275
  }
@@ -261,11 +283,12 @@ export class InMemoryAttestationPool {
261
283
  }
262
284
 
263
285
  isEmpty(): Promise<boolean> {
264
- return Promise.resolve(this.proposals.size === 0);
286
+ return Promise.resolve(this.proposals.size === 0 && this.checkpoints.size === 0);
265
287
  }
266
288
 
267
289
  resetState(): void {
268
290
  this.proposals.clear();
291
+ this.checkpoints.clear();
269
292
  }
270
293
  }
271
294
 
@@ -286,7 +309,6 @@ export function createMockEpochCache(): EpochCacheInterface {
286
309
  ts: 0n,
287
310
  nowMs: 0n,
288
311
  }),
289
- isProposerPipeliningEnabled: () => false,
290
312
  computeProposerIndex: () => 0n,
291
313
  getCurrentAndNextSlot: () => ({ currentSlot: SlotNumber.ZERO, nextSlot: SlotNumber.ZERO }),
292
314
  getTargetAndNextSlot: () => ({ targetSlot: SlotNumber.ZERO, nextSlot: SlotNumber.ZERO }),
@@ -366,19 +388,6 @@ export function installUnlimitedRateLimitsOnReqResp(reqResp: any): void {
366
388
  */
367
389
  export type DistributionPattern = 'uniform' | 'sparse' | 'pinned-only';
368
390
 
369
- /**
370
- * Collector implementation types for benchmarking.
371
- */
372
- export type CollectorType = 'batch-requester' | 'send-batch-request';
373
-
374
- /**
375
- * Display names for collector types (for output/logging only).
376
- */
377
- export const COLLECTOR_DISPLAY_NAMES: Record<CollectorType, string> = {
378
- 'batch-requester': 'batch-requester (new)',
379
- 'send-batch-request': 'send-batch-request (old)',
380
- };
381
-
382
391
  /**
383
392
  * Benchmark timing constants.
384
393
  */