@aztec/p2p 0.0.1-commit.fce3e4f → 0.0.1-commit.ffe5b04ea

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 (565) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +4 -3
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +4 -4
  4. package/dest/client/factory.d.ts +11 -11
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +46 -19
  7. package/dest/client/interface.d.ts +61 -35
  8. package/dest/client/interface.d.ts.map +1 -1
  9. package/dest/client/p2p_client.d.ts +52 -65
  10. package/dest/client/p2p_client.d.ts.map +1 -1
  11. package/dest/client/p2p_client.js +601 -336
  12. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  13. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  14. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +304 -0
  15. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  16. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  17. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  18. package/dest/config.d.ts +56 -22
  19. package/dest/config.d.ts.map +1 -1
  20. package/dest/config.js +97 -52
  21. package/dest/errors/tx-pool.error.d.ts +8 -0
  22. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  23. package/dest/errors/tx-pool.error.js +9 -0
  24. package/dest/index.d.ts +2 -1
  25. package/dest/index.d.ts.map +1 -1
  26. package/dest/index.js +1 -0
  27. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +111 -76
  28. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool.js +445 -3
  30. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  31. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  32. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +529 -289
  33. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  34. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  35. package/dest/mem_pools/attestation_pool/index.js +1 -2
  36. package/dest/mem_pools/attestation_pool/mocks.d.ts +11 -8
  37. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  38. package/dest/mem_pools/attestation_pool/mocks.js +17 -13
  39. package/dest/mem_pools/index.d.ts +3 -2
  40. package/dest/mem_pools/index.d.ts.map +1 -1
  41. package/dest/mem_pools/index.js +1 -1
  42. package/dest/mem_pools/instrumentation.d.ts +9 -1
  43. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  44. package/dest/mem_pools/instrumentation.js +33 -13
  45. package/dest/mem_pools/interface.d.ts +6 -7
  46. package/dest/mem_pools/interface.d.ts.map +1 -1
  47. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +37 -27
  48. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  49. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +314 -335
  50. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
  51. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  52. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
  53. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
  54. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  55. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
  56. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  57. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  58. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  59. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  60. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  61. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  62. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  63. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  64. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
  65. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  66. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  67. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  68. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  69. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  70. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  71. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  72. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  73. package/dest/mem_pools/tx_pool/index.js +0 -1
  74. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  75. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  76. package/dest/mem_pools/tx_pool/priority.js +6 -1
  77. package/dest/mem_pools/tx_pool/tx_pool.d.ts +11 -6
  78. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  79. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  80. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  81. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +30 -24
  82. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  83. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  84. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  85. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
  86. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  87. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
  88. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  89. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  90. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  91. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  92. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  93. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  94. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  95. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  96. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +93 -0
  97. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  98. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  99. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
  100. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +10 -0
  101. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  102. package/dest/mem_pools/tx_pool_v2/eviction/index.js +11 -0
  103. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +180 -0
  104. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  105. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  106. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  107. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  108. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +65 -0
  109. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  110. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  111. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
  112. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  113. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  114. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  115. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  116. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  117. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +75 -0
  118. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  119. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  120. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  121. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  122. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  123. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  124. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  125. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  126. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  127. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +213 -0
  128. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  129. package/dest/mem_pools/tx_pool_v2/interfaces.js +10 -0
  130. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +127 -0
  131. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  132. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +210 -0
  133. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  134. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  135. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  136. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
  137. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  138. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +337 -0
  139. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +60 -0
  140. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  141. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +164 -0
  142. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +78 -0
  143. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  144. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +909 -0
  145. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -4
  146. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  147. package/dest/msg_validators/attestation_validator/attestation_validator.js +52 -19
  148. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -7
  149. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  150. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +22 -13
  151. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  152. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  153. package/dest/msg_validators/clock_tolerance.js +37 -0
  154. package/dest/msg_validators/index.d.ts +2 -2
  155. package/dest/msg_validators/index.d.ts.map +1 -1
  156. package/dest/msg_validators/index.js +1 -1
  157. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +11 -0
  158. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  159. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +14 -0
  160. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +11 -0
  161. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  162. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +20 -0
  163. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  164. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  165. package/dest/msg_validators/proposal_validator/index.js +3 -0
  166. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +18 -0
  167. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  168. package/dest/msg_validators/proposal_validator/proposal_validator.js +116 -0
  169. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  170. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  171. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
  172. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  173. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  174. package/dest/msg_validators/tx_validator/allowed_public_setup.js +24 -20
  175. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  176. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  177. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  178. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  179. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  180. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  181. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
  182. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  183. package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
  184. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  185. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  186. package/dest/msg_validators/tx_validator/data_validator.js +4 -1
  187. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -4
  188. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  189. package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
  190. package/dest/msg_validators/tx_validator/factory.d.ts +120 -6
  191. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  192. package/dest/msg_validators/tx_validator/factory.js +228 -57
  193. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  194. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  195. package/dest/msg_validators/tx_validator/fee_payer_balance.js +24 -0
  196. package/dest/msg_validators/tx_validator/gas_validator.d.ts +59 -3
  197. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  198. package/dest/msg_validators/tx_validator/gas_validator.js +84 -52
  199. package/dest/msg_validators/tx_validator/index.d.ts +4 -1
  200. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  201. package/dest/msg_validators/tx_validator/index.js +3 -0
  202. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +4 -3
  203. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  204. package/dest/msg_validators/tx_validator/metadata_validator.js +6 -6
  205. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  206. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  207. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  208. package/dest/msg_validators/tx_validator/phases_validator.d.ts +4 -3
  209. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  210. package/dest/msg_validators/tx_validator/phases_validator.js +47 -26
  211. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  212. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  213. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  214. package/dest/msg_validators/tx_validator/test_utils.d.ts +2 -2
  215. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
  216. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +23 -5
  217. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  218. package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
  219. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  220. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  221. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  222. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  223. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  224. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  225. package/dest/services/data_store.d.ts +1 -1
  226. package/dest/services/data_store.d.ts.map +1 -1
  227. package/dest/services/data_store.js +10 -6
  228. package/dest/services/discv5/discV5_service.js +1 -1
  229. package/dest/services/dummy_service.d.ts +28 -4
  230. package/dest/services/dummy_service.d.ts.map +1 -1
  231. package/dest/services/dummy_service.js +49 -1
  232. package/dest/services/encoding.d.ts +3 -3
  233. package/dest/services/encoding.d.ts.map +1 -1
  234. package/dest/services/encoding.js +16 -14
  235. package/dest/services/gossipsub/index.d.ts +3 -0
  236. package/dest/services/gossipsub/index.d.ts.map +1 -0
  237. package/dest/services/gossipsub/index.js +2 -0
  238. package/dest/services/gossipsub/scoring.d.ts +21 -3
  239. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  240. package/dest/services/gossipsub/scoring.js +24 -7
  241. package/dest/services/gossipsub/topic_score_params.d.ts +173 -0
  242. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  243. package/dest/services/gossipsub/topic_score_params.js +346 -0
  244. package/dest/services/index.d.ts +2 -1
  245. package/dest/services/index.d.ts.map +1 -1
  246. package/dest/services/index.js +1 -0
  247. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  248. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  249. package/dest/services/libp2p/instrumentation.js +30 -72
  250. package/dest/services/libp2p/libp2p_service.d.ts +117 -42
  251. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  252. package/dest/services/libp2p/libp2p_service.js +1034 -382
  253. package/dest/services/peer-manager/metrics.d.ts +9 -2
  254. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  255. package/dest/services/peer-manager/metrics.js +39 -21
  256. package/dest/services/peer-manager/peer_manager.d.ts +2 -2
  257. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  258. package/dest/services/peer-manager/peer_manager.js +6 -13
  259. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  260. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  261. package/dest/services/peer-manager/peer_scoring.js +32 -6
  262. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +48 -0
  263. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  264. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +539 -0
  265. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  266. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  267. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  268. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +46 -0
  269. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  270. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  271. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +34 -0
  272. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  273. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +130 -0
  274. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +60 -0
  275. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  276. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +173 -0
  277. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  278. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  279. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  280. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  281. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  282. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  283. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  284. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  285. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  286. package/dest/services/reqresp/constants.d.ts +12 -0
  287. package/dest/services/reqresp/constants.d.ts.map +1 -0
  288. package/dest/services/reqresp/constants.js +7 -0
  289. package/dest/services/reqresp/interface.d.ts +13 -2
  290. package/dest/services/reqresp/interface.d.ts.map +1 -1
  291. package/dest/services/reqresp/interface.js +16 -2
  292. package/dest/services/reqresp/metrics.d.ts +6 -5
  293. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  294. package/dest/services/reqresp/metrics.js +17 -21
  295. package/dest/services/reqresp/protocols/auth.d.ts +2 -2
  296. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
  297. package/dest/services/reqresp/protocols/auth.js +2 -2
  298. package/dest/services/reqresp/protocols/block.d.ts +1 -1
  299. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  300. package/dest/services/reqresp/protocols/block.js +3 -2
  301. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  302. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  303. package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
  304. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  305. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  306. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +27 -9
  307. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +30 -7
  308. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  309. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +60 -14
  310. package/dest/services/reqresp/protocols/status.d.ts +5 -4
  311. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  312. package/dest/services/reqresp/protocols/status.js +7 -3
  313. package/dest/services/reqresp/protocols/tx.d.ts +8 -3
  314. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  315. package/dest/services/reqresp/protocols/tx.js +20 -0
  316. package/dest/services/reqresp/reqresp.d.ts +6 -1
  317. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  318. package/dest/services/reqresp/reqresp.js +473 -51
  319. package/dest/services/service.d.ts +56 -4
  320. package/dest/services/service.d.ts.map +1 -1
  321. package/dest/services/tx_collection/config.d.ts +22 -1
  322. package/dest/services/tx_collection/config.d.ts.map +1 -1
  323. package/dest/services/tx_collection/config.js +56 -2
  324. package/dest/services/tx_collection/fast_tx_collection.d.ts +10 -6
  325. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  326. package/dest/services/tx_collection/fast_tx_collection.js +71 -44
  327. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  328. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  329. package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
  330. package/dest/services/tx_collection/file_store_tx_source.d.ts +37 -0
  331. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  332. package/dest/services/tx_collection/file_store_tx_source.js +90 -0
  333. package/dest/services/tx_collection/index.d.ts +3 -1
  334. package/dest/services/tx_collection/index.d.ts.map +1 -1
  335. package/dest/services/tx_collection/index.js +2 -0
  336. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  337. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  338. package/dest/services/tx_collection/instrumentation.js +11 -13
  339. package/dest/services/tx_collection/missing_txs_tracker.d.ts +32 -0
  340. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +1 -0
  341. package/dest/services/tx_collection/missing_txs_tracker.js +27 -0
  342. package/dest/services/tx_collection/proposal_tx_collector.d.ts +49 -0
  343. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  344. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  345. package/dest/services/tx_collection/slow_tx_collection.d.ts +9 -4
  346. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  347. package/dest/services/tx_collection/slow_tx_collection.js +60 -26
  348. package/dest/services/tx_collection/tx_collection.d.ts +31 -17
  349. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  350. package/dest/services/tx_collection/tx_collection.js +79 -7
  351. package/dest/services/tx_collection/tx_collection_sink.d.ts +18 -8
  352. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  353. package/dest/services/tx_collection/tx_collection_sink.js +26 -29
  354. package/dest/services/tx_collection/tx_source.d.ts +8 -3
  355. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  356. package/dest/services/tx_collection/tx_source.js +19 -2
  357. package/dest/services/tx_file_store/config.d.ts +16 -0
  358. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  359. package/dest/services/tx_file_store/config.js +22 -0
  360. package/dest/services/tx_file_store/index.d.ts +4 -0
  361. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  362. package/dest/services/tx_file_store/index.js +3 -0
  363. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  364. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  365. package/dest/services/tx_file_store/instrumentation.js +29 -0
  366. package/dest/services/tx_file_store/tx_file_store.d.ts +48 -0
  367. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  368. package/dest/services/tx_file_store/tx_file_store.js +152 -0
  369. package/dest/services/tx_provider.d.ts +7 -5
  370. package/dest/services/tx_provider.d.ts.map +1 -1
  371. package/dest/services/tx_provider.js +20 -10
  372. package/dest/services/tx_provider_instrumentation.d.ts +5 -2
  373. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  374. package/dest/services/tx_provider_instrumentation.js +14 -14
  375. package/dest/test-helpers/index.d.ts +3 -1
  376. package/dest/test-helpers/index.d.ts.map +1 -1
  377. package/dest/test-helpers/index.js +2 -0
  378. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  379. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  380. package/dest/test-helpers/make-test-p2p-clients.js +1 -2
  381. package/dest/test-helpers/mock-pubsub.d.ts +30 -4
  382. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  383. package/dest/test-helpers/mock-pubsub.js +105 -4
  384. package/dest/test-helpers/mock-tx-helpers.js +1 -1
  385. package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
  386. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  387. package/dest/test-helpers/reqresp-nodes.js +4 -3
  388. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  389. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  390. package/dest/test-helpers/test_tx_provider.js +41 -0
  391. package/dest/test-helpers/testbench-utils.d.ts +163 -0
  392. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  393. package/dest/test-helpers/testbench-utils.js +366 -0
  394. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  395. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  396. package/dest/testbench/p2p_client_testbench_worker.js +226 -130
  397. package/dest/testbench/worker_client_manager.d.ts +53 -6
  398. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  399. package/dest/testbench/worker_client_manager.js +231 -40
  400. package/dest/util.d.ts +3 -3
  401. package/dest/util.d.ts.map +1 -1
  402. package/package.json +18 -18
  403. package/src/bootstrap/bootstrap.ts +7 -4
  404. package/src/client/factory.ts +87 -44
  405. package/src/client/interface.ts +73 -36
  406. package/src/client/p2p_client.ts +267 -397
  407. package/src/client/test/tx_proposal_collector/README.md +227 -0
  408. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +345 -0
  409. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  410. package/src/config.ts +149 -62
  411. package/src/errors/tx-pool.error.ts +12 -0
  412. package/src/index.ts +1 -0
  413. package/src/mem_pools/attestation_pool/attestation_pool.ts +511 -78
  414. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +614 -322
  415. package/src/mem_pools/attestation_pool/index.ts +9 -2
  416. package/src/mem_pools/attestation_pool/mocks.ts +22 -15
  417. package/src/mem_pools/index.ts +4 -1
  418. package/src/mem_pools/instrumentation.ts +43 -14
  419. package/src/mem_pools/interface.ts +5 -7
  420. package/src/mem_pools/tx_pool/README.md +270 -0
  421. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +367 -371
  422. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
  423. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
  424. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  425. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  426. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
  427. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  428. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  429. package/src/mem_pools/tx_pool/index.ts +0 -1
  430. package/src/mem_pools/tx_pool/priority.ts +8 -1
  431. package/src/mem_pools/tx_pool/tx_pool.ts +11 -5
  432. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +23 -17
  433. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  434. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  435. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
  436. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  437. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  438. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +121 -0
  439. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  440. package/src/mem_pools/tx_pool_v2/eviction/index.ts +27 -0
  441. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  442. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  443. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  444. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  445. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  446. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  447. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  448. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  449. package/src/mem_pools/tx_pool_v2/interfaces.ts +245 -0
  450. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +327 -0
  451. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  452. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +430 -0
  453. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +226 -0
  454. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1090 -0
  455. package/src/msg_validators/attestation_validator/attestation_validator.ts +37 -22
  456. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +21 -18
  457. package/src/msg_validators/clock_tolerance.ts +51 -0
  458. package/src/msg_validators/index.ts +1 -1
  459. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +20 -0
  460. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +26 -0
  461. package/src/msg_validators/proposal_validator/index.ts +3 -0
  462. package/src/msg_validators/proposal_validator/proposal_validator.ts +115 -0
  463. package/src/msg_validators/tx_validator/README.md +115 -0
  464. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +5 -5
  465. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  466. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  467. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  468. package/src/msg_validators/tx_validator/block_header_validator.ts +21 -8
  469. package/src/msg_validators/tx_validator/data_validator.ts +18 -6
  470. package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
  471. package/src/msg_validators/tx_validator/factory.ts +375 -57
  472. package/src/msg_validators/tx_validator/fee_payer_balance.ts +44 -0
  473. package/src/msg_validators/tx_validator/gas_validator.ts +106 -54
  474. package/src/msg_validators/tx_validator/index.ts +3 -0
  475. package/src/msg_validators/tx_validator/metadata_validator.ts +31 -12
  476. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  477. package/src/msg_validators/tx_validator/phases_validator.ts +56 -29
  478. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  479. package/src/msg_validators/tx_validator/test_utils.ts +1 -1
  480. package/src/msg_validators/tx_validator/timestamp_validator.ts +30 -19
  481. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  482. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  483. package/src/services/data_store.ts +10 -7
  484. package/src/services/discv5/discV5_service.ts +1 -1
  485. package/src/services/dummy_service.ts +65 -2
  486. package/src/services/encoding.ts +13 -12
  487. package/src/services/gossipsub/README.md +641 -0
  488. package/src/services/gossipsub/index.ts +2 -0
  489. package/src/services/gossipsub/scoring.ts +29 -5
  490. package/src/services/gossipsub/topic_score_params.ts +487 -0
  491. package/src/services/index.ts +1 -0
  492. package/src/services/libp2p/instrumentation.ts +32 -73
  493. package/src/services/libp2p/libp2p_service.ts +729 -390
  494. package/src/services/peer-manager/metrics.ts +46 -21
  495. package/src/services/peer-manager/peer_manager.ts +7 -5
  496. package/src/services/peer-manager/peer_scoring.ts +28 -4
  497. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  498. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +678 -0
  499. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  500. package/src/services/reqresp/batch-tx-requester/interface.ts +53 -0
  501. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +161 -0
  502. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +244 -0
  503. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  504. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  505. package/src/services/reqresp/connection-sampler/connection_sampler.ts +19 -1
  506. package/src/services/reqresp/constants.ts +14 -0
  507. package/src/services/reqresp/interface.ts +30 -2
  508. package/src/services/reqresp/metrics.ts +36 -27
  509. package/src/services/reqresp/protocols/auth.ts +2 -2
  510. package/src/services/reqresp/protocols/block.ts +3 -2
  511. package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
  512. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +35 -12
  513. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +75 -10
  514. package/src/services/reqresp/protocols/status.ts +16 -12
  515. package/src/services/reqresp/protocols/tx.ts +23 -2
  516. package/src/services/reqresp/reqresp.ts +82 -23
  517. package/src/services/service.ts +73 -5
  518. package/src/services/tx_collection/config.ts +84 -2
  519. package/src/services/tx_collection/fast_tx_collection.ts +96 -49
  520. package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
  521. package/src/services/tx_collection/file_store_tx_source.ts +117 -0
  522. package/src/services/tx_collection/index.ts +6 -0
  523. package/src/services/tx_collection/instrumentation.ts +11 -13
  524. package/src/services/tx_collection/missing_txs_tracker.ts +52 -0
  525. package/src/services/tx_collection/proposal_tx_collector.ts +113 -0
  526. package/src/services/tx_collection/slow_tx_collection.ts +69 -36
  527. package/src/services/tx_collection/tx_collection.ts +122 -24
  528. package/src/services/tx_collection/tx_collection_sink.ts +30 -34
  529. package/src/services/tx_collection/tx_source.ts +22 -3
  530. package/src/services/tx_file_store/config.ts +37 -0
  531. package/src/services/tx_file_store/index.ts +3 -0
  532. package/src/services/tx_file_store/instrumentation.ts +36 -0
  533. package/src/services/tx_file_store/tx_file_store.ts +175 -0
  534. package/src/services/tx_provider.ts +29 -12
  535. package/src/services/tx_provider_instrumentation.ts +24 -14
  536. package/src/test-helpers/index.ts +2 -0
  537. package/src/test-helpers/make-test-p2p-clients.ts +4 -6
  538. package/src/test-helpers/mock-pubsub.ts +147 -10
  539. package/src/test-helpers/mock-tx-helpers.ts +1 -1
  540. package/src/test-helpers/reqresp-nodes.ts +6 -8
  541. package/src/test-helpers/test_tx_provider.ts +64 -0
  542. package/src/test-helpers/testbench-utils.ts +430 -0
  543. package/src/testbench/p2p_client_testbench_worker.ts +352 -129
  544. package/src/testbench/worker_client_manager.ts +312 -42
  545. package/src/util.ts +8 -2
  546. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -37
  547. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  548. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -213
  549. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -30
  550. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  551. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -219
  552. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -80
  553. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  554. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -238
  555. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  556. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  557. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -82
  558. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  559. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  560. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  561. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -298
  562. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -287
  563. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -283
  564. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -97
  565. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -1,8 +1,11 @@
1
- import { AVM_MAX_PROCESSABLE_L2_GAS, FIXED_DA_GAS, FIXED_L2_GAS } from '@aztec/constants';
2
- import { createLogger } from '@aztec/foundation/log';
1
+ import {
2
+ MAX_PROCESSABLE_L2_GAS,
3
+ PRIVATE_TX_L2_GAS_OVERHEAD,
4
+ PUBLIC_TX_L2_GAS_OVERHEAD,
5
+ TX_DA_GAS_OVERHEAD,
6
+ } from '@aztec/constants';
7
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
3
8
  import { computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
4
- import { getCallRequestsWithCalldataByPhase } from '@aztec/simulator/server';
5
- import { FunctionSelector } from '@aztec/stdlib/abi';
6
9
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
7
10
  import { Gas, GasFees } from '@aztec/stdlib/gas';
8
11
  import type { PublicStateSource } from '@aztec/stdlib/trees';
@@ -12,25 +15,112 @@ import {
12
15
  TX_ERROR_INSUFFICIENT_FEE_PER_GAS,
13
16
  TX_ERROR_INSUFFICIENT_GAS_LIMIT,
14
17
  type Tx,
15
- TxExecutionPhase,
16
18
  type TxValidationResult,
17
19
  type TxValidator,
18
20
  } from '@aztec/stdlib/tx';
19
21
 
22
+ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
23
+
24
+ /** Structural interface for types that carry gas limit data, used by {@link GasLimitsValidator}. */
25
+ export interface HasGasLimitData {
26
+ txHash: { toString(): string };
27
+ data: {
28
+ // We just need to know whether there is something here or not
29
+ forPublic?: unknown;
30
+ constants: {
31
+ txContext: {
32
+ gasSettings: { gasLimits: Gas };
33
+ };
34
+ };
35
+ };
36
+ }
37
+
38
+ /**
39
+ * Validates that a transaction's gas limits are within acceptable bounds.
40
+ *
41
+ * Rejects transactions whose gas limits fall below the fixed minimums (FIXED_DA_GAS,
42
+ * FIXED_L2_GAS) or exceed the AVM's maximum processable L2 gas. This is a cheap,
43
+ * stateless check that operates on gas settings alone.
44
+ *
45
+ * Generic over T so it can validate both full {@link Tx} objects and {@link TxMetaData}
46
+ * (used during pending pool migration).
47
+ *
48
+ * Used by: pending pool migration (via factory), and indirectly by {@link GasTxValidator}.
49
+ */
50
+ export class GasLimitsValidator<T extends HasGasLimitData> implements TxValidator<T> {
51
+ #log: Logger;
52
+
53
+ constructor(bindings?: LoggerBindings) {
54
+ this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
55
+ }
56
+
57
+ validateTx(tx: T): Promise<TxValidationResult> {
58
+ return Promise.resolve(this.validateGasLimit(tx));
59
+ }
60
+
61
+ /** Checks gas limits are >= fixed minimums and <= AVM max processable L2 gas. */
62
+ validateGasLimit(tx: T): TxValidationResult {
63
+ const gasLimits = tx.data.constants.txContext.gasSettings.gasLimits;
64
+ const minGasLimits = new Gas(
65
+ TX_DA_GAS_OVERHEAD,
66
+ tx.data.forPublic ? PUBLIC_TX_L2_GAS_OVERHEAD : PRIVATE_TX_L2_GAS_OVERHEAD,
67
+ );
68
+
69
+ if (minGasLimits.gtAny(gasLimits)) {
70
+ this.#log.verbose(`Rejecting transaction due to the gas limit(s) not being above the minimum gas limit`, {
71
+ gasLimits,
72
+ minGasLimits,
73
+ });
74
+ return { result: 'invalid', reason: [TX_ERROR_INSUFFICIENT_GAS_LIMIT] };
75
+ }
76
+
77
+ if (gasLimits.l2Gas > MAX_PROCESSABLE_L2_GAS) {
78
+ this.#log.verbose(`Rejecting transaction due to the gas limit(s) being higher than the maximum processable gas`, {
79
+ gasLimits,
80
+ minGasLimits,
81
+ });
82
+ return { result: 'invalid', reason: [TX_ERROR_GAS_LIMIT_TOO_HIGH] };
83
+ }
84
+
85
+ return { result: 'valid' };
86
+ }
87
+ }
88
+
89
+ /**
90
+ * Validates that a transaction can pay its gas fees.
91
+ *
92
+ * Runs three checks in order:
93
+ * 1. **Gas limits** (delegates to {@link GasLimitsValidator}) — rejects if limits are
94
+ * out of bounds.
95
+ * 2. **Max fee per gas** — skips (not rejects) the tx if its maxFeesPerGas is below
96
+ * the current block's gas fees. We skip rather than reject because the tx may
97
+ * become eligible in a later block with lower fees.
98
+ * 3. **Fee payer balance** — reads the fee payer's FeeJuice balance from public state,
99
+ * adds any pending claim from a setup-phase `_increase_public_balance` call, and
100
+ * rejects if the total is less than the tx's fee limit (gasLimits * maxFeePerGas).
101
+ *
102
+ * Used by: gossip (stage 1), RPC, and block building validators.
103
+ */
20
104
  export class GasTxValidator implements TxValidator<Tx> {
21
- #log = createLogger('sequencer:tx_validator:tx_gas');
105
+ #log: Logger;
22
106
  #publicDataSource: PublicStateSource;
23
107
  #feeJuiceAddress: AztecAddress;
24
108
  #gasFees: GasFees;
25
109
 
26
- constructor(publicDataSource: PublicStateSource, feeJuiceAddress: AztecAddress, gasFees: GasFees) {
110
+ constructor(
111
+ publicDataSource: PublicStateSource,
112
+ feeJuiceAddress: AztecAddress,
113
+ gasFees: GasFees,
114
+ private bindings?: LoggerBindings,
115
+ ) {
116
+ this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
27
117
  this.#publicDataSource = publicDataSource;
28
118
  this.#feeJuiceAddress = feeJuiceAddress;
29
119
  this.#gasFees = gasFees;
30
120
  }
31
121
 
32
122
  async validateTx(tx: Tx): Promise<TxValidationResult> {
33
- const gasLimitValidation = this.#validateGasLimit(tx);
123
+ const gasLimitValidation = new GasLimitsValidator(this.bindings).validateGasLimit(tx);
34
124
  if (gasLimitValidation.result === 'invalid') {
35
125
  return Promise.resolve(gasLimitValidation);
36
126
  }
@@ -64,36 +154,14 @@ export class GasTxValidator implements TxValidator<Tx> {
64
154
  }
65
155
 
66
156
  /**
67
- * Check whether the tx's gas limit is above the minimum amount.
157
+ * Checks the fee payer has enough FeeJuice balance to cover the tx's fee limit.
158
+ * Accounts for any pending claim from a setup-phase `_increase_public_balance` call.
68
159
  */
69
- #validateGasLimit(tx: Tx): TxValidationResult {
70
- const gasLimits = tx.data.constants.txContext.gasSettings.gasLimits;
71
- const minGasLimits = new Gas(FIXED_DA_GAS, FIXED_L2_GAS);
72
-
73
- if (minGasLimits.gtAny(gasLimits)) {
74
- this.#log.verbose(`Rejecting transaction due to the gas limit(s) not being above the minimum gas limit`, {
75
- gasLimits,
76
- minGasLimits,
77
- });
78
- return { result: 'invalid', reason: [TX_ERROR_INSUFFICIENT_GAS_LIMIT] };
79
- }
80
-
81
- if (gasLimits.l2Gas > AVM_MAX_PROCESSABLE_L2_GAS) {
82
- this.#log.verbose(`Rejecting transaction due to the gas limit(s) being higher than the maximum processable gas`, {
83
- gasLimits,
84
- minGasLimits,
85
- });
86
- return { result: 'invalid', reason: [TX_ERROR_GAS_LIMIT_TOO_HIGH] };
87
- }
88
-
89
- return { result: 'valid' };
90
- }
91
-
92
160
  public async validateTxFee(tx: Tx): Promise<TxValidationResult> {
93
161
  const feePayer = tx.data.feePayer;
94
162
 
95
163
  // Compute the maximum fee that this tx may pay, based on its gasLimits and maxFeePerGas
96
- const feeLimit = tx.data.constants.txContext.gasSettings.getFeeLimit();
164
+ const feeLimit = getTxFeeLimit(tx);
97
165
 
98
166
  // Read current balance of the feePayer
99
167
  const initialBalance = await this.#publicDataSource.storageRead(
@@ -102,30 +170,14 @@ export class GasTxValidator implements TxValidator<Tx> {
102
170
  );
103
171
 
104
172
  // If there is a claim in this tx that increases the fee payer balance in Fee Juice, add it to balance
105
- const setupFns = getCallRequestsWithCalldataByPhase(tx, TxExecutionPhase.SETUP);
106
- const increasePublicBalanceSelector = await FunctionSelector.fromSignature(
107
- '_increase_public_balance((Field),u128)',
108
- );
109
-
110
- // Arguments of the claim function call:
111
- // - args[0]: Amount recipient.
112
- // - args[1]: Amount being claimed.
113
- const claimFunctionCall = setupFns.find(
114
- fn =>
115
- fn.request.contractAddress.equals(this.#feeJuiceAddress) &&
116
- fn.request.msgSender.equals(this.#feeJuiceAddress) &&
117
- fn.calldata.length > 2 &&
118
- fn.functionSelector.equals(increasePublicBalanceSelector) &&
119
- fn.args[0].equals(feePayer.toField()) &&
120
- !fn.request.isStaticCall,
121
- );
173
+ const claimAmount = await getFeePayerClaimAmount(tx, this.#feeJuiceAddress);
174
+ const balance = initialBalance.toBigInt() + claimAmount;
122
175
 
123
- const balance = claimFunctionCall ? initialBalance.add(claimFunctionCall.args[1]) : initialBalance;
124
- if (balance.lt(feeLimit)) {
176
+ if (balance < feeLimit) {
125
177
  this.#log.verbose(`Rejecting transaction due to not enough fee payer balance`, {
126
178
  feePayer,
127
- balance: balance.toBigInt(),
128
- feeLimit: feeLimit.toBigInt(),
179
+ balance,
180
+ feeLimit,
129
181
  });
130
182
  return { result: 'invalid', reason: [TX_ERROR_INSUFFICIENT_FEE_PAYER_BALANCE] };
131
183
  }
@@ -8,6 +8,9 @@ export * from './gas_validator.js';
8
8
  export * from './phases_validator.js';
9
9
  export * from './test_utils.js';
10
10
  export * from './allowed_public_setup.js';
11
+ export * from './allowed_setup_helpers.js';
11
12
  export * from './archive_cache.js';
12
13
  export * from './tx_permitted_validator.js';
13
14
  export * from './timestamp_validator.js';
15
+ export * from './size_validator.js';
16
+ export * from './factory.js';
@@ -1,5 +1,5 @@
1
- import type { Fr } from '@aztec/foundation/fields';
2
- import { createLogger } from '@aztec/foundation/log';
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
3
3
  import {
4
4
  type AnyTx,
5
5
  TX_ERROR_INCORRECT_L1_CHAIN_ID,
@@ -11,7 +11,7 @@ import {
11
11
  } from '@aztec/stdlib/tx';
12
12
 
13
13
  export class MetadataTxValidator<T extends AnyTx> implements TxValidator<T> {
14
- #log = createLogger('p2p:tx_validator:tx_metadata');
14
+ #log: Logger;
15
15
 
16
16
  constructor(
17
17
  private values: {
@@ -20,21 +20,32 @@ export class MetadataTxValidator<T extends AnyTx> implements TxValidator<T> {
20
20
  vkTreeRoot: Fr;
21
21
  protocolContractsHash: Fr;
22
22
  },
23
- ) {}
23
+ bindings?: LoggerBindings,
24
+ ) {
25
+ this.#log = createLogger('p2p:tx_validator:tx_metadata', bindings);
26
+ }
24
27
 
25
28
  validateTx(tx: T): Promise<TxValidationResult> {
26
29
  const errors = [];
27
30
  if (!this.#hasCorrectL1ChainId(tx)) {
28
- errors.push(TX_ERROR_INCORRECT_L1_CHAIN_ID);
31
+ errors.push(
32
+ `${TX_ERROR_INCORRECT_L1_CHAIN_ID} (tx: ${tx.data.constants.txContext.chainId.toNumber()}, expected: ${this.values.l1ChainId.toNumber()})`,
33
+ );
29
34
  }
30
35
  if (!this.#hasCorrectRollupVersion(tx)) {
31
- errors.push(TX_ERROR_INCORRECT_ROLLUP_VERSION);
36
+ errors.push(
37
+ `${TX_ERROR_INCORRECT_ROLLUP_VERSION} (tx: ${tx.data.constants.txContext.version.toNumber()}, expected: ${this.values.rollupVersion.toNumber()})`,
38
+ );
32
39
  }
33
40
  if (!this.#hasCorrectVkTreeRoot(tx)) {
34
- errors.push(TX_ERROR_INCORRECT_VK_TREE_ROOT);
41
+ errors.push(
42
+ `${TX_ERROR_INCORRECT_VK_TREE_ROOT} (tx: ${tx.data.constants.vkTreeRoot.toString()}, expected: ${this.values.vkTreeRoot.toString()})`,
43
+ );
35
44
  }
36
45
  if (!this.#hasCorrectprotocolContractsHash(tx)) {
37
- errors.push(TX_ERROR_INCORRECT_PROTOCOL_CONTRACTS_HASH);
46
+ errors.push(
47
+ `${TX_ERROR_INCORRECT_PROTOCOL_CONTRACTS_HASH} (tx: ${tx.data.constants.protocolContractsHash.toString()}, expected: ${this.values.protocolContractsHash.toString()})`,
48
+ );
38
49
  }
39
50
  return Promise.resolve(errors.length > 0 ? { result: 'invalid', reason: errors } : { result: 'valid' });
40
51
  }
@@ -43,7 +54,9 @@ export class MetadataTxValidator<T extends AnyTx> implements TxValidator<T> {
43
54
  // This gets implicitly tested in the proof validator, but we can get a much cheaper check here by looking early at the vk.
44
55
  if (!tx.data.constants.vkTreeRoot.equals(this.values.vkTreeRoot)) {
45
56
  this.#log.verbose(
46
- `Rejecting tx ${'txHash' in tx ? tx.txHash : tx.hash} because of incorrect vk tree root ${tx.data.constants.vkTreeRoot.toString()} != ${this.values.vkTreeRoot.toString()}`,
57
+ `Rejecting tx ${
58
+ 'txHash' in tx ? tx.txHash : tx.hash
59
+ } because of incorrect vk tree root ${tx.data.constants.vkTreeRoot.toString()} != ${this.values.vkTreeRoot.toString()}`,
47
60
  );
48
61
  return false;
49
62
  } else {
@@ -54,7 +67,9 @@ export class MetadataTxValidator<T extends AnyTx> implements TxValidator<T> {
54
67
  #hasCorrectprotocolContractsHash(tx: T): boolean {
55
68
  if (!tx.data.constants.protocolContractsHash.equals(this.values.protocolContractsHash)) {
56
69
  this.#log.verbose(
57
- `Rejecting tx ${'txHash' in tx ? tx.txHash : tx.hash} because of incorrect protocol contracts hash ${tx.data.constants.protocolContractsHash.toString()} != ${this.values.protocolContractsHash.toString()}`,
70
+ `Rejecting tx ${
71
+ 'txHash' in tx ? tx.txHash : tx.hash
72
+ } because of incorrect protocol contracts hash ${tx.data.constants.protocolContractsHash.toString()} != ${this.values.protocolContractsHash.toString()}`,
58
73
  );
59
74
  return false;
60
75
  }
@@ -64,7 +79,9 @@ export class MetadataTxValidator<T extends AnyTx> implements TxValidator<T> {
64
79
  #hasCorrectL1ChainId(tx: T): boolean {
65
80
  if (!tx.data.constants.txContext.chainId.equals(this.values.l1ChainId)) {
66
81
  this.#log.verbose(
67
- `Rejecting tx ${'txHash' in tx ? tx.txHash : tx.hash} because of incorrect L1 chain ${tx.data.constants.txContext.chainId.toNumber()} != ${this.values.l1ChainId.toNumber()}`,
82
+ `Rejecting tx ${
83
+ 'txHash' in tx ? tx.txHash : tx.hash
84
+ } because of incorrect L1 chain ${tx.data.constants.txContext.chainId.toNumber()} != ${this.values.l1ChainId.toNumber()}`,
68
85
  );
69
86
  return false;
70
87
  } else {
@@ -75,7 +92,9 @@ export class MetadataTxValidator<T extends AnyTx> implements TxValidator<T> {
75
92
  #hasCorrectRollupVersion(tx: T): boolean {
76
93
  if (!tx.data.constants.txContext.version.equals(this.values.rollupVersion)) {
77
94
  this.#log.verbose(
78
- `Rejecting tx ${'txHash' in tx ? tx.txHash : tx.hash} because of incorrect rollup version ${tx.data.constants.txContext.version.toNumber()} != ${this.values.rollupVersion.toNumber()}`,
95
+ `Rejecting tx ${
96
+ 'txHash' in tx ? tx.txHash : tx.hash
97
+ } because of incorrect rollup version ${tx.data.constants.txContext.version.toNumber()} != ${this.values.rollupVersion.toNumber()}`,
79
98
  );
80
99
  return false;
81
100
  } else {
@@ -0,0 +1,30 @@
1
+ import type { NullifierSource } from '@aztec/p2p';
2
+ import type { MerkleTreeReadOperations } from '@aztec/stdlib/interfaces/server';
3
+ import { MerkleTreeId } from '@aztec/stdlib/trees';
4
+
5
+ /**
6
+ * Implements a nullifier source by checking a DB and an in-memory collection.
7
+ * Intended for validating transactions as they are added to a block.
8
+ */
9
+ export class NullifierCache implements NullifierSource {
10
+ nullifiers: Set<string>;
11
+
12
+ constructor(private db: MerkleTreeReadOperations) {
13
+ this.nullifiers = new Set();
14
+ }
15
+
16
+ public async nullifiersExist(nullifiers: Buffer[]): Promise<boolean[]> {
17
+ const cacheResults = nullifiers.map(n => this.nullifiers.has(n.toString()));
18
+ const toCheckDb = nullifiers.filter((_n, index) => !cacheResults[index]);
19
+ const dbHits = await this.db.findLeafIndices(MerkleTreeId.NULLIFIER_TREE, toCheckDb);
20
+
21
+ let dbIndex = 0;
22
+ return nullifiers.map((_n, index) => cacheResults[index] || dbHits[dbIndex++] !== undefined);
23
+ }
24
+
25
+ public addNullifiers(nullifiers: Buffer[]) {
26
+ for (const nullifier of nullifiers) {
27
+ this.nullifiers.add(nullifier.toString());
28
+ }
29
+ }
30
+ }
@@ -1,11 +1,17 @@
1
- import { createLogger } from '@aztec/foundation/log';
1
+ import { NULL_MSG_SENDER_CONTRACT_ADDRESS } from '@aztec/constants';
2
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
3
  import { PublicContractsDB, getCallRequestsWithCalldataByPhase } from '@aztec/simulator/server';
4
+ import { AztecAddress } from '@aztec/stdlib/aztec-address';
3
5
  import type { ContractDataSource } from '@aztec/stdlib/contract';
4
6
  import type { AllowedElement } from '@aztec/stdlib/interfaces/server';
5
7
  import {
6
8
  type PublicCallRequestWithCalldata,
7
9
  TX_ERROR_DURING_VALIDATION,
8
10
  TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED,
11
+ TX_ERROR_SETUP_FUNCTION_UNKNOWN_CONTRACT,
12
+ TX_ERROR_SETUP_NULL_MSG_SENDER,
13
+ TX_ERROR_SETUP_ONLY_SELF_WRONG_SENDER,
14
+ TX_ERROR_SETUP_WRONG_CALLDATA_LENGTH,
9
15
  Tx,
10
16
  TxExecutionPhase,
11
17
  type TxValidationResult,
@@ -14,15 +20,17 @@ import {
14
20
  import type { UInt64 } from '@aztec/stdlib/types';
15
21
 
16
22
  export class PhasesTxValidator implements TxValidator<Tx> {
17
- #log = createLogger('sequencer:tx_validator:tx_phases');
23
+ #log: Logger;
18
24
  private contractsDB: PublicContractsDB;
19
25
 
20
26
  constructor(
21
27
  contracts: ContractDataSource,
22
28
  private setupAllowList: AllowedElement[],
23
29
  private timestamp: UInt64,
30
+ bindings?: LoggerBindings,
24
31
  ) {
25
- this.contractsDB = new PublicContractsDB(contracts);
32
+ this.#log = createLogger('sequencer:tx_validator:tx_phases', bindings);
33
+ this.contractsDB = new PublicContractsDB(contracts, bindings);
26
34
  }
27
35
 
28
36
  async validateTx(tx: Tx): Promise<TxValidationResult> {
@@ -43,7 +51,8 @@ export class PhasesTxValidator implements TxValidator<Tx> {
43
51
 
44
52
  const setupFns = getCallRequestsWithCalldataByPhase(tx, TxExecutionPhase.SETUP);
45
53
  for (const setupFn of setupFns) {
46
- if (!(await this.isOnAllowList(setupFn, this.setupAllowList))) {
54
+ const rejectionReason = await this.checkAllowList(setupFn, this.setupAllowList);
55
+ if (rejectionReason) {
47
56
  this.#log.verbose(
48
57
  `Rejecting tx ${tx.getTxHash().toString()} because it calls setup function not on allow list: ${
49
58
  setupFn.request.contractAddress
@@ -51,7 +60,7 @@ export class PhasesTxValidator implements TxValidator<Tx> {
51
60
  { allowList: this.setupAllowList },
52
61
  );
53
62
 
54
- return { result: 'invalid', reason: [TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED] };
63
+ return { result: 'invalid', reason: [rejectionReason] };
55
64
  }
56
65
  }
57
66
 
@@ -64,53 +73,71 @@ export class PhasesTxValidator implements TxValidator<Tx> {
64
73
  }
65
74
  }
66
75
 
67
- private async isOnAllowList(
76
+ /** Returns a rejection reason if the call is not on the allow list, or undefined if it is allowed. */
77
+ private async checkAllowList(
68
78
  publicCall: PublicCallRequestWithCalldata,
69
79
  allowList: AllowedElement[],
70
- ): Promise<boolean> {
80
+ ): Promise<string | undefined> {
71
81
  if (publicCall.isEmpty()) {
72
- return true;
82
+ return undefined;
73
83
  }
74
84
 
75
85
  const contractAddress = publicCall.request.contractAddress;
76
86
  const functionSelector = publicCall.functionSelector;
77
87
 
78
- // do these checks first since they don't require the contract class
88
+ // Check address-based entries first since they don't require the contract class.
79
89
  for (const entry of allowList) {
80
- if ('address' in entry && !('selector' in entry)) {
81
- if (contractAddress.equals(entry.address)) {
82
- return true;
83
- }
84
- }
85
-
86
- if ('address' in entry && 'selector' in entry) {
90
+ if ('address' in entry) {
87
91
  if (contractAddress.equals(entry.address) && entry.selector.equals(functionSelector)) {
88
- return true;
92
+ if (entry.calldataLength !== undefined && publicCall.calldata.length !== entry.calldataLength) {
93
+ return TX_ERROR_SETUP_WRONG_CALLDATA_LENGTH;
94
+ }
95
+ if (entry.onlySelf && !publicCall.request.msgSender.equals(contractAddress)) {
96
+ return TX_ERROR_SETUP_ONLY_SELF_WRONG_SENDER;
97
+ }
98
+ if (
99
+ entry.rejectNullMsgSender &&
100
+ publicCall.request.msgSender.equals(AztecAddress.fromBigInt(NULL_MSG_SENDER_CONTRACT_ADDRESS))
101
+ ) {
102
+ return TX_ERROR_SETUP_NULL_MSG_SENDER;
103
+ }
104
+ return undefined;
89
105
  }
90
106
  }
107
+ }
91
108
 
92
- const contractClass = await this.contractsDB.getContractInstance(contractAddress, this.timestamp);
93
-
94
- if (!contractClass) {
95
- throw new Error(`Contract not found: ${contractAddress}`);
109
+ // Check class-based entries. Fetch the contract instance lazily (only once).
110
+ let contractClassId: undefined | { value: string | undefined };
111
+ for (const entry of allowList) {
112
+ if (!('classId' in entry)) {
113
+ continue;
96
114
  }
97
115
 
98
- if ('classId' in entry && !('selector' in entry)) {
99
- if (contractClass.currentContractClassId.equals(entry.classId)) {
100
- return true;
116
+ if (contractClassId === undefined) {
117
+ const instance = await this.contractsDB.getContractInstance(contractAddress, this.timestamp);
118
+ contractClassId = { value: instance?.currentContractClassId.toString() };
119
+ if (!contractClassId.value) {
120
+ return TX_ERROR_SETUP_FUNCTION_UNKNOWN_CONTRACT;
101
121
  }
102
122
  }
103
123
 
104
- if ('classId' in entry && 'selector' in entry) {
124
+ if (contractClassId.value === entry.classId.toString() && entry.selector.equals(functionSelector)) {
125
+ if (entry.calldataLength !== undefined && publicCall.calldata.length !== entry.calldataLength) {
126
+ return TX_ERROR_SETUP_WRONG_CALLDATA_LENGTH;
127
+ }
128
+ if (entry.onlySelf && !publicCall.request.msgSender.equals(contractAddress)) {
129
+ return TX_ERROR_SETUP_ONLY_SELF_WRONG_SENDER;
130
+ }
105
131
  if (
106
- contractClass.currentContractClassId.equals(entry.classId) &&
107
- (entry.selector === undefined || entry.selector.equals(functionSelector))
132
+ entry.rejectNullMsgSender &&
133
+ publicCall.request.msgSender.equals(AztecAddress.fromBigInt(NULL_MSG_SENDER_CONTRACT_ADDRESS))
108
134
  ) {
109
- return true;
135
+ return TX_ERROR_SETUP_NULL_MSG_SENDER;
110
136
  }
137
+ return undefined;
111
138
  }
112
139
  }
113
140
 
114
- return false;
141
+ return TX_ERROR_SETUP_FUNCTION_NOT_ALLOWED;
115
142
  }
116
143
  }
@@ -0,0 +1,22 @@
1
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
+ import { MAX_TX_SIZE_KB } from '@aztec/stdlib/p2p';
3
+ import { Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
4
+
5
+ export class SizeTxValidator implements TxValidator<Tx> {
6
+ #log: Logger;
7
+
8
+ constructor(bindings?: LoggerBindings) {
9
+ this.#log = createLogger('p2p:tx_validator:tx_size', bindings);
10
+ }
11
+
12
+ validateTx(tx: Tx): Promise<TxValidationResult> {
13
+ const txSize = tx.getSize();
14
+ if (txSize > MAX_TX_SIZE_KB * 1024) {
15
+ this.#log.verbose(
16
+ `Rejecting transaction ${tx.getTxHash().toString()}. Reason: size above size limit. ${txSize}bytes > ${MAX_TX_SIZE_KB}Kb`,
17
+ );
18
+ return Promise.resolve({ result: 'invalid', reason: ['Transaction size above size limit'] });
19
+ }
20
+ return Promise.resolve({ result: 'valid' });
21
+ }
22
+ }
@@ -1,4 +1,4 @@
1
- import type { Fr } from '@aztec/foundation/fields';
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import type { FunctionSelector } from '@aztec/stdlib/abi';
3
3
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
4
4
  import { HashedValues, type Tx } from '@aztec/stdlib/tx';
@@ -1,15 +1,25 @@
1
- import { createLogger } from '@aztec/foundation/log';
2
- import {
3
- type AnyTx,
4
- TX_ERROR_INVALID_INCLUDE_BY_TIMESTAMP,
5
- type TxValidationResult,
6
- type TxValidator,
7
- getTxHash,
8
- } from '@aztec/stdlib/tx';
1
+ import type { BlockNumber } from '@aztec/foundation/branded-types';
2
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
3
+ import { TX_ERROR_INVALID_EXPIRATION_TIMESTAMP, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
9
4
  import type { UInt64 } from '@aztec/stdlib/types';
10
5
 
11
- export class TimestampTxValidator<T extends AnyTx> implements TxValidator<T> {
12
- #log = createLogger('p2p:tx_validator:timestamp');
6
+ /** Structural interface for timestamp validation. */
7
+ export interface HasTimestampData {
8
+ txHash: { toString(): string };
9
+ data: {
10
+ expirationTimestamp: bigint;
11
+ constants: {
12
+ anchorBlockHeader: {
13
+ globalVariables: {
14
+ blockNumber: BlockNumber;
15
+ };
16
+ };
17
+ };
18
+ };
19
+ }
20
+
21
+ export class TimestampTxValidator<T extends HasTimestampData> implements TxValidator<T> {
22
+ #log: Logger;
13
23
 
14
24
  constructor(
15
25
  private values: {
@@ -17,28 +27,29 @@ export class TimestampTxValidator<T extends AnyTx> implements TxValidator<T> {
17
27
  // being built.
18
28
  timestamp: UInt64;
19
29
  // Block number in which the tx is considered to be included.
20
- blockNumber: number;
30
+ blockNumber: BlockNumber;
21
31
  },
22
- ) {}
32
+ bindings?: LoggerBindings,
33
+ ) {
34
+ this.#log = createLogger('p2p:tx_validator:timestamp', bindings);
35
+ }
23
36
 
24
37
  validateTx(tx: T): Promise<TxValidationResult> {
25
- const includeByTimestamp = tx.data.includeByTimestamp;
26
- // If building block 1, we skip the expiration check. For details on why see the `validate_include_by_timestamp`
38
+ const expirationTimestamp = tx.data.expirationTimestamp;
39
+ // If building block 1, we skip the expiration check. For details on why see the `validate_expiration_timestamp`
27
40
  // function in `noir-projects/noir-protocol-circuits/crates/rollup-lib/src/base/components/validation_requests.nr`.
28
41
  const buildingBlock1 = this.values.blockNumber === 1;
29
42
 
30
- if (!buildingBlock1 && includeByTimestamp < this.values.timestamp) {
43
+ if (!buildingBlock1 && expirationTimestamp < this.values.timestamp) {
31
44
  if (tx.data.constants.anchorBlockHeader.globalVariables.blockNumber === 0) {
32
45
  this.#log.warn(
33
46
  `A tx built against a genesis block failed to be included in block 1 which is the only block in which txs built against a genesis block are allowed to be included.`,
34
47
  );
35
48
  }
36
49
  this.#log.verbose(
37
- `Rejecting tx ${getTxHash(tx)} for low expiration timestamp. Tx expiration timestamp: ${includeByTimestamp}, timestamp: ${
38
- this.values.timestamp
39
- }.`,
50
+ `Rejecting tx ${tx.txHash} for low expiration timestamp. Tx expiration timestamp: ${expirationTimestamp}, timestamp: ${this.values.timestamp}.`,
40
51
  );
41
- return Promise.resolve({ result: 'invalid', reason: [TX_ERROR_INVALID_INCLUDE_BY_TIMESTAMP] });
52
+ return Promise.resolve({ result: 'invalid', reason: [TX_ERROR_INVALID_EXPIRATION_TIMESTAMP] });
42
53
  } else {
43
54
  return Promise.resolve({ result: 'valid' });
44
55
  }
@@ -1,10 +1,15 @@
1
- import { createLogger } from '@aztec/foundation/log';
1
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
2
  import type { Tx, TxValidationResult, TxValidator } from '@aztec/stdlib/tx';
3
3
 
4
4
  export class TxPermittedValidator implements TxValidator<Tx> {
5
- #log = createLogger('p2p:tx_validator:tx_permitted');
5
+ #log: Logger;
6
6
 
7
- constructor(private permitted: boolean) {}
7
+ constructor(
8
+ private permitted: boolean,
9
+ bindings?: LoggerBindings,
10
+ ) {
11
+ this.#log = createLogger('p2p:tx_validator:tx_permitted', bindings);
12
+ }
8
13
 
9
14
  validateTx(tx: Tx): Promise<TxValidationResult> {
10
15
  if (!this.permitted) {
@@ -1,11 +1,16 @@
1
- import { createLogger } from '@aztec/foundation/log';
1
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
2
  import type { ClientProtocolCircuitVerifier } from '@aztec/stdlib/interfaces/server';
3
3
  import { TX_ERROR_INVALID_PROOF, Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
4
4
 
5
5
  export class TxProofValidator implements TxValidator<Tx> {
6
- #log = createLogger('p2p:tx_validator:private_proof');
6
+ #log: Logger;
7
7
 
8
- constructor(private verifier: ClientProtocolCircuitVerifier) {}
8
+ constructor(
9
+ private verifier: ClientProtocolCircuitVerifier,
10
+ bindings?: LoggerBindings,
11
+ ) {
12
+ this.#log = createLogger('p2p:tx_validator:proof', bindings);
13
+ }
9
14
 
10
15
  async validateTx(tx: Tx): Promise<TxValidationResult> {
11
16
  const result = await this.verifier.verifyProof(tx);