@aztec/p2p 0.0.0-test.0 → 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
@@ -1,15 +1,21 @@
1
- /// <reference types="node" resolution-mode="require"/>
1
+ import type { EthAddress } from '@aztec/foundation/eth-address';
2
2
  import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
3
- import type { BlockAttestation, BlockProposal, Gossipable } from '@aztec/stdlib/p2p';
4
- import { TxHash } from '@aztec/stdlib/tx';
3
+ import type { Gossipable, PeerErrorSeverity } from '@aztec/stdlib/p2p';
4
+ import { Tx, TxHash } from '@aztec/stdlib/tx';
5
5
  import type { PeerId } from '@libp2p/interface';
6
+ import type { ENR } from '@nethermindeth/enr';
6
7
  import EventEmitter from 'events';
7
- import type { ReqRespSubProtocol, SubProtocolMap } from './reqresp/interface.js';
8
- import { type P2PService, type PeerDiscoveryService, PeerDiscoveryState } from './service.js';
8
+ import type { PeerManagerInterface } from './peer-manager/interface.js';
9
+ import type { P2PReqRespConfig } from './reqresp/config.js';
10
+ import { type AuthRequest, StatusMessage } from './reqresp/index.js';
11
+ import type { ReqRespInterface, ReqRespResponse, ReqRespSubProtocol, ReqRespSubProtocolHandler, ReqRespSubProtocolHandlers, ReqRespSubProtocolValidators, SubProtocolMap } from './reqresp/interface.js';
12
+ import type { GoodByeReason } from './reqresp/protocols/goodbye.js';
13
+ import { type P2PBlockReceivedCallback, type P2PService, type PeerDiscoveryService, PeerDiscoveryState } from './service.js';
9
14
  /**
10
15
  * A dummy implementation of the P2P Service.
11
16
  */
12
17
  export declare class DummyP2PService implements P2PService {
18
+ updateConfig(_config: Partial<P2PReqRespConfig>): void;
13
19
  /** Returns an empty array for peers. */
14
20
  getPeers(): PeerInfo[];
15
21
  /**
@@ -26,7 +32,7 @@ export declare class DummyP2PService implements P2PService {
26
32
  * Called to have the given message propagated through the P2P network.
27
33
  * @param _ - The message to be propagated.
28
34
  */
29
- propagate<T extends Gossipable>(_: T): void;
35
+ propagate<T extends Gossipable>(_: T): Promise<void>;
30
36
  /**
31
37
  * Called upon receipt of settled transactions.
32
38
  * @param _ - The hashes of the settled transactions.
@@ -35,7 +41,7 @@ export declare class DummyP2PService implements P2PService {
35
41
  /**
36
42
  * Register a callback into the validator client for when a block proposal is received
37
43
  */
38
- registerBlockReceivedCallback(_: (block: BlockProposal) => Promise<BlockAttestation>): void;
44
+ registerBlockReceivedCallback(_callback: P2PBlockReceivedCallback): void;
39
45
  /**
40
46
  * Sends a request to a peer.
41
47
  * @param _protocol - The protocol to send the request on.
@@ -55,13 +61,17 @@ export declare class DummyP2PService implements P2PService {
55
61
  * @returns The ENR of the peer, otherwise undefined.
56
62
  */
57
63
  getEnr(): undefined;
64
+ validate(_txs: Tx[]): Promise<void>;
65
+ addReqRespSubProtocol(_subProtocol: ReqRespSubProtocol, _handler: ReqRespSubProtocolHandler, _validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol]): Promise<void>;
66
+ handleAuthRequestFromPeer(_authRequest: AuthRequest, _peerId: PeerId): Promise<StatusMessage>;
67
+ registerThisValidatorAddresses(_address: EthAddress[]): void;
58
68
  }
59
69
  /**
60
70
  * A dummy implementation of the Peer Discovery Service.
61
71
  */
62
72
  export declare class DummyPeerDiscoveryService extends EventEmitter implements PeerDiscoveryService {
63
73
  private currentState;
64
- bootstrapNodes: string[];
74
+ bootstrapNodeEnrs: ENR[];
65
75
  /**
66
76
  * Starts the dummy implementation.
67
77
  * @returns A resolved promise.
@@ -74,12 +84,41 @@ export declare class DummyPeerDiscoveryService extends EventEmitter implements P
74
84
  stop(): Promise<void>;
75
85
  /**
76
86
  * Called to discover peers in the network.
77
- * @returns An array of discovered peer addresses.
87
+ * @returns An array of Enrs.
78
88
  */
79
- getAllPeers(): never[];
89
+ getKadValues(): never[];
80
90
  runRandomNodesQuery(): Promise<void>;
81
91
  isBootstrapPeer(_: PeerId): boolean;
82
92
  getStatus(): PeerDiscoveryState;
83
93
  getEnr(): undefined;
84
94
  }
95
+ export declare class DummyPeerManager implements PeerManagerInterface {
96
+ peerId: PeerId;
97
+ private peersProvider?;
98
+ constructor(peerId: PeerId, peersProvider?: {
99
+ getPeers: () => PeerId[];
100
+ } | undefined);
101
+ getPeers(_includePending?: boolean): PeerInfo[];
102
+ initializePeers(): Promise<void>;
103
+ getPeerScore(_peerId: string): number;
104
+ shouldDisableP2PGossip(_peerId: string): boolean;
105
+ stop(): Promise<void>;
106
+ heartbeat(): Promise<void>;
107
+ addTrustedPeer(_peerId: PeerId): void;
108
+ addPrivatePeer(_peerId: PeerId): void;
109
+ goodbyeReceived(_peerId: PeerId, _reason: GoodByeReason): void;
110
+ penalizePeer(_peerId: PeerId, _penalty: PeerErrorSeverity): void;
111
+ addPreferredPeer(_peerId: PeerId): void;
112
+ handleAuthRequestFromPeer(_authRequest: AuthRequest, _peerId: PeerId): Promise<StatusMessage>;
113
+ registerThisValidatorAddresses(_address: EthAddress[]): void;
114
+ }
115
+ export declare class DummyReqResp implements ReqRespInterface {
116
+ updateConfig(_config: Partial<P2PReqRespConfig>): void;
117
+ start(_subProtocolHandlers: ReqRespSubProtocolHandlers, _subProtocolValidators: ReqRespSubProtocolValidators): Promise<void>;
118
+ stop(): Promise<void>;
119
+ sendRequest<SubProtocol extends ReqRespSubProtocol>(_subProtocol: SubProtocol, _request: InstanceType<SubProtocolMap[SubProtocol]['request']>): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']> | undefined>;
120
+ sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(_subProtocol: SubProtocol, _requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[], _pinnedPeer: PeerId | undefined, _timeoutMs?: number, _maxPeers?: number, _maxRetryAttempts?: number): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]>;
121
+ sendRequestToPeer(_peerId: PeerId, _subProtocol: ReqRespSubProtocol, _payload: Buffer, _dialTimeout?: number): Promise<ReqRespResponse>;
122
+ addSubProtocol(_subProtocol: ReqRespSubProtocol, _handler: ReqRespSubProtocolHandler, _validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol]): Promise<void>;
123
+ }
85
124
  //# sourceMappingURL=dummy_service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dummy_service.d.ts","sourceRoot":"","sources":["../../src/services/dummy_service.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,YAAY,MAAM,QAAQ,CAAC;AAElC,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE9F;;GAEG;AACH,qBAAa,eAAgB,YAAW,UAAU;IAChD,wCAAwC;IACxC,QAAQ,IAAI,QAAQ,EAAE;IAItB;;;OAGG;IACI,KAAK;IAIZ;;;OAGG;IACI,IAAI;IAIX;;;OAGG;IACI,SAAS,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,EAAE,CAAC;IAE3C;;;OAGG;IACI,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE;IAE7B;;OAEG;IACI,6BAA6B,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,gBAAgB,CAAC;IAE3F;;;;;OAKG;IACI,WAAW,CAAC,QAAQ,SAAS,kBAAkB,EACpD,SAAS,EAAE,QAAQ,EACnB,QAAQ,EAAE,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,GAC1D,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IAI1E;;;;;OAKG;IACI,gBAAgB,CAAC,QAAQ,SAAS,kBAAkB,EACzD,SAAS,EAAE,QAAQ,EACnB,SAAS,EAAE,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAC7D,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;IAIhE;;;OAGG;IACI,MAAM,IAAI,SAAS;CAG3B;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,YAAa,YAAW,oBAAoB;IACzF,OAAO,CAAC,YAAY,CAA8B;IAC3C,cAAc,EAAE,MAAM,EAAE,CAAM;IAErC;;;OAGG;IACI,KAAK;IAIZ;;;OAGG;IACI,IAAI;IAIX;;;OAGG;IACI,WAAW;IAIX,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpC,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO;IAInC,SAAS,IAAI,kBAAkB;IAI/B,MAAM,IAAI,SAAS;CAG3B"}
1
+ {"version":3,"file":"dummy_service.d.ts","sourceRoot":"","sources":["../../src/services/dummy_service.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,11 @@
1
1
  import EventEmitter from 'events';
2
+ import { StatusMessage } from './reqresp/index.js';
3
+ import { ReqRespStatus } from './reqresp/status.js';
2
4
  import { PeerDiscoveryState } from './service.js';
3
5
  /**
4
6
  * A dummy implementation of the P2P Service.
5
7
  */ export class DummyP2PService {
8
+ updateConfig(_config) {}
6
9
  /** Returns an empty array for peers. */ getPeers() {
7
10
  return [];
8
11
  }
@@ -21,14 +24,16 @@ import { PeerDiscoveryState } from './service.js';
21
24
  /**
22
25
  * Called to have the given message propagated through the P2P network.
23
26
  * @param _ - The message to be propagated.
24
- */ propagate(_) {}
27
+ */ propagate(_) {
28
+ return Promise.resolve();
29
+ }
25
30
  /**
26
31
  * Called upon receipt of settled transactions.
27
32
  * @param _ - The hashes of the settled transactions.
28
33
  */ settledTxs(_) {}
29
34
  /**
30
35
  * Register a callback into the validator client for when a block proposal is received
31
- */ registerBlockReceivedCallback(_) {}
36
+ */ registerBlockReceivedCallback(_callback) {}
32
37
  /**
33
38
  * Sends a request to a peer.
34
39
  * @param _protocol - The protocol to send the request on.
@@ -51,12 +56,23 @@ import { PeerDiscoveryState } from './service.js';
51
56
  */ getEnr() {
52
57
  return undefined;
53
58
  }
59
+ validate(_txs) {
60
+ return Promise.resolve();
61
+ }
62
+ addReqRespSubProtocol(_subProtocol, _handler, _validator) {
63
+ return Promise.resolve();
64
+ }
65
+ handleAuthRequestFromPeer(_authRequest, _peerId) {
66
+ return Promise.resolve(StatusMessage.random());
67
+ }
68
+ //this is no-op
69
+ registerThisValidatorAddresses(_address) {}
54
70
  }
55
71
  /**
56
72
  * A dummy implementation of the Peer Discovery Service.
57
73
  */ export class DummyPeerDiscoveryService extends EventEmitter {
58
74
  currentState = PeerDiscoveryState.STOPPED;
59
- bootstrapNodes = [];
75
+ bootstrapNodeEnrs = [];
60
76
  /**
61
77
  * Starts the dummy implementation.
62
78
  * @returns A resolved promise.
@@ -73,8 +89,8 @@ import { PeerDiscoveryState } from './service.js';
73
89
  }
74
90
  /**
75
91
  * Called to discover peers in the network.
76
- * @returns An array of discovered peer addresses.
77
- */ getAllPeers() {
92
+ * @returns An array of Enrs.
93
+ */ getKadValues() {
78
94
  return [];
79
95
  }
80
96
  runRandomNodesQuery() {
@@ -90,3 +106,70 @@ import { PeerDiscoveryState } from './service.js';
90
106
  return undefined;
91
107
  }
92
108
  }
109
+ export class DummyPeerManager {
110
+ peerId;
111
+ peersProvider;
112
+ constructor(peerId, peersProvider){
113
+ this.peerId = peerId;
114
+ this.peersProvider = peersProvider;
115
+ }
116
+ getPeers(_includePending) {
117
+ if (!this.peersProvider) {
118
+ return [];
119
+ }
120
+ return this.peersProvider.getPeers().filter((peer)=>!peer.equals(this.peerId)).map((id)=>({
121
+ id: id.toString(),
122
+ status: 'connected',
123
+ score: 0
124
+ }));
125
+ }
126
+ initializePeers() {
127
+ return Promise.resolve();
128
+ }
129
+ getPeerScore(_peerId) {
130
+ return 0;
131
+ }
132
+ shouldDisableP2PGossip(_peerId) {
133
+ return false;
134
+ }
135
+ stop() {
136
+ return Promise.resolve();
137
+ }
138
+ heartbeat() {
139
+ return Promise.resolve();
140
+ }
141
+ addTrustedPeer(_peerId) {}
142
+ addPrivatePeer(_peerId) {}
143
+ goodbyeReceived(_peerId, _reason) {}
144
+ penalizePeer(_peerId, _penalty) {}
145
+ addPreferredPeer(_peerId) {}
146
+ handleAuthRequestFromPeer(_authRequest, _peerId) {
147
+ return Promise.resolve(StatusMessage.random());
148
+ }
149
+ //this is no-op
150
+ registerThisValidatorAddresses(_address) {}
151
+ }
152
+ export class DummyReqResp {
153
+ updateConfig(_config) {}
154
+ start(_subProtocolHandlers, _subProtocolValidators) {
155
+ return Promise.resolve();
156
+ }
157
+ stop() {
158
+ return Promise.resolve();
159
+ }
160
+ sendRequest(_subProtocol, _request) {
161
+ return Promise.resolve(undefined);
162
+ }
163
+ sendBatchRequest(_subProtocol, _requests, _pinnedPeer, _timeoutMs, _maxPeers, _maxRetryAttempts) {
164
+ return Promise.resolve([]);
165
+ }
166
+ sendRequestToPeer(_peerId, _subProtocol, _payload, _dialTimeout) {
167
+ return Promise.resolve({
168
+ status: ReqRespStatus.SUCCESS,
169
+ data: Buffer.from([])
170
+ });
171
+ }
172
+ addSubProtocol(_subProtocol, _handler, _validator) {
173
+ return Promise.resolve();
174
+ }
175
+ }
@@ -1,5 +1,4 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- /// <reference types="node" resolution-mode="require"/>
1
+ import { TopicType } from '@aztec/stdlib/p2p';
3
2
  import type { RPC } from '@chainsafe/libp2p-gossipsub/message';
4
3
  import type { DataTransform } from '@chainsafe/libp2p-gossipsub/types';
5
4
  import type { Message } from '@libp2p/interface';
@@ -18,14 +17,34 @@ export declare function msgIdToStrFn(msgId: Uint8Array): string;
18
17
  * @param message - The libp2p message
19
18
  * @returns The message identifier
20
19
  */
21
- export declare function getMsgIdFn(message: Message): Buffer;
20
+ export declare function getMsgIdFn(message: Message): Buffer<ArrayBuffer>;
22
21
  /**
23
22
  * Snappy transform for libp2p gossipsub
24
23
  */
25
24
  export declare class SnappyTransform implements DataTransform {
26
- inboundTransform(_topicStr: string, data: Uint8Array): Uint8Array;
27
- inboundTransformNoTopic(data: Buffer): Buffer;
25
+ private maxSizesKb;
26
+ private defaultMaxSizeKb;
27
+ private logger;
28
+ constructor(maxSizesKb?: Record<TopicType, number>, defaultMaxSizeKb?: number, logger?: import("@aztec/foundation/log").Logger);
29
+ inboundTransform(topicStr: string, data: Uint8Array): Uint8Array;
30
+ inboundTransformData(data: Buffer, topic?: TopicType): Buffer;
28
31
  outboundTransform(_topicStr: string, data: Uint8Array): Uint8Array;
29
- outboundTransformNoTopic(data: Buffer): Buffer;
32
+ outboundTransformData(data: Buffer): Buffer;
30
33
  }
34
+ /**
35
+ * Reads the Snappy preamble from compressed data and returns the expected decompressed size.
36
+ *
37
+ * The Snappy format starts with a little-endian varint encoding the uncompressed length.
38
+ * Varints consist of a series of bytes where:
39
+ * - Lower 7 bits contain data
40
+ * - Upper bit (0x80) is set if more bytes follow
41
+ *
42
+ * @param data - The compressed data starting with the Snappy preamble
43
+ * @returns Object containing the decompressed size and the number of bytes read from the preamble
44
+ * @throws Error if the data is too short or the varint is invalid
45
+ */
46
+ export declare function readSnappyPreamble(data: Uint8Array): {
47
+ decompressedSize: number;
48
+ bytesRead: number;
49
+ };
31
50
  //# sourceMappingURL=encoding.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../src/services/encoding.ts"],"names":[],"mappings":";;AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAajD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAKvD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAItD;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,UAK1C;AAED;;GAEG;AACH,qBAAa,eAAgB,YAAW,aAAa;IAEnD,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU;IAI1D,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAQpD,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU;IAI3D,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAMtD"}
1
+ {"version":3,"file":"encoding.d.ts","sourceRoot":"","sources":["../../src/services/encoding.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAsB,MAAM,mBAAmB,CAAC;AAElE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAajD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,GAAG,MAAM,CAKvD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAItD;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,uBAK1C;AAYD;;GAEG;AACH,qBAAa,eAAgB,YAAW,aAAa;IAEjD,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,MAAM;gBAFN,UAAU,GAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAqB,EACzD,gBAAgB,GAAE,MAAkB,EACpC,MAAM,yCAAuC;IAIvD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU;IAKzD,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM;IAepE,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,UAAU;IAI3D,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAMnD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG;IAAE,gBAAgB,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAmCpG"}
@@ -1,5 +1,7 @@
1
1
  // Taken from lodestar: https://github.com/ChainSafe/lodestar
2
2
  import { sha256 } from '@aztec/foundation/crypto';
3
+ import { createLogger } from '@aztec/foundation/log';
4
+ import { TopicType, getTopicFromString } from '@aztec/stdlib/p2p';
3
5
  import { compressSync, uncompressSync } from 'snappy';
4
6
  import xxhashFactory from 'xxhash-wasm';
5
7
  // Load WASM
@@ -38,29 +40,95 @@ export function msgIdToStrFn(msgId) {
38
40
  ];
39
41
  return sha256(Buffer.concat(vec)).subarray(0, 20);
40
42
  }
43
+ const DefaultMaxSizesKb = {
44
+ // Tx effects should not exceed 128kb, so 512kb for the full tx obj should be sufficient
45
+ [TopicType.tx]: 512,
46
+ // An attestation has roughly 30 fields, which is 1kb, so 5x is plenty
47
+ [TopicType.block_attestation]: 5,
48
+ // Proposals may carry some tx objects, so we allow a larger size capped at 10mb
49
+ // Note this may not be enough for carrying all tx objects in a block
50
+ [TopicType.block_proposal]: 1024 * 10
51
+ };
41
52
  /**
42
53
  * Snappy transform for libp2p gossipsub
43
54
  */ export class SnappyTransform {
55
+ maxSizesKb;
56
+ defaultMaxSizeKb;
57
+ logger;
58
+ constructor(maxSizesKb = DefaultMaxSizesKb, defaultMaxSizeKb = 10 * 1024, logger = createLogger('p2p:snappy-transform')){
59
+ this.maxSizesKb = maxSizesKb;
60
+ this.defaultMaxSizeKb = defaultMaxSizeKb;
61
+ this.logger = logger;
62
+ }
44
63
  // Topic string included to satisfy DataTransform interface
45
- inboundTransform(_topicStr, data) {
46
- return this.inboundTransformNoTopic(Buffer.from(data));
64
+ inboundTransform(topicStr, data) {
65
+ const topic = getTopicFromString(topicStr);
66
+ return this.inboundTransformData(Buffer.from(data), topic);
47
67
  }
48
- inboundTransformNoTopic(data) {
68
+ inboundTransformData(data, topic) {
49
69
  if (data.length === 0) {
50
70
  return data;
51
71
  }
72
+ const maxSizeKb = this.maxSizesKb[topic] ?? this.defaultMaxSizeKb;
73
+ const { decompressedSize } = readSnappyPreamble(data);
74
+ if (decompressedSize > maxSizeKb * 1024) {
75
+ this.logger.warn(`Decompressed size ${decompressedSize} exceeds maximum allowed size of ${maxSizeKb}kb`);
76
+ throw new Error(`Decompressed size ${decompressedSize} exceeds maximum allowed size of ${maxSizeKb}kb`);
77
+ }
52
78
  return Buffer.from(uncompressSync(data, {
53
79
  asBuffer: true
54
80
  }));
55
81
  }
56
82
  // Topic string included to satisfy DataTransform interface
57
83
  outboundTransform(_topicStr, data) {
58
- return this.outboundTransformNoTopic(Buffer.from(data));
84
+ return this.outboundTransformData(Buffer.from(data));
59
85
  }
60
- outboundTransformNoTopic(data) {
86
+ outboundTransformData(data) {
61
87
  if (data.length === 0) {
62
88
  return data;
63
89
  }
64
90
  return Buffer.from(compressSync(data));
65
91
  }
66
92
  }
93
+ /**
94
+ * Reads the Snappy preamble from compressed data and returns the expected decompressed size.
95
+ *
96
+ * The Snappy format starts with a little-endian varint encoding the uncompressed length.
97
+ * Varints consist of a series of bytes where:
98
+ * - Lower 7 bits contain data
99
+ * - Upper bit (0x80) is set if more bytes follow
100
+ *
101
+ * @param data - The compressed data starting with the Snappy preamble
102
+ * @returns Object containing the decompressed size and the number of bytes read from the preamble
103
+ * @throws Error if the data is too short or the varint is invalid
104
+ */ export function readSnappyPreamble(data) {
105
+ if (data.length === 0) {
106
+ throw new Error('Cannot read preamble from empty data');
107
+ }
108
+ let result = 0;
109
+ let shift = 0;
110
+ let bytesRead = 0;
111
+ // Maximum varint length for 32-bit value is 5 bytes
112
+ // (7 bits per byte, so 5 bytes = 35 bits, enough for 2^32 - 1)
113
+ const maxBytes = 5;
114
+ for(let i = 0; i < Math.min(data.length, maxBytes); i++){
115
+ const byte = data[i];
116
+ bytesRead++;
117
+ // Extract lower 7 bits and add to result with appropriate shift
118
+ // Use >>> 0 to convert to unsigned 32-bit integer to avoid sign issues
119
+ result = (result | (byte & 0x7f) << shift) >>> 0;
120
+ // If upper bit is not set, we're done
121
+ if ((byte & 0x80) === 0) {
122
+ return {
123
+ decompressedSize: result,
124
+ bytesRead
125
+ };
126
+ }
127
+ shift += 7;
128
+ }
129
+ // If we get here, either we ran out of data or the varint is too long
130
+ if (bytesRead >= maxBytes) {
131
+ throw new Error('Varint is too long (max 5 bytes for 32-bit value)');
132
+ }
133
+ throw new Error('Incomplete varint: data ended before varint termination');
134
+ }
@@ -1,3 +1,7 @@
1
1
  export * from './service.js';
2
2
  export * from './libp2p/libp2p_service.js';
3
+ export * from './tx_provider.js';
4
+ export * from './dummy_service.js';
5
+ export * from './reqresp/index.js';
6
+ export * from './tx_collection/index.js';
3
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC"}
@@ -1,2 +1,6 @@
1
1
  export * from './service.js';
2
2
  export * from './libp2p/libp2p_service.js';
3
+ export * from './tx_provider.js';
4
+ export * from './dummy_service.js';
5
+ export * from './reqresp/index.js';
6
+ export * from './tx_collection/index.js';
@@ -0,0 +1,18 @@
1
+ import type { Timer } from '@aztec/foundation/timer';
2
+ import { TopicType } from '@aztec/stdlib/p2p';
3
+ import { type TelemetryClient } from '@aztec/telemetry-client';
4
+ export declare class P2PInstrumentation {
5
+ private messageValidationDuration;
6
+ private messagePrevalidationCount;
7
+ private messageLatency;
8
+ private aggLatencyHisto;
9
+ private aggValidationHisto;
10
+ private aggLatencyMetrics;
11
+ private aggValidationMetrics;
12
+ constructor(client: TelemetryClient, name: string);
13
+ recordMessageValidation(topicName: TopicType, timerOrMs: Timer | number): void;
14
+ incMessagePrevalidationStatus(passed: boolean, topicName: TopicType | undefined): void;
15
+ recordMessageLatency(topicName: TopicType, timerOrMs: Timer | number): void;
16
+ private aggregate;
17
+ }
18
+ //# sourceMappingURL=instrumentation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../../../src/services/libp2p/instrumentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAML,KAAK,eAAe,EAGrB,MAAM,yBAAyB,CAAC;AAIjC,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,yBAAyB,CAAY;IAC7C,OAAO,CAAC,yBAAyB,CAAgB;IACjD,OAAO,CAAC,cAAc,CAAY;IAElC,OAAO,CAAC,eAAe,CAA6C;IACpE,OAAO,CAAC,kBAAkB,CAA6C;IAEvE,OAAO,CAAC,iBAAiB,CAAiE;IAC1F,OAAO,CAAC,oBAAoB,CAAiE;gBAEjF,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM;IAkF1C,uBAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,GAAG,MAAM;IAavE,6BAA6B,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,SAAS;IAI/E,oBAAoB,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,GAAG,MAAM;IAa3E,OAAO,CAAC,SAAS,CAkBf;CACH"}
@@ -0,0 +1,157 @@
1
+ import { TopicType } from '@aztec/stdlib/p2p';
2
+ import { Attributes, Metrics, ValueType } from '@aztec/telemetry-client';
3
+ import { createHistogram } from 'node:perf_hooks';
4
+ export class P2PInstrumentation {
5
+ messageValidationDuration;
6
+ messagePrevalidationCount;
7
+ messageLatency;
8
+ aggLatencyHisto = new Map();
9
+ aggValidationHisto = new Map();
10
+ aggLatencyMetrics;
11
+ aggValidationMetrics;
12
+ constructor(client, name){
13
+ const meter = client.getMeter(name);
14
+ this.messageValidationDuration = meter.createHistogram(Metrics.P2P_GOSSIP_MESSAGE_VALIDATION_DURATION, {
15
+ unit: 'ms',
16
+ description: 'How long validating a gossiped message takes',
17
+ valueType: ValueType.INT
18
+ });
19
+ this.messagePrevalidationCount = meter.createUpDownCounter(Metrics.P2P_GOSSIP_MESSAGE_PREVALIDATION_COUNT, {
20
+ description: 'How many message pass/fail prevalidation',
21
+ valueType: ValueType.INT
22
+ });
23
+ this.messageLatency = meter.createHistogram(Metrics.P2P_GOSSIP_MESSAGE_LATENCY, {
24
+ unit: 'ms',
25
+ description: 'P2P message latency',
26
+ valueType: ValueType.INT
27
+ });
28
+ this.aggLatencyMetrics = {
29
+ avg: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_AVG, {
30
+ valueType: ValueType.DOUBLE,
31
+ description: 'AVG msg latency',
32
+ unit: 'ms'
33
+ }),
34
+ max: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_MAX, {
35
+ valueType: ValueType.DOUBLE,
36
+ description: 'MAX msg latency',
37
+ unit: 'ms'
38
+ }),
39
+ min: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_MIN, {
40
+ valueType: ValueType.DOUBLE,
41
+ description: 'MIN msg latency',
42
+ unit: 'ms'
43
+ }),
44
+ p50: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_P50, {
45
+ valueType: ValueType.DOUBLE,
46
+ description: 'P50 msg latency',
47
+ unit: 'ms'
48
+ }),
49
+ p90: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_P90, {
50
+ valueType: ValueType.DOUBLE,
51
+ description: 'P90 msg latency',
52
+ unit: 'ms'
53
+ })
54
+ };
55
+ this.aggValidationMetrics = {
56
+ avg: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_AVG, {
57
+ valueType: ValueType.DOUBLE,
58
+ description: 'AVG msg validation',
59
+ unit: 'ms'
60
+ }),
61
+ max: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_MAX, {
62
+ valueType: ValueType.DOUBLE,
63
+ description: 'MAX msg validation',
64
+ unit: 'ms'
65
+ }),
66
+ min: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_MIN, {
67
+ valueType: ValueType.DOUBLE,
68
+ description: 'MIN msg validation',
69
+ unit: 'ms'
70
+ }),
71
+ p50: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_P50, {
72
+ valueType: ValueType.DOUBLE,
73
+ description: 'P50 msg validation',
74
+ unit: 'ms'
75
+ }),
76
+ p90: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_P90, {
77
+ valueType: ValueType.DOUBLE,
78
+ description: 'P90 msg validation',
79
+ unit: 'ms'
80
+ })
81
+ };
82
+ meter.addBatchObservableCallback(this.aggregate, [
83
+ ...Object.values(this.aggValidationMetrics),
84
+ ...Object.values(this.aggLatencyMetrics)
85
+ ]);
86
+ }
87
+ recordMessageValidation(topicName, timerOrMs) {
88
+ const ms = Math.ceil(typeof timerOrMs === 'number' ? timerOrMs : timerOrMs.ms());
89
+ this.messageValidationDuration.record(ms, {
90
+ [Attributes.TOPIC_NAME]: topicName
91
+ });
92
+ let validationHistogram = this.aggValidationHisto.get(topicName);
93
+ if (!validationHistogram) {
94
+ validationHistogram = createHistogram({
95
+ min: 1,
96
+ max: 5 * 60 * 1000
97
+ }); // 5 mins
98
+ this.aggValidationHisto.set(topicName, validationHistogram);
99
+ }
100
+ validationHistogram.record(Math.max(ms, 1));
101
+ }
102
+ incMessagePrevalidationStatus(passed, topicName) {
103
+ this.messagePrevalidationCount.add(1, {
104
+ [Attributes.TOPIC_NAME]: topicName,
105
+ [Attributes.OK]: passed
106
+ });
107
+ }
108
+ recordMessageLatency(topicName, timerOrMs) {
109
+ const ms = Math.ceil(typeof timerOrMs === 'number' ? timerOrMs : timerOrMs.ms());
110
+ this.messageLatency.record(ms, {
111
+ [Attributes.TOPIC_NAME]: topicName
112
+ });
113
+ let latencyHistogram = this.aggLatencyHisto.get(topicName);
114
+ if (!latencyHistogram) {
115
+ latencyHistogram = createHistogram({
116
+ min: 1,
117
+ max: 24 * 60 * 60 * 1000
118
+ }); // 24hrs
119
+ this.aggLatencyHisto.set(topicName, latencyHistogram);
120
+ }
121
+ latencyHistogram.record(Math.max(ms, 1));
122
+ }
123
+ aggregate = (res)=>{
124
+ for (const [metrics, histograms] of [
125
+ [
126
+ this.aggLatencyMetrics,
127
+ this.aggLatencyHisto
128
+ ],
129
+ [
130
+ this.aggValidationMetrics,
131
+ this.aggValidationHisto
132
+ ]
133
+ ]){
134
+ for (const topicName of Object.values(TopicType)){
135
+ const histogram = histograms.get(topicName);
136
+ if (!histogram || histogram.count === 0) {
137
+ continue;
138
+ }
139
+ res.observe(metrics.avg, histogram.mean, {
140
+ [Attributes.TOPIC_NAME]: topicName
141
+ });
142
+ res.observe(metrics.max, histogram.max, {
143
+ [Attributes.TOPIC_NAME]: topicName
144
+ });
145
+ res.observe(metrics.min, histogram.min, {
146
+ [Attributes.TOPIC_NAME]: topicName
147
+ });
148
+ res.observe(metrics.p50, histogram.percentile(50), {
149
+ [Attributes.TOPIC_NAME]: topicName
150
+ });
151
+ res.observe(metrics.p90, histogram.percentile(90), {
152
+ [Attributes.TOPIC_NAME]: topicName
153
+ });
154
+ }
155
+ }
156
+ };
157
+ }