@aztec/p2p 0.0.1-commit.b655e406 → 0.0.1-commit.d1f2d6c

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 (366) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +1 -1
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/client/factory.d.ts +2 -2
  4. package/dest/client/factory.d.ts.map +1 -1
  5. package/dest/client/factory.js +2 -3
  6. package/dest/client/index.d.ts +1 -1
  7. package/dest/client/interface.d.ts +18 -3
  8. package/dest/client/interface.d.ts.map +1 -1
  9. package/dest/client/p2p_client.d.ts +16 -37
  10. package/dest/client/p2p_client.d.ts.map +1 -1
  11. package/dest/client/p2p_client.js +464 -126
  12. package/dest/config.d.ts +62 -59
  13. package/dest/config.d.ts.map +1 -1
  14. package/dest/config.js +21 -14
  15. package/dest/enr/generate-enr.d.ts +1 -1
  16. package/dest/enr/index.d.ts +1 -1
  17. package/dest/errors/attestation-pool.error.d.ts +7 -0
  18. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  19. package/dest/errors/attestation-pool.error.js +12 -0
  20. package/dest/errors/reqresp.error.d.ts +1 -1
  21. package/dest/errors/reqresp.error.d.ts.map +1 -1
  22. package/dest/index.d.ts +1 -1
  23. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +77 -36
  24. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  26. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +241 -266
  28. package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +24 -14
  30. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  31. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +123 -95
  32. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +18 -12
  33. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  34. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +91 -108
  35. package/dest/mem_pools/attestation_pool/mocks.d.ts +234 -10
  36. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  37. package/dest/mem_pools/attestation_pool/mocks.js +17 -13
  38. package/dest/mem_pools/index.d.ts +1 -1
  39. package/dest/mem_pools/instrumentation.d.ts +9 -1
  40. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  41. package/dest/mem_pools/instrumentation.js +36 -9
  42. package/dest/mem_pools/interface.d.ts +3 -4
  43. package/dest/mem_pools/interface.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +33 -58
  45. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  46. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +314 -335
  47. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
  48. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  49. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
  50. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
  51. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  52. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
  53. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  54. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  55. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  56. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  57. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  58. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  59. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  60. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  61. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
  62. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  63. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  64. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  65. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  66. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  67. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  68. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  69. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  70. package/dest/mem_pools/tx_pool/index.js +0 -1
  71. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  72. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  73. package/dest/mem_pools/tx_pool/priority.js +6 -1
  74. package/dest/mem_pools/tx_pool/tx_pool.d.ts +11 -6
  75. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  76. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  77. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  78. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +30 -24
  79. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +7 -6
  80. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  81. package/dest/msg_validators/attestation_validator/attestation_validator.js +57 -24
  82. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
  83. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  84. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +71 -0
  85. package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
  86. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
  87. package/dest/msg_validators/attestation_validator/index.js +1 -0
  88. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  89. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  90. package/dest/msg_validators/clock_tolerance.js +37 -0
  91. package/dest/msg_validators/index.d.ts +2 -2
  92. package/dest/msg_validators/index.d.ts.map +1 -1
  93. package/dest/msg_validators/index.js +1 -1
  94. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +1 -1
  95. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -1
  96. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  97. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  98. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  99. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  100. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  101. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  102. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  103. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  104. package/dest/msg_validators/proposal_validator/index.js +3 -0
  105. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  106. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  107. package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
  108. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  109. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  110. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
  111. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  112. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  113. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +1 -1
  114. package/dest/msg_validators/tx_validator/archive_cache.d.ts +2 -2
  115. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  116. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +2 -2
  117. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  118. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  119. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  120. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +1 -1
  121. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  122. package/dest/msg_validators/tx_validator/factory.d.ts +4 -3
  123. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  124. package/dest/msg_validators/tx_validator/factory.js +1 -1
  125. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  126. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  127. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  128. package/dest/msg_validators/tx_validator/gas_validator.d.ts +1 -1
  129. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  130. package/dest/msg_validators/tx_validator/gas_validator.js +8 -14
  131. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  132. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  133. package/dest/msg_validators/tx_validator/index.js +1 -0
  134. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +2 -2
  135. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  136. package/dest/msg_validators/tx_validator/phases_validator.d.ts +1 -1
  137. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  138. package/dest/msg_validators/tx_validator/phases_validator.js +3 -1
  139. package/dest/msg_validators/tx_validator/size_validator.d.ts +6 -0
  140. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  141. package/dest/msg_validators/tx_validator/size_validator.js +20 -0
  142. package/dest/msg_validators/tx_validator/test_utils.d.ts +2 -2
  143. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
  144. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +3 -2
  145. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  146. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +1 -1
  147. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  148. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +1 -1
  149. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  150. package/dest/services/data_store.d.ts +1 -1
  151. package/dest/services/data_store.d.ts.map +1 -1
  152. package/dest/services/discv5/discV5_service.d.ts +1 -1
  153. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  154. package/dest/services/dummy_service.d.ts +6 -2
  155. package/dest/services/dummy_service.d.ts.map +1 -1
  156. package/dest/services/dummy_service.js +3 -0
  157. package/dest/services/encoding.d.ts +1 -1
  158. package/dest/services/encoding.d.ts.map +1 -1
  159. package/dest/services/encoding.js +7 -6
  160. package/dest/services/gossipsub/scoring.d.ts +1 -1
  161. package/dest/services/index.d.ts +1 -1
  162. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  163. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  164. package/dest/services/libp2p/instrumentation.js +26 -72
  165. package/dest/services/libp2p/libp2p_service.d.ts +41 -80
  166. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  167. package/dest/services/libp2p/libp2p_service.js +899 -175
  168. package/dest/services/peer-manager/interface.d.ts +1 -1
  169. package/dest/services/peer-manager/metrics.d.ts +8 -1
  170. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  171. package/dest/services/peer-manager/metrics.js +24 -16
  172. package/dest/services/peer-manager/peer_manager.d.ts +2 -33
  173. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  174. package/dest/services/peer-manager/peer_manager.js +6 -12
  175. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  176. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  177. package/dest/services/peer-manager/peer_scoring.js +37 -2
  178. package/dest/services/reqresp/config.d.ts +1 -1
  179. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +1 -1
  180. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  181. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +1 -4
  182. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  183. package/dest/services/reqresp/constants.d.ts +12 -0
  184. package/dest/services/reqresp/constants.d.ts.map +1 -0
  185. package/dest/services/reqresp/constants.js +7 -0
  186. package/dest/services/reqresp/index.d.ts +1 -1
  187. package/dest/services/reqresp/interface.d.ts +2 -2
  188. package/dest/services/reqresp/interface.d.ts.map +1 -1
  189. package/dest/services/reqresp/interface.js +1 -1
  190. package/dest/services/reqresp/metrics.d.ts +1 -1
  191. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  192. package/dest/services/reqresp/metrics.js +5 -21
  193. package/dest/services/reqresp/protocols/auth.d.ts +2 -2
  194. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
  195. package/dest/services/reqresp/protocols/auth.js +2 -2
  196. package/dest/services/reqresp/protocols/block.d.ts +1 -1
  197. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  198. package/dest/services/reqresp/protocols/block.js +3 -2
  199. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +1 -1
  200. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  201. package/dest/services/reqresp/protocols/block_txs/bitvector.js +7 -0
  202. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  203. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +4 -6
  204. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  205. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +1 -1
  206. package/dest/services/reqresp/protocols/block_txs/index.d.ts +1 -1
  207. package/dest/services/reqresp/protocols/goodbye.d.ts +1 -1
  208. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  209. package/dest/services/reqresp/protocols/index.d.ts +1 -1
  210. package/dest/services/reqresp/protocols/ping.d.ts +1 -1
  211. package/dest/services/reqresp/protocols/status.d.ts +6 -5
  212. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  213. package/dest/services/reqresp/protocols/status.js +7 -3
  214. package/dest/services/reqresp/protocols/tx.d.ts +2 -3
  215. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  216. package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
  217. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +2 -2
  218. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  219. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  220. package/dest/services/reqresp/reqresp.d.ts +1 -41
  221. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  222. package/dest/services/reqresp/reqresp.js +402 -24
  223. package/dest/services/reqresp/status.d.ts +2 -2
  224. package/dest/services/reqresp/status.d.ts.map +1 -1
  225. package/dest/services/service.d.ts +16 -3
  226. package/dest/services/service.d.ts.map +1 -1
  227. package/dest/services/tx_collection/config.d.ts +1 -1
  228. package/dest/services/tx_collection/config.js +1 -1
  229. package/dest/services/tx_collection/fast_tx_collection.d.ts +4 -9
  230. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  231. package/dest/services/tx_collection/index.d.ts +1 -1
  232. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  233. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  234. package/dest/services/tx_collection/instrumentation.js +4 -14
  235. package/dest/services/tx_collection/slow_tx_collection.d.ts +4 -5
  236. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  237. package/dest/services/tx_collection/slow_tx_collection.js +2 -1
  238. package/dest/services/tx_collection/tx_collection.d.ts +7 -7
  239. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  240. package/dest/services/tx_collection/tx_collection_sink.d.ts +3 -3
  241. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  242. package/dest/services/tx_collection/tx_source.d.ts +1 -1
  243. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  244. package/dest/services/tx_provider.d.ts +4 -2
  245. package/dest/services/tx_provider.d.ts.map +1 -1
  246. package/dest/services/tx_provider.js +11 -2
  247. package/dest/services/tx_provider_instrumentation.d.ts +5 -2
  248. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  249. package/dest/services/tx_provider_instrumentation.js +13 -13
  250. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
  251. package/dest/test-helpers/get-ports.d.ts +1 -1
  252. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  253. package/dest/test-helpers/index.d.ts +1 -1
  254. package/dest/test-helpers/make-enrs.d.ts +1 -1
  255. package/dest/test-helpers/make-test-p2p-clients.d.ts +2 -2
  256. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  257. package/dest/test-helpers/mock-pubsub.d.ts +4 -4
  258. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  259. package/dest/test-helpers/mock-tx-helpers.d.ts +2 -2
  260. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -1
  261. package/dest/test-helpers/mock-tx-helpers.js +1 -1
  262. package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
  263. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  264. package/dest/testbench/p2p_client_testbench_worker.d.ts +1 -1
  265. package/dest/testbench/p2p_client_testbench_worker.js +39 -22
  266. package/dest/testbench/parse_log_file.d.ts +1 -1
  267. package/dest/testbench/testbench.d.ts +1 -1
  268. package/dest/testbench/worker_client_manager.d.ts +1 -1
  269. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  270. package/dest/testbench/worker_client_manager.js +6 -1
  271. package/dest/types/index.d.ts +1 -1
  272. package/dest/util.d.ts +2 -1
  273. package/dest/util.d.ts.map +1 -1
  274. package/dest/util.js +11 -2
  275. package/dest/versioning.d.ts +1 -1
  276. package/package.json +19 -18
  277. package/src/client/factory.ts +5 -10
  278. package/src/client/interface.ts +20 -2
  279. package/src/client/p2p_client.ts +108 -155
  280. package/src/config.ts +30 -19
  281. package/src/errors/attestation-pool.error.ts +13 -0
  282. package/src/mem_pools/attestation_pool/attestation_pool.ts +86 -35
  283. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +243 -278
  284. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +175 -111
  285. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +147 -136
  286. package/src/mem_pools/attestation_pool/mocks.ts +21 -15
  287. package/src/mem_pools/instrumentation.ts +47 -10
  288. package/src/mem_pools/interface.ts +2 -4
  289. package/src/mem_pools/tx_pool/README.md +270 -0
  290. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +367 -371
  291. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
  292. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
  293. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  294. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  295. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
  296. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  297. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  298. package/src/mem_pools/tx_pool/index.ts +0 -1
  299. package/src/mem_pools/tx_pool/priority.ts +8 -1
  300. package/src/mem_pools/tx_pool/tx_pool.ts +11 -5
  301. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +23 -17
  302. package/src/msg_validators/attestation_validator/attestation_validator.ts +45 -32
  303. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +88 -0
  304. package/src/msg_validators/attestation_validator/index.ts +1 -0
  305. package/src/msg_validators/clock_tolerance.ts +51 -0
  306. package/src/msg_validators/index.ts +1 -1
  307. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  308. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  309. package/src/msg_validators/proposal_validator/index.ts +3 -0
  310. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  311. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  312. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  313. package/src/msg_validators/tx_validator/block_header_validator.ts +1 -1
  314. package/src/msg_validators/tx_validator/data_validator.ts +12 -4
  315. package/src/msg_validators/tx_validator/factory.ts +3 -2
  316. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  317. package/src/msg_validators/tx_validator/gas_validator.ts +8 -25
  318. package/src/msg_validators/tx_validator/index.ts +1 -0
  319. package/src/msg_validators/tx_validator/metadata_validator.ts +13 -5
  320. package/src/msg_validators/tx_validator/phases_validator.ts +3 -1
  321. package/src/msg_validators/tx_validator/size_validator.ts +18 -0
  322. package/src/msg_validators/tx_validator/test_utils.ts +1 -1
  323. package/src/msg_validators/tx_validator/timestamp_validator.ts +5 -2
  324. package/src/services/dummy_service.ts +6 -0
  325. package/src/services/encoding.ts +6 -5
  326. package/src/services/libp2p/instrumentation.ts +26 -71
  327. package/src/services/libp2p/libp2p_service.ts +580 -160
  328. package/src/services/peer-manager/metrics.ts +27 -16
  329. package/src/services/peer-manager/peer_manager.ts +7 -4
  330. package/src/services/peer-manager/peer_scoring.ts +42 -3
  331. package/src/services/reqresp/connection-sampler/connection_sampler.ts +3 -1
  332. package/src/services/reqresp/constants.ts +14 -0
  333. package/src/services/reqresp/interface.ts +1 -1
  334. package/src/services/reqresp/metrics.ts +7 -23
  335. package/src/services/reqresp/protocols/auth.ts +2 -2
  336. package/src/services/reqresp/protocols/block.ts +3 -2
  337. package/src/services/reqresp/protocols/block_txs/bitvector.ts +9 -0
  338. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +1 -1
  339. package/src/services/reqresp/protocols/status.ts +16 -12
  340. package/src/services/reqresp/protocols/tx.ts +1 -2
  341. package/src/services/service.ts +19 -4
  342. package/src/services/tx_collection/config.ts +1 -1
  343. package/src/services/tx_collection/fast_tx_collection.ts +3 -2
  344. package/src/services/tx_collection/instrumentation.ts +4 -21
  345. package/src/services/tx_collection/slow_tx_collection.ts +5 -4
  346. package/src/services/tx_collection/tx_collection.ts +6 -5
  347. package/src/services/tx_provider.ts +19 -3
  348. package/src/services/tx_provider_instrumentation.ts +18 -14
  349. package/src/test-helpers/mock-pubsub.ts +1 -1
  350. package/src/test-helpers/mock-tx-helpers.ts +1 -1
  351. package/src/test-helpers/reqresp-nodes.ts +1 -1
  352. package/src/testbench/p2p_client_testbench_worker.ts +45 -22
  353. package/src/testbench/worker_client_manager.ts +6 -1
  354. package/src/util.ts +12 -2
  355. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -80
  356. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  357. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -238
  358. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  359. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  360. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -70
  361. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  362. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  363. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  364. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -283
  365. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -81
  366. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -1,20 +1,26 @@
1
1
  import {
2
2
  Attributes,
3
3
  type Gauge,
4
+ type Histogram,
4
5
  Metrics,
5
6
  type TelemetryClient,
6
7
  type Tracer,
7
8
  type UpDownCounter,
8
- ValueType,
9
9
  getTelemetryClient,
10
10
  } from '@aztec/telemetry-client';
11
11
 
12
+ import type { PeerId } from '@libp2p/interface';
13
+
12
14
  import { type GoodByeReason, prettyGoodbyeReason } from '../reqresp/protocols/index.js';
13
15
 
14
16
  export class PeerManagerMetrics {
15
17
  private sentGoodbyes: UpDownCounter;
16
18
  private receivedGoodbyes: UpDownCounter;
17
19
  private peerCount: Gauge;
20
+ private lowScoreDisconnects: UpDownCounter;
21
+ private peerConnectionDuration: Histogram;
22
+
23
+ private peerConnectedAt: Map<string, number> = new Map<string, number>();
18
24
 
19
25
  public readonly tracer: Tracer;
20
26
 
@@ -25,21 +31,11 @@ export class PeerManagerMetrics {
25
31
  this.tracer = telemetryClient.getTracer(name);
26
32
 
27
33
  const meter = telemetryClient.getMeter(name);
28
- this.sentGoodbyes = meter.createUpDownCounter(Metrics.PEER_MANAGER_GOODBYES_SENT, {
29
- description: 'Number of goodbyes sent to peers',
30
- unit: 'peers',
31
- valueType: ValueType.INT,
32
- });
33
- this.receivedGoodbyes = meter.createUpDownCounter(Metrics.PEER_MANAGER_GOODBYES_RECEIVED, {
34
- description: 'Number of goodbyes received from peers',
35
- unit: 'peers',
36
- valueType: ValueType.INT,
37
- });
38
- this.peerCount = meter.createGauge(Metrics.PEER_MANAGER_PEER_COUNT, {
39
- description: 'Number of peers',
40
- unit: 'peers',
41
- valueType: ValueType.INT,
42
- });
34
+ this.sentGoodbyes = meter.createUpDownCounter(Metrics.PEER_MANAGER_GOODBYES_SENT);
35
+ this.receivedGoodbyes = meter.createUpDownCounter(Metrics.PEER_MANAGER_GOODBYES_RECEIVED);
36
+ this.peerCount = meter.createGauge(Metrics.PEER_MANAGER_PEER_COUNT);
37
+ this.lowScoreDisconnects = meter.createUpDownCounter(Metrics.PEER_MANAGER_LOW_SCORE_DISCONNECTS);
38
+ this.peerConnectionDuration = meter.createHistogram(Metrics.PEER_MANAGER_PEER_CONNECTION_DURATION);
43
39
  }
44
40
 
45
41
  public recordGoodbyeSent(reason: GoodByeReason) {
@@ -53,4 +49,19 @@ export class PeerManagerMetrics {
53
49
  public recordPeerCount(count: number) {
54
50
  this.peerCount.record(count);
55
51
  }
52
+
53
+ public recordLowScoreDisconnect(scoreState: 'Banned' | 'Disconnect') {
54
+ this.lowScoreDisconnects.add(1, { [Attributes.P2P_PEER_SCORE_STATE]: scoreState });
55
+ }
56
+
57
+ public peerConnected(id: PeerId) {
58
+ this.peerConnectedAt.set(id.toString(), Date.now());
59
+ }
60
+
61
+ public peerDisconnected(id: PeerId) {
62
+ const connectedAt = this.peerConnectedAt.get(id.toString());
63
+ if (connectedAt) {
64
+ this.peerConnectionDuration.record(Date.now() - connectedAt);
65
+ }
66
+ }
56
67
  }
@@ -1,13 +1,13 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import { makeEthSignDigest, tryRecoverAddress } from '@aztec/foundation/crypto';
2
+ import { makeEthSignDigest, tryRecoverAddress } from '@aztec/foundation/crypto/secp256k1-signer';
3
+ import { Fr } from '@aztec/foundation/curves/bn254';
3
4
  import type { EthAddress } from '@aztec/foundation/eth-address';
4
- import { Fr } from '@aztec/foundation/fields';
5
5
  import { createLogger } from '@aztec/foundation/log';
6
6
  import { bufferToHex } from '@aztec/foundation/string';
7
7
  import { DateProvider } from '@aztec/foundation/timer';
8
8
  import type { PeerInfo, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
9
9
  import type { PeerErrorSeverity } from '@aztec/stdlib/p2p';
10
- import { type TelemetryClient, trackSpan } from '@aztec/telemetry-client';
10
+ import type { TelemetryClient } from '@aztec/telemetry-client';
11
11
 
12
12
  import type { Connection, PeerId } from '@libp2p/interface';
13
13
  import { peerIdFromString } from '@libp2p/peer-id';
@@ -161,7 +161,6 @@ export class PeerManager implements PeerManagerInterface {
161
161
  return this.metrics.tracer;
162
162
  }
163
163
 
164
- @trackSpan('PeerManager.heartbeat')
165
164
  public async heartbeat() {
166
165
  this.heartbeatCounter++;
167
166
  this.peerScoring.decayAllScores();
@@ -278,6 +277,7 @@ export class PeerManager implements PeerManagerInterface {
278
277
  private handleConnectedPeerEvent(e: CustomEvent<PeerId>) {
279
278
  const peerId = e.detail;
280
279
  this.logger.verbose(`Connected to peer ${peerId.toString()}`);
280
+ this.metrics.peerConnected(peerId);
281
281
  if (this.config.p2pDisableStatusHandshake) {
282
282
  return;
283
283
  }
@@ -303,6 +303,7 @@ export class PeerManager implements PeerManagerInterface {
303
303
  */
304
304
  private handleDisconnectedPeerEvent(e: CustomEvent<PeerId>) {
305
305
  const peerId = e.detail;
306
+ this.metrics.peerDisconnected(peerId);
306
307
  this.logger.verbose(`Disconnected from peer ${peerId.toString()}`);
307
308
  const validatorAddress = this.authenticatedPeerIdToValidatorAddress.get(peerId.toString());
308
309
  if (validatorAddress !== undefined) {
@@ -577,9 +578,11 @@ export class PeerManager implements PeerManagerInterface {
577
578
  const score = this.peerScoring.getScoreState(peer.remotePeer.toString());
578
579
  switch (score) {
579
580
  case PeerScoreState.Banned:
581
+ this.metrics.recordLowScoreDisconnect('Banned');
580
582
  void this.goodbyeAndDisconnectPeer(peer.remotePeer, GoodByeReason.BANNED);
581
583
  break;
582
584
  case PeerScoreState.Disconnect:
585
+ this.metrics.recordLowScoreDisconnect('Disconnect');
583
586
  void this.goodbyeAndDisconnectPeer(peer.remotePeer, GoodByeReason.LOW_SCORE);
584
587
  break;
585
588
  case PeerScoreState.Healthy:
@@ -1,6 +1,13 @@
1
1
  import { median } from '@aztec/foundation/collection';
2
2
  import { createLogger } from '@aztec/foundation/log';
3
3
  import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
4
+ import {
5
+ Attributes,
6
+ Metrics,
7
+ type TelemetryClient,
8
+ type UpDownCounter,
9
+ getTelemetryClient,
10
+ } from '@aztec/telemetry-client';
4
11
 
5
12
  import type { PeerId } from '@libp2p/interface';
6
13
 
@@ -30,7 +37,9 @@ export class PeerScoring {
30
37
  private decayFactor = 0.9;
31
38
  peerPenalties: { [key in PeerErrorSeverity]: number };
32
39
 
33
- constructor(config: P2PConfig) {
40
+ private peerStateCounter: UpDownCounter;
41
+
42
+ constructor(config: P2PConfig, telemetry: TelemetryClient = getTelemetryClient()) {
34
43
  const orderedValues = config.peerPenaltyValues?.sort((a, b) => a - b);
35
44
  this.peerPenalties = {
36
45
  [PeerErrorSeverity.HighToleranceError]:
@@ -40,6 +49,10 @@ export class PeerScoring {
40
49
  [PeerErrorSeverity.LowToleranceError]:
41
50
  orderedValues?.[2] ?? DefaultPeerPenalties[PeerErrorSeverity.LowToleranceError],
42
51
  };
52
+
53
+ const meter = telemetry.getMeter('PeerScoring');
54
+
55
+ this.peerStateCounter = meter.createUpDownCounter(Metrics.P2P_PEER_STATE_COUNT);
43
56
  }
44
57
 
45
58
  public penalizePeer(peerId: PeerId, penalty: PeerErrorSeverity) {
@@ -99,7 +112,33 @@ export class PeerScoring {
99
112
  return PeerScoreState.Healthy;
100
113
  }
101
114
 
102
- getStats(): { medianScore: number } {
103
- return { medianScore: median(Array.from(this.scores.values())) ?? 0 };
115
+ getStats(): { medianScore: number; healthyCount: number; disconnectCount: number; bannedCount: number } {
116
+ const stateCounts = { healthy: 0, disconnect: 0, banned: 0 };
117
+
118
+ for (const peerId of this.scores.keys()) {
119
+ const state = this.getScoreState(peerId);
120
+ switch (state) {
121
+ case PeerScoreState.Healthy:
122
+ stateCounts.healthy++;
123
+ break;
124
+ case PeerScoreState.Disconnect:
125
+ stateCounts.disconnect++;
126
+ break;
127
+ case PeerScoreState.Banned:
128
+ stateCounts.banned++;
129
+ break;
130
+ }
131
+ }
132
+
133
+ this.peerStateCounter.add(stateCounts.healthy, { [Attributes.P2P_PEER_SCORE_STATE]: 'Healthy' });
134
+ this.peerStateCounter.add(stateCounts.disconnect, { [Attributes.P2P_PEER_SCORE_STATE]: 'Disconnect' });
135
+ this.peerStateCounter.add(stateCounts.banned, { [Attributes.P2P_PEER_SCORE_STATE]: 'Banned' });
136
+
137
+ return {
138
+ medianScore: median(Array.from(this.scores.values())) ?? 0,
139
+ healthyCount: stateCounts.healthy,
140
+ disconnectCount: stateCounts.disconnect,
141
+ bannedCount: stateCounts.banned,
142
+ };
104
143
  }
105
144
  }
@@ -261,7 +261,9 @@ export class ConnectionSampler {
261
261
  }
262
262
  } catch (error) {
263
263
  this.logger.error(
264
- `Error cleaning up stale connection to peer ${stream.metadata.peerId?.toString() ?? 'unknown'} stream ${stream.id}`,
264
+ `Error cleaning up stale connection to peer ${stream.metadata.peerId?.toString() ?? 'unknown'} stream ${
265
+ stream.id
266
+ }`,
265
267
  { error },
266
268
  );
267
269
  }
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Constants for P2P message deserialization bounds checking.
3
+ * These constants define maximum allowed sizes during deserialization
4
+ * to prevent DoS attacks via maliciously crafted messages.
5
+ */
6
+
7
+ /** Max transactions per block for deserialization validation (~300x default of 32) */
8
+ export { MAX_TXS_PER_BLOCK } from '@aztec/stdlib/deserialization';
9
+
10
+ /** Max version string length (e.g., "1.0.0-alpha.123") */
11
+ export const MAX_VERSION_STRING_LENGTH = 64;
12
+
13
+ /** Max block hash string length (hex: 0x + 64 chars, with generous headroom) */
14
+ export const MAX_BLOCK_HASH_STRING_LENGTH = 128;
@@ -1,4 +1,4 @@
1
- import { Fr } from '@aztec/foundation/fields';
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import { L2Block } from '@aztec/stdlib/block';
3
3
  import { TxArray, TxHashArray } from '@aztec/stdlib/tx';
4
4
 
@@ -1,5 +1,5 @@
1
1
  // Request response metrics
2
- import { Attributes, Metrics, ValueType } from '@aztec/telemetry-client';
2
+ import { Attributes, Metrics } from '@aztec/telemetry-client';
3
3
  import type { TelemetryClient, Tracer, UpDownCounter } from '@aztec/telemetry-client';
4
4
 
5
5
  export class ReqRespMetrics {
@@ -18,28 +18,12 @@ export class ReqRespMetrics {
18
18
  this.tracer = telemetryClient.getTracer(name);
19
19
 
20
20
  const meter = telemetryClient.getMeter(name);
21
- this.sentRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_SENT_REQUESTS, {
22
- description: 'Number of requests sent to peers',
23
- unit: 'requests',
24
- valueType: ValueType.INT,
25
- });
26
- this.receivedRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_RECEIVED_REQUESTS, {
27
- description: 'Number of requests received from peers',
28
- unit: 'requests',
29
- valueType: ValueType.INT,
30
- });
31
-
32
- this.failedOutboundRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_FAILED_OUTBOUND_REQUESTS, {
33
- description: 'Number of failed outbound requests - nodes not getting valid responses',
34
- unit: 'requests',
35
- valueType: ValueType.INT,
36
- });
37
-
38
- this.failedInboundRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_FAILED_INBOUND_REQUESTS, {
39
- description: 'Number of failed inbound requests - node failing to respond to requests',
40
- unit: 'requests',
41
- valueType: ValueType.INT,
42
- });
21
+ this.sentRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_SENT_REQUESTS);
22
+ this.receivedRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_RECEIVED_REQUESTS);
23
+
24
+ this.failedOutboundRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_FAILED_OUTBOUND_REQUESTS);
25
+
26
+ this.failedInboundRequests = meter.createUpDownCounter(Metrics.P2P_REQ_RESP_FAILED_INBOUND_REQUESTS);
43
27
  }
44
28
 
45
29
  public recordRequestSent(protocol: string) {
@@ -1,7 +1,7 @@
1
1
  import { Buffer32 } from '@aztec/foundation/buffer';
2
- import { keccak256 } from '@aztec/foundation/crypto';
2
+ import { keccak256 } from '@aztec/foundation/crypto/keccak';
3
+ import { Fr } from '@aztec/foundation/curves/bn254';
3
4
  import { Signature } from '@aztec/foundation/eth-signature';
4
- import { Fr } from '@aztec/foundation/fields';
5
5
  import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
6
6
 
7
7
  import { StatusMessage } from './status.js';
@@ -1,4 +1,5 @@
1
- import { Fr } from '@aztec/foundation/fields';
1
+ import { BlockNumber } from '@aztec/foundation/branded-types';
2
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
3
  import type { L2BlockSource } from '@aztec/stdlib/block';
3
4
 
4
5
  import type { PeerId } from '@libp2p/interface';
@@ -27,7 +28,7 @@ export function reqRespBlockHandler(l2BlockSource: L2BlockSource): ReqRespSubPro
27
28
  }
28
29
 
29
30
  try {
30
- const foundBlock = await l2BlockSource.getBlock(Number(blockNumber));
31
+ const foundBlock = await l2BlockSource.getBlock(BlockNumber(Number(blockNumber)));
31
32
  return foundBlock ? foundBlock.toBuffer() : Buffer.alloc(0);
32
33
  } catch (err: any) {
33
34
  throw new ReqRespStatusError(ReqRespStatus.INTERNAL_ERROR, { cause: err });
@@ -1,5 +1,7 @@
1
1
  import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
2
2
 
3
+ import { MAX_TXS_PER_BLOCK } from '../../constants.js';
4
+
3
5
  /**
4
6
  * BitVector helper class for representing and serializing bit vectors
5
7
  */
@@ -80,6 +82,13 @@ export class BitVector {
80
82
  const reader = BufferReader.asReader(buffer);
81
83
  const length = reader.readNumber();
82
84
 
85
+ if (length < 0) {
86
+ throw new Error(`BitVector length ${length} cannot be negative`);
87
+ }
88
+ if (length > MAX_TXS_PER_BLOCK) {
89
+ throw new Error(`BitVector length ${length} exceeds maximum ${MAX_TXS_PER_BLOCK}`);
90
+ }
91
+
83
92
  const bitBuffer = reader.readBytes(BitVector.byteLength(length));
84
93
  return new BitVector(bitBuffer, length);
85
94
  }
@@ -1,4 +1,4 @@
1
- import { Fr } from '@aztec/foundation/fields';
1
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
3
3
  import { TxArray } from '@aztec/stdlib/tx';
4
4
 
@@ -1,3 +1,4 @@
1
+ import { BlockNumber } from '@aztec/foundation/branded-types';
1
2
  import { Buffer32 } from '@aztec/foundation/buffer';
2
3
  import type { Logger } from '@aztec/foundation/log';
3
4
  import { BufferReader, serializeToBuffer } from '@aztec/foundation/serialize';
@@ -6,6 +7,8 @@ import type { WorldStateSyncStatus, WorldStateSynchronizer } from '@aztec/stdlib
6
7
 
7
8
  import type { PeerId } from '@libp2p/interface';
8
9
 
10
+ import { MAX_BLOCK_HASH_STRING_LENGTH, MAX_VERSION_STRING_LENGTH } from '../constants.js';
11
+
9
12
  /*
10
13
  * P2P Status Message
11
14
  * It is used to establish Status handshake between to peers
@@ -15,12 +18,13 @@ import type { PeerId } from '@libp2p/interface';
15
18
  export class StatusMessage {
16
19
  constructor(
17
20
  readonly compressedComponentsVersion: string,
18
- readonly latestBlockNumber: number,
21
+ readonly latestBlockNumber: BlockNumber,
19
22
  readonly latestBlockHash: string,
20
- readonly finalizedBlockNumber: number,
23
+ readonly finalizedBlockNumber: BlockNumber,
24
+ ) {
21
25
  //TODO: add finalizedBlockHash
22
26
  //readonly finalizedBlockHash: string,
23
- ) {}
27
+ }
24
28
 
25
29
  /**
26
30
  * Deserializes the StatusMessage object from a Buffer.
@@ -30,12 +34,12 @@ export class StatusMessage {
30
34
  static fromBuffer(buffer: Buffer | BufferReader): StatusMessage {
31
35
  const reader = BufferReader.asReader(buffer);
32
36
  return new StatusMessage(
33
- reader.readString(), // compressedComponentsVersion
34
- reader.readNumber(), // latestBlockNumber
35
- reader.readString(), // latestBlockHash
36
- reader.readNumber(), // finalizedBlockNumber
37
+ reader.readString(MAX_VERSION_STRING_LENGTH), // compressedComponentsVersion
38
+ BlockNumber(reader.readNumber()), // latestBlockNumber
39
+ reader.readString(MAX_BLOCK_HASH_STRING_LENGTH), // latestBlockHash
40
+ BlockNumber(reader.readNumber()), // finalizedBlockNumber
37
41
  //TODO: add finalizedBlockHash
38
- //reader.readString(), // finalizedBlockHash
42
+ //reader.readString(MAX_BLOCK_HASH_STRING_LENGTH), // finalizedBlockHash
39
43
  );
40
44
  }
41
45
 
@@ -63,9 +67,9 @@ export class StatusMessage {
63
67
  static fromWorldStateSyncStatus(version: string, syncStatus: WorldStateSyncStatus): StatusMessage {
64
68
  return new StatusMessage(
65
69
  version,
66
- syncStatus.latestBlockNumber,
70
+ BlockNumber(syncStatus.latestBlockNumber),
67
71
  syncStatus.latestBlockHash,
68
- syncStatus.finalizedBlockNumber,
72
+ BlockNumber(syncStatus.finalizedBlockNumber),
69
73
  //TODO: add finalizedBlockHash
70
74
  );
71
75
  }
@@ -73,9 +77,9 @@ export class StatusMessage {
73
77
  static random(): StatusMessage {
74
78
  return new StatusMessage(
75
79
  '1.0.0',
76
- Math.floor(Math.random() * 100),
80
+ BlockNumber(Math.floor(Math.random() * 100)),
77
81
  Buffer32.random().toString(),
78
- Math.floor(Math.random() * 100),
82
+ BlockNumber(Math.floor(Math.random() * 100)),
79
83
  //TODO: add finalizedBlockHash
80
84
  );
81
85
  }
@@ -1,5 +1,4 @@
1
1
  import { chunk } from '@aztec/foundation/collection';
2
- import type { P2PClientType } from '@aztec/stdlib/p2p';
3
2
  import { TxArray, TxHash, TxHashArray } from '@aztec/stdlib/tx';
4
3
 
5
4
  import type { PeerId } from '@libp2p/interface';
@@ -16,7 +15,7 @@ import { ReqRespStatus, ReqRespStatusError } from '../status.js';
16
15
  * @param mempools - the mempools
17
16
  * @returns the Tx request handler
18
17
  */
19
- export function reqRespTxHandler<T extends P2PClientType>(mempools: MemPools<T>): ReqRespSubProtocolHandler {
18
+ export function reqRespTxHandler(mempools: MemPools): ReqRespSubProtocolHandler {
20
19
  /**
21
20
  * Handler for tx requests
22
21
  * @param msg - the tx request message
@@ -1,6 +1,6 @@
1
1
  import type { EthAddress } from '@aztec/foundation/eth-address';
2
2
  import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
3
- import type { BlockAttestation, BlockProposal, Gossipable } from '@aztec/stdlib/p2p';
3
+ import type { BlockProposal, CheckpointAttestation, CheckpointProposalCore, Gossipable } from '@aztec/stdlib/p2p';
4
4
  import type { Tx } from '@aztec/stdlib/tx';
5
5
 
6
6
  import type { PeerId } from '@libp2p/interface';
@@ -22,10 +22,23 @@ export enum PeerDiscoveryState {
22
22
  STOPPED = 'stopped',
23
23
  }
24
24
 
25
- export type P2PBlockReceivedCallback = (
26
- block: BlockProposal,
25
+ /**
26
+ * Callback for when a block proposal is received.
27
+ * Validators validate but DO NOT attest to individual blocks - attestations are only for checkpoints.
28
+ * @returns true if the proposal is valid, false otherwise
29
+ */
30
+ export type P2PBlockReceivedCallback = (block: BlockProposal, sender: PeerId) => Promise<boolean>;
31
+
32
+ /**
33
+ * Callback for when a checkpoint proposal is received.
34
+ * The checkpoint proposal is passed as CheckpointProposalCore (without lastBlock) since
35
+ * the lastBlock is extracted and stored separately as a BlockProposal, and the block
36
+ * callback is invoked and awaited before this checkpoint callback.
37
+ */
38
+ export type P2PCheckpointReceivedCallback = (
39
+ checkpoint: CheckpointProposalCore,
27
40
  sender: PeerId,
28
- ) => Promise<BlockAttestation[] | undefined>;
41
+ ) => Promise<CheckpointAttestation[] | undefined>;
29
42
 
30
43
  export type AuthReceivedCallback = (peerId: PeerId, authRequest: AuthRequest) => Promise<AuthResponse | undefined>;
31
44
 
@@ -70,6 +83,8 @@ export interface P2PService {
70
83
  // Leaky abstraction: fix https://github.com/AztecProtocol/aztec-packages/issues/7963
71
84
  registerBlockReceivedCallback(callback: P2PBlockReceivedCallback): void;
72
85
 
86
+ registerCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback): void;
87
+
73
88
  getEnr(): ENR | undefined;
74
89
 
75
90
  getPeers(includePending?: boolean): PeerInfo[];
@@ -1,5 +1,5 @@
1
1
  import { type ConfigMappingsType, booleanConfigHelper, numberConfigHelper } from '@aztec/foundation/config';
2
- import { MAX_RPC_TXS_LEN } from '@aztec/stdlib/interfaces/server';
2
+ import { MAX_RPC_TXS_LEN } from '@aztec/stdlib/interfaces/api-limit';
3
3
 
4
4
  export type TxCollectionConfig = {
5
5
  /** How long to wait before starting reqresp for fast collection */
@@ -1,3 +1,4 @@
1
+ import { BlockNumber } from '@aztec/foundation/branded-types';
1
2
  import { times } from '@aztec/foundation/collection';
2
3
  import { AbortError, TimeoutError } from '@aztec/foundation/error';
3
4
  import { type Logger, createLogger } from '@aztec/foundation/log';
@@ -316,7 +317,7 @@ export class FastTxCollection {
316
317
  * Stop collecting all txs for blocks less than or requal to the block number specified.
317
318
  * To be called when we no longer care about gathering txs up to a certain block, eg when they become proven or finalized.
318
319
  */
319
- public stopCollectingForBlocksUpTo(blockNumber: number): void {
320
+ public stopCollectingForBlocksUpTo(blockNumber: BlockNumber): void {
320
321
  for (const request of this.requests) {
321
322
  if (request.blockInfo.blockNumber <= blockNumber) {
322
323
  request.promise.reject(new AbortError(`Stopped collecting txs up to block ${blockNumber}`));
@@ -329,7 +330,7 @@ export class FastTxCollection {
329
330
  * Stop collecting all txs for blocks greater than the block number specified.
330
331
  * To be called when there is a chain prune and previously mined txs are no longer relevant.
331
332
  */
332
- public stopCollectingForBlocksAfter(blockNumber: number): void {
333
+ public stopCollectingForBlocksAfter(blockNumber: BlockNumber): void {
333
334
  for (const request of this.requests) {
334
335
  if (request.blockInfo.blockNumber > blockNumber) {
335
336
  request.promise.reject(new AbortError(`Stopped collecting txs after block ${blockNumber}`));
@@ -1,11 +1,4 @@
1
- import {
2
- Attributes,
3
- type Histogram,
4
- Metrics,
5
- type TelemetryClient,
6
- type UpDownCounter,
7
- ValueType,
8
- } from '@aztec/telemetry-client';
1
+ import { Attributes, type Histogram, Metrics, type TelemetryClient, type UpDownCounter } from '@aztec/telemetry-client';
9
2
 
10
3
  import type { CollectionMethod } from './tx_collection.js';
11
4
 
@@ -17,21 +10,11 @@ export class TxCollectionInstrumentation {
17
10
  constructor(client: TelemetryClient, name: string) {
18
11
  const meter = client.getMeter(name);
19
12
 
20
- this.txsCollected = meter.createUpDownCounter(Metrics.TX_COLLECTOR_COUNT, {
21
- description: 'The number of txs collected',
22
- });
13
+ this.txsCollected = meter.createUpDownCounter(Metrics.TX_COLLECTOR_COUNT);
23
14
 
24
- this.collectionDurationPerTx = meter.createHistogram(Metrics.TX_COLLECTOR_DURATION_PER_TX, {
25
- unit: 'ms',
26
- description: 'Average duration per tx of an individual tx collection request',
27
- valueType: ValueType.INT,
28
- });
15
+ this.collectionDurationPerTx = meter.createHistogram(Metrics.TX_COLLECTOR_DURATION_PER_TX);
29
16
 
30
- this.collectionDurationPerRequest = meter.createHistogram(Metrics.TX_COLLECTOR_DURATION_PER_REQUEST, {
31
- unit: 'ms',
32
- description: 'Total duration of an individual tx collection request',
33
- valueType: ValueType.INT,
34
- });
17
+ this.collectionDurationPerRequest = meter.createHistogram(Metrics.TX_COLLECTOR_DURATION_PER_REQUEST);
35
18
  }
36
19
 
37
20
  increaseTxsFor(what: CollectionMethod, count: number, duration: number) {
@@ -1,3 +1,4 @@
1
+ import { BlockNumber, EpochNumber, SlotNumber } from '@aztec/foundation/branded-types';
1
2
  import { chunk } from '@aztec/foundation/collection';
2
3
  import { type Logger, createLogger } from '@aztec/foundation/log';
3
4
  import { boundInclusive } from '@aztec/foundation/number';
@@ -202,7 +203,7 @@ export class SlowTxCollection {
202
203
  * Stop collecting all txs for blocks less than or requal to the block number specified.
203
204
  * To be called when we no longer care about gathering txs up to a certain block, eg when they become proven or finalized.
204
205
  */
205
- public stopCollectingForBlocksUpTo(blockNumber: number): void {
206
+ public stopCollectingForBlocksUpTo(blockNumber: BlockNumber): void {
206
207
  for (const [txHash, info] of this.missingTxs.entries()) {
207
208
  if (info.blockNumber <= blockNumber) {
208
209
  this.missingTxs.delete(txHash);
@@ -214,7 +215,7 @@ export class SlowTxCollection {
214
215
  * Stop collecting all txs for blocks greater than the block number specified.
215
216
  * To be called when there is a chain prune and previously mined txs are no longer relevant.
216
217
  */
217
- public stopCollectingForBlocksAfter(blockNumber: number): void {
218
+ public stopCollectingForBlocksAfter(blockNumber: BlockNumber): void {
218
219
  for (const [txHash, info] of this.missingTxs.entries()) {
219
220
  if (info.blockNumber > blockNumber) {
220
221
  this.missingTxs.delete(txHash);
@@ -223,9 +224,9 @@ export class SlowTxCollection {
223
224
  }
224
225
 
225
226
  /** Computes the proof submission deadline for a given slot, a tx mined in this slot is no longer interesting after this deadline */
226
- private getDeadlineForSlot(slotNumber: bigint): Date {
227
+ private getDeadlineForSlot(slotNumber: SlotNumber): Date {
227
228
  const epoch = getEpochAtSlot(slotNumber, this.constants);
228
- const submissionEndEpoch = epoch + BigInt(this.constants.proofSubmissionEpochs);
229
+ const submissionEndEpoch = EpochNumber(epoch + this.constants.proofSubmissionEpochs);
229
230
  const submissionEndTimestamp = getTimestampRangeForEpoch(submissionEndEpoch, this.constants)[1];
230
231
  return new Date(Number(submissionEndTimestamp) * 1000);
231
232
  }
@@ -1,3 +1,4 @@
1
+ import { BlockNumber } from '@aztec/foundation/branded-types';
1
2
  import { compactArray } from '@aztec/foundation/collection';
2
3
  import { type Logger, createLogger } from '@aztec/foundation/log';
3
4
  import { type PromiseWithResolvers, RunningPromise } from '@aztec/foundation/promise';
@@ -21,11 +22,11 @@ import type { TxSource } from './tx_source.js';
21
22
 
22
23
  export type CollectionMethod = 'fast-req-resp' | 'fast-node-rpc' | 'slow-req-resp' | 'slow-node-rpc';
23
24
 
24
- export type MissingTxInfo = { blockNumber: number; deadline: Date; readyForReqResp: boolean };
25
+ export type MissingTxInfo = { blockNumber: BlockNumber; deadline: Date; readyForReqResp: boolean };
25
26
 
26
27
  export type FastCollectionRequestInput =
27
28
  | { type: 'block'; block: L2Block }
28
- | { type: 'proposal'; blockProposal: BlockProposal; blockNumber: number };
29
+ | { type: 'proposal'; blockProposal: BlockProposal; blockNumber: BlockNumber };
29
30
 
30
31
  export type FastCollectionRequest = FastCollectionRequestInput & {
31
32
  missingTxHashes: Set<string>;
@@ -152,7 +153,7 @@ export class TxCollection {
152
153
  /** Collects the set of txs for the given block proposal as fast as possible */
153
154
  public collectFastForProposal(
154
155
  blockProposal: BlockProposal,
155
- blockNumber: number,
156
+ blockNumber: BlockNumber,
156
157
  txHashes: TxHash[] | string[],
157
158
  opts: { deadline: Date; pinnedPeer?: PeerId },
158
159
  ) {
@@ -187,7 +188,7 @@ export class TxCollection {
187
188
  * Stop collecting all txs for blocks less than or requal to the block number specified.
188
189
  * To be called when we no longer care about gathering txs up to a certain block, eg when they become proven or finalized.
189
190
  */
190
- public stopCollectingForBlocksUpTo(blockNumber: number): void {
191
+ public stopCollectingForBlocksUpTo(blockNumber: BlockNumber): void {
191
192
  this.slowCollection.stopCollectingForBlocksUpTo(blockNumber);
192
193
  this.fastCollection.stopCollectingForBlocksUpTo(blockNumber);
193
194
  }
@@ -196,7 +197,7 @@ export class TxCollection {
196
197
  * Stop collecting all txs for blocks greater than the block number specified.
197
198
  * To be called when there is a chain prune and previously mined txs are no longer relevant.
198
199
  */
199
- public stopCollectingForBlocksAfter(blockNumber: number): void {
200
+ public stopCollectingForBlocksAfter(blockNumber: BlockNumber): void {
200
201
  this.slowCollection.stopCollectingForBlocksAfter(blockNumber);
201
202
  this.fastCollection.stopCollectingForBlocksAfter(blockNumber);
202
203
  }