@aztec/p2p 0.0.1-commit.04852196a → 0.0.1-commit.04d373f

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 (406) hide show
  1. package/README.md +129 -3
  2. package/dest/bootstrap/bootstrap.d.ts +1 -1
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +9 -1
  5. package/dest/client/factory.d.ts +4 -3
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +31 -14
  8. package/dest/client/interface.d.ts +14 -5
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +13 -9
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +94 -26
  13. package/dest/config.d.ts +139 -97
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +70 -5
  16. package/dest/errors/p2p-service.error.d.ts +9 -0
  17. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  18. package/dest/errors/p2p-service.error.js +10 -0
  19. package/dest/errors/reqresp.error.d.ts +1 -20
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +0 -21
  22. package/dest/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 +99 -59
  26. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool.js +265 -199
  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 +181 -65
  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 +1 -1
  37. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  38. package/dest/mem_pools/instrumentation.js +17 -1
  39. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  40. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +2 -1
  42. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  43. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  45. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  46. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  47. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  48. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  49. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +10 -5
  50. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  51. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +13 -3
  52. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +20 -7
  54. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
  55. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  56. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +3 -0
  57. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +1 -1
  58. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  59. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +92 -87
  60. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
  61. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  62. package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
  63. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  64. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  65. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  66. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  67. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  68. package/dest/msg_validators/clock_tolerance.js +61 -3
  69. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -2
  70. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  71. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -2
  72. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  73. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +10 -2
  74. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  75. package/dest/msg_validators/proposal_validator/proposal_validator.js +46 -12
  76. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  77. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  78. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  79. package/dest/msg_validators/tx_validator/allowed_public_setup.js +3 -3
  80. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  81. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  82. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  83. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  84. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  85. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  86. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  87. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  88. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  89. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  90. package/dest/msg_validators/tx_validator/factory.d.ts +27 -7
  91. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  92. package/dest/msg_validators/tx_validator/factory.js +47 -17
  93. package/dest/msg_validators/tx_validator/gas_validator.d.ts +48 -7
  94. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  95. package/dest/msg_validators/tx_validator/gas_validator.js +88 -41
  96. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  97. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/index.js +2 -0
  99. package/dest/msg_validators/tx_validator/phases_validator.d.ts +21 -1
  100. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/phases_validator.js +28 -1
  102. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  103. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  104. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  105. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  106. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  107. package/dest/msg_validators/tx_validator/tx_validation_cache.js +69 -0
  108. package/dest/services/data_store.d.ts +1 -1
  109. package/dest/services/data_store.d.ts.map +1 -1
  110. package/dest/services/data_store.js +5 -5
  111. package/dest/services/discv5/discV5_service.d.ts +2 -1
  112. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  113. package/dest/services/discv5/discV5_service.js +35 -8
  114. package/dest/services/dummy_service.d.ts +11 -15
  115. package/dest/services/dummy_service.d.ts.map +1 -1
  116. package/dest/services/dummy_service.js +12 -16
  117. package/dest/services/encoding.d.ts +5 -1
  118. package/dest/services/encoding.d.ts.map +1 -1
  119. package/dest/services/encoding.js +7 -1
  120. package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
  121. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  122. package/dest/services/gossipsub/topic_score_params.js +21 -4
  123. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  124. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  125. package/dest/services/libp2p/instrumentation.js +14 -0
  126. package/dest/services/libp2p/libp2p_service.d.ts +36 -46
  127. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  128. package/dest/services/libp2p/libp2p_service.js +282 -236
  129. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  130. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  131. package/dest/services/peer-manager/peer_manager.js +38 -10
  132. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  133. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  134. package/dest/services/peer-manager/peer_scoring.js +32 -10
  135. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -8
  136. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  137. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +84 -71
  138. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
  139. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  140. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  141. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  142. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  143. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
  144. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  145. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
  146. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  147. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  148. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  149. package/dest/services/reqresp/config.d.ts +3 -3
  150. package/dest/services/reqresp/config.d.ts.map +1 -1
  151. package/dest/services/reqresp/interface.d.ts +16 -18
  152. package/dest/services/reqresp/interface.d.ts.map +1 -1
  153. package/dest/services/reqresp/interface.js +10 -20
  154. package/dest/services/reqresp/metrics.d.ts +1 -1
  155. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  156. package/dest/services/reqresp/metrics.js +0 -1
  157. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  158. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  159. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +4 -2
  160. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  161. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  162. package/dest/services/reqresp/protocols/index.js +0 -1
  163. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  164. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  165. package/dest/services/reqresp/protocols/tx.js +1 -3
  166. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  167. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  168. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  169. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  170. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  171. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  172. package/dest/services/reqresp/reqresp.d.ts +7 -29
  173. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  174. package/dest/services/reqresp/reqresp.js +41 -214
  175. package/dest/services/service.d.ts +9 -12
  176. package/dest/services/service.d.ts.map +1 -1
  177. package/dest/services/tx_collection/config.d.ts +2 -23
  178. package/dest/services/tx_collection/config.d.ts.map +1 -1
  179. package/dest/services/tx_collection/config.js +2 -55
  180. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  181. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  182. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  183. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  184. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  185. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  186. package/dest/services/tx_collection/index.d.ts +2 -3
  187. package/dest/services/tx_collection/index.d.ts.map +1 -1
  188. package/dest/services/tx_collection/index.js +0 -1
  189. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  190. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  191. package/dest/services/tx_collection/instrumentation.js +0 -2
  192. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  193. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  194. package/dest/services/tx_collection/request_tracker.js +84 -0
  195. package/dest/services/tx_collection/tx_collection.d.ts +36 -55
  196. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  197. package/dest/services/tx_collection/tx_collection.js +275 -119
  198. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  199. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  200. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  201. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  202. package/dest/services/tx_collection/tx_source.js +9 -7
  203. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  204. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  205. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  206. package/dest/services/tx_provider.d.ts +3 -1
  207. package/dest/services/tx_provider.d.ts.map +1 -1
  208. package/dest/services/tx_provider.js +3 -0
  209. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  210. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  211. package/dest/test-helpers/make-test-p2p-clients.js +5 -2
  212. package/dest/test-helpers/mock-pubsub.d.ts +23 -9
  213. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  214. package/dest/test-helpers/mock-pubsub.js +44 -44
  215. package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
  216. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  217. package/dest/test-helpers/reqresp-nodes.js +16 -18
  218. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  219. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  220. package/dest/test-helpers/test_tx_provider.js +3 -0
  221. package/dest/test-helpers/testbench-utils.d.ts +12 -14
  222. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  223. package/dest/test-helpers/testbench-utils.js +42 -15
  224. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  225. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  226. package/dest/testbench/p2p_client_testbench_worker.js +83 -38
  227. package/dest/testbench/worker_client_manager.d.ts +10 -6
  228. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  229. package/dest/testbench/worker_client_manager.js +51 -9
  230. package/dest/util.d.ts +11 -6
  231. package/dest/util.d.ts.map +1 -1
  232. package/dest/util.js +35 -14
  233. package/dest/versioning.d.ts +3 -6
  234. package/dest/versioning.d.ts.map +1 -1
  235. package/dest/versioning.js +3 -24
  236. package/package.json +15 -14
  237. package/src/bootstrap/bootstrap.ts +9 -1
  238. package/src/client/factory.ts +55 -7
  239. package/src/client/interface.ts +15 -11
  240. package/src/client/p2p_client.ts +107 -49
  241. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  242. package/src/config.ts +137 -4
  243. package/src/errors/p2p-service.error.ts +11 -0
  244. package/src/errors/reqresp.error.ts +0 -25
  245. package/src/index.ts +0 -1
  246. package/src/mem_pools/attestation_pool/attestation_pool.ts +316 -241
  247. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +204 -68
  248. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  249. package/src/mem_pools/index.ts +0 -3
  250. package/src/mem_pools/instrumentation.ts +5 -1
  251. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  252. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  253. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  254. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  255. package/src/mem_pools/tx_pool_v2/interfaces.ts +9 -4
  256. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +31 -9
  257. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +13 -1
  258. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +93 -93
  259. package/src/msg_validators/attestation_validator/README.md +49 -0
  260. package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
  261. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -7
  262. package/src/msg_validators/clock_tolerance.ts +79 -3
  263. package/src/msg_validators/proposal_validator/README.md +123 -0
  264. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +12 -2
  265. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +17 -2
  266. package/src/msg_validators/proposal_validator/proposal_validator.ts +54 -10
  267. package/src/msg_validators/tx_validator/README.md +15 -3
  268. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  269. package/src/msg_validators/tx_validator/allowed_public_setup.ts +3 -3
  270. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  271. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  272. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  273. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  274. package/src/msg_validators/tx_validator/factory.ts +61 -10
  275. package/src/msg_validators/tx_validator/gas_validator.ts +121 -39
  276. package/src/msg_validators/tx_validator/index.ts +2 -0
  277. package/src/msg_validators/tx_validator/phases_validator.ts +31 -1
  278. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  279. package/src/msg_validators/tx_validator/tx_validation_cache.ts +102 -0
  280. package/src/services/data_store.ts +5 -13
  281. package/src/services/discv5/discV5_service.ts +38 -5
  282. package/src/services/dummy_service.ts +14 -39
  283. package/src/services/encoding.ts +9 -1
  284. package/src/services/gossipsub/topic_score_params.ts +36 -4
  285. package/src/services/libp2p/instrumentation.ts +14 -0
  286. package/src/services/libp2p/libp2p_service.ts +308 -272
  287. package/src/services/peer-manager/peer_manager.ts +44 -10
  288. package/src/services/peer-manager/peer_scoring.ts +27 -5
  289. package/src/services/reqresp/README.md +215 -0
  290. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  291. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +83 -77
  292. package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
  293. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  294. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
  295. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  296. package/src/services/reqresp/config.ts +2 -2
  297. package/src/services/reqresp/interface.ts +21 -47
  298. package/src/services/reqresp/metrics.ts +0 -1
  299. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +4 -2
  300. package/src/services/reqresp/protocols/index.ts +0 -1
  301. package/src/services/reqresp/protocols/tx.ts +1 -3
  302. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  303. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  304. package/src/services/reqresp/reqresp.ts +45 -260
  305. package/src/services/service.ts +12 -28
  306. package/src/services/tx_collection/config.ts +3 -80
  307. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  308. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  309. package/src/services/tx_collection/index.ts +1 -6
  310. package/src/services/tx_collection/instrumentation.ts +1 -7
  311. package/src/services/tx_collection/request_tracker.ts +127 -0
  312. package/src/services/tx_collection/tx_collection.ts +331 -176
  313. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  314. package/src/services/tx_collection/tx_source.ts +8 -7
  315. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  316. package/src/services/tx_provider.ts +5 -0
  317. package/src/test-helpers/make-test-p2p-clients.ts +3 -0
  318. package/src/test-helpers/mock-pubsub.ts +46 -60
  319. package/src/test-helpers/reqresp-nodes.ts +12 -22
  320. package/src/test-helpers/test_tx_provider.ts +5 -0
  321. package/src/test-helpers/testbench-utils.ts +53 -28
  322. package/src/testbench/p2p_client_testbench_worker.ts +87 -54
  323. package/src/testbench/worker_client_manager.ts +59 -20
  324. package/src/util.ts +32 -17
  325. package/src/versioning.ts +3 -33
  326. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  327. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  328. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -304
  329. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  330. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  331. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  332. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  333. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  334. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  335. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  336. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  337. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  338. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  339. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  340. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  341. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  342. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  343. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  344. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  345. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  346. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  347. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  348. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  349. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  350. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  351. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  352. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  353. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  354. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  355. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  356. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  357. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  358. package/dest/mem_pools/tx_pool/index.js +0 -2
  359. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  360. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  361. package/dest/mem_pools/tx_pool/priority.js +0 -15
  362. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  363. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  364. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  365. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  366. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  367. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  368. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  369. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  370. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  371. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  372. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  373. package/dest/services/reqresp/protocols/block.js +0 -32
  374. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -54
  375. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  376. package/dest/services/tx_collection/fast_tx_collection.js +0 -327
  377. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  378. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  379. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  380. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
  381. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  382. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  383. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  384. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  385. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  386. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -345
  387. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  388. package/src/mem_pools/tx_pool/README.md +0 -270
  389. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  390. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  391. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  392. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  393. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  394. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  395. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  396. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  397. package/src/mem_pools/tx_pool/index.ts +0 -2
  398. package/src/mem_pools/tx_pool/priority.ts +0 -20
  399. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  400. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  401. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  402. package/src/services/reqresp/protocols/block.ts +0 -37
  403. package/src/services/tx_collection/fast_tx_collection.ts +0 -387
  404. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
  405. package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
  406. package/src/services/tx_collection/slow_tx_collection.ts +0 -266
@@ -1,4 +1,5 @@
1
1
  import { BlockNumber } from '@aztec/foundation/branded-types';
2
+ import { FifoSet } from '@aztec/foundation/fifo-set';
2
3
  import { ProtocolContractAddress } from '@aztec/protocol-contracts';
3
4
  import { computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
4
5
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
@@ -6,11 +7,16 @@ import { DatabasePublicStateSource } from '@aztec/stdlib/trees';
6
7
  import { Tx, TxHash } from '@aztec/stdlib/tx';
7
8
  import { TxArchive } from './archive/index.js';
8
9
  import { DeletedPool } from './deleted_pool.js';
9
- import { EvictionManager, FeePayerBalanceEvictionRule, FeePayerBalancePreAddRule, InvalidTxsAfterMiningRule, InvalidTxsAfterReorgRule, LowPriorityEvictionRule, LowPriorityPreAddRule, NullifierConflictRule, TxPoolRejectionCode } from './eviction/index.js';
10
+ import { EvictionManager, FeePayerBalanceEvictionRule, FeePayerBalancePreAddRule, InsufficientFeePerGasEvictionRule, InvalidTxsAfterMiningRule, InvalidTxsAfterReorgRule, LowPriorityEvictionRule, LowPriorityPreAddRule, NullifierConflictRule, TxPoolRejectionCode } from './eviction/index.js';
10
11
  import { TxPoolV2Instrumentation } from './instrumentation.js';
11
12
  import { DEFAULT_TX_POOL_V2_CONFIG } from './interfaces.js';
12
13
  import { buildTxMetaData, checkNullifierConflict } from './tx_metadata.js';
13
14
  import { TxPoolIndices } from './tx_pool_indices.js';
15
+ /**
16
+ * Maximum number of full transactions to load into memory at once when finalizing a block.
17
+ * Bounds peak memory while archiving and hard-deleting mined txs (~23k txs/epoch at 10 TPS would
18
+ * otherwise OOM the node).
19
+ */ const FINALIZE_BLOCK_CHUNK_SIZE = 100;
14
20
  /**
15
21
  * Implementation of TxPoolV2 logic.
16
22
  *
@@ -23,6 +29,7 @@ import { TxPoolIndices } from './tx_pool_indices.js';
23
29
  #l2BlockSource;
24
30
  #worldStateSynchronizer;
25
31
  #createTxValidator;
32
+ #checkAllowedSetupCalls;
26
33
  // === In-Memory Indices ===
27
34
  #indices = new TxPoolIndices();
28
35
  // === Config & Services ===
@@ -32,7 +39,7 @@ import { TxPoolIndices } from './tx_pool_indices.js';
32
39
  #evictionManager;
33
40
  #dateProvider;
34
41
  #instrumentation;
35
- #evictedTxHashes = new Set();
42
+ #evictedTxHashes;
36
43
  #log;
37
44
  #callbacks;
38
45
  constructor(store, archiveStore, deps, callbacks, telemetry, config = {}, dateProvider, log){
@@ -41,10 +48,12 @@ import { TxPoolIndices } from './tx_pool_indices.js';
41
48
  this.#l2BlockSource = deps.l2BlockSource;
42
49
  this.#worldStateSynchronizer = deps.worldStateSynchronizer;
43
50
  this.#createTxValidator = deps.createTxValidator;
51
+ this.#checkAllowedSetupCalls = deps.checkAllowedSetupCalls;
44
52
  this.#config = {
45
53
  ...DEFAULT_TX_POOL_V2_CONFIG,
46
54
  ...config
47
55
  };
56
+ this.#evictedTxHashes = FifoSet.withLimit(this.#config.evictedTxCacheSize);
48
57
  this.#archive = new TxArchive(archiveStore, this.#config.archivedTxLimit, log);
49
58
  this.#deletedPool = new DeletedPool(store, this.#txsDB, log);
50
59
  this.#dateProvider = dateProvider;
@@ -61,6 +70,7 @@ import { TxPoolIndices } from './tx_pool_indices.js';
61
70
  }));
62
71
  // Post-event eviction rules (run after events to check ALL pending txs)
63
72
  this.#evictionManager.registerRule(new InvalidTxsAfterMiningRule());
73
+ this.#evictionManager.registerRule(new InsufficientFeePerGasEvictionRule(deps.blockMinFeesProvider));
64
74
  this.#evictionManager.registerRule(new InvalidTxsAfterReorgRule(deps.worldStateSynchronizer));
65
75
  this.#evictionManager.registerRule(new FeePayerBalanceEvictionRule(deps.worldStateSynchronizer));
66
76
  // LowPriorityEvictionRule handles cases where txs become pending via prepareForSlot (unprotect)
@@ -81,30 +91,63 @@ import { TxPoolIndices } from './tx_pool_indices.js';
81
91
  */ async hydrateFromDatabase() {
82
92
  // Step 0: Hydrate deleted pool state
83
93
  await this.#deletedPool.hydrateFromDatabase();
84
- // Step 1: Load all transactions from DB (excluding soft-deleted)
85
- const { loaded, errors: deserializationErrors } = await this.#loadAllTxsFromDb();
86
- // Step 2: Check mined status for each tx
87
- await this.#markMinedStatusBatch(loaded.map((l)=>l.meta));
88
- // Step 3: Partition by mined status
89
- const mined = [];
90
- const nonMined = [];
91
- for (const entry of loaded){
92
- if (entry.meta.minedL2BlockId !== undefined) {
93
- mined.push(entry.meta);
94
+ // Step 1: Stream txs from DB, building metadata and mined status one at a time.
95
+ const minedMetas = [];
96
+ const pendingMetas = [];
97
+ const deserializationErrors = [];
98
+ for await (const [txHashStr, buffer] of this.#txsDB.entriesAsync()){
99
+ // Skip soft-deleted transactions - they stay in DB but not in indices
100
+ if (this.#deletedPool.isSoftDeleted(txHashStr)) {
101
+ continue;
102
+ }
103
+ let meta;
104
+ let txEffect;
105
+ try {
106
+ const tx = Tx.fromBuffer(buffer);
107
+ // Resolve allowed-setup-calls and the tx effect concurrently
108
+ // getTxEffect failures are non-fatal (we just treat the tx as not-yet-mined), so
109
+ // its rejection is swallowed before the Promise.all so it can't fail-fast the batch.
110
+ const txEffectPromise = this.#l2BlockSource.getTxEffect(tx.getTxHash()).catch((err)=>{
111
+ this.#log.warn(`Failed to check mined status for tx ${txHashStr}`, {
112
+ err
113
+ });
114
+ return undefined;
115
+ });
116
+ const [allowedSetupCalls, fetchedTxEffect] = await Promise.all([
117
+ this.#checkAllowedSetupCalls(tx),
118
+ txEffectPromise
119
+ ]);
120
+ meta = await buildTxMetaData(tx, allowedSetupCalls);
121
+ txEffect = fetchedTxEffect;
122
+ } catch (err) {
123
+ this.#log.warn(`Failed to deserialize tx ${txHashStr}, deleting`, {
124
+ err
125
+ });
126
+ deserializationErrors.push(txHashStr);
127
+ continue;
128
+ }
129
+ if (txEffect) {
130
+ meta.minedL2BlockId = {
131
+ number: txEffect.l2BlockNumber,
132
+ hash: txEffect.l2BlockHash.toString()
133
+ };
134
+ }
135
+ if (meta.minedL2BlockId !== undefined) {
136
+ minedMetas.push(meta);
94
137
  } else {
95
- nonMined.push(entry);
138
+ pendingMetas.push(meta);
96
139
  }
97
140
  }
98
- // Step 4: Validate non-mined transactions
99
- const { valid, invalid } = await this.#revalidateMetadata(nonMined.map((e)=>e.meta), 'on startup');
100
- // Step 5: Populate mined indices (these don't need conflict resolution)
101
- for (const meta of mined){
141
+ // Step 2: Validate non-mined transactions
142
+ const { valid, invalid } = await this.#revalidateMetadata(pendingMetas, 'on startup');
143
+ // Step 3: Populate mined indices (these don't need conflict resolution)
144
+ for (const meta of minedMetas){
102
145
  this.#indices.addMined(meta);
103
146
  }
104
- // Step 6: Rebuild pending pool by running pre-add rules for each tx
147
+ // Step 4: Rebuild pending pool by running pre-add rules for each tx
105
148
  // This resolves nullifier conflicts, fee payer balance issues, and pool size limits
106
149
  const { rejected } = await this.#rebuildPendingPool(valid);
107
- // Step 7: Delete invalid and rejected txs from DB only (indices were never populated for these)
150
+ // Step 5: Delete invalid and rejected txs from DB only (indices were never populated for these)
108
151
  const toDelete = [
109
152
  ...deserializationErrors,
110
153
  ...invalid,
@@ -278,33 +321,44 @@ import { TxPoolIndices } from './tx_pool_indices.js';
278
321
  const txHashStr = tx.getTxHash().toString();
279
322
  // Check if already in pool
280
323
  if (this.#indices.has(txHashStr)) {
324
+ this.#log.verbose(`canAddPendingTx: tx ${txHashStr} already in pool`);
281
325
  return 'ignored';
282
326
  }
283
327
  // Build metadata and check pre-add rules
284
328
  const meta = await buildTxMetaData(tx);
285
329
  const poolAccess = this.#createPreAddPoolAccess();
286
330
  const preAddResult = await this.#evictionManager.runPreAddRules(meta, poolAccess);
287
- return preAddResult.shouldIgnore ? 'ignored' : 'accepted';
331
+ if (preAddResult.shouldIgnore) {
332
+ this.#log.verbose(`canAddPendingTx: tx ${txHashStr} ignored by pre-add rule`, {
333
+ reason: preAddResult.reason?.message ?? 'no reason provided'
334
+ });
335
+ return 'ignored';
336
+ }
337
+ return 'accepted';
288
338
  }
289
339
  async addProtectedTxs(txs, block, opts) {
290
340
  const slotNumber = block.globalVariables.slotNumber;
341
+ // Precompute setup-call allow-list flags outside the store transaction
342
+ const allowedFlags = await Promise.all(txs.map((tx)=>this.#checkAllowedSetupCalls(tx)));
291
343
  await this.#store.transactionAsync(async ()=>{
292
- for (const tx of txs){
344
+ for(let i = 0; i < txs.length; i++){
345
+ const tx = txs[i];
293
346
  const txHash = tx.getTxHash();
294
347
  const txHashStr = txHash.toString();
295
348
  const isNew = !this.#indices.has(txHashStr);
296
349
  const minedBlockId = await this.#getMinedBlockId(txHash);
297
350
  if (isNew) {
351
+ const meta = await buildTxMetaData(tx, allowedFlags[i]);
298
352
  // New tx - add as mined or protected (callback emitted by #addTx)
299
353
  if (minedBlockId) {
300
354
  await this.#addTx(tx, {
301
355
  mined: minedBlockId
302
- }, opts);
356
+ }, opts, meta);
303
357
  this.#indices.setProtection(txHashStr, slotNumber);
304
358
  } else {
305
359
  await this.#addTx(tx, {
306
360
  protected: slotNumber
307
- }, opts);
361
+ }, opts, meta);
308
362
  }
309
363
  } else {
310
364
  // Existing tx - update protection and mined status
@@ -506,25 +560,28 @@ import { TxPoolIndices } from './tx_pool_indices.js';
506
560
  const blockNumber = block.globalVariables.blockNumber;
507
561
  // Step 1: Find mined txs at or before finalized block
508
562
  const minedTxsToFinalize = this.#indices.findTxsMinedAtOrBefore(blockNumber);
509
- await this.#store.transactionAsync(async ()=>{
510
- // Step 2: Collect mined txs for archiving (before deletion)
511
- const txsToArchive = [];
512
- if (this.#archive.isEnabled()) {
513
- for (const txHashStr of minedTxsToFinalize){
563
+ // Step 2: Archive in chunks if archiving is enabled. Hydrating an entire epoch's worth of
564
+ // mined txs at once would OOM under load. When archiving is disabled there is no need to hydrate the txs at all.
565
+ if (this.#archive.isEnabled()) {
566
+ for(let i = 0; i < minedTxsToFinalize.length; i += FINALIZE_BLOCK_CHUNK_SIZE){
567
+ const chunk = minedTxsToFinalize.slice(i, i + FINALIZE_BLOCK_CHUNK_SIZE);
568
+ const txsToArchive = [];
569
+ for (const txHashStr of chunk){
514
570
  const buffer = await this.#txsDB.getAsync(txHashStr);
515
571
  if (buffer) {
516
572
  txsToArchive.push(Tx.fromBuffer(buffer));
517
573
  }
518
574
  }
575
+ if (txsToArchive.length > 0) {
576
+ await this.#archive.archiveTxs(txsToArchive);
577
+ }
519
578
  }
520
- // Step 3: Delete mined txs from active pool
579
+ }
580
+ // Step 3: Delete mined txs from the active pool and finalize soft-deleted txs in one
581
+ // transaction. Only tx hashes are touched here, so memory is bounded and atomicity is preserved.
582
+ await this.#store.transactionAsync(async ()=>{
521
583
  await this.#deleteTxsBatch(minedTxsToFinalize);
522
- // Step 4: Finalize soft-deleted txs
523
584
  await this.#deletedPool.finalizeBlock(blockNumber);
524
- // Step 5: Archive mined txs
525
- if (txsToArchive.length > 0) {
526
- await this.#archive.archiveTxs(txsToArchive);
527
- }
528
585
  });
529
586
  if (minedTxsToFinalize.length > 0) {
530
587
  this.#log.info(`Finalized ${minedTxsToFinalize.length} mined txs from blocks up to ${blockNumber}`, {
@@ -696,18 +753,10 @@ import { TxPoolIndices } from './tx_pool_indices.js';
696
753
  txHash: txHashStr,
697
754
  reason
698
755
  });
699
- this.#addToEvictedCache(txHashStr);
756
+ this.#evictedTxHashes.add(txHashStr);
700
757
  }
701
758
  await this.#deleteTxsBatch(txHashes);
702
759
  }
703
- /** Adds a tx hash to the bounded evicted cache, evicting the oldest entry if at capacity. */ #addToEvictedCache(txHashStr) {
704
- if (this.#evictedTxHashes.size >= this.#config.evictedTxCacheSize) {
705
- // FIFO eviction: remove the first (oldest) entry
706
- const oldest = this.#evictedTxHashes.values().next().value;
707
- this.#evictedTxHashes.delete(oldest);
708
- }
709
- this.#evictedTxHashes.add(txHashStr);
710
- }
711
760
  // ============================================================================
712
761
  // PRIVATE HELPERS - Validation & Conflict Resolution
713
762
  // ============================================================================
@@ -788,50 +837,6 @@ import { TxPoolIndices } from './tx_pool_indices.js';
788
837
  hash: txEffect.l2BlockHash.toString()
789
838
  };
790
839
  }
791
- /** Loads all transactions from the database, returning loaded txs and deserialization errors */ async #loadAllTxsFromDb() {
792
- const loaded = [];
793
- const errors = [];
794
- for await (const [txHashStr, buffer] of this.#txsDB.entriesAsync()){
795
- // Skip soft-deleted transactions - they stay in DB but not in indices
796
- if (this.#deletedPool.isSoftDeleted(txHashStr)) {
797
- continue;
798
- }
799
- try {
800
- const tx = Tx.fromBuffer(buffer);
801
- const meta = await buildTxMetaData(tx);
802
- loaded.push({
803
- tx,
804
- meta
805
- });
806
- } catch (err) {
807
- this.#log.warn(`Failed to deserialize tx ${txHashStr}, deleting`, {
808
- err
809
- });
810
- errors.push(txHashStr);
811
- }
812
- }
813
- return {
814
- loaded,
815
- errors
816
- };
817
- }
818
- /** Queries block source and marks mined status on transaction metadata */ async #markMinedStatusBatch(metas) {
819
- for (const meta of metas){
820
- try {
821
- const txEffect = await this.#l2BlockSource.getTxEffect(TxHash.fromString(meta.txHash));
822
- if (txEffect) {
823
- meta.minedL2BlockId = {
824
- number: txEffect.l2BlockNumber,
825
- hash: txEffect.l2BlockHash.toString()
826
- };
827
- }
828
- } catch (err) {
829
- this.#log.warn(`Failed to check mined status for tx ${meta.txHash}`, {
830
- err
831
- });
832
- }
833
- }
834
- }
835
840
  /**
836
841
  * Rebuilds the pending pool by processing each tx through pre-add rules.
837
842
  * Starts with an empty pending pool and adds txs one by one, resolving conflicts.
@@ -1,10 +1,16 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
2
  import { type Logger } from '@aztec/foundation/log';
3
- import { type CheckpointAttestation, type P2PValidator, type ValidationResult } from '@aztec/stdlib/p2p';
3
+ import { type CheckpointAttestation, type CoordinationSignatureContext, type P2PValidator, type ValidationResult } from '@aztec/stdlib/p2p';
4
4
  export declare class CheckpointAttestationValidator implements P2PValidator<CheckpointAttestation> {
5
5
  protected epochCache: EpochCacheInterface;
6
6
  protected logger: Logger;
7
- constructor(epochCache: EpochCacheInterface);
7
+ private readonly pipeliningWindow;
8
+ protected readonly signatureContext: CoordinationSignatureContext;
9
+ constructor(epochCache: EpochCacheInterface, opts: {
10
+ l1PublishingTime?: number;
11
+ p2pPropagationTime?: number;
12
+ signatureContext: CoordinationSignatureContext;
13
+ });
8
14
  validate(message: CheckpointAttestation): Promise<ValidationResult>;
9
15
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0YXRpb25fdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvYXR0ZXN0YXRpb25fdmFsaWRhdG9yL2F0dGVzdGF0aW9uX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsS0FBSyxxQkFBcUIsRUFDMUIsS0FBSyxZQUFZLEVBRWpCLEtBQUssZ0JBQWdCLEVBQ3RCLE1BQU0sbUJBQW1CLENBQUM7QUFJM0IscUJBQWEsOEJBQStCLFlBQVcsWUFBWSxDQUFDLHFCQUFxQixDQUFDO0lBQ3hGLFNBQVMsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7SUFDMUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFFekIsWUFBWSxVQUFVLEVBQUUsbUJBQW1CLEVBRzFDO0lBRUssUUFBUSxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0E2RHhFO0NBQ0YifQ==
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0YXRpb25fdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvYXR0ZXN0YXRpb25fdmFsaWRhdG9yL2F0dGVzdGF0aW9uX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsS0FBSyxxQkFBcUIsRUFDMUIsS0FBSyw0QkFBNEIsRUFDakMsS0FBSyxZQUFZLEVBRWpCLEtBQUssZ0JBQWdCLEVBRXRCLE1BQU0sbUJBQW1CLENBQUM7QUFJM0IscUJBQWEsOEJBQStCLFlBQVcsWUFBWSxDQUFDLHFCQUFxQixDQUFDO0lBQ3hGLFNBQVMsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7SUFDMUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDekIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBbUI7SUFDcEQsU0FBUyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsRUFBRSw0QkFBNEIsQ0FBQztJQUVsRSxZQUNFLFVBQVUsRUFBRSxtQkFBbUIsRUFDL0IsSUFBSSxFQUFFO1FBQ0osZ0JBQWdCLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDMUIsa0JBQWtCLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDNUIsZ0JBQWdCLEVBQUUsNEJBQTRCLENBQUM7S0FDaEQsRUFTRjtJQUVLLFFBQVEsQ0FBQyxPQUFPLEVBQUUscUJBQXFCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBNkV4RTtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"attestation_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/attestation_validator/attestation_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EAEjB,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAI3B,qBAAa,8BAA+B,YAAW,YAAY,CAAC,qBAAqB,CAAC;IACxF,SAAS,CAAC,UAAU,EAAE,mBAAmB,CAAC;IAC1C,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IAEzB,YAAY,UAAU,EAAE,mBAAmB,EAG1C;IAEK,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6DxE;CACF"}
1
+ {"version":3,"file":"attestation_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/attestation_validator/attestation_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,4BAA4B,EACjC,KAAK,YAAY,EAEjB,KAAK,gBAAgB,EAEtB,MAAM,mBAAmB,CAAC;AAI3B,qBAAa,8BAA+B,YAAW,YAAY,CAAC,qBAAqB,CAAC;IACxF,SAAS,CAAC,UAAU,EAAE,mBAAmB,CAAC;IAC1C,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,4BAA4B,CAAC;IAElE,YACE,UAAU,EAAE,mBAAmB,EAC/B,IAAI,EAAE;QACJ,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,gBAAgB,EAAE,4BAA4B,CAAC;KAChD,EASF;IAEK,QAAQ,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6ExE;CACF"}
@@ -1,31 +1,56 @@
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 { PeerErrorSeverity, hasValidSignatureContext } from '@aztec/stdlib/p2p';
4
+ import { PipeliningWindow, isWithinClockTolerance } from '../clock_tolerance.js';
5
5
  export class CheckpointAttestationValidator {
6
6
  epochCache;
7
7
  logger;
8
- constructor(epochCache){
8
+ pipeliningWindow;
9
+ signatureContext;
10
+ constructor(epochCache, opts){
9
11
  this.epochCache = epochCache;
12
+ this.pipeliningWindow = new PipeliningWindow(epochCache, {
13
+ l1PublishingTime: opts.l1PublishingTime,
14
+ p2pPropagationTime: opts.p2pPropagationTime
15
+ });
16
+ this.signatureContext = opts.signatureContext;
10
17
  this.logger = createLogger('p2p:checkpoint-attestation-validator');
11
18
  }
12
19
  async validate(message) {
13
20
  const slotNumber = message.payload.header.slotNumber;
14
21
  try {
15
- const { currentSlot, nextSlot } = this.epochCache.getCurrentAndNextSlot();
16
- if (slotNumber !== currentSlot && slotNumber !== nextSlot) {
17
- // Check if message is for previous slot and within clock tolerance
18
- if (!isWithinClockTolerance(slotNumber, currentSlot, this.epochCache)) {
19
- this.logger.warn(`Checkpoint attestation slot ${slotNumber} is not current (${currentSlot}) or next (${nextSlot}) slot`);
22
+ // Cross-chain replay check: reject attestations that carry a foreign signing domain.
23
+ if (!hasValidSignatureContext(message.payload, this.signatureContext)) {
24
+ this.logger.warn(`Rejecting checkpoint attestation with foreign signature context for slot ${slotNumber}`, {
25
+ chainId: message.payload.signatureContext.chainId,
26
+ rollupAddress: message.payload.signatureContext.rollupAddress.toString(),
27
+ expectedChainId: this.signatureContext.chainId,
28
+ expectedRollupAddress: this.signatureContext.rollupAddress.toString()
29
+ });
30
+ return {
31
+ result: 'reject',
32
+ severity: PeerErrorSeverity.LowToleranceError
33
+ };
34
+ }
35
+ // Use target slots since proposals target pipeline slots (slot + 1 when pipelining).
36
+ const { targetSlot, nextSlot } = this.epochCache.getTargetAndNextSlot();
37
+ if (slotNumber !== targetSlot && slotNumber !== nextSlot) {
38
+ // When pipelining, accept attestations for the current slot (built in the previous slot)
39
+ // until the target slot reaches its L1 publish cutoff.
40
+ if (this.pipeliningWindow.acceptsAttestation(slotNumber)) {
41
+ // Fall through to remaining validation (signature, committee, etc.)
42
+ } else if (!isWithinClockTolerance(slotNumber, targetSlot, this.epochCache)) {
43
+ this.logger.warn(`Checkpoint attestation slot ${slotNumber} is not current (${targetSlot}) or next (${nextSlot}) slot`);
20
44
  return {
21
45
  result: 'reject',
22
46
  severity: PeerErrorSeverity.HighToleranceError
23
47
  };
48
+ } else {
49
+ this.logger.debug(`Ignoring checkpoint attestation for previous slot ${slotNumber} within clock tolerance`);
50
+ return {
51
+ result: 'ignore'
52
+ };
24
53
  }
25
- this.logger.debug(`Ignoring checkpoint attestation for previous slot ${slotNumber} within clock tolerance`);
26
- return {
27
- result: 'ignore'
28
- };
29
54
  }
30
55
  // Verify the signature is valid
31
56
  const attester = message.getSender();
@@ -1,5 +1,5 @@
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
3
  import { type TelemetryClient } from '@aztec/telemetry-client';
4
4
  import type { AttestationPoolApi } from '../../mem_pools/attestation_pool/attestation_pool.js';
5
5
  import { CheckpointAttestationValidator } from './attestation_validator.js';
@@ -14,7 +14,11 @@ 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: AttestationPoolApi, telemetryClient: TelemetryClient);
17
+ constructor(epochCache: EpochCacheInterface, attestationPool: AttestationPoolApi, telemetryClient: TelemetryClient, opts: {
18
+ l1PublishingTime?: number;
19
+ p2pPropagationTime?: number;
20
+ signatureContext: CoordinationSignatureContext;
21
+ });
18
22
  validate(message: CheckpointAttestation): Promise<ValidationResult>;
19
23
  }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlzaGVybWFuX2F0dGVzdGF0aW9uX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL2F0dGVzdGF0aW9uX3ZhbGlkYXRvci9maXNoZXJtYW5fYXR0ZXN0YXRpb25fdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLEtBQUsscUJBQXFCLEVBQXFCLEtBQUssZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RyxPQUFPLEVBQXVCLEtBQUssZUFBZSxFQUFrQyxNQUFNLHlCQUF5QixDQUFDO0FBRXBILE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDL0YsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFNUU7Ozs7Ozs7R0FPRztBQUNILHFCQUFhLDZCQUE4QixTQUFRLDhCQUE4QjtJQUs3RSxPQUFPLENBQUMsZUFBZTtJQUp6QixPQUFPLENBQUMseUJBQXlCLENBQUM7SUFFbEMsWUFDRSxVQUFVLEVBQUUsbUJBQW1CLEVBQ3ZCLGVBQWUsRUFBRSxrQkFBa0IsRUFDM0MsZUFBZSxFQUFFLGVBQWUsRUFhakM7SUFFYyxRQUFRLENBQUMsT0FBTyxFQUFFLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQXdEakY7Q0FDRiJ9
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlzaGVybWFuX2F0dGVzdGF0aW9uX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL2F0dGVzdGF0aW9uX3ZhbGlkYXRvci9maXNoZXJtYW5fYXR0ZXN0YXRpb25fdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUNMLEtBQUsscUJBQXFCLEVBQzFCLEtBQUssNEJBQTRCLEVBRWpDLEtBQUssZ0JBQWdCLEVBQ3RCLE1BQU0sbUJBQW1CLENBQUM7QUFDM0IsT0FBTyxFQUF1QixLQUFLLGVBQWUsRUFBa0MsTUFBTSx5QkFBeUIsQ0FBQztBQUVwSCxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNEQUFzRCxDQUFDO0FBQy9GLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRTVFOzs7Ozs7O0dBT0c7QUFDSCxxQkFBYSw2QkFBOEIsU0FBUSw4QkFBOEI7SUFLN0UsT0FBTyxDQUFDLGVBQWU7SUFKekIsT0FBTyxDQUFDLHlCQUF5QixDQUFDO0lBRWxDLFlBQ0UsVUFBVSxFQUFFLG1CQUFtQixFQUN2QixlQUFlLEVBQUUsa0JBQWtCLEVBQzNDLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLElBQUksRUFBRTtRQUNKLGdCQUFnQixDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQzFCLGtCQUFrQixDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQzVCLGdCQUFnQixFQUFFLDRCQUE0QixDQUFDO0tBQ2hELEVBYUY7SUFFYyxRQUFRLENBQUMsT0FBTyxFQUFFLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQXFEakY7Q0FDRiJ9
@@ -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,EAAuB,KAAK,eAAe,EAAkC,MAAM,yBAAyB,CAAC;AAEpH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sDAAsD,CAAC;AAC/F,OAAO,EAAE,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AAE5E;;;;;;;GAOG;AACH,qBAAa,6BAA8B,SAAQ,8BAA8B;IAK7E,OAAO,CAAC,eAAe;IAJzB,OAAO,CAAC,yBAAyB,CAAC;IAElC,YACE,UAAU,EAAE,mBAAmB,EACvB,eAAe,EAAE,kBAAkB,EAC3C,eAAe,EAAE,eAAe,EAChC,IAAI,EAAE;QACJ,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,gBAAgB,EAAE,4BAA4B,CAAC;KAChD,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, attestationPool, telemetryClient, opts){
15
+ super(epochCache, opts), this.attestationPool = attestationPool;
16
16
  this.logger = this.logger.createChild('[FISHERMAN]');
17
17
  const meter = telemetryClient.getMeter('FishermanAttestationValidator');
18
18
  this.invalidAttestationCounter = createUpDownCounterWithDefault(meter, Metrics.VALIDATOR_INVALID_ATTESTATION_RECEIVED_COUNT, {
@@ -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'
@@ -18,4 +18,15 @@ export declare const MAXIMUM_GOSSIP_CLOCK_DISPARITY_MS = 500;
18
18
  * @returns true if the message is for the previous slot AND we're within the clock tolerance window
19
19
  */
20
20
  export declare function isWithinClockTolerance(messageSlot: SlotNumber, currentSlot: SlotNumber, epochCache: EpochCacheInterface): boolean;
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvY2tfdG9sZXJhbmNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvY2xvY2tfdG9sZXJhbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTdEOzs7Ozs7O0dBT0c7QUFDSCxlQUFPLE1BQU0saUNBQWlDLE1BQU0sQ0FBQztBQUVyRDs7Ozs7OztHQU9HO0FBQ0gsd0JBQWdCLHNCQUFzQixDQUNwQyxXQUFXLEVBQUUsVUFBVSxFQUN2QixXQUFXLEVBQUUsVUFBVSxFQUN2QixVQUFVLEVBQUUsbUJBQW1CLEdBQzlCLE9BQU8sQ0F5QlQifQ==
21
+ export declare class PipeliningWindow {
22
+ private readonly epochCache;
23
+ private readonly proposalWindowIntoTargetSlot;
24
+ private readonly attestationWindowIntoTargetSlot;
25
+ constructor(epochCache: EpochCacheInterface, opts?: {
26
+ p2pPropagationTime?: number;
27
+ l1PublishingTime?: number;
28
+ });
29
+ acceptsProposal(messageSlot: SlotNumber): boolean;
30
+ acceptsAttestation(messageSlot: SlotNumber): boolean;
31
+ }
32
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvY2tfdG9sZXJhbmNlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvY2xvY2tfdG9sZXJhbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRzdEOzs7Ozs7O0dBT0c7QUFDSCxlQUFPLE1BQU0saUNBQWlDLE1BQU0sQ0FBQztBQUVyRDs7Ozs7OztHQU9HO0FBQ0gsd0JBQWdCLHNCQUFzQixDQUNwQyxXQUFXLEVBQUUsVUFBVSxFQUN2QixXQUFXLEVBQUUsVUFBVSxFQUN2QixVQUFVLEVBQUUsbUJBQW1CLEdBQzlCLE9BQU8sQ0EwQlQ7QUE0Q0QscUJBQWEsZ0JBQWdCO0lBS3pCLE9BQU8sQ0FBQyxRQUFRLENBQUMsVUFBVTtJQUo3QixPQUFPLENBQUMsUUFBUSxDQUFDLDRCQUE0QixDQUFTO0lBQ3RELE9BQU8sQ0FBQyxRQUFRLENBQUMsK0JBQStCLENBQVM7SUFFekQsWUFDbUIsVUFBVSxFQUFFLG1CQUFtQixFQUNoRCxJQUFJLEdBQUU7UUFDSixrQkFBa0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUM1QixnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQztLQUN0QixFQVlQO0lBRU0sZUFBZSxDQUFDLFdBQVcsRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUV2RDtJQUVNLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUUxRDtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"clock_tolerance.d.ts","sourceRoot":"","sources":["../../src/msg_validators/clock_tolerance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE7D;;;;;;;GAOG;AACH,eAAO,MAAM,iCAAiC,MAAM,CAAC;AAErD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,UAAU,EACvB,WAAW,EAAE,UAAU,EACvB,UAAU,EAAE,mBAAmB,GAC9B,OAAO,CAyBT"}
1
+ {"version":3,"file":"clock_tolerance.d.ts","sourceRoot":"","sources":["../../src/msg_validators/clock_tolerance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAG7D;;;;;;;GAOG;AACH,eAAO,MAAM,iCAAiC,MAAM,CAAC;AAErD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,UAAU,EACvB,WAAW,EAAE,UAAU,EACvB,UAAU,EAAE,mBAAmB,GAC9B,OAAO,CA0BT;AA4CD,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAJ7B,OAAO,CAAC,QAAQ,CAAC,4BAA4B,CAAS;IACtD,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAS;IAEzD,YACmB,UAAU,EAAE,mBAAmB,EAChD,IAAI,GAAE;QACJ,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;KACtB,EAYP;IAEM,eAAe,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAEvD;IAEM,kBAAkB,CAAC,WAAW,EAAE,UAAU,GAAG,OAAO,CAE1D;CACF"}
@@ -1,4 +1,5 @@
1
1
  import { SlotNumber } from '@aztec/foundation/branded-types';
2
+ import { DEFAULT_P2P_PROPAGATION_TIME, createPipelinedCheckpointTimingModel } from '@aztec/stdlib/timetable';
2
3
  /**
3
4
  * Maximum clock disparity tolerance for P2P message validation (in milliseconds).
4
5
  * Messages for the previous slot are accepted if we're within this many milliseconds
@@ -25,9 +26,10 @@ import { SlotNumber } from '@aztec/foundation/branded-types';
25
26
  return false;
26
27
  }
27
28
  // Check how far we are into the current slot (in milliseconds)
28
- const { ts: slotStartTs, nowMs, slot } = epochCache.getEpochAndSlotNow();
29
- // Sanity check: ensure the epoch cache's current slot matches the expected current slot
30
- if (slot !== currentSlot) {
29
+ const { ts: slotStartTs, nowMs } = epochCache.getEpochAndSlotNow();
30
+ const targetSlot = epochCache.getTargetSlot();
31
+ // Sanity check: ensure the epoch cache's target slot matches the expected current slot
32
+ if (targetSlot !== currentSlot) {
31
33
  return false;
32
34
  }
33
35
  // ts is in seconds, convert to ms; nowMs is already in milliseconds
@@ -35,3 +37,59 @@ import { SlotNumber } from '@aztec/foundation/branded-types';
35
37
  const elapsedMs = Number(nowMs - slotStartMs);
36
38
  return elapsedMs < MAXIMUM_GOSSIP_CLOCK_DISPARITY_MS;
37
39
  }
40
+ /**
41
+ * Checks if a straggler message for the previous target slot should be accepted.
42
+ *
43
+ * Under pipelining, proposals and attestations carry the target slot N. Most of the
44
+ * time the receiver is either still in the build slot N-1 (accepted via the main
45
+ * `slotNumber === targetSlot` match) or in the target slot N (accepted via
46
+ * `slotNumber === nextSlot` when pipelining is disabled, or again via `targetSlot`
47
+ * when the receiver itself is pipelining). Stragglers that arrive after the receiver
48
+ * has rolled past the target slot fall to this check: accept `messageSlot === slotNow`
49
+ * while we're still within the first `windowSeconds + clock-disparity` of the slot.
50
+ *
51
+ * Under the early-pipelining schedule `windowSeconds` is small (0 for proposals,
52
+ * `2*p2pPropagationTime` for attestations) since the proposer collects everything
53
+ * before the slot boundary.
54
+ *
55
+ * @param messageSlot - The slot number from the received message
56
+ * @param epochCache - EpochCache to get timing and pipelining state
57
+ * @param windowSeconds - How far into the current slot we still accept previous-target messages
58
+ * @returns true if pipelining is enabled, the message is for the current wallclock slot, and we're within the grace period
59
+ */ function isWithinPipeliningWindow(messageSlot, epochCache, windowSeconds) {
60
+ if (!epochCache.isProposerPipeliningEnabled()) {
61
+ return false;
62
+ }
63
+ const currentSlot = epochCache.getSlotNow();
64
+ if (messageSlot !== currentSlot) {
65
+ return false;
66
+ }
67
+ const { ts: slotStartTs, nowMs } = epochCache.getEpochAndSlotNow();
68
+ const slotStartMs = slotStartTs * 1000n;
69
+ const elapsedMs = Number(nowMs - slotStartMs);
70
+ const windowMs = windowSeconds * 1000 + MAXIMUM_GOSSIP_CLOCK_DISPARITY_MS;
71
+ return elapsedMs < windowMs;
72
+ }
73
+ export class PipeliningWindow {
74
+ epochCache;
75
+ proposalWindowIntoTargetSlot;
76
+ attestationWindowIntoTargetSlot;
77
+ constructor(epochCache, opts = {}){
78
+ this.epochCache = epochCache;
79
+ const l1Constants = epochCache.getL1Constants();
80
+ const checkpointTiming = createPipelinedCheckpointTimingModel({
81
+ aztecSlotDuration: l1Constants.slotDuration,
82
+ ethereumSlotDuration: l1Constants.ethereumSlotDuration,
83
+ l1PublishingTime: opts.l1PublishingTime ?? l1Constants.ethereumSlotDuration,
84
+ p2pPropagationTime: opts.p2pPropagationTime ?? DEFAULT_P2P_PROPAGATION_TIME
85
+ });
86
+ this.proposalWindowIntoTargetSlot = checkpointTiming.proposalWindowIntoTargetSlot;
87
+ this.attestationWindowIntoTargetSlot = checkpointTiming.attestationWindowIntoTargetSlot;
88
+ }
89
+ acceptsProposal(messageSlot) {
90
+ return isWithinPipeliningWindow(messageSlot, this.epochCache, this.proposalWindowIntoTargetSlot);
91
+ }
92
+ acceptsAttestation(messageSlot) {
93
+ return isWithinPipeliningWindow(messageSlot, this.epochCache, this.attestationWindowIntoTargetSlot);
94
+ }
95
+ }
@@ -1,11 +1,15 @@
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
3
  export declare class BlockProposalValidator implements P2PValidator<BlockProposal> {
4
4
  private proposalValidator;
5
5
  constructor(epochCache: EpochCacheInterface, opts: {
6
6
  txsPermitted: boolean;
7
7
  maxTxsPerBlock?: number;
8
+ maxBlocksPerCheckpoint?: number;
9
+ p2pPropagationTime?: number;
10
+ skipSlotValidation?: boolean;
11
+ signatureContext: CoordinationSignatureContext;
8
12
  });
9
13
  validate(proposal: BlockProposal): Promise<ValidationResult>;
10
14
  }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL2Jsb2NrX3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl2RixxQkFBYSxzQkFBdUIsWUFBVyxZQUFZLENBQUMsYUFBYSxDQUFDO0lBQ3hFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBb0I7SUFFN0MsWUFBWSxVQUFVLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFO1FBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQztRQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEVBRXBHO0lBRUssUUFBUSxDQUFDLFFBQVEsRUFBRSxhQUFhLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBTWpFO0NBQ0YifQ==
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL2Jsb2NrX3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSw0QkFBNEIsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUlySCxxQkFBYSxzQkFBdUIsWUFBVyxZQUFZLENBQUMsYUFBYSxDQUFDO0lBQ3hFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBb0I7SUFFN0MsWUFDRSxVQUFVLEVBQUUsbUJBQW1CLEVBQy9CLElBQUksRUFBRTtRQUNKLFlBQVksRUFBRSxPQUFPLENBQUM7UUFDdEIsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQ3hCLHNCQUFzQixDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQ2hDLGtCQUFrQixDQUFDLEVBQUUsTUFBTSxDQUFDO1FBQzVCLGtCQUFrQixDQUFDLEVBQUUsT0FBTyxDQUFDO1FBQzdCLGdCQUFnQixFQUFFLDRCQUE0QixDQUFDO0tBQ2hELEVBR0Y7SUFFSyxRQUFRLENBQUMsUUFBUSxFQUFFLGFBQWEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FNakU7Q0FDRiJ9
@@ -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;AAIrH,qBAAa,sBAAuB,YAAW,YAAY,CAAC,aAAa,CAAC;IACxE,OAAO,CAAC,iBAAiB,CAAoB;IAE7C,YACE,UAAU,EAAE,mBAAmB,EAC/B,IAAI,EAAE;QACJ,YAAY,EAAE,OAAO,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,gBAAgB,EAAE,4BAA4B,CAAC;KAChD,EAGF;IAEK,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAMjE;CACF"}
@@ -1,11 +1,15 @@
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
3
  export declare class CheckpointProposalValidator implements P2PValidator<CheckpointProposal> {
4
4
  private proposalValidator;
5
5
  constructor(epochCache: EpochCacheInterface, opts: {
6
6
  txsPermitted: boolean;
7
7
  maxTxsPerBlock?: number;
8
+ maxBlocksPerCheckpoint?: number;
9
+ p2pPropagationTime?: number;
10
+ skipSlotValidation?: boolean;
11
+ signatureContext: CoordinationSignatureContext;
8
12
  });
9
13
  validate(proposal: CheckpointProposal): Promise<ValidationResult>;
10
14
  }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9wcm9wb3NhbF92YWxpZGF0b3IvY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUk1RixxQkFBYSwyQkFBNEIsWUFBVyxZQUFZLENBQUMsa0JBQWtCLENBQUM7SUFDbEYsT0FBTyxDQUFDLGlCQUFpQixDQUFvQjtJQUU3QyxZQUFZLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUU7UUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDO1FBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQUUsRUFFcEc7SUFFSyxRQUFRLENBQUMsUUFBUSxFQUFFLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQVl0RTtDQUNGIn0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9wcm9wb3NhbF92YWxpZGF0b3IvY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFDVixrQkFBa0IsRUFDbEIsNEJBQTRCLEVBQzVCLFlBQVksRUFDWixnQkFBZ0IsRUFDakIsTUFBTSxtQkFBbUIsQ0FBQztBQUkzQixxQkFBYSwyQkFBNEIsWUFBVyxZQUFZLENBQUMsa0JBQWtCLENBQUM7SUFDbEYsT0FBTyxDQUFDLGlCQUFpQixDQUFvQjtJQUU3QyxZQUNFLFVBQVUsRUFBRSxtQkFBbUIsRUFDL0IsSUFBSSxFQUFFO1FBQ0osWUFBWSxFQUFFLE9BQU8sQ0FBQztRQUN0QixjQUFjLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDeEIsc0JBQXNCLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDaEMsa0JBQWtCLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDNUIsa0JBQWtCLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDN0IsZ0JBQWdCLEVBQUUsNEJBQTRCLENBQUM7S0FDaEQsRUFHRjtJQUVLLFFBQVEsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBWXRFO0NBQ0YifQ==
@@ -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;AAI3B,qBAAa,2BAA4B,YAAW,YAAY,CAAC,kBAAkB,CAAC;IAClF,OAAO,CAAC,iBAAiB,CAAoB;IAE7C,YACE,UAAU,EAAE,mBAAmB,EAC/B,IAAI,EAAE;QACJ,YAAY,EAAE,OAAO,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,gBAAgB,EAAE,4BAA4B,CAAC;KAChD,EAGF;IAEK,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAYtE;CACF"}