@aztec/p2p 0.0.1-commit.993d52e → 0.0.1-commit.9a89641

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 (473) hide show
  1. package/README.md +130 -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 +22 -6
  5. package/dest/client/factory.d.ts +5 -4
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +39 -16
  8. package/dest/client/interface.d.ts +52 -12
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +34 -19
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +120 -73
  13. package/dest/config.d.ts +160 -110
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +139 -49
  16. package/dest/errors/p2p-service.error.d.ts +9 -0
  17. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  18. package/dest/errors/p2p-service.error.js +10 -0
  19. package/dest/errors/reqresp.error.d.ts +9 -16
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +10 -17
  22. package/dest/index.d.ts +1 -2
  23. package/dest/index.d.ts.map +1 -1
  24. package/dest/index.js +0 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +101 -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 +274 -197
  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 +224 -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 +12 -5
  37. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  38. package/dest/mem_pools/instrumentation.js +38 -17
  39. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +1 -5
  40. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +1 -7
  42. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +3 -3
  43. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +6 -6
  45. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  46. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  47. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +5 -4
  48. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +1 -1
  49. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -1
  50. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +3 -1
  51. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  52. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  54. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  55. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  56. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +64 -0
  57. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +1 -1
  58. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -1
  59. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +3 -4
  60. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +1 -1
  61. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
  62. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +6 -7
  63. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +1 -1
  64. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -1
  65. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +6 -5
  66. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +41 -9
  67. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  68. package/dest/mem_pools/tx_pool_v2/interfaces.js +3 -1
  69. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +17 -8
  70. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  71. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +20 -7
  72. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +15 -1
  73. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  74. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +55 -41
  75. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +12 -4
  76. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  77. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +23 -6
  78. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +17 -3
  79. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  80. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +234 -120
  81. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +10 -3
  82. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  83. package/dest/msg_validators/attestation_validator/attestation_validator.js +38 -15
  84. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  85. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  86. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  87. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +11 -5
  88. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  89. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +11 -3
  90. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +11 -5
  91. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  92. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +23 -3
  93. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +35 -10
  94. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  95. package/dest/msg_validators/proposal_validator/proposal_validator.js +128 -56
  96. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  97. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  99. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  100. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
  102. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  103. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  104. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  105. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  106. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  107. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  108. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  109. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  110. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  111. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  112. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  113. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  114. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  115. package/dest/msg_validators/tx_validator/factory.d.ts +25 -7
  116. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  117. package/dest/msg_validators/tx_validator/factory.js +55 -16
  118. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  119. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  120. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  121. package/dest/msg_validators/tx_validator/gas_validator.d.ts +53 -7
  122. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  123. package/dest/msg_validators/tx_validator/gas_validator.js +88 -41
  124. package/dest/msg_validators/tx_validator/index.d.ts +4 -1
  125. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  126. package/dest/msg_validators/tx_validator/index.js +3 -0
  127. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  128. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  129. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  130. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  131. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  132. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  133. package/dest/msg_validators/tx_validator/timestamp_validator.js +1 -1
  134. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  135. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  136. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  137. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  138. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  139. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  140. package/dest/services/data_store.d.ts +1 -1
  141. package/dest/services/data_store.d.ts.map +1 -1
  142. package/dest/services/data_store.js +5 -5
  143. package/dest/services/discv5/discV5_service.d.ts +13 -2
  144. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  145. package/dest/services/discv5/discV5_service.js +119 -23
  146. package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
  147. package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
  148. package/dest/services/discv5/persisted_enr_store.js +145 -0
  149. package/dest/services/dummy_service.d.ts +15 -15
  150. package/dest/services/dummy_service.d.ts.map +1 -1
  151. package/dest/services/dummy_service.js +15 -16
  152. package/dest/services/encoding.d.ts +23 -6
  153. package/dest/services/encoding.d.ts.map +1 -1
  154. package/dest/services/encoding.js +32 -16
  155. package/dest/services/gossipsub/topic_score_params.d.ts +6 -12
  156. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  157. package/dest/services/gossipsub/topic_score_params.js +4 -14
  158. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  159. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  160. package/dest/services/libp2p/instrumentation.js +14 -0
  161. package/dest/services/libp2p/libp2p_service.d.ts +46 -47
  162. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  163. package/dest/services/libp2p/libp2p_service.js +460 -320
  164. package/dest/services/peer-manager/metrics.d.ts +3 -1
  165. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  166. package/dest/services/peer-manager/metrics.js +6 -0
  167. package/dest/services/peer-manager/peer_manager.d.ts +20 -3
  168. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  169. package/dest/services/peer-manager/peer_manager.js +83 -26
  170. package/dest/services/peer-manager/peer_scoring.d.ts +34 -2
  171. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  172. package/dest/services/peer-manager/peer_scoring.js +102 -13
  173. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +4 -8
  174. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  175. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +94 -122
  176. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
  177. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  178. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  179. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  180. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  181. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +19 -11
  182. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  183. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +52 -15
  184. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  185. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  186. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  187. package/dest/services/reqresp/config.d.ts +15 -3
  188. package/dest/services/reqresp/config.d.ts.map +1 -1
  189. package/dest/services/reqresp/config.js +11 -0
  190. package/dest/services/reqresp/interface.d.ts +16 -18
  191. package/dest/services/reqresp/interface.d.ts.map +1 -1
  192. package/dest/services/reqresp/interface.js +10 -20
  193. package/dest/services/reqresp/metrics.d.ts +1 -1
  194. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  195. package/dest/services/reqresp/metrics.js +0 -1
  196. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  197. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  198. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  199. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  200. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  201. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
  202. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
  203. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  204. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
  205. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  206. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  207. package/dest/services/reqresp/protocols/index.js +0 -1
  208. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  209. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  210. package/dest/services/reqresp/protocols/tx.js +1 -3
  211. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  212. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  213. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  214. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  215. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  216. package/dest/services/reqresp/rate-limiter/rate_limits.js +3 -13
  217. package/dest/services/reqresp/reqresp.d.ts +7 -29
  218. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  219. package/dest/services/reqresp/reqresp.js +75 -216
  220. package/dest/services/service.d.ts +29 -12
  221. package/dest/services/service.d.ts.map +1 -1
  222. package/dest/services/tx_collection/config.d.ts +2 -23
  223. package/dest/services/tx_collection/config.d.ts.map +1 -1
  224. package/dest/services/tx_collection/config.js +2 -55
  225. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  226. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  227. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  228. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  229. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  230. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  231. package/dest/services/tx_collection/index.d.ts +2 -3
  232. package/dest/services/tx_collection/index.d.ts.map +1 -1
  233. package/dest/services/tx_collection/index.js +0 -1
  234. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  235. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  236. package/dest/services/tx_collection/instrumentation.js +0 -2
  237. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  238. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  239. package/dest/services/tx_collection/request_tracker.js +84 -0
  240. package/dest/services/tx_collection/tx_collection.d.ts +36 -55
  241. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  242. package/dest/services/tx_collection/tx_collection.js +275 -119
  243. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  244. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  245. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  246. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  247. package/dest/services/tx_collection/tx_source.js +13 -8
  248. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  249. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  250. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  251. package/dest/services/tx_provider.d.ts +3 -1
  252. package/dest/services/tx_provider.d.ts.map +1 -1
  253. package/dest/services/tx_provider.js +3 -0
  254. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  255. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  256. package/dest/test-helpers/make-test-p2p-clients.js +5 -2
  257. package/dest/test-helpers/mock-pubsub.d.ts +23 -9
  258. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  259. package/dest/test-helpers/mock-pubsub.js +44 -44
  260. package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
  261. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  262. package/dest/test-helpers/reqresp-nodes.js +16 -18
  263. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  264. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  265. package/dest/test-helpers/test_tx_provider.js +3 -0
  266. package/dest/test-helpers/testbench-utils.d.ts +15 -14
  267. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  268. package/dest/test-helpers/testbench-utils.js +51 -16
  269. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  270. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  271. package/dest/testbench/p2p_client_testbench_worker.js +104 -41
  272. package/dest/testbench/worker_client_manager.d.ts +12 -6
  273. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  274. package/dest/testbench/worker_client_manager.js +57 -11
  275. package/dest/util.d.ts +12 -7
  276. package/dest/util.d.ts.map +1 -1
  277. package/dest/util.js +35 -14
  278. package/dest/versioning.d.ts +3 -6
  279. package/dest/versioning.d.ts.map +1 -1
  280. package/dest/versioning.js +3 -24
  281. package/package.json +15 -16
  282. package/src/bootstrap/bootstrap.ts +17 -3
  283. package/src/client/factory.ts +62 -9
  284. package/src/client/interface.ts +48 -18
  285. package/src/client/p2p_client.ts +140 -106
  286. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  287. package/src/config.ts +241 -57
  288. package/src/errors/p2p-service.error.ts +11 -0
  289. package/src/errors/reqresp.error.ts +13 -19
  290. package/src/index.ts +0 -1
  291. package/src/mem_pools/attestation_pool/attestation_pool.ts +329 -243
  292. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +244 -69
  293. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  294. package/src/mem_pools/index.ts +0 -3
  295. package/src/mem_pools/instrumentation.ts +27 -17
  296. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
  297. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +7 -7
  298. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +4 -5
  299. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +3 -2
  300. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  301. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +67 -0
  302. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +1 -3
  303. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +5 -7
  304. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +5 -6
  305. package/src/mem_pools/tx_pool_v2/interfaces.ts +40 -8
  306. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +35 -13
  307. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +62 -41
  308. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +36 -7
  309. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +260 -124
  310. package/src/msg_validators/attestation_validator/README.md +49 -0
  311. package/src/msg_validators/attestation_validator/attestation_validator.ts +46 -14
  312. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +15 -7
  313. package/src/msg_validators/proposal_validator/README.md +123 -0
  314. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +26 -4
  315. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +43 -7
  316. package/src/msg_validators/proposal_validator/proposal_validator.ts +150 -58
  317. package/src/msg_validators/tx_validator/README.md +17 -3
  318. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  319. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  320. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  321. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  322. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  323. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  324. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  325. package/src/msg_validators/tx_validator/factory.ts +66 -9
  326. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  327. package/src/msg_validators/tx_validator/gas_validator.ts +117 -39
  328. package/src/msg_validators/tx_validator/index.ts +3 -0
  329. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  330. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  331. package/src/msg_validators/tx_validator/timestamp_validator.ts +1 -1
  332. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  333. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  334. package/src/services/data_store.ts +5 -13
  335. package/src/services/discv5/discV5_service.ts +126 -14
  336. package/src/services/discv5/persisted_enr_store.ts +158 -0
  337. package/src/services/dummy_service.ts +20 -39
  338. package/src/services/encoding.ts +35 -19
  339. package/src/services/gossipsub/README.md +33 -11
  340. package/src/services/gossipsub/topic_score_params.ts +9 -18
  341. package/src/services/libp2p/instrumentation.ts +14 -0
  342. package/src/services/libp2p/libp2p_service.ts +508 -358
  343. package/src/services/peer-manager/metrics.ts +7 -0
  344. package/src/services/peer-manager/peer_manager.ts +91 -25
  345. package/src/services/peer-manager/peer_scoring.ts +102 -8
  346. package/src/services/reqresp/README.md +194 -0
  347. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  348. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +91 -137
  349. package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
  350. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  351. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +68 -24
  352. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  353. package/src/services/reqresp/config.ts +19 -2
  354. package/src/services/reqresp/interface.ts +21 -47
  355. package/src/services/reqresp/metrics.ts +0 -1
  356. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  357. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
  358. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
  359. package/src/services/reqresp/protocols/index.ts +0 -1
  360. package/src/services/reqresp/protocols/tx.ts +1 -3
  361. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  362. package/src/services/reqresp/rate-limiter/rate_limits.ts +3 -13
  363. package/src/services/reqresp/reqresp.ts +87 -260
  364. package/src/services/service.ts +35 -28
  365. package/src/services/tx_collection/config.ts +3 -80
  366. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  367. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  368. package/src/services/tx_collection/index.ts +1 -6
  369. package/src/services/tx_collection/instrumentation.ts +1 -7
  370. package/src/services/tx_collection/request_tracker.ts +127 -0
  371. package/src/services/tx_collection/tx_collection.ts +331 -176
  372. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  373. package/src/services/tx_collection/tx_source.ts +10 -8
  374. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  375. package/src/services/tx_provider.ts +5 -0
  376. package/src/test-helpers/make-test-p2p-clients.ts +4 -1
  377. package/src/test-helpers/mock-pubsub.ts +46 -60
  378. package/src/test-helpers/reqresp-nodes.ts +13 -23
  379. package/src/test-helpers/test_tx_provider.ts +5 -0
  380. package/src/test-helpers/testbench-utils.ts +64 -28
  381. package/src/testbench/p2p_client_testbench_worker.ts +111 -57
  382. package/src/testbench/worker_client_manager.ts +72 -25
  383. package/src/util.ts +33 -18
  384. package/src/versioning.ts +3 -33
  385. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  386. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  387. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -304
  388. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  389. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  390. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  391. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  392. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  393. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  394. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  395. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  396. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  397. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  398. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  399. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  400. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  401. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  402. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  403. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  404. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  405. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  406. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  407. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  408. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  409. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  410. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  411. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  412. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  413. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  414. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  415. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  416. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  417. package/dest/mem_pools/tx_pool/index.js +0 -2
  418. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  419. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  420. package/dest/mem_pools/tx_pool/priority.js +0 -15
  421. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  422. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  423. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  424. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  425. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  426. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  427. package/dest/msg_validators/clock_tolerance.d.ts +0 -21
  428. package/dest/msg_validators/clock_tolerance.d.ts.map +0 -1
  429. package/dest/msg_validators/clock_tolerance.js +0 -37
  430. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -24
  431. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  432. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -378
  433. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  434. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  435. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  436. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  437. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  438. package/dest/services/reqresp/protocols/block.js +0 -32
  439. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -54
  440. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  441. package/dest/services/tx_collection/fast_tx_collection.js +0 -327
  442. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  443. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  444. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  445. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
  446. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  447. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  448. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  449. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  450. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  451. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -345
  452. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  453. package/src/mem_pools/tx_pool/README.md +0 -270
  454. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  455. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  456. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  457. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  458. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  459. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  460. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  461. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  462. package/src/mem_pools/tx_pool/index.ts +0 -2
  463. package/src/mem_pools/tx_pool/priority.ts +0 -20
  464. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  465. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  466. package/src/msg_validators/clock_tolerance.ts +0 -51
  467. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -373
  468. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  469. package/src/services/reqresp/protocols/block.ts +0 -37
  470. package/src/services/tx_collection/fast_tx_collection.ts +0 -387
  471. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
  472. package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
  473. package/src/services/tx_collection/slow_tx_collection.ts +0 -266
@@ -19,6 +19,21 @@ export interface HasGasLimitData {
19
19
  };
20
20
  };
21
21
  }
22
+ /** Structural interface for types that carry max fee per gas data, used by {@link MaxFeePerGasValidator}. */
23
+ export interface HasMaxFeePerGasData {
24
+ txHash: {
25
+ toString(): string;
26
+ };
27
+ data: {
28
+ constants: {
29
+ txContext: {
30
+ gasSettings: {
31
+ maxFeesPerGas: GasFees;
32
+ };
33
+ };
34
+ };
35
+ };
36
+ }
22
37
  /**
23
38
  * Validates that a transaction's gas limits are within acceptable bounds.
24
39
  *
@@ -33,20 +48,48 @@ export interface HasGasLimitData {
33
48
  */
34
49
  export declare class GasLimitsValidator<T extends HasGasLimitData> implements TxValidator<T> {
35
50
  #private;
36
- constructor(bindings?: LoggerBindings);
51
+ /**
52
+ * @param maxTxL2Gas - The network admission limit on L2 gas a single tx may declare (the per-block mana
53
+ * allocation, see {@link computeNetworkTxGasLimits}). Defaults to the per-tx protocol maximum, so callers
54
+ * that pass nothing (e.g. block building) enforce only the protocol ceiling.
55
+ * @param maxTxDAGas - The network admission limit on DA gas a single tx may declare. Defaults to the
56
+ * per-tx protocol maximum {@link MAX_TX_DA_GAS}.
57
+ */
58
+ constructor(opts?: {
59
+ maxTxL2Gas?: number;
60
+ maxTxDAGas?: number;
61
+ bindings?: LoggerBindings;
62
+ });
37
63
  validateTx(tx: T): Promise<TxValidationResult>;
38
- /** Checks gas limits are >= fixed minimums and <= AVM max processable L2 gas. */
64
+ /** Checks gas limits are >= fixed minimums and <= effective max gas (L2 and DA). */
39
65
  validateGasLimit(tx: T): TxValidationResult;
40
66
  }
67
+ /**
68
+ * Validates that a transaction's max fee per gas meets the current block's gas fees.
69
+ *
70
+ * Rejects transactions whose maxFeesPerGas is below the current block's gas fees
71
+ * on either dimension (DA or L2). This is a cheap, stateless check.
72
+ *
73
+ * Generic over T so it can validate both full {@link Tx} objects and {@link TxMetaData}
74
+ * (used during pending pool migration).
75
+ *
76
+ * Used by: pending pool migration (via factory), and indirectly by {@link GasTxValidator}.
77
+ */
78
+ export declare class MaxFeePerGasValidator<T extends HasMaxFeePerGasData> implements TxValidator<T> {
79
+ #private;
80
+ constructor(gasFees: GasFees, bindings?: LoggerBindings);
81
+ validateTx(tx: T): Promise<TxValidationResult>;
82
+ /** Checks maxFeesPerGas >= current block gas fees on both dimensions. */
83
+ validateMaxFeePerGas(tx: T): TxValidationResult;
84
+ }
41
85
  /**
42
86
  * Validates that a transaction can pay its gas fees.
43
87
  *
44
88
  * Runs three checks in order:
45
89
  * 1. **Gas limits** (delegates to {@link GasLimitsValidator}) — rejects if limits are
46
90
  * 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.
91
+ * 2. **Max fee per gas** — rejects the tx if its maxFeesPerGas is below
92
+ * the current block's gas fees.
50
93
  * 3. **Fee payer balance** — reads the fee payer's FeeJuice balance from public state,
51
94
  * adds any pending claim from a setup-phase `_increase_public_balance` call, and
52
95
  * rejects if the total is less than the tx's fee limit (gasLimits * maxFeePerGas).
@@ -56,7 +99,10 @@ export declare class GasLimitsValidator<T extends HasGasLimitData> implements Tx
56
99
  export declare class GasTxValidator implements TxValidator<Tx> {
57
100
  #private;
58
101
  private bindings?;
59
- constructor(publicDataSource: PublicStateSource, feeJuiceAddress: AztecAddress, gasFees: GasFees, bindings?: LoggerBindings | undefined);
102
+ constructor(publicDataSource: PublicStateSource, feeJuiceAddress: AztecAddress, gasFees: GasFees, bindings?: LoggerBindings | undefined, opts?: {
103
+ maxTxL2Gas?: number;
104
+ maxTxDAGas?: number;
105
+ });
60
106
  validateTx(tx: Tx): Promise<TxValidationResult>;
61
107
  /**
62
108
  * Checks the fee payer has enough FeeJuice balance to cover the tx's fee limit.
@@ -64,4 +110,4 @@ export declare class GasTxValidator implements TxValidator<Tx> {
64
110
  */
65
111
  validateTxFee(tx: Tx): Promise<TxValidationResult>;
66
112
  }
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9nYXNfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RixPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUtMLEtBQUssRUFBRSxFQUNQLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssV0FBVyxFQUNqQixNQUFNLGtCQUFrQixDQUFDO0FBSTFCLG9HQUFvRztBQUNwRyxNQUFNLFdBQVcsZUFBZTtJQUM5QixNQUFNLEVBQUU7UUFBRSxRQUFRLElBQUksTUFBTSxDQUFBO0tBQUUsQ0FBQztJQUMvQixJQUFJLEVBQUU7UUFFSixTQUFTLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDcEIsU0FBUyxFQUFFO1lBQ1QsU0FBUyxFQUFFO2dCQUNULFdBQVcsRUFBRTtvQkFBRSxTQUFTLEVBQUUsR0FBRyxDQUFBO2lCQUFFLENBQUM7YUFDakMsQ0FBQztTQUNILENBQUM7S0FDSCxDQUFDO0NBQ0g7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILHFCQUFhLGtCQUFrQixDQUFDLENBQUMsU0FBUyxlQUFlLENBQUUsWUFBVyxXQUFXLENBQUMsQ0FBQyxDQUFDOztJQUdsRixZQUFZLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFFcEM7SUFFRCxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FFN0M7SUFFRCxpRkFBaUY7SUFDakYsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxrQkFBa0IsQ0F3QjFDO0NBQ0Y7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILHFCQUFhLGNBQWUsWUFBVyxXQUFXLENBQUMsRUFBRSxDQUFDOztJQVVsRCxPQUFPLENBQUMsUUFBUSxDQUFDO0lBSm5CLFlBQ0UsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQ25DLGVBQWUsRUFBRSxZQUFZLEVBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQ1IsUUFBUSxDQUFDLDRCQUFnQixFQU1sQztJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQVNwRDtJQXlCRDs7O09BR0c7SUFDVSxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0F5QjlEO0NBQ0YifQ==
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FzX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9nYXNfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU9BLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RixPQUFPLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUtMLEtBQUssRUFBRSxFQUNQLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssV0FBVyxFQUNqQixNQUFNLGtCQUFrQixDQUFDO0FBSTFCLG9HQUFvRztBQUNwRyxNQUFNLFdBQVcsZUFBZTtJQUM5QixNQUFNLEVBQUU7UUFBRSxRQUFRLElBQUksTUFBTSxDQUFBO0tBQUUsQ0FBQztJQUMvQixJQUFJLEVBQUU7UUFFSixTQUFTLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDcEIsU0FBUyxFQUFFO1lBQ1QsU0FBUyxFQUFFO2dCQUNULFdBQVcsRUFBRTtvQkFBRSxTQUFTLEVBQUUsR0FBRyxDQUFBO2lCQUFFLENBQUM7YUFDakMsQ0FBQztTQUNILENBQUM7S0FDSCxDQUFDO0NBQ0g7QUFFRCw2R0FBNkc7QUFDN0csTUFBTSxXQUFXLG1CQUFtQjtJQUNsQyxNQUFNLEVBQUU7UUFBRSxRQUFRLElBQUksTUFBTSxDQUFBO0tBQUUsQ0FBQztJQUMvQixJQUFJLEVBQUU7UUFDSixTQUFTLEVBQUU7WUFDVCxTQUFTLEVBQUU7Z0JBQ1QsV0FBVyxFQUFFO29CQUFFLGFBQWEsRUFBRSxPQUFPLENBQUE7aUJBQUUsQ0FBQzthQUN6QyxDQUFDO1NBQ0gsQ0FBQztLQUNILENBQUM7Q0FDSDtBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gscUJBQWEsa0JBQWtCLENBQUMsQ0FBQyxTQUFTLGVBQWUsQ0FBRSxZQUFXLFdBQVcsQ0FBQyxDQUFDLENBQUM7O0lBS2xGOzs7Ozs7T0FNRztJQUNILFlBQVksSUFBSSxDQUFDLEVBQUU7UUFBRSxVQUFVLENBQUMsRUFBRSxNQUFNLENBQUM7UUFBQyxVQUFVLENBQUMsRUFBRSxNQUFNLENBQUM7UUFBQyxRQUFRLENBQUMsRUFBRSxjQUFjLENBQUE7S0FBRSxFQU96RjtJQUVELFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUU3QztJQUVELG9GQUFvRjtJQUNwRixnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLGtCQUFrQixDQTJDMUM7Q0FDRjtBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxxQkFBYSxxQkFBcUIsQ0FBQyxDQUFDLFNBQVMsbUJBQW1CLENBQUUsWUFBVyxXQUFXLENBQUMsQ0FBQyxDQUFDOztJQUl6RixZQUFZLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQUd0RDtJQUVELFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUU3QztJQUVELHlFQUF5RTtJQUN6RSxvQkFBb0IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLGtCQUFrQixDQWtCOUM7Q0FDRjtBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxxQkFBYSxjQUFlLFlBQVcsV0FBVyxDQUFDLEVBQUUsQ0FBQzs7SUFXbEQsT0FBTyxDQUFDLFFBQVEsQ0FBQztJQUpuQixZQUNFLGdCQUFnQixFQUFFLGlCQUFpQixFQUNuQyxlQUFlLEVBQUUsWUFBWSxFQUM3QixPQUFPLEVBQUUsT0FBTyxFQUNSLFFBQVEsQ0FBQyw0QkFBZ0IsRUFDakMsSUFBSSxDQUFDLEVBQUU7UUFBRSxVQUFVLENBQUMsRUFBRSxNQUFNLENBQUM7UUFBQyxVQUFVLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBRSxFQU9wRDtJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQWFwRDtJQUVEOzs7T0FHRztJQUNVLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQTRCOUQ7Q0FDRiJ9
@@ -1 +1 @@
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
+ {"version":3,"file":"gas_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/gas_validator.ts"],"names":[],"mappings":"AAOA,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,6GAA6G;AAC7G,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAC;IAC/B,IAAI,EAAE;QACJ,SAAS,EAAE;YACT,SAAS,EAAE;gBACT,WAAW,EAAE;oBAAE,aAAa,EAAE,OAAO,CAAA;iBAAE,CAAC;aACzC,CAAC;SACH,CAAC;KACH,CAAC;CACH;AAED;;;;;;;;;;;GAWG;AACH,qBAAa,kBAAkB,CAAC,CAAC,SAAS,eAAe,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAKlF;;;;;;OAMG;IACH,YAAY,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;KAAE,EAOzF;IAED,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAE7C;IAED,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,EAAE,CAAC,GAAG,kBAAkB,CA2C1C;CACF;AAED;;;;;;;;;;GAUG;AACH,qBAAa,qBAAqB,CAAC,CAAC,SAAS,mBAAmB,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAIzF,YAAY,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,cAAc,EAGtD;IAED,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAE7C;IAED,yEAAyE;IACzE,oBAAoB,CAAC,EAAE,EAAE,CAAC,GAAG,kBAAkB,CAkB9C;CACF;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,cAAe,YAAW,WAAW,CAAC,EAAE,CAAC;;IAWlD,OAAO,CAAC,QAAQ,CAAC;IAJnB,YACE,gBAAgB,EAAE,iBAAiB,EACnC,eAAe,EAAE,YAAY,EAC7B,OAAO,EAAE,OAAO,EACR,QAAQ,CAAC,4BAAgB,EACjC,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,EAOpD;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAapD;IAED;;;OAGG;IACU,aAAa,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA4B9D;CACF"}
@@ -1,4 +1,4 @@
1
- import { MAX_PROCESSABLE_L2_GAS, PRIVATE_TX_L2_GAS_OVERHEAD, PUBLIC_TX_L2_GAS_OVERHEAD, TX_DA_GAS_OVERHEAD } from '@aztec/constants';
1
+ import { MAX_PROCESSABLE_L2_GAS, MAX_TX_DA_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';
@@ -17,13 +17,26 @@ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
17
17
  * Used by: pending pool migration (via factory), and indirectly by {@link GasTxValidator}.
18
18
  */ export class GasLimitsValidator {
19
19
  #log;
20
- constructor(bindings){
21
- this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
20
+ #effectiveMaxL2Gas;
21
+ #effectiveMaxDAGas;
22
+ /**
23
+ * @param maxTxL2Gas - The network admission limit on L2 gas a single tx may declare (the per-block mana
24
+ * allocation, see {@link computeNetworkTxGasLimits}). Defaults to the per-tx protocol maximum, so callers
25
+ * that pass nothing (e.g. block building) enforce only the protocol ceiling.
26
+ * @param maxTxDAGas - The network admission limit on DA gas a single tx may declare. Defaults to the
27
+ * per-tx protocol maximum {@link MAX_TX_DA_GAS}.
28
+ */ constructor(opts){
29
+ this.#log = createLogger('sequencer:tx_validator:tx_gas', opts?.bindings);
30
+ // The passed limits are network admission limits; clamp to the per-tx protocol maxima as a hard ceiling.
31
+ // MAX_TX_DA_GAS bounds DA by what a single tx can actually post to a blob; declaring more is meaningless
32
+ // and would let a tx reserve checkpoint/block DA budget during proposal building it can't use.
33
+ this.#effectiveMaxL2Gas = Math.min(MAX_PROCESSABLE_L2_GAS, opts?.maxTxL2Gas ?? Infinity);
34
+ this.#effectiveMaxDAGas = Math.min(MAX_TX_DA_GAS, opts?.maxTxDAGas ?? Infinity);
22
35
  }
23
36
  validateTx(tx) {
24
37
  return Promise.resolve(this.validateGasLimit(tx));
25
38
  }
26
- /** Checks gas limits are >= fixed minimums and <= AVM max processable L2 gas. */ validateGasLimit(tx) {
39
+ /** Checks gas limits are >= fixed minimums and <= effective max gas (L2 and DA). */ validateGasLimit(tx) {
27
40
  const gasLimits = tx.data.constants.txContext.gasSettings.gasLimits;
28
41
  const minGasLimits = new Gas(TX_DA_GAS_OVERHEAD, tx.data.forPublic ? PUBLIC_TX_L2_GAS_OVERHEAD : PRIVATE_TX_L2_GAS_OVERHEAD);
29
42
  if (minGasLimits.gtAny(gasLimits)) {
@@ -34,19 +47,71 @@ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
34
47
  return {
35
48
  result: 'invalid',
36
49
  reason: [
37
- TX_ERROR_INSUFFICIENT_GAS_LIMIT
50
+ `${TX_ERROR_INSUFFICIENT_GAS_LIMIT} (required=da:${minGasLimits.daGas},l2:${minGasLimits.l2Gas} got=da:${gasLimits.daGas},l2:${gasLimits.l2Gas})`
38
51
  ]
39
52
  };
40
53
  }
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`, {
54
+ if (gasLimits.l2Gas > this.#effectiveMaxL2Gas) {
55
+ this.#log.verbose(`Rejecting transaction due to the L2 gas limit being higher than the effective maximum`, {
43
56
  gasLimits,
44
- minGasLimits
57
+ effectiveMaxL2Gas: this.#effectiveMaxL2Gas
58
+ });
59
+ return {
60
+ result: 'invalid',
61
+ reason: [
62
+ `${TX_ERROR_GAS_LIMIT_TOO_HIGH} (l2Gas=${gasLimits.l2Gas}, max=${this.#effectiveMaxL2Gas})`
63
+ ]
64
+ };
65
+ }
66
+ if (gasLimits.daGas > this.#effectiveMaxDAGas) {
67
+ this.#log.verbose(`Rejecting transaction due to the DA gas limit being higher than the effective maximum`, {
68
+ gasLimits,
69
+ effectiveMaxDAGas: this.#effectiveMaxDAGas
70
+ });
71
+ return {
72
+ result: 'invalid',
73
+ reason: [
74
+ `${TX_ERROR_GAS_LIMIT_TOO_HIGH} (daGas=${gasLimits.daGas}, max=${this.#effectiveMaxDAGas})`
75
+ ]
76
+ };
77
+ }
78
+ return {
79
+ result: 'valid'
80
+ };
81
+ }
82
+ }
83
+ /**
84
+ * Validates that a transaction's max fee per gas meets the current block's gas fees.
85
+ *
86
+ * Rejects transactions whose maxFeesPerGas is below the current block's gas fees
87
+ * on either dimension (DA or L2). This is a cheap, stateless check.
88
+ *
89
+ * Generic over T so it can validate both full {@link Tx} objects and {@link TxMetaData}
90
+ * (used during pending pool migration).
91
+ *
92
+ * Used by: pending pool migration (via factory), and indirectly by {@link GasTxValidator}.
93
+ */ export class MaxFeePerGasValidator {
94
+ #log;
95
+ #gasFees;
96
+ constructor(gasFees, bindings){
97
+ this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
98
+ this.#gasFees = gasFees;
99
+ }
100
+ validateTx(tx) {
101
+ return Promise.resolve(this.validateMaxFeePerGas(tx));
102
+ }
103
+ /** Checks maxFeesPerGas >= current block gas fees on both dimensions. */ validateMaxFeePerGas(tx) {
104
+ const maxFeesPerGas = tx.data.constants.txContext.gasSettings.maxFeesPerGas;
105
+ const notEnoughMaxFees = maxFeesPerGas.feePerDaGas < this.#gasFees.feePerDaGas || maxFeesPerGas.feePerL2Gas < this.#gasFees.feePerL2Gas;
106
+ if (notEnoughMaxFees) {
107
+ this.#log.verbose(`Rejecting transaction ${tx.txHash.toString()} due to insufficient fee per gas`, {
108
+ txMaxFeesPerGas: maxFeesPerGas.toInspect(),
109
+ currentGasFees: this.#gasFees.toInspect()
45
110
  });
46
111
  return {
47
112
  result: 'invalid',
48
113
  reason: [
49
- TX_ERROR_GAS_LIMIT_TOO_HIGH
114
+ `${TX_ERROR_INSUFFICIENT_FEE_PER_GAS} (maxFee=da:${maxFeesPerGas.feePerDaGas},l2:${maxFeesPerGas.feePerL2Gas} required=da:${this.#gasFees.feePerDaGas},l2:${this.#gasFees.feePerL2Gas})`
50
115
  ]
51
116
  };
52
117
  }
@@ -61,9 +126,8 @@ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
61
126
  * Runs three checks in order:
62
127
  * 1. **Gas limits** (delegates to {@link GasLimitsValidator}) — rejects if limits are
63
128
  * 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.
129
+ * 2. **Max fee per gas** — rejects the tx if its maxFeesPerGas is below
130
+ * the current block's gas fees.
67
131
  * 3. **Fee payer balance** — reads the fee payer's FeeJuice balance from public state,
68
132
  * adds any pending claim from a setup-phase `_increase_public_balance` call, and
69
133
  * rejects if the total is less than the tx's fee limit (gasLimits * maxFeePerGas).
@@ -75,47 +139,30 @@ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
75
139
  #publicDataSource;
76
140
  #feeJuiceAddress;
77
141
  #gasFees;
78
- constructor(publicDataSource, feeJuiceAddress, gasFees, bindings){
142
+ #gasLimitOpts;
143
+ constructor(publicDataSource, feeJuiceAddress, gasFees, bindings, opts){
79
144
  this.bindings = bindings;
80
145
  this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
81
146
  this.#publicDataSource = publicDataSource;
82
147
  this.#feeJuiceAddress = feeJuiceAddress;
83
148
  this.#gasFees = gasFees;
149
+ this.#gasLimitOpts = opts;
84
150
  }
85
151
  async validateTx(tx) {
86
- const gasLimitValidation = new GasLimitsValidator(this.bindings).validateGasLimit(tx);
152
+ const gasLimitValidation = new GasLimitsValidator({
153
+ ...this.#gasLimitOpts,
154
+ bindings: this.bindings
155
+ }).validateGasLimit(tx);
87
156
  if (gasLimitValidation.result === 'invalid') {
88
- return Promise.resolve(gasLimitValidation);
157
+ return gasLimitValidation;
89
158
  }
90
- if (this.#shouldSkip(tx)) {
91
- return Promise.resolve({
92
- result: 'skipped',
93
- reason: [
94
- TX_ERROR_INSUFFICIENT_FEE_PER_GAS
95
- ]
96
- });
159
+ const maxFeeValidation = new MaxFeePerGasValidator(this.#gasFees, this.bindings).validateMaxFeePerGas(tx);
160
+ if (maxFeeValidation.result === 'invalid') {
161
+ return maxFeeValidation;
97
162
  }
98
163
  return await this.validateTxFee(tx);
99
164
  }
100
165
  /**
101
- * Check whether the tx's max fees are valid for the current block, and skip if not.
102
- * We skip instead of invalidating since the tx may become eligible later.
103
- * Note that circuits check max fees even if fee payer is unset, so we
104
- * keep this validation even if the tx does not pay fees.
105
- */ #shouldSkip(tx) {
106
- const gasSettings = tx.data.constants.txContext.gasSettings;
107
- // Skip the tx if its max fees are not enough for the current block's gas fees.
108
- const maxFeesPerGas = gasSettings.maxFeesPerGas;
109
- const notEnoughMaxFees = maxFeesPerGas.feePerDaGas < this.#gasFees.feePerDaGas || maxFeesPerGas.feePerL2Gas < this.#gasFees.feePerL2Gas;
110
- if (notEnoughMaxFees) {
111
- this.#log.verbose(`Skipping transaction ${tx.getTxHash().toString()} due to insufficient fee per gas`, {
112
- txMaxFeesPerGas: maxFeesPerGas.toInspect(),
113
- currentGasFees: this.#gasFees.toInspect()
114
- });
115
- }
116
- return notEnoughMaxFees;
117
- }
118
- /**
119
166
  * Checks the fee payer has enough FeeJuice balance to cover the tx's fee limit.
120
167
  * Accounts for any pending claim from a setup-phase `_increase_public_balance` call.
121
168
  */ async validateTxFee(tx) {
@@ -136,7 +183,7 @@ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
136
183
  return {
137
184
  result: 'invalid',
138
185
  reason: [
139
- TX_ERROR_INSUFFICIENT_FEE_PAYER_BALANCE
186
+ `${TX_ERROR_INSUFFICIENT_FEE_PAYER_BALANCE} (required=${feeLimit}, available=${balance})`
140
187
  ]
141
188
  };
142
189
  }
@@ -8,9 +8,12 @@ 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
16
  export * from './factory.js';
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsY0FBYyxDQUFDIn0=
17
+ export * from './tx_validation_cache.js';
18
+ export * from './cached_tx_validator.js';
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDBCQUEwQixDQUFDIn0=
@@ -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;AACpC,cAAc,cAAc,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;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC"}
@@ -8,8 +8,11 @@ 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
16
  export * from './factory.js';
17
+ export * from './tx_validation_cache.js';
18
+ export * from './cached_tx_validator.js';
@@ -12,4 +12,4 @@ export declare class MetadataTxValidator<T extends AnyTx> implements TxValidator
12
12
  }, bindings?: LoggerBindings);
13
13
  validateTx(tx: T): Promise<TxValidationResult>;
14
14
  }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWV0YWRhdGFfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvdHhfdmFsaWRhdG9yL21ldGFkYXRhX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RCxPQUFPLEVBQWUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDdkYsT0FBTyxFQUNMLEtBQUssS0FBSyxFQUtWLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssV0FBVyxFQUNqQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLHFCQUFhLG1CQUFtQixDQUFDLENBQUMsU0FBUyxLQUFLLENBQUUsWUFBVyxXQUFXLENBQUMsQ0FBQyxDQUFDOztJQUl2RSxPQUFPLENBQUMsTUFBTTtJQURoQixZQUNVLE1BQU0sRUFBRTtRQUNkLFNBQVMsRUFBRSxFQUFFLENBQUM7UUFDZCxhQUFhLEVBQUUsRUFBRSxDQUFDO1FBQ2xCLFVBQVUsRUFBRSxFQUFFLENBQUM7UUFDZixxQkFBcUIsRUFBRSxFQUFFLENBQUM7S0FDM0IsRUFDRCxRQUFRLENBQUMsRUFBRSxjQUFjLEVBRzFCO0lBRUQsVUFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBZTdDO0NBcURGIn0=
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;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,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"}
@@ -10,16 +10,16 @@ export class MetadataTxValidator {
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',
@@ -10,6 +10,26 @@ export declare class PhasesTxValidator implements TxValidator<Tx> {
10
10
  private contractsDB;
11
11
  constructor(contracts: ContractDataSource, setupAllowList: AllowedElement[], timestamp: UInt64, bindings?: LoggerBindings);
12
12
  validateTx(tx: Tx): Promise<TxValidationResult>;
13
- private isOnAllowList;
13
+ private checkAllowList;
14
14
  }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2VzX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9waGFzZXNfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFJTCxFQUFFLEVBRUYsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxXQUFXLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQscUJBQWEsaUJBQWtCLFlBQVcsV0FBVyxDQUFDLEVBQUUsQ0FBQzs7SUFNckQsT0FBTyxDQUFDLGNBQWM7SUFDdEIsT0FBTyxDQUFDLFNBQVM7SUFMbkIsT0FBTyxDQUFDLFdBQVcsQ0FBb0I7SUFFdkMsWUFDRSxTQUFTLEVBQUUsa0JBQWtCLEVBQ3JCLGNBQWMsRUFBRSxjQUFjLEVBQUUsRUFDaEMsU0FBUyxFQUFFLE1BQU0sRUFDekIsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQUkxQjtJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQXFDcEQ7WUFFYSxhQUFhO0NBaUQ1QiJ9
15
+ /** Structural interface for the allowed-setup-calls flag check. */
16
+ export interface HasAllowedSetupCallsData {
17
+ txHash: {
18
+ toString(): string;
19
+ };
20
+ allowedSetupCalls: boolean;
21
+ }
22
+ /**
23
+ * Validates that a transaction's setup-phase calls were allowed at receipt time.
24
+ *
25
+ * Checks the precomputed `allowedSetupCalls` flag on TxMetaData. The flag is
26
+ * computed by running the PhasesTxValidator on the full Tx when it first enters
27
+ * the pool. This lightweight validator is used during pending pool migration to
28
+ * reject txs whose setup calls are not on the allow list.
29
+ */
30
+ export declare class AllowedSetupCallsMetaValidator<T extends HasAllowedSetupCallsData> implements TxValidator<T> {
31
+ #private;
32
+ constructor(bindings?: LoggerBindings);
33
+ validateTx(tx: T): Promise<TxValidationResult>;
34
+ }
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhhc2VzX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9waGFzZXNfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUd2RixPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pFLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RFLE9BQU8sRUFRTCxFQUFFLEVBRUYsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxXQUFXLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQscUJBQWEsaUJBQWtCLFlBQVcsV0FBVyxDQUFDLEVBQUUsQ0FBQzs7SUFNckQsT0FBTyxDQUFDLGNBQWM7SUFDdEIsT0FBTyxDQUFDLFNBQVM7SUFMbkIsT0FBTyxDQUFDLFdBQVcsQ0FBb0I7SUFFdkMsWUFDRSxTQUFTLEVBQUUsa0JBQWtCLEVBQ3JCLGNBQWMsRUFBRSxjQUFjLEVBQUUsRUFDaEMsU0FBUyxFQUFFLE1BQU0sRUFDekIsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQUkxQjtJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQXNDcEQ7WUFHYSxjQUFjO0NBa0U3QjtBQUVELG1FQUFtRTtBQUNuRSxNQUFNLFdBQVcsd0JBQXdCO0lBQ3ZDLE1BQU0sRUFBRTtRQUFFLFFBQVEsSUFBSSxNQUFNLENBQUE7S0FBRSxDQUFDO0lBQy9CLGlCQUFpQixFQUFFLE9BQU8sQ0FBQztDQUM1QjtBQUVEOzs7Ozs7O0dBT0c7QUFDSCxxQkFBYSw4QkFBOEIsQ0FBQyxDQUFDLFNBQVMsd0JBQXdCLENBQUUsWUFBVyxXQUFXLENBQUMsQ0FBQyxDQUFDOztJQUd2RyxZQUFZLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFFcEM7SUFFRCxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FNN0M7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"phases_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/phases_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEvF,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,EACzB,QAAQ,CAAC,EAAE,cAAc,EAI1B;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;AAED,mEAAmE;AACnE,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAC;IAC/B,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,qBAAa,8BAA8B,CAAC,CAAC,SAAS,wBAAwB,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAGvG,YAAY,QAAQ,CAAC,EAAE,cAAc,EAEpC;IAED,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAM7C;CACF"}
@@ -1,6 +1,8 @@
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;
@@ -19,7 +21,7 @@ export class PhasesTxValidator {
19
21
  // which are needed for public FPC flows, but fail if the account contract hasnt been deployed yet,
20
22
  // which is what we're trying to do as part of the current txs.
21
23
  // We only need to create/revert checkpoint here because of this addNewContracts call.
22
- await this.contractsDB.addNewContracts(tx);
24
+ this.contractsDB.addNewContracts(tx);
23
25
  if (!tx.data.forPublic) {
24
26
  this.#log.debug(`Tx ${tx.getTxHash().toString()} does not contain enqueued public functions. Skipping phases validation.`);
25
27
  return {
@@ -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,84 @@ 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.fromBigIntUnsafe(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;
88
105
  }
106
+ if (entry.rejectNullMsgSender && publicCall.request.msgSender.equals(AztecAddress.fromBigIntUnsafe(NULL_MSG_SENDER_CONTRACT_ADDRESS))) {
107
+ return TX_ERROR_SETUP_NULL_MSG_SENDER;
108
+ }
109
+ return undefined;
89
110
  }
90
111
  }
91
- return false;
112
+ return TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED;
113
+ }
114
+ }
115
+ /**
116
+ * Validates that a transaction's setup-phase calls were allowed at receipt time.
117
+ *
118
+ * Checks the precomputed `allowedSetupCalls` flag on TxMetaData. The flag is
119
+ * computed by running the PhasesTxValidator on the full Tx when it first enters
120
+ * the pool. This lightweight validator is used during pending pool migration to
121
+ * reject txs whose setup calls are not on the allow list.
122
+ */ export class AllowedSetupCallsMetaValidator {
123
+ #log;
124
+ constructor(bindings){
125
+ this.#log = createLogger('sequencer:tx_validator:tx_phases_meta', bindings);
126
+ }
127
+ validateTx(tx) {
128
+ if (!tx.allowedSetupCalls) {
129
+ this.#log.verbose(`Rejecting tx ${tx.txHash} because its setup calls are not on the allow list`);
130
+ return Promise.resolve({
131
+ result: 'invalid',
132
+ reason: [
133
+ TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED
134
+ ]
135
+ });
136
+ }
137
+ return Promise.resolve({
138
+ result: 'valid'
139
+ });
92
140
  }
93
141
  }
@@ -10,7 +10,7 @@ export class TimestampTxValidator {
10
10
  validateTx(tx) {
11
11
  const expirationTimestamp = tx.data.expirationTimestamp;
12
12
  // If building block 1, we skip the expiration check. For details on why see the `validate_expiration_timestamp`
13
- // function in `noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/components/validation_requests.nr`.
13
+ // function in `noir-projects/fnd/noir-protocol-circuits/crates/rollup-lib/src/tx_base/components/private_tail_validator.nr`.
14
14
  const buildingBlock1 = this.values.blockNumber === 1;
15
15
  if (!buildingBlock1 && expirationTimestamp < this.values.timestamp) {
16
16
  if (tx.data.constants.anchorBlockHeader.globalVariables.blockNumber === 0) {
@@ -4,7 +4,8 @@ import { Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx'
4
4
  export declare class TxProofValidator implements TxValidator<Tx> {
5
5
  #private;
6
6
  private verifier;
7
+ readonly identifier: symbol;
7
8
  constructor(verifier: ClientProtocolCircuitVerifier, bindings?: LoggerBindings);
8
9
  validateTx(tx: Tx): Promise<TxValidationResult>;
9
10
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcHJvb2ZfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvdHhfdmFsaWRhdG9yL3R4X3Byb29mX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDdkYsT0FBTyxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRixPQUFPLEVBQTBCLEVBQUUsRUFBRSxLQUFLLGtCQUFrQixFQUFFLEtBQUssV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFekcscUJBQWEsZ0JBQWlCLFlBQVcsV0FBVyxDQUFDLEVBQUUsQ0FBQzs7SUFJcEQsT0FBTyxDQUFDLFFBQVE7SUFEbEIsWUFDVSxRQUFRLEVBQUUsNkJBQTZCLEVBQy9DLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFHMUI7SUFFSyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FRcEQ7Q0FDRiJ9
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHhfcHJvb2ZfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvdHhfdmFsaWRhdG9yL3R4X3Byb29mX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDdkYsT0FBTyxLQUFLLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRixPQUFPLEVBQTBCLEVBQUUsRUFBRSxLQUFLLGtCQUFrQixFQUFFLEtBQUssV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFekcscUJBQWEsZ0JBQWlCLFlBQVcsV0FBVyxDQUFDLEVBQUUsQ0FBQzs7SUFNcEQsT0FBTyxDQUFDLFFBQVE7SUFMbEIsU0FBZ0IsVUFBVSxFQUFFLE1BQU0sQ0FBOEI7SUFJaEUsWUFDVSxRQUFRLEVBQUUsNkJBQTZCLEVBQy9DLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFHMUI7SUFFSyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FRcEQ7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"tx_proof_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/tx_proof_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAA0B,EAAE,EAAE,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEzG,qBAAa,gBAAiB,YAAW,WAAW,CAAC,EAAE,CAAC;;IAIpD,OAAO,CAAC,QAAQ;IADlB,YACU,QAAQ,EAAE,6BAA6B,EAC/C,QAAQ,CAAC,EAAE,cAAc,EAG1B;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAQpD;CACF"}
1
+ {"version":3,"file":"tx_proof_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/tx_proof_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAA0B,EAAE,EAAE,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEzG,qBAAa,gBAAiB,YAAW,WAAW,CAAC,EAAE,CAAC;;IAMpD,OAAO,CAAC,QAAQ;IALlB,SAAgB,UAAU,EAAE,MAAM,CAA8B;IAIhE,YACU,QAAQ,EAAE,6BAA6B,EAC/C,QAAQ,CAAC,EAAE,cAAc,EAG1B;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAQpD;CACF"}
@@ -2,9 +2,11 @@ import { createLogger } from '@aztec/foundation/log';
2
2
  import { TX_ERROR_INVALID_PROOF } from '@aztec/stdlib/tx';
3
3
  export class TxProofValidator {
4
4
  verifier;
5
+ identifier;
5
6
  #log;
6
7
  constructor(verifier, bindings){
7
8
  this.verifier = verifier;
9
+ this.identifier = Symbol('TxProofValidator');
8
10
  this.#log = createLogger('p2p:tx_validator:proof', bindings);
9
11
  }
10
12
  async validateTx(tx) {