@aztec/p2p 0.0.0-test.0 → 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,188 @@
1
+ import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
+ import { type Logger, createLogger } from '@aztec/foundation/log';
3
+ import type { AztecAsyncKVStore } from '@aztec/kv-store';
4
+ import type { L2BlockSource } from '@aztec/stdlib/block';
5
+ import type { ContractDataSource } from '@aztec/stdlib/contract';
6
+ import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
7
+ import { P2PClientType } from '@aztec/stdlib/p2p';
8
+ import type { TelemetryClient } from '@aztec/telemetry-client';
9
+
10
+ import type { GossipsubEvents, GossipsubMessage } from '@chainsafe/libp2p-gossipsub';
11
+ import type { MsgIdStr, PeerIdStr, PublishOpts, TopicStr } from '@chainsafe/libp2p-gossipsub/types';
12
+ import {
13
+ type Libp2pStatus,
14
+ type PeerId,
15
+ type PublishResult,
16
+ type TopicValidatorResult,
17
+ TypedEventEmitter,
18
+ } from '@libp2p/interface';
19
+
20
+ import type { P2PConfig } from '../config.js';
21
+ import type { MemPools } from '../mem_pools/interface.js';
22
+ import { DummyPeerDiscoveryService, DummyPeerManager, DummyReqResp, LibP2PService } from '../services/index.js';
23
+ import type { ReqRespInterface } from '../services/reqresp/interface.js';
24
+ import { GossipSubEvent } from '../types/index.js';
25
+ import type { PubSubLibp2p } from '../util.js';
26
+
27
+ type GossipSubService = PubSubLibp2p['services']['pubsub'];
28
+
29
+ /**
30
+ * Given a mock gossip sub network, returns a factory function that creates an instance LibP2PService connected to it.
31
+ * Designed to be used in tests in P2PClientDeps.p2pServiceFactory.
32
+ */
33
+ export function getMockPubSubP2PServiceFactory<T extends P2PClientType>(
34
+ network: MockGossipSubNetwork,
35
+ ): (...args: Parameters<(typeof LibP2PService<T>)['new']>) => Promise<LibP2PService<T>> {
36
+ return (
37
+ clientType: P2PClientType,
38
+ config: P2PConfig,
39
+ peerId: PeerId,
40
+ deps: {
41
+ packageVersion: string;
42
+ mempools: MemPools;
43
+ l2BlockSource: L2BlockSource & ContractDataSource;
44
+ epochCache: EpochCacheInterface;
45
+ proofVerifier: ClientProtocolCircuitVerifier;
46
+ worldStateSynchronizer: WorldStateSynchronizer;
47
+ peerStore: AztecAsyncKVStore;
48
+ telemetry: TelemetryClient;
49
+ logger: Logger;
50
+ },
51
+ ) => {
52
+ deps.logger.verbose('Creating mock PubSub service');
53
+ const libp2p = new MockPubSub(peerId, network);
54
+ const peerManager = new DummyPeerManager(peerId, network);
55
+ const reqresp: ReqRespInterface = new DummyReqResp();
56
+ const peerDiscoveryService = new DummyPeerDiscoveryService();
57
+ const service = new LibP2PService<T>(
58
+ clientType as T,
59
+ config,
60
+ libp2p,
61
+ peerDiscoveryService,
62
+ reqresp,
63
+ peerManager,
64
+ deps.mempools,
65
+ deps.l2BlockSource,
66
+ deps.epochCache,
67
+ deps.proofVerifier,
68
+ deps.worldStateSynchronizer,
69
+ deps.telemetry,
70
+ deps.logger,
71
+ );
72
+
73
+ return Promise.resolve(service);
74
+ };
75
+ }
76
+
77
+ /**
78
+ * Implementation of PubSub services that relies on a mock gossip sub network.
79
+ * This is used in tests to simulate a gossip sub network without needing a real P2P network.
80
+ * All messages are sent to the mock network which then distributes them to subscribed peers.
81
+ */
82
+ export class MockPubSub implements PubSubLibp2p {
83
+ public status: Libp2pStatus = 'stopped';
84
+
85
+ private gossipSub: GossipSubService;
86
+
87
+ constructor(
88
+ public peerId: PeerId,
89
+ network: MockGossipSubNetwork,
90
+ ) {
91
+ this.gossipSub = new MockGossipSubService(peerId, network);
92
+ }
93
+
94
+ get services() {
95
+ return {
96
+ pubsub: this.gossipSub,
97
+ };
98
+ }
99
+
100
+ start(): void | Promise<void> {
101
+ this.status = 'started';
102
+ return Promise.resolve();
103
+ }
104
+ stop(): void | Promise<void> {
105
+ this.status = 'stopped';
106
+ return Promise.resolve();
107
+ }
108
+ }
109
+
110
+ class MockGossipSubService extends TypedEventEmitter<GossipsubEvents> implements GossipSubService {
111
+ private logger = createLogger('p2p:test:mock-gossipsub');
112
+ public subscribedTopics: Set<TopicStr> = new Set();
113
+ public readonly direct = new Set<string>();
114
+
115
+ constructor(
116
+ public peerId: PeerId,
117
+ private network: MockGossipSubNetwork,
118
+ ) {
119
+ super();
120
+ network.registerPeer(this);
121
+ }
122
+
123
+ score = {
124
+ score: (_peerId: PeerIdStr) => 0,
125
+ };
126
+
127
+ publish(topic: TopicStr, data: Uint8Array, _opts?: PublishOpts): Promise<PublishResult> {
128
+ this.logger.debug(`Publishing message on topic ${topic}`, { topic, sender: this.peerId.toString() });
129
+ this.network.publishToPeers(topic, data, this.peerId);
130
+ return Promise.resolve({ recipients: this.network.getPeers().filter(peer => !this.peerId.equals(peer)) });
131
+ }
132
+
133
+ receive(msg: GossipsubMessage) {
134
+ if (msg.propagationSource.equals(this.peerId)) {
135
+ return; // Ignore messages from self
136
+ }
137
+ this.logger.debug(`Received message on topic ${msg.msg.topic}`, { ...msg });
138
+ this.safeDispatchEvent<GossipsubMessage>(GossipSubEvent.MESSAGE, { detail: msg });
139
+ }
140
+
141
+ subscribe(topic: TopicStr): void {
142
+ this.logger.debug(`Subscribed to topic ${topic}`, { topic });
143
+ this.subscribedTopics.add(topic);
144
+ }
145
+
146
+ reportMessageValidationResult(msgId: MsgIdStr, propagationSource: PeerIdStr, acceptance: TopicValidatorResult): void {
147
+ this.logger.debug(
148
+ `Reported message validation result ${acceptance} for msgId ${msgId} from source ${propagationSource}`,
149
+ { msgId, propagationSource, acceptance },
150
+ );
151
+ }
152
+ }
153
+
154
+ /**
155
+ * Mock gossip sub network used for testing.
156
+ * All instances of MockGossipSubService connected to the same network will instantly receive the same messages.
157
+ */
158
+ export class MockGossipSubNetwork {
159
+ private peers: MockGossipSubService[] = [];
160
+ private nextMsgId = 0;
161
+
162
+ private logger = createLogger('p2p:test:mock-gossipsub-network');
163
+
164
+ public getPeers(): PeerId[] {
165
+ return this.peers.map(peer => peer.peerId);
166
+ }
167
+
168
+ public registerPeer(peer: MockGossipSubService): void {
169
+ this.peers.push(peer);
170
+ }
171
+
172
+ public publishToPeers(topic: TopicStr, data: Uint8Array, sender: PeerId): void {
173
+ const msgId = (this.nextMsgId++).toString();
174
+ this.logger.debug(`Network is distributing message on topic ${topic}`, {
175
+ topic,
176
+ size: data.length,
177
+ sender: sender.toString(),
178
+ msgId,
179
+ });
180
+
181
+ const gossipSubMsg: GossipsubMessage = { msgId, msg: { type: 'unsigned', topic, data }, propagationSource: sender };
182
+ for (const peer of this.peers) {
183
+ if (peer.subscribedTopics.has(topic)) {
184
+ peer.receive(gossipSubMsg);
185
+ }
186
+ }
187
+ }
188
+ }
@@ -0,0 +1,24 @@
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
+ import { getVKTreeRoot } from '@aztec/noir-protocol-circuits-types/vk-tree';
3
+ import { protocolContractsHash } from '@aztec/protocol-contracts';
4
+ import { mockTx } from '@aztec/stdlib/testing';
5
+ import { Tx } from '@aztec/stdlib/tx';
6
+
7
+ import type { P2PConfig } from '../config.js';
8
+
9
+ /**
10
+ * Helper function to create mock transactions with the correct metadata values
11
+ * that will pass validation when sent over the p2p network.
12
+ *
13
+ * @param config - The P2P configuration containing chainId and rollupVersion
14
+ * @param seed - Optional seed for the mock transaction
15
+ * @returns A mock transaction with valid metadata for p2p network transmission
16
+ */
17
+ export const createMockTxWithMetadata = (config: P2PConfig, seed?: number): Promise<Tx> => {
18
+ return mockTx(seed, {
19
+ chainId: new Fr(config.l1ChainId),
20
+ version: new Fr(config.rollupVersion),
21
+ vkTreeRoot: getVKTreeRoot(),
22
+ protocolContractsHash,
23
+ });
24
+ };
@@ -1,15 +1,22 @@
1
1
  import type { EpochCache } from '@aztec/epoch-cache';
2
2
  import { timesParallel } from '@aztec/foundation/collection';
3
+ import { SecretValue } from '@aztec/foundation/config';
4
+ import { createLogger } from '@aztec/foundation/log';
3
5
  import type { DataStoreConfig } from '@aztec/kv-store/config';
4
6
  import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
5
7
  import type { L2BlockSource } from '@aztec/stdlib/block';
6
8
  import { type ChainConfig, emptyChainConfig } from '@aztec/stdlib/config';
7
- import type { ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
9
+ import type { ContractDataSource } from '@aztec/stdlib/contract';
10
+ import type {
11
+ ClientProtocolCircuitVerifier,
12
+ IVCProofVerificationResult,
13
+ WorldStateSynchronizer,
14
+ } from '@aztec/stdlib/interfaces/server';
8
15
  import type { P2PClientType } from '@aztec/stdlib/p2p';
9
16
  import type { Tx } from '@aztec/stdlib/tx';
17
+ import { compressComponentVersions } from '@aztec/stdlib/versioning';
10
18
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
11
19
 
12
- import { SignableENR } from '@chainsafe/enr';
13
20
  import { gossipsub } from '@chainsafe/libp2p-gossipsub';
14
21
  import { noise } from '@chainsafe/libp2p-noise';
15
22
  import { yamux } from '@chainsafe/libp2p-yamux';
@@ -19,6 +26,7 @@ import type { PeerId } from '@libp2p/interface';
19
26
  import { createSecp256k1PeerId } from '@libp2p/peer-id-factory';
20
27
  import { tcp } from '@libp2p/tcp';
21
28
  import { multiaddr } from '@multiformats/multiaddr';
29
+ import { SignableENR } from '@nethermindeth/enr';
22
30
  import getPort from 'get-port';
23
31
  import { type Libp2p, type Libp2pOptions, createLibp2p } from 'libp2p';
24
32
 
@@ -27,17 +35,20 @@ import type { BootnodeConfig, P2PConfig } from '../config.js';
27
35
  import type { MemPools } from '../mem_pools/interface.js';
28
36
  import { DiscV5Service } from '../services/discv5/discV5_service.js';
29
37
  import { LibP2PService } from '../services/libp2p/libp2p_service.js';
30
- import type { PeerScoring } from '../services/peer-manager/peer_scoring.js';
38
+ import { PeerManager } from '../services/peer-manager/peer_manager.js';
39
+ import { PeerScoring } from '../services/peer-manager/peer_scoring.js';
31
40
  import type { P2PReqRespConfig } from '../services/reqresp/config.js';
32
41
  import {
33
42
  ReqRespSubProtocol,
34
43
  type ReqRespSubProtocolHandlers,
44
+ type ReqRespSubProtocolRateLimits,
35
45
  type ReqRespSubProtocolValidators,
36
46
  noopValidator,
37
47
  } from '../services/reqresp/interface.js';
38
- import { pingHandler, statusHandler } from '../services/reqresp/protocols/index.js';
48
+ import { pingHandler } from '../services/reqresp/protocols/index.js';
39
49
  import { ReqResp } from '../services/reqresp/reqresp.js';
40
- import { type PubSubLibp2p, convertToMultiaddr, createLibP2PPeerIdFromPrivateKey } from '../util.js';
50
+ import { type FullLibp2p, type PubSubLibp2p, convertToMultiaddr, createLibP2PPeerIdFromPrivateKey } from '../util.js';
51
+ import { getVersions } from '../versioning.js';
41
52
 
42
53
  /**
43
54
  * Creates a libp2p node, pre configured.
@@ -50,13 +61,13 @@ export async function createLibp2pNode(
50
61
  port?: number,
51
62
  enableGossipSub: boolean = false,
52
63
  start: boolean = true,
53
- ): Promise<Libp2p> {
64
+ ): Promise<FullLibp2p> {
54
65
  port = port ?? (await getPort());
55
66
  const options: Libp2pOptions = {
56
67
  start,
57
68
  addresses: {
58
- listen: [`/ip4/0.0.0.0/tcp/${port}`],
59
- announce: [`/ip4/0.0.0.0/tcp/${port}`],
69
+ listen: [`/ip4/127.0.0.1/tcp/${port}`],
70
+ announce: [`/ip4/127.0.0.1/tcp/${port}`],
60
71
  },
61
72
  connectionEncryption: [noise()],
62
73
  streamMuxers: [yamux()],
@@ -86,7 +97,7 @@ export async function createLibp2pNode(
86
97
  });
87
98
  }
88
99
 
89
- return await createLibp2p(options);
100
+ return (await createLibp2p(options)) as FullLibp2p;
90
101
  }
91
102
 
92
103
  /**
@@ -98,10 +109,10 @@ export async function createLibp2pNode(
98
109
  export async function createTestLibP2PService<T extends P2PClientType>(
99
110
  clientType: T,
100
111
  boostrapAddrs: string[] = [],
101
- l2BlockSource: L2BlockSource,
112
+ archiver: L2BlockSource & ContractDataSource,
102
113
  worldStateSynchronizer: WorldStateSynchronizer,
103
114
  epochCache: EpochCache,
104
- mempools: MemPools<T>,
115
+ mempools: MemPools,
105
116
  telemetry: TelemetryClient,
106
117
  port: number = 0,
107
118
  peerId?: PeerId,
@@ -109,31 +120,53 @@ export async function createTestLibP2PService<T extends P2PClientType>(
109
120
  ) {
110
121
  peerId = peerId ?? (await createSecp256k1PeerId());
111
122
  const config = {
112
- tcpAnnounceAddress: `127.0.0.1:${port}`,
113
- udpAnnounceAddress: `127.0.0.1:${port}`,
114
- tcpListenAddress: `0.0.0.0:${port}`,
115
- udpListenAddress: `0.0.0.0:${port}`,
123
+ p2pIp: `127.0.0.1`,
124
+ p2pPort: port,
116
125
  bootstrapNodes: boostrapAddrs,
117
126
  peerCheckIntervalMS: 1000,
118
127
  maxPeerCount: 5,
119
128
  p2pEnabled: true,
120
- peerIdPrivateKey: Buffer.from(peerId.privateKey!).toString('hex'),
129
+ peerIdPrivateKey: new SecretValue(Buffer.from(peerId.privateKey!).toString('hex')),
121
130
  bootstrapNodeEnrVersionCheck: false,
122
131
  ...chainConfig,
123
132
  } as P2PConfig & DataStoreConfig;
124
- const discoveryService = new DiscV5Service(peerId, config, telemetry);
133
+ const discoveryService = new DiscV5Service(peerId, config, 'test-reqresp-node', telemetry);
125
134
  const proofVerifier = new AlwaysTrueCircuitVerifier();
126
135
 
127
136
  // No bootstrap nodes provided as the libp2p service will register them in the constructor
128
137
  const p2pNode = await createLibp2pNode([], peerId, port, /*enable gossip */ true, /**start */ false);
129
138
 
139
+ // Duplicated setup code from Libp2pService.new
140
+ const peerScoring = new PeerScoring(config);
141
+ const reqresp = new ReqResp(config, p2pNode, peerScoring);
142
+ const versions = getVersions(config);
143
+ const protocolVersion = compressComponentVersions(versions);
144
+ const peerManager = new PeerManager(
145
+ p2pNode,
146
+ discoveryService,
147
+ config,
148
+ telemetry,
149
+ createLogger(`p2p:peer_manager`),
150
+ peerScoring,
151
+ reqresp,
152
+ worldStateSynchronizer,
153
+ protocolVersion,
154
+ epochCache,
155
+ );
156
+
157
+ p2pNode.services.pubsub.score.params.appSpecificWeight = 10;
158
+ p2pNode.services.pubsub.score.params.appSpecificScore = (peerId: string) =>
159
+ peerManager.shouldDisableP2PGossip(peerId) ? -Infinity : peerManager.getPeerScore(peerId);
160
+
130
161
  return new LibP2PService<T>(
131
162
  clientType,
132
163
  config,
133
164
  p2pNode as PubSubLibp2p,
134
165
  discoveryService,
166
+ reqresp,
167
+ peerManager,
135
168
  mempools,
136
- l2BlockSource,
169
+ archiver,
137
170
  epochCache,
138
171
  proofVerifier,
139
172
  worldStateSynchronizer,
@@ -153,10 +186,12 @@ export type ReqRespNode = {
153
186
  // Mock sub protocol handlers
154
187
  export const MOCK_SUB_PROTOCOL_HANDLERS: ReqRespSubProtocolHandlers = {
155
188
  [ReqRespSubProtocol.PING]: pingHandler,
156
- [ReqRespSubProtocol.STATUS]: statusHandler,
189
+ [ReqRespSubProtocol.STATUS]: (_msg: any) => Promise.resolve(Buffer.from('status')),
157
190
  [ReqRespSubProtocol.TX]: (_msg: any) => Promise.resolve(Buffer.from('tx')),
158
191
  [ReqRespSubProtocol.GOODBYE]: (_msg: any) => Promise.resolve(Buffer.from('goodbye')),
159
192
  [ReqRespSubProtocol.BLOCK]: (_msg: any) => Promise.resolve(Buffer.from('block')),
193
+ [ReqRespSubProtocol.AUTH]: (_msg: any) => Promise.resolve(Buffer.from('auth')),
194
+ [ReqRespSubProtocol.BLOCK_TXS]: (_msg: any) => Promise.resolve(Buffer.from('block_txs')),
160
195
  };
161
196
 
162
197
  // By default, all requests are valid
@@ -167,14 +202,20 @@ export const MOCK_SUB_PROTOCOL_VALIDATORS: ReqRespSubProtocolValidators = {
167
202
  [ReqRespSubProtocol.TX]: noopValidator,
168
203
  [ReqRespSubProtocol.GOODBYE]: noopValidator,
169
204
  [ReqRespSubProtocol.BLOCK]: noopValidator,
205
+ [ReqRespSubProtocol.AUTH]: noopValidator,
206
+ [ReqRespSubProtocol.BLOCK_TXS]: noopValidator,
170
207
  };
171
208
 
172
209
  /**
173
210
  * @param numberOfNodes - the number of nodes to create
174
211
  * @returns An array of the created nodes
175
212
  */
176
- export const createNodes = (peerScoring: PeerScoring, numberOfNodes: number): Promise<ReqRespNode[]> => {
177
- return timesParallel(numberOfNodes, () => createReqResp(peerScoring));
213
+ export const createNodes = (
214
+ peerScoring: PeerScoring,
215
+ numberOfNodes: number,
216
+ rateLimits: Partial<ReqRespSubProtocolRateLimits> = {},
217
+ ): Promise<ReqRespNode[]> => {
218
+ return timesParallel(numberOfNodes, () => createReqResp(peerScoring, rateLimits));
178
219
  };
179
220
 
180
221
  export const startNodes = async (
@@ -193,17 +234,19 @@ export const stopNodes = async (nodes: ReqRespNode[]): Promise<void> => {
193
234
  };
194
235
 
195
236
  // Create a req resp node, exposing the underlying p2p node
196
- export const createReqResp = async (peerScoring: PeerScoring): Promise<ReqRespNode> => {
237
+ export const createReqResp = async (
238
+ peerScoring: PeerScoring,
239
+ rateLimits: Partial<ReqRespSubProtocolRateLimits> = {},
240
+ ): Promise<ReqRespNode> => {
197
241
  const p2p = await createLibp2pNode();
198
242
  const config: P2PReqRespConfig = {
199
243
  overallRequestTimeoutMs: 4000,
200
244
  individualRequestTimeoutMs: 2000,
245
+ dialTimeoutMs: 1000,
246
+ p2pOptimisticNegotiation: false,
201
247
  };
202
- const req = new ReqResp(config, p2p, peerScoring);
203
- return {
204
- p2p,
205
- req,
206
- };
248
+ const req = new ReqResp(config, p2p, peerScoring, undefined, rateLimits);
249
+ return { p2p, req };
207
250
  };
208
251
 
209
252
  // Given a node list; hand shake all of the nodes with each other
@@ -221,13 +264,19 @@ export const connectToPeers = async (nodes: ReqRespNode[]): Promise<void> => {
221
264
 
222
265
  // Mock circuit verifier for testing - reimplementation from bb to avoid dependency
223
266
  export class AlwaysTrueCircuitVerifier implements ClientProtocolCircuitVerifier {
224
- verifyProof(_tx: Tx): Promise<boolean> {
225
- return Promise.resolve(true);
267
+ stop(): Promise<void> {
268
+ return Promise.resolve();
269
+ }
270
+ verifyProof(_tx: Tx): Promise<IVCProofVerificationResult> {
271
+ return Promise.resolve({ valid: true, durationMs: 0, totalDurationMs: 0 });
226
272
  }
227
273
  }
228
274
  export class AlwaysFalseCircuitVerifier implements ClientProtocolCircuitVerifier {
229
- verifyProof(_tx: Tx): Promise<boolean> {
230
- return Promise.resolve(false);
275
+ stop(): Promise<void> {
276
+ return Promise.resolve();
277
+ }
278
+ verifyProof(_tx: Tx): Promise<IVCProofVerificationResult> {
279
+ return Promise.resolve({ valid: false, durationMs: 0, totalDurationMs: 0 });
231
280
  }
232
281
  }
233
282
 
@@ -235,12 +284,14 @@ export class AlwaysFalseCircuitVerifier implements ClientProtocolCircuitVerifier
235
284
  export function createBootstrapNodeConfig(privateKey: string, port: number, chainConfig: ChainConfig): BootnodeConfig {
236
285
  return {
237
286
  l1ChainId: chainConfig.l1ChainId,
238
- udpListenAddress: `0.0.0.0:${port}`,
239
- udpAnnounceAddress: `127.0.0.1:${port}`,
240
- peerIdPrivateKey: privateKey,
287
+ p2pIp: '127.0.0.1',
288
+ p2pPort: port,
289
+ peerIdPrivateKey: new SecretValue(privateKey),
241
290
  dataDirectory: undefined,
242
- dataStoreMapSizeKB: 0,
291
+ dataStoreMapSizeKb: 0,
243
292
  bootstrapNodes: [],
293
+ listenAddress: '127.0.0.1',
294
+ queryForIp: false,
244
295
  };
245
296
  }
246
297
 
@@ -263,7 +314,7 @@ export function createBootstrapNodeFromPrivateKey(
263
314
  export async function getBootstrapNodeEnr(privateKey: string, port: number) {
264
315
  const peerId = await createLibP2PPeerIdFromPrivateKey(privateKey);
265
316
  const enr = SignableENR.createFromPeerId(peerId);
266
- const listenAddrUdp = multiaddr(convertToMultiaddr(`127.0.0.1:${port}`, 'udp'));
317
+ const listenAddrUdp = multiaddr(convertToMultiaddr('127.0.0.1', port, 'udp'));
267
318
  enr.setLocationMultiaddr(listenAddrUdp);
268
319
 
269
320
  return enr;
@@ -0,0 +1,64 @@
1
+ import type { BlockNumber } from '@aztec/foundation/branded-types';
2
+ import type { L2Block } from '@aztec/stdlib/block';
3
+ import type { ITxProvider } from '@aztec/stdlib/interfaces/server';
4
+ import type { BlockProposal } from '@aztec/stdlib/p2p';
5
+ import { type Tx, TxHash } from '@aztec/stdlib/tx';
6
+
7
+ import type { PeerId } from '@libp2p/interface';
8
+
9
+ /**
10
+ * Test transaction provider that can be seeded with transactions.
11
+ * Returns seeded txs when requested by hash, useful for testing block
12
+ * proposal handling without requiring a full P2P network.
13
+ */
14
+ export class TestTxProvider implements ITxProvider {
15
+ private txs: Map<string, Tx> = new Map();
16
+
17
+ /** Seed transactions that will be returned when requested. */
18
+ seed(txs: Tx[]) {
19
+ for (const tx of txs) {
20
+ this.txs.set(tx.getTxHash().toString(), tx);
21
+ }
22
+ }
23
+
24
+ /** Clear all seeded transactions. */
25
+ clear() {
26
+ this.txs.clear();
27
+ }
28
+
29
+ /** Returns txs from the seeded collection given their hashes. */
30
+ getAvailableTxs(txHashes: TxHash[]): Promise<{ txs: Tx[]; missingTxs: TxHash[] }> {
31
+ return this.getTxsByHashes(txHashes);
32
+ }
33
+
34
+ /** Get txs for a block proposal, returning any seeded txs that match the requested hashes. */
35
+ getTxsForBlockProposal(
36
+ blockProposal: BlockProposal,
37
+ _blockNumber: BlockNumber,
38
+ _opts: { pinnedPeer: PeerId | undefined; deadline: Date },
39
+ ): Promise<{ txs: Tx[]; missingTxs: TxHash[] }> {
40
+ return this.getTxsByHashes(blockProposal.txHashes);
41
+ }
42
+
43
+ /** Get txs for a block, returning any seeded txs that match the tx effects in the block. */
44
+ getTxsForBlock(block: L2Block, _opts: { deadline: Date }): Promise<{ txs: Tx[]; missingTxs: TxHash[] }> {
45
+ const txHashes = block.body.txEffects.map(txEffect => txEffect.txHash);
46
+ return this.getTxsByHashes(txHashes);
47
+ }
48
+
49
+ private getTxsByHashes(txHashes: TxHash[]): Promise<{ txs: Tx[]; missingTxs: TxHash[] }> {
50
+ const txs: Tx[] = [];
51
+ const missingTxs: TxHash[] = [];
52
+
53
+ for (const txHash of txHashes) {
54
+ const tx = this.txs.get(txHash.toString());
55
+ if (tx) {
56
+ txs.push(tx);
57
+ } else {
58
+ missingTxs.push(txHash);
59
+ }
60
+ }
61
+
62
+ return Promise.resolve({ txs, missingTxs });
63
+ }
64
+ }