@aztec/p2p 5.0.0-private.20260319 → 5.0.0-rc.2

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 (411) hide show
  1. package/README.md +4 -1
  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 +43 -11
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +33 -19
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +100 -44
  13. package/dest/config.d.ts +137 -107
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +64 -23
  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 +1 -20
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +0 -21
  22. package/dest/index.d.ts +1 -2
  23. package/dest/index.d.ts.map +1 -1
  24. package/dest/index.js +0 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +98 -56
  26. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool.js +265 -196
  28. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +175 -59
  31. package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
  32. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/mocks.js +6 -4
  34. package/dest/mem_pools/index.d.ts +1 -2
  35. package/dest/mem_pools/index.d.ts.map +1 -1
  36. package/dest/mem_pools/instrumentation.d.ts +1 -1
  37. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  38. package/dest/mem_pools/instrumentation.js +17 -1
  39. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +1 -5
  40. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +1 -7
  42. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +3 -3
  43. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +6 -6
  45. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +1 -1
  46. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  47. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  48. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  49. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  50. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  51. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  52. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  53. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +22 -5
  54. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  55. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +5 -2
  56. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  57. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +13 -6
  58. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +7 -1
  59. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  60. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +10 -0
  61. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +8 -3
  62. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  63. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +7 -4
  64. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +8 -3
  65. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  66. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +153 -111
  67. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -3
  68. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  69. package/dest/msg_validators/attestation_validator/attestation_validator.js +38 -16
  70. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  71. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  72. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  73. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +8 -3
  74. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  75. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +2 -2
  76. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +8 -3
  77. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  78. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +8 -2
  79. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +25 -3
  80. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  81. package/dest/msg_validators/proposal_validator/proposal_validator.js +77 -14
  82. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  83. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  84. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  85. package/dest/msg_validators/tx_validator/allowed_public_setup.js +3 -3
  86. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  87. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  88. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  89. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  90. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  91. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  92. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  93. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  94. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  95. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  96. package/dest/msg_validators/tx_validator/factory.d.ts +14 -15
  97. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/factory.js +36 -17
  99. package/dest/msg_validators/tx_validator/gas_validator.d.ts +47 -10
  100. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/gas_validator.js +65 -48
  102. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  103. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  104. package/dest/msg_validators/tx_validator/index.js +2 -0
  105. package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
  106. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  107. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  108. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  109. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  110. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  111. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  112. package/dest/services/data_store.d.ts +1 -1
  113. package/dest/services/data_store.d.ts.map +1 -1
  114. package/dest/services/data_store.js +5 -5
  115. package/dest/services/discv5/discV5_service.d.ts +13 -2
  116. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  117. package/dest/services/discv5/discV5_service.js +119 -23
  118. package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
  119. package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
  120. package/dest/services/discv5/persisted_enr_store.js +145 -0
  121. package/dest/services/dummy_service.d.ts +15 -15
  122. package/dest/services/dummy_service.d.ts.map +1 -1
  123. package/dest/services/dummy_service.js +15 -16
  124. package/dest/services/encoding.d.ts +8 -8
  125. package/dest/services/encoding.d.ts.map +1 -1
  126. package/dest/services/encoding.js +11 -15
  127. package/dest/services/gossipsub/topic_score_params.d.ts +6 -12
  128. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  129. package/dest/services/gossipsub/topic_score_params.js +4 -14
  130. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  131. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  132. package/dest/services/libp2p/instrumentation.js +14 -0
  133. package/dest/services/libp2p/libp2p_service.d.ts +44 -39
  134. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  135. package/dest/services/libp2p/libp2p_service.js +383 -278
  136. package/dest/services/peer-manager/peer_manager.d.ts +20 -3
  137. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  138. package/dest/services/peer-manager/peer_manager.js +79 -23
  139. package/dest/services/peer-manager/peer_scoring.d.ts +34 -2
  140. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  141. package/dest/services/peer-manager/peer_scoring.js +102 -13
  142. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +1 -8
  143. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  144. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +38 -44
  145. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +8 -5
  146. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  147. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  148. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  149. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  150. package/dest/services/reqresp/config.d.ts +3 -3
  151. package/dest/services/reqresp/config.d.ts.map +1 -1
  152. package/dest/services/reqresp/interface.d.ts +16 -18
  153. package/dest/services/reqresp/interface.d.ts.map +1 -1
  154. package/dest/services/reqresp/interface.js +10 -20
  155. package/dest/services/reqresp/metrics.d.ts +1 -1
  156. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  157. package/dest/services/reqresp/metrics.js +0 -1
  158. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  159. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  160. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  161. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  162. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  163. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
  164. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
  165. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  166. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
  167. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  168. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  169. package/dest/services/reqresp/protocols/index.js +0 -1
  170. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  171. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  172. package/dest/services/reqresp/protocols/tx.js +1 -3
  173. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  174. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  175. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  176. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  177. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  178. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  179. package/dest/services/reqresp/reqresp.d.ts +7 -29
  180. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  181. package/dest/services/reqresp/reqresp.js +26 -207
  182. package/dest/services/service.d.ts +25 -12
  183. package/dest/services/service.d.ts.map +1 -1
  184. package/dest/services/tx_collection/config.d.ts +2 -23
  185. package/dest/services/tx_collection/config.d.ts.map +1 -1
  186. package/dest/services/tx_collection/config.js +2 -55
  187. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  188. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  189. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  190. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  191. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  192. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  193. package/dest/services/tx_collection/index.d.ts +2 -3
  194. package/dest/services/tx_collection/index.d.ts.map +1 -1
  195. package/dest/services/tx_collection/index.js +0 -1
  196. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  197. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  198. package/dest/services/tx_collection/instrumentation.js +0 -2
  199. package/dest/services/tx_collection/tx_collection.d.ts +35 -51
  200. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  201. package/dest/services/tx_collection/tx_collection.js +275 -119
  202. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  203. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  204. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  205. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  206. package/dest/services/tx_collection/tx_source.js +13 -8
  207. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  208. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  209. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  210. package/dest/services/tx_provider.d.ts +3 -1
  211. package/dest/services/tx_provider.d.ts.map +1 -1
  212. package/dest/services/tx_provider.js +3 -0
  213. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  214. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  215. package/dest/test-helpers/make-test-p2p-clients.js +5 -2
  216. package/dest/test-helpers/mock-pubsub.d.ts +23 -9
  217. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  218. package/dest/test-helpers/mock-pubsub.js +44 -44
  219. package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
  220. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  221. package/dest/test-helpers/reqresp-nodes.js +16 -18
  222. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  223. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  224. package/dest/test-helpers/test_tx_provider.js +3 -0
  225. package/dest/test-helpers/testbench-utils.d.ts +14 -14
  226. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  227. package/dest/test-helpers/testbench-utils.js +25 -13
  228. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  229. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  230. package/dest/testbench/p2p_client_testbench_worker.js +102 -41
  231. package/dest/testbench/worker_client_manager.d.ts +10 -6
  232. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  233. package/dest/testbench/worker_client_manager.js +51 -9
  234. package/dest/util.d.ts +11 -6
  235. package/dest/util.d.ts.map +1 -1
  236. package/dest/util.js +35 -14
  237. package/dest/versioning.d.ts +3 -6
  238. package/dest/versioning.d.ts.map +1 -1
  239. package/dest/versioning.js +3 -24
  240. package/package.json +16 -16
  241. package/src/bootstrap/bootstrap.ts +17 -3
  242. package/src/client/factory.ts +52 -24
  243. package/src/client/interface.ts +38 -17
  244. package/src/client/p2p_client.ts +118 -76
  245. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  246. package/src/config.ts +130 -31
  247. package/src/errors/p2p-service.error.ts +11 -0
  248. package/src/errors/reqresp.error.ts +0 -25
  249. package/src/index.ts +0 -1
  250. package/src/mem_pools/attestation_pool/attestation_pool.ts +319 -238
  251. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +198 -62
  252. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  253. package/src/mem_pools/index.ts +0 -3
  254. package/src/mem_pools/instrumentation.ts +5 -1
  255. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
  256. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
  257. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +1 -1
  258. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  259. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  260. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  261. package/src/mem_pools/tx_pool_v2/interfaces.ts +18 -4
  262. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +20 -8
  263. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +12 -0
  264. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +8 -4
  265. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +163 -117
  266. package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -15
  267. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +15 -7
  268. package/src/msg_validators/proposal_validator/README.md +1 -1
  269. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +15 -3
  270. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +26 -3
  271. package/src/msg_validators/proposal_validator/proposal_validator.ts +89 -11
  272. package/src/msg_validators/tx_validator/README.md +13 -3
  273. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  274. package/src/msg_validators/tx_validator/allowed_public_setup.ts +3 -3
  275. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  276. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  277. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  278. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  279. package/src/msg_validators/tx_validator/factory.ts +44 -20
  280. package/src/msg_validators/tx_validator/gas_validator.ts +99 -54
  281. package/src/msg_validators/tx_validator/index.ts +2 -0
  282. package/src/msg_validators/tx_validator/phases_validator.ts +3 -3
  283. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  284. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  285. package/src/services/data_store.ts +5 -13
  286. package/src/services/discv5/discV5_service.ts +126 -14
  287. package/src/services/discv5/persisted_enr_store.ts +158 -0
  288. package/src/services/dummy_service.ts +20 -39
  289. package/src/services/encoding.ts +11 -21
  290. package/src/services/gossipsub/README.md +33 -11
  291. package/src/services/gossipsub/topic_score_params.ts +9 -18
  292. package/src/services/libp2p/instrumentation.ts +14 -0
  293. package/src/services/libp2p/libp2p_service.ts +436 -311
  294. package/src/services/peer-manager/peer_manager.ts +86 -22
  295. package/src/services/peer-manager/peer_scoring.ts +102 -8
  296. package/src/services/reqresp/README.md +0 -14
  297. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +42 -52
  298. package/src/services/reqresp/batch-tx-requester/interface.ts +11 -4
  299. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  300. package/src/services/reqresp/config.ts +2 -2
  301. package/src/services/reqresp/interface.ts +21 -47
  302. package/src/services/reqresp/metrics.ts +0 -1
  303. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  304. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
  305. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
  306. package/src/services/reqresp/protocols/index.ts +0 -1
  307. package/src/services/reqresp/protocols/tx.ts +1 -3
  308. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  309. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  310. package/src/services/reqresp/reqresp.ts +29 -252
  311. package/src/services/service.ts +31 -28
  312. package/src/services/tx_collection/config.ts +3 -80
  313. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  314. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  315. package/src/services/tx_collection/index.ts +1 -6
  316. package/src/services/tx_collection/instrumentation.ts +1 -7
  317. package/src/services/tx_collection/tx_collection.ts +330 -173
  318. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  319. package/src/services/tx_collection/tx_source.ts +10 -8
  320. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  321. package/src/services/tx_provider.ts +5 -0
  322. package/src/test-helpers/make-test-p2p-clients.ts +3 -0
  323. package/src/test-helpers/mock-pubsub.ts +46 -60
  324. package/src/test-helpers/reqresp-nodes.ts +12 -22
  325. package/src/test-helpers/test_tx_provider.ts +5 -0
  326. package/src/test-helpers/testbench-utils.ts +31 -26
  327. package/src/testbench/p2p_client_testbench_worker.ts +110 -55
  328. package/src/testbench/worker_client_manager.ts +59 -20
  329. package/src/util.ts +32 -17
  330. package/src/versioning.ts +3 -33
  331. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  332. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  333. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -305
  334. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  335. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  336. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  337. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  338. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  339. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  340. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  341. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  342. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  343. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  344. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  345. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  346. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  347. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  348. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -123
  349. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  350. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  351. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  352. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  353. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  354. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  355. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  356. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  357. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  358. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  359. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  360. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  361. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  362. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  363. package/dest/mem_pools/tx_pool/index.js +0 -2
  364. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  365. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  366. package/dest/mem_pools/tx_pool/priority.js +0 -15
  367. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  368. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  369. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  370. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  371. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  372. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -402
  373. package/dest/msg_validators/clock_tolerance.d.ts +0 -21
  374. package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
  375. package/dest/msg_validators/clock_tolerance.js +0 -38
  376. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  377. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  378. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  379. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  380. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  381. package/dest/services/reqresp/protocols/block.js +0 -32
  382. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -51
  383. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  384. package/dest/services/tx_collection/fast_tx_collection.js +0 -311
  385. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -48
  386. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  387. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  388. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  389. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  390. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  391. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -344
  392. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  393. package/src/mem_pools/tx_pool/README.md +0 -270
  394. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  395. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  396. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  397. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -163
  398. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  399. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  400. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  401. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  402. package/src/mem_pools/tx_pool/index.ts +0 -2
  403. package/src/mem_pools/tx_pool/priority.ts +0 -20
  404. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  405. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -321
  406. package/src/msg_validators/clock_tolerance.ts +0 -52
  407. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  408. package/src/services/reqresp/protocols/block.ts +0 -37
  409. package/src/services/tx_collection/fast_tx_collection.ts +0 -361
  410. package/src/services/tx_collection/proposal_tx_collector.ts +0 -108
  411. package/src/services/tx_collection/slow_tx_collection.ts +0 -266
@@ -2,7 +2,7 @@ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
2
2
  import { protocolContractsHash } from '@aztec/protocol-contracts';
3
3
  import type { ChainConfig } from '@aztec/stdlib/config';
4
4
  import { type AztecNode, createAztecNodeClient } from '@aztec/stdlib/interfaces/client';
5
- import type { Tx, TxHash } from '@aztec/stdlib/tx';
5
+ import type { Tx, TxHash, TxValidator } from '@aztec/stdlib/tx';
6
6
  import { type ComponentsVersions, getComponentsVersionsFromConfig } from '@aztec/stdlib/versioning';
7
7
  import { makeTracedFetch } from '@aztec/telemetry-client';
8
8
 
@@ -16,12 +16,13 @@ export interface TxSource {
16
16
  export class NodeRpcTxSource implements TxSource {
17
17
  constructor(
18
18
  private readonly client: Pick<AztecNode, 'getTxsByHash'>,
19
+ private readonly txValidator: TxValidator,
19
20
  private readonly info: string,
20
21
  ) {}
21
22
 
22
- public static fromUrl(nodeUrl: string, versions: ComponentsVersions): NodeRpcTxSource {
23
+ public static fromUrl(nodeUrl: string, txValidator: TxValidator, versions: ComponentsVersions): NodeRpcTxSource {
23
24
  const client = createAztecNodeClient(nodeUrl, versions, makeTracedFetch([1, 2, 3], false));
24
- return new NodeRpcTxSource(client, nodeUrl);
25
+ return new NodeRpcTxSource(client, txValidator, nodeUrl);
25
26
  }
26
27
 
27
28
  public getInfo() {
@@ -29,7 +30,8 @@ export class NodeRpcTxSource implements TxSource {
29
30
  }
30
31
 
31
32
  public async getTxsByHash(txHashes: TxHash[]): Promise<TxSourceCollectionResult> {
32
- return this.verifyTxs(await this.client.getTxsByHash(txHashes));
33
+ // Collected txs feed block validation and proving, so we need their proofs.
34
+ return this.verifyTxs(await this.client.getTxsByHash(txHashes, { includeProof: true }));
33
35
  }
34
36
 
35
37
  private async verifyTxs(txs: Tx[]): Promise<TxSourceCollectionResult> {
@@ -38,8 +40,8 @@ export class NodeRpcTxSource implements TxSource {
38
40
  const invalidTxHashes: string[] = [];
39
41
  await Promise.all(
40
42
  txs.map(async tx => {
41
- const isValid = await tx.validateTxHash();
42
- if (isValid) {
43
+ const validation = await this.txValidator.validateTx(tx);
44
+ if (validation.result === 'valid') {
43
45
  validTxs.push(tx);
44
46
  } else {
45
47
  invalidTxHashes.push(tx.getTxHash().toString());
@@ -50,7 +52,7 @@ export class NodeRpcTxSource implements TxSource {
50
52
  }
51
53
  }
52
54
 
53
- export function createNodeRpcTxSources(urls: string[], chainConfig: ChainConfig) {
55
+ export function createNodeRpcTxSources(urls: string[], txValidator: TxValidator, chainConfig: ChainConfig) {
54
56
  const versions = getComponentsVersionsFromConfig(chainConfig, protocolContractsHash, getVKTreeRoot());
55
- return urls.map(url => NodeRpcTxSource.fromUrl(url, versions));
57
+ return urls.map(url => NodeRpcTxSource.fromUrl(url, txValidator, versions));
56
58
  }
@@ -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
 
@@ -21,15 +23,12 @@ import type { MemPools } from '../mem_pools/interface.js';
21
23
  import { DummyPeerDiscoveryService, DummyPeerManager, LibP2PService } from '../services/index.js';
22
24
  import type { P2PReqRespConfig } from '../services/reqresp/config.js';
23
25
  import type { ConnectionSampler } from '../services/reqresp/connection-sampler/connection_sampler.js';
24
- import {
25
- type ReqRespInterface,
26
- type ReqRespResponse,
27
- type ReqRespSubProtocol,
28
- type ReqRespSubProtocolHandler,
29
- type ReqRespSubProtocolHandlers,
30
- type ReqRespSubProtocolValidators,
31
- type SubProtocolMap,
32
- responseFromBuffer,
26
+ import type {
27
+ ReqRespInterface,
28
+ ReqRespResponse,
29
+ ReqRespSubProtocol,
30
+ ReqRespSubProtocolHandler,
31
+ ReqRespSubProtocolHandlers,
33
32
  } from '../services/reqresp/interface.js';
34
33
  import { ReqRespStatus } from '../services/reqresp/status.js';
35
34
  import { GossipSubEvent } from '../types/index.js';
@@ -55,6 +54,7 @@ export function getMockPubSubP2PServiceFactory(
55
54
  proofVerifier: ClientProtocolCircuitVerifier;
56
55
  worldStateSynchronizer: WorldStateSynchronizer;
57
56
  peerStore: AztecAsyncKVStore;
57
+ blockMinFeesProvider: BlockMinFeesProvider;
58
58
  telemetry: TelemetryClient;
59
59
  logger: Logger;
60
60
  },
@@ -75,6 +75,7 @@ export function getMockPubSubP2PServiceFactory(
75
75
  deps.epochCache,
76
76
  deps.proofVerifier,
77
77
  deps.worldStateSynchronizer,
78
+ deps.blockMinFeesProvider,
78
79
  deps.telemetry,
79
80
  deps.logger,
80
81
  );
@@ -85,8 +86,8 @@ export function getMockPubSubP2PServiceFactory(
85
86
 
86
87
  /**
87
88
  * Mock implementation of ReqRespInterface that routes requests to other peers' handlers through the mock network.
88
- * When a peer calls sendBatchRequest, the mock iterates over network peers and invokes their registered handler
89
- * 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.
90
91
  */
91
92
  class MockReqResp implements ReqRespInterface {
92
93
  private handlers: Partial<ReqRespSubProtocolHandlers> = {};
@@ -100,20 +101,14 @@ class MockReqResp implements ReqRespInterface {
100
101
  }
101
102
 
102
103
  updateConfig(_config: Partial<P2PReqRespConfig>): void {}
104
+ setShouldRejectPeer(): void {}
103
105
 
104
- start(
105
- subProtocolHandlers: Partial<ReqRespSubProtocolHandlers>,
106
- _subProtocolValidators: ReqRespSubProtocolValidators,
107
- ): Promise<void> {
106
+ start(subProtocolHandlers: Partial<ReqRespSubProtocolHandlers>): Promise<void> {
108
107
  Object.assign(this.handlers, subProtocolHandlers);
109
108
  return Promise.resolve();
110
109
  }
111
110
 
112
- addSubProtocol(
113
- subProtocol: ReqRespSubProtocol,
114
- handler: ReqRespSubProtocolHandler,
115
- _validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
116
- ): Promise<void> {
111
+ addSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void> {
117
112
  this.handlers[subProtocol] = handler;
118
113
  return Promise.resolve();
119
114
  }
@@ -127,41 +122,6 @@ class MockReqResp implements ReqRespInterface {
127
122
  return this.handlers[subProtocol];
128
123
  }
129
124
 
130
- async sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(
131
- subProtocol: SubProtocol,
132
- requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[],
133
- pinnedPeer: PeerId | undefined,
134
- _timeoutMs?: number,
135
- _maxPeers?: number,
136
- _maxRetryAttempts?: number,
137
- ): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]> {
138
- const responses: InstanceType<SubProtocolMap[SubProtocol]['response']>[] = [];
139
- const peers = this.network.getReqRespPeers().filter(p => !p.peerId.equals(this.peerId));
140
- const targetPeers = pinnedPeer ? peers.filter(p => p.peerId.equals(pinnedPeer)) : peers;
141
-
142
- for (const request of requests) {
143
- const requestBuffer = request.toBuffer();
144
- for (const peer of targetPeers) {
145
- const handler = peer.getHandler(subProtocol);
146
- if (!handler) {
147
- continue;
148
- }
149
- try {
150
- const responseBuffer = await handler(this.peerId, requestBuffer);
151
- if (responseBuffer.length > 0) {
152
- const response = responseFromBuffer(subProtocol, responseBuffer);
153
- responses.push(response as InstanceType<SubProtocolMap[SubProtocol]['response']>);
154
- break;
155
- }
156
- } catch (err) {
157
- this.logger.debug(`Mock reqresp handler error from peer ${peer.peerId}`, { err });
158
- }
159
- }
160
- }
161
-
162
- return responses;
163
- }
164
-
165
125
  async sendRequestToPeer(
166
126
  peerId: PeerId,
167
127
  subProtocol: ReqRespSubProtocol,
@@ -174,7 +134,12 @@ class MockReqResp implements ReqRespInterface {
174
134
  return { status: ReqRespStatus.SUCCESS, data: Buffer.from([]) };
175
135
  }
176
136
  try {
137
+ const delayMs = this.network.getPropagationDelayMs();
138
+ if (delayMs > 0) {
139
+ await sleep(delayMs);
140
+ }
177
141
  const data = await handler(this.peerId, payload);
142
+
178
143
  return { status: ReqRespStatus.SUCCESS, data };
179
144
  } catch {
180
145
  return { status: ReqRespStatus.FAILURE };
@@ -212,6 +177,13 @@ export class MockPubSub implements PubSubLibp2p {
212
177
  get services() {
213
178
  return {
214
179
  pubsub: this.gossipSub,
180
+ components: {
181
+ addressManager: {
182
+ addObservedAddr: () => {},
183
+ confirmObservedAddr: () => {},
184
+ removeObservedAddr: () => {},
185
+ },
186
+ },
215
187
  };
216
188
  }
217
189
 
@@ -242,10 +214,10 @@ class MockGossipSubService extends TypedEventEmitter<GossipsubEvents> implements
242
214
  score: (_peerId: PeerIdStr) => 0,
243
215
  };
244
216
 
245
- publish(topic: TopicStr, data: Uint8Array, _opts?: PublishOpts): Promise<PublishResult> {
217
+ async publish(topic: TopicStr, data: Uint8Array, _opts?: PublishOpts): Promise<PublishResult> {
246
218
  this.logger.debug(`Publishing message on topic ${topic}`, { topic, sender: this.peerId.toString() });
247
- this.network.publishToPeers(topic, data, this.peerId);
248
- 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)) };
249
221
  }
250
222
 
251
223
  receive(msg: GossipsubMessage) {
@@ -281,7 +253,8 @@ class MockGossipSubService extends TypedEventEmitter<GossipsubEvents> implements
281
253
 
282
254
  /**
283
255
  * Mock gossip sub network used for testing.
284
- * 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.
285
258
  */
286
259
  export class MockGossipSubNetwork {
287
260
  private peers: MockGossipSubService[] = [];
@@ -290,6 +263,15 @@ export class MockGossipSubNetwork {
290
263
 
291
264
  private logger = createLogger('p2p:test:mock-gossipsub-network');
292
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
+
293
275
  public getPeers(): PeerId[] {
294
276
  return this.peers.map(peer => peer.peerId);
295
277
  }
@@ -306,7 +288,7 @@ export class MockGossipSubNetwork {
306
288
  return this.reqRespPeers;
307
289
  }
308
290
 
309
- public publishToPeers(topic: TopicStr, data: Uint8Array, sender: PeerId): void {
291
+ public async publishToPeers(topic: TopicStr, data: Uint8Array, sender: PeerId): Promise<void> {
310
292
  const msgId = (this.nextMsgId++).toString();
311
293
  this.logger.debug(`Network is distributing message on topic ${topic}`, {
312
294
  topic,
@@ -315,6 +297,10 @@ export class MockGossipSubNetwork {
315
297
  msgId,
316
298
  });
317
299
 
300
+ if (this.propagationDelayMs > 0) {
301
+ await sleep(this.propagationDelayMs);
302
+ }
303
+
318
304
  const gossipSubMsg: GossipsubMessage = { msgId, msg: { type: 'unsigned', topic, data }, propagationSource: sender };
319
305
  for (const peer of this.peers) {
320
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
  }
@@ -214,6 +214,7 @@ export class InMemoryTxPool extends EventEmitter implements TxPoolV2 {
214
214
  */
215
215
  export class InMemoryAttestationPool {
216
216
  private proposals = new Map<string, BlockProposal>();
217
+ private checkpoints = new Map<SlotNumber, CheckpointProposalCore[]>();
217
218
 
218
219
  tryAddBlockProposal(blockProposal: BlockProposal): Promise<TryAddResult> {
219
220
  const id = blockProposal.archive.toString();
@@ -225,16 +226,33 @@ export class InMemoryAttestationPool {
225
226
  return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
226
227
  }
227
228
 
228
- getBlockProposal(id: string): Promise<BlockProposal | undefined> {
229
+ getBlockProposalByArchive(id: string): Promise<BlockProposal | undefined> {
229
230
  return Promise.resolve(this.proposals.get(id));
230
231
  }
231
232
 
232
- tryAddCheckpointProposal(_proposal: CheckpointProposal): Promise<TryAddResult> {
233
+ tryAddCheckpointProposal(proposal: CheckpointProposalCore): Promise<TryAddResult> {
234
+ const proposals = this.checkpoints.get(proposal.slotNumber) ?? [];
235
+ proposals.push(proposal);
236
+ this.checkpoints.set(proposal.slotNumber, proposals);
233
237
  return Promise.resolve({ added: true, alreadyExists: false, count: 1 });
234
238
  }
235
239
 
236
- getCheckpointProposal(_id: string): Promise<CheckpointProposalCore | undefined> {
237
- return Promise.resolve(undefined);
240
+ getCheckpointProposal(slot: SlotNumber): Promise<CheckpointProposalCore | undefined> {
241
+ return Promise.resolve(this.checkpoints.get(slot)?.[0]);
242
+ }
243
+
244
+ hasCheckpointProposalForSlot(slot: SlotNumber): Promise<boolean> {
245
+ return Promise.resolve(this.checkpoints.has(slot));
246
+ }
247
+
248
+ getProposalsForSlot(slot: SlotNumber): Promise<{
249
+ blockProposals: BlockProposal[];
250
+ checkpointProposals: CheckpointProposalCore[];
251
+ }> {
252
+ return Promise.resolve({
253
+ blockProposals: [...this.proposals.values()].filter(proposal => proposal.slotNumber === slot),
254
+ checkpointProposals: this.checkpoints.get(slot) ?? [],
255
+ });
238
256
  }
239
257
 
240
258
  async addOwnCheckpointAttestations(_attestations: CheckpointAttestation[]): Promise<void> {}
@@ -247,7 +265,7 @@ export class InMemoryAttestationPool {
247
265
 
248
266
  getCheckpointAttestationsForSlotAndProposal(
249
267
  _slot: SlotNumber,
250
- _proposalId: string,
268
+ _proposalPayloadHash: CheckpointProposalHash,
251
269
  ): Promise<CheckpointAttestation[]> {
252
270
  return Promise.resolve([]);
253
271
  }
@@ -261,11 +279,12 @@ export class InMemoryAttestationPool {
261
279
  }
262
280
 
263
281
  isEmpty(): Promise<boolean> {
264
- return Promise.resolve(this.proposals.size === 0);
282
+ return Promise.resolve(this.proposals.size === 0 && this.checkpoints.size === 0);
265
283
  }
266
284
 
267
285
  resetState(): void {
268
286
  this.proposals.clear();
287
+ this.checkpoints.clear();
269
288
  }
270
289
  }
271
290
 
@@ -286,7 +305,6 @@ export function createMockEpochCache(): EpochCacheInterface {
286
305
  ts: 0n,
287
306
  nowMs: 0n,
288
307
  }),
289
- isProposerPipeliningEnabled: () => false,
290
308
  computeProposerIndex: () => 0n,
291
309
  getCurrentAndNextSlot: () => ({ currentSlot: SlotNumber.ZERO, nextSlot: SlotNumber.ZERO }),
292
310
  getTargetAndNextSlot: () => ({ targetSlot: SlotNumber.ZERO, nextSlot: SlotNumber.ZERO }),
@@ -366,19 +384,6 @@ export function installUnlimitedRateLimitsOnReqResp(reqResp: any): void {
366
384
  */
367
385
  export type DistributionPattern = 'uniform' | 'sparse' | 'pinned-only';
368
386
 
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
387
  /**
383
388
  * Benchmark timing constants.
384
389
  */