@aztec/p2p 0.0.1-commit.2ed92850 → 0.0.1-commit.2f68f620

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 (569) hide show
  1. package/README.md +129 -3
  2. package/dest/bootstrap/bootstrap.d.ts +4 -3
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +13 -5
  5. package/dest/client/factory.d.ts +13 -12
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +65 -20
  8. package/dest/client/interface.d.ts +58 -36
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +52 -58
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +235 -235
  13. package/dest/config.d.ts +163 -84
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +155 -42
  16. package/dest/errors/p2p-service.error.d.ts +9 -0
  17. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  18. package/dest/errors/p2p-service.error.js +10 -0
  19. package/dest/errors/reqresp.error.d.ts +1 -20
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +0 -21
  22. package/dest/errors/tx-pool.error.d.ts +8 -0
  23. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  24. package/dest/errors/tx-pool.error.js +9 -0
  25. package/dest/index.d.ts +2 -2
  26. package/dest/index.d.ts.map +1 -1
  27. package/dest/index.js +1 -1
  28. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +162 -106
  29. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool.js +511 -3
  31. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  32. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +507 -125
  34. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  35. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  36. package/dest/mem_pools/attestation_pool/index.js +1 -2
  37. package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
  38. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  39. package/dest/mem_pools/attestation_pool/mocks.js +7 -5
  40. package/dest/mem_pools/index.d.ts +3 -3
  41. package/dest/mem_pools/index.d.ts.map +1 -1
  42. package/dest/mem_pools/index.js +1 -1
  43. package/dest/mem_pools/instrumentation.d.ts +4 -2
  44. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  45. package/dest/mem_pools/instrumentation.js +35 -17
  46. package/dest/mem_pools/interface.d.ts +5 -5
  47. package/dest/mem_pools/interface.d.ts.map +1 -1
  48. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  49. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  50. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  51. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +39 -0
  52. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  53. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +97 -0
  54. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  55. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  56. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  57. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  58. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  59. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  60. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  61. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  62. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
  63. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  64. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  65. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
  66. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +11 -0
  67. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  68. package/dest/mem_pools/tx_pool_v2/eviction/index.js +12 -0
  69. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  70. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  71. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  72. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  73. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  74. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  75. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  76. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  77. package/dest/mem_pools/{tx_pool → tx_pool_v2}/eviction/invalid_txs_after_mining_rule.js +16 -35
  78. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  82. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  83. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  84. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  85. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  86. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  87. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  88. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  89. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  90. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  91. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  92. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  93. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  94. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  95. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  96. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +218 -0
  97. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  98. package/dest/mem_pools/tx_pool_v2/interfaces.js +10 -0
  99. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +137 -0
  100. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  101. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +223 -0
  102. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  103. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  104. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  105. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
  106. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  107. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +337 -0
  108. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +62 -0
  109. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  110. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +167 -0
  111. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +78 -0
  112. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  113. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +914 -0
  114. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
  115. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  116. package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
  117. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +8 -4
  118. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  119. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +11 -7
  120. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  121. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  122. package/dest/msg_validators/clock_tolerance.js +56 -3
  123. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +10 -4
  124. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  125. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  126. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +10 -4
  127. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  128. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  129. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +21 -8
  130. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  131. package/dest/msg_validators/proposal_validator/proposal_validator.js +93 -47
  132. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  133. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  134. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +11 -18
  135. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  136. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  137. package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
  138. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  139. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  140. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  141. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  142. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  143. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
  144. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  145. package/dest/msg_validators/tx_validator/block_header_validator.js +5 -4
  146. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  147. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  148. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  149. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  150. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  151. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  152. package/dest/msg_validators/tx_validator/data_validator.d.ts +4 -1
  153. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  154. package/dest/msg_validators/tx_validator/data_validator.js +40 -3
  155. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -4
  156. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  157. package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
  158. package/dest/msg_validators/tx_validator/factory.d.ts +138 -5
  159. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  160. package/dest/msg_validators/tx_validator/factory.js +259 -58
  161. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  162. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  163. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  164. package/dest/msg_validators/tx_validator/gas_validator.d.ts +100 -3
  165. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  166. package/dest/msg_validators/tx_validator/gas_validator.js +138 -53
  167. package/dest/msg_validators/tx_validator/index.d.ts +5 -1
  168. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  169. package/dest/msg_validators/tx_validator/index.js +4 -0
  170. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  171. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  172. package/dest/msg_validators/tx_validator/metadata_validator.js +6 -6
  173. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  174. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  175. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  176. package/dest/msg_validators/tx_validator/phases_validator.d.ts +24 -3
  177. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  178. package/dest/msg_validators/tx_validator/phases_validator.js +75 -27
  179. package/dest/msg_validators/tx_validator/size_validator.d.ts +3 -1
  180. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -1
  181. package/dest/msg_validators/tx_validator/size_validator.js +4 -1
  182. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +22 -5
  183. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  184. package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
  185. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  186. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  187. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  188. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +4 -2
  189. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  190. package/dest/msg_validators/tx_validator/tx_proof_validator.js +4 -2
  191. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  192. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  193. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  194. package/dest/services/data_store.d.ts +1 -1
  195. package/dest/services/data_store.d.ts.map +1 -1
  196. package/dest/services/data_store.js +14 -10
  197. package/dest/services/discv5/discV5_service.d.ts +2 -1
  198. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  199. package/dest/services/discv5/discV5_service.js +36 -9
  200. package/dest/services/dummy_service.d.ts +33 -17
  201. package/dest/services/dummy_service.d.ts.map +1 -1
  202. package/dest/services/dummy_service.js +56 -15
  203. package/dest/services/encoding.d.ts +7 -3
  204. package/dest/services/encoding.d.ts.map +1 -1
  205. package/dest/services/encoding.js +18 -11
  206. package/dest/services/gossipsub/index.d.ts +3 -0
  207. package/dest/services/gossipsub/index.d.ts.map +1 -0
  208. package/dest/services/gossipsub/index.js +2 -0
  209. package/dest/services/gossipsub/scoring.d.ts +21 -3
  210. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  211. package/dest/services/gossipsub/scoring.js +24 -7
  212. package/dest/services/gossipsub/topic_score_params.d.ts +184 -0
  213. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  214. package/dest/services/gossipsub/topic_score_params.js +363 -0
  215. package/dest/services/index.d.ts +2 -1
  216. package/dest/services/index.d.ts.map +1 -1
  217. package/dest/services/index.js +1 -0
  218. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  219. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  220. package/dest/services/libp2p/instrumentation.js +28 -3
  221. package/dest/services/libp2p/libp2p_service.d.ts +107 -59
  222. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  223. package/dest/services/libp2p/libp2p_service.js +701 -569
  224. package/dest/services/peer-manager/metrics.d.ts +4 -2
  225. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  226. package/dest/services/peer-manager/metrics.js +26 -5
  227. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  228. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  229. package/dest/services/peer-manager/peer_manager.js +40 -11
  230. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  231. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  232. package/dest/services/peer-manager/peer_scoring.js +65 -14
  233. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +44 -0
  234. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  235. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +534 -0
  236. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  237. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  238. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  239. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  240. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  241. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  242. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +35 -0
  243. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  244. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +136 -0
  245. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +62 -0
  246. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  247. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +176 -0
  248. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +11 -0
  249. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  250. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +7 -0
  251. package/dest/services/reqresp/config.d.ts +3 -3
  252. package/dest/services/reqresp/config.d.ts.map +1 -1
  253. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  254. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  255. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  256. package/dest/services/reqresp/interface.d.ts +27 -18
  257. package/dest/services/reqresp/interface.d.ts.map +1 -1
  258. package/dest/services/reqresp/interface.js +23 -19
  259. package/dest/services/reqresp/metrics.d.ts +6 -5
  260. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  261. package/dest/services/reqresp/metrics.js +16 -5
  262. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +8 -3
  263. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  264. package/dest/services/reqresp/protocols/block_txs/bitvector.js +8 -2
  265. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  266. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  267. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +35 -14
  268. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +36 -8
  269. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  270. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +84 -20
  271. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  272. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  273. package/dest/services/reqresp/protocols/index.js +0 -1
  274. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  275. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  276. package/dest/services/reqresp/protocols/tx.js +21 -3
  277. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  278. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  279. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  280. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  281. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  282. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  283. package/dest/services/reqresp/reqresp.d.ts +12 -29
  284. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  285. package/dest/services/reqresp/reqresp.js +58 -187
  286. package/dest/services/service.d.ts +49 -13
  287. package/dest/services/service.d.ts.map +1 -1
  288. package/dest/services/tx_collection/config.d.ts +11 -11
  289. package/dest/services/tx_collection/config.d.ts.map +1 -1
  290. package/dest/services/tx_collection/config.js +27 -26
  291. package/dest/services/tx_collection/file_store_tx_collection.d.ts +37 -0
  292. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  293. package/dest/services/tx_collection/file_store_tx_collection.js +127 -0
  294. package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
  295. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  296. package/dest/services/tx_collection/file_store_tx_source.js +100 -0
  297. package/dest/services/tx_collection/index.d.ts +3 -2
  298. package/dest/services/tx_collection/index.d.ts.map +1 -1
  299. package/dest/services/tx_collection/index.js +1 -0
  300. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  301. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  302. package/dest/services/tx_collection/instrumentation.js +8 -2
  303. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  304. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  305. package/dest/services/tx_collection/request_tracker.js +84 -0
  306. package/dest/services/tx_collection/tx_collection.d.ts +47 -53
  307. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  308. package/dest/services/tx_collection/tx_collection.js +298 -70
  309. package/dest/services/tx_collection/tx_collection_sink.d.ts +19 -9
  310. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  311. package/dest/services/tx_collection/tx_collection_sink.js +28 -31
  312. package/dest/services/tx_collection/tx_source.d.ts +13 -7
  313. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  314. package/dest/services/tx_collection/tx_source.js +26 -7
  315. package/dest/services/tx_file_store/config.d.ts +16 -0
  316. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  317. package/dest/services/tx_file_store/config.js +22 -0
  318. package/dest/services/tx_file_store/index.d.ts +4 -0
  319. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  320. package/dest/services/tx_file_store/index.js +3 -0
  321. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  322. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  323. package/dest/services/tx_file_store/instrumentation.js +29 -0
  324. package/dest/services/tx_file_store/tx_file_store.d.ts +46 -0
  325. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  326. package/dest/services/tx_file_store/tx_file_store.js +142 -0
  327. package/dest/services/tx_provider.d.ts +6 -4
  328. package/dest/services/tx_provider.d.ts.map +1 -1
  329. package/dest/services/tx_provider.js +12 -8
  330. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  331. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  332. package/dest/services/tx_provider_instrumentation.js +5 -5
  333. package/dest/test-helpers/index.d.ts +3 -1
  334. package/dest/test-helpers/index.d.ts.map +1 -1
  335. package/dest/test-helpers/index.js +2 -0
  336. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  337. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  338. package/dest/test-helpers/make-test-p2p-clients.js +5 -3
  339. package/dest/test-helpers/mock-pubsub.d.ts +46 -6
  340. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  341. package/dest/test-helpers/mock-pubsub.js +115 -14
  342. package/dest/test-helpers/reqresp-nodes.d.ts +5 -7
  343. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  344. package/dest/test-helpers/reqresp-nodes.js +19 -20
  345. package/dest/test-helpers/test_tx_provider.d.ts +42 -0
  346. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  347. package/dest/test-helpers/test_tx_provider.js +44 -0
  348. package/dest/test-helpers/testbench-utils.d.ts +161 -0
  349. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  350. package/dest/test-helpers/testbench-utils.js +391 -0
  351. package/dest/testbench/p2p_client_testbench_worker.d.ts +26 -2
  352. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  353. package/dest/testbench/p2p_client_testbench_worker.js +270 -143
  354. package/dest/testbench/worker_client_manager.d.ts +57 -6
  355. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  356. package/dest/testbench/worker_client_manager.js +277 -49
  357. package/dest/util.d.ts +13 -8
  358. package/dest/util.d.ts.map +1 -1
  359. package/dest/util.js +35 -14
  360. package/dest/versioning.d.ts +3 -6
  361. package/dest/versioning.d.ts.map +1 -1
  362. package/dest/versioning.js +3 -24
  363. package/package.json +15 -14
  364. package/src/bootstrap/bootstrap.ts +16 -5
  365. package/src/client/factory.ts +135 -39
  366. package/src/client/interface.ts +70 -44
  367. package/src/client/p2p_client.ts +280 -299
  368. package/src/client/test/p2p_client.batch_tx_requester.bench.README.md +197 -0
  369. package/src/config.ts +272 -46
  370. package/src/errors/p2p-service.error.ts +11 -0
  371. package/src/errors/reqresp.error.ts +0 -25
  372. package/src/errors/tx-pool.error.ts +12 -0
  373. package/src/index.ts +1 -1
  374. package/src/mem_pools/attestation_pool/attestation_pool.ts +575 -94
  375. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +617 -141
  376. package/src/mem_pools/attestation_pool/index.ts +9 -2
  377. package/src/mem_pools/attestation_pool/mocks.ts +14 -8
  378. package/src/mem_pools/index.ts +2 -2
  379. package/src/mem_pools/instrumentation.ts +24 -15
  380. package/src/mem_pools/interface.ts +4 -4
  381. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  382. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  383. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +112 -0
  384. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  385. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  386. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
  387. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  388. package/src/mem_pools/tx_pool_v2/eviction/index.ts +28 -0
  389. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  390. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  391. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  392. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  393. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  394. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  395. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  396. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  397. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  398. package/src/mem_pools/tx_pool_v2/interfaces.ts +250 -0
  399. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +349 -0
  400. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  401. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +430 -0
  402. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +238 -0
  403. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1090 -0
  404. package/src/msg_validators/attestation_validator/README.md +49 -0
  405. package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
  406. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +24 -11
  407. package/src/msg_validators/clock_tolerance.ts +73 -3
  408. package/src/msg_validators/proposal_validator/README.md +123 -0
  409. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +24 -4
  410. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +35 -7
  411. package/src/msg_validators/proposal_validator/proposal_validator.ts +116 -49
  412. package/src/msg_validators/tx_validator/README.md +127 -0
  413. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +8 -17
  414. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  415. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  416. package/src/msg_validators/tx_validator/archive_cache.ts +2 -2
  417. package/src/msg_validators/tx_validator/block_header_validator.ts +22 -11
  418. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  419. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  420. package/src/msg_validators/tx_validator/data_validator.ts +50 -3
  421. package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
  422. package/src/msg_validators/tx_validator/factory.ts +424 -56
  423. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  424. package/src/msg_validators/tx_validator/gas_validator.ts +203 -52
  425. package/src/msg_validators/tx_validator/index.ts +4 -0
  426. package/src/msg_validators/tx_validator/metadata_validator.ts +18 -7
  427. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  428. package/src/msg_validators/tx_validator/phases_validator.ts +87 -30
  429. package/src/msg_validators/tx_validator/size_validator.ts +6 -2
  430. package/src/msg_validators/tx_validator/timestamp_validator.ts +29 -21
  431. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  432. package/src/msg_validators/tx_validator/tx_proof_validator.ts +10 -3
  433. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  434. package/src/services/data_store.ts +14 -19
  435. package/src/services/discv5/discV5_service.ts +39 -6
  436. package/src/services/dummy_service.ts +71 -39
  437. package/src/services/encoding.ts +18 -10
  438. package/src/services/gossipsub/README.md +641 -0
  439. package/src/services/gossipsub/index.ts +2 -0
  440. package/src/services/gossipsub/scoring.ts +29 -5
  441. package/src/services/gossipsub/topic_score_params.ts +519 -0
  442. package/src/services/index.ts +1 -0
  443. package/src/services/libp2p/instrumentation.ts +29 -2
  444. package/src/services/libp2p/libp2p_service.ts +775 -643
  445. package/src/services/peer-manager/metrics.ts +28 -4
  446. package/src/services/peer-manager/peer_manager.ts +46 -11
  447. package/src/services/peer-manager/peer_scoring.ts +56 -6
  448. package/src/services/reqresp/README.md +215 -0
  449. package/src/services/reqresp/batch-tx-requester/README.md +344 -0
  450. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +660 -0
  451. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  452. package/src/services/reqresp/batch-tx-requester/interface.ts +61 -0
  453. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +168 -0
  454. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +249 -0
  455. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +24 -0
  456. package/src/services/reqresp/config.ts +2 -2
  457. package/src/services/reqresp/connection-sampler/connection_sampler.ts +16 -0
  458. package/src/services/reqresp/interface.ts +48 -46
  459. package/src/services/reqresp/metrics.ts +33 -9
  460. package/src/services/reqresp/protocols/block_txs/bitvector.ts +10 -2
  461. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +44 -17
  462. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +108 -16
  463. package/src/services/reqresp/protocols/index.ts +0 -1
  464. package/src/services/reqresp/protocols/tx.ts +23 -3
  465. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  466. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  467. package/src/services/reqresp/reqresp.ts +68 -224
  468. package/src/services/service.ts +66 -29
  469. package/src/services/tx_collection/config.ts +41 -36
  470. package/src/services/tx_collection/file_store_tx_collection.ts +153 -0
  471. package/src/services/tx_collection/file_store_tx_source.ts +129 -0
  472. package/src/services/tx_collection/index.ts +2 -1
  473. package/src/services/tx_collection/instrumentation.ts +11 -2
  474. package/src/services/tx_collection/request_tracker.ts +127 -0
  475. package/src/services/tx_collection/tx_collection.ts +364 -112
  476. package/src/services/tx_collection/tx_collection_sink.ts +32 -36
  477. package/src/services/tx_collection/tx_source.ts +28 -8
  478. package/src/services/tx_file_store/config.ts +37 -0
  479. package/src/services/tx_file_store/index.ts +3 -0
  480. package/src/services/tx_file_store/instrumentation.ts +36 -0
  481. package/src/services/tx_file_store/tx_file_store.ts +163 -0
  482. package/src/services/tx_provider.ts +15 -9
  483. package/src/services/tx_provider_instrumentation.ts +11 -5
  484. package/src/test-helpers/index.ts +2 -0
  485. package/src/test-helpers/make-test-p2p-clients.ts +7 -6
  486. package/src/test-helpers/mock-pubsub.ts +137 -14
  487. package/src/test-helpers/reqresp-nodes.ts +17 -29
  488. package/src/test-helpers/test_tx_provider.ts +69 -0
  489. package/src/test-helpers/testbench-utils.ts +453 -0
  490. package/src/testbench/p2p_client_testbench_worker.ts +370 -134
  491. package/src/testbench/worker_client_manager.ts +355 -51
  492. package/src/util.ts +40 -19
  493. package/src/versioning.ts +3 -33
  494. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  495. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  496. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  497. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  498. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  499. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  500. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  501. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  502. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  503. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  504. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  505. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  506. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  507. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  508. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  509. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  510. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  511. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  512. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  513. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  514. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  515. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  516. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  517. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  518. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  519. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  520. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  521. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  522. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  523. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  524. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  525. package/dest/mem_pools/tx_pool/index.js +0 -2
  526. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  527. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  528. package/dest/mem_pools/tx_pool/priority.js +0 -15
  529. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  530. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  531. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  532. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  533. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  534. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  535. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  536. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  537. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  538. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -45
  539. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  540. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -92
  541. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  542. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  543. package/dest/services/reqresp/protocols/block.js +0 -32
  544. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -51
  545. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  546. package/dest/services/tx_collection/fast_tx_collection.js +0 -300
  547. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -53
  548. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  549. package/dest/services/tx_collection/slow_tx_collection.js +0 -177
  550. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  551. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  552. package/src/mem_pools/tx_pool/README.md +0 -270
  553. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  554. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  555. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  556. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  557. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  558. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  559. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  560. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  561. package/src/mem_pools/tx_pool/index.ts +0 -2
  562. package/src/mem_pools/tx_pool/priority.ts +0 -20
  563. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  564. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  565. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  566. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -100
  567. package/src/services/reqresp/protocols/block.ts +0 -37
  568. package/src/services/tx_collection/fast_tx_collection.ts +0 -341
  569. package/src/services/tx_collection/slow_tx_collection.ts +0 -233
@@ -1,16 +1,25 @@
1
- import { BlockNumber } from '@aztec/foundation/branded-types';
2
- import { createLogger } from '@aztec/foundation/log';
3
- import {
4
- type AnyTx,
5
- TX_ERROR_INVALID_INCLUDE_BY_TIMESTAMP,
6
- type TxValidationResult,
7
- type TxValidator,
8
- getTxHash,
9
- } from '@aztec/stdlib/tx';
1
+ import type { BlockNumber } from '@aztec/foundation/branded-types';
2
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
3
+ import { TX_ERROR_INVALID_EXPIRATION_TIMESTAMP, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
10
4
  import type { UInt64 } from '@aztec/stdlib/types';
11
5
 
12
- export class TimestampTxValidator<T extends AnyTx> implements TxValidator<T> {
13
- #log = createLogger('p2p:tx_validator:timestamp');
6
+ /** Structural interface for timestamp validation. */
7
+ export interface HasTimestampData {
8
+ txHash: { toString(): string };
9
+ data: {
10
+ expirationTimestamp: bigint;
11
+ constants: {
12
+ anchorBlockHeader: {
13
+ globalVariables: {
14
+ blockNumber: BlockNumber;
15
+ };
16
+ };
17
+ };
18
+ };
19
+ }
20
+
21
+ export class TimestampTxValidator<T extends HasTimestampData> implements TxValidator<T> {
22
+ #log: Logger;
14
23
 
15
24
  constructor(
16
25
  private values: {
@@ -20,28 +29,27 @@ export class TimestampTxValidator<T extends AnyTx> implements TxValidator<T> {
20
29
  // Block number in which the tx is considered to be included.
21
30
  blockNumber: BlockNumber;
22
31
  },
23
- ) {}
32
+ bindings?: LoggerBindings,
33
+ ) {
34
+ this.#log = createLogger('p2p:tx_validator:timestamp', bindings);
35
+ }
24
36
 
25
37
  validateTx(tx: T): Promise<TxValidationResult> {
26
- const includeByTimestamp = tx.data.includeByTimestamp;
27
- // If building block 1, we skip the expiration check. For details on why see the `validate_include_by_timestamp`
38
+ const expirationTimestamp = tx.data.expirationTimestamp;
39
+ // If building block 1, we skip the expiration check. For details on why see the `validate_expiration_timestamp`
28
40
  // function in `noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/components/validation_requests.nr`.
29
41
  const buildingBlock1 = this.values.blockNumber === 1;
30
42
 
31
- if (!buildingBlock1 && includeByTimestamp < this.values.timestamp) {
43
+ if (!buildingBlock1 && expirationTimestamp < this.values.timestamp) {
32
44
  if (tx.data.constants.anchorBlockHeader.globalVariables.blockNumber === 0) {
33
45
  this.#log.warn(
34
46
  `A tx built against a genesis block failed to be included in block 1 which is the only block in which txs built against a genesis block are allowed to be included.`,
35
47
  );
36
48
  }
37
49
  this.#log.verbose(
38
- `Rejecting tx ${getTxHash(
39
- tx,
40
- )} for low expiration timestamp. Tx expiration timestamp: ${includeByTimestamp}, timestamp: ${
41
- this.values.timestamp
42
- }.`,
50
+ `Rejecting tx ${tx.txHash} for low expiration timestamp. Tx expiration timestamp: ${expirationTimestamp}, timestamp: ${this.values.timestamp}.`,
43
51
  );
44
- return Promise.resolve({ result: 'invalid', reason: [TX_ERROR_INVALID_INCLUDE_BY_TIMESTAMP] });
52
+ return Promise.resolve({ result: 'invalid', reason: [TX_ERROR_INVALID_EXPIRATION_TIMESTAMP] });
45
53
  } else {
46
54
  return Promise.resolve({ result: 'valid' });
47
55
  }
@@ -1,10 +1,15 @@
1
- import { createLogger } from '@aztec/foundation/log';
1
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
2
  import type { Tx, TxValidationResult, TxValidator } from '@aztec/stdlib/tx';
3
3
 
4
4
  export class TxPermittedValidator implements TxValidator<Tx> {
5
- #log = createLogger('p2p:tx_validator:tx_permitted');
5
+ #log: Logger;
6
6
 
7
- constructor(private permitted: boolean) {}
7
+ constructor(
8
+ private permitted: boolean,
9
+ bindings?: LoggerBindings,
10
+ ) {
11
+ this.#log = createLogger('p2p:tx_validator:tx_permitted', bindings);
12
+ }
8
13
 
9
14
  validateTx(tx: Tx): Promise<TxValidationResult> {
10
15
  if (!this.permitted) {
@@ -1,11 +1,18 @@
1
- import { createLogger } from '@aztec/foundation/log';
1
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
2
  import type { ClientProtocolCircuitVerifier } from '@aztec/stdlib/interfaces/server';
3
3
  import { TX_ERROR_INVALID_PROOF, Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
4
4
 
5
5
  export class TxProofValidator implements TxValidator<Tx> {
6
- #log = createLogger('p2p:tx_validator:private_proof');
6
+ public readonly identifier: symbol = Symbol('TxProofValidator');
7
7
 
8
- constructor(private verifier: ClientProtocolCircuitVerifier) {}
8
+ #log: Logger;
9
+
10
+ constructor(
11
+ private verifier: ClientProtocolCircuitVerifier,
12
+ bindings?: LoggerBindings,
13
+ ) {
14
+ this.#log = createLogger('p2p:tx_validator:proof', bindings);
15
+ }
9
16
 
10
17
  async validateTx(tx: Tx): Promise<TxValidationResult> {
11
18
  const result = await this.verifier.verifyProof(tx);
@@ -0,0 +1,101 @@
1
+ import { LruMap } from '@aztec/foundation/collection';
2
+ import { type Logger, createLogger } from '@aztec/foundation/log';
3
+ import type { Tx, TxValidationResult } from '@aztec/stdlib/tx';
4
+
5
+ import { createHash } from 'node:crypto';
6
+
7
+ /**
8
+ * Minimal interface consumed by {@link CachedTxValidator}.
9
+ * Keeping the dependency on an interface lets callers (and tests) substitute any cache implementation.
10
+ */
11
+ export interface ITxValidationCache {
12
+ /** Returns the cached promise if present, otherwise calls `validate`, caches its promise, and returns it. */
13
+ getOrValidate(
14
+ validatorSymbol: symbol,
15
+ tx: Tx,
16
+ validate: () => Promise<TxValidationResult>,
17
+ ): Promise<TxValidationResult>;
18
+ }
19
+
20
+ /**
21
+ * Caches per-validator tx validation results to avoid redundant work across repeated validation calls.
22
+ *
23
+ * The cache key is composed from the validator symbol and tx hash, ensuring results are
24
+ * scoped to the specific validator that produced them.
25
+ *
26
+ * Promises are stored before they are awaited, so concurrent calls for the same pair share
27
+ * a single in-flight validation rather than launching duplicate work.
28
+ *
29
+ * Entries are evicted in least-recently-used order once the cache reaches `maxSize`.
30
+ */
31
+ export class TxValidationCache implements ITxValidationCache {
32
+ #log: Logger;
33
+
34
+ private readonly entries: LruMap<string, Promise<TxValidationResult>>;
35
+ // Remember hashes for known Tx object references to skip rehashing on subsequent lookups.
36
+ // WeakMap holds keys weakly, so an entry doesn't keep the Tx alive once nothing else references it.
37
+ private readonly txHashesCache: WeakMap<Tx, string> = new WeakMap();
38
+
39
+ constructor(maxSize: number) {
40
+ this.entries = new LruMap(maxSize);
41
+ this.#log = createLogger('p2p:tx_validation_cache');
42
+ }
43
+
44
+ /**
45
+ * Computes the cache key scoping a validation result to a specific validator and tx.
46
+ *
47
+ * @param validatorSymbol - The symbol of the validator.
48
+ * @param tx - The tx to compute the key for.
49
+ * @returns The cache key.
50
+ *
51
+ * Note: the key should NOT use the tx.hash because it can't be trusted at this point.
52
+ */
53
+ public key(validatorSymbol: symbol, tx: Tx): string {
54
+ // Serializing the tx dominates cost (~5 ms). If we have already hashed this object, skip toBuffer + hash.
55
+ let hash = this.txHashesCache.get(tx);
56
+ if (hash === undefined) {
57
+ hash = createHash('sha256').update(tx.toBuffer()).digest('hex');
58
+ this.txHashesCache.set(tx, hash);
59
+ }
60
+ return `${Symbol.keyFor(validatorSymbol) ?? validatorSymbol.toString()}:${hash}`;
61
+ }
62
+
63
+ /** Returns the cached promise for the given key, or undefined if not cached. Refreshes recency. */
64
+ public get(key: string): Promise<TxValidationResult> | undefined {
65
+ return this.entries.get(key);
66
+ }
67
+
68
+ /** Stores a validation promise under the given key, evicting the LRU entry if at capacity. */
69
+ public set(key: string, result: Promise<TxValidationResult>): void {
70
+ this.entries.set(key, result);
71
+ }
72
+
73
+ /** Removes the cached validation promise for the given key. */
74
+ public delete(key: string): void {
75
+ this.entries.delete(key);
76
+ }
77
+
78
+ /**
79
+ * Returns the cached promise if present, otherwise calls `validate`, stores its promise
80
+ * immediately (before awaiting), and returns it.
81
+ */
82
+ public getOrValidate(
83
+ validatorSymbol: symbol,
84
+ tx: Tx,
85
+ validate: () => Promise<TxValidationResult>,
86
+ ): Promise<TxValidationResult> {
87
+ const key = this.key(validatorSymbol, tx);
88
+ const cached = this.get(key);
89
+ if (cached !== undefined) {
90
+ this.#log.debug('Returning cached tx validation result', {
91
+ validator: validatorSymbol.toString(),
92
+ txHash: tx.txHash.toString(),
93
+ key: key,
94
+ });
95
+ return cached;
96
+ }
97
+ const promise = validate();
98
+ this.set(key, promise);
99
+ return promise;
100
+ }
101
+ }
@@ -24,17 +24,16 @@ class KeyNotFoundError extends Error {
24
24
  }
25
25
 
26
26
  export class AztecDatastore implements Datastore {
27
+ #db: AztecAsyncKVStore;
27
28
  #memoryDatastore: Map<string, MemoryItem>;
28
29
  #dbDatastore: AztecAsyncMap<string, Uint8Array>;
29
30
 
30
- #batchOps: BatchOp[] = [];
31
-
32
31
  private maxMemoryItems: number;
33
32
 
34
33
  constructor(db: AztecAsyncKVStore, { maxMemoryItems } = { maxMemoryItems: 50 }) {
34
+ this.#db = db;
35
35
  this.#memoryDatastore = new Map();
36
36
  this.#dbDatastore = db.openMap('p2p_datastore');
37
-
38
37
  this.maxMemoryItems = maxMemoryItems;
39
38
  }
40
39
 
@@ -91,29 +90,25 @@ export class AztecDatastore implements Datastore {
91
90
  }
92
91
 
93
92
  batch(): Batch {
93
+ const ops: BatchOp[] = [];
94
94
  return {
95
95
  put: (key, value) => {
96
- this.#batchOps.push({
97
- type: 'put',
98
- key,
99
- value,
100
- });
96
+ ops.push({ type: 'put', key, value });
101
97
  },
102
98
  delete: key => {
103
- this.#batchOps.push({
104
- type: 'del',
105
- key,
106
- });
99
+ ops.push({ type: 'del', key });
107
100
  },
108
101
  commit: async () => {
109
- for (const op of this.#batchOps) {
110
- if (op.type === 'put' && op.value) {
111
- await this.put(op.key, op.value);
112
- } else if (op.type === 'del') {
113
- await this.delete(op.key);
102
+ await this.#db.transactionAsync(async () => {
103
+ for (const op of ops) {
104
+ if (op.type === 'put' && op.value) {
105
+ await this.put(op.key, op.value);
106
+ } else if (op.type === 'del') {
107
+ await this.delete(op.key);
108
+ }
114
109
  }
115
- }
116
- this.#batchOps = []; // Clear operations after commit
110
+ });
111
+ ops.length = 0;
117
112
  },
118
113
  };
119
114
  }
@@ -38,6 +38,8 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
38
38
 
39
39
  private startTime = 0;
40
40
 
41
+ private currentIp: string | undefined;
42
+
41
43
  private handlers = {
42
44
  onMultiaddrUpdated: this.onMultiaddrUpdated.bind(this),
43
45
  onDiscovered: this.onDiscovered.bind(this),
@@ -53,8 +55,10 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
53
55
  configOverrides: Partial<IDiscv5CreateOptions> = {},
54
56
  ) {
55
57
  super();
58
+
56
59
  const { p2pIp, p2pPort, p2pBroadcastPort, bootstrapNodes, trustedPeers, privatePeers } = config;
57
60
 
61
+ this.currentIp = p2pIp;
58
62
  this.bootstrapNodeEnrs = bootstrapNodes.map(x => ENR.decodeTxt(x));
59
63
  const privatePeerEnrs = new Set(privatePeers);
60
64
  this.trustedPeerEnrs = trustedPeers.filter(x => !privatePeerEnrs.has(x)).map(x => ENR.decodeTxt(x));
@@ -87,7 +91,7 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
87
91
  this.packageVersion,
88
92
  ));
89
93
 
90
- const metricsRegistry = new OtelMetricsAdapter(telemetry);
94
+ const metricsRegistry = new OtelMetricsAdapter(telemetry, this.logger.getBindings());
91
95
  this.discv5 = Discv5.create({
92
96
  enr: this.enr,
93
97
  peerId,
@@ -96,7 +100,8 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
96
100
  lookupTimeout: 2000,
97
101
  requestTimeout: 2000,
98
102
  allowUnverifiedSessions: true,
99
- enrUpdate: !p2pIp ? true : false, // If no p2p IP is set, enrUpdate can automatically resolve it
103
+ enrUpdate: config.queryForIp || !p2pIp,
104
+ pingInterval: config.queryForIp ? 10_000 : 300_000,
100
105
  ...configOverrides.config,
101
106
  },
102
107
  metricsRegistry,
@@ -127,11 +132,34 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
127
132
  }
128
133
 
129
134
  private onMultiaddrUpdated(m: Multiaddr) {
130
- // We want to update our tcp port to match the udp port
131
- // p2pBroadcastPort is optional on config, however it is set to default within the p2p client factory
132
- const multiAddrTcp = multiaddr(convertToMultiaddr(m.nodeAddress().address, this.config.p2pBroadcastPort!, 'tcp'));
135
+ const newIp = m.nodeAddress().address;
136
+ const previousIp = this.currentIp;
137
+
138
+ if (newIp === previousIp) {
139
+ this.logger.debug('Discv5 confirmed current IP (no change)', { ip: newIp });
140
+ return;
141
+ }
142
+
143
+ const multiAddrTcp = multiaddr(convertToMultiaddr(newIp, this.config.p2pBroadcastPort!, 'tcp'));
133
144
  this.enr.setLocationMultiaddr(multiAddrTcp);
134
- this.logger.info('Multiaddr updated', { multiaddr: multiAddrTcp.toString() });
145
+ this.currentIp = newIp;
146
+
147
+ if (previousIp) {
148
+ this.logger.info('IP address changed, ENR updated', {
149
+ previousIp,
150
+ newIp,
151
+ multiaddr: multiAddrTcp.toString(),
152
+ enr: this.enr.encodeTxt(),
153
+ });
154
+ } else {
155
+ this.logger.info('Initial IP discovered via discv5, ENR updated', {
156
+ ip: newIp,
157
+ multiaddr: multiAddrTcp.toString(),
158
+ enr: this.enr.encodeTxt(),
159
+ });
160
+ }
161
+
162
+ this.emit('ip:changed', newIp);
135
163
  }
136
164
 
137
165
  public async start(): Promise<void> {
@@ -142,12 +170,17 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
142
170
  await this.discv5.start();
143
171
  this.startTime = Date.now();
144
172
 
173
+ const enrUpdateEnabled = this.config.queryForIp || !this.config.p2pIp;
145
174
  this.logger.info(`DiscV5 service started`, {
146
175
  nodeId: this.enr.nodeId,
147
176
  peerId: this.peerId,
148
177
  enrUdp: await this.enr.getFullMultiaddr('udp'),
149
178
  enrTcp: await this.enr.getFullMultiaddr('tcp'),
150
179
  versions: this.versions,
180
+ enrUpdateEnabled,
181
+ queryForIp: this.config.queryForIp,
182
+ configuredIp: this.config.p2pIp ?? 'none',
183
+ pingIntervalMs: this.config.queryForIp ? 10_000 : 300_000,
151
184
  });
152
185
  this.currentState = PeerDiscoveryState.RUNNING;
153
186
 
@@ -1,6 +1,6 @@
1
1
  import type { EthAddress } from '@aztec/foundation/eth-address';
2
2
  import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
3
- import type { Gossipable, PeerErrorSeverity } from '@aztec/stdlib/p2p';
3
+ import type { Gossipable, PeerErrorSeverity, TopicType } from '@aztec/stdlib/p2p';
4
4
  import { Tx, TxHash } from '@aztec/stdlib/tx';
5
5
 
6
6
  import type { PeerId } from '@libp2p/interface';
@@ -8,7 +8,9 @@ import type { ENR } from '@nethermindeth/enr';
8
8
  import EventEmitter from 'events';
9
9
 
10
10
  import type { PeerManagerInterface } from './peer-manager/interface.js';
11
+ import type { BatchTxRequesterLibP2PService } from './reqresp/batch-tx-requester/interface.js';
11
12
  import type { P2PReqRespConfig } from './reqresp/config.js';
13
+ import type { ConnectionSampler } from './reqresp/connection-sampler/connection_sampler.js';
12
14
  import { type AuthRequest, StatusMessage } from './reqresp/index.js';
13
15
  import type {
14
16
  ReqRespInterface,
@@ -16,14 +18,16 @@ import type {
16
18
  ReqRespSubProtocol,
17
19
  ReqRespSubProtocolHandler,
18
20
  ReqRespSubProtocolHandlers,
19
- ReqRespSubProtocolValidators,
20
21
  SubProtocolMap,
21
22
  } from './reqresp/interface.js';
22
23
  import type { GoodByeReason } from './reqresp/protocols/goodbye.js';
23
24
  import { ReqRespStatus } from './reqresp/status.js';
24
25
  import {
25
26
  type P2PBlockReceivedCallback,
27
+ type P2PCheckpointAttestationCallback,
26
28
  type P2PCheckpointReceivedCallback,
29
+ type P2PDuplicateAttestationCallback,
30
+ type P2PDuplicateProposalCallback,
27
31
  type P2PService,
28
32
  type PeerDiscoveryService,
29
33
  PeerDiscoveryState,
@@ -33,6 +37,8 @@ import {
33
37
  * A dummy implementation of the P2P Service.
34
38
  */
35
39
  export class DummyP2PService implements P2PService {
40
+ private allNodesCheckpointReceivedCallback?: P2PCheckpointReceivedCallback;
41
+
36
42
  updateConfig(_config: Partial<P2PReqRespConfig>): void {}
37
43
 
38
44
  /** Returns an empty array for peers. */
@@ -40,6 +46,10 @@ export class DummyP2PService implements P2PService {
40
46
  return [];
41
47
  }
42
48
 
49
+ getGossipMeshPeerCount(_topicType: TopicType): number {
50
+ return 0;
51
+ }
52
+
43
53
  /**
44
54
  * Starts the dummy implementation.
45
55
  * @returns A resolved promise.
@@ -78,7 +88,22 @@ export class DummyP2PService implements P2PService {
78
88
  /**
79
89
  * Register a callback into the validator client for when a checkpoint proposal is received
80
90
  */
81
- public registerCheckpointReceivedCallback(_callback: P2PCheckpointReceivedCallback) {}
91
+ public registerValidatorCheckpointReceivedCallback(_callback: P2PCheckpointReceivedCallback) {}
92
+ public registerAllNodesCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback) {
93
+ this.allNodesCheckpointReceivedCallback = callback;
94
+ }
95
+
96
+ /**
97
+ * Register a callback for when a duplicate proposal is detected
98
+ */
99
+ public registerDuplicateProposalCallback(_callback: P2PDuplicateProposalCallback): void {}
100
+
101
+ /**
102
+ * Register a callback for when a duplicate attestation is detected
103
+ */
104
+ public registerDuplicateAttestationCallback(_callback: P2PDuplicateAttestationCallback): void {}
105
+
106
+ public registerCheckpointAttestationCallback(_callback: P2PCheckpointAttestationCallback): void {}
82
107
 
83
108
  /**
84
109
  * Sends a request to a peer.
@@ -93,17 +118,13 @@ export class DummyP2PService implements P2PService {
93
118
  return Promise.resolve(undefined);
94
119
  }
95
120
 
96
- /**
97
- * Sends a batch request to a peer.
98
- * @param _protocol - The protocol to send the request on.
99
- * @param _requests - The requests to send.
100
- * @returns The responses from the peer, otherwise undefined.
101
- */
102
- public sendBatchRequest<Protocol extends ReqRespSubProtocol>(
103
- _protocol: Protocol,
104
- _requests: InstanceType<SubProtocolMap[Protocol]['request']>[],
105
- ): Promise<InstanceType<SubProtocolMap[Protocol]['response']>[]> {
106
- return Promise.resolve([]);
121
+ public sendRequestToPeer(
122
+ _peerId: PeerId,
123
+ _subProtocol: ReqRespSubProtocol,
124
+ _payload: Buffer,
125
+ _dialTimeout?: number,
126
+ ): Promise<ReqRespResponse> {
127
+ return Promise.resolve({ status: ReqRespStatus.SUCCESS, data: Buffer.from([]) });
107
128
  }
108
129
 
109
130
  /**
@@ -114,15 +135,11 @@ export class DummyP2PService implements P2PService {
114
135
  return undefined;
115
136
  }
116
137
 
117
- validate(_txs: Tx[]): Promise<void> {
138
+ validateTxsReceivedInBlockProposal(_txs: Tx[]): Promise<void> {
118
139
  return Promise.resolve();
119
140
  }
120
141
 
121
- addReqRespSubProtocol(
122
- _subProtocol: ReqRespSubProtocol,
123
- _handler: ReqRespSubProtocolHandler,
124
- _validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
125
- ): Promise<void> {
142
+ addReqRespSubProtocol(_subProtocol: ReqRespSubProtocol, _handler: ReqRespSubProtocolHandler): Promise<void> {
126
143
  return Promise.resolve();
127
144
  }
128
145
 
@@ -132,6 +149,28 @@ export class DummyP2PService implements P2PService {
132
149
 
133
150
  //this is no-op
134
151
  registerThisValidatorAddresses(_address: EthAddress[]): void {}
152
+
153
+ /**
154
+ * Get dummy BatchTxRequesterLibP2PService for testing
155
+ */
156
+ getBatchTxRequesterService(): BatchTxRequesterLibP2PService {
157
+ return {
158
+ reqResp: this, // The dummy service implements ReqRespInterface
159
+ connectionSampler: new DummyReqResp().getConnectionSampler(),
160
+ txValidatorConfig: {
161
+ l1ChainId: 1,
162
+ rollupVersion: 1,
163
+ proofVerifier: {
164
+ verifyProof: () => Promise.resolve({ valid: true, durationMs: 0, totalDurationMs: 0 }),
165
+ stop: () => Promise.resolve(),
166
+ },
167
+ },
168
+ peerScoring: {
169
+ penalizePeer: (_peerId, _penalty) => {},
170
+ },
171
+ validateRequestedBlockTxsConsistency: () => Promise.resolve(true),
172
+ };
173
+ }
135
174
  }
136
175
 
137
176
  /**
@@ -234,10 +273,8 @@ export class DummyPeerManager implements PeerManagerInterface {
234
273
 
235
274
  export class DummyReqResp implements ReqRespInterface {
236
275
  updateConfig(_config: Partial<P2PReqRespConfig>): void {}
237
- start(
238
- _subProtocolHandlers: ReqRespSubProtocolHandlers,
239
- _subProtocolValidators: ReqRespSubProtocolValidators,
240
- ): Promise<void> {
276
+ setShouldRejectPeer(): void {}
277
+ start(_subProtocolHandlers: ReqRespSubProtocolHandlers): Promise<void> {
241
278
  return Promise.resolve();
242
279
  }
243
280
  stop(): Promise<void> {
@@ -249,16 +286,6 @@ export class DummyReqResp implements ReqRespInterface {
249
286
  ): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']> | undefined> {
250
287
  return Promise.resolve(undefined);
251
288
  }
252
- sendBatchRequest<SubProtocol extends ReqRespSubProtocol>(
253
- _subProtocol: SubProtocol,
254
- _requests: InstanceType<SubProtocolMap[SubProtocol]['request']>[],
255
- _pinnedPeer: PeerId | undefined,
256
- _timeoutMs?: number,
257
- _maxPeers?: number,
258
- _maxRetryAttempts?: number,
259
- ): Promise<InstanceType<SubProtocolMap[SubProtocol]['response']>[]> {
260
- return Promise.resolve([]);
261
- }
262
289
  public sendRequestToPeer(
263
290
  _peerId: PeerId,
264
291
  _subProtocol: ReqRespSubProtocol,
@@ -268,11 +295,16 @@ export class DummyReqResp implements ReqRespInterface {
268
295
  return Promise.resolve({ status: ReqRespStatus.SUCCESS, data: Buffer.from([]) });
269
296
  }
270
297
 
271
- addSubProtocol(
272
- _subProtocol: ReqRespSubProtocol,
273
- _handler: ReqRespSubProtocolHandler,
274
- _validator?: ReqRespSubProtocolValidators[ReqRespSubProtocol],
275
- ): Promise<void> {
298
+ /**
299
+ * Get dummy connection sampler for testing
300
+ */
301
+ getConnectionSampler(): Pick<ConnectionSampler, 'getPeerListSortedByConnectionCountAsc'> {
302
+ return {
303
+ getPeerListSortedByConnectionCountAsc: () => [],
304
+ };
305
+ }
306
+
307
+ addSubProtocol(_subProtocol: ReqRespSubProtocol, _handler: ReqRespSubProtocolHandler): Promise<void> {
276
308
  return Promise.resolve();
277
309
  }
278
310
  }
@@ -1,14 +1,22 @@
1
1
  // Taken from lodestar: https://github.com/ChainSafe/lodestar
2
- import { sha256 } from '@aztec/foundation/crypto/sha256';
3
2
  import { createLogger } from '@aztec/foundation/log';
4
3
  import { MAX_TX_SIZE_KB, TopicType, getTopicFromString } from '@aztec/stdlib/p2p';
5
4
 
6
5
  import type { RPC } from '@chainsafe/libp2p-gossipsub/message';
7
6
  import type { DataTransform } from '@chainsafe/libp2p-gossipsub/types';
8
7
  import type { Message } from '@libp2p/interface';
8
+ import { webcrypto } from 'node:crypto';
9
9
  import { compressSync, uncompressSync } from 'snappy';
10
10
  import xxhashFactory from 'xxhash-wasm';
11
11
 
12
+ /** Thrown when a Snappy-compressed response exceeds the allowed decompressed size. */
13
+ export class OversizedSnappyResponseError extends Error {
14
+ constructor(decompressedSize: number, maxSizeKb: number) {
15
+ super(`Decompressed size ${decompressedSize} exceeds maximum allowed size of ${maxSizeKb}kb`);
16
+ this.name = 'OversizedSnappyResponseError';
17
+ }
18
+ }
19
+
12
20
  // Load WASM
13
21
  const xxhash = await xxhashFactory();
14
22
 
@@ -44,11 +52,10 @@ export function msgIdToStrFn(msgId: Uint8Array): string {
44
52
  * @param message - The libp2p message
45
53
  * @returns The message identifier
46
54
  */
47
- export function getMsgIdFn(message: Message) {
48
- const { topic } = message;
49
-
50
- const vec = [Buffer.from(topic), message.data];
51
- return sha256(Buffer.concat(vec)).subarray(0, 20);
55
+ export async function getMsgIdFn({ topic, data }: Message): Promise<Uint8Array> {
56
+ const buffer = Buffer.concat([Buffer.from(topic), data]);
57
+ const hash = await webcrypto.subtle.digest('SHA-256', buffer);
58
+ return Buffer.from(hash.slice(0, 20));
52
59
  }
53
60
 
54
61
  const DefaultMaxSizesKb: Record<TopicType, number> = {
@@ -58,7 +65,8 @@ const DefaultMaxSizesKb: Record<TopicType, number> = {
58
65
  // Proposals may carry some tx objects, so we allow a larger size capped at 10mb
59
66
  // Note this may not be enough for carrying all tx objects in a block
60
67
  [TopicType.block_proposal]: 1024 * 10,
61
- // TODO(palla/mbps): Check size for checkpoint proposal
68
+ // Checkpoint proposals carry almost the same data as a block proposal (see the lastBlockProposal)
69
+ // Only diff is an additional header, which is pretty small compared to the 10mb limit
62
70
  [TopicType.checkpoint_proposal]: 1024 * 10,
63
71
  };
64
72
 
@@ -78,15 +86,15 @@ export class SnappyTransform implements DataTransform {
78
86
  return this.inboundTransformData(Buffer.from(data), topic);
79
87
  }
80
88
 
81
- public inboundTransformData(data: Buffer, topic?: TopicType): Buffer {
89
+ public inboundTransformData(data: Buffer, topic?: TopicType, maxSizeKbOverride?: number): Buffer {
82
90
  if (data.length === 0) {
83
91
  return data;
84
92
  }
85
- const maxSizeKb = this.maxSizesKb[topic!] ?? this.defaultMaxSizeKb;
93
+ const maxSizeKb = maxSizeKbOverride ?? this.maxSizesKb[topic!] ?? this.defaultMaxSizeKb;
86
94
  const { decompressedSize } = readSnappyPreamble(data);
87
95
  if (decompressedSize > maxSizeKb * 1024) {
88
96
  this.logger.warn(`Decompressed size ${decompressedSize} exceeds maximum allowed size of ${maxSizeKb}kb`);
89
- throw new Error(`Decompressed size ${decompressedSize} exceeds maximum allowed size of ${maxSizeKb}kb`);
97
+ throw new OversizedSnappyResponseError(decompressedSize, maxSizeKb);
90
98
  }
91
99
 
92
100
  return Buffer.from(uncompressSync(data, { asBuffer: true }));