@aztec-labs/p2p 6.0.0-nightly.20260829

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 (607) hide show
  1. package/README.md +134 -0
  2. package/dest/bootstrap/bootstrap.d.ts +39 -0
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -0
  4. package/dest/bootstrap/bootstrap.js +152 -0
  5. package/dest/client/factory.d.ts +32 -0
  6. package/dest/client/factory.d.ts.map +1 -0
  7. package/dest/client/factory.js +125 -0
  8. package/dest/client/index.d.ts +4 -0
  9. package/dest/client/index.d.ts.map +1 -0
  10. package/dest/client/index.js +3 -0
  11. package/dest/client/interface.d.ts +223 -0
  12. package/dest/client/interface.d.ts.map +1 -0
  13. package/dest/client/interface.js +9 -0
  14. package/dest/client/p2p_client.d.ts +202 -0
  15. package/dest/client/p2p_client.d.ts.map +1 -0
  16. package/dest/client/p2p_client.js +1051 -0
  17. package/dest/config.d.ts +295 -0
  18. package/dest/config.d.ts.map +1 -0
  19. package/dest/config.js +458 -0
  20. package/dest/enr/generate-enr.d.ts +17 -0
  21. package/dest/enr/generate-enr.d.ts.map +1 -0
  22. package/dest/enr/generate-enr.js +52 -0
  23. package/dest/enr/index.d.ts +2 -0
  24. package/dest/enr/index.d.ts.map +1 -0
  25. package/dest/enr/index.js +1 -0
  26. package/dest/errors/attestation-pool.error.d.ts +7 -0
  27. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  28. package/dest/errors/attestation-pool.error.js +12 -0
  29. package/dest/errors/p2p-service.error.d.ts +9 -0
  30. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  31. package/dest/errors/p2p-service.error.js +10 -0
  32. package/dest/errors/reqresp.error.d.ts +21 -0
  33. package/dest/errors/reqresp.error.d.ts.map +1 -0
  34. package/dest/errors/reqresp.error.js +23 -0
  35. package/dest/errors/tx-pool.error.d.ts +8 -0
  36. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  37. package/dest/errors/tx-pool.error.js +9 -0
  38. package/dest/index.d.ts +11 -0
  39. package/dest/index.d.ts.map +1 -0
  40. package/dest/index.js +9 -0
  41. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +194 -0
  42. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -0
  43. package/dest/mem_pools/attestation_pool/attestation_pool.js +521 -0
  44. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +3 -0
  45. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -0
  46. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +745 -0
  47. package/dest/mem_pools/attestation_pool/index.d.ts +2 -0
  48. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -0
  49. package/dest/mem_pools/attestation_pool/index.js +1 -0
  50. package/dest/mem_pools/attestation_pool/mocks.d.ts +242 -0
  51. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -0
  52. package/dest/mem_pools/attestation_pool/mocks.js +33 -0
  53. package/dest/mem_pools/index.d.ts +4 -0
  54. package/dest/mem_pools/index.d.ts.map +1 -0
  55. package/dest/mem_pools/index.js +1 -0
  56. package/dest/mem_pools/instrumentation.d.ts +41 -0
  57. package/dest/mem_pools/instrumentation.d.ts.map +1 -0
  58. package/dest/mem_pools/instrumentation.js +120 -0
  59. package/dest/mem_pools/interface.d.ts +10 -0
  60. package/dest/mem_pools/interface.d.ts.map +1 -0
  61. package/dest/mem_pools/interface.js +3 -0
  62. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  63. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  64. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  65. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +48 -0
  66. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  67. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +112 -0
  68. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  69. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  70. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  71. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  72. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  73. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  74. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  75. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  76. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +94 -0
  77. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  78. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +99 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +11 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  82. package/dest/mem_pools/tx_pool_v2/eviction/index.js +12 -0
  83. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  84. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  85. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +64 -0
  86. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  87. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  88. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  89. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  90. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  91. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +64 -0
  92. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  93. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  94. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +92 -0
  95. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  96. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  97. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +79 -0
  98. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  99. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  100. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  101. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  102. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  103. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  104. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  105. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  106. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  107. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +25 -0
  108. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  109. package/dest/mem_pools/tx_pool_v2/instrumentation.js +67 -0
  110. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +243 -0
  111. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  112. package/dest/mem_pools/tx_pool_v2/interfaces.js +11 -0
  113. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +137 -0
  114. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  115. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +223 -0
  116. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  117. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  118. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  119. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +122 -0
  120. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  121. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +368 -0
  122. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +75 -0
  123. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  124. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +218 -0
  125. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +122 -0
  126. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  127. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +1039 -0
  128. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +17 -0
  129. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -0
  130. package/dest/msg_validators/attestation_validator/attestation_validator.js +111 -0
  131. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +24 -0
  132. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  133. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +75 -0
  134. package/dest/msg_validators/attestation_validator/index.d.ts +3 -0
  135. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -0
  136. package/dest/msg_validators/attestation_validator/index.js +2 -0
  137. package/dest/msg_validators/index.d.ts +4 -0
  138. package/dest/msg_validators/index.d.ts.map +1 -0
  139. package/dest/msg_validators/index.js +3 -0
  140. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +10 -0
  141. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -0
  142. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.js +36 -0
  143. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +16 -0
  144. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  145. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +14 -0
  146. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +16 -0
  147. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  148. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +26 -0
  149. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  150. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  151. package/dest/msg_validators/proposal_validator/index.js +3 -0
  152. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +40 -0
  153. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  154. package/dest/msg_validators/proposal_validator/proposal_validator.js +186 -0
  155. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +7 -0
  156. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -0
  157. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +25 -0
  158. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +4 -0
  159. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -0
  160. package/dest/msg_validators/tx_validator/allowed_public_setup.js +31 -0
  161. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  162. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  163. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  164. package/dest/msg_validators/tx_validator/archive_cache.d.ts +14 -0
  165. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -0
  166. package/dest/msg_validators/tx_validator/archive_cache.js +22 -0
  167. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +25 -0
  168. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -0
  169. package/dest/msg_validators/tx_validator/block_header_validator.js +27 -0
  170. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  171. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  172. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  173. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  174. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  175. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  176. package/dest/msg_validators/tx_validator/data_validator.d.ts +9 -0
  177. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -0
  178. package/dest/msg_validators/tx_validator/data_validator.js +114 -0
  179. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +21 -0
  180. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -0
  181. package/dest/msg_validators/tx_validator/double_spend_validator.js +36 -0
  182. package/dest/msg_validators/tx_validator/factory.d.ts +148 -0
  183. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
  184. package/dest/msg_validators/tx_validator/factory.js +302 -0
  185. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  186. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  187. package/dest/msg_validators/tx_validator/fee_payer_balance.js +24 -0
  188. package/dest/msg_validators/tx_validator/gas_limits_validator.d.ts +73 -0
  189. package/dest/msg_validators/tx_validator/gas_limits_validator.d.ts.map +1 -0
  190. package/dest/msg_validators/tx_validator/gas_limits_validator.js +107 -0
  191. package/dest/msg_validators/tx_validator/gas_validator.d.ts +65 -0
  192. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -0
  193. package/dest/msg_validators/tx_validator/gas_validator.js +107 -0
  194. package/dest/msg_validators/tx_validator/index.d.ts +20 -0
  195. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -0
  196. package/dest/msg_validators/tx_validator/index.js +19 -0
  197. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +15 -0
  198. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -0
  199. package/dest/msg_validators/tx_validator/metadata_validator.js +63 -0
  200. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  201. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  202. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  203. package/dest/msg_validators/tx_validator/phases_validator.d.ts +35 -0
  204. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -0
  205. package/dest/msg_validators/tx_validator/phases_validator.js +141 -0
  206. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  207. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  208. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  209. package/dest/msg_validators/tx_validator/test_utils.d.ts +17 -0
  210. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -0
  211. package/dest/msg_validators/tx_validator/test_utils.js +22 -0
  212. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +30 -0
  213. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -0
  214. package/dest/msg_validators/tx_validator/timestamp_validator.js +32 -0
  215. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +9 -0
  216. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -0
  217. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +24 -0
  218. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +11 -0
  219. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -0
  220. package/dest/msg_validators/tx_validator/tx_proof_validator.js +28 -0
  221. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  222. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  223. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  224. package/dest/services/data_store.d.ts +27 -0
  225. package/dest/services/data_store.d.ts.map +1 -0
  226. package/dest/services/data_store.js +192 -0
  227. package/dest/services/discv5/discV5_service.d.ts +54 -0
  228. package/dest/services/discv5/discV5_service.d.ts.map +1 -0
  229. package/dest/services/discv5/discV5_service.js +337 -0
  230. package/dest/services/discv5/persisted_enr_store.d.ts +38 -0
  231. package/dest/services/discv5/persisted_enr_store.d.ts.map +1 -0
  232. package/dest/services/discv5/persisted_enr_store.js +145 -0
  233. package/dest/services/dummy_service.d.ts +150 -0
  234. package/dest/services/dummy_service.d.ts.map +1 -0
  235. package/dest/services/dummy_service.js +228 -0
  236. package/dest/services/encoding.d.ts +67 -0
  237. package/dest/services/encoding.d.ts.map +1 -0
  238. package/dest/services/encoding.js +152 -0
  239. package/dest/services/gossipsub/index.d.ts +3 -0
  240. package/dest/services/gossipsub/index.d.ts.map +1 -0
  241. package/dest/services/gossipsub/index.js +2 -0
  242. package/dest/services/gossipsub/scoring.d.ts +25 -0
  243. package/dest/services/gossipsub/scoring.d.ts.map +1 -0
  244. package/dest/services/gossipsub/scoring.js +27 -0
  245. package/dest/services/gossipsub/topic_score_params.d.ts +167 -0
  246. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  247. package/dest/services/gossipsub/topic_score_params.js +336 -0
  248. package/dest/services/index.d.ts +8 -0
  249. package/dest/services/index.d.ts.map +1 -0
  250. package/dest/services/index.js +7 -0
  251. package/dest/services/libp2p/instrumentation.d.ts +25 -0
  252. package/dest/services/libp2p/instrumentation.d.ts.map +1 -0
  253. package/dest/services/libp2p/instrumentation.js +143 -0
  254. package/dest/services/libp2p/libp2p_service.d.ts +250 -0
  255. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -0
  256. package/dest/services/libp2p/libp2p_service.js +1983 -0
  257. package/dest/services/peer-manager/interface.d.ts +23 -0
  258. package/dest/services/peer-manager/interface.d.ts.map +1 -0
  259. package/dest/services/peer-manager/interface.js +1 -0
  260. package/dest/services/peer-manager/metrics.d.ts +23 -0
  261. package/dest/services/peer-manager/metrics.d.ts.map +1 -0
  262. package/dest/services/peer-manager/metrics.js +71 -0
  263. package/dest/services/peer-manager/peer_manager.d.ts +202 -0
  264. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -0
  265. package/dest/services/peer-manager/peer_manager.js +1015 -0
  266. package/dest/services/peer-manager/peer_scoring.d.ts +65 -0
  267. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -0
  268. package/dest/services/peer-manager/peer_scoring.js +239 -0
  269. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +44 -0
  270. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  271. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +534 -0
  272. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  273. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  274. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  275. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  276. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  277. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  278. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +35 -0
  279. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  280. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +136 -0
  281. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +62 -0
  282. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  283. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +176 -0
  284. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +11 -0
  285. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  286. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +7 -0
  287. package/dest/services/reqresp/config.d.ts +30 -0
  288. package/dest/services/reqresp/config.d.ts.map +1 -0
  289. package/dest/services/reqresp/config.js +45 -0
  290. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +76 -0
  291. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -0
  292. package/dest/services/reqresp/connection-sampler/connection_sampler.js +251 -0
  293. package/dest/services/reqresp/constants.d.ts +12 -0
  294. package/dest/services/reqresp/constants.d.ts.map +1 -0
  295. package/dest/services/reqresp/constants.js +7 -0
  296. package/dest/services/reqresp/index.d.ts +7 -0
  297. package/dest/services/reqresp/index.d.ts.map +1 -0
  298. package/dest/services/reqresp/index.js +5 -0
  299. package/dest/services/reqresp/interface.d.ts +174 -0
  300. package/dest/services/reqresp/interface.d.ts.map +1 -0
  301. package/dest/services/reqresp/interface.js +107 -0
  302. package/dest/services/reqresp/metrics.d.ts +16 -0
  303. package/dest/services/reqresp/metrics.d.ts.map +1 -0
  304. package/dest/services/reqresp/metrics.js +50 -0
  305. package/dest/services/reqresp/protocols/auth.d.ts +43 -0
  306. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -0
  307. package/dest/services/reqresp/protocols/auth.js +71 -0
  308. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +35 -0
  309. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -0
  310. package/dest/services/reqresp/protocols/block_txs/bitvector.js +88 -0
  311. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +13 -0
  312. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -0
  313. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +60 -0
  314. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +75 -0
  315. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -0
  316. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +139 -0
  317. package/dest/services/reqresp/protocols/block_txs/index.d.ts +4 -0
  318. package/dest/services/reqresp/protocols/block_txs/index.d.ts.map +1 -0
  319. package/dest/services/reqresp/protocols/block_txs/index.js +3 -0
  320. package/dest/services/reqresp/protocols/goodbye.d.ts +49 -0
  321. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -0
  322. package/dest/services/reqresp/protocols/goodbye.js +87 -0
  323. package/dest/services/reqresp/protocols/index.d.ts +10 -0
  324. package/dest/services/reqresp/protocols/index.d.ts.map +1 -0
  325. package/dest/services/reqresp/protocols/index.js +8 -0
  326. package/dest/services/reqresp/protocols/ping.d.ts +7 -0
  327. package/dest/services/reqresp/protocols/ping.d.ts.map +1 -0
  328. package/dest/services/reqresp/protocols/ping.js +7 -0
  329. package/dest/services/reqresp/protocols/status.d.ts +42 -0
  330. package/dest/services/reqresp/protocols/status.d.ts.map +1 -0
  331. package/dest/services/reqresp/protocols/status.js +78 -0
  332. package/dest/services/reqresp/protocols/tx.d.ts +29 -0
  333. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -0
  334. package/dest/services/reqresp/protocols/tx.js +66 -0
  335. package/dest/services/reqresp/rate-limiter/index.d.ts +2 -0
  336. package/dest/services/reqresp/rate-limiter/index.d.ts.map +1 -0
  337. package/dest/services/reqresp/rate-limiter/index.js +1 -0
  338. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +105 -0
  339. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -0
  340. package/dest/services/reqresp/rate-limiter/rate_limiter.js +194 -0
  341. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +3 -0
  342. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -0
  343. package/dest/services/reqresp/rate-limiter/rate_limits.js +64 -0
  344. package/dest/services/reqresp/reqresp.d.ts +107 -0
  345. package/dest/services/reqresp/reqresp.d.ts.map +1 -0
  346. package/dest/services/reqresp/reqresp.js +887 -0
  347. package/dest/services/reqresp/status.d.ts +37 -0
  348. package/dest/services/reqresp/status.d.ts.map +1 -0
  349. package/dest/services/reqresp/status.js +58 -0
  350. package/dest/services/service.d.ts +168 -0
  351. package/dest/services/service.d.ts.map +1 -0
  352. package/dest/services/service.js +5 -0
  353. package/dest/services/tx_collection/config.d.ts +25 -0
  354. package/dest/services/tx_collection/config.d.ts.map +1 -0
  355. package/dest/services/tx_collection/config.js +59 -0
  356. package/dest/services/tx_collection/file_store_tx_collection.d.ts +37 -0
  357. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  358. package/dest/services/tx_collection/file_store_tx_collection.js +127 -0
  359. package/dest/services/tx_collection/file_store_tx_source.d.ts +38 -0
  360. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  361. package/dest/services/tx_collection/file_store_tx_source.js +100 -0
  362. package/dest/services/tx_collection/index.d.ts +4 -0
  363. package/dest/services/tx_collection/index.d.ts.map +1 -0
  364. package/dest/services/tx_collection/index.js +3 -0
  365. package/dest/services/tx_collection/instrumentation.d.ts +10 -0
  366. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -0
  367. package/dest/services/tx_collection/instrumentation.js +30 -0
  368. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  369. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  370. package/dest/services/tx_collection/request_tracker.js +84 -0
  371. package/dest/services/tx_collection/tx_collection.d.ts +104 -0
  372. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -0
  373. package/dest/services/tx_collection/tx_collection.js +356 -0
  374. package/dest/services/tx_collection/tx_collection_sink.d.ts +40 -0
  375. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -0
  376. package/dest/services/tx_collection/tx_collection_sink.js +108 -0
  377. package/dest/services/tx_collection/tx_source.d.ts +24 -0
  378. package/dest/services/tx_collection/tx_source.d.ts.map +1 -0
  379. package/dest/services/tx_collection/tx_source.js +56 -0
  380. package/dest/services/tx_file_store/config.d.ts +16 -0
  381. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  382. package/dest/services/tx_file_store/config.js +22 -0
  383. package/dest/services/tx_file_store/index.d.ts +4 -0
  384. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  385. package/dest/services/tx_file_store/index.js +3 -0
  386. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  387. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  388. package/dest/services/tx_file_store/instrumentation.js +29 -0
  389. package/dest/services/tx_file_store/tx_file_store.d.ts +46 -0
  390. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  391. package/dest/services/tx_file_store/tx_file_store.js +142 -0
  392. package/dest/services/tx_provider.d.ts +53 -0
  393. package/dest/services/tx_provider.d.ts.map +1 -0
  394. package/dest/services/tx_provider.js +223 -0
  395. package/dest/services/tx_provider_instrumentation.d.ts +16 -0
  396. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -0
  397. package/dest/services/tx_provider_instrumentation.js +34 -0
  398. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +7 -0
  399. package/dest/test-helpers/generate-peer-id-private-keys.d.ts.map +1 -0
  400. package/dest/test-helpers/generate-peer-id-private-keys.js +13 -0
  401. package/dest/test-helpers/get-ports.d.ts +7 -0
  402. package/dest/test-helpers/get-ports.d.ts.map +1 -0
  403. package/dest/test-helpers/get-ports.js +8 -0
  404. package/dest/test-helpers/index.d.ts +9 -0
  405. package/dest/test-helpers/index.d.ts.map +1 -0
  406. package/dest/test-helpers/index.js +8 -0
  407. package/dest/test-helpers/make-enrs.d.ts +16 -0
  408. package/dest/test-helpers/make-enrs.d.ts.map +1 -0
  409. package/dest/test-helpers/make-enrs.js +31 -0
  410. package/dest/test-helpers/make-test-p2p-clients.d.ts +63 -0
  411. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -0
  412. package/dest/test-helpers/make-test-p2p-clients.js +140 -0
  413. package/dest/test-helpers/mock-pubsub.d.ts +109 -0
  414. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -0
  415. package/dest/test-helpers/mock-pubsub.js +244 -0
  416. package/dest/test-helpers/mock-tx-helpers.d.ts +12 -0
  417. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -0
  418. package/dest/test-helpers/mock-tx-helpers.js +19 -0
  419. package/dest/test-helpers/reqresp-nodes.d.ts +68 -0
  420. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -0
  421. package/dest/test-helpers/reqresp-nodes.js +240 -0
  422. package/dest/test-helpers/test_tx_provider.d.ts +42 -0
  423. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  424. package/dest/test-helpers/test_tx_provider.js +44 -0
  425. package/dest/test-helpers/testbench-utils.d.ts +164 -0
  426. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  427. package/dest/test-helpers/testbench-utils.js +401 -0
  428. package/dest/testbench/p2p_client_testbench_worker.d.ts +26 -0
  429. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -0
  430. package/dest/testbench/p2p_client_testbench_worker.js +364 -0
  431. package/dest/testbench/parse_log_file.d.ts +2 -0
  432. package/dest/testbench/parse_log_file.d.ts.map +1 -0
  433. package/dest/testbench/parse_log_file.js +131 -0
  434. package/dest/testbench/testbench.d.ts +2 -0
  435. package/dest/testbench/testbench.d.ts.map +1 -0
  436. package/dest/testbench/testbench.js +62 -0
  437. package/dest/testbench/worker_client_manager.d.ts +102 -0
  438. package/dest/testbench/worker_client_manager.d.ts.map +1 -0
  439. package/dest/testbench/worker_client_manager.js +492 -0
  440. package/dest/types/index.d.ts +34 -0
  441. package/dest/types/index.d.ts.map +1 -0
  442. package/dest/types/index.js +30 -0
  443. package/dest/util.d.ts +66 -0
  444. package/dest/util.d.ts.map +1 -0
  445. package/dest/util.js +167 -0
  446. package/dest/versioning.d.ts +9 -0
  447. package/dest/versioning.d.ts.map +1 -0
  448. package/dest/versioning.js +17 -0
  449. package/package.json +131 -0
  450. package/src/bootstrap/bootstrap.ts +178 -0
  451. package/src/client/factory.ts +282 -0
  452. package/src/client/index.ts +3 -0
  453. package/src/client/interface.ts +264 -0
  454. package/src/client/p2p_client.ts +846 -0
  455. package/src/client/test/p2p_client.batch_tx_requester.bench.README.md +197 -0
  456. package/src/config.ts +787 -0
  457. package/src/enr/generate-enr.ts +71 -0
  458. package/src/enr/index.ts +1 -0
  459. package/src/errors/attestation-pool.error.ts +13 -0
  460. package/src/errors/p2p-service.error.ts +11 -0
  461. package/src/errors/reqresp.error.ts +29 -0
  462. package/src/errors/tx-pool.error.ts +12 -0
  463. package/src/index.ts +11 -0
  464. package/src/mem_pools/attestation_pool/attestation_pool.ts +648 -0
  465. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +896 -0
  466. package/src/mem_pools/attestation_pool/index.ts +9 -0
  467. package/src/mem_pools/attestation_pool/mocks.ts +56 -0
  468. package/src/mem_pools/index.ts +3 -0
  469. package/src/mem_pools/instrumentation.ts +160 -0
  470. package/src/mem_pools/interface.ts +10 -0
  471. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  472. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  473. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +130 -0
  474. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  475. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  476. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +120 -0
  477. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +126 -0
  478. package/src/mem_pools/tx_pool_v2/eviction/index.ts +28 -0
  479. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +67 -0
  480. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  481. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +72 -0
  482. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +99 -0
  483. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +90 -0
  484. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  485. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  486. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  487. package/src/mem_pools/tx_pool_v2/instrumentation.ts +96 -0
  488. package/src/mem_pools/tx_pool_v2/interfaces.ts +274 -0
  489. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +349 -0
  490. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  491. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +465 -0
  492. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +300 -0
  493. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1242 -0
  494. package/src/msg_validators/attestation_validator/README.md +49 -0
  495. package/src/msg_validators/attestation_validator/attestation_validator.ts +116 -0
  496. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +107 -0
  497. package/src/msg_validators/attestation_validator/index.ts +2 -0
  498. package/src/msg_validators/index.ts +3 -0
  499. package/src/msg_validators/msg_seen_validator/msg_seen_validator.ts +36 -0
  500. package/src/msg_validators/proposal_validator/README.md +123 -0
  501. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +37 -0
  502. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +49 -0
  503. package/src/msg_validators/proposal_validator/index.ts +3 -0
  504. package/src/msg_validators/proposal_validator/proposal_validator.ts +198 -0
  505. package/src/msg_validators/tx_validator/README.md +137 -0
  506. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +24 -0
  507. package/src/msg_validators/tx_validator/allowed_public_setup.ts +30 -0
  508. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  509. package/src/msg_validators/tx_validator/archive_cache.ts +28 -0
  510. package/src/msg_validators/tx_validator/block_header_validator.ts +38 -0
  511. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  512. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  513. package/src/msg_validators/tx_validator/data_validator.ts +173 -0
  514. package/src/msg_validators/tx_validator/double_spend_validator.ts +46 -0
  515. package/src/msg_validators/tx_validator/factory.ts +490 -0
  516. package/src/msg_validators/tx_validator/fee_payer_balance.ts +44 -0
  517. package/src/msg_validators/tx_validator/gas_limits_validator.ts +148 -0
  518. package/src/msg_validators/tx_validator/gas_validator.ts +149 -0
  519. package/src/msg_validators/tx_validator/index.ts +19 -0
  520. package/src/msg_validators/tx_validator/metadata_validator.ts +104 -0
  521. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  522. package/src/msg_validators/tx_validator/phases_validator.ts +173 -0
  523. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  524. package/src/msg_validators/tx_validator/test_utils.ts +43 -0
  525. package/src/msg_validators/tx_validator/timestamp_validator.ts +61 -0
  526. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +22 -0
  527. package/src/msg_validators/tx_validator/tx_proof_validator.ts +26 -0
  528. package/src/msg_validators/tx_validator/tx_validation_cache.ts +100 -0
  529. package/src/services/data_store.ts +229 -0
  530. package/src/services/discv5/discV5_service.ts +413 -0
  531. package/src/services/discv5/persisted_enr_store.ts +157 -0
  532. package/src/services/dummy_service.ts +320 -0
  533. package/src/services/encoding.ts +170 -0
  534. package/src/services/gossipsub/README.md +663 -0
  535. package/src/services/gossipsub/index.ts +2 -0
  536. package/src/services/gossipsub/scoring.ts +37 -0
  537. package/src/services/gossipsub/topic_score_params.ts +477 -0
  538. package/src/services/index.ts +7 -0
  539. package/src/services/libp2p/instrumentation.ts +147 -0
  540. package/src/services/libp2p/libp2p_service.ts +1972 -0
  541. package/src/services/peer-manager/interface.ts +28 -0
  542. package/src/services/peer-manager/metrics.ts +90 -0
  543. package/src/services/peer-manager/peer_manager.ts +1221 -0
  544. package/src/services/peer-manager/peer_scoring.ts +265 -0
  545. package/src/services/reqresp/README.md +194 -0
  546. package/src/services/reqresp/batch-tx-requester/README.md +344 -0
  547. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +659 -0
  548. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  549. package/src/services/reqresp/batch-tx-requester/interface.ts +60 -0
  550. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +167 -0
  551. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +248 -0
  552. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +24 -0
  553. package/src/services/reqresp/config.ts +69 -0
  554. package/src/services/reqresp/connection-sampler/connection_sampler.ts +287 -0
  555. package/src/services/reqresp/constants.ts +14 -0
  556. package/src/services/reqresp/index.ts +6 -0
  557. package/src/services/reqresp/interface.ts +241 -0
  558. package/src/services/reqresp/metrics.ts +68 -0
  559. package/src/services/reqresp/protocols/auth.ts +83 -0
  560. package/src/services/reqresp/protocols/block_txs/bitvector.ts +107 -0
  561. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +79 -0
  562. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +170 -0
  563. package/src/services/reqresp/protocols/block_txs/index.ts +3 -0
  564. package/src/services/reqresp/protocols/goodbye.ts +102 -0
  565. package/src/services/reqresp/protocols/index.ts +9 -0
  566. package/src/services/reqresp/protocols/ping.ts +8 -0
  567. package/src/services/reqresp/protocols/status.ts +123 -0
  568. package/src/services/reqresp/protocols/tx.ts +76 -0
  569. package/src/services/reqresp/rate-limiter/index.ts +1 -0
  570. package/src/services/reqresp/rate-limiter/rate_limiter.ts +240 -0
  571. package/src/services/reqresp/rate-limiter/rate_limits.ts +65 -0
  572. package/src/services/reqresp/reqresp.ts +675 -0
  573. package/src/services/reqresp/status.ts +68 -0
  574. package/src/services/service.ts +219 -0
  575. package/src/services/tx_collection/config.ts +89 -0
  576. package/src/services/tx_collection/file_store_tx_collection.ts +153 -0
  577. package/src/services/tx_collection/file_store_tx_source.ts +129 -0
  578. package/src/services/tx_collection/index.ts +3 -0
  579. package/src/services/tx_collection/instrumentation.ts +35 -0
  580. package/src/services/tx_collection/request_tracker.ts +127 -0
  581. package/src/services/tx_collection/tx_collection.ts +467 -0
  582. package/src/services/tx_collection/tx_collection_sink.ts +124 -0
  583. package/src/services/tx_collection/tx_source.ts +61 -0
  584. package/src/services/tx_file_store/config.ts +37 -0
  585. package/src/services/tx_file_store/index.ts +3 -0
  586. package/src/services/tx_file_store/instrumentation.ts +42 -0
  587. package/src/services/tx_file_store/tx_file_store.ts +163 -0
  588. package/src/services/tx_provider.ts +237 -0
  589. package/src/services/tx_provider_instrumentation.ts +54 -0
  590. package/src/test-helpers/generate-peer-id-private-keys.ts +15 -0
  591. package/src/test-helpers/get-ports.ts +8 -0
  592. package/src/test-helpers/index.ts +8 -0
  593. package/src/test-helpers/make-enrs.ts +42 -0
  594. package/src/test-helpers/make-test-p2p-clients.ts +213 -0
  595. package/src/test-helpers/mock-pubsub.ts +325 -0
  596. package/src/test-helpers/mock-tx-helpers.ts +24 -0
  597. package/src/test-helpers/reqresp-nodes.ts +327 -0
  598. package/src/test-helpers/test_tx_provider.ts +68 -0
  599. package/src/test-helpers/testbench-utils.ts +465 -0
  600. package/src/testbench/README.md +20 -0
  601. package/src/testbench/p2p_client_testbench_worker.ts +553 -0
  602. package/src/testbench/parse_log_file.ts +174 -0
  603. package/src/testbench/testbench.ts +66 -0
  604. package/src/testbench/worker_client_manager.ts +621 -0
  605. package/src/types/index.ts +38 -0
  606. package/src/util.ts +230 -0
  607. package/src/versioning.ts +26 -0
@@ -0,0 +1,490 @@
1
+ /**
2
+ * Transaction validator factories for each tx entry point.
3
+ *
4
+ * Unsolicited transactions (gossip and RPC) are fully validated before acceptance.
5
+ * Transactions received via req/resp or block proposals are only checked for
6
+ * well-formedness because we must include them for block re-execution — they may
7
+ * ultimately be invalid, which is caught during block building and reported as
8
+ * part of block validation/attestation. See the README in this directory for the
9
+ * full validation strategy.
10
+ *
11
+ * 1. **Gossip** — full validation in two stages with a pool pre-check in between.
12
+ * Stage 1 (fast): metadata, data, timestamps, double-spend, gas, phases, block header.
13
+ * Pool pre-check: `canAddPendingTx` — skips proof verification if pool would reject.
14
+ * Stage 2 (slow): proof verification.
15
+ * Orchestrated by `handleGossipedTx` in `libp2p_service.ts`.
16
+ *
17
+ * 2. **JSON-RPC** — full validation including all state-dependent checks.
18
+ * Proof verification and fee enforcement are configurable for testing purposes.
19
+ *
20
+ * 3. **Req/resp & block proposals** — well-formedness checks only (metadata, size,
21
+ * data, proof). Stored for re-execution; validity against state is not checked here.
22
+ *
23
+ * 4. **Block building** — re-validates against current state immediately before
24
+ * sequencing. Catches invalid txs that entered via req/resp or block proposals.
25
+ * Proof and data checks are skipped since they were verified on entry.
26
+ *
27
+ * 5. **Pending pool migration** — when unmined txs (e.g. from req/resp or block
28
+ * proposals) are migrated to the pending pool, the pool runs the state-dependent
29
+ * checks they missed: double-spend, block header, gas limits, and timestamps.
30
+ * This runs on every tx potentially entering the pending pool.
31
+ */
32
+ import { BlockNumber } from '@aztec-labs/foundation/branded-types';
33
+ import { Fr } from '@aztec-labs/foundation/curves/bn254';
34
+ import type { LoggerBindings } from '@aztec-labs/foundation/log';
35
+ import { getVKTreeRoot } from '@aztec-labs/noir-protocol-circuits-types/vk-tree';
36
+ import { ProtocolContractAddress, protocolContractsHash } from '@aztec-labs/protocol-contracts';
37
+ import type { BlockHash } from '@aztec-labs/stdlib/block';
38
+ import type { ContractDataSource } from '@aztec-labs/stdlib/contract';
39
+ import type { GasFees } from '@aztec-labs/stdlib/gas';
40
+ import type {
41
+ AllowedElement,
42
+ ClientProtocolCircuitVerifier,
43
+ MerkleTreeReadOperations,
44
+ PublicProcessorValidator,
45
+ WorldStateSynchronizer,
46
+ } from '@aztec-labs/stdlib/interfaces/server';
47
+ import { PeerErrorSeverity } from '@aztec-labs/stdlib/p2p';
48
+ import { DatabasePublicStateSource, MerkleTreeId, type PublicStateSource } from '@aztec-labs/stdlib/trees';
49
+ import type { GlobalVariables, Tx, TxValidationResult, TxValidator } from '@aztec-labs/stdlib/tx';
50
+ import type { UInt64 } from '@aztec-labs/stdlib/types';
51
+
52
+ import type { TxMetaData } from '../../mem_pools/tx_pool_v2/tx_metadata.js';
53
+ import { AggregateTxValidator } from './aggregate_tx_validator.js';
54
+ import { ArchiveCache } from './archive_cache.js';
55
+ import { type ArchiveSource, BlockHeaderTxValidator } from './block_header_validator.js';
56
+ import { CachedTxValidator } from './cached_tx_validator.js';
57
+ import { ContractInstanceTxValidator } from './contract_instance_validator.js';
58
+ import { DataTxValidator } from './data_validator.js';
59
+ import { DoubleSpendTxValidator, type NullifierSource } from './double_spend_validator.js';
60
+ import { MaxGasLimitsValidator, MinGasLimitsValidator } from './gas_limits_validator.js';
61
+ import { GasTxValidator, MaxFeePerGasValidator } from './gas_validator.js';
62
+ import { MetadataTxValidator } from './metadata_validator.js';
63
+ import { NullifierCache } from './nullifier_cache.js';
64
+ import { AllowedSetupCallsMetaValidator, PhasesTxValidator } from './phases_validator.js';
65
+ import { SizeTxValidator } from './size_validator.js';
66
+ import { TimestampTxValidator } from './timestamp_validator.js';
67
+ import { TxPermittedValidator } from './tx_permitted_validator.js';
68
+ import { TxProofValidator } from './tx_proof_validator.js';
69
+ import { TxValidationCache } from './tx_validation_cache.js';
70
+
71
+ /**
72
+ * A validator paired with a peer penalty severity.
73
+ * Used for gossip validation where each validator's failure triggers a peer penalization
74
+ * with the associated severity level.
75
+ */
76
+ export interface TransactionValidator {
77
+ validator: {
78
+ validateTx(tx: Tx): Promise<TxValidationResult>;
79
+ };
80
+ severity: PeerErrorSeverity;
81
+ }
82
+
83
+ /**
84
+ * First stage of gossip validation — fast checks run before the pool pre-check.
85
+ *
86
+ * If any validator fails, the peer is penalized and the tx is rejected immediately,
87
+ * without consulting the pool or running proof verification.
88
+ *
89
+ * The `doubleSpendValidator` failure is special-cased by the caller (`handleGossipedTx`)
90
+ * to determine severity based on how recently the nullifier appeared. The caller reports the
91
+ * first failing entry among equally severe ones.
92
+ */
93
+ export function createFirstStageTxValidationsForGossipedTransactions(
94
+ timestamp: UInt64,
95
+ blockNumber: BlockNumber,
96
+ worldStateSynchronizer: WorldStateSynchronizer,
97
+ gasFees: GasFees,
98
+ l1ChainId: number,
99
+ rollupVersion: number,
100
+ protocolContractsHash: Fr,
101
+ contractDataSource: ContractDataSource,
102
+ txsPermitted: boolean,
103
+ allowedInSetup: AllowedElement[] = [],
104
+ bindings?: LoggerBindings,
105
+ gasLimitOpts?: { maxTxL2Gas?: number; maxTxDAGas?: number },
106
+ ): Record<string, TransactionValidator> {
107
+ const merkleTree = worldStateSynchronizer.getCommitted();
108
+
109
+ return {
110
+ timestampValidator: {
111
+ validator: new TimestampTxValidator<Tx>(
112
+ {
113
+ timestamp,
114
+ blockNumber,
115
+ },
116
+ bindings,
117
+ ),
118
+ severity: PeerErrorSeverity.HighToleranceError,
119
+ },
120
+ txsPermittedValidator: {
121
+ validator: new TxPermittedValidator(txsPermitted, bindings),
122
+ severity: PeerErrorSeverity.MidToleranceError,
123
+ },
124
+ txSizeValidator: {
125
+ validator: new SizeTxValidator(bindings),
126
+ severity: PeerErrorSeverity.MidToleranceError,
127
+ },
128
+ metadataValidator: {
129
+ validator: new MetadataTxValidator(
130
+ {
131
+ l1ChainId: new Fr(l1ChainId),
132
+ rollupVersion: new Fr(rollupVersion),
133
+ protocolContractsHash,
134
+ vkTreeRoot: getVKTreeRoot(),
135
+ },
136
+ bindings,
137
+ ),
138
+ severity: PeerErrorSeverity.MidToleranceError,
139
+ },
140
+ phasesValidator: {
141
+ validator: new PhasesTxValidator(contractDataSource, allowedInSetup, timestamp, bindings),
142
+ severity: PeerErrorSeverity.MidToleranceError,
143
+ },
144
+ blockHeaderValidator: {
145
+ validator: new BlockHeaderTxValidator(new ArchiveCache(merkleTree), bindings),
146
+ severity: PeerErrorSeverity.HighToleranceError,
147
+ },
148
+ doubleSpendValidator: {
149
+ validator: new DoubleSpendTxValidator(
150
+ {
151
+ nullifiersExist: async (nullifiers: Buffer[]) => {
152
+ const merkleTree = worldStateSynchronizer.getCommitted();
153
+ const indices = await merkleTree.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, nullifiers);
154
+ return indices.map(index => index !== undefined);
155
+ },
156
+ },
157
+ bindings,
158
+ ),
159
+ severity: PeerErrorSeverity.MidToleranceError, // This is handled specifically at the point of rejection by considering a recent window where it may have been valid
160
+ },
161
+ minGasLimitsValidator: {
162
+ validator: new MinGasLimitsValidator<Tx>(bindings),
163
+ severity: PeerErrorSeverity.MidToleranceError,
164
+ },
165
+ maxGasLimitsValidator: {
166
+ validator: new MaxGasLimitsValidator<Tx>({ ...gasLimitOpts, bindings }),
167
+ severity: PeerErrorSeverity.MidToleranceError,
168
+ },
169
+ gasValidator: {
170
+ validator: new GasTxValidator(
171
+ new DatabasePublicStateSource(merkleTree),
172
+ ProtocolContractAddress.FeeJuice,
173
+ gasFees,
174
+ bindings,
175
+ ),
176
+ severity: PeerErrorSeverity.MidToleranceError,
177
+ },
178
+ dataValidator: {
179
+ validator: new DataTxValidator(bindings),
180
+ severity: PeerErrorSeverity.MidToleranceError,
181
+ },
182
+ contractInstanceValidator: {
183
+ validator: new ContractInstanceTxValidator(bindings),
184
+ severity: PeerErrorSeverity.MidToleranceError,
185
+ },
186
+ };
187
+ }
188
+
189
+ /**
190
+ * Second stage of gossip validation — expensive proof verification.
191
+ *
192
+ * Only runs after the first stage passes AND `canAddPendingTx` confirms the pool would
193
+ * accept the tx. This avoids wasting CPU on proof verification for txs the pool would reject
194
+ * (e.g., duplicates, insufficient balance, pool full).
195
+ */
196
+ export function createSecondStageTxValidationsForGossipedTransactions(
197
+ proofVerifier: ClientProtocolCircuitVerifier,
198
+ bindings?: LoggerBindings,
199
+ ): Record<string, TransactionValidator> {
200
+ return {
201
+ proofValidator: {
202
+ validator: new TxProofValidator(proofVerifier, bindings),
203
+ severity: PeerErrorSeverity.LowToleranceError,
204
+ },
205
+ };
206
+ }
207
+
208
+ /**
209
+ * Well-formedness checks only: metadata, size, data, and proof.
210
+ * Used for req/resp and block proposal txs. These txs must be accepted for block
211
+ * re-execution even though they may be invalid against current state — that is
212
+ * caught later by the block building validator.
213
+ */
214
+ function createTxValidatorForMinimumTxIntegrityChecks(
215
+ verifier: ClientProtocolCircuitVerifier,
216
+ {
217
+ l1ChainId,
218
+ rollupVersion,
219
+ }: {
220
+ l1ChainId: number;
221
+ rollupVersion: number;
222
+ },
223
+ bindings?: LoggerBindings,
224
+ cache?: TxValidationCache,
225
+ ): TxValidator {
226
+ const aggregate = new AggregateTxValidator(
227
+ new SizeTxValidator(bindings),
228
+ new MetadataTxValidator(
229
+ {
230
+ l1ChainId: new Fr(l1ChainId),
231
+ rollupVersion: new Fr(rollupVersion),
232
+ protocolContractsHash,
233
+ vkTreeRoot: getVKTreeRoot(),
234
+ },
235
+ bindings,
236
+ ),
237
+ CachedTxValidator.new(new DataTxValidator(bindings), cache),
238
+ new ContractInstanceTxValidator(bindings),
239
+ CachedTxValidator.new(new TxProofValidator(verifier, bindings), cache),
240
+ );
241
+
242
+ // This validator is not state-dependent so we can cache it.
243
+ const identifier = Symbol('TxValidatorForMinimumTxIntegrityChecks');
244
+ return CachedTxValidator.newWithIdentifier(aggregate, identifier, cache);
245
+ }
246
+
247
+ /**
248
+ * Validators for txs received via req/resp or filestores.
249
+ * Checks well-formedness only — we must accept these for re-execution even if they
250
+ * are invalid against current state. State-dependent checks happen when the tx
251
+ * enters the pending pool or during block building.
252
+ */
253
+ export function createTxValidatorForOnDemandReceivedTxs(
254
+ verifier: ClientProtocolCircuitVerifier,
255
+ {
256
+ l1ChainId,
257
+ rollupVersion,
258
+ }: {
259
+ l1ChainId: number;
260
+ rollupVersion: number;
261
+ },
262
+ bindings?: LoggerBindings,
263
+ cache?: TxValidationCache,
264
+ ): TxValidator {
265
+ return createTxValidatorForMinimumTxIntegrityChecks(verifier, { l1ChainId, rollupVersion }, bindings, cache);
266
+ }
267
+
268
+ /**
269
+ * Validators for txs received in block proposals.
270
+ * Same as req/resp — well-formedness only. We must store these for block
271
+ * re-execution; their validity against state is checked during block building.
272
+ */
273
+ export function createTxValidatorForBlockProposalReceivedTxs(
274
+ verifier: ClientProtocolCircuitVerifier,
275
+ {
276
+ l1ChainId,
277
+ rollupVersion,
278
+ }: {
279
+ l1ChainId: number;
280
+ rollupVersion: number;
281
+ },
282
+ bindings?: LoggerBindings,
283
+ cache?: TxValidationCache,
284
+ ): TxValidator {
285
+ return createTxValidatorForMinimumTxIntegrityChecks(verifier, { l1ChainId, rollupVersion }, bindings, cache);
286
+ }
287
+
288
+ /**
289
+ * Validators for unsolicited txs received over JSON-RPC (from a local wallet/PXE).
290
+ * Full validation — all state-dependent checks are run. Proof verification is optional
291
+ * (can be skipped for testing purposes). Fee enforcement is also optional (skipped for testing/dev).
292
+ * Called from `AztecNodeService.isValidTx()`.
293
+ */
294
+ export function createTxValidatorForAcceptingTxsOverRPC(
295
+ db: MerkleTreeReadOperations,
296
+ contractDataSource: ContractDataSource,
297
+ verifier: ClientProtocolCircuitVerifier | undefined,
298
+ {
299
+ l1ChainId,
300
+ rollupVersion,
301
+ setupAllowList,
302
+ gasFees,
303
+ skipFeeEnforcement,
304
+ isSimulation,
305
+ timestamp,
306
+ blockNumber,
307
+ txsPermitted,
308
+ maxTxL2Gas,
309
+ maxTxDAGas,
310
+ }: {
311
+ l1ChainId: number;
312
+ rollupVersion: number;
313
+ setupAllowList: AllowedElement[];
314
+ gasFees: GasFees;
315
+ skipFeeEnforcement?: boolean;
316
+ isSimulation?: boolean;
317
+ timestamp: UInt64;
318
+ blockNumber: BlockNumber;
319
+ txsPermitted: boolean;
320
+ maxTxL2Gas?: number;
321
+ maxTxDAGas?: number;
322
+ },
323
+ bindings?: LoggerBindings,
324
+ ): TxValidator<Tx> {
325
+ const validators: TxValidator<Tx>[] = [
326
+ new TxPermittedValidator(txsPermitted, bindings),
327
+ new TimestampTxValidator(
328
+ {
329
+ timestamp,
330
+ blockNumber,
331
+ },
332
+ bindings,
333
+ ),
334
+ new SizeTxValidator(bindings),
335
+ new MetadataTxValidator(
336
+ {
337
+ l1ChainId: new Fr(l1ChainId),
338
+ rollupVersion: new Fr(rollupVersion),
339
+ protocolContractsHash,
340
+ vkTreeRoot: getVKTreeRoot(),
341
+ },
342
+ bindings,
343
+ ),
344
+ // Declared gas-limit admission is not fee enforcement, so it runs even when fees are skipped. The floor
345
+ // has no exemption: a tx declaring less than the fixed overheads can never be mined, so rejecting it
346
+ // during simulation is the earliest useful feedback rather than a surprise on sendTx.
347
+ new MinGasLimitsValidator<Tx>(bindings),
348
+ // Only the ceiling is exempted during simulation: gas estimation submits intentionally-inflated
349
+ // `forEstimation` limits (above the per-tx max) and the wallet clamps the real tx to the admission limit
350
+ // afterward, so enforcing the ceiling on the estimation tx would reject a valid estimation.
351
+ ...(!isSimulation ? [new MaxGasLimitsValidator<Tx>({ maxTxL2Gas, maxTxDAGas, bindings })] : []),
352
+ new PhasesTxValidator(contractDataSource, setupAllowList, timestamp, bindings),
353
+ new BlockHeaderTxValidator(new ArchiveCache(db), bindings),
354
+ new DoubleSpendTxValidator(new NullifierCache(db), bindings),
355
+ ...(!skipFeeEnforcement
356
+ ? [new GasTxValidator(new DatabasePublicStateSource(db), ProtocolContractAddress.FeeJuice, gasFees, bindings)]
357
+ : []),
358
+ new DataTxValidator(bindings),
359
+ new ContractInstanceTxValidator(bindings),
360
+ ...(verifier ? [new TxProofValidator(verifier, bindings)] : []),
361
+ ];
362
+
363
+ return new AggregateTxValidator(...validators);
364
+ }
365
+
366
+ /**
367
+ * Validators for txs about to be included in a block by the sequencer.
368
+ * Re-validates against current state. This is where invalid txs that entered via
369
+ * req/resp or block proposals are caught — their invalidity is reported as part
370
+ * of block validation/attestation. Proof and data checks are omitted since they
371
+ * were already verified on entry.
372
+ * Called from `CheckpointBuilder.makeBlockBuilderDeps()`.
373
+ */
374
+ export function createTxValidatorForBlockBuilding(
375
+ db: MerkleTreeReadOperations,
376
+ contractDataSource: ContractDataSource,
377
+ globalVariables: GlobalVariables,
378
+ setupAllowList: AllowedElement[],
379
+ bindings?: LoggerBindings,
380
+ ): PublicProcessorValidator {
381
+ const nullifierCache = new NullifierCache(db);
382
+ const archiveCache = new ArchiveCache(db);
383
+ const publicStateSource = new DatabasePublicStateSource(db);
384
+
385
+ return {
386
+ preprocessValidator: createTxValidatorForValidatingAgainstCurrentState(
387
+ nullifierCache,
388
+ archiveCache,
389
+ publicStateSource,
390
+ contractDataSource,
391
+ globalVariables,
392
+ setupAllowList,
393
+ bindings,
394
+ ),
395
+ nullifierCache,
396
+ };
397
+ }
398
+
399
+ function createTxValidatorForValidatingAgainstCurrentState(
400
+ nullifierSource: NullifierSource,
401
+ archiveSource: ArchiveSource,
402
+ publicStateSource: PublicStateSource,
403
+ contractDataSource: ContractDataSource,
404
+ globalVariables: GlobalVariables,
405
+ setupAllowList: AllowedElement[],
406
+ bindings?: LoggerBindings,
407
+ ): TxValidator<Tx> {
408
+ // We don't include the TxProofValidator nor the DataTxValidator here because they are already checked by the time we get to block building.
409
+ return new AggregateTxValidator(
410
+ new TimestampTxValidator(
411
+ {
412
+ timestamp: globalVariables.timestamp,
413
+ blockNumber: globalVariables.blockNumber,
414
+ },
415
+ bindings,
416
+ ),
417
+ new MinGasLimitsValidator<Tx>(bindings),
418
+ // No limit opts: enforce only the per-tx protocol ceiling. Network admission limits are relay policy and
419
+ // must not invalidate a proposed block.
420
+ new MaxGasLimitsValidator<Tx>({ bindings }),
421
+ new PhasesTxValidator(contractDataSource, setupAllowList, globalVariables.timestamp, bindings),
422
+ new BlockHeaderTxValidator(archiveSource, bindings),
423
+ new DoubleSpendTxValidator(nullifierSource, bindings),
424
+ new GasTxValidator(publicStateSource, ProtocolContractAddress.FeeJuice, globalVariables.gasFees, bindings),
425
+ );
426
+ }
427
+
428
+ /**
429
+ * Validators for txs migrating to the pending pool.
430
+ *
431
+ * Txs that arrived via req/resp or block proposals only had well-formedness checks
432
+ * on receipt. When they fail to be mined and are migrated to the pending pool, we
433
+ * run the state-dependent checks they missed: double-spend, block header, gas limits,
434
+ * and timestamp expiry. This is run on EVERY tx potentially entering the pending pool
435
+ * — called inside `TxPoolV2Impl` during `addPendingTxs`, `prepareForSlot` (unprotect),
436
+ * `handlePrunedBlocks` (unmine), and startup hydration.
437
+ *
438
+ * Operates on `TxMetaData` rather than full `Tx` since metadata is pre-built by the pool.
439
+ * Injected into `TxPoolV2` as the `createTxValidator` factory in `TxPoolV2Dependencies`.
440
+ */
441
+ export async function createTxValidatorForTransactionsEnteringPendingTxPool(
442
+ worldStateSynchronizer: WorldStateSynchronizer,
443
+ timestamp: bigint,
444
+ blockNumber: BlockNumber,
445
+ gasLimitOpts: { maxTxL2Gas?: number; maxTxDAGas?: number },
446
+ gasFees: GasFees,
447
+ bindings?: LoggerBindings,
448
+ ): Promise<TxValidator<TxMetaData>> {
449
+ await worldStateSynchronizer.syncImmediate();
450
+ const merkleTree = worldStateSynchronizer.getCommitted();
451
+ const nullifierSource: NullifierSource = {
452
+ nullifiersExist: async (nullifiers: Buffer[]) => {
453
+ const indices = await merkleTree.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, nullifiers);
454
+ return indices.map(index => index !== undefined);
455
+ },
456
+ };
457
+ const archiveSource: ArchiveSource = {
458
+ getArchiveIndices: (archives: BlockHash[]) => {
459
+ return merkleTree.findLeafIndices(MerkleTreeId.ARCHIVE, archives);
460
+ },
461
+ };
462
+ return new AggregateTxValidator<TxMetaData>(
463
+ new AllowedSetupCallsMetaValidator<TxMetaData>(bindings),
464
+ new TimestampTxValidator<TxMetaData>({ timestamp, blockNumber }, bindings),
465
+ new MinGasLimitsValidator<TxMetaData>(bindings),
466
+ new MaxGasLimitsValidator<TxMetaData>({ ...gasLimitOpts, bindings }),
467
+ new MaxFeePerGasValidator<TxMetaData>(gasFees, bindings),
468
+ new BlockHeaderTxValidator<TxMetaData>(archiveSource, bindings),
469
+ new DoubleSpendTxValidator<TxMetaData>(nullifierSource, bindings),
470
+ );
471
+ }
472
+
473
+ /**
474
+ * Creates a function that checks whether a tx's setup-phase calls are on the allow list.
475
+ *
476
+ * Uses the `PhasesTxValidator` on the full Tx. The result is stored as a boolean
477
+ * flag in `TxMetaData.allowedSetupCalls` at receipt time, so the pending pool
478
+ * migration validator can check it without needing the full Tx or its dependencies.
479
+ */
480
+ export function createCheckAllowedSetupCalls(
481
+ contractDataSource: ContractDataSource,
482
+ setupAllowList: AllowedElement[],
483
+ getTimestamp: () => UInt64,
484
+ ): (tx: Tx) => Promise<boolean> {
485
+ return async (tx: Tx) => {
486
+ const validator = new PhasesTxValidator(contractDataSource, setupAllowList, getTimestamp());
487
+ const result = await validator.validateTx(tx);
488
+ return result.result === 'valid';
489
+ };
490
+ }
@@ -0,0 +1,44 @@
1
+ import { FeeJuiceArtifact } from '@aztec-labs/protocol-contracts/fee-juice';
2
+ import { getCallRequestsWithCalldataByPhase } from '@aztec-labs/simulator/server';
3
+ import { FunctionSelector, getAllFunctionAbis } from '@aztec-labs/stdlib/abi';
4
+ import type { AztecAddress } from '@aztec-labs/stdlib/aztec-address';
5
+ import { type Tx, TxExecutionPhase } from '@aztec-labs/stdlib/tx';
6
+
7
+ export type FeePayerBalanceDelta = {
8
+ feeLimit: bigint;
9
+ claimAmount: bigint;
10
+ };
11
+
12
+ const increasePublicBalanceSelectorPromise = (() => {
13
+ const fn = getAllFunctionAbis(FeeJuiceArtifact).find(f => f.name === '_increase_public_balance')!;
14
+ return FunctionSelector.fromNameAndParameters(fn.name, fn.parameters);
15
+ })();
16
+
17
+ export function getTxFeeLimit(tx: Tx): bigint {
18
+ return tx.data.constants.txContext.gasSettings.getFeeLimit().toBigInt();
19
+ }
20
+
21
+ export async function getFeePayerClaimAmount(tx: Tx, feeJuiceAddress: AztecAddress): Promise<bigint> {
22
+ const setupFns = getCallRequestsWithCalldataByPhase(tx, TxExecutionPhase.SETUP);
23
+ const increasePublicBalanceSelector = await increasePublicBalanceSelectorPromise;
24
+ const feePayer = tx.data.feePayer;
25
+
26
+ const claimFunctionCall = setupFns.find(
27
+ fn =>
28
+ fn.request.contractAddress.equals(feeJuiceAddress) &&
29
+ fn.request.msgSender.equals(feeJuiceAddress) &&
30
+ fn.calldata.length > 2 &&
31
+ fn.functionSelector.equals(increasePublicBalanceSelector) &&
32
+ fn.args[0].equals(feePayer.toField()) &&
33
+ !fn.request.isStaticCall,
34
+ );
35
+
36
+ return claimFunctionCall ? claimFunctionCall.args[1].toBigInt() : 0n;
37
+ }
38
+
39
+ export async function getFeePayerBalanceDelta(tx: Tx, feeJuiceAddress: AztecAddress): Promise<FeePayerBalanceDelta> {
40
+ return {
41
+ feeLimit: getTxFeeLimit(tx),
42
+ claimAmount: await getFeePayerClaimAmount(tx, feeJuiceAddress),
43
+ };
44
+ }
@@ -0,0 +1,148 @@
1
+ import {
2
+ MAX_PROCESSABLE_L2_GAS,
3
+ MAX_TX_DA_GAS,
4
+ PRIVATE_TX_L2_GAS_OVERHEAD,
5
+ PUBLIC_TX_L2_GAS_OVERHEAD,
6
+ TX_DA_GAS_OVERHEAD,
7
+ } from '@aztec-labs/constants';
8
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec-labs/foundation/log';
9
+ import { Gas } from '@aztec-labs/stdlib/gas';
10
+ import {
11
+ TX_ERROR_GAS_LIMIT_TOO_HIGH,
12
+ TX_ERROR_INSUFFICIENT_GAS_LIMIT,
13
+ type TxValidationResult,
14
+ type TxValidator,
15
+ } from '@aztec-labs/stdlib/tx';
16
+
17
+ /**
18
+ * Structural interface for types that carry gas limit data, used by {@link MinGasLimitsValidator} and
19
+ * {@link MaxGasLimitsValidator}.
20
+ */
21
+ export interface HasGasLimitData {
22
+ txHash: { toString(): string };
23
+ data: {
24
+ // We just need to know whether there is something here or not
25
+ forPublic?: unknown;
26
+ constants: {
27
+ txContext: {
28
+ gasSettings: { gasLimits: Gas };
29
+ };
30
+ };
31
+ };
32
+ }
33
+
34
+ /**
35
+ * Validates that a transaction declares at least the gas it is guaranteed to be charged.
36
+ *
37
+ * Rejects transactions whose gas limits fall below the fixed protocol overheads
38
+ * ({@link TX_DA_GAS_OVERHEAD} and {@link PRIVATE_TX_L2_GAS_OVERHEAD} / {@link PUBLIC_TX_L2_GAS_OVERHEAD}).
39
+ * This is a cheap, stateless check that operates on gas settings alone.
40
+ *
41
+ * The floor is a protocol property with no exemptions: a tx below it can never be mined, so every entry
42
+ * point applies it, including gas estimation.
43
+ *
44
+ * Generic over T so it can validate both full {@link Tx} objects and {@link TxMetaData}
45
+ * (used during pending pool migration).
46
+ */
47
+ export class MinGasLimitsValidator<T extends HasGasLimitData> implements TxValidator<T> {
48
+ #log: Logger;
49
+
50
+ constructor(bindings?: LoggerBindings) {
51
+ this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
52
+ }
53
+
54
+ validateTx(tx: T): Promise<TxValidationResult> {
55
+ return Promise.resolve(this.validateGasLimit(tx));
56
+ }
57
+
58
+ /** Checks gas limits are >= the fixed protocol overheads (L2 and DA). */
59
+ validateGasLimit(tx: T): TxValidationResult {
60
+ const gasLimits = tx.data.constants.txContext.gasSettings.gasLimits;
61
+ const minGasLimits = new Gas(
62
+ TX_DA_GAS_OVERHEAD,
63
+ tx.data.forPublic ? PUBLIC_TX_L2_GAS_OVERHEAD : PRIVATE_TX_L2_GAS_OVERHEAD,
64
+ );
65
+
66
+ if (minGasLimits.gtAny(gasLimits)) {
67
+ this.#log.verbose(`Rejecting transaction due to the gas limit(s) not being above the minimum gas limit`, {
68
+ gasLimits,
69
+ minGasLimits,
70
+ });
71
+ return {
72
+ result: 'invalid',
73
+ reason: [
74
+ `${TX_ERROR_INSUFFICIENT_GAS_LIMIT} (required=da:${minGasLimits.daGas},l2:${minGasLimits.l2Gas} got=da:${gasLimits.daGas},l2:${gasLimits.l2Gas})`,
75
+ ],
76
+ };
77
+ }
78
+
79
+ return { result: 'valid' };
80
+ }
81
+ }
82
+
83
+ /**
84
+ * Validates that a transaction does not declare more gas than it is allowed to.
85
+ *
86
+ * Rejects transactions whose gas limits exceed the per-tx protocol maxima, optionally tightened to the
87
+ * network admission limits. This is a cheap, stateless check that operates on gas settings alone.
88
+ *
89
+ * Unlike the floor, the ceiling is exempted on the gas estimation path, where limits are deliberately
90
+ * inflated past what the protocol allows (see {@link GasSettings.forEstimation}).
91
+ *
92
+ * Generic over T so it can validate both full {@link Tx} objects and {@link TxMetaData}
93
+ * (used during pending pool migration).
94
+ */
95
+ export class MaxGasLimitsValidator<T extends HasGasLimitData> implements TxValidator<T> {
96
+ #log: Logger;
97
+ #effectiveMaxL2Gas: number;
98
+ #effectiveMaxDAGas: number;
99
+
100
+ /**
101
+ * @param maxTxL2Gas - The network admission limit on L2 gas a single tx may declare (the per-block mana
102
+ * allocation, see {@link computeNetworkTxGasLimits}). Defaults to the per-tx protocol maximum, so callers
103
+ * that pass nothing (e.g. block building) enforce only the protocol ceiling.
104
+ * @param maxTxDAGas - The network admission limit on DA gas a single tx may declare. Defaults to the
105
+ * per-tx protocol maximum {@link MAX_TX_DA_GAS}.
106
+ */
107
+ constructor(opts?: { maxTxL2Gas?: number; maxTxDAGas?: number; bindings?: LoggerBindings }) {
108
+ this.#log = createLogger('sequencer:tx_validator:tx_gas', opts?.bindings);
109
+ // The passed limits are network admission limits; clamp to the per-tx protocol maxima as a hard ceiling.
110
+ // MAX_TX_DA_GAS bounds DA by what a single tx can actually post to a blob; declaring more is meaningless
111
+ // and would let a tx reserve checkpoint/block DA budget during proposal building it can't use.
112
+ this.#effectiveMaxL2Gas = Math.min(MAX_PROCESSABLE_L2_GAS, opts?.maxTxL2Gas ?? Infinity);
113
+ this.#effectiveMaxDAGas = Math.min(MAX_TX_DA_GAS, opts?.maxTxDAGas ?? Infinity);
114
+ }
115
+
116
+ validateTx(tx: T): Promise<TxValidationResult> {
117
+ return Promise.resolve(this.validateGasLimit(tx));
118
+ }
119
+
120
+ /** Checks gas limits are <= the effective max gas (L2 and DA). */
121
+ validateGasLimit(tx: T): TxValidationResult {
122
+ const gasLimits = tx.data.constants.txContext.gasSettings.gasLimits;
123
+
124
+ if (gasLimits.l2Gas > this.#effectiveMaxL2Gas) {
125
+ this.#log.verbose(`Rejecting transaction due to the L2 gas limit being higher than the effective maximum`, {
126
+ gasLimits,
127
+ effectiveMaxL2Gas: this.#effectiveMaxL2Gas,
128
+ });
129
+ return {
130
+ result: 'invalid',
131
+ reason: [`${TX_ERROR_GAS_LIMIT_TOO_HIGH} (l2Gas=${gasLimits.l2Gas}, max=${this.#effectiveMaxL2Gas})`],
132
+ };
133
+ }
134
+
135
+ if (gasLimits.daGas > this.#effectiveMaxDAGas) {
136
+ this.#log.verbose(`Rejecting transaction due to the DA gas limit being higher than the effective maximum`, {
137
+ gasLimits,
138
+ effectiveMaxDAGas: this.#effectiveMaxDAGas,
139
+ });
140
+ return {
141
+ result: 'invalid',
142
+ reason: [`${TX_ERROR_GAS_LIMIT_TOO_HIGH} (daGas=${gasLimits.daGas}, max=${this.#effectiveMaxDAGas})`],
143
+ };
144
+ }
145
+
146
+ return { result: 'valid' };
147
+ }
148
+ }