@aztec/p2p 0.0.1-commit.7b97ef96e → 0.0.1-commit.7cbc774

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 (463) hide show
  1. package/README.md +129 -3
  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 +9 -1
  5. package/dest/client/factory.d.ts +7 -7
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +39 -32
  8. package/dest/client/interface.d.ts +19 -17
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +16 -20
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +94 -105
  13. package/dest/config.d.ts +154 -106
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +134 -40
  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 +99 -59
  26. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool.js +267 -197
  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 +181 -65
  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 +4 -2
  37. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  38. package/dest/mem_pools/instrumentation.js +33 -15
  39. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  40. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +3 -2
  42. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +1 -1
  43. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +2 -0
  45. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  46. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  47. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  48. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  49. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  50. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  51. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +7 -1
  52. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +4 -4
  54. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +2 -2
  55. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
  56. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +10 -6
  57. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
  58. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
  59. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
  60. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
  61. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
  62. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +2 -2
  63. package/dest/mem_pools/tx_pool_v2/index.d.ts +2 -2
  64. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -1
  65. package/dest/mem_pools/tx_pool_v2/index.js +1 -1
  66. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +18 -9
  67. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  68. package/dest/mem_pools/tx_pool_v2/interfaces.js +3 -1
  69. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +51 -11
  70. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  71. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +90 -19
  72. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
  73. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  74. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +26 -44
  75. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +5 -3
  76. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  77. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +6 -0
  78. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +3 -2
  79. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  80. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +256 -220
  81. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
  82. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  83. package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
  84. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  85. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  86. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  87. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  88. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  89. package/dest/msg_validators/clock_tolerance.js +61 -3
  90. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +10 -4
  91. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  92. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  93. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +10 -4
  94. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  95. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  96. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +21 -8
  97. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  98. package/dest/msg_validators/proposal_validator/proposal_validator.js +90 -44
  99. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +2 -2
  100. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +11 -18
  102. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  103. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  104. package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
  105. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  106. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  107. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  108. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  109. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  110. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  111. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  112. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  113. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  114. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  115. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  116. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  117. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  118. package/dest/msg_validators/tx_validator/factory.d.ts +135 -7
  119. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  120. package/dest/msg_validators/tx_validator/factory.js +252 -61
  121. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  122. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  123. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  124. package/dest/msg_validators/tx_validator/gas_validator.d.ts +99 -3
  125. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  126. package/dest/msg_validators/tx_validator/gas_validator.js +137 -53
  127. package/dest/msg_validators/tx_validator/index.d.ts +5 -1
  128. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  129. package/dest/msg_validators/tx_validator/index.js +4 -0
  130. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  131. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  132. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  133. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  134. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  135. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  136. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  137. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  138. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  139. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  140. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  141. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  142. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  143. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  144. package/dest/msg_validators/tx_validator/tx_validation_cache.js +69 -0
  145. package/dest/services/data_store.d.ts +1 -1
  146. package/dest/services/data_store.d.ts.map +1 -1
  147. package/dest/services/data_store.js +5 -5
  148. package/dest/services/discv5/discV5_service.d.ts +2 -1
  149. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  150. package/dest/services/discv5/discV5_service.js +35 -8
  151. package/dest/services/dummy_service.d.ts +12 -17
  152. package/dest/services/dummy_service.d.ts.map +1 -1
  153. package/dest/services/dummy_service.js +13 -20
  154. package/dest/services/encoding.d.ts +6 -2
  155. package/dest/services/encoding.d.ts.map +1 -1
  156. package/dest/services/encoding.js +14 -8
  157. package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
  158. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  159. package/dest/services/gossipsub/topic_score_params.js +21 -4
  160. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  161. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  162. package/dest/services/libp2p/instrumentation.js +14 -0
  163. package/dest/services/libp2p/libp2p_service.d.ts +47 -55
  164. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  165. package/dest/services/libp2p/libp2p_service.js +344 -308
  166. package/dest/services/peer-manager/metrics.d.ts +3 -1
  167. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  168. package/dest/services/peer-manager/metrics.js +6 -0
  169. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  170. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  171. package/dest/services/peer-manager/peer_manager.js +40 -11
  172. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  173. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  174. package/dest/services/peer-manager/peer_scoring.js +32 -10
  175. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -8
  176. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  177. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +97 -107
  178. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
  179. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  180. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  181. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  182. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  183. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
  184. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  185. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
  186. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  187. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  188. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  189. package/dest/services/reqresp/config.d.ts +3 -3
  190. package/dest/services/reqresp/config.d.ts.map +1 -1
  191. package/dest/services/reqresp/interface.d.ts +16 -18
  192. package/dest/services/reqresp/interface.d.ts.map +1 -1
  193. package/dest/services/reqresp/interface.js +10 -20
  194. package/dest/services/reqresp/metrics.d.ts +1 -1
  195. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  196. package/dest/services/reqresp/metrics.js +0 -1
  197. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  198. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  199. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +4 -2
  200. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  201. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  202. package/dest/services/reqresp/protocols/index.js +0 -1
  203. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  204. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  205. package/dest/services/reqresp/protocols/tx.js +1 -3
  206. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  207. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  208. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  209. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  210. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  211. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  212. package/dest/services/reqresp/reqresp.d.ts +7 -29
  213. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  214. package/dest/services/reqresp/reqresp.js +43 -215
  215. package/dest/services/service.d.ts +10 -13
  216. package/dest/services/service.d.ts.map +1 -1
  217. package/dest/services/tx_collection/config.d.ts +2 -23
  218. package/dest/services/tx_collection/config.d.ts.map +1 -1
  219. package/dest/services/tx_collection/config.js +2 -55
  220. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  221. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  222. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  223. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  224. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  225. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  226. package/dest/services/tx_collection/index.d.ts +2 -3
  227. package/dest/services/tx_collection/index.d.ts.map +1 -1
  228. package/dest/services/tx_collection/index.js +0 -1
  229. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  230. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  231. package/dest/services/tx_collection/instrumentation.js +0 -2
  232. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  233. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  234. package/dest/services/tx_collection/request_tracker.js +84 -0
  235. package/dest/services/tx_collection/tx_collection.d.ts +36 -55
  236. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  237. package/dest/services/tx_collection/tx_collection.js +275 -119
  238. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  239. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  240. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  241. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  242. package/dest/services/tx_collection/tx_source.js +9 -7
  243. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  244. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  245. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  246. package/dest/services/tx_provider.d.ts +5 -3
  247. package/dest/services/tx_provider.d.ts.map +1 -1
  248. package/dest/services/tx_provider.js +7 -4
  249. package/dest/test-helpers/make-test-p2p-clients.d.ts +5 -6
  250. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  251. package/dest/test-helpers/make-test-p2p-clients.js +5 -3
  252. package/dest/test-helpers/mock-pubsub.d.ts +24 -11
  253. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  254. package/dest/test-helpers/mock-pubsub.js +45 -45
  255. package/dest/test-helpers/reqresp-nodes.d.ts +5 -7
  256. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  257. package/dest/test-helpers/reqresp-nodes.js +17 -19
  258. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  259. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  260. package/dest/test-helpers/test_tx_provider.js +3 -0
  261. package/dest/test-helpers/testbench-utils.d.ts +13 -15
  262. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  263. package/dest/test-helpers/testbench-utils.js +42 -15
  264. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  265. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  266. package/dest/testbench/p2p_client_testbench_worker.js +88 -42
  267. package/dest/testbench/worker_client_manager.d.ts +12 -6
  268. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  269. package/dest/testbench/worker_client_manager.js +57 -11
  270. package/dest/util.d.ts +12 -7
  271. package/dest/util.d.ts.map +1 -1
  272. package/dest/util.js +35 -14
  273. package/dest/versioning.d.ts +3 -6
  274. package/dest/versioning.d.ts.map +1 -1
  275. package/dest/versioning.js +3 -24
  276. package/package.json +15 -14
  277. package/src/bootstrap/bootstrap.ts +9 -1
  278. package/src/client/factory.ts +74 -49
  279. package/src/client/interface.ts +20 -30
  280. package/src/client/p2p_client.ts +108 -156
  281. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  282. package/src/config.ts +227 -45
  283. package/src/errors/p2p-service.error.ts +11 -0
  284. package/src/errors/reqresp.error.ts +0 -25
  285. package/src/index.ts +0 -1
  286. package/src/mem_pools/attestation_pool/attestation_pool.ts +318 -242
  287. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +204 -68
  288. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  289. package/src/mem_pools/index.ts +0 -3
  290. package/src/mem_pools/instrumentation.ts +22 -14
  291. package/src/mem_pools/tx_pool_v2/README.md +9 -1
  292. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +3 -2
  293. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +3 -0
  294. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  295. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  296. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
  297. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +5 -5
  298. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +10 -6
  299. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
  300. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
  301. package/src/mem_pools/tx_pool_v2/index.ts +1 -1
  302. package/src/mem_pools/tx_pool_v2/interfaces.ts +19 -8
  303. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +130 -23
  304. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +29 -43
  305. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +17 -2
  306. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +267 -229
  307. package/src/msg_validators/attestation_validator/README.md +49 -0
  308. package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
  309. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -7
  310. package/src/msg_validators/clock_tolerance.ts +79 -3
  311. package/src/msg_validators/proposal_validator/README.md +123 -0
  312. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +24 -4
  313. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +35 -7
  314. package/src/msg_validators/proposal_validator/proposal_validator.ts +114 -47
  315. package/src/msg_validators/tx_validator/README.md +127 -0
  316. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +6 -15
  317. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  318. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  319. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  320. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  321. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  322. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  323. package/src/msg_validators/tx_validator/factory.ts +407 -80
  324. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  325. package/src/msg_validators/tx_validator/gas_validator.ts +199 -54
  326. package/src/msg_validators/tx_validator/index.ts +4 -0
  327. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  328. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  329. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  330. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  331. package/src/msg_validators/tx_validator/tx_validation_cache.ts +102 -0
  332. package/src/services/data_store.ts +5 -13
  333. package/src/services/discv5/discV5_service.ts +38 -5
  334. package/src/services/dummy_service.ts +15 -44
  335. package/src/services/encoding.ts +14 -7
  336. package/src/services/gossipsub/topic_score_params.ts +36 -4
  337. package/src/services/libp2p/instrumentation.ts +14 -0
  338. package/src/services/libp2p/libp2p_service.ts +390 -360
  339. package/src/services/peer-manager/metrics.ts +7 -0
  340. package/src/services/peer-manager/peer_manager.ts +46 -11
  341. package/src/services/peer-manager/peer_scoring.ts +27 -5
  342. package/src/services/reqresp/README.md +215 -0
  343. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  344. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +97 -119
  345. package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
  346. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  347. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  348. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  349. package/src/services/reqresp/config.ts +2 -2
  350. package/src/services/reqresp/interface.ts +21 -47
  351. package/src/services/reqresp/metrics.ts +0 -1
  352. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +4 -2
  353. package/src/services/reqresp/protocols/index.ts +0 -1
  354. package/src/services/reqresp/protocols/tx.ts +1 -3
  355. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  356. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  357. package/src/services/reqresp/reqresp.ts +48 -261
  358. package/src/services/service.ts +13 -29
  359. package/src/services/tx_collection/config.ts +3 -80
  360. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  361. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  362. package/src/services/tx_collection/index.ts +1 -6
  363. package/src/services/tx_collection/instrumentation.ts +1 -7
  364. package/src/services/tx_collection/request_tracker.ts +127 -0
  365. package/src/services/tx_collection/tx_collection.ts +331 -176
  366. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  367. package/src/services/tx_collection/tx_source.ts +8 -7
  368. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  369. package/src/services/tx_provider.ts +7 -2
  370. package/src/test-helpers/make-test-p2p-clients.ts +4 -3
  371. package/src/test-helpers/mock-pubsub.ts +49 -66
  372. package/src/test-helpers/reqresp-nodes.ts +15 -28
  373. package/src/test-helpers/test_tx_provider.ts +5 -0
  374. package/src/test-helpers/testbench-utils.ts +54 -29
  375. package/src/testbench/p2p_client_testbench_worker.ts +91 -61
  376. package/src/testbench/worker_client_manager.ts +72 -25
  377. package/src/util.ts +33 -18
  378. package/src/versioning.ts +3 -33
  379. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  380. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  381. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -305
  382. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  383. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  384. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  385. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  386. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  387. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  388. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  389. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  390. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  391. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  392. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  393. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  394. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  395. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  396. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  397. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  398. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  399. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  400. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  401. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  402. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  403. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  404. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  405. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  406. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  407. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  408. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  409. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  410. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  411. package/dest/mem_pools/tx_pool/index.js +0 -2
  412. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  413. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  414. package/dest/mem_pools/tx_pool/priority.js +0 -15
  415. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  416. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  417. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  418. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  419. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  420. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  421. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  422. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  423. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  424. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  425. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  426. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  427. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  428. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  429. package/dest/services/reqresp/protocols/block.js +0 -32
  430. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -54
  431. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  432. package/dest/services/tx_collection/fast_tx_collection.js +0 -327
  433. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  434. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  435. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  436. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
  437. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  438. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  439. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  440. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  441. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  442. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -346
  443. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  444. package/src/mem_pools/tx_pool/README.md +0 -270
  445. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  446. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  447. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  448. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  449. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  450. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  451. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  452. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  453. package/src/mem_pools/tx_pool/index.ts +0 -2
  454. package/src/mem_pools/tx_pool/priority.ts +0 -20
  455. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  456. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  457. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  458. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  459. package/src/services/reqresp/protocols/block.ts +0 -37
  460. package/src/services/tx_collection/fast_tx_collection.ts +0 -387
  461. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
  462. package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
  463. 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() {
@@ -38,8 +39,8 @@ export class NodeRpcTxSource implements TxSource {
38
39
  const invalidTxHashes: string[] = [];
39
40
  await Promise.all(
40
41
  txs.map(async tx => {
41
- const isValid = await tx.validateTxHash();
42
- if (isValid) {
42
+ const validation = await this.txValidator.validateTx(tx);
43
+ if (validation.result === 'valid') {
43
44
  validTxs.push(tx);
44
45
  } else {
45
46
  invalidTxHashes.push(tx.getTxHash().toString());
@@ -50,7 +51,7 @@ export class NodeRpcTxSource implements TxSource {
50
51
  }
51
52
  }
52
53
 
53
- export function createNodeRpcTxSources(urls: string[], chainConfig: ChainConfig) {
54
+ export function createNodeRpcTxSources(urls: string[], txValidator: TxValidator, chainConfig: ChainConfig) {
54
55
  const versions = getComponentsVersionsFromConfig(chainConfig, protocolContractsHash, getVKTreeRoot());
55
- return urls.map(url => NodeRpcTxSource.fromUrl(url, versions));
56
+ return urls.map(url => NodeRpcTxSource.fromUrl(url, txValidator, versions));
56
57
  }
@@ -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}`,
@@ -25,13 +25,18 @@ export class TxProvider implements ITxProvider {
25
25
  constructor(
26
26
  private txCollection: TxCollection,
27
27
  private txPool: TxPoolV2,
28
- private txValidator: Pick<P2PClient, 'validate'>,
28
+ private blockProposalTransactionValidator: Pick<P2PClient, 'validateTxsReceivedInBlockProposal'>,
29
29
  private log: Logger = createLogger('p2p:tx-collector'),
30
30
  client: TelemetryClient = getTelemetryClient(),
31
31
  ) {
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);
@@ -227,7 +232,7 @@ export class TxProvider implements ITxProvider {
227
232
  if (txs.length === 0) {
228
233
  return;
229
234
  }
230
- await this.txValidator.validate(txs);
235
+ await this.blockProposalTransactionValidator.validateTxsReceivedInBlockProposal(txs);
231
236
  await this.txPool.addProtectedTxs(txs, blockHeader);
232
237
  }
233
238
  }
@@ -4,10 +4,10 @@ import { SecretValue } from '@aztec/foundation/config';
4
4
  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
- import type { DataStoreConfig } from '@aztec/kv-store/config';
8
7
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
8
+ import { GasFees } from '@aztec/stdlib/gas';
9
9
  import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
10
- import { P2PClientType } from '@aztec/stdlib/p2p';
10
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
11
11
 
12
12
  import { createP2PClient } from '../client/index.js';
13
13
  import type { P2PClient } from '../client/p2p_client.js';
@@ -98,12 +98,12 @@ export async function makeTestP2PClient(
98
98
  const kvStore = await openTmpStore('test');
99
99
 
100
100
  const client = await createP2PClient(
101
- P2PClientType.Full,
102
101
  config,
103
102
  l2BlockSource,
104
103
  proofVerifier,
105
104
  mockWorldState,
106
105
  mockEpochCache,
106
+ { getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
107
107
  'test-p2p-client',
108
108
  undefined,
109
109
  undefined,
@@ -114,6 +114,7 @@ export async function makeTestP2PClient(
114
114
  logger,
115
115
  p2pServiceFactory: mockGossipSubNetwork && getMockPubSubP2PServiceFactory(mockGossipSubNetwork),
116
116
  },
117
+ await l2BlockSource.getInitialHeader().hash(),
117
118
  );
118
119
 
119
120
  return client;
@@ -1,10 +1,11 @@
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
- import { P2PClientType } from '@aztec/stdlib/p2p';
8
9
  import type { TelemetryClient } from '@aztec/telemetry-client';
9
10
 
10
11
  import type { GossipsubEvents, GossipsubMessage } from '@chainsafe/libp2p-gossipsub';
@@ -22,15 +23,12 @@ 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';
@@ -42,11 +40,10 @@ type GossipSubService = PubSubLibp2p['services']['pubsub'];
42
40
  * Given a mock gossip sub network, returns a factory function that creates an instance LibP2PService connected to it.
43
41
  * Designed to be used in tests in P2PClientDeps.p2pServiceFactory.
44
42
  */
45
- export function getMockPubSubP2PServiceFactory<T extends P2PClientType>(
43
+ export function getMockPubSubP2PServiceFactory(
46
44
  network: MockGossipSubNetwork,
47
- ): (...args: Parameters<(typeof LibP2PService<T>)['new']>) => Promise<LibP2PService<T>> {
45
+ ): (...args: Parameters<(typeof LibP2PService)['new']>) => Promise<LibP2PService> {
48
46
  return (
49
- clientType: P2PClientType,
50
47
  config: P2PConfig,
51
48
  peerId: PeerId,
52
49
  deps: {
@@ -57,6 +54,7 @@ export function getMockPubSubP2PServiceFactory<T extends P2PClientType>(
57
54
  proofVerifier: ClientProtocolCircuitVerifier;
58
55
  worldStateSynchronizer: WorldStateSynchronizer;
59
56
  peerStore: AztecAsyncKVStore;
57
+ blockMinFeesProvider: BlockMinFeesProvider;
60
58
  telemetry: TelemetryClient;
61
59
  logger: Logger;
62
60
  },
@@ -66,8 +64,7 @@ export function getMockPubSubP2PServiceFactory<T extends P2PClientType>(
66
64
  const peerManager = new DummyPeerManager(peerId, network);
67
65
  const reqresp: ReqRespInterface = new MockReqResp(peerId, network);
68
66
  const peerDiscoveryService = new DummyPeerDiscoveryService();
69
- const service = new LibP2PService<T>(
70
- clientType as T,
67
+ const service = new LibP2PService(
71
68
  config,
72
69
  libp2p,
73
70
  peerDiscoveryService,
@@ -78,6 +75,7 @@ export function getMockPubSubP2PServiceFactory<T extends P2PClientType>(
78
75
  deps.epochCache,
79
76
  deps.proofVerifier,
80
77
  deps.worldStateSynchronizer,
78
+ deps.blockMinFeesProvider,
81
79
  deps.telemetry,
82
80
  deps.logger,
83
81
  );
@@ -88,8 +86,8 @@ export function getMockPubSubP2PServiceFactory<T extends P2PClientType>(
88
86
 
89
87
  /**
90
88
  * Mock implementation of ReqRespInterface that routes requests to other peers' handlers through the mock network.
91
- * When a peer calls sendBatchRequest, the mock iterates over network peers and invokes their registered handler
92
- * 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.
93
91
  */
94
92
  class MockReqResp implements ReqRespInterface {
95
93
  private handlers: Partial<ReqRespSubProtocolHandlers> = {};
@@ -103,20 +101,14 @@ class MockReqResp implements ReqRespInterface {
103
101
  }
104
102
 
105
103
  updateConfig(_config: Partial<P2PReqRespConfig>): void {}
104
+ setShouldRejectPeer(): void {}
106
105
 
107
- start(
108
- subProtocolHandlers: Partial<ReqRespSubProtocolHandlers>,
109
- _subProtocolValidators: ReqRespSubProtocolValidators,
110
- ): Promise<void> {
106
+ start(subProtocolHandlers: Partial<ReqRespSubProtocolHandlers>): Promise<void> {
111
107
  Object.assign(this.handlers, subProtocolHandlers);
112
108
  return Promise.resolve();
113
109
  }
114
110
 
115
- addSubProtocol(
116
- subProtocol: ReqRespSubProtocol,
117
- handler: ReqRespSubProtocolHandler,
118
- _validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
119
- ): Promise<void> {
111
+ addSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void> {
120
112
  this.handlers[subProtocol] = handler;
121
113
  return Promise.resolve();
122
114
  }
@@ -130,41 +122,6 @@ class MockReqResp implements ReqRespInterface {
130
122
  return this.handlers[subProtocol];
131
123
  }
132
124
 
133
- async sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(
134
- subProtocol: SubProtocol,
135
- requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[],
136
- pinnedPeer: PeerId | undefined,
137
- _timeoutMs?: number,
138
- _maxPeers?: number,
139
- _maxRetryAttempts?: number,
140
- ): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]> {
141
- const responses: InstanceType<SubProtocolMap[SubProtocol]['response']>[] = [];
142
- const peers = this.network.getReqRespPeers().filter(p => !p.peerId.equals(this.peerId));
143
- const targetPeers = pinnedPeer ? peers.filter(p => p.peerId.equals(pinnedPeer)) : peers;
144
-
145
- for (const request of requests) {
146
- const requestBuffer = request.toBuffer();
147
- for (const peer of targetPeers) {
148
- const handler = peer.getHandler(subProtocol);
149
- if (!handler) {
150
- continue;
151
- }
152
- try {
153
- const responseBuffer = await handler(this.peerId, requestBuffer);
154
- if (responseBuffer.length > 0) {
155
- const response = responseFromBuffer(subProtocol, responseBuffer);
156
- responses.push(response as InstanceType<SubProtocolMap[SubProtocol]['response']>);
157
- break;
158
- }
159
- } catch (err) {
160
- this.logger.debug(`Mock reqresp handler error from peer ${peer.peerId}`, { err });
161
- }
162
- }
163
- }
164
-
165
- return responses;
166
- }
167
-
168
125
  async sendRequestToPeer(
169
126
  peerId: PeerId,
170
127
  subProtocol: ReqRespSubProtocol,
@@ -177,7 +134,12 @@ class MockReqResp implements ReqRespInterface {
177
134
  return { status: ReqRespStatus.SUCCESS, data: Buffer.from([]) };
178
135
  }
179
136
  try {
137
+ const delayMs = this.network.getPropagationDelayMs();
138
+ if (delayMs > 0) {
139
+ await sleep(delayMs);
140
+ }
180
141
  const data = await handler(this.peerId, payload);
142
+
181
143
  return { status: ReqRespStatus.SUCCESS, data };
182
144
  } catch {
183
145
  return { status: ReqRespStatus.FAILURE };
@@ -215,6 +177,13 @@ export class MockPubSub implements PubSubLibp2p {
215
177
  get services() {
216
178
  return {
217
179
  pubsub: this.gossipSub,
180
+ components: {
181
+ addressManager: {
182
+ addObservedAddr: () => {},
183
+ confirmObservedAddr: () => {},
184
+ removeObservedAddr: () => {},
185
+ },
186
+ },
218
187
  };
219
188
  }
220
189
 
@@ -245,10 +214,10 @@ class MockGossipSubService extends TypedEventEmitter<GossipsubEvents> implements
245
214
  score: (_peerId: PeerIdStr) => 0,
246
215
  };
247
216
 
248
- publish(topic: TopicStr, data: Uint8Array, _opts?: PublishOpts): Promise<PublishResult> {
217
+ async publish(topic: TopicStr, data: Uint8Array, _opts?: PublishOpts): Promise<PublishResult> {
249
218
  this.logger.debug(`Publishing message on topic ${topic}`, { topic, sender: this.peerId.toString() });
250
- this.network.publishToPeers(topic, data, this.peerId);
251
- 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)) };
252
221
  }
253
222
 
254
223
  receive(msg: GossipsubMessage) {
@@ -284,7 +253,8 @@ class MockGossipSubService extends TypedEventEmitter<GossipsubEvents> implements
284
253
 
285
254
  /**
286
255
  * Mock gossip sub network used for testing.
287
- * 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.
288
258
  */
289
259
  export class MockGossipSubNetwork {
290
260
  private peers: MockGossipSubService[] = [];
@@ -293,6 +263,15 @@ export class MockGossipSubNetwork {
293
263
 
294
264
  private logger = createLogger('p2p:test:mock-gossipsub-network');
295
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
+
296
275
  public getPeers(): PeerId[] {
297
276
  return this.peers.map(peer => peer.peerId);
298
277
  }
@@ -309,7 +288,7 @@ export class MockGossipSubNetwork {
309
288
  return this.reqRespPeers;
310
289
  }
311
290
 
312
- public publishToPeers(topic: TopicStr, data: Uint8Array, sender: PeerId): void {
291
+ public async publishToPeers(topic: TopicStr, data: Uint8Array, sender: PeerId): Promise<void> {
313
292
  const msgId = (this.nextMsgId++).toString();
314
293
  this.logger.debug(`Network is distributing message on topic ${topic}`, {
315
294
  topic,
@@ -318,6 +297,10 @@ export class MockGossipSubNetwork {
318
297
  msgId,
319
298
  });
320
299
 
300
+ if (this.propagationDelayMs > 0) {
301
+ await sleep(this.propagationDelayMs);
302
+ }
303
+
321
304
  const gossipSubMsg: GossipsubMessage = { msgId, msg: { type: 'unsigned', topic, data }, propagationSource: sender };
322
305
  for (const peer of this.peers) {
323
306
  if (peer.subscribedTopics.has(topic)) {
@@ -2,17 +2,17 @@ import type { EpochCache } from '@aztec/epoch-cache';
2
2
  import { timesParallel } from '@aztec/foundation/collection';
3
3
  import { SecretValue } from '@aztec/foundation/config';
4
4
  import { createLogger } from '@aztec/foundation/log';
5
- import type { DataStoreConfig } from '@aztec/kv-store/config';
6
5
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
7
6
  import type { L2BlockSource } from '@aztec/stdlib/block';
8
7
  import { type ChainConfig, emptyChainConfig } from '@aztec/stdlib/config';
9
8
  import type { ContractDataSource } from '@aztec/stdlib/contract';
9
+ import { GasFees } from '@aztec/stdlib/gas';
10
10
  import type {
11
11
  ClientProtocolCircuitVerifier,
12
12
  IVCProofVerificationResult,
13
13
  WorldStateSynchronizer,
14
14
  } from '@aztec/stdlib/interfaces/server';
15
- import type { P2PClientType } from '@aztec/stdlib/p2p';
15
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
16
16
  import type { Tx } from '@aztec/stdlib/tx';
17
17
  import { compressComponentVersions } from '@aztec/stdlib/versioning';
18
18
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
@@ -31,7 +31,7 @@ import getPort from 'get-port';
31
31
  import { type Libp2p, type Libp2pOptions, createLibp2p } from 'libp2p';
32
32
 
33
33
  import { BootstrapNode } from '../bootstrap/bootstrap.js';
34
- import type { BootnodeConfig, P2PConfig } from '../config.js';
34
+ import { type BootnodeConfig, DEFAULT_PUBLIC_IP_SERVICES, type P2PConfig } from '../config.js';
35
35
  import type { MemPools } from '../mem_pools/interface.js';
36
36
  import { DiscV5Service } from '../services/discv5/discV5_service.js';
37
37
  import { APP_SPECIFIC_WEIGHT } from '../services/gossipsub/scoring.js';
@@ -43,8 +43,6 @@ import {
43
43
  ReqRespSubProtocol,
44
44
  type ReqRespSubProtocolHandlers,
45
45
  type ReqRespSubProtocolRateLimits,
46
- type ReqRespSubProtocolValidators,
47
- noopValidator,
48
46
  } from '../services/reqresp/interface.js';
49
47
  import { pingHandler } from '../services/reqresp/protocols/index.js';
50
48
  import { ReqResp } from '../services/reqresp/reqresp.js';
@@ -77,6 +75,10 @@ export async function createLibp2pNode(
77
75
  identify: identify({
78
76
  protocolPrefix: 'aztec',
79
77
  }),
78
+ components: (components: { connectionManager: any; addressManager: any }) => ({
79
+ connectionManager: components.connectionManager,
80
+ addressManager: components.addressManager,
81
+ }),
80
82
  },
81
83
  };
82
84
 
@@ -107,8 +109,7 @@ export async function createLibp2pNode(
107
109
  *
108
110
  *
109
111
  */
110
- export async function createTestLibP2PService<T extends P2PClientType>(
111
- clientType: T,
112
+ export async function createTestLibP2PService(
112
113
  boostrapAddrs: string[] = [],
113
114
  archiver: L2BlockSource & ContractDataSource,
114
115
  worldStateSynchronizer: WorldStateSynchronizer,
@@ -155,12 +156,13 @@ export async function createTestLibP2PService<T extends P2PClientType>(
155
156
  epochCache,
156
157
  );
157
158
 
159
+ reqresp.setShouldRejectPeer(peerId => peerManager.shouldDisableP2PGossip(peerId));
160
+
158
161
  p2pNode.services.pubsub.score.params.appSpecificWeight = APP_SPECIFIC_WEIGHT;
159
162
  p2pNode.services.pubsub.score.params.appSpecificScore = (peerId: string) =>
160
163
  peerManager.shouldDisableP2PGossip(peerId) ? -Infinity : peerManager.getPeerScore(peerId);
161
164
 
162
- return new LibP2PService<T>(
163
- clientType,
165
+ return new LibP2PService(
164
166
  config,
165
167
  p2pNode as PubSubLibp2p,
166
168
  discoveryService,
@@ -171,6 +173,7 @@ export async function createTestLibP2PService<T extends P2PClientType>(
171
173
  epochCache,
172
174
  proofVerifier,
173
175
  worldStateSynchronizer,
176
+ { getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
174
177
  telemetry,
175
178
  );
176
179
  }
@@ -190,23 +193,10 @@ export const MOCK_SUB_PROTOCOL_HANDLERS: ReqRespSubProtocolHandlers = {
190
193
  [ReqRespSubProtocol.STATUS]: (_msg: any) => Promise.resolve(Buffer.from('status')),
191
194
  [ReqRespSubProtocol.TX]: (_msg: any) => Promise.resolve(Buffer.from('tx')),
192
195
  [ReqRespSubProtocol.GOODBYE]: (_msg: any) => Promise.resolve(Buffer.from('goodbye')),
193
- [ReqRespSubProtocol.BLOCK]: (_msg: any) => Promise.resolve(Buffer.from('block')),
194
196
  [ReqRespSubProtocol.AUTH]: (_msg: any) => Promise.resolve(Buffer.from('auth')),
195
197
  [ReqRespSubProtocol.BLOCK_TXS]: (_msg: any) => Promise.resolve(Buffer.from('block_txs')),
196
198
  };
197
199
 
198
- // By default, all requests are valid
199
- // If you want to test an invalid response, you can override the validator
200
- export const MOCK_SUB_PROTOCOL_VALIDATORS: ReqRespSubProtocolValidators = {
201
- [ReqRespSubProtocol.PING]: noopValidator,
202
- [ReqRespSubProtocol.STATUS]: noopValidator,
203
- [ReqRespSubProtocol.TX]: noopValidator,
204
- [ReqRespSubProtocol.GOODBYE]: noopValidator,
205
- [ReqRespSubProtocol.BLOCK]: noopValidator,
206
- [ReqRespSubProtocol.AUTH]: noopValidator,
207
- [ReqRespSubProtocol.BLOCK_TXS]: noopValidator,
208
- };
209
-
210
200
  /**
211
201
  * @param numberOfNodes - the number of nodes to create
212
202
  * @returns An array of the created nodes
@@ -219,13 +209,9 @@ export const createNodes = (
219
209
  return timesParallel(numberOfNodes, () => createReqResp(peerScoring, rateLimits));
220
210
  };
221
211
 
222
- export const startNodes = async (
223
- nodes: ReqRespNode[],
224
- subProtocolHandlers = MOCK_SUB_PROTOCOL_HANDLERS,
225
- subProtocolValidators = MOCK_SUB_PROTOCOL_VALIDATORS,
226
- ) => {
212
+ export const startNodes = async (nodes: ReqRespNode[], subProtocolHandlers = MOCK_SUB_PROTOCOL_HANDLERS) => {
227
213
  for (const node of nodes) {
228
- await node.req.start(subProtocolHandlers, subProtocolValidators);
214
+ await node.req.start(subProtocolHandlers);
229
215
  }
230
216
  };
231
217
 
@@ -293,6 +279,7 @@ export function createBootstrapNodeConfig(privateKey: string, port: number, chai
293
279
  bootstrapNodes: [],
294
280
  listenAddress: '127.0.0.1',
295
281
  queryForIp: false,
282
+ publicIpServices: DEFAULT_PUBLIC_IP_SERVICES,
296
283
  };
297
284
  }
298
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,