@aztec/p2p 0.0.1-commit.c7c42ec → 0.0.1-commit.c80b6263

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 (332) 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 +4 -4
  4. package/dest/client/factory.d.ts +1 -1
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +6 -5
  7. package/dest/client/interface.d.ts +18 -5
  8. package/dest/client/interface.d.ts.map +1 -1
  9. package/dest/client/p2p_client.d.ts +10 -13
  10. package/dest/client/p2p_client.d.ts.map +1 -1
  11. package/dest/client/p2p_client.js +449 -118
  12. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  13. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  14. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
  15. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  16. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  17. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  18. package/dest/config.d.ts +8 -2
  19. package/dest/config.d.ts.map +1 -1
  20. package/dest/config.js +4 -2
  21. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +61 -42
  22. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  23. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  24. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +237 -263
  26. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +21 -18
  27. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  28. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +113 -108
  29. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +17 -16
  30. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  31. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +89 -128
  32. package/dest/mem_pools/attestation_pool/mocks.d.ts +9 -6
  33. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  34. package/dest/mem_pools/attestation_pool/mocks.js +16 -12
  35. package/dest/mem_pools/instrumentation.d.ts +1 -1
  36. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  37. package/dest/mem_pools/instrumentation.js +5 -14
  38. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +15 -10
  39. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  40. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +91 -50
  41. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +19 -5
  42. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -1
  43. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +59 -3
  44. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +79 -5
  45. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -1
  46. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +47 -0
  47. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  48. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  49. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  50. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +2 -2
  51. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -1
  52. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +4 -4
  53. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
  54. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +2 -0
  55. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +2 -2
  56. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -1
  57. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  58. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  59. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  60. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -4
  61. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  62. package/dest/msg_validators/attestation_validator/attestation_validator.js +51 -18
  63. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +5 -5
  64. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  65. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +22 -13
  66. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  67. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  68. package/dest/msg_validators/clock_tolerance.js +37 -0
  69. package/dest/msg_validators/index.d.ts +2 -2
  70. package/dest/msg_validators/index.d.ts.map +1 -1
  71. package/dest/msg_validators/index.js +1 -1
  72. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  73. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  74. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  75. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  76. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  77. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  78. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  79. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  80. package/dest/msg_validators/proposal_validator/index.js +3 -0
  81. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  82. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  83. package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
  84. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  85. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  86. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
  87. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +3 -2
  88. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  89. package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
  90. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  91. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  92. package/dest/msg_validators/tx_validator/data_validator.js +4 -1
  93. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -2
  94. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  95. package/dest/msg_validators/tx_validator/double_spend_validator.js +3 -2
  96. package/dest/msg_validators/tx_validator/factory.d.ts +8 -3
  97. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/factory.js +21 -11
  99. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  100. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  101. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  102. package/dest/msg_validators/tx_validator/gas_validator.d.ts +3 -2
  103. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  104. package/dest/msg_validators/tx_validator/gas_validator.js +11 -16
  105. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  106. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  107. package/dest/msg_validators/tx_validator/index.js +1 -0
  108. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  109. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  110. package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
  111. package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
  112. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  113. package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
  114. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  115. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  116. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  117. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +3 -2
  118. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  119. package/dest/msg_validators/tx_validator/timestamp_validator.js +2 -2
  120. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  121. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  122. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  123. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  124. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  125. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  126. package/dest/services/discv5/discV5_service.js +1 -1
  127. package/dest/services/dummy_service.d.ts +18 -2
  128. package/dest/services/dummy_service.d.ts.map +1 -1
  129. package/dest/services/dummy_service.js +42 -0
  130. package/dest/services/encoding.d.ts +1 -1
  131. package/dest/services/encoding.d.ts.map +1 -1
  132. package/dest/services/encoding.js +6 -5
  133. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  134. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  135. package/dest/services/libp2p/instrumentation.js +30 -72
  136. package/dest/services/libp2p/libp2p_service.d.ts +36 -13
  137. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  138. package/dest/services/libp2p/libp2p_service.js +741 -173
  139. package/dest/services/peer-manager/metrics.d.ts +2 -2
  140. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  141. package/dest/services/peer-manager/metrics.js +21 -26
  142. package/dest/services/peer-manager/peer_manager.d.ts +2 -2
  143. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  144. package/dest/services/peer-manager/peer_manager.js +0 -10
  145. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  146. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  147. package/dest/services/peer-manager/peer_scoring.js +7 -4
  148. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
  149. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  150. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
  151. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  152. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  153. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  154. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  155. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  156. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  157. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
  158. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  159. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
  160. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
  161. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  162. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
  163. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  164. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  165. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  166. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  167. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  168. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  169. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  170. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  171. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  172. package/dest/services/reqresp/constants.d.ts +12 -0
  173. package/dest/services/reqresp/constants.d.ts.map +1 -0
  174. package/dest/services/reqresp/constants.js +7 -0
  175. package/dest/services/reqresp/interface.d.ts +3 -1
  176. package/dest/services/reqresp/interface.d.ts.map +1 -1
  177. package/dest/services/reqresp/metrics.d.ts +6 -5
  178. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  179. package/dest/services/reqresp/metrics.js +17 -21
  180. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  181. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  182. package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
  183. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  184. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  185. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +14 -1
  186. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +15 -3
  187. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  188. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +33 -3
  189. package/dest/services/reqresp/protocols/status.d.ts +1 -1
  190. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  191. package/dest/services/reqresp/protocols/status.js +4 -1
  192. package/dest/services/reqresp/reqresp.d.ts +6 -1
  193. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  194. package/dest/services/reqresp/reqresp.js +460 -46
  195. package/dest/services/service.d.ts +19 -3
  196. package/dest/services/service.d.ts.map +1 -1
  197. package/dest/services/tx_collection/config.d.ts +4 -1
  198. package/dest/services/tx_collection/config.d.ts.map +1 -1
  199. package/dest/services/tx_collection/config.js +9 -1
  200. package/dest/services/tx_collection/fast_tx_collection.d.ts +6 -4
  201. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  202. package/dest/services/tx_collection/fast_tx_collection.js +16 -5
  203. package/dest/services/tx_collection/index.d.ts +2 -1
  204. package/dest/services/tx_collection/index.d.ts.map +1 -1
  205. package/dest/services/tx_collection/index.js +1 -0
  206. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  207. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  208. package/dest/services/tx_collection/instrumentation.js +10 -13
  209. package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
  210. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  211. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  212. package/dest/services/tx_collection/slow_tx_collection.d.ts +3 -3
  213. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  214. package/dest/services/tx_collection/tx_collection.d.ts +8 -8
  215. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  216. package/dest/services/tx_collection/tx_collection.js +5 -5
  217. package/dest/services/tx_provider.d.ts +3 -3
  218. package/dest/services/tx_provider.d.ts.map +1 -1
  219. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  220. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  221. package/dest/services/tx_provider_instrumentation.js +7 -20
  222. package/dest/test-helpers/index.d.ts +3 -1
  223. package/dest/test-helpers/index.d.ts.map +1 -1
  224. package/dest/test-helpers/index.js +2 -0
  225. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  226. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  227. package/dest/test-helpers/test_tx_provider.js +41 -0
  228. package/dest/test-helpers/testbench-utils.d.ts +156 -0
  229. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  230. package/dest/test-helpers/testbench-utils.js +296 -0
  231. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  232. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  233. package/dest/testbench/p2p_client_testbench_worker.js +218 -124
  234. package/dest/testbench/worker_client_manager.d.ts +51 -6
  235. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  236. package/dest/testbench/worker_client_manager.js +226 -39
  237. package/package.json +16 -16
  238. package/src/bootstrap/bootstrap.ts +7 -4
  239. package/src/client/factory.ts +6 -10
  240. package/src/client/interface.ts +19 -4
  241. package/src/client/p2p_client.ts +82 -132
  242. package/src/client/test/tx_proposal_collector/README.md +227 -0
  243. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
  244. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  245. package/src/config.ts +8 -3
  246. package/src/mem_pools/attestation_pool/attestation_pool.ts +68 -41
  247. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +239 -287
  248. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +162 -140
  249. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +141 -164
  250. package/src/mem_pools/attestation_pool/mocks.ts +19 -13
  251. package/src/mem_pools/instrumentation.ts +10 -18
  252. package/src/mem_pools/tx_pool/README.md +28 -13
  253. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +130 -75
  254. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +66 -5
  255. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +119 -4
  256. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  257. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +4 -2
  258. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  259. package/src/msg_validators/attestation_validator/attestation_validator.ts +36 -21
  260. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +19 -16
  261. package/src/msg_validators/clock_tolerance.ts +51 -0
  262. package/src/msg_validators/index.ts +1 -1
  263. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  264. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  265. package/src/msg_validators/proposal_validator/index.ts +3 -0
  266. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  267. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  268. package/src/msg_validators/tx_validator/block_header_validator.ts +7 -4
  269. package/src/msg_validators/tx_validator/data_validator.ts +18 -6
  270. package/src/msg_validators/tx_validator/double_spend_validator.ts +4 -3
  271. package/src/msg_validators/tx_validator/factory.ts +64 -23
  272. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  273. package/src/msg_validators/tx_validator/gas_validator.ts +17 -28
  274. package/src/msg_validators/tx_validator/index.ts +1 -0
  275. package/src/msg_validators/tx_validator/metadata_validator.ts +18 -7
  276. package/src/msg_validators/tx_validator/phases_validator.ts +5 -3
  277. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  278. package/src/msg_validators/tx_validator/timestamp_validator.ts +9 -4
  279. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  280. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  281. package/src/services/discv5/discV5_service.ts +1 -1
  282. package/src/services/dummy_service.ts +51 -0
  283. package/src/services/encoding.ts +5 -4
  284. package/src/services/libp2p/instrumentation.ts +32 -73
  285. package/src/services/libp2p/libp2p_service.ts +404 -154
  286. package/src/services/peer-manager/metrics.ts +22 -26
  287. package/src/services/peer-manager/peer_manager.ts +1 -2
  288. package/src/services/peer-manager/peer_scoring.ts +3 -4
  289. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  290. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
  291. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  292. package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
  293. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
  294. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
  295. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  296. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  297. package/src/services/reqresp/connection-sampler/connection_sampler.ts +19 -1
  298. package/src/services/reqresp/constants.ts +14 -0
  299. package/src/services/reqresp/interface.ts +3 -0
  300. package/src/services/reqresp/metrics.ts +36 -27
  301. package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
  302. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +16 -2
  303. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +46 -4
  304. package/src/services/reqresp/protocols/status.ts +7 -4
  305. package/src/services/reqresp/reqresp.ts +66 -19
  306. package/src/services/service.ts +23 -4
  307. package/src/services/tx_collection/config.ts +15 -1
  308. package/src/services/tx_collection/fast_tx_collection.ts +36 -13
  309. package/src/services/tx_collection/index.ts +5 -0
  310. package/src/services/tx_collection/instrumentation.ts +5 -13
  311. package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
  312. package/src/services/tx_collection/slow_tx_collection.ts +2 -2
  313. package/src/services/tx_collection/tx_collection.ts +8 -8
  314. package/src/services/tx_provider.ts +2 -2
  315. package/src/services/tx_provider_instrumentation.ts +13 -20
  316. package/src/test-helpers/index.ts +2 -0
  317. package/src/test-helpers/test_tx_provider.ts +64 -0
  318. package/src/test-helpers/testbench-utils.ts +372 -0
  319. package/src/testbench/p2p_client_testbench_worker.ts +337 -119
  320. package/src/testbench/worker_client_manager.ts +304 -42
  321. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts +0 -15
  322. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts.map +0 -1
  323. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.js +0 -88
  324. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  325. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  326. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -82
  327. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  328. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  329. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  330. package/src/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.ts +0 -108
  331. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -97
  332. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -1,15 +1,19 @@
1
- import { SecretValue } from '@aztec/foundation/config';
2
1
  import { EthAddress } from '@aztec/foundation/eth-address';
3
2
  import { sleep } from '@aztec/foundation/sleep';
4
3
  import { fork } from 'child_process';
4
+ import { existsSync } from 'fs';
5
5
  import path from 'path';
6
6
  import { fileURLToPath } from 'url';
7
7
  import { getP2PDefaultConfig } from '../config.js';
8
8
  import { generatePeerIdPrivateKeys } from '../test-helpers/generate-peer-id-private-keys.js';
9
9
  import { getPorts } from '../test-helpers/get-ports.js';
10
10
  import { makeEnr, makeEnrs } from '../test-helpers/make-enrs.js';
11
+ import { BENCHMARK_CONSTANTS } from '../test-helpers/testbench-utils.js';
11
12
  const __dirname = path.dirname(fileURLToPath(import.meta.url));
12
- const workerPath = path.join(__dirname, '../../dest/testbench/p2p_client_testbench_worker.js');
13
+ const p2pRoot = path.resolve(__dirname, '../..');
14
+ const workerTsPath = path.join(__dirname, 'p2p_client_testbench_worker.ts');
15
+ const workerJsPath = path.join(p2pRoot, 'dest/testbench/p2p_client_testbench_worker.js');
16
+ const tsconfigPath = path.join(p2pRoot, 'tsconfig.json');
13
17
  const testChainConfig = {
14
18
  l1ChainId: 31337,
15
19
  rollupVersion: 1,
@@ -22,6 +26,7 @@ class WorkerClientManager {
22
26
  peerIdPrivateKeys = [];
23
27
  peerEnrs = [];
24
28
  ports = [];
29
+ peerIds = [];
25
30
  p2pConfig;
26
31
  logger;
27
32
  messageReceivedByClient = [];
@@ -36,12 +41,15 @@ class WorkerClientManager {
36
41
  });
37
42
  }
38
43
  /**
39
- * Creates a client configuration object
44
+ * Creates a client configuration object for IPC.
45
+ * Note: We send the raw peerIdPrivateKey string instead of SecretValue
46
+ * because SecretValue.toJSON() returns '[Redacted]', losing the value.
47
+ * The worker must re-wrap it in SecretValue.
40
48
  */ createClientConfig(clientIndex, port, otherNodes) {
41
49
  return {
42
50
  ...getP2PDefaultConfig(),
43
51
  p2pEnabled: true,
44
- peerIdPrivateKey: new SecretValue(this.peerIdPrivateKeys[clientIndex]),
52
+ peerIdPrivateKey: this.peerIdPrivateKeys[clientIndex],
45
53
  listenAddress: '127.0.0.1',
46
54
  p2pIp: '127.0.0.1',
47
55
  p2pPort: port,
@@ -52,9 +60,26 @@ class WorkerClientManager {
52
60
  };
53
61
  }
54
62
  /**
55
- * Spawns a worker process and returns a promise that resolves when the worker is ready
63
+ * Spawns a worker process and returns a promise that resolves when the worker is ready.
64
+ * Config uses raw string for peerIdPrivateKey (not SecretValue) for IPC serialization.
56
65
  */ spawnWorkerProcess(config, clientIndex) {
57
- const childProcess = fork(workerPath);
66
+ const useCompiled = existsSync(workerJsPath);
67
+ const workerPath = useCompiled ? workerJsPath : workerTsPath;
68
+ const execArgv = [
69
+ ...process.execArgv
70
+ ];
71
+ if (!useCompiled && !execArgv.includes('ts-node/esm')) {
72
+ execArgv.push('--loader', 'ts-node/esm');
73
+ }
74
+ const env = {
75
+ ...process.env,
76
+ TS_NODE_PROJECT: tsconfigPath
77
+ };
78
+ const childProcess = fork(workerPath, {
79
+ cwd: p2pRoot,
80
+ execArgv,
81
+ env
82
+ });
58
83
  childProcess.send({
59
84
  type: 'START',
60
85
  config,
@@ -73,29 +98,54 @@ class WorkerClientManager {
73
98
  });
74
99
  // Create ready signal promise
75
100
  const readySignal = new Promise((resolve, reject)=>{
76
- // Set a timeout to avoid hanging indefinitely
101
+ let resolved = false;
77
102
  const timeout = setTimeout(()=>{
103
+ if (resolved) {
104
+ return;
105
+ }
106
+ resolved = true;
107
+ childProcess.off('message', messageHandler);
108
+ childProcess.off('exit', exitHandler);
78
109
  reject(new Error(`Timeout waiting for worker ${clientIndex} to be ready`));
79
- }, 30000); // 30 second timeout
80
- childProcess.once('message', (msg)=>{
81
- clearTimeout(timeout);
110
+ }, BENCHMARK_CONSTANTS.WORKER_READY_TIMEOUT_MS);
111
+ const messageHandler = (msg)=>{
112
+ if (resolved) {
113
+ return;
114
+ }
115
+ // Only handle READY or ERROR messages; ignore others (e.g., GOSSIP_RECEIVED)
82
116
  if (msg.type === 'READY') {
117
+ resolved = true;
118
+ clearTimeout(timeout);
119
+ childProcess.off('message', messageHandler);
120
+ childProcess.off('exit', exitHandler);
121
+ if (typeof msg.peerId === 'string') {
122
+ this.peerIds[clientIndex] = msg.peerId;
123
+ }
83
124
  resolve();
84
- }
85
- // For future use
86
- if (msg.type === 'ERROR') {
125
+ } else if (msg.type === 'ERROR') {
126
+ resolved = true;
127
+ clearTimeout(timeout);
128
+ childProcess.off('message', messageHandler);
129
+ childProcess.off('exit', exitHandler);
87
130
  reject(new Error(msg.error));
88
131
  }
89
- });
90
- // Also resolve/reject if process exits before sending message
91
- childProcess.once('exit', (code)=>{
132
+ // Ignore other message types and keep waiting for READY/ERROR
133
+ };
134
+ const exitHandler = (code)=>{
135
+ if (resolved) {
136
+ return;
137
+ }
138
+ resolved = true;
92
139
  clearTimeout(timeout);
140
+ childProcess.off('message', messageHandler);
93
141
  if (code === 0) {
94
142
  resolve();
95
143
  } else {
96
144
  reject(new Error(`Worker ${clientIndex} exited with code ${code} before becoming ready`));
97
145
  }
98
- });
146
+ };
147
+ childProcess.on('message', messageHandler);
148
+ childProcess.once('exit', exitHandler);
99
149
  });
100
150
  return [
101
151
  childProcess,
@@ -103,34 +153,46 @@ class WorkerClientManager {
103
153
  ];
104
154
  }
105
155
  /**
106
- * Creates a number of worker clients in separate processes
107
- * All are configured to connect to each other and overrided with the test specific config
156
+ * Creates a number of worker clients in separate processes.
157
+ * All are configured to connect to each other and overridden with the test-specific config.
108
158
  *
109
159
  * @param numberOfClients - The number of clients to create
160
+ * @param options - Optional overrides for seeding/bootstrapping strategy
110
161
  * @returns The ENRs of the created clients
111
- */ async makeWorkerClients(numberOfClients) {
162
+ */ async makeWorkerClients(numberOfClients, options = {}) {
112
163
  try {
164
+ const bootstrapMode = options.bootstrapMode ?? (this.p2pConfig.bootstrapNodesAsFullPeers ? 'all' : 'subset');
165
+ const seedPeerLimit = options.seedPeerLimit ?? 10;
166
+ const batchSize = options.batchSize ?? (bootstrapMode === 'all' ? Math.min(5, numberOfClients) : numberOfClients);
167
+ const batchDelayMs = options.batchDelayMs ?? (bootstrapMode === 'all' ? 500 : 0);
113
168
  this.messageReceivedByClient = new Array(numberOfClients).fill(0);
114
169
  this.peerIdPrivateKeys = generatePeerIdPrivateKeys(numberOfClients);
115
170
  this.ports = await getPorts(numberOfClients);
116
171
  this.peerEnrs = await makeEnrs(this.peerIdPrivateKeys, this.ports, testChainConfig);
172
+ this.peerIds = new Array(numberOfClients);
117
173
  this.processes = [];
118
174
  const readySignals = [];
119
- for(let i = 0; i < numberOfClients; i++){
120
- this.logger.info(`Creating client ${i}`);
121
- // Maximum seed with 10 other peers to allow peer discovery to connect them at a smoother rate
122
- const otherNodes = this.peerEnrs.filter((_, ind)=>ind < Math.min(i, 10));
123
- const config = this.createClientConfig(i, this.ports[i], otherNodes);
124
- const [childProcess, readySignal] = this.spawnWorkerProcess(config, i);
125
- readySignals.push(readySignal);
126
- this.processes.push(childProcess);
175
+ for(let batchStart = 0; batchStart < numberOfClients; batchStart += batchSize){
176
+ const batchEnd = Math.min(batchStart + batchSize, numberOfClients);
177
+ const batchPromises = [];
178
+ for(let i = batchStart; i < batchEnd; i++){
179
+ this.logger.info(`Creating client ${i}`);
180
+ const otherNodes = bootstrapMode === 'all' ? this.peerEnrs.filter((_, ind)=>ind !== i) : this.peerEnrs.filter((_, ind)=>ind < Math.min(i, seedPeerLimit));
181
+ const config = this.createClientConfig(i, this.ports[i], otherNodes);
182
+ const [childProcess, readySignal] = this.spawnWorkerProcess(config, i);
183
+ readySignals.push(readySignal);
184
+ batchPromises.push(readySignal);
185
+ this.processes.push(childProcess);
186
+ }
187
+ await Promise.all(batchPromises);
188
+ if (batchEnd < numberOfClients && batchDelayMs > 0) {
189
+ await sleep(batchDelayMs);
190
+ }
127
191
  }
128
- // Wait for peers to all connect with each other
129
- await sleep(10000);
130
- // Wait for all peers to be booted up with timeout
192
+ await sleep(BENCHMARK_CONSTANTS.PEER_DISCOVERY_WAIT_MS);
131
193
  await Promise.race([
132
194
  Promise.all(readySignals),
133
- new Promise((_, reject)=>setTimeout(()=>reject(new Error('Timeout waiting for all workers to be ready')), 30000))
195
+ new Promise((_, reject)=>setTimeout(()=>reject(new Error('Timeout waiting for all workers to be ready')), BENCHMARK_CONSTANTS.WORKER_READY_TIMEOUT_MS))
134
196
  ]);
135
197
  return this.peerEnrs;
136
198
  } catch (error) {
@@ -172,10 +234,9 @@ class WorkerClientManager {
172
234
  const config = this.createClientConfig(clientIndex, newPort, otherNodes);
173
235
  const [childProcess, readySignal] = this.spawnWorkerProcess(config, clientIndex);
174
236
  this.processes[clientIndex] = childProcess;
175
- // Wait for the process to be ready with a timeout
176
237
  await Promise.race([
177
238
  readySignal,
178
- new Promise((_, reject)=>setTimeout(()=>reject(new Error(`Timeout waiting for client ${clientIndex} to be ready`)), 30000))
239
+ new Promise((_, reject)=>setTimeout(()=>reject(new Error(`Timeout waiting for client ${clientIndex} to be ready`)), BENCHMARK_CONSTANTS.WORKER_READY_TIMEOUT_MS))
179
240
  ]);
180
241
  } catch (error) {
181
242
  this.logger.error(`Error during changePort for client ${clientIndex}:`, error);
@@ -191,15 +252,14 @@ class WorkerClientManager {
191
252
  return Promise.resolve();
192
253
  }
193
254
  return new Promise((resolve)=>{
194
- // Set a timeout for the graceful exit
195
255
  const forceKillTimeout = setTimeout(()=>{
196
256
  this.logger.warn(`Process ${index} didn't exit gracefully, force killing...`);
197
257
  try {
198
- process1.kill('SIGKILL'); // Force kill
258
+ process1.kill('SIGKILL');
199
259
  } catch (e) {
200
260
  this.logger.error(`Error force killing process ${index}:`, e);
201
261
  }
202
- }, 5000); // 5 second timeout for graceful exit
262
+ }, BENCHMARK_CONSTANTS.GRACEFUL_SHUTDOWN_TIMEOUT_MS);
203
263
  // Listen for process exit
204
264
  process1.once('exit', ()=>{
205
265
  clearTimeout(forceKillTimeout);
@@ -228,7 +288,6 @@ class WorkerClientManager {
228
288
  this.logger.info(`Cleaning up ${this.processes.length} worker processes`);
229
289
  // Create array of promises for each process termination
230
290
  const terminationPromises = this.processes.map((process1, index)=>this.terminateProcess(process1, index));
231
- // Wait for all processes to terminate with a timeout
232
291
  try {
233
292
  await Promise.race([
234
293
  Promise.all(terminationPromises),
@@ -245,14 +304,142 @@ class WorkerClientManager {
245
304
  }
246
305
  });
247
306
  resolve();
248
- }, 10000); // 10 second timeout for all processes
307
+ }, BENCHMARK_CONSTANTS.CLEANUP_TIMEOUT_MS);
249
308
  })
250
309
  ]);
251
310
  } catch (error) {
252
311
  this.logger.error('Error during cleanup:', error);
253
312
  }
254
313
  this.processes = [];
314
+ this.peerIds = [];
255
315
  this.logger.info('All worker processes cleaned up');
256
316
  }
317
+ /**
318
+ * Run a req/resp benchmark across all worker clients.
319
+ *
320
+ * This sends a BENCH_REQRESP command to all workers:
321
+ * - Aggregator (client 0) runs the collector and returns timing results
322
+ * - Responders (clients 1..N) populate their tx pools based on distribution
323
+ *
324
+ * All workers generate the same txs deterministically from a shared seed,
325
+ * then filter based on their peerIndex and distribution pattern.
326
+ */ async runReqRespBenchmark(config) {
327
+ const peerCount = this.processes.length;
328
+ if (peerCount < 2) {
329
+ throw new Error('Need at least 2 peers to run req/resp benchmark');
330
+ }
331
+ const seed = config.seed ?? Date.now();
332
+ const blockNumber = config.blockNumber ?? 1;
333
+ const pinnedPeerId = config.pinnedPeerIndex !== undefined ? this.peerIds[config.pinnedPeerIndex] : undefined;
334
+ this.logger.info(`Starting req/resp benchmark: txCount=${config.txCount}, distribution=${config.distribution}, collector=${config.collectorType}`);
335
+ const readyPromises = [];
336
+ for(let i = 1; i < peerCount; i++){
337
+ const cmd = {
338
+ type: 'BENCH_REQRESP',
339
+ txCount: config.txCount,
340
+ peerCount,
341
+ distribution: config.distribution,
342
+ collectorType: config.collectorType,
343
+ timeoutMs: config.timeoutMs,
344
+ isAggregator: false,
345
+ peerIndex: i,
346
+ pinnedPeerIndex: config.pinnedPeerIndex,
347
+ pinnedPeerId,
348
+ blockNumber,
349
+ seed
350
+ };
351
+ this.processes[i].send(cmd);
352
+ readyPromises.push(this.waitForBenchReady(i, 30000));
353
+ }
354
+ await Promise.all(readyPromises);
355
+ this.logger.info('All responder peers ready, starting aggregator benchmark...');
356
+ const aggregatorCmd = {
357
+ type: 'BENCH_REQRESP',
358
+ txCount: config.txCount,
359
+ peerCount,
360
+ distribution: config.distribution,
361
+ collectorType: config.collectorType,
362
+ timeoutMs: config.timeoutMs,
363
+ isAggregator: true,
364
+ peerIndex: 0,
365
+ pinnedPeerIndex: config.pinnedPeerIndex,
366
+ pinnedPeerId,
367
+ blockNumber,
368
+ seed
369
+ };
370
+ this.processes[0].send(aggregatorCmd);
371
+ const result = await this.waitForBenchResult(0, config.timeoutMs + 30000);
372
+ this.logger.info(`Benchmark complete: fetched=${result.fetchedCount}/${config.txCount}, duration=${result.durationMs.toFixed(0)}ms, success=${result.success}`);
373
+ return {
374
+ txCount: config.txCount,
375
+ distribution: config.distribution,
376
+ collector: config.collectorType,
377
+ durationMs: result.durationMs,
378
+ fetchedCount: result.fetchedCount,
379
+ success: result.success,
380
+ error: result.error
381
+ };
382
+ }
383
+ waitForBenchReady(clientIndex, timeoutMs) {
384
+ return new Promise((resolve, reject)=>{
385
+ let resolved = false;
386
+ const handler = (msg)=>{
387
+ if (resolved) {
388
+ return;
389
+ }
390
+ if (msg.type === 'BENCH_READY') {
391
+ resolved = true;
392
+ clearTimeout(timeout);
393
+ this.processes[clientIndex].off('message', handler);
394
+ resolve();
395
+ } else if (msg.type === 'ERROR') {
396
+ resolved = true;
397
+ clearTimeout(timeout);
398
+ this.processes[clientIndex].off('message', handler);
399
+ reject(new Error(`Client ${clientIndex} error: ${msg.error}`));
400
+ }
401
+ };
402
+ const timeout = setTimeout(()=>{
403
+ if (resolved) {
404
+ return;
405
+ }
406
+ resolved = true;
407
+ this.processes[clientIndex].off('message', handler);
408
+ reject(new Error(`Timeout waiting for BENCH_READY from client ${clientIndex}`));
409
+ }, timeoutMs);
410
+ this.processes[clientIndex].on('message', handler);
411
+ });
412
+ }
413
+ waitForBenchResult(clientIndex, timeoutMs) {
414
+ return new Promise((resolve, reject)=>{
415
+ let resolved = false;
416
+ const handler = (msg)=>{
417
+ if (resolved) {
418
+ return;
419
+ }
420
+ if (msg.type === 'BENCH_RESULT') {
421
+ resolved = true;
422
+ clearTimeout(timeout);
423
+ this.processes[clientIndex].off('message', handler);
424
+ resolve(msg);
425
+ } else if (msg.type === 'ERROR') {
426
+ resolved = true;
427
+ clearTimeout(timeout);
428
+ this.processes[clientIndex].off('message', handler);
429
+ reject(new Error(`Client ${clientIndex} error: ${msg.error}`));
430
+ }
431
+ };
432
+ const timeout = setTimeout(()=>{
433
+ if (resolved) {
434
+ return;
435
+ }
436
+ resolved = true;
437
+ this.processes[clientIndex].off('message', handler);
438
+ reject(new Error(`Timeout waiting for BENCH_RESULT from client ${clientIndex}`));
439
+ }, timeoutMs);
440
+ this.processes[clientIndex].on('message', handler);
441
+ });
442
+ }
257
443
  }
258
444
  export { WorkerClientManager, testChainConfig };
445
+ export { COLLECTOR_DISPLAY_NAMES } from './p2p_client_testbench_worker.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aztec/p2p",
3
- "version": "0.0.1-commit.c7c42ec",
3
+ "version": "0.0.1-commit.c80b6263",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./dest/index.js",
@@ -24,7 +24,7 @@
24
24
  "clean": "rm -rf ./dest .tsbuildinfo",
25
25
  "test": "NODE_NO_WARNINGS=1 node --experimental-vm-modules ../node_modules/.bin/jest --passWithNoTests --maxWorkers=${JEST_MAX_WORKERS:-8}",
26
26
  "start": "node ./dest",
27
- "start:dev": "concurrently -k \"tsgo -b -w\" \"nodemon --watch dest --exec yarn start\""
27
+ "start:dev": "concurrently -k \"../scripts/tsc.sh --watch\" \"nodemon --watch dest --exec yarn start\""
28
28
  },
29
29
  "inherits": [
30
30
  "../package.common.json"
@@ -67,17 +67,17 @@
67
67
  ]
68
68
  },
69
69
  "dependencies": {
70
- "@aztec/constants": "0.0.1-commit.c7c42ec",
71
- "@aztec/epoch-cache": "0.0.1-commit.c7c42ec",
72
- "@aztec/ethereum": "0.0.1-commit.c7c42ec",
73
- "@aztec/foundation": "0.0.1-commit.c7c42ec",
74
- "@aztec/kv-store": "0.0.1-commit.c7c42ec",
75
- "@aztec/noir-contracts.js": "0.0.1-commit.c7c42ec",
76
- "@aztec/noir-protocol-circuits-types": "0.0.1-commit.c7c42ec",
77
- "@aztec/protocol-contracts": "0.0.1-commit.c7c42ec",
78
- "@aztec/simulator": "0.0.1-commit.c7c42ec",
79
- "@aztec/stdlib": "0.0.1-commit.c7c42ec",
80
- "@aztec/telemetry-client": "0.0.1-commit.c7c42ec",
70
+ "@aztec/constants": "0.0.1-commit.c80b6263",
71
+ "@aztec/epoch-cache": "0.0.1-commit.c80b6263",
72
+ "@aztec/ethereum": "0.0.1-commit.c80b6263",
73
+ "@aztec/foundation": "0.0.1-commit.c80b6263",
74
+ "@aztec/kv-store": "0.0.1-commit.c80b6263",
75
+ "@aztec/noir-contracts.js": "0.0.1-commit.c80b6263",
76
+ "@aztec/noir-protocol-circuits-types": "0.0.1-commit.c80b6263",
77
+ "@aztec/protocol-contracts": "0.0.1-commit.c80b6263",
78
+ "@aztec/simulator": "0.0.1-commit.c80b6263",
79
+ "@aztec/stdlib": "0.0.1-commit.c80b6263",
80
+ "@aztec/telemetry-client": "0.0.1-commit.c80b6263",
81
81
  "@chainsafe/libp2p-gossipsub": "13.0.0",
82
82
  "@chainsafe/libp2p-noise": "^15.0.0",
83
83
  "@chainsafe/libp2p-yamux": "^6.0.2",
@@ -104,12 +104,12 @@
104
104
  "xxhash-wasm": "^1.1.0"
105
105
  },
106
106
  "devDependencies": {
107
- "@aztec/archiver": "0.0.1-commit.c7c42ec",
108
- "@aztec/world-state": "0.0.1-commit.c7c42ec",
107
+ "@aztec/archiver": "0.0.1-commit.c80b6263",
108
+ "@aztec/world-state": "0.0.1-commit.c80b6263",
109
109
  "@jest/globals": "^30.0.0",
110
110
  "@types/jest": "^30.0.0",
111
111
  "@types/node": "^22.15.17",
112
- "@typescript/native-preview": "7.0.0-dev.20251126.1",
112
+ "@typescript/native-preview": "7.0.0-dev.20260113.1",
113
113
  "get-port": "^7.1.0",
114
114
  "it-drain": "^3.0.5",
115
115
  "it-length": "^3.0.6",
@@ -1,4 +1,4 @@
1
- import { createLogger } from '@aztec/foundation/log';
1
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
2
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
3
3
  import type { P2PBootstrapApi } from '@aztec/stdlib/interfaces/server';
4
4
  import { OtelMetricsAdapter, type TelemetryClient } from '@aztec/telemetry-client';
@@ -18,12 +18,15 @@ import { convertToMultiaddr, getPeerIdPrivateKey, getPublicIp } from '../util.js
18
18
  export class BootstrapNode implements P2PBootstrapApi {
19
19
  private node?: Discv5EventEmitter = undefined;
20
20
  private peerId?: PeerId;
21
+ private logger: Logger;
21
22
 
22
23
  constructor(
23
24
  private store: AztecAsyncKVStore,
24
25
  private telemetry: TelemetryClient,
25
- private logger = createLogger('p2p:bootstrap'),
26
- ) {}
26
+ bindings?: LoggerBindings,
27
+ ) {
28
+ this.logger = createLogger('p2p:bootstrap', bindings);
29
+ }
27
30
 
28
31
  /**
29
32
  * Starts the bootstrap node.
@@ -65,7 +68,7 @@ export class BootstrapNode implements P2PBootstrapApi {
65
68
 
66
69
  this.logger.debug(`Starting bootstrap node ${peerId} listening on ${listenAddrUdp.toString()}`);
67
70
 
68
- const metricsRegistry = new OtelMetricsAdapter(this.telemetry);
71
+ const metricsRegistry = new OtelMetricsAdapter(this.telemetry, this.logger.getBindings());
69
72
  this.node = Discv5.create({
70
73
  enr: ourEnr,
71
74
  peerId,
@@ -62,15 +62,11 @@ export async function createP2PClient<T extends P2PClientType>(
62
62
  );
63
63
  }
64
64
 
65
- const store = deps.store ?? (await createStore(P2P_STORE_NAME, 2, config, createLogger('p2p:lmdb-v2')));
66
- const archive = await createStore(P2P_ARCHIVE_STORE_NAME, 1, config, createLogger('p2p-archive:lmdb-v2'));
67
- const peerStore = await createStore(P2P_PEER_STORE_NAME, 1, config, createLogger('p2p-peer:lmdb-v2'));
68
- const attestationStore = await createStore(
69
- P2P_ATTESTATION_STORE_NAME,
70
- 1,
71
- config,
72
- createLogger('p2p-attestation:lmdb-v2'),
73
- );
65
+ const bindings = logger.getBindings();
66
+ const store = deps.store ?? (await createStore(P2P_STORE_NAME, 2, config, bindings));
67
+ const archive = await createStore(P2P_ARCHIVE_STORE_NAME, 1, config, bindings);
68
+ const peerStore = await createStore(P2P_PEER_STORE_NAME, 1, config, bindings);
69
+ const attestationStore = await createStore(P2P_ATTESTATION_STORE_NAME, 1, config, bindings);
74
70
  const l1Constants = await archiver.getL1Constants();
75
71
 
76
72
  const mempools: MemPools = {
@@ -110,7 +106,7 @@ export async function createP2PClient<T extends P2PClientType>(
110
106
  }
111
107
 
112
108
  const txCollection = new TxCollection(
113
- p2pService,
109
+ p2pService.getBatchTxRequesterService(),
114
110
  nodeSources,
115
111
  l1Constants,
116
112
  mempools.txPool,
@@ -1,6 +1,6 @@
1
1
  import type { EthAddress, L2BlockId } from '@aztec/stdlib/block';
2
2
  import type { P2PApiFull } from '@aztec/stdlib/interfaces/server';
3
- import type { BlockAttestation, BlockProposal, P2PClientType } from '@aztec/stdlib/p2p';
3
+ import type { BlockProposal, CheckpointAttestation, CheckpointProposal, P2PClientType } from '@aztec/stdlib/p2p';
4
4
  import type { Tx, TxHash } from '@aztec/stdlib/tx';
5
5
 
6
6
  import type { PeerId } from '@libp2p/interface';
@@ -13,7 +13,7 @@ import type {
13
13
  ReqRespSubProtocolHandler,
14
14
  ReqRespSubProtocolValidators,
15
15
  } from '../services/reqresp/interface.js';
16
- import type { P2PBlockReceivedCallback } from '../services/service.js';
16
+ import type { P2PBlockReceivedCallback, P2PCheckpointReceivedCallback } from '../services/service.js';
17
17
 
18
18
  /**
19
19
  * Enum defining the possible states of the p2p client.
@@ -50,8 +50,15 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApiFull<T> &
50
50
  */
51
51
  broadcastProposal(proposal: BlockProposal): Promise<void>;
52
52
 
53
- /** Broadcasts block attestations to other peers. */
54
- broadcastAttestations(attestations: BlockAttestation[]): Promise<void>;
53
+ /**
54
+ * Broadcasts a checkpoint proposal (last block in a checkpoint) to other peers.
55
+ *
56
+ * @param proposal - the checkpoint proposal
57
+ */
58
+ broadcastCheckpointProposal(proposal: CheckpointProposal): Promise<void>;
59
+
60
+ /** Broadcasts checkpoint attestations to other peers. */
61
+ broadcastCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void>;
55
62
 
56
63
  /**
57
64
  * Registers a callback from the validator client that determines how to behave when
@@ -63,6 +70,14 @@ export type P2P<T extends P2PClientType = P2PClientType.Full> = P2PApiFull<T> &
63
70
  // ^ This pattern is not my favorite (md)
64
71
  registerBlockProposalHandler(callback: P2PBlockReceivedCallback): void;
65
72
 
73
+ /**
74
+ * Registers a callback from the validator client that determines how to behave when
75
+ * foreign checkpoint proposals are received
76
+ *
77
+ * @param handler - A function taking a received checkpoint proposal and producing attestations
78
+ */
79
+ registerCheckpointProposalHandler(callback: P2PCheckpointReceivedCallback): void;
80
+
66
81
  /**
67
82
  * Request a list of transactions from another peer by their tx hashes.
68
83
  * @param txHashes - Hashes of the txs to query.