@aztec/p2p 0.0.1-commit.d431d1c → 0.0.1-commit.d939eb5aa

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 (558) hide show
  1. package/README.md +129 -3
  2. package/dest/bootstrap/bootstrap.d.ts +4 -3
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +4 -4
  5. package/dest/client/factory.d.ts +11 -11
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +60 -19
  8. package/dest/client/interface.d.ts +54 -34
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +43 -52
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +190 -226
  13. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  14. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  15. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +315 -0
  16. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  17. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  18. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  19. package/dest/config.d.ts +135 -82
  20. package/dest/config.d.ts.map +1 -1
  21. package/dest/config.js +113 -40
  22. package/dest/errors/p2p-service.error.d.ts +9 -0
  23. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  24. package/dest/errors/p2p-service.error.js +10 -0
  25. package/dest/errors/tx-pool.error.d.ts +8 -0
  26. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  27. package/dest/errors/tx-pool.error.js +9 -0
  28. package/dest/index.d.ts +2 -2
  29. package/dest/index.d.ts.map +1 -1
  30. package/dest/index.js +1 -1
  31. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +106 -88
  32. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/attestation_pool.js +448 -3
  34. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  35. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  36. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +353 -87
  37. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  38. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  39. package/dest/mem_pools/attestation_pool/index.js +1 -2
  40. package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
  41. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  42. package/dest/mem_pools/attestation_pool/mocks.js +2 -2
  43. package/dest/mem_pools/index.d.ts +3 -3
  44. package/dest/mem_pools/index.d.ts.map +1 -1
  45. package/dest/mem_pools/index.js +1 -1
  46. package/dest/mem_pools/instrumentation.d.ts +4 -2
  47. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  48. package/dest/mem_pools/instrumentation.js +18 -16
  49. package/dest/mem_pools/interface.d.ts +5 -5
  50. package/dest/mem_pools/interface.d.ts.map +1 -1
  51. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  52. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  53. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  54. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
  55. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  56. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
  57. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  58. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  59. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  60. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  61. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  62. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  63. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  64. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  65. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
  66. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  67. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  68. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
  69. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +10 -0
  70. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  71. package/dest/mem_pools/tx_pool_v2/eviction/index.js +11 -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 +215 -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 +134 -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 +220 -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 +923 -0
  114. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +7 -4
  115. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  116. package/dest/msg_validators/attestation_validator/attestation_validator.js +52 -12
  117. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -5
  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 +20 -8
  120. package/dest/msg_validators/clock_tolerance.d.ts +32 -0
  121. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  122. package/dest/msg_validators/clock_tolerance.js +88 -0
  123. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +7 -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 +7 -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 +15 -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 +92 -41
  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 +3 -3
  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 +24 -20
  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.d.ts +3 -3
  142. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  143. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
  144. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  145. package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
  146. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  147. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  148. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  149. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  150. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  151. package/dest/msg_validators/tx_validator/data_validator.js +39 -3
  152. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -4
  153. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  154. package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
  155. package/dest/msg_validators/tx_validator/factory.d.ts +137 -5
  156. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  157. package/dest/msg_validators/tx_validator/factory.js +255 -58
  158. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  159. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  160. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  161. package/dest/msg_validators/tx_validator/gas_validator.d.ts +68 -3
  162. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  163. package/dest/msg_validators/tx_validator/gas_validator.js +114 -44
  164. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  165. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  166. package/dest/msg_validators/tx_validator/index.js +2 -0
  167. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  168. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  169. package/dest/msg_validators/tx_validator/metadata_validator.js +6 -6
  170. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  171. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  172. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  173. package/dest/msg_validators/tx_validator/phases_validator.d.ts +24 -3
  174. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  175. package/dest/msg_validators/tx_validator/phases_validator.js +75 -27
  176. package/dest/msg_validators/tx_validator/size_validator.d.ts +3 -1
  177. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -1
  178. package/dest/msg_validators/tx_validator/size_validator.js +4 -1
  179. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +22 -5
  180. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  181. package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
  182. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  183. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  184. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  185. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  186. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  187. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  188. package/dest/services/data_store.d.ts +1 -1
  189. package/dest/services/data_store.d.ts.map +1 -1
  190. package/dest/services/data_store.js +14 -10
  191. package/dest/services/discv5/discV5_service.js +1 -1
  192. package/dest/services/dummy_service.d.ts +28 -5
  193. package/dest/services/dummy_service.d.ts.map +1 -1
  194. package/dest/services/dummy_service.js +52 -2
  195. package/dest/services/encoding.d.ts +7 -3
  196. package/dest/services/encoding.d.ts.map +1 -1
  197. package/dest/services/encoding.js +18 -11
  198. package/dest/services/gossipsub/index.d.ts +3 -0
  199. package/dest/services/gossipsub/index.d.ts.map +1 -0
  200. package/dest/services/gossipsub/index.js +2 -0
  201. package/dest/services/gossipsub/scoring.d.ts +21 -3
  202. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  203. package/dest/services/gossipsub/scoring.js +24 -7
  204. package/dest/services/gossipsub/topic_score_params.d.ts +184 -0
  205. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  206. package/dest/services/gossipsub/topic_score_params.js +363 -0
  207. package/dest/services/index.d.ts +2 -1
  208. package/dest/services/index.d.ts.map +1 -1
  209. package/dest/services/index.js +1 -0
  210. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  211. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  212. package/dest/services/libp2p/instrumentation.js +14 -3
  213. package/dest/services/libp2p/libp2p_service.d.ts +98 -50
  214. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  215. package/dest/services/libp2p/libp2p_service.js +580 -449
  216. package/dest/services/peer-manager/metrics.d.ts +4 -2
  217. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  218. package/dest/services/peer-manager/metrics.js +26 -5
  219. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  220. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  221. package/dest/services/peer-manager/peer_manager.js +39 -11
  222. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  223. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  224. package/dest/services/peer-manager/peer_scoring.js +65 -14
  225. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +51 -0
  226. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  227. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +543 -0
  228. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  229. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  230. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  231. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +47 -0
  232. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  233. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  234. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +35 -0
  235. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  236. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +136 -0
  237. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +62 -0
  238. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  239. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +176 -0
  240. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  241. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  242. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  243. package/dest/services/reqresp/config.d.ts +3 -3
  244. package/dest/services/reqresp/config.d.ts.map +1 -1
  245. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  246. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  247. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  248. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  249. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  250. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  251. package/dest/services/reqresp/interface.d.ts +25 -9
  252. package/dest/services/reqresp/interface.d.ts.map +1 -1
  253. package/dest/services/reqresp/interface.js +23 -10
  254. package/dest/services/reqresp/metrics.d.ts +6 -5
  255. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  256. package/dest/services/reqresp/metrics.js +16 -5
  257. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  258. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  259. package/dest/services/reqresp/protocols/block_txs/bitvector.js +5 -0
  260. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  261. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  262. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +27 -9
  263. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +29 -6
  264. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  265. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +59 -13
  266. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  267. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  268. package/dest/services/reqresp/protocols/index.js +0 -1
  269. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  270. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  271. package/dest/services/reqresp/protocols/tx.js +21 -3
  272. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  273. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  274. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  275. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  276. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  277. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  278. package/dest/services/reqresp/reqresp.d.ts +9 -2
  279. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  280. package/dest/services/reqresp/reqresp.js +95 -34
  281. package/dest/services/service.d.ts +46 -4
  282. package/dest/services/service.d.ts.map +1 -1
  283. package/dest/services/tx_collection/config.d.ts +22 -1
  284. package/dest/services/tx_collection/config.d.ts.map +1 -1
  285. package/dest/services/tx_collection/config.js +55 -1
  286. package/dest/services/tx_collection/fast_tx_collection.d.ts +7 -7
  287. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  288. package/dest/services/tx_collection/fast_tx_collection.js +95 -84
  289. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  290. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  291. package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
  292. package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
  293. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  294. package/dest/services/tx_collection/file_store_tx_source.js +100 -0
  295. package/dest/services/tx_collection/index.d.ts +3 -1
  296. package/dest/services/tx_collection/index.d.ts.map +1 -1
  297. package/dest/services/tx_collection/index.js +2 -0
  298. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  299. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  300. package/dest/services/tx_collection/instrumentation.js +10 -2
  301. package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
  302. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  303. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  304. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  305. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  306. package/dest/services/tx_collection/request_tracker.js +84 -0
  307. package/dest/services/tx_collection/slow_tx_collection.d.ts +9 -5
  308. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  309. package/dest/services/tx_collection/slow_tx_collection.js +60 -26
  310. package/dest/services/tx_collection/tx_collection.d.ts +29 -19
  311. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  312. package/dest/services/tx_collection/tx_collection.js +79 -7
  313. package/dest/services/tx_collection/tx_collection_sink.d.ts +18 -8
  314. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  315. package/dest/services/tx_collection/tx_collection_sink.js +26 -29
  316. package/dest/services/tx_collection/tx_source.d.ts +13 -7
  317. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  318. package/dest/services/tx_collection/tx_source.js +26 -7
  319. package/dest/services/tx_file_store/config.d.ts +16 -0
  320. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  321. package/dest/services/tx_file_store/config.js +22 -0
  322. package/dest/services/tx_file_store/index.d.ts +4 -0
  323. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  324. package/dest/services/tx_file_store/index.js +3 -0
  325. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  326. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  327. package/dest/services/tx_file_store/instrumentation.js +29 -0
  328. package/dest/services/tx_file_store/tx_file_store.d.ts +48 -0
  329. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  330. package/dest/services/tx_file_store/tx_file_store.js +152 -0
  331. package/dest/services/tx_provider.d.ts +6 -6
  332. package/dest/services/tx_provider.d.ts.map +1 -1
  333. package/dest/services/tx_provider.js +9 -8
  334. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  335. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  336. package/dest/services/tx_provider_instrumentation.js +5 -5
  337. package/dest/test-helpers/index.d.ts +3 -1
  338. package/dest/test-helpers/index.d.ts.map +1 -1
  339. package/dest/test-helpers/index.js +2 -0
  340. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  341. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  342. package/dest/test-helpers/make-test-p2p-clients.js +1 -2
  343. package/dest/test-helpers/mock-pubsub.d.ts +40 -6
  344. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  345. package/dest/test-helpers/mock-pubsub.js +139 -13
  346. package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
  347. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  348. package/dest/test-helpers/reqresp-nodes.js +5 -5
  349. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  350. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  351. package/dest/test-helpers/test_tx_provider.js +41 -0
  352. package/dest/test-helpers/testbench-utils.d.ts +163 -0
  353. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  354. package/dest/test-helpers/testbench-utils.js +386 -0
  355. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  356. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  357. package/dest/testbench/p2p_client_testbench_worker.js +276 -142
  358. package/dest/testbench/worker_client_manager.d.ts +60 -6
  359. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  360. package/dest/testbench/worker_client_manager.js +280 -46
  361. package/dest/util.d.ts +3 -3
  362. package/dest/util.d.ts.map +1 -1
  363. package/package.json +14 -14
  364. package/src/bootstrap/bootstrap.ts +7 -4
  365. package/src/client/factory.ts +114 -38
  366. package/src/client/interface.ts +65 -35
  367. package/src/client/p2p_client.ts +232 -276
  368. package/src/client/test/tx_proposal_collector/README.md +227 -0
  369. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +355 -0
  370. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  371. package/src/config.ts +183 -45
  372. package/src/errors/p2p-service.error.ts +11 -0
  373. package/src/errors/tx-pool.error.ts +12 -0
  374. package/src/index.ts +1 -1
  375. package/src/mem_pools/attestation_pool/attestation_pool.ts +501 -91
  376. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +442 -102
  377. package/src/mem_pools/attestation_pool/index.ts +9 -2
  378. package/src/mem_pools/attestation_pool/mocks.ts +2 -1
  379. package/src/mem_pools/index.ts +2 -2
  380. package/src/mem_pools/instrumentation.ts +19 -14
  381. package/src/mem_pools/interface.ts +4 -4
  382. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  383. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  384. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
  385. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  386. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  387. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
  388. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  389. package/src/mem_pools/tx_pool_v2/eviction/index.ts +27 -0
  390. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  391. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  392. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  393. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  394. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  395. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  396. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  397. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  398. package/src/mem_pools/tx_pool_v2/interfaces.ts +247 -0
  399. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +343 -0
  400. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  401. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +430 -0
  402. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +238 -0
  403. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1105 -0
  404. package/src/msg_validators/attestation_validator/README.md +49 -0
  405. package/src/msg_validators/attestation_validator/attestation_validator.ts +40 -16
  406. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +20 -11
  407. package/src/msg_validators/clock_tolerance.ts +120 -0
  408. package/src/msg_validators/proposal_validator/README.md +123 -0
  409. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +17 -4
  410. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +23 -7
  411. package/src/msg_validators/proposal_validator/proposal_validator.ts +88 -51
  412. package/src/msg_validators/tx_validator/README.md +119 -0
  413. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +5 -5
  414. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  415. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  416. package/src/msg_validators/tx_validator/archive_cache.ts +2 -2
  417. package/src/msg_validators/tx_validator/block_header_validator.ts +21 -8
  418. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  419. package/src/msg_validators/tx_validator/data_validator.ts +48 -3
  420. package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
  421. package/src/msg_validators/tx_validator/factory.ts +413 -56
  422. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  423. package/src/msg_validators/tx_validator/gas_validator.ts +154 -36
  424. package/src/msg_validators/tx_validator/index.ts +2 -0
  425. package/src/msg_validators/tx_validator/metadata_validator.ts +18 -7
  426. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  427. package/src/msg_validators/tx_validator/phases_validator.ts +87 -30
  428. package/src/msg_validators/tx_validator/size_validator.ts +6 -2
  429. package/src/msg_validators/tx_validator/timestamp_validator.ts +29 -21
  430. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  431. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  432. package/src/services/data_store.ts +14 -19
  433. package/src/services/discv5/discV5_service.ts +1 -1
  434. package/src/services/dummy_service.ts +66 -3
  435. package/src/services/encoding.ts +18 -10
  436. package/src/services/gossipsub/README.md +641 -0
  437. package/src/services/gossipsub/index.ts +2 -0
  438. package/src/services/gossipsub/scoring.ts +29 -5
  439. package/src/services/gossipsub/topic_score_params.ts +519 -0
  440. package/src/services/index.ts +1 -0
  441. package/src/services/libp2p/instrumentation.ts +15 -2
  442. package/src/services/libp2p/libp2p_service.ts +624 -490
  443. package/src/services/peer-manager/metrics.ts +28 -4
  444. package/src/services/peer-manager/peer_manager.ts +45 -11
  445. package/src/services/peer-manager/peer_scoring.ts +56 -6
  446. package/src/services/reqresp/README.md +229 -0
  447. package/src/services/reqresp/batch-tx-requester/README.md +344 -0
  448. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +673 -0
  449. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  450. package/src/services/reqresp/batch-tx-requester/interface.ts +54 -0
  451. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +168 -0
  452. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +249 -0
  453. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  454. package/src/services/reqresp/config.ts +2 -2
  455. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  456. package/src/services/reqresp/connection-sampler/connection_sampler.ts +16 -0
  457. package/src/services/reqresp/interface.ts +48 -10
  458. package/src/services/reqresp/metrics.ts +33 -9
  459. package/src/services/reqresp/protocols/block_txs/bitvector.ts +7 -0
  460. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +35 -12
  461. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +74 -9
  462. package/src/services/reqresp/protocols/index.ts +0 -1
  463. package/src/services/reqresp/protocols/tx.ts +23 -3
  464. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  465. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  466. package/src/services/reqresp/reqresp.ts +116 -32
  467. package/src/services/service.ts +61 -3
  468. package/src/services/tx_collection/config.ts +83 -1
  469. package/src/services/tx_collection/fast_tx_collection.ts +111 -91
  470. package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
  471. package/src/services/tx_collection/file_store_tx_source.ts +129 -0
  472. package/src/services/tx_collection/index.ts +6 -0
  473. package/src/services/tx_collection/instrumentation.ts +17 -2
  474. package/src/services/tx_collection/proposal_tx_collector.ts +108 -0
  475. package/src/services/tx_collection/request_tracker.ts +127 -0
  476. package/src/services/tx_collection/slow_tx_collection.ts +68 -35
  477. package/src/services/tx_collection/tx_collection.ts +122 -27
  478. package/src/services/tx_collection/tx_collection_sink.ts +30 -34
  479. package/src/services/tx_collection/tx_source.ts +28 -8
  480. package/src/services/tx_file_store/config.ts +37 -0
  481. package/src/services/tx_file_store/index.ts +3 -0
  482. package/src/services/tx_file_store/instrumentation.ts +36 -0
  483. package/src/services/tx_file_store/tx_file_store.ts +175 -0
  484. package/src/services/tx_provider.ts +12 -11
  485. package/src/services/tx_provider_instrumentation.ts +11 -5
  486. package/src/test-helpers/index.ts +2 -0
  487. package/src/test-helpers/make-test-p2p-clients.ts +4 -6
  488. package/src/test-helpers/mock-pubsub.ts +177 -14
  489. package/src/test-helpers/reqresp-nodes.ts +7 -9
  490. package/src/test-helpers/test_tx_provider.ts +64 -0
  491. package/src/test-helpers/testbench-utils.ts +457 -0
  492. package/src/testbench/p2p_client_testbench_worker.ts +393 -134
  493. package/src/testbench/worker_client_manager.ts +367 -48
  494. package/src/util.ts +8 -2
  495. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  496. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  497. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  498. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  499. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  500. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  501. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  502. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  503. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  504. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -31
  505. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  506. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  507. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -156
  508. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  509. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  510. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  511. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  512. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -115
  513. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  514. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  515. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  516. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  517. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -76
  518. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  519. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  520. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  521. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  522. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  523. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  524. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  525. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  526. package/dest/mem_pools/tx_pool/index.js +0 -2
  527. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  528. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  529. package/dest/mem_pools/tx_pool/priority.js +0 -15
  530. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  531. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  532. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  533. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  534. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  535. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  536. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  537. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  538. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -157
  539. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  540. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  541. package/dest/services/reqresp/protocols/block.js +0 -32
  542. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  543. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  544. package/src/mem_pools/tx_pool/README.md +0 -270
  545. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  546. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -131
  547. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -207
  548. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -159
  549. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  550. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -91
  551. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  552. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  553. package/src/mem_pools/tx_pool/index.ts +0 -2
  554. package/src/mem_pools/tx_pool/priority.ts +0 -20
  555. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  556. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  557. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -191
  558. package/src/services/reqresp/protocols/block.ts +0 -37
@@ -1,10 +1,13 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
2
  import { type Logger } from '@aztec/foundation/log';
3
- import { type CheckpointAttestation, type P2PValidator, PeerErrorSeverity } from '@aztec/stdlib/p2p';
3
+ import { type CheckpointAttestation, type P2PValidator, type ValidationResult } from '@aztec/stdlib/p2p';
4
4
  export declare class CheckpointAttestationValidator implements P2PValidator<CheckpointAttestation> {
5
5
  protected epochCache: EpochCacheInterface;
6
6
  protected logger: Logger;
7
- constructor(epochCache: EpochCacheInterface);
8
- validate(message: CheckpointAttestation): Promise<PeerErrorSeverity | undefined>;
7
+ private readonly pipeliningWindow;
8
+ constructor(epochCache: EpochCacheInterface, opts: {
9
+ l1PublishingTime?: number;
10
+ });
11
+ validate(message: CheckpointAttestation): Promise<ValidationResult>;
9
12
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0YXRpb25fdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvYXR0ZXN0YXRpb25fdmFsaWRhdG9yL2F0dGVzdGF0aW9uX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsS0FBSyxxQkFBcUIsRUFBRSxLQUFLLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXJHLHFCQUFhLDhCQUErQixZQUFXLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQztJQUN4RixTQUFTLENBQUMsVUFBVSxFQUFFLG1CQUFtQixDQUFDO0lBQzFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO0lBRXpCLFlBQVksVUFBVSxFQUFFLG1CQUFtQixFQUcxQztJQUVLLFFBQVEsQ0FBQyxPQUFPLEVBQUUscUJBQXFCLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxDQXdEckY7Q0FDRiJ9
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0YXRpb25fdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvYXR0ZXN0YXRpb25fdmFsaWRhdG9yL2F0dGVzdGF0aW9uX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsS0FBSyxxQkFBcUIsRUFDMUIsS0FBSyxZQUFZLEVBRWpCLEtBQUssZ0JBQWdCLEVBQ3RCLE1BQU0sbUJBQW1CLENBQUM7QUFJM0IscUJBQWEsOEJBQStCLFlBQVcsWUFBWSxDQUFDLHFCQUFxQixDQUFDO0lBQ3hGLFNBQVMsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7SUFDMUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDekIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBbUI7SUFFcEQsWUFDRSxVQUFVLEVBQUUsbUJBQW1CLEVBQy9CLElBQUksRUFBRTtRQUNKLGdCQUFnQixDQUFDLEVBQUUsTUFBTSxDQUFDO0tBQzNCLEVBS0Y7SUFFSyxRQUFRLENBQUMsT0FBTyxFQUFFLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQWtFeEU7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"attestation_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/attestation_validator/attestation_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAErG,qBAAa,8BAA+B,YAAW,YAAY,CAAC,qBAAqB,CAAC;IACxF,SAAS,CAAC,UAAU,EAAE,mBAAmB,CAAC;IAC1C,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IAEzB,YAAY,UAAU,EAAE,mBAAmB,EAG1C;IAEK,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAwDrF;CACF"}
1
+ {"version":3,"file":"attestation_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/attestation_validator/attestation_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EAEjB,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAI3B,qBAAa,8BAA+B,YAAW,YAAY,CAAC,qBAAqB,CAAC;IACxF,SAAS,CAAC,UAAU,EAAE,mBAAmB,CAAC;IAC1C,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IAEpD,YACE,UAAU,EAAE,mBAAmB,EAC/B,IAAI,EAAE;QACJ,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,EAKF;IAEK,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkExE;CACF"}
@@ -1,31 +1,57 @@
1
1
  import { NoCommitteeError } from '@aztec/ethereum/contracts';
2
2
  import { createLogger } from '@aztec/foundation/log';
3
3
  import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
4
+ import { PipeliningWindow, isWithinClockTolerance } from '../clock_tolerance.js';
4
5
  export class CheckpointAttestationValidator {
5
6
  epochCache;
6
7
  logger;
7
- constructor(epochCache){
8
+ pipeliningWindow;
9
+ constructor(epochCache, opts){
8
10
  this.epochCache = epochCache;
11
+ this.pipeliningWindow = new PipeliningWindow(epochCache, {
12
+ l1PublishingTime: opts.l1PublishingTime
13
+ });
9
14
  this.logger = createLogger('p2p:checkpoint-attestation-validator');
10
15
  }
11
16
  async validate(message) {
12
17
  const slotNumber = message.payload.header.slotNumber;
13
18
  try {
14
- const { currentSlot, nextSlot } = this.epochCache.getCurrentAndNextSlot();
15
- if (slotNumber !== currentSlot && slotNumber !== nextSlot) {
16
- this.logger.warn(`Checkpoint attestation slot ${slotNumber} is not current (${currentSlot}) or next (${nextSlot}) slot`);
17
- return PeerErrorSeverity.HighToleranceError;
19
+ // Use target slots since proposals target pipeline slots (slot + 1 when pipelining).
20
+ const { targetSlot, nextSlot } = this.epochCache.getTargetAndNextSlot();
21
+ if (slotNumber !== targetSlot && slotNumber !== nextSlot) {
22
+ // When pipelining, accept attestations for the current slot (built in the previous slot)
23
+ // until the target slot reaches its L1 publish cutoff.
24
+ if (this.pipeliningWindow.acceptsAttestation(slotNumber)) {
25
+ // Fall through to remaining validation (signature, committee, etc.)
26
+ } else if (!isWithinClockTolerance(slotNumber, targetSlot, this.epochCache)) {
27
+ this.logger.warn(`Checkpoint attestation slot ${slotNumber} is not current (${targetSlot}) or next (${nextSlot}) slot`);
28
+ return {
29
+ result: 'reject',
30
+ severity: PeerErrorSeverity.HighToleranceError
31
+ };
32
+ } else {
33
+ this.logger.debug(`Ignoring checkpoint attestation for previous slot ${slotNumber} within clock tolerance`);
34
+ return {
35
+ result: 'ignore'
36
+ };
37
+ }
18
38
  }
19
39
  // Verify the signature is valid
20
40
  const attester = message.getSender();
21
41
  if (attester === undefined) {
22
42
  this.logger.warn(`Invalid signature in checkpoint attestation for slot ${slotNumber}`);
23
- return PeerErrorSeverity.LowToleranceError;
43
+ return {
44
+ result: 'reject',
45
+ severity: PeerErrorSeverity.LowToleranceError
46
+ };
24
47
  }
25
48
  // Verify the attester is in the committee for this slot
26
49
  if (!await this.epochCache.isInCommittee(slotNumber, attester)) {
27
50
  this.logger.warn(`Attester ${attester.toString()} is not in committee for slot ${slotNumber}`);
28
- return PeerErrorSeverity.HighToleranceError;
51
+ return {
52
+ result: 'reject',
53
+ severity: PeerErrorSeverity.HighToleranceError
54
+ };
29
55
  }
30
56
  // Verify the proposer signature matches the expected proposer for the attestation's slot
31
57
  // We look up the proposer for the specific slot rather than using currentSlot/nextSlot
@@ -34,22 +60,36 @@ export class CheckpointAttestationValidator {
34
60
  const expectedProposer = await this.epochCache.getProposerAttesterAddressInSlot(slotNumber);
35
61
  if (!expectedProposer) {
36
62
  this.logger.warn(`No proposer defined for slot ${slotNumber}`);
37
- return PeerErrorSeverity.HighToleranceError;
63
+ return {
64
+ result: 'reject',
65
+ severity: PeerErrorSeverity.HighToleranceError
66
+ };
38
67
  }
39
68
  if (!proposer) {
40
69
  this.logger.warn(`Invalid proposer signature in checkpoint attestation for slot ${slotNumber}`);
41
- return PeerErrorSeverity.LowToleranceError;
70
+ return {
71
+ result: 'reject',
72
+ severity: PeerErrorSeverity.LowToleranceError
73
+ };
42
74
  }
43
75
  if (!proposer.equals(expectedProposer)) {
44
76
  this.logger.warn(`Proposer signature mismatch in checkpoint attestation. ` + `Expected ${expectedProposer?.toString() ?? 'none'} but got ${proposer.toString()} for slot ${slotNumber}`);
45
- return PeerErrorSeverity.HighToleranceError;
77
+ return {
78
+ result: 'reject',
79
+ severity: PeerErrorSeverity.HighToleranceError
80
+ };
46
81
  }
47
- return undefined;
82
+ return {
83
+ result: 'accept'
84
+ };
48
85
  } catch (e) {
49
86
  // People shouldn't be sending us attestations if the committee doesn't exist
50
87
  if (e instanceof NoCommitteeError) {
51
88
  this.logger.warn(`No committee exists for checkpoint attestation for slot ${slotNumber}`);
52
- return PeerErrorSeverity.LowToleranceError;
89
+ return {
90
+ result: 'reject',
91
+ severity: PeerErrorSeverity.LowToleranceError
92
+ };
53
93
  }
54
94
  throw e;
55
95
  }
@@ -1,7 +1,7 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import { type CheckpointAttestation, PeerErrorSeverity } from '@aztec/stdlib/p2p';
2
+ import { type CheckpointAttestation, type ValidationResult } from '@aztec/stdlib/p2p';
3
3
  import { type TelemetryClient } from '@aztec/telemetry-client';
4
- import type { AttestationPool } from '../../mem_pools/attestation_pool/attestation_pool.js';
4
+ import type { AttestationPoolApi } from '../../mem_pools/attestation_pool/attestation_pool.js';
5
5
  import { CheckpointAttestationValidator } from './attestation_validator.js';
6
6
  /**
7
7
  * FishermanAttestationValidator extends the base AttestationValidator to add
@@ -14,7 +14,9 @@ import { CheckpointAttestationValidator } from './attestation_validator.js';
14
14
  export declare class FishermanAttestationValidator extends CheckpointAttestationValidator {
15
15
  private attestationPool;
16
16
  private invalidAttestationCounter;
17
- constructor(epochCache: EpochCacheInterface, attestationPool: AttestationPool, telemetryClient: TelemetryClient);
18
- validate(message: CheckpointAttestation): Promise<PeerErrorSeverity | undefined>;
17
+ constructor(epochCache: EpochCacheInterface, attestationPool: AttestationPoolApi, telemetryClient: TelemetryClient, opts?: {
18
+ l1PublishingTime?: number;
19
+ });
20
+ validate(message: CheckpointAttestation): Promise<ValidationResult>;
19
21
  }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlzaGVybWFuX2F0dGVzdGF0aW9uX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL2F0dGVzdGF0aW9uX3ZhbGlkYXRvci9maXNoZXJtYW5fYXR0ZXN0YXRpb25fdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUsscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRixPQUFPLEVBQXVCLEtBQUssZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFcEYsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDNUYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUU7Ozs7Ozs7R0FPRztBQUNILHFCQUFhLDZCQUE4QixTQUFRLDhCQUE4QjtJQUs3RSxPQUFPLENBQUMsZUFBZTtJQUp6QixPQUFPLENBQUMseUJBQXlCLENBQUM7SUFFbEMsWUFDRSxVQUFVLEVBQUUsbUJBQW1CLEVBQ3ZCLGVBQWUsRUFBRSxlQUFlLEVBQ3hDLGVBQWUsRUFBRSxlQUFlLEVBT2pDO0lBRWMsUUFBUSxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLENBd0Q5RjtDQUNGIn0=
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlzaGVybWFuX2F0dGVzdGF0aW9uX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL2F0dGVzdGF0aW9uX3ZhbGlkYXRvci9maXNoZXJtYW5fYXR0ZXN0YXRpb25fdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUsscUJBQXFCLEVBQXFCLEtBQUssZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RyxPQUFPLEVBQXVCLEtBQUssZUFBZSxFQUFrQyxNQUFNLHlCQUF5QixDQUFDO0FBRXBILE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDL0YsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUU7Ozs7Ozs7R0FPRztBQUNILHFCQUFhLDZCQUE4QixTQUFRLDhCQUE4QjtJQUs3RSxPQUFPLENBQUMsZUFBZTtJQUp6QixPQUFPLENBQUMseUJBQXlCLENBQUM7SUFFbEMsWUFDRSxVQUFVLEVBQUUsbUJBQW1CLEVBQ3ZCLGVBQWUsRUFBRSxrQkFBa0IsRUFDM0MsZUFBZSxFQUFFLGVBQWUsRUFDaEMsSUFBSSxHQUFFO1FBQ0osZ0JBQWdCLENBQUMsRUFBRSxNQUFNLENBQUM7S0FDdEIsRUFhUDtJQUVjLFFBQVEsQ0FBQyxPQUFPLEVBQUUscUJBQXFCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBd0RqRjtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"fisherman_attestation_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/attestation_validator/fisherman_attestation_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,KAAK,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAEpF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sDAAsD,CAAC;AAC5F,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAE5E;;;;;;;GAOG;AACH,qBAAa,6BAA8B,SAAQ,8BAA8B;IAK7E,OAAO,CAAC,eAAe;IAJzB,OAAO,CAAC,yBAAyB,CAAC;IAElC,YACE,UAAU,EAAE,mBAAmB,EACvB,eAAe,EAAE,eAAe,EACxC,eAAe,EAAE,eAAe,EAOjC;IAEc,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAwD9F;CACF"}
1
+ {"version":3,"file":"fisherman_attestation_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/attestation_validator/fisherman_attestation_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,KAAK,qBAAqB,EAAqB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACzG,OAAO,EAAuB,KAAK,eAAe,EAAkC,MAAM,yBAAyB,CAAC;AAEpH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sDAAsD,CAAC;AAC/F,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAE5E;;;;;;;GAOG;AACH,qBAAa,6BAA8B,SAAQ,8BAA8B;IAK7E,OAAO,CAAC,eAAe;IAJzB,OAAO,CAAC,yBAAyB,CAAC;IAElC,YACE,UAAU,EAAE,mBAAmB,EACvB,eAAe,EAAE,kBAAkB,EAC3C,eAAe,EAAE,eAAe,EAChC,IAAI,GAAE;QACJ,gBAAgB,CAAC,EAAE,MAAM,CAAC;KACtB,EAaP;IAEc,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwDjF;CACF"}
@@ -1,5 +1,5 @@
1
1
  import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
2
- import { Attributes, Metrics } from '@aztec/telemetry-client';
2
+ import { Attributes, Metrics, createUpDownCounterWithDefault } from '@aztec/telemetry-client';
3
3
  import { CheckpointAttestationValidator } from './attestation_validator.js';
4
4
  /**
5
5
  * FishermanAttestationValidator extends the base AttestationValidator to add
@@ -11,16 +11,21 @@ import { CheckpointAttestationValidator } from './attestation_validator.js';
11
11
  */ export class FishermanAttestationValidator extends CheckpointAttestationValidator {
12
12
  attestationPool;
13
13
  invalidAttestationCounter;
14
- constructor(epochCache, attestationPool, telemetryClient){
15
- super(epochCache), this.attestationPool = attestationPool;
14
+ constructor(epochCache, attestationPool, telemetryClient, opts = {}){
15
+ super(epochCache, opts), this.attestationPool = attestationPool;
16
16
  this.logger = this.logger.createChild('[FISHERMAN]');
17
17
  const meter = telemetryClient.getMeter('FishermanAttestationValidator');
18
- this.invalidAttestationCounter = meter.createUpDownCounter(Metrics.VALIDATOR_INVALID_ATTESTATION_RECEIVED_COUNT);
18
+ this.invalidAttestationCounter = createUpDownCounterWithDefault(meter, Metrics.VALIDATOR_INVALID_ATTESTATION_RECEIVED_COUNT, {
19
+ [Attributes.ERROR_TYPE]: [
20
+ 'base_validation_failed',
21
+ 'payload_mismatch'
22
+ ]
23
+ });
19
24
  }
20
25
  async validate(message) {
21
26
  // First run the standard validation
22
27
  const baseValidationResult = await super.validate(message);
23
- if (baseValidationResult !== undefined) {
28
+ if (baseValidationResult.result !== 'accept') {
24
29
  // Track base validation failures (invalid signature, wrong committee, etc.)
25
30
  this.invalidAttestationCounter.add(1, {
26
31
  [Attributes.ERROR_TYPE]: 'base_validation_failed'
@@ -32,7 +37,9 @@ import { CheckpointAttestationValidator } from './attestation_validator.js';
32
37
  const attester = message.getSender();
33
38
  const proposer = message.getProposer();
34
39
  if (!attester || !proposer) {
35
- return undefined;
40
+ return {
41
+ result: 'accept'
42
+ };
36
43
  }
37
44
  const proposalId = message.archive.toString();
38
45
  const proposal = await this.attestationPool.getCheckpointProposal(proposalId);
@@ -53,12 +60,17 @@ import { CheckpointAttestationValidator } from './attestation_validator.js';
53
60
  [Attributes.ERROR_TYPE]: 'payload_mismatch'
54
61
  });
55
62
  // Return error to reject the message, but LibP2PService won't penalize in fisherman mode
56
- return PeerErrorSeverity.LowToleranceError;
63
+ return {
64
+ result: 'reject',
65
+ severity: PeerErrorSeverity.LowToleranceError
66
+ };
57
67
  }
58
68
  } else {
59
69
  // We might receive attestations before proposals in some cases
60
70
  this.logger.debug(`Received attestation for slot ${slotNumberBigInt} but proposal not found yet. ` + `Proposal ID: ${proposalId}`);
61
71
  }
62
- return undefined;
72
+ return {
73
+ result: 'accept'
74
+ };
63
75
  }
64
76
  }
@@ -0,0 +1,32 @@
1
+ import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
+ import { SlotNumber } from '@aztec/foundation/branded-types';
3
+ /**
4
+ * Maximum clock disparity tolerance for P2P message validation (in milliseconds).
5
+ * Messages for the previous slot are accepted if we're within this many milliseconds
6
+ * of the current slot start. This prevents penalizing peers for messages that
7
+ * were valid when sent but arrived slightly late due to network latency.
8
+ *
9
+ * This follows Ethereum's MAXIMUM_GOSSIP_CLOCK_DISPARITY approach.
10
+ */
11
+ export declare const MAXIMUM_GOSSIP_CLOCK_DISPARITY_MS = 500;
12
+ /**
13
+ * Checks if a message for the previous slot should be accepted due to clock tolerance.
14
+ *
15
+ * @param messageSlot - The slot number from the received message
16
+ * @param currentSlot - The current slot number
17
+ * @param epochCache - EpochCache to get timing information
18
+ * @returns true if the message is for the previous slot AND we're within the clock tolerance window
19
+ */
20
+ export declare function isWithinClockTolerance(messageSlot: SlotNumber, currentSlot: SlotNumber, epochCache: EpochCacheInterface): boolean;
21
+ export declare class PipeliningWindow {
22
+ private readonly epochCache;
23
+ private readonly proposalWindowIntoTargetSlot;
24
+ private readonly attestationWindowIntoTargetSlot;
25
+ constructor(epochCache: EpochCacheInterface, opts?: {
26
+ p2pPropagationTime?: number;
27
+ l1PublishingTime?: number;
28
+ });
29
+ acceptsProposal(messageSlot: SlotNumber): boolean;
30
+ acceptsAttestation(messageSlot: SlotNumber): boolean;
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvY2tfdG9sZXJhbmNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvY2xvY2tfdG9sZXJhbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRzdEOzs7Ozs7O0dBT0c7QUFDSCxlQUFPLE1BQU0saUNBQWlDLE1BQU0sQ0FBQztBQUVyRDs7Ozs7OztHQU9HO0FBQ0gsd0JBQWdCLHNCQUFzQixDQUNwQyxXQUFXLEVBQUUsVUFBVSxFQUN2QixXQUFXLEVBQUUsVUFBVSxFQUN2QixVQUFVLEVBQUUsbUJBQW1CLEdBQzlCLE9BQU8sQ0EwQlQ7QUFxQ0QscUJBQWEsZ0JBQWdCO0lBS3pCLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVTtJQUo3QixPQUFPLENBQUMsUUFBUSxDQUFDLDRCQUE0QixDQUFTO0lBQ3RELE9BQU8sQ0FBQyxRQUFRLENBQUMsK0JBQStCLENBQVM7SUFFekQsWUFDbUIsVUFBVSxFQUFFLG1CQUFtQixFQUNoRCxJQUFJLEdBQUU7UUFDSixrQkFBa0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUM1QixnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztLQUN0QixFQVlQO0lBRU0sZUFBZSxDQUFDLFdBQVcsRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUV2RDtJQUVNLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUUxRDtDQUNGIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clock_tolerance.d.ts","sourceRoot":"","sources":["../../src/msg_validators/clock_tolerance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D;;;;;;;GAOG;AACH,eAAO,MAAM,iCAAiC,MAAM,CAAC;AAErD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,UAAU,EACvB,WAAW,EAAE,UAAU,EACvB,UAAU,EAAE,mBAAmB,GAC9B,OAAO,CA0BT;AAqCD,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJ7B,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAS;IACtD,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAS;IAEzD,YACmB,UAAU,EAAE,mBAAmB,EAChD,IAAI,GAAE;QACJ,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;KACtB,EAYP;IAEM,eAAe,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAEvD;IAEM,kBAAkB,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAE1D;CACF"}
@@ -0,0 +1,88 @@
1
+ import { SlotNumber } from '@aztec/foundation/branded-types';
2
+ import { DEFAULT_P2P_PROPAGATION_TIME, createPipelinedCheckpointTimingModel } from '@aztec/stdlib/timetable';
3
+ /**
4
+ * Maximum clock disparity tolerance for P2P message validation (in milliseconds).
5
+ * Messages for the previous slot are accepted if we're within this many milliseconds
6
+ * of the current slot start. This prevents penalizing peers for messages that
7
+ * were valid when sent but arrived slightly late due to network latency.
8
+ *
9
+ * This follows Ethereum's MAXIMUM_GOSSIP_CLOCK_DISPARITY approach.
10
+ */ export const MAXIMUM_GOSSIP_CLOCK_DISPARITY_MS = 500;
11
+ /**
12
+ * Checks if a message for the previous slot should be accepted due to clock tolerance.
13
+ *
14
+ * @param messageSlot - The slot number from the received message
15
+ * @param currentSlot - The current slot number
16
+ * @param epochCache - EpochCache to get timing information
17
+ * @returns true if the message is for the previous slot AND we're within the clock tolerance window
18
+ */ export function isWithinClockTolerance(messageSlot, currentSlot, epochCache) {
19
+ // Guard against slot 0 edge case (genesis)
20
+ if (currentSlot === SlotNumber.ZERO) {
21
+ return false;
22
+ }
23
+ // Only apply tolerance to messages for the previous slot
24
+ const previousSlot = SlotNumber(currentSlot - 1);
25
+ if (messageSlot !== previousSlot) {
26
+ return false;
27
+ }
28
+ // Check how far we are into the current slot (in milliseconds)
29
+ const { ts: slotStartTs, nowMs } = epochCache.getEpochAndSlotNow();
30
+ const targetSlot = epochCache.getTargetSlot();
31
+ // Sanity check: ensure the epoch cache's target slot matches the expected current slot
32
+ if (targetSlot !== currentSlot) {
33
+ return false;
34
+ }
35
+ // ts is in seconds, convert to ms; nowMs is already in milliseconds
36
+ const slotStartMs = slotStartTs * 1000n;
37
+ const elapsedMs = Number(nowMs - slotStartMs);
38
+ return elapsedMs < MAXIMUM_GOSSIP_CLOCK_DISPARITY_MS;
39
+ }
40
+ /**
41
+ * Checks if a message should be accepted under the pipelining grace period.
42
+ *
43
+ * When pipelining is enabled, `targetSlot = slotNow + 1`. A proposal built in slot N-1
44
+ * for slot N arrives when validators are in slot N, so their `targetSlot = N+1`.
45
+ * This function accepts proposals for the current wallclock slot if we're within the
46
+ * first `windowSeconds` seconds of the slot (the pipelining grace period). - see stdlib/timetable/index.ts
47
+ *
48
+ * @param messageSlot - The slot number from the received message
49
+ * @param epochCache - EpochCache to get timing and pipelining state
50
+ * @param windowSeconds - The window grace period allowed for attestations into the next slot
51
+ * @returns true if pipelining is enabled, the message is for the current slot, and we're within the grace period
52
+ */ function isWithinPipeliningWindow(messageSlot, epochCache, windowSeconds) {
53
+ if (!epochCache.isProposerPipeliningEnabled()) {
54
+ return false;
55
+ }
56
+ const currentSlot = epochCache.getSlotNow();
57
+ if (messageSlot !== currentSlot) {
58
+ return false;
59
+ }
60
+ const { ts: slotStartTs, nowMs } = epochCache.getEpochAndSlotNow();
61
+ const slotStartMs = slotStartTs * 1000n;
62
+ const elapsedMs = Number(nowMs - slotStartMs);
63
+ const windowMs = windowSeconds * 1000 + MAXIMUM_GOSSIP_CLOCK_DISPARITY_MS;
64
+ return elapsedMs < windowMs;
65
+ }
66
+ export class PipeliningWindow {
67
+ epochCache;
68
+ proposalWindowIntoTargetSlot;
69
+ attestationWindowIntoTargetSlot;
70
+ constructor(epochCache, opts = {}){
71
+ this.epochCache = epochCache;
72
+ const l1Constants = epochCache.getL1Constants();
73
+ const checkpointTiming = createPipelinedCheckpointTimingModel({
74
+ aztecSlotDuration: l1Constants.slotDuration,
75
+ ethereumSlotDuration: l1Constants.ethereumSlotDuration,
76
+ l1PublishingTime: opts.l1PublishingTime ?? l1Constants.ethereumSlotDuration,
77
+ p2pPropagationTime: opts.p2pPropagationTime ?? DEFAULT_P2P_PROPAGATION_TIME
78
+ });
79
+ this.proposalWindowIntoTargetSlot = checkpointTiming.proposalWindowIntoTargetSlot;
80
+ this.attestationWindowIntoTargetSlot = checkpointTiming.attestationWindowIntoTargetSlot;
81
+ }
82
+ acceptsProposal(messageSlot) {
83
+ return isWithinPipeliningWindow(messageSlot, this.epochCache, this.proposalWindowIntoTargetSlot);
84
+ }
85
+ acceptsAttestation(messageSlot) {
86
+ return isWithinPipeliningWindow(messageSlot, this.epochCache, this.attestationWindowIntoTargetSlot);
87
+ }
88
+ }
@@ -1,9 +1,12 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import type { BlockProposal, P2PValidator } from '@aztec/stdlib/p2p';
3
- import { ProposalValidator } from '../proposal_validator/proposal_validator.js';
4
- export declare class BlockProposalValidator extends ProposalValidator<BlockProposal> implements P2PValidator<BlockProposal> {
2
+ import type { BlockProposal, P2PValidator, ValidationResult } from '@aztec/stdlib/p2p';
3
+ export declare class BlockProposalValidator implements P2PValidator<BlockProposal> {
4
+ private proposalValidator;
5
5
  constructor(epochCache: EpochCacheInterface, opts: {
6
6
  txsPermitted: boolean;
7
+ maxTxsPerBlock?: number;
8
+ p2pPropagationTime?: number;
7
9
  });
10
+ validate(proposal: BlockProposal): Promise<ValidationResult>;
8
11
  }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL2Jsb2NrX3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVoRixxQkFBYSxzQkFBdUIsU0FBUSxpQkFBaUIsQ0FBQyxhQUFhLENBQUUsWUFBVyxZQUFZLENBQUMsYUFBYSxDQUFDO0lBQ2pILFlBQVksVUFBVSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRTtRQUFFLFlBQVksRUFBRSxPQUFPLENBQUE7S0FBRSxFQUUzRTtDQUNGIn0=
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL2Jsb2NrX3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl2RixxQkFBYSxzQkFBdUIsWUFBVyxZQUFZLENBQUMsYUFBYSxDQUFDO0lBQ3hFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBb0I7SUFFN0MsWUFDRSxVQUFVLEVBQUUsbUJBQW1CLEVBQy9CLElBQUksRUFBRTtRQUFFLFlBQVksRUFBRSxPQUFPLENBQUM7UUFBQyxjQUFjLENBQUMsRUFBRSxNQUFNLENBQUM7UUFBQyxrQkFBa0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEVBR3RGO0lBRUssUUFBUSxDQUFDLFFBQVEsRUFBRSxhQUFhLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBTWpFO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"block_proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/block_proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAEhF,qBAAa,sBAAuB,SAAQ,iBAAiB,CAAC,aAAa,CAAE,YAAW,YAAY,CAAC,aAAa,CAAC;IACjH,YAAY,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,EAE3E;CACF"}
1
+ {"version":3,"file":"block_proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/block_proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAIvF,qBAAa,sBAAuB,YAAW,YAAY,CAAC,aAAa,CAAC;IACxE,OAAO,CAAC,iBAAiB,CAAoB;IAE7C,YACE,UAAU,EAAE,mBAAmB,EAC/B,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;KAAE,EAGtF;IAEK,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAMjE;CACF"}
@@ -1,6 +1,14 @@
1
1
  import { ProposalValidator } from '../proposal_validator/proposal_validator.js';
2
- export class BlockProposalValidator extends ProposalValidator {
2
+ export class BlockProposalValidator {
3
+ proposalValidator;
3
4
  constructor(epochCache, opts){
4
- super(epochCache, opts, 'p2p:block_proposal_validator');
5
+ this.proposalValidator = new ProposalValidator(epochCache, opts, 'p2p:block_proposal_validator');
6
+ }
7
+ async validate(proposal) {
8
+ const headerResult = await this.proposalValidator.validate(proposal);
9
+ if (headerResult.result !== 'accept') {
10
+ return headerResult;
11
+ }
12
+ return this.proposalValidator.validateTxs(proposal);
5
13
  }
6
14
  }
@@ -1,9 +1,12 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import type { CheckpointProposal, P2PValidator } from '@aztec/stdlib/p2p';
3
- import { ProposalValidator } from '../proposal_validator/proposal_validator.js';
4
- export declare class CheckpointProposalValidator extends ProposalValidator<CheckpointProposal> implements P2PValidator<CheckpointProposal> {
2
+ import type { CheckpointProposal, P2PValidator, ValidationResult } from '@aztec/stdlib/p2p';
3
+ export declare class CheckpointProposalValidator implements P2PValidator<CheckpointProposal> {
4
+ private proposalValidator;
5
5
  constructor(epochCache: EpochCacheInterface, opts: {
6
6
  txsPermitted: boolean;
7
+ maxTxsPerBlock?: number;
8
+ p2pPropagationTime?: number;
7
9
  });
10
+ validate(proposal: CheckpointProposal): Promise<ValidationResult>;
8
11
  }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9wcm9wb3NhbF92YWxpZGF0b3IvY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVoRixxQkFBYSwyQkFDWCxTQUFRLGlCQUFpQixDQUFDLGtCQUFrQixDQUM1QyxZQUFXLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQztJQUUzQyxZQUFZLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUU7UUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFBO0tBQUUsRUFFM0U7Q0FDRiJ9
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9wcm9wb3NhbF92YWxpZGF0b3IvY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUk1RixxQkFBYSwyQkFBNEIsWUFBVyxZQUFZLENBQUMsa0JBQWtCLENBQUM7SUFDbEYsT0FBTyxDQUFDLGlCQUFpQixDQUFvQjtJQUU3QyxZQUNFLFVBQVUsRUFBRSxtQkFBbUIsRUFDL0IsSUFBSSxFQUFFO1FBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQztRQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUFDLGtCQUFrQixDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQUUsRUFHdEY7SUFFSyxRQUFRLENBQUMsUUFBUSxFQUFFLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQVl0RTtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"checkpoint_proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAEhF,qBAAa,2BACX,SAAQ,iBAAiB,CAAC,kBAAkB,CAC5C,YAAW,YAAY,CAAC,kBAAkB,CAAC;IAE3C,YAAY,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,EAE3E;CACF"}
1
+ {"version":3,"file":"checkpoint_proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAI5F,qBAAa,2BAA4B,YAAW,YAAY,CAAC,kBAAkB,CAAC;IAClF,OAAO,CAAC,iBAAiB,CAAoB;IAE7C,YACE,UAAU,EAAE,mBAAmB,EAC/B,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;KAAE,EAGtF;IAEK,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAYtE;CACF"}
@@ -1,6 +1,20 @@
1
1
  import { ProposalValidator } from '../proposal_validator/proposal_validator.js';
2
- export class CheckpointProposalValidator extends ProposalValidator {
2
+ export class CheckpointProposalValidator {
3
+ proposalValidator;
3
4
  constructor(epochCache, opts){
4
- super(epochCache, opts, 'p2p:checkpoint_proposal_validator');
5
+ this.proposalValidator = new ProposalValidator(epochCache, opts, 'p2p:checkpoint_proposal_validator');
6
+ }
7
+ async validate(proposal) {
8
+ const headerResult = await this.proposalValidator.validate(proposal);
9
+ if (headerResult.result !== 'accept') {
10
+ return headerResult;
11
+ }
12
+ const blockProposal = proposal.getBlockProposal();
13
+ if (blockProposal) {
14
+ return this.proposalValidator.validateTxs(blockProposal);
15
+ }
16
+ return {
17
+ result: 'accept'
18
+ };
5
19
  }
6
20
  }
@@ -1,13 +1,20 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import { type Logger } from '@aztec/foundation/log';
3
- import { BlockProposal, CheckpointProposal, PeerErrorSeverity } from '@aztec/stdlib/p2p';
4
- export declare abstract class ProposalValidator<TProposal extends BlockProposal | CheckpointProposal> {
5
- protected epochCache: EpochCacheInterface;
6
- protected logger: Logger;
7
- protected txsPermitted: boolean;
2
+ import { type BlockProposal, type CheckpointProposalCore, type ValidationResult } from '@aztec/stdlib/p2p';
3
+ /** Validates header-level and tx-level fields of block and checkpoint proposals. */
4
+ export declare class ProposalValidator {
5
+ private epochCache;
6
+ private logger;
7
+ private txsPermitted;
8
+ private maxTxsPerBlock?;
9
+ private pipeliningWindow;
8
10
  constructor(epochCache: EpochCacheInterface, opts: {
9
11
  txsPermitted: boolean;
12
+ maxTxsPerBlock?: number;
13
+ p2pPropagationTime?: number;
10
14
  }, loggerName: string);
11
- validate(proposal: TProposal): Promise<PeerErrorSeverity | undefined>;
15
+ /** Validates header-level fields: slot, signature, and proposer. */
16
+ validate(proposal: BlockProposal | CheckpointProposalCore): Promise<ValidationResult>;
17
+ /** Validates transaction-related fields of a block proposal. */
18
+ validateTxs(proposal: BlockProposal): Promise<ValidationResult>;
12
19
  }
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekYsOEJBQXNCLGlCQUFpQixDQUFDLFNBQVMsU0FBUyxhQUFhLEdBQUcsa0JBQWtCO0lBQzFGLFNBQVMsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7SUFDMUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDekIsU0FBUyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUM7SUFFaEMsWUFBWSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFO1FBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQTtLQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFJL0Y7SUFFWSxRQUFRLENBQUMsUUFBUSxFQUFFLFNBQVMsR0FBRyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLENBbUVqRjtDQUNGIn0=
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sRUFDTCxLQUFLLGFBQWEsRUFDbEIsS0FBSyxzQkFBc0IsRUFFM0IsS0FBSyxnQkFBZ0IsRUFDdEIsTUFBTSxtQkFBbUIsQ0FBQztBQUkzQixvRkFBb0Y7QUFDcEYscUJBQWEsaUJBQWlCO0lBQzVCLE9BQU8sQ0FBQyxVQUFVLENBQXNCO0lBQ3hDLE9BQU8sQ0FBQyxNQUFNLENBQVM7SUFDdkIsT0FBTyxDQUFDLFlBQVksQ0FBVTtJQUM5QixPQUFPLENBQUMsY0FBYyxDQUFDLENBQVM7SUFDaEMsT0FBTyxDQUFDLGdCQUFnQixDQUFtQjtJQUUzQyxZQUNFLFVBQVUsRUFBRSxtQkFBbUIsRUFDL0IsSUFBSSxFQUFFO1FBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQztRQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUFDLGtCQUFrQixDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQUUsRUFDckYsVUFBVSxFQUFFLE1BQU0sRUFPbkI7SUFFRCxvRUFBb0U7SUFDdkQsUUFBUSxDQUFDLFFBQVEsRUFBRSxhQUFhLEdBQUcsc0JBQXNCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBNENqRztJQUVELGdFQUFnRTtJQUNuRCxXQUFXLENBQUMsUUFBUSxFQUFFLGFBQWEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0F3QzNFO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEzF,8BAAsB,iBAAiB,CAAC,SAAS,SAAS,aAAa,GAAG,kBAAkB;IAC1F,SAAS,CAAC,UAAU,EAAE,mBAAmB,CAAC;IAC1C,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC;IAEhC,YAAY,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,EAAE,UAAU,EAAE,MAAM,EAI/F;IAEY,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CAmEjF;CACF"}
1
+ {"version":3,"file":"proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAE3B,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAI3B,oFAAoF;AACpF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,gBAAgB,CAAmB;IAE3C,YACE,UAAU,EAAE,mBAAmB,EAC/B,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;KAAE,EACrF,UAAU,EAAE,MAAM,EAOnB;IAED,oEAAoE;IACvD,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA4CjG;IAED,gEAAgE;IACnD,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwC3E;CACF"}