@aztec/p2p 0.0.1-commit.e3c1de76 → 0.0.1-commit.e57c76e

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 (553) hide show
  1. package/README.md +129 -3
  2. package/dest/bootstrap/bootstrap.d.ts +1 -1
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +9 -1
  5. package/dest/client/factory.d.ts +13 -12
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +61 -17
  8. package/dest/client/interface.d.ts +58 -36
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +52 -58
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +233 -235
  13. package/dest/config.d.ts +162 -89
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +153 -42
  16. package/dest/errors/p2p-service.error.d.ts +9 -0
  17. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  18. package/dest/errors/p2p-service.error.js +10 -0
  19. package/dest/errors/reqresp.error.d.ts +1 -20
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +0 -21
  22. package/dest/errors/tx-pool.error.d.ts +8 -0
  23. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  24. package/dest/errors/tx-pool.error.js +9 -0
  25. package/dest/index.d.ts +2 -2
  26. package/dest/index.d.ts.map +1 -1
  27. package/dest/index.js +1 -1
  28. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +162 -106
  29. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool.js +511 -3
  31. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  32. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +507 -125
  34. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  35. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  36. package/dest/mem_pools/attestation_pool/index.js +1 -2
  37. package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
  38. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  39. package/dest/mem_pools/attestation_pool/mocks.js +7 -5
  40. package/dest/mem_pools/index.d.ts +3 -3
  41. package/dest/mem_pools/index.d.ts.map +1 -1
  42. package/dest/mem_pools/index.js +1 -1
  43. package/dest/mem_pools/instrumentation.d.ts +4 -2
  44. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  45. package/dest/mem_pools/instrumentation.js +33 -15
  46. package/dest/mem_pools/interface.d.ts +5 -5
  47. package/dest/mem_pools/interface.d.ts.map +1 -1
  48. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  49. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  50. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  51. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +39 -0
  52. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  53. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +97 -0
  54. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  55. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  56. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  57. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  58. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  59. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  60. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  61. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  62. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
  63. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  64. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  65. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
  66. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +11 -0
  67. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  68. package/dest/mem_pools/tx_pool_v2/eviction/index.js +12 -0
  69. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  70. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  71. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  72. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  73. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  74. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  75. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  76. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  77. package/dest/mem_pools/{tx_pool → tx_pool_v2}/eviction/invalid_txs_after_mining_rule.js +16 -35
  78. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  82. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  83. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  84. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  85. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  86. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  87. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  88. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  89. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  90. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  91. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  92. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  93. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  94. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  95. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  96. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +218 -0
  97. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  98. package/dest/mem_pools/tx_pool_v2/interfaces.js +10 -0
  99. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +137 -0
  100. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  101. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +223 -0
  102. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  103. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  104. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  105. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
  106. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  107. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +337 -0
  108. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +62 -0
  109. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  110. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +167 -0
  111. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +78 -0
  112. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  113. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +914 -0
  114. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
  115. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  116. package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
  117. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +8 -4
  118. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  119. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  120. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  121. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  122. package/dest/msg_validators/clock_tolerance.js +56 -3
  123. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +10 -4
  124. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  125. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  126. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +10 -4
  127. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  128. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  129. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +21 -8
  130. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  131. package/dest/msg_validators/proposal_validator/proposal_validator.js +90 -44
  132. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  133. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  134. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +11 -18
  135. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  136. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  137. package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
  138. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  139. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  140. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  141. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  142. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +16 -3
  143. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  144. package/dest/msg_validators/tx_validator/block_header_validator.js +1 -1
  145. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  146. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  147. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  148. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  149. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  150. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  151. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  152. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  153. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  154. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +13 -3
  155. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  156. package/dest/msg_validators/tx_validator/double_spend_validator.js +4 -4
  157. package/dest/msg_validators/tx_validator/factory.d.ts +135 -7
  158. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  159. package/dest/msg_validators/tx_validator/factory.js +252 -61
  160. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  161. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  162. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  163. package/dest/msg_validators/tx_validator/gas_validator.d.ts +99 -3
  164. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  165. package/dest/msg_validators/tx_validator/gas_validator.js +137 -53
  166. package/dest/msg_validators/tx_validator/index.d.ts +5 -1
  167. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  168. package/dest/msg_validators/tx_validator/index.js +4 -0
  169. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  170. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  171. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  172. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  173. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  174. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  175. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  176. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  177. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  178. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +20 -4
  179. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  180. package/dest/msg_validators/tx_validator/timestamp_validator.js +6 -6
  181. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  182. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  183. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  184. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  185. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  186. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  187. package/dest/services/data_store.d.ts +1 -1
  188. package/dest/services/data_store.d.ts.map +1 -1
  189. package/dest/services/data_store.js +5 -5
  190. package/dest/services/discv5/discV5_service.d.ts +2 -1
  191. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  192. package/dest/services/discv5/discV5_service.js +35 -8
  193. package/dest/services/dummy_service.d.ts +22 -18
  194. package/dest/services/dummy_service.d.ts.map +1 -1
  195. package/dest/services/dummy_service.js +22 -20
  196. package/dest/services/encoding.d.ts +7 -3
  197. package/dest/services/encoding.d.ts.map +1 -1
  198. package/dest/services/encoding.js +18 -11
  199. package/dest/services/gossipsub/index.d.ts +3 -0
  200. package/dest/services/gossipsub/index.d.ts.map +1 -0
  201. package/dest/services/gossipsub/index.js +2 -0
  202. package/dest/services/gossipsub/scoring.d.ts +21 -3
  203. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  204. package/dest/services/gossipsub/scoring.js +24 -7
  205. package/dest/services/gossipsub/topic_score_params.d.ts +184 -0
  206. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  207. package/dest/services/gossipsub/topic_score_params.js +363 -0
  208. package/dest/services/index.d.ts +2 -1
  209. package/dest/services/index.d.ts.map +1 -1
  210. package/dest/services/index.js +1 -0
  211. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  212. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  213. package/dest/services/libp2p/instrumentation.js +14 -0
  214. package/dest/services/libp2p/libp2p_service.d.ts +102 -60
  215. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  216. package/dest/services/libp2p/libp2p_service.js +685 -562
  217. package/dest/services/peer-manager/metrics.d.ts +3 -1
  218. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  219. package/dest/services/peer-manager/metrics.js +6 -0
  220. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  221. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  222. package/dest/services/peer-manager/peer_manager.js +40 -11
  223. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  224. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  225. package/dest/services/peer-manager/peer_scoring.js +57 -12
  226. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +7 -10
  227. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  228. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +100 -132
  229. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +11 -11
  230. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  231. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +11 -13
  232. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  233. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +31 -46
  234. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
  235. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  236. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
  237. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  238. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  239. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  240. package/dest/services/reqresp/config.d.ts +3 -3
  241. package/dest/services/reqresp/config.d.ts.map +1 -1
  242. package/dest/services/reqresp/interface.d.ts +25 -18
  243. package/dest/services/reqresp/interface.d.ts.map +1 -1
  244. package/dest/services/reqresp/interface.js +23 -19
  245. package/dest/services/reqresp/metrics.d.ts +1 -1
  246. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  247. package/dest/services/reqresp/metrics.js +0 -1
  248. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  249. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  250. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  251. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  252. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  253. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +34 -26
  254. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +32 -16
  255. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  256. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +68 -34
  257. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  258. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  259. package/dest/services/reqresp/protocols/index.js +0 -1
  260. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  261. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  262. package/dest/services/reqresp/protocols/tx.js +21 -3
  263. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  264. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  265. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  266. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  267. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  268. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  269. package/dest/services/reqresp/reqresp.d.ts +7 -29
  270. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  271. package/dest/services/reqresp/reqresp.js +53 -218
  272. package/dest/services/service.d.ts +46 -13
  273. package/dest/services/service.d.ts.map +1 -1
  274. package/dest/services/tx_collection/config.d.ts +11 -14
  275. package/dest/services/tx_collection/config.d.ts.map +1 -1
  276. package/dest/services/tx_collection/config.js +26 -33
  277. package/dest/services/tx_collection/file_store_tx_collection.d.ts +37 -0
  278. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  279. package/dest/services/tx_collection/file_store_tx_collection.js +127 -0
  280. package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
  281. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  282. package/dest/services/tx_collection/file_store_tx_source.js +100 -0
  283. package/dest/services/tx_collection/index.d.ts +3 -3
  284. package/dest/services/tx_collection/index.d.ts.map +1 -1
  285. package/dest/services/tx_collection/index.js +1 -1
  286. package/dest/services/tx_collection/instrumentation.js +1 -2
  287. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  288. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  289. package/dest/services/tx_collection/request_tracker.js +84 -0
  290. package/dest/services/tx_collection/tx_collection.d.ts +45 -51
  291. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  292. package/dest/services/tx_collection/tx_collection.js +296 -68
  293. package/dest/services/tx_collection/tx_collection_sink.d.ts +19 -9
  294. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  295. package/dest/services/tx_collection/tx_collection_sink.js +28 -31
  296. package/dest/services/tx_collection/tx_source.d.ts +13 -7
  297. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  298. package/dest/services/tx_collection/tx_source.js +26 -7
  299. package/dest/services/tx_file_store/config.d.ts +16 -0
  300. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  301. package/dest/services/tx_file_store/config.js +22 -0
  302. package/dest/services/tx_file_store/index.d.ts +4 -0
  303. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  304. package/dest/services/tx_file_store/index.js +3 -0
  305. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  306. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  307. package/dest/services/tx_file_store/instrumentation.js +29 -0
  308. package/dest/services/tx_file_store/tx_file_store.d.ts +46 -0
  309. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  310. package/dest/services/tx_file_store/tx_file_store.js +142 -0
  311. package/dest/services/tx_provider.d.ts +6 -4
  312. package/dest/services/tx_provider.d.ts.map +1 -1
  313. package/dest/services/tx_provider.js +12 -8
  314. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  315. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  316. package/dest/test-helpers/make-test-p2p-clients.js +5 -3
  317. package/dest/test-helpers/mock-pubsub.d.ts +46 -6
  318. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  319. package/dest/test-helpers/mock-pubsub.js +115 -14
  320. package/dest/test-helpers/reqresp-nodes.d.ts +5 -7
  321. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  322. package/dest/test-helpers/reqresp-nodes.js +19 -20
  323. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  324. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  325. package/dest/test-helpers/test_tx_provider.js +3 -0
  326. package/dest/test-helpers/testbench-utils.d.ts +53 -50
  327. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  328. package/dest/test-helpers/testbench-utils.js +169 -75
  329. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  330. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  331. package/dest/testbench/p2p_client_testbench_worker.js +94 -48
  332. package/dest/testbench/worker_client_manager.d.ts +12 -6
  333. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  334. package/dest/testbench/worker_client_manager.js +57 -11
  335. package/dest/util.d.ts +13 -8
  336. package/dest/util.d.ts.map +1 -1
  337. package/dest/util.js +35 -14
  338. package/dest/versioning.d.ts +3 -6
  339. package/dest/versioning.d.ts.map +1 -1
  340. package/dest/versioning.js +3 -24
  341. package/package.json +15 -14
  342. package/src/bootstrap/bootstrap.ts +9 -1
  343. package/src/client/factory.ts +130 -30
  344. package/src/client/interface.ts +70 -44
  345. package/src/client/p2p_client.ts +278 -299
  346. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  347. package/src/config.ts +267 -46
  348. package/src/errors/p2p-service.error.ts +11 -0
  349. package/src/errors/reqresp.error.ts +0 -25
  350. package/src/errors/tx-pool.error.ts +12 -0
  351. package/src/index.ts +1 -1
  352. package/src/mem_pools/attestation_pool/attestation_pool.ts +575 -94
  353. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +617 -141
  354. package/src/mem_pools/attestation_pool/index.ts +9 -2
  355. package/src/mem_pools/attestation_pool/mocks.ts +14 -8
  356. package/src/mem_pools/index.ts +2 -2
  357. package/src/mem_pools/instrumentation.ts +22 -14
  358. package/src/mem_pools/interface.ts +4 -4
  359. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  360. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  361. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +112 -0
  362. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  363. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  364. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
  365. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  366. package/src/mem_pools/tx_pool_v2/eviction/index.ts +28 -0
  367. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  368. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  369. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  370. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  371. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  372. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  373. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  374. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  375. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  376. package/src/mem_pools/tx_pool_v2/interfaces.ts +250 -0
  377. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +349 -0
  378. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  379. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +430 -0
  380. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +238 -0
  381. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1090 -0
  382. package/src/msg_validators/attestation_validator/README.md +49 -0
  383. package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
  384. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +16 -9
  385. package/src/msg_validators/clock_tolerance.ts +73 -3
  386. package/src/msg_validators/proposal_validator/README.md +123 -0
  387. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +24 -4
  388. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +35 -7
  389. package/src/msg_validators/proposal_validator/proposal_validator.ts +114 -47
  390. package/src/msg_validators/tx_validator/README.md +127 -0
  391. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +8 -17
  392. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  393. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  394. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  395. package/src/msg_validators/tx_validator/block_header_validator.ts +15 -3
  396. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  397. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  398. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  399. package/src/msg_validators/tx_validator/double_spend_validator.ts +11 -6
  400. package/src/msg_validators/tx_validator/factory.ts +407 -80
  401. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  402. package/src/msg_validators/tx_validator/gas_validator.ts +199 -54
  403. package/src/msg_validators/tx_validator/index.ts +4 -0
  404. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  405. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  406. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  407. package/src/msg_validators/tx_validator/timestamp_validator.ts +23 -18
  408. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  409. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  410. package/src/services/data_store.ts +5 -13
  411. package/src/services/discv5/discV5_service.ts +38 -5
  412. package/src/services/dummy_service.ts +32 -45
  413. package/src/services/encoding.ts +18 -10
  414. package/src/services/gossipsub/README.md +641 -0
  415. package/src/services/gossipsub/index.ts +2 -0
  416. package/src/services/gossipsub/scoring.ts +29 -5
  417. package/src/services/gossipsub/topic_score_params.ts +519 -0
  418. package/src/services/index.ts +1 -0
  419. package/src/services/libp2p/instrumentation.ts +14 -0
  420. package/src/services/libp2p/libp2p_service.ts +738 -620
  421. package/src/services/peer-manager/metrics.ts +7 -0
  422. package/src/services/peer-manager/peer_manager.ts +46 -11
  423. package/src/services/peer-manager/peer_scoring.ts +52 -5
  424. package/src/services/reqresp/README.md +215 -0
  425. package/src/services/reqresp/batch-tx-requester/README.md +53 -14
  426. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +101 -147
  427. package/src/services/reqresp/batch-tx-requester/interface.ts +14 -10
  428. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +30 -71
  429. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  430. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  431. package/src/services/reqresp/config.ts +2 -2
  432. package/src/services/reqresp/interface.ts +45 -46
  433. package/src/services/reqresp/metrics.ts +0 -1
  434. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  435. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +43 -30
  436. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +84 -34
  437. package/src/services/reqresp/protocols/index.ts +0 -1
  438. package/src/services/reqresp/protocols/tx.ts +23 -3
  439. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  440. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  441. package/src/services/reqresp/reqresp.ts +61 -264
  442. package/src/services/service.ts +62 -29
  443. package/src/services/tx_collection/config.ts +40 -49
  444. package/src/services/tx_collection/file_store_tx_collection.ts +153 -0
  445. package/src/services/tx_collection/file_store_tx_source.ts +129 -0
  446. package/src/services/tx_collection/index.ts +2 -6
  447. package/src/services/tx_collection/instrumentation.ts +1 -1
  448. package/src/services/tx_collection/request_tracker.ts +127 -0
  449. package/src/services/tx_collection/tx_collection.ts +362 -110
  450. package/src/services/tx_collection/tx_collection_sink.ts +32 -36
  451. package/src/services/tx_collection/tx_source.ts +28 -8
  452. package/src/services/tx_file_store/config.ts +37 -0
  453. package/src/services/tx_file_store/index.ts +3 -0
  454. package/src/services/tx_file_store/instrumentation.ts +36 -0
  455. package/src/services/tx_file_store/tx_file_store.ts +163 -0
  456. package/src/services/tx_provider.ts +15 -9
  457. package/src/test-helpers/make-test-p2p-clients.ts +7 -6
  458. package/src/test-helpers/mock-pubsub.ts +137 -14
  459. package/src/test-helpers/reqresp-nodes.ts +17 -29
  460. package/src/test-helpers/test_tx_provider.ts +5 -0
  461. package/src/test-helpers/testbench-utils.ts +175 -96
  462. package/src/testbench/p2p_client_testbench_worker.ts +100 -63
  463. package/src/testbench/worker_client_manager.ts +72 -25
  464. package/src/util.ts +40 -19
  465. package/src/versioning.ts +3 -33
  466. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  467. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  468. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -305
  469. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  470. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  471. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  472. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  473. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  474. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  475. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  476. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  477. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  478. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  479. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  480. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  481. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  482. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  483. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  484. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  485. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  486. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  487. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  488. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  489. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  490. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  491. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  492. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  493. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  494. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  495. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  496. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  497. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  498. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  499. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  500. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  501. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  502. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  503. package/dest/mem_pools/tx_pool/index.js +0 -2
  504. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  505. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  506. package/dest/mem_pools/tx_pool/priority.js +0 -15
  507. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  508. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  509. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  510. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  511. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  512. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  513. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  514. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  515. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  516. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  517. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  518. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  519. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  520. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  521. package/dest/services/reqresp/protocols/block.js +0 -32
  522. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -53
  523. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  524. package/dest/services/tx_collection/fast_tx_collection.js +0 -311
  525. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -48
  526. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  527. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  528. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -53
  529. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  530. package/dest/services/tx_collection/slow_tx_collection.js +0 -177
  531. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -336
  532. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  533. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  534. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  535. package/src/mem_pools/tx_pool/README.md +0 -270
  536. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  537. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  538. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  539. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  540. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  541. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  542. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  543. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  544. package/src/mem_pools/tx_pool/index.ts +0 -2
  545. package/src/mem_pools/tx_pool/priority.ts +0 -20
  546. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  547. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  548. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  549. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  550. package/src/services/reqresp/protocols/block.ts +0 -37
  551. package/src/services/tx_collection/fast_tx_collection.ts +0 -364
  552. package/src/services/tx_collection/proposal_tx_collector.ts +0 -114
  553. package/src/services/tx_collection/slow_tx_collection.ts +0 -233
@@ -0,0 +1,49 @@
1
+ # Attestation Validation
2
+
3
+ This module validates `CheckpointAttestation` gossipsub messages. Attestations are signatures from committee members endorsing a checkpoint proposal.
4
+
5
+ **Topic**: `checkpoint_attestation` | **Snappy size limit**: 5 KB
6
+
7
+ ## Stage 1: AttestationValidator (Gossipsub Validation)
8
+
9
+ | # | Rule | Consequence | Severity | File |
10
+ |---|------|-------------|----------|------|
11
+ | 1 | **Slot timeliness**: `currentSlot` or `nextSlot`. Previous slot within 500ms: IGNORE. Older: REJECT. | REJECT or IGNORE | HighToleranceError | `attestation_validator.ts` |
12
+ | 2 | **Attester signature**: `getSender()` must recover valid address | REJECT | LowToleranceError | same |
13
+ | 3 | **Attester in committee**: recovered address in committee for slot | REJECT | HighToleranceError | same |
14
+ | 4 | **Proposer exists**: `getProposerAttesterAddressInSlot` must return defined | REJECT | HighToleranceError | same |
15
+ | 5 | **Proposer signature**: `getProposer()` must recover valid address | REJECT | LowToleranceError | same |
16
+ | 6 | **Proposer matches expected**: recovered proposer = expected for slot | REJECT | HighToleranceError | same |
17
+ | 7 | **NoCommitteeError**: committee unavailable | REJECT | LowToleranceError | same |
18
+
19
+ **Fisherman mode extension** (`FishermanAttestationValidator`): if a checkpoint proposal for the same archive exists in pool, the attestation's `ConsensusPayload` must `.equals()` the stored proposal's payload. On mismatch: REJECT + LowToleranceError.
20
+
21
+ ## Stage 2: Pool Admission
22
+
23
+ | # | Rule | Consequence |
24
+ |---|------|-------------|
25
+ | 8 | Sender recoverable (pool-side) | Silent drop |
26
+ | 9 | Not a duplicate (same slot + proposalId + signer) | IGNORE |
27
+ | 10 | Per-signer cap: `MAX_ATTESTATIONS_PER_SLOT_AND_SIGNER` = 2 | IGNORE |
28
+
29
+ Own attestations added via `addOwnCheckpointAttestations` bypass the per-signer cap.
30
+
31
+ ## Stage 3: Equivocation Detection
32
+
33
+ When a signer's attestation count for a slot reaches exactly 2 (different proposals): `duplicateAttestationCallback` fires -> `WANT_TO_SLASH_EVENT` with `OffenseType.DUPLICATE_ATTESTATION`. Attestation still ACCEPTED and rebroadcast. Callback fires once (not again at count 3+).
34
+
35
+ ## Validation at L1 Checkpoint Submission (Archiver)
36
+
37
+ | Rule | Consequence | File |
38
+ |------|-------------|------|
39
+ | Each attestation must have recoverable signature (or address-only is allowed but does not count toward quorum) | Checkpoint rejected as invalid | `archiver/src/modules/validation.ts` |
40
+ | Attestation at index `i` must correspond to committee member at index `i` | Checkpoint rejected as invalid | same |
41
+ | Valid attestation count >= floor(committee * 2/3) + 1 | Checkpoint rejected as invalid | same |
42
+ | No committee / escape hatch open | Accepted unconditionally | same |
43
+
44
+ Note: `skipValidateCheckpointAttestations` config flag bypasses all archiver attestation validation.
45
+
46
+ ## Gossipsub Topic Scoring
47
+
48
+ P3 enabled with expected messages per slot = `targetCommitteeSize`. Conservative threshold (30% of convergence value). Max P3 penalty = -34 per topic.
49
+
@@ -3,19 +3,35 @@ import { NoCommitteeError } from '@aztec/ethereum/contracts';
3
3
  import { type Logger, createLogger } from '@aztec/foundation/log';
4
4
  import {
5
5
  type CheckpointAttestation,
6
+ type CoordinationSignatureContext,
6
7
  type P2PValidator,
7
8
  PeerErrorSeverity,
8
9
  type ValidationResult,
10
+ hasValidSignatureContext,
9
11
  } from '@aztec/stdlib/p2p';
10
12
 
11
- import { isWithinClockTolerance } from '../clock_tolerance.js';
13
+ import { PipeliningWindow, isWithinClockTolerance } from '../clock_tolerance.js';
12
14
 
13
15
  export class CheckpointAttestationValidator implements P2PValidator<CheckpointAttestation> {
14
16
  protected epochCache: EpochCacheInterface;
15
17
  protected logger: Logger;
18
+ private readonly pipeliningWindow: PipeliningWindow;
19
+ protected readonly signatureContext: CoordinationSignatureContext;
16
20
 
17
- constructor(epochCache: EpochCacheInterface) {
21
+ constructor(
22
+ epochCache: EpochCacheInterface,
23
+ opts: {
24
+ l1PublishingTime?: number;
25
+ p2pPropagationTime?: number;
26
+ signatureContext: CoordinationSignatureContext;
27
+ },
28
+ ) {
18
29
  this.epochCache = epochCache;
30
+ this.pipeliningWindow = new PipeliningWindow(epochCache, {
31
+ l1PublishingTime: opts.l1PublishingTime,
32
+ p2pPropagationTime: opts.p2pPropagationTime,
33
+ });
34
+ this.signatureContext = opts.signatureContext;
19
35
  this.logger = createLogger('p2p:checkpoint-attestation-validator');
20
36
  }
21
37
 
@@ -23,18 +39,34 @@ export class CheckpointAttestationValidator implements P2PValidator<CheckpointAt
23
39
  const slotNumber = message.payload.header.slotNumber;
24
40
 
25
41
  try {
26
- const { currentSlot, nextSlot } = this.epochCache.getCurrentAndNextSlot();
42
+ // Cross-chain replay check: reject attestations that carry a foreign signing domain.
43
+ if (!hasValidSignatureContext(message.payload, this.signatureContext)) {
44
+ this.logger.warn(`Rejecting checkpoint attestation with foreign signature context for slot ${slotNumber}`, {
45
+ chainId: message.payload.signatureContext.chainId,
46
+ rollupAddress: message.payload.signatureContext.rollupAddress.toString(),
47
+ expectedChainId: this.signatureContext.chainId,
48
+ expectedRollupAddress: this.signatureContext.rollupAddress.toString(),
49
+ });
50
+ return { result: 'reject', severity: PeerErrorSeverity.LowToleranceError };
51
+ }
52
+
53
+ // Use target slots since proposals target pipeline slots (slot + 1 when pipelining).
54
+ const { targetSlot, nextSlot } = this.epochCache.getTargetAndNextSlot();
27
55
 
28
- if (slotNumber !== currentSlot && slotNumber !== nextSlot) {
29
- // Check if message is for previous slot and within clock tolerance
30
- if (!isWithinClockTolerance(slotNumber, currentSlot, this.epochCache)) {
56
+ if (slotNumber !== targetSlot && slotNumber !== nextSlot) {
57
+ // When pipelining, accept attestations for the current slot (built in the previous slot)
58
+ // until the target slot reaches its L1 publish cutoff.
59
+ if (this.pipeliningWindow.acceptsAttestation(slotNumber)) {
60
+ // Fall through to remaining validation (signature, committee, etc.)
61
+ } else if (!isWithinClockTolerance(slotNumber, targetSlot, this.epochCache)) {
31
62
  this.logger.warn(
32
- `Checkpoint attestation slot ${slotNumber} is not current (${currentSlot}) or next (${nextSlot}) slot`,
63
+ `Checkpoint attestation slot ${slotNumber} is not current (${targetSlot}) or next (${nextSlot}) slot`,
33
64
  );
34
65
  return { result: 'reject', severity: PeerErrorSeverity.HighToleranceError };
66
+ } else {
67
+ this.logger.debug(`Ignoring checkpoint attestation for previous slot ${slotNumber} within clock tolerance`);
68
+ return { result: 'ignore' };
35
69
  }
36
- this.logger.debug(`Ignoring checkpoint attestation for previous slot ${slotNumber} within clock tolerance`);
37
- return { result: 'ignore' };
38
70
  }
39
71
 
40
72
  // Verify the signature is valid
@@ -1,8 +1,13 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import { type CheckpointAttestation, PeerErrorSeverity, type ValidationResult } from '@aztec/stdlib/p2p';
2
+ import {
3
+ type CheckpointAttestation,
4
+ type CoordinationSignatureContext,
5
+ PeerErrorSeverity,
6
+ type ValidationResult,
7
+ } from '@aztec/stdlib/p2p';
3
8
  import { Attributes, Metrics, type TelemetryClient, createUpDownCounterWithDefault } from '@aztec/telemetry-client';
4
9
 
5
- import type { AttestationPool } from '../../mem_pools/attestation_pool/attestation_pool.js';
10
+ import type { AttestationPoolApi } from '../../mem_pools/attestation_pool/attestation_pool.js';
6
11
  import { CheckpointAttestationValidator } from './attestation_validator.js';
7
12
 
8
13
  /**
@@ -18,10 +23,15 @@ export class FishermanAttestationValidator extends CheckpointAttestationValidato
18
23
 
19
24
  constructor(
20
25
  epochCache: EpochCacheInterface,
21
- private attestationPool: AttestationPool,
26
+ private attestationPool: AttestationPoolApi,
22
27
  telemetryClient: TelemetryClient,
28
+ opts: {
29
+ l1PublishingTime?: number;
30
+ p2pPropagationTime?: number;
31
+ signatureContext: CoordinationSignatureContext;
32
+ },
23
33
  ) {
24
- super(epochCache);
34
+ super(epochCache, opts);
25
35
  this.logger = this.logger.createChild('[FISHERMAN]');
26
36
 
27
37
  const meter = telemetryClient.getMeter('FishermanAttestationValidator');
@@ -54,8 +64,7 @@ export class FishermanAttestationValidator extends CheckpointAttestationValidato
54
64
  return { result: 'accept' };
55
65
  }
56
66
 
57
- const proposalId = message.archive.toString();
58
- const proposal = await this.attestationPool.getCheckpointProposal(proposalId);
67
+ const proposal = await this.attestationPool.getCheckpointProposal(message.payload.header.slotNumber);
59
68
 
60
69
  if (proposal) {
61
70
  // Compare the attestation payload with the proposal payload
@@ -84,9 +93,7 @@ export class FishermanAttestationValidator extends CheckpointAttestationValidato
84
93
  }
85
94
  } else {
86
95
  // We might receive attestations before proposals in some cases
87
- this.logger.debug(
88
- `Received attestation for slot ${slotNumberBigInt} but proposal not found yet. ` + `Proposal ID: ${proposalId}`,
89
- );
96
+ this.logger.debug(`Received attestation for slot ${slotNumberBigInt} but proposal not found yet.`);
90
97
  }
91
98
 
92
99
  return { result: 'accept' };
@@ -1,5 +1,6 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
2
  import { SlotNumber } from '@aztec/foundation/branded-types';
3
+ import { DEFAULT_P2P_PROPAGATION_TIME, createPipelinedCheckpointTimingModel } from '@aztec/stdlib/timetable';
3
4
 
4
5
  /**
5
6
  * Maximum clock disparity tolerance for P2P message validation (in milliseconds).
@@ -36,10 +37,11 @@ export function isWithinClockTolerance(
36
37
  }
37
38
 
38
39
  // Check how far we are into the current slot (in milliseconds)
39
- const { ts: slotStartTs, nowMs, slot } = epochCache.getEpochAndSlotNow();
40
+ const { ts: slotStartTs, nowMs } = epochCache.getEpochAndSlotNow();
41
+ const targetSlot = epochCache.getTargetSlot();
40
42
 
41
- // Sanity check: ensure the epoch cache's current slot matches the expected current slot
42
- if (slot !== currentSlot) {
43
+ // Sanity check: ensure the epoch cache's target slot matches the expected current slot
44
+ if (targetSlot !== currentSlot) {
43
45
  return false;
44
46
  }
45
47
 
@@ -49,3 +51,71 @@ export function isWithinClockTolerance(
49
51
 
50
52
  return elapsedMs < MAXIMUM_GOSSIP_CLOCK_DISPARITY_MS;
51
53
  }
54
+
55
+ /**
56
+ * Checks if a straggler message for the previous target slot should be accepted.
57
+ *
58
+ * Proposals and attestations carry the target slot N. Most of the time the receiver is either
59
+ * still in the build slot N-1 (accepted via the main `slotNumber === targetSlot` match) or in the
60
+ * target slot N (accepted again via `targetSlot`). Stragglers that arrive after the receiver has
61
+ * rolled past the target slot fall to this check: accept `messageSlot === slotNow` while we're
62
+ * still within the first `windowSeconds + clock-disparity` of the slot.
63
+ *
64
+ * Under the early-pipelining schedule `windowSeconds` is small (0 for proposals,
65
+ * `2*p2pPropagationTime` for attestations) since the proposer collects everything
66
+ * before the slot boundary.
67
+ *
68
+ * @param messageSlot - The slot number from the received message
69
+ * @param epochCache - EpochCache to get timing state
70
+ * @param windowSeconds - How far into the current slot we still accept previous-target messages
71
+ * @returns true if the message is for the current wallclock slot and we're within the grace period
72
+ */
73
+ function isWithinPipeliningWindow(
74
+ messageSlot: SlotNumber,
75
+ epochCache: EpochCacheInterface,
76
+ windowSeconds: number,
77
+ ): boolean {
78
+ const currentSlot = epochCache.getSlotNow();
79
+ if (messageSlot !== currentSlot) {
80
+ return false;
81
+ }
82
+
83
+ const { ts: slotStartTs, nowMs } = epochCache.getEpochAndSlotNow();
84
+ const slotStartMs = slotStartTs * 1000n;
85
+ const elapsedMs = Number(nowMs - slotStartMs);
86
+ const windowMs = windowSeconds * 1000 + MAXIMUM_GOSSIP_CLOCK_DISPARITY_MS;
87
+
88
+ return elapsedMs < windowMs;
89
+ }
90
+
91
+ export class PipeliningWindow {
92
+ private readonly proposalWindowIntoTargetSlot: number;
93
+ private readonly attestationWindowIntoTargetSlot: number;
94
+
95
+ constructor(
96
+ private readonly epochCache: EpochCacheInterface,
97
+ opts: {
98
+ p2pPropagationTime?: number;
99
+ l1PublishingTime?: number;
100
+ } = {},
101
+ ) {
102
+ const l1Constants = epochCache.getL1Constants();
103
+ const checkpointTiming = createPipelinedCheckpointTimingModel({
104
+ aztecSlotDuration: l1Constants.slotDuration,
105
+ ethereumSlotDuration: l1Constants.ethereumSlotDuration,
106
+ l1PublishingTime: opts.l1PublishingTime ?? l1Constants.ethereumSlotDuration,
107
+ p2pPropagationTime: opts.p2pPropagationTime ?? DEFAULT_P2P_PROPAGATION_TIME,
108
+ });
109
+
110
+ this.proposalWindowIntoTargetSlot = checkpointTiming.proposalWindowIntoTargetSlot;
111
+ this.attestationWindowIntoTargetSlot = checkpointTiming.attestationWindowIntoTargetSlot;
112
+ }
113
+
114
+ public acceptsProposal(messageSlot: SlotNumber): boolean {
115
+ return isWithinPipeliningWindow(messageSlot, this.epochCache, this.proposalWindowIntoTargetSlot);
116
+ }
117
+
118
+ public acceptsAttestation(messageSlot: SlotNumber): boolean {
119
+ return isWithinPipeliningWindow(messageSlot, this.epochCache, this.attestationWindowIntoTargetSlot);
120
+ }
121
+ }
@@ -0,0 +1,123 @@
1
+ # Proposal Validation
2
+
3
+ This module validates `BlockProposal` and `CheckpointProposal` gossipsub messages. Both share the same base `ProposalValidator` (neither subclass overrides `validate()`), with checkpoint-specific logic layered on top in the gossipsub handler.
4
+
5
+ ## BlockProposal
6
+
7
+ **Topic**: `block_proposal` | **Snappy size limit**: 10 MB
8
+
9
+ ### Stage 1: Gossipsub Validation (ProposalValidator)
10
+
11
+ File: `proposal_validator.ts`
12
+
13
+ | # | Rule | Consequence | Severity |
14
+ |---|------|-------------|----------|
15
+ | 1 | **Slot check**: must be `currentSlot` or `nextSlot`. Previous slot within 500ms tolerance: IGNORE. | REJECT | HighToleranceError |
16
+ | 2 | **Signature**: `getSender()` must recover a valid address. If `signedTxs` present, its recovered sender must match. | REJECT | MidToleranceError |
17
+ | 3 | **Txs permitted**: if `disableTransactions`, must have 0 txHashes and 0 embedded txs | REJECT | MidToleranceError |
18
+ | 4 | **Max txs**: `txHashes.length <= maxTxsPerBlock` | REJECT | MidToleranceError |
19
+ | 5 | **Embedded txs in txHashes**: every embedded tx's hash must appear in `txHashes` | REJECT | MidToleranceError |
20
+ | 6 | **Proposer check**: signer must match expected proposer for slot (skipped if committee size = 0) | REJECT | MidToleranceError |
21
+ | 7 | **Tx hash integrity**: each embedded tx's recomputed hash must match declared hash | REJECT | LowToleranceError |
22
+ | 8 | **NoCommitteeError**: epoch cache cannot determine committee | REJECT | LowToleranceError |
23
+
24
+ Deserialization guards: `BlockProposal.fromBuffer` and `SignedTxs.fromBuffer` both enforce `txCount <= MAX_TXS_PER_BLOCK` (65536). Violation -> REJECT + LowToleranceError.
25
+
26
+ ### Stage 2: Mempool (Attestation Pool)
27
+
28
+ | # | Rule | Consequence |
29
+ |---|------|-------------|
30
+ | 9 | **Duplicate**: same archive root already stored | IGNORE (no penalty) |
31
+ | 10 | **Per-position cap**: max 2 proposals per (slot, indexWithinCheckpoint) | REJECT + HighToleranceError |
32
+ | 11 | **Equivocation**: >1 distinct proposal for same (slot, index) | ACCEPT (rebroadcast for detection). At count=2: `duplicateProposalCallback` fires -> slash event (`OffenseType.DUPLICATE_PROPOSAL`, configured via `slashDuplicateProposalPenalty`) |
33
+
34
+ ### Stage 3: Validator-Client Processing (BlockProposalHandler)
35
+
36
+ Only runs on validator nodes. Non-validator nodes use a default handler that triggers tx collection without deep validation.
37
+
38
+ | # | Rule | Failure Reason |
39
+ |---|------|----------------|
40
+ | 12 | Signature re-check | `invalid_proposal` |
41
+ | 13 | ProposalValidator re-run | `invalid_proposal` |
42
+ | 14 | Self-proposal filter | Ignored silently |
43
+ | 15 | Parent block exists (`lastArchive.root` matches known block or genesis) | `parent_block_not_found` |
44
+ | 16 | Parent block slot <= proposal slot | `parent_block_wrong_slot` |
45
+ | 17 | Block number not already in archiver | `block_number_already_exists` |
46
+ | 18 | Checkpoint number consistency (multiple sub-rules for first/non-first blocks) | `invalid_proposal` |
47
+ | 19 | Global variables consistency (non-first block: chainId, version, slot, timestamp, coinbase, feeRecipient, gasFees match parent) | `global_variables_mismatch` |
48
+ | 20 | L1-to-L2 message hash matches `proposal.inHash` | `in_hash_mismatch` |
49
+ | 21 | All txs referenced by `txHashes` obtainable | `txs_not_available` |
50
+ | 22 | **Re-execution**: processed tx count matches `txHashes.length` | `timeout` (ReExTimeoutError) |
51
+ | 23 | **Re-execution**: no failed txs | `failed_txs` (ReExFailedTxsError) -- **SLASHABLE** |
52
+ | 24 | **Re-execution**: archive root and header match proposal | `state_mismatch` (ReExStateMismatchError) -- **SLASHABLE** |
53
+
54
+ **Escape hatch**: during escape hatch periods (`isEscapeHatchOpenAtSlot`), re-execution and slashing are both disabled, and the proposal is rejected locally.
55
+
56
+ **Conditional re-execution**: rules 22-24 only run when at least one condition is true: `fishermanMode` enabled, `slashBroadcastedInvalidBlockPenalty > 0`, committee membership, `alwaysReexecuteBlockProposals`, or `blobClient.canUpload()`.
57
+
58
+ **Slashing**: only `state_mismatch` and `failed_txs` trigger on-chain slashing (`OffenseType.BROADCASTED_INVALID_BLOCK_PROPOSAL`, gated by `slashBroadcastedInvalidBlockPenalty > 0`). Unknown errors during re-execution do NOT slash.
59
+
60
+ **Embedded tx validation**: txs in `signedTxs` are validated via `createTxValidatorForBlockProposalReceivedTxs` (well-formedness only) when stored in the tx pool. Invalid embedded txs are rejected from the pool but do not cause the block proposal itself to be rejected at gossipsub level.
61
+
62
+ ### Gossipsub Topic Scoring
63
+
64
+ | Parameter | Effect |
65
+ |-----------|--------|
66
+ | P4 (invalidMessageDeliveries) | weight = -20, decay over 4 slots |
67
+ | P3 (meshMessageDeliveries) | Enabled only when `expectedBlockProposalsPerSlot > 0` (MBPS mode) |
68
+ | P1/P2 | Only active when P3 is enabled |
69
+
70
+ ---
71
+
72
+ ## CheckpointProposal
73
+
74
+ **Topic**: `checkpoint_proposal` | **Snappy size limit**: 10 MB
75
+
76
+ ### Stage 1: Gossipsub Validation (ProposalValidator)
77
+
78
+ Same `ProposalValidator.validate()` as BlockProposal (shared implementation, neither subclass overrides it). See BlockProposal Stage 1 rules 1-8.
79
+
80
+ ### Stage 2: Embedded Block Proposal Validation (if `lastBlock` present)
81
+
82
+ The checkpoint's embedded `lastBlock` is extracted via `getBlockProposal()` and validated through `BlockProposalValidator.validate()` plus block mempool checks.
83
+
84
+ | Rule | Consequence | File |
85
+ |------|-------------|------|
86
+ | Block proposal must pass `BlockProposalValidator.validate()` | If REJECT: entire checkpoint REJECTED | `libp2p_service.ts` |
87
+ | Block proposal must not exceed per-position cap (2) | Checkpoint REJECTED + HighToleranceError | same |
88
+ | Block equivocation detected (>1 proposals for same slot+index) | Checkpoint REJECTED (block itself is ACCEPT for re-broadcast) | same |
89
+
90
+ ### Stage 3: Mempool (Attestation Pool)
91
+
92
+ | Rule | Consequence | File |
93
+ |------|-------------|------|
94
+ | Duplicate (same archive ID) | IGNORE (no penalty). Embedded block still processed if valid. | `attestation_pool.ts` |
95
+ | Per-slot cap: `MAX_CHECKPOINT_PROPOSALS_PER_SLOT` = 2 | REJECT + HighToleranceError. Embedded block still processed. | same |
96
+
97
+ ### Stage 4: Equivocation Detection
98
+
99
+ When >1 checkpoint proposals exist for same slot (count > 1): ACCEPT (re-broadcast). At count == 2 (exactly): `duplicateProposalCallback` fires. Proposal NOT further processed. Callback fires only once per equivocation pair.
100
+
101
+ ### Stage 5: Validator-Client Consensus Validation
102
+
103
+ Determines whether the validator signs an attestation.
104
+
105
+ | Rule | Consequence | File |
106
+ |------|-------------|------|
107
+ | Escape hatch open | No attestation | `validator-client/src/validator.ts` |
108
+ | Signature invalid (re-check) | No attestation | same |
109
+ | Self-proposal | No attestation (ignored) | same |
110
+ | `feeAssetPriceModifier` outside [-100, +100] bps | No attestation | same |
111
+ | Not in committee (unless fisherman mode) | No attestation | same |
112
+ | Checkpoint header mismatch (computed vs proposal) | No attestation | same |
113
+ | Archive root mismatch | No attestation | same |
114
+ | Epoch out hash mismatch | No attestation | same |
115
+ | Last block not found / not matching | No attestation | same |
116
+ | Already attested to this or earlier slot | No attestation (unless `attestToEquivocatedProposals`) | same |
117
+
118
+ **`skipCheckpointProposalValidation` config**: when true, the re-execution checks (header/archive/epoch hash) are all skipped. Signature, fee modifier, committee, escape hatch, and equivocation checks still apply.
119
+
120
+ ### Gossipsub Topic Scoring
121
+
122
+ P3 enabled with expected rate of 1 message per slot. P4 weight = -20, max P3 penalty = -34 per topic.
123
+
@@ -1,10 +1,30 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import type { BlockProposal, P2PValidator } from '@aztec/stdlib/p2p';
2
+ import type { BlockProposal, CoordinationSignatureContext, P2PValidator, ValidationResult } from '@aztec/stdlib/p2p';
3
3
 
4
4
  import { ProposalValidator } from '../proposal_validator/proposal_validator.js';
5
5
 
6
- export class BlockProposalValidator extends ProposalValidator<BlockProposal> implements P2PValidator<BlockProposal> {
7
- constructor(epochCache: EpochCacheInterface, opts: { txsPermitted: boolean }) {
8
- super(epochCache, opts, 'p2p:block_proposal_validator');
6
+ export class BlockProposalValidator implements P2PValidator<BlockProposal> {
7
+ private proposalValidator: ProposalValidator;
8
+
9
+ constructor(
10
+ epochCache: EpochCacheInterface,
11
+ opts: {
12
+ txsPermitted: boolean;
13
+ maxTxsPerBlock?: number;
14
+ maxBlocksPerCheckpoint?: number;
15
+ p2pPropagationTime?: number;
16
+ skipSlotValidation?: boolean;
17
+ signatureContext: CoordinationSignatureContext;
18
+ },
19
+ ) {
20
+ this.proposalValidator = new ProposalValidator(epochCache, opts, 'p2p:block_proposal_validator');
21
+ }
22
+
23
+ async validate(proposal: BlockProposal): Promise<ValidationResult> {
24
+ const headerResult = await this.proposalValidator.validate(proposal);
25
+ if (headerResult.result !== 'accept') {
26
+ return headerResult;
27
+ }
28
+ return this.proposalValidator.validateTxs(proposal);
9
29
  }
10
30
  }
@@ -1,13 +1,41 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import type { CheckpointProposal, P2PValidator } from '@aztec/stdlib/p2p';
2
+ import type {
3
+ CheckpointProposal,
4
+ CoordinationSignatureContext,
5
+ P2PValidator,
6
+ ValidationResult,
7
+ } from '@aztec/stdlib/p2p';
3
8
 
4
9
  import { ProposalValidator } from '../proposal_validator/proposal_validator.js';
5
10
 
6
- export class CheckpointProposalValidator
7
- extends ProposalValidator<CheckpointProposal>
8
- implements P2PValidator<CheckpointProposal>
9
- {
10
- constructor(epochCache: EpochCacheInterface, opts: { txsPermitted: boolean }) {
11
- super(epochCache, opts, 'p2p:checkpoint_proposal_validator');
11
+ export class CheckpointProposalValidator implements P2PValidator<CheckpointProposal> {
12
+ private proposalValidator: ProposalValidator;
13
+
14
+ constructor(
15
+ epochCache: EpochCacheInterface,
16
+ opts: {
17
+ txsPermitted: boolean;
18
+ maxTxsPerBlock?: number;
19
+ maxBlocksPerCheckpoint?: number;
20
+ p2pPropagationTime?: number;
21
+ skipSlotValidation?: boolean;
22
+ signatureContext: CoordinationSignatureContext;
23
+ },
24
+ ) {
25
+ this.proposalValidator = new ProposalValidator(epochCache, opts, 'p2p:checkpoint_proposal_validator');
26
+ }
27
+
28
+ async validate(proposal: CheckpointProposal): Promise<ValidationResult> {
29
+ const headerResult = await this.proposalValidator.validate(proposal);
30
+ if (headerResult.result !== 'accept') {
31
+ return headerResult;
32
+ }
33
+
34
+ const blockProposal = proposal.getBlockProposal();
35
+ if (blockProposal) {
36
+ return this.proposalValidator.validateTxs(blockProposal);
37
+ }
38
+
39
+ return { result: 'accept' };
12
40
  }
13
41
  }