@aztec/p2p 0.0.0-test.1 → 0.0.1-commit.24de95ac

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 (339) hide show
  1. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  2. package/dest/bootstrap/bootstrap.js +22 -9
  3. package/dest/client/factory.d.ts +13 -3
  4. package/dest/client/factory.d.ts.map +1 -1
  5. package/dest/client/factory.js +60 -24
  6. package/dest/client/index.d.ts +1 -0
  7. package/dest/client/index.d.ts.map +1 -1
  8. package/dest/client/index.js +1 -0
  9. package/dest/client/interface.d.ts +155 -0
  10. package/dest/client/interface.d.ts.map +1 -0
  11. package/dest/client/interface.js +9 -0
  12. package/dest/client/p2p_client.d.ts +72 -169
  13. package/dest/client/p2p_client.d.ts.map +1 -1
  14. package/dest/client/p2p_client.js +365 -174
  15. package/dest/config.d.ts +123 -103
  16. package/dest/config.d.ts.map +1 -1
  17. package/dest/config.js +173 -34
  18. package/dest/enr/generate-enr.d.ts +10 -2
  19. package/dest/enr/generate-enr.d.ts.map +1 -1
  20. package/dest/enr/generate-enr.js +27 -5
  21. package/dest/index.d.ts +3 -0
  22. package/dest/index.d.ts.map +1 -1
  23. package/dest/index.js +2 -0
  24. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +42 -4
  25. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  26. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +204 -54
  28. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +10 -2
  29. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +93 -15
  31. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +10 -2
  32. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +86 -18
  34. package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -2
  35. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  36. package/dest/mem_pools/attestation_pool/mocks.js +9 -15
  37. package/dest/mem_pools/instrumentation.d.ts +7 -11
  38. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  39. package/dest/mem_pools/instrumentation.js +25 -37
  40. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +93 -9
  41. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  42. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +469 -97
  43. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +33 -9
  44. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +1 -1
  45. package/dest/mem_pools/tx_pool/memory_tx_pool.js +133 -36
  46. package/dest/mem_pools/tx_pool/priority.js +1 -1
  47. package/dest/mem_pools/tx_pool/tx_pool.d.ts +64 -8
  48. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  49. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  50. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +264 -39
  51. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +1 -0
  52. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  53. package/dest/msg_validators/attestation_validator/attestation_validator.js +45 -9
  54. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +5 -1
  55. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +1 -1
  56. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +61 -12
  57. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +10 -0
  58. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -0
  59. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.js +36 -0
  60. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +3 -0
  61. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -0
  62. package/dest/msg_validators/tx_validator/allowed_public_setup.js +27 -0
  63. package/dest/msg_validators/tx_validator/archive_cache.d.ts +14 -0
  64. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -0
  65. package/dest/msg_validators/tx_validator/archive_cache.js +22 -0
  66. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  67. package/dest/msg_validators/tx_validator/block_header_validator.js +4 -4
  68. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  69. package/dest/msg_validators/tx_validator/data_validator.js +56 -86
  70. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +0 -2
  71. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  72. package/dest/msg_validators/tx_validator/double_spend_validator.js +21 -27
  73. package/dest/msg_validators/tx_validator/factory.d.ts +15 -0
  74. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
  75. package/dest/msg_validators/tx_validator/factory.js +74 -0
  76. package/dest/msg_validators/tx_validator/gas_validator.d.ts +11 -0
  77. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -0
  78. package/dest/msg_validators/tx_validator/gas_validator.js +115 -0
  79. package/dest/msg_validators/tx_validator/index.d.ts +7 -0
  80. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  81. package/dest/msg_validators/tx_validator/index.js +7 -0
  82. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +7 -3
  83. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  84. package/dest/msg_validators/tx_validator/metadata_validator.js +39 -20
  85. package/dest/msg_validators/tx_validator/phases_validator.d.ts +14 -0
  86. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -0
  87. package/dest/msg_validators/tx_validator/phases_validator.js +91 -0
  88. package/dest/msg_validators/tx_validator/test_utils.d.ts +17 -0
  89. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -0
  90. package/dest/msg_validators/tx_validator/test_utils.js +22 -0
  91. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +12 -0
  92. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -0
  93. package/dest/msg_validators/tx_validator/timestamp_validator.js +32 -0
  94. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +8 -0
  95. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -0
  96. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +24 -0
  97. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/tx_proof_validator.js +6 -5
  99. package/dest/services/discv5/discV5_service.d.ts +9 -8
  100. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  101. package/dest/services/discv5/discV5_service.js +63 -36
  102. package/dest/services/dummy_service.d.ts +49 -10
  103. package/dest/services/dummy_service.d.ts.map +1 -1
  104. package/dest/services/dummy_service.js +88 -5
  105. package/dest/services/encoding.d.ts +25 -6
  106. package/dest/services/encoding.d.ts.map +1 -1
  107. package/dest/services/encoding.js +73 -5
  108. package/dest/services/index.d.ts +4 -0
  109. package/dest/services/index.d.ts.map +1 -1
  110. package/dest/services/index.js +4 -0
  111. package/dest/services/libp2p/instrumentation.d.ts +18 -0
  112. package/dest/services/libp2p/instrumentation.d.ts.map +1 -0
  113. package/dest/services/libp2p/instrumentation.js +157 -0
  114. package/dest/services/libp2p/libp2p_service.d.ts +87 -42
  115. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  116. package/dest/services/libp2p/libp2p_service.js +500 -218
  117. package/dest/services/peer-manager/interface.d.ts +23 -0
  118. package/dest/services/peer-manager/interface.d.ts.map +1 -0
  119. package/dest/services/peer-manager/interface.js +1 -0
  120. package/dest/services/peer-manager/metrics.d.ts +3 -1
  121. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  122. package/dest/services/peer-manager/metrics.js +11 -2
  123. package/dest/services/peer-manager/peer_manager.d.ts +126 -15
  124. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  125. package/dest/services/peer-manager/peer_manager.js +547 -72
  126. package/dest/services/reqresp/config.d.ts +10 -8
  127. package/dest/services/reqresp/config.d.ts.map +1 -1
  128. package/dest/services/reqresp/config.js +18 -4
  129. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +1 -1
  130. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  131. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +10 -6
  132. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +30 -13
  133. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  134. package/dest/services/reqresp/connection-sampler/connection_sampler.js +142 -84
  135. package/dest/services/reqresp/index.d.ts +2 -1
  136. package/dest/services/reqresp/index.d.ts.map +1 -1
  137. package/dest/services/reqresp/index.js +2 -1
  138. package/dest/services/reqresp/interface.d.ts +72 -23
  139. package/dest/services/reqresp/interface.d.ts.map +1 -1
  140. package/dest/services/reqresp/interface.js +45 -26
  141. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  142. package/dest/services/reqresp/protocols/auth.d.ts +43 -0
  143. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -0
  144. package/dest/services/reqresp/protocols/auth.js +71 -0
  145. package/dest/services/reqresp/protocols/block.d.ts +5 -0
  146. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  147. package/dest/services/reqresp/protocols/block.js +28 -5
  148. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +30 -0
  149. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -0
  150. package/dest/services/reqresp/protocols/block_txs/bitvector.js +75 -0
  151. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +11 -0
  152. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -0
  153. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +39 -0
  154. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +49 -0
  155. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -0
  156. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +75 -0
  157. package/dest/services/reqresp/protocols/block_txs/index.d.ts +4 -0
  158. package/dest/services/reqresp/protocols/block_txs/index.d.ts.map +1 -0
  159. package/dest/services/reqresp/protocols/block_txs/index.js +3 -0
  160. package/dest/services/reqresp/protocols/goodbye.d.ts +2 -4
  161. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  162. package/dest/services/reqresp/protocols/goodbye.js +7 -7
  163. package/dest/services/reqresp/protocols/index.d.ts +2 -0
  164. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  165. package/dest/services/reqresp/protocols/index.js +2 -0
  166. package/dest/services/reqresp/protocols/ping.d.ts +0 -2
  167. package/dest/services/reqresp/protocols/ping.d.ts.map +1 -1
  168. package/dest/services/reqresp/protocols/status.d.ts +38 -6
  169. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  170. package/dest/services/reqresp/protocols/status.js +72 -5
  171. package/dest/services/reqresp/protocols/tx.d.ts +12 -1
  172. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  173. package/dest/services/reqresp/protocols/tx.js +34 -6
  174. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +4 -2
  175. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  176. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -2
  177. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  178. package/dest/services/reqresp/rate-limiter/rate_limits.js +21 -1
  179. package/dest/services/reqresp/reqresp.d.ts +45 -47
  180. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  181. package/dest/services/reqresp/reqresp.js +298 -207
  182. package/dest/services/reqresp/status.d.ts +9 -3
  183. package/dest/services/reqresp/status.d.ts.map +1 -1
  184. package/dest/services/reqresp/status.js +9 -2
  185. package/dest/services/service.d.ts +22 -18
  186. package/dest/services/service.d.ts.map +1 -1
  187. package/dest/services/tx_collection/config.d.ts +25 -0
  188. package/dest/services/tx_collection/config.d.ts.map +1 -0
  189. package/dest/services/tx_collection/config.js +58 -0
  190. package/dest/services/tx_collection/fast_tx_collection.d.ts +56 -0
  191. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -0
  192. package/dest/services/tx_collection/fast_tx_collection.js +300 -0
  193. package/dest/services/tx_collection/index.d.ts +3 -0
  194. package/dest/services/tx_collection/index.d.ts.map +1 -0
  195. package/dest/services/tx_collection/index.js +2 -0
  196. package/dest/services/tx_collection/instrumentation.d.ts +10 -0
  197. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -0
  198. package/dest/services/tx_collection/instrumentation.js +34 -0
  199. package/dest/services/tx_collection/slow_tx_collection.d.ts +54 -0
  200. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -0
  201. package/dest/services/tx_collection/slow_tx_collection.js +176 -0
  202. package/dest/services/tx_collection/tx_collection.d.ts +110 -0
  203. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -0
  204. package/dest/services/tx_collection/tx_collection.js +128 -0
  205. package/dest/services/tx_collection/tx_collection_sink.d.ts +30 -0
  206. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -0
  207. package/dest/services/tx_collection/tx_collection_sink.js +111 -0
  208. package/dest/services/tx_collection/tx_source.d.ts +18 -0
  209. package/dest/services/tx_collection/tx_source.d.ts.map +1 -0
  210. package/dest/services/tx_collection/tx_source.js +31 -0
  211. package/dest/services/tx_provider.d.ts +49 -0
  212. package/dest/services/tx_provider.d.ts.map +1 -0
  213. package/dest/services/tx_provider.js +210 -0
  214. package/dest/services/tx_provider_instrumentation.d.ts +13 -0
  215. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -0
  216. package/dest/services/tx_provider_instrumentation.js +34 -0
  217. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  218. package/dest/test-helpers/index.d.ts +1 -0
  219. package/dest/test-helpers/index.d.ts.map +1 -1
  220. package/dest/test-helpers/index.js +1 -0
  221. package/dest/test-helpers/make-enrs.d.ts.map +1 -1
  222. package/dest/test-helpers/make-enrs.js +4 -5
  223. package/dest/test-helpers/make-test-p2p-clients.d.ts +32 -4
  224. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  225. package/dest/test-helpers/make-test-p2p-clients.js +86 -16
  226. package/dest/test-helpers/mock-pubsub.d.ts +59 -0
  227. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -0
  228. package/dest/test-helpers/mock-pubsub.js +130 -0
  229. package/dest/test-helpers/mock-tx-helpers.d.ts +12 -0
  230. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -0
  231. package/dest/test-helpers/mock-tx-helpers.js +19 -0
  232. package/dest/test-helpers/reqresp-nodes.d.ts +14 -10
  233. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  234. package/dest/test-helpers/reqresp-nodes.js +62 -28
  235. package/dest/testbench/p2p_client_testbench_worker.js +96 -25
  236. package/dest/testbench/parse_log_file.js +4 -4
  237. package/dest/testbench/testbench.js +4 -4
  238. package/dest/testbench/worker_client_manager.d.ts +0 -5
  239. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  240. package/dest/testbench/worker_client_manager.js +11 -19
  241. package/dest/types/index.d.ts +3 -1
  242. package/dest/types/index.d.ts.map +1 -1
  243. package/dest/types/index.js +2 -0
  244. package/dest/util.d.ts +22 -15
  245. package/dest/util.d.ts.map +1 -1
  246. package/dest/util.js +64 -67
  247. package/dest/versioning.d.ts +3 -3
  248. package/dest/versioning.d.ts.map +1 -1
  249. package/dest/versioning.js +8 -3
  250. package/package.json +28 -24
  251. package/src/bootstrap/bootstrap.ts +27 -11
  252. package/src/client/factory.ts +136 -45
  253. package/src/client/index.ts +1 -0
  254. package/src/client/interface.ts +195 -0
  255. package/src/client/p2p_client.ts +460 -327
  256. package/src/config.ts +288 -134
  257. package/src/enr/generate-enr.ts +39 -6
  258. package/src/index.ts +4 -0
  259. package/src/mem_pools/attestation_pool/attestation_pool.ts +48 -4
  260. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +241 -55
  261. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +117 -20
  262. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +114 -22
  263. package/src/mem_pools/attestation_pool/mocks.ts +11 -10
  264. package/src/mem_pools/instrumentation.ts +32 -46
  265. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +549 -108
  266. package/src/mem_pools/tx_pool/memory_tx_pool.ts +153 -44
  267. package/src/mem_pools/tx_pool/priority.ts +1 -1
  268. package/src/mem_pools/tx_pool/tx_pool.ts +67 -8
  269. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +217 -34
  270. package/src/msg_validators/attestation_validator/attestation_validator.ts +55 -10
  271. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +66 -14
  272. package/src/msg_validators/msg_seen_validator/msg_seen_validator.ts +36 -0
  273. package/src/msg_validators/tx_validator/allowed_public_setup.ts +35 -0
  274. package/src/msg_validators/tx_validator/archive_cache.ts +28 -0
  275. package/src/msg_validators/tx_validator/block_header_validator.ts +4 -4
  276. package/src/msg_validators/tx_validator/data_validator.ts +81 -69
  277. package/src/msg_validators/tx_validator/double_spend_validator.ts +19 -17
  278. package/src/msg_validators/tx_validator/factory.ts +109 -0
  279. package/src/msg_validators/tx_validator/gas_validator.ts +134 -0
  280. package/src/msg_validators/tx_validator/index.ts +7 -0
  281. package/src/msg_validators/tx_validator/metadata_validator.ts +58 -21
  282. package/src/msg_validators/tx_validator/phases_validator.ts +114 -0
  283. package/src/msg_validators/tx_validator/test_utils.ts +43 -0
  284. package/src/msg_validators/tx_validator/timestamp_validator.ts +46 -0
  285. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +17 -0
  286. package/src/msg_validators/tx_validator/tx_proof_validator.ts +6 -5
  287. package/src/services/discv5/discV5_service.ts +84 -38
  288. package/src/services/dummy_service.ts +147 -9
  289. package/src/services/encoding.ts +80 -5
  290. package/src/services/index.ts +4 -0
  291. package/src/services/libp2p/instrumentation.ts +158 -0
  292. package/src/services/libp2p/libp2p_service.ts +646 -263
  293. package/src/services/peer-manager/interface.ts +29 -0
  294. package/src/services/peer-manager/metrics.ts +16 -1
  295. package/src/services/peer-manager/peer_manager.ts +652 -78
  296. package/src/services/reqresp/config.ts +26 -9
  297. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +12 -6
  298. package/src/services/reqresp/connection-sampler/connection_sampler.ts +148 -95
  299. package/src/services/reqresp/index.ts +2 -0
  300. package/src/services/reqresp/interface.ts +91 -36
  301. package/src/services/reqresp/metrics.ts +4 -1
  302. package/src/services/reqresp/protocols/auth.ts +83 -0
  303. package/src/services/reqresp/protocols/block.ts +24 -3
  304. package/src/services/reqresp/protocols/block_txs/bitvector.ts +90 -0
  305. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +53 -0
  306. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +79 -0
  307. package/src/services/reqresp/protocols/block_txs/index.ts +3 -0
  308. package/src/services/reqresp/protocols/goodbye.ts +9 -7
  309. package/src/services/reqresp/protocols/index.ts +2 -0
  310. package/src/services/reqresp/protocols/status.ts +117 -5
  311. package/src/services/reqresp/protocols/tx.ts +35 -6
  312. package/src/services/reqresp/rate-limiter/rate_limiter.ts +12 -3
  313. package/src/services/reqresp/rate-limiter/rate_limits.ts +21 -1
  314. package/src/services/reqresp/reqresp.ts +387 -256
  315. package/src/services/reqresp/status.ts +12 -3
  316. package/src/services/service.ts +45 -21
  317. package/src/services/tx_collection/config.ts +84 -0
  318. package/src/services/tx_collection/fast_tx_collection.ts +340 -0
  319. package/src/services/tx_collection/index.ts +2 -0
  320. package/src/services/tx_collection/instrumentation.ts +43 -0
  321. package/src/services/tx_collection/slow_tx_collection.ts +232 -0
  322. package/src/services/tx_collection/tx_collection.ts +215 -0
  323. package/src/services/tx_collection/tx_collection_sink.ts +129 -0
  324. package/src/services/tx_collection/tx_source.ts +37 -0
  325. package/src/services/tx_provider.ts +216 -0
  326. package/src/services/tx_provider_instrumentation.ts +44 -0
  327. package/src/test-helpers/index.ts +1 -0
  328. package/src/test-helpers/make-enrs.ts +4 -5
  329. package/src/test-helpers/make-test-p2p-clients.ts +111 -21
  330. package/src/test-helpers/mock-pubsub.ts +188 -0
  331. package/src/test-helpers/mock-tx-helpers.ts +24 -0
  332. package/src/test-helpers/reqresp-nodes.ts +86 -35
  333. package/src/testbench/p2p_client_testbench_worker.ts +145 -22
  334. package/src/testbench/parse_log_file.ts +4 -4
  335. package/src/testbench/testbench.ts +4 -4
  336. package/src/testbench/worker_client_manager.ts +17 -23
  337. package/src/types/index.ts +2 -0
  338. package/src/util.ts +93 -89
  339. package/src/versioning.ts +11 -4
@@ -0,0 +1,111 @@
1
+ import { elapsed } from '@aztec/foundation/timer';
2
+ import EventEmitter from 'node:events';
3
+ import { TxCollectionInstrumentation } from './instrumentation.js';
4
+ /**
5
+ * Executes collection requests from the fast and slow collection loops, and handles collected txs
6
+ * by adding them to the tx pool and emitting events, as well as handling logging and metrics.
7
+ */ export class TxCollectionSink extends EventEmitter {
8
+ txPool;
9
+ log;
10
+ instrumentation;
11
+ constructor(txPool, telemetryClient, log){
12
+ super(), this.txPool = txPool, this.log = log;
13
+ this.instrumentation = new TxCollectionInstrumentation(telemetryClient, 'TxCollection');
14
+ }
15
+ async collect(collectValidTxsFn, requested, info) {
16
+ this.log.trace(`Requesting ${requested.length} txs via ${info.description}`, {
17
+ ...info,
18
+ requestedTxs: requested.map((t)=>t.toString())
19
+ });
20
+ // Execute collection function and measure the time taken, catching any errors.
21
+ const [duration, txs] = await elapsed(async ()=>{
22
+ try {
23
+ const response = await collectValidTxsFn(requested);
24
+ return response.filter((tx)=>tx !== undefined);
25
+ } catch (err) {
26
+ this.log.error(`Error collecting txs via ${info.description}`, err, {
27
+ ...info,
28
+ requestedTxs: requested.map((hash)=>hash.toString())
29
+ });
30
+ return [];
31
+ }
32
+ });
33
+ if (txs.length === 0) {
34
+ this.log.trace(`No txs found via ${info.description}`, {
35
+ ...info,
36
+ requestedTxs: requested.map((t)=>t.toString())
37
+ });
38
+ return {
39
+ txs,
40
+ requested,
41
+ duration
42
+ };
43
+ }
44
+ // Validate tx hashes for all collected txs from external sources
45
+ const validTxs = [];
46
+ const invalidTxHashes = [];
47
+ await Promise.all(txs.map(async (tx)=>{
48
+ const isValid = await tx.validateTxHash();
49
+ if (isValid) {
50
+ validTxs.push(tx);
51
+ } else {
52
+ invalidTxHashes.push(tx.getTxHash().toString());
53
+ }
54
+ }));
55
+ if (invalidTxHashes.length > 0) {
56
+ this.log.warn(`Rejecting ${invalidTxHashes.length} txs with invalid hashes from ${info.description}`, {
57
+ ...info,
58
+ invalidTxHashes
59
+ });
60
+ }
61
+ if (validTxs.length === 0) {
62
+ this.log.trace(`No valid txs found via ${info.description} after validation`, {
63
+ ...info,
64
+ requestedTxs: requested.map((t)=>t.toString()),
65
+ invalidTxHashes
66
+ });
67
+ return {
68
+ txs: [],
69
+ requested,
70
+ duration
71
+ };
72
+ }
73
+ this.log.verbose(`Collected ${validTxs.length} txs out of ${requested.length} requested via ${info.description} in ${duration}ms`, {
74
+ ...info,
75
+ duration,
76
+ txs: validTxs.map((t)=>t.getTxHash().toString()),
77
+ requestedTxs: requested.map((t)=>t.toString()),
78
+ rejectedCount: invalidTxHashes.length
79
+ });
80
+ return await this.foundTxs(validTxs, {
81
+ ...info,
82
+ duration
83
+ });
84
+ }
85
+ async foundTxs(txs, info) {
86
+ // Report metrics for the collection
87
+ this.instrumentation.increaseTxsFor(info.method, txs.length, info.duration);
88
+ // Mark txs as found in the slow missing txs set and all fast requests
89
+ this.emit('txs-added', {
90
+ txs
91
+ });
92
+ // Add the txs to the tx pool (should not fail, but we catch it just in case)
93
+ try {
94
+ await this.txPool.addTxs(txs, {
95
+ source: `tx-collection`
96
+ });
97
+ } catch (err) {
98
+ this.log.error(`Error adding txs to the pool via ${info.description}`, err, {
99
+ ...info,
100
+ txs: txs.map((tx)=>tx.txHash.toString())
101
+ });
102
+ // Return no txs since none have been added
103
+ return {
104
+ txs: []
105
+ };
106
+ }
107
+ return {
108
+ txs
109
+ };
110
+ }
111
+ }
@@ -0,0 +1,18 @@
1
+ import type { ChainConfig } from '@aztec/stdlib/config';
2
+ import { type AztecNode } from '@aztec/stdlib/interfaces/client';
3
+ import type { Tx, TxHash } from '@aztec/stdlib/tx';
4
+ import { type ComponentsVersions } from '@aztec/stdlib/versioning';
5
+ export interface TxSource {
6
+ getInfo(): string;
7
+ getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
8
+ }
9
+ export declare class NodeRpcTxSource implements TxSource {
10
+ private readonly client;
11
+ private readonly info;
12
+ constructor(client: Pick<AztecNode, 'getTxsByHash'>, info: string);
13
+ static fromUrl(nodeUrl: string, versions: ComponentsVersions): NodeRpcTxSource;
14
+ getInfo(): string;
15
+ getTxsByHash(txHashes: TxHash[]): Promise<(Tx | undefined)[]>;
16
+ }
17
+ export declare function createNodeRpcTxSources(urls: string[], chainConfig: ChainConfig): NodeRpcTxSource[];
18
+ //# sourceMappingURL=tx_source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx_source.d.ts","sourceRoot":"","sources":["../../../src/services/tx_collection/tx_source.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,KAAK,SAAS,EAAyB,MAAM,iCAAiC,CAAC;AACxF,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,KAAK,kBAAkB,EAAmC,MAAM,0BAA0B,CAAC;AAGpG,MAAM,WAAW,QAAQ;IACvB,OAAO,IAAI,MAAM,CAAC;IAClB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;CAC/D;AAED,qBAAa,eAAgB,YAAW,QAAQ;IAE5C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EACvC,IAAI,EAAE,MAAM;WAGjB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,eAAe;IAK9E,OAAO;IAIP,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC;CAGrE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,WAAW,qBAG9E"}
@@ -0,0 +1,31 @@
1
+ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
2
+ import { protocolContractsHash } from '@aztec/protocol-contracts';
3
+ import { createAztecNodeClient } from '@aztec/stdlib/interfaces/client';
4
+ import { getComponentsVersionsFromConfig } from '@aztec/stdlib/versioning';
5
+ import { makeTracedFetch } from '@aztec/telemetry-client';
6
+ export class NodeRpcTxSource {
7
+ client;
8
+ info;
9
+ constructor(client, info){
10
+ this.client = client;
11
+ this.info = info;
12
+ }
13
+ static fromUrl(nodeUrl, versions) {
14
+ const client = createAztecNodeClient(nodeUrl, versions, makeTracedFetch([
15
+ 1,
16
+ 2,
17
+ 3
18
+ ], false));
19
+ return new NodeRpcTxSource(client, nodeUrl);
20
+ }
21
+ getInfo() {
22
+ return this.info;
23
+ }
24
+ getTxsByHash(txHashes) {
25
+ return this.client.getTxsByHash(txHashes);
26
+ }
27
+ }
28
+ export function createNodeRpcTxSources(urls, chainConfig) {
29
+ const versions = getComponentsVersionsFromConfig(chainConfig, protocolContractsHash, getVKTreeRoot());
30
+ return urls.map((url)=>NodeRpcTxSource.fromUrl(url, versions));
31
+ }
@@ -0,0 +1,49 @@
1
+ import { type Logger } from '@aztec/foundation/log';
2
+ import type { L2Block } from '@aztec/stdlib/block';
3
+ import type { ITxProvider } from '@aztec/stdlib/interfaces/server';
4
+ import type { BlockProposal } from '@aztec/stdlib/p2p';
5
+ import { Tx, TxHash } from '@aztec/stdlib/tx';
6
+ import { type TelemetryClient } from '@aztec/telemetry-client';
7
+ import type { PeerId } from '@libp2p/interface';
8
+ import type { P2PClient } from '../client/p2p_client.js';
9
+ import type { TxPool } from '../mem_pools/index.js';
10
+ import type { TxCollection } from './tx_collection/tx_collection.js';
11
+ import { TxProviderInstrumentation } from './tx_provider_instrumentation.js';
12
+ /**
13
+ * Gathers and returns txs given a block proposal, block, or their hashes.
14
+ * Loads available txs from the tx pool, and relies on a TxCollection service to collect txs from the network and other nodes.
15
+ */
16
+ export declare class TxProvider implements ITxProvider {
17
+ private txCollection;
18
+ private txPool;
19
+ private txValidator;
20
+ private log;
21
+ protected instrumentation: TxProviderInstrumentation;
22
+ constructor(txCollection: TxCollection, txPool: TxPool, txValidator: Pick<P2PClient, 'validate'>, log?: Logger, client?: TelemetryClient);
23
+ /** Returns txs from the tx pool given their hashes.*/
24
+ getAvailableTxs(txHashes: TxHash[]): Promise<{
25
+ txs: Tx[];
26
+ missingTxs: TxHash[];
27
+ }>;
28
+ /** Gathers txs from the tx pool, proposal body, remote rpc nodes, and reqresp. */
29
+ getTxsForBlockProposal(blockProposal: BlockProposal, blockNumber: number, opts: {
30
+ pinnedPeer: PeerId | undefined;
31
+ deadline: Date;
32
+ }): Promise<{
33
+ txs: Tx[];
34
+ missingTxs: TxHash[];
35
+ }>;
36
+ /** Gathers txs from the tx pool, remote rpc nodes, and reqresp. */
37
+ getTxsForBlock(block: L2Block, opts: {
38
+ deadline: Date;
39
+ }): Promise<{
40
+ txs: Tx[];
41
+ missingTxs: TxHash[];
42
+ }>;
43
+ private getOrderedTxsFromAllSources;
44
+ private orderTxs;
45
+ private getTxsFromAllSources;
46
+ private extractFromProposal;
47
+ private processProposalTxs;
48
+ }
49
+ //# sourceMappingURL=tx_provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx_provider.d.ts","sourceRoot":"","sources":["../../src/services/tx_provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAElE,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAEnF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAA8B,YAAY,EAAE,MAAM,kCAAkC,CAAC;AACjG,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAE7E;;;GAGG;AACH,qBAAa,UAAW,YAAW,WAAW;IAI1C,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,GAAG;IANb,SAAS,CAAC,eAAe,EAAE,yBAAyB,CAAC;gBAG3C,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,EACxC,GAAG,GAAE,MAAyC,EACtD,MAAM,GAAE,eAAsC;IAKhD,sDAAsD;IACzC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAoB9F,kFAAkF;IAC3E,sBAAsB,CAC3B,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE,GACvD,OAAO,CAAC;QAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAS/C,mEAAmE;IAC5D,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;YAS/F,2BAA2B;IAgCzC,OAAO,CAAC,QAAQ;YAKF,oBAAoB;IAsFlC,OAAO,CAAC,mBAAmB;YAOb,kBAAkB;CAOjC"}
@@ -0,0 +1,210 @@
1
+ import { compactArray } from '@aztec/foundation/collection';
2
+ import { createLogger } from '@aztec/foundation/log';
3
+ import { elapsed } from '@aztec/foundation/timer';
4
+ import { TxHash } from '@aztec/stdlib/tx';
5
+ import { getTelemetryClient } from '@aztec/telemetry-client';
6
+ import { TxProviderInstrumentation } from './tx_provider_instrumentation.js';
7
+ /**
8
+ * Gathers and returns txs given a block proposal, block, or their hashes.
9
+ * Loads available txs from the tx pool, and relies on a TxCollection service to collect txs from the network and other nodes.
10
+ */ export class TxProvider {
11
+ txCollection;
12
+ txPool;
13
+ txValidator;
14
+ log;
15
+ instrumentation;
16
+ constructor(txCollection, txPool, txValidator, log = createLogger('p2p:tx-collector'), client = getTelemetryClient()){
17
+ this.txCollection = txCollection;
18
+ this.txPool = txPool;
19
+ this.txValidator = txValidator;
20
+ this.log = log;
21
+ this.instrumentation = new TxProviderInstrumentation(client, 'TxProvider');
22
+ }
23
+ /** Returns txs from the tx pool given their hashes.*/ async getAvailableTxs(txHashes) {
24
+ const response = await this.txPool.getTxsByHash(txHashes);
25
+ if (response.length !== txHashes.length) {
26
+ throw new Error(`Unexpected response size from tx pool: expected ${txHashes.length} but got ${response.length}`);
27
+ }
28
+ const txs = [];
29
+ const missingTxs = [];
30
+ for(let i = 0; i < txHashes.length; i++){
31
+ const tx = response[i];
32
+ if (tx === undefined) {
33
+ missingTxs.push(txHashes[i]);
34
+ } else {
35
+ txs.push(tx);
36
+ }
37
+ }
38
+ return {
39
+ txs,
40
+ missingTxs
41
+ };
42
+ }
43
+ /** Gathers txs from the tx pool, proposal body, remote rpc nodes, and reqresp. */ getTxsForBlockProposal(blockProposal, blockNumber, opts) {
44
+ return this.getOrderedTxsFromAllSources({
45
+ type: 'proposal',
46
+ blockProposal,
47
+ blockNumber
48
+ }, {
49
+ ...blockProposal.toBlockInfo(),
50
+ blockNumber
51
+ }, blockProposal.txHashes, {
52
+ ...opts,
53
+ pinnedPeer: opts.pinnedPeer
54
+ });
55
+ }
56
+ /** Gathers txs from the tx pool, remote rpc nodes, and reqresp. */ getTxsForBlock(block, opts) {
57
+ return this.getOrderedTxsFromAllSources({
58
+ type: 'block',
59
+ block
60
+ }, block.toBlockInfo(), block.body.txEffects.map((tx)=>tx.txHash), {
61
+ ...opts,
62
+ pinnedPeer: undefined
63
+ });
64
+ }
65
+ async getOrderedTxsFromAllSources(request, blockInfo, txHashes, opts) {
66
+ const [durationMs, result] = await elapsed(()=>this.getTxsFromAllSources(request, blockInfo, txHashes, opts));
67
+ const { missingTxHashes, txsFromMempool, txsFromNetwork, txsFromProposal } = result;
68
+ const txs = [
69
+ ...txsFromMempool ?? [],
70
+ ...txsFromProposal ?? [],
71
+ ...txsFromNetwork ?? []
72
+ ];
73
+ const missingTxs = missingTxHashes?.length ?? 0;
74
+ const level = missingTxs === 0 ? 'verbose' : 'warn';
75
+ this.log[level](`Retrieved ${txs.length} out of ${blockInfo.txCount} txs for ${request.type}`, {
76
+ ...blockInfo,
77
+ txsFromProposal: txsFromProposal?.length,
78
+ txsFromMempool: txsFromMempool?.length,
79
+ txsFromNetwork: txsFromNetwork?.length,
80
+ missingTxs,
81
+ durationMs
82
+ });
83
+ const orderedTxs = this.orderTxs(txs, txHashes);
84
+ if (orderedTxs.length + missingTxs !== txHashes.length) {
85
+ throw new Error(`Error collecting txs for ${request.type} with ${txHashes.length} txs: found ${orderedTxs.length} and flagged ${missingTxs} as missing`);
86
+ }
87
+ return {
88
+ txs: orderedTxs,
89
+ missingTxs: (missingTxHashes ?? []).map(TxHash.fromString),
90
+ durationMs
91
+ };
92
+ }
93
+ orderTxs(txs, order) {
94
+ const txsMap = new Map(txs.map((tx)=>[
95
+ tx.txHash.toString(),
96
+ tx
97
+ ]));
98
+ return order.map((hash)=>txsMap.get(hash.toString())).filter((tx)=>tx !== undefined);
99
+ }
100
+ async getTxsFromAllSources(request, blockInfo, txHashes, opts) {
101
+ const missingTxHashes = new Set(txHashes.map((txHash)=>txHash.toString()));
102
+ if (missingTxHashes.size === 0) {
103
+ this.log.debug(`Received request with no transactions`, blockInfo);
104
+ return {};
105
+ }
106
+ // First go to our tx pool and fetch whatever txs we have there
107
+ // We go to the mempool first since those txs are already validated
108
+ const txsFromMempool = compactArray(await this.txPool.getTxsByHash(txHashes));
109
+ txsFromMempool.forEach((tx)=>missingTxHashes.delete(tx.getTxHash().toString()));
110
+ this.instrumentation.incTxsFromMempool(txsFromMempool.length);
111
+ this.log.debug(`Retrieved ${txsFromMempool.length} txs from mempool for block proposal (${missingTxHashes.size} pending)`, {
112
+ ...blockInfo,
113
+ missingTxHashes: [
114
+ ...missingTxHashes
115
+ ]
116
+ });
117
+ if (missingTxHashes.size === 0) {
118
+ return {
119
+ txsFromMempool
120
+ };
121
+ }
122
+ // Take txs from the proposal body if there are any
123
+ // Note that we still have to validate these txs, but we do it in parallel with tx collection
124
+ const proposal = request.type === 'proposal' ? request.blockProposal : undefined;
125
+ const txsFromProposal = this.extractFromProposal(proposal, [
126
+ ...missingTxHashes
127
+ ]);
128
+ if (txsFromProposal.length > 0) {
129
+ this.instrumentation.incTxsFromProposals(txsFromProposal.length);
130
+ txsFromProposal.forEach((tx)=>missingTxHashes.delete(tx.txHash.toString()));
131
+ this.log.debug(`Retrieved ${txsFromProposal.length} txs from proposal body (${missingTxHashes.size} pending)`, {
132
+ ...blockInfo,
133
+ missingTxHashes: [
134
+ ...missingTxHashes
135
+ ]
136
+ });
137
+ }
138
+ if (missingTxHashes.size === 0) {
139
+ await this.processProposalTxs(txsFromProposal);
140
+ return {
141
+ txsFromMempool,
142
+ txsFromProposal
143
+ };
144
+ }
145
+ // Start tx collection from the network if needed, while we validate the txs taken from the proposal in parallel
146
+ const [txsFromNetwork] = await Promise.all([
147
+ this.txCollection.collectFastFor(request, [
148
+ ...missingTxHashes
149
+ ], opts),
150
+ this.processProposalTxs(txsFromProposal)
151
+ ]);
152
+ if (txsFromNetwork.length > 0) {
153
+ txsFromNetwork.forEach((tx)=>missingTxHashes.delete(tx.txHash.toString()));
154
+ this.instrumentation.incTxsFromP2P(txsFromNetwork.length);
155
+ this.log.debug(`Retrieved ${txsFromNetwork.length} txs from network for block proposal (${missingTxHashes.size} pending)`, {
156
+ ...blockInfo,
157
+ missingTxHashes: [
158
+ ...missingTxHashes
159
+ ]
160
+ });
161
+ }
162
+ if (missingTxHashes.size === 0) {
163
+ return {
164
+ txsFromNetwork,
165
+ txsFromMempool,
166
+ txsFromProposal
167
+ };
168
+ }
169
+ // We are still missing txs, make one last attempt to collect them from our pool, in case they showed up somehow else
170
+ const moreTxsFromPool = compactArray(await this.txPool.getTxsByHash([
171
+ ...missingTxHashes
172
+ ].map(TxHash.fromString)));
173
+ if (moreTxsFromPool.length > 0) {
174
+ this.instrumentation.incTxsFromMempool(moreTxsFromPool.length);
175
+ this.log.debug(`Retrieved ${moreTxsFromPool.length} txs from pool retry for block proposal (${missingTxHashes.size} pending)`, {
176
+ ...blockInfo,
177
+ missingTxHashes: [
178
+ ...missingTxHashes
179
+ ]
180
+ });
181
+ }
182
+ if (missingTxHashes.size > 0) {
183
+ this.instrumentation.incMissingTxs(missingTxHashes.size);
184
+ }
185
+ return {
186
+ txsFromNetwork,
187
+ txsFromMempool: [
188
+ ...txsFromMempool,
189
+ ...moreTxsFromPool
190
+ ],
191
+ txsFromProposal,
192
+ missingTxHashes: [
193
+ ...missingTxHashes
194
+ ]
195
+ };
196
+ }
197
+ extractFromProposal(proposal, missingTxHashes) {
198
+ if (!proposal) {
199
+ return [];
200
+ }
201
+ return compactArray(proposal.txs ?? []).filter((tx)=>missingTxHashes.includes(tx.getTxHash().toString()));
202
+ }
203
+ async processProposalTxs(txs) {
204
+ if (txs.length === 0) {
205
+ return;
206
+ }
207
+ await this.txValidator.validate(txs);
208
+ await this.txPool.addTxs(txs);
209
+ }
210
+ }
@@ -0,0 +1,13 @@
1
+ import { type TelemetryClient } from '@aztec/telemetry-client';
2
+ export declare class TxProviderInstrumentation {
3
+ private txFromProposalCount;
4
+ private txFromMempoolCount;
5
+ private txFromP2PCount;
6
+ private missingTxsCount;
7
+ constructor(client: TelemetryClient, name: string);
8
+ incTxsFromProposals(count: number): void;
9
+ incTxsFromMempool(count: number): void;
10
+ incTxsFromP2P(count: number): void;
11
+ incMissingTxs(count: number): void;
12
+ }
13
+ //# sourceMappingURL=tx_provider_instrumentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx_provider_instrumentation.d.ts","sourceRoot":"","sources":["../../src/services/tx_provider_instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAE5F,qBAAa,yBAAyB;IACpC,OAAO,CAAC,mBAAmB,CAAgB;IAC3C,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,eAAe,CAAgB;gBAE3B,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM;IAoBjD,mBAAmB,CAAC,KAAK,EAAE,MAAM;IAIjC,iBAAiB,CAAC,KAAK,EAAE,MAAM;IAI/B,aAAa,CAAC,KAAK,EAAE,MAAM;IAI3B,aAAa,CAAC,KAAK,EAAE,MAAM;CAG5B"}
@@ -0,0 +1,34 @@
1
+ import { Metrics } from '@aztec/telemetry-client';
2
+ export class TxProviderInstrumentation {
3
+ txFromProposalCount;
4
+ txFromMempoolCount;
5
+ txFromP2PCount;
6
+ missingTxsCount;
7
+ constructor(client, name){
8
+ const meter = client.getMeter(name);
9
+ this.txFromProposalCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_TXS_FROM_PROPOSALS_COUNT, {
10
+ description: 'The number of txs taken from block proposals'
11
+ });
12
+ this.txFromMempoolCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_TXS_FROM_MEMPOOL_COUNT, {
13
+ description: 'The number of txs taken from the local mempool'
14
+ });
15
+ this.txFromP2PCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_TXS_FROM_P2P_COUNT, {
16
+ description: 'The number of txs taken from the p2p network'
17
+ });
18
+ this.missingTxsCount = meter.createUpDownCounter(Metrics.TX_PROVIDER_MISSING_TXS_COUNT, {
19
+ description: 'The number of txs not found anywhere'
20
+ });
21
+ }
22
+ incTxsFromProposals(count) {
23
+ this.txFromProposalCount.add(count);
24
+ }
25
+ incTxsFromMempool(count) {
26
+ this.txFromMempoolCount.add(count);
27
+ }
28
+ incTxsFromP2P(count) {
29
+ this.txFromP2PCount.add(count);
30
+ }
31
+ incMissingTxs(count) {
32
+ this.missingTxsCount.add(count);
33
+ }
34
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"get-ports.d.ts","sourceRoot":"","sources":["../../src/test-helpers/get-ports.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,QAAQ,kBAAmB,MAAM,sBAAwE,CAAC"}
1
+ {"version":3,"file":"get-ports.d.ts","sourceRoot":"","sources":["../../src/test-helpers/get-ports.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,eAAe,MAAM,sBAAwE,CAAC"}
@@ -3,4 +3,5 @@ export * from './get-ports.js';
3
3
  export * from './make-enrs.js';
4
4
  export * from './make-test-p2p-clients.js';
5
5
  export * from './reqresp-nodes.js';
6
+ export * from './mock-pubsub.js';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test-helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC;AACnD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test-helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC;AACnD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
@@ -3,3 +3,4 @@ export * from './get-ports.js';
3
3
  export * from './make-enrs.js';
4
4
  export * from './make-test-p2p-clients.js';
5
5
  export * from './reqresp-nodes.js';
6
+ export * from './mock-pubsub.js';
@@ -1 +1 @@
1
- {"version":3,"file":"make-enrs.d.ts","sourceRoot":"","sources":["../../src/test-helpers/make-enrs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAQxD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,qBAM5F;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,mBAerF"}
1
+ {"version":3,"file":"make-enrs.d.ts","sourceRoot":"","sources":["../../src/test-helpers/make-enrs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAQxD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,qBAM5F;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,mBAcrF"}
@@ -1,5 +1,5 @@
1
- import { SignableENR } from '@chainsafe/enr';
2
1
  import { multiaddr } from '@multiformats/multiaddr';
2
+ import { SignableENR } from '@nethermindeth/enr';
3
3
  import { convertToMultiaddr, createLibP2PPeerIdFromPrivateKey } from '../util.js';
4
4
  import { setAztecEnrKey } from '../versioning.js';
5
5
  /**
@@ -20,10 +20,9 @@ import { setAztecEnrKey } from '../versioning.js';
20
20
  */ export async function makeEnr(p2pPrivateKey, port, config) {
21
21
  const peerId = await createLibP2PPeerIdFromPrivateKey(p2pPrivateKey);
22
22
  const enr = SignableENR.createFromPeerId(peerId);
23
- const udpAnnounceAddress = `127.0.0.1:${port}`;
24
- const tcpAnnounceAddress = `127.0.0.1:${port}`;
25
- const udpPublicAddr = multiaddr(convertToMultiaddr(udpAnnounceAddress, 'udp'));
26
- const tcpPublicAddr = multiaddr(convertToMultiaddr(tcpAnnounceAddress, 'tcp'));
23
+ const p2pIp = `127.0.0.1`;
24
+ const udpPublicAddr = multiaddr(convertToMultiaddr(p2pIp, port, 'udp'));
25
+ const tcpPublicAddr = multiaddr(convertToMultiaddr(p2pIp, port, 'tcp'));
27
26
  // ENRS must include the network and a discoverable address (udp for discv5)
28
27
  setAztecEnrKey(enr, config);
29
28
  enr.setLocationMultiaddr(udpPublicAddr);
@@ -6,7 +6,8 @@ import type { P2PClient } from '../client/p2p_client.js';
6
6
  import type { P2PConfig } from '../config.js';
7
7
  import type { AttestationPool } from '../mem_pools/attestation_pool/attestation_pool.js';
8
8
  import type { TxPool } from '../mem_pools/tx_pool/index.js';
9
- interface MakeTestP2PClientOptions {
9
+ import { type MockGossipSubNetwork } from './mock-pubsub.js';
10
+ export interface MakeTestP2PClientOptions {
10
11
  mockAttestationPool: AttestationPool;
11
12
  mockTxPool: TxPool;
12
13
  mockEpochCache: EpochCache;
@@ -15,7 +16,17 @@ interface MakeTestP2PClientOptions {
15
16
  p2pBaseConfig: P2PConfig;
16
17
  p2pConfigOverrides?: Partial<P2PConfig>;
17
18
  logger?: Logger;
19
+ mockGossipSubNetwork?: MockGossipSubNetwork;
18
20
  }
21
+ /**
22
+ * Creates a single P2P client and immediately starts it for testing purposes.
23
+ * @param peerIdPrivateKey - The private key of the peer.
24
+ * @param port - The port to run the client on.
25
+ * @param peers - The peers to connect to.
26
+ * @param options - The options for the client.
27
+ * @returns The created and already started client.
28
+ */
29
+ export declare function makeAndStartTestP2PClient(peerIdPrivateKey: string, port: number, peers: string[], options: MakeTestP2PClientOptions): Promise<P2PClient<P2PClientType.Full>>;
19
30
  /**
20
31
  * Creates a single P2P client for testing purposes.
21
32
  * @param peerIdPrivateKey - The private key of the peer.
@@ -24,13 +35,30 @@ interface MakeTestP2PClientOptions {
24
35
  * @param options - The options for the client.
25
36
  * @returns The created client.
26
37
  */
27
- export declare function makeTestP2PClient(peerIdPrivateKey: string, port: number, peers: string[], { alwaysTrueVerifier, p2pBaseConfig, p2pConfigOverrides, mockAttestationPool, mockTxPool, mockEpochCache, mockWorldState, logger, }: MakeTestP2PClientOptions): Promise<P2PClient<P2PClientType.Full>>;
38
+ export declare function makeTestP2PClient(peerIdPrivateKey: string, port: number, peers: string[], { alwaysTrueVerifier, p2pBaseConfig, p2pConfigOverrides, mockAttestationPool, mockTxPool, mockEpochCache, mockWorldState, mockGossipSubNetwork, logger, }: MakeTestP2PClientOptions): Promise<P2PClient<P2PClientType.Full>>;
39
+ /**
40
+ * Creates a number of P2P clients and immediately starts them for testing purposes.
41
+ * @param numberOfPeers - The number of clients to create.
42
+ * @param options - The options for the clients.
43
+ * @returns The created and started clients.
44
+ */
45
+ export declare function makeAndStartTestP2PClients(numberOfPeers: number, testConfig: MakeTestP2PClientOptions): Promise<{
46
+ client: P2PClient<P2PClientType.Full>;
47
+ peerPrivateKey: string;
48
+ port: number;
49
+ enr: string;
50
+ }[]>;
28
51
  /**
29
52
  * Creates a number of P2P clients for testing purposes.
30
53
  * @param numberOfPeers - The number of clients to create.
31
54
  * @param options - The options for the clients.
32
55
  * @returns The created clients.
33
56
  */
34
- export declare function makeTestP2PClients(numberOfPeers: number, testConfig: MakeTestP2PClientOptions): Promise<P2PClient<P2PClientType.Full>[]>;
35
- export {};
57
+ export declare function makeTestP2PClients(numberOfPeers: number, testConfig: MakeTestP2PClientOptions): Promise<{
58
+ client: P2PClient<P2PClientType.Full>;
59
+ peerPrivateKey: string;
60
+ port: number;
61
+ enr: string;
62
+ }[]>;
63
+ export declare function startTestP2PClients(clients: P2PClient[]): Promise<void>;
36
64
  //# sourceMappingURL=make-test-p2p-clients.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"make-test-p2p-clients.d.ts","sourceRoot":"","sources":["../../src/test-helpers/make-test-p2p-clients.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAGlE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AACzF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAM5D,UAAU,wBAAwB;IAChC,mBAAmB,EAAE,eAAe,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,UAAU,CAAC;IAC3B,cAAc,EAAE,sBAAsB,CAAC;IACvC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,EAAE,SAAS,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EAAE,EACf,EACE,kBAAyB,EACzB,aAAa,EACb,kBAAuB,EACvB,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,cAAc,EACd,MAAwC,GACzC,EAAE,wBAAwB,0CA8C5B;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,wBAAwB,4CAiBnG"}
1
+ {"version":3,"file":"make-test-p2p-clients.d.ts","sourceRoot":"","sources":["../../src/test-helpers/make-test-p2p-clients.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAKlE,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGlD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAC;AACzF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAI5D,OAAO,EAAE,KAAK,oBAAoB,EAAkC,MAAM,kBAAkB,CAAC;AAG7F,MAAM,WAAW,wBAAwB;IACvC,mBAAmB,EAAE,eAAe,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,UAAU,CAAC;IAC3B,cAAc,EAAE,sBAAsB,CAAC;IACvC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,EAAE,SAAS,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C;AAED;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAC7C,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,EAAE,wBAAwB,0CAMlC;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,gBAAgB,EAAE,MAAM,EACxB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EAAE,EACf,EACE,kBAAyB,EACzB,aAAa,EACb,kBAAuB,EACvB,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,MAAwC,GACzC,EAAE,wBAAwB,0CA2C5B;AAED;;;;;GAKG;AACH,wBAAsB,0BAA0B,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,wBAAwB;;;;;KAuC3G;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,wBAAwB;;;;;KAgCnG;AAED,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,iBAG7D"}