@aztec/p2p 0.0.0-test.1 → 0.0.1-commit.5476d83

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 (385) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +1 -1
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +22 -9
  4. package/dest/client/factory.d.ts +14 -4
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +60 -24
  7. package/dest/client/index.d.ts +2 -1
  8. package/dest/client/index.d.ts.map +1 -1
  9. package/dest/client/index.js +1 -0
  10. package/dest/client/interface.d.ts +157 -0
  11. package/dest/client/interface.d.ts.map +1 -0
  12. package/dest/client/interface.js +9 -0
  13. package/dest/client/p2p_client.d.ts +72 -187
  14. package/dest/client/p2p_client.d.ts.map +1 -1
  15. package/dest/client/p2p_client.js +373 -177
  16. package/dest/config.d.ts +151 -125
  17. package/dest/config.d.ts.map +1 -1
  18. package/dest/config.js +183 -34
  19. package/dest/enr/generate-enr.d.ts +11 -3
  20. package/dest/enr/generate-enr.d.ts.map +1 -1
  21. package/dest/enr/generate-enr.js +27 -5
  22. package/dest/enr/index.d.ts +1 -1
  23. package/dest/errors/attestation-pool.error.d.ts +7 -0
  24. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  25. package/dest/errors/attestation-pool.error.js +12 -0
  26. package/dest/errors/reqresp.error.d.ts +1 -1
  27. package/dest/errors/reqresp.error.d.ts.map +1 -1
  28. package/dest/index.d.ts +4 -1
  29. package/dest/index.d.ts.map +1 -1
  30. package/dest/index.js +2 -0
  31. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +68 -8
  32. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  34. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  35. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +214 -63
  36. package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
  37. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +21 -6
  38. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  39. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +126 -25
  40. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +19 -6
  41. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  42. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +111 -21
  43. package/dest/mem_pools/attestation_pool/mocks.d.ts +225 -5
  44. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  45. package/dest/mem_pools/attestation_pool/mocks.js +9 -15
  46. package/dest/mem_pools/index.d.ts +1 -1
  47. package/dest/mem_pools/instrumentation.d.ts +10 -12
  48. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  49. package/dest/mem_pools/instrumentation.js +35 -38
  50. package/dest/mem_pools/interface.d.ts +1 -1
  51. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +62 -13
  52. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +469 -97
  54. package/dest/mem_pools/tx_pool/index.d.ts +1 -1
  55. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +34 -10
  56. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
  57. package/dest/mem_pools/tx_pool/memory_tx_pool.js +133 -36
  58. package/dest/mem_pools/tx_pool/priority.d.ts +1 -1
  59. package/dest/mem_pools/tx_pool/priority.js +1 -1
  60. package/dest/mem_pools/tx_pool/tx_pool.d.ts +65 -9
  61. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  62. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  63. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  64. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +264 -39
  65. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -2
  66. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  67. package/dest/msg_validators/attestation_validator/attestation_validator.js +45 -9
  68. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
  69. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  70. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +67 -0
  71. package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
  72. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
  73. package/dest/msg_validators/attestation_validator/index.js +1 -0
  74. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +6 -2
  75. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +1 -1
  76. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +73 -12
  77. package/dest/msg_validators/block_proposal_validator/index.d.ts +1 -1
  78. package/dest/msg_validators/index.d.ts +1 -1
  79. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +10 -0
  80. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -0
  81. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.js +36 -0
  82. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  83. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  84. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +3 -0
  85. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -0
  86. package/dest/msg_validators/tx_validator/allowed_public_setup.js +27 -0
  87. package/dest/msg_validators/tx_validator/archive_cache.d.ts +14 -0
  88. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -0
  89. package/dest/msg_validators/tx_validator/archive_cache.js +22 -0
  90. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +1 -1
  91. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  92. package/dest/msg_validators/tx_validator/block_header_validator.js +4 -4
  93. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  94. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  95. package/dest/msg_validators/tx_validator/data_validator.js +56 -86
  96. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +1 -3
  97. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/double_spend_validator.js +21 -27
  99. package/dest/msg_validators/tx_validator/factory.d.ts +15 -0
  100. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
  101. package/dest/msg_validators/tx_validator/factory.js +74 -0
  102. package/dest/msg_validators/tx_validator/gas_validator.d.ts +11 -0
  103. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -0
  104. package/dest/msg_validators/tx_validator/gas_validator.js +115 -0
  105. package/dest/msg_validators/tx_validator/index.d.ts +8 -1
  106. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  107. package/dest/msg_validators/tx_validator/index.js +7 -0
  108. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +8 -4
  109. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  110. package/dest/msg_validators/tx_validator/metadata_validator.js +39 -20
  111. package/dest/msg_validators/tx_validator/phases_validator.d.ts +14 -0
  112. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -0
  113. package/dest/msg_validators/tx_validator/phases_validator.js +93 -0
  114. package/dest/msg_validators/tx_validator/test_utils.d.ts +17 -0
  115. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -0
  116. package/dest/msg_validators/tx_validator/test_utils.js +22 -0
  117. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +12 -0
  118. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -0
  119. package/dest/msg_validators/tx_validator/timestamp_validator.js +32 -0
  120. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +8 -0
  121. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -0
  122. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +24 -0
  123. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +1 -1
  124. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  125. package/dest/msg_validators/tx_validator/tx_proof_validator.js +6 -5
  126. package/dest/services/data_store.d.ts +1 -1
  127. package/dest/services/data_store.d.ts.map +1 -1
  128. package/dest/services/discv5/discV5_service.d.ts +10 -9
  129. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  130. package/dest/services/discv5/discV5_service.js +63 -36
  131. package/dest/services/dummy_service.d.ts +50 -11
  132. package/dest/services/dummy_service.d.ts.map +1 -1
  133. package/dest/services/dummy_service.js +88 -5
  134. package/dest/services/encoding.d.ts +26 -7
  135. package/dest/services/encoding.d.ts.map +1 -1
  136. package/dest/services/encoding.js +73 -5
  137. package/dest/services/gossipsub/scoring.d.ts +1 -1
  138. package/dest/services/index.d.ts +5 -1
  139. package/dest/services/index.d.ts.map +1 -1
  140. package/dest/services/index.js +4 -0
  141. package/dest/services/libp2p/instrumentation.d.ts +20 -0
  142. package/dest/services/libp2p/instrumentation.d.ts.map +1 -0
  143. package/dest/services/libp2p/instrumentation.js +164 -0
  144. package/dest/services/libp2p/libp2p_service.d.ts +78 -89
  145. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  146. package/dest/services/libp2p/libp2p_service.js +698 -246
  147. package/dest/services/peer-manager/interface.d.ts +23 -0
  148. package/dest/services/peer-manager/interface.d.ts.map +1 -0
  149. package/dest/services/peer-manager/interface.js +1 -0
  150. package/dest/services/peer-manager/metrics.d.ts +6 -2
  151. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  152. package/dest/services/peer-manager/metrics.js +22 -2
  153. package/dest/services/peer-manager/peer_manager.d.ts +102 -22
  154. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  155. package/dest/services/peer-manager/peer_manager.js +549 -72
  156. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  157. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  158. package/dest/services/peer-manager/peer_scoring.js +40 -2
  159. package/dest/services/reqresp/config.d.ts +11 -9
  160. package/dest/services/reqresp/config.d.ts.map +1 -1
  161. package/dest/services/reqresp/config.js +18 -4
  162. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +2 -2
  163. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  164. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +10 -6
  165. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +31 -17
  166. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  167. package/dest/services/reqresp/connection-sampler/connection_sampler.js +142 -84
  168. package/dest/services/reqresp/index.d.ts +3 -2
  169. package/dest/services/reqresp/index.d.ts.map +1 -1
  170. package/dest/services/reqresp/index.js +2 -1
  171. package/dest/services/reqresp/interface.d.ts +73 -24
  172. package/dest/services/reqresp/interface.d.ts.map +1 -1
  173. package/dest/services/reqresp/interface.js +45 -26
  174. package/dest/services/reqresp/metrics.d.ts +1 -1
  175. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  176. package/dest/services/reqresp/protocols/auth.d.ts +43 -0
  177. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -0
  178. package/dest/services/reqresp/protocols/auth.js +71 -0
  179. package/dest/services/reqresp/protocols/block.d.ts +6 -1
  180. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  181. package/dest/services/reqresp/protocols/block.js +28 -5
  182. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +30 -0
  183. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -0
  184. package/dest/services/reqresp/protocols/block_txs/bitvector.js +75 -0
  185. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +11 -0
  186. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -0
  187. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +39 -0
  188. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +47 -0
  189. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -0
  190. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +75 -0
  191. package/dest/services/reqresp/protocols/block_txs/index.d.ts +4 -0
  192. package/dest/services/reqresp/protocols/block_txs/index.d.ts.map +1 -0
  193. package/dest/services/reqresp/protocols/block_txs/index.js +3 -0
  194. package/dest/services/reqresp/protocols/goodbye.d.ts +3 -5
  195. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  196. package/dest/services/reqresp/protocols/goodbye.js +7 -7
  197. package/dest/services/reqresp/protocols/index.d.ts +3 -1
  198. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  199. package/dest/services/reqresp/protocols/index.js +2 -0
  200. package/dest/services/reqresp/protocols/ping.d.ts +1 -3
  201. package/dest/services/reqresp/protocols/ping.d.ts.map +1 -1
  202. package/dest/services/reqresp/protocols/status.d.ts +39 -7
  203. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  204. package/dest/services/reqresp/protocols/status.js +72 -5
  205. package/dest/services/reqresp/protocols/tx.d.ts +13 -2
  206. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  207. package/dest/services/reqresp/protocols/tx.js +34 -6
  208. package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
  209. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +6 -4
  210. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  211. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -2
  212. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  213. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  214. package/dest/services/reqresp/rate-limiter/rate_limits.js +21 -1
  215. package/dest/services/reqresp/reqresp.d.ts +24 -66
  216. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  217. package/dest/services/reqresp/reqresp.js +298 -207
  218. package/dest/services/reqresp/status.d.ts +10 -4
  219. package/dest/services/reqresp/status.d.ts.map +1 -1
  220. package/dest/services/reqresp/status.js +9 -2
  221. package/dest/services/service.d.ts +23 -19
  222. package/dest/services/service.d.ts.map +1 -1
  223. package/dest/services/tx_collection/config.d.ts +25 -0
  224. package/dest/services/tx_collection/config.d.ts.map +1 -0
  225. package/dest/services/tx_collection/config.js +58 -0
  226. package/dest/services/tx_collection/fast_tx_collection.d.ts +50 -0
  227. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -0
  228. package/dest/services/tx_collection/fast_tx_collection.js +300 -0
  229. package/dest/services/tx_collection/index.d.ts +3 -0
  230. package/dest/services/tx_collection/index.d.ts.map +1 -0
  231. package/dest/services/tx_collection/index.js +2 -0
  232. package/dest/services/tx_collection/instrumentation.d.ts +10 -0
  233. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -0
  234. package/dest/services/tx_collection/instrumentation.js +34 -0
  235. package/dest/services/tx_collection/slow_tx_collection.d.ts +52 -0
  236. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -0
  237. package/dest/services/tx_collection/slow_tx_collection.js +177 -0
  238. package/dest/services/tx_collection/tx_collection.d.ts +109 -0
  239. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -0
  240. package/dest/services/tx_collection/tx_collection.js +128 -0
  241. package/dest/services/tx_collection/tx_collection_sink.d.ts +30 -0
  242. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -0
  243. package/dest/services/tx_collection/tx_collection_sink.js +111 -0
  244. package/dest/services/tx_collection/tx_source.d.ts +18 -0
  245. package/dest/services/tx_collection/tx_source.d.ts.map +1 -0
  246. package/dest/services/tx_collection/tx_source.js +31 -0
  247. package/dest/services/tx_provider.d.ts +49 -0
  248. package/dest/services/tx_provider.d.ts.map +1 -0
  249. package/dest/services/tx_provider.js +210 -0
  250. package/dest/services/tx_provider_instrumentation.d.ts +13 -0
  251. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -0
  252. package/dest/services/tx_provider_instrumentation.js +34 -0
  253. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
  254. package/dest/test-helpers/get-ports.d.ts +1 -1
  255. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  256. package/dest/test-helpers/index.d.ts +2 -1
  257. package/dest/test-helpers/index.d.ts.map +1 -1
  258. package/dest/test-helpers/index.js +1 -0
  259. package/dest/test-helpers/make-enrs.d.ts +1 -1
  260. package/dest/test-helpers/make-enrs.d.ts.map +1 -1
  261. package/dest/test-helpers/make-enrs.js +4 -5
  262. package/dest/test-helpers/make-test-p2p-clients.d.ts +33 -5
  263. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  264. package/dest/test-helpers/make-test-p2p-clients.js +86 -16
  265. package/dest/test-helpers/mock-pubsub.d.ts +59 -0
  266. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -0
  267. package/dest/test-helpers/mock-pubsub.js +130 -0
  268. package/dest/test-helpers/mock-tx-helpers.d.ts +12 -0
  269. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -0
  270. package/dest/test-helpers/mock-tx-helpers.js +19 -0
  271. package/dest/test-helpers/reqresp-nodes.d.ts +15 -11
  272. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  273. package/dest/test-helpers/reqresp-nodes.js +62 -28
  274. package/dest/testbench/p2p_client_testbench_worker.d.ts +1 -1
  275. package/dest/testbench/p2p_client_testbench_worker.js +103 -29
  276. package/dest/testbench/parse_log_file.d.ts +1 -1
  277. package/dest/testbench/parse_log_file.js +4 -4
  278. package/dest/testbench/testbench.d.ts +1 -1
  279. package/dest/testbench/testbench.js +4 -4
  280. package/dest/testbench/worker_client_manager.d.ts +1 -6
  281. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  282. package/dest/testbench/worker_client_manager.js +11 -19
  283. package/dest/types/index.d.ts +4 -2
  284. package/dest/types/index.d.ts.map +1 -1
  285. package/dest/types/index.js +2 -0
  286. package/dest/util.d.ts +24 -16
  287. package/dest/util.d.ts.map +1 -1
  288. package/dest/util.js +75 -69
  289. package/dest/versioning.d.ts +4 -4
  290. package/dest/versioning.d.ts.map +1 -1
  291. package/dest/versioning.js +8 -3
  292. package/package.json +32 -27
  293. package/src/bootstrap/bootstrap.ts +27 -11
  294. package/src/client/factory.ts +136 -45
  295. package/src/client/index.ts +1 -0
  296. package/src/client/interface.ts +198 -0
  297. package/src/client/p2p_client.ts +469 -330
  298. package/src/config.ts +305 -134
  299. package/src/enr/generate-enr.ts +39 -6
  300. package/src/errors/attestation-pool.error.ts +13 -0
  301. package/src/index.ts +4 -0
  302. package/src/mem_pools/attestation_pool/attestation_pool.ts +75 -7
  303. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +264 -65
  304. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +173 -34
  305. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +156 -30
  306. package/src/mem_pools/attestation_pool/mocks.ts +11 -10
  307. package/src/mem_pools/instrumentation.ts +43 -44
  308. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +549 -108
  309. package/src/mem_pools/tx_pool/memory_tx_pool.ts +153 -44
  310. package/src/mem_pools/tx_pool/priority.ts +1 -1
  311. package/src/mem_pools/tx_pool/tx_pool.ts +67 -8
  312. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +217 -34
  313. package/src/msg_validators/attestation_validator/attestation_validator.ts +54 -11
  314. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +91 -0
  315. package/src/msg_validators/attestation_validator/index.ts +1 -0
  316. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +82 -14
  317. package/src/msg_validators/msg_seen_validator/msg_seen_validator.ts +36 -0
  318. package/src/msg_validators/tx_validator/allowed_public_setup.ts +35 -0
  319. package/src/msg_validators/tx_validator/archive_cache.ts +28 -0
  320. package/src/msg_validators/tx_validator/block_header_validator.ts +4 -4
  321. package/src/msg_validators/tx_validator/data_validator.ts +81 -69
  322. package/src/msg_validators/tx_validator/double_spend_validator.ts +19 -17
  323. package/src/msg_validators/tx_validator/factory.ts +109 -0
  324. package/src/msg_validators/tx_validator/gas_validator.ts +134 -0
  325. package/src/msg_validators/tx_validator/index.ts +7 -0
  326. package/src/msg_validators/tx_validator/metadata_validator.ts +58 -21
  327. package/src/msg_validators/tx_validator/phases_validator.ts +116 -0
  328. package/src/msg_validators/tx_validator/test_utils.ts +43 -0
  329. package/src/msg_validators/tx_validator/timestamp_validator.ts +46 -0
  330. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +17 -0
  331. package/src/msg_validators/tx_validator/tx_proof_validator.ts +6 -5
  332. package/src/services/discv5/discV5_service.ts +84 -38
  333. package/src/services/dummy_service.ts +147 -9
  334. package/src/services/encoding.ts +80 -5
  335. package/src/services/index.ts +4 -0
  336. package/src/services/libp2p/instrumentation.ts +167 -0
  337. package/src/services/libp2p/libp2p_service.ts +866 -294
  338. package/src/services/peer-manager/interface.ts +29 -0
  339. package/src/services/peer-manager/metrics.ts +26 -1
  340. package/src/services/peer-manager/peer_manager.ts +654 -78
  341. package/src/services/peer-manager/peer_scoring.ts +46 -3
  342. package/src/services/reqresp/config.ts +26 -9
  343. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +12 -6
  344. package/src/services/reqresp/connection-sampler/connection_sampler.ts +148 -95
  345. package/src/services/reqresp/index.ts +2 -0
  346. package/src/services/reqresp/interface.ts +91 -36
  347. package/src/services/reqresp/metrics.ts +4 -1
  348. package/src/services/reqresp/protocols/auth.ts +83 -0
  349. package/src/services/reqresp/protocols/block.ts +24 -3
  350. package/src/services/reqresp/protocols/block_txs/bitvector.ts +90 -0
  351. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +53 -0
  352. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +79 -0
  353. package/src/services/reqresp/protocols/block_txs/index.ts +3 -0
  354. package/src/services/reqresp/protocols/goodbye.ts +9 -7
  355. package/src/services/reqresp/protocols/index.ts +2 -0
  356. package/src/services/reqresp/protocols/status.ts +117 -5
  357. package/src/services/reqresp/protocols/tx.ts +35 -6
  358. package/src/services/reqresp/rate-limiter/rate_limiter.ts +12 -3
  359. package/src/services/reqresp/rate-limiter/rate_limits.ts +21 -1
  360. package/src/services/reqresp/reqresp.ts +387 -256
  361. package/src/services/reqresp/status.ts +12 -3
  362. package/src/services/service.ts +45 -21
  363. package/src/services/tx_collection/config.ts +84 -0
  364. package/src/services/tx_collection/fast_tx_collection.ts +340 -0
  365. package/src/services/tx_collection/index.ts +2 -0
  366. package/src/services/tx_collection/instrumentation.ts +43 -0
  367. package/src/services/tx_collection/slow_tx_collection.ts +233 -0
  368. package/src/services/tx_collection/tx_collection.ts +215 -0
  369. package/src/services/tx_collection/tx_collection_sink.ts +129 -0
  370. package/src/services/tx_collection/tx_source.ts +37 -0
  371. package/src/services/tx_provider.ts +216 -0
  372. package/src/services/tx_provider_instrumentation.ts +44 -0
  373. package/src/test-helpers/index.ts +1 -0
  374. package/src/test-helpers/make-enrs.ts +4 -5
  375. package/src/test-helpers/make-test-p2p-clients.ts +111 -21
  376. package/src/test-helpers/mock-pubsub.ts +188 -0
  377. package/src/test-helpers/mock-tx-helpers.ts +24 -0
  378. package/src/test-helpers/reqresp-nodes.ts +86 -35
  379. package/src/testbench/p2p_client_testbench_worker.ts +151 -25
  380. package/src/testbench/parse_log_file.ts +4 -4
  381. package/src/testbench/testbench.ts +4 -4
  382. package/src/testbench/worker_client_manager.ts +17 -23
  383. package/src/types/index.ts +2 -0
  384. package/src/util.ts +105 -91
  385. package/src/versioning.ts +11 -4
@@ -0,0 +1,24 @@
1
+ import { Fr } from '@aztec/foundation/fields';
2
+ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
3
+ import { protocolContractsHash } from '@aztec/protocol-contracts';
4
+ import { mockTx } from '@aztec/stdlib/testing';
5
+ import { Tx } from '@aztec/stdlib/tx';
6
+
7
+ import type { P2PConfig } from '../config.js';
8
+
9
+ /**
10
+ * Helper function to create mock transactions with the correct metadata values
11
+ * that will pass validation when sent over the p2p network.
12
+ *
13
+ * @param config - The P2P configuration containing chainId and rollupVersion
14
+ * @param seed - Optional seed for the mock transaction
15
+ * @returns A mock transaction with valid metadata for p2p network transmission
16
+ */
17
+ export const createMockTxWithMetadata = (config: P2PConfig, seed?: number): Promise<Tx> => {
18
+ return mockTx(seed, {
19
+ chainId: new Fr(config.l1ChainId),
20
+ version: new Fr(config.rollupVersion),
21
+ vkTreeRoot: getVKTreeRoot(),
22
+ protocolContractsHash,
23
+ });
24
+ };
@@ -1,15 +1,22 @@
1
1
  import type { EpochCache } from '@aztec/epoch-cache';
2
2
  import { timesParallel } from '@aztec/foundation/collection';
3
+ import { SecretValue } from '@aztec/foundation/config';
4
+ import { createLogger } from '@aztec/foundation/log';
3
5
  import type { DataStoreConfig } from '@aztec/kv-store/config';
4
6
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
5
7
  import type { L2BlockSource } from '@aztec/stdlib/block';
6
8
  import { type ChainConfig, emptyChainConfig } from '@aztec/stdlib/config';
7
- import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
9
+ import type { ContractDataSource } from '@aztec/stdlib/contract';
10
+ import type {
11
+ ClientProtocolCircuitVerifier,
12
+ IVCProofVerificationResult,
13
+ WorldStateSynchronizer,
14
+ } from '@aztec/stdlib/interfaces/server';
8
15
  import type { P2PClientType } from '@aztec/stdlib/p2p';
9
16
  import type { Tx } from '@aztec/stdlib/tx';
17
+ import { compressComponentVersions } from '@aztec/stdlib/versioning';
10
18
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
11
19
 
12
- import { SignableENR } from '@chainsafe/enr';
13
20
  import { gossipsub } from '@chainsafe/libp2p-gossipsub';
14
21
  import { noise } from '@chainsafe/libp2p-noise';
15
22
  import { yamux } from '@chainsafe/libp2p-yamux';
@@ -19,6 +26,7 @@ import type { PeerId } from '@libp2p/interface';
19
26
  import { createSecp256k1PeerId } from '@libp2p/peer-id-factory';
20
27
  import { tcp } from '@libp2p/tcp';
21
28
  import { multiaddr } from '@multiformats/multiaddr';
29
+ import { SignableENR } from '@nethermindeth/enr';
22
30
  import getPort from 'get-port';
23
31
  import { type Libp2p, type Libp2pOptions, createLibp2p } from 'libp2p';
24
32
 
@@ -27,17 +35,20 @@ import type { BootnodeConfig, P2PConfig } from '../config.js';
27
35
  import type { MemPools } from '../mem_pools/interface.js';
28
36
  import { DiscV5Service } from '../services/discv5/discV5_service.js';
29
37
  import { LibP2PService } from '../services/libp2p/libp2p_service.js';
30
- import type { PeerScoring } from '../services/peer-manager/peer_scoring.js';
38
+ import { PeerManager } from '../services/peer-manager/peer_manager.js';
39
+ import { PeerScoring } from '../services/peer-manager/peer_scoring.js';
31
40
  import type { P2PReqRespConfig } from '../services/reqresp/config.js';
32
41
  import {
33
42
  ReqRespSubProtocol,
34
43
  type ReqRespSubProtocolHandlers,
44
+ type ReqRespSubProtocolRateLimits,
35
45
  type ReqRespSubProtocolValidators,
36
46
  noopValidator,
37
47
  } from '../services/reqresp/interface.js';
38
- import { pingHandler, statusHandler } from '../services/reqresp/protocols/index.js';
48
+ import { pingHandler } from '../services/reqresp/protocols/index.js';
39
49
  import { ReqResp } from '../services/reqresp/reqresp.js';
40
- import { type PubSubLibp2p, convertToMultiaddr, createLibP2PPeerIdFromPrivateKey } from '../util.js';
50
+ import { type FullLibp2p, type PubSubLibp2p, convertToMultiaddr, createLibP2PPeerIdFromPrivateKey } from '../util.js';
51
+ import { getVersions } from '../versioning.js';
41
52
 
42
53
  /**
43
54
  * Creates a libp2p node, pre configured.
@@ -50,13 +61,13 @@ export async function createLibp2pNode(
50
61
  port?: number,
51
62
  enableGossipSub: boolean = false,
52
63
  start: boolean = true,
53
- ): Promise<Libp2p> {
64
+ ): Promise<FullLibp2p> {
54
65
  port = port ?? (await getPort());
55
66
  const options: Libp2pOptions = {
56
67
  start,
57
68
  addresses: {
58
- listen: [`/ip4/0.0.0.0/tcp/${port}`],
59
- announce: [`/ip4/0.0.0.0/tcp/${port}`],
69
+ listen: [`/ip4/127.0.0.1/tcp/${port}`],
70
+ announce: [`/ip4/127.0.0.1/tcp/${port}`],
60
71
  },
61
72
  connectionEncryption: [noise()],
62
73
  streamMuxers: [yamux()],
@@ -86,7 +97,7 @@ export async function createLibp2pNode(
86
97
  });
87
98
  }
88
99
 
89
- return await createLibp2p(options);
100
+ return (await createLibp2p(options)) as FullLibp2p;
90
101
  }
91
102
 
92
103
  /**
@@ -98,7 +109,7 @@ export async function createLibp2pNode(
98
109
  export async function createTestLibP2PService<T extends P2PClientType>(
99
110
  clientType: T,
100
111
  boostrapAddrs: string[] = [],
101
- l2BlockSource: L2BlockSource,
112
+ archiver: L2BlockSource & ContractDataSource,
102
113
  worldStateSynchronizer: WorldStateSynchronizer,
103
114
  epochCache: EpochCache,
104
115
  mempools: MemPools<T>,
@@ -109,31 +120,53 @@ export async function createTestLibP2PService<T extends P2PClientType>(
109
120
  ) {
110
121
  peerId = peerId ?? (await createSecp256k1PeerId());
111
122
  const config = {
112
- tcpAnnounceAddress: `127.0.0.1:${port}`,
113
- udpAnnounceAddress: `127.0.0.1:${port}`,
114
- tcpListenAddress: `0.0.0.0:${port}`,
115
- udpListenAddress: `0.0.0.0:${port}`,
123
+ p2pIp: `127.0.0.1`,
124
+ p2pPort: port,
116
125
  bootstrapNodes: boostrapAddrs,
117
126
  peerCheckIntervalMS: 1000,
118
127
  maxPeerCount: 5,
119
128
  p2pEnabled: true,
120
- peerIdPrivateKey: Buffer.from(peerId.privateKey!).toString('hex'),
129
+ peerIdPrivateKey: new SecretValue(Buffer.from(peerId.privateKey!).toString('hex')),
121
130
  bootstrapNodeEnrVersionCheck: false,
122
131
  ...chainConfig,
123
132
  } as P2PConfig & DataStoreConfig;
124
- const discoveryService = new DiscV5Service(peerId, config, telemetry);
133
+ const discoveryService = new DiscV5Service(peerId, config, 'test-reqresp-node', telemetry);
125
134
  const proofVerifier = new AlwaysTrueCircuitVerifier();
126
135
 
127
136
  // No bootstrap nodes provided as the libp2p service will register them in the constructor
128
137
  const p2pNode = await createLibp2pNode([], peerId, port, /*enable gossip */ true, /**start */ false);
129
138
 
139
+ // Duplicated setup code from Libp2pService.new
140
+ const peerScoring = new PeerScoring(config);
141
+ const reqresp = new ReqResp(config, p2pNode, peerScoring);
142
+ const versions = getVersions(config);
143
+ const protocolVersion = compressComponentVersions(versions);
144
+ const peerManager = new PeerManager(
145
+ p2pNode,
146
+ discoveryService,
147
+ config,
148
+ telemetry,
149
+ createLogger(`p2p:peer_manager`),
150
+ peerScoring,
151
+ reqresp,
152
+ worldStateSynchronizer,
153
+ protocolVersion,
154
+ epochCache,
155
+ );
156
+
157
+ p2pNode.services.pubsub.score.params.appSpecificWeight = 10;
158
+ p2pNode.services.pubsub.score.params.appSpecificScore = (peerId: string) =>
159
+ peerManager.shouldDisableP2PGossip(peerId) ? -Infinity : peerManager.getPeerScore(peerId);
160
+
130
161
  return new LibP2PService<T>(
131
162
  clientType,
132
163
  config,
133
164
  p2pNode as PubSubLibp2p,
134
165
  discoveryService,
166
+ reqresp,
167
+ peerManager,
135
168
  mempools,
136
- l2BlockSource,
169
+ archiver,
137
170
  epochCache,
138
171
  proofVerifier,
139
172
  worldStateSynchronizer,
@@ -153,10 +186,12 @@ export type ReqRespNode = {
153
186
  // Mock sub protocol handlers
154
187
  export const MOCK_SUB_PROTOCOL_HANDLERS: ReqRespSubProtocolHandlers = {
155
188
  [ReqRespSubProtocol.PING]: pingHandler,
156
- [ReqRespSubProtocol.STATUS]: statusHandler,
189
+ [ReqRespSubProtocol.STATUS]: (_msg: any) => Promise.resolve(Buffer.from('status')),
157
190
  [ReqRespSubProtocol.TX]: (_msg: any) => Promise.resolve(Buffer.from('tx')),
158
191
  [ReqRespSubProtocol.GOODBYE]: (_msg: any) => Promise.resolve(Buffer.from('goodbye')),
159
192
  [ReqRespSubProtocol.BLOCK]: (_msg: any) => Promise.resolve(Buffer.from('block')),
193
+ [ReqRespSubProtocol.AUTH]: (_msg: any) => Promise.resolve(Buffer.from('auth')),
194
+ [ReqRespSubProtocol.BLOCK_TXS]: (_msg: any) => Promise.resolve(Buffer.from('block_txs')),
160
195
  };
161
196
 
162
197
  // By default, all requests are valid
@@ -167,14 +202,20 @@ export const MOCK_SUB_PROTOCOL_VALIDATORS: ReqRespSubProtocolValidators = {
167
202
  [ReqRespSubProtocol.TX]: noopValidator,
168
203
  [ReqRespSubProtocol.GOODBYE]: noopValidator,
169
204
  [ReqRespSubProtocol.BLOCK]: noopValidator,
205
+ [ReqRespSubProtocol.AUTH]: noopValidator,
206
+ [ReqRespSubProtocol.BLOCK_TXS]: noopValidator,
170
207
  };
171
208
 
172
209
  /**
173
210
  * @param numberOfNodes - the number of nodes to create
174
211
  * @returns An array of the created nodes
175
212
  */
176
- export const createNodes = (peerScoring: PeerScoring, numberOfNodes: number): Promise<ReqRespNode[]> => {
177
- return timesParallel(numberOfNodes, () => createReqResp(peerScoring));
213
+ export const createNodes = (
214
+ peerScoring: PeerScoring,
215
+ numberOfNodes: number,
216
+ rateLimits: Partial<ReqRespSubProtocolRateLimits> = {},
217
+ ): Promise<ReqRespNode[]> => {
218
+ return timesParallel(numberOfNodes, () => createReqResp(peerScoring, rateLimits));
178
219
  };
179
220
 
180
221
  export const startNodes = async (
@@ -193,17 +234,19 @@ export const stopNodes = async (nodes: ReqRespNode[]): Promise<void> => {
193
234
  };
194
235
 
195
236
  // Create a req resp node, exposing the underlying p2p node
196
- export const createReqResp = async (peerScoring: PeerScoring): Promise<ReqRespNode> => {
237
+ export const createReqResp = async (
238
+ peerScoring: PeerScoring,
239
+ rateLimits: Partial<ReqRespSubProtocolRateLimits> = {},
240
+ ): Promise<ReqRespNode> => {
197
241
  const p2p = await createLibp2pNode();
198
242
  const config: P2PReqRespConfig = {
199
243
  overallRequestTimeoutMs: 4000,
200
244
  individualRequestTimeoutMs: 2000,
245
+ dialTimeoutMs: 1000,
246
+ p2pOptimisticNegotiation: false,
201
247
  };
202
- const req = new ReqResp(config, p2p, peerScoring);
203
- return {
204
- p2p,
205
- req,
206
- };
248
+ const req = new ReqResp(config, p2p, peerScoring, undefined, rateLimits);
249
+ return { p2p, req };
207
250
  };
208
251
 
209
252
  // Given a node list; hand shake all of the nodes with each other
@@ -221,13 +264,19 @@ export const connectToPeers = async (nodes: ReqRespNode[]): Promise<void> => {
221
264
 
222
265
  // Mock circuit verifier for testing - reimplementation from bb to avoid dependency
223
266
  export class AlwaysTrueCircuitVerifier implements ClientProtocolCircuitVerifier {
224
- verifyProof(_tx: Tx): Promise<boolean> {
225
- return Promise.resolve(true);
267
+ stop(): Promise<void> {
268
+ return Promise.resolve();
269
+ }
270
+ verifyProof(_tx: Tx): Promise<IVCProofVerificationResult> {
271
+ return Promise.resolve({ valid: true, durationMs: 0, totalDurationMs: 0 });
226
272
  }
227
273
  }
228
274
  export class AlwaysFalseCircuitVerifier implements ClientProtocolCircuitVerifier {
229
- verifyProof(_tx: Tx): Promise<boolean> {
230
- return Promise.resolve(false);
275
+ stop(): Promise<void> {
276
+ return Promise.resolve();
277
+ }
278
+ verifyProof(_tx: Tx): Promise<IVCProofVerificationResult> {
279
+ return Promise.resolve({ valid: false, durationMs: 0, totalDurationMs: 0 });
231
280
  }
232
281
  }
233
282
 
@@ -235,12 +284,14 @@ export class AlwaysFalseCircuitVerifier implements ClientProtocolCircuitVerifier
235
284
  export function createBootstrapNodeConfig(privateKey: string, port: number, chainConfig: ChainConfig): BootnodeConfig {
236
285
  return {
237
286
  l1ChainId: chainConfig.l1ChainId,
238
- udpListenAddress: `0.0.0.0:${port}`,
239
- udpAnnounceAddress: `127.0.0.1:${port}`,
240
- peerIdPrivateKey: privateKey,
287
+ p2pIp: '127.0.0.1',
288
+ p2pPort: port,
289
+ peerIdPrivateKey: new SecretValue(privateKey),
241
290
  dataDirectory: undefined,
242
- dataStoreMapSizeKB: 0,
291
+ dataStoreMapSizeKb: 0,
243
292
  bootstrapNodes: [],
293
+ listenAddress: '127.0.0.1',
294
+ queryForIp: false,
244
295
  };
245
296
  }
246
297
 
@@ -263,7 +314,7 @@ export function createBootstrapNodeFromPrivateKey(
263
314
  export async function getBootstrapNodeEnr(privateKey: string, port: number) {
264
315
  const peerId = await createLibP2PPeerIdFromPrivateKey(privateKey);
265
316
  const enr = SignableENR.createFromPeerId(peerId);
266
- const listenAddrUdp = multiaddr(convertToMultiaddr(`127.0.0.1:${port}`, 'udp'));
317
+ const listenAddrUdp = multiaddr(convertToMultiaddr('127.0.0.1', port, 'udp'));
267
318
  enr.setLocationMultiaddr(listenAddrUdp);
268
319
 
269
320
  return enr;
@@ -5,28 +5,41 @@
5
5
  */
6
6
  import { MockL2BlockSource } from '@aztec/archiver/test';
7
7
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
8
+ import { EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
8
9
  import { EthAddress } from '@aztec/foundation/eth-address';
9
10
  import { createLogger } from '@aztec/foundation/log';
10
11
  import { sleep } from '@aztec/foundation/sleep';
11
12
  import type { DataStoreConfig } from '@aztec/kv-store/config';
12
13
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
13
- import type { WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
14
- import { P2PClientType } from '@aztec/stdlib/p2p';
14
+ import type { L2BlockSource } from '@aztec/stdlib/block';
15
+ import type { ContractDataSource } from '@aztec/stdlib/contract';
16
+ import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
17
+ import { P2PClientType, P2PMessage } from '@aztec/stdlib/p2p';
15
18
  import { Tx, TxStatus } from '@aztec/stdlib/tx';
19
+ import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
16
20
 
17
21
  import type { Message, PeerId } from '@libp2p/interface';
22
+ import { TopicValidatorResult } from '@libp2p/interface';
23
+ import EventEmitter from 'events';
18
24
 
19
25
  import type { P2PConfig } from '../config.js';
20
26
  import { createP2PClient } from '../index.js';
21
27
  import type { AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
28
+ import type { MemPools } from '../mem_pools/interface.js';
22
29
  import type { TxPool } from '../mem_pools/tx_pool/index.js';
30
+ import { LibP2PService } from '../services/libp2p/libp2p_service.js';
31
+ import type { PeerManager } from '../services/peer-manager/peer_manager.js';
32
+ import type { ReqResp } from '../services/reqresp/reqresp.js';
33
+ import type { PeerDiscoveryService } from '../services/service.js';
23
34
  import { AlwaysTrueCircuitVerifier } from '../test-helpers/reqresp-nodes.js';
35
+ import type { PubSubLibp2p } from '../util.js';
24
36
 
25
37
  // Simple mock implementation
26
38
  function mockTxPool(): TxPool {
27
39
  // Mock all methods
28
- return {
29
- addTxs: () => Promise.resolve(),
40
+ const pool: Omit<TxPool, keyof EventEmitter> = {
41
+ isEmpty: () => Promise.resolve(false),
42
+ addTxs: () => Promise.resolve(1),
30
43
  getTxByHash: () => Promise.resolve(undefined),
31
44
  getArchivedTxByHash: () => Promise.resolve(undefined),
32
45
  markAsMined: () => Promise.resolve(),
@@ -35,55 +48,159 @@ function mockTxPool(): TxPool {
35
48
  getAllTxs: () => Promise.resolve([]),
36
49
  getAllTxHashes: () => Promise.resolve([]),
37
50
  getPendingTxHashes: () => Promise.resolve([]),
51
+ getPendingTxCount: () => Promise.resolve(0),
38
52
  getMinedTxHashes: () => Promise.resolve([]),
39
53
  getTxStatus: () => Promise.resolve(TxStatus.PENDING),
54
+ getTxsByHash: () => Promise.resolve([]),
55
+ hasTxs: () => Promise.resolve([]),
56
+ hasTx: () => Promise.resolve(false),
57
+ updateConfig: () => {},
58
+ markTxsAsNonEvictable: () => Promise.resolve(),
59
+ cleanupDeletedMinedTxs: () => Promise.resolve(0),
40
60
  };
61
+ return Object.assign(new EventEmitter(), pool);
41
62
  }
42
63
 
43
64
  function mockAttestationPool(): AttestationPool {
44
65
  return {
66
+ isEmpty: () => Promise.resolve(false),
45
67
  addAttestations: () => Promise.resolve(),
46
68
  deleteAttestations: () => Promise.resolve(),
47
69
  deleteAttestationsOlderThan: () => Promise.resolve(),
48
70
  deleteAttestationsForSlot: () => Promise.resolve(),
49
71
  deleteAttestationsForSlotAndProposal: () => Promise.resolve(),
50
72
  getAttestationsForSlot: () => Promise.resolve([]),
73
+ getAttestationsForSlotAndProposal: () => Promise.resolve([]),
74
+ addBlockProposal: () => Promise.resolve(),
75
+ getBlockProposal: () => Promise.resolve(undefined),
76
+ hasBlockProposal: () => Promise.resolve(false),
77
+ hasAttestation: () => Promise.resolve(false),
78
+ canAddProposal: () => Promise.resolve(true),
79
+ canAddAttestation: () => Promise.resolve(true),
51
80
  };
52
81
  }
53
82
 
54
83
  function mockEpochCache(): EpochCacheInterface {
55
84
  return {
56
- getCommittee: () => Promise.resolve([] as EthAddress[]),
85
+ getCommittee: () => Promise.resolve({ committee: [], seed: 1n, epoch: EpochNumber.ZERO }),
57
86
  getProposerIndexEncoding: () => '0x' as `0x${string}`,
58
- getEpochAndSlotNow: () => ({ epoch: 0n, slot: 0n, ts: 0n }),
87
+ getEpochAndSlotNow: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n }),
59
88
  computeProposerIndex: () => 0n,
60
- getProposerInCurrentOrNextSlot: () =>
89
+ getProposerAttesterAddressInCurrentOrNextSlot: () =>
61
90
  Promise.resolve({
62
91
  currentProposer: EthAddress.ZERO,
63
92
  nextProposer: EthAddress.ZERO,
64
- currentSlot: 0n,
65
- nextSlot: 0n,
93
+ currentSlot: SlotNumber.ZERO,
94
+ nextSlot: SlotNumber.ZERO,
66
95
  }),
96
+ getEpochAndSlotInNextL1Slot: () => ({ epoch: EpochNumber.ZERO, slot: SlotNumber.ZERO, ts: 0n, now: 0n }),
67
97
  isInCommittee: () => Promise.resolve(false),
98
+ getRegisteredValidators: () => Promise.resolve([]),
99
+ filterInCommittee: () => Promise.resolve([]),
68
100
  };
69
101
  }
70
102
 
103
+ function mockWorldStateSynchronizer(): WorldStateSynchronizer {
104
+ return {
105
+ status: () =>
106
+ Promise.resolve({
107
+ syncSummary: {
108
+ latestBlockNumber: 0,
109
+ latestBlockHash: '',
110
+ finalizedBlockNumber: 0,
111
+ treesAreSynched: false,
112
+ oldestHistoricBlockNumber: 0,
113
+ },
114
+ }),
115
+ } as WorldStateSynchronizer;
116
+ }
117
+
118
+ class TestLibP2PService<T extends P2PClientType = P2PClientType.Full> extends LibP2PService<T> {
119
+ private disableTxValidation: boolean;
120
+ private gossipMessageCount: number = 0;
121
+
122
+ constructor(
123
+ clientType: T,
124
+ config: P2PConfig,
125
+ node: PubSubLibp2p,
126
+ peerDiscoveryService: PeerDiscoveryService,
127
+ reqresp: ReqResp,
128
+ peerManager: PeerManager,
129
+ mempools: MemPools<T>,
130
+ archiver: L2BlockSource & ContractDataSource,
131
+ epochCache: EpochCacheInterface,
132
+ proofVerifier: ClientProtocolCircuitVerifier,
133
+ worldStateSynchronizer: WorldStateSynchronizer,
134
+ telemetry: TelemetryClient,
135
+ logger = createLogger('p2p:test:libp2p_service'),
136
+ disableTxValidation = true,
137
+ ) {
138
+ super(
139
+ clientType,
140
+ config,
141
+ node,
142
+ peerDiscoveryService,
143
+ reqresp,
144
+ peerManager,
145
+ mempools,
146
+ archiver,
147
+ epochCache,
148
+ proofVerifier,
149
+ worldStateSynchronizer,
150
+ telemetry,
151
+ logger,
152
+ );
153
+ this.disableTxValidation = disableTxValidation;
154
+ }
155
+
156
+ public getGossipMessageCount(): number {
157
+ return this.gossipMessageCount;
158
+ }
159
+
160
+ public setDisableTxValidation(disable: boolean): void {
161
+ this.disableTxValidation = disable;
162
+ }
163
+
164
+ protected override async handleGossipedTx(payload: Buffer, msgId: string, source: PeerId) {
165
+ if (this.disableTxValidation) {
166
+ const p2pMessage = P2PMessage.fromMessageData(payload);
167
+ const tx = Tx.fromBuffer(p2pMessage.payload);
168
+ this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), TopicValidatorResult.Accept);
169
+
170
+ const txHash = tx.getTxHash();
171
+ const txHashString = txHash.toString();
172
+ this.logger.verbose(`Received tx ${txHashString} from external peer ${source.toString()}.`);
173
+ await this.mempools.txPool.addTxs([tx]);
174
+ } else {
175
+ await super.handleGossipedTx(payload, msgId, source);
176
+ }
177
+ }
178
+
179
+ protected override async handleNewGossipMessage(msg: Message, msgId: string, source: PeerId) {
180
+ this.gossipMessageCount++;
181
+ process.send!({
182
+ type: 'GOSSIP_RECEIVED',
183
+ count: this.gossipMessageCount,
184
+ });
185
+ await super.handleNewGossipMessage(msg, msgId, source);
186
+ }
187
+ }
188
+
71
189
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
72
190
  process.on('message', async msg => {
73
191
  const { type, config, clientIndex } = msg as { type: string; config: P2PConfig; clientIndex: number };
74
-
75
192
  try {
76
193
  if (type === 'START') {
77
194
  const txPool = mockTxPool();
78
195
  const attestationPool = mockAttestationPool();
79
196
  const epochCache = mockEpochCache();
80
- const worldState = {} as WorldStateSynchronizer;
197
+ const worldState = mockWorldStateSynchronizer();
81
198
  const l2BlockSource = new MockL2BlockSource();
82
- await l2BlockSource.createBlocks(100);
83
199
 
84
200
  const proofVerifier = new AlwaysTrueCircuitVerifier();
85
201
  const kvStore = await openTmpStore(`test-${clientIndex}`);
86
202
  const logger = createLogger(`p2p:${clientIndex}`);
203
+ const telemetry = getTelemetryClient();
87
204
 
88
205
  const deps = {
89
206
  txPool,
@@ -99,23 +216,32 @@ process.on('message', async msg => {
99
216
  proofVerifier,
100
217
  worldState,
101
218
  epochCache,
219
+ 'test-p2p-bench-worker',
102
220
  undefined,
221
+ telemetry,
103
222
  deps,
104
223
  );
105
224
 
106
- // Create spy for gossip messages
107
- let gossipMessageCount = 0;
108
- (client as any).p2pService.handleNewGossipMessage = (msg: Message, msgId: string, source: PeerId) => {
109
- gossipMessageCount++;
110
- process.send!({
111
- type: 'GOSSIP_RECEIVED',
112
- count: gossipMessageCount,
113
- });
114
- return (client as any).p2pService.constructor.prototype.handleNewGossipMessage.apply(
115
- (client as any).p2pService,
116
- [msg, msgId, source],
117
- );
118
- };
225
+ // Create test service with validation disabled
226
+ const testService = new TestLibP2PService(
227
+ P2PClientType.Full,
228
+ config,
229
+ (client as any).p2pService.node,
230
+ (client as any).p2pService.peerDiscoveryService,
231
+ (client as any).p2pService.mempools,
232
+ (client as any).p2pService.reqresp,
233
+ (client as any).p2pService.peerManager,
234
+ (client as any).p2pService.archiver,
235
+ epochCache,
236
+ proofVerifier,
237
+ worldState,
238
+ telemetry,
239
+ logger,
240
+ true, // disable validation
241
+ );
242
+
243
+ // Replace the existing p2pService with our test version
244
+ (client as any).p2pService = testService;
119
245
 
120
246
  await client.start();
121
247
  // Wait until the client is ready
@@ -37,7 +37,7 @@ function getTimestamp(line: string): number | null {
37
37
  }
38
38
 
39
39
  /**
40
- * Parses a single log line. If the line contains an "rpc.from" event,
40
+ * Parses a single log line. If the line contains an "Received tx" event,
41
41
  * it extracts the timestamp and the peer ID.
42
42
  */
43
43
  function parseReceivedTx(line: string): LogEvent | null {
@@ -52,9 +52,9 @@ function parseReceivedTx(line: string): LogEvent | null {
52
52
  return null;
53
53
  }
54
54
 
55
- // TODO: this is not correct - it is just the tx hash for now
56
- // Extract the peer ID after "Received tx"
57
- const peerIdMatch = line.match(/p2p:(\d+):/);
55
+ // Extract the peer ID from the log line
56
+ // Example format: "module":"p2p:1","msg":"Received tx 0x0feeafa65f25fd8d613fe4aca44fd65fe41c149ef1941e2019d40925c40748f9 from external peer 16Uiu2HAm8w4oxXF3TwDKoGL9U66thMXWqCgPnb2CgkYwmUqFCWbC."
57
+ const peerIdMatch = line.match(/"module":"p2p:(\d+)"/);
58
58
  if (!peerIdMatch) {
59
59
  logger.error('No peer Number found in received tx log');
60
60
  return null;
@@ -1,6 +1,6 @@
1
1
  import { createLogger } from '@aztec/foundation/log';
2
2
  import { sleep } from '@aztec/foundation/sleep';
3
- import { ClientIvcProof } from '@aztec/stdlib/proofs';
3
+ import { ChonkProof } from '@aztec/stdlib/proofs';
4
4
  import { mockTx } from '@aztec/stdlib/testing';
5
5
 
6
6
  import assert from 'assert';
@@ -21,7 +21,7 @@ async function main() {
21
21
  }
22
22
 
23
23
  const configPath = path.join(__dirname, '../../testbench/configurations', configFile);
24
- const config = await import(configPath, { assert: { type: 'json' } });
24
+ const config = await import(configPath, { with: { type: 'json' } });
25
25
  const testConfig = { ...testChainConfig, ...config.default };
26
26
  const numberOfClients = config.default.numberOfClients;
27
27
 
@@ -35,14 +35,14 @@ async function main() {
35
35
 
36
36
  // Send tx from client 0
37
37
  const tx = await mockTx(1, {
38
- clientIvcProof: ClientIvcProof.random(),
38
+ chonkProof: ChonkProof.random(),
39
39
  });
40
40
 
41
41
  workerClientManager.processes[0].send({ type: 'SEND_TX', tx: tx.toBuffer() });
42
42
  logger.info('Transaction sent from client 0');
43
43
 
44
44
  // Give time for message propagation
45
- await sleep(30000);
45
+ await sleep(10000);
46
46
  logger.info('Checking message propagation results');
47
47
 
48
48
  // Check message propagation results