@aztec/p2p 0.0.1-commit.3fd054f6 → 0.0.1-commit.431c48d

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 (429) hide show
  1. package/README.md +7 -6
  2. package/dest/bootstrap/bootstrap.d.ts +1 -1
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +22 -6
  5. package/dest/client/factory.d.ts +4 -3
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +35 -25
  8. package/dest/client/interface.d.ts +52 -12
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +36 -20
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +127 -54
  13. package/dest/config.d.ts +150 -107
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +77 -26
  16. package/dest/errors/p2p-service.error.d.ts +9 -0
  17. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  18. package/dest/errors/p2p-service.error.js +10 -0
  19. package/dest/errors/reqresp.error.d.ts +9 -16
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +10 -17
  22. package/dest/index.d.ts +1 -2
  23. package/dest/index.d.ts.map +1 -1
  24. package/dest/index.js +0 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +98 -56
  26. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool.js +269 -196
  28. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +218 -59
  31. package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
  32. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/mocks.js +6 -4
  34. package/dest/mem_pools/index.d.ts +1 -2
  35. package/dest/mem_pools/index.d.ts.map +1 -1
  36. package/dest/mem_pools/instrumentation.d.ts +9 -4
  37. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  38. package/dest/mem_pools/instrumentation.js +28 -9
  39. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +10 -5
  40. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +29 -20
  42. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +3 -3
  43. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +6 -6
  45. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  46. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  47. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +3 -3
  48. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +1 -1
  49. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
  50. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +3 -1
  51. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  52. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  54. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  55. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  56. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +64 -0
  57. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +1 -1
  58. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -1
  59. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +3 -4
  60. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +1 -1
  61. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
  62. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +6 -7
  63. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +1 -1
  64. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
  65. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +6 -5
  66. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +11 -1
  67. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -1
  68. package/dest/mem_pools/tx_pool_v2/instrumentation.js +24 -0
  69. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +33 -5
  70. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  71. package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
  72. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +5 -2
  73. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  74. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +13 -6
  75. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +15 -1
  76. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  77. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +31 -0
  78. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +16 -3
  79. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  80. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +83 -32
  81. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +50 -6
  82. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  83. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +243 -127
  84. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -3
  85. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  86. package/dest/msg_validators/attestation_validator/attestation_validator.js +38 -16
  87. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  88. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  89. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  90. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +8 -3
  91. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  92. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +2 -2
  93. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +8 -3
  94. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  95. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +8 -2
  96. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +25 -3
  97. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  98. package/dest/msg_validators/proposal_validator/proposal_validator.js +85 -15
  99. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  100. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  102. package/dest/msg_validators/tx_validator/allowed_public_setup.js +3 -3
  103. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  104. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  105. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  106. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  107. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  108. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  109. package/dest/msg_validators/tx_validator/data_validator.js +1 -0
  110. package/dest/msg_validators/tx_validator/factory.d.ts +14 -15
  111. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  112. package/dest/msg_validators/tx_validator/factory.js +29 -16
  113. package/dest/msg_validators/tx_validator/gas_validator.d.ts +47 -10
  114. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  115. package/dest/msg_validators/tx_validator/gas_validator.js +65 -48
  116. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  117. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  118. package/dest/msg_validators/tx_validator/index.js +2 -0
  119. package/dest/msg_validators/tx_validator/phases_validator.js +2 -2
  120. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  121. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  122. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  123. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  124. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  125. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  126. package/dest/services/data_store.d.ts +1 -1
  127. package/dest/services/data_store.d.ts.map +1 -1
  128. package/dest/services/data_store.js +5 -5
  129. package/dest/services/discv5/discV5_service.d.ts +13 -2
  130. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  131. package/dest/services/discv5/discV5_service.js +119 -23
  132. package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
  133. package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
  134. package/dest/services/discv5/persisted_enr_store.js +145 -0
  135. package/dest/services/dummy_service.d.ts +18 -16
  136. package/dest/services/dummy_service.d.ts.map +1 -1
  137. package/dest/services/dummy_service.js +21 -16
  138. package/dest/services/encoding.d.ts +19 -6
  139. package/dest/services/encoding.d.ts.map +1 -1
  140. package/dest/services/encoding.js +25 -15
  141. package/dest/services/gossipsub/topic_score_params.d.ts +6 -12
  142. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  143. package/dest/services/gossipsub/topic_score_params.js +4 -14
  144. package/dest/services/libp2p/instrumentation.d.ts +6 -1
  145. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  146. package/dest/services/libp2p/instrumentation.js +21 -0
  147. package/dest/services/libp2p/libp2p_service.d.ts +49 -44
  148. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  149. package/dest/services/libp2p/libp2p_service.js +388 -279
  150. package/dest/services/peer-manager/peer_manager.d.ts +31 -3
  151. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  152. package/dest/services/peer-manager/peer_manager.js +121 -23
  153. package/dest/services/peer-manager/peer_scoring.d.ts +34 -2
  154. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  155. package/dest/services/peer-manager/peer_scoring.js +102 -13
  156. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +1 -8
  157. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  158. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +35 -44
  159. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +8 -5
  160. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  161. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  162. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  163. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  164. package/dest/services/reqresp/config.d.ts +15 -3
  165. package/dest/services/reqresp/config.d.ts.map +1 -1
  166. package/dest/services/reqresp/config.js +11 -0
  167. package/dest/services/reqresp/interface.d.ts +16 -18
  168. package/dest/services/reqresp/interface.d.ts.map +1 -1
  169. package/dest/services/reqresp/interface.js +10 -20
  170. package/dest/services/reqresp/metrics.d.ts +1 -1
  171. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  172. package/dest/services/reqresp/metrics.js +0 -1
  173. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  174. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  175. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  176. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  177. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  178. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
  179. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
  180. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  181. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
  182. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  183. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  184. package/dest/services/reqresp/protocols/index.js +0 -1
  185. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  186. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  187. package/dest/services/reqresp/protocols/tx.js +1 -3
  188. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  189. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  190. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  191. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  192. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  193. package/dest/services/reqresp/rate-limiter/rate_limits.js +3 -13
  194. package/dest/services/reqresp/reqresp.d.ts +7 -29
  195. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  196. package/dest/services/reqresp/reqresp.js +59 -209
  197. package/dest/services/service.d.ts +43 -18
  198. package/dest/services/service.d.ts.map +1 -1
  199. package/dest/services/tx_collection/config.d.ts +2 -23
  200. package/dest/services/tx_collection/config.d.ts.map +1 -1
  201. package/dest/services/tx_collection/config.js +2 -55
  202. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  203. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  204. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  205. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  206. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  207. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  208. package/dest/services/tx_collection/index.d.ts +2 -3
  209. package/dest/services/tx_collection/index.d.ts.map +1 -1
  210. package/dest/services/tx_collection/index.js +0 -1
  211. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  212. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  213. package/dest/services/tx_collection/instrumentation.js +0 -2
  214. package/dest/services/tx_collection/tx_collection.d.ts +35 -51
  215. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  216. package/dest/services/tx_collection/tx_collection.js +275 -119
  217. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  218. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  219. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  220. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  221. package/dest/services/tx_collection/tx_source.js +13 -8
  222. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  223. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  224. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  225. package/dest/services/tx_provider.d.ts +3 -1
  226. package/dest/services/tx_provider.d.ts.map +1 -1
  227. package/dest/services/tx_provider.js +3 -0
  228. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  229. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  230. package/dest/test-helpers/make-test-p2p-clients.js +5 -2
  231. package/dest/test-helpers/mock-pubsub.d.ts +33 -9
  232. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  233. package/dest/test-helpers/mock-pubsub.js +57 -44
  234. package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
  235. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  236. package/dest/test-helpers/reqresp-nodes.js +16 -18
  237. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  238. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  239. package/dest/test-helpers/test_tx_provider.js +3 -0
  240. package/dest/test-helpers/testbench-utils.d.ts +15 -14
  241. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  242. package/dest/test-helpers/testbench-utils.js +28 -13
  243. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  244. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  245. package/dest/testbench/p2p_client_testbench_worker.js +101 -39
  246. package/dest/testbench/worker_client_manager.d.ts +10 -6
  247. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  248. package/dest/testbench/worker_client_manager.js +51 -9
  249. package/dest/util.d.ts +11 -6
  250. package/dest/util.d.ts.map +1 -1
  251. package/dest/util.js +35 -14
  252. package/dest/versioning.d.ts +3 -6
  253. package/dest/versioning.d.ts.map +1 -1
  254. package/dest/versioning.js +3 -24
  255. package/package.json +17 -17
  256. package/src/bootstrap/bootstrap.ts +17 -3
  257. package/src/client/factory.ts +53 -24
  258. package/src/client/interface.ts +48 -18
  259. package/src/client/p2p_client.ts +144 -86
  260. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  261. package/src/config.ts +159 -34
  262. package/src/errors/p2p-service.error.ts +11 -0
  263. package/src/errors/reqresp.error.ts +13 -19
  264. package/src/index.ts +0 -1
  265. package/src/mem_pools/attestation_pool/attestation_pool.ts +324 -239
  266. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +238 -63
  267. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  268. package/src/mem_pools/index.ts +0 -3
  269. package/src/mem_pools/instrumentation.ts +18 -12
  270. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +30 -20
  271. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
  272. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -4
  273. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +3 -2
  274. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  275. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +67 -0
  276. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +1 -3
  277. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +5 -7
  278. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +5 -6
  279. package/src/mem_pools/tx_pool_v2/instrumentation.ts +27 -0
  280. package/src/mem_pools/tx_pool_v2/interfaces.ts +31 -4
  281. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +20 -8
  282. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +35 -0
  283. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +94 -31
  284. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +270 -133
  285. package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -15
  286. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +15 -7
  287. package/src/msg_validators/proposal_validator/README.md +1 -1
  288. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +15 -3
  289. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +26 -3
  290. package/src/msg_validators/proposal_validator/proposal_validator.ts +94 -12
  291. package/src/msg_validators/tx_validator/README.md +13 -3
  292. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  293. package/src/msg_validators/tx_validator/allowed_public_setup.ts +3 -3
  294. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  295. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  296. package/src/msg_validators/tx_validator/data_validator.ts +2 -0
  297. package/src/msg_validators/tx_validator/factory.ts +37 -20
  298. package/src/msg_validators/tx_validator/gas_validator.ts +99 -54
  299. package/src/msg_validators/tx_validator/index.ts +2 -0
  300. package/src/msg_validators/tx_validator/phases_validator.ts +2 -2
  301. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  302. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  303. package/src/services/data_store.ts +5 -13
  304. package/src/services/discv5/discV5_service.ts +126 -14
  305. package/src/services/discv5/persisted_enr_store.ts +158 -0
  306. package/src/services/dummy_service.ts +26 -40
  307. package/src/services/encoding.ts +28 -20
  308. package/src/services/gossipsub/README.md +33 -11
  309. package/src/services/gossipsub/topic_score_params.ts +9 -18
  310. package/src/services/libp2p/instrumentation.ts +22 -0
  311. package/src/services/libp2p/libp2p_service.ts +456 -305
  312. package/src/services/peer-manager/peer_manager.ts +133 -22
  313. package/src/services/peer-manager/peer_scoring.ts +102 -8
  314. package/src/services/reqresp/README.md +2 -37
  315. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +39 -52
  316. package/src/services/reqresp/batch-tx-requester/interface.ts +11 -4
  317. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  318. package/src/services/reqresp/config.ts +19 -2
  319. package/src/services/reqresp/interface.ts +21 -47
  320. package/src/services/reqresp/metrics.ts +0 -1
  321. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  322. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
  323. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
  324. package/src/services/reqresp/protocols/index.ts +0 -1
  325. package/src/services/reqresp/protocols/tx.ts +1 -3
  326. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  327. package/src/services/reqresp/rate-limiter/rate_limits.ts +3 -13
  328. package/src/services/reqresp/reqresp.ts +69 -252
  329. package/src/services/service.ts +51 -35
  330. package/src/services/tx_collection/config.ts +3 -80
  331. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  332. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  333. package/src/services/tx_collection/index.ts +1 -6
  334. package/src/services/tx_collection/instrumentation.ts +1 -7
  335. package/src/services/tx_collection/tx_collection.ts +330 -173
  336. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  337. package/src/services/tx_collection/tx_source.ts +10 -8
  338. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  339. package/src/services/tx_provider.ts +5 -0
  340. package/src/test-helpers/make-test-p2p-clients.ts +3 -0
  341. package/src/test-helpers/mock-pubsub.ts +61 -60
  342. package/src/test-helpers/reqresp-nodes.ts +12 -22
  343. package/src/test-helpers/test_tx_provider.ts +5 -0
  344. package/src/test-helpers/testbench-utils.ts +35 -26
  345. package/src/testbench/p2p_client_testbench_worker.ts +108 -53
  346. package/src/testbench/worker_client_manager.ts +59 -20
  347. package/src/util.ts +32 -17
  348. package/src/versioning.ts +3 -33
  349. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  350. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  351. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -304
  352. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  353. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  354. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  355. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  356. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  357. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  358. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  359. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  360. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  361. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  362. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  363. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  364. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  365. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  366. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -123
  367. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  368. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  369. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  370. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  371. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  372. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  373. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  374. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  375. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  376. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  377. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  378. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  379. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  380. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  381. package/dest/mem_pools/tx_pool/index.js +0 -2
  382. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  383. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  384. package/dest/mem_pools/tx_pool/priority.js +0 -15
  385. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  386. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  387. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  388. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  389. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  390. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -402
  391. package/dest/msg_validators/clock_tolerance.d.ts +0 -21
  392. package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
  393. package/dest/msg_validators/clock_tolerance.js +0 -38
  394. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  395. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  396. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  397. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  398. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  399. package/dest/services/reqresp/protocols/block.js +0 -32
  400. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -51
  401. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  402. package/dest/services/tx_collection/fast_tx_collection.js +0 -311
  403. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -48
  404. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  405. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  406. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  407. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  408. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  409. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -343
  410. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  411. package/src/mem_pools/tx_pool/README.md +0 -270
  412. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  413. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  414. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  415. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -163
  416. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  417. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  418. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  419. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  420. package/src/mem_pools/tx_pool/index.ts +0 -2
  421. package/src/mem_pools/tx_pool/priority.ts +0 -20
  422. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  423. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -321
  424. package/src/msg_validators/clock_tolerance.ts +0 -52
  425. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  426. package/src/services/reqresp/protocols/block.ts +0 -37
  427. package/src/services/tx_collection/fast_tx_collection.ts +0 -361
  428. package/src/services/tx_collection/proposal_tx_collector.ts +0 -108
  429. package/src/services/tx_collection/slow_tx_collection.ts +0 -266
@@ -1,5 +1,6 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import { type CheckpointAttestation, type ValidationResult } from '@aztec/stdlib/p2p';
2
+ import { type CheckpointAttestation, type CoordinationSignatureContext, type ValidationResult } from '@aztec/stdlib/p2p';
3
+ import type { ConsensusTimetable } from '@aztec/stdlib/timetable';
3
4
  import { type TelemetryClient } from '@aztec/telemetry-client';
4
5
  import type { AttestationPoolApi } from '../../mem_pools/attestation_pool/attestation_pool.js';
5
6
  import { CheckpointAttestationValidator } from './attestation_validator.js';
@@ -14,7 +15,10 @@ import { CheckpointAttestationValidator } from './attestation_validator.js';
14
15
  export declare class FishermanAttestationValidator extends CheckpointAttestationValidator {
15
16
  private attestationPool;
16
17
  private invalidAttestationCounter;
17
- constructor(epochCache: EpochCacheInterface, attestationPool: AttestationPoolApi, telemetryClient: TelemetryClient);
18
+ constructor(epochCache: EpochCacheInterface, timetable: ConsensusTimetable, attestationPool: AttestationPoolApi, telemetryClient: TelemetryClient, opts: {
19
+ signatureContext: CoordinationSignatureContext;
20
+ clockDisparityMs: number;
21
+ });
18
22
  validate(message: CheckpointAttestation): Promise<ValidationResult>;
19
23
  }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlzaGVybWFuX2F0dGVzdGF0aW9uX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL2F0dGVzdGF0aW9uX3ZhbGlkYXRvci9maXNoZXJtYW5fYXR0ZXN0YXRpb25fdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUsscUJBQXFCLEVBQXFCLEtBQUssZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RyxPQUFPLEVBQXVCLEtBQUssZUFBZSxFQUFrQyxNQUFNLHlCQUF5QixDQUFDO0FBRXBILE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDL0YsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUU7Ozs7Ozs7R0FPRztBQUNILHFCQUFhLDZCQUE4QixTQUFRLDhCQUE4QjtJQUs3RSxPQUFPLENBQUMsZUFBZTtJQUp6QixPQUFPLENBQUMseUJBQXlCLENBQUM7SUFFbEMsWUFDRSxVQUFVLEVBQUUsbUJBQW1CLEVBQ3ZCLGVBQWUsRUFBRSxrQkFBa0IsRUFDM0MsZUFBZSxFQUFFLGVBQWUsRUFhakM7SUFFYyxRQUFRLENBQUMsT0FBTyxFQUFFLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQXdEakY7Q0FDRiJ9
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlzaGVybWFuX2F0dGVzdGF0aW9uX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL2F0dGVzdGF0aW9uX3ZhbGlkYXRvci9maXNoZXJtYW5fYXR0ZXN0YXRpb25fdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUNMLEtBQUsscUJBQXFCLEVBQzFCLEtBQUssNEJBQTRCLEVBRWpDLEtBQUssZ0JBQWdCLEVBQ3RCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNsRSxPQUFPLEVBQXVCLEtBQUssZUFBZSxFQUFrQyxNQUFNLHlCQUF5QixDQUFDO0FBRXBILE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDL0YsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUU7Ozs7Ozs7R0FPRztBQUNILHFCQUFhLDZCQUE4QixTQUFRLDhCQUE4QjtJQU03RSxPQUFPLENBQUMsZUFBZTtJQUx6QixPQUFPLENBQUMseUJBQXlCLENBQUM7SUFFbEMsWUFDRSxVQUFVLEVBQUUsbUJBQW1CLEVBQy9CLFNBQVMsRUFBRSxrQkFBa0IsRUFDckIsZUFBZSxFQUFFLGtCQUFrQixFQUMzQyxlQUFlLEVBQUUsZUFBZSxFQUNoQyxJQUFJLEVBQUU7UUFDSixnQkFBZ0IsRUFBRSw0QkFBNEIsQ0FBQztRQUMvQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUM7S0FDMUIsRUFhRjtJQUVjLFFBQVEsQ0FBQyxPQUFPLEVBQUUscUJBQXFCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBcURqRjtDQUNGIn0=
@@ -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,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
+ {"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,EACL,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EAEjC,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,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;IAM7E,OAAO,CAAC,eAAe;IALzB,OAAO,CAAC,yBAAyB,CAAC;IAElC,YACE,UAAU,EAAE,mBAAmB,EAC/B,SAAS,EAAE,kBAAkB,EACrB,eAAe,EAAE,kBAAkB,EAC3C,eAAe,EAAE,eAAe,EAChC,IAAI,EAAE;QACJ,gBAAgB,EAAE,4BAA4B,CAAC;QAC/C,gBAAgB,EAAE,MAAM,CAAC;KAC1B,EAaF;IAEc,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAqDjF;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, timetable, attestationPool, telemetryClient, opts){
15
+ super(epochCache, timetable, 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, {
@@ -41,8 +41,7 @@ import { CheckpointAttestationValidator } from './attestation_validator.js';
41
41
  result: 'accept'
42
42
  };
43
43
  }
44
- const proposalId = message.archive.toString();
45
- const proposal = await this.attestationPool.getCheckpointProposal(proposalId);
44
+ const proposal = await this.attestationPool.getCheckpointProposal(message.payload.header.slotNumber);
46
45
  if (proposal) {
47
46
  // Compare the attestation payload with the proposal payload
48
47
  if (!message.payload.equals(proposal)) {
@@ -67,7 +66,7 @@ import { CheckpointAttestationValidator } from './attestation_validator.js';
67
66
  }
68
67
  } else {
69
68
  // We might receive attestations before proposals in some cases
70
- this.logger.debug(`Received attestation for slot ${slotNumberBigInt} but proposal not found yet. ` + `Proposal ID: ${proposalId}`);
69
+ this.logger.debug(`Received attestation for slot ${slotNumberBigInt} but proposal not found yet.`);
71
70
  }
72
71
  return {
73
72
  result: 'accept'
@@ -1,11 +1,16 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import type { BlockProposal, P2PValidator, ValidationResult } from '@aztec/stdlib/p2p';
2
+ import type { BlockProposal, CoordinationSignatureContext, P2PValidator, ValidationResult } from '@aztec/stdlib/p2p';
3
+ import type { ConsensusTimetable } from '@aztec/stdlib/timetable';
3
4
  export declare class BlockProposalValidator implements P2PValidator<BlockProposal> {
4
5
  private proposalValidator;
5
- constructor(epochCache: EpochCacheInterface, opts: {
6
+ constructor(epochCache: EpochCacheInterface, timetable: ConsensusTimetable, opts: {
6
7
  txsPermitted: boolean;
7
8
  maxTxsPerBlock?: number;
9
+ maxBlocksPerCheckpoint?: number;
10
+ skipSlotValidation?: boolean;
11
+ signatureContext: CoordinationSignatureContext;
12
+ clockDisparityMs: number;
8
13
  });
9
14
  validate(proposal: BlockProposal): Promise<ValidationResult>;
10
15
  }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL2Jsb2NrX3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl2RixxQkFBYSxzQkFBdUIsWUFBVyxZQUFZLENBQUMsYUFBYSxDQUFDO0lBQ3hFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBb0I7SUFFN0MsWUFBWSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFO1FBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQztRQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEVBRXBHO0lBRUssUUFBUSxDQUFDLFFBQVEsRUFBRSxhQUFhLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBTWpFO0NBQ0YifQ==
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL2Jsb2NrX3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSw0QkFBNEIsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNySCxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSWxFLHFCQUFhLHNCQUF1QixZQUFXLFlBQVksQ0FBQyxhQUFhLENBQUM7SUFDeEUsT0FBTyxDQUFDLGlCQUFpQixDQUFvQjtJQUU3QyxZQUNFLFVBQVUsRUFBRSxtQkFBbUIsRUFDL0IsU0FBUyxFQUFFLGtCQUFrQixFQUM3QixJQUFJLEVBQUU7UUFDSixZQUFZLEVBQUUsT0FBTyxDQUFDO1FBQ3RCLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUN4QixzQkFBc0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUNoQyxrQkFBa0IsQ0FBQyxFQUFFLE9BQU8sQ0FBQztRQUM3QixnQkFBZ0IsRUFBRSw0QkFBNEIsQ0FBQztRQUMvQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUM7S0FDMUIsRUFHRjtJQUVLLFFBQVEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQU1qRTtDQUNGIn0=
@@ -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,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
+ {"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,4BAA4B,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE,qBAAa,sBAAuB,YAAW,YAAY,CAAC,aAAa,CAAC;IACxE,OAAO,CAAC,iBAAiB,CAAoB;IAE7C,YACE,UAAU,EAAE,mBAAmB,EAC/B,SAAS,EAAE,kBAAkB,EAC7B,IAAI,EAAE;QACJ,YAAY,EAAE,OAAO,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,gBAAgB,EAAE,4BAA4B,CAAC;QAC/C,gBAAgB,EAAE,MAAM,CAAC;KAC1B,EAGF;IAEK,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAMjE;CACF"}
@@ -1,8 +1,8 @@
1
1
  import { ProposalValidator } from '../proposal_validator/proposal_validator.js';
2
2
  export class BlockProposalValidator {
3
3
  proposalValidator;
4
- constructor(epochCache, opts){
5
- this.proposalValidator = new ProposalValidator(epochCache, opts, 'p2p:block_proposal_validator');
4
+ constructor(epochCache, timetable, opts){
5
+ this.proposalValidator = new ProposalValidator(epochCache, timetable, opts, 'p2p:block_proposal_validator');
6
6
  }
7
7
  async validate(proposal) {
8
8
  const headerResult = await this.proposalValidator.validate(proposal);
@@ -1,11 +1,16 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import type { CheckpointProposal, P2PValidator, ValidationResult } from '@aztec/stdlib/p2p';
2
+ import type { CheckpointProposal, CoordinationSignatureContext, P2PValidator, ValidationResult } from '@aztec/stdlib/p2p';
3
+ import type { ConsensusTimetable } from '@aztec/stdlib/timetable';
3
4
  export declare class CheckpointProposalValidator implements P2PValidator<CheckpointProposal> {
4
5
  private proposalValidator;
5
- constructor(epochCache: EpochCacheInterface, opts: {
6
+ constructor(epochCache: EpochCacheInterface, timetable: ConsensusTimetable, opts: {
6
7
  txsPermitted: boolean;
7
8
  maxTxsPerBlock?: number;
9
+ maxBlocksPerCheckpoint?: number;
10
+ skipSlotValidation?: boolean;
11
+ signatureContext: CoordinationSignatureContext;
12
+ clockDisparityMs: number;
8
13
  });
9
14
  validate(proposal: CheckpointProposal): Promise<ValidationResult>;
10
15
  }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9wcm9wb3NhbF92YWxpZGF0b3IvY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUk1RixxQkFBYSwyQkFBNEIsWUFBVyxZQUFZLENBQUMsa0JBQWtCLENBQUM7SUFDbEYsT0FBTyxDQUFDLGlCQUFpQixDQUFvQjtJQUU3QyxZQUFZLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUU7UUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDO1FBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQUUsRUFFcEc7SUFFSyxRQUFRLENBQUMsUUFBUSxFQUFFLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQVl0RTtDQUNGIn0=
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9wcm9wb3NhbF92YWxpZGF0b3IvY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFDVixrQkFBa0IsRUFDbEIsNEJBQTRCLEVBQzVCLFlBQVksRUFDWixnQkFBZ0IsRUFDakIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBSWxFLHFCQUFhLDJCQUE0QixZQUFXLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQztJQUNsRixPQUFPLENBQUMsaUJBQWlCLENBQW9CO0lBRTdDLFlBQ0UsVUFBVSxFQUFFLG1CQUFtQixFQUMvQixTQUFTLEVBQUUsa0JBQWtCLEVBQzdCLElBQUksRUFBRTtRQUNKLFlBQVksRUFBRSxPQUFPLENBQUM7UUFDdEIsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQ3hCLHNCQUFzQixDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQ2hDLGtCQUFrQixDQUFDLEVBQUUsT0FBTyxDQUFDO1FBQzdCLGdCQUFnQixFQUFFLDRCQUE0QixDQUFDO1FBQy9DLGdCQUFnQixFQUFFLE1BQU0sQ0FBQztLQUMxQixFQUdGO0lBRUssUUFBUSxDQUFDLFFBQVEsRUFBRSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FrQnRFO0NBQ0YifQ==
@@ -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,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
+ {"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,EACV,kBAAkB,EAClB,4BAA4B,EAC5B,YAAY,EACZ,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE,qBAAa,2BAA4B,YAAW,YAAY,CAAC,kBAAkB,CAAC;IAClF,OAAO,CAAC,iBAAiB,CAAoB;IAE7C,YACE,UAAU,EAAE,mBAAmB,EAC/B,SAAS,EAAE,kBAAkB,EAC7B,IAAI,EAAE;QACJ,YAAY,EAAE,OAAO,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,gBAAgB,EAAE,4BAA4B,CAAC;QAC/C,gBAAgB,EAAE,MAAM,CAAC;KAC1B,EAGF;IAEK,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkBtE;CACF"}
@@ -1,8 +1,8 @@
1
1
  import { ProposalValidator } from '../proposal_validator/proposal_validator.js';
2
2
  export class CheckpointProposalValidator {
3
3
  proposalValidator;
4
- constructor(epochCache, opts){
5
- this.proposalValidator = new ProposalValidator(epochCache, opts, 'p2p:checkpoint_proposal_validator');
4
+ constructor(epochCache, timetable, opts){
5
+ this.proposalValidator = new ProposalValidator(epochCache, timetable, opts, 'p2p:checkpoint_proposal_validator');
6
6
  }
7
7
  async validate(proposal) {
8
8
  const headerResult = await this.proposalValidator.validate(proposal);
@@ -11,6 +11,12 @@ export class CheckpointProposalValidator {
11
11
  }
12
12
  const blockProposal = proposal.getBlockProposal();
13
13
  if (blockProposal) {
14
+ // The terminal block is carried inside the checkpoint proposal rather than gossiped as a
15
+ // standalone block proposal, so apply the per-checkpoint block ceiling to it here too.
16
+ const indexResult = this.proposalValidator.validateBlockIndexWithinCheckpoint(blockProposal);
17
+ if (indexResult.result !== 'accept') {
18
+ return indexResult;
19
+ }
14
20
  return this.proposalValidator.validateTxs(blockProposal);
15
21
  }
16
22
  return {
@@ -1,18 +1,40 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import { type BlockProposal, type CheckpointProposalCore, type ValidationResult } from '@aztec/stdlib/p2p';
2
+ import { type BlockProposal, type CheckpointProposalCore, type CoordinationSignatureContext, type ValidationResult } from '@aztec/stdlib/p2p';
3
+ import type { ConsensusTimetable } from '@aztec/stdlib/timetable';
3
4
  /** Validates header-level and tx-level fields of block and checkpoint proposals. */
4
5
  export declare class ProposalValidator {
5
6
  private epochCache;
7
+ private timetable;
6
8
  private logger;
7
9
  private txsPermitted;
8
10
  private maxTxsPerBlock?;
9
- constructor(epochCache: EpochCacheInterface, opts: {
11
+ private skipSlotValidation;
12
+ private signatureContext;
13
+ private clockDisparityMs;
14
+ constructor(epochCache: EpochCacheInterface, timetable: ConsensusTimetable, opts: {
10
15
  txsPermitted: boolean;
11
16
  maxTxsPerBlock?: number;
17
+ maxBlocksPerCheckpoint?: number;
18
+ skipSlotValidation?: boolean;
19
+ signatureContext: CoordinationSignatureContext;
20
+ clockDisparityMs: number;
12
21
  }, loggerName: string);
13
22
  /** Validates header-level fields: slot, signature, and proposer. */
14
23
  validate(proposal: BlockProposal | CheckpointProposalCore): Promise<ValidationResult>;
24
+ /**
25
+ * Rejects a block proposal whose index within its checkpoint lands at or beyond the hard attestable
26
+ * ceiling `MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT` (a structurally impossible index that can never be
27
+ * part of any checkpoint we could attest to). `indexWithinCheckpoint` is 0-based, so a ceiling of 72
28
+ * rejects the 73rd block.
29
+ *
30
+ * Indices in `[maxBlocksPerCheckpoint, MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT)` are over the configured
31
+ * consensus limit but still structurally valid: they are proposer misbehavior, not relaying-peer
32
+ * fault, so they are *not* rejected here. The p2p service retains and re-broadcasts the first such
33
+ * proposal per (slot, proposer) as slashing evidence and skips processing it. Applies to standalone
34
+ * block proposals and to the terminal block embedded in a checkpoint proposal.
35
+ */
36
+ validateBlockIndexWithinCheckpoint(proposal: BlockProposal): ValidationResult;
15
37
  /** Validates transaction-related fields of a block proposal. */
16
38
  validateTxs(proposal: BlockProposal): Promise<ValidationResult>;
17
39
  }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sRUFDTCxLQUFLLGFBQWEsRUFDbEIsS0FBSyxzQkFBc0IsRUFFM0IsS0FBSyxnQkFBZ0IsRUFDdEIsTUFBTSxtQkFBbUIsQ0FBQztBQUkzQixvRkFBb0Y7QUFDcEYscUJBQWEsaUJBQWlCO0lBQzVCLE9BQU8sQ0FBQyxVQUFVLENBQXNCO0lBQ3hDLE9BQU8sQ0FBQyxNQUFNLENBQVM7SUFDdkIsT0FBTyxDQUFDLFlBQVksQ0FBVTtJQUM5QixPQUFPLENBQUMsY0FBYyxDQUFDLENBQVM7SUFFaEMsWUFDRSxVQUFVLEVBQUUsbUJBQW1CLEVBQy9CLElBQUksRUFBRTtRQUFFLFlBQVksRUFBRSxPQUFPLENBQUM7UUFBQyxjQUFjLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBRSxFQUN4RCxVQUFVLEVBQUUsTUFBTSxFQU1uQjtJQUVELG9FQUFvRTtJQUN2RCxRQUFRLENBQUMsUUFBUSxFQUFFLGFBQWEsR0FBRyxzQkFBc0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0F3Q2pHO0lBRUQsZ0VBQWdFO0lBQ25ELFdBQVcsQ0FBQyxRQUFRLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQXdDM0U7Q0FDRiJ9
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBSTlELE9BQU8sRUFDTCxLQUFLLGFBQWEsRUFDbEIsS0FBSyxzQkFBc0IsRUFDM0IsS0FBSyw0QkFBNEIsRUFFakMsS0FBSyxnQkFBZ0IsRUFFdEIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWxFLG9GQUFvRjtBQUNwRixxQkFBYSxpQkFBaUI7SUFDNUIsT0FBTyxDQUFDLFVBQVUsQ0FBc0I7SUFDeEMsT0FBTyxDQUFDLFNBQVMsQ0FBcUI7SUFDdEMsT0FBTyxDQUFDLE1BQU0sQ0FBUztJQUN2QixPQUFPLENBQUMsWUFBWSxDQUFVO0lBQzlCLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBUztJQUNoQyxPQUFPLENBQUMsa0JBQWtCLENBQVU7SUFDcEMsT0FBTyxDQUFDLGdCQUFnQixDQUErQjtJQUN2RCxPQUFPLENBQUMsZ0JBQWdCLENBQVM7SUFFakMsWUFDRSxVQUFVLEVBQUUsbUJBQW1CLEVBQy9CLFNBQVMsRUFBRSxrQkFBa0IsRUFDN0IsSUFBSSxFQUFFO1FBQ0osWUFBWSxFQUFFLE9BQU8sQ0FBQztRQUN0QixjQUFjLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDeEIsc0JBQXNCLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDaEMsa0JBQWtCLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDN0IsZ0JBQWdCLEVBQUUsNEJBQTRCLENBQUM7UUFDL0MsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDO0tBQzFCLEVBQ0QsVUFBVSxFQUFFLE1BQU0sRUFVbkI7SUFFRCxvRUFBb0U7SUFDdkQsUUFBUSxDQUFDLFFBQVEsRUFBRSxhQUFhLEdBQUcsc0JBQXNCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBa0ZqRztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksa0NBQWtDLENBQUMsUUFBUSxFQUFFLGFBQWEsR0FBRyxnQkFBZ0IsQ0FRbkY7SUFFRCxnRUFBZ0U7SUFDbkQsV0FBVyxDQUFDLFFBQVEsRUFBRSxhQUFhLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBd0MzRTtDQUNGIn0=
@@ -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;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
+ {"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;AAI9D,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,4BAA4B,EAEjC,KAAK,gBAAgB,EAEtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,oFAAoF;AACpF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,kBAAkB,CAAU;IACpC,OAAO,CAAC,gBAAgB,CAA+B;IACvD,OAAO,CAAC,gBAAgB,CAAS;IAEjC,YACE,UAAU,EAAE,mBAAmB,EAC/B,SAAS,EAAE,kBAAkB,EAC7B,IAAI,EAAE;QACJ,YAAY,EAAE,OAAO,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,gBAAgB,EAAE,4BAA4B,CAAC;QAC/C,gBAAgB,EAAE,MAAM,CAAC;KAC1B,EACD,UAAU,EAAE,MAAM,EAUnB;IAED,oEAAoE;IACvD,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkFjG;IAED;;;;;;;;;;;OAWG;IACI,kCAAkC,CAAC,QAAQ,EAAE,aAAa,GAAG,gBAAgB,CAQnF;IAED,gEAAgE;IACnD,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwC3E;CACF"}
@@ -1,39 +1,67 @@
1
1
  import { NoCommitteeError } from '@aztec/ethereum/contracts';
2
2
  import { createLogger } from '@aztec/foundation/log';
3
- import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
4
- import { isWithinClockTolerance } from '../clock_tolerance.js';
3
+ import { MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT } from '@aztec/stdlib/deserialization';
4
+ import { PeerErrorSeverity, hasValidSignatureContext } from '@aztec/stdlib/p2p';
5
5
  /** Validates header-level and tx-level fields of block and checkpoint proposals. */ export class ProposalValidator {
6
6
  epochCache;
7
+ timetable;
7
8
  logger;
8
9
  txsPermitted;
9
10
  maxTxsPerBlock;
10
- constructor(epochCache, opts, loggerName){
11
+ skipSlotValidation;
12
+ signatureContext;
13
+ clockDisparityMs;
14
+ constructor(epochCache, timetable, opts, loggerName){
11
15
  this.epochCache = epochCache;
16
+ this.timetable = timetable;
12
17
  this.txsPermitted = opts.txsPermitted;
13
18
  this.maxTxsPerBlock = opts.maxTxsPerBlock;
19
+ this.skipSlotValidation = opts.skipSlotValidation ?? false;
20
+ this.signatureContext = opts.signatureContext;
21
+ this.clockDisparityMs = opts.clockDisparityMs;
14
22
  this.logger = createLogger(loggerName);
15
23
  }
16
24
  /** Validates header-level fields: slot, signature, and proposer. */ async validate(proposal) {
17
25
  try {
18
- // Slot check: use target slots since proposals target pipeline slots (slot + 1 when pipelining)
19
- const { targetSlot, nextSlot } = this.epochCache.getTargetAndNextSlot();
26
+ // Cross-chain replay check: reject proposals that carry a foreign signing domain.
27
+ if (!hasValidSignatureContext(proposal, this.signatureContext)) {
28
+ this.logger.warn(`Penalizing peer for proposal with foreign signature context`, {
29
+ chainId: proposal.signatureContext.chainId,
30
+ rollupAddress: proposal.signatureContext.rollupAddress.toString(),
31
+ expectedChainId: this.signatureContext.chainId,
32
+ expectedRollupAddress: this.signatureContext.rollupAddress.toString()
33
+ });
34
+ return {
35
+ result: 'reject',
36
+ severity: PeerErrorSeverity.LowToleranceError
37
+ };
38
+ }
39
+ // Slot check: the tight checkpoint proposal receive window (`[receiveStart - δ, target_slot_start -
40
+ // E - D + δ]`) is the sole acceptance gate, applied to both block and checkpoint proposals. The
41
+ // window itself bounds which slots are valid, so far/wrong slots fall outside it. Every block
42
+ // proposal for slot N is sent before the checkpoint proposal for slot N, so nothing legitimate can
43
+ // arrive after the checkpoint receive deadline; gating block proposals on the same window rejects
44
+ // late block proposals at p2p ingress. The attestation deadline remains their re-execution/
45
+ // validation deadline downstream, not their arrival gate.
20
46
  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)) {
47
+ if (!this.skipSlotValidation) {
48
+ // Proposal receive window: [checkpoint_proposal_receive_start, checkpoint_proposal_receive_deadline],
49
+ // widened by the configured clock-disparity tolerance on both ends.
50
+ const startSeconds = this.timetable.getCheckpointProposalReceiveStart(slotNumber);
51
+ const deadlineSeconds = this.timetable.getCheckpointProposalReceiveDeadline(slotNumber);
52
+ const nowMs = Number(this.epochCache.getEpochAndSlotNow().nowMs);
53
+ if (nowMs < startSeconds * 1000 - this.clockDisparityMs || nowMs > deadlineSeconds * 1000 + this.clockDisparityMs) {
24
54
  this.logger.warn(`Penalizing peer for invalid slot number ${slotNumber}`, {
25
- targetSlot,
26
- nextSlot
55
+ slotNumber,
56
+ nowMs,
57
+ windowStartSeconds: startSeconds,
58
+ windowDeadlineSeconds: deadlineSeconds
27
59
  });
28
60
  return {
29
61
  result: 'reject',
30
62
  severity: PeerErrorSeverity.HighToleranceError
31
63
  };
32
64
  }
33
- this.logger.verbose(`Ignoring proposal for previous slot ${slotNumber} within clock tolerance`);
34
- return {
35
- result: 'ignore'
36
- };
37
65
  }
38
66
  // Signature validity
39
67
  const proposer = proposal.getSender();
@@ -46,7 +74,14 @@ import { isWithinClockTolerance } from '../clock_tolerance.js';
46
74
  }
47
75
  // Proposer check
48
76
  const expectedProposer = await this.epochCache.getProposerAttesterAddressInSlot(slotNumber);
49
- if (expectedProposer !== undefined && !proposer.equals(expectedProposer)) {
77
+ if (expectedProposer === undefined) {
78
+ this.logger.warn(`Penalizing peer for proposal with no expected proposer for current slot ${slotNumber}`);
79
+ return {
80
+ result: 'reject',
81
+ severity: PeerErrorSeverity.HighToleranceError
82
+ };
83
+ }
84
+ if (!proposer.equals(expectedProposer)) {
50
85
  this.logger.warn(`Penalizing peer for invalid proposer for current slot ${slotNumber}`, {
51
86
  expectedProposer,
52
87
  proposer: proposer.toString()
@@ -56,6 +91,18 @@ import { isWithinClockTolerance } from '../clock_tolerance.js';
56
91
  severity: PeerErrorSeverity.MidToleranceError
57
92
  };
58
93
  }
94
+ // A block proposal whose index lands at or beyond the hard attestable ceiling is structurally
95
+ // impossible garbage, so reject it immediately at ingress. Indices in
96
+ // `[maxBlocksPerCheckpoint, MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT)` are over the consensus limit
97
+ // but structurally valid proposer misbehavior; they pass gossip validation here so the offending
98
+ // proposal can be retained and re-broadcast as slashing evidence (handled downstream in the p2p
99
+ // service), rather than penalizing the relaying peer.
100
+ if ('indexWithinCheckpoint' in proposal) {
101
+ const indexResult = this.validateBlockIndexWithinCheckpoint(proposal);
102
+ if (indexResult.result !== 'accept') {
103
+ return indexResult;
104
+ }
105
+ }
59
106
  return {
60
107
  result: 'accept'
61
108
  };
@@ -69,6 +116,29 @@ import { isWithinClockTolerance } from '../clock_tolerance.js';
69
116
  throw e;
70
117
  }
71
118
  }
119
+ /**
120
+ * Rejects a block proposal whose index within its checkpoint lands at or beyond the hard attestable
121
+ * ceiling `MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT` (a structurally impossible index that can never be
122
+ * part of any checkpoint we could attest to). `indexWithinCheckpoint` is 0-based, so a ceiling of 72
123
+ * rejects the 73rd block.
124
+ *
125
+ * Indices in `[maxBlocksPerCheckpoint, MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT)` are over the configured
126
+ * consensus limit but still structurally valid: they are proposer misbehavior, not relaying-peer
127
+ * fault, so they are *not* rejected here. The p2p service retains and re-broadcasts the first such
128
+ * proposal per (slot, proposer) as slashing evidence and skips processing it. Applies to standalone
129
+ * block proposals and to the terminal block embedded in a checkpoint proposal.
130
+ */ validateBlockIndexWithinCheckpoint(proposal) {
131
+ if (proposal.indexWithinCheckpoint >= MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT) {
132
+ this.logger.warn(`Penalizing peer for proposal with indexWithinCheckpoint ${proposal.indexWithinCheckpoint} >= attestable ceiling ${MAX_ATTESTABLE_BLOCKS_PER_CHECKPOINT}`);
133
+ return {
134
+ result: 'reject',
135
+ severity: PeerErrorSeverity.MidToleranceError
136
+ };
137
+ }
138
+ return {
139
+ result: 'accept'
140
+ };
141
+ }
72
142
  /** Validates transaction-related fields of a block proposal. */ async validateTxs(proposal) {
73
143
  // Transactions permitted check
74
144
  const embeddedTxCount = proposal.txs?.length ?? 0;
@@ -4,4 +4,4 @@ export declare class AggregateTxValidator<T> implements TxValidator<T> {
4
4
  constructor(...validators: TxValidator<T>[]);
5
5
  validateTx(tx: T): Promise<TxValidationResult>;
6
6
  }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlX3R4X3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9hZ2dyZWdhdGVfdHhfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXhFLHFCQUFhLG9CQUFvQixDQUFDLENBQUMsQ0FBRSxZQUFXLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDNUQsUUFBUSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN0QyxZQUFZLEdBQUcsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQU0xQztJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQWtCbkQ7Q0FDRiJ9
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlX3R4X3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9hZ2dyZWdhdGVfdHhfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXhFLHFCQUFhLG9CQUFvQixDQUFDLENBQUMsQ0FBRSxZQUFXLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDNUQsUUFBUSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN0QyxZQUFZLEdBQUcsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQU0xQztJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQVNuRDtDQUNGIn0=
@@ -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,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
+ {"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,CASnD;CACF"}
@@ -7,25 +7,18 @@ export class AggregateTxValidator {
7
7
  this.validators = validators;
8
8
  }
9
9
  async validateTx(tx) {
10
- const aggregate = {
11
- result: 'valid',
12
- reason: []
13
- };
10
+ const reasons = [];
14
11
  for (const validator of this.validators){
15
12
  const result = await validator.validateTx(tx);
16
13
  if (result.result === 'invalid') {
17
- aggregate.result = 'invalid';
18
- aggregate.reason.push(...result.reason);
19
- } else if (result.result === 'skipped') {
20
- if (aggregate.result === 'valid') {
21
- aggregate.result = 'skipped';
22
- }
23
- aggregate.reason.push(...result.reason);
14
+ reasons.push(...result.reason);
24
15
  }
25
16
  }
26
- if (aggregate.result === 'valid') {
27
- delete aggregate.reason;
28
- }
29
- return aggregate;
17
+ return reasons.length > 0 ? {
18
+ result: 'invalid',
19
+ reason: reasons
20
+ } : {
21
+ result: 'valid'
22
+ };
30
23
  }
31
24
  }
@@ -1,6 +1,6 @@
1
1
  import { ProtocolContractAddress } from '@aztec/protocol-contracts';
2
- import { AuthRegistryArtifact } from '@aztec/protocol-contracts/auth-registry';
3
2
  import { FeeJuiceArtifact } from '@aztec/protocol-contracts/fee-juice';
3
+ import { AuthRegistryArtifact, STANDARD_AUTH_REGISTRY_ADDRESS } from '@aztec/standard-contracts/auth-registry';
4
4
  import { buildAllowedElement } from './allowed_setup_helpers.js';
5
5
  let defaultAllowedSetupFunctions;
6
6
  /** Returns the default list of functions allowed to run in the setup phase of a transaction. */ export async function getDefaultAllowedSetupFunctions() {
@@ -8,14 +8,14 @@ let defaultAllowedSetupFunctions;
8
8
  defaultAllowedSetupFunctions = await Promise.all([
9
9
  // AuthRegistry: needed for authwit support via private path (set_authorized_private enqueues _set_authorized)
10
10
  buildAllowedElement(AuthRegistryArtifact, {
11
- address: ProtocolContractAddress.AuthRegistry
11
+ address: STANDARD_AUTH_REGISTRY_ADDRESS
12
12
  }, '_set_authorized', {
13
13
  onlySelf: true,
14
14
  rejectNullMsgSender: true
15
15
  }),
16
16
  // AuthRegistry: needed for authwit support via public path (PublicFeePaymentMethod calls set_authorized directly)
17
17
  buildAllowedElement(AuthRegistryArtifact, {
18
- address: ProtocolContractAddress.AuthRegistry
18
+ address: STANDARD_AUTH_REGISTRY_ADDRESS
19
19
  }, 'set_authorized', {
20
20
  rejectNullMsgSender: true
21
21
  }),
@@ -10,7 +10,7 @@ import { MerkleTreeId } from '@aztec/stdlib/trees';
10
10
  this.archives = new Map();
11
11
  }
12
12
  async getArchiveIndices(archives) {
13
- const toCheckDb = archives.filter((n)=>!this.archives.has(n.toString())).map((n)=>n.toFr());
13
+ const toCheckDb = archives.filter((n)=>!this.archives.has(n.toString()));
14
14
  const dbHits = await this.db.findLeafIndices(MerkleTreeId.ARCHIVE, toCheckDb);
15
15
  dbHits.forEach((x, index)=>{
16
16
  if (x !== undefined) {
@@ -0,0 +1,15 @@
1
+ import type { Tx, TxValidationResult, TxValidator } from '@aztec/stdlib/tx';
2
+ import type { ITxValidationCache } from './tx_validation_cache.js';
3
+ /** Wraps a {@link TxValidator} to cache its results in a shared {@link ITxValidationCache}. */
4
+ export declare class CachedTxValidator<T extends Tx> implements TxValidator<T> {
5
+ private readonly inner;
6
+ private readonly validatorSymbol;
7
+ private readonly cache;
8
+ constructor(inner: TxValidator<T>, validatorSymbol: symbol, cache: ITxValidationCache);
9
+ static new<T extends Tx>(inner: TxValidator<T> & {
10
+ identifier: symbol;
11
+ }, cache?: ITxValidationCache): TxValidator<T>;
12
+ static newWithIdentifier<T extends Tx>(inner: TxValidator<T>, identifier: symbol, cache?: ITxValidationCache): TxValidator<T>;
13
+ validateTx(tx: T): Promise<TxValidationResult>;
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVkX3R4X3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9jYWNoZWRfdHhfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU1RSxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRW5FLCtGQUErRjtBQUMvRixxQkFBYSxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFFLFlBQVcsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUVsRSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUs7SUFDdEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlO0lBQ2hDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSztJQUh4QixZQUNtQixLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUNyQixlQUFlLEVBQUUsTUFBTSxFQUN2QixLQUFLLEVBQUUsa0JBQWtCLEVBQ3hDO0lBRUosT0FBYyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFDNUIsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRztRQUFFLFVBQVUsRUFBRSxNQUFNLENBQUE7S0FBRSxFQUM5QyxLQUFLLENBQUMsRUFBRSxrQkFBa0IsR0FDekIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUVoQjtJQUVELE9BQWMsaUJBQWlCLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFDMUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFDckIsVUFBVSxFQUFFLE1BQU0sRUFDbEIsS0FBSyxDQUFDLEVBQUUsa0JBQWtCLEdBQ3pCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FFaEI7SUFFTSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FFcEQ7Q0FDRiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cached_tx_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/cached_tx_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,+FAA+F;AAC/F,qBAAa,iBAAiB,CAAC,CAAC,SAAS,EAAE,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;IAElE,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHxB,YACmB,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EACrB,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,kBAAkB,EACxC;IAEJ,OAAc,GAAG,CAAC,CAAC,SAAS,EAAE,EAC5B,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,EAC9C,KAAK,CAAC,EAAE,kBAAkB,GACzB,WAAW,CAAC,CAAC,CAAC,CAEhB;IAED,OAAc,iBAAiB,CAAC,CAAC,SAAS,EAAE,EAC1C,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EACrB,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,kBAAkB,GACzB,WAAW,CAAC,CAAC,CAAC,CAEhB;IAEM,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAEpD;CACF"}
@@ -0,0 +1,19 @@
1
+ /** Wraps a {@link TxValidator} to cache its results in a shared {@link ITxValidationCache}. */ export class CachedTxValidator {
2
+ inner;
3
+ validatorSymbol;
4
+ cache;
5
+ constructor(inner, validatorSymbol, cache){
6
+ this.inner = inner;
7
+ this.validatorSymbol = validatorSymbol;
8
+ this.cache = cache;
9
+ }
10
+ static new(inner, cache) {
11
+ return CachedTxValidator.newWithIdentifier(inner, inner.identifier, cache);
12
+ }
13
+ static newWithIdentifier(inner, identifier, cache) {
14
+ return cache ? new CachedTxValidator(inner, identifier, cache) : inner;
15
+ }
16
+ validateTx(tx) {
17
+ return this.cache.getOrValidate(this.validatorSymbol, tx, ()=>this.inner.validateTx(tx));
18
+ }
19
+ }
@@ -2,7 +2,8 @@ import { type LoggerBindings } from '@aztec/foundation/log';
2
2
  import { Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
3
3
  export declare class DataTxValidator implements TxValidator<Tx> {
4
4
  #private;
5
+ readonly identifier: symbol;
5
6
  constructor(bindings?: LoggerBindings);
6
7
  validateTx(tx: Tx): Promise<TxValidationResult>;
7
8
  }
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvZGF0YV92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFlLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBSXZGLE9BQU8sRUFXTCxFQUFFLEVBQ0YsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxXQUFXLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIscUJBQWEsZUFBZ0IsWUFBVyxXQUFXLENBQUMsRUFBRSxDQUFDOztJQUdyRCxZQUFZLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFFcEM7SUFFSyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FPcEQ7Q0F1SUYifQ==
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvZGF0YV92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFlLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBSXZGLE9BQU8sRUFXTCxFQUFFLEVBQ0YsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxXQUFXLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIscUJBQWEsZUFBZ0IsWUFBVyxXQUFXLENBQUMsRUFBRSxDQUFDOztJQUNyRCxTQUFnQixVQUFVLEVBQUUsTUFBTSxDQUE2QjtJQUkvRCxZQUFZLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFFcEM7SUFFSyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FPcEQ7Q0F1SUYifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"data_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/data_validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAIvF,OAAO,EAWL,EAAE,EACF,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,eAAgB,YAAW,WAAW,CAAC,EAAE,CAAC;;IAGrD,YAAY,QAAQ,CAAC,EAAE,cAAc,EAEpC;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAOpD;CAuIF"}
1
+ {"version":3,"file":"data_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/data_validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAIvF,OAAO,EAWL,EAAE,EACF,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,eAAgB,YAAW,WAAW,CAAC,EAAE,CAAC;;IACrD,SAAgB,UAAU,EAAE,MAAM,CAA6B;IAI/D,YAAY,QAAQ,CAAC,EAAE,cAAc,EAEpC;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAOpD;CAuIF"}
@@ -5,6 +5,7 @@ import { computeContractClassId } from '@aztec/stdlib/contract';
5
5
  import { computeCalldataHash } from '@aztec/stdlib/hash';
6
6
  import { TX_ERROR_CALLDATA_COUNT_MISMATCH, TX_ERROR_CALLDATA_COUNT_TOO_LARGE, TX_ERROR_CONTRACT_CLASS_LOGS, TX_ERROR_CONTRACT_CLASS_LOG_COUNT, TX_ERROR_CONTRACT_CLASS_LOG_LENGTH, TX_ERROR_CONTRACT_CLASS_LOG_SORTING, TX_ERROR_INCORRECT_CALLDATA, TX_ERROR_INCORRECT_CONTRACT_CLASS_ID, TX_ERROR_INCORRECT_HASH, TX_ERROR_MALFORMED_CONTRACT_CLASS_LOG, Tx } from '@aztec/stdlib/tx';
7
7
  export class DataTxValidator {
8
+ identifier = Symbol('DataTxValidator');
8
9
  #log;
9
10
  constructor(bindings){
10
11
  this.#log = createLogger('p2p:tx_validator:tx_data', bindings);