@aztec-labs/p2p 6.0.0-nightly.20260829

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 (607) hide show
  1. package/README.md +134 -0
  2. package/dest/bootstrap/bootstrap.d.ts +39 -0
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -0
  4. package/dest/bootstrap/bootstrap.js +152 -0
  5. package/dest/client/factory.d.ts +32 -0
  6. package/dest/client/factory.d.ts.map +1 -0
  7. package/dest/client/factory.js +125 -0
  8. package/dest/client/index.d.ts +4 -0
  9. package/dest/client/index.d.ts.map +1 -0
  10. package/dest/client/index.js +3 -0
  11. package/dest/client/interface.d.ts +223 -0
  12. package/dest/client/interface.d.ts.map +1 -0
  13. package/dest/client/interface.js +9 -0
  14. package/dest/client/p2p_client.d.ts +202 -0
  15. package/dest/client/p2p_client.d.ts.map +1 -0
  16. package/dest/client/p2p_client.js +1051 -0
  17. package/dest/config.d.ts +295 -0
  18. package/dest/config.d.ts.map +1 -0
  19. package/dest/config.js +458 -0
  20. package/dest/enr/generate-enr.d.ts +17 -0
  21. package/dest/enr/generate-enr.d.ts.map +1 -0
  22. package/dest/enr/generate-enr.js +52 -0
  23. package/dest/enr/index.d.ts +2 -0
  24. package/dest/enr/index.d.ts.map +1 -0
  25. package/dest/enr/index.js +1 -0
  26. package/dest/errors/attestation-pool.error.d.ts +7 -0
  27. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  28. package/dest/errors/attestation-pool.error.js +12 -0
  29. package/dest/errors/p2p-service.error.d.ts +9 -0
  30. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  31. package/dest/errors/p2p-service.error.js +10 -0
  32. package/dest/errors/reqresp.error.d.ts +21 -0
  33. package/dest/errors/reqresp.error.d.ts.map +1 -0
  34. package/dest/errors/reqresp.error.js +23 -0
  35. package/dest/errors/tx-pool.error.d.ts +8 -0
  36. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  37. package/dest/errors/tx-pool.error.js +9 -0
  38. package/dest/index.d.ts +11 -0
  39. package/dest/index.d.ts.map +1 -0
  40. package/dest/index.js +9 -0
  41. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +194 -0
  42. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -0
  43. package/dest/mem_pools/attestation_pool/attestation_pool.js +521 -0
  44. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +3 -0
  45. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -0
  46. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +745 -0
  47. package/dest/mem_pools/attestation_pool/index.d.ts +2 -0
  48. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -0
  49. package/dest/mem_pools/attestation_pool/index.js +1 -0
  50. package/dest/mem_pools/attestation_pool/mocks.d.ts +242 -0
  51. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -0
  52. package/dest/mem_pools/attestation_pool/mocks.js +33 -0
  53. package/dest/mem_pools/index.d.ts +4 -0
  54. package/dest/mem_pools/index.d.ts.map +1 -0
  55. package/dest/mem_pools/index.js +1 -0
  56. package/dest/mem_pools/instrumentation.d.ts +41 -0
  57. package/dest/mem_pools/instrumentation.d.ts.map +1 -0
  58. package/dest/mem_pools/instrumentation.js +120 -0
  59. package/dest/mem_pools/interface.d.ts +10 -0
  60. package/dest/mem_pools/interface.d.ts.map +1 -0
  61. package/dest/mem_pools/interface.js +3 -0
  62. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  63. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  64. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  65. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +48 -0
  66. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  67. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +112 -0
  68. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  69. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  70. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  71. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  72. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  73. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  74. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  75. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  76. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
  77. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  78. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +99 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +11 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  82. package/dest/mem_pools/tx_pool_v2/eviction/index.js +12 -0
  83. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  84. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  85. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +64 -0
  86. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  87. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  88. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  89. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  90. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  91. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +64 -0
  92. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  93. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  94. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +92 -0
  95. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  96. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  97. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +79 -0
  98. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  99. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  100. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  101. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  102. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  103. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  104. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  105. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  106. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  107. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +25 -0
  108. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  109. package/dest/mem_pools/tx_pool_v2/instrumentation.js +67 -0
  110. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +243 -0
  111. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  112. package/dest/mem_pools/tx_pool_v2/interfaces.js +11 -0
  113. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +137 -0
  114. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  115. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +223 -0
  116. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  117. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  118. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  119. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +122 -0
  120. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  121. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +368 -0
  122. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +75 -0
  123. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  124. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +218 -0
  125. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +122 -0
  126. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  127. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +1039 -0
  128. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +17 -0
  129. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -0
  130. package/dest/msg_validators/attestation_validator/attestation_validator.js +111 -0
  131. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +24 -0
  132. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  133. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +75 -0
  134. package/dest/msg_validators/attestation_validator/index.d.ts +3 -0
  135. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -0
  136. package/dest/msg_validators/attestation_validator/index.js +2 -0
  137. package/dest/msg_validators/index.d.ts +4 -0
  138. package/dest/msg_validators/index.d.ts.map +1 -0
  139. package/dest/msg_validators/index.js +3 -0
  140. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +10 -0
  141. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -0
  142. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.js +36 -0
  143. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +16 -0
  144. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  145. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +14 -0
  146. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +16 -0
  147. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  148. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +26 -0
  149. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  150. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  151. package/dest/msg_validators/proposal_validator/index.js +3 -0
  152. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +40 -0
  153. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  154. package/dest/msg_validators/proposal_validator/proposal_validator.js +186 -0
  155. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +7 -0
  156. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -0
  157. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +25 -0
  158. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +4 -0
  159. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -0
  160. package/dest/msg_validators/tx_validator/allowed_public_setup.js +31 -0
  161. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  162. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  163. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  164. package/dest/msg_validators/tx_validator/archive_cache.d.ts +14 -0
  165. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -0
  166. package/dest/msg_validators/tx_validator/archive_cache.js +22 -0
  167. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +25 -0
  168. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -0
  169. package/dest/msg_validators/tx_validator/block_header_validator.js +27 -0
  170. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  171. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  172. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  173. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  174. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  175. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  176. package/dest/msg_validators/tx_validator/data_validator.d.ts +9 -0
  177. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -0
  178. package/dest/msg_validators/tx_validator/data_validator.js +114 -0
  179. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +21 -0
  180. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -0
  181. package/dest/msg_validators/tx_validator/double_spend_validator.js +36 -0
  182. package/dest/msg_validators/tx_validator/factory.d.ts +148 -0
  183. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
  184. package/dest/msg_validators/tx_validator/factory.js +302 -0
  185. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  186. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  187. package/dest/msg_validators/tx_validator/fee_payer_balance.js +24 -0
  188. package/dest/msg_validators/tx_validator/gas_limits_validator.d.ts +73 -0
  189. package/dest/msg_validators/tx_validator/gas_limits_validator.d.ts.map +1 -0
  190. package/dest/msg_validators/tx_validator/gas_limits_validator.js +107 -0
  191. package/dest/msg_validators/tx_validator/gas_validator.d.ts +65 -0
  192. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -0
  193. package/dest/msg_validators/tx_validator/gas_validator.js +107 -0
  194. package/dest/msg_validators/tx_validator/index.d.ts +20 -0
  195. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -0
  196. package/dest/msg_validators/tx_validator/index.js +19 -0
  197. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +15 -0
  198. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -0
  199. package/dest/msg_validators/tx_validator/metadata_validator.js +63 -0
  200. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  201. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  202. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  203. package/dest/msg_validators/tx_validator/phases_validator.d.ts +35 -0
  204. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -0
  205. package/dest/msg_validators/tx_validator/phases_validator.js +141 -0
  206. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  207. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  208. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  209. package/dest/msg_validators/tx_validator/test_utils.d.ts +17 -0
  210. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -0
  211. package/dest/msg_validators/tx_validator/test_utils.js +22 -0
  212. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +30 -0
  213. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -0
  214. package/dest/msg_validators/tx_validator/timestamp_validator.js +32 -0
  215. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +9 -0
  216. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -0
  217. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +24 -0
  218. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +11 -0
  219. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -0
  220. package/dest/msg_validators/tx_validator/tx_proof_validator.js +28 -0
  221. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  222. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  223. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  224. package/dest/services/data_store.d.ts +27 -0
  225. package/dest/services/data_store.d.ts.map +1 -0
  226. package/dest/services/data_store.js +192 -0
  227. package/dest/services/discv5/discV5_service.d.ts +54 -0
  228. package/dest/services/discv5/discV5_service.d.ts.map +1 -0
  229. package/dest/services/discv5/discV5_service.js +337 -0
  230. package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
  231. package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
  232. package/dest/services/discv5/persisted_enr_store.js +145 -0
  233. package/dest/services/dummy_service.d.ts +150 -0
  234. package/dest/services/dummy_service.d.ts.map +1 -0
  235. package/dest/services/dummy_service.js +228 -0
  236. package/dest/services/encoding.d.ts +67 -0
  237. package/dest/services/encoding.d.ts.map +1 -0
  238. package/dest/services/encoding.js +152 -0
  239. package/dest/services/gossipsub/index.d.ts +3 -0
  240. package/dest/services/gossipsub/index.d.ts.map +1 -0
  241. package/dest/services/gossipsub/index.js +2 -0
  242. package/dest/services/gossipsub/scoring.d.ts +25 -0
  243. package/dest/services/gossipsub/scoring.d.ts.map +1 -0
  244. package/dest/services/gossipsub/scoring.js +27 -0
  245. package/dest/services/gossipsub/topic_score_params.d.ts +167 -0
  246. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  247. package/dest/services/gossipsub/topic_score_params.js +336 -0
  248. package/dest/services/index.d.ts +8 -0
  249. package/dest/services/index.d.ts.map +1 -0
  250. package/dest/services/index.js +7 -0
  251. package/dest/services/libp2p/instrumentation.d.ts +25 -0
  252. package/dest/services/libp2p/instrumentation.d.ts.map +1 -0
  253. package/dest/services/libp2p/instrumentation.js +143 -0
  254. package/dest/services/libp2p/libp2p_service.d.ts +250 -0
  255. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -0
  256. package/dest/services/libp2p/libp2p_service.js +1983 -0
  257. package/dest/services/peer-manager/interface.d.ts +23 -0
  258. package/dest/services/peer-manager/interface.d.ts.map +1 -0
  259. package/dest/services/peer-manager/interface.js +1 -0
  260. package/dest/services/peer-manager/metrics.d.ts +23 -0
  261. package/dest/services/peer-manager/metrics.d.ts.map +1 -0
  262. package/dest/services/peer-manager/metrics.js +71 -0
  263. package/dest/services/peer-manager/peer_manager.d.ts +202 -0
  264. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -0
  265. package/dest/services/peer-manager/peer_manager.js +1015 -0
  266. package/dest/services/peer-manager/peer_scoring.d.ts +65 -0
  267. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -0
  268. package/dest/services/peer-manager/peer_scoring.js +239 -0
  269. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +44 -0
  270. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  271. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +534 -0
  272. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  273. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  274. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  275. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  276. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  277. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  278. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +35 -0
  279. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  280. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +136 -0
  281. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +62 -0
  282. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  283. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +176 -0
  284. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +11 -0
  285. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  286. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +7 -0
  287. package/dest/services/reqresp/config.d.ts +30 -0
  288. package/dest/services/reqresp/config.d.ts.map +1 -0
  289. package/dest/services/reqresp/config.js +45 -0
  290. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +76 -0
  291. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -0
  292. package/dest/services/reqresp/connection-sampler/connection_sampler.js +251 -0
  293. package/dest/services/reqresp/constants.d.ts +12 -0
  294. package/dest/services/reqresp/constants.d.ts.map +1 -0
  295. package/dest/services/reqresp/constants.js +7 -0
  296. package/dest/services/reqresp/index.d.ts +7 -0
  297. package/dest/services/reqresp/index.d.ts.map +1 -0
  298. package/dest/services/reqresp/index.js +5 -0
  299. package/dest/services/reqresp/interface.d.ts +174 -0
  300. package/dest/services/reqresp/interface.d.ts.map +1 -0
  301. package/dest/services/reqresp/interface.js +107 -0
  302. package/dest/services/reqresp/metrics.d.ts +16 -0
  303. package/dest/services/reqresp/metrics.d.ts.map +1 -0
  304. package/dest/services/reqresp/metrics.js +50 -0
  305. package/dest/services/reqresp/protocols/auth.d.ts +43 -0
  306. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -0
  307. package/dest/services/reqresp/protocols/auth.js +71 -0
  308. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +35 -0
  309. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -0
  310. package/dest/services/reqresp/protocols/block_txs/bitvector.js +88 -0
  311. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +13 -0
  312. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -0
  313. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +60 -0
  314. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +75 -0
  315. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -0
  316. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +139 -0
  317. package/dest/services/reqresp/protocols/block_txs/index.d.ts +4 -0
  318. package/dest/services/reqresp/protocols/block_txs/index.d.ts.map +1 -0
  319. package/dest/services/reqresp/protocols/block_txs/index.js +3 -0
  320. package/dest/services/reqresp/protocols/goodbye.d.ts +49 -0
  321. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -0
  322. package/dest/services/reqresp/protocols/goodbye.js +87 -0
  323. package/dest/services/reqresp/protocols/index.d.ts +10 -0
  324. package/dest/services/reqresp/protocols/index.d.ts.map +1 -0
  325. package/dest/services/reqresp/protocols/index.js +8 -0
  326. package/dest/services/reqresp/protocols/ping.d.ts +7 -0
  327. package/dest/services/reqresp/protocols/ping.d.ts.map +1 -0
  328. package/dest/services/reqresp/protocols/ping.js +7 -0
  329. package/dest/services/reqresp/protocols/status.d.ts +42 -0
  330. package/dest/services/reqresp/protocols/status.d.ts.map +1 -0
  331. package/dest/services/reqresp/protocols/status.js +78 -0
  332. package/dest/services/reqresp/protocols/tx.d.ts +29 -0
  333. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -0
  334. package/dest/services/reqresp/protocols/tx.js +66 -0
  335. package/dest/services/reqresp/rate-limiter/index.d.ts +2 -0
  336. package/dest/services/reqresp/rate-limiter/index.d.ts.map +1 -0
  337. package/dest/services/reqresp/rate-limiter/index.js +1 -0
  338. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +105 -0
  339. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -0
  340. package/dest/services/reqresp/rate-limiter/rate_limiter.js +194 -0
  341. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +3 -0
  342. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -0
  343. package/dest/services/reqresp/rate-limiter/rate_limits.js +64 -0
  344. package/dest/services/reqresp/reqresp.d.ts +107 -0
  345. package/dest/services/reqresp/reqresp.d.ts.map +1 -0
  346. package/dest/services/reqresp/reqresp.js +887 -0
  347. package/dest/services/reqresp/status.d.ts +37 -0
  348. package/dest/services/reqresp/status.d.ts.map +1 -0
  349. package/dest/services/reqresp/status.js +58 -0
  350. package/dest/services/service.d.ts +168 -0
  351. package/dest/services/service.d.ts.map +1 -0
  352. package/dest/services/service.js +5 -0
  353. package/dest/services/tx_collection/config.d.ts +25 -0
  354. package/dest/services/tx_collection/config.d.ts.map +1 -0
  355. package/dest/services/tx_collection/config.js +59 -0
  356. package/dest/services/tx_collection/file_store_tx_collection.d.ts +37 -0
  357. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  358. package/dest/services/tx_collection/file_store_tx_collection.js +127 -0
  359. package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
  360. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  361. package/dest/services/tx_collection/file_store_tx_source.js +100 -0
  362. package/dest/services/tx_collection/index.d.ts +4 -0
  363. package/dest/services/tx_collection/index.d.ts.map +1 -0
  364. package/dest/services/tx_collection/index.js +3 -0
  365. package/dest/services/tx_collection/instrumentation.d.ts +10 -0
  366. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -0
  367. package/dest/services/tx_collection/instrumentation.js +30 -0
  368. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  369. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  370. package/dest/services/tx_collection/request_tracker.js +84 -0
  371. package/dest/services/tx_collection/tx_collection.d.ts +104 -0
  372. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -0
  373. package/dest/services/tx_collection/tx_collection.js +356 -0
  374. package/dest/services/tx_collection/tx_collection_sink.d.ts +40 -0
  375. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -0
  376. package/dest/services/tx_collection/tx_collection_sink.js +108 -0
  377. package/dest/services/tx_collection/tx_source.d.ts +24 -0
  378. package/dest/services/tx_collection/tx_source.d.ts.map +1 -0
  379. package/dest/services/tx_collection/tx_source.js +56 -0
  380. package/dest/services/tx_file_store/config.d.ts +16 -0
  381. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  382. package/dest/services/tx_file_store/config.js +22 -0
  383. package/dest/services/tx_file_store/index.d.ts +4 -0
  384. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  385. package/dest/services/tx_file_store/index.js +3 -0
  386. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  387. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  388. package/dest/services/tx_file_store/instrumentation.js +29 -0
  389. package/dest/services/tx_file_store/tx_file_store.d.ts +46 -0
  390. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  391. package/dest/services/tx_file_store/tx_file_store.js +142 -0
  392. package/dest/services/tx_provider.d.ts +53 -0
  393. package/dest/services/tx_provider.d.ts.map +1 -0
  394. package/dest/services/tx_provider.js +223 -0
  395. package/dest/services/tx_provider_instrumentation.d.ts +16 -0
  396. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -0
  397. package/dest/services/tx_provider_instrumentation.js +34 -0
  398. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +7 -0
  399. package/dest/test-helpers/generate-peer-id-private-keys.d.ts.map +1 -0
  400. package/dest/test-helpers/generate-peer-id-private-keys.js +13 -0
  401. package/dest/test-helpers/get-ports.d.ts +7 -0
  402. package/dest/test-helpers/get-ports.d.ts.map +1 -0
  403. package/dest/test-helpers/get-ports.js +8 -0
  404. package/dest/test-helpers/index.d.ts +9 -0
  405. package/dest/test-helpers/index.d.ts.map +1 -0
  406. package/dest/test-helpers/index.js +8 -0
  407. package/dest/test-helpers/make-enrs.d.ts +16 -0
  408. package/dest/test-helpers/make-enrs.d.ts.map +1 -0
  409. package/dest/test-helpers/make-enrs.js +31 -0
  410. package/dest/test-helpers/make-test-p2p-clients.d.ts +63 -0
  411. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -0
  412. package/dest/test-helpers/make-test-p2p-clients.js +140 -0
  413. package/dest/test-helpers/mock-pubsub.d.ts +109 -0
  414. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -0
  415. package/dest/test-helpers/mock-pubsub.js +244 -0
  416. package/dest/test-helpers/mock-tx-helpers.d.ts +12 -0
  417. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -0
  418. package/dest/test-helpers/mock-tx-helpers.js +19 -0
  419. package/dest/test-helpers/reqresp-nodes.d.ts +68 -0
  420. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -0
  421. package/dest/test-helpers/reqresp-nodes.js +240 -0
  422. package/dest/test-helpers/test_tx_provider.d.ts +42 -0
  423. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  424. package/dest/test-helpers/test_tx_provider.js +44 -0
  425. package/dest/test-helpers/testbench-utils.d.ts +164 -0
  426. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  427. package/dest/test-helpers/testbench-utils.js +401 -0
  428. package/dest/testbench/p2p_client_testbench_worker.d.ts +26 -0
  429. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -0
  430. package/dest/testbench/p2p_client_testbench_worker.js +364 -0
  431. package/dest/testbench/parse_log_file.d.ts +2 -0
  432. package/dest/testbench/parse_log_file.d.ts.map +1 -0
  433. package/dest/testbench/parse_log_file.js +131 -0
  434. package/dest/testbench/testbench.d.ts +2 -0
  435. package/dest/testbench/testbench.d.ts.map +1 -0
  436. package/dest/testbench/testbench.js +62 -0
  437. package/dest/testbench/worker_client_manager.d.ts +102 -0
  438. package/dest/testbench/worker_client_manager.d.ts.map +1 -0
  439. package/dest/testbench/worker_client_manager.js +492 -0
  440. package/dest/types/index.d.ts +34 -0
  441. package/dest/types/index.d.ts.map +1 -0
  442. package/dest/types/index.js +30 -0
  443. package/dest/util.d.ts +66 -0
  444. package/dest/util.d.ts.map +1 -0
  445. package/dest/util.js +167 -0
  446. package/dest/versioning.d.ts +9 -0
  447. package/dest/versioning.d.ts.map +1 -0
  448. package/dest/versioning.js +17 -0
  449. package/package.json +131 -0
  450. package/src/bootstrap/bootstrap.ts +178 -0
  451. package/src/client/factory.ts +282 -0
  452. package/src/client/index.ts +3 -0
  453. package/src/client/interface.ts +264 -0
  454. package/src/client/p2p_client.ts +846 -0
  455. package/src/client/test/p2p_client.batch_tx_requester.bench.README.md +197 -0
  456. package/src/config.ts +787 -0
  457. package/src/enr/generate-enr.ts +71 -0
  458. package/src/enr/index.ts +1 -0
  459. package/src/errors/attestation-pool.error.ts +13 -0
  460. package/src/errors/p2p-service.error.ts +11 -0
  461. package/src/errors/reqresp.error.ts +29 -0
  462. package/src/errors/tx-pool.error.ts +12 -0
  463. package/src/index.ts +11 -0
  464. package/src/mem_pools/attestation_pool/attestation_pool.ts +648 -0
  465. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +896 -0
  466. package/src/mem_pools/attestation_pool/index.ts +9 -0
  467. package/src/mem_pools/attestation_pool/mocks.ts +56 -0
  468. package/src/mem_pools/index.ts +3 -0
  469. package/src/mem_pools/instrumentation.ts +160 -0
  470. package/src/mem_pools/interface.ts +10 -0
  471. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  472. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  473. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +130 -0
  474. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  475. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  476. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +120 -0
  477. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +126 -0
  478. package/src/mem_pools/tx_pool_v2/eviction/index.ts +28 -0
  479. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +67 -0
  480. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  481. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +72 -0
  482. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +99 -0
  483. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +90 -0
  484. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  485. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  486. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  487. package/src/mem_pools/tx_pool_v2/instrumentation.ts +96 -0
  488. package/src/mem_pools/tx_pool_v2/interfaces.ts +274 -0
  489. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +349 -0
  490. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  491. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +465 -0
  492. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +300 -0
  493. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1242 -0
  494. package/src/msg_validators/attestation_validator/README.md +49 -0
  495. package/src/msg_validators/attestation_validator/attestation_validator.ts +116 -0
  496. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +107 -0
  497. package/src/msg_validators/attestation_validator/index.ts +2 -0
  498. package/src/msg_validators/index.ts +3 -0
  499. package/src/msg_validators/msg_seen_validator/msg_seen_validator.ts +36 -0
  500. package/src/msg_validators/proposal_validator/README.md +123 -0
  501. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +37 -0
  502. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +49 -0
  503. package/src/msg_validators/proposal_validator/index.ts +3 -0
  504. package/src/msg_validators/proposal_validator/proposal_validator.ts +198 -0
  505. package/src/msg_validators/tx_validator/README.md +137 -0
  506. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +24 -0
  507. package/src/msg_validators/tx_validator/allowed_public_setup.ts +30 -0
  508. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  509. package/src/msg_validators/tx_validator/archive_cache.ts +28 -0
  510. package/src/msg_validators/tx_validator/block_header_validator.ts +38 -0
  511. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  512. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  513. package/src/msg_validators/tx_validator/data_validator.ts +173 -0
  514. package/src/msg_validators/tx_validator/double_spend_validator.ts +46 -0
  515. package/src/msg_validators/tx_validator/factory.ts +490 -0
  516. package/src/msg_validators/tx_validator/fee_payer_balance.ts +44 -0
  517. package/src/msg_validators/tx_validator/gas_limits_validator.ts +148 -0
  518. package/src/msg_validators/tx_validator/gas_validator.ts +149 -0
  519. package/src/msg_validators/tx_validator/index.ts +19 -0
  520. package/src/msg_validators/tx_validator/metadata_validator.ts +104 -0
  521. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  522. package/src/msg_validators/tx_validator/phases_validator.ts +173 -0
  523. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  524. package/src/msg_validators/tx_validator/test_utils.ts +43 -0
  525. package/src/msg_validators/tx_validator/timestamp_validator.ts +61 -0
  526. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +22 -0
  527. package/src/msg_validators/tx_validator/tx_proof_validator.ts +26 -0
  528. package/src/msg_validators/tx_validator/tx_validation_cache.ts +100 -0
  529. package/src/services/data_store.ts +229 -0
  530. package/src/services/discv5/discV5_service.ts +413 -0
  531. package/src/services/discv5/persisted_enr_store.ts +157 -0
  532. package/src/services/dummy_service.ts +320 -0
  533. package/src/services/encoding.ts +170 -0
  534. package/src/services/gossipsub/README.md +663 -0
  535. package/src/services/gossipsub/index.ts +2 -0
  536. package/src/services/gossipsub/scoring.ts +37 -0
  537. package/src/services/gossipsub/topic_score_params.ts +477 -0
  538. package/src/services/index.ts +7 -0
  539. package/src/services/libp2p/instrumentation.ts +147 -0
  540. package/src/services/libp2p/libp2p_service.ts +1972 -0
  541. package/src/services/peer-manager/interface.ts +28 -0
  542. package/src/services/peer-manager/metrics.ts +90 -0
  543. package/src/services/peer-manager/peer_manager.ts +1221 -0
  544. package/src/services/peer-manager/peer_scoring.ts +265 -0
  545. package/src/services/reqresp/README.md +194 -0
  546. package/src/services/reqresp/batch-tx-requester/README.md +344 -0
  547. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +659 -0
  548. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  549. package/src/services/reqresp/batch-tx-requester/interface.ts +60 -0
  550. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +167 -0
  551. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +248 -0
  552. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +24 -0
  553. package/src/services/reqresp/config.ts +69 -0
  554. package/src/services/reqresp/connection-sampler/connection_sampler.ts +287 -0
  555. package/src/services/reqresp/constants.ts +14 -0
  556. package/src/services/reqresp/index.ts +6 -0
  557. package/src/services/reqresp/interface.ts +241 -0
  558. package/src/services/reqresp/metrics.ts +68 -0
  559. package/src/services/reqresp/protocols/auth.ts +83 -0
  560. package/src/services/reqresp/protocols/block_txs/bitvector.ts +107 -0
  561. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +79 -0
  562. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +170 -0
  563. package/src/services/reqresp/protocols/block_txs/index.ts +3 -0
  564. package/src/services/reqresp/protocols/goodbye.ts +102 -0
  565. package/src/services/reqresp/protocols/index.ts +9 -0
  566. package/src/services/reqresp/protocols/ping.ts +8 -0
  567. package/src/services/reqresp/protocols/status.ts +123 -0
  568. package/src/services/reqresp/protocols/tx.ts +76 -0
  569. package/src/services/reqresp/rate-limiter/index.ts +1 -0
  570. package/src/services/reqresp/rate-limiter/rate_limiter.ts +240 -0
  571. package/src/services/reqresp/rate-limiter/rate_limits.ts +65 -0
  572. package/src/services/reqresp/reqresp.ts +675 -0
  573. package/src/services/reqresp/status.ts +68 -0
  574. package/src/services/service.ts +219 -0
  575. package/src/services/tx_collection/config.ts +89 -0
  576. package/src/services/tx_collection/file_store_tx_collection.ts +153 -0
  577. package/src/services/tx_collection/file_store_tx_source.ts +129 -0
  578. package/src/services/tx_collection/index.ts +3 -0
  579. package/src/services/tx_collection/instrumentation.ts +35 -0
  580. package/src/services/tx_collection/request_tracker.ts +127 -0
  581. package/src/services/tx_collection/tx_collection.ts +467 -0
  582. package/src/services/tx_collection/tx_collection_sink.ts +124 -0
  583. package/src/services/tx_collection/tx_source.ts +61 -0
  584. package/src/services/tx_file_store/config.ts +37 -0
  585. package/src/services/tx_file_store/index.ts +3 -0
  586. package/src/services/tx_file_store/instrumentation.ts +42 -0
  587. package/src/services/tx_file_store/tx_file_store.ts +163 -0
  588. package/src/services/tx_provider.ts +237 -0
  589. package/src/services/tx_provider_instrumentation.ts +54 -0
  590. package/src/test-helpers/generate-peer-id-private-keys.ts +15 -0
  591. package/src/test-helpers/get-ports.ts +8 -0
  592. package/src/test-helpers/index.ts +8 -0
  593. package/src/test-helpers/make-enrs.ts +42 -0
  594. package/src/test-helpers/make-test-p2p-clients.ts +213 -0
  595. package/src/test-helpers/mock-pubsub.ts +325 -0
  596. package/src/test-helpers/mock-tx-helpers.ts +24 -0
  597. package/src/test-helpers/reqresp-nodes.ts +327 -0
  598. package/src/test-helpers/test_tx_provider.ts +68 -0
  599. package/src/test-helpers/testbench-utils.ts +465 -0
  600. package/src/testbench/README.md +20 -0
  601. package/src/testbench/p2p_client_testbench_worker.ts +553 -0
  602. package/src/testbench/parse_log_file.ts +174 -0
  603. package/src/testbench/testbench.ts +66 -0
  604. package/src/testbench/worker_client_manager.ts +621 -0
  605. package/src/types/index.ts +38 -0
  606. package/src/util.ts +230 -0
  607. package/src/versioning.ts +26 -0
@@ -0,0 +1,1051 @@
1
+ function applyDecs2203RFactory() {
2
+ function createAddInitializerMethod(initializers, decoratorFinishedRef) {
3
+ return function addInitializer(initializer) {
4
+ assertNotFinished(decoratorFinishedRef, "addInitializer");
5
+ assertCallable(initializer, "An initializer");
6
+ initializers.push(initializer);
7
+ };
8
+ }
9
+ function memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value) {
10
+ var kindStr;
11
+ switch(kind){
12
+ case 1:
13
+ kindStr = "accessor";
14
+ break;
15
+ case 2:
16
+ kindStr = "method";
17
+ break;
18
+ case 3:
19
+ kindStr = "getter";
20
+ break;
21
+ case 4:
22
+ kindStr = "setter";
23
+ break;
24
+ default:
25
+ kindStr = "field";
26
+ }
27
+ var ctx = {
28
+ kind: kindStr,
29
+ name: isPrivate ? "#" + name : name,
30
+ static: isStatic,
31
+ private: isPrivate,
32
+ metadata: metadata
33
+ };
34
+ var decoratorFinishedRef = {
35
+ v: false
36
+ };
37
+ ctx.addInitializer = createAddInitializerMethod(initializers, decoratorFinishedRef);
38
+ var get, set;
39
+ if (kind === 0) {
40
+ if (isPrivate) {
41
+ get = desc.get;
42
+ set = desc.set;
43
+ } else {
44
+ get = function() {
45
+ return this[name];
46
+ };
47
+ set = function(v) {
48
+ this[name] = v;
49
+ };
50
+ }
51
+ } else if (kind === 2) {
52
+ get = function() {
53
+ return desc.value;
54
+ };
55
+ } else {
56
+ if (kind === 1 || kind === 3) {
57
+ get = function() {
58
+ return desc.get.call(this);
59
+ };
60
+ }
61
+ if (kind === 1 || kind === 4) {
62
+ set = function(v) {
63
+ desc.set.call(this, v);
64
+ };
65
+ }
66
+ }
67
+ ctx.access = get && set ? {
68
+ get: get,
69
+ set: set
70
+ } : get ? {
71
+ get: get
72
+ } : {
73
+ set: set
74
+ };
75
+ try {
76
+ return dec(value, ctx);
77
+ } finally{
78
+ decoratorFinishedRef.v = true;
79
+ }
80
+ }
81
+ function assertNotFinished(decoratorFinishedRef, fnName) {
82
+ if (decoratorFinishedRef.v) {
83
+ throw new Error("attempted to call " + fnName + " after decoration was finished");
84
+ }
85
+ }
86
+ function assertCallable(fn, hint) {
87
+ if (typeof fn !== "function") {
88
+ throw new TypeError(hint + " must be a function");
89
+ }
90
+ }
91
+ function assertValidReturnValue(kind, value) {
92
+ var type = typeof value;
93
+ if (kind === 1) {
94
+ if (type !== "object" || value === null) {
95
+ throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
96
+ }
97
+ if (value.get !== undefined) {
98
+ assertCallable(value.get, "accessor.get");
99
+ }
100
+ if (value.set !== undefined) {
101
+ assertCallable(value.set, "accessor.set");
102
+ }
103
+ if (value.init !== undefined) {
104
+ assertCallable(value.init, "accessor.init");
105
+ }
106
+ } else if (type !== "function") {
107
+ var hint;
108
+ if (kind === 0) {
109
+ hint = "field";
110
+ } else if (kind === 10) {
111
+ hint = "class";
112
+ } else {
113
+ hint = "method";
114
+ }
115
+ throw new TypeError(hint + " decorators must return a function or void 0");
116
+ }
117
+ }
118
+ function applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata) {
119
+ var decs = decInfo[0];
120
+ var desc, init, value;
121
+ if (isPrivate) {
122
+ if (kind === 0 || kind === 1) {
123
+ desc = {
124
+ get: decInfo[3],
125
+ set: decInfo[4]
126
+ };
127
+ } else if (kind === 3) {
128
+ desc = {
129
+ get: decInfo[3]
130
+ };
131
+ } else if (kind === 4) {
132
+ desc = {
133
+ set: decInfo[3]
134
+ };
135
+ } else {
136
+ desc = {
137
+ value: decInfo[3]
138
+ };
139
+ }
140
+ } else if (kind !== 0) {
141
+ desc = Object.getOwnPropertyDescriptor(base, name);
142
+ }
143
+ if (kind === 1) {
144
+ value = {
145
+ get: desc.get,
146
+ set: desc.set
147
+ };
148
+ } else if (kind === 2) {
149
+ value = desc.value;
150
+ } else if (kind === 3) {
151
+ value = desc.get;
152
+ } else if (kind === 4) {
153
+ value = desc.set;
154
+ }
155
+ var newValue, get, set;
156
+ if (typeof decs === "function") {
157
+ newValue = memberDec(decs, name, desc, initializers, kind, isStatic, isPrivate, metadata, value);
158
+ if (newValue !== void 0) {
159
+ assertValidReturnValue(kind, newValue);
160
+ if (kind === 0) {
161
+ init = newValue;
162
+ } else if (kind === 1) {
163
+ init = newValue.init;
164
+ get = newValue.get || value.get;
165
+ set = newValue.set || value.set;
166
+ value = {
167
+ get: get,
168
+ set: set
169
+ };
170
+ } else {
171
+ value = newValue;
172
+ }
173
+ }
174
+ } else {
175
+ for(var i = decs.length - 1; i >= 0; i--){
176
+ var dec = decs[i];
177
+ newValue = memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value);
178
+ if (newValue !== void 0) {
179
+ assertValidReturnValue(kind, newValue);
180
+ var newInit;
181
+ if (kind === 0) {
182
+ newInit = newValue;
183
+ } else if (kind === 1) {
184
+ newInit = newValue.init;
185
+ get = newValue.get || value.get;
186
+ set = newValue.set || value.set;
187
+ value = {
188
+ get: get,
189
+ set: set
190
+ };
191
+ } else {
192
+ value = newValue;
193
+ }
194
+ if (newInit !== void 0) {
195
+ if (init === void 0) {
196
+ init = newInit;
197
+ } else if (typeof init === "function") {
198
+ init = [
199
+ init,
200
+ newInit
201
+ ];
202
+ } else {
203
+ init.push(newInit);
204
+ }
205
+ }
206
+ }
207
+ }
208
+ }
209
+ if (kind === 0 || kind === 1) {
210
+ if (init === void 0) {
211
+ init = function(instance, init) {
212
+ return init;
213
+ };
214
+ } else if (typeof init !== "function") {
215
+ var ownInitializers = init;
216
+ init = function(instance, init) {
217
+ var value = init;
218
+ for(var i = 0; i < ownInitializers.length; i++){
219
+ value = ownInitializers[i].call(instance, value);
220
+ }
221
+ return value;
222
+ };
223
+ } else {
224
+ var originalInitializer = init;
225
+ init = function(instance, init) {
226
+ return originalInitializer.call(instance, init);
227
+ };
228
+ }
229
+ ret.push(init);
230
+ }
231
+ if (kind !== 0) {
232
+ if (kind === 1) {
233
+ desc.get = value.get;
234
+ desc.set = value.set;
235
+ } else if (kind === 2) {
236
+ desc.value = value;
237
+ } else if (kind === 3) {
238
+ desc.get = value;
239
+ } else if (kind === 4) {
240
+ desc.set = value;
241
+ }
242
+ if (isPrivate) {
243
+ if (kind === 1) {
244
+ ret.push(function(instance, args) {
245
+ return value.get.call(instance, args);
246
+ });
247
+ ret.push(function(instance, args) {
248
+ return value.set.call(instance, args);
249
+ });
250
+ } else if (kind === 2) {
251
+ ret.push(value);
252
+ } else {
253
+ ret.push(function(instance, args) {
254
+ return value.call(instance, args);
255
+ });
256
+ }
257
+ } else {
258
+ Object.defineProperty(base, name, desc);
259
+ }
260
+ }
261
+ }
262
+ function applyMemberDecs(Class, decInfos, metadata) {
263
+ var ret = [];
264
+ var protoInitializers;
265
+ var staticInitializers;
266
+ var existingProtoNonFields = new Map();
267
+ var existingStaticNonFields = new Map();
268
+ for(var i = 0; i < decInfos.length; i++){
269
+ var decInfo = decInfos[i];
270
+ if (!Array.isArray(decInfo)) continue;
271
+ var kind = decInfo[1];
272
+ var name = decInfo[2];
273
+ var isPrivate = decInfo.length > 3;
274
+ var isStatic = kind >= 5;
275
+ var base;
276
+ var initializers;
277
+ if (isStatic) {
278
+ base = Class;
279
+ kind = kind - 5;
280
+ staticInitializers = staticInitializers || [];
281
+ initializers = staticInitializers;
282
+ } else {
283
+ base = Class.prototype;
284
+ protoInitializers = protoInitializers || [];
285
+ initializers = protoInitializers;
286
+ }
287
+ if (kind !== 0 && !isPrivate) {
288
+ var existingNonFields = isStatic ? existingStaticNonFields : existingProtoNonFields;
289
+ var existingKind = existingNonFields.get(name) || 0;
290
+ if (existingKind === true || existingKind === 3 && kind !== 4 || existingKind === 4 && kind !== 3) {
291
+ throw new Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + name);
292
+ } else if (!existingKind && kind > 2) {
293
+ existingNonFields.set(name, kind);
294
+ } else {
295
+ existingNonFields.set(name, true);
296
+ }
297
+ }
298
+ applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata);
299
+ }
300
+ pushInitializers(ret, protoInitializers);
301
+ pushInitializers(ret, staticInitializers);
302
+ return ret;
303
+ }
304
+ function pushInitializers(ret, initializers) {
305
+ if (initializers) {
306
+ ret.push(function(instance) {
307
+ for(var i = 0; i < initializers.length; i++){
308
+ initializers[i].call(instance);
309
+ }
310
+ return instance;
311
+ });
312
+ }
313
+ }
314
+ function applyClassDecs(targetClass, classDecs, metadata) {
315
+ if (classDecs.length > 0) {
316
+ var initializers = [];
317
+ var newClass = targetClass;
318
+ var name = targetClass.name;
319
+ for(var i = classDecs.length - 1; i >= 0; i--){
320
+ var decoratorFinishedRef = {
321
+ v: false
322
+ };
323
+ try {
324
+ var nextNewClass = classDecs[i](newClass, {
325
+ kind: "class",
326
+ name: name,
327
+ addInitializer: createAddInitializerMethod(initializers, decoratorFinishedRef),
328
+ metadata
329
+ });
330
+ } finally{
331
+ decoratorFinishedRef.v = true;
332
+ }
333
+ if (nextNewClass !== undefined) {
334
+ assertValidReturnValue(10, nextNewClass);
335
+ newClass = nextNewClass;
336
+ }
337
+ }
338
+ return [
339
+ defineMetadata(newClass, metadata),
340
+ function() {
341
+ for(var i = 0; i < initializers.length; i++){
342
+ initializers[i].call(newClass);
343
+ }
344
+ }
345
+ ];
346
+ }
347
+ }
348
+ function defineMetadata(Class, metadata) {
349
+ return Object.defineProperty(Class, Symbol.metadata || Symbol.for("Symbol.metadata"), {
350
+ configurable: true,
351
+ enumerable: true,
352
+ value: metadata
353
+ });
354
+ }
355
+ return function applyDecs2203R(targetClass, memberDecs, classDecs, parentClass) {
356
+ if (parentClass !== void 0) {
357
+ var parentMetadata = parentClass[Symbol.metadata || Symbol.for("Symbol.metadata")];
358
+ }
359
+ var metadata = Object.create(parentMetadata === void 0 ? null : parentMetadata);
360
+ var e = applyMemberDecs(targetClass, memberDecs, metadata);
361
+ if (!classDecs.length) defineMetadata(targetClass, metadata);
362
+ return {
363
+ e: e,
364
+ get c () {
365
+ return applyClassDecs(targetClass, classDecs, metadata);
366
+ }
367
+ };
368
+ };
369
+ }
370
+ function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {
371
+ return (_apply_decs_2203_r = applyDecs2203RFactory())(targetClass, memberDecs, classDecs, parentClass);
372
+ }
373
+ var _dec, _dec1, _initProto;
374
+ import { BlockNumber, CheckpointNumber, SlotNumber } from '@aztec-labs/foundation/branded-types';
375
+ import { createLogger } from '@aztec-labs/foundation/log';
376
+ import { promiseWithResolvers } from '@aztec-labs/foundation/promise';
377
+ import { DateProvider } from '@aztec-labs/foundation/timer';
378
+ import { L2TipsKVStore } from '@aztec-labs/kv-store/stores';
379
+ import { EventDrivenL2BlockStream } from '@aztec-labs/stdlib/block';
380
+ import { getTimestampForSlot } from '@aztec-labs/stdlib/epoch-helpers';
381
+ import { tryStop } from '@aztec-labs/stdlib/interfaces/server';
382
+ import { Attributes, WithTracer, getTelemetryClient, trackSpan } from '@aztec-labs/telemetry-client';
383
+ import { getP2PDefaultConfig } from '../config.js';
384
+ import { TxPoolError } from '../errors/tx-pool.error.js';
385
+ import { TxProvider } from '../services/tx_provider.js';
386
+ import { P2PClientState } from './interface.js';
387
+ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
388
+ [Attributes.SLOT_NUMBER]: proposal.slotNumber,
389
+ [Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
390
+ [Attributes.P2P_ID]: (await proposal.p2pMessageLoggingIdentifier()).toString()
391
+ })), _dec1 = trackSpan('p2pClient.broadcastCheckpointProposal', async (proposal)=>({
392
+ [Attributes.SLOT_NUMBER]: proposal.slotNumber,
393
+ [Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
394
+ [Attributes.P2P_ID]: (await proposal.p2pMessageLoggingIdentifier()).toString()
395
+ }));
396
+ /**
397
+ * The P2P client implementation.
398
+ */ export class P2PClient extends WithTracer {
399
+ store;
400
+ l2BlockSource;
401
+ p2pService;
402
+ txCollection;
403
+ txFileStore;
404
+ epochCache;
405
+ _dateProvider;
406
+ telemetry;
407
+ log;
408
+ static{
409
+ ({ e: [_initProto] } = _apply_decs_2203_r(this, [
410
+ [
411
+ _dec,
412
+ 2,
413
+ "broadcastProposal"
414
+ ],
415
+ [
416
+ _dec1,
417
+ 2,
418
+ "broadcastCheckpointProposal"
419
+ ]
420
+ ], []));
421
+ }
422
+ /** The JS promise that will be running to keep the client's data in sync. Can be interrupted if the client is stopped. */ runningPromise;
423
+ currentState;
424
+ syncPromise;
425
+ syncResolvers;
426
+ latestBlockNumberAtStart;
427
+ provenBlockNumberAtStart;
428
+ finalizedBlockNumberAtStart;
429
+ l2Tips;
430
+ synchedLatestSlot;
431
+ txPool;
432
+ attestationPool;
433
+ config;
434
+ blockStream;
435
+ txProvider;
436
+ validatorAddresses;
437
+ /** Tracks the last slot for which we called prepareForSlot */ lastSlotProcessed;
438
+ constructor(store, l2BlockSource, mempools, p2pService, txCollection, txFileStore, epochCache, config = {}, _dateProvider = new DateProvider(), telemetry = getTelemetryClient(), log = createLogger('p2p'), initialBlockHash){
439
+ super(telemetry, 'P2PClient'), this.store = store, this.l2BlockSource = l2BlockSource, this.p2pService = p2pService, this.txCollection = txCollection, this.txFileStore = txFileStore, this.epochCache = epochCache, this._dateProvider = _dateProvider, this.telemetry = telemetry, this.log = log, this.currentState = (_initProto(this), P2PClientState.IDLE), this.syncPromise = Promise.resolve(), this.syncResolvers = undefined, this.latestBlockNumberAtStart = -1, this.provenBlockNumberAtStart = -1, this.finalizedBlockNumberAtStart = -1, this.validatorAddresses = [], this.lastSlotProcessed = SlotNumber.ZERO;
440
+ this.config = {
441
+ ...getP2PDefaultConfig(),
442
+ ...config
443
+ };
444
+ this.txPool = mempools.txPool;
445
+ this.attestationPool = mempools.attestationPool;
446
+ this.txProvider = new TxProvider(this.txCollection, this.txPool, this, this.log.createChild('tx-provider'), this.telemetry);
447
+ this.l2Tips = new L2TipsKVStore(store, 'p2p_client', initialBlockHash);
448
+ this.synchedLatestSlot = store.openSingleton('p2p_pool_last_l2_slot');
449
+ }
450
+ registerThisValidatorAddresses(addresses) {
451
+ this.validatorAddresses = [
452
+ ...addresses
453
+ ];
454
+ this.p2pService.registerThisValidatorAddresses(this.validatorAddresses);
455
+ }
456
+ clear() {
457
+ return this.store.clear();
458
+ }
459
+ isP2PClient() {
460
+ return true;
461
+ }
462
+ getTxProvider() {
463
+ return this.txProvider;
464
+ }
465
+ getPeers(includePending) {
466
+ return Promise.resolve(this.p2pService.getPeers(includePending));
467
+ }
468
+ getP2PConnectivity() {
469
+ return Promise.resolve(this.p2pService.getP2PConnectivity());
470
+ }
471
+ getGossipMeshPeerCount(topicType) {
472
+ return Promise.resolve(this.p2pService.getGossipMeshPeerCount(topicType));
473
+ }
474
+ getL2BlockHash(number) {
475
+ return this.l2Tips.getL2BlockHash(number);
476
+ }
477
+ async updateP2PConfig(config) {
478
+ await this.txPool.updateConfig(config);
479
+ this.p2pService.updateConfig(config);
480
+ }
481
+ getL2Tips() {
482
+ return this.l2Tips.getL2Tips();
483
+ }
484
+ async handleBlockStreamEvent(event) {
485
+ this.log.debug(`Handling block stream event ${event.type}`);
486
+ switch(event.type){
487
+ case 'blocks-added':
488
+ await this.handleLatestL2Blocks(event.blocks);
489
+ break;
490
+ case 'chain-finalized':
491
+ {
492
+ const oldFinalizedBlockNum = await this.getSyncedFinalizedBlockNum();
493
+ const from = BlockNumber(oldFinalizedBlockNum + 1);
494
+ const limit = event.block.number - from + 1;
495
+ if (limit > 0) {
496
+ const oldBlocks = await this.l2BlockSource.getBlocksData({
497
+ from,
498
+ limit
499
+ });
500
+ await this.handleFinalizedL2Blocks(oldBlocks);
501
+ }
502
+ break;
503
+ }
504
+ case 'chain-proven':
505
+ this.txCollection.stopCollectingForBlocksUpTo(event.block.number);
506
+ break;
507
+ case 'chain-pruned':
508
+ this.txCollection.stopCollectingForBlocksAfter(event.block.number);
509
+ await this.handlePruneL2Blocks(event.block, event.checkpointed.checkpoint);
510
+ break;
511
+ case 'chain-checkpointed':
512
+ break;
513
+ case 'chain-proposed':
514
+ break;
515
+ default:
516
+ {
517
+ const _ = event;
518
+ break;
519
+ }
520
+ }
521
+ // Pass the event through to our l2 tips store
522
+ await this.l2Tips.handleBlockStreamEvent(event);
523
+ await this.startServiceIfSynched();
524
+ }
525
+ #assertIsReady() {
526
+ if (!this.isReady()) {
527
+ throw new Error('P2P client not ready');
528
+ }
529
+ }
530
+ /**
531
+ * Starts the P2P client.
532
+ * @returns An empty promise signalling the synching process.
533
+ */ async start() {
534
+ if (this.currentState === P2PClientState.STOPPED) {
535
+ throw new Error('P2P client already stopped');
536
+ }
537
+ if (this.currentState !== P2PClientState.IDLE) {
538
+ return this.syncPromise;
539
+ }
540
+ // Start the tx pool first, as it needs to hydrate state from persistence
541
+ await this.txPool.start();
542
+ // get the current latest block numbers
543
+ const latestBlockNumbers = await this.l2BlockSource.getL2Tips();
544
+ this.latestBlockNumberAtStart = latestBlockNumbers.proposed.number;
545
+ this.provenBlockNumberAtStart = latestBlockNumbers.proven.block.number;
546
+ this.finalizedBlockNumberAtStart = latestBlockNumbers.finalized.block.number;
547
+ const syncedLatestBlock = await this.getSyncedLatestBlockNum() + 1;
548
+ const syncedProvenBlock = await this.getSyncedProvenBlockNum() + 1;
549
+ const syncedFinalizedBlock = await this.getSyncedFinalizedBlockNum() + 1;
550
+ if (await this.txPool.isEmpty() && await this.attestationPool.isEmpty()) {
551
+ // if mempools are empty, we don't care about syncing prior blocks
552
+ this.initBlockStream(BlockNumber(this.latestBlockNumberAtStart));
553
+ this.setCurrentState(P2PClientState.RUNNING);
554
+ this.syncPromise = Promise.resolve();
555
+ await this.p2pService.start();
556
+ this.log.info(`Starting p2p client from block ${this.latestBlockNumberAtStart} with empty mempools`);
557
+ } else if (syncedLatestBlock <= this.latestBlockNumberAtStart || syncedProvenBlock <= this.provenBlockNumberAtStart || syncedFinalizedBlock <= this.finalizedBlockNumberAtStart) {
558
+ // if there are blocks to be retrieved, go to a synching state
559
+ // this gets resolved on `startServiceIfSynched`
560
+ this.initBlockStream();
561
+ this.setCurrentState(P2PClientState.SYNCHING);
562
+ this.syncResolvers = promiseWithResolvers();
563
+ this.syncPromise = this.syncResolvers.promise;
564
+ this.log.info(`Initiating p2p sync from ${syncedLatestBlock}`, {
565
+ syncedLatestBlock,
566
+ syncedProvenBlock,
567
+ syncedFinalizedBlock
568
+ });
569
+ } else {
570
+ // if no blocks to be retrieved, go straight to running
571
+ this.initBlockStream();
572
+ this.setCurrentState(P2PClientState.RUNNING);
573
+ this.syncPromise = Promise.resolve();
574
+ await this.p2pService.start();
575
+ this.log.info(`Starting P2P client synced to ${syncedLatestBlock}`, {
576
+ syncedLatestBlock,
577
+ syncedProvenBlock,
578
+ syncedFinalizedBlock
579
+ });
580
+ }
581
+ // Should never happen: all branches above call initBlockStream()
582
+ if (!this.blockStream) {
583
+ throw new Error('Block stream not initialized');
584
+ }
585
+ this.blockStream.start();
586
+ this.txFileStore?.start();
587
+ return this.syncPromise;
588
+ }
589
+ addReqRespSubProtocol(subProtocol, handler) {
590
+ return this.p2pService.addReqRespSubProtocol(subProtocol, handler);
591
+ }
592
+ initBlockStream(startingBlock) {
593
+ if (!this.blockStream) {
594
+ const { blockRequestBatchSize: batchSize, blockCheckIntervalMS: pollIntervalMS } = this.config;
595
+ this.blockStream = new EventDrivenL2BlockStream(this.l2BlockSource, this, this, createLogger(`${this.log.module}:l2-block-stream`), {
596
+ batchSize,
597
+ pollIntervalMS,
598
+ startingBlock
599
+ });
600
+ }
601
+ }
602
+ /**
603
+ * Allows consumers to stop the instance of the P2P client.
604
+ * 'ready' will now return 'false' and the running promise that keeps the client synced is interrupted.
605
+ */ async stop() {
606
+ this.log.debug('Stopping p2p client...');
607
+ await tryStop(this.txCollection);
608
+ this.log.debug('Stopped tx collection service');
609
+ await this.txFileStore?.stop();
610
+ this.log.debug('Stopped tx file store');
611
+ await this.p2pService.stop();
612
+ this.log.debug('Stopped p2p service');
613
+ await this.blockStream?.stop();
614
+ this.log.debug('Stopped block downloader');
615
+ await this.txPool.stop();
616
+ this.log.debug('Stopped tx pool');
617
+ await this.runningPromise;
618
+ this.setCurrentState(P2PClientState.STOPPED);
619
+ this.log.info('P2P client stopped');
620
+ }
621
+ /** Triggers a sync to the archiver. Used for testing. */ async sync() {
622
+ this.initBlockStream();
623
+ // Should never happen: initBlockStream() creates blockStream if absent
624
+ if (!this.blockStream) {
625
+ throw new Error('Block stream not initialized');
626
+ }
627
+ await this.blockStream.sync();
628
+ }
629
+ async broadcastProposal(proposal) {
630
+ this.log.verbose(`Broadcasting proposal for slot ${proposal.slotNumber} to peers`);
631
+ // Store our own proposal so we can respond to req/resp requests for it
632
+ const { count } = await this.attestationPool.tryAddBlockProposal(proposal);
633
+ if (count > 1) {
634
+ if (this.config.broadcastEquivocatedProposals) {
635
+ this.log.warn(`Broadcasting equivocated block proposal for slot ${proposal.slotNumber}`, {
636
+ slot: proposal.slotNumber,
637
+ archive: proposal.archive.toString(),
638
+ count
639
+ });
640
+ } else {
641
+ throw new Error(`Attempted to broadcast a duplicate block proposal for slot ${proposal.slotNumber}`);
642
+ }
643
+ }
644
+ return this.p2pService.propagate(proposal);
645
+ }
646
+ async broadcastCheckpointProposal(proposal) {
647
+ this.log.verbose(`Broadcasting checkpoint proposal for slot ${proposal.slotNumber} to peers`);
648
+ const blockProposal = proposal.getBlockProposal();
649
+ if (blockProposal) {
650
+ // Store our own last-block proposal so we can respond to req/resp requests for it.
651
+ await this.attestationPool.tryAddBlockProposal(blockProposal);
652
+ }
653
+ const checkpointCore = proposal.toCore();
654
+ const { count } = await this.attestationPool.tryAddCheckpointProposal(checkpointCore);
655
+ if (count > 1) {
656
+ if (this.config.broadcastEquivocatedProposals) {
657
+ this.log.warn(`Broadcasting equivocated checkpoint proposal for slot ${proposal.slotNumber}`, {
658
+ slot: proposal.slotNumber,
659
+ archive: proposal.archive.toString(),
660
+ count
661
+ });
662
+ } else {
663
+ throw new Error(`Attempted to broadcast a duplicate checkpoint proposal for slot ${proposal.slotNumber}`);
664
+ }
665
+ }
666
+ return this.p2pService.propagate(proposal);
667
+ }
668
+ async broadcastCheckpointAttestations(attestations) {
669
+ this.log.verbose(`Broadcasting ${attestations.length} checkpoint attestations to peers`);
670
+ await Promise.all(attestations.map((att)=>this.p2pService.propagate(att)));
671
+ }
672
+ async getCheckpointAttestationsForSlot(slot, proposalPayloadHash) {
673
+ return await (proposalPayloadHash ? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot, proposalPayloadHash) : this.attestationPool.getCheckpointAttestationsForSlot(slot));
674
+ }
675
+ addOwnCheckpointAttestations(attestations) {
676
+ return this.attestationPool.addOwnCheckpointAttestations(attestations);
677
+ }
678
+ getProposalsForSlot(slot) {
679
+ return this.attestationPool.getProposalsForSlot(slot);
680
+ }
681
+ hasBlockProposalsForSlot(slot) {
682
+ return this.attestationPool.hasBlockProposalsForSlot(slot);
683
+ }
684
+ hasCheckpointProposalForSlot(slot) {
685
+ return this.attestationPool.hasCheckpointProposalForSlot(slot);
686
+ }
687
+ // REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
688
+ // ^ This pattern is not my favorite (md)
689
+ registerBlockProposalHandler(handler) {
690
+ this.p2pService.registerBlockReceivedCallback(handler);
691
+ }
692
+ registerValidatorCheckpointProposalHandler(handler) {
693
+ this.p2pService.registerValidatorCheckpointReceivedCallback(handler);
694
+ }
695
+ registerAllNodesCheckpointProposalHandler(handler) {
696
+ this.p2pService.registerAllNodesCheckpointReceivedCallback(handler);
697
+ }
698
+ registerDuplicateProposalCallback(callback) {
699
+ this.p2pService.registerDuplicateProposalCallback(callback);
700
+ }
701
+ registerOversizedProposalCallback(callback) {
702
+ this.p2pService.registerOversizedProposalCallback(callback);
703
+ }
704
+ registerDuplicateAttestationCallback(callback) {
705
+ this.p2pService.registerDuplicateAttestationCallback(callback);
706
+ }
707
+ registerCheckpointAttestationCallback(callback) {
708
+ this.p2pService.registerCheckpointAttestationCallback(callback);
709
+ }
710
+ async getPendingTxs(limit, after, options) {
711
+ if (limit !== undefined && limit <= 0) {
712
+ throw new TypeError('limit must be greater than 0');
713
+ }
714
+ let txHashes = await this.txPool.getPendingTxHashes();
715
+ let startIndex = 0;
716
+ if (after) {
717
+ startIndex = txHashes.findIndex((txHash)=>after.equals(txHash));
718
+ if (startIndex === -1) {
719
+ return [];
720
+ }
721
+ startIndex++;
722
+ }
723
+ const endIndex = limit !== undefined ? startIndex + limit : undefined;
724
+ txHashes = txHashes.slice(startIndex, endIndex);
725
+ // This is a public-facing API (exposed via both the node and the p2p RPC), so proofs are opt-in.
726
+ const includeProof = !!options?.includeProof;
727
+ const maybeTxs = await Promise.all(txHashes.map((txHash)=>this.txPool.getTxByHash(txHash, {
728
+ includeProof
729
+ })));
730
+ return maybeTxs.filter((tx)=>!!tx);
731
+ }
732
+ getPendingTxCount() {
733
+ return this.txPool.getPendingTxCount();
734
+ }
735
+ hasEligiblePendingTxs(minCount) {
736
+ return this.txPool.hasEligiblePendingTxs(minCount);
737
+ }
738
+ async *iteratePendingTxs(opts) {
739
+ for (const txHash of (await this.txPool.getPendingTxHashes())){
740
+ const tx = await this.txPool.getTxByHash(txHash, opts);
741
+ if (tx) {
742
+ yield tx;
743
+ }
744
+ }
745
+ }
746
+ async *iterateEligiblePendingTxs(opts) {
747
+ for (const txHash of (await this.txPool.getEligiblePendingTxHashes())){
748
+ const tx = await this.txPool.getTxByHash(txHash, opts);
749
+ if (tx) {
750
+ yield tx;
751
+ }
752
+ }
753
+ }
754
+ /**
755
+ * Returns a transaction in the transaction pool by its hash.
756
+ * @param txHash - Hash of the transaction to look for in the pool.
757
+ * @param opts - Set `includeProof: false` to skip loading the tx proof from the DB.
758
+ * @returns A single tx or undefined.
759
+ */ getTxByHashFromPool(txHash, opts) {
760
+ return this.txPool.getTxByHash(txHash, opts);
761
+ }
762
+ /**
763
+ * Returns transactions in the transaction pool by hash.
764
+ * @param txHashes - Hashes of the transactions to look for.
765
+ * @param opts - Set `includeProof: false` to skip loading tx proofs from the DB.
766
+ * @returns The txs found, in the same order as the requested hashes. If a tx is not found, it will be undefined.
767
+ */ getTxsByHashFromPool(txHashes, opts) {
768
+ return this.txPool.getTxsByHash(txHashes, opts);
769
+ }
770
+ hasTxsInPool(txHashes) {
771
+ return this.txPool.hasTxs(txHashes);
772
+ }
773
+ /**
774
+ * Returns an archived transaction in the transaction pool by its hash.
775
+ * @param txHash - Hash of the archived transaction to look for.
776
+ * @returns A single tx or undefined.
777
+ */ getArchivedTxByHash(txHash) {
778
+ return this.txPool.getArchivedTxByHash(txHash);
779
+ }
780
+ /**
781
+ * Accepts a transaction, adds it to local tx pool and forwards it to other peers.
782
+ * @param tx - The tx to send.
783
+ * @returns Empty promise.
784
+ **/ async sendTx(tx) {
785
+ this.#assertIsReady();
786
+ const result = await this.txPool.addPendingTxs([
787
+ tx
788
+ ], {
789
+ feeComparisonOnly: true
790
+ });
791
+ if (result.accepted.length === 1) {
792
+ await this.p2pService.propagate(tx);
793
+ return;
794
+ }
795
+ const txHashStr = tx.getTxHash().toString();
796
+ const reason = result.errors?.get(txHashStr);
797
+ if (reason) {
798
+ this.log.warn(`Tx ${txHashStr} not added to pool: ${reason.message}`);
799
+ throw new TxPoolError(reason);
800
+ }
801
+ this.log.warn(`Tx ${txHashStr} not propagated: accepted=${result.accepted.length} ignored=${result.ignored.length} rejected=${result.rejected.length}`);
802
+ }
803
+ /**
804
+ * Returns whether the given tx hash is flagged as pending or mined.
805
+ * @param txHash - Hash of the tx to query.
806
+ * @returns Pending or mined depending on its status, or undefined if not found.
807
+ */ async getTxStatus(txHash) {
808
+ const status = await this.txPool.getTxStatus(txHash);
809
+ return status === 'protected' ? 'pending' : status;
810
+ }
811
+ getEnr() {
812
+ return this.p2pService.getEnr();
813
+ }
814
+ getEncodedEnr() {
815
+ return Promise.resolve(this.p2pService.getEnr()?.encodeTxt());
816
+ }
817
+ /**
818
+ * Handles failed transaction execution by removing txs from the pool.
819
+ * @param txHashes - Hashes of the transactions that failed execution.
820
+ **/ async handleFailedExecution(txHashes) {
821
+ this.#assertIsReady();
822
+ await this.txPool.handleFailedExecution(txHashes);
823
+ }
824
+ /**
825
+ * Public function to check if the p2p client is fully synced and ready to receive txs.
826
+ * @returns True if the P2P client is ready to receive txs.
827
+ */ isReady() {
828
+ return this.currentState === P2PClientState.RUNNING;
829
+ }
830
+ /**
831
+ * Public function to check the latest block number that the P2P client is synced to.
832
+ * @returns Block number of latest L2 Block we've synced with.
833
+ */ async getSyncedLatestBlockNum() {
834
+ const tips = await this.l2Tips.getL2Tips();
835
+ return tips.proposed.number;
836
+ }
837
+ /**
838
+ * Public function to check the latest proven block number that the P2P client is synced to.
839
+ * @returns Block number of latest proven L2 Block we've synced with.
840
+ */ async getSyncedProvenBlockNum() {
841
+ const tips = await this.l2Tips.getL2Tips();
842
+ return tips.proven.block.number;
843
+ }
844
+ async getSyncedFinalizedBlockNum() {
845
+ const tips = await this.l2Tips.getL2Tips();
846
+ return tips.finalized.block.number;
847
+ }
848
+ /** Returns latest L2 slot for which we have seen an L2 block. */ async getSyncedLatestSlot() {
849
+ return await this.synchedLatestSlot.getAsync() ?? BigInt(0);
850
+ }
851
+ /**
852
+ * Method to check the status the p2p client.
853
+ * @returns Information about p2p client status: state & syncedToBlockNum.
854
+ */ async getStatus() {
855
+ const blockNumber = await this.getSyncedLatestBlockNum();
856
+ const blockHash = await this.l2BlockSource.getBlockData({
857
+ number: blockNumber
858
+ }).then((data)=>data?.header.hash()).then((hash)=>hash?.toString());
859
+ return {
860
+ state: this.currentState,
861
+ syncedToL2Block: {
862
+ number: blockNumber,
863
+ hash: blockHash
864
+ }
865
+ };
866
+ }
867
+ /**
868
+ * Handles mined blocks by marking the txs in them as mined.
869
+ * @param blocks - A list of existing blocks with txs that the P2P client needs to ensure the tx pool is reconciled with.
870
+ * @returns Empty promise.
871
+ */ async handleMinedBlocks(blocks) {
872
+ for (const block of blocks){
873
+ await this.txPool.handleMinedBlock(block);
874
+ }
875
+ }
876
+ /**
877
+ * Handles new mined blocks by marking the txs in them as mined.
878
+ * @param blocks - A list of existing blocks with txs that the P2P client needs to ensure the tx pool is reconciled with.
879
+ * @returns Empty promise.
880
+ */ async handleLatestL2Blocks(blocks) {
881
+ if (!blocks.length) {
882
+ return;
883
+ }
884
+ const lastBlock = blocks.at(-1);
885
+ const lastSlot = lastBlock.header.getSlot();
886
+ // Mark txs mined before releasing protections: a block landing at this slot supersedes any
887
+ // protection for txs it includes, so mined-marking must run first to keep just-landed txs from
888
+ // being unprotected into pending where they could be evicted before they are recorded as mined.
889
+ await this.handleMinedBlocks(blocks);
890
+ await this.maybeCallPrepareForSlot(lastSlot);
891
+ await this.collectingMissingTxs(blocks);
892
+ await this.synchedLatestSlot.set(BigInt(lastSlot));
893
+ }
894
+ /** Request txs for unproven blocks so the prover node can prove. */ async collectingMissingTxs(blocks) {
895
+ try {
896
+ // TODO(#15435): If the archiver has lagged behind L1, the reported proven block number may
897
+ // be much lower than the actual one, and it does not update until the pending chain is
898
+ // fully synced. This could lead to a ton of tx collection requests for blocks that
899
+ // are already proven, but the archiver has not yet updated its state. Until this is properly
900
+ // fixed, it is mitigated by the expiration date of collection requests, which depends on
901
+ // the slot number of the block.
902
+ const provenBlockNumber = await this.l2BlockSource.getBlockNumber({
903
+ tag: 'proven'
904
+ }) ?? BlockNumber.ZERO;
905
+ const unprovenBlocks = blocks.filter((block)=>block.number > provenBlockNumber);
906
+ for (const block of unprovenBlocks){
907
+ const txHashes = block.body.txEffects.map((txEffect)=>txEffect.txHash);
908
+ const missingTxHashes = await this.txPool.hasTxs(txHashes).then((availability)=>txHashes.filter((_, index)=>!availability[index]));
909
+ if (missingTxHashes.length > 0) {
910
+ this.log.verbose(`Starting collection of ${missingTxHashes.length} missing txs for unproven mined block ${block.number}`, {
911
+ missingTxHashes,
912
+ blockNumber: block.number,
913
+ blockHash: await block.hash().then((h)=>h.toString())
914
+ });
915
+ // Both `slashDataWithholdingToleranceSlots` and `p2pMissingTxCollectionDeadlineSlots`
916
+ // count *full slots after the block slot* — value N means collection runs until
917
+ // `slotStart(block.slot + N + 1)`. Take the larger of the two so collection never
918
+ // gives up before the data-withholding slash verdict is rendered.
919
+ const blockSlot = block.header.getSlot();
920
+ const toleranceSlots = this.config.slashDataWithholdingToleranceSlots;
921
+ const configuredSlots = this.config.p2pMissingTxCollectionDeadlineSlots ?? 0;
922
+ const deadlineSlot = SlotNumber(blockSlot + Math.max(toleranceSlots, configuredSlots) + 1);
923
+ const deadlineSeconds = getTimestampForSlot(deadlineSlot, this.epochCache.getL1Constants());
924
+ const deadline = new Date(Number(deadlineSeconds) * 1000);
925
+ await this.txCollection.collectFastForBlock(block, missingTxHashes, {
926
+ deadline
927
+ });
928
+ }
929
+ }
930
+ } catch (err) {
931
+ this.log.error(`Error while starting collection of missing txs for unproven blocks`, err);
932
+ }
933
+ }
934
+ /**
935
+ * Handles new finalized blocks by deleting the txs and attestations in them.
936
+ * @param blocks - A list of finalized L2 blocks.
937
+ * @returns Empty promise.
938
+ */ async handleFinalizedL2Blocks(blocks) {
939
+ if (!blocks.length) {
940
+ return;
941
+ }
942
+ // Finalization is monotonic, so we only need to call with the last block
943
+ const lastBlock = blocks.at(-1);
944
+ await this.txPool.handleFinalizedBlock(lastBlock.header);
945
+ await this.attestationPool.deleteOlderThan(lastBlock.header.getSlot());
946
+ }
947
+ /**
948
+ * Updates the tx pool after a chain prune.
949
+ * Detects epoch prunes (checkpoint number changed) and deletes all txs in that case.
950
+ * @param latestBlock - The block ID the chain was pruned to.
951
+ * @param newCheckpoint - The checkpoint ID after the prune.
952
+ */ async handlePruneL2Blocks(latestBlock, newCheckpoint) {
953
+ const deleteAllTxs = this.config.txPoolDeleteTxsAfterReorg && await this.isEpochPrune(newCheckpoint);
954
+ await this.txPool.handlePrunedBlocks(latestBlock, {
955
+ deleteAllTxs
956
+ });
957
+ }
958
+ /**
959
+ * Returns true if the prune is an epoch prune (new checkpoint number is less than old).
960
+ * If the checkpoint number stays the same or increases, the prune is within a checkpoint.
961
+ */ async isEpochPrune(newCheckpoint) {
962
+ const tips = await this.l2Tips.getL2Tips();
963
+ const oldCheckpointNumber = tips.checkpointed.checkpoint.number;
964
+ if (oldCheckpointNumber <= CheckpointNumber.INITIAL) {
965
+ return false;
966
+ }
967
+ const newCheckpointNumber = newCheckpoint.number;
968
+ // We check that the new checkpoint number is less than the old checkpoint number in order to consider it an epoch prune.
969
+ // To be more certain that it is an epoch prune, we will check that at least 2 checkpoints were removed.
970
+ // This means we should avoid thinking checkpoints removed by L1 re-orgs are epoch prunes
971
+ const thresholdForEpochPrune = CheckpointNumber(oldCheckpointNumber - 2);
972
+ const isEpochPrune = newCheckpointNumber <= thresholdForEpochPrune;
973
+ if (isEpochPrune) {
974
+ this.log.info(`Detected epoch prune to ${newCheckpointNumber}`, {
975
+ oldCheckpointNumber,
976
+ newCheckpointNumber,
977
+ thresholdForEpochPrune
978
+ });
979
+ }
980
+ return isEpochPrune;
981
+ }
982
+ /** Calls prepareForSlot for the given slot if it advances past the last slot we prepared for. */ async maybeCallPrepareForSlot(slot) {
983
+ if (slot <= this.lastSlotProcessed) {
984
+ return;
985
+ }
986
+ this.lastSlotProcessed = slot;
987
+ await this.txPool.prepareForSlot(slot);
988
+ }
989
+ async startServiceIfSynched() {
990
+ if (this.currentState !== P2PClientState.SYNCHING) {
991
+ return;
992
+ }
993
+ const tips = await this.l2Tips.getL2Tips();
994
+ const syncedFinalizedBlock = tips.finalized.block.number;
995
+ const syncedProvenBlock = tips.proven.block.number;
996
+ const syncedLatestBlock = tips.proposed.number;
997
+ if (syncedLatestBlock >= this.latestBlockNumberAtStart && syncedProvenBlock >= this.provenBlockNumberAtStart && syncedFinalizedBlock >= this.finalizedBlockNumberAtStart) {
998
+ this.log.info(`Completed P2P client sync to block ${syncedLatestBlock}. Starting service.`, {
999
+ syncedLatestBlock,
1000
+ syncedProvenBlock,
1001
+ syncedFinalizedBlock
1002
+ });
1003
+ this.setCurrentState(P2PClientState.RUNNING);
1004
+ if (this.syncResolvers !== undefined) {
1005
+ // A throw here would be swallowed by the block stream event handler, so we reject the promise returned by
1006
+ // start instead, which makes node startup fail rather than run on with a dead p2p stack.
1007
+ try {
1008
+ await this.p2pService.start();
1009
+ } catch (err) {
1010
+ this.log.fatal(`Failed to start p2p service`, {
1011
+ err,
1012
+ syncedLatestBlock
1013
+ });
1014
+ this.syncResolvers.reject(err);
1015
+ return;
1016
+ }
1017
+ this.syncResolvers.resolve();
1018
+ }
1019
+ }
1020
+ }
1021
+ /**
1022
+ * Method to set the value of the current state.
1023
+ * @param newState - New state value.
1024
+ */ setCurrentState(newState) {
1025
+ const oldState = this.currentState;
1026
+ this.currentState = newState;
1027
+ this.log.debug(`Moved from state ${P2PClientState[oldState]} to ${P2PClientState[this.currentState]}`);
1028
+ }
1029
+ validateTxsReceivedInBlockProposal(txs) {
1030
+ return this.p2pService.validateTxsReceivedInBlockProposal(txs);
1031
+ }
1032
+ /**
1033
+ * Protects existing transactions by hash for a given slot.
1034
+ * Returns hashes of transactions that weren't found in the pool.
1035
+ * @param txHashes - Hashes of the transactions to protect.
1036
+ * @param blockHeader - The block header providing slot context.
1037
+ * @returns Hashes of transactions not found in the pool.
1038
+ */ protectTxs(txHashes, blockHeader) {
1039
+ return this.txPool.protectTxs(txHashes, blockHeader);
1040
+ }
1041
+ /**
1042
+ * Prepares the pool for a new slot.
1043
+ * Unprotects transactions from earlier slots and validates them.
1044
+ * @param slotNumber - The slot number to prepare for
1045
+ */ async prepareForSlot(slotNumber) {
1046
+ await this.txPool.prepareForSlot(slotNumber);
1047
+ }
1048
+ handleAuthRequestFromPeer(authRequest, peerId) {
1049
+ return this.p2pService.handleAuthRequestFromPeer(authRequest, peerId);
1050
+ }
1051
+ }