@aztec/p2p 0.0.1-commit.1bea0213 → 0.0.1-commit.1de2a32

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 (475) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +4 -3
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +4 -4
  4. package/dest/client/factory.d.ts +11 -11
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +46 -18
  7. package/dest/client/interface.d.ts +46 -33
  8. package/dest/client/interface.d.ts.map +1 -1
  9. package/dest/client/p2p_client.d.ts +41 -51
  10. package/dest/client/p2p_client.d.ts.map +1 -1
  11. package/dest/client/p2p_client.js +156 -224
  12. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  13. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  14. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +304 -0
  15. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  16. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  17. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  18. package/dest/config.d.ts +53 -16
  19. package/dest/config.d.ts.map +1 -1
  20. package/dest/config.js +87 -39
  21. package/dest/errors/tx-pool.error.d.ts +8 -0
  22. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  23. package/dest/errors/tx-pool.error.js +9 -0
  24. package/dest/index.d.ts +2 -1
  25. package/dest/index.d.ts.map +1 -1
  26. package/dest/index.js +1 -0
  27. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +104 -88
  28. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool.js +445 -3
  30. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  31. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  32. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +353 -87
  33. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  34. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  35. package/dest/mem_pools/attestation_pool/index.js +1 -2
  36. package/dest/mem_pools/attestation_pool/mocks.d.ts +2 -2
  37. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  38. package/dest/mem_pools/attestation_pool/mocks.js +2 -2
  39. package/dest/mem_pools/index.d.ts +3 -2
  40. package/dest/mem_pools/index.d.ts.map +1 -1
  41. package/dest/mem_pools/index.js +1 -1
  42. package/dest/mem_pools/instrumentation.d.ts +4 -2
  43. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  44. package/dest/mem_pools/instrumentation.js +18 -16
  45. package/dest/mem_pools/interface.d.ts +5 -5
  46. package/dest/mem_pools/interface.d.ts.map +1 -1
  47. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +3 -3
  48. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  49. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  50. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  51. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
  52. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  53. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
  54. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  55. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  56. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  57. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  58. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  59. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  60. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  61. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  62. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +93 -0
  63. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  64. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  65. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
  66. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +10 -0
  67. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  68. package/dest/mem_pools/tx_pool_v2/eviction/index.js +11 -0
  69. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  70. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  71. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  72. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  73. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  74. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +65 -0
  75. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  76. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  77. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
  78. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  82. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  83. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  84. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  85. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  86. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  87. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  88. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  89. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  90. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  91. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  92. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  93. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +213 -0
  94. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  95. package/dest/mem_pools/tx_pool_v2/interfaces.js +10 -0
  96. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +127 -0
  97. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  98. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +210 -0
  99. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  100. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  101. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  102. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
  103. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  104. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +337 -0
  105. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +60 -0
  106. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  107. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +164 -0
  108. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +78 -0
  109. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  110. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +909 -0
  111. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +3 -3
  112. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  113. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +7 -2
  114. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -4
  115. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  116. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  117. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -4
  118. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  119. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  120. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -8
  121. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  122. package/dest/msg_validators/proposal_validator/proposal_validator.js +52 -40
  123. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  124. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  125. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
  126. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  127. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  128. package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
  129. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  130. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  131. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  132. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  133. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  134. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  135. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
  136. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  137. package/dest/msg_validators/tx_validator/block_header_validator.js +5 -4
  138. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  139. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  140. package/dest/msg_validators/tx_validator/data_validator.js +4 -1
  141. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -4
  142. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  143. package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
  144. package/dest/msg_validators/tx_validator/factory.d.ts +118 -5
  145. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  146. package/dest/msg_validators/tx_validator/factory.js +228 -57
  147. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  148. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  149. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  150. package/dest/msg_validators/tx_validator/gas_validator.d.ts +59 -3
  151. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  152. package/dest/msg_validators/tx_validator/gas_validator.js +76 -38
  153. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  154. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  155. package/dest/msg_validators/tx_validator/index.js +2 -0
  156. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  157. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  158. package/dest/msg_validators/tx_validator/metadata_validator.js +6 -6
  159. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  160. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  161. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  162. package/dest/msg_validators/tx_validator/phases_validator.d.ts +4 -3
  163. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  164. package/dest/msg_validators/tx_validator/phases_validator.js +47 -26
  165. package/dest/msg_validators/tx_validator/size_validator.d.ts +3 -1
  166. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -1
  167. package/dest/msg_validators/tx_validator/size_validator.js +4 -1
  168. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +22 -5
  169. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  170. package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
  171. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  172. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  173. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  174. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  175. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  176. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  177. package/dest/services/data_store.d.ts +1 -1
  178. package/dest/services/data_store.d.ts.map +1 -1
  179. package/dest/services/data_store.js +10 -6
  180. package/dest/services/discv5/discV5_service.js +1 -1
  181. package/dest/services/dummy_service.d.ts +24 -4
  182. package/dest/services/dummy_service.d.ts.map +1 -1
  183. package/dest/services/dummy_service.js +46 -1
  184. package/dest/services/encoding.d.ts +3 -3
  185. package/dest/services/encoding.d.ts.map +1 -1
  186. package/dest/services/encoding.js +11 -10
  187. package/dest/services/gossipsub/index.d.ts +3 -0
  188. package/dest/services/gossipsub/index.d.ts.map +1 -0
  189. package/dest/services/gossipsub/index.js +2 -0
  190. package/dest/services/gossipsub/scoring.d.ts +21 -3
  191. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  192. package/dest/services/gossipsub/scoring.js +24 -7
  193. package/dest/services/gossipsub/topic_score_params.d.ts +173 -0
  194. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  195. package/dest/services/gossipsub/topic_score_params.js +346 -0
  196. package/dest/services/index.d.ts +2 -1
  197. package/dest/services/index.d.ts.map +1 -1
  198. package/dest/services/index.js +1 -0
  199. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  200. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  201. package/dest/services/libp2p/instrumentation.js +14 -3
  202. package/dest/services/libp2p/libp2p_service.d.ts +100 -42
  203. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  204. package/dest/services/libp2p/libp2p_service.js +466 -368
  205. package/dest/services/peer-manager/metrics.d.ts +4 -2
  206. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  207. package/dest/services/peer-manager/metrics.js +26 -5
  208. package/dest/services/peer-manager/peer_manager.d.ts +1 -1
  209. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  210. package/dest/services/peer-manager/peer_manager.js +2 -1
  211. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  212. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  213. package/dest/services/peer-manager/peer_scoring.js +33 -4
  214. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +48 -0
  215. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  216. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +539 -0
  217. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  218. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  219. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  220. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +46 -0
  221. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  222. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  223. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +34 -0
  224. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  225. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +130 -0
  226. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +60 -0
  227. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  228. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +173 -0
  229. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  230. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  231. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  232. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  233. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  234. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  235. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  236. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  237. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  238. package/dest/services/reqresp/interface.d.ts +12 -1
  239. package/dest/services/reqresp/interface.d.ts.map +1 -1
  240. package/dest/services/reqresp/interface.js +15 -1
  241. package/dest/services/reqresp/metrics.d.ts +6 -5
  242. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  243. package/dest/services/reqresp/metrics.js +17 -5
  244. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  245. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  246. package/dest/services/reqresp/protocols/block_txs/bitvector.js +5 -0
  247. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  248. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  249. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +27 -9
  250. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +29 -6
  251. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  252. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +59 -13
  253. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  254. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  255. package/dest/services/reqresp/protocols/tx.js +20 -0
  256. package/dest/services/reqresp/reqresp.d.ts +6 -1
  257. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  258. package/dest/services/reqresp/reqresp.js +71 -27
  259. package/dest/services/service.d.ts +42 -3
  260. package/dest/services/service.d.ts.map +1 -1
  261. package/dest/services/tx_collection/config.d.ts +22 -1
  262. package/dest/services/tx_collection/config.d.ts.map +1 -1
  263. package/dest/services/tx_collection/config.js +55 -1
  264. package/dest/services/tx_collection/fast_tx_collection.d.ts +7 -4
  265. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  266. package/dest/services/tx_collection/fast_tx_collection.js +71 -44
  267. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  268. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  269. package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
  270. package/dest/services/tx_collection/file_store_tx_source.d.ts +37 -0
  271. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  272. package/dest/services/tx_collection/file_store_tx_source.js +90 -0
  273. package/dest/services/tx_collection/index.d.ts +3 -1
  274. package/dest/services/tx_collection/index.d.ts.map +1 -1
  275. package/dest/services/tx_collection/index.js +2 -0
  276. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  277. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  278. package/dest/services/tx_collection/instrumentation.js +10 -2
  279. package/dest/services/tx_collection/missing_txs_tracker.d.ts +32 -0
  280. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +1 -0
  281. package/dest/services/tx_collection/missing_txs_tracker.js +27 -0
  282. package/dest/services/tx_collection/proposal_tx_collector.d.ts +49 -0
  283. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  284. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  285. package/dest/services/tx_collection/slow_tx_collection.d.ts +7 -3
  286. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  287. package/dest/services/tx_collection/slow_tx_collection.js +60 -26
  288. package/dest/services/tx_collection/tx_collection.d.ts +25 -12
  289. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  290. package/dest/services/tx_collection/tx_collection.js +79 -7
  291. package/dest/services/tx_collection/tx_collection_sink.d.ts +18 -8
  292. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  293. package/dest/services/tx_collection/tx_collection_sink.js +26 -29
  294. package/dest/services/tx_collection/tx_source.d.ts +8 -3
  295. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  296. package/dest/services/tx_collection/tx_source.js +19 -2
  297. package/dest/services/tx_file_store/config.d.ts +16 -0
  298. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  299. package/dest/services/tx_file_store/config.js +22 -0
  300. package/dest/services/tx_file_store/index.d.ts +4 -0
  301. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  302. package/dest/services/tx_file_store/index.js +3 -0
  303. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  304. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  305. package/dest/services/tx_file_store/instrumentation.js +29 -0
  306. package/dest/services/tx_file_store/tx_file_store.d.ts +48 -0
  307. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  308. package/dest/services/tx_file_store/tx_file_store.js +152 -0
  309. package/dest/services/tx_provider.d.ts +4 -4
  310. package/dest/services/tx_provider.d.ts.map +1 -1
  311. package/dest/services/tx_provider.js +9 -8
  312. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  313. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  314. package/dest/services/tx_provider_instrumentation.js +5 -5
  315. package/dest/test-helpers/index.d.ts +3 -1
  316. package/dest/test-helpers/index.d.ts.map +1 -1
  317. package/dest/test-helpers/index.js +2 -0
  318. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  319. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  320. package/dest/test-helpers/make-test-p2p-clients.js +1 -2
  321. package/dest/test-helpers/mock-pubsub.d.ts +30 -4
  322. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  323. package/dest/test-helpers/mock-pubsub.js +105 -4
  324. package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
  325. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  326. package/dest/test-helpers/reqresp-nodes.js +4 -3
  327. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  328. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  329. package/dest/test-helpers/test_tx_provider.js +41 -0
  330. package/dest/test-helpers/testbench-utils.d.ts +163 -0
  331. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  332. package/dest/test-helpers/testbench-utils.js +366 -0
  333. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  334. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  335. package/dest/testbench/p2p_client_testbench_worker.js +221 -139
  336. package/dest/testbench/worker_client_manager.d.ts +53 -6
  337. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  338. package/dest/testbench/worker_client_manager.js +231 -45
  339. package/dest/util.d.ts +3 -3
  340. package/dest/util.d.ts.map +1 -1
  341. package/package.json +14 -14
  342. package/src/bootstrap/bootstrap.ts +7 -4
  343. package/src/client/factory.ts +85 -37
  344. package/src/client/interface.ts +56 -34
  345. package/src/client/p2p_client.ts +192 -269
  346. package/src/client/test/tx_proposal_collector/README.md +227 -0
  347. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +345 -0
  348. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  349. package/src/config.ts +137 -44
  350. package/src/errors/tx-pool.error.ts +12 -0
  351. package/src/index.ts +1 -0
  352. package/src/mem_pools/attestation_pool/attestation_pool.ts +497 -91
  353. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +442 -102
  354. package/src/mem_pools/attestation_pool/index.ts +9 -2
  355. package/src/mem_pools/attestation_pool/mocks.ts +2 -1
  356. package/src/mem_pools/index.ts +4 -1
  357. package/src/mem_pools/instrumentation.ts +19 -14
  358. package/src/mem_pools/interface.ts +4 -4
  359. package/src/mem_pools/tx_pool/README.md +1 -1
  360. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +3 -3
  361. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  362. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  363. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
  364. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  365. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  366. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +121 -0
  367. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  368. package/src/mem_pools/tx_pool_v2/eviction/index.ts +27 -0
  369. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  370. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  371. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  372. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  373. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  374. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  375. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  376. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  377. package/src/mem_pools/tx_pool_v2/interfaces.ts +245 -0
  378. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +327 -0
  379. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  380. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +430 -0
  381. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +226 -0
  382. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1090 -0
  383. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +10 -4
  384. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +14 -4
  385. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +20 -7
  386. package/src/msg_validators/proposal_validator/proposal_validator.ts +67 -44
  387. package/src/msg_validators/tx_validator/README.md +115 -0
  388. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +5 -5
  389. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  390. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  391. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  392. package/src/msg_validators/tx_validator/block_header_validator.ts +22 -11
  393. package/src/msg_validators/tx_validator/data_validator.ts +6 -2
  394. package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
  395. package/src/msg_validators/tx_validator/factory.ts +372 -55
  396. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  397. package/src/msg_validators/tx_validator/gas_validator.ts +98 -29
  398. package/src/msg_validators/tx_validator/index.ts +2 -0
  399. package/src/msg_validators/tx_validator/metadata_validator.ts +18 -7
  400. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  401. package/src/msg_validators/tx_validator/phases_validator.ts +56 -29
  402. package/src/msg_validators/tx_validator/size_validator.ts +6 -2
  403. package/src/msg_validators/tx_validator/timestamp_validator.ts +29 -21
  404. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  405. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  406. package/src/services/data_store.ts +10 -7
  407. package/src/services/discv5/discV5_service.ts +1 -1
  408. package/src/services/dummy_service.ts +59 -2
  409. package/src/services/encoding.ts +9 -9
  410. package/src/services/gossipsub/README.md +641 -0
  411. package/src/services/gossipsub/index.ts +2 -0
  412. package/src/services/gossipsub/scoring.ts +29 -5
  413. package/src/services/gossipsub/topic_score_params.ts +487 -0
  414. package/src/services/index.ts +1 -0
  415. package/src/services/libp2p/instrumentation.ts +15 -2
  416. package/src/services/libp2p/libp2p_service.ts +511 -403
  417. package/src/services/peer-manager/metrics.ts +28 -4
  418. package/src/services/peer-manager/peer_manager.ts +2 -1
  419. package/src/services/peer-manager/peer_scoring.ts +29 -1
  420. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  421. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +678 -0
  422. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  423. package/src/services/reqresp/batch-tx-requester/interface.ts +53 -0
  424. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +161 -0
  425. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +244 -0
  426. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  427. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  428. package/src/services/reqresp/connection-sampler/connection_sampler.ts +16 -0
  429. package/src/services/reqresp/interface.ts +29 -1
  430. package/src/services/reqresp/metrics.ts +34 -9
  431. package/src/services/reqresp/protocols/block_txs/bitvector.ts +7 -0
  432. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +35 -12
  433. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +74 -9
  434. package/src/services/reqresp/protocols/tx.ts +22 -0
  435. package/src/services/reqresp/reqresp.ts +82 -23
  436. package/src/services/service.ts +55 -2
  437. package/src/services/tx_collection/config.ts +83 -1
  438. package/src/services/tx_collection/fast_tx_collection.ts +93 -47
  439. package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
  440. package/src/services/tx_collection/file_store_tx_source.ts +117 -0
  441. package/src/services/tx_collection/index.ts +6 -0
  442. package/src/services/tx_collection/instrumentation.ts +17 -2
  443. package/src/services/tx_collection/missing_txs_tracker.ts +52 -0
  444. package/src/services/tx_collection/proposal_tx_collector.ts +113 -0
  445. package/src/services/tx_collection/slow_tx_collection.ts +66 -33
  446. package/src/services/tx_collection/tx_collection.ts +117 -20
  447. package/src/services/tx_collection/tx_collection_sink.ts +30 -34
  448. package/src/services/tx_collection/tx_source.ts +22 -3
  449. package/src/services/tx_file_store/config.ts +37 -0
  450. package/src/services/tx_file_store/index.ts +3 -0
  451. package/src/services/tx_file_store/instrumentation.ts +36 -0
  452. package/src/services/tx_file_store/tx_file_store.ts +175 -0
  453. package/src/services/tx_provider.ts +10 -9
  454. package/src/services/tx_provider_instrumentation.ts +11 -5
  455. package/src/test-helpers/index.ts +2 -0
  456. package/src/test-helpers/make-test-p2p-clients.ts +4 -6
  457. package/src/test-helpers/mock-pubsub.ts +146 -9
  458. package/src/test-helpers/reqresp-nodes.ts +5 -7
  459. package/src/test-helpers/test_tx_provider.ts +64 -0
  460. package/src/test-helpers/testbench-utils.ts +430 -0
  461. package/src/testbench/p2p_client_testbench_worker.ts +335 -132
  462. package/src/testbench/worker_client_manager.ts +312 -47
  463. package/src/util.ts +8 -2
  464. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  465. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  466. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  467. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  468. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  469. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  470. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  471. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  472. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  473. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  474. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  475. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
@@ -1,11 +1,67 @@
1
+ import { type LoggerBindings } from '@aztec/foundation/log';
1
2
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
2
- import { GasFees } from '@aztec/stdlib/gas';
3
+ import { Gas, GasFees } from '@aztec/stdlib/gas';
3
4
  import type { PublicStateSource } from '@aztec/stdlib/trees';
4
5
  import { type Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
6
+ /** Structural interface for types that carry gas limit data, used by {@link GasLimitsValidator}. */
7
+ export interface HasGasLimitData {
8
+ txHash: {
9
+ toString(): string;
10
+ };
11
+ data: {
12
+ forPublic?: unknown;
13
+ constants: {
14
+ txContext: {
15
+ gasSettings: {
16
+ gasLimits: Gas;
17
+ };
18
+ };
19
+ };
20
+ };
21
+ }
22
+ /**
23
+ * Validates that a transaction's gas limits are within acceptable bounds.
24
+ *
25
+ * Rejects transactions whose gas limits fall below the fixed minimums (FIXED_DA_GAS,
26
+ * FIXED_L2_GAS) or exceed the AVM's maximum processable L2 gas. This is a cheap,
27
+ * stateless check that operates on gas settings alone.
28
+ *
29
+ * Generic over T so it can validate both full {@link Tx} objects and {@link TxMetaData}
30
+ * (used during pending pool migration).
31
+ *
32
+ * Used by: pending pool migration (via factory), and indirectly by {@link GasTxValidator}.
33
+ */
34
+ export declare class GasLimitsValidator<T extends HasGasLimitData> implements TxValidator<T> {
35
+ #private;
36
+ constructor(bindings?: LoggerBindings);
37
+ validateTx(tx: T): Promise<TxValidationResult>;
38
+ /** Checks gas limits are >= fixed minimums and <= AVM max processable L2 gas. */
39
+ validateGasLimit(tx: T): TxValidationResult;
40
+ }
41
+ /**
42
+ * Validates that a transaction can pay its gas fees.
43
+ *
44
+ * Runs three checks in order:
45
+ * 1. **Gas limits** (delegates to {@link GasLimitsValidator}) — rejects if limits are
46
+ * out of bounds.
47
+ * 2. **Max fee per gas** — skips (not rejects) the tx if its maxFeesPerGas is below
48
+ * the current block's gas fees. We skip rather than reject because the tx may
49
+ * become eligible in a later block with lower fees.
50
+ * 3. **Fee payer balance** — reads the fee payer's FeeJuice balance from public state,
51
+ * adds any pending claim from a setup-phase `_increase_public_balance` call, and
52
+ * rejects if the total is less than the tx's fee limit (gasLimits * maxFeePerGas).
53
+ *
54
+ * Used by: gossip (stage 1), RPC, and block building validators.
55
+ */
5
56
  export declare class GasTxValidator implements TxValidator<Tx> {
6
57
  #private;
7
- constructor(publicDataSource: PublicStateSource, feeJuiceAddress: AztecAddress, gasFees: GasFees);
58
+ private bindings?;
59
+ constructor(publicDataSource: PublicStateSource, feeJuiceAddress: AztecAddress, gasFees: GasFees, bindings?: LoggerBindings | undefined);
8
60
  validateTx(tx: Tx): Promise<TxValidationResult>;
61
+ /**
62
+ * Checks the fee payer has enough FeeJuice balance to cover the tx's fee limit.
63
+ * Accounts for any pending claim from a setup-phase `_increase_public_balance` call.
64
+ */
9
65
  validateTxFee(tx: Tx): Promise<TxValidationResult>;
10
66
  }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9nYXNfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBTyxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzdELE9BQU8sRUFLTCxLQUFLLEVBQUUsRUFDUCxLQUFLLGtCQUFrQixFQUN2QixLQUFLLFdBQVcsRUFDakIsTUFBTSxrQkFBa0IsQ0FBQztBQUkxQixxQkFBYSxjQUFlLFlBQVcsV0FBVyxDQUFDLEVBQUUsQ0FBQzs7SUFNcEQsWUFBWSxnQkFBZ0IsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBSS9GO0lBRUssVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBU3BEO0lBbURZLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQXlCOUQ7Q0FDRiJ9
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9nYXNfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RixPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUtMLEtBQUssRUFBRSxFQUNQLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssV0FBVyxFQUNqQixNQUFNLGtCQUFrQixDQUFDO0FBSTFCLG9HQUFvRztBQUNwRyxNQUFNLFdBQVcsZUFBZTtJQUM5QixNQUFNLEVBQUU7UUFBRSxRQUFRLElBQUksTUFBTSxDQUFBO0tBQUUsQ0FBQztJQUMvQixJQUFJLEVBQUU7UUFFSixTQUFTLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDcEIsU0FBUyxFQUFFO1lBQ1QsU0FBUyxFQUFFO2dCQUNULFdBQVcsRUFBRTtvQkFBRSxTQUFTLEVBQUUsR0FBRyxDQUFBO2lCQUFFLENBQUM7YUFDakMsQ0FBQztTQUNILENBQUM7S0FDSCxDQUFDO0NBQ0g7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILHFCQUFhLGtCQUFrQixDQUFDLENBQUMsU0FBUyxlQUFlLENBQUUsWUFBVyxXQUFXLENBQUMsQ0FBQyxDQUFDOztJQUdsRixZQUFZLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFFcEM7SUFFRCxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FFN0M7SUFFRCxpRkFBaUY7SUFDakYsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxrQkFBa0IsQ0F3QjFDO0NBQ0Y7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILHFCQUFhLGNBQWUsWUFBVyxXQUFXLENBQUMsRUFBRSxDQUFDOztJQVVsRCxPQUFPLENBQUMsUUFBUSxDQUFDO0lBSm5CLFlBQ0UsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQ25DLGVBQWUsRUFBRSxZQUFZLEVBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQ1IsUUFBUSxDQUFDLDRCQUFnQixFQU1sQztJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQVNwRDtJQXlCRDs7O09BR0c7SUFDVSxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0F5QjlEO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"gas_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/gas_validator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAO,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAKL,KAAK,EAAE,EACP,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAI1B,qBAAa,cAAe,YAAW,WAAW,CAAC,EAAE,CAAC;;IAMpD,YAAY,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAI/F;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CASpD;IAmDY,aAAa,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAyB9D;CACF"}
1
+ {"version":3,"file":"gas_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/gas_validator.ts"],"names":[],"mappings":"AAMA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAKL,KAAK,EAAE,EACP,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAI1B,oGAAoG;AACpG,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAC;IAC/B,IAAI,EAAE;QAEJ,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,SAAS,EAAE;YACT,SAAS,EAAE;gBACT,WAAW,EAAE;oBAAE,SAAS,EAAE,GAAG,CAAA;iBAAE,CAAC;aACjC,CAAC;SACH,CAAC;KACH,CAAC;CACH;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,kBAAkB,CAAC,CAAC,SAAS,eAAe,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAGlF,YAAY,QAAQ,CAAC,EAAE,cAAc,EAEpC;IAED,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAE7C;IAED,iFAAiF;IACjF,gBAAgB,CAAC,EAAE,EAAE,CAAC,GAAG,kBAAkB,CAwB1C;CACF;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,cAAe,YAAW,WAAW,CAAC,EAAE,CAAC;;IAUlD,OAAO,CAAC,QAAQ,CAAC;IAJnB,YACE,gBAAgB,EAAE,iBAAiB,EACnC,eAAe,EAAE,YAAY,EAC7B,OAAO,EAAE,OAAO,EACR,QAAQ,CAAC,4BAAgB,EAMlC;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CASpD;IAyBD;;;OAGG;IACU,aAAa,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAyB9D;CACF"}
@@ -1,21 +1,89 @@
1
- import { AVM_MAX_PROCESSABLE_L2_GAS, FIXED_DA_GAS, FIXED_L2_GAS } from '@aztec/constants';
1
+ import { MAX_PROCESSABLE_L2_GAS, PRIVATE_TX_L2_GAS_OVERHEAD, PUBLIC_TX_L2_GAS_OVERHEAD, TX_DA_GAS_OVERHEAD } from '@aztec/constants';
2
2
  import { createLogger } from '@aztec/foundation/log';
3
3
  import { computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
4
4
  import { Gas } from '@aztec/stdlib/gas';
5
5
  import { TX_ERROR_GAS_LIMIT_TOO_HIGH, TX_ERROR_INSUFFICIENT_FEE_PAYER_BALANCE, TX_ERROR_INSUFFICIENT_FEE_PER_GAS, TX_ERROR_INSUFFICIENT_GAS_LIMIT } from '@aztec/stdlib/tx';
6
6
  import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
7
- export class GasTxValidator {
8
- #log = createLogger('sequencer:tx_validator:tx_gas');
7
+ /**
8
+ * Validates that a transaction's gas limits are within acceptable bounds.
9
+ *
10
+ * Rejects transactions whose gas limits fall below the fixed minimums (FIXED_DA_GAS,
11
+ * FIXED_L2_GAS) or exceed the AVM's maximum processable L2 gas. This is a cheap,
12
+ * stateless check that operates on gas settings alone.
13
+ *
14
+ * Generic over T so it can validate both full {@link Tx} objects and {@link TxMetaData}
15
+ * (used during pending pool migration).
16
+ *
17
+ * Used by: pending pool migration (via factory), and indirectly by {@link GasTxValidator}.
18
+ */ export class GasLimitsValidator {
19
+ #log;
20
+ constructor(bindings){
21
+ this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
22
+ }
23
+ validateTx(tx) {
24
+ return Promise.resolve(this.validateGasLimit(tx));
25
+ }
26
+ /** Checks gas limits are >= fixed minimums and <= AVM max processable L2 gas. */ validateGasLimit(tx) {
27
+ const gasLimits = tx.data.constants.txContext.gasSettings.gasLimits;
28
+ const minGasLimits = new Gas(TX_DA_GAS_OVERHEAD, tx.data.forPublic ? PUBLIC_TX_L2_GAS_OVERHEAD : PRIVATE_TX_L2_GAS_OVERHEAD);
29
+ if (minGasLimits.gtAny(gasLimits)) {
30
+ this.#log.verbose(`Rejecting transaction due to the gas limit(s) not being above the minimum gas limit`, {
31
+ gasLimits,
32
+ minGasLimits
33
+ });
34
+ return {
35
+ result: 'invalid',
36
+ reason: [
37
+ TX_ERROR_INSUFFICIENT_GAS_LIMIT
38
+ ]
39
+ };
40
+ }
41
+ if (gasLimits.l2Gas > MAX_PROCESSABLE_L2_GAS) {
42
+ this.#log.verbose(`Rejecting transaction due to the gas limit(s) being higher than the maximum processable gas`, {
43
+ gasLimits,
44
+ minGasLimits
45
+ });
46
+ return {
47
+ result: 'invalid',
48
+ reason: [
49
+ TX_ERROR_GAS_LIMIT_TOO_HIGH
50
+ ]
51
+ };
52
+ }
53
+ return {
54
+ result: 'valid'
55
+ };
56
+ }
57
+ }
58
+ /**
59
+ * Validates that a transaction can pay its gas fees.
60
+ *
61
+ * Runs three checks in order:
62
+ * 1. **Gas limits** (delegates to {@link GasLimitsValidator}) — rejects if limits are
63
+ * out of bounds.
64
+ * 2. **Max fee per gas** — skips (not rejects) the tx if its maxFeesPerGas is below
65
+ * the current block's gas fees. We skip rather than reject because the tx may
66
+ * become eligible in a later block with lower fees.
67
+ * 3. **Fee payer balance** — reads the fee payer's FeeJuice balance from public state,
68
+ * adds any pending claim from a setup-phase `_increase_public_balance` call, and
69
+ * rejects if the total is less than the tx's fee limit (gasLimits * maxFeePerGas).
70
+ *
71
+ * Used by: gossip (stage 1), RPC, and block building validators.
72
+ */ export class GasTxValidator {
73
+ bindings;
74
+ #log;
9
75
  #publicDataSource;
10
76
  #feeJuiceAddress;
11
77
  #gasFees;
12
- constructor(publicDataSource, feeJuiceAddress, gasFees){
78
+ constructor(publicDataSource, feeJuiceAddress, gasFees, bindings){
79
+ this.bindings = bindings;
80
+ this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
13
81
  this.#publicDataSource = publicDataSource;
14
82
  this.#feeJuiceAddress = feeJuiceAddress;
15
83
  this.#gasFees = gasFees;
16
84
  }
17
85
  async validateTx(tx) {
18
- const gasLimitValidation = this.#validateGasLimit(tx);
86
+ const gasLimitValidation = new GasLimitsValidator(this.bindings).validateGasLimit(tx);
19
87
  if (gasLimitValidation.result === 'invalid') {
20
88
  return Promise.resolve(gasLimitValidation);
21
89
  }
@@ -48,39 +116,9 @@ export class GasTxValidator {
48
116
  return notEnoughMaxFees;
49
117
  }
50
118
  /**
51
- * Check whether the tx's gas limit is above the minimum amount.
52
- */ #validateGasLimit(tx) {
53
- const gasLimits = tx.data.constants.txContext.gasSettings.gasLimits;
54
- const minGasLimits = new Gas(FIXED_DA_GAS, FIXED_L2_GAS);
55
- if (minGasLimits.gtAny(gasLimits)) {
56
- this.#log.verbose(`Rejecting transaction due to the gas limit(s) not being above the minimum gas limit`, {
57
- gasLimits,
58
- minGasLimits
59
- });
60
- return {
61
- result: 'invalid',
62
- reason: [
63
- TX_ERROR_INSUFFICIENT_GAS_LIMIT
64
- ]
65
- };
66
- }
67
- if (gasLimits.l2Gas > AVM_MAX_PROCESSABLE_L2_GAS) {
68
- this.#log.verbose(`Rejecting transaction due to the gas limit(s) being higher than the maximum processable gas`, {
69
- gasLimits,
70
- minGasLimits
71
- });
72
- return {
73
- result: 'invalid',
74
- reason: [
75
- TX_ERROR_GAS_LIMIT_TOO_HIGH
76
- ]
77
- };
78
- }
79
- return {
80
- result: 'valid'
81
- };
82
- }
83
- async validateTxFee(tx) {
119
+ * Checks the fee payer has enough FeeJuice balance to cover the tx's fee limit.
120
+ * Accounts for any pending claim from a setup-phase `_increase_public_balance` call.
121
+ */ async validateTxFee(tx) {
84
122
  const feePayer = tx.data.feePayer;
85
123
  // Compute the maximum fee that this tx may pay, based on its gasLimits and maxFeePerGas
86
124
  const feeLimit = getTxFeeLimit(tx);
@@ -8,8 +8,10 @@ export * from './gas_validator.js';
8
8
  export * from './phases_validator.js';
9
9
  export * from './test_utils.js';
10
10
  export * from './allowed_public_setup.js';
11
+ export * from './allowed_setup_helpers.js';
11
12
  export * from './archive_cache.js';
12
13
  export * from './tx_permitted_validator.js';
13
14
  export * from './timestamp_validator.js';
14
15
  export * from './size_validator.js';
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHFCQUFxQixDQUFDIn0=
16
+ export * from './factory.js';
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxjQUFjLENBQUMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC"}
@@ -8,7 +8,9 @@ export * from './gas_validator.js';
8
8
  export * from './phases_validator.js';
9
9
  export * from './test_utils.js';
10
10
  export * from './allowed_public_setup.js';
11
+ export * from './allowed_setup_helpers.js';
11
12
  export * from './archive_cache.js';
12
13
  export * from './tx_permitted_validator.js';
13
14
  export * from './timestamp_validator.js';
14
15
  export * from './size_validator.js';
16
+ export * from './factory.js';
@@ -1,4 +1,5 @@
1
1
  import type { Fr } from '@aztec/foundation/curves/bn254';
2
+ import { type LoggerBindings } from '@aztec/foundation/log';
2
3
  import { type AnyTx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
3
4
  export declare class MetadataTxValidator<T extends AnyTx> implements TxValidator<T> {
4
5
  #private;
@@ -8,7 +9,7 @@ export declare class MetadataTxValidator<T extends AnyTx> implements TxValidator
8
9
  rollupVersion: Fr;
9
10
  vkTreeRoot: Fr;
10
11
  protocolContractsHash: Fr;
11
- });
12
+ }, bindings?: LoggerBindings);
12
13
  validateTx(tx: T): Promise<TxValidationResult>;
13
14
  }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGFfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvdHhfdmFsaWRhdG9yL21ldGFkYXRhX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV6RCxPQUFPLEVBQ0wsS0FBSyxLQUFLLEVBS1YsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxXQUFXLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIscUJBQWEsbUJBQW1CLENBQUMsQ0FBQyxTQUFTLEtBQUssQ0FBRSxZQUFXLFdBQVcsQ0FBQyxDQUFDLENBQUM7O0lBSXZFLE9BQU8sQ0FBQyxNQUFNO0lBRGhCLFlBQ1UsTUFBTSxFQUFFO1FBQ2QsU0FBUyxFQUFFLEVBQUUsQ0FBQztRQUNkLGFBQWEsRUFBRSxFQUFFLENBQUM7UUFDbEIsVUFBVSxFQUFFLEVBQUUsQ0FBQztRQUNmLHFCQUFxQixFQUFFLEVBQUUsQ0FBQztLQUMzQixFQUNDO0lBRUosVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBZTdDO0NBcURGIn0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGFfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvdHhfdmFsaWRhdG9yL21ldGFkYXRhX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RCxPQUFPLEVBQWUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDdkYsT0FBTyxFQUNMLEtBQUssS0FBSyxFQUtWLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssV0FBVyxFQUNqQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLHFCQUFhLG1CQUFtQixDQUFDLENBQUMsU0FBUyxLQUFLLENBQUUsWUFBVyxXQUFXLENBQUMsQ0FBQyxDQUFDOztJQUl2RSxPQUFPLENBQUMsTUFBTTtJQURoQixZQUNVLE1BQU0sRUFBRTtRQUNkLFNBQVMsRUFBRSxFQUFFLENBQUM7UUFDZCxhQUFhLEVBQUUsRUFBRSxDQUFDO1FBQ2xCLFVBQVUsRUFBRSxFQUFFLENBQUM7UUFDZixxQkFBcUIsRUFBRSxFQUFFLENBQUM7S0FDM0IsRUFDRCxRQUFRLENBQUMsRUFBRSxjQUFjLEVBRzFCO0lBRUQsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBdUI3QztDQXFERiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"metadata_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/metadata_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEzD,OAAO,EACL,KAAK,KAAK,EAKV,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,mBAAmB,CAAC,CAAC,SAAS,KAAK,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAIvE,OAAO,CAAC,MAAM;IADhB,YACU,MAAM,EAAE;QACd,SAAS,EAAE,EAAE,CAAC;QACd,aAAa,EAAE,EAAE,CAAC;QAClB,UAAU,EAAE,EAAE,CAAC;QACf,qBAAqB,EAAE,EAAE,CAAC;KAC3B,EACC;IAEJ,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAe7C;CAqDF"}
1
+ {"version":3,"file":"metadata_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/metadata_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,EACL,KAAK,KAAK,EAKV,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,mBAAmB,CAAC,CAAC,SAAS,KAAK,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAIvE,OAAO,CAAC,MAAM;IADhB,YACU,MAAM,EAAE;QACd,SAAS,EAAE,EAAE,CAAC;QACd,aAAa,EAAE,EAAE,CAAC;QAClB,UAAU,EAAE,EAAE,CAAC;QACf,qBAAqB,EAAE,EAAE,CAAC;KAC3B,EACD,QAAQ,CAAC,EAAE,cAAc,EAG1B;IAED,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAuB7C;CAqDF"}
@@ -3,23 +3,23 @@ import { TX_ERROR_INCORRECT_L1_CHAIN_ID, TX_ERROR_INCORRECT_PROTOCOL_CONTRACTS_H
3
3
  export class MetadataTxValidator {
4
4
  values;
5
5
  #log;
6
- constructor(values){
6
+ constructor(values, bindings){
7
7
  this.values = values;
8
- this.#log = createLogger('p2p:tx_validator:tx_metadata');
8
+ this.#log = createLogger('p2p:tx_validator:tx_metadata', bindings);
9
9
  }
10
10
  validateTx(tx) {
11
11
  const errors = [];
12
12
  if (!this.#hasCorrectL1ChainId(tx)) {
13
- errors.push(TX_ERROR_INCORRECT_L1_CHAIN_ID);
13
+ errors.push(`${TX_ERROR_INCORRECT_L1_CHAIN_ID} (tx: ${tx.data.constants.txContext.chainId.toNumber()}, expected: ${this.values.l1ChainId.toNumber()})`);
14
14
  }
15
15
  if (!this.#hasCorrectRollupVersion(tx)) {
16
- errors.push(TX_ERROR_INCORRECT_ROLLUP_VERSION);
16
+ errors.push(`${TX_ERROR_INCORRECT_ROLLUP_VERSION} (tx: ${tx.data.constants.txContext.version.toNumber()}, expected: ${this.values.rollupVersion.toNumber()})`);
17
17
  }
18
18
  if (!this.#hasCorrectVkTreeRoot(tx)) {
19
- errors.push(TX_ERROR_INCORRECT_VK_TREE_ROOT);
19
+ errors.push(`${TX_ERROR_INCORRECT_VK_TREE_ROOT} (tx: ${tx.data.constants.vkTreeRoot.toString()}, expected: ${this.values.vkTreeRoot.toString()})`);
20
20
  }
21
21
  if (!this.#hasCorrectprotocolContractsHash(tx)) {
22
- errors.push(TX_ERROR_INCORRECT_PROTOCOL_CONTRACTS_HASH);
22
+ errors.push(`${TX_ERROR_INCORRECT_PROTOCOL_CONTRACTS_HASH} (tx: ${tx.data.constants.protocolContractsHash.toString()}, expected: ${this.values.protocolContractsHash.toString()})`);
23
23
  }
24
24
  return Promise.resolve(errors.length > 0 ? {
25
25
  result: 'invalid',
@@ -0,0 +1,14 @@
1
+ import type { NullifierSource } from '@aztec/p2p';
2
+ import type { MerkleTreeReadOperations } from '@aztec/stdlib/interfaces/server';
3
+ /**
4
+ * Implements a nullifier source by checking a DB and an in-memory collection.
5
+ * Intended for validating transactions as they are added to a block.
6
+ */
7
+ export declare class NullifierCache implements NullifierSource {
8
+ private db;
9
+ nullifiers: Set<string>;
10
+ constructor(db: MerkleTreeReadOperations);
11
+ nullifiersExist(nullifiers: Buffer[]): Promise<boolean[]>;
12
+ addNullifiers(nullifiers: Buffer[]): void;
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVsbGlmaWVyX2NhY2hlLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvdHhfdmFsaWRhdG9yL251bGxpZmllcl9jYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEQsT0FBTyxLQUFLLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUdoRjs7O0dBR0c7QUFDSCxxQkFBYSxjQUFlLFlBQVcsZUFBZTtJQUd4QyxPQUFPLENBQUMsRUFBRTtJQUZ0QixVQUFVLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXhCLFlBQW9CLEVBQUUsRUFBRSx3QkFBd0IsRUFFL0M7SUFFWSxlQUFlLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQU9yRTtJQUVNLGFBQWEsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBSXhDO0NBQ0YifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nullifier_cache.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/nullifier_cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAGhF;;;GAGG;AACH,qBAAa,cAAe,YAAW,eAAe;IAGxC,OAAO,CAAC,EAAE;IAFtB,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAExB,YAAoB,EAAE,EAAE,wBAAwB,EAE/C;IAEY,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAOrE;IAEM,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,QAIxC;CACF"}
@@ -0,0 +1,24 @@
1
+ import { MerkleTreeId } from '@aztec/stdlib/trees';
2
+ /**
3
+ * Implements a nullifier source by checking a DB and an in-memory collection.
4
+ * Intended for validating transactions as they are added to a block.
5
+ */ export class NullifierCache {
6
+ db;
7
+ nullifiers;
8
+ constructor(db){
9
+ this.db = db;
10
+ this.nullifiers = new Set();
11
+ }
12
+ async nullifiersExist(nullifiers) {
13
+ const cacheResults = nullifiers.map((n)=>this.nullifiers.has(n.toString()));
14
+ const toCheckDb = nullifiers.filter((_n, index)=>!cacheResults[index]);
15
+ const dbHits = await this.db.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, toCheckDb);
16
+ let dbIndex = 0;
17
+ return nullifiers.map((_n, index)=>cacheResults[index] || dbHits[dbIndex++] !== undefined);
18
+ }
19
+ addNullifiers(nullifiers) {
20
+ for (const nullifier of nullifiers){
21
+ this.nullifiers.add(nullifier.toString());
22
+ }
23
+ }
24
+ }
@@ -1,3 +1,4 @@
1
+ import { type LoggerBindings } from '@aztec/foundation/log';
1
2
  import type { ContractDataSource } from '@aztec/stdlib/contract';
2
3
  import type { AllowedElement } from '@aztec/stdlib/interfaces/server';
3
4
  import { Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
@@ -7,8 +8,8 @@ export declare class PhasesTxValidator implements TxValidator<Tx> {
7
8
  private setupAllowList;
8
9
  private timestamp;
9
10
  private contractsDB;
10
- constructor(contracts: ContractDataSource, setupAllowList: AllowedElement[], timestamp: UInt64);
11
+ constructor(contracts: ContractDataSource, setupAllowList: AllowedElement[], timestamp: UInt64, bindings?: LoggerBindings);
11
12
  validateTx(tx: Tx): Promise<TxValidationResult>;
12
- private isOnAllowList;
13
+ private checkAllowList;
13
14
  }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2VzX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9waGFzZXNfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdEUsT0FBTyxFQUlMLEVBQUUsRUFFRixLQUFLLGtCQUFrQixFQUN2QixLQUFLLFdBQVcsRUFDakIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRCxxQkFBYSxpQkFBa0IsWUFBVyxXQUFXLENBQUMsRUFBRSxDQUFDOztJQU1yRCxPQUFPLENBQUMsY0FBYztJQUN0QixPQUFPLENBQUMsU0FBUztJQUxuQixPQUFPLENBQUMsV0FBVyxDQUFvQjtJQUV2QyxZQUNFLFNBQVMsRUFBRSxrQkFBa0IsRUFDckIsY0FBYyxFQUFFLGNBQWMsRUFBRSxFQUNoQyxTQUFTLEVBQUUsTUFBTSxFQUcxQjtJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQXFDcEQ7WUFFYSxhQUFhO0NBaUQ1QiJ9
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2VzX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9waGFzZXNfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUd2RixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFRTCxFQUFFLEVBRUYsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxXQUFXLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQscUJBQWEsaUJBQWtCLFlBQVcsV0FBVyxDQUFDLEVBQUUsQ0FBQzs7SUFNckQsT0FBTyxDQUFDLGNBQWM7SUFDdEIsT0FBTyxDQUFDLFNBQVM7SUFMbkIsT0FBTyxDQUFDLFdBQVcsQ0FBb0I7SUFFdkMsWUFDRSxTQUFTLEVBQUUsa0JBQWtCLEVBQ3JCLGNBQWMsRUFBRSxjQUFjLEVBQUUsRUFDaEMsU0FBUyxFQUFFLE1BQU0sRUFDekIsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQUkxQjtJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQXNDcEQ7WUFHYSxjQUFjO0NBa0U3QiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"phases_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/phases_validator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAIL,EAAE,EAEF,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,qBAAa,iBAAkB,YAAW,WAAW,CAAC,EAAE,CAAC;;IAMrD,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,SAAS;IALnB,OAAO,CAAC,WAAW,CAAoB;IAEvC,YACE,SAAS,EAAE,kBAAkB,EACrB,cAAc,EAAE,cAAc,EAAE,EAChC,SAAS,EAAE,MAAM,EAG1B;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAqCpD;YAEa,aAAa;CAiD5B"}
1
+ {"version":3,"file":"phases_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/phases_validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAGvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAQL,EAAE,EAEF,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,qBAAa,iBAAkB,YAAW,WAAW,CAAC,EAAE,CAAC;;IAMrD,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,SAAS;IALnB,OAAO,CAAC,WAAW,CAAoB;IAEvC,YACE,SAAS,EAAE,kBAAkB,EACrB,cAAc,EAAE,cAAc,EAAE,EAChC,SAAS,EAAE,MAAM,EACzB,QAAQ,CAAC,EAAE,cAAc,EAI1B;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAsCpD;YAGa,cAAc;CAkE7B"}
@@ -1,16 +1,18 @@
1
+ import { NULL_MSG_SENDER_CONTRACT_ADDRESS } from '@aztec/constants';
1
2
  import { createLogger } from '@aztec/foundation/log';
2
3
  import { PublicContractsDB, getCallRequestsWithCalldataByPhase } from '@aztec/simulator/server';
3
- import { TX_ERROR_DURING_VALIDATION, TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED, TxExecutionPhase } from '@aztec/stdlib/tx';
4
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
5
+ import { TX_ERROR_DURING_VALIDATION, TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED, TX_ERROR_SETUP_FUNCTION_UNKNOWN_CONTRACT, TX_ERROR_SETUP_NULL_MSG_SENDER, TX_ERROR_SETUP_ONLY_SELF_WRONG_SENDER, TX_ERROR_SETUP_WRONG_CALLDATA_LENGTH, TxExecutionPhase } from '@aztec/stdlib/tx';
4
6
  export class PhasesTxValidator {
5
7
  setupAllowList;
6
8
  timestamp;
7
9
  #log;
8
10
  contractsDB;
9
- constructor(contracts, setupAllowList, timestamp){
11
+ constructor(contracts, setupAllowList, timestamp, bindings){
10
12
  this.setupAllowList = setupAllowList;
11
13
  this.timestamp = timestamp;
12
- this.#log = createLogger('sequencer:tx_validator:tx_phases');
13
- this.contractsDB = new PublicContractsDB(contracts);
14
+ this.#log = createLogger('sequencer:tx_validator:tx_phases', bindings);
15
+ this.contractsDB = new PublicContractsDB(contracts, bindings);
14
16
  }
15
17
  async validateTx(tx) {
16
18
  this.contractsDB.createCheckpoint();
@@ -28,14 +30,15 @@ export class PhasesTxValidator {
28
30
  }
29
31
  const setupFns = getCallRequestsWithCalldataByPhase(tx, TxExecutionPhase.SETUP);
30
32
  for (const setupFn of setupFns){
31
- if (!await this.isOnAllowList(setupFn, this.setupAllowList)) {
33
+ const rejectionReason = await this.checkAllowList(setupFn, this.setupAllowList);
34
+ if (rejectionReason) {
32
35
  this.#log.verbose(`Rejecting tx ${tx.getTxHash().toString()} because it calls setup function not on allow list: ${setupFn.request.contractAddress}:${setupFn.functionSelector}`, {
33
36
  allowList: this.setupAllowList
34
37
  });
35
38
  return {
36
39
  result: 'invalid',
37
40
  reason: [
38
- TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED
41
+ rejectionReason
39
42
  ]
40
43
  };
41
44
  }
@@ -55,39 +58,57 @@ export class PhasesTxValidator {
55
58
  this.contractsDB.revertCheckpoint();
56
59
  }
57
60
  }
58
- async isOnAllowList(publicCall, allowList) {
61
+ /** Returns a rejection reason if the call is not on the allow list, or undefined if it is allowed. */ async checkAllowList(publicCall, allowList) {
59
62
  if (publicCall.isEmpty()) {
60
- return true;
63
+ return undefined;
61
64
  }
62
65
  const contractAddress = publicCall.request.contractAddress;
63
66
  const functionSelector = publicCall.functionSelector;
64
- // do these checks first since they don't require the contract class
67
+ // Check address-based entries first since they don't require the contract class.
65
68
  for (const entry of allowList){
66
- if ('address' in entry && !('selector' in entry)) {
67
- if (contractAddress.equals(entry.address)) {
68
- return true;
69
- }
70
- }
71
- if ('address' in entry && 'selector' in entry) {
69
+ if ('address' in entry) {
72
70
  if (contractAddress.equals(entry.address) && entry.selector.equals(functionSelector)) {
73
- return true;
71
+ if (entry.calldataLength !== undefined && publicCall.calldata.length !== entry.calldataLength) {
72
+ return TX_ERROR_SETUP_WRONG_CALLDATA_LENGTH;
73
+ }
74
+ if (entry.onlySelf && !publicCall.request.msgSender.equals(contractAddress)) {
75
+ return TX_ERROR_SETUP_ONLY_SELF_WRONG_SENDER;
76
+ }
77
+ if (entry.rejectNullMsgSender && publicCall.request.msgSender.equals(AztecAddress.fromBigInt(NULL_MSG_SENDER_CONTRACT_ADDRESS))) {
78
+ return TX_ERROR_SETUP_NULL_MSG_SENDER;
79
+ }
80
+ return undefined;
74
81
  }
75
82
  }
76
- const contractClass = await this.contractsDB.getContractInstance(contractAddress, this.timestamp);
77
- if (!contractClass) {
78
- throw new Error(`Contract not found: ${contractAddress}`);
83
+ }
84
+ // Check class-based entries. Fetch the contract instance lazily (only once).
85
+ let contractClassId;
86
+ for (const entry of allowList){
87
+ if (!('classId' in entry)) {
88
+ continue;
79
89
  }
80
- if ('classId' in entry && !('selector' in entry)) {
81
- if (contractClass.currentContractClassId.equals(entry.classId)) {
82
- return true;
90
+ if (contractClassId === undefined) {
91
+ const instance = await this.contractsDB.getContractInstance(contractAddress, this.timestamp);
92
+ contractClassId = {
93
+ value: instance?.currentContractClassId.toString()
94
+ };
95
+ if (!contractClassId.value) {
96
+ return TX_ERROR_SETUP_FUNCTION_UNKNOWN_CONTRACT;
83
97
  }
84
98
  }
85
- if ('classId' in entry && 'selector' in entry) {
86
- if (contractClass.currentContractClassId.equals(entry.classId) && (entry.selector === undefined || entry.selector.equals(functionSelector))) {
87
- return true;
99
+ if (contractClassId.value === entry.classId.toString() && entry.selector.equals(functionSelector)) {
100
+ if (entry.calldataLength !== undefined && publicCall.calldata.length !== entry.calldataLength) {
101
+ return TX_ERROR_SETUP_WRONG_CALLDATA_LENGTH;
102
+ }
103
+ if (entry.onlySelf && !publicCall.request.msgSender.equals(contractAddress)) {
104
+ return TX_ERROR_SETUP_ONLY_SELF_WRONG_SENDER;
105
+ }
106
+ if (entry.rejectNullMsgSender && publicCall.request.msgSender.equals(AztecAddress.fromBigInt(NULL_MSG_SENDER_CONTRACT_ADDRESS))) {
107
+ return TX_ERROR_SETUP_NULL_MSG_SENDER;
88
108
  }
109
+ return undefined;
89
110
  }
90
111
  }
91
- return false;
112
+ return TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED;
92
113
  }
93
114
  }
@@ -1,6 +1,8 @@
1
+ import { type LoggerBindings } from '@aztec/foundation/log';
1
2
  import { Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
2
3
  export declare class SizeTxValidator implements TxValidator<Tx> {
3
4
  #private;
5
+ constructor(bindings?: LoggerBindings);
4
6
  validateTx(tx: Tx): Promise<TxValidationResult>;
5
7
  }
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l6ZV92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3Ivc2l6ZV92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLGtCQUFrQixFQUFFLEtBQUssV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFakYscUJBQWEsZUFBZ0IsWUFBVyxXQUFXLENBQUMsRUFBRSxDQUFDOztJQUdyRCxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FTOUM7Q0FDRiJ9
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2l6ZV92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3Ivc2l6ZV92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFlLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxrQkFBa0IsRUFBRSxLQUFLLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpGLHFCQUFhLGVBQWdCLFlBQVcsV0FBVyxDQUFDLEVBQUUsQ0FBQzs7SUFHckQsWUFBWSxRQUFRLENBQUMsRUFBRSxjQUFjLEVBRXBDO0lBRUQsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBUzlDO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"size_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/size_validator.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEjF,qBAAa,eAAgB,YAAW,WAAW,CAAC,EAAE,CAAC;;IAGrD,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAS9C;CACF"}
1
+ {"version":3,"file":"size_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/size_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEvF,OAAO,EAAE,EAAE,EAAE,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEjF,qBAAa,eAAgB,YAAW,WAAW,CAAC,EAAE,CAAC;;IAGrD,YAAY,QAAQ,CAAC,EAAE,cAAc,EAEpC;IAED,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAS9C;CACF"}
@@ -1,7 +1,10 @@
1
1
  import { createLogger } from '@aztec/foundation/log';
2
2
  import { MAX_TX_SIZE_KB } from '@aztec/stdlib/p2p';
3
3
  export class SizeTxValidator {
4
- #log = createLogger('sequencer:tx_validator:tx_size');
4
+ #log;
5
+ constructor(bindings){
6
+ this.#log = createLogger('p2p:tx_validator:tx_size', bindings);
7
+ }
5
8
  validateTx(tx) {
6
9
  const txSize = tx.getSize();
7
10
  if (txSize > MAX_TX_SIZE_KB * 1024) {
@@ -1,13 +1,30 @@
1
- import { BlockNumber } from '@aztec/foundation/branded-types';
2
- import { type AnyTx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
1
+ import type { BlockNumber } from '@aztec/foundation/branded-types';
2
+ import { type LoggerBindings } from '@aztec/foundation/log';
3
+ import { type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
3
4
  import type { UInt64 } from '@aztec/stdlib/types';
4
- export declare class TimestampTxValidator<T extends AnyTx> implements TxValidator<T> {
5
+ /** Structural interface for timestamp validation. */
6
+ export interface HasTimestampData {
7
+ txHash: {
8
+ toString(): string;
9
+ };
10
+ data: {
11
+ expirationTimestamp: bigint;
12
+ constants: {
13
+ anchorBlockHeader: {
14
+ globalVariables: {
15
+ blockNumber: BlockNumber;
16
+ };
17
+ };
18
+ };
19
+ };
20
+ }
21
+ export declare class TimestampTxValidator<T extends HasTimestampData> implements TxValidator<T> {
5
22
  #private;
6
23
  private values;
7
24
  constructor(values: {
8
25
  timestamp: UInt64;
9
26
  blockNumber: BlockNumber;
10
- });
27
+ }, bindings?: LoggerBindings);
11
28
  validateTx(tx: T): Promise<TxValidationResult>;
12
29
  }
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXN0YW1wX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci90aW1lc3RhbXBfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RCxPQUFPLEVBQ0wsS0FBSyxLQUFLLEVBRVYsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxXQUFXLEVBRWpCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQscUJBQWEsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLEtBQUssQ0FBRSxZQUFXLFdBQVcsQ0FBQyxDQUFDLENBQUM7O0lBSXhFLE9BQU8sQ0FBQyxNQUFNO0lBRGhCLFlBQ1UsTUFBTSxFQUFFO1FBR2QsU0FBUyxFQUFFLE1BQU0sQ0FBQztRQUVsQixXQUFXLEVBQUUsV0FBVyxDQUFDO0tBQzFCLEVBQ0M7SUFFSixVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0F1QjdDO0NBQ0YifQ==
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZXN0YW1wX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci90aW1lc3RhbXBfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RixPQUFPLEVBQXlDLEtBQUssa0JBQWtCLEVBQUUsS0FBSyxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNwSCxPQUFPLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVsRCxxREFBcUQ7QUFDckQsTUFBTSxXQUFXLGdCQUFnQjtJQUMvQixNQUFNLEVBQUU7UUFBRSxRQUFRLElBQUksTUFBTSxDQUFBO0tBQUUsQ0FBQztJQUMvQixJQUFJLEVBQUU7UUFDSixtQkFBbUIsRUFBRSxNQUFNLENBQUM7UUFDNUIsU0FBUyxFQUFFO1lBQ1QsaUJBQWlCLEVBQUU7Z0JBQ2pCLGVBQWUsRUFBRTtvQkFDZixXQUFXLEVBQUUsV0FBVyxDQUFDO2lCQUMxQixDQUFDO2FBQ0gsQ0FBQztTQUNILENBQUM7S0FDSCxDQUFDO0NBQ0g7QUFFRCxxQkFBYSxvQkFBb0IsQ0FBQyxDQUFDLFNBQVMsZ0JBQWdCLENBQUUsWUFBVyxXQUFXLENBQUMsQ0FBQyxDQUFDOztJQUluRixPQUFPLENBQUMsTUFBTTtJQURoQixZQUNVLE1BQU0sRUFBRTtRQUdkLFNBQVMsRUFBRSxNQUFNLENBQUM7UUFFbEIsV0FBVyxFQUFFLFdBQVcsQ0FBQztLQUMxQixFQUNELFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFHMUI7SUFFRCxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FtQjdDO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"timestamp_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/timestamp_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EACL,KAAK,KAAK,EAEV,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAEjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,qBAAa,oBAAoB,CAAC,CAAC,SAAS,KAAK,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAIxE,OAAO,CAAC,MAAM;IADhB,YACU,MAAM,EAAE;QAGd,SAAS,EAAE,MAAM,CAAC;QAElB,WAAW,EAAE,WAAW,CAAC;KAC1B,EACC;IAEJ,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAuB7C;CACF"}
1
+ {"version":3,"file":"timestamp_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/timestamp_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAAyC,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,qDAAqD;AACrD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAC;IAC/B,IAAI,EAAE;QACJ,mBAAmB,EAAE,MAAM,CAAC;QAC5B,SAAS,EAAE;YACT,iBAAiB,EAAE;gBACjB,eAAe,EAAE;oBACf,WAAW,EAAE,WAAW,CAAC;iBAC1B,CAAC;aACH,CAAC;SACH,CAAC;KACH,CAAC;CACH;AAED,qBAAa,oBAAoB,CAAC,CAAC,SAAS,gBAAgB,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAInF,OAAO,CAAC,MAAM;IADhB,YACU,MAAM,EAAE;QAGd,SAAS,EAAE,MAAM,CAAC;QAElB,WAAW,EAAE,WAAW,CAAC;KAC1B,EACD,QAAQ,CAAC,EAAE,cAAc,EAG1B;IAED,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmB7C;CACF"}
@@ -1,26 +1,26 @@
1
1
  import { createLogger } from '@aztec/foundation/log';
2
- import { TX_ERROR_INVALID_INCLUDE_BY_TIMESTAMP, getTxHash } from '@aztec/stdlib/tx';
2
+ import { TX_ERROR_INVALID_EXPIRATION_TIMESTAMP } from '@aztec/stdlib/tx';
3
3
  export class TimestampTxValidator {
4
4
  values;
5
5
  #log;
6
- constructor(values){
6
+ constructor(values, bindings){
7
7
  this.values = values;
8
- this.#log = createLogger('p2p:tx_validator:timestamp');
8
+ this.#log = createLogger('p2p:tx_validator:timestamp', bindings);
9
9
  }
10
10
  validateTx(tx) {
11
- const includeByTimestamp = tx.data.includeByTimestamp;
12
- // If building block 1, we skip the expiration check. For details on why see the `validate_include_by_timestamp`
11
+ const expirationTimestamp = tx.data.expirationTimestamp;
12
+ // If building block 1, we skip the expiration check. For details on why see the `validate_expiration_timestamp`
13
13
  // function in `noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/components/validation_requests.nr`.
14
14
  const buildingBlock1 = this.values.blockNumber === 1;
15
- if (!buildingBlock1 && includeByTimestamp < this.values.timestamp) {
15
+ if (!buildingBlock1 && expirationTimestamp < this.values.timestamp) {
16
16
  if (tx.data.constants.anchorBlockHeader.globalVariables.blockNumber === 0) {
17
17
  this.#log.warn(`A tx built against a genesis block failed to be included in block 1 which is the only block in which txs built against a genesis block are allowed to be included.`);
18
18
  }
19
- this.#log.verbose(`Rejecting tx ${getTxHash(tx)} for low expiration timestamp. Tx expiration timestamp: ${includeByTimestamp}, timestamp: ${this.values.timestamp}.`);
19
+ this.#log.verbose(`Rejecting tx ${tx.txHash} for low expiration timestamp. Tx expiration timestamp: ${expirationTimestamp}, timestamp: ${this.values.timestamp}.`);
20
20
  return Promise.resolve({
21
21
  result: 'invalid',
22
22
  reason: [
23
- TX_ERROR_INVALID_INCLUDE_BY_TIMESTAMP
23
+ TX_ERROR_INVALID_EXPIRATION_TIMESTAMP
24
24
  ]
25
25
  });
26
26
  } else {