@aztec-labs/p2p 6.0.0-nightly.20260829

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 (607) hide show
  1. package/README.md +134 -0
  2. package/dest/bootstrap/bootstrap.d.ts +39 -0
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -0
  4. package/dest/bootstrap/bootstrap.js +152 -0
  5. package/dest/client/factory.d.ts +32 -0
  6. package/dest/client/factory.d.ts.map +1 -0
  7. package/dest/client/factory.js +125 -0
  8. package/dest/client/index.d.ts +4 -0
  9. package/dest/client/index.d.ts.map +1 -0
  10. package/dest/client/index.js +3 -0
  11. package/dest/client/interface.d.ts +223 -0
  12. package/dest/client/interface.d.ts.map +1 -0
  13. package/dest/client/interface.js +9 -0
  14. package/dest/client/p2p_client.d.ts +202 -0
  15. package/dest/client/p2p_client.d.ts.map +1 -0
  16. package/dest/client/p2p_client.js +1051 -0
  17. package/dest/config.d.ts +295 -0
  18. package/dest/config.d.ts.map +1 -0
  19. package/dest/config.js +458 -0
  20. package/dest/enr/generate-enr.d.ts +17 -0
  21. package/dest/enr/generate-enr.d.ts.map +1 -0
  22. package/dest/enr/generate-enr.js +52 -0
  23. package/dest/enr/index.d.ts +2 -0
  24. package/dest/enr/index.d.ts.map +1 -0
  25. package/dest/enr/index.js +1 -0
  26. package/dest/errors/attestation-pool.error.d.ts +7 -0
  27. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  28. package/dest/errors/attestation-pool.error.js +12 -0
  29. package/dest/errors/p2p-service.error.d.ts +9 -0
  30. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  31. package/dest/errors/p2p-service.error.js +10 -0
  32. package/dest/errors/reqresp.error.d.ts +21 -0
  33. package/dest/errors/reqresp.error.d.ts.map +1 -0
  34. package/dest/errors/reqresp.error.js +23 -0
  35. package/dest/errors/tx-pool.error.d.ts +8 -0
  36. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  37. package/dest/errors/tx-pool.error.js +9 -0
  38. package/dest/index.d.ts +11 -0
  39. package/dest/index.d.ts.map +1 -0
  40. package/dest/index.js +9 -0
  41. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +194 -0
  42. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -0
  43. package/dest/mem_pools/attestation_pool/attestation_pool.js +521 -0
  44. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +3 -0
  45. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -0
  46. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +745 -0
  47. package/dest/mem_pools/attestation_pool/index.d.ts +2 -0
  48. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -0
  49. package/dest/mem_pools/attestation_pool/index.js +1 -0
  50. package/dest/mem_pools/attestation_pool/mocks.d.ts +242 -0
  51. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -0
  52. package/dest/mem_pools/attestation_pool/mocks.js +33 -0
  53. package/dest/mem_pools/index.d.ts +4 -0
  54. package/dest/mem_pools/index.d.ts.map +1 -0
  55. package/dest/mem_pools/index.js +1 -0
  56. package/dest/mem_pools/instrumentation.d.ts +41 -0
  57. package/dest/mem_pools/instrumentation.d.ts.map +1 -0
  58. package/dest/mem_pools/instrumentation.js +120 -0
  59. package/dest/mem_pools/interface.d.ts +10 -0
  60. package/dest/mem_pools/interface.d.ts.map +1 -0
  61. package/dest/mem_pools/interface.js +3 -0
  62. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  63. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  64. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  65. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +48 -0
  66. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  67. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +112 -0
  68. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  69. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  70. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  71. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  72. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  73. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  74. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  75. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  76. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
  77. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  78. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +99 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +11 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  82. package/dest/mem_pools/tx_pool_v2/eviction/index.js +12 -0
  83. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  84. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  85. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +64 -0
  86. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  87. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  88. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  89. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  90. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  91. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +64 -0
  92. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  93. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  94. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +92 -0
  95. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  96. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  97. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +79 -0
  98. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  99. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  100. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  101. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  102. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  103. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  104. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  105. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  106. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  107. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +25 -0
  108. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  109. package/dest/mem_pools/tx_pool_v2/instrumentation.js +67 -0
  110. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +243 -0
  111. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  112. package/dest/mem_pools/tx_pool_v2/interfaces.js +11 -0
  113. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +137 -0
  114. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  115. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +223 -0
  116. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  117. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  118. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  119. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +122 -0
  120. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  121. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +368 -0
  122. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +75 -0
  123. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  124. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +218 -0
  125. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +122 -0
  126. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  127. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +1039 -0
  128. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +17 -0
  129. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -0
  130. package/dest/msg_validators/attestation_validator/attestation_validator.js +111 -0
  131. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +24 -0
  132. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  133. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +75 -0
  134. package/dest/msg_validators/attestation_validator/index.d.ts +3 -0
  135. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -0
  136. package/dest/msg_validators/attestation_validator/index.js +2 -0
  137. package/dest/msg_validators/index.d.ts +4 -0
  138. package/dest/msg_validators/index.d.ts.map +1 -0
  139. package/dest/msg_validators/index.js +3 -0
  140. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +10 -0
  141. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -0
  142. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.js +36 -0
  143. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +16 -0
  144. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  145. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +14 -0
  146. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +16 -0
  147. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  148. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +26 -0
  149. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  150. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  151. package/dest/msg_validators/proposal_validator/index.js +3 -0
  152. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +40 -0
  153. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  154. package/dest/msg_validators/proposal_validator/proposal_validator.js +186 -0
  155. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +7 -0
  156. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -0
  157. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +25 -0
  158. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +4 -0
  159. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -0
  160. package/dest/msg_validators/tx_validator/allowed_public_setup.js +31 -0
  161. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  162. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  163. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  164. package/dest/msg_validators/tx_validator/archive_cache.d.ts +14 -0
  165. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -0
  166. package/dest/msg_validators/tx_validator/archive_cache.js +22 -0
  167. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +25 -0
  168. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -0
  169. package/dest/msg_validators/tx_validator/block_header_validator.js +27 -0
  170. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  171. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  172. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  173. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  174. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  175. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  176. package/dest/msg_validators/tx_validator/data_validator.d.ts +9 -0
  177. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -0
  178. package/dest/msg_validators/tx_validator/data_validator.js +114 -0
  179. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +21 -0
  180. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -0
  181. package/dest/msg_validators/tx_validator/double_spend_validator.js +36 -0
  182. package/dest/msg_validators/tx_validator/factory.d.ts +148 -0
  183. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
  184. package/dest/msg_validators/tx_validator/factory.js +302 -0
  185. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  186. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  187. package/dest/msg_validators/tx_validator/fee_payer_balance.js +24 -0
  188. package/dest/msg_validators/tx_validator/gas_limits_validator.d.ts +73 -0
  189. package/dest/msg_validators/tx_validator/gas_limits_validator.d.ts.map +1 -0
  190. package/dest/msg_validators/tx_validator/gas_limits_validator.js +107 -0
  191. package/dest/msg_validators/tx_validator/gas_validator.d.ts +65 -0
  192. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -0
  193. package/dest/msg_validators/tx_validator/gas_validator.js +107 -0
  194. package/dest/msg_validators/tx_validator/index.d.ts +20 -0
  195. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -0
  196. package/dest/msg_validators/tx_validator/index.js +19 -0
  197. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +15 -0
  198. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -0
  199. package/dest/msg_validators/tx_validator/metadata_validator.js +63 -0
  200. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  201. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  202. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  203. package/dest/msg_validators/tx_validator/phases_validator.d.ts +35 -0
  204. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -0
  205. package/dest/msg_validators/tx_validator/phases_validator.js +141 -0
  206. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  207. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  208. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  209. package/dest/msg_validators/tx_validator/test_utils.d.ts +17 -0
  210. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -0
  211. package/dest/msg_validators/tx_validator/test_utils.js +22 -0
  212. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +30 -0
  213. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -0
  214. package/dest/msg_validators/tx_validator/timestamp_validator.js +32 -0
  215. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +9 -0
  216. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -0
  217. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +24 -0
  218. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +11 -0
  219. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -0
  220. package/dest/msg_validators/tx_validator/tx_proof_validator.js +28 -0
  221. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  222. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  223. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  224. package/dest/services/data_store.d.ts +27 -0
  225. package/dest/services/data_store.d.ts.map +1 -0
  226. package/dest/services/data_store.js +192 -0
  227. package/dest/services/discv5/discV5_service.d.ts +54 -0
  228. package/dest/services/discv5/discV5_service.d.ts.map +1 -0
  229. package/dest/services/discv5/discV5_service.js +337 -0
  230. package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
  231. package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
  232. package/dest/services/discv5/persisted_enr_store.js +145 -0
  233. package/dest/services/dummy_service.d.ts +150 -0
  234. package/dest/services/dummy_service.d.ts.map +1 -0
  235. package/dest/services/dummy_service.js +228 -0
  236. package/dest/services/encoding.d.ts +67 -0
  237. package/dest/services/encoding.d.ts.map +1 -0
  238. package/dest/services/encoding.js +152 -0
  239. package/dest/services/gossipsub/index.d.ts +3 -0
  240. package/dest/services/gossipsub/index.d.ts.map +1 -0
  241. package/dest/services/gossipsub/index.js +2 -0
  242. package/dest/services/gossipsub/scoring.d.ts +25 -0
  243. package/dest/services/gossipsub/scoring.d.ts.map +1 -0
  244. package/dest/services/gossipsub/scoring.js +27 -0
  245. package/dest/services/gossipsub/topic_score_params.d.ts +167 -0
  246. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  247. package/dest/services/gossipsub/topic_score_params.js +336 -0
  248. package/dest/services/index.d.ts +8 -0
  249. package/dest/services/index.d.ts.map +1 -0
  250. package/dest/services/index.js +7 -0
  251. package/dest/services/libp2p/instrumentation.d.ts +25 -0
  252. package/dest/services/libp2p/instrumentation.d.ts.map +1 -0
  253. package/dest/services/libp2p/instrumentation.js +143 -0
  254. package/dest/services/libp2p/libp2p_service.d.ts +250 -0
  255. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -0
  256. package/dest/services/libp2p/libp2p_service.js +1983 -0
  257. package/dest/services/peer-manager/interface.d.ts +23 -0
  258. package/dest/services/peer-manager/interface.d.ts.map +1 -0
  259. package/dest/services/peer-manager/interface.js +1 -0
  260. package/dest/services/peer-manager/metrics.d.ts +23 -0
  261. package/dest/services/peer-manager/metrics.d.ts.map +1 -0
  262. package/dest/services/peer-manager/metrics.js +71 -0
  263. package/dest/services/peer-manager/peer_manager.d.ts +202 -0
  264. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -0
  265. package/dest/services/peer-manager/peer_manager.js +1015 -0
  266. package/dest/services/peer-manager/peer_scoring.d.ts +65 -0
  267. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -0
  268. package/dest/services/peer-manager/peer_scoring.js +239 -0
  269. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +44 -0
  270. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  271. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +534 -0
  272. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  273. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  274. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  275. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  276. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  277. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  278. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +35 -0
  279. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  280. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +136 -0
  281. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +62 -0
  282. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  283. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +176 -0
  284. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +11 -0
  285. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  286. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +7 -0
  287. package/dest/services/reqresp/config.d.ts +30 -0
  288. package/dest/services/reqresp/config.d.ts.map +1 -0
  289. package/dest/services/reqresp/config.js +45 -0
  290. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +76 -0
  291. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -0
  292. package/dest/services/reqresp/connection-sampler/connection_sampler.js +251 -0
  293. package/dest/services/reqresp/constants.d.ts +12 -0
  294. package/dest/services/reqresp/constants.d.ts.map +1 -0
  295. package/dest/services/reqresp/constants.js +7 -0
  296. package/dest/services/reqresp/index.d.ts +7 -0
  297. package/dest/services/reqresp/index.d.ts.map +1 -0
  298. package/dest/services/reqresp/index.js +5 -0
  299. package/dest/services/reqresp/interface.d.ts +174 -0
  300. package/dest/services/reqresp/interface.d.ts.map +1 -0
  301. package/dest/services/reqresp/interface.js +107 -0
  302. package/dest/services/reqresp/metrics.d.ts +16 -0
  303. package/dest/services/reqresp/metrics.d.ts.map +1 -0
  304. package/dest/services/reqresp/metrics.js +50 -0
  305. package/dest/services/reqresp/protocols/auth.d.ts +43 -0
  306. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -0
  307. package/dest/services/reqresp/protocols/auth.js +71 -0
  308. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +35 -0
  309. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -0
  310. package/dest/services/reqresp/protocols/block_txs/bitvector.js +88 -0
  311. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +13 -0
  312. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -0
  313. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +60 -0
  314. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +75 -0
  315. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -0
  316. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +139 -0
  317. package/dest/services/reqresp/protocols/block_txs/index.d.ts +4 -0
  318. package/dest/services/reqresp/protocols/block_txs/index.d.ts.map +1 -0
  319. package/dest/services/reqresp/protocols/block_txs/index.js +3 -0
  320. package/dest/services/reqresp/protocols/goodbye.d.ts +49 -0
  321. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -0
  322. package/dest/services/reqresp/protocols/goodbye.js +87 -0
  323. package/dest/services/reqresp/protocols/index.d.ts +10 -0
  324. package/dest/services/reqresp/protocols/index.d.ts.map +1 -0
  325. package/dest/services/reqresp/protocols/index.js +8 -0
  326. package/dest/services/reqresp/protocols/ping.d.ts +7 -0
  327. package/dest/services/reqresp/protocols/ping.d.ts.map +1 -0
  328. package/dest/services/reqresp/protocols/ping.js +7 -0
  329. package/dest/services/reqresp/protocols/status.d.ts +42 -0
  330. package/dest/services/reqresp/protocols/status.d.ts.map +1 -0
  331. package/dest/services/reqresp/protocols/status.js +78 -0
  332. package/dest/services/reqresp/protocols/tx.d.ts +29 -0
  333. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -0
  334. package/dest/services/reqresp/protocols/tx.js +66 -0
  335. package/dest/services/reqresp/rate-limiter/index.d.ts +2 -0
  336. package/dest/services/reqresp/rate-limiter/index.d.ts.map +1 -0
  337. package/dest/services/reqresp/rate-limiter/index.js +1 -0
  338. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +105 -0
  339. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -0
  340. package/dest/services/reqresp/rate-limiter/rate_limiter.js +194 -0
  341. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +3 -0
  342. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -0
  343. package/dest/services/reqresp/rate-limiter/rate_limits.js +64 -0
  344. package/dest/services/reqresp/reqresp.d.ts +107 -0
  345. package/dest/services/reqresp/reqresp.d.ts.map +1 -0
  346. package/dest/services/reqresp/reqresp.js +887 -0
  347. package/dest/services/reqresp/status.d.ts +37 -0
  348. package/dest/services/reqresp/status.d.ts.map +1 -0
  349. package/dest/services/reqresp/status.js +58 -0
  350. package/dest/services/service.d.ts +168 -0
  351. package/dest/services/service.d.ts.map +1 -0
  352. package/dest/services/service.js +5 -0
  353. package/dest/services/tx_collection/config.d.ts +25 -0
  354. package/dest/services/tx_collection/config.d.ts.map +1 -0
  355. package/dest/services/tx_collection/config.js +59 -0
  356. package/dest/services/tx_collection/file_store_tx_collection.d.ts +37 -0
  357. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  358. package/dest/services/tx_collection/file_store_tx_collection.js +127 -0
  359. package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
  360. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  361. package/dest/services/tx_collection/file_store_tx_source.js +100 -0
  362. package/dest/services/tx_collection/index.d.ts +4 -0
  363. package/dest/services/tx_collection/index.d.ts.map +1 -0
  364. package/dest/services/tx_collection/index.js +3 -0
  365. package/dest/services/tx_collection/instrumentation.d.ts +10 -0
  366. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -0
  367. package/dest/services/tx_collection/instrumentation.js +30 -0
  368. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  369. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  370. package/dest/services/tx_collection/request_tracker.js +84 -0
  371. package/dest/services/tx_collection/tx_collection.d.ts +104 -0
  372. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -0
  373. package/dest/services/tx_collection/tx_collection.js +356 -0
  374. package/dest/services/tx_collection/tx_collection_sink.d.ts +40 -0
  375. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -0
  376. package/dest/services/tx_collection/tx_collection_sink.js +108 -0
  377. package/dest/services/tx_collection/tx_source.d.ts +24 -0
  378. package/dest/services/tx_collection/tx_source.d.ts.map +1 -0
  379. package/dest/services/tx_collection/tx_source.js +56 -0
  380. package/dest/services/tx_file_store/config.d.ts +16 -0
  381. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  382. package/dest/services/tx_file_store/config.js +22 -0
  383. package/dest/services/tx_file_store/index.d.ts +4 -0
  384. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  385. package/dest/services/tx_file_store/index.js +3 -0
  386. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  387. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  388. package/dest/services/tx_file_store/instrumentation.js +29 -0
  389. package/dest/services/tx_file_store/tx_file_store.d.ts +46 -0
  390. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  391. package/dest/services/tx_file_store/tx_file_store.js +142 -0
  392. package/dest/services/tx_provider.d.ts +53 -0
  393. package/dest/services/tx_provider.d.ts.map +1 -0
  394. package/dest/services/tx_provider.js +223 -0
  395. package/dest/services/tx_provider_instrumentation.d.ts +16 -0
  396. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -0
  397. package/dest/services/tx_provider_instrumentation.js +34 -0
  398. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +7 -0
  399. package/dest/test-helpers/generate-peer-id-private-keys.d.ts.map +1 -0
  400. package/dest/test-helpers/generate-peer-id-private-keys.js +13 -0
  401. package/dest/test-helpers/get-ports.d.ts +7 -0
  402. package/dest/test-helpers/get-ports.d.ts.map +1 -0
  403. package/dest/test-helpers/get-ports.js +8 -0
  404. package/dest/test-helpers/index.d.ts +9 -0
  405. package/dest/test-helpers/index.d.ts.map +1 -0
  406. package/dest/test-helpers/index.js +8 -0
  407. package/dest/test-helpers/make-enrs.d.ts +16 -0
  408. package/dest/test-helpers/make-enrs.d.ts.map +1 -0
  409. package/dest/test-helpers/make-enrs.js +31 -0
  410. package/dest/test-helpers/make-test-p2p-clients.d.ts +63 -0
  411. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -0
  412. package/dest/test-helpers/make-test-p2p-clients.js +140 -0
  413. package/dest/test-helpers/mock-pubsub.d.ts +109 -0
  414. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -0
  415. package/dest/test-helpers/mock-pubsub.js +244 -0
  416. package/dest/test-helpers/mock-tx-helpers.d.ts +12 -0
  417. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -0
  418. package/dest/test-helpers/mock-tx-helpers.js +19 -0
  419. package/dest/test-helpers/reqresp-nodes.d.ts +68 -0
  420. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -0
  421. package/dest/test-helpers/reqresp-nodes.js +240 -0
  422. package/dest/test-helpers/test_tx_provider.d.ts +42 -0
  423. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  424. package/dest/test-helpers/test_tx_provider.js +44 -0
  425. package/dest/test-helpers/testbench-utils.d.ts +164 -0
  426. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  427. package/dest/test-helpers/testbench-utils.js +401 -0
  428. package/dest/testbench/p2p_client_testbench_worker.d.ts +26 -0
  429. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -0
  430. package/dest/testbench/p2p_client_testbench_worker.js +364 -0
  431. package/dest/testbench/parse_log_file.d.ts +2 -0
  432. package/dest/testbench/parse_log_file.d.ts.map +1 -0
  433. package/dest/testbench/parse_log_file.js +131 -0
  434. package/dest/testbench/testbench.d.ts +2 -0
  435. package/dest/testbench/testbench.d.ts.map +1 -0
  436. package/dest/testbench/testbench.js +62 -0
  437. package/dest/testbench/worker_client_manager.d.ts +102 -0
  438. package/dest/testbench/worker_client_manager.d.ts.map +1 -0
  439. package/dest/testbench/worker_client_manager.js +492 -0
  440. package/dest/types/index.d.ts +34 -0
  441. package/dest/types/index.d.ts.map +1 -0
  442. package/dest/types/index.js +30 -0
  443. package/dest/util.d.ts +66 -0
  444. package/dest/util.d.ts.map +1 -0
  445. package/dest/util.js +167 -0
  446. package/dest/versioning.d.ts +9 -0
  447. package/dest/versioning.d.ts.map +1 -0
  448. package/dest/versioning.js +17 -0
  449. package/package.json +131 -0
  450. package/src/bootstrap/bootstrap.ts +178 -0
  451. package/src/client/factory.ts +282 -0
  452. package/src/client/index.ts +3 -0
  453. package/src/client/interface.ts +264 -0
  454. package/src/client/p2p_client.ts +846 -0
  455. package/src/client/test/p2p_client.batch_tx_requester.bench.README.md +197 -0
  456. package/src/config.ts +787 -0
  457. package/src/enr/generate-enr.ts +71 -0
  458. package/src/enr/index.ts +1 -0
  459. package/src/errors/attestation-pool.error.ts +13 -0
  460. package/src/errors/p2p-service.error.ts +11 -0
  461. package/src/errors/reqresp.error.ts +29 -0
  462. package/src/errors/tx-pool.error.ts +12 -0
  463. package/src/index.ts +11 -0
  464. package/src/mem_pools/attestation_pool/attestation_pool.ts +648 -0
  465. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +896 -0
  466. package/src/mem_pools/attestation_pool/index.ts +9 -0
  467. package/src/mem_pools/attestation_pool/mocks.ts +56 -0
  468. package/src/mem_pools/index.ts +3 -0
  469. package/src/mem_pools/instrumentation.ts +160 -0
  470. package/src/mem_pools/interface.ts +10 -0
  471. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  472. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  473. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +130 -0
  474. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  475. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  476. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +120 -0
  477. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +126 -0
  478. package/src/mem_pools/tx_pool_v2/eviction/index.ts +28 -0
  479. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +67 -0
  480. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  481. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +72 -0
  482. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +99 -0
  483. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +90 -0
  484. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  485. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  486. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  487. package/src/mem_pools/tx_pool_v2/instrumentation.ts +96 -0
  488. package/src/mem_pools/tx_pool_v2/interfaces.ts +274 -0
  489. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +349 -0
  490. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  491. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +465 -0
  492. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +300 -0
  493. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1242 -0
  494. package/src/msg_validators/attestation_validator/README.md +49 -0
  495. package/src/msg_validators/attestation_validator/attestation_validator.ts +116 -0
  496. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +107 -0
  497. package/src/msg_validators/attestation_validator/index.ts +2 -0
  498. package/src/msg_validators/index.ts +3 -0
  499. package/src/msg_validators/msg_seen_validator/msg_seen_validator.ts +36 -0
  500. package/src/msg_validators/proposal_validator/README.md +123 -0
  501. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +37 -0
  502. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +49 -0
  503. package/src/msg_validators/proposal_validator/index.ts +3 -0
  504. package/src/msg_validators/proposal_validator/proposal_validator.ts +198 -0
  505. package/src/msg_validators/tx_validator/README.md +137 -0
  506. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +24 -0
  507. package/src/msg_validators/tx_validator/allowed_public_setup.ts +30 -0
  508. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  509. package/src/msg_validators/tx_validator/archive_cache.ts +28 -0
  510. package/src/msg_validators/tx_validator/block_header_validator.ts +38 -0
  511. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  512. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  513. package/src/msg_validators/tx_validator/data_validator.ts +173 -0
  514. package/src/msg_validators/tx_validator/double_spend_validator.ts +46 -0
  515. package/src/msg_validators/tx_validator/factory.ts +490 -0
  516. package/src/msg_validators/tx_validator/fee_payer_balance.ts +44 -0
  517. package/src/msg_validators/tx_validator/gas_limits_validator.ts +148 -0
  518. package/src/msg_validators/tx_validator/gas_validator.ts +149 -0
  519. package/src/msg_validators/tx_validator/index.ts +19 -0
  520. package/src/msg_validators/tx_validator/metadata_validator.ts +104 -0
  521. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  522. package/src/msg_validators/tx_validator/phases_validator.ts +173 -0
  523. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  524. package/src/msg_validators/tx_validator/test_utils.ts +43 -0
  525. package/src/msg_validators/tx_validator/timestamp_validator.ts +61 -0
  526. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +22 -0
  527. package/src/msg_validators/tx_validator/tx_proof_validator.ts +26 -0
  528. package/src/msg_validators/tx_validator/tx_validation_cache.ts +100 -0
  529. package/src/services/data_store.ts +229 -0
  530. package/src/services/discv5/discV5_service.ts +413 -0
  531. package/src/services/discv5/persisted_enr_store.ts +157 -0
  532. package/src/services/dummy_service.ts +320 -0
  533. package/src/services/encoding.ts +170 -0
  534. package/src/services/gossipsub/README.md +663 -0
  535. package/src/services/gossipsub/index.ts +2 -0
  536. package/src/services/gossipsub/scoring.ts +37 -0
  537. package/src/services/gossipsub/topic_score_params.ts +477 -0
  538. package/src/services/index.ts +7 -0
  539. package/src/services/libp2p/instrumentation.ts +147 -0
  540. package/src/services/libp2p/libp2p_service.ts +1972 -0
  541. package/src/services/peer-manager/interface.ts +28 -0
  542. package/src/services/peer-manager/metrics.ts +90 -0
  543. package/src/services/peer-manager/peer_manager.ts +1221 -0
  544. package/src/services/peer-manager/peer_scoring.ts +265 -0
  545. package/src/services/reqresp/README.md +194 -0
  546. package/src/services/reqresp/batch-tx-requester/README.md +344 -0
  547. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +659 -0
  548. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  549. package/src/services/reqresp/batch-tx-requester/interface.ts +60 -0
  550. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +167 -0
  551. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +248 -0
  552. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +24 -0
  553. package/src/services/reqresp/config.ts +69 -0
  554. package/src/services/reqresp/connection-sampler/connection_sampler.ts +287 -0
  555. package/src/services/reqresp/constants.ts +14 -0
  556. package/src/services/reqresp/index.ts +6 -0
  557. package/src/services/reqresp/interface.ts +241 -0
  558. package/src/services/reqresp/metrics.ts +68 -0
  559. package/src/services/reqresp/protocols/auth.ts +83 -0
  560. package/src/services/reqresp/protocols/block_txs/bitvector.ts +107 -0
  561. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +79 -0
  562. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +170 -0
  563. package/src/services/reqresp/protocols/block_txs/index.ts +3 -0
  564. package/src/services/reqresp/protocols/goodbye.ts +102 -0
  565. package/src/services/reqresp/protocols/index.ts +9 -0
  566. package/src/services/reqresp/protocols/ping.ts +8 -0
  567. package/src/services/reqresp/protocols/status.ts +123 -0
  568. package/src/services/reqresp/protocols/tx.ts +76 -0
  569. package/src/services/reqresp/rate-limiter/index.ts +1 -0
  570. package/src/services/reqresp/rate-limiter/rate_limiter.ts +240 -0
  571. package/src/services/reqresp/rate-limiter/rate_limits.ts +65 -0
  572. package/src/services/reqresp/reqresp.ts +675 -0
  573. package/src/services/reqresp/status.ts +68 -0
  574. package/src/services/service.ts +219 -0
  575. package/src/services/tx_collection/config.ts +89 -0
  576. package/src/services/tx_collection/file_store_tx_collection.ts +153 -0
  577. package/src/services/tx_collection/file_store_tx_source.ts +129 -0
  578. package/src/services/tx_collection/index.ts +3 -0
  579. package/src/services/tx_collection/instrumentation.ts +35 -0
  580. package/src/services/tx_collection/request_tracker.ts +127 -0
  581. package/src/services/tx_collection/tx_collection.ts +467 -0
  582. package/src/services/tx_collection/tx_collection_sink.ts +124 -0
  583. package/src/services/tx_collection/tx_source.ts +61 -0
  584. package/src/services/tx_file_store/config.ts +37 -0
  585. package/src/services/tx_file_store/index.ts +3 -0
  586. package/src/services/tx_file_store/instrumentation.ts +42 -0
  587. package/src/services/tx_file_store/tx_file_store.ts +163 -0
  588. package/src/services/tx_provider.ts +237 -0
  589. package/src/services/tx_provider_instrumentation.ts +54 -0
  590. package/src/test-helpers/generate-peer-id-private-keys.ts +15 -0
  591. package/src/test-helpers/get-ports.ts +8 -0
  592. package/src/test-helpers/index.ts +8 -0
  593. package/src/test-helpers/make-enrs.ts +42 -0
  594. package/src/test-helpers/make-test-p2p-clients.ts +213 -0
  595. package/src/test-helpers/mock-pubsub.ts +325 -0
  596. package/src/test-helpers/mock-tx-helpers.ts +24 -0
  597. package/src/test-helpers/reqresp-nodes.ts +327 -0
  598. package/src/test-helpers/test_tx_provider.ts +68 -0
  599. package/src/test-helpers/testbench-utils.ts +465 -0
  600. package/src/testbench/README.md +20 -0
  601. package/src/testbench/p2p_client_testbench_worker.ts +553 -0
  602. package/src/testbench/parse_log_file.ts +174 -0
  603. package/src/testbench/testbench.ts +66 -0
  604. package/src/testbench/worker_client_manager.ts +621 -0
  605. package/src/types/index.ts +38 -0
  606. package/src/util.ts +230 -0
  607. package/src/versioning.ts +26 -0
@@ -0,0 +1,287 @@
1
+ import { AbortError } from '@aztec-labs/foundation/error';
2
+ import { createLogger } from '@aztec-labs/foundation/log';
3
+ import type { Libp2p, PeerId, Stream } from '@libp2p/interface';
4
+
5
+ const MAX_SAMPLE_ATTEMPTS = 4;
6
+
7
+ export class RandomSampler {
8
+ random(max: number) {
9
+ return Math.floor(Math.random() * max);
10
+ }
11
+ }
12
+
13
+ /**
14
+ * A class that samples peers from the libp2p node and returns a peer that we don't already have a reqresp connection open to.
15
+ * If we already have a connection open, we try to sample a different peer.
16
+ * We do this MAX_SAMPLE_ATTEMPTS times, if we still don't find a peer we just go for it.
17
+ *
18
+ * @dev Close must always be called on connections, else memory leak
19
+ */
20
+ export class ConnectionSampler {
21
+ private cleanupInterval: NodeJS.Timeout;
22
+
23
+ // Map from stringified peer id to number of active connections
24
+ protected readonly activeConnectionsCount: Map<string, number> = new Map();
25
+
26
+ // eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
27
+ protected readonly streams: Set<Stream> = new Set();
28
+
29
+ private abortOnStop: AbortController = new AbortController();
30
+
31
+ constructor(
32
+ private readonly libp2p: Libp2p,
33
+ private readonly sampler: RandomSampler,
34
+ private readonly logger = createLogger('p2p:reqresp:connection-sampler'),
35
+ private readonly opts: { cleanupIntervalMs?: number; p2pOptimisticNegotiation?: boolean } = {},
36
+ ) {
37
+ this.cleanupInterval = setInterval(
38
+ () => void this.cleanupStaleConnections(),
39
+ this.opts.cleanupIntervalMs ?? 60_000,
40
+ );
41
+ }
42
+
43
+ /**
44
+ * Stops the cleanup job and closes all active connections
45
+ */
46
+ async stop() {
47
+ this.logger.info('Stopping connection sampler');
48
+ this.abortOnStop.abort(new AbortError('Connection sampler stopped'));
49
+ clearInterval(this.cleanupInterval);
50
+
51
+ // Close all active streams
52
+ const closePromises = Array.from(this.streams.values()).map(stream => this.close(stream));
53
+ await Promise.all(closePromises);
54
+ this.logger.info('Connection sampler stopped');
55
+ }
56
+
57
+ /**
58
+ *
59
+ * @param excluding - The peers to exclude from the sampling
60
+ * This is to prevent sampling with replacement
61
+ * @returns
62
+ */
63
+ getPeer(excluding?: Map<string, boolean>): PeerId | undefined {
64
+ // In libp2p getPeers performs a shallow copy, so this array can be sliced from safetly
65
+ const peers = this.libp2p.getPeers();
66
+ const { peer } = this.getPeerFromList(peers, excluding);
67
+ return peer;
68
+ }
69
+
70
+ /**
71
+ * Samples a peer from a list of peers, excluding those that have active (reqresp) connections or are in the exclusion list
72
+ *
73
+ * @param peers - The list of peers to sample from
74
+ * @param excluding - The peers to exclude from the sampling
75
+ * @returns - A peer from the list, or undefined if no peers are available,
76
+ * - a boolean indicating if the peer has active connections, and
77
+ * - all sampled peers - to enable optional resampling
78
+ *
79
+ * @dev The provided list peers, should be mutated by this function. This allows batch sampling
80
+ * to be performed without making extra copies of the list.
81
+ */
82
+ getPeerFromList(
83
+ peers: PeerId[],
84
+ excluding?: Map<string, boolean>,
85
+ ): {
86
+ peer: PeerId | undefined;
87
+ sampledPeers: PeerId[];
88
+ } {
89
+ if (peers.length === 0) {
90
+ return { peer: undefined, sampledPeers: [] };
91
+ }
92
+
93
+ const sampledPeers: PeerId[] = [];
94
+ // Try to find a peer that has no active connections and is not in the exclusion list
95
+ for (let attempts = 0; attempts < MAX_SAMPLE_ATTEMPTS && peers.length > 0; attempts++) {
96
+ const randomIndex = this.sampler.random(peers.length);
97
+ const peer = peers[randomIndex];
98
+ const hasActiveConnections = (this.activeConnectionsCount.get(peer.toString()) ?? 0) > 0;
99
+ const isExcluded = excluding?.get(peer.toString()) ?? false;
100
+
101
+ // Remove this peer from consideration
102
+ peers.splice(randomIndex, 1);
103
+
104
+ // If peer is suitable (no active connections and not excluded), return it
105
+ if (!hasActiveConnections && !isExcluded) {
106
+ this.logger.trace('Sampled peer', {
107
+ attempts,
108
+ peer,
109
+ });
110
+ return { peer, sampledPeers };
111
+ }
112
+
113
+ // Keep track of peers that have active reqresp channels, batch sampling will use these to resample
114
+ sampledPeers.push(peer);
115
+ }
116
+
117
+ // If we've exhausted our attempts or peers list is empty, return the last peer if available
118
+ const lastPeer = peers.length > 0 ? peers[this.sampler.random(peers.length)] : undefined;
119
+
120
+ this.logger.trace('Sampled peer', {
121
+ attempts: MAX_SAMPLE_ATTEMPTS,
122
+ peer: lastPeer?.toString(),
123
+ });
124
+ return { peer: lastPeer, sampledPeers };
125
+ }
126
+
127
+ /*
128
+ * Returns all peers sorted by connection count ascending,
129
+ * meaning that the peers with the least number of active connections are earlier in an array
130
+ *
131
+ * @param: excluding - peers to exclude
132
+ * @return: list of peer ids
133
+ * */
134
+ public getPeerListSortedByConnectionCountAsc(excluding?: Set<string>): PeerId[] {
135
+ return this.libp2p
136
+ .getPeers()
137
+ .filter(id => !excluding?.has(id.toString()))
138
+ .map(id => ({ id, count: this.activeConnectionsCount.get(id.toString()) ?? 0 }))
139
+ .sort((a, b) => a.count - b.count)
140
+ .map(p => p.id);
141
+ }
142
+
143
+ /**
144
+ * Samples a batch of unique peers from the libp2p node, prioritizing peers without active connections
145
+ *
146
+ * @param numberToSample - The number of peers to sample
147
+ * @param excluding - The peers to exclude from the sampling
148
+ * @returns Array of unique sampled peers, prioritizing those without active connections
149
+ */
150
+ samplePeersBatch(numberToSample: number, excluding?: Map<string, boolean>): PeerId[] {
151
+ const peers = this.libp2p.getPeers();
152
+ this.logger.debug('Sampling peers batch', { numberToSample, peers });
153
+
154
+ // Only sample as many peers as we have available
155
+ numberToSample = Math.min(numberToSample, peers.length);
156
+
157
+ const batch: PeerId[] = [];
158
+ // eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
159
+ const withActiveConnections: Set<PeerId> = new Set();
160
+ for (let i = 0; i < numberToSample; i++) {
161
+ const { peer, sampledPeers } = this.getPeerFromList(peers, excluding);
162
+ if (peer) {
163
+ batch.push(peer);
164
+ }
165
+ if (sampledPeers.length > 0) {
166
+ sampledPeers.forEach(peer => withActiveConnections.add(peer));
167
+ }
168
+ }
169
+ const lengthWithoutConnections = batch.length;
170
+
171
+ // If we still need more peers, sample from those with connections
172
+ while (batch.length < numberToSample && withActiveConnections.size > 0) {
173
+ const randomIndex = this.sampler.random(withActiveConnections.size);
174
+
175
+ const peer = Array.from(withActiveConnections)[randomIndex];
176
+ withActiveConnections.delete(peer);
177
+ batch.push(peer);
178
+ }
179
+
180
+ this.logger.trace('Batch sampled peers', {
181
+ length: batch.length,
182
+ peers: batch,
183
+ withoutConnections: lengthWithoutConnections,
184
+ withConnections: numberToSample - lengthWithoutConnections,
185
+ });
186
+
187
+ return batch;
188
+ }
189
+
190
+ // Set of passthrough functions to keep track of active connections
191
+
192
+ /**
193
+ * Dials a protocol and returns the stream
194
+ *
195
+ * @param peerId - The peer id
196
+ * @param protocol - The protocol
197
+ * @param timeout - Abort connection if it takes too long
198
+ * @returns The stream
199
+ */
200
+ async dialProtocol(peerId: PeerId, protocol: string, timeout?: number): Promise<Stream> {
201
+ const stream = await this.libp2p.dialProtocol(peerId, protocol, {
202
+ signal: AbortSignal.any(
203
+ timeout ? [this.abortOnStop.signal, AbortSignal.timeout(timeout!)] : [this.abortOnStop.signal],
204
+ ),
205
+ negotiateFully: !this.opts.p2pOptimisticNegotiation,
206
+ });
207
+ stream.metadata.peerId = peerId;
208
+ this.streams.add(stream);
209
+
210
+ const peerIdString = peerId.toString();
211
+ const updatedActiveConnectionsCount = (this.activeConnectionsCount.get(peerIdString) ?? 0) + 1;
212
+ this.activeConnectionsCount.set(peerIdString, updatedActiveConnectionsCount);
213
+
214
+ this.logger.trace('Dialed protocol', {
215
+ streamId: stream.id,
216
+ protocol,
217
+ peerId: peerIdString,
218
+ activeConnectionsCount: updatedActiveConnectionsCount,
219
+ });
220
+ return stream;
221
+ }
222
+
223
+ /**
224
+ * Closes a stream and updates the active connections count
225
+ */
226
+ async close(stream: Stream): Promise<void> {
227
+ let peerId: PeerId | undefined = undefined;
228
+
229
+ try {
230
+ peerId = stream.metadata.peerId;
231
+ let updatedActiveConnectionsCount = undefined;
232
+
233
+ if (!peerId) {
234
+ this.logger.warn(`Stream ${stream.id} does not have a peerId set`);
235
+ } else {
236
+ updatedActiveConnectionsCount = (this.activeConnectionsCount.get(peerId.toString()) ?? 1) - 1;
237
+ this.activeConnectionsCount.set(peerId.toString(), updatedActiveConnectionsCount);
238
+ }
239
+
240
+ this.logger.trace('Closing connection', {
241
+ streamId: stream.id,
242
+ peerId: peerId?.toString(),
243
+ protocol: stream.protocol,
244
+ activeConnectionsCount: updatedActiveConnectionsCount,
245
+ });
246
+
247
+ if (!this.streams.has(stream)) {
248
+ this.logger.debug(`Stream ${stream.id} is not in the active streams set`);
249
+ }
250
+
251
+ await stream.close();
252
+ } catch (error) {
253
+ this.logger.error(`Failed to close connection to peer ${peerId ?? 'unknown'} with stream id ${stream.id}`, error);
254
+ // graceful close failed, abort the stream
255
+ stream.abort(new AbortError('Failed to close stream gracefully'));
256
+ } finally {
257
+ this.streams.delete(stream);
258
+ }
259
+ }
260
+
261
+ /**
262
+ * Cleans up stale connections that we have lost accounting for
263
+ */
264
+ private async cleanupStaleConnections() {
265
+ // Look for streams without anything in the activeConnectionsCount
266
+ // If we find anything, close the stream
267
+ for (const stream of this.streams.values()) {
268
+ try {
269
+ // Check if we have lost track of accounting
270
+ const peerId: PeerId = stream.metadata.peerId;
271
+ if (!peerId) {
272
+ this.logger.warn(`Stream ${stream.id} does not have a peerId set`);
273
+ } else if (this.activeConnectionsCount.get(peerId.toString()) === 0) {
274
+ await this.close(stream);
275
+ this.logger.debug('Cleaned up stale connection', { streamId: stream.id, peerId: peerId.toString() });
276
+ }
277
+ } catch (error) {
278
+ this.logger.error(
279
+ `Error cleaning up stale connection to peer ${stream.metadata.peerId?.toString() ?? 'unknown'} stream ${
280
+ stream.id
281
+ }`,
282
+ { error },
283
+ );
284
+ }
285
+ }
286
+ }
287
+ }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Constants for P2P message deserialization bounds checking.
3
+ * These constants define maximum allowed sizes during deserialization
4
+ * to prevent DoS attacks via maliciously crafted messages.
5
+ */
6
+
7
+ /** Max transactions per block for deserialization validation (~300x default of 32) */
8
+ export { MAX_TXS_PER_BLOCK } from '@aztec-labs/stdlib/deserialization';
9
+
10
+ /** Max version string length (e.g., "1.0.0-alpha.123") */
11
+ export const MAX_VERSION_STRING_LENGTH = 64;
12
+
13
+ /** Max block hash string length (hex: 0x + 64 chars, with generous headroom) */
14
+ export const MAX_BLOCK_HASH_STRING_LENGTH = 128;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Request Response protocol allows nodes to ask their peers for data
3
+ * that they missed via the traditional gossip protocol.
4
+ */
5
+ export * from './protocols/index.js';
6
+ export * from './interface.js';
@@ -0,0 +1,241 @@
1
+ import { TxArray, TxHashArray } from '@aztec-labs/stdlib/tx';
2
+ import type { PeerId } from '@libp2p/interface';
3
+
4
+ import type { P2PReqRespConfig } from './config.js';
5
+ import type { ConnectionSampler } from './connection-sampler/connection_sampler.js';
6
+ import { AuthRequest, AuthResponse } from './protocols/auth.js';
7
+ import {
8
+ BlockTxsRequest,
9
+ BlockTxsResponse,
10
+ calculateBlockTxsResponseSize,
11
+ } from './protocols/block_txs/block_txs_reqresp.js';
12
+ import { StatusMessage } from './protocols/status.js';
13
+ import { calculateTxResponseSize } from './protocols/tx.js';
14
+ import type { ReqRespStatus } from './status.js';
15
+
16
+ /*
17
+ * Request Response Sub Protocols
18
+ */
19
+ export const PING_PROTOCOL = '/aztec/req/ping/1.0.0';
20
+ export const STATUS_PROTOCOL = '/aztec/req/status/1.0.0';
21
+ export const GOODBYE_PROTOCOL = '/aztec/req/goodbye/1.0.0';
22
+ export const TX_REQ_PROTOCOL = '/aztec/req/tx/1.0.0';
23
+ export const AUTH_PROTOCOL = '/aztec/req/auth/1.0.0';
24
+ export const BLOCK_TXS_REQ_PROTOCOL = '/aztec/req/block_txs/1.0.0';
25
+
26
+ export enum ReqRespSubProtocol {
27
+ PING = PING_PROTOCOL,
28
+ STATUS = STATUS_PROTOCOL,
29
+ GOODBYE = GOODBYE_PROTOCOL,
30
+ TX = TX_REQ_PROTOCOL,
31
+ AUTH = AUTH_PROTOCOL,
32
+ BLOCK_TXS = BLOCK_TXS_REQ_PROTOCOL,
33
+ }
34
+
35
+ /**
36
+ * A handler for a sub protocol
37
+ * The message will arrive as a buffer, and the handler must return a buffer
38
+ */
39
+ export type ReqRespSubProtocolHandler = (peerId: PeerId, msg: Buffer) => Promise<Buffer>;
40
+
41
+ /**
42
+ * A type mapping from supprotocol to it's rate limits
43
+ */
44
+ export type ReqRespSubProtocolRateLimits = Record<ReqRespSubProtocol, ProtocolRateLimitQuota>;
45
+
46
+ /**
47
+ * The response from the ReqResp protocol
48
+ * Consists of a status
49
+ * And, optionally, a data buffer (in case status is SUCCESS)
50
+ */
51
+ export type ReqRespResponse =
52
+ | { status: ReqRespStatus.SUCCESS; data: Buffer }
53
+ | { status: Exclude<ReqRespStatus, ReqRespStatus.SUCCESS> };
54
+
55
+ /**
56
+ * A rate limit quota
57
+ */
58
+ export interface RateLimitQuota {
59
+ /**
60
+ * The time window in ms
61
+ */
62
+ quotaTimeMs: number;
63
+ /**
64
+ * The number of requests allowed within the time window
65
+ */
66
+ quotaCount: number;
67
+ }
68
+
69
+ export interface ProtocolRateLimitQuota {
70
+ /**
71
+ * The rate limit quota for a single peer
72
+ */
73
+ peerLimit: RateLimitQuota;
74
+ /**
75
+ * The rate limit quota for the global peer set
76
+ */
77
+ globalLimit: RateLimitQuota;
78
+ }
79
+
80
+ /**
81
+ * A type mapping from supprotocol to it's handling function
82
+ */
83
+ export type ReqRespSubProtocolHandlers = Record<ReqRespSubProtocol, ReqRespSubProtocolHandler>;
84
+
85
+ /**
86
+ * Protocols that are always allowed without authentication, even when p2pAllowOnlyValidators is enabled.
87
+ * These are needed for the handshake and connection management flow.
88
+ * All other protocols require the remote peer to be authenticated.
89
+ */
90
+ export const UNAUTHENTICATED_ALLOWED_PROTOCOLS: ReadonlySet<ReqRespSubProtocol> = new Set([
91
+ ReqRespSubProtocol.PING,
92
+ ReqRespSubProtocol.STATUS,
93
+ ReqRespSubProtocol.AUTH,
94
+ ReqRespSubProtocol.GOODBYE,
95
+ ]);
96
+
97
+ /**
98
+ * Callback that checks whether a peer should be rejected from req/resp data protocols.
99
+ * Returns true if the peer should be rejected (i.e. p2pAllowOnlyValidators is on and peer is unauthenticated).
100
+ */
101
+ export type ShouldRejectPeer = (peerId: string) => boolean;
102
+
103
+ /*
104
+ * Helper class to sub-protocol validation error*/
105
+ export class ValidationError extends Error {
106
+ constructor(message: string) {
107
+ super(message);
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Sub protocol map determines the request and response types for each
113
+ * Req Resp protocol
114
+ */
115
+ export type SubProtocolMap = {
116
+ [S in ReqRespSubProtocol]: RequestResponsePair<
117
+ InstanceType<(typeof subProtocolMap)[S]['request']>,
118
+ InstanceType<(typeof subProtocolMap)[S]['response']>
119
+ >;
120
+ };
121
+
122
+ /**
123
+ * The Request Response Pair interface defines the methods that each
124
+ * request response pair must implement
125
+ */
126
+ interface RequestResponsePair<Req extends { toBuffer(): Buffer }, Res> {
127
+ /**
128
+ * The request must implement the toBuffer method (generic serialisation)
129
+ */
130
+ request: new (...args: any[]) => Req;
131
+ /**
132
+ * The response must implement the static fromBuffer method (generic serialisation)
133
+ */
134
+ response: {
135
+ new (...args: any[]): Res;
136
+ fromBuffer(buffer: Buffer): Res;
137
+ };
138
+ }
139
+
140
+ /*
141
+ * Small helper function which parses buffer into specific response type
142
+ * It is needed to make TypeScript happy, as it cannot infer the type from the buffer
143
+ *
144
+ * @param proto - The sub protocol to parse the response for
145
+ * @param buffer - The buffer to parse
146
+ *
147
+ * @returns - The parsed response object
148
+ * */
149
+ export function responseFromBuffer<P extends ReqRespSubProtocol>(
150
+ proto: P,
151
+ buffer: Buffer,
152
+ ): InstanceType<(typeof subProtocolMap)[P]['response']> {
153
+ return subProtocolMap[proto].response.fromBuffer(buffer) as InstanceType<(typeof subProtocolMap)[P]['response']>;
154
+ }
155
+
156
+ /**
157
+ * RequestableBuffer is a wrapper around a buffer that allows it to be
158
+ * used in generic request response protocols
159
+ *
160
+ * An instance of the RequestResponsePair defined above
161
+ */
162
+ export class RequestableBuffer {
163
+ constructor(public buffer: Buffer) {}
164
+
165
+ toBuffer() {
166
+ return this.buffer;
167
+ }
168
+
169
+ static fromBuffer(buffer: Buffer) {
170
+ return new RequestableBuffer(buffer);
171
+ }
172
+ }
173
+
174
+ /**
175
+ * A mapping from each protocol to their request and response types
176
+ * This defines the request and response types for each sub protocol, used primarily
177
+ * as a type rather than an object
178
+ */
179
+ export const subProtocolMap = {
180
+ [ReqRespSubProtocol.PING]: {
181
+ request: RequestableBuffer,
182
+ response: RequestableBuffer,
183
+ },
184
+ [ReqRespSubProtocol.STATUS]: {
185
+ request: StatusMessage,
186
+ response: StatusMessage,
187
+ },
188
+ [ReqRespSubProtocol.TX]: {
189
+ request: TxHashArray,
190
+ response: TxArray,
191
+ },
192
+ [ReqRespSubProtocol.GOODBYE]: {
193
+ request: RequestableBuffer,
194
+ response: RequestableBuffer,
195
+ },
196
+ [ReqRespSubProtocol.AUTH]: {
197
+ request: AuthRequest,
198
+ response: AuthResponse,
199
+ },
200
+ [ReqRespSubProtocol.BLOCK_TXS]: {
201
+ request: BlockTxsRequest,
202
+ response: BlockTxsResponse,
203
+ },
204
+ };
205
+
206
+ /**
207
+ * Type for a function that calculates the expected response size in KB for a given request.
208
+ */
209
+ export type ExpectedResponseSizeCalculator = (requestBuffer: Buffer) => number;
210
+
211
+ /**
212
+ * Map of sub-protocols to their expected response size calculators.
213
+ * These are used to validate that responses don't exceed expected sizes based on request parameters.
214
+ */
215
+ export const subProtocolSizeCalculators: Record<ReqRespSubProtocol, ExpectedResponseSizeCalculator> = {
216
+ [ReqRespSubProtocol.TX]: calculateTxResponseSize,
217
+ [ReqRespSubProtocol.BLOCK_TXS]: calculateBlockTxsResponseSize,
218
+ [ReqRespSubProtocol.STATUS]: () => 1,
219
+ [ReqRespSubProtocol.PING]: () => 1,
220
+ [ReqRespSubProtocol.AUTH]: () => 1,
221
+ [ReqRespSubProtocol.GOODBYE]: () => 1, // No response expected, but provide minimal limit
222
+ };
223
+
224
+ export interface ReqRespInterface {
225
+ start(subProtocolHandlers: Partial<ReqRespSubProtocolHandlers>): Promise<void>;
226
+ addSubProtocol(subProtocol: ReqRespSubProtocol, handler: ReqRespSubProtocolHandler): Promise<void>;
227
+ stop(): Promise<void>;
228
+ sendRequestToPeer(
229
+ peerId: PeerId,
230
+ subProtocol: ReqRespSubProtocol,
231
+ payload: Buffer,
232
+ dialTimeout?: number,
233
+ ): Promise<ReqRespResponse>;
234
+
235
+ updateConfig(config: Partial<P2PReqRespConfig>): void;
236
+
237
+ /** Sets the callback used to reject unauthenticated peers on gated req/resp protocols. */
238
+ setShouldRejectPeer(checker: ShouldRejectPeer): void;
239
+
240
+ getConnectionSampler(): Pick<ConnectionSampler, 'getPeerListSortedByConnectionCountAsc'>;
241
+ }
@@ -0,0 +1,68 @@
1
+ // Request response metrics
2
+ import { Attributes, Metrics, createUpDownCounterWithDefault } from '@aztec-labs/telemetry-client';
3
+ import type { TelemetryClient, Tracer, UpDownCounter } from '@aztec-labs/telemetry-client';
4
+
5
+ import { ReqRespSubProtocol } from './interface.js';
6
+
7
+ export class ReqRespMetrics {
8
+ public readonly tracer: Tracer;
9
+
10
+ private readonly sentRequests: UpDownCounter;
11
+ private readonly receivedRequests: UpDownCounter;
12
+
13
+ private readonly failedOutboundRequests: UpDownCounter;
14
+ private readonly failedInboundRequests: UpDownCounter;
15
+
16
+ constructor(
17
+ readonly telemetryClient: TelemetryClient,
18
+ name = 'ReqResp',
19
+ ) {
20
+ this.tracer = telemetryClient.getTracer(name);
21
+
22
+ const meter = telemetryClient.getMeter(name);
23
+ const protocolAttrs = {
24
+ [Attributes.P2P_REQ_RESP_PROTOCOL]: [
25
+ ReqRespSubProtocol.PING,
26
+ ReqRespSubProtocol.STATUS,
27
+ ReqRespSubProtocol.GOODBYE,
28
+ ReqRespSubProtocol.TX,
29
+ ReqRespSubProtocol.AUTH,
30
+ ReqRespSubProtocol.BLOCK_TXS,
31
+ ],
32
+ };
33
+ this.sentRequests = createUpDownCounterWithDefault(meter, Metrics.P2P_REQ_RESP_SENT_REQUESTS, protocolAttrs);
34
+ this.receivedRequests = createUpDownCounterWithDefault(
35
+ meter,
36
+ Metrics.P2P_REQ_RESP_RECEIVED_REQUESTS,
37
+ protocolAttrs,
38
+ );
39
+
40
+ this.failedOutboundRequests = createUpDownCounterWithDefault(
41
+ meter,
42
+ Metrics.P2P_REQ_RESP_FAILED_OUTBOUND_REQUESTS,
43
+ protocolAttrs,
44
+ );
45
+
46
+ this.failedInboundRequests = createUpDownCounterWithDefault(
47
+ meter,
48
+ Metrics.P2P_REQ_RESP_FAILED_INBOUND_REQUESTS,
49
+ protocolAttrs,
50
+ );
51
+ }
52
+
53
+ public recordRequestSent(protocol: ReqRespSubProtocol) {
54
+ this.sentRequests.add(1, { [Attributes.P2P_REQ_RESP_PROTOCOL]: protocol });
55
+ }
56
+
57
+ public recordRequestReceived(protocol: ReqRespSubProtocol) {
58
+ this.receivedRequests.add(1, { [Attributes.P2P_REQ_RESP_PROTOCOL]: protocol });
59
+ }
60
+
61
+ public recordRequestError(protocol: ReqRespSubProtocol) {
62
+ this.failedOutboundRequests.add(1, { [Attributes.P2P_REQ_RESP_PROTOCOL]: protocol });
63
+ }
64
+
65
+ public recordResponseError(protocol: ReqRespSubProtocol) {
66
+ this.failedInboundRequests.add(1, { [Attributes.P2P_REQ_RESP_PROTOCOL]: protocol });
67
+ }
68
+ }
@@ -0,0 +1,83 @@
1
+ import { Buffer32 } from '@aztec-labs/foundation/buffer';
2
+ import { keccak256 } from '@aztec-labs/foundation/crypto/keccak';
3
+ import { Fr } from '@aztec-labs/foundation/curves/bn254';
4
+ import { Signature } from '@aztec-labs/foundation/eth-signature';
5
+ import { BufferReader, serializeToBuffer } from '@aztec-labs/foundation/serialize';
6
+
7
+ import { StatusMessage } from './status.js';
8
+
9
+ export const VALIDATOR_AUTH_DOMAIN_SEPARATOR = 'Aztec Validator Challenge:';
10
+ export const VALIDATOR_AUTH_FULL_CHALLENGE_ENCODED_LENGTH =
11
+ VALIDATOR_AUTH_DOMAIN_SEPARATOR.length + Fr.random().toString().length;
12
+
13
+ /*
14
+ * P2P Auth Message
15
+ * Superset of the StatusMessage, used to establish a handshake between peers and authenticate them.
16
+ */
17
+ export class AuthRequest {
18
+ constructor(
19
+ readonly status: StatusMessage,
20
+ readonly challenge: Fr,
21
+ ) {}
22
+
23
+ /**
24
+ * Deserializes the AuthRequest object from a Buffer.
25
+ * @param buffer - Buffer or BufferReader object to deserialize.
26
+ * @returns An instance of StatusMessage.
27
+ */
28
+ static fromBuffer(buffer: Buffer | BufferReader): AuthRequest {
29
+ const reader = BufferReader.asReader(buffer);
30
+ return new AuthRequest(
31
+ StatusMessage.fromBuffer(reader), // Deserialize StatusMessage
32
+ Fr.fromBuffer(reader), // challenge
33
+ );
34
+ }
35
+
36
+ /**
37
+ * Serializes the AuthRequest object into a Buffer.
38
+ * @returns Buffer representation of the StatusMessage object.
39
+ */
40
+ toBuffer() {
41
+ return serializeToBuffer([this.status, this.challenge]);
42
+ }
43
+
44
+ getPayloadToSign(): Buffer32 {
45
+ const fullChallenge = VALIDATOR_AUTH_DOMAIN_SEPARATOR + this.challenge.toString();
46
+ return Buffer32.fromBuffer(keccak256(Buffer.from(fullChallenge, 'utf-8')));
47
+ }
48
+
49
+ static random(): AuthRequest {
50
+ return new AuthRequest(StatusMessage.random(), Fr.random());
51
+ }
52
+ }
53
+
54
+ export class AuthResponse {
55
+ constructor(
56
+ readonly status: StatusMessage,
57
+ readonly signature: Signature,
58
+ ) {}
59
+ /**
60
+ * Deserializes the AuthResponse object from a Buffer.
61
+ * @param buffer - Buffer or BufferReader object to deserialize.
62
+ * @returns An instance of StatusMessage.
63
+ */
64
+ static fromBuffer(buffer: Buffer | BufferReader): AuthResponse {
65
+ const reader = BufferReader.asReader(buffer);
66
+ return new AuthResponse(
67
+ StatusMessage.fromBuffer(reader), // Deserialize StatusMessage
68
+ Signature.fromBuffer(reader), // response
69
+ );
70
+ }
71
+
72
+ /**
73
+ * Serializes the AuthRequest object into a Buffer.
74
+ * @returns Buffer representation of the StatusMessage object.
75
+ */
76
+ toBuffer() {
77
+ return serializeToBuffer([this.status, this.signature]);
78
+ }
79
+
80
+ static random(): AuthResponse {
81
+ return new AuthResponse(StatusMessage.random(), Signature.random());
82
+ }
83
+ }