@aztec/p2p 0.0.1-commit.b33fc05d0 → 0.0.1-commit.b3d3157a

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 (418) hide show
  1. package/README.md +129 -3
  2. package/dest/bootstrap/bootstrap.d.ts +1 -1
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +9 -1
  5. package/dest/client/factory.d.ts +4 -3
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +26 -14
  8. package/dest/client/interface.d.ts +14 -5
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +13 -9
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +88 -26
  13. package/dest/config.d.ts +135 -99
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +62 -7
  16. package/dest/errors/p2p-service.error.d.ts +9 -0
  17. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  18. package/dest/errors/p2p-service.error.js +10 -0
  19. package/dest/errors/reqresp.error.d.ts +1 -20
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +0 -21
  22. package/dest/index.d.ts +1 -2
  23. package/dest/index.d.ts.map +1 -1
  24. package/dest/index.js +0 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +99 -59
  26. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool.js +265 -199
  28. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +181 -65
  31. package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
  32. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/mocks.js +6 -4
  34. package/dest/mem_pools/index.d.ts +1 -2
  35. package/dest/mem_pools/index.d.ts.map +1 -1
  36. package/dest/mem_pools/instrumentation.d.ts +1 -1
  37. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  38. package/dest/mem_pools/instrumentation.js +17 -1
  39. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +1 -5
  40. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +1 -7
  42. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  43. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +2 -1
  45. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  46. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  47. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  48. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  49. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  50. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  51. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  52. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +10 -5
  53. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  54. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +13 -3
  55. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  56. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +20 -7
  57. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
  58. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  59. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +3 -0
  60. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +1 -1
  61. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  62. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +84 -86
  63. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
  64. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  65. package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
  66. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  67. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  68. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  69. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  70. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  71. package/dest/msg_validators/clock_tolerance.js +56 -3
  72. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -2
  73. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  74. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -2
  75. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  76. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +10 -2
  77. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  78. package/dest/msg_validators/proposal_validator/proposal_validator.js +46 -12
  79. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  80. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  81. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  82. package/dest/msg_validators/tx_validator/allowed_public_setup.js +3 -3
  83. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  84. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  85. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  86. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  87. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  88. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  89. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  90. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  91. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  92. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  93. package/dest/msg_validators/tx_validator/factory.d.ts +14 -5
  94. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  95. package/dest/msg_validators/tx_validator/factory.js +36 -13
  96. package/dest/msg_validators/tx_validator/gas_validator.d.ts +36 -4
  97. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/gas_validator.js +50 -33
  99. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  100. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/index.js +2 -0
  102. package/dest/msg_validators/tx_validator/phases_validator.d.ts +21 -1
  103. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  104. package/dest/msg_validators/tx_validator/phases_validator.js +28 -1
  105. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  106. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  107. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  108. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  109. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  110. package/dest/msg_validators/tx_validator/tx_validation_cache.js +68 -0
  111. package/dest/services/data_store.d.ts +1 -1
  112. package/dest/services/data_store.d.ts.map +1 -1
  113. package/dest/services/data_store.js +5 -5
  114. package/dest/services/discv5/discV5_service.d.ts +2 -1
  115. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  116. package/dest/services/discv5/discV5_service.js +35 -8
  117. package/dest/services/dummy_service.d.ts +11 -15
  118. package/dest/services/dummy_service.d.ts.map +1 -1
  119. package/dest/services/dummy_service.js +12 -16
  120. package/dest/services/encoding.d.ts +5 -1
  121. package/dest/services/encoding.d.ts.map +1 -1
  122. package/dest/services/encoding.js +7 -1
  123. package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
  124. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  125. package/dest/services/gossipsub/topic_score_params.js +21 -4
  126. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  127. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  128. package/dest/services/libp2p/instrumentation.js +14 -0
  129. package/dest/services/libp2p/libp2p_service.d.ts +36 -46
  130. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  131. package/dest/services/libp2p/libp2p_service.js +272 -262
  132. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  133. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  134. package/dest/services/peer-manager/peer_manager.js +38 -10
  135. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  136. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  137. package/dest/services/peer-manager/peer_scoring.js +32 -10
  138. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +4 -8
  139. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  140. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +81 -86
  141. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
  142. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  143. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  144. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  145. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  146. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
  147. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  148. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
  149. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  150. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  151. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  152. package/dest/services/reqresp/config.d.ts +3 -3
  153. package/dest/services/reqresp/config.d.ts.map +1 -1
  154. package/dest/services/reqresp/interface.d.ts +16 -18
  155. package/dest/services/reqresp/interface.d.ts.map +1 -1
  156. package/dest/services/reqresp/interface.js +10 -20
  157. package/dest/services/reqresp/metrics.d.ts +1 -1
  158. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  159. package/dest/services/reqresp/metrics.js +0 -1
  160. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +4 -3
  161. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  162. package/dest/services/reqresp/protocols/block_txs/bitvector.js +3 -2
  163. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  164. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  165. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +31 -28
  166. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +12 -7
  167. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  168. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +42 -24
  169. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  170. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  171. package/dest/services/reqresp/protocols/index.js +0 -1
  172. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  173. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  174. package/dest/services/reqresp/protocols/tx.js +1 -3
  175. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  176. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  177. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  178. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  179. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  180. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  181. package/dest/services/reqresp/reqresp.d.ts +7 -29
  182. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  183. package/dest/services/reqresp/reqresp.js +41 -214
  184. package/dest/services/service.d.ts +9 -12
  185. package/dest/services/service.d.ts.map +1 -1
  186. package/dest/services/tx_collection/config.d.ts +2 -23
  187. package/dest/services/tx_collection/config.d.ts.map +1 -1
  188. package/dest/services/tx_collection/config.js +2 -55
  189. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  190. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  191. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  192. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  193. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  194. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  195. package/dest/services/tx_collection/index.d.ts +2 -3
  196. package/dest/services/tx_collection/index.d.ts.map +1 -1
  197. package/dest/services/tx_collection/index.js +0 -1
  198. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  199. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  200. package/dest/services/tx_collection/instrumentation.js +0 -2
  201. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  202. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  203. package/dest/services/tx_collection/request_tracker.js +84 -0
  204. package/dest/services/tx_collection/tx_collection.d.ts +36 -55
  205. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  206. package/dest/services/tx_collection/tx_collection.js +275 -119
  207. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  208. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  209. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  210. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  211. package/dest/services/tx_collection/tx_source.js +9 -7
  212. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  213. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  214. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  215. package/dest/services/tx_provider.d.ts +3 -1
  216. package/dest/services/tx_provider.d.ts.map +1 -1
  217. package/dest/services/tx_provider.js +3 -0
  218. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  219. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  220. package/dest/test-helpers/make-test-p2p-clients.js +5 -2
  221. package/dest/test-helpers/mock-pubsub.d.ts +23 -9
  222. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  223. package/dest/test-helpers/mock-pubsub.js +44 -44
  224. package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
  225. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  226. package/dest/test-helpers/reqresp-nodes.js +16 -18
  227. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  228. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  229. package/dest/test-helpers/test_tx_provider.js +3 -0
  230. package/dest/test-helpers/testbench-utils.d.ts +12 -14
  231. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  232. package/dest/test-helpers/testbench-utils.js +38 -14
  233. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  234. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  235. package/dest/testbench/p2p_client_testbench_worker.js +83 -38
  236. package/dest/testbench/worker_client_manager.d.ts +10 -6
  237. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  238. package/dest/testbench/worker_client_manager.js +51 -9
  239. package/dest/util.d.ts +11 -6
  240. package/dest/util.d.ts.map +1 -1
  241. package/dest/util.js +35 -14
  242. package/dest/versioning.d.ts +3 -6
  243. package/dest/versioning.d.ts.map +1 -1
  244. package/dest/versioning.js +3 -24
  245. package/package.json +15 -14
  246. package/src/bootstrap/bootstrap.ts +9 -1
  247. package/src/client/factory.ts +49 -7
  248. package/src/client/interface.ts +15 -11
  249. package/src/client/p2p_client.ts +104 -47
  250. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  251. package/src/config.ts +123 -6
  252. package/src/errors/p2p-service.error.ts +11 -0
  253. package/src/errors/reqresp.error.ts +0 -25
  254. package/src/index.ts +0 -1
  255. package/src/mem_pools/attestation_pool/attestation_pool.ts +316 -241
  256. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +204 -68
  257. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  258. package/src/mem_pools/index.ts +0 -3
  259. package/src/mem_pools/instrumentation.ts +5 -1
  260. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +1 -9
  261. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  262. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  263. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  264. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  265. package/src/mem_pools/tx_pool_v2/interfaces.ts +9 -4
  266. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +31 -9
  267. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +13 -1
  268. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +85 -92
  269. package/src/msg_validators/attestation_validator/README.md +49 -0
  270. package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
  271. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -7
  272. package/src/msg_validators/clock_tolerance.ts +73 -3
  273. package/src/msg_validators/proposal_validator/README.md +123 -0
  274. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +12 -2
  275. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +17 -2
  276. package/src/msg_validators/proposal_validator/proposal_validator.ts +54 -10
  277. package/src/msg_validators/tx_validator/README.md +15 -3
  278. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  279. package/src/msg_validators/tx_validator/allowed_public_setup.ts +3 -3
  280. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  281. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  282. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  283. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  284. package/src/msg_validators/tx_validator/factory.ts +46 -8
  285. package/src/msg_validators/tx_validator/gas_validator.ts +82 -33
  286. package/src/msg_validators/tx_validator/index.ts +2 -0
  287. package/src/msg_validators/tx_validator/phases_validator.ts +31 -1
  288. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  289. package/src/msg_validators/tx_validator/tx_validation_cache.ts +101 -0
  290. package/src/services/data_store.ts +5 -13
  291. package/src/services/discv5/discV5_service.ts +38 -5
  292. package/src/services/dummy_service.ts +14 -39
  293. package/src/services/encoding.ts +9 -1
  294. package/src/services/gossipsub/topic_score_params.ts +36 -4
  295. package/src/services/libp2p/instrumentation.ts +14 -0
  296. package/src/services/libp2p/libp2p_service.ts +302 -300
  297. package/src/services/peer-manager/peer_manager.ts +44 -10
  298. package/src/services/peer-manager/peer_scoring.ts +27 -5
  299. package/src/services/reqresp/README.md +215 -0
  300. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  301. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +77 -95
  302. package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
  303. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  304. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
  305. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  306. package/src/services/reqresp/config.ts +2 -2
  307. package/src/services/reqresp/interface.ts +21 -47
  308. package/src/services/reqresp/metrics.ts +0 -1
  309. package/src/services/reqresp/protocols/block_txs/bitvector.ts +3 -2
  310. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +34 -30
  311. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -20
  312. package/src/services/reqresp/protocols/index.ts +0 -1
  313. package/src/services/reqresp/protocols/tx.ts +1 -3
  314. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  315. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  316. package/src/services/reqresp/reqresp.ts +45 -260
  317. package/src/services/service.ts +12 -28
  318. package/src/services/tx_collection/config.ts +3 -80
  319. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  320. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  321. package/src/services/tx_collection/index.ts +1 -6
  322. package/src/services/tx_collection/instrumentation.ts +1 -7
  323. package/src/services/tx_collection/request_tracker.ts +127 -0
  324. package/src/services/tx_collection/tx_collection.ts +331 -176
  325. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  326. package/src/services/tx_collection/tx_source.ts +8 -7
  327. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  328. package/src/services/tx_provider.ts +5 -0
  329. package/src/test-helpers/make-test-p2p-clients.ts +3 -0
  330. package/src/test-helpers/mock-pubsub.ts +46 -60
  331. package/src/test-helpers/reqresp-nodes.ts +12 -22
  332. package/src/test-helpers/test_tx_provider.ts +5 -0
  333. package/src/test-helpers/testbench-utils.ts +50 -28
  334. package/src/testbench/p2p_client_testbench_worker.ts +87 -54
  335. package/src/testbench/worker_client_manager.ts +59 -20
  336. package/src/util.ts +32 -17
  337. package/src/versioning.ts +3 -33
  338. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  339. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  340. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -304
  341. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  342. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  343. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  344. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  345. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  346. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  347. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  348. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  349. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  350. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  351. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  352. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  353. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  354. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  355. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  356. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  357. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  358. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  359. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  360. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  361. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  362. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  363. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  364. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  365. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  366. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  367. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  368. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  369. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  370. package/dest/mem_pools/tx_pool/index.js +0 -2
  371. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  372. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  373. package/dest/mem_pools/tx_pool/priority.js +0 -16
  374. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  375. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  376. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  377. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  378. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  379. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -402
  380. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  381. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  382. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  383. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  384. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  385. package/dest/services/reqresp/protocols/block.js +0 -32
  386. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -54
  387. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  388. package/dest/services/tx_collection/fast_tx_collection.js +0 -327
  389. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  390. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  391. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  392. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
  393. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  394. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  395. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  396. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  397. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  398. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -345
  399. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  400. package/src/mem_pools/tx_pool/README.md +0 -270
  401. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  402. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  403. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  404. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  405. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  406. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  407. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  408. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  409. package/src/mem_pools/tx_pool/index.ts +0 -2
  410. package/src/mem_pools/tx_pool/priority.ts +0 -23
  411. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  412. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -321
  413. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  414. package/src/services/reqresp/protocols/block.ts +0 -37
  415. package/src/services/tx_collection/fast_tx_collection.ts +0 -387
  416. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
  417. package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
  418. package/src/services/tx_collection/slow_tx_collection.ts +0 -266
@@ -1,18 +1,26 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import { type BlockProposal, type CheckpointProposalCore, type ValidationResult } from '@aztec/stdlib/p2p';
2
+ import { type BlockProposal, type CheckpointProposalCore, type CoordinationSignatureContext, type ValidationResult } from '@aztec/stdlib/p2p';
3
3
  /** Validates header-level and tx-level fields of block and checkpoint proposals. */
4
4
  export declare class ProposalValidator {
5
5
  private epochCache;
6
6
  private logger;
7
7
  private txsPermitted;
8
8
  private maxTxsPerBlock?;
9
+ private maxBlocksPerCheckpoint?;
10
+ private pipeliningWindow;
11
+ private skipSlotValidation;
12
+ private signatureContext;
9
13
  constructor(epochCache: EpochCacheInterface, opts: {
10
14
  txsPermitted: boolean;
11
15
  maxTxsPerBlock?: number;
16
+ maxBlocksPerCheckpoint?: number;
17
+ p2pPropagationTime?: number;
18
+ skipSlotValidation?: boolean;
19
+ signatureContext: CoordinationSignatureContext;
12
20
  }, loggerName: string);
13
21
  /** Validates header-level fields: slot, signature, and proposer. */
14
22
  validate(proposal: BlockProposal | CheckpointProposalCore): Promise<ValidationResult>;
15
23
  /** Validates transaction-related fields of a block proposal. */
16
24
  validateTxs(proposal: BlockProposal): Promise<ValidationResult>;
17
25
  }
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sRUFDTCxLQUFLLGFBQWEsRUFDbEIsS0FBSyxzQkFBc0IsRUFFM0IsS0FBSyxnQkFBZ0IsRUFDdEIsTUFBTSxtQkFBbUIsQ0FBQztBQUkzQixvRkFBb0Y7QUFDcEYscUJBQWEsaUJBQWlCO0lBQzVCLE9BQU8sQ0FBQyxVQUFVLENBQXNCO0lBQ3hDLE9BQU8sQ0FBQyxNQUFNLENBQVM7SUFDdkIsT0FBTyxDQUFDLFlBQVksQ0FBVTtJQUM5QixPQUFPLENBQUMsY0FBYyxDQUFDLENBQVM7SUFFaEMsWUFDRSxVQUFVLEVBQUUsbUJBQW1CLEVBQy9CLElBQUksRUFBRTtRQUFFLFlBQVksRUFBRSxPQUFPLENBQUM7UUFBQyxjQUFjLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBRSxFQUN4RCxVQUFVLEVBQUUsTUFBTSxFQU1uQjtJQUVELG9FQUFvRTtJQUN2RCxRQUFRLENBQUMsUUFBUSxFQUFFLGFBQWEsR0FBRyxzQkFBc0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0F1Q2pHO0lBRUQsZ0VBQWdFO0lBQ25ELFdBQVcsQ0FBQyxRQUFRLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQXdDM0U7Q0FDRiJ9
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sRUFDTCxLQUFLLGFBQWEsRUFDbEIsS0FBSyxzQkFBc0IsRUFDM0IsS0FBSyw0QkFBNEIsRUFFakMsS0FBSyxnQkFBZ0IsRUFFdEIsTUFBTSxtQkFBbUIsQ0FBQztBQUkzQixvRkFBb0Y7QUFDcEYscUJBQWEsaUJBQWlCO0lBQzVCLE9BQU8sQ0FBQyxVQUFVLENBQXNCO0lBQ3hDLE9BQU8sQ0FBQyxNQUFNLENBQVM7SUFDdkIsT0FBTyxDQUFDLFlBQVksQ0FBVTtJQUM5QixPQUFPLENBQUMsY0FBYyxDQUFDLENBQVM7SUFDaEMsT0FBTyxDQUFDLHNCQUFzQixDQUFDLENBQVM7SUFDeEMsT0FBTyxDQUFDLGdCQUFnQixDQUFtQjtJQUMzQyxPQUFPLENBQUMsa0JBQWtCLENBQVU7SUFDcEMsT0FBTyxDQUFDLGdCQUFnQixDQUErQjtJQUV2RCxZQUNFLFVBQVUsRUFBRSxtQkFBbUIsRUFDL0IsSUFBSSxFQUFFO1FBQ0osWUFBWSxFQUFFLE9BQU8sQ0FBQztRQUN0QixjQUFjLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDeEIsc0JBQXNCLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDaEMsa0JBQWtCLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDNUIsa0JBQWtCLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDN0IsZ0JBQWdCLEVBQUUsNEJBQTRCLENBQUM7S0FDaEQsRUFDRCxVQUFVLEVBQUUsTUFBTSxFQVVuQjtJQUVELG9FQUFvRTtJQUN2RCxRQUFRLENBQUMsUUFBUSxFQUFFLGFBQWEsR0FBRyxzQkFBc0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FrRWpHO0lBRUQsZ0VBQWdFO0lBQ25ELFdBQVcsQ0FBQyxRQUFRLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQXdDM0U7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAE3B,KAAK,gBAAgB,EACtB,MAAM,mBAAmB,CAAC;AAI3B,oFAAoF;AACpF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,cAAc,CAAC,CAAS;IAEhC,YACE,UAAU,EAAE,mBAAmB,EAC/B,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,EACxD,UAAU,EAAE,MAAM,EAMnB;IAED,oEAAoE;IACvD,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuCjG;IAED,gEAAgE;IACnD,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwC3E;CACF"}
1
+ {"version":3,"file":"proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,4BAA4B,EAEjC,KAAK,gBAAgB,EAEtB,MAAM,mBAAmB,CAAC;AAI3B,oFAAoF;AACpF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,sBAAsB,CAAC,CAAS;IACxC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,kBAAkB,CAAU;IACpC,OAAO,CAAC,gBAAgB,CAA+B;IAEvD,YACE,UAAU,EAAE,mBAAmB,EAC/B,IAAI,EAAE;QACJ,YAAY,EAAE,OAAO,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,gBAAgB,EAAE,4BAA4B,CAAC;KAChD,EACD,UAAU,EAAE,MAAM,EAUnB;IAED,oEAAoE;IACvD,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkEjG;IAED,gEAAgE;IACnD,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwC3E;CACF"}
@@ -1,39 +1,66 @@
1
1
  import { NoCommitteeError } from '@aztec/ethereum/contracts';
2
2
  import { createLogger } from '@aztec/foundation/log';
3
- import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
4
- import { isWithinClockTolerance } from '../clock_tolerance.js';
3
+ import { PeerErrorSeverity, hasValidSignatureContext } from '@aztec/stdlib/p2p';
4
+ import { PipeliningWindow, isWithinClockTolerance } from '../clock_tolerance.js';
5
5
  /** Validates header-level and tx-level fields of block and checkpoint proposals. */ export class ProposalValidator {
6
6
  epochCache;
7
7
  logger;
8
8
  txsPermitted;
9
9
  maxTxsPerBlock;
10
+ maxBlocksPerCheckpoint;
11
+ pipeliningWindow;
12
+ skipSlotValidation;
13
+ signatureContext;
10
14
  constructor(epochCache, opts, loggerName){
11
15
  this.epochCache = epochCache;
12
16
  this.txsPermitted = opts.txsPermitted;
13
17
  this.maxTxsPerBlock = opts.maxTxsPerBlock;
18
+ this.maxBlocksPerCheckpoint = opts.maxBlocksPerCheckpoint;
19
+ this.pipeliningWindow = new PipeliningWindow(epochCache, {
20
+ p2pPropagationTime: opts.p2pPropagationTime
21
+ });
22
+ this.skipSlotValidation = opts.skipSlotValidation ?? false;
23
+ this.signatureContext = opts.signatureContext;
14
24
  this.logger = createLogger(loggerName);
15
25
  }
16
26
  /** Validates header-level fields: slot, signature, and proposer. */ async validate(proposal) {
17
27
  try {
18
- // Slot check
19
- const { currentSlot, nextSlot } = this.epochCache.getCurrentAndNextSlot();
28
+ // Cross-chain replay check: reject proposals that carry a foreign signing domain.
29
+ if (!hasValidSignatureContext(proposal, this.signatureContext)) {
30
+ this.logger.warn(`Penalizing peer for proposal with foreign signature context`, {
31
+ chainId: proposal.signatureContext.chainId,
32
+ rollupAddress: proposal.signatureContext.rollupAddress.toString(),
33
+ expectedChainId: this.signatureContext.chainId,
34
+ expectedRollupAddress: this.signatureContext.rollupAddress.toString()
35
+ });
36
+ return {
37
+ result: 'reject',
38
+ severity: PeerErrorSeverity.LowToleranceError
39
+ };
40
+ }
41
+ // Slot check: use target slots since proposals target pipeline slots (slot + 1 when pipelining).
42
+ const { targetSlot, nextSlot } = this.epochCache.getTargetAndNextSlot();
20
43
  const slotNumber = proposal.slotNumber;
21
- if (slotNumber !== currentSlot && slotNumber !== nextSlot) {
22
- // Check if message is for previous slot and within clock tolerance
23
- if (!isWithinClockTolerance(slotNumber, currentSlot, this.epochCache)) {
44
+ if (!this.skipSlotValidation && slotNumber !== targetSlot && slotNumber !== nextSlot) {
45
+ // When pipelining, accept proposals for the current slot (built in the previous slot)
46
+ // if they're still within the shared proposal acceptance window.
47
+ if (this.pipeliningWindow.acceptsProposal(slotNumber)) {
48
+ // Fall through to remaining validation (signature, proposer, etc.)
49
+ } else if (!isWithinClockTolerance(slotNumber, targetSlot, this.epochCache)) {
24
50
  this.logger.warn(`Penalizing peer for invalid slot number ${slotNumber}`, {
25
- currentSlot,
51
+ targetSlot,
26
52
  nextSlot
27
53
  });
28
54
  return {
29
55
  result: 'reject',
30
56
  severity: PeerErrorSeverity.HighToleranceError
31
57
  };
58
+ } else {
59
+ this.logger.verbose(`Ignoring proposal for previous slot ${slotNumber} within clock tolerance`);
60
+ return {
61
+ result: 'ignore'
62
+ };
32
63
  }
33
- this.logger.verbose(`Ignoring proposal for previous slot ${slotNumber} within clock tolerance`);
34
- return {
35
- result: 'ignore'
36
- };
37
64
  }
38
65
  // Signature validity
39
66
  const proposer = proposal.getSender();
@@ -56,6 +83,13 @@ import { isWithinClockTolerance } from '../clock_tolerance.js';
56
83
  severity: PeerErrorSeverity.MidToleranceError
57
84
  };
58
85
  }
86
+ if (this.maxBlocksPerCheckpoint !== undefined && 'indexWithinCheckpoint' in proposal && proposal.indexWithinCheckpoint >= this.maxBlocksPerCheckpoint) {
87
+ this.logger.warn(`Penalizing peer for proposal with indexWithinCheckpoint ${proposal.indexWithinCheckpoint} >= max ${this.maxBlocksPerCheckpoint}`);
88
+ return {
89
+ result: 'reject',
90
+ severity: PeerErrorSeverity.MidToleranceError
91
+ };
92
+ }
59
93
  return {
60
94
  result: 'accept'
61
95
  };
@@ -4,4 +4,4 @@ export declare class AggregateTxValidator<T> implements TxValidator<T> {
4
4
  constructor(...validators: TxValidator<T>[]);
5
5
  validateTx(tx: T): Promise<TxValidationResult>;
6
6
  }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlX3R4X3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9hZ2dyZWdhdGVfdHhfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXhFLHFCQUFhLG9CQUFvQixDQUFDLENBQUMsQ0FBRSxZQUFXLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDNUQsUUFBUSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN0QyxZQUFZLEdBQUcsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQU0xQztJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQWtCbkQ7Q0FDRiJ9
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlX3R4X3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9hZ2dyZWdhdGVfdHhfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXhFLHFCQUFhLG9CQUFvQixDQUFDLENBQUMsQ0FBRSxZQUFXLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDNUQsUUFBUSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN0QyxZQUFZLEdBQUcsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQU0xQztJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQVNuRDtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"aggregate_tx_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/aggregate_tx_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAExE,qBAAa,oBAAoB,CAAC,CAAC,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;IAC5D,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,YAAY,GAAG,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,EAM1C;IAEK,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAkBnD;CACF"}
1
+ {"version":3,"file":"aggregate_tx_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/aggregate_tx_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAExE,qBAAa,oBAAoB,CAAC,CAAC,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;IAC5D,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,YAAY,GAAG,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,EAM1C;IAEK,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CASnD;CACF"}
@@ -7,25 +7,18 @@ export class AggregateTxValidator {
7
7
  this.validators = validators;
8
8
  }
9
9
  async validateTx(tx) {
10
- const aggregate = {
11
- result: 'valid',
12
- reason: []
13
- };
10
+ const reasons = [];
14
11
  for (const validator of this.validators){
15
12
  const result = await validator.validateTx(tx);
16
13
  if (result.result === 'invalid') {
17
- aggregate.result = 'invalid';
18
- aggregate.reason.push(...result.reason);
19
- } else if (result.result === 'skipped') {
20
- if (aggregate.result === 'valid') {
21
- aggregate.result = 'skipped';
22
- }
23
- aggregate.reason.push(...result.reason);
14
+ reasons.push(...result.reason);
24
15
  }
25
16
  }
26
- if (aggregate.result === 'valid') {
27
- delete aggregate.reason;
28
- }
29
- return aggregate;
17
+ return reasons.length > 0 ? {
18
+ result: 'invalid',
19
+ reason: reasons
20
+ } : {
21
+ result: 'valid'
22
+ };
30
23
  }
31
24
  }
@@ -1,6 +1,6 @@
1
1
  import { ProtocolContractAddress } from '@aztec/protocol-contracts';
2
- import { AuthRegistryArtifact } from '@aztec/protocol-contracts/auth-registry';
3
2
  import { FeeJuiceArtifact } from '@aztec/protocol-contracts/fee-juice';
3
+ import { AuthRegistryArtifact, STANDARD_AUTH_REGISTRY_ADDRESS } from '@aztec/standard-contracts/auth-registry';
4
4
  import { buildAllowedElement } from './allowed_setup_helpers.js';
5
5
  let defaultAllowedSetupFunctions;
6
6
  /** Returns the default list of functions allowed to run in the setup phase of a transaction. */ export async function getDefaultAllowedSetupFunctions() {
@@ -8,14 +8,14 @@ let defaultAllowedSetupFunctions;
8
8
  defaultAllowedSetupFunctions = await Promise.all([
9
9
  // AuthRegistry: needed for authwit support via private path (set_authorized_private enqueues _set_authorized)
10
10
  buildAllowedElement(AuthRegistryArtifact, {
11
- address: ProtocolContractAddress.AuthRegistry
11
+ address: STANDARD_AUTH_REGISTRY_ADDRESS
12
12
  }, '_set_authorized', {
13
13
  onlySelf: true,
14
14
  rejectNullMsgSender: true
15
15
  }),
16
16
  // AuthRegistry: needed for authwit support via public path (PublicFeePaymentMethod calls set_authorized directly)
17
17
  buildAllowedElement(AuthRegistryArtifact, {
18
- address: ProtocolContractAddress.AuthRegistry
18
+ address: STANDARD_AUTH_REGISTRY_ADDRESS
19
19
  }, 'set_authorized', {
20
20
  rejectNullMsgSender: true
21
21
  }),
@@ -10,7 +10,7 @@ import { MerkleTreeId } from '@aztec/stdlib/trees';
10
10
  this.archives = new Map();
11
11
  }
12
12
  async getArchiveIndices(archives) {
13
- const toCheckDb = archives.filter((n)=>!this.archives.has(n.toString())).map((n)=>n.toFr());
13
+ const toCheckDb = archives.filter((n)=>!this.archives.has(n.toString()));
14
14
  const dbHits = await this.db.findLeafIndices(MerkleTreeId.ARCHIVE, toCheckDb);
15
15
  dbHits.forEach((x, index)=>{
16
16
  if (x !== undefined) {
@@ -0,0 +1,15 @@
1
+ import type { Tx, TxValidationResult, TxValidator } from '@aztec/stdlib/tx';
2
+ import type { ITxValidationCache } from './tx_validation_cache.js';
3
+ /** Wraps a {@link TxValidator} to cache its results in a shared {@link ITxValidationCache}. */
4
+ export declare class CachedTxValidator<T extends Tx> implements TxValidator<T> {
5
+ private readonly inner;
6
+ private readonly validatorSymbol;
7
+ private readonly cache;
8
+ constructor(inner: TxValidator<T>, validatorSymbol: symbol, cache: ITxValidationCache);
9
+ static new<T extends Tx>(inner: TxValidator<T> & {
10
+ identifier: symbol;
11
+ }, cache?: ITxValidationCache): TxValidator<T>;
12
+ static newWithIdentifier<T extends Tx>(inner: TxValidator<T>, identifier: symbol, cache?: ITxValidationCache): TxValidator<T>;
13
+ validateTx(tx: T): Promise<TxValidationResult>;
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGVkX3R4X3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9jYWNoZWRfdHhfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU1RSxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRW5FLCtGQUErRjtBQUMvRixxQkFBYSxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFFLFlBQVcsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUVsRSxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUs7SUFDdEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlO0lBQ2hDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSztJQUh4QixZQUNtQixLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUNyQixlQUFlLEVBQUUsTUFBTSxFQUN2QixLQUFLLEVBQUUsa0JBQWtCLEVBQ3hDO0lBRUosT0FBYyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFDNUIsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsR0FBRztRQUFFLFVBQVUsRUFBRSxNQUFNLENBQUE7S0FBRSxFQUM5QyxLQUFLLENBQUMsRUFBRSxrQkFBa0IsR0FDekIsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUVoQjtJQUVELE9BQWMsaUJBQWlCLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFDMUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFDckIsVUFBVSxFQUFFLE1BQU0sRUFDbEIsS0FBSyxDQUFDLEVBQUUsa0JBQWtCLEdBQ3pCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FFaEI7SUFFTSxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FFcEQ7Q0FDRiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cached_tx_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/cached_tx_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE5E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,+FAA+F;AAC/F,qBAAa,iBAAiB,CAAC,CAAC,SAAS,EAAE,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;IAElE,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK;IAHxB,YACmB,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EACrB,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,kBAAkB,EACxC;IAEJ,OAAc,GAAG,CAAC,CAAC,SAAS,EAAE,EAC5B,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,EAC9C,KAAK,CAAC,EAAE,kBAAkB,GACzB,WAAW,CAAC,CAAC,CAAC,CAEhB;IAED,OAAc,iBAAiB,CAAC,CAAC,SAAS,EAAE,EAC1C,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EACrB,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,kBAAkB,GACzB,WAAW,CAAC,CAAC,CAAC,CAEhB;IAEM,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAEpD;CACF"}
@@ -0,0 +1,19 @@
1
+ /** Wraps a {@link TxValidator} to cache its results in a shared {@link ITxValidationCache}. */ export class CachedTxValidator {
2
+ inner;
3
+ validatorSymbol;
4
+ cache;
5
+ constructor(inner, validatorSymbol, cache){
6
+ this.inner = inner;
7
+ this.validatorSymbol = validatorSymbol;
8
+ this.cache = cache;
9
+ }
10
+ static new(inner, cache) {
11
+ return CachedTxValidator.newWithIdentifier(inner, inner.identifier, cache);
12
+ }
13
+ static newWithIdentifier(inner, identifier, cache) {
14
+ return cache ? new CachedTxValidator(inner, identifier, cache) : inner;
15
+ }
16
+ validateTx(tx) {
17
+ return this.cache.getOrValidate(this.validatorSymbol, tx, ()=>this.inner.validateTx(tx));
18
+ }
19
+ }
@@ -0,0 +1,9 @@
1
+ import { type LoggerBindings } from '@aztec/foundation/log';
2
+ import { type Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
3
+ /** Validates that contract instance deployment logs contain correct addresses. */
4
+ export declare class ContractInstanceTxValidator implements TxValidator<Tx> {
5
+ #private;
6
+ constructor(bindings?: LoggerBindings);
7
+ validateTx(tx: Tx): Promise<TxValidationResult>;
8
+ }
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3RfaW5zdGFuY2VfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvdHhfdmFsaWRhdG9yL2NvbnRyYWN0X2luc3RhbmNlX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsS0FBSyxjQUFjLEVBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFHdkYsT0FBTyxFQUdMLEtBQUssRUFBRSxFQUNQLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssV0FBVyxFQUNqQixNQUFNLGtCQUFrQixDQUFDO0FBRTFCLGtGQUFrRjtBQUNsRixxQkFBYSwyQkFBNEIsWUFBVyxXQUFXLENBQUMsRUFBRSxDQUFDOztJQUdqRSxZQUFZLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFFcEM7SUFFSyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FHcEQ7Q0FpQ0YifQ==
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract_instance_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/contract_instance_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAGvF,OAAO,EAGL,KAAK,EAAE,EACP,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,kFAAkF;AAClF,qBAAa,2BAA4B,YAAW,WAAW,CAAC,EAAE,CAAC;;IAGjE,YAAY,QAAQ,CAAC,EAAE,cAAc,EAEpC;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAGpD;CAiCF"}
@@ -0,0 +1,48 @@
1
+ import { createLogger } from '@aztec/foundation/log';
2
+ import { ContractInstancePublishedEvent } from '@aztec/protocol-contracts/instance-registry';
3
+ import { computeContractAddressFromInstance } from '@aztec/stdlib/contract';
4
+ import { TX_ERROR_INCORRECT_CONTRACT_ADDRESS, TX_ERROR_MALFORMED_CONTRACT_INSTANCE_LOG } from '@aztec/stdlib/tx';
5
+ /** Validates that contract instance deployment logs contain correct addresses. */ export class ContractInstanceTxValidator {
6
+ #log;
7
+ constructor(bindings){
8
+ this.#log = createLogger('p2p:tx_validator:contract_instance', bindings);
9
+ }
10
+ async validateTx(tx) {
11
+ const reason = await this.#hasCorrectContractInstanceAddresses(tx);
12
+ return reason ? {
13
+ result: 'invalid',
14
+ reason: [
15
+ reason
16
+ ]
17
+ } : {
18
+ result: 'valid'
19
+ };
20
+ }
21
+ async #hasCorrectContractInstanceAddresses(tx) {
22
+ const privateLogs = tx.data.getNonEmptyPrivateLogs();
23
+ for (const log of privateLogs){
24
+ if (!ContractInstancePublishedEvent.isContractInstancePublishedEvent(log)) {
25
+ continue;
26
+ }
27
+ let event;
28
+ try {
29
+ event = ContractInstancePublishedEvent.fromLog(log);
30
+ } catch (e) {
31
+ this.#log.warn(`Rejecting tx ${tx.getTxHash()}: failed to parse contract instance event: ${e}`);
32
+ return TX_ERROR_MALFORMED_CONTRACT_INSTANCE_LOG;
33
+ }
34
+ try {
35
+ const instance = event.toContractInstance();
36
+ const computedAddress = await computeContractAddressFromInstance(instance);
37
+ if (!computedAddress.equals(instance.address)) {
38
+ this.#log.warn(`Rejecting tx ${tx.getTxHash()}: contract instance address mismatch. Claimed ${instance.address}, computed ${computedAddress}`);
39
+ return TX_ERROR_INCORRECT_CONTRACT_ADDRESS;
40
+ }
41
+ } catch (e) {
42
+ this.#log.warn(`Rejecting tx ${tx.getTxHash()}: failed to compute contract instance address: ${e}`);
43
+ return TX_ERROR_MALFORMED_CONTRACT_INSTANCE_LOG;
44
+ }
45
+ }
46
+ return undefined;
47
+ }
48
+ }
@@ -2,7 +2,8 @@ import { type LoggerBindings } from '@aztec/foundation/log';
2
2
  import { Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
3
3
  export declare class DataTxValidator implements TxValidator<Tx> {
4
4
  #private;
5
+ readonly identifier: symbol;
5
6
  constructor(bindings?: LoggerBindings);
6
7
  validateTx(tx: Tx): Promise<TxValidationResult>;
7
8
  }
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvZGF0YV92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFlLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE9BQU8sRUFTTCxFQUFFLEVBQ0YsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxXQUFXLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIscUJBQWEsZUFBZ0IsWUFBVyxXQUFXLENBQUMsRUFBRSxDQUFDOztJQUdyRCxZQUFZLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFFcEM7SUFFSyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FNcEQ7Q0FtR0YifQ==
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvZGF0YV92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFlLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBSXZGLE9BQU8sRUFXTCxFQUFFLEVBQ0YsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxXQUFXLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIscUJBQWEsZUFBZ0IsWUFBVyxXQUFXLENBQUMsRUFBRSxDQUFDOztJQUNyRCxTQUFnQixVQUFVLEVBQUUsTUFBTSxDQUE2QjtJQUkvRCxZQUFZLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFFcEM7SUFFSyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FPcEQ7Q0F1SUYifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"data_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/data_validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAEvF,OAAO,EASL,EAAE,EACF,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,eAAgB,YAAW,WAAW,CAAC,EAAE,CAAC;;IAGrD,YAAY,QAAQ,CAAC,EAAE,cAAc,EAEpC;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAMpD;CAmGF"}
1
+ {"version":3,"file":"data_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/data_validator.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AAIvF,OAAO,EAWL,EAAE,EACF,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,eAAgB,YAAW,WAAW,CAAC,EAAE,CAAC;;IACrD,SAAgB,UAAU,EAAE,MAAM,CAA6B;IAI/D,YAAY,QAAQ,CAAC,EAAE,cAAc,EAEpC;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAOpD;CAuIF"}
@@ -1,14 +1,17 @@
1
1
  import { MAX_FR_CALLDATA_TO_ALL_ENQUEUED_CALLS } from '@aztec/constants';
2
2
  import { createLogger } from '@aztec/foundation/log';
3
+ import { ContractClassPublishedEvent } from '@aztec/protocol-contracts/class-registry';
4
+ import { computeContractClassId } from '@aztec/stdlib/contract';
3
5
  import { computeCalldataHash } from '@aztec/stdlib/hash';
4
- import { TX_ERROR_CALLDATA_COUNT_MISMATCH, TX_ERROR_CALLDATA_COUNT_TOO_LARGE, TX_ERROR_CONTRACT_CLASS_LOGS, TX_ERROR_CONTRACT_CLASS_LOG_COUNT, TX_ERROR_CONTRACT_CLASS_LOG_LENGTH, TX_ERROR_CONTRACT_CLASS_LOG_SORTING, TX_ERROR_INCORRECT_CALLDATA, TX_ERROR_INCORRECT_HASH, Tx } from '@aztec/stdlib/tx';
6
+ import { TX_ERROR_CALLDATA_COUNT_MISMATCH, TX_ERROR_CALLDATA_COUNT_TOO_LARGE, TX_ERROR_CONTRACT_CLASS_LOGS, TX_ERROR_CONTRACT_CLASS_LOG_COUNT, TX_ERROR_CONTRACT_CLASS_LOG_LENGTH, TX_ERROR_CONTRACT_CLASS_LOG_SORTING, TX_ERROR_INCORRECT_CALLDATA, TX_ERROR_INCORRECT_CONTRACT_CLASS_ID, TX_ERROR_INCORRECT_HASH, TX_ERROR_MALFORMED_CONTRACT_CLASS_LOG, Tx } from '@aztec/stdlib/tx';
5
7
  export class DataTxValidator {
8
+ identifier = Symbol('DataTxValidator');
6
9
  #log;
7
10
  constructor(bindings){
8
11
  this.#log = createLogger('p2p:tx_validator:tx_data', bindings);
9
12
  }
10
13
  async validateTx(tx) {
11
- const reason = await this.#hasCorrectHash(tx) ?? await this.#hasCorrectCalldata(tx) ?? await this.#hasCorrectContractClassLogs(tx);
14
+ const reason = await this.#hasCorrectHash(tx) ?? await this.#hasCorrectCalldata(tx) ?? await this.#hasCorrectContractClassLogs(tx) ?? await this.#hasCorrectContractClassIds(tx);
12
15
  return reason ? {
13
16
  result: 'invalid',
14
17
  reason: [
@@ -77,4 +80,35 @@ export class DataTxValidator {
77
80
  }
78
81
  return undefined;
79
82
  }
83
+ async #hasCorrectContractClassIds(tx) {
84
+ const contractClassLogs = tx.getContractClassLogs();
85
+ for (const log of contractClassLogs){
86
+ if (!ContractClassPublishedEvent.isContractClassPublishedEvent(log)) {
87
+ continue;
88
+ }
89
+ let event;
90
+ try {
91
+ event = ContractClassPublishedEvent.fromLog(log);
92
+ } catch (e) {
93
+ this.#log.warn(`Rejecting tx ${tx.getTxHash()}: failed to parse contract class event: ${e}`);
94
+ return TX_ERROR_MALFORMED_CONTRACT_CLASS_LOG;
95
+ }
96
+ try {
97
+ const { publicBytecodeCommitment } = await event.toContractClassPublicWithBytecodeCommitment();
98
+ const computedClassId = await computeContractClassId({
99
+ artifactHash: event.artifactHash,
100
+ privateFunctionsRoot: event.privateFunctionsRoot,
101
+ publicBytecodeCommitment
102
+ });
103
+ if (!computedClassId.equals(event.contractClassId)) {
104
+ this.#log.warn(`Rejecting tx ${tx.getTxHash()}: contract class id mismatch. Claimed ${event.contractClassId}, computed ${computedClassId}`);
105
+ return TX_ERROR_INCORRECT_CONTRACT_CLASS_ID;
106
+ }
107
+ } catch (e) {
108
+ this.#log.warn(`Rejecting tx ${tx.getTxHash()}: failed to compute contract class id: ${e}`);
109
+ return TX_ERROR_MALFORMED_CONTRACT_CLASS_LOG;
110
+ }
111
+ }
112
+ return undefined;
113
+ }
80
114
  }
@@ -39,6 +39,7 @@ import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
39
39
  import type { GlobalVariables, Tx, TxValidationResult, TxValidator } from '@aztec/stdlib/tx';
40
40
  import type { UInt64 } from '@aztec/stdlib/types';
41
41
  import type { TxMetaData } from '../../mem_pools/tx_pool_v2/tx_metadata.js';
42
+ import { TxValidationCache } from './tx_validation_cache.js';
42
43
  /**
43
44
  * A validator paired with a peer penalty severity.
44
45
  * Used for gossip validation where each validator's failure triggers a peer penalization
@@ -78,10 +79,10 @@ export declare function createSecondStageTxValidationsForGossipedTransactions(pr
78
79
  * are invalid against current state. State-dependent checks happen when the tx
79
80
  * enters the pending pool or during block building.
80
81
  */
81
- export declare function createTxValidatorForReqResponseReceivedTxs(verifier: ClientProtocolCircuitVerifier, { l1ChainId, rollupVersion }: {
82
+ export declare function createTxValidatorForOnDemandReceivedTxs(verifier: ClientProtocolCircuitVerifier, { l1ChainId, rollupVersion }: {
82
83
  l1ChainId: number;
83
84
  rollupVersion: number;
84
- }, bindings?: LoggerBindings): TxValidator;
85
+ }, bindings?: LoggerBindings, cache?: TxValidationCache): TxValidator;
85
86
  /**
86
87
  * Validators for txs received in block proposals.
87
88
  * Same as req/resp — well-formedness only. We must store these for block
@@ -90,7 +91,7 @@ export declare function createTxValidatorForReqResponseReceivedTxs(verifier: Cli
90
91
  export declare function createTxValidatorForBlockProposalReceivedTxs(verifier: ClientProtocolCircuitVerifier, { l1ChainId, rollupVersion }: {
91
92
  l1ChainId: number;
92
93
  rollupVersion: number;
93
- }, bindings?: LoggerBindings): TxValidator;
94
+ }, bindings?: LoggerBindings, cache?: TxValidationCache): TxValidator;
94
95
  /**
95
96
  * Validators for unsolicited txs received over JSON-RPC (from a local wallet/PXE).
96
97
  * Full validation — all state-dependent checks are run. Proof verification is optional
@@ -136,5 +137,13 @@ export declare function createTxValidatorForTransactionsEnteringPendingTxPool(wo
136
137
  rollupManaLimit?: number;
137
138
  maxBlockL2Gas?: number;
138
139
  maxBlockDAGas?: number;
139
- }, bindings?: LoggerBindings): Promise<TxValidator<TxMetaData>>;
140
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSTVELE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxLQUFLLEVBQ1YsY0FBYyxFQUNkLDZCQUE2QixFQUM3Qix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN2QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0YsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFlNUU7Ozs7R0FJRztBQUNILE1BQU0sV0FBVyxvQkFBb0I7SUFDbkMsU0FBUyxFQUFFO1FBQ1QsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7S0FDakQsQ0FBQztJQUNGLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQztDQUM3QjtBQUVEOzs7Ozs7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
140
+ }, gasFees: GasFees, bindings?: LoggerBindings): Promise<TxValidator<TxMetaData>>;
141
+ /**
142
+ * Creates a function that checks whether a tx's setup-phase calls are on the allow list.
143
+ *
144
+ * Uses the `PhasesTxValidator` on the full Tx. The result is stored as a boolean
145
+ * flag in `TxMetaData.allowedSetupCalls` at receipt time, so the pending pool
146
+ * migration validator can check it without needing the full Tx or its dependencies.
147
+ */
148
+ export declare function createCheckAllowedSetupCalls(contractDataSource: ContractDataSource, setupAllowList: AllowedElement[], getTimestamp: () => UInt64): (tx: Tx) => Promise<boolean>;
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSTVELE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxLQUFLLEVBQ1YsY0FBYyxFQUNkLDZCQUE2QixFQUM3Qix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN2QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0YsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFnQjVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTdEOzs7O0dBSUc7QUFDSCxNQUFNLFdBQVcsb0JBQW9CO0lBQ25DLFNBQVMsRUFBRTtRQUNULFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0tBQ2pELENB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
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EACV,cAAc,EACd,6BAA6B,EAC7B,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC7F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAC;AAe5E;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE;QACT,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;KACjD,CAAC;IACF,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,oDAAoD,CAClE,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,WAAW,EACxB,sBAAsB,EAAE,sBAAsB,EAC9C,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,qBAAqB,EAAE,EAAE,EACzB,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,OAAO,EACrB,cAAc,GAAE,cAAc,EAAO,EACrC,QAAQ,CAAC,EAAE,cAAc,EACzB,YAAY,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1F,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAsEtC;AAED;;;;;;GAMG;AACH,wBAAgB,qDAAqD,CACnE,aAAa,EAAE,6BAA6B,EAC5C,QAAQ,CAAC,EAAE,cAAc,GACxB,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAOtC;AAmCD;;;;;GAKG;AACH,wBAAgB,0CAA0C,CACxD,QAAQ,EAAE,6BAA6B,EACvC,EACE,SAAS,EACT,aAAa,EACd,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB,EACD,QAAQ,CAAC,EAAE,cAAc,GACxB,WAAW,CAEb;AAED;;;;GAIG;AACH,wBAAgB,4CAA4C,CAC1D,QAAQ,EAAE,6BAA6B,EACvC,EACE,SAAS,EACT,aAAa,EACd,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB,EACD,QAAQ,CAAC,EAAE,cAAc,GACxB,WAAW,CAEb;AAED;;;;;GAKG;AACH,wBAAgB,uCAAuC,CACrD,EAAE,EAAE,wBAAwB,EAC5B,kBAAkB,EAAE,kBAAkB,EACtC,QAAQ,EAAE,6BAA6B,GAAG,SAAS,EACnD,EACE,SAAS,EACT,aAAa,EACb,cAAc,EACd,OAAO,EACP,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,YAAY,EACZ,eAAe,EACf,aAAa,EACb,aAAa,EACd,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,EACD,QAAQ,CAAC,EAAE,cAAc,GACxB,WAAW,CAAC,EAAE,CAAC,CAyCjB;AAED;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,CAC/C,EAAE,EAAE,wBAAwB,EAC5B,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,cAAc,EAAE,EAChC,QAAQ,CAAC,EAAE,cAAc,GACxB,wBAAwB,CAiB1B;AA2BD;;;;;;;;;;;;GAYG;AACH,wBAAsB,qDAAqD,CACzE,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,EAC1F,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAoBlC"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/factory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAI5D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,EACV,cAAc,EACd,6BAA6B,EAC7B,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC7F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2CAA2C,CAAC;AAgB5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE;QACT,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;KACjD,CAAC;IACF,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED;;;;;;;;GAQG;AACH,wBAAgB,oDAAoD,CAClE,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,WAAW,EACxB,sBAAsB,EAAE,sBAAsB,EAC9C,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,qBAAqB,EAAE,EAAE,EACzB,kBAAkB,EAAE,kBAAkB,EACtC,YAAY,EAAE,OAAO,EACrB,cAAc,GAAE,cAAc,EAAO,EACrC,QAAQ,CAAC,EAAE,cAAc,EACzB,YAAY,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAC1F,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CA0EtC;AAED;;;;;;GAMG;AACH,wBAAgB,qDAAqD,CACnE,aAAa,EAAE,6BAA6B,EAC5C,QAAQ,CAAC,EAAE,cAAc,GACxB,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAOtC;AAyCD;;;;;GAKG;AACH,wBAAgB,uCAAuC,CACrD,QAAQ,EAAE,6BAA6B,EACvC,EACE,SAAS,EACT,aAAa,EACd,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB,EACD,QAAQ,CAAC,EAAE,cAAc,EACzB,KAAK,CAAC,EAAE,iBAAiB,GACxB,WAAW,CAEb;AAED;;;;GAIG;AACH,wBAAgB,4CAA4C,CAC1D,QAAQ,EAAE,6BAA6B,EACvC,EACE,SAAS,EACT,aAAa,EACd,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB,EACD,QAAQ,CAAC,EAAE,cAAc,EACzB,KAAK,CAAC,EAAE,iBAAiB,GACxB,WAAW,CAEb;AAED;;;;;GAKG;AACH,wBAAgB,uCAAuC,CACrD,EAAE,EAAE,wBAAwB,EAC5B,kBAAkB,EAAE,kBAAkB,EACtC,QAAQ,EAAE,6BAA6B,GAAG,SAAS,EACnD,EACE,SAAS,EACT,aAAa,EACb,cAAc,EACd,OAAO,EACP,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,YAAY,EACZ,eAAe,EACf,aAAa,EACb,aAAa,EACd,EAAE;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,cAAc,EAAE,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,EACD,QAAQ,CAAC,EAAE,cAAc,GACxB,WAAW,CAAC,EAAE,CAAC,CA0CjB;AAED;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,CAC/C,EAAE,EAAE,wBAAwB,EAC5B,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAChC,cAAc,EAAE,cAAc,EAAE,EAChC,QAAQ,CAAC,EAAE,cAAc,GACxB,wBAAwB,CAiB1B;AA2BD;;;;;;;;;;;;GAYG;AACH,wBAAsB,qDAAqD,CACzE,sBAAsB,EAAE,sBAAsB,EAC9C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,WAAW,EACxB,YAAY,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,EAC1F,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAsBlC;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,kBAAkB,EAAE,kBAAkB,EACtC,cAAc,EAAE,cAAc,EAAE,EAChC,YAAY,EAAE,MAAM,MAAM,GACzB,CAAC,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAM9B"}
@@ -36,12 +36,14 @@ import { DatabasePublicStateSource, MerkleTreeId } from '@aztec/stdlib/trees';
36
36
  import { AggregateTxValidator } from './aggregate_tx_validator.js';
37
37
  import { ArchiveCache } from './archive_cache.js';
38
38
  import { BlockHeaderTxValidator } from './block_header_validator.js';
39
+ import { CachedTxValidator } from './cached_tx_validator.js';
40
+ import { ContractInstanceTxValidator } from './contract_instance_validator.js';
39
41
  import { DataTxValidator } from './data_validator.js';
40
42
  import { DoubleSpendTxValidator } from './double_spend_validator.js';
41
- import { GasLimitsValidator, GasTxValidator } from './gas_validator.js';
43
+ import { GasLimitsValidator, GasTxValidator, MaxFeePerGasValidator } from './gas_validator.js';
42
44
  import { MetadataTxValidator } from './metadata_validator.js';
43
45
  import { NullifierCache } from './nullifier_cache.js';
44
- import { PhasesTxValidator } from './phases_validator.js';
46
+ import { AllowedSetupCallsMetaValidator, PhasesTxValidator } from './phases_validator.js';
45
47
  import { SizeTxValidator } from './size_validator.js';
46
48
  import { TimestampTxValidator } from './timestamp_validator.js';
47
49
  import { TxPermittedValidator } from './tx_permitted_validator.js';
@@ -106,6 +108,10 @@ import { TxProofValidator } from './tx_proof_validator.js';
106
108
  dataValidator: {
107
109
  validator: new DataTxValidator(bindings),
108
110
  severity: PeerErrorSeverity.MidToleranceError
111
+ },
112
+ contractInstanceValidator: {
113
+ validator: new ContractInstanceTxValidator(bindings),
114
+ severity: PeerErrorSeverity.MidToleranceError
109
115
  }
110
116
  };
111
117
  }
@@ -128,34 +134,37 @@ import { TxProofValidator } from './tx_proof_validator.js';
128
134
  * Used for req/resp and block proposal txs. These txs must be accepted for block
129
135
  * re-execution even though they may be invalid against current state — that is
130
136
  * caught later by the block building validator.
131
- */ function createTxValidatorForMinimumTxIntegrityChecks(verifier, { l1ChainId, rollupVersion }, bindings) {
132
- return new AggregateTxValidator(new MetadataTxValidator({
137
+ */ function createTxValidatorForMinimumTxIntegrityChecks(verifier, { l1ChainId, rollupVersion }, bindings, cache) {
138
+ const aggregate = new AggregateTxValidator(new MetadataTxValidator({
133
139
  l1ChainId: new Fr(l1ChainId),
134
140
  rollupVersion: new Fr(rollupVersion),
135
141
  protocolContractsHash,
136
142
  vkTreeRoot: getVKTreeRoot()
137
- }, bindings), new SizeTxValidator(bindings), new DataTxValidator(bindings), new TxProofValidator(verifier, bindings));
143
+ }, bindings), new SizeTxValidator(bindings), CachedTxValidator.new(new DataTxValidator(bindings), cache), new ContractInstanceTxValidator(bindings), CachedTxValidator.new(new TxProofValidator(verifier, bindings), cache));
144
+ // This validator is not state-dependent so we can cache it.
145
+ const identifier = Symbol('TxValidatorForMinimumTxIntegrityChecks');
146
+ return CachedTxValidator.newWithIdentifier(aggregate, identifier, cache);
138
147
  }
139
148
  /**
140
149
  * Validators for txs received via req/resp or filestores.
141
150
  * Checks well-formedness only — we must accept these for re-execution even if they
142
151
  * are invalid against current state. State-dependent checks happen when the tx
143
152
  * enters the pending pool or during block building.
144
- */ export function createTxValidatorForReqResponseReceivedTxs(verifier, { l1ChainId, rollupVersion }, bindings) {
153
+ */ export function createTxValidatorForOnDemandReceivedTxs(verifier, { l1ChainId, rollupVersion }, bindings, cache) {
145
154
  return createTxValidatorForMinimumTxIntegrityChecks(verifier, {
146
155
  l1ChainId,
147
156
  rollupVersion
148
- }, bindings);
157
+ }, bindings, cache);
149
158
  }
150
159
  /**
151
160
  * Validators for txs received in block proposals.
152
161
  * Same as req/resp — well-formedness only. We must store these for block
153
162
  * re-execution; their validity against state is checked during block building.
154
- */ export function createTxValidatorForBlockProposalReceivedTxs(verifier, { l1ChainId, rollupVersion }, bindings) {
163
+ */ export function createTxValidatorForBlockProposalReceivedTxs(verifier, { l1ChainId, rollupVersion }, bindings, cache) {
155
164
  return createTxValidatorForMinimumTxIntegrityChecks(verifier, {
156
165
  l1ChainId,
157
166
  rollupVersion
158
- }, bindings);
167
+ }, bindings, cache);
159
168
  }
160
169
  /**
161
170
  * Validators for unsolicited txs received over JSON-RPC (from a local wallet/PXE).
@@ -179,7 +188,8 @@ import { TxProofValidator } from './tx_proof_validator.js';
179
188
  new PhasesTxValidator(contractDataSource, setupAllowList, timestamp, bindings),
180
189
  new BlockHeaderTxValidator(new ArchiveCache(db), bindings),
181
190
  new DoubleSpendTxValidator(new NullifierCache(db), bindings),
182
- new DataTxValidator(bindings)
191
+ new DataTxValidator(bindings),
192
+ new ContractInstanceTxValidator(bindings)
183
193
  ];
184
194
  if (!skipFeeEnforcement) {
185
195
  validators.push(new GasTxValidator(new DatabasePublicStateSource(db), ProtocolContractAddress.FeeJuice, gasFees, bindings, {
@@ -228,7 +238,7 @@ function createTxValidatorForValidatingAgainstCurrentState(nullifierSource, arch
228
238
  *
229
239
  * Operates on `TxMetaData` rather than full `Tx` since metadata is pre-built by the pool.
230
240
  * Injected into `TxPoolV2` as the `createTxValidator` factory in `TxPoolV2Dependencies`.
231
- */ export async function createTxValidatorForTransactionsEnteringPendingTxPool(worldStateSynchronizer, timestamp, blockNumber, gasLimitOpts, bindings) {
241
+ */ export async function createTxValidatorForTransactionsEnteringPendingTxPool(worldStateSynchronizer, timestamp, blockNumber, gasLimitOpts, gasFees, bindings) {
232
242
  await worldStateSynchronizer.syncImmediate();
233
243
  const merkleTree = worldStateSynchronizer.getCommitted();
234
244
  const nullifierSource = {
@@ -245,8 +255,21 @@ function createTxValidatorForValidatingAgainstCurrentState(nullifierSource, arch
245
255
  return new AggregateTxValidator(new GasLimitsValidator({
246
256
  ...gasLimitOpts,
247
257
  bindings
248
- }), new TimestampTxValidator({
258
+ }), new MaxFeePerGasValidator(gasFees, bindings), new TimestampTxValidator({
249
259
  timestamp,
250
260
  blockNumber
251
- }, bindings), new DoubleSpendTxValidator(nullifierSource, bindings), new BlockHeaderTxValidator(archiveSource, bindings));
261
+ }, bindings), new DoubleSpendTxValidator(nullifierSource, bindings), new BlockHeaderTxValidator(archiveSource, bindings), new AllowedSetupCallsMetaValidator(bindings));
262
+ }
263
+ /**
264
+ * Creates a function that checks whether a tx's setup-phase calls are on the allow list.
265
+ *
266
+ * Uses the `PhasesTxValidator` on the full Tx. The result is stored as a boolean
267
+ * flag in `TxMetaData.allowedSetupCalls` at receipt time, so the pending pool
268
+ * migration validator can check it without needing the full Tx or its dependencies.
269
+ */ export function createCheckAllowedSetupCalls(contractDataSource, setupAllowList, getTimestamp) {
270
+ return async (tx)=>{
271
+ const validator = new PhasesTxValidator(contractDataSource, setupAllowList, getTimestamp());
272
+ const result = await validator.validateTx(tx);
273
+ return result.result === 'valid';
274
+ };
252
275
  }