@aztec/p2p 0.0.1-commit.85d7d01 → 0.0.1-commit.8655d4a

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 (447) 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 +5 -4
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +33 -15
  8. package/dest/client/interface.d.ts +14 -5
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +13 -9
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +93 -49
  13. package/dest/config.d.ts +153 -102
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +134 -35
  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 +2 -1
  42. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  43. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  45. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  46. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  47. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  48. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +7 -1
  49. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
  50. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  51. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
  52. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
  54. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
  55. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
  56. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +2 -2
  57. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +12 -5
  58. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  59. package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
  60. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +29 -11
  61. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  62. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +46 -16
  63. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
  64. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  65. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +26 -43
  66. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
  67. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  68. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +6 -0
  69. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +2 -1
  70. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  71. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +97 -88
  72. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
  73. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  74. package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
  75. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  76. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  77. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  78. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  79. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  80. package/dest/msg_validators/clock_tolerance.js +61 -3
  81. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +10 -4
  82. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  83. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  84. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +10 -4
  85. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  86. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  87. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +21 -8
  88. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  89. package/dest/msg_validators/proposal_validator/proposal_validator.js +90 -44
  90. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  91. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  92. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  93. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  94. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  95. package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
  96. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  97. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  98. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  99. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  100. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  101. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  102. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  103. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  104. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  105. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  106. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  107. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  108. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  109. package/dest/msg_validators/tx_validator/factory.d.ts +27 -7
  110. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  111. package/dest/msg_validators/tx_validator/factory.js +47 -17
  112. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  113. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  114. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  115. package/dest/msg_validators/tx_validator/gas_validator.d.ts +48 -7
  116. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  117. package/dest/msg_validators/tx_validator/gas_validator.js +88 -41
  118. package/dest/msg_validators/tx_validator/index.d.ts +4 -1
  119. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  120. package/dest/msg_validators/tx_validator/index.js +3 -0
  121. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  122. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  123. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  124. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  125. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  126. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  127. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  128. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  129. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  130. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  131. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  132. package/dest/msg_validators/tx_validator/tx_validation_cache.js +69 -0
  133. package/dest/services/data_store.d.ts +1 -1
  134. package/dest/services/data_store.d.ts.map +1 -1
  135. package/dest/services/data_store.js +5 -5
  136. package/dest/services/discv5/discV5_service.d.ts +2 -1
  137. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  138. package/dest/services/discv5/discV5_service.js +35 -8
  139. package/dest/services/dummy_service.d.ts +11 -15
  140. package/dest/services/dummy_service.d.ts.map +1 -1
  141. package/dest/services/dummy_service.js +12 -16
  142. package/dest/services/encoding.d.ts +5 -1
  143. package/dest/services/encoding.d.ts.map +1 -1
  144. package/dest/services/encoding.js +7 -1
  145. package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
  146. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  147. package/dest/services/gossipsub/topic_score_params.js +21 -4
  148. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  149. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  150. package/dest/services/libp2p/instrumentation.js +14 -0
  151. package/dest/services/libp2p/libp2p_service.d.ts +36 -46
  152. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  153. package/dest/services/libp2p/libp2p_service.js +296 -244
  154. package/dest/services/peer-manager/metrics.d.ts +3 -1
  155. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  156. package/dest/services/peer-manager/metrics.js +6 -0
  157. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  158. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  159. package/dest/services/peer-manager/peer_manager.js +40 -11
  160. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  161. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  162. package/dest/services/peer-manager/peer_scoring.js +32 -10
  163. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -8
  164. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  165. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +84 -71
  166. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
  167. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  168. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  169. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  170. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  171. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
  172. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  173. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
  174. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  175. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  176. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  177. package/dest/services/reqresp/config.d.ts +3 -3
  178. package/dest/services/reqresp/config.d.ts.map +1 -1
  179. package/dest/services/reqresp/interface.d.ts +16 -18
  180. package/dest/services/reqresp/interface.d.ts.map +1 -1
  181. package/dest/services/reqresp/interface.js +10 -20
  182. package/dest/services/reqresp/metrics.d.ts +1 -1
  183. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  184. package/dest/services/reqresp/metrics.js +0 -1
  185. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  186. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  187. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +4 -2
  188. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  189. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  190. package/dest/services/reqresp/protocols/index.js +0 -1
  191. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  192. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  193. package/dest/services/reqresp/protocols/tx.js +1 -3
  194. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  195. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  196. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  197. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  198. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  199. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  200. package/dest/services/reqresp/reqresp.d.ts +7 -29
  201. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  202. package/dest/services/reqresp/reqresp.js +41 -214
  203. package/dest/services/service.d.ts +9 -12
  204. package/dest/services/service.d.ts.map +1 -1
  205. package/dest/services/tx_collection/config.d.ts +2 -23
  206. package/dest/services/tx_collection/config.d.ts.map +1 -1
  207. package/dest/services/tx_collection/config.js +2 -55
  208. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  209. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  210. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  211. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  212. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  213. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  214. package/dest/services/tx_collection/index.d.ts +2 -3
  215. package/dest/services/tx_collection/index.d.ts.map +1 -1
  216. package/dest/services/tx_collection/index.js +0 -1
  217. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  218. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  219. package/dest/services/tx_collection/instrumentation.js +0 -2
  220. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  221. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  222. package/dest/services/tx_collection/request_tracker.js +84 -0
  223. package/dest/services/tx_collection/tx_collection.d.ts +36 -55
  224. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  225. package/dest/services/tx_collection/tx_collection.js +275 -119
  226. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  227. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  228. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  229. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  230. package/dest/services/tx_collection/tx_source.js +9 -7
  231. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  232. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  233. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  234. package/dest/services/tx_provider.d.ts +3 -1
  235. package/dest/services/tx_provider.d.ts.map +1 -1
  236. package/dest/services/tx_provider.js +3 -0
  237. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  238. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  239. package/dest/test-helpers/make-test-p2p-clients.js +5 -2
  240. package/dest/test-helpers/mock-pubsub.d.ts +23 -9
  241. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  242. package/dest/test-helpers/mock-pubsub.js +44 -44
  243. package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
  244. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  245. package/dest/test-helpers/reqresp-nodes.js +16 -18
  246. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  247. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  248. package/dest/test-helpers/test_tx_provider.js +3 -0
  249. package/dest/test-helpers/testbench-utils.d.ts +12 -14
  250. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  251. package/dest/test-helpers/testbench-utils.js +42 -15
  252. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  253. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  254. package/dest/testbench/p2p_client_testbench_worker.js +85 -39
  255. package/dest/testbench/worker_client_manager.d.ts +12 -6
  256. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  257. package/dest/testbench/worker_client_manager.js +57 -11
  258. package/dest/util.d.ts +12 -7
  259. package/dest/util.d.ts.map +1 -1
  260. package/dest/util.js +35 -14
  261. package/dest/versioning.d.ts +3 -6
  262. package/dest/versioning.d.ts.map +1 -1
  263. package/dest/versioning.js +3 -24
  264. package/package.json +15 -14
  265. package/src/bootstrap/bootstrap.ts +9 -1
  266. package/src/client/factory.ts +57 -8
  267. package/src/client/interface.ts +15 -11
  268. package/src/client/p2p_client.ts +106 -70
  269. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  270. package/src/config.ts +226 -36
  271. package/src/errors/p2p-service.error.ts +11 -0
  272. package/src/errors/reqresp.error.ts +0 -25
  273. package/src/index.ts +0 -1
  274. package/src/mem_pools/attestation_pool/attestation_pool.ts +318 -242
  275. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +204 -68
  276. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  277. package/src/mem_pools/index.ts +0 -3
  278. package/src/mem_pools/instrumentation.ts +22 -14
  279. package/src/mem_pools/tx_pool_v2/README.md +9 -1
  280. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  281. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  282. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  283. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
  284. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  285. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
  286. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
  287. package/src/mem_pools/tx_pool_v2/interfaces.ts +12 -4
  288. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +72 -20
  289. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +29 -43
  290. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +16 -1
  291. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +101 -94
  292. package/src/msg_validators/attestation_validator/README.md +49 -0
  293. package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
  294. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -7
  295. package/src/msg_validators/clock_tolerance.ts +79 -3
  296. package/src/msg_validators/proposal_validator/README.md +123 -0
  297. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +24 -4
  298. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +35 -7
  299. package/src/msg_validators/proposal_validator/proposal_validator.ts +114 -47
  300. package/src/msg_validators/tx_validator/README.md +15 -3
  301. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  302. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  303. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  304. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  305. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  306. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  307. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  308. package/src/msg_validators/tx_validator/factory.ts +61 -10
  309. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  310. package/src/msg_validators/tx_validator/gas_validator.ts +121 -39
  311. package/src/msg_validators/tx_validator/index.ts +3 -0
  312. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  313. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  314. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  315. package/src/msg_validators/tx_validator/tx_validation_cache.ts +102 -0
  316. package/src/services/data_store.ts +5 -13
  317. package/src/services/discv5/discV5_service.ts +38 -5
  318. package/src/services/dummy_service.ts +14 -39
  319. package/src/services/encoding.ts +9 -1
  320. package/src/services/gossipsub/topic_score_params.ts +36 -4
  321. package/src/services/libp2p/instrumentation.ts +14 -0
  322. package/src/services/libp2p/libp2p_service.ts +321 -276
  323. package/src/services/peer-manager/metrics.ts +7 -0
  324. package/src/services/peer-manager/peer_manager.ts +46 -11
  325. package/src/services/peer-manager/peer_scoring.ts +27 -5
  326. package/src/services/reqresp/README.md +215 -0
  327. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  328. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +83 -77
  329. package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
  330. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  331. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
  332. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  333. package/src/services/reqresp/config.ts +2 -2
  334. package/src/services/reqresp/interface.ts +21 -47
  335. package/src/services/reqresp/metrics.ts +0 -1
  336. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +4 -2
  337. package/src/services/reqresp/protocols/index.ts +0 -1
  338. package/src/services/reqresp/protocols/tx.ts +1 -3
  339. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  340. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  341. package/src/services/reqresp/reqresp.ts +45 -260
  342. package/src/services/service.ts +12 -28
  343. package/src/services/tx_collection/config.ts +3 -80
  344. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  345. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  346. package/src/services/tx_collection/index.ts +1 -6
  347. package/src/services/tx_collection/instrumentation.ts +1 -7
  348. package/src/services/tx_collection/request_tracker.ts +127 -0
  349. package/src/services/tx_collection/tx_collection.ts +331 -176
  350. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  351. package/src/services/tx_collection/tx_source.ts +8 -7
  352. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  353. package/src/services/tx_provider.ts +5 -0
  354. package/src/test-helpers/make-test-p2p-clients.ts +4 -1
  355. package/src/test-helpers/mock-pubsub.ts +46 -60
  356. package/src/test-helpers/reqresp-nodes.ts +13 -23
  357. package/src/test-helpers/test_tx_provider.ts +5 -0
  358. package/src/test-helpers/testbench-utils.ts +53 -28
  359. package/src/testbench/p2p_client_testbench_worker.ts +89 -55
  360. package/src/testbench/worker_client_manager.ts +72 -25
  361. package/src/util.ts +33 -18
  362. package/src/versioning.ts +3 -33
  363. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  364. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  365. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -304
  366. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  367. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  368. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  369. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  370. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  371. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  372. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  373. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  374. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  375. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  376. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  377. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  378. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  379. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  380. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  381. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  382. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  383. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  384. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  385. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  386. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  387. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  388. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  389. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  390. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  391. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  392. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  393. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  394. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  395. package/dest/mem_pools/tx_pool/index.js +0 -2
  396. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  397. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  398. package/dest/mem_pools/tx_pool/priority.js +0 -15
  399. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  400. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  401. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  402. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  403. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  404. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  405. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  406. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  407. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  408. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  409. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  410. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  411. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  412. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  413. package/dest/services/reqresp/protocols/block.js +0 -32
  414. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -54
  415. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  416. package/dest/services/tx_collection/fast_tx_collection.js +0 -327
  417. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  418. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  419. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  420. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
  421. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  422. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  423. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  424. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  425. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  426. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -345
  427. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  428. package/src/mem_pools/tx_pool/README.md +0 -270
  429. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  430. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  431. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  432. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  433. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  434. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  435. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  436. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  437. package/src/mem_pools/tx_pool/index.ts +0 -2
  438. package/src/mem_pools/tx_pool/priority.ts +0 -20
  439. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  440. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  441. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  442. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  443. package/src/services/reqresp/protocols/block.ts +0 -37
  444. package/src/services/tx_collection/fast_tx_collection.ts +0 -387
  445. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
  446. package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
  447. package/src/services/tx_collection/slow_tx_collection.ts +0 -266
@@ -12,17 +12,18 @@ import { Fr } from '@aztec/foundation/curves/bn254';
12
12
  import { type Logger, createLogger } from '@aztec/foundation/log';
13
13
  import { sleep } from '@aztec/foundation/sleep';
14
14
  import { DateProvider, Timer } from '@aztec/foundation/timer';
15
- import type { DataStoreConfig } from '@aztec/kv-store/config';
16
15
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
17
16
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
18
17
  import { protocolContractsHash } from '@aztec/protocol-contracts';
19
18
  import type { L2BlockSource } from '@aztec/stdlib/block';
20
19
  import type { ContractDataSource } from '@aztec/stdlib/contract';
20
+ import { GasFees } from '@aztec/stdlib/gas';
21
21
  import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
22
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
22
23
  import { type BlockProposal, P2PMessage } from '@aztec/stdlib/p2p';
23
24
  import { ChonkProof } from '@aztec/stdlib/proofs';
24
25
  import { makeAztecAddress, makeBlockHeader, makeBlockProposal, mockTx } from '@aztec/stdlib/testing';
25
- import { Tx, TxHash, type TxValidationResult } from '@aztec/stdlib/tx';
26
+ import { Tx, TxHash, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
26
27
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
27
28
 
28
29
  import type { Message, PeerId } from '@libp2p/interface';
@@ -33,18 +34,17 @@ import type { P2PClient } from '../client/index.js';
33
34
  import type { P2PConfig } from '../config.js';
34
35
  import { createP2PClient } from '../index.js';
35
36
  import type { MemPools } from '../mem_pools/index.js';
36
- import { BatchTxRequesterCollector, LibP2PService, SendBatchRequestCollector } from '../services/index.js';
37
+ import { LibP2PService } from '../services/index.js';
37
38
  import type { PeerManager } from '../services/peer-manager/peer_manager.js';
39
+ import { BatchTxRequester } from '../services/reqresp/batch-tx-requester/batch_tx_requester.js';
38
40
  import type { BatchTxRequesterLibP2PService } from '../services/reqresp/batch-tx-requester/interface.js';
39
- import type { IBatchRequestTxValidator } from '../services/reqresp/batch-tx-requester/tx_validator.js';
40
41
  import { RateLimitStatus } from '../services/reqresp/rate-limiter/rate_limiter.js';
41
42
  import type { ReqResp } from '../services/reqresp/reqresp.js';
42
43
  import type { PeerDiscoveryService } from '../services/service.js';
43
- import { MissingTxsTracker } from '../services/tx_collection/missing_txs_tracker.js';
44
+ import { RequestTracker } from '../services/tx_collection/request_tracker.js';
44
45
  import { AlwaysTrueCircuitVerifier } from '../test-helpers/index.js';
45
46
  import {
46
47
  BENCHMARK_CONSTANTS,
47
- type CollectorType,
48
48
  type DistributionPattern,
49
49
  InMemoryAttestationPool,
50
50
  InMemoryTxPool,
@@ -55,15 +55,13 @@ import {
55
55
  } from '../test-helpers/index.js';
56
56
  import type { PubSubLibp2p } from '../util.js';
57
57
 
58
- export type { DistributionPattern, CollectorType } from '../test-helpers/testbench-utils.js';
59
- export { COLLECTOR_DISPLAY_NAMES } from '../test-helpers/testbench-utils.js';
58
+ export type { DistributionPattern } from '../test-helpers/testbench-utils.js';
60
59
 
61
60
  export interface BenchReqRespCommand {
62
61
  type: 'BENCH_REQRESP';
63
62
  txCount: number;
64
63
  peerCount: number;
65
64
  distribution: DistributionPattern;
66
- collectorType: CollectorType;
67
65
  timeoutMs: number;
68
66
  isAggregator: boolean;
69
67
  peerIndex: number;
@@ -116,6 +114,7 @@ class TestLibP2PService extends LibP2PService {
116
114
  epochCache,
117
115
  proofVerifier,
118
116
  worldStateSynchronizer,
117
+ { getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
119
118
  telemetry,
120
119
  logger,
121
120
  );
@@ -204,10 +203,28 @@ function installUnlimitedRateLimits(client: P2PClient): void {
204
203
  rateLimiter.allow = () => RateLimitStatus.Allowed;
205
204
  }
206
205
 
206
+ /** Resets peer scores to prevent cross-case contamination in benchmarks. */
207
+ function resetPeerScores(client: P2PClient): void {
208
+ const peerManager = (client as any).p2pService.peerManager;
209
+ const peerScoring = peerManager?.peerScoring;
210
+ if (peerScoring?.resetAllScores) {
211
+ peerScoring.resetAllScores();
212
+ }
213
+ }
214
+
215
+ /** Returns the number of connected peers for connectivity checks. */
216
+ function getConnectedPeerCount(client: P2PClient): number {
217
+ const p2pService = (client as any).p2pService;
218
+ const connectionSampler = p2pService?.reqresp?.getConnectionSampler?.();
219
+ if (connectionSampler?.getPeerListSortedByConnectionCountAsc) {
220
+ return connectionSampler.getPeerListSortedByConnectionCountAsc().length;
221
+ }
222
+ return 0;
223
+ }
224
+
207
225
  async function runAggregatorBenchmark(
208
226
  client: P2PClient,
209
227
  blockProposal: BlockProposal,
210
- collectorType: CollectorType,
211
228
  timeoutMs: number,
212
229
  pinnedPeerId: string | undefined,
213
230
  pinnedPeerIndex: number | undefined,
@@ -258,46 +275,22 @@ async function runAggregatorBenchmark(
258
275
  }
259
276
  }
260
277
 
261
- const noopTxValidator: IBatchRequestTxValidator = {
262
- validateRequestedTx: (_tx: Tx): Promise<TxValidationResult> => Promise.resolve({ result: 'valid' }),
263
- validateRequestedTxs: (txs: Tx[]): Promise<TxValidationResult[]> =>
264
- Promise.resolve(txs.map(() => ({ result: 'valid' }))),
278
+ const noopTxValidator: TxValidator = {
279
+ validateTx: (_tx: Tx): Promise<TxValidationResult> => Promise.resolve({ result: 'valid' }),
265
280
  };
266
281
 
267
282
  timer = new Timer();
268
- if (collectorType === 'batch-requester') {
269
- const collector = new BatchTxRequesterCollector(
270
- batchTxRequesterService,
271
- logger,
272
- new DateProvider(),
273
- noopTxValidator,
274
- );
275
- const fetchedTxs = await collector.collectTxs(
276
- MissingTxsTracker.fromArray(txHashes),
277
- blockProposal,
278
- pinnedPeer,
279
- timeoutMs,
280
- );
281
- const durationMs = timer.ms();
282
- return {
283
- type: 'BENCH_RESULT',
284
- durationMs,
285
- fetchedCount: fetchedTxs.length,
286
- success: fetchedTxs.length === txHashes.length,
287
- };
288
- }
289
-
290
- const collector = new SendBatchRequestCollector(
291
- batchTxRequesterService,
292
- BENCHMARK_CONSTANTS.FIXED_MAX_PEERS,
293
- BENCHMARK_CONSTANTS.FIXED_MAX_RETRY_ATTEMPTS,
294
- );
295
- const fetchedTxs = await collector.collectTxs(
296
- MissingTxsTracker.fromArray(txHashes),
283
+ const tracker = RequestTracker.create(txHashes, new Date(Date.now() + timeoutMs));
284
+ const batchRequester = new BatchTxRequester(
285
+ tracker,
297
286
  blockProposal,
298
287
  pinnedPeer,
299
- timeoutMs,
288
+ batchTxRequesterService,
289
+ logger,
290
+ new DateProvider(),
291
+ { txValidator: noopTxValidator },
300
292
  );
293
+ const fetchedTxs = await BatchTxRequester.collectAllTxs(batchRequester.run());
301
294
  const durationMs = timer.ms();
302
295
  return {
303
296
  type: 'BENCH_RESULT',
@@ -323,6 +316,37 @@ let workerConfig: P2PConfig | null = null;
323
316
  let workerLogger: Logger | null = null;
324
317
  let kvStore: Awaited<ReturnType<typeof openTmpStore>> | null = null;
325
318
 
319
+ async function stopWorker() {
320
+ try {
321
+ if (workerClient) {
322
+ await workerClient.stop();
323
+ workerClient = null;
324
+ }
325
+ } catch (e) {
326
+ workerLogger?.error('Error stopping worker client', e);
327
+ }
328
+ try {
329
+ if (kvStore?.close) {
330
+ await kvStore.close();
331
+ kvStore = null;
332
+ }
333
+ } catch (e) {
334
+ workerLogger?.error('Error closing kv store', e);
335
+ }
336
+ }
337
+
338
+ function gracefulExit(code: number = 0) {
339
+ try {
340
+ if (process.connected) {
341
+ process.disconnect();
342
+ }
343
+ } catch {
344
+ // IPC channel already closed
345
+ }
346
+ // Safety fallback if lingering handles prevent the event loop from draining
347
+ setTimeout(() => process.exit(code), 5000).unref();
348
+ }
349
+
326
350
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
327
351
  process.on('message', async msg => {
328
352
  const {
@@ -340,6 +364,7 @@ process.on('message', async msg => {
340
364
  const config: P2PConfig = {
341
365
  ...rawConfig,
342
366
  peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined,
367
+ priceBumpPercentage: 10n,
343
368
  } as P2PConfig;
344
369
 
345
370
  workerConfig = config;
@@ -368,10 +393,12 @@ process.on('message', async msg => {
368
393
  proofVerifier as ClientProtocolCircuitVerifier,
369
394
  worldState,
370
395
  epochCache,
396
+ { getCurrentMinFees: () => Promise.resolve(GasFees.empty()) },
371
397
  'test-p2p-bench-worker',
372
398
  undefined,
373
399
  telemetry as TelemetryClient,
374
400
  deps,
401
+ await l2BlockSource.getInitialHeader().hash(),
375
402
  );
376
403
 
377
404
  const testService = new TestLibP2PService(
@@ -411,13 +438,8 @@ process.on('message', async msg => {
411
438
  const cmd = msg as any;
412
439
  switch (cmd.type) {
413
440
  case 'STOP':
414
- if (workerClient) {
415
- await workerClient.stop();
416
- }
417
- if (kvStore?.close) {
418
- await kvStore.close();
419
- }
420
- process.exit(0);
441
+ await stopWorker();
442
+ gracefulExit(0);
421
443
  break;
422
444
 
423
445
  case 'SEND_TX':
@@ -427,6 +449,13 @@ process.on('message', async msg => {
427
449
  }
428
450
  break;
429
451
 
452
+ case 'GET_PEER_COUNT':
453
+ process.send!({
454
+ type: 'PEER_COUNT',
455
+ count: workerClient ? getConnectedPeerCount(workerClient) : 0,
456
+ });
457
+ break;
458
+
430
459
  case 'BENCH_REQRESP': {
431
460
  const benchCmd = cmd as BenchReqRespCommand;
432
461
  if (!workerClient || !workerTxPool || !workerAttestationPool || !workerConfig || !workerLogger) {
@@ -443,6 +472,7 @@ process.on('message', async msg => {
443
472
  // Reset state before each benchmark run to avoid cross-run contamination
444
473
  workerTxPool.resetState();
445
474
  workerAttestationPool.resetState();
475
+ resetPeerScores(workerClient);
446
476
 
447
477
  installUnlimitedRateLimits(workerClient);
448
478
 
@@ -459,13 +489,12 @@ process.on('message', async msg => {
459
489
  workerTxPool.clearTxs();
460
490
 
461
491
  workerLogger.info(
462
- `[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, collector=${benchCmd.collectorType}, distribution=${benchCmd.distribution}`,
492
+ `[BENCH] Aggregator starting benchmark: txCount=${benchCmd.txCount}, distribution=${benchCmd.distribution}`,
463
493
  );
464
494
 
465
495
  const result = await runAggregatorBenchmark(
466
496
  workerClient,
467
497
  blockProposal,
468
- benchCmd.collectorType,
469
498
  benchCmd.timeoutMs,
470
499
  benchCmd.pinnedPeerId,
471
500
  benchCmd.pinnedPeerIndex,
@@ -494,7 +523,12 @@ process.on('message', async msg => {
494
523
  }
495
524
  }
496
525
  } catch (err: any) {
497
- process.send!({ type: 'ERROR', error: err.message });
498
- process.exit(1);
526
+ try {
527
+ process.send!({ type: 'ERROR', error: err.message });
528
+ } catch {
529
+ // IPC channel may be closed
530
+ }
531
+ await stopWorker();
532
+ gracefulExit(1);
499
533
  }
500
534
  });
@@ -13,12 +13,7 @@ import { generatePeerIdPrivateKeys } from '../test-helpers/generate-peer-id-priv
13
13
  import { getPorts } from '../test-helpers/get-ports.js';
14
14
  import { makeEnr, makeEnrs } from '../test-helpers/make-enrs.js';
15
15
  import { BENCHMARK_CONSTANTS } from '../test-helpers/testbench-utils.js';
16
- import type {
17
- BenchReqRespCommand,
18
- BenchResultMessage,
19
- CollectorType,
20
- DistributionPattern,
21
- } from './p2p_client_testbench_worker.js';
16
+ import type { BenchReqRespCommand, BenchResultMessage, DistributionPattern } from './p2p_client_testbench_worker.js';
22
17
 
23
18
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
24
19
  const p2pRoot = path.resolve(__dirname, '../..');
@@ -29,15 +24,12 @@ const tsconfigPath = path.join(p2pRoot, 'tsconfig.json');
29
24
  const testChainConfig: ChainConfig = {
30
25
  l1ChainId: 31337,
31
26
  rollupVersion: 1,
32
- l1Contracts: {
33
- rollupAddress: EthAddress.random(),
34
- },
27
+ rollupAddress: EthAddress.random(),
35
28
  };
36
29
 
37
30
  export interface ReqRespBenchmarkConfig {
38
31
  txCount: number;
39
32
  distribution: DistributionPattern;
40
- collectorType: CollectorType;
41
33
  timeoutMs: number;
42
34
  pinnedPeerIndex?: number;
43
35
  blockNumber?: number;
@@ -47,7 +39,6 @@ export interface ReqRespBenchmarkConfig {
47
39
  export interface ReqRespBenchmarkResult {
48
40
  txCount: number;
49
41
  distribution: DistributionPattern;
50
- collector: CollectorType;
51
42
  durationMs: number;
52
43
  fetchedCount: number;
53
44
  success: boolean;
@@ -72,7 +63,6 @@ class WorkerClientManager {
72
63
  destroy() {
73
64
  this.cleanup().catch((error: Error) => {
74
65
  this.logger.error('Failed to cleanup worker client manager', error);
75
- process.exit(1);
76
66
  });
77
67
  }
78
68
 
@@ -81,13 +71,15 @@ class WorkerClientManager {
81
71
  * Note: We send the raw peerIdPrivateKey string instead of SecretValue
82
72
  * because SecretValue.toJSON() returns '[Redacted]', losing the value.
83
73
  * The worker must re-wrap it in SecretValue.
74
+ * We also omit priceBumpPercentage since it's a bigint and can't be
75
+ * serialized over IPC (which uses JSON under the hood).
84
76
  */
85
77
  private createClientConfig(
86
78
  clientIndex: number,
87
79
  port: number,
88
80
  otherNodes: string[],
89
- ): Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig> {
90
- return {
81
+ ): Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & { peerIdPrivateKey: string } & Partial<ChainConfig> {
82
+ const { priceBumpPercentage: _, ...config } = {
91
83
  ...getP2PDefaultConfig(),
92
84
  p2pEnabled: true,
93
85
  peerIdPrivateKey: this.peerIdPrivateKeys[clientIndex],
@@ -96,7 +88,10 @@ class WorkerClientManager {
96
88
  p2pPort: port,
97
89
  bootstrapNodes: [...otherNodes],
98
90
  ...this.p2pConfig,
99
- } as Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig>;
91
+ };
92
+ return config as Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & {
93
+ peerIdPrivateKey: string;
94
+ } & Partial<ChainConfig>;
100
95
  }
101
96
 
102
97
  /**
@@ -104,7 +99,9 @@ class WorkerClientManager {
104
99
  * Config uses raw string for peerIdPrivateKey (not SecretValue) for IPC serialization.
105
100
  */
106
101
  private spawnWorkerProcess(
107
- config: Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey: string } & Partial<ChainConfig>,
102
+ config: Omit<P2PConfig, 'peerIdPrivateKey' | 'priceBumpPercentage'> & {
103
+ peerIdPrivateKey: string;
104
+ } & Partial<ChainConfig>,
108
105
  clientIndex: number,
109
106
  ): [ChildProcess, Promise<void>] {
110
107
  const useCompiled = existsSync(workerJsPath);
@@ -418,6 +415,61 @@ class WorkerClientManager {
418
415
  this.logger.info('All worker processes cleaned up');
419
416
  }
420
417
 
418
+ /**
419
+ * Checks that the aggregator (client 0) has sufficient peer connections before running a benchmark.
420
+ * This prevents benchmark cases from starting with degraded connectivity after a previous case
421
+ * caused connection failures.
422
+ */
423
+ async waitForConnectivity(minPeers: number, timeoutMs: number = 15_000): Promise<number> {
424
+ const waitInterval = 1000;
425
+ let waited = 0;
426
+
427
+ while (waited < timeoutMs) {
428
+ const count = await this.getPeerCount(0, 5000);
429
+ if (count >= minPeers) {
430
+ this.logger.info(`Connectivity check passed: ${count}/${minPeers} peers connected`);
431
+ return count;
432
+ }
433
+ this.logger.debug(`Waiting for connectivity: ${count}/${minPeers} (waited ${waited}ms)`);
434
+ await sleep(waitInterval);
435
+ waited += waitInterval;
436
+ }
437
+
438
+ const finalCount = await this.getPeerCount(0, 5000);
439
+ this.logger.warn(`Connectivity check: only ${finalCount}/${minPeers} peers after ${timeoutMs}ms`);
440
+ return finalCount;
441
+ }
442
+
443
+ private getPeerCount(clientIndex: number, timeoutMs: number): Promise<number> {
444
+ return new Promise<number>(resolve => {
445
+ let resolved = false;
446
+
447
+ const handler = (msg: any) => {
448
+ if (resolved) {
449
+ return;
450
+ }
451
+ if (msg.type === 'PEER_COUNT') {
452
+ resolved = true;
453
+ clearTimeout(timeout);
454
+ this.processes[clientIndex].off('message', handler);
455
+ resolve(msg.count as number);
456
+ }
457
+ };
458
+
459
+ const timeout = setTimeout(() => {
460
+ if (resolved) {
461
+ return;
462
+ }
463
+ resolved = true;
464
+ this.processes[clientIndex].off('message', handler);
465
+ resolve(0);
466
+ }, timeoutMs);
467
+
468
+ this.processes[clientIndex].on('message', handler);
469
+ this.processes[clientIndex].send({ type: 'GET_PEER_COUNT' });
470
+ });
471
+ }
472
+
421
473
  /**
422
474
  * Run a req/resp benchmark across all worker clients.
423
475
  *
@@ -438,9 +490,7 @@ class WorkerClientManager {
438
490
  const blockNumber = config.blockNumber ?? 1;
439
491
  const pinnedPeerId = config.pinnedPeerIndex !== undefined ? this.peerIds[config.pinnedPeerIndex] : undefined;
440
492
 
441
- this.logger.info(
442
- `Starting req/resp benchmark: txCount=${config.txCount}, distribution=${config.distribution}, collector=${config.collectorType}`,
443
- );
493
+ this.logger.info(`Starting req/resp benchmark: txCount=${config.txCount}, distribution=${config.distribution}`);
444
494
 
445
495
  const readyPromises: Promise<void>[] = [];
446
496
 
@@ -450,7 +500,6 @@ class WorkerClientManager {
450
500
  txCount: config.txCount,
451
501
  peerCount,
452
502
  distribution: config.distribution,
453
- collectorType: config.collectorType,
454
503
  timeoutMs: config.timeoutMs,
455
504
  isAggregator: false,
456
505
  peerIndex: i,
@@ -472,7 +521,6 @@ class WorkerClientManager {
472
521
  txCount: config.txCount,
473
522
  peerCount,
474
523
  distribution: config.distribution,
475
- collectorType: config.collectorType,
476
524
  timeoutMs: config.timeoutMs,
477
525
  isAggregator: true,
478
526
  peerIndex: 0,
@@ -483,7 +531,8 @@ class WorkerClientManager {
483
531
  };
484
532
 
485
533
  this.processes[0].send(aggregatorCmd);
486
- const result = await this.waitForBenchResult(0, config.timeoutMs + 30000);
534
+ const aggregatorBudgetMs = config.timeoutMs + BENCHMARK_CONSTANTS.MAX_PEER_WAIT_MS + 30000;
535
+ const result = await this.waitForBenchResult(0, aggregatorBudgetMs);
487
536
 
488
537
  this.logger.info(
489
538
  `Benchmark complete: fetched=${result.fetchedCount}/${config.txCount}, duration=${result.durationMs.toFixed(0)}ms, success=${result.success}`,
@@ -492,7 +541,6 @@ class WorkerClientManager {
492
541
  return {
493
542
  txCount: config.txCount,
494
543
  distribution: config.distribution,
495
- collector: config.collectorType,
496
544
  durationMs: result.durationMs,
497
545
  fetchedCount: result.fetchedCount,
498
546
  success: result.success,
@@ -570,5 +618,4 @@ class WorkerClientManager {
570
618
  }
571
619
 
572
620
  export { WorkerClientManager, testChainConfig };
573
- export type { DistributionPattern, CollectorType } from './p2p_client_testbench_worker.js';
574
- export { COLLECTOR_DISPLAY_NAMES } from './p2p_client_testbench_worker.js';
621
+ export type { DistributionPattern } from './p2p_client_testbench_worker.js';
package/src/util.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  import { SecretValue } from '@aztec/foundation/config';
2
- import type { Logger } from '@aztec/foundation/log';
2
+ import { type Logger, createLogger } from '@aztec/foundation/log';
3
3
  import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
4
- import type { DataStoreConfig } from '@aztec/kv-store/config';
4
+ import type { DataStoreConfig } from '@aztec/stdlib/kv-store';
5
5
 
6
6
  import type { GossipSub } from '@chainsafe/libp2p-gossipsub';
7
7
  import { generateKeyPair, marshalPrivateKey, unmarshalPrivateKey } from '@libp2p/crypto/keys';
8
8
  import type { Identify } from '@libp2p/identify';
9
9
  import type { PeerId, PrivateKey } from '@libp2p/interface';
10
- import type { ConnectionManager } from '@libp2p/interface-internal';
10
+ import type { AddressManager, ConnectionManager } from '@libp2p/interface-internal';
11
11
  import { createFromPrivKey } from '@libp2p/peer-id-factory';
12
12
  import { resolve } from 'dns/promises';
13
13
  import { promises as fs } from 'fs';
@@ -15,7 +15,7 @@ import type { Libp2p } from 'libp2p';
15
15
  import net from 'net';
16
16
  import path from 'path';
17
17
 
18
- import type { P2PConfig } from './config.js';
18
+ import { DEFAULT_PUBLIC_IP_SERVICES, type P2PConfig } from './config.js';
19
19
 
20
20
  const PEER_ID_DATA_DIR_FILE = 'p2p-private-key';
21
21
 
@@ -31,6 +31,9 @@ export interface PubSubLibp2p extends Pick<Libp2p, 'status' | 'start' | 'stop' |
31
31
  | 'direct'
32
32
  | 'getMeshPeers'
33
33
  > & { score: Pick<GossipSub['score'], 'score'> };
34
+ components: {
35
+ addressManager: Pick<AddressManager, 'addObservedAddr' | 'confirmObservedAddr' | 'removeObservedAddr'>;
36
+ };
34
37
  };
35
38
  }
36
39
 
@@ -39,6 +42,7 @@ export type FullLibp2p = Libp2p<{
39
42
  pubsub: GossipSub;
40
43
  components: {
41
44
  connectionManager: ConnectionManager;
45
+ addressManager: AddressManager;
42
46
  };
43
47
  }>;
44
48
 
@@ -60,16 +64,25 @@ export function convertToMultiaddr(address: string, port: number, protocol: 'tcp
60
64
  }
61
65
 
62
66
  /**
63
- * Queries the public IP address of the machine.
67
+ * Queries the public IP address of the machine, trying multiple services in order.
68
+ * @param services - HTTPS URLs to try; defaults to {@link DEFAULT_PUBLIC_IP_SERVICES}.
64
69
  */
65
- export async function getPublicIp(): Promise<string> {
66
- const resp = await fetch('https://checkip.amazonaws.com/');
67
- const text = await resp.text();
68
- const address = text.trim();
69
- if (!isValidIpAddress(address)) {
70
- throw new Error(`Received invalid IP address from checkip service: ${address}`);
70
+ export async function getPublicIp(services: string[] = DEFAULT_PUBLIC_IP_SERVICES): Promise<string> {
71
+ const errors: string[] = [];
72
+ for (const url of services) {
73
+ try {
74
+ const resp = await fetch(url, { signal: AbortSignal.timeout(5000) });
75
+ const text = await resp.text();
76
+ const address = text.trim();
77
+ if (isValidIpAddress(address)) {
78
+ return address;
79
+ }
80
+ errors.push(`${url}: invalid IP "${address}"`);
81
+ } catch (err: any) {
82
+ errors.push(`${url}: ${err.message ?? err}`);
83
+ }
71
84
  }
72
- return address;
85
+ throw new Error(`Failed to determine public IP from all services:\n${errors.join('\n')}`);
73
86
  }
74
87
 
75
88
  export function isValidIpAddress(address: string): boolean {
@@ -107,18 +120,20 @@ export async function configureP2PClientAddresses(
107
120
  ): Promise<P2PConfig & DataStoreConfig> {
108
121
  const config = { ..._config };
109
122
  const { p2pIp, queryForIp, p2pBroadcastPort, p2pPort } = config;
123
+ const logger = createLogger('p2p:config');
110
124
 
111
125
  // If no broadcast port is provided, use the given p2p port as the broadcast port
112
126
  if (!p2pBroadcastPort) {
113
127
  config.p2pBroadcastPort = p2pPort;
114
128
  }
115
129
 
116
- // check if no announce IP was provided
117
- if (!p2pIp) {
118
- if (queryForIp) {
119
- const publicIp = await getPublicIp();
120
- config.p2pIp = publicIp;
121
- }
130
+ // Resolve the initial public IP so the ENR and announce address are set at startup.
131
+ // If queryForIp is enabled, discv5 will also track IP changes at runtime via enrUpdate.
132
+ if (!p2pIp && queryForIp) {
133
+ config.p2pIp = await getPublicIp(config.publicIpServices);
134
+ logger.info('Resolved initial public IP for P2P', { ip: config.p2pIp, queryForIp });
135
+ } else if (p2pIp) {
136
+ logger.info('Using configured static P2P IP', { ip: p2pIp, queryForIp });
122
137
  }
123
138
  // TODO(md): guard against setting a local ip address as the announce ip
124
139
 
package/src/versioning.ts CHANGED
@@ -1,33 +1,21 @@
1
- import { toBufferBE } from '@aztec/foundation/bigint-buffer';
2
1
  import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
3
2
  import { protocolContractsHash } from '@aztec/protocol-contracts';
4
3
  import type { ChainConfig } from '@aztec/stdlib/config';
5
- import {
6
- type ComponentsVersions,
7
- checkCompressedComponentVersion,
8
- compressComponentVersions,
9
- getComponentsVersionsFromConfig,
10
- } from '@aztec/stdlib/versioning';
4
+ import { compressComponentVersions, getComponentsVersionsFromConfig } from '@aztec/stdlib/versioning';
11
5
 
12
6
  import type { SignableENR } from '@nethermindeth/enr';
13
- import xxhashFactory from 'xxhash-wasm';
14
7
 
15
8
  import { AZTEC_ENR_CLIENT_VERSION_KEY, AZTEC_ENR_KEY } from './types/index.js';
16
9
 
17
- const USE_XX_HASH = false; // Enable to reduce the size of the ENR record for production
18
- const XX_HASH_LEN = 8;
19
- const xxhash = await xxhashFactory();
20
-
21
10
  /** Returns the component versions based on config and this build. */
22
11
  export function getVersions(config: ChainConfig) {
23
12
  return getComponentsVersionsFromConfig(config, protocolContractsHash, getVKTreeRoot());
24
13
  }
25
14
 
26
15
  /** Sets the aztec key on the ENR record with versioning info. */
27
- export function setAztecEnrKey(enr: SignableENR, config: ChainConfig, useXxHash = USE_XX_HASH) {
16
+ export function setAztecEnrKey(enr: SignableENR, config: ChainConfig) {
28
17
  const versions = getVersions(config);
29
- const value = versionsToEnrValue(versions, useXxHash);
30
- enr.set(AZTEC_ENR_KEY, value);
18
+ enr.set(AZTEC_ENR_KEY, Buffer.from(compressComponentVersions(versions)));
31
19
  return versions;
32
20
  }
33
21
 
@@ -37,21 +25,3 @@ export function setAztecClientVersionEnrKey(enr: SignableENR, clientVersion: str
37
25
  enr.set(AZTEC_ENR_CLIENT_VERSION_KEY, Buffer.from(clientVersion));
38
26
  }
39
27
  }
40
-
41
- /** Checks the given value from an ENR record against the expected versions. */
42
- export function checkAztecEnrVersion(enrValue: Buffer, expectedVersions: ComponentsVersions) {
43
- if (enrValue.length === XX_HASH_LEN) {
44
- const expected = versionsToEnrValue(expectedVersions, true);
45
- if (!Buffer.from(enrValue).equals(expected)) {
46
- throw new Error(`Expected ENR version ${expected.toString('hex')} but received ${enrValue.toString('hex')}`);
47
- }
48
- } else {
49
- const actual = Buffer.from(enrValue).toString();
50
- checkCompressedComponentVersion(actual, expectedVersions);
51
- }
52
- }
53
-
54
- function versionsToEnrValue(versions: ComponentsVersions, useXxHash: boolean) {
55
- const compressed = compressComponentVersions(versions);
56
- return useXxHash ? toBufferBE(xxhash.h64(compressed), XX_HASH_LEN) : Buffer.from(compressed);
57
- }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfdHhfY29sbGVjdG9yX3dvcmtlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NsaWVudC90ZXN0L3R4X3Byb3Bvc2FsX2NvbGxlY3Rvci9wcm9wb3NhbF90eF9jb2xsZWN0b3Jfd29ya2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"proposal_tx_collector_worker.d.ts","sourceRoot":"","sources":["../../../../src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts"],"names":[],"mappings":""}