@aztec/p2p 0.0.1-commit.6d3c34e → 0.0.1-commit.7035c9bd6

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 (535) 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 +58 -18
  8. package/dest/client/interface.d.ts +46 -33
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +41 -51
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +169 -225
  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 +305 -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 +65 -16
  20. package/dest/config.d.ts.map +1 -1
  21. package/dest/config.js +108 -40
  22. package/dest/errors/tx-pool.error.d.ts +8 -0
  23. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  24. package/dest/errors/tx-pool.error.js +9 -0
  25. package/dest/index.d.ts +2 -1
  26. package/dest/index.d.ts.map +1 -1
  27. package/dest/index.js +1 -0
  28. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +104 -88
  29. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool.js +445 -3
  31. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  32. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +373 -96
  34. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  35. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  36. package/dest/mem_pools/attestation_pool/index.js +1 -2
  37. package/dest/mem_pools/attestation_pool/mocks.d.ts +4 -2
  38. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  39. package/dest/mem_pools/attestation_pool/mocks.js +8 -5
  40. package/dest/mem_pools/index.d.ts +3 -2
  41. package/dest/mem_pools/index.d.ts.map +1 -1
  42. package/dest/mem_pools/index.js +1 -1
  43. package/dest/mem_pools/instrumentation.d.ts +4 -2
  44. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  45. package/dest/mem_pools/instrumentation.js +18 -16
  46. package/dest/mem_pools/interface.d.ts +5 -5
  47. package/dest/mem_pools/interface.d.ts.map +1 -1
  48. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +15 -10
  49. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  50. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +91 -50
  51. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +19 -5
  52. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +59 -3
  54. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +79 -5
  55. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -1
  56. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +47 -0
  57. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  58. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  59. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +123 -0
  60. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +2 -2
  61. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -1
  62. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +3 -3
  63. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +4 -4
  64. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
  65. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +2 -0
  66. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +2 -2
  67. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -1
  68. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  69. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  70. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  71. package/dest/mem_pools/tx_pool/priority.d.ts +2 -2
  72. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  73. package/dest/mem_pools/tx_pool/priority.js +4 -4
  74. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  75. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  76. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +3 -1
  77. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  78. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  79. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  80. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
  81. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  82. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
  83. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  84. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  85. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  86. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  87. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  88. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  89. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  90. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  91. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
  92. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  93. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  94. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
  95. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +10 -0
  96. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  97. package/dest/mem_pools/tx_pool_v2/eviction/index.js +11 -0
  98. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  99. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  100. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  101. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  102. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  103. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +65 -0
  104. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  105. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  106. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
  107. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  108. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  109. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  110. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  111. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  112. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  113. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  114. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  115. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  116. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  117. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  118. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  119. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  120. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  121. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  122. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +215 -0
  123. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  124. package/dest/mem_pools/tx_pool_v2/interfaces.js +10 -0
  125. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +134 -0
  126. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  127. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +216 -0
  128. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  129. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  130. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  131. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
  132. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  133. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +337 -0
  134. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +62 -0
  135. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  136. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +167 -0
  137. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +78 -0
  138. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  139. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +923 -0
  140. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +3 -3
  141. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  142. package/dest/msg_validators/attestation_validator/attestation_validator.js +43 -11
  143. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +5 -5
  144. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  145. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +18 -6
  146. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  147. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  148. package/dest/msg_validators/clock_tolerance.js +38 -0
  149. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -4
  150. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  151. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  152. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -4
  153. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  154. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  155. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -8
  156. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  157. package/dest/msg_validators/proposal_validator/proposal_validator.js +90 -54
  158. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  159. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  160. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
  161. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  162. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  163. package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
  164. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  165. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  166. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  167. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  168. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  169. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  170. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
  171. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  172. package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
  173. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  174. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  175. package/dest/msg_validators/tx_validator/data_validator.js +4 -1
  176. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -4
  177. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  178. package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
  179. package/dest/msg_validators/tx_validator/factory.d.ts +137 -5
  180. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  181. package/dest/msg_validators/tx_validator/factory.js +249 -58
  182. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  183. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  184. package/dest/msg_validators/tx_validator/fee_payer_balance.js +24 -0
  185. package/dest/msg_validators/tx_validator/gas_validator.d.ts +68 -3
  186. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  187. package/dest/msg_validators/tx_validator/gas_validator.js +114 -52
  188. package/dest/msg_validators/tx_validator/index.d.ts +4 -1
  189. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  190. package/dest/msg_validators/tx_validator/index.js +3 -0
  191. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  192. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  193. package/dest/msg_validators/tx_validator/metadata_validator.js +6 -6
  194. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  195. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  196. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  197. package/dest/msg_validators/tx_validator/phases_validator.d.ts +24 -3
  198. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  199. package/dest/msg_validators/tx_validator/phases_validator.js +74 -26
  200. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  201. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  202. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  203. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +22 -5
  204. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  205. package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
  206. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  207. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  208. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  209. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  210. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  211. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  212. package/dest/services/data_store.d.ts +1 -1
  213. package/dest/services/data_store.d.ts.map +1 -1
  214. package/dest/services/data_store.js +10 -6
  215. package/dest/services/discv5/discV5_service.js +1 -1
  216. package/dest/services/dummy_service.d.ts +24 -4
  217. package/dest/services/dummy_service.d.ts.map +1 -1
  218. package/dest/services/dummy_service.js +46 -1
  219. package/dest/services/encoding.d.ts +7 -3
  220. package/dest/services/encoding.d.ts.map +1 -1
  221. package/dest/services/encoding.js +20 -14
  222. package/dest/services/gossipsub/index.d.ts +3 -0
  223. package/dest/services/gossipsub/index.d.ts.map +1 -0
  224. package/dest/services/gossipsub/index.js +2 -0
  225. package/dest/services/gossipsub/scoring.d.ts +21 -3
  226. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  227. package/dest/services/gossipsub/scoring.js +24 -7
  228. package/dest/services/gossipsub/topic_score_params.d.ts +173 -0
  229. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  230. package/dest/services/gossipsub/topic_score_params.js +346 -0
  231. package/dest/services/index.d.ts +2 -1
  232. package/dest/services/index.d.ts.map +1 -1
  233. package/dest/services/index.js +1 -0
  234. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  235. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  236. package/dest/services/libp2p/instrumentation.js +19 -8
  237. package/dest/services/libp2p/libp2p_service.d.ts +97 -46
  238. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  239. package/dest/services/libp2p/libp2p_service.js +497 -392
  240. package/dest/services/peer-manager/metrics.d.ts +4 -2
  241. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  242. package/dest/services/peer-manager/metrics.js +26 -5
  243. package/dest/services/peer-manager/peer_manager.d.ts +1 -1
  244. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  245. package/dest/services/peer-manager/peer_manager.js +4 -3
  246. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  247. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  248. package/dest/services/peer-manager/peer_scoring.js +33 -4
  249. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +51 -0
  250. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  251. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +540 -0
  252. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  253. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  254. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  255. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +47 -0
  256. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  257. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  258. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +35 -0
  259. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  260. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +136 -0
  261. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +62 -0
  262. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  263. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +176 -0
  264. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  265. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  266. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  267. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  268. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  269. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  270. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  271. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  272. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  273. package/dest/services/reqresp/constants.d.ts +12 -0
  274. package/dest/services/reqresp/constants.d.ts.map +1 -0
  275. package/dest/services/reqresp/constants.js +7 -0
  276. package/dest/services/reqresp/interface.d.ts +12 -1
  277. package/dest/services/reqresp/interface.d.ts.map +1 -1
  278. package/dest/services/reqresp/interface.js +15 -1
  279. package/dest/services/reqresp/metrics.d.ts +6 -5
  280. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  281. package/dest/services/reqresp/metrics.js +17 -5
  282. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  283. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  284. package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
  285. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  286. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  287. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +27 -9
  288. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +29 -6
  289. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  290. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +59 -13
  291. package/dest/services/reqresp/protocols/status.d.ts +1 -1
  292. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  293. package/dest/services/reqresp/protocols/status.js +2 -1
  294. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  295. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  296. package/dest/services/reqresp/protocols/tx.js +20 -0
  297. package/dest/services/reqresp/reqresp.d.ts +6 -1
  298. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  299. package/dest/services/reqresp/reqresp.js +86 -34
  300. package/dest/services/service.d.ts +42 -3
  301. package/dest/services/service.d.ts.map +1 -1
  302. package/dest/services/tx_collection/config.d.ts +22 -1
  303. package/dest/services/tx_collection/config.d.ts.map +1 -1
  304. package/dest/services/tx_collection/config.js +55 -1
  305. package/dest/services/tx_collection/fast_tx_collection.d.ts +7 -7
  306. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  307. package/dest/services/tx_collection/fast_tx_collection.js +95 -84
  308. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  309. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  310. package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
  311. package/dest/services/tx_collection/file_store_tx_source.d.ts +37 -0
  312. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  313. package/dest/services/tx_collection/file_store_tx_source.js +90 -0
  314. package/dest/services/tx_collection/index.d.ts +3 -1
  315. package/dest/services/tx_collection/index.d.ts.map +1 -1
  316. package/dest/services/tx_collection/index.js +2 -0
  317. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  318. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  319. package/dest/services/tx_collection/instrumentation.js +10 -2
  320. package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
  321. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  322. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  323. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  324. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  325. package/dest/services/tx_collection/request_tracker.js +84 -0
  326. package/dest/services/tx_collection/slow_tx_collection.d.ts +9 -5
  327. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  328. package/dest/services/tx_collection/slow_tx_collection.js +60 -26
  329. package/dest/services/tx_collection/tx_collection.d.ts +29 -19
  330. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  331. package/dest/services/tx_collection/tx_collection.js +79 -7
  332. package/dest/services/tx_collection/tx_collection_sink.d.ts +18 -8
  333. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  334. package/dest/services/tx_collection/tx_collection_sink.js +26 -29
  335. package/dest/services/tx_collection/tx_source.d.ts +8 -3
  336. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  337. package/dest/services/tx_collection/tx_source.js +19 -2
  338. package/dest/services/tx_file_store/config.d.ts +16 -0
  339. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  340. package/dest/services/tx_file_store/config.js +22 -0
  341. package/dest/services/tx_file_store/index.d.ts +4 -0
  342. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  343. package/dest/services/tx_file_store/index.js +3 -0
  344. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  345. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  346. package/dest/services/tx_file_store/instrumentation.js +29 -0
  347. package/dest/services/tx_file_store/tx_file_store.d.ts +48 -0
  348. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  349. package/dest/services/tx_file_store/tx_file_store.js +152 -0
  350. package/dest/services/tx_provider.d.ts +6 -6
  351. package/dest/services/tx_provider.d.ts.map +1 -1
  352. package/dest/services/tx_provider.js +9 -8
  353. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  354. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  355. package/dest/services/tx_provider_instrumentation.js +5 -5
  356. package/dest/test-helpers/index.d.ts +3 -1
  357. package/dest/test-helpers/index.d.ts.map +1 -1
  358. package/dest/test-helpers/index.js +2 -0
  359. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  360. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  361. package/dest/test-helpers/make-test-p2p-clients.js +1 -2
  362. package/dest/test-helpers/mock-pubsub.d.ts +30 -4
  363. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  364. package/dest/test-helpers/mock-pubsub.js +105 -4
  365. package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
  366. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  367. package/dest/test-helpers/reqresp-nodes.js +4 -3
  368. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  369. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  370. package/dest/test-helpers/test_tx_provider.js +41 -0
  371. package/dest/test-helpers/testbench-utils.d.ts +163 -0
  372. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  373. package/dest/test-helpers/testbench-utils.js +385 -0
  374. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  375. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  376. package/dest/testbench/p2p_client_testbench_worker.js +222 -140
  377. package/dest/testbench/worker_client_manager.d.ts +53 -6
  378. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  379. package/dest/testbench/worker_client_manager.js +231 -45
  380. package/dest/util.d.ts +3 -3
  381. package/dest/util.d.ts.map +1 -1
  382. package/package.json +16 -16
  383. package/src/bootstrap/bootstrap.ts +7 -4
  384. package/src/client/factory.ts +108 -37
  385. package/src/client/interface.ts +56 -34
  386. package/src/client/p2p_client.ts +207 -274
  387. package/src/client/test/tx_proposal_collector/README.md +227 -0
  388. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +344 -0
  389. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  390. package/src/config.ts +172 -46
  391. package/src/errors/tx-pool.error.ts +12 -0
  392. package/src/index.ts +1 -0
  393. package/src/mem_pools/attestation_pool/attestation_pool.ts +497 -91
  394. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +460 -112
  395. package/src/mem_pools/attestation_pool/index.ts +9 -2
  396. package/src/mem_pools/attestation_pool/mocks.ts +7 -4
  397. package/src/mem_pools/index.ts +4 -1
  398. package/src/mem_pools/instrumentation.ts +19 -14
  399. package/src/mem_pools/interface.ts +4 -4
  400. package/src/mem_pools/tx_pool/README.md +29 -14
  401. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +130 -75
  402. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +66 -5
  403. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +119 -4
  404. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +163 -0
  405. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +3 -3
  406. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +4 -2
  407. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  408. package/src/mem_pools/tx_pool/priority.ts +4 -4
  409. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +3 -1
  410. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  411. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  412. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
  413. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  414. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  415. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +122 -0
  416. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  417. package/src/mem_pools/tx_pool_v2/eviction/index.ts +27 -0
  418. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  419. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  420. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  421. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  422. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  423. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  424. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  425. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  426. package/src/mem_pools/tx_pool_v2/interfaces.ts +247 -0
  427. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +337 -0
  428. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  429. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +430 -0
  430. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +238 -0
  431. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1105 -0
  432. package/src/msg_validators/attestation_validator/README.md +49 -0
  433. package/src/msg_validators/attestation_validator/attestation_validator.ts +28 -15
  434. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +16 -10
  435. package/src/msg_validators/clock_tolerance.ts +52 -0
  436. package/src/msg_validators/proposal_validator/README.md +123 -0
  437. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +14 -4
  438. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +20 -7
  439. package/src/msg_validators/proposal_validator/proposal_validator.ts +89 -65
  440. package/src/msg_validators/tx_validator/README.md +119 -0
  441. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +5 -5
  442. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  443. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  444. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  445. package/src/msg_validators/tx_validator/block_header_validator.ts +21 -8
  446. package/src/msg_validators/tx_validator/data_validator.ts +6 -2
  447. package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
  448. package/src/msg_validators/tx_validator/factory.ts +406 -56
  449. package/src/msg_validators/tx_validator/fee_payer_balance.ts +44 -0
  450. package/src/msg_validators/tx_validator/gas_validator.ts +140 -55
  451. package/src/msg_validators/tx_validator/index.ts +3 -0
  452. package/src/msg_validators/tx_validator/metadata_validator.ts +18 -7
  453. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  454. package/src/msg_validators/tx_validator/phases_validator.ts +86 -29
  455. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  456. package/src/msg_validators/tx_validator/timestamp_validator.ts +29 -21
  457. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  458. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  459. package/src/services/data_store.ts +10 -7
  460. package/src/services/discv5/discV5_service.ts +1 -1
  461. package/src/services/dummy_service.ts +59 -2
  462. package/src/services/encoding.ts +20 -13
  463. package/src/services/gossipsub/README.md +641 -0
  464. package/src/services/gossipsub/index.ts +2 -0
  465. package/src/services/gossipsub/scoring.ts +29 -5
  466. package/src/services/gossipsub/topic_score_params.ts +487 -0
  467. package/src/services/index.ts +1 -0
  468. package/src/services/libp2p/instrumentation.ts +20 -7
  469. package/src/services/libp2p/libp2p_service.ts +541 -420
  470. package/src/services/peer-manager/metrics.ts +28 -4
  471. package/src/services/peer-manager/peer_manager.ts +5 -3
  472. package/src/services/peer-manager/peer_scoring.ts +29 -1
  473. package/src/services/reqresp/README.md +229 -0
  474. package/src/services/reqresp/batch-tx-requester/README.md +344 -0
  475. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +670 -0
  476. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  477. package/src/services/reqresp/batch-tx-requester/interface.ts +54 -0
  478. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +168 -0
  479. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +249 -0
  480. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  481. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  482. package/src/services/reqresp/connection-sampler/connection_sampler.ts +16 -0
  483. package/src/services/reqresp/constants.ts +14 -0
  484. package/src/services/reqresp/interface.ts +29 -1
  485. package/src/services/reqresp/metrics.ts +34 -9
  486. package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
  487. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +35 -12
  488. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +74 -9
  489. package/src/services/reqresp/protocols/status.ts +5 -3
  490. package/src/services/reqresp/protocols/tx.ts +22 -0
  491. package/src/services/reqresp/reqresp.ts +99 -32
  492. package/src/services/service.ts +55 -2
  493. package/src/services/tx_collection/config.ts +83 -1
  494. package/src/services/tx_collection/fast_tx_collection.ts +111 -91
  495. package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
  496. package/src/services/tx_collection/file_store_tx_source.ts +117 -0
  497. package/src/services/tx_collection/index.ts +6 -0
  498. package/src/services/tx_collection/instrumentation.ts +17 -2
  499. package/src/services/tx_collection/proposal_tx_collector.ts +108 -0
  500. package/src/services/tx_collection/request_tracker.ts +127 -0
  501. package/src/services/tx_collection/slow_tx_collection.ts +68 -35
  502. package/src/services/tx_collection/tx_collection.ts +122 -27
  503. package/src/services/tx_collection/tx_collection_sink.ts +30 -34
  504. package/src/services/tx_collection/tx_source.ts +22 -3
  505. package/src/services/tx_file_store/config.ts +37 -0
  506. package/src/services/tx_file_store/index.ts +3 -0
  507. package/src/services/tx_file_store/instrumentation.ts +36 -0
  508. package/src/services/tx_file_store/tx_file_store.ts +175 -0
  509. package/src/services/tx_provider.ts +12 -11
  510. package/src/services/tx_provider_instrumentation.ts +11 -5
  511. package/src/test-helpers/index.ts +2 -0
  512. package/src/test-helpers/make-test-p2p-clients.ts +4 -6
  513. package/src/test-helpers/mock-pubsub.ts +146 -9
  514. package/src/test-helpers/reqresp-nodes.ts +5 -7
  515. package/src/test-helpers/test_tx_provider.ts +64 -0
  516. package/src/test-helpers/testbench-utils.ts +456 -0
  517. package/src/testbench/p2p_client_testbench_worker.ts +334 -137
  518. package/src/testbench/worker_client_manager.ts +312 -47
  519. package/src/util.ts +8 -2
  520. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  521. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  522. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  523. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  524. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  525. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  526. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts +0 -15
  527. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts.map +0 -1
  528. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.js +0 -88
  529. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  530. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  531. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -183
  532. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  533. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  534. package/src/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.ts +0 -108
  535. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -206
@@ -1,10 +1,10 @@
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
7
  constructor(epochCache: EpochCacheInterface);
8
- validate(message: CheckpointAttestation): Promise<PeerErrorSeverity | undefined>;
8
+ validate(message: CheckpointAttestation): Promise<ValidationResult>;
9
9
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0YXRpb25fdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvYXR0ZXN0YXRpb25fdmFsaWRhdG9yL2F0dGVzdGF0aW9uX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsS0FBSyxxQkFBcUIsRUFBRSxLQUFLLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXJHLHFCQUFhLDhCQUErQixZQUFXLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQztJQUN4RixTQUFTLENBQUMsVUFBVSxFQUFFLG1CQUFtQixDQUFDO0lBQzFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDO0lBRXpCLFlBQVksVUFBVSxFQUFFLG1CQUFtQixFQUcxQztJQUVLLFFBQVEsQ0FBQyxPQUFPLEVBQUUscUJBQXFCLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxDQXdEckY7Q0FDRiJ9
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0YXRpb25fdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvYXR0ZXN0YXRpb25fdmFsaWRhdG9yL2F0dGVzdGF0aW9uX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsS0FBSyxxQkFBcUIsRUFDMUIsS0FBSyxZQUFZLEVBRWpCLEtBQUssZ0JBQWdCLEVBQ3RCLE1BQU0sbUJBQW1CLENBQUM7QUFJM0IscUJBQWEsOEJBQStCLFlBQVcsWUFBWSxDQUFDLHFCQUFxQixDQUFDO0lBQ3hGLFNBQVMsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7SUFDMUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFFekIsWUFBWSxVQUFVLEVBQUUsbUJBQW1CLEVBRzFDO0lBRUssUUFBUSxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0E4RHhFO0NBQ0YifQ==
@@ -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;IAEzB,YAAY,UAAU,EAAE,mBAAmB,EAG1C;IAEK,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8DxE;CACF"}
@@ -1,6 +1,7 @@
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
5
  export class CheckpointAttestationValidator {
5
6
  epochCache;
6
7
  logger;
@@ -11,21 +12,38 @@ export class CheckpointAttestationValidator {
11
12
  async validate(message) {
12
13
  const slotNumber = message.payload.header.slotNumber;
13
14
  try {
14
- const { currentSlot, nextSlot } = await this.epochCache.getProposerAttesterAddressInCurrentOrNextSlot();
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;
15
+ // Use target slots since proposals target pipeline slots (slot + 1 when pipelining)
16
+ const { targetSlot, nextSlot } = this.epochCache.getTargetAndNextSlot();
17
+ if (slotNumber !== targetSlot && slotNumber !== nextSlot) {
18
+ // Check if message is for previous slot and within clock tolerance
19
+ if (!isWithinClockTolerance(slotNumber, targetSlot, this.epochCache)) {
20
+ this.logger.warn(`Checkpoint attestation slot ${slotNumber} is not current (${targetSlot}) or next (${nextSlot}) slot`);
21
+ return {
22
+ result: 'reject',
23
+ severity: PeerErrorSeverity.HighToleranceError
24
+ };
25
+ }
26
+ this.logger.debug(`Ignoring checkpoint attestation for previous slot ${slotNumber} within clock tolerance`);
27
+ return {
28
+ result: 'ignore'
29
+ };
18
30
  }
19
31
  // Verify the signature is valid
20
32
  const attester = message.getSender();
21
33
  if (attester === undefined) {
22
34
  this.logger.warn(`Invalid signature in checkpoint attestation for slot ${slotNumber}`);
23
- return PeerErrorSeverity.LowToleranceError;
35
+ return {
36
+ result: 'reject',
37
+ severity: PeerErrorSeverity.LowToleranceError
38
+ };
24
39
  }
25
40
  // Verify the attester is in the committee for this slot
26
41
  if (!await this.epochCache.isInCommittee(slotNumber, attester)) {
27
42
  this.logger.warn(`Attester ${attester.toString()} is not in committee for slot ${slotNumber}`);
28
- return PeerErrorSeverity.HighToleranceError;
43
+ return {
44
+ result: 'reject',
45
+ severity: PeerErrorSeverity.HighToleranceError
46
+ };
29
47
  }
30
48
  // Verify the proposer signature matches the expected proposer for the attestation's slot
31
49
  // We look up the proposer for the specific slot rather than using currentSlot/nextSlot
@@ -34,22 +52,36 @@ export class CheckpointAttestationValidator {
34
52
  const expectedProposer = await this.epochCache.getProposerAttesterAddressInSlot(slotNumber);
35
53
  if (!expectedProposer) {
36
54
  this.logger.warn(`No proposer defined for slot ${slotNumber}`);
37
- return PeerErrorSeverity.HighToleranceError;
55
+ return {
56
+ result: 'reject',
57
+ severity: PeerErrorSeverity.HighToleranceError
58
+ };
38
59
  }
39
60
  if (!proposer) {
40
61
  this.logger.warn(`Invalid proposer signature in checkpoint attestation for slot ${slotNumber}`);
41
- return PeerErrorSeverity.LowToleranceError;
62
+ return {
63
+ result: 'reject',
64
+ severity: PeerErrorSeverity.LowToleranceError
65
+ };
42
66
  }
43
67
  if (!proposer.equals(expectedProposer)) {
44
68
  this.logger.warn(`Proposer signature mismatch in checkpoint attestation. ` + `Expected ${expectedProposer?.toString() ?? 'none'} but got ${proposer.toString()} for slot ${slotNumber}`);
45
- return PeerErrorSeverity.HighToleranceError;
69
+ return {
70
+ result: 'reject',
71
+ severity: PeerErrorSeverity.HighToleranceError
72
+ };
46
73
  }
47
- return undefined;
74
+ return {
75
+ result: 'accept'
76
+ };
48
77
  } catch (e) {
49
78
  // People shouldn't be sending us attestations if the committee doesn't exist
50
79
  if (e instanceof NoCommitteeError) {
51
80
  this.logger.warn(`No committee exists for checkpoint attestation for slot ${slotNumber}`);
52
- return PeerErrorSeverity.LowToleranceError;
81
+ return {
82
+ result: 'reject',
83
+ severity: PeerErrorSeverity.LowToleranceError
84
+ };
53
85
  }
54
86
  throw e;
55
87
  }
@@ -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,7 @@ 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);
18
+ validate(message: CheckpointAttestation): Promise<ValidationResult>;
19
19
  }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlzaGVybWFuX2F0dGVzdGF0aW9uX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL2F0dGVzdGF0aW9uX3ZhbGlkYXRvci9maXNoZXJtYW5fYXR0ZXN0YXRpb25fdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUsscUJBQXFCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRixPQUFPLEVBQXVCLEtBQUssZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFcEYsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDNUYsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUU7Ozs7Ozs7R0FPRztBQUNILHFCQUFhLDZCQUE4QixTQUFRLDhCQUE4QjtJQUs3RSxPQUFPLENBQUMsZUFBZTtJQUp6QixPQUFPLENBQUMseUJBQXlCLENBQUM7SUFFbEMsWUFDRSxVQUFVLEVBQUUsbUJBQW1CLEVBQ3ZCLGVBQWUsRUFBRSxlQUFlLEVBQ3hDLGVBQWUsRUFBRSxlQUFlLEVBT2pDO0lBRWMsUUFBUSxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLENBd0Q5RjtDQUNGIn0=
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlzaGVybWFuX2F0dGVzdGF0aW9uX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL2F0dGVzdGF0aW9uX3ZhbGlkYXRvci9maXNoZXJtYW5fYXR0ZXN0YXRpb25fdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUsscUJBQXFCLEVBQXFCLEtBQUssZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RyxPQUFPLEVBQXVCLEtBQUssZUFBZSxFQUFrQyxNQUFNLHlCQUF5QixDQUFDO0FBRXBILE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDL0YsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUU7Ozs7Ozs7R0FPRztBQUNILHFCQUFhLDZCQUE4QixTQUFRLDhCQUE4QjtJQUs3RSxPQUFPLENBQUMsZUFBZTtJQUp6QixPQUFPLENBQUMseUJBQXlCLENBQUM7SUFFbEMsWUFDRSxVQUFVLEVBQUUsbUJBQW1CLEVBQ3ZCLGVBQWUsRUFBRSxrQkFBa0IsRUFDM0MsZUFBZSxFQUFFLGVBQWUsRUFhakM7SUFFYyxRQUFRLENBQUMsT0FBTyxFQUFFLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQXdEakY7Q0FDRiJ9
@@ -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,EAajC;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
@@ -15,12 +15,17 @@ import { CheckpointAttestationValidator } from './attestation_validator.js';
15
15
  super(epochCache), 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,21 @@
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
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvY2tfdG9sZXJhbmNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvY2xvY2tfdG9sZXJhbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTdEOzs7Ozs7O0dBT0c7QUFDSCxlQUFPLE1BQU0saUNBQWlDLE1BQU0sQ0FBQztBQUVyRDs7Ozs7OztHQU9HO0FBQ0gsd0JBQWdCLHNCQUFzQixDQUNwQyxXQUFXLEVBQUUsVUFBVSxFQUN2QixXQUFXLEVBQUUsVUFBVSxFQUN2QixVQUFVLEVBQUUsbUJBQW1CLEdBQzlCLE9BQU8sQ0EwQlQifQ==
@@ -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;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,CA0BT"}
@@ -0,0 +1,38 @@
1
+ import { SlotNumber } from '@aztec/foundation/branded-types';
2
+ /**
3
+ * Maximum clock disparity tolerance for P2P message validation (in milliseconds).
4
+ * Messages for the previous slot are accepted if we're within this many milliseconds
5
+ * of the current slot start. This prevents penalizing peers for messages that
6
+ * were valid when sent but arrived slightly late due to network latency.
7
+ *
8
+ * This follows Ethereum's MAXIMUM_GOSSIP_CLOCK_DISPARITY approach.
9
+ */ export const MAXIMUM_GOSSIP_CLOCK_DISPARITY_MS = 500;
10
+ /**
11
+ * Checks if a message for the previous slot should be accepted due to clock tolerance.
12
+ *
13
+ * @param messageSlot - The slot number from the received message
14
+ * @param currentSlot - The current slot number
15
+ * @param epochCache - EpochCache to get timing information
16
+ * @returns true if the message is for the previous slot AND we're within the clock tolerance window
17
+ */ export function isWithinClockTolerance(messageSlot, currentSlot, epochCache) {
18
+ // Guard against slot 0 edge case (genesis)
19
+ if (currentSlot === SlotNumber.ZERO) {
20
+ return false;
21
+ }
22
+ // Only apply tolerance to messages for the previous slot
23
+ const previousSlot = SlotNumber(currentSlot - 1);
24
+ if (messageSlot !== previousSlot) {
25
+ return false;
26
+ }
27
+ // Check how far we are into the current slot (in milliseconds)
28
+ const { ts: slotStartTs, nowMs } = epochCache.getEpochAndSlotNow();
29
+ const targetSlot = epochCache.getTargetSlot();
30
+ // Sanity check: ensure the epoch cache's target slot matches the expected current slot
31
+ if (targetSlot !== currentSlot) {
32
+ return false;
33
+ }
34
+ // ts is in seconds, convert to ms; nowMs is already in milliseconds
35
+ const slotStartMs = slotStartTs * 1000n;
36
+ const elapsedMs = Number(nowMs - slotStartMs);
37
+ return elapsedMs < MAXIMUM_GOSSIP_CLOCK_DISPARITY_MS;
38
+ }
@@ -1,9 +1,11 @@
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;
7
8
  });
9
+ validate(proposal: BlockProposal): Promise<ValidationResult>;
8
10
  }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL2Jsb2NrX3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVoRixxQkFBYSxzQkFBdUIsU0FBUSxpQkFBaUIsQ0FBQyxhQUFhLENBQUUsWUFBVyxZQUFZLENBQUMsYUFBYSxDQUFDO0lBQ2pILFlBQVksVUFBVSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRTtRQUFFLFlBQVksRUFBRSxPQUFPLENBQUE7S0FBRSxFQUUzRTtDQUNGIn0=
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL2Jsb2NrX3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl2RixxQkFBYSxzQkFBdUIsWUFBVyxZQUFZLENBQUMsYUFBYSxDQUFDO0lBQ3hFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBb0I7SUFFN0MsWUFBWSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFO1FBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQztRQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEVBRXBHO0lBRUssUUFBUSxDQUFDLFFBQVEsRUFBRSxhQUFhLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBTWpFO0NBQ0YifQ==
@@ -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,YAAY,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,EAEpG;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,11 @@
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;
7
8
  });
9
+ validate(proposal: CheckpointProposal): Promise<ValidationResult>;
8
10
  }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9wcm9wb3NhbF92YWxpZGF0b3IvY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVoRixxQkFBYSwyQkFDWCxTQUFRLGlCQUFpQixDQUFDLGtCQUFrQixDQUM1QyxZQUFXLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQztJQUUzQyxZQUFZLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUU7UUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFBO0tBQUUsRUFFM0U7Q0FDRiJ9
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9wcm9wb3NhbF92YWxpZGF0b3IvY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUk1RixxQkFBYSwyQkFBNEIsWUFBVyxZQUFZLENBQUMsa0JBQWtCLENBQUM7SUFDbEYsT0FBTyxDQUFDLGlCQUFpQixDQUFvQjtJQUU3QyxZQUFZLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUU7UUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDO1FBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQUUsRUFFcEc7SUFFSyxRQUFRLENBQUMsUUFBUSxFQUFFLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQVl0RTtDQUNGIn0=
@@ -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,YAAY,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,EAEpG;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,18 @@
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?;
8
9
  constructor(epochCache: EpochCacheInterface, opts: {
9
10
  txsPermitted: boolean;
11
+ maxTxsPerBlock?: number;
10
12
  }, loggerName: string);
11
- validate(proposal: TProposal): Promise<PeerErrorSeverity | undefined>;
13
+ /** Validates header-level fields: slot, signature, and proposer. */
14
+ validate(proposal: BlockProposal | CheckpointProposalCore): Promise<ValidationResult>;
15
+ /** Validates transaction-related fields of a block proposal. */
16
+ validateTxs(proposal: BlockProposal): Promise<ValidationResult>;
12
17
  }
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFekYsOEJBQXNCLGlCQUFpQixDQUFDLFNBQVMsU0FBUyxhQUFhLEdBQUcsa0JBQWtCO0lBQzFGLFNBQVMsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7SUFDMUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDekIsU0FBUyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUM7SUFFaEMsWUFBWSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFO1FBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQTtLQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFJL0Y7SUFFWSxRQUFRLENBQUMsUUFBUSxFQUFFLFNBQVMsR0FBRyxPQUFPLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLENBMEVqRjtDQUNGIn0=
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sRUFDTCxLQUFLLGFBQWEsRUFDbEIsS0FBSyxzQkFBc0IsRUFFM0IsS0FBSyxnQkFBZ0IsRUFDdEIsTUFBTSxtQkFBbUIsQ0FBQztBQUkzQixvRkFBb0Y7QUFDcEYscUJBQWEsaUJBQWlCO0lBQzVCLE9BQU8sQ0FBQyxVQUFVLENBQXNCO0lBQ3hDLE9BQU8sQ0FBQyxNQUFNLENBQVM7SUFDdkIsT0FBTyxDQUFDLFlBQVksQ0FBVTtJQUM5QixPQUFPLENBQUMsY0FBYyxDQUFDLENBQVM7SUFFaEMsWUFDRSxVQUFVLEVBQUUsbUJBQW1CLEVBQy9CLElBQUksRUFBRTtRQUFFLFlBQVksRUFBRSxPQUFPLENBQUM7UUFBQyxjQUFjLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBRSxFQUN4RCxVQUFVLEVBQUUsTUFBTSxFQU1uQjtJQUVELG9FQUFvRTtJQUN2RCxRQUFRLENBQUMsUUFBUSxFQUFFLGFBQWEsR0FBRyxzQkFBc0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0F3Q2pHO0lBRUQsZ0VBQWdFO0lBQ25ELFdBQVcsQ0FBQyxRQUFRLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQXdDM0U7Q0FDRiJ9
@@ -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,CA0EjF;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;IAEhC,YACE,UAAU,EAAE,mBAAmB,EAC/B,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,EACxD,UAAU,EAAE,MAAM,EAMnB;IAED,oEAAoE;IACvD,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwCjG;IAED,gEAAgE;IACnD,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwC3E;CACF"}
@@ -1,80 +1,116 @@
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
- export class ProposalValidator {
4
+ import { isWithinClockTolerance } from '../clock_tolerance.js';
5
+ /** Validates header-level and tx-level fields of block and checkpoint proposals. */ export class ProposalValidator {
5
6
  epochCache;
6
7
  logger;
7
8
  txsPermitted;
9
+ maxTxsPerBlock;
8
10
  constructor(epochCache, opts, loggerName){
9
11
  this.epochCache = epochCache;
10
12
  this.txsPermitted = opts.txsPermitted;
13
+ this.maxTxsPerBlock = opts.maxTxsPerBlock;
11
14
  this.logger = createLogger(loggerName);
12
15
  }
13
- async validate(proposal) {
16
+ /** Validates header-level fields: slot, signature, and proposer. */ async validate(proposal) {
14
17
  try {
18
+ // Slot check: use target slots since proposals target pipeline slots (slot + 1 when pipelining)
19
+ const { targetSlot, nextSlot } = this.epochCache.getTargetAndNextSlot();
20
+ const slotNumber = proposal.slotNumber;
21
+ if (slotNumber !== targetSlot && slotNumber !== nextSlot) {
22
+ // Check if message is for previous slot and within clock tolerance
23
+ if (!isWithinClockTolerance(slotNumber, targetSlot, this.epochCache)) {
24
+ this.logger.warn(`Penalizing peer for invalid slot number ${slotNumber}`, {
25
+ targetSlot,
26
+ nextSlot
27
+ });
28
+ return {
29
+ result: 'reject',
30
+ severity: PeerErrorSeverity.HighToleranceError
31
+ };
32
+ }
33
+ this.logger.verbose(`Ignoring proposal for previous slot ${slotNumber} within clock tolerance`);
34
+ return {
35
+ result: 'ignore'
36
+ };
37
+ }
15
38
  // Signature validity
16
39
  const proposer = proposal.getSender();
17
40
  if (!proposer) {
18
- this.logger.debug(`Penalizing peer for proposal with invalid signature`);
19
- return PeerErrorSeverity.MidToleranceError;
20
- }
21
- // Transactions permitted check
22
- const embeddedTxCount = proposal.txs?.length ?? 0;
23
- if (!this.txsPermitted && (proposal.txHashes.length > 0 || embeddedTxCount > 0)) {
24
- this.logger.debug(`Penalizing peer for proposal with ${proposal.txHashes.length} transaction(s) when transactions are not permitted`);
25
- return PeerErrorSeverity.MidToleranceError;
26
- }
27
- // Embedded txs must be listed in txHashes
28
- const hashSet = new Set(proposal.txHashes.map((h)=>h.toString()));
29
- const missingTxHashes = embeddedTxCount > 0 ? proposal.txs.filter((tx)=>!hashSet.has(tx.getTxHash().toString())).map((tx)=>tx.getTxHash().toString()) : [];
30
- if (embeddedTxCount > 0 && missingTxHashes.length > 0) {
31
- this.logger.warn('Penalizing peer for embedded transaction(s) not included in txHashes', {
32
- embeddedTxCount,
33
- txHashesLength: proposal.txHashes.length,
34
- missingTxHashes
35
- });
36
- return PeerErrorSeverity.MidToleranceError;
37
- }
38
- // Slot and proposer checks
39
- const { currentProposer, nextProposer, currentSlot, nextSlot } = await this.epochCache.getProposerAttesterAddressInCurrentOrNextSlot();
40
- const slotNumber = proposal.slotNumber;
41
- if (slotNumber !== currentSlot && slotNumber !== nextSlot) {
42
- this.logger.debug(`Penalizing peer for invalid slot number ${slotNumber}`, {
43
- currentSlot,
44
- nextSlot
45
- });
46
- return PeerErrorSeverity.HighToleranceError;
47
- }
48
- if (slotNumber === currentSlot && currentProposer !== undefined && !proposer.equals(currentProposer)) {
49
- this.logger.debug(`Penalizing peer for invalid proposer for current slot ${slotNumber}`, {
50
- currentProposer,
51
- nextProposer,
52
- proposer: proposer.toString()
53
- });
54
- return PeerErrorSeverity.MidToleranceError;
41
+ this.logger.warn(`Penalizing peer for proposal with invalid signature`);
42
+ return {
43
+ result: 'reject',
44
+ severity: PeerErrorSeverity.MidToleranceError
45
+ };
55
46
  }
56
- if (slotNumber === nextSlot && nextProposer !== undefined && !proposer.equals(nextProposer)) {
57
- this.logger.debug(`Penalizing peer for invalid proposer for next slot ${slotNumber}`, {
58
- currentProposer,
59
- nextProposer,
47
+ // Proposer check
48
+ const expectedProposer = await this.epochCache.getProposerAttesterAddressInSlot(slotNumber);
49
+ if (expectedProposer !== undefined && !proposer.equals(expectedProposer)) {
50
+ this.logger.warn(`Penalizing peer for invalid proposer for current slot ${slotNumber}`, {
51
+ expectedProposer,
60
52
  proposer: proposer.toString()
61
53
  });
62
- return PeerErrorSeverity.MidToleranceError;
54
+ return {
55
+ result: 'reject',
56
+ severity: PeerErrorSeverity.MidToleranceError
57
+ };
63
58
  }
64
- // Validate tx hashes for all txs embedded in the proposal
65
- if (!(await Promise.all(proposal.txs?.map((tx)=>tx.validateTxHash()) ?? [])).every((v)=>v)) {
66
- this.logger.warn(`Penalizing peer for invalid tx hashes in proposal`, {
67
- proposer,
68
- slotNumber
69
- });
70
- return PeerErrorSeverity.LowToleranceError;
71
- }
72
- return undefined;
59
+ return {
60
+ result: 'accept'
61
+ };
73
62
  } catch (e) {
74
63
  if (e instanceof NoCommitteeError) {
75
- return PeerErrorSeverity.LowToleranceError;
64
+ return {
65
+ result: 'reject',
66
+ severity: PeerErrorSeverity.LowToleranceError
67
+ };
76
68
  }
77
69
  throw e;
78
70
  }
79
71
  }
72
+ /** Validates transaction-related fields of a block proposal. */ async validateTxs(proposal) {
73
+ // Transactions permitted check
74
+ const embeddedTxCount = proposal.txs?.length ?? 0;
75
+ if (!this.txsPermitted && (proposal.txHashes.length > 0 || embeddedTxCount > 0)) {
76
+ this.logger.warn(`Penalizing peer for proposal with ${proposal.txHashes.length} transaction(s) when transactions are not permitted`);
77
+ return {
78
+ result: 'reject',
79
+ severity: PeerErrorSeverity.MidToleranceError
80
+ };
81
+ }
82
+ // Max txs per block check
83
+ if (this.maxTxsPerBlock !== undefined && proposal.txHashes.length > this.maxTxsPerBlock) {
84
+ this.logger.warn(`Penalizing peer for proposal with ${proposal.txHashes.length} transaction(s) when max is ${this.maxTxsPerBlock}`);
85
+ return {
86
+ result: 'reject',
87
+ severity: PeerErrorSeverity.MidToleranceError
88
+ };
89
+ }
90
+ // Embedded txs must be listed in txHashes
91
+ const hashSet = new Set(proposal.txHashes.map((h)=>h.toString()));
92
+ const missingTxHashes = embeddedTxCount > 0 ? proposal.txs.filter((tx)=>!hashSet.has(tx.getTxHash().toString())).map((tx)=>tx.getTxHash().toString()) : [];
93
+ if (embeddedTxCount > 0 && missingTxHashes.length > 0) {
94
+ this.logger.warn('Penalizing peer for embedded transaction(s) not included in txHashes', {
95
+ embeddedTxCount,
96
+ txHashesLength: proposal.txHashes.length,
97
+ missingTxHashes
98
+ });
99
+ return {
100
+ result: 'reject',
101
+ severity: PeerErrorSeverity.MidToleranceError
102
+ };
103
+ }
104
+ // Validate tx hashes for all txs embedded in the proposal
105
+ if (!(await Promise.all(proposal.txs?.map((tx)=>tx.validateTxHash()) ?? [])).every((v)=>v)) {
106
+ this.logger.warn(`Penalizing peer for invalid tx hashes in proposal`);
107
+ return {
108
+ result: 'reject',
109
+ severity: PeerErrorSeverity.LowToleranceError
110
+ };
111
+ }
112
+ return {
113
+ result: 'accept'
114
+ };
115
+ }
80
116
  }
@@ -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';