@aztec/p2p 0.0.1-commit.db765a8 → 0.0.1-commit.ddcf04837

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 (331) hide show
  1. package/README.md +129 -3
  2. package/dest/client/factory.d.ts +2 -2
  3. package/dest/client/factory.d.ts.map +1 -1
  4. package/dest/client/factory.js +25 -11
  5. package/dest/client/interface.d.ts +9 -2
  6. package/dest/client/interface.d.ts.map +1 -1
  7. package/dest/client/p2p_client.d.ts +3 -2
  8. package/dest/client/p2p_client.d.ts.map +1 -1
  9. package/dest/client/p2p_client.js +46 -38
  10. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +17 -6
  11. package/dest/config.d.ts +120 -94
  12. package/dest/config.d.ts.map +1 -1
  13. package/dest/config.js +72 -8
  14. package/dest/errors/p2p-service.error.d.ts +9 -0
  15. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  16. package/dest/errors/p2p-service.error.js +10 -0
  17. package/dest/index.d.ts +1 -2
  18. package/dest/index.d.ts.map +1 -1
  19. package/dest/index.js +0 -1
  20. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +7 -5
  21. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  22. package/dest/mem_pools/attestation_pool/attestation_pool.js +11 -8
  23. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +6 -6
  24. package/dest/mem_pools/index.d.ts +1 -2
  25. package/dest/mem_pools/index.d.ts.map +1 -1
  26. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  27. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  28. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +2 -1
  29. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +7 -1
  30. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
  31. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  32. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
  33. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
  34. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
  35. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
  36. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
  37. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +2 -2
  38. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +9 -5
  39. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  40. package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
  41. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +25 -10
  42. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  43. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +39 -12
  44. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
  45. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  46. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +26 -43
  47. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
  48. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  49. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +3 -0
  50. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +1 -1
  51. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  52. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +21 -6
  53. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +5 -2
  54. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  55. package/dest/msg_validators/attestation_validator/attestation_validator.js +20 -11
  56. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +4 -2
  57. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  58. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +2 -2
  59. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  60. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  61. package/dest/msg_validators/clock_tolerance.js +54 -3
  62. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +6 -4
  63. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  64. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  65. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +6 -4
  66. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  67. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  68. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +14 -9
  69. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  70. package/dest/msg_validators/proposal_validator/proposal_validator.js +65 -55
  71. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +1 -1
  72. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  73. package/dest/msg_validators/tx_validator/allowed_public_setup.js +21 -32
  74. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  75. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  76. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  77. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  78. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  79. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  80. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  81. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  82. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  83. package/dest/msg_validators/tx_validator/data_validator.js +35 -2
  84. package/dest/msg_validators/tx_validator/factory.d.ts +23 -4
  85. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  86. package/dest/msg_validators/tx_validator/factory.js +36 -10
  87. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  88. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  89. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  90. package/dest/msg_validators/tx_validator/gas_validator.d.ts +13 -4
  91. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  92. package/dest/msg_validators/tx_validator/gas_validator.js +49 -17
  93. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  94. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  95. package/dest/msg_validators/tx_validator/index.js +1 -0
  96. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  97. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  98. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  99. package/dest/msg_validators/tx_validator/phases_validator.d.ts +21 -1
  100. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  101. package/dest/msg_validators/tx_validator/phases_validator.js +49 -2
  102. package/dest/services/data_store.d.ts +1 -1
  103. package/dest/services/data_store.d.ts.map +1 -1
  104. package/dest/services/data_store.js +5 -5
  105. package/dest/services/dummy_service.d.ts +6 -3
  106. package/dest/services/dummy_service.d.ts.map +1 -1
  107. package/dest/services/dummy_service.js +6 -1
  108. package/dest/services/encoding.d.ts +5 -1
  109. package/dest/services/encoding.d.ts.map +1 -1
  110. package/dest/services/encoding.js +7 -1
  111. package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
  112. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  113. package/dest/services/gossipsub/topic_score_params.js +21 -4
  114. package/dest/services/libp2p/libp2p_service.d.ts +15 -25
  115. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  116. package/dest/services/libp2p/libp2p_service.js +160 -126
  117. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  118. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  119. package/dest/services/peer-manager/peer_manager.js +37 -10
  120. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  121. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  122. package/dest/services/peer-manager/peer_scoring.js +32 -10
  123. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -8
  124. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  125. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +69 -65
  126. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +3 -2
  127. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  128. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  129. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  130. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  131. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
  132. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  133. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
  134. package/dest/services/reqresp/config.d.ts +3 -3
  135. package/dest/services/reqresp/config.d.ts.map +1 -1
  136. package/dest/services/reqresp/interface.d.ts +14 -9
  137. package/dest/services/reqresp/interface.d.ts.map +1 -1
  138. package/dest/services/reqresp/interface.js +10 -11
  139. package/dest/services/reqresp/metrics.d.ts +1 -1
  140. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  141. package/dest/services/reqresp/metrics.js +0 -1
  142. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  143. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  144. package/dest/services/reqresp/protocols/index.js +0 -1
  145. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  146. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  147. package/dest/services/reqresp/protocols/tx.js +1 -3
  148. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  149. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  150. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  151. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  152. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  153. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  154. package/dest/services/reqresp/reqresp.d.ts +4 -2
  155. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  156. package/dest/services/reqresp/reqresp.js +28 -11
  157. package/dest/services/service.d.ts +5 -2
  158. package/dest/services/service.d.ts.map +1 -1
  159. package/dest/services/tx_collection/fast_tx_collection.d.ts +1 -4
  160. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  161. package/dest/services/tx_collection/fast_tx_collection.js +57 -73
  162. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  163. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  164. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  165. package/dest/services/tx_collection/proposal_tx_collector.d.ts +6 -7
  166. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
  167. package/dest/services/tx_collection/proposal_tx_collector.js +4 -4
  168. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  169. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  170. package/dest/services/tx_collection/request_tracker.js +84 -0
  171. package/dest/services/tx_collection/slow_tx_collection.js +1 -1
  172. package/dest/services/tx_collection/tx_collection.d.ts +3 -6
  173. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  174. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  175. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  176. package/dest/services/tx_collection/tx_source.js +9 -7
  177. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  178. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  179. package/dest/test-helpers/mock-pubsub.d.ts +11 -3
  180. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  181. package/dest/test-helpers/mock-pubsub.js +35 -10
  182. package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
  183. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  184. package/dest/test-helpers/reqresp-nodes.js +1 -2
  185. package/dest/test-helpers/testbench-utils.d.ts +1 -1
  186. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  187. package/dest/test-helpers/testbench-utils.js +23 -3
  188. package/dest/testbench/p2p_client_testbench_worker.js +68 -16
  189. package/dest/testbench/worker_client_manager.d.ts +10 -1
  190. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  191. package/dest/testbench/worker_client_manager.js +55 -3
  192. package/dest/util.d.ts +1 -1
  193. package/package.json +14 -14
  194. package/src/client/factory.ts +43 -14
  195. package/src/client/interface.ts +9 -1
  196. package/src/client/p2p_client.ts +50 -39
  197. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +19 -9
  198. package/src/config.ts +106 -6
  199. package/src/errors/p2p-service.error.ts +11 -0
  200. package/src/index.ts +0 -1
  201. package/src/mem_pools/attestation_pool/attestation_pool.ts +12 -8
  202. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +6 -6
  203. package/src/mem_pools/index.ts +0 -3
  204. package/src/mem_pools/tx_pool_v2/README.md +9 -1
  205. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  206. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
  207. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  208. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
  209. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
  210. package/src/mem_pools/tx_pool_v2/interfaces.ts +9 -4
  211. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +60 -14
  212. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +29 -43
  213. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +13 -1
  214. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +23 -6
  215. package/src/msg_validators/attestation_validator/README.md +49 -0
  216. package/src/msg_validators/attestation_validator/attestation_validator.ts +21 -9
  217. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +4 -1
  218. package/src/msg_validators/clock_tolerance.ts +72 -3
  219. package/src/msg_validators/proposal_validator/README.md +123 -0
  220. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +17 -4
  221. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +23 -7
  222. package/src/msg_validators/proposal_validator/proposal_validator.ts +74 -58
  223. package/src/msg_validators/tx_validator/README.md +5 -1
  224. package/src/msg_validators/tx_validator/allowed_public_setup.ts +16 -35
  225. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  226. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  227. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  228. package/src/msg_validators/tx_validator/data_validator.ts +42 -1
  229. package/src/msg_validators/tx_validator/factory.ts +43 -3
  230. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  231. package/src/msg_validators/tx_validator/gas_validator.ts +65 -16
  232. package/src/msg_validators/tx_validator/index.ts +1 -0
  233. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  234. package/src/msg_validators/tx_validator/phases_validator.ts +60 -1
  235. package/src/services/data_store.ts +5 -13
  236. package/src/services/dummy_service.ts +8 -2
  237. package/src/services/encoding.ts +9 -1
  238. package/src/services/gossipsub/topic_score_params.ts +36 -4
  239. package/src/services/libp2p/libp2p_service.ts +160 -142
  240. package/src/services/peer-manager/peer_manager.ts +43 -10
  241. package/src/services/peer-manager/peer_scoring.ts +27 -5
  242. package/src/services/reqresp/README.md +229 -0
  243. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  244. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +64 -69
  245. package/src/services/reqresp/batch-tx-requester/interface.ts +2 -1
  246. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  247. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
  248. package/src/services/reqresp/config.ts +2 -2
  249. package/src/services/reqresp/interface.ts +21 -11
  250. package/src/services/reqresp/metrics.ts +0 -1
  251. package/src/services/reqresp/protocols/index.ts +0 -1
  252. package/src/services/reqresp/protocols/tx.ts +1 -3
  253. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  254. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  255. package/src/services/reqresp/reqresp.ts +37 -12
  256. package/src/services/service.ts +6 -1
  257. package/src/services/tx_collection/fast_tx_collection.ts +57 -83
  258. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  259. package/src/services/tx_collection/proposal_tx_collector.ts +8 -13
  260. package/src/services/tx_collection/request_tracker.ts +127 -0
  261. package/src/services/tx_collection/slow_tx_collection.ts +1 -1
  262. package/src/services/tx_collection/tx_collection.ts +3 -5
  263. package/src/services/tx_collection/tx_source.ts +8 -7
  264. package/src/test-helpers/make-test-p2p-clients.ts +1 -1
  265. package/src/test-helpers/mock-pubsub.ts +31 -5
  266. package/src/test-helpers/reqresp-nodes.ts +3 -3
  267. package/src/test-helpers/testbench-utils.ts +30 -3
  268. package/src/testbench/p2p_client_testbench_worker.ts +72 -15
  269. package/src/testbench/worker_client_manager.ts +68 -6
  270. package/src/util.ts +1 -1
  271. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  272. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  273. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  274. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  275. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  276. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  277. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  278. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  279. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  280. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  281. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  282. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  283. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  284. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  285. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  286. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  287. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  288. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  289. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  290. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  291. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  292. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  293. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  294. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  295. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  296. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  297. package/dest/mem_pools/tx_pool/index.js +0 -2
  298. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  299. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  300. package/dest/mem_pools/tx_pool/priority.js +0 -15
  301. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  302. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  303. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  304. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  305. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  306. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  307. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -24
  308. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  309. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -378
  310. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  311. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  312. package/dest/services/reqresp/protocols/block.js +0 -32
  313. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  314. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  315. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  316. package/src/mem_pools/tx_pool/README.md +0 -270
  317. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  318. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  319. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  320. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  321. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  322. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  323. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  324. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  325. package/src/mem_pools/tx_pool/index.ts +0 -2
  326. package/src/mem_pools/tx_pool/priority.ts +0 -20
  327. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  328. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  329. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -373
  330. package/src/services/reqresp/protocols/block.ts +0 -37
  331. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
@@ -1,4 +1,5 @@
1
1
  import { SlotNumber } from '@aztec/foundation/branded-types';
2
+ import { DEFAULT_P2P_PROPAGATION_TIME, createPipelinedCheckpointTimingModel } from '@aztec/stdlib/timetable';
2
3
  /**
3
4
  * Maximum clock disparity tolerance for P2P message validation (in milliseconds).
4
5
  * Messages for the previous slot are accepted if we're within this many milliseconds
@@ -25,9 +26,10 @@ import { SlotNumber } from '@aztec/foundation/branded-types';
25
26
  return false;
26
27
  }
27
28
  // Check how far we are into the current slot (in milliseconds)
28
- const { ts: slotStartTs, nowMs, slot } = epochCache.getEpochAndSlotNow();
29
- // Sanity check: ensure the epoch cache's current slot matches the expected current slot
30
- if (slot !== currentSlot) {
29
+ const { ts: slotStartTs, nowMs } = epochCache.getEpochAndSlotNow();
30
+ const targetSlot = epochCache.getTargetSlot();
31
+ // Sanity check: ensure the epoch cache's target slot matches the expected current slot
32
+ if (targetSlot !== currentSlot) {
31
33
  return false;
32
34
  }
33
35
  // ts is in seconds, convert to ms; nowMs is already in milliseconds
@@ -35,3 +37,52 @@ import { SlotNumber } from '@aztec/foundation/branded-types';
35
37
  const elapsedMs = Number(nowMs - slotStartMs);
36
38
  return elapsedMs < MAXIMUM_GOSSIP_CLOCK_DISPARITY_MS;
37
39
  }
40
+ /**
41
+ * Checks if a message should be accepted under the pipelining grace period.
42
+ *
43
+ * When pipelining is enabled, `targetSlot = slotNow + 1`. A proposal built in slot N-1
44
+ * for slot N arrives when validators are in slot N, so their `targetSlot = N+1`.
45
+ * This function accepts proposals for the current wallclock slot if we're within the
46
+ * first `windowSeconds` seconds of the slot (the pipelining grace period). - see stdlib/timetable/index.ts
47
+ *
48
+ * @param messageSlot - The slot number from the received message
49
+ * @param epochCache - EpochCache to get timing and pipelining state
50
+ * @param windowSeconds - The window grace period allowed for attestations into the next slot
51
+ * @returns true if pipelining is enabled, the message is for the current slot, and we're within the grace period
52
+ */ function isWithinPipeliningWindow(messageSlot, epochCache, windowSeconds) {
53
+ if (!epochCache.isProposerPipeliningEnabled()) {
54
+ return false;
55
+ }
56
+ const currentSlot = epochCache.getSlotNow();
57
+ if (messageSlot !== currentSlot) {
58
+ return false;
59
+ }
60
+ const { ts: slotStartTs, nowMs } = epochCache.getEpochAndSlotNow();
61
+ const slotStartMs = slotStartTs * 1000n;
62
+ const elapsedMs = Number(nowMs - slotStartMs);
63
+ const windowMs = windowSeconds * 1000 + MAXIMUM_GOSSIP_CLOCK_DISPARITY_MS;
64
+ return elapsedMs < windowMs;
65
+ }
66
+ export class PipeliningWindow {
67
+ epochCache;
68
+ proposalWindowIntoTargetSlot;
69
+ attestationWindowIntoTargetSlot;
70
+ constructor(epochCache, opts = {}){
71
+ this.epochCache = epochCache;
72
+ const l1Constants = epochCache.getL1Constants();
73
+ const checkpointTiming = createPipelinedCheckpointTimingModel({
74
+ aztecSlotDuration: l1Constants.slotDuration,
75
+ ethereumSlotDuration: l1Constants.ethereumSlotDuration,
76
+ l1PublishingTime: opts.l1PublishingTime ?? l1Constants.ethereumSlotDuration,
77
+ p2pPropagationTime: opts.p2pPropagationTime ?? DEFAULT_P2P_PROPAGATION_TIME
78
+ });
79
+ this.proposalWindowIntoTargetSlot = checkpointTiming.proposalWindowIntoTargetSlot;
80
+ this.attestationWindowIntoTargetSlot = checkpointTiming.attestationWindowIntoTargetSlot;
81
+ }
82
+ acceptsProposal(messageSlot) {
83
+ return isWithinPipeliningWindow(messageSlot, this.epochCache, this.proposalWindowIntoTargetSlot);
84
+ }
85
+ acceptsAttestation(messageSlot) {
86
+ return isWithinPipeliningWindow(messageSlot, this.epochCache, this.attestationWindowIntoTargetSlot);
87
+ }
88
+ }
@@ -1,10 +1,12 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import type { BlockProposal, P2PValidator } from '@aztec/stdlib/p2p';
3
- import { ProposalValidator } from '../proposal_validator/proposal_validator.js';
4
- export declare class BlockProposalValidator extends ProposalValidator<BlockProposal> implements P2PValidator<BlockProposal> {
2
+ import type { BlockProposal, P2PValidator, ValidationResult } from '@aztec/stdlib/p2p';
3
+ export declare class BlockProposalValidator implements P2PValidator<BlockProposal> {
4
+ private proposalValidator;
5
5
  constructor(epochCache: EpochCacheInterface, opts: {
6
6
  txsPermitted: boolean;
7
7
  maxTxsPerBlock?: number;
8
+ p2pPropagationTime?: number;
8
9
  });
10
+ validate(proposal: BlockProposal): Promise<ValidationResult>;
9
11
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL2Jsb2NrX3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVoRixxQkFBYSxzQkFBdUIsU0FBUSxpQkFBaUIsQ0FBQyxhQUFhLENBQUUsWUFBVyxZQUFZLENBQUMsYUFBYSxDQUFDO0lBQ2pILFlBQVksVUFBVSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRTtRQUFFLFlBQVksRUFBRSxPQUFPLENBQUM7UUFBQyxjQUFjLENBQUMsRUFBRSxNQUFNLENBQUE7S0FBRSxFQUVwRztDQUNGIn0=
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL2Jsb2NrX3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl2RixxQkFBYSxzQkFBdUIsWUFBVyxZQUFZLENBQUMsYUFBYSxDQUFDO0lBQ3hFLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBb0I7SUFFN0MsWUFDRSxVQUFVLEVBQUUsbUJBQW1CLEVBQy9CLElBQUksRUFBRTtRQUFFLFlBQVksRUFBRSxPQUFPLENBQUM7UUFBQyxjQUFjLENBQUMsRUFBRSxNQUFNLENBQUM7UUFBQyxrQkFBa0IsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEVBR3RGO0lBRUssUUFBUSxDQUFDLFFBQVEsRUFBRSxhQUFhLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBTWpFO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"block_proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/block_proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAEhF,qBAAa,sBAAuB,SAAQ,iBAAiB,CAAC,aAAa,CAAE,YAAW,YAAY,CAAC,aAAa,CAAC;IACjH,YAAY,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,EAEpG;CACF"}
1
+ {"version":3,"file":"block_proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/block_proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAIvF,qBAAa,sBAAuB,YAAW,YAAY,CAAC,aAAa,CAAC;IACxE,OAAO,CAAC,iBAAiB,CAAoB;IAE7C,YACE,UAAU,EAAE,mBAAmB,EAC/B,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;KAAE,EAGtF;IAEK,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAMjE;CACF"}
@@ -1,6 +1,14 @@
1
1
  import { ProposalValidator } from '../proposal_validator/proposal_validator.js';
2
- export class BlockProposalValidator extends ProposalValidator {
2
+ export class BlockProposalValidator {
3
+ proposalValidator;
3
4
  constructor(epochCache, opts){
4
- super(epochCache, opts, 'p2p:block_proposal_validator');
5
+ this.proposalValidator = new ProposalValidator(epochCache, opts, 'p2p:block_proposal_validator');
6
+ }
7
+ async validate(proposal) {
8
+ const headerResult = await this.proposalValidator.validate(proposal);
9
+ if (headerResult.result !== 'accept') {
10
+ return headerResult;
11
+ }
12
+ return this.proposalValidator.validateTxs(proposal);
5
13
  }
6
14
  }
@@ -1,10 +1,12 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import type { CheckpointProposal, P2PValidator } from '@aztec/stdlib/p2p';
3
- import { ProposalValidator } from '../proposal_validator/proposal_validator.js';
4
- export declare class CheckpointProposalValidator extends ProposalValidator<CheckpointProposal> implements P2PValidator<CheckpointProposal> {
2
+ import type { CheckpointProposal, P2PValidator, ValidationResult } from '@aztec/stdlib/p2p';
3
+ export declare class CheckpointProposalValidator implements P2PValidator<CheckpointProposal> {
4
+ private proposalValidator;
5
5
  constructor(epochCache: EpochCacheInterface, opts: {
6
6
  txsPermitted: boolean;
7
7
  maxTxsPerBlock?: number;
8
+ p2pPropagationTime?: number;
8
9
  });
10
+ validate(proposal: CheckpointProposal): Promise<ValidationResult>;
9
11
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9wcm9wb3NhbF92YWxpZGF0b3IvY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUVoRixxQkFBYSwyQkFDWCxTQUFRLGlCQUFpQixDQUFDLGtCQUFrQixDQUM1QyxZQUFXLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQztJQUUzQyxZQUFZLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUU7UUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDO1FBQUMsY0FBYyxDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQUUsRUFFcEc7Q0FDRiJ9
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy9wcm9wb3NhbF92YWxpZGF0b3IvY2hlY2twb2ludF9wcm9wb3NhbF92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5RCxPQUFPLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUk1RixxQkFBYSwyQkFBNEIsWUFBVyxZQUFZLENBQUMsa0JBQWtCLENBQUM7SUFDbEYsT0FBTyxDQUFDLGlCQUFpQixDQUFvQjtJQUU3QyxZQUNFLFVBQVUsRUFBRSxtQkFBbUIsRUFDL0IsSUFBSSxFQUFFO1FBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQztRQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUFDLGtCQUFrQixDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQUUsRUFHdEY7SUFFSyxRQUFRLENBQUMsUUFBUSxFQUFFLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQVl0RTtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"checkpoint_proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAEhF,qBAAa,2BACX,SAAQ,iBAAiB,CAAC,kBAAkB,CAC5C,YAAW,YAAY,CAAC,kBAAkB,CAAC;IAE3C,YAAY,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,EAEpG;CACF"}
1
+ {"version":3,"file":"checkpoint_proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAI5F,qBAAa,2BAA4B,YAAW,YAAY,CAAC,kBAAkB,CAAC;IAClF,OAAO,CAAC,iBAAiB,CAAoB;IAE7C,YACE,UAAU,EAAE,mBAAmB,EAC/B,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;KAAE,EAGtF;IAEK,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAYtE;CACF"}
@@ -1,6 +1,20 @@
1
1
  import { ProposalValidator } from '../proposal_validator/proposal_validator.js';
2
- export class CheckpointProposalValidator extends ProposalValidator {
2
+ export class CheckpointProposalValidator {
3
+ proposalValidator;
3
4
  constructor(epochCache, opts){
4
- super(epochCache, opts, 'p2p:checkpoint_proposal_validator');
5
+ this.proposalValidator = new ProposalValidator(epochCache, opts, 'p2p:checkpoint_proposal_validator');
6
+ }
7
+ async validate(proposal) {
8
+ const headerResult = await this.proposalValidator.validate(proposal);
9
+ if (headerResult.result !== 'accept') {
10
+ return headerResult;
11
+ }
12
+ const blockProposal = proposal.getBlockProposal();
13
+ if (blockProposal) {
14
+ return this.proposalValidator.validateTxs(blockProposal);
15
+ }
16
+ return {
17
+ result: 'accept'
18
+ };
5
19
  }
6
20
  }
@@ -1,15 +1,20 @@
1
1
  import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import { type Logger } from '@aztec/foundation/log';
3
- import { BlockProposal, CheckpointProposal, type ValidationResult } from '@aztec/stdlib/p2p';
4
- export declare abstract class ProposalValidator<TProposal extends BlockProposal | CheckpointProposal> {
5
- protected epochCache: EpochCacheInterface;
6
- protected logger: Logger;
7
- protected txsPermitted: boolean;
8
- protected maxTxsPerBlock?: number;
2
+ import { type BlockProposal, type CheckpointProposalCore, type ValidationResult } from '@aztec/stdlib/p2p';
3
+ /** Validates header-level and tx-level fields of block and checkpoint proposals. */
4
+ export declare class ProposalValidator {
5
+ private epochCache;
6
+ private logger;
7
+ private txsPermitted;
8
+ private maxTxsPerBlock?;
9
+ private pipeliningWindow;
9
10
  constructor(epochCache: EpochCacheInterface, opts: {
10
11
  txsPermitted: boolean;
11
12
  maxTxsPerBlock?: number;
13
+ p2pPropagationTime?: number;
12
14
  }, loggerName: string);
13
- validate(proposal: TProposal): Promise<ValidationResult>;
15
+ /** Validates header-level fields: slot, signature, and proposer. */
16
+ validate(proposal: BlockProposal | CheckpointProposalCore): Promise<ValidationResult>;
17
+ /** Validates transaction-related fields of a block proposal. */
18
+ validateTxs(proposal: BlockProposal): Promise<ValidationResult>;
14
19
  }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTlELE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFxQixLQUFLLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFJaEgsOEJBQXNCLGlCQUFpQixDQUFDLFNBQVMsU0FBUyxhQUFhLEdBQUcsa0JBQWtCO0lBQzFGLFNBQVMsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUM7SUFDMUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDekIsU0FBUyxDQUFDLFlBQVksRUFBRSxPQUFPLENBQUM7SUFDaEMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztJQUVsQyxZQUNFLFVBQVUsRUFBRSxtQkFBbUIsRUFDL0IsSUFBSSxFQUFFO1FBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQztRQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQTtLQUFFLEVBQ3hELFVBQVUsRUFBRSxNQUFNLEVBTW5CO0lBRVksUUFBUSxDQUFDLFFBQVEsRUFBRSxTQUFTLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBZ0ZwRTtDQUNGIn0=
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvcHJvcG9zYWxfdmFsaWRhdG9yL3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sRUFDTCxLQUFLLGFBQWEsRUFDbEIsS0FBSyxzQkFBc0IsRUFFM0IsS0FBSyxnQkFBZ0IsRUFDdEIsTUFBTSxtQkFBbUIsQ0FBQztBQUkzQixvRkFBb0Y7QUFDcEYscUJBQWEsaUJBQWlCO0lBQzVCLE9BQU8sQ0FBQyxVQUFVLENBQXNCO0lBQ3hDLE9BQU8sQ0FBQyxNQUFNLENBQVM7SUFDdkIsT0FBTyxDQUFDLFlBQVksQ0FBVTtJQUM5QixPQUFPLENBQUMsY0FBYyxDQUFDLENBQVM7SUFDaEMsT0FBTyxDQUFDLGdCQUFnQixDQUFtQjtJQUUzQyxZQUNFLFVBQVUsRUFBRSxtQkFBbUIsRUFDL0IsSUFBSSxFQUFFO1FBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQztRQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sQ0FBQztRQUFDLGtCQUFrQixDQUFDLEVBQUUsTUFBTSxDQUFBO0tBQUUsRUFDckYsVUFBVSxFQUFFLE1BQU0sRUFPbkI7SUFFRCxvRUFBb0U7SUFDdkQsUUFBUSxDQUFDLFFBQVEsRUFBRSxhQUFhLEdBQUcsc0JBQXNCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBNENqRztJQUVELGdFQUFnRTtJQUNuRCxXQUFXLENBQUMsUUFBUSxFQUFFLGFBQWEsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0F3QzNFO0NBQ0YifQ==
@@ -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;AAE9D,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAqB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAIhH,8BAAsB,iBAAiB,CAAC,SAAS,SAAS,aAAa,GAAG,kBAAkB;IAC1F,SAAS,CAAC,UAAU,EAAE,mBAAmB,CAAC;IAC1C,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,YAAY,EAAE,OAAO,CAAC;IAChC,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAElC,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;IAEY,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAgFpE;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,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;IAChC,OAAO,CAAC,gBAAgB,CAAmB;IAE3C,YACE,UAAU,EAAE,mBAAmB,EAC/B,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;KAAE,EACrF,UAAU,EAAE,MAAM,EAOnB;IAED,oEAAoE;IACvD,QAAQ,CAAC,QAAQ,EAAE,aAAa,GAAG,sBAAsB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA4CjG;IAED,gEAAgE;IACnD,WAAW,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwC3E;CACF"}
@@ -1,39 +1,47 @@
1
1
  import { NoCommitteeError } from '@aztec/ethereum/contracts';
2
2
  import { createLogger } from '@aztec/foundation/log';
3
3
  import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
4
- import { isWithinClockTolerance } from '../clock_tolerance.js';
5
- export class ProposalValidator {
4
+ import { PipeliningWindow, isWithinClockTolerance } from '../clock_tolerance.js';
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
+ pipeliningWindow;
10
11
  constructor(epochCache, opts, loggerName){
11
12
  this.epochCache = epochCache;
12
13
  this.txsPermitted = opts.txsPermitted;
13
14
  this.maxTxsPerBlock = opts.maxTxsPerBlock;
15
+ this.pipeliningWindow = new PipeliningWindow(epochCache, {
16
+ p2pPropagationTime: opts.p2pPropagationTime
17
+ });
14
18
  this.logger = createLogger(loggerName);
15
19
  }
16
- async validate(proposal) {
20
+ /** Validates header-level fields: slot, signature, and proposer. */ async validate(proposal) {
17
21
  try {
18
- // Slot check
19
- const { currentSlot, nextSlot } = this.epochCache.getCurrentAndNextSlot();
22
+ // Slot check: use target slots since proposals target pipeline slots (slot + 1 when pipelining).
23
+ const { targetSlot, nextSlot } = this.epochCache.getTargetAndNextSlot();
20
24
  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)) {
25
+ if (slotNumber !== targetSlot && slotNumber !== nextSlot) {
26
+ // When pipelining, accept proposals for the current slot (built in the previous slot)
27
+ // if they're still within the shared proposal acceptance window.
28
+ if (this.pipeliningWindow.acceptsProposal(slotNumber)) {
29
+ // Fall through to remaining validation (signature, proposer, etc.)
30
+ } else if (!isWithinClockTolerance(slotNumber, targetSlot, this.epochCache)) {
24
31
  this.logger.warn(`Penalizing peer for invalid slot number ${slotNumber}`, {
25
- currentSlot,
32
+ targetSlot,
26
33
  nextSlot
27
34
  });
28
35
  return {
29
36
  result: 'reject',
30
37
  severity: PeerErrorSeverity.HighToleranceError
31
38
  };
39
+ } else {
40
+ this.logger.verbose(`Ignoring proposal for previous slot ${slotNumber} within clock tolerance`);
41
+ return {
42
+ result: 'ignore'
43
+ };
32
44
  }
33
- this.logger.verbose(`Ignoring proposal for previous slot ${slotNumber} within clock tolerance`);
34
- return {
35
- result: 'ignore'
36
- };
37
45
  }
38
46
  // Signature validity
39
47
  const proposer = proposal.getSender();
@@ -44,37 +52,6 @@ export class ProposalValidator {
44
52
  severity: PeerErrorSeverity.MidToleranceError
45
53
  };
46
54
  }
47
- // Transactions permitted check
48
- const embeddedTxCount = proposal.txs?.length ?? 0;
49
- if (!this.txsPermitted && (proposal.txHashes.length > 0 || embeddedTxCount > 0)) {
50
- this.logger.warn(`Penalizing peer for proposal with ${proposal.txHashes.length} transaction(s) when transactions are not permitted`);
51
- return {
52
- result: 'reject',
53
- severity: PeerErrorSeverity.MidToleranceError
54
- };
55
- }
56
- // Max txs per block check
57
- if (this.maxTxsPerBlock !== undefined && proposal.txHashes.length > this.maxTxsPerBlock) {
58
- this.logger.warn(`Penalizing peer for proposal with ${proposal.txHashes.length} transaction(s) when max is ${this.maxTxsPerBlock}`);
59
- return {
60
- result: 'reject',
61
- severity: PeerErrorSeverity.MidToleranceError
62
- };
63
- }
64
- // Embedded txs must be listed in txHashes
65
- const hashSet = new Set(proposal.txHashes.map((h)=>h.toString()));
66
- const missingTxHashes = embeddedTxCount > 0 ? proposal.txs.filter((tx)=>!hashSet.has(tx.getTxHash().toString())).map((tx)=>tx.getTxHash().toString()) : [];
67
- if (embeddedTxCount > 0 && missingTxHashes.length > 0) {
68
- this.logger.warn('Penalizing peer for embedded transaction(s) not included in txHashes', {
69
- embeddedTxCount,
70
- txHashesLength: proposal.txHashes.length,
71
- missingTxHashes
72
- });
73
- return {
74
- result: 'reject',
75
- severity: PeerErrorSeverity.MidToleranceError
76
- };
77
- }
78
55
  // Proposer check
79
56
  const expectedProposer = await this.epochCache.getProposerAttesterAddressInSlot(slotNumber);
80
57
  if (expectedProposer !== undefined && !proposer.equals(expectedProposer)) {
@@ -87,17 +64,6 @@ export class ProposalValidator {
87
64
  severity: PeerErrorSeverity.MidToleranceError
88
65
  };
89
66
  }
90
- // Validate tx hashes for all txs embedded in the proposal
91
- if (!(await Promise.all(proposal.txs?.map((tx)=>tx.validateTxHash()) ?? [])).every((v)=>v)) {
92
- this.logger.warn(`Penalizing peer for invalid tx hashes in proposal`, {
93
- proposer,
94
- slotNumber
95
- });
96
- return {
97
- result: 'reject',
98
- severity: PeerErrorSeverity.LowToleranceError
99
- };
100
- }
101
67
  return {
102
68
  result: 'accept'
103
69
  };
@@ -111,4 +77,48 @@ export class ProposalValidator {
111
77
  throw e;
112
78
  }
113
79
  }
80
+ /** Validates transaction-related fields of a block proposal. */ async validateTxs(proposal) {
81
+ // Transactions permitted check
82
+ const embeddedTxCount = proposal.txs?.length ?? 0;
83
+ if (!this.txsPermitted && (proposal.txHashes.length > 0 || embeddedTxCount > 0)) {
84
+ this.logger.warn(`Penalizing peer for proposal with ${proposal.txHashes.length} transaction(s) when transactions are not permitted`);
85
+ return {
86
+ result: 'reject',
87
+ severity: PeerErrorSeverity.MidToleranceError
88
+ };
89
+ }
90
+ // Max txs per block check
91
+ if (this.maxTxsPerBlock !== undefined && proposal.txHashes.length > this.maxTxsPerBlock) {
92
+ this.logger.warn(`Penalizing peer for proposal with ${proposal.txHashes.length} transaction(s) when max is ${this.maxTxsPerBlock}`);
93
+ return {
94
+ result: 'reject',
95
+ severity: PeerErrorSeverity.MidToleranceError
96
+ };
97
+ }
98
+ // Embedded txs must be listed in txHashes
99
+ const hashSet = new Set(proposal.txHashes.map((h)=>h.toString()));
100
+ const missingTxHashes = embeddedTxCount > 0 ? proposal.txs.filter((tx)=>!hashSet.has(tx.getTxHash().toString())).map((tx)=>tx.getTxHash().toString()) : [];
101
+ if (embeddedTxCount > 0 && missingTxHashes.length > 0) {
102
+ this.logger.warn('Penalizing peer for embedded transaction(s) not included in txHashes', {
103
+ embeddedTxCount,
104
+ txHashesLength: proposal.txHashes.length,
105
+ missingTxHashes
106
+ });
107
+ return {
108
+ result: 'reject',
109
+ severity: PeerErrorSeverity.MidToleranceError
110
+ };
111
+ }
112
+ // Validate tx hashes for all txs embedded in the proposal
113
+ if (!(await Promise.all(proposal.txs?.map((tx)=>tx.validateTxHash()) ?? [])).every((v)=>v)) {
114
+ this.logger.warn(`Penalizing peer for invalid tx hashes in proposal`);
115
+ return {
116
+ result: 'reject',
117
+ severity: PeerErrorSeverity.LowToleranceError
118
+ };
119
+ }
120
+ return {
121
+ result: 'accept'
122
+ };
123
+ }
114
124
  }
@@ -1,4 +1,4 @@
1
1
  import type { AllowedElement } from '@aztec/stdlib/interfaces/server';
2
2
  /** Returns the default list of functions allowed to run in the setup phase of a transaction. */
3
3
  export declare function getDefaultAllowedSetupFunctions(): Promise<AllowedElement[]>;
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsb3dlZF9wdWJsaWNfc2V0dXAuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvYWxsb3dlZF9wdWJsaWNfc2V0dXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFJdEUsZ0dBQWdHO0FBQ2hHLHdCQUFzQiwrQkFBK0IsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0F1Q2pGIn0=
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsb3dlZF9wdWJsaWNfc2V0dXAuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvYWxsb3dlZF9wdWJsaWNfc2V0dXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFNdEUsZ0dBQWdHO0FBQ2hHLHdCQUFzQiwrQkFBK0IsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FtQmpGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"allowed_public_setup.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/allowed_public_setup.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAItE,gGAAgG;AAChG,wBAAsB,+BAA+B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAuCjF"}
1
+ {"version":3,"file":"allowed_public_setup.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/allowed_public_setup.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAMtE,gGAAgG;AAChG,wBAAsB,+BAA+B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAmBjF"}
@@ -1,42 +1,31 @@
1
- import { TokenContractArtifact } from '@aztec/noir-contracts.js/Token';
2
1
  import { ProtocolContractAddress } from '@aztec/protocol-contracts';
3
- import { FunctionSelector } from '@aztec/stdlib/abi';
4
- import { getContractClassFromArtifact } from '@aztec/stdlib/contract';
2
+ import { AuthRegistryArtifact } from '@aztec/protocol-contracts/auth-registry';
3
+ import { FeeJuiceArtifact } from '@aztec/protocol-contracts/fee-juice';
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() {
7
7
  if (defaultAllowedSetupFunctions === undefined) {
8
- const tokenClassId = (await getContractClassFromArtifact(TokenContractArtifact)).id;
9
- const setAuthorizedInternalSelector = await FunctionSelector.fromSignature('_set_authorized((Field),Field,bool)');
10
- const setAuthorizedSelector = await FunctionSelector.fromSignature('set_authorized(Field,bool)');
11
- const increaseBalanceSelector = await FunctionSelector.fromSignature('_increase_public_balance((Field),u128)');
12
- const transferInPublicSelector = await FunctionSelector.fromSignature('transfer_in_public((Field),(Field),u128,Field)');
13
- defaultAllowedSetupFunctions = [
8
+ defaultAllowedSetupFunctions = await Promise.all([
14
9
  // AuthRegistry: needed for authwit support via private path (set_authorized_private enqueues _set_authorized)
15
- {
16
- address: ProtocolContractAddress.AuthRegistry,
17
- selector: setAuthorizedInternalSelector
18
- },
10
+ buildAllowedElement(AuthRegistryArtifact, {
11
+ address: ProtocolContractAddress.AuthRegistry
12
+ }, '_set_authorized', {
13
+ onlySelf: true,
14
+ rejectNullMsgSender: true
15
+ }),
19
16
  // AuthRegistry: needed for authwit support via public path (PublicFeePaymentMethod calls set_authorized directly)
20
- {
21
- address: ProtocolContractAddress.AuthRegistry,
22
- selector: setAuthorizedSelector
23
- },
17
+ buildAllowedElement(AuthRegistryArtifact, {
18
+ address: ProtocolContractAddress.AuthRegistry
19
+ }, 'set_authorized', {
20
+ rejectNullMsgSender: true
21
+ }),
24
22
  // FeeJuice: needed for claiming on the same tx as a spend (claim_and_end_setup enqueues this)
25
- {
26
- address: ProtocolContractAddress.FeeJuice,
27
- selector: increaseBalanceSelector
28
- },
29
- // Token: needed for private transfers via FPC (transfer_to_public enqueues this)
30
- {
31
- classId: tokenClassId,
32
- selector: increaseBalanceSelector
33
- },
34
- // Token: needed for public transfers via FPC (fee_entrypoint_public enqueues this)
35
- {
36
- classId: tokenClassId,
37
- selector: transferInPublicSelector
38
- }
39
- ];
23
+ buildAllowedElement(FeeJuiceArtifact, {
24
+ address: ProtocolContractAddress.FeeJuice
25
+ }, '_increase_public_balance', {
26
+ onlySelf: true
27
+ })
28
+ ]);
40
29
  }
41
30
  return defaultAllowedSetupFunctions;
42
31
  }
@@ -0,0 +1,17 @@
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
+ import type { ContractArtifact } from '@aztec/stdlib/abi';
3
+ import type { AztecAddress } from '@aztec/stdlib/aztec-address';
4
+ import type { AllowedElement } from '@aztec/stdlib/interfaces/server';
5
+ /**
6
+ * Builds an AllowedElement from a contract artifact, deriving both the function selector
7
+ * and calldata length from the artifact instead of hardcoding signature strings.
8
+ */
9
+ export declare function buildAllowedElement(artifact: ContractArtifact, target: {
10
+ address: AztecAddress;
11
+ } | {
12
+ classId: Fr;
13
+ }, functionName: string, opts?: {
14
+ onlySelf?: boolean;
15
+ rejectNullMsgSender?: boolean;
16
+ }): Promise<AllowedElement>;
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxsb3dlZF9zZXR1cF9oZWxwZXJzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvdHhfdmFsaWRhdG9yL2FsbG93ZWRfc2V0dXBfaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV6RCxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRXRFOzs7R0FHRztBQUNILHdCQUFzQixtQkFBbUIsQ0FDdkMsUUFBUSxFQUFFLGdCQUFnQixFQUMxQixNQUFNLEVBQUU7SUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFBO0NBQUUsR0FBRztJQUFFLE9BQU8sRUFBRSxFQUFFLENBQUE7Q0FBRSxFQUNuRCxZQUFZLEVBQUUsTUFBTSxFQUNwQixJQUFJLENBQUMsRUFBRTtJQUFFLFFBQVEsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUFDLG1CQUFtQixDQUFDLEVBQUUsT0FBTyxDQUFBO0NBQUUsR0FDM0QsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQWV6QiJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"allowed_setup_helpers.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/allowed_setup_helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEtE;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE;IAAE,OAAO,EAAE,YAAY,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,EAAE,CAAA;CAAE,EACnD,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAAE,GAC3D,OAAO,CAAC,cAAc,CAAC,CAezB"}
@@ -0,0 +1,24 @@
1
+ import { FunctionSelector, countArgumentsSize, getAllFunctionAbis } from '@aztec/stdlib/abi';
2
+ /**
3
+ * Builds an AllowedElement from a contract artifact, deriving both the function selector
4
+ * and calldata length from the artifact instead of hardcoding signature strings.
5
+ */ export async function buildAllowedElement(artifact, target, functionName, opts) {
6
+ const allFunctions = getAllFunctionAbis(artifact);
7
+ const fn = allFunctions.find((f)=>f.name === functionName);
8
+ if (!fn) {
9
+ throw new Error(`Unknown function ${functionName} in artifact ${artifact.name}`);
10
+ }
11
+ const selector = await FunctionSelector.fromNameAndParameters(fn.name, fn.parameters);
12
+ const calldataLength = 1 + countArgumentsSize(fn);
13
+ return {
14
+ ...target,
15
+ selector,
16
+ calldataLength,
17
+ ...opts?.onlySelf ? {
18
+ onlySelf: true
19
+ } : {},
20
+ ...opts?.rejectNullMsgSender ? {
21
+ rejectNullMsgSender: true
22
+ } : {}
23
+ };
24
+ }
@@ -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,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
+ }
@@ -5,4 +5,4 @@ export declare class DataTxValidator implements TxValidator<Tx> {
5
5
  constructor(bindings?: LoggerBindings);
6
6
  validateTx(tx: Tx): Promise<TxValidationResult>;
7
7
  }
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvZGF0YV92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFlLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE9BQU8sRUFTTCxFQUFFLEVBQ0YsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxXQUFXLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIscUJBQWEsZUFBZ0IsWUFBVyxXQUFXLENBQUMsRUFBRSxDQUFDOztJQUdyRCxZQUFZLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFFcEM7SUFFSyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FNcEQ7Q0FtR0YifQ==
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvZGF0YV92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFlLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBSXZGLE9BQU8sRUFXTCxFQUFFLEVBQ0YsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxXQUFXLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIscUJBQWEsZUFBZ0IsWUFBVyxXQUFXLENBQUMsRUFBRSxDQUFDOztJQUdyRCxZQUFZLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFFcEM7SUFFSyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FPcEQ7Q0F1SUYifQ==
@@ -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;;IAGrD,YAAY,QAAQ,CAAC,EAAE,cAAc,EAEpC;IAEK,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAOpD;CAuIF"}