@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,107 @@
1
+ import { BufferReader, serializeToBuffer } from '@aztec-labs/foundation/serialize';
2
+
3
+ import { MAX_TXS_PER_BLOCK } from '../../constants.js';
4
+
5
+ /**
6
+ * BitVector helper class for representing and serializing bit vectors
7
+ */
8
+ export class BitVector {
9
+ private buffer: Buffer;
10
+ private length: number;
11
+
12
+ constructor(buffer: Buffer, length: number) {
13
+ this.buffer = buffer;
14
+ this.length = length;
15
+ }
16
+
17
+ /*
18
+ * Creates new BitVector instance
19
+ * @param length - Length of the bit vector
20
+ * @param indices - Array of indices to set to 1 in the bit vector
21
+ *
22
+ * @returns A new BitVector instance with specified length and set indices
23
+ * */
24
+ static init(length: number, indices: number[]): BitVector {
25
+ if (indices.length > length) {
26
+ throw new Error('Indices length exceeds specified length');
27
+ }
28
+
29
+ const buffer = Buffer.alloc(BitVector.byteLength(length));
30
+
31
+ indices.forEach(idx => {
32
+ const invalidIndex = idx < 0 || idx >= length;
33
+ if (invalidIndex) {
34
+ throw new Error(`Index ${idx} is out of bounds for BitVector of length ${length}`);
35
+ }
36
+
37
+ const byteIndex = Math.floor(idx / 8);
38
+ const bitIndex = idx % 8;
39
+ buffer[byteIndex] |= 1 << bitIndex;
40
+ });
41
+
42
+ return new BitVector(buffer, length);
43
+ }
44
+
45
+ getLength(): number {
46
+ return this.length;
47
+ }
48
+
49
+ /*
50
+ * Checks if element at index is set to true
51
+ *
52
+ * @param index - Index of the bit to check
53
+ *
54
+ * @returns True if the bit at index is set, false otherwise
55
+ * */
56
+ isSet(index: number): boolean {
57
+ return index >= 0 && index < this.length && !!(this.buffer[Math.floor(index / 8)] & (1 << index % 8));
58
+ }
59
+
60
+ /**
61
+ * Returns all indices which are set to true.
62
+ * Ordered by index. No duplicates.
63
+ */
64
+ getTrueIndices(): number[] {
65
+ return Array.from({ length: this.length }, (_, i) => i).filter(i => this.isSet(i));
66
+ }
67
+
68
+ /**
69
+ * Returns true if no indices are set to true
70
+ * */
71
+ isEmpty(): boolean {
72
+ return this.getTrueIndices().length === 0;
73
+ }
74
+
75
+ /**
76
+ * Serializes the BitVector object into a Buffer
77
+ *
78
+ * @returns Buffer representation of the BitVector object
79
+ * */
80
+ toBuffer(): Buffer {
81
+ return serializeToBuffer([this.length, this.buffer]);
82
+ }
83
+
84
+ /**
85
+ * Deserializes buffer into new BitVector
86
+ *
87
+ * @returns A new BitVector instance
88
+ * */
89
+ static fromBuffer(buffer: Buffer | BufferReader): BitVector {
90
+ const reader = BufferReader.asReader(buffer);
91
+ const length = reader.readNumber();
92
+
93
+ if (length < 0) {
94
+ throw new Error(`BitVector length ${length} cannot be negative`);
95
+ }
96
+ if (length > MAX_TXS_PER_BLOCK) {
97
+ throw new Error(`BitVector length ${length} exceeds maximum ${MAX_TXS_PER_BLOCK}`);
98
+ }
99
+
100
+ const bitBuffer = reader.readBytes(BitVector.byteLength(length));
101
+ return new BitVector(bitBuffer, length);
102
+ }
103
+
104
+ static byteLength(length: number) {
105
+ return Math.ceil(length / 8);
106
+ }
107
+ }
@@ -0,0 +1,79 @@
1
+ import type { L2BlockSource } from '@aztec-labs/stdlib/block';
2
+ import { TxArray, TxHash } from '@aztec-labs/stdlib/tx';
3
+ import type { PeerId } from '@libp2p/interface';
4
+
5
+ import type { AttestationPoolApi } from '../../../../mem_pools/attestation_pool/attestation_pool.js';
6
+ import type { TxPoolV2 } from '../../../../mem_pools/tx_pool_v2/interfaces.js';
7
+ import type { ReqRespSubProtocolHandler } from '../../interface.js';
8
+ import { ReqRespStatus, ReqRespStatusError } from '../../status.js';
9
+ import { BitVector } from './bitvector.js';
10
+ import { BlockTxsRequest, BlockTxsResponse } from './block_txs_reqresp.js';
11
+
12
+ /**
13
+ * Handler for block txs requests
14
+ * @param attestationPool - the attestation pool to check for block proposals
15
+ * @param archiver - the archiver to look up blocks by archive root
16
+ * @param txPool - the tx pool to fetch transactions from
17
+ * @returns the BlockTxs request handler
18
+ */
19
+ export function reqRespBlockTxsHandler(
20
+ attestationPool: AttestationPoolApi,
21
+ archiver: L2BlockSource,
22
+ txPool: TxPoolV2,
23
+ ): ReqRespSubProtocolHandler {
24
+ /**
25
+ * Handler for block txs requests
26
+ * @param msg - the block txs request message
27
+ * @returns the block txs response message
28
+ * @throws if msg is not a valid block txs request
29
+ */
30
+ return async (_peerId: PeerId, msg: Buffer) => {
31
+ let request: BlockTxsRequest;
32
+ try {
33
+ request = BlockTxsRequest.fromBuffer(msg);
34
+ } catch (err: any) {
35
+ throw new ReqRespStatusError(ReqRespStatus.BADLY_FORMED_REQUEST, { cause: err });
36
+ }
37
+
38
+ // In principle assume we haven't found the block. This is how that is signaled to the requester.
39
+ let availableIndicesBitVector: BitVector = BitVector.init(0, []);
40
+ // We always try to service the explicitly requested tx hashes, even if we don't have the block.
41
+ const requestedTxsHashes: Set<string> = new Set(request.txHashes.map(h => h.toString()));
42
+
43
+ // First try attestation pool, then fall back to archiver.
44
+ let blockTxHashes = (await attestationPool.getBlockProposalByArchive(request.archiveRoot.toString()))?.txHashes;
45
+ if (!blockTxHashes) {
46
+ blockTxHashes = (await archiver.getBlock({ archive: request.archiveRoot }))?.body.txEffects.map(
47
+ effect => effect.txHash,
48
+ );
49
+ }
50
+
51
+ // If we have found the block,
52
+ if (blockTxHashes) {
53
+ // First confirm that we are talking about the same block (up to tx hashes and order).
54
+ // If we are not, then we can't:
55
+ // 1. Use the indices from the request to get the txs from the pool.
56
+ // 2. Respond to the peer with the txs we have using indices.
57
+ const blockTxHashesCommitment = BlockTxsRequest.computeBlockTxHashesCommitment(blockTxHashes);
58
+ if (blockTxHashesCommitment.equals(request.blockTxHashesCommitment)) {
59
+ // In that case, we can also get the available indices from the pool.
60
+ const txsAvailableInPool = await txPool.hasTxs(blockTxHashes);
61
+ // Map txs in the pool to their indices in the block
62
+ const availableIndices = txsAvailableInPool.map((hasTx, idx) => (hasTx ? idx : -1)).filter(idx => idx !== -1);
63
+ availableIndicesBitVector = BitVector.init(blockTxHashes.length, availableIndices);
64
+
65
+ // We add the requested tx hashes (by index) to the list of tx hashes we are sending to the peer.
66
+ const requestedIndices = new Set(request.txIndices.getTrueIndices());
67
+ blockTxHashes.filter((_, idx) => requestedIndices.has(idx)).forEach(h => requestedTxsHashes.add(h.toString()));
68
+ }
69
+ }
70
+
71
+ // Finally, get the txs from the pool and create the response.
72
+ const responseTxs = (
73
+ await txPool.getTxsByHash(Array.from(requestedTxsHashes).map(h => TxHash.fromString(h)))
74
+ ).filter(tx => !!tx);
75
+ const response = new BlockTxsResponse(new TxArray(...responseTxs), availableIndicesBitVector);
76
+
77
+ return response.toBuffer();
78
+ };
79
+ }
@@ -0,0 +1,170 @@
1
+ import { Buffer32 } from '@aztec-labs/foundation/buffer';
2
+ import { Fr } from '@aztec-labs/foundation/curves/bn254';
3
+ import { BufferReader, serializeToBuffer } from '@aztec-labs/foundation/serialize';
4
+ import { MAX_TX_SIZE_KB } from '@aztec-labs/stdlib/p2p';
5
+ import { TxArray, type TxHash, TxHashArray } from '@aztec-labs/stdlib/tx';
6
+ import { createHash } from 'node:crypto';
7
+
8
+ import { BitVector } from './bitvector.js';
9
+
10
+ /** Minimal interface for a block source that provides tx hashes and an archive root. */
11
+ export interface BlockTxsSource {
12
+ txHashes: TxHash[];
13
+ archive: Fr;
14
+ }
15
+
16
+ /**
17
+ * Request message for requesting specific transactions from a block
18
+ */
19
+ export class BlockTxsRequest {
20
+ constructor(
21
+ // Archive root after the proposed block is applied (proposal identifier).
22
+ readonly archiveRoot: Fr,
23
+ // BitVector indicating which txs from the block (proposal) we are requesting
24
+ // 1 means we want the tx, 0 means we don't.
25
+ // This will only return txs in the response if the peer has the block (proposal).
26
+ readonly txIndices: BitVector,
27
+ // If we ask for txs via indices, the responder needs to be sure that we are talking about the same block.
28
+ // Unfortunately, the archive root is not enough, since it's possible for the peer to have seen a different
29
+ // block (proposal) with the same archive root but different txs. We include a commitment to the tx hashes
30
+ // so that the responder can verify this (for its own sake, and not be penalized).
31
+ readonly blockTxHashesCommitment: Buffer32,
32
+ // Explicit hashes of txs we are requesting (optional). The peer will try to serve these txs even if
33
+ // it doesn't have the block. If the requester lists txs from the block here, this serves as a fallback.
34
+ // Note: if a hash here is NOT part of the block (proposal), the peer can decide to return it or not.
35
+ readonly txHashes: TxHashArray,
36
+ ) {}
37
+
38
+ static computeBlockTxHashesCommitment(blockTxHashes: TxHash[]): Buffer32 {
39
+ return Buffer32.fromBuffer(createHash('sha256').update(serializeToBuffer(blockTxHashes)).digest());
40
+ }
41
+
42
+ /**
43
+ * Creates new BlockTxsRequest given a block txs source and missing tx hashes.
44
+ *
45
+ * @param blockTxsSource - The block or proposal for which we are making the request
46
+ * @param missingTxHashes - Tx hashes from the source we are missing
47
+ * @param includeFullTxHashes - Whether to include full list of missing tx hashes in the request or just Bitvector indices
48
+ *
49
+ * @returns undefined if there were no missingTxHashes matching the source hashes, otherwise
50
+ * returns new BlockTxsRequest
51
+ */
52
+ static fromTxsSourceAndMissingTxs(
53
+ blockTxsSource: BlockTxsSource,
54
+ missingTxHashes: TxHash[],
55
+ includeFullTxHashes = false,
56
+ ): BlockTxsRequest | undefined {
57
+ if (missingTxHashes.length === 0) {
58
+ return undefined; // No missing txs to request
59
+ }
60
+
61
+ const missingHashesSet = new Set(missingTxHashes.map(t => t.toString()));
62
+
63
+ // We cannot request txs that are not part of the block
64
+ if (!missingHashesSet.isSubsetOf(new Set(blockTxsSource.txHashes.map(t => t.toString())))) {
65
+ return undefined;
66
+ }
67
+
68
+ const missingIndices = blockTxsSource.txHashes
69
+ .map((hash, idx) => (missingHashesSet.has(hash.toString()) ? idx : -1))
70
+ .filter(i => i != -1);
71
+
72
+ const requestBitVector = BitVector.init(blockTxsSource.txHashes.length, missingIndices);
73
+ const hashes = includeFullTxHashes ? new TxHashArray(...missingTxHashes) : new TxHashArray();
74
+ const commitment = BlockTxsRequest.computeBlockTxHashesCommitment(blockTxsSource.txHashes);
75
+
76
+ return new BlockTxsRequest(blockTxsSource.archive, requestBitVector, commitment, hashes);
77
+ }
78
+
79
+ /**
80
+ * Deserializes the BlockTxRequest object from a Buffer
81
+ * @param buffer - Buffer or BufferReader object to deserialize
82
+ * @returns An instance of BlockTxRequest
83
+ */
84
+ static fromBuffer(buffer: Buffer | BufferReader): BlockTxsRequest {
85
+ const reader = BufferReader.asReader(buffer);
86
+ const archiveRoot = Fr.fromBuffer(reader);
87
+ const txIndices = BitVector.fromBuffer(reader);
88
+ const commitment = Buffer32.fromBuffer(reader);
89
+ const txHashes = TxHashArray.fromBuffer(reader);
90
+
91
+ return new BlockTxsRequest(archiveRoot, txIndices, commitment, txHashes);
92
+ }
93
+
94
+ /**
95
+ * Serializes the BlockTxRequest object into a Buffer
96
+ * @returns Buffer representation of the BlockTxRequest object
97
+ */
98
+ toBuffer(): Buffer {
99
+ return serializeToBuffer([
100
+ this.archiveRoot,
101
+ this.txIndices.toBuffer(),
102
+ this.blockTxHashesCommitment.toBuffer(),
103
+ this.txHashes.toBuffer(),
104
+ ]);
105
+ }
106
+ }
107
+
108
+ /**
109
+ * Response message containing requested transactions from a block
110
+ */
111
+ export class BlockTxsResponse {
112
+ constructor(
113
+ // List of transactions we requested and peer has.
114
+ readonly txs: TxArray,
115
+ // BitVector indicating which txs from the proposal are available at the peer
116
+ // 1 means the tx is available, 0 means it is not.
117
+ // The vector should be empty to signal that the peer doesn't have the block.
118
+ // Otherwise, it should be a subset of the indices of the block tx hashes.
119
+ readonly txIndices: BitVector,
120
+ ) {}
121
+
122
+ /**
123
+ * Whether the response indicates that the peer has the block.
124
+ * @returns True if the peer has the block, false otherwise.
125
+ */
126
+ peerHasBlock(): boolean {
127
+ return this.txIndices.getLength() > 0;
128
+ }
129
+
130
+ /**
131
+ * Deserializes the BlockTxResponse object from a Buffer
132
+ * @param buffer - Buffer or BufferReader object to deserialize
133
+ * @returns An instance of BlockTxResponse
134
+ */
135
+ static fromBuffer(buffer: Buffer | BufferReader): BlockTxsResponse {
136
+ const reader = BufferReader.asReader(buffer);
137
+ const txs = TxArray.fromBuffer(reader);
138
+ const txIndices = BitVector.fromBuffer(reader);
139
+
140
+ return new BlockTxsResponse(txs, txIndices);
141
+ }
142
+
143
+ /**
144
+ * Serializes the BlockTxResponse object into a Buffer
145
+ * @returns Buffer representation of the BlockTxResponse object
146
+ */
147
+ toBuffer(): Buffer {
148
+ return serializeToBuffer([this.txs.toBuffer(), this.txIndices.toBuffer()]);
149
+ }
150
+
151
+ static empty(): BlockTxsResponse {
152
+ return new BlockTxsResponse(new TxArray(), BitVector.init(0, []));
153
+ }
154
+ }
155
+
156
+ /**
157
+ * Calculate the expected response size for a BLOCK_TXS request.
158
+ * @param requestBuffer - The serialized request buffer containing BlockTxsRequest
159
+ * @returns Expected response size in KB
160
+ */
161
+ export function calculateBlockTxsResponseSize(requestBuffer: Buffer): number {
162
+ try {
163
+ const request = BlockTxsRequest.fromBuffer(requestBuffer);
164
+ const requestedTxCount = request.txIndices.getTrueIndices().length;
165
+ return requestedTxCount * MAX_TX_SIZE_KB + 1; // +1 KB overhead for serialization
166
+ } catch {
167
+ // If we can't parse the request, fall back to allowing a single transaction response
168
+ return MAX_TX_SIZE_KB + 1;
169
+ }
170
+ }
@@ -0,0 +1,3 @@
1
+ export * from './block_txs_handler.js';
2
+ export * from './bitvector.js';
3
+ export * from './block_txs_reqresp.js';
@@ -0,0 +1,102 @@
1
+ import { createLogger } from '@aztec-labs/foundation/log';
2
+ import type { PeerId } from '@libp2p/interface';
3
+
4
+ import type { PeerManagerInterface } from '../../peer-manager/interface.js';
5
+ import { ReqRespSubProtocol, type ReqRespSubProtocolHandler } from '../interface.js';
6
+ import type { ReqResp } from '../reqresp.js';
7
+
8
+ /**
9
+ * Enum defining the possible reasons for a goodbye message.
10
+ */
11
+ export enum GoodByeReason {
12
+ /** The peer has shutdown, will be received whenever a peer's node is routinely stopped */
13
+ SHUTDOWN = 0x1,
14
+ /** The max peer count has been reached, will be received whenever a low scoring peer is disconnected to satisfy the max peer count */
15
+ MAX_PEERS = 0x2,
16
+ /** The peer has a low score, will be received whenever a peer's score is low */
17
+ LOW_SCORE = 0x3,
18
+ /** The peer has been banned, will be received whenever a peer is banned */
19
+ BANNED = 0x4,
20
+ /** Wrong network / fork */
21
+ WRONG_NETWORK = 0x5,
22
+ /** Unknown reason */
23
+ UNKNOWN = 0x6,
24
+ }
25
+
26
+ export function encodeGoodbyeReason(reason: GoodByeReason): Buffer {
27
+ return Buffer.from([reason]);
28
+ }
29
+
30
+ export function decodeGoodbyeReason(buffer: Buffer): GoodByeReason {
31
+ try {
32
+ if (buffer.length !== 1) {
33
+ throw new Error('Invalid goodbye reason buffer length');
34
+ }
35
+ return buffer[0] as GoodByeReason;
36
+ } catch {
37
+ return GoodByeReason.UNKNOWN;
38
+ }
39
+ }
40
+
41
+ /**
42
+ * Pretty prints the goodbye reason.
43
+ * @param reason - The goodbye reason.
44
+ * @returns The pretty printed goodbye reason.
45
+ */
46
+ export function prettyGoodbyeReason(reason: GoodByeReason): string {
47
+ switch (reason) {
48
+ case GoodByeReason.SHUTDOWN:
49
+ return 'shutdown';
50
+ case GoodByeReason.MAX_PEERS:
51
+ return 'max_peers';
52
+ case GoodByeReason.LOW_SCORE:
53
+ return 'low_score';
54
+ case GoodByeReason.BANNED:
55
+ return 'banned';
56
+ // TODO(#11328): implement
57
+ case GoodByeReason.WRONG_NETWORK:
58
+ return 'wrong_network';
59
+ case GoodByeReason.UNKNOWN:
60
+ return 'unknown';
61
+ }
62
+ }
63
+
64
+ /**
65
+ * Handles a goodbye message request
66
+ */
67
+ export class GoodbyeProtocolHandler {
68
+ private logger = createLogger('p2p:goodbye-protocol');
69
+
70
+ constructor(private reqresp: ReqResp) {}
71
+
72
+ public async sendGoodbye(peerId: PeerId, reason: GoodByeReason): Promise<void> {
73
+ try {
74
+ await this.reqresp.sendRequestToPeer(peerId, ReqRespSubProtocol.GOODBYE, Buffer.from([reason]));
75
+ this.logger.debug(`Sent goodbye to peer ${peerId.toString()} with reason ${reason}`);
76
+ } catch (error) {
77
+ this.logger.debug(`Failed to send goodbye to peer ${peerId.toString()}: ${error}`);
78
+ }
79
+ }
80
+ }
81
+
82
+ /**
83
+ * Handles the goodbye request. In request response, the goodbye request is handled by the peer manager.
84
+ *
85
+ * @dev Implemented as returning a function as the function is bound in the libp2p service, however
86
+ * its implementation is here to keep functionality together.
87
+ *
88
+ * @param peerManager - The peer manager.
89
+ * @returns A resolved promise with the goodbye response.
90
+ */
91
+ export function reqGoodbyeHandler(peerManager: PeerManagerInterface): ReqRespSubProtocolHandler {
92
+ return (peerId: PeerId, msg: Buffer) => {
93
+ const reason = decodeGoodbyeReason(msg);
94
+
95
+ peerManager.goodbyeReceived(peerId, reason);
96
+
97
+ // NOTE: In the current implementation this won't be sent to peer,
98
+ // as the connection to peer has been already closed by peerManager.goodbyeReceived
99
+ // We have this just to satisfy interface
100
+ return Promise.resolve(Buffer.alloc(0));
101
+ };
102
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Request Response protocol handlers
3
+ */
4
+ export * from './ping.js';
5
+ export * from './status.js';
6
+ export * from './tx.js';
7
+ export * from './goodbye.js';
8
+ export * from './auth.js';
9
+ export * from './block_txs/index.js';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Handles the ping request.
3
+ * @param _msg - The ping request message.
4
+ * @returns A resolved promise with the pong response.
5
+ */
6
+ export function pingHandler(_msg: any): Promise<Buffer> {
7
+ return Promise.resolve(Buffer.from('pong'));
8
+ }
@@ -0,0 +1,123 @@
1
+ import { BlockNumber } from '@aztec-labs/foundation/branded-types';
2
+ import { Buffer32 } from '@aztec-labs/foundation/buffer';
3
+ import type { Logger } from '@aztec-labs/foundation/log';
4
+ import { BufferReader, serializeToBuffer } from '@aztec-labs/foundation/serialize';
5
+ import { bufferToHex } from '@aztec-labs/foundation/string';
6
+ import type { WorldStateSyncStatus, WorldStateSynchronizer } from '@aztec-labs/stdlib/interfaces/server';
7
+ import type { PeerId } from '@libp2p/interface';
8
+
9
+ import { MAX_BLOCK_HASH_STRING_LENGTH, MAX_VERSION_STRING_LENGTH } from '../constants.js';
10
+
11
+ /*
12
+ * P2P Status Message
13
+ * It is used to establish Status handshake between to peers
14
+ * By validating Status handshake we ensure peers are on the same Blockchain fork
15
+ * And get peer sync status
16
+ */
17
+ export class StatusMessage {
18
+ constructor(
19
+ readonly compressedComponentsVersion: string,
20
+ readonly latestBlockNumber: BlockNumber,
21
+ readonly latestBlockHash: string,
22
+ readonly finalizedBlockNumber: BlockNumber,
23
+ ) {
24
+ //TODO: add finalizedBlockHash
25
+ //readonly finalizedBlockHash: string,
26
+ }
27
+
28
+ /**
29
+ * Deserializes the StatusMessage object from a Buffer.
30
+ * @param buffer - Buffer or BufferReader object to deserialize.
31
+ * @returns An instance of StatusMessage.
32
+ */
33
+ static fromBuffer(buffer: Buffer | BufferReader): StatusMessage {
34
+ const reader = BufferReader.asReader(buffer);
35
+ return new StatusMessage(
36
+ reader.readString(MAX_VERSION_STRING_LENGTH), // compressedComponentsVersion
37
+ BlockNumber(reader.readNumber()), // latestBlockNumber
38
+ reader.readString(MAX_BLOCK_HASH_STRING_LENGTH), // latestBlockHash
39
+ BlockNumber(reader.readNumber()), // finalizedBlockNumber
40
+ //TODO: add finalizedBlockHash
41
+ //reader.readString(MAX_BLOCK_HASH_STRING_LENGTH), // finalizedBlockHash
42
+ );
43
+ }
44
+
45
+ /**
46
+ * Serializes the StatusMessage object into a Buffer.
47
+ * @returns Buffer representation of the StatusMessage object.
48
+ */
49
+ toBuffer() {
50
+ return serializeToBuffer([
51
+ this.compressedComponentsVersion,
52
+ this.latestBlockNumber,
53
+ this.latestBlockHash,
54
+ this.finalizedBlockNumber,
55
+ //TODO: add finalizedBlockHash
56
+ // this.finalizedBlockHash,
57
+ ]);
58
+ }
59
+
60
+ /**
61
+ * Builds Status message
62
+ * @param version - Compressed Components Version
63
+ * @param worldStateSyncStatus - Info about the current sync status
64
+ * @returns StatusMessage instance
65
+ */
66
+ static fromWorldStateSyncStatus(version: string, syncStatus: WorldStateSyncStatus): StatusMessage {
67
+ return new StatusMessage(
68
+ version,
69
+ BlockNumber(syncStatus.latestBlockNumber),
70
+ syncStatus.latestBlockHash,
71
+ BlockNumber(syncStatus.finalizedBlockNumber),
72
+ //TODO: add finalizedBlockHash
73
+ );
74
+ }
75
+
76
+ static random(): StatusMessage {
77
+ return new StatusMessage(
78
+ '1.0.0',
79
+ BlockNumber(Math.floor(Math.random() * 100)),
80
+ Buffer32.random().toString(),
81
+ BlockNumber(Math.floor(Math.random() * 100)),
82
+ //TODO: add finalizedBlockHash
83
+ );
84
+ }
85
+
86
+ validate(peerStatus: StatusMessage): boolean {
87
+ // TODO: Validate other fields as well
88
+ return this.compressedComponentsVersion === peerStatus.compressedComponentsVersion;
89
+ }
90
+
91
+ equals(other: StatusMessage): boolean {
92
+ return (
93
+ this.compressedComponentsVersion === other.compressedComponentsVersion &&
94
+ this.latestBlockNumber === other.latestBlockNumber &&
95
+ this.latestBlockHash === other.latestBlockHash &&
96
+ this.finalizedBlockNumber === other.finalizedBlockNumber
97
+ );
98
+ }
99
+ }
100
+
101
+ /**
102
+ * Handles the status request. By immediately responding with the current node status.
103
+ * @param compressedComponentsVersion - Compressed Components Version
104
+ * @param worldStateSynchronizer - World State Synchronizer to fetch the sync status from.
105
+ * Note the WorldStateSynchronizer must be injected to fetch the fresh sync status, we cannot pass in pre-built StatusMessage.
106
+ * @returns Status message handler
107
+ */
108
+ export function reqRespStatusHandler(
109
+ compressedComponentsVersion: string,
110
+ worldStateSynchronizer: WorldStateSynchronizer,
111
+ logger?: Logger,
112
+ ) {
113
+ return async (peerId: PeerId, _msg: Buffer) => {
114
+ logger?.trace(`Received status handshake request from ${peerId}`);
115
+ const status = StatusMessage.fromWorldStateSyncStatus(
116
+ compressedComponentsVersion,
117
+ (await worldStateSynchronizer.status()).syncSummary,
118
+ );
119
+ const response = status.toBuffer();
120
+ logger?.trace(`Responding status handshake from ${peerId}`, { data: bufferToHex(response) });
121
+ return response;
122
+ };
123
+ }
@@ -0,0 +1,76 @@
1
+ import { chunk } from '@aztec-labs/foundation/collection';
2
+ import { MAX_TX_SIZE_KB } from '@aztec-labs/stdlib/p2p';
3
+ import { TxArray, TxHash, TxHashArray } from '@aztec-labs/stdlib/tx';
4
+ import type { PeerId } from '@libp2p/interface';
5
+
6
+ import type { MemPools } from '../../../mem_pools/interface.js';
7
+ import type { ReqRespSubProtocolHandler } from '../interface.js';
8
+ import { ReqRespStatus, ReqRespStatusError } from '../status.js';
9
+
10
+ /**
11
+ * We want to keep the logic of the req resp handler in this file, but we do not have a reference to the mempools here
12
+ * so we need to pass it in as a parameter.
13
+ *
14
+ * Handler for tx requests
15
+ * @param mempools - the mempools
16
+ * @returns the Tx request handler
17
+ */
18
+ export function reqRespTxHandler(mempools: MemPools): ReqRespSubProtocolHandler {
19
+ /**
20
+ * Handler for tx requests
21
+ * @param msg - the tx request message
22
+ * @returns the tx response message
23
+ * @throws if msg is not a valid tx hash
24
+ */
25
+ return async (_peerId: PeerId, msg: Buffer) => {
26
+ let txHashes: TxHashArray;
27
+ try {
28
+ txHashes = TxHashArray.fromBuffer(msg);
29
+ } catch (err: any) {
30
+ throw new ReqRespStatusError(ReqRespStatus.BADLY_FORMED_REQUEST, { cause: err });
31
+ }
32
+
33
+ try {
34
+ const txs = new TxArray(
35
+ ...(await Promise.all(txHashes.map(txHash => mempools.txPool.getTxByHash(txHash)))).filter(t => !!t),
36
+ );
37
+ return txs.toBuffer();
38
+ } catch (err: any) {
39
+ throw new ReqRespStatusError(ReqRespStatus.INTERNAL_ERROR, { cause: err });
40
+ }
41
+ };
42
+ }
43
+
44
+ /**
45
+ * Helper function to chunk an array of transaction hashes into chunks of a specified size.
46
+ * This is mainly used in ReqResp in order not to request too many transactions at once from the single peer.
47
+ *
48
+ * @param hashes - The array of transaction hashes to chunk.
49
+ * @param chunkSize - The size of each chunk. Default is 8. Reasoning:
50
+ * Per: https://github.com/AztecProtocol/aztec-packages/issues/15149#issuecomment-2999054485
51
+ * we define Q as max number of transactions per batch, the comment explains why we use 8.
52
+ */
53
+ export function chunkTxHashesRequest(hashes: TxHash[], chunkSize = 8): Array<TxHashArray> {
54
+ return chunk(hashes, chunkSize).map(chunk => new TxHashArray(...chunk));
55
+ }
56
+
57
+ /**
58
+ * Calculate the expected response size for a TX request.
59
+ * @param requestBuffer - The serialized request buffer containing TxHashArray
60
+ * @returns Expected response size in KB
61
+ */
62
+ export function calculateTxResponseSize(requestBuffer: Buffer): number {
63
+ try {
64
+ const txHashes = TxHashArray.fromBuffer(requestBuffer);
65
+ // TxHashArray.fromBuffer returns empty array on parse failure, so check for that
66
+ if (txHashes.length === 0 && requestBuffer.length > 0) {
67
+ // If we got an empty array but had a non-empty buffer, parsing likely failed
68
+ // Fall back to allowing a single transaction response
69
+ return MAX_TX_SIZE_KB + 1;
70
+ }
71
+ return Math.max(txHashes.length, 1) * MAX_TX_SIZE_KB + 1; // +1 KB overhead, at least 1 tx
72
+ } catch {
73
+ // If we can't parse the request, fall back to allowing a single transaction response
74
+ return MAX_TX_SIZE_KB + 1;
75
+ }
76
+ }
@@ -0,0 +1 @@
1
+ export { RequestResponseRateLimiter } from './rate_limiter.js';