@aztec/p2p 0.0.0-test.1 → 0.0.1-commit.023c3e5

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 (512) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +4 -3
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +26 -13
  4. package/dest/client/factory.d.ts +15 -5
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +61 -25
  7. package/dest/client/index.d.ts +2 -1
  8. package/dest/client/index.d.ts.map +1 -1
  9. package/dest/client/index.js +1 -0
  10. package/dest/client/interface.d.ts +170 -0
  11. package/dest/client/interface.d.ts.map +1 -0
  12. package/dest/client/interface.js +9 -0
  13. package/dest/client/p2p_client.d.ts +75 -193
  14. package/dest/client/p2p_client.d.ts.map +1 -1
  15. package/dest/client/p2p_client.js +765 -229
  16. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  17. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  18. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
  19. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  20. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  21. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  22. package/dest/config.d.ts +154 -125
  23. package/dest/config.d.ts.map +1 -1
  24. package/dest/config.js +182 -34
  25. package/dest/enr/generate-enr.d.ts +11 -3
  26. package/dest/enr/generate-enr.d.ts.map +1 -1
  27. package/dest/enr/generate-enr.js +27 -5
  28. package/dest/enr/index.d.ts +1 -1
  29. package/dest/errors/attestation-pool.error.d.ts +7 -0
  30. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  31. package/dest/errors/attestation-pool.error.js +12 -0
  32. package/dest/errors/reqresp.error.d.ts +1 -1
  33. package/dest/errors/reqresp.error.d.ts.map +1 -1
  34. package/dest/index.d.ts +4 -1
  35. package/dest/index.d.ts.map +1 -1
  36. package/dest/index.js +2 -0
  37. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +104 -25
  38. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  39. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  40. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  41. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +299 -174
  42. package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
  43. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +29 -11
  44. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  45. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +168 -62
  46. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +24 -10
  47. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  48. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +133 -82
  49. package/dest/mem_pools/attestation_pool/mocks.d.ts +234 -11
  50. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  51. package/dest/mem_pools/attestation_pool/mocks.js +19 -21
  52. package/dest/mem_pools/index.d.ts +1 -1
  53. package/dest/mem_pools/instrumentation.d.ts +16 -12
  54. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  55. package/dest/mem_pools/instrumentation.js +56 -41
  56. package/dest/mem_pools/interface.d.ts +3 -4
  57. package/dest/mem_pools/interface.d.ts.map +1 -1
  58. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +75 -16
  59. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  60. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +493 -142
  61. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
  62. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  63. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
  64. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
  65. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  66. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
  67. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  68. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  69. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  70. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  71. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  72. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  73. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  74. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  75. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
  76. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  77. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  78. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  79. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  80. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  81. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  82. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  83. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  84. package/dest/mem_pools/tx_pool/index.js +0 -1
  85. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  86. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  87. package/dest/mem_pools/tx_pool/priority.js +7 -2
  88. package/dest/mem_pools/tx_pool/tx_pool.d.ts +72 -11
  89. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  90. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  91. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  92. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +276 -45
  93. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +7 -5
  94. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  95. package/dest/msg_validators/attestation_validator/attestation_validator.js +79 -10
  96. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
  97. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  98. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +76 -0
  99. package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
  100. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
  101. package/dest/msg_validators/attestation_validator/index.js +1 -0
  102. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  103. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  104. package/dest/msg_validators/clock_tolerance.js +37 -0
  105. package/dest/msg_validators/index.d.ts +2 -2
  106. package/dest/msg_validators/index.d.ts.map +1 -1
  107. package/dest/msg_validators/index.js +1 -1
  108. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +10 -0
  109. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -0
  110. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.js +36 -0
  111. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  112. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  113. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  114. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  115. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  116. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  117. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  118. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  119. package/dest/msg_validators/proposal_validator/index.js +3 -0
  120. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  121. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  122. package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
  123. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  124. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  125. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
  126. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  127. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  128. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +3 -0
  129. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -0
  130. package/dest/msg_validators/tx_validator/allowed_public_setup.js +27 -0
  131. package/dest/msg_validators/tx_validator/archive_cache.d.ts +14 -0
  132. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -0
  133. package/dest/msg_validators/tx_validator/archive_cache.js +22 -0
  134. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +5 -4
  135. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  136. package/dest/msg_validators/tx_validator/block_header_validator.js +7 -6
  137. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  138. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  139. package/dest/msg_validators/tx_validator/data_validator.js +60 -87
  140. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -4
  141. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  142. package/dest/msg_validators/tx_validator/double_spend_validator.js +24 -29
  143. package/dest/msg_validators/tx_validator/factory.d.ts +21 -0
  144. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
  145. package/dest/msg_validators/tx_validator/factory.js +84 -0
  146. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  147. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  148. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  149. package/dest/msg_validators/tx_validator/gas_validator.d.ts +12 -0
  150. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -0
  151. package/dest/msg_validators/tx_validator/gas_validator.js +110 -0
  152. package/dest/msg_validators/tx_validator/index.d.ts +9 -1
  153. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  154. package/dest/msg_validators/tx_validator/index.js +8 -0
  155. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +10 -5
  156. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  157. package/dest/msg_validators/tx_validator/metadata_validator.js +40 -21
  158. package/dest/msg_validators/tx_validator/phases_validator.d.ts +15 -0
  159. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -0
  160. package/dest/msg_validators/tx_validator/phases_validator.js +93 -0
  161. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  162. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  163. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  164. package/dest/msg_validators/tx_validator/test_utils.d.ts +17 -0
  165. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -0
  166. package/dest/msg_validators/tx_validator/test_utils.js +22 -0
  167. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +14 -0
  168. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -0
  169. package/dest/msg_validators/tx_validator/timestamp_validator.js +32 -0
  170. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +9 -0
  171. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -0
  172. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +24 -0
  173. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  174. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  175. package/dest/msg_validators/tx_validator/tx_proof_validator.js +8 -7
  176. package/dest/services/data_store.d.ts +1 -1
  177. package/dest/services/data_store.d.ts.map +1 -1
  178. package/dest/services/data_store.js +10 -6
  179. package/dest/services/discv5/discV5_service.d.ts +10 -9
  180. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  181. package/dest/services/discv5/discV5_service.js +64 -37
  182. package/dest/services/dummy_service.d.ts +66 -11
  183. package/dest/services/dummy_service.d.ts.map +1 -1
  184. package/dest/services/dummy_service.js +130 -5
  185. package/dest/services/encoding.d.ts +26 -7
  186. package/dest/services/encoding.d.ts.map +1 -1
  187. package/dest/services/encoding.js +75 -6
  188. package/dest/services/gossipsub/scoring.d.ts +1 -1
  189. package/dest/services/index.d.ts +5 -1
  190. package/dest/services/index.d.ts.map +1 -1
  191. package/dest/services/index.js +4 -0
  192. package/dest/services/libp2p/instrumentation.d.ts +20 -0
  193. package/dest/services/libp2p/instrumentation.d.ts.map +1 -0
  194. package/dest/services/libp2p/instrumentation.js +122 -0
  195. package/dest/services/libp2p/libp2p_service.d.ts +107 -95
  196. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  197. package/dest/services/libp2p/libp2p_service.js +1328 -313
  198. package/dest/services/peer-manager/interface.d.ts +23 -0
  199. package/dest/services/peer-manager/interface.d.ts.map +1 -0
  200. package/dest/services/peer-manager/interface.js +1 -0
  201. package/dest/services/peer-manager/metrics.d.ts +12 -3
  202. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  203. package/dest/services/peer-manager/metrics.js +44 -12
  204. package/dest/services/peer-manager/peer_manager.d.ts +103 -23
  205. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  206. package/dest/services/peer-manager/peer_manager.js +551 -82
  207. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  208. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  209. package/dest/services/peer-manager/peer_scoring.js +43 -2
  210. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
  211. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  212. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
  213. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  214. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  215. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  216. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  217. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  218. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  219. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
  220. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  221. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
  222. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
  223. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  224. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
  225. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  226. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  227. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  228. package/dest/services/reqresp/config.d.ts +11 -9
  229. package/dest/services/reqresp/config.d.ts.map +1 -1
  230. package/dest/services/reqresp/config.js +18 -4
  231. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +23 -4
  232. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  233. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +73 -10
  234. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +32 -17
  235. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  236. package/dest/services/reqresp/connection-sampler/connection_sampler.js +154 -84
  237. package/dest/services/reqresp/constants.d.ts +12 -0
  238. package/dest/services/reqresp/constants.d.ts.map +1 -0
  239. package/dest/services/reqresp/constants.js +7 -0
  240. package/dest/services/reqresp/index.d.ts +3 -2
  241. package/dest/services/reqresp/index.d.ts.map +1 -1
  242. package/dest/services/reqresp/index.js +2 -1
  243. package/dest/services/reqresp/interface.d.ts +75 -24
  244. package/dest/services/reqresp/interface.d.ts.map +1 -1
  245. package/dest/services/reqresp/interface.js +46 -27
  246. package/dest/services/reqresp/metrics.d.ts +6 -5
  247. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  248. package/dest/services/reqresp/metrics.js +17 -21
  249. package/dest/services/reqresp/protocols/auth.d.ts +43 -0
  250. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -0
  251. package/dest/services/reqresp/protocols/auth.js +71 -0
  252. package/dest/services/reqresp/protocols/block.d.ts +6 -1
  253. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  254. package/dest/services/reqresp/protocols/block.js +30 -6
  255. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +34 -0
  256. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -0
  257. package/dest/services/reqresp/protocols/block_txs/bitvector.js +87 -0
  258. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +11 -0
  259. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -0
  260. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +52 -0
  261. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +59 -0
  262. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -0
  263. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +105 -0
  264. package/dest/services/reqresp/protocols/block_txs/index.d.ts +4 -0
  265. package/dest/services/reqresp/protocols/block_txs/index.d.ts.map +1 -0
  266. package/dest/services/reqresp/protocols/block_txs/index.js +3 -0
  267. package/dest/services/reqresp/protocols/goodbye.d.ts +3 -5
  268. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  269. package/dest/services/reqresp/protocols/goodbye.js +7 -7
  270. package/dest/services/reqresp/protocols/index.d.ts +3 -1
  271. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  272. package/dest/services/reqresp/protocols/index.js +2 -0
  273. package/dest/services/reqresp/protocols/ping.d.ts +1 -3
  274. package/dest/services/reqresp/protocols/ping.d.ts.map +1 -1
  275. package/dest/services/reqresp/protocols/status.d.ts +40 -7
  276. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  277. package/dest/services/reqresp/protocols/status.js +76 -5
  278. package/dest/services/reqresp/protocols/tx.d.ts +14 -4
  279. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  280. package/dest/services/reqresp/protocols/tx.js +34 -6
  281. package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
  282. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +6 -4
  283. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  284. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -2
  285. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  286. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  287. package/dest/services/reqresp/rate-limiter/rate_limits.js +21 -1
  288. package/dest/services/reqresp/reqresp.d.ts +29 -66
  289. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  290. package/dest/services/reqresp/reqresp.js +753 -248
  291. package/dest/services/reqresp/status.d.ts +10 -4
  292. package/dest/services/reqresp/status.d.ts.map +1 -1
  293. package/dest/services/reqresp/status.js +9 -2
  294. package/dest/services/service.d.ts +40 -20
  295. package/dest/services/service.d.ts.map +1 -1
  296. package/dest/services/tx_collection/config.d.ts +28 -0
  297. package/dest/services/tx_collection/config.d.ts.map +1 -0
  298. package/dest/services/tx_collection/config.js +66 -0
  299. package/dest/services/tx_collection/fast_tx_collection.d.ts +53 -0
  300. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -0
  301. package/dest/services/tx_collection/fast_tx_collection.js +311 -0
  302. package/dest/services/tx_collection/index.d.ts +4 -0
  303. package/dest/services/tx_collection/index.d.ts.map +1 -0
  304. package/dest/services/tx_collection/index.js +3 -0
  305. package/dest/services/tx_collection/instrumentation.d.ts +10 -0
  306. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -0
  307. package/dest/services/tx_collection/instrumentation.js +31 -0
  308. package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
  309. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  310. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  311. package/dest/services/tx_collection/slow_tx_collection.d.ts +53 -0
  312. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -0
  313. package/dest/services/tx_collection/slow_tx_collection.js +177 -0
  314. package/dest/services/tx_collection/tx_collection.d.ts +110 -0
  315. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -0
  316. package/dest/services/tx_collection/tx_collection.js +128 -0
  317. package/dest/services/tx_collection/tx_collection_sink.d.ts +30 -0
  318. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -0
  319. package/dest/services/tx_collection/tx_collection_sink.js +111 -0
  320. package/dest/services/tx_collection/tx_source.d.ts +18 -0
  321. package/dest/services/tx_collection/tx_source.d.ts.map +1 -0
  322. package/dest/services/tx_collection/tx_source.js +31 -0
  323. package/dest/services/tx_provider.d.ts +51 -0
  324. package/dest/services/tx_provider.d.ts.map +1 -0
  325. package/dest/services/tx_provider.js +219 -0
  326. package/dest/services/tx_provider_instrumentation.d.ts +16 -0
  327. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -0
  328. package/dest/services/tx_provider_instrumentation.js +34 -0
  329. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
  330. package/dest/test-helpers/get-ports.d.ts +1 -1
  331. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  332. package/dest/test-helpers/index.d.ts +4 -1
  333. package/dest/test-helpers/index.d.ts.map +1 -1
  334. package/dest/test-helpers/index.js +3 -0
  335. package/dest/test-helpers/make-enrs.d.ts +1 -1
  336. package/dest/test-helpers/make-enrs.d.ts.map +1 -1
  337. package/dest/test-helpers/make-enrs.js +4 -5
  338. package/dest/test-helpers/make-test-p2p-clients.d.ts +33 -5
  339. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  340. package/dest/test-helpers/make-test-p2p-clients.js +86 -16
  341. package/dest/test-helpers/mock-pubsub.d.ts +59 -0
  342. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -0
  343. package/dest/test-helpers/mock-pubsub.js +130 -0
  344. package/dest/test-helpers/mock-tx-helpers.d.ts +12 -0
  345. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -0
  346. package/dest/test-helpers/mock-tx-helpers.js +19 -0
  347. package/dest/test-helpers/reqresp-nodes.d.ts +15 -11
  348. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  349. package/dest/test-helpers/reqresp-nodes.js +62 -28
  350. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  351. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  352. package/dest/test-helpers/test_tx_provider.js +41 -0
  353. package/dest/test-helpers/testbench-utils.d.ts +158 -0
  354. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  355. package/dest/test-helpers/testbench-utils.js +297 -0
  356. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  357. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  358. package/dest/testbench/p2p_client_testbench_worker.js +259 -90
  359. package/dest/testbench/parse_log_file.d.ts +1 -1
  360. package/dest/testbench/parse_log_file.js +4 -4
  361. package/dest/testbench/testbench.d.ts +1 -1
  362. package/dest/testbench/testbench.js +4 -4
  363. package/dest/testbench/worker_client_manager.d.ts +51 -11
  364. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  365. package/dest/testbench/worker_client_manager.js +232 -53
  366. package/dest/types/index.d.ts +4 -2
  367. package/dest/types/index.d.ts.map +1 -1
  368. package/dest/types/index.js +2 -0
  369. package/dest/util.d.ts +24 -16
  370. package/dest/util.d.ts.map +1 -1
  371. package/dest/util.js +75 -69
  372. package/dest/versioning.d.ts +4 -4
  373. package/dest/versioning.d.ts.map +1 -1
  374. package/dest/versioning.js +8 -3
  375. package/package.json +32 -27
  376. package/src/bootstrap/bootstrap.ts +34 -15
  377. package/src/client/factory.ts +135 -53
  378. package/src/client/index.ts +1 -0
  379. package/src/client/interface.ts +213 -0
  380. package/src/client/p2p_client.ts +476 -383
  381. package/src/client/test/tx_proposal_collector/README.md +227 -0
  382. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
  383. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  384. package/src/config.ts +304 -134
  385. package/src/enr/generate-enr.ts +39 -6
  386. package/src/errors/attestation-pool.error.ts +13 -0
  387. package/src/index.ts +4 -0
  388. package/src/mem_pools/attestation_pool/attestation_pool.ts +119 -24
  389. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +352 -201
  390. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +233 -72
  391. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +199 -96
  392. package/src/mem_pools/attestation_pool/mocks.ts +24 -17
  393. package/src/mem_pools/instrumentation.ts +72 -48
  394. package/src/mem_pools/interface.ts +2 -4
  395. package/src/mem_pools/tx_pool/README.md +270 -0
  396. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +580 -143
  397. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
  398. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
  399. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  400. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  401. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
  402. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  403. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  404. package/src/mem_pools/tx_pool/index.ts +0 -1
  405. package/src/mem_pools/tx_pool/priority.ts +9 -2
  406. package/src/mem_pools/tx_pool/tx_pool.ts +75 -10
  407. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +225 -36
  408. package/src/msg_validators/attestation_validator/attestation_validator.ts +72 -14
  409. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +94 -0
  410. package/src/msg_validators/attestation_validator/index.ts +1 -0
  411. package/src/msg_validators/clock_tolerance.ts +51 -0
  412. package/src/msg_validators/index.ts +1 -1
  413. package/src/msg_validators/msg_seen_validator/msg_seen_validator.ts +36 -0
  414. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  415. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  416. package/src/msg_validators/proposal_validator/index.ts +3 -0
  417. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  418. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  419. package/src/msg_validators/tx_validator/allowed_public_setup.ts +35 -0
  420. package/src/msg_validators/tx_validator/archive_cache.ts +28 -0
  421. package/src/msg_validators/tx_validator/block_header_validator.ts +10 -9
  422. package/src/msg_validators/tx_validator/data_validator.ts +95 -71
  423. package/src/msg_validators/tx_validator/double_spend_validator.ts +23 -20
  424. package/src/msg_validators/tx_validator/factory.ts +151 -0
  425. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  426. package/src/msg_validators/tx_validator/gas_validator.ts +123 -0
  427. package/src/msg_validators/tx_validator/index.ts +8 -0
  428. package/src/msg_validators/tx_validator/metadata_validator.ts +72 -24
  429. package/src/msg_validators/tx_validator/phases_validator.ts +118 -0
  430. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  431. package/src/msg_validators/tx_validator/test_utils.ts +43 -0
  432. package/src/msg_validators/tx_validator/timestamp_validator.ts +52 -0
  433. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +22 -0
  434. package/src/msg_validators/tx_validator/tx_proof_validator.ts +14 -8
  435. package/src/services/data_store.ts +10 -7
  436. package/src/services/discv5/discV5_service.ts +85 -39
  437. package/src/services/dummy_service.ts +198 -9
  438. package/src/services/encoding.ts +82 -6
  439. package/src/services/index.ts +4 -0
  440. package/src/services/libp2p/instrumentation.ts +126 -0
  441. package/src/services/libp2p/libp2p_service.ts +1170 -353
  442. package/src/services/peer-manager/interface.ts +29 -0
  443. package/src/services/peer-manager/metrics.ts +55 -12
  444. package/src/services/peer-manager/peer_manager.ts +657 -80
  445. package/src/services/peer-manager/peer_scoring.ts +45 -3
  446. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  447. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
  448. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  449. package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
  450. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
  451. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
  452. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  453. package/src/services/reqresp/config.ts +26 -9
  454. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +77 -10
  455. package/src/services/reqresp/connection-sampler/connection_sampler.ts +166 -95
  456. package/src/services/reqresp/constants.ts +14 -0
  457. package/src/services/reqresp/index.ts +2 -0
  458. package/src/services/reqresp/interface.ts +95 -37
  459. package/src/services/reqresp/metrics.ts +40 -28
  460. package/src/services/reqresp/protocols/auth.ts +83 -0
  461. package/src/services/reqresp/protocols/block.ts +26 -4
  462. package/src/services/reqresp/protocols/block_txs/bitvector.ts +106 -0
  463. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +67 -0
  464. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +121 -0
  465. package/src/services/reqresp/protocols/block_txs/index.ts +3 -0
  466. package/src/services/reqresp/protocols/goodbye.ts +9 -7
  467. package/src/services/reqresp/protocols/index.ts +2 -0
  468. package/src/services/reqresp/protocols/status.ts +121 -5
  469. package/src/services/reqresp/protocols/tx.ts +36 -8
  470. package/src/services/reqresp/rate-limiter/rate_limiter.ts +12 -3
  471. package/src/services/reqresp/rate-limiter/rate_limits.ts +21 -1
  472. package/src/services/reqresp/reqresp.ts +449 -271
  473. package/src/services/reqresp/status.ts +12 -3
  474. package/src/services/service.ts +65 -22
  475. package/src/services/tx_collection/config.ts +98 -0
  476. package/src/services/tx_collection/fast_tx_collection.ts +364 -0
  477. package/src/services/tx_collection/index.ts +7 -0
  478. package/src/services/tx_collection/instrumentation.ts +35 -0
  479. package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
  480. package/src/services/tx_collection/slow_tx_collection.ts +233 -0
  481. package/src/services/tx_collection/tx_collection.ts +216 -0
  482. package/src/services/tx_collection/tx_collection_sink.ts +129 -0
  483. package/src/services/tx_collection/tx_source.ts +37 -0
  484. package/src/services/tx_provider.ts +232 -0
  485. package/src/services/tx_provider_instrumentation.ts +54 -0
  486. package/src/test-helpers/index.ts +3 -0
  487. package/src/test-helpers/make-enrs.ts +4 -5
  488. package/src/test-helpers/make-test-p2p-clients.ts +111 -21
  489. package/src/test-helpers/mock-pubsub.ts +188 -0
  490. package/src/test-helpers/mock-tx-helpers.ts +24 -0
  491. package/src/test-helpers/reqresp-nodes.ts +87 -36
  492. package/src/test-helpers/test_tx_provider.ts +64 -0
  493. package/src/test-helpers/testbench-utils.ts +374 -0
  494. package/src/testbench/p2p_client_testbench_worker.ts +434 -89
  495. package/src/testbench/parse_log_file.ts +4 -4
  496. package/src/testbench/testbench.ts +4 -4
  497. package/src/testbench/worker_client_manager.ts +315 -59
  498. package/src/types/index.ts +2 -0
  499. package/src/util.ts +105 -91
  500. package/src/versioning.ts +11 -4
  501. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -56
  502. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  503. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -141
  504. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -8
  505. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  506. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -21
  507. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  508. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  509. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  510. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -174
  511. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -29
  512. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -0,0 +1,40 @@
1
+ import { type ConfigMappingsType, numberConfigHelper } from '@aztec/foundation/config';
2
+
3
+ export const DEFAULT_BATCH_TX_REQUESTER_SMART_PARALLEL_WORKER_COUNT = 10;
4
+ export const DEFAULT_BATCH_TX_REQUESTER_DUMB_PARALLEL_WORKER_COUNT = 10;
5
+ export const DEFAULT_BATCH_TX_REQUESTER_TX_BATCH_SIZE = 8;
6
+ export const DEFAULT_BATCH_TX_REQUESTER_BAD_PEER_THRESHOLD = 2;
7
+
8
+ export interface BatchTxRequesterConfig {
9
+ /** Max concurrent requests to smart peers. */
10
+ batchTxRequesterSmartParallelWorkerCount: number;
11
+ /** Max concurrent requests to dumb peers. */
12
+ batchTxRequesterDumbParallelWorkerCount: number;
13
+ /** Max transactions per request / chunk size. */
14
+ batchTxRequesterTxBatchSize: number;
15
+ /** Failures before a peer is considered bad (see > threshold logic). */
16
+ batchTxRequesterBadPeerThreshold: number;
17
+ }
18
+
19
+ export const batchTxRequesterConfigMappings: ConfigMappingsType<BatchTxRequesterConfig> = {
20
+ batchTxRequesterSmartParallelWorkerCount: {
21
+ env: 'P2P_BATCH_TX_REQUESTER_SMART_PARALLEL_WORKER_COUNT',
22
+ description: 'Max concurrent requests to smart peers for batch tx requester.',
23
+ ...numberConfigHelper(DEFAULT_BATCH_TX_REQUESTER_SMART_PARALLEL_WORKER_COUNT),
24
+ },
25
+ batchTxRequesterDumbParallelWorkerCount: {
26
+ env: 'P2P_BATCH_TX_REQUESTER_DUMB_PARALLEL_WORKER_COUNT',
27
+ description: 'Max concurrent requests to dumb peers for batch tx requester.',
28
+ ...numberConfigHelper(DEFAULT_BATCH_TX_REQUESTER_DUMB_PARALLEL_WORKER_COUNT),
29
+ },
30
+ batchTxRequesterTxBatchSize: {
31
+ env: 'P2P_BATCH_TX_REQUESTER_TX_BATCH_SIZE',
32
+ description: 'Max transactions per request / chunk size for batch tx requester.',
33
+ ...numberConfigHelper(DEFAULT_BATCH_TX_REQUESTER_TX_BATCH_SIZE),
34
+ },
35
+ batchTxRequesterBadPeerThreshold: {
36
+ env: 'P2P_BATCH_TX_REQUESTER_BAD_PEER_THRESHOLD',
37
+ description: 'Failures before a peer is considered bad (see > threshold logic).',
38
+ ...numberConfigHelper(DEFAULT_BATCH_TX_REQUESTER_BAD_PEER_THRESHOLD),
39
+ },
40
+ };
@@ -0,0 +1,57 @@
1
+ import type { ISemaphore } from '@aztec/foundation/queue';
2
+ import type { PeerErrorSeverity } from '@aztec/stdlib/p2p';
3
+ import type { Tx, TxHash } from '@aztec/stdlib/tx';
4
+
5
+ import type { PeerId } from '@libp2p/interface';
6
+
7
+ import type { ConnectionSampler } from '../connection-sampler/connection_sampler.js';
8
+ import type { ReqRespInterface } from '../interface.js';
9
+ import type { MissingTxMetadata } from './missing_txs.js';
10
+ import type { IPeerCollection } from './peer_collection.js';
11
+ import type { BatchRequestTxValidatorConfig, IBatchRequestTxValidator } from './tx_validator.js';
12
+
13
+ export interface IPeerPenalizer {
14
+ penalizePeer(peerId: PeerId, penalty: PeerErrorSeverity): void;
15
+ }
16
+
17
+ export interface ITxMetadataCollection {
18
+ size: number;
19
+ values(): IterableIterator<MissingTxMetadata>;
20
+ getMissingTxHashes(): Set<string>;
21
+ getTxsToRequestFromThePeer(peer: PeerId): TxHash[];
22
+ markRequested(txHash: TxHash): void;
23
+ markInFlightBySmartPeer(txHash: TxHash): void;
24
+ markNotInFlightBySmartPeer(txHash: TxHash): void;
25
+ alreadyFetched(txHash: TxHash): boolean;
26
+ // Returns true if tx was marked as fetched, false if it was already marked as fetched
27
+ markFetched(peerId: PeerId, tx: Tx): boolean;
28
+ markPeerHas(peerId: PeerId, txHashes: TxHash[]): void;
29
+ getFetchedTxs(): Tx[];
30
+ }
31
+
32
+ /**
33
+ * Interface for BatchTxRequester dependencies that can be injected from upstream
34
+ */
35
+ export interface BatchTxRequesterLibP2PService {
36
+ /** ReqResp interface for sending requests to peers */
37
+ reqResp: Pick<ReqRespInterface, 'sendBatchRequest' | 'sendRequestToPeer'>;
38
+ /** Connection sampler for getting peer lists */
39
+ connectionSampler: Pick<ConnectionSampler, 'getPeerListSortedByConnectionCountAsc'>;
40
+ /** Configuration needed for transaction validation */
41
+ txValidatorConfig: BatchRequestTxValidatorConfig;
42
+ /** Peer scoring for penalizing peers */
43
+ peerScoring: IPeerPenalizer;
44
+ }
45
+
46
+ export interface BatchTxRequesterOptions {
47
+ smartParallelWorkerCount?: number;
48
+ dumbParallelWorkerCount?: number;
49
+ txBatchSize?: number;
50
+ badPeerThreshold?: number;
51
+ //Injectable for testing purposes
52
+ semaphore?: ISemaphore;
53
+ peerCollection?: IPeerCollection;
54
+ abortSignal?: AbortSignal;
55
+ /** Optional tx validator for testing - if not provided, one is created from p2pService.txValidatorConfig */
56
+ txValidator?: IBatchRequestTxValidator;
57
+ }
@@ -0,0 +1,209 @@
1
+ import { type Tx, TxHash } from '@aztec/stdlib/tx';
2
+
3
+ import type { PeerId } from '@libp2p/interface';
4
+
5
+ import { DEFAULT_BATCH_TX_REQUESTER_TX_BATCH_SIZE } from './config.js';
6
+ import type { ITxMetadataCollection } from './interface.js';
7
+
8
+ export class MissingTxMetadata {
9
+ constructor(
10
+ public readonly txHash: TxHash,
11
+ public fetched = false,
12
+ public requestedCount = 0,
13
+ public inFlightCount = 0,
14
+ public tx: Tx | undefined = undefined,
15
+ public readonly peers = new Set<string>(),
16
+ ) {}
17
+
18
+ public markAsRequested() {
19
+ this.requestedCount++;
20
+ }
21
+
22
+ public markInFlight() {
23
+ this.inFlightCount++;
24
+ }
25
+
26
+ public markNotInFlight() {
27
+ this.inFlightCount = Math.max(--this.inFlightCount, 0);
28
+ }
29
+
30
+ public isInFlight(): boolean {
31
+ return this.inFlightCount > 0;
32
+ }
33
+
34
+ //Returns true if this is the first time we mark it as fetched
35
+ public markAsFetched(peerId: PeerId, tx: Tx): boolean {
36
+ if (this.fetched) {
37
+ return false;
38
+ }
39
+
40
+ this.fetched = true;
41
+ this.tx = tx;
42
+
43
+ this.peers.add(peerId.toString());
44
+
45
+ return true;
46
+ }
47
+
48
+ public toString() {
49
+ return this.txHash.toString();
50
+ }
51
+ }
52
+
53
+ /*
54
+ * Single source or truth for transactions we are fetching
55
+ * This could be better optimized but given expected count of missing txs (N < 100)
56
+ * At the moment there is no need for it. And benefit is that we have everything in single store
57
+ * */
58
+ export class MissingTxMetadataCollection extends Map<string, MissingTxMetadata> implements ITxMetadataCollection {
59
+ constructor(
60
+ entries?: readonly (readonly [string, MissingTxMetadata])[] | null,
61
+ private readonly txBatchSize: number = DEFAULT_BATCH_TX_REQUESTER_TX_BATCH_SIZE,
62
+ ) {
63
+ super(entries);
64
+ }
65
+ public getSortedByRequestedCountAsc(txs: string[]): MissingTxMetadata[] {
66
+ return Array.from(this.values().filter(txMeta => txs.includes(txMeta.txHash.toString()))).sort(
67
+ (a, b) => a.requestedCount - b.requestedCount,
68
+ );
69
+ }
70
+
71
+ public getPrioritizingNotInFlightAndLowerRequestCount(txs: string[]): MissingTxMetadata[] {
72
+ const filtered = Array.from(this.values()).filter(txMeta => txs.includes(txMeta.txHash.toString()));
73
+
74
+ const [notInFlight, inFlight] = filtered.reduce<[MissingTxMetadata[], MissingTxMetadata[]]>(
75
+ (buckets, tx) => {
76
+ tx.isInFlight() ? buckets[1].push(tx) : buckets[0].push(tx);
77
+ return buckets;
78
+ },
79
+ [[], []],
80
+ );
81
+
82
+ notInFlight.sort((a, b) => a.requestedCount - b.requestedCount);
83
+ inFlight.sort((a, b) => a.inFlightCount - b.inFlightCount);
84
+
85
+ return [...notInFlight, ...inFlight];
86
+ }
87
+
88
+ public getFetchedTxHashes(): Set<string> {
89
+ return new Set(
90
+ this.values()
91
+ .filter(t => t.fetched)
92
+ .map(t => t.txHash.toString()),
93
+ );
94
+ }
95
+
96
+ public getMissingTxHashes(): Set<string> {
97
+ return new Set(
98
+ this.values()
99
+ .filter(t => !t.fetched)
100
+ .map(t => t.txHash.toString()),
101
+ );
102
+ }
103
+
104
+ public getInFlightTxHashes(): Set<string> {
105
+ return new Set(
106
+ this.values()
107
+ .filter(t => t.isInFlight())
108
+ .map(t => t.txHash.toString()),
109
+ );
110
+ }
111
+
112
+ public getFetchedTxs(): Tx[] {
113
+ return Array.from(
114
+ this.values()
115
+ .map(t => t.tx)
116
+ .filter(t => !!t),
117
+ );
118
+ }
119
+
120
+ public getTxsPeerHas(peer: PeerId): Set<string> {
121
+ const peerIdStr = peer.toString();
122
+ const txsPeerHas = new Set<string>();
123
+
124
+ this.values().forEach(txMeta => {
125
+ if (txMeta.peers.has(peerIdStr)) {
126
+ txsPeerHas.add(txMeta.txHash.toString());
127
+ }
128
+ });
129
+
130
+ return txsPeerHas;
131
+ }
132
+
133
+ public getTxsToRequestFromThePeer(peer: PeerId): TxHash[] {
134
+ const txsPeerHas = this.getTxsPeerHas(peer);
135
+ const fetchedTxs = this.getFetchedTxHashes();
136
+
137
+ const txsToRequest = txsPeerHas.difference(fetchedTxs);
138
+
139
+ if (txsToRequest.size >= this.txBatchSize) {
140
+ return this.getPrioritizingNotInFlightAndLowerRequestCount(Array.from(txsToRequest))
141
+ .map(t => t.txHash)
142
+ .slice(0, this.txBatchSize);
143
+ }
144
+
145
+ // Otherwise fill the txs to request till txBatchSize with random txs we are missing
146
+ // Who knows, maybe we get lucky and peer received these txs in the meantime
147
+
148
+ const countToFill = this.txBatchSize - txsToRequest.size;
149
+ const txsToFill = this.getPrioritizingNotInFlightAndLowerRequestCount(
150
+ Array.from(this.getMissingTxHashes().difference(txsToRequest)),
151
+ )
152
+ .slice(0, countToFill)
153
+ .map(t => t.txHash);
154
+
155
+ return [...Array.from(txsToRequest).map(t => TxHash.fromString(t)), ...txsToFill];
156
+ }
157
+
158
+ public markRequested(txHash: TxHash) {
159
+ this.get(txHash.toString())?.markAsRequested();
160
+ }
161
+
162
+ /*
163
+ * This should be called only when requesting tx from smart peer
164
+ * Because the smart peer should return this tx, whereas
165
+ * "dumb" peer might return it, or might not - we don't know
166
+ * */
167
+ public markInFlightBySmartPeer(txHash: TxHash) {
168
+ this.get(txHash.toString())?.markInFlight();
169
+ }
170
+
171
+ /*
172
+ * This should be called only when requesting tx from smart peer
173
+ * Because the smart peer should return this tx, whereas
174
+ * "dumb" peer might return it, or might not - we don't know*/
175
+ public markNotInFlightBySmartPeer(txHash: TxHash) {
176
+ this.get(txHash.toString())?.markNotInFlight();
177
+ }
178
+
179
+ public alreadyFetched(txHash: TxHash): boolean {
180
+ return this.get(txHash.toString())?.fetched ?? false;
181
+ }
182
+
183
+ public markFetched(peerId: PeerId, tx: Tx): boolean {
184
+ const txHashStr = tx.txHash.toString();
185
+ const txMeta = this.get(txHashStr);
186
+ if (!txMeta) {
187
+ //TODO: what to do about peer which sent txs we didn't request?
188
+ // 1. don't request from it in the scope of this batch request
189
+ // 2. ban it immediately?
190
+ // 3. track it and ban it?
191
+ //
192
+ return false;
193
+ }
194
+
195
+ return txMeta.markAsFetched(peerId, tx);
196
+ }
197
+
198
+ public markPeerHas(peerId: PeerId, txHash: TxHash[]) {
199
+ const peerIdStr = peerId.toString();
200
+ txHash
201
+ .map(t => t.toString())
202
+ .forEach(txh => {
203
+ const txMeta = this.get(txh);
204
+ if (txMeta) {
205
+ txMeta.peers.add(peerIdStr);
206
+ }
207
+ });
208
+ }
209
+ }
@@ -0,0 +1,205 @@
1
+ import type { DateProvider } from '@aztec/foundation/timer';
2
+ import type { PeerErrorSeverity } from '@aztec/stdlib/p2p';
3
+
4
+ import type { PeerId } from '@libp2p/interface';
5
+
6
+ import { DEFAULT_BATCH_TX_REQUESTER_BAD_PEER_THRESHOLD } from './config.js';
7
+ import type { IPeerPenalizer } from './interface.js';
8
+
9
+ export const RATE_LIMIT_EXCEEDED_PEER_CACHE_TTL = 1000; // 1s
10
+
11
+ export interface IPeerCollection {
12
+ getAllPeers(): Set<string>;
13
+ getSmartPeers(): Set<string>;
14
+ markPeerSmart(peerId: PeerId): void;
15
+ getSmartPeersToQuery(): Array<string>;
16
+ getDumbPeersToQuery(): Array<string>;
17
+ thereAreSomeDumbRatelimitExceededPeers(): boolean;
18
+ penalisePeer(peerId: PeerId, severity: PeerErrorSeverity): void;
19
+ unMarkPeerAsBad(peerId: PeerId): void;
20
+ getBadPeers(): Set<string>;
21
+ markPeerInFlight(peerId: PeerId): void;
22
+ unMarkPeerInFlight(peerId: PeerId): void;
23
+ markPeerRateLimitExceeded(peerId: PeerId): void;
24
+ getRateLimitExceededPeers(): Set<string>;
25
+ getPeerRateLimitDelayMs(peerId: PeerId): number | undefined;
26
+ getNextDumbPeerAvailabilityDelayMs(): number | undefined;
27
+ getNextSmartPeerAvailabilityDelayMs(): number | undefined;
28
+ }
29
+
30
+ export class PeerCollection implements IPeerCollection {
31
+ private readonly peers;
32
+
33
+ private readonly smartPeers = new Set<string>();
34
+ private readonly inFlightPeers = new Set<string>();
35
+ private readonly rateLimitExceededPeers = new Map<string, number>();
36
+ private readonly peerPenaltyCounters = new Map<string, number>();
37
+ private readonly badPeers = new Set<string>();
38
+
39
+ constructor(
40
+ initialPeers: PeerId[],
41
+ private readonly pinnedPeerId: PeerId | undefined,
42
+ private readonly dateProvider: DateProvider,
43
+ private readonly badPeerThreshold: number = DEFAULT_BATCH_TX_REQUESTER_BAD_PEER_THRESHOLD,
44
+ private readonly peerPenalizer?: IPeerPenalizer,
45
+ ) {
46
+ this.peers = new Set(initialPeers.map(peer => peer.toString()));
47
+
48
+ // Pinned peer is treaded specially, always mark it as in-flight
49
+ // and never return it as part of smart/dumb peers
50
+ if (this.pinnedPeerId) {
51
+ const peerIdStr = this.pinnedPeerId.toString();
52
+ this.inFlightPeers.add(peerIdStr);
53
+ this.peers.delete(peerIdStr);
54
+ }
55
+ }
56
+
57
+ public getAllPeers(): Set<string> {
58
+ return this.peers;
59
+ }
60
+
61
+ public getSmartPeers(): Set<string> {
62
+ return this.smartPeers;
63
+ }
64
+
65
+ public markPeerSmart(peerId: PeerId): void {
66
+ this.smartPeers.add(peerId.toString());
67
+ }
68
+
69
+ public getSmartPeersToQuery(): Array<string> {
70
+ return Array.from(
71
+ this.smartPeers.difference(this.getBadPeers().union(this.inFlightPeers).union(this.getRateLimitExceededPeers())),
72
+ );
73
+ }
74
+
75
+ public getDumbPeersToQuery(): Array<string> {
76
+ return Array.from(
77
+ this.peers.difference(
78
+ this.smartPeers.union(this.getBadPeers()).union(this.inFlightPeers).union(this.getRateLimitExceededPeers()),
79
+ ),
80
+ );
81
+ }
82
+
83
+ public thereAreSomeDumbRatelimitExceededPeers(): boolean {
84
+ return (
85
+ this.getRateLimitExceededPeers().difference(this.smartPeers.union(this.badPeers).union(this.inFlightPeers)).size >
86
+ 0
87
+ );
88
+ }
89
+
90
+ public markPeerInFlight(peerId: PeerId) {
91
+ this.inFlightPeers.add(peerId.toString());
92
+ }
93
+
94
+ public unMarkPeerInFlight(peerId: PeerId) {
95
+ // Never unmark the pinned peer as in-flight
96
+ if (this.pinnedPeerId && this.pinnedPeerId.toString() === peerId.toString()) {
97
+ return;
98
+ }
99
+ this.inFlightPeers.delete(peerId.toString());
100
+ }
101
+
102
+ public markPeerRateLimitExceeded(peerId: PeerId) {
103
+ const ttl = this.dateProvider.now() + RATE_LIMIT_EXCEEDED_PEER_CACHE_TTL;
104
+ this.rateLimitExceededPeers.set(peerId.toString(), ttl);
105
+ }
106
+
107
+ public getRateLimitExceededPeers(): Set<string> {
108
+ const now = this.dateProvider.now();
109
+ const rateLimitedPeers = new Set<string>();
110
+
111
+ for (const [peerId, expirationTime] of this.rateLimitExceededPeers) {
112
+ if (expirationTime <= now) {
113
+ this.rateLimitExceededPeers.delete(peerId);
114
+ } else {
115
+ rateLimitedPeers.add(peerId);
116
+ }
117
+ }
118
+
119
+ return rateLimitedPeers;
120
+ }
121
+
122
+ public penalisePeer(peerId: PeerId, severity: PeerErrorSeverity): void {
123
+ const key = peerId.toString();
124
+ const newPenaltyCount = (this.peerPenaltyCounters.get(key) ?? 0) + 1;
125
+ this.peerPenaltyCounters.set(key, newPenaltyCount);
126
+ this.peerPenalizer?.penalizePeer(peerId, severity);
127
+ if (newPenaltyCount > this.badPeerThreshold) {
128
+ this.badPeers.add(key);
129
+ }
130
+ }
131
+
132
+ public unMarkPeerAsBad(peerId: PeerId) {
133
+ const key = peerId.toString();
134
+ this.badPeers.delete(key);
135
+ this.peerPenaltyCounters.delete(key);
136
+ }
137
+
138
+ public getBadPeers(): Set<string> {
139
+ return new Set(this.badPeers);
140
+ }
141
+
142
+ public getPeerRateLimitDelayMs(peerId: PeerId): number | undefined {
143
+ const key = peerId.toString();
144
+ const expiry = this.rateLimitExceededPeers.get(key);
145
+ const peerIsNotRateLimited = expiry === undefined;
146
+ if (peerIsNotRateLimited) {
147
+ return undefined;
148
+ }
149
+
150
+ const now = this.dateProvider.now();
151
+ const rateLimitHasExpired = expiry <= now;
152
+ if (rateLimitHasExpired) {
153
+ this.rateLimitExceededPeers.delete(key);
154
+ return undefined;
155
+ }
156
+ return expiry - now;
157
+ }
158
+
159
+ public getNextDumbPeerAvailabilityDelayMs(): number | undefined {
160
+ // Note: this _is_ suboptimal
161
+ // (we could've tracked rate limits ) per dumb/smart peers - different collections
162
+ // but everything is in memory and small scale so this, wile suboptimal is not slow
163
+ return this.getNextRateLimitDelayMs(
164
+ peerIdStr =>
165
+ !this.smartPeers.has(peerIdStr) &&
166
+ !this.getBadPeers().has(peerIdStr) &&
167
+ !this.inFlightPeers.has(peerIdStr) &&
168
+ this.peers.has(peerIdStr),
169
+ );
170
+ }
171
+
172
+ public getNextSmartPeerAvailabilityDelayMs(): number | undefined {
173
+ return this.getNextRateLimitDelayMs(
174
+ peerIdStr =>
175
+ this.smartPeers.has(peerIdStr) && !this.getBadPeers().has(peerIdStr) && !this.inFlightPeers.has(peerIdStr),
176
+ );
177
+ }
178
+
179
+ private getNextRateLimitDelayMs(filter: (peerIdStr: string) => boolean): number | undefined {
180
+ const now = this.dateProvider.now();
181
+ let minExpiry: number | undefined;
182
+
183
+ for (const [peerIdStr, expiry] of this.rateLimitExceededPeers) {
184
+ const rateLimitHasExpired = expiry <= now;
185
+ if (rateLimitHasExpired) {
186
+ this.rateLimitExceededPeers.delete(peerIdStr);
187
+ continue;
188
+ }
189
+
190
+ const peerDoesNotMatchFilter = !filter(peerIdStr);
191
+ if (peerDoesNotMatchFilter) {
192
+ continue;
193
+ }
194
+
195
+ minExpiry = minExpiry === undefined ? expiry : Math.min(minExpiry, expiry);
196
+ }
197
+
198
+ const noRateLimitedPeersMatchFilter = minExpiry === undefined;
199
+ if (noRateLimitedPeersMatchFilter) {
200
+ return undefined;
201
+ }
202
+
203
+ return minExpiry! - now;
204
+ }
205
+ }
@@ -0,0 +1,37 @@
1
+ import type { ClientProtocolCircuitVerifier } from '@aztec/stdlib/interfaces/server';
2
+ import { Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
3
+
4
+ import { createTxReqRespValidator } from '../../../msg_validators/tx_validator/factory.js';
5
+
6
+ export interface BatchRequestTxValidatorConfig {
7
+ l1ChainId: number;
8
+ rollupVersion: number;
9
+ proofVerifier: ClientProtocolCircuitVerifier;
10
+ }
11
+
12
+ export interface IBatchRequestTxValidator {
13
+ validateRequestedTx(tx: Tx): Promise<TxValidationResult>;
14
+ validateRequestedTxs(txs: Tx[]): Promise<TxValidationResult[]>;
15
+ }
16
+
17
+ export class BatchRequestTxValidator implements IBatchRequestTxValidator {
18
+ readonly txValidator: TxValidator;
19
+ constructor(private readonly config: BatchRequestTxValidatorConfig) {
20
+ this.txValidator = BatchRequestTxValidator.createRequestedTxValidator(this.config);
21
+ }
22
+
23
+ public async validateRequestedTx(tx: Tx): Promise<TxValidationResult> {
24
+ return await this.txValidator.validateTx(tx);
25
+ }
26
+
27
+ public async validateRequestedTxs(txs: Tx[]): Promise<TxValidationResult[]> {
28
+ return await Promise.all(txs.map(tx => this.validateRequestedTx(tx)));
29
+ }
30
+
31
+ static createRequestedTxValidator(config: BatchRequestTxValidatorConfig): TxValidator {
32
+ return createTxReqRespValidator(config.proofVerifier, {
33
+ l1ChainId: config.l1ChainId,
34
+ rollupVersion: config.rollupVersion,
35
+ });
36
+ }
37
+ }
@@ -1,24 +1,30 @@
1
- import { type ConfigMapping, numberConfigHelper } from '@aztec/foundation/config';
1
+ import { type ConfigMapping, booleanConfigHelper, numberConfigHelper } from '@aztec/foundation/config';
2
2
 
3
- export const DEFAULT_INDIVIDUAL_REQUEST_TIMEOUT_MS = 2000;
4
- export const DEFAULT_OVERALL_REQUEST_TIMEOUT_MS = 4000;
3
+ export const DEFAULT_INDIVIDUAL_REQUEST_TIMEOUT_MS = 10_000;
4
+ export const DEFAULT_OVERALL_REQUEST_TIMEOUT_MS = 10_000; // Not currently used
5
+ export const DEFAULT_REQRESP_DIAL_TIMEOUT_MS = 5_000;
6
+ export const DEFAULT_OPTIMISTIC_NEGOTIATION = false;
5
7
 
6
8
  // For use in tests.
7
9
  export const DEFAULT_P2P_REQRESP_CONFIG: P2PReqRespConfig = {
8
10
  overallRequestTimeoutMs: DEFAULT_OVERALL_REQUEST_TIMEOUT_MS,
9
11
  individualRequestTimeoutMs: DEFAULT_INDIVIDUAL_REQUEST_TIMEOUT_MS,
12
+ dialTimeoutMs: DEFAULT_REQRESP_DIAL_TIMEOUT_MS,
13
+ p2pOptimisticNegotiation: DEFAULT_OPTIMISTIC_NEGOTIATION,
10
14
  };
11
15
 
12
16
  export interface P2PReqRespConfig {
13
- /**
14
- * The overall timeout for a request response operation.
15
- */
17
+ /** The overall timeout for a request response operation. */
16
18
  overallRequestTimeoutMs: number;
17
19
 
18
- /**
19
- * The timeout for an individual request response peer interaction.
20
- */
20
+ /** The timeout for an individual request response peer interaction. */
21
21
  individualRequestTimeoutMs: number;
22
+
23
+ /** Whether to use optimistic protocol negotiation when dialing to another peer (opposite of `negotiateFully`). */
24
+ p2pOptimisticNegotiation: boolean;
25
+
26
+ /** How long to wait for the dial protocol to establish a connection */
27
+ dialTimeoutMs: number;
22
28
  }
23
29
 
24
30
  export const p2pReqRespConfigMappings: Record<keyof P2PReqRespConfig, ConfigMapping> = {
@@ -32,4 +38,15 @@ export const p2pReqRespConfigMappings: Record<keyof P2PReqRespConfig, ConfigMapp
32
38
  description: 'The timeout for an individual request response peer interaction.',
33
39
  ...numberConfigHelper(DEFAULT_INDIVIDUAL_REQUEST_TIMEOUT_MS),
34
40
  },
41
+ dialTimeoutMs: {
42
+ env: 'P2P_REQRESP_DIAL_TIMEOUT_MS',
43
+ description: 'How long to wait for the dial protocol to establish a connection',
44
+ ...numberConfigHelper(DEFAULT_REQRESP_DIAL_TIMEOUT_MS),
45
+ },
46
+ p2pOptimisticNegotiation: {
47
+ env: 'P2P_REQRESP_OPTIMISTIC_NEGOTIATION',
48
+ description:
49
+ 'Whether to use optimistic protocol negotiation when dialing to another peer (opposite of `negotiateFully`).',
50
+ ...booleanConfigHelper(DEFAULT_OPTIMISTIC_NEGOTIATION),
51
+ },
35
52
  };