@aztec/p2p 0.0.1-commit.ee80a48 → 0.0.1-commit.f103f88

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 (497) hide show
  1. package/README.md +129 -3
  2. package/dest/client/factory.d.ts +11 -11
  3. package/dest/client/factory.d.ts.map +1 -1
  4. package/dest/client/factory.js +55 -15
  5. package/dest/client/interface.d.ts +54 -34
  6. package/dest/client/interface.d.ts.map +1 -1
  7. package/dest/client/p2p_client.d.ts +43 -52
  8. package/dest/client/p2p_client.d.ts.map +1 -1
  9. package/dest/client/p2p_client.js +183 -226
  10. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +21 -11
  11. package/dest/config.d.ts +134 -87
  12. package/dest/config.d.ts.map +1 -1
  13. package/dest/config.js +111 -40
  14. package/dest/errors/p2p-service.error.d.ts +9 -0
  15. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  16. package/dest/errors/p2p-service.error.js +10 -0
  17. package/dest/errors/tx-pool.error.d.ts +8 -0
  18. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  19. package/dest/errors/tx-pool.error.js +9 -0
  20. package/dest/index.d.ts +2 -2
  21. package/dest/index.d.ts.map +1 -1
  22. package/dest/index.js +1 -1
  23. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +106 -88
  24. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool.js +448 -3
  26. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  27. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  28. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +353 -87
  29. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  30. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  31. package/dest/mem_pools/attestation_pool/index.js +1 -2
  32. package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
  33. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  34. package/dest/mem_pools/attestation_pool/mocks.js +2 -2
  35. package/dest/mem_pools/index.d.ts +3 -3
  36. package/dest/mem_pools/index.d.ts.map +1 -1
  37. package/dest/mem_pools/index.js +1 -1
  38. package/dest/mem_pools/instrumentation.d.ts +4 -2
  39. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  40. package/dest/mem_pools/instrumentation.js +16 -14
  41. package/dest/mem_pools/interface.d.ts +5 -5
  42. package/dest/mem_pools/interface.d.ts.map +1 -1
  43. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  44. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  45. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  46. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
  47. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  48. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
  49. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  50. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  51. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  52. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  53. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  54. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  55. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  56. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  57. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
  58. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  59. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  60. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
  61. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +10 -0
  62. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  63. package/dest/mem_pools/tx_pool_v2/eviction/index.js +11 -0
  64. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  65. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  66. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  67. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  68. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  69. package/dest/mem_pools/{tx_pool → tx_pool_v2}/eviction/invalid_txs_after_mining_rule.js +16 -35
  70. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  71. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  72. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
  73. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  74. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  75. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  76. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  77. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  78. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  82. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  83. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  84. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  85. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  86. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  87. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  88. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +215 -0
  89. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  90. package/dest/mem_pools/tx_pool_v2/interfaces.js +10 -0
  91. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +134 -0
  92. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  93. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +220 -0
  94. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  95. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  96. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  97. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
  98. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  99. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +337 -0
  100. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +62 -0
  101. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  102. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +167 -0
  103. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +78 -0
  104. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  105. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +923 -0
  106. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +5 -2
  107. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  108. package/dest/msg_validators/attestation_validator/attestation_validator.js +20 -11
  109. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +5 -3
  110. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  111. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +2 -2
  112. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  113. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  114. package/dest/msg_validators/clock_tolerance.js +54 -3
  115. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +7 -4
  116. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  117. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  118. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +7 -4
  119. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  120. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  121. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +15 -8
  122. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  123. package/dest/msg_validators/proposal_validator/proposal_validator.js +67 -47
  124. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  125. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  126. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
  127. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  128. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  129. package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
  130. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  131. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  132. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  133. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  134. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +16 -3
  135. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  136. package/dest/msg_validators/tx_validator/block_header_validator.js +1 -1
  137. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  138. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  139. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  140. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  141. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  142. package/dest/msg_validators/tx_validator/data_validator.js +35 -2
  143. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +13 -3
  144. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  145. package/dest/msg_validators/tx_validator/double_spend_validator.js +4 -4
  146. package/dest/msg_validators/tx_validator/factory.d.ts +133 -6
  147. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  148. package/dest/msg_validators/tx_validator/factory.js +247 -60
  149. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  150. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  151. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  152. package/dest/msg_validators/tx_validator/gas_validator.d.ts +67 -3
  153. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  154. package/dest/msg_validators/tx_validator/gas_validator.js +112 -43
  155. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  156. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  157. package/dest/msg_validators/tx_validator/index.js +2 -0
  158. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  159. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  160. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  161. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  162. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  163. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  164. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  165. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  166. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  167. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +20 -4
  168. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  169. package/dest/msg_validators/tx_validator/timestamp_validator.js +6 -6
  170. package/dest/services/data_store.d.ts +1 -1
  171. package/dest/services/data_store.d.ts.map +1 -1
  172. package/dest/services/data_store.js +5 -5
  173. package/dest/services/dummy_service.d.ts +17 -6
  174. package/dest/services/dummy_service.d.ts.map +1 -1
  175. package/dest/services/dummy_service.js +16 -5
  176. package/dest/services/encoding.d.ts +7 -3
  177. package/dest/services/encoding.d.ts.map +1 -1
  178. package/dest/services/encoding.js +18 -11
  179. package/dest/services/gossipsub/index.d.ts +3 -0
  180. package/dest/services/gossipsub/index.d.ts.map +1 -0
  181. package/dest/services/gossipsub/index.js +2 -0
  182. package/dest/services/gossipsub/scoring.d.ts +21 -3
  183. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  184. package/dest/services/gossipsub/scoring.js +24 -7
  185. package/dest/services/gossipsub/topic_score_params.d.ts +184 -0
  186. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  187. package/dest/services/gossipsub/topic_score_params.js +363 -0
  188. package/dest/services/index.d.ts +2 -1
  189. package/dest/services/index.d.ts.map +1 -1
  190. package/dest/services/index.js +1 -0
  191. package/dest/services/libp2p/libp2p_service.d.ts +92 -50
  192. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  193. package/dest/services/libp2p/libp2p_service.js +549 -427
  194. package/dest/services/peer-manager/metrics.d.ts +3 -1
  195. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  196. package/dest/services/peer-manager/metrics.js +6 -0
  197. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  198. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  199. package/dest/services/peer-manager/peer_manager.js +39 -11
  200. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  201. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  202. package/dest/services/peer-manager/peer_scoring.js +57 -12
  203. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +14 -10
  204. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  205. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +89 -112
  206. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +4 -7
  207. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  208. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +11 -13
  209. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  210. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +31 -46
  211. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
  212. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  213. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
  214. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +2 -2
  215. package/dest/services/reqresp/config.d.ts +3 -3
  216. package/dest/services/reqresp/config.d.ts.map +1 -1
  217. package/dest/services/reqresp/interface.d.ts +23 -9
  218. package/dest/services/reqresp/interface.d.ts.map +1 -1
  219. package/dest/services/reqresp/interface.js +23 -10
  220. package/dest/services/reqresp/metrics.d.ts +1 -1
  221. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  222. package/dest/services/reqresp/metrics.js +0 -1
  223. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  224. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  225. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +16 -11
  226. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +21 -10
  227. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  228. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +27 -11
  229. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  230. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  231. package/dest/services/reqresp/protocols/index.js +0 -1
  232. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  233. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  234. package/dest/services/reqresp/protocols/tx.js +21 -3
  235. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  236. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  237. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  238. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  239. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  240. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  241. package/dest/services/reqresp/reqresp.d.ts +4 -2
  242. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  243. package/dest/services/reqresp/reqresp.js +40 -15
  244. package/dest/services/service.d.ts +43 -4
  245. package/dest/services/service.d.ts.map +1 -1
  246. package/dest/services/tx_collection/config.d.ts +22 -4
  247. package/dest/services/tx_collection/config.d.ts.map +1 -1
  248. package/dest/services/tx_collection/config.js +49 -3
  249. package/dest/services/tx_collection/fast_tx_collection.d.ts +6 -8
  250. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  251. package/dest/services/tx_collection/fast_tx_collection.js +88 -88
  252. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  253. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  254. package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
  255. package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
  256. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  257. package/dest/services/tx_collection/file_store_tx_source.js +100 -0
  258. package/dest/services/tx_collection/index.d.ts +3 -2
  259. package/dest/services/tx_collection/index.d.ts.map +1 -1
  260. package/dest/services/tx_collection/index.js +1 -0
  261. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  262. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  263. package/dest/services/tx_collection/instrumentation.js +2 -1
  264. package/dest/services/tx_collection/proposal_tx_collector.d.ts +15 -15
  265. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
  266. package/dest/services/tx_collection/proposal_tx_collector.js +6 -6
  267. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  268. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  269. package/dest/services/tx_collection/request_tracker.js +84 -0
  270. package/dest/services/tx_collection/slow_tx_collection.d.ts +7 -3
  271. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  272. package/dest/services/tx_collection/slow_tx_collection.js +60 -26
  273. package/dest/services/tx_collection/tx_collection.d.ts +23 -13
  274. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  275. package/dest/services/tx_collection/tx_collection.js +75 -3
  276. package/dest/services/tx_collection/tx_collection_sink.d.ts +18 -8
  277. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  278. package/dest/services/tx_collection/tx_collection_sink.js +26 -29
  279. package/dest/services/tx_collection/tx_source.d.ts +13 -7
  280. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  281. package/dest/services/tx_collection/tx_source.js +26 -7
  282. package/dest/services/tx_file_store/config.d.ts +16 -0
  283. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  284. package/dest/services/tx_file_store/config.js +22 -0
  285. package/dest/services/tx_file_store/index.d.ts +4 -0
  286. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  287. package/dest/services/tx_file_store/index.js +3 -0
  288. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  289. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  290. package/dest/services/tx_file_store/instrumentation.js +29 -0
  291. package/dest/services/tx_file_store/tx_file_store.d.ts +48 -0
  292. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  293. package/dest/services/tx_file_store/tx_file_store.js +152 -0
  294. package/dest/services/tx_provider.d.ts +4 -4
  295. package/dest/services/tx_provider.d.ts.map +1 -1
  296. package/dest/services/tx_provider.js +9 -8
  297. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  298. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  299. package/dest/test-helpers/make-test-p2p-clients.js +1 -2
  300. package/dest/test-helpers/mock-pubsub.d.ts +40 -6
  301. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  302. package/dest/test-helpers/mock-pubsub.js +139 -13
  303. package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
  304. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  305. package/dest/test-helpers/reqresp-nodes.js +5 -5
  306. package/dest/test-helpers/testbench-utils.d.ts +43 -38
  307. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  308. package/dest/test-helpers/testbench-utils.js +150 -61
  309. package/dest/testbench/p2p_client_testbench_worker.d.ts +2 -2
  310. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  311. package/dest/testbench/p2p_client_testbench_worker.js +80 -28
  312. package/dest/testbench/worker_client_manager.d.ts +10 -1
  313. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  314. package/dest/testbench/worker_client_manager.js +55 -3
  315. package/dest/util.d.ts +3 -3
  316. package/dest/util.d.ts.map +1 -1
  317. package/package.json +14 -14
  318. package/src/client/factory.ts +108 -28
  319. package/src/client/interface.ts +65 -35
  320. package/src/client/p2p_client.ts +221 -272
  321. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +34 -15
  322. package/src/config.ts +178 -45
  323. package/src/errors/p2p-service.error.ts +11 -0
  324. package/src/errors/tx-pool.error.ts +12 -0
  325. package/src/index.ts +1 -1
  326. package/src/mem_pools/attestation_pool/attestation_pool.ts +501 -91
  327. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +442 -102
  328. package/src/mem_pools/attestation_pool/index.ts +9 -2
  329. package/src/mem_pools/attestation_pool/mocks.ts +2 -1
  330. package/src/mem_pools/index.ts +2 -2
  331. package/src/mem_pools/instrumentation.ts +17 -13
  332. package/src/mem_pools/interface.ts +4 -4
  333. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  334. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  335. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
  336. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  337. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  338. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
  339. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  340. package/src/mem_pools/tx_pool_v2/eviction/index.ts +27 -0
  341. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  342. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  343. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  344. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  345. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  346. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  347. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  348. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  349. package/src/mem_pools/tx_pool_v2/interfaces.ts +247 -0
  350. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +343 -0
  351. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  352. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +430 -0
  353. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +238 -0
  354. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1105 -0
  355. package/src/msg_validators/attestation_validator/README.md +49 -0
  356. package/src/msg_validators/attestation_validator/attestation_validator.ts +21 -9
  357. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +6 -3
  358. package/src/msg_validators/clock_tolerance.ts +72 -3
  359. package/src/msg_validators/proposal_validator/README.md +123 -0
  360. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +17 -4
  361. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +23 -7
  362. package/src/msg_validators/proposal_validator/proposal_validator.ts +79 -49
  363. package/src/msg_validators/tx_validator/README.md +119 -0
  364. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +5 -5
  365. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  366. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  367. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  368. package/src/msg_validators/tx_validator/block_header_validator.ts +15 -3
  369. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  370. package/src/msg_validators/tx_validator/data_validator.ts +42 -1
  371. package/src/msg_validators/tx_validator/double_spend_validator.ts +11 -6
  372. package/src/msg_validators/tx_validator/factory.ts +394 -78
  373. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  374. package/src/msg_validators/tx_validator/gas_validator.ts +145 -33
  375. package/src/msg_validators/tx_validator/index.ts +2 -0
  376. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  377. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  378. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  379. package/src/msg_validators/tx_validator/timestamp_validator.ts +23 -18
  380. package/src/services/data_store.ts +5 -13
  381. package/src/services/dummy_service.ts +25 -7
  382. package/src/services/encoding.ts +18 -10
  383. package/src/services/gossipsub/README.md +641 -0
  384. package/src/services/gossipsub/index.ts +2 -0
  385. package/src/services/gossipsub/scoring.ts +29 -5
  386. package/src/services/gossipsub/topic_score_params.ts +519 -0
  387. package/src/services/index.ts +1 -0
  388. package/src/services/libp2p/libp2p_service.ts +575 -465
  389. package/src/services/peer-manager/metrics.ts +7 -0
  390. package/src/services/peer-manager/peer_manager.ts +45 -11
  391. package/src/services/peer-manager/peer_scoring.ts +52 -5
  392. package/src/services/reqresp/README.md +229 -0
  393. package/src/services/reqresp/batch-tx-requester/README.md +53 -14
  394. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +89 -122
  395. package/src/services/reqresp/batch-tx-requester/interface.ts +3 -6
  396. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +30 -71
  397. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  398. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +2 -2
  399. package/src/services/reqresp/config.ts +2 -2
  400. package/src/services/reqresp/interface.ts +45 -10
  401. package/src/services/reqresp/metrics.ts +0 -1
  402. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +23 -14
  403. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +38 -15
  404. package/src/services/reqresp/protocols/index.ts +0 -1
  405. package/src/services/reqresp/protocols/tx.ts +23 -3
  406. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  407. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  408. package/src/services/reqresp/reqresp.ts +53 -16
  409. package/src/services/service.ts +57 -3
  410. package/src/services/tx_collection/config.ts +74 -6
  411. package/src/services/tx_collection/fast_tx_collection.ts +94 -97
  412. package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
  413. package/src/services/tx_collection/file_store_tx_source.ts +129 -0
  414. package/src/services/tx_collection/index.ts +2 -1
  415. package/src/services/tx_collection/instrumentation.ts +7 -1
  416. package/src/services/tx_collection/proposal_tx_collector.ts +21 -27
  417. package/src/services/tx_collection/request_tracker.ts +127 -0
  418. package/src/services/tx_collection/slow_tx_collection.ts +66 -33
  419. package/src/services/tx_collection/tx_collection.ts +114 -19
  420. package/src/services/tx_collection/tx_collection_sink.ts +30 -34
  421. package/src/services/tx_collection/tx_source.ts +28 -8
  422. package/src/services/tx_file_store/config.ts +37 -0
  423. package/src/services/tx_file_store/index.ts +3 -0
  424. package/src/services/tx_file_store/instrumentation.ts +36 -0
  425. package/src/services/tx_file_store/tx_file_store.ts +175 -0
  426. package/src/services/tx_provider.ts +10 -9
  427. package/src/test-helpers/make-test-p2p-clients.ts +4 -6
  428. package/src/test-helpers/mock-pubsub.ts +177 -14
  429. package/src/test-helpers/reqresp-nodes.ts +7 -9
  430. package/src/test-helpers/testbench-utils.ts +157 -74
  431. package/src/testbench/p2p_client_testbench_worker.ts +91 -31
  432. package/src/testbench/worker_client_manager.ts +68 -6
  433. package/src/util.ts +8 -2
  434. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  435. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  436. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  437. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  438. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  439. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  440. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  441. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  442. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  443. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  444. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  445. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  446. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  447. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  448. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  449. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  450. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  451. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  452. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  453. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  454. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  455. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  456. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  457. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  458. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  459. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  460. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  461. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  462. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  463. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  464. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  465. package/dest/mem_pools/tx_pool/index.js +0 -2
  466. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  467. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  468. package/dest/mem_pools/tx_pool/priority.js +0 -15
  469. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  470. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  471. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  472. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  473. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  474. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  475. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  476. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  477. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  478. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  479. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  480. package/dest/services/reqresp/protocols/block.js +0 -32
  481. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  482. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  483. package/src/mem_pools/tx_pool/README.md +0 -270
  484. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  485. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  486. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  487. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  488. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  489. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  490. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  491. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  492. package/src/mem_pools/tx_pool/index.ts +0 -2
  493. package/src/mem_pools/tx_pool/priority.ts +0 -20
  494. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  495. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  496. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  497. package/src/services/reqresp/protocols/block.ts +0 -37
@@ -4,7 +4,10 @@ import { type CheckpointAttestation, type P2PValidator, type ValidationResult }
4
4
  export declare class CheckpointAttestationValidator implements P2PValidator<CheckpointAttestation> {
5
5
  protected epochCache: EpochCacheInterface;
6
6
  protected logger: Logger;
7
- constructor(epochCache: EpochCacheInterface);
7
+ private readonly pipeliningWindow;
8
+ constructor(epochCache: EpochCacheInterface, opts: {
9
+ l1PublishingTime?: number;
10
+ });
8
11
  validate(message: CheckpointAttestation): Promise<ValidationResult>;
9
12
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0YXRpb25fdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvYXR0ZXN0YXRpb25fdmFsaWRhdG9yL2F0dGVzdGF0aW9uX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsS0FBSyxxQkFBcUIsRUFDMUIsS0FBSyxZQUFZLEVBRWpCLEtBQUssZ0JBQWdCLEVBQ3RCLE1BQU0sbUJBQW1CLENBQUM7QUFJM0IscUJBQWEsOEJBQStCLFlBQVcsWUFBWSxDQUFDLHFCQUFxQixDQUFDO0lBQ3hGLFNBQVMsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7SUFDMUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFFekIsWUFBWSxVQUFVLEVBQUUsbUJBQW1CLEVBRzFDO0lBRUssUUFBUSxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0E2RHhFO0NBQ0YifQ==
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,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;IAEzB,YAAY,UAAU,EAAE,mBAAmB,EAG1C;IAEK,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6DxE;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,40 @@
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 { isWithinClockTolerance } from '../clock_tolerance.js';
4
+ import { PipeliningWindow, isWithinClockTolerance } from '../clock_tolerance.js';
5
5
  export class CheckpointAttestationValidator {
6
6
  epochCache;
7
7
  logger;
8
- constructor(epochCache){
8
+ pipeliningWindow;
9
+ constructor(epochCache, opts){
9
10
  this.epochCache = epochCache;
11
+ this.pipeliningWindow = new PipeliningWindow(epochCache, {
12
+ l1PublishingTime: opts.l1PublishingTime
13
+ });
10
14
  this.logger = createLogger('p2p:checkpoint-attestation-validator');
11
15
  }
12
16
  async validate(message) {
13
17
  const slotNumber = message.payload.header.slotNumber;
14
18
  try {
15
- const { currentSlot, nextSlot } = this.epochCache.getCurrentAndNextSlot();
16
- if (slotNumber !== currentSlot && slotNumber !== nextSlot) {
17
- // Check if message is for previous slot and within clock tolerance
18
- if (!isWithinClockTolerance(slotNumber, currentSlot, this.epochCache)) {
19
- this.logger.warn(`Checkpoint attestation slot ${slotNumber} is not current (${currentSlot}) or next (${nextSlot}) slot`);
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`);
20
28
  return {
21
29
  result: 'reject',
22
30
  severity: PeerErrorSeverity.HighToleranceError
23
31
  };
32
+ } else {
33
+ this.logger.debug(`Ignoring checkpoint attestation for previous slot ${slotNumber} within clock tolerance`);
34
+ return {
35
+ result: 'ignore'
36
+ };
24
37
  }
25
- this.logger.debug(`Ignoring checkpoint attestation for previous slot ${slotNumber} within clock tolerance`);
26
- return {
27
- result: 'ignore'
28
- };
29
38
  }
30
39
  // Verify the signature is valid
31
40
  const attester = message.getSender();
@@ -1,7 +1,7 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
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);
17
+ constructor(epochCache: EpochCacheInterface, attestationPool: AttestationPoolApi, telemetryClient: TelemetryClient, opts?: {
18
+ l1PublishingTime?: number;
19
+ });
18
20
  validate(message: CheckpointAttestation): Promise<ValidationResult>;
19
21
  }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlzaGVybWFuX2F0dGVzdGF0aW9uX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL2F0dGVzdGF0aW9uX3ZhbGlkYXRvci9maXNoZXJtYW5fYXR0ZXN0YXRpb25fdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUsscUJBQXFCLEVBQXFCLEtBQUssZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RyxPQUFPLEVBQXVCLEtBQUssZUFBZSxFQUFrQyxNQUFNLHlCQUF5QixDQUFDO0FBRXBILE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTVFOzs7Ozs7O0dBT0c7QUFDSCxxQkFBYSw2QkFBOEIsU0FBUSw4QkFBOEI7SUFLN0UsT0FBTyxDQUFDLGVBQWU7SUFKekIsT0FBTyxDQUFDLHlCQUF5QixDQUFDO0lBRWxDLFlBQ0UsVUFBVSxFQUFFLG1CQUFtQixFQUN2QixlQUFlLEVBQUUsZUFBZSxFQUN4QyxlQUFlLEVBQUUsZUFBZSxFQWFqQztJQUVjLFFBQVEsQ0FBQyxPQUFPLEVBQUUscUJBQXFCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBd0RqRjtDQUNGIn0=
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,EAAqB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACzG,OAAO,EAAuB,KAAK,eAAe,EAAkC,MAAM,yBAAyB,CAAC;AAEpH,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,EAajC;IAEc,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwDjF;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"}
@@ -11,8 +11,8 @@ 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
18
  this.invalidAttestationCounter = createUpDownCounterWithDefault(meter, Metrics.VALIDATOR_INVALID_ATTESTATION_RECEIVED_COUNT, {
@@ -18,4 +18,15 @@ export declare const MAXIMUM_GOSSIP_CLOCK_DISPARITY_MS = 500;
18
18
  * @returns true if the message is for the previous slot AND we're within the clock tolerance window
19
19
  */
20
20
  export declare function isWithinClockTolerance(messageSlot: SlotNumber, currentSlot: SlotNumber, epochCache: EpochCacheInterface): boolean;
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvY2tfdG9sZXJhbmNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvY2xvY2tfdG9sZXJhbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTdEOzs7Ozs7O0dBT0c7QUFDSCxlQUFPLE1BQU0saUNBQWlDLE1BQU0sQ0FBQztBQUVyRDs7Ozs7OztHQU9HO0FBQ0gsd0JBQWdCLHNCQUFzQixDQUNwQyxXQUFXLEVBQUUsVUFBVSxFQUN2QixXQUFXLEVBQUUsVUFBVSxFQUN2QixVQUFVLEVBQUUsbUJBQW1CLEdBQzlCLE9BQU8sQ0F5QlQifQ==
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=
@@ -1 +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;AAE7D;;;;;;;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,CAyBT"}
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"}
@@ -1,4 +1,5 @@
1
1
  import { SlotNumber } from '@aztec/foundation/branded-types';
2
+ import { DEFAULT_P2P_PROPAGATION_TIME, createPipelinedCheckpointTimingModel } from '@aztec/stdlib/timetable';
2
3
  /**
3
4
  * Maximum clock disparity tolerance for P2P message validation (in milliseconds).
4
5
  * Messages for the previous slot are accepted if we're within this many milliseconds
@@ -25,9 +26,10 @@ import { SlotNumber } from '@aztec/foundation/branded-types';
25
26
  return false;
26
27
  }
27
28
  // Check how far we are into the current slot (in milliseconds)
28
- const { ts: slotStartTs, nowMs, slot } = epochCache.getEpochAndSlotNow();
29
- // Sanity check: ensure the epoch cache's current slot matches the expected current slot
30
- if (slot !== currentSlot) {
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) {
31
33
  return false;
32
34
  }
33
35
  // ts is in seconds, convert to ms; nowMs is already in milliseconds
@@ -35,3 +37,52 @@ import { SlotNumber } from '@aztec/foundation/branded-types';
35
37
  const elapsedMs = Number(nowMs - slotStartMs);
36
38
  return elapsedMs < MAXIMUM_GOSSIP_CLOCK_DISPARITY_MS;
37
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, type ValidationResult } 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<ValidationResult>;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFxQixLQUFLLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFJaEgsOEJBQXNCLGlCQUFpQixDQUFDLFNBQVMsU0FBUyxhQUFhLEdBQUcsa0JBQWtCO0lBQzFGLFNBQVMsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7SUFDMUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDekIsU0FBUyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUM7SUFFaEMsWUFBWSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFO1FBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQTtLQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFJL0Y7SUFFWSxRQUFRLENBQUMsUUFBUSxFQUFFLFNBQVMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0F3RXBFO0NBQ0YifQ==
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,EAAqB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAIhH,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,gBAAgB,CAAC,CAwEpE;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"}
@@ -1,37 +1,47 @@
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 { isWithinClockTolerance } from '../clock_tolerance.js';
5
- export class ProposalValidator {
4
+ import { PipeliningWindow, isWithinClockTolerance } from '../clock_tolerance.js';
5
+ /** Validates header-level and tx-level fields of block and checkpoint proposals. */ export class ProposalValidator {
6
6
  epochCache;
7
7
  logger;
8
8
  txsPermitted;
9
+ maxTxsPerBlock;
10
+ pipeliningWindow;
9
11
  constructor(epochCache, opts, loggerName){
10
12
  this.epochCache = epochCache;
11
13
  this.txsPermitted = opts.txsPermitted;
14
+ this.maxTxsPerBlock = opts.maxTxsPerBlock;
15
+ this.pipeliningWindow = new PipeliningWindow(epochCache, {
16
+ p2pPropagationTime: opts.p2pPropagationTime
17
+ });
12
18
  this.logger = createLogger(loggerName);
13
19
  }
14
- async validate(proposal) {
20
+ /** Validates header-level fields: slot, signature, and proposer. */ async validate(proposal) {
15
21
  try {
16
- // Slot check
17
- const { currentSlot, nextSlot } = this.epochCache.getCurrentAndNextSlot();
22
+ // Slot check: use target slots since proposals target pipeline slots (slot + 1 when pipelining).
23
+ const { targetSlot, nextSlot } = this.epochCache.getTargetAndNextSlot();
18
24
  const slotNumber = proposal.slotNumber;
19
- if (slotNumber !== currentSlot && slotNumber !== nextSlot) {
20
- // Check if message is for previous slot and within clock tolerance
21
- if (!isWithinClockTolerance(slotNumber, currentSlot, this.epochCache)) {
25
+ if (slotNumber !== targetSlot && slotNumber !== nextSlot) {
26
+ // When pipelining, accept proposals for the current slot (built in the previous slot)
27
+ // if they're still within the shared proposal acceptance window.
28
+ if (this.pipeliningWindow.acceptsProposal(slotNumber)) {
29
+ // Fall through to remaining validation (signature, proposer, etc.)
30
+ } else if (!isWithinClockTolerance(slotNumber, targetSlot, this.epochCache)) {
22
31
  this.logger.warn(`Penalizing peer for invalid slot number ${slotNumber}`, {
23
- currentSlot,
32
+ targetSlot,
24
33
  nextSlot
25
34
  });
26
35
  return {
27
36
  result: 'reject',
28
37
  severity: PeerErrorSeverity.HighToleranceError
29
38
  };
39
+ } else {
40
+ this.logger.verbose(`Ignoring proposal for previous slot ${slotNumber} within clock tolerance`);
41
+ return {
42
+ result: 'ignore'
43
+ };
30
44
  }
31
- this.logger.verbose(`Ignoring proposal for previous slot ${slotNumber} within clock tolerance`);
32
- return {
33
- result: 'ignore'
34
- };
35
45
  }
36
46
  // Signature validity
37
47
  const proposer = proposal.getSender();
@@ -42,29 +52,6 @@ export class ProposalValidator {
42
52
  severity: PeerErrorSeverity.MidToleranceError
43
53
  };
44
54
  }
45
- // Transactions permitted check
46
- const embeddedTxCount = proposal.txs?.length ?? 0;
47
- if (!this.txsPermitted && (proposal.txHashes.length > 0 || embeddedTxCount > 0)) {
48
- this.logger.warn(`Penalizing peer for proposal with ${proposal.txHashes.length} transaction(s) when transactions are not permitted`);
49
- return {
50
- result: 'reject',
51
- severity: PeerErrorSeverity.MidToleranceError
52
- };
53
- }
54
- // Embedded txs must be listed in txHashes
55
- const hashSet = new Set(proposal.txHashes.map((h)=>h.toString()));
56
- const missingTxHashes = embeddedTxCount > 0 ? proposal.txs.filter((tx)=>!hashSet.has(tx.getTxHash().toString())).map((tx)=>tx.getTxHash().toString()) : [];
57
- if (embeddedTxCount > 0 && missingTxHashes.length > 0) {
58
- this.logger.warn('Penalizing peer for embedded transaction(s) not included in txHashes', {
59
- embeddedTxCount,
60
- txHashesLength: proposal.txHashes.length,
61
- missingTxHashes
62
- });
63
- return {
64
- result: 'reject',
65
- severity: PeerErrorSeverity.MidToleranceError
66
- };
67
- }
68
55
  // Proposer check
69
56
  const expectedProposer = await this.epochCache.getProposerAttesterAddressInSlot(slotNumber);
70
57
  if (expectedProposer !== undefined && !proposer.equals(expectedProposer)) {
@@ -77,17 +64,6 @@ export class ProposalValidator {
77
64
  severity: PeerErrorSeverity.MidToleranceError
78
65
  };
79
66
  }
80
- // Validate tx hashes for all txs embedded in the proposal
81
- if (!(await Promise.all(proposal.txs?.map((tx)=>tx.validateTxHash()) ?? [])).every((v)=>v)) {
82
- this.logger.warn(`Penalizing peer for invalid tx hashes in proposal`, {
83
- proposer,
84
- slotNumber
85
- });
86
- return {
87
- result: 'reject',
88
- severity: PeerErrorSeverity.LowToleranceError
89
- };
90
- }
91
67
  return {
92
68
  result: 'accept'
93
69
  };
@@ -101,4 +77,48 @@ export class ProposalValidator {
101
77
  throw e;
102
78
  }
103
79
  }
80
+ /** Validates transaction-related fields of a block proposal. */ async validateTxs(proposal) {
81
+ // Transactions permitted check
82
+ const embeddedTxCount = proposal.txs?.length ?? 0;
83
+ if (!this.txsPermitted && (proposal.txHashes.length > 0 || embeddedTxCount > 0)) {
84
+ this.logger.warn(`Penalizing peer for proposal with ${proposal.txHashes.length} transaction(s) when transactions are not permitted`);
85
+ return {
86
+ result: 'reject',
87
+ severity: PeerErrorSeverity.MidToleranceError
88
+ };
89
+ }
90
+ // Max txs per block check
91
+ if (this.maxTxsPerBlock !== undefined && proposal.txHashes.length > this.maxTxsPerBlock) {
92
+ this.logger.warn(`Penalizing peer for proposal with ${proposal.txHashes.length} transaction(s) when max is ${this.maxTxsPerBlock}`);
93
+ return {
94
+ result: 'reject',
95
+ severity: PeerErrorSeverity.MidToleranceError
96
+ };
97
+ }
98
+ // Embedded txs must be listed in txHashes
99
+ const hashSet = new Set(proposal.txHashes.map((h)=>h.toString()));
100
+ const missingTxHashes = embeddedTxCount > 0 ? proposal.txs.filter((tx)=>!hashSet.has(tx.getTxHash().toString())).map((tx)=>tx.getTxHash().toString()) : [];
101
+ if (embeddedTxCount > 0 && missingTxHashes.length > 0) {
102
+ this.logger.warn('Penalizing peer for embedded transaction(s) not included in txHashes', {
103
+ embeddedTxCount,
104
+ txHashesLength: proposal.txHashes.length,
105
+ missingTxHashes
106
+ });
107
+ return {
108
+ result: 'reject',
109
+ severity: PeerErrorSeverity.MidToleranceError
110
+ };
111
+ }
112
+ // Validate tx hashes for all txs embedded in the proposal
113
+ if (!(await Promise.all(proposal.txs?.map((tx)=>tx.validateTxHash()) ?? [])).every((v)=>v)) {
114
+ this.logger.warn(`Penalizing peer for invalid tx hashes in proposal`);
115
+ return {
116
+ result: 'reject',
117
+ severity: PeerErrorSeverity.LowToleranceError
118
+ };
119
+ }
120
+ return {
121
+ result: 'accept'
122
+ };
123
+ }
104
124
  }
@@ -1,7 +1,7 @@
1
- import type { ProcessedTx, Tx, TxValidationResult, TxValidator } from '@aztec/stdlib/tx';
2
- export declare class AggregateTxValidator<T extends Tx | ProcessedTx> implements TxValidator<T> {
3
- #private;
1
+ import type { TxValidationResult, TxValidator } from '@aztec/stdlib/tx';
2
+ export declare class AggregateTxValidator<T> implements TxValidator<T> {
3
+ readonly validators: TxValidator<T>[];
4
4
  constructor(...validators: TxValidator<T>[]);
5
5
  validateTx(tx: T): Promise<TxValidationResult>;
6
6
  }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlX3R4X3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9hZ2dyZWdhdGVfdHhfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFekYscUJBQWEsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxXQUFXLENBQUUsWUFBVyxXQUFXLENBQUMsQ0FBQyxDQUFDOztJQUVyRixZQUFZLEdBQUcsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQU0xQztJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQWtCbkQ7Q0FDRiJ9
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlX3R4X3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9hZ2dyZWdhdGVfdHhfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXhFLHFCQUFhLG9CQUFvQixDQUFDLENBQUMsQ0FBRSxZQUFXLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDNUQsUUFBUSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN0QyxZQUFZLEdBQUcsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQU0xQztJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQWtCbkQ7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"aggregate_tx_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/aggregate_tx_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEzF,qBAAa,oBAAoB,CAAC,CAAC,SAAS,EAAE,GAAG,WAAW,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAErF,YAAY,GAAG,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,EAM1C;IAEK,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAkBnD;CACF"}
1
+ {"version":3,"file":"aggregate_tx_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/aggregate_tx_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAExE,qBAAa,oBAAoB,CAAC,CAAC,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;IAC5D,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,YAAY,GAAG,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,EAM1C;IAEK,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAkBnD;CACF"}
@@ -1,17 +1,17 @@
1
1
  export class AggregateTxValidator {
2
- #validators;
2
+ validators;
3
3
  constructor(...validators){
4
4
  if (validators.length === 0) {
5
5
  throw new Error('At least one validator must be provided');
6
6
  }
7
- this.#validators = validators;
7
+ this.validators = validators;
8
8
  }
9
9
  async validateTx(tx) {
10
10
  const aggregate = {
11
11
  result: 'valid',
12
12
  reason: []
13
13
  };
14
- for (const validator of this.#validators){
14
+ for (const validator of this.validators){
15
15
  const result = await validator.validateTx(tx);
16
16
  if (result.result === 'invalid') {
17
17
  aggregate.result = 'invalid';
@@ -1,3 +1,4 @@
1
1
  import type { AllowedElement } from '@aztec/stdlib/interfaces/server';
2
+ /** Returns the default list of functions allowed to run in the setup phase of a transaction. */
2
3
  export declare function getDefaultAllowedSetupFunctions(): Promise<AllowedElement[]>;
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsb3dlZF9wdWJsaWNfc2V0dXAuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvYWxsb3dlZF9wdWJsaWNfc2V0dXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHdEUsd0JBQXNCLCtCQUErQixJQUFJLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQTJCakYifQ==
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsb3dlZF9wdWJsaWNfc2V0dXAuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvYWxsb3dlZF9wdWJsaWNfc2V0dXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFNdEUsZ0dBQWdHO0FBQ2hHLHdCQUFzQiwrQkFBK0IsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FtQmpGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"allowed_public_setup.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/allowed_public_setup.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAGtE,wBAAsB,+BAA+B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CA2BjF"}
1
+ {"version":3,"file":"allowed_public_setup.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/allowed_public_setup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAMtE,gGAAgG;AAChG,wBAAsB,+BAA+B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAmBjF"}