@aztec/p2p 0.0.1-commit.c7c42ec → 0.0.1-commit.c949de6bc

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 (531) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +4 -3
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +4 -4
  4. package/dest/client/factory.d.ts +10 -10
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +45 -18
  7. package/dest/client/interface.d.ts +61 -35
  8. package/dest/client/interface.d.ts.map +1 -1
  9. package/dest/client/p2p_client.d.ts +47 -60
  10. package/dest/client/p2p_client.d.ts.map +1 -1
  11. package/dest/client/p2p_client.js +600 -313
  12. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  13. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  14. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +304 -0
  15. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  16. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  17. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  18. package/dest/config.d.ts +35 -7
  19. package/dest/config.d.ts.map +1 -1
  20. package/dest/config.js +23 -9
  21. package/dest/errors/tx-pool.error.d.ts +8 -0
  22. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  23. package/dest/errors/tx-pool.error.js +9 -0
  24. package/dest/index.d.ts +2 -1
  25. package/dest/index.d.ts.map +1 -1
  26. package/dest/index.js +1 -0
  27. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +111 -76
  28. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool.js +441 -3
  30. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  31. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  32. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +527 -287
  33. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  34. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  35. package/dest/mem_pools/attestation_pool/index.js +1 -2
  36. package/dest/mem_pools/attestation_pool/mocks.d.ts +9 -6
  37. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  38. package/dest/mem_pools/attestation_pool/mocks.js +16 -12
  39. package/dest/mem_pools/index.d.ts +3 -2
  40. package/dest/mem_pools/index.d.ts.map +1 -1
  41. package/dest/mem_pools/index.js +1 -1
  42. package/dest/mem_pools/instrumentation.d.ts +1 -1
  43. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  44. package/dest/mem_pools/instrumentation.js +5 -14
  45. package/dest/mem_pools/interface.d.ts +5 -5
  46. package/dest/mem_pools/interface.d.ts.map +1 -1
  47. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +15 -10
  48. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  49. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +91 -50
  50. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +19 -5
  51. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -1
  52. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +59 -3
  53. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +79 -5
  54. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -1
  55. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +47 -0
  56. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  57. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  58. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  59. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +2 -2
  60. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -1
  61. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +3 -3
  62. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +4 -4
  63. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
  64. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +2 -0
  65. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +2 -2
  66. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -1
  67. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  68. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  69. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  70. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  71. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  72. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  73. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
  74. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  75. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
  76. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  77. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  78. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  82. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  83. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  84. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +93 -0
  85. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  86. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  87. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +97 -0
  88. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +10 -0
  89. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  90. package/dest/mem_pools/tx_pool_v2/eviction/index.js +11 -0
  91. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +174 -0
  92. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  93. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  94. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  95. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  96. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +65 -0
  97. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  98. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  99. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
  100. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  101. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  102. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  103. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  104. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  105. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +73 -0
  106. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  107. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  108. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  109. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  110. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  111. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  112. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  113. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  114. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  115. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +211 -0
  116. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  117. package/dest/mem_pools/tx_pool_v2/interfaces.js +9 -0
  118. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +119 -0
  119. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  120. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +193 -0
  121. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  122. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  123. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  124. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
  125. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  126. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +354 -0
  127. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +60 -0
  128. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  129. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +161 -0
  130. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +77 -0
  131. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  132. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +905 -0
  133. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -4
  134. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  135. package/dest/msg_validators/attestation_validator/attestation_validator.js +51 -18
  136. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -7
  137. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  138. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +22 -13
  139. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  140. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  141. package/dest/msg_validators/clock_tolerance.js +37 -0
  142. package/dest/msg_validators/index.d.ts +2 -2
  143. package/dest/msg_validators/index.d.ts.map +1 -1
  144. package/dest/msg_validators/index.js +1 -1
  145. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  146. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  147. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  148. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  149. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  150. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  151. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  152. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  153. package/dest/msg_validators/proposal_validator/index.js +3 -0
  154. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  155. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  156. package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
  157. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  158. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  159. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
  160. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  161. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  162. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
  163. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  164. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  165. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  166. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
  167. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  168. package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
  169. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  170. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  171. package/dest/msg_validators/tx_validator/data_validator.js +4 -1
  172. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -4
  173. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  174. package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
  175. package/dest/msg_validators/tx_validator/factory.d.ts +118 -5
  176. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  177. package/dest/msg_validators/tx_validator/factory.js +228 -57
  178. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  179. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  180. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  181. package/dest/msg_validators/tx_validator/gas_validator.d.ts +59 -3
  182. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  183. package/dest/msg_validators/tx_validator/gas_validator.js +84 -52
  184. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  185. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  186. package/dest/msg_validators/tx_validator/index.js +2 -0
  187. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  188. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  189. package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
  190. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  191. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  192. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  193. package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
  194. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  195. package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
  196. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  197. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  198. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  199. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +22 -5
  200. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  201. package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
  202. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  203. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  204. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  205. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  206. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  207. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  208. package/dest/services/data_store.d.ts +1 -1
  209. package/dest/services/data_store.d.ts.map +1 -1
  210. package/dest/services/data_store.js +10 -6
  211. package/dest/services/discv5/discV5_service.js +1 -1
  212. package/dest/services/dummy_service.d.ts +28 -4
  213. package/dest/services/dummy_service.d.ts.map +1 -1
  214. package/dest/services/dummy_service.js +49 -1
  215. package/dest/services/encoding.d.ts +3 -3
  216. package/dest/services/encoding.d.ts.map +1 -1
  217. package/dest/services/encoding.js +16 -14
  218. package/dest/services/gossipsub/index.d.ts +3 -0
  219. package/dest/services/gossipsub/index.d.ts.map +1 -0
  220. package/dest/services/gossipsub/index.js +2 -0
  221. package/dest/services/gossipsub/scoring.d.ts +21 -3
  222. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  223. package/dest/services/gossipsub/scoring.js +24 -7
  224. package/dest/services/gossipsub/topic_score_params.d.ts +173 -0
  225. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  226. package/dest/services/gossipsub/topic_score_params.js +346 -0
  227. package/dest/services/index.d.ts +2 -1
  228. package/dest/services/index.d.ts.map +1 -1
  229. package/dest/services/index.js +1 -0
  230. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  231. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  232. package/dest/services/libp2p/instrumentation.js +30 -72
  233. package/dest/services/libp2p/libp2p_service.d.ts +115 -40
  234. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  235. package/dest/services/libp2p/libp2p_service.js +1020 -369
  236. package/dest/services/peer-manager/metrics.d.ts +2 -2
  237. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  238. package/dest/services/peer-manager/metrics.js +21 -26
  239. package/dest/services/peer-manager/peer_manager.d.ts +2 -2
  240. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  241. package/dest/services/peer-manager/peer_manager.js +0 -10
  242. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  243. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  244. package/dest/services/peer-manager/peer_scoring.js +32 -6
  245. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +48 -0
  246. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  247. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +539 -0
  248. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  249. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  250. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  251. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +46 -0
  252. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  253. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  254. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +34 -0
  255. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  256. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +130 -0
  257. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +60 -0
  258. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  259. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +173 -0
  260. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  261. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  262. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  263. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  264. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  265. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  266. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  267. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  268. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  269. package/dest/services/reqresp/constants.d.ts +12 -0
  270. package/dest/services/reqresp/constants.d.ts.map +1 -0
  271. package/dest/services/reqresp/constants.js +7 -0
  272. package/dest/services/reqresp/interface.d.ts +12 -1
  273. package/dest/services/reqresp/interface.d.ts.map +1 -1
  274. package/dest/services/reqresp/interface.js +15 -1
  275. package/dest/services/reqresp/metrics.d.ts +6 -5
  276. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  277. package/dest/services/reqresp/metrics.js +17 -21
  278. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  279. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  280. package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
  281. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  282. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  283. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +27 -9
  284. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +29 -6
  285. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  286. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +59 -13
  287. package/dest/services/reqresp/protocols/status.d.ts +1 -1
  288. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  289. package/dest/services/reqresp/protocols/status.js +4 -1
  290. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  291. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  292. package/dest/services/reqresp/protocols/tx.js +20 -0
  293. package/dest/services/reqresp/reqresp.d.ts +6 -1
  294. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  295. package/dest/services/reqresp/reqresp.js +473 -51
  296. package/dest/services/service.d.ts +56 -4
  297. package/dest/services/service.d.ts.map +1 -1
  298. package/dest/services/tx_collection/config.d.ts +22 -1
  299. package/dest/services/tx_collection/config.d.ts.map +1 -1
  300. package/dest/services/tx_collection/config.js +55 -1
  301. package/dest/services/tx_collection/fast_tx_collection.d.ts +7 -4
  302. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  303. package/dest/services/tx_collection/fast_tx_collection.js +71 -44
  304. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  305. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  306. package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
  307. package/dest/services/tx_collection/file_store_tx_source.d.ts +37 -0
  308. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  309. package/dest/services/tx_collection/file_store_tx_source.js +90 -0
  310. package/dest/services/tx_collection/index.d.ts +3 -1
  311. package/dest/services/tx_collection/index.d.ts.map +1 -1
  312. package/dest/services/tx_collection/index.js +2 -0
  313. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  314. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  315. package/dest/services/tx_collection/instrumentation.js +11 -13
  316. package/dest/services/tx_collection/missing_txs_tracker.d.ts +32 -0
  317. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +1 -0
  318. package/dest/services/tx_collection/missing_txs_tracker.js +27 -0
  319. package/dest/services/tx_collection/proposal_tx_collector.d.ts +49 -0
  320. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  321. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  322. package/dest/services/tx_collection/slow_tx_collection.d.ts +9 -5
  323. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  324. package/dest/services/tx_collection/slow_tx_collection.js +60 -26
  325. package/dest/services/tx_collection/tx_collection.d.ts +29 -16
  326. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  327. package/dest/services/tx_collection/tx_collection.js +79 -7
  328. package/dest/services/tx_collection/tx_collection_sink.d.ts +18 -8
  329. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  330. package/dest/services/tx_collection/tx_collection_sink.js +26 -29
  331. package/dest/services/tx_collection/tx_source.d.ts +8 -3
  332. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  333. package/dest/services/tx_collection/tx_source.js +19 -2
  334. package/dest/services/tx_file_store/config.d.ts +16 -0
  335. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  336. package/dest/services/tx_file_store/config.js +22 -0
  337. package/dest/services/tx_file_store/index.d.ts +4 -0
  338. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  339. package/dest/services/tx_file_store/index.js +3 -0
  340. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  341. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  342. package/dest/services/tx_file_store/instrumentation.js +29 -0
  343. package/dest/services/tx_file_store/tx_file_store.d.ts +48 -0
  344. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  345. package/dest/services/tx_file_store/tx_file_store.js +152 -0
  346. package/dest/services/tx_provider.d.ts +6 -6
  347. package/dest/services/tx_provider.d.ts.map +1 -1
  348. package/dest/services/tx_provider.js +9 -8
  349. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  350. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  351. package/dest/services/tx_provider_instrumentation.js +7 -20
  352. package/dest/test-helpers/index.d.ts +3 -1
  353. package/dest/test-helpers/index.d.ts.map +1 -1
  354. package/dest/test-helpers/index.js +2 -0
  355. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  356. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  357. package/dest/test-helpers/make-test-p2p-clients.js +1 -2
  358. package/dest/test-helpers/mock-pubsub.d.ts +30 -4
  359. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  360. package/dest/test-helpers/mock-pubsub.js +105 -4
  361. package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
  362. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  363. package/dest/test-helpers/reqresp-nodes.js +4 -3
  364. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  365. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  366. package/dest/test-helpers/test_tx_provider.js +41 -0
  367. package/dest/test-helpers/testbench-utils.d.ts +163 -0
  368. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  369. package/dest/test-helpers/testbench-utils.js +366 -0
  370. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  371. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  372. package/dest/testbench/p2p_client_testbench_worker.js +225 -131
  373. package/dest/testbench/worker_client_manager.d.ts +51 -6
  374. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  375. package/dest/testbench/worker_client_manager.js +226 -39
  376. package/dest/util.d.ts +2 -2
  377. package/dest/util.d.ts.map +1 -1
  378. package/package.json +16 -16
  379. package/src/bootstrap/bootstrap.ts +7 -4
  380. package/src/client/factory.ts +83 -36
  381. package/src/client/interface.ts +73 -36
  382. package/src/client/p2p_client.ts +259 -364
  383. package/src/client/test/tx_proposal_collector/README.md +227 -0
  384. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +345 -0
  385. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  386. package/src/config.ts +49 -13
  387. package/src/errors/tx-pool.error.ts +12 -0
  388. package/src/index.ts +1 -0
  389. package/src/mem_pools/attestation_pool/attestation_pool.ts +510 -78
  390. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +612 -320
  391. package/src/mem_pools/attestation_pool/index.ts +9 -2
  392. package/src/mem_pools/attestation_pool/mocks.ts +20 -13
  393. package/src/mem_pools/index.ts +4 -1
  394. package/src/mem_pools/instrumentation.ts +10 -18
  395. package/src/mem_pools/interface.ts +4 -4
  396. package/src/mem_pools/tx_pool/README.md +29 -14
  397. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +130 -75
  398. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +66 -5
  399. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +119 -4
  400. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  401. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +3 -3
  402. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +4 -2
  403. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  404. package/src/mem_pools/tx_pool_v2/README.md +275 -0
  405. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  406. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
  407. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  408. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  409. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +121 -0
  410. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  411. package/src/mem_pools/tx_pool_v2/eviction/index.ts +27 -0
  412. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +209 -0
  413. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  414. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  415. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  416. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +90 -0
  417. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +31 -0
  418. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  419. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  420. package/src/mem_pools/tx_pool_v2/interfaces.ts +242 -0
  421. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +297 -0
  422. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  423. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +444 -0
  424. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +223 -0
  425. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1083 -0
  426. package/src/msg_validators/attestation_validator/attestation_validator.ts +36 -21
  427. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +21 -18
  428. package/src/msg_validators/clock_tolerance.ts +51 -0
  429. package/src/msg_validators/index.ts +1 -1
  430. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  431. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  432. package/src/msg_validators/proposal_validator/index.ts +3 -0
  433. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  434. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  435. package/src/msg_validators/tx_validator/README.md +115 -0
  436. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +5 -5
  437. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  438. package/src/msg_validators/tx_validator/block_header_validator.ts +21 -8
  439. package/src/msg_validators/tx_validator/data_validator.ts +18 -6
  440. package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
  441. package/src/msg_validators/tx_validator/factory.ts +372 -55
  442. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  443. package/src/msg_validators/tx_validator/gas_validator.ts +106 -54
  444. package/src/msg_validators/tx_validator/index.ts +2 -0
  445. package/src/msg_validators/tx_validator/metadata_validator.ts +18 -7
  446. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  447. package/src/msg_validators/tx_validator/phases_validator.ts +5 -3
  448. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  449. package/src/msg_validators/tx_validator/timestamp_validator.ts +29 -19
  450. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  451. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  452. package/src/services/data_store.ts +10 -7
  453. package/src/services/discv5/discV5_service.ts +1 -1
  454. package/src/services/dummy_service.ts +65 -2
  455. package/src/services/encoding.ts +13 -12
  456. package/src/services/gossipsub/README.md +641 -0
  457. package/src/services/gossipsub/index.ts +2 -0
  458. package/src/services/gossipsub/scoring.ts +29 -5
  459. package/src/services/gossipsub/topic_score_params.ts +487 -0
  460. package/src/services/index.ts +1 -0
  461. package/src/services/libp2p/instrumentation.ts +32 -73
  462. package/src/services/libp2p/libp2p_service.ts +706 -371
  463. package/src/services/peer-manager/metrics.ts +22 -26
  464. package/src/services/peer-manager/peer_manager.ts +1 -2
  465. package/src/services/peer-manager/peer_scoring.ts +28 -4
  466. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  467. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +678 -0
  468. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  469. package/src/services/reqresp/batch-tx-requester/interface.ts +53 -0
  470. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +161 -0
  471. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +244 -0
  472. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  473. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  474. package/src/services/reqresp/connection-sampler/connection_sampler.ts +19 -1
  475. package/src/services/reqresp/constants.ts +14 -0
  476. package/src/services/reqresp/interface.ts +29 -1
  477. package/src/services/reqresp/metrics.ts +36 -27
  478. package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
  479. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +35 -12
  480. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +74 -9
  481. package/src/services/reqresp/protocols/status.ts +7 -4
  482. package/src/services/reqresp/protocols/tx.ts +22 -0
  483. package/src/services/reqresp/reqresp.ts +82 -23
  484. package/src/services/service.ts +73 -5
  485. package/src/services/tx_collection/config.ts +83 -1
  486. package/src/services/tx_collection/fast_tx_collection.ts +93 -47
  487. package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
  488. package/src/services/tx_collection/file_store_tx_source.ts +117 -0
  489. package/src/services/tx_collection/index.ts +6 -0
  490. package/src/services/tx_collection/instrumentation.ts +11 -13
  491. package/src/services/tx_collection/missing_txs_tracker.ts +52 -0
  492. package/src/services/tx_collection/proposal_tx_collector.ts +113 -0
  493. package/src/services/tx_collection/slow_tx_collection.ts +68 -35
  494. package/src/services/tx_collection/tx_collection.ts +121 -24
  495. package/src/services/tx_collection/tx_collection_sink.ts +30 -34
  496. package/src/services/tx_collection/tx_source.ts +22 -3
  497. package/src/services/tx_file_store/config.ts +37 -0
  498. package/src/services/tx_file_store/index.ts +3 -0
  499. package/src/services/tx_file_store/instrumentation.ts +36 -0
  500. package/src/services/tx_file_store/tx_file_store.ts +175 -0
  501. package/src/services/tx_provider.ts +12 -11
  502. package/src/services/tx_provider_instrumentation.ts +13 -20
  503. package/src/test-helpers/index.ts +2 -0
  504. package/src/test-helpers/make-test-p2p-clients.ts +3 -5
  505. package/src/test-helpers/mock-pubsub.ts +146 -9
  506. package/src/test-helpers/reqresp-nodes.ts +4 -6
  507. package/src/test-helpers/test_tx_provider.ts +64 -0
  508. package/src/test-helpers/testbench-utils.ts +430 -0
  509. package/src/testbench/p2p_client_testbench_worker.ts +349 -128
  510. package/src/testbench/worker_client_manager.ts +304 -42
  511. package/src/util.ts +7 -1
  512. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -37
  513. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  514. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -213
  515. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -30
  516. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  517. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -219
  518. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts +0 -15
  519. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts.map +0 -1
  520. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.js +0 -88
  521. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  522. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  523. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -82
  524. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  525. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  526. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  527. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -298
  528. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -287
  529. package/src/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.ts +0 -108
  530. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -97
  531. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -0,0 +1,212 @@
1
+ import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
2
+ export function sharedProposalValidatorTests(params) {
3
+ const { validatorFactory, makeProposal, makeHeader, getSigner, getAddress, getSlot, getTxHashes, epochCacheMock } = params;
4
+ describe('shared proposal validation logic', ()=>{
5
+ let epochCache;
6
+ let validator;
7
+ const previousSlot = getSlot(99);
8
+ const currentSlot = getSlot(100);
9
+ const nextSlot = getSlot(101);
10
+ function mockGetProposer(currentProposer, nextProposer, previousProposer) {
11
+ epochCache.getProposerAttesterAddressInSlot.mockImplementation((slot)=>{
12
+ if (slot === currentSlot) {
13
+ return Promise.resolve(currentProposer);
14
+ }
15
+ if (slot === nextSlot) {
16
+ return Promise.resolve(nextProposer);
17
+ }
18
+ if (slot === previousSlot && previousProposer) {
19
+ return Promise.resolve(previousProposer);
20
+ }
21
+ throw new Error('Unexpected argument');
22
+ });
23
+ }
24
+ beforeEach(()=>{
25
+ epochCache = epochCacheMock();
26
+ validator = validatorFactory(epochCache, {
27
+ txsPermitted: true
28
+ });
29
+ epochCache.getCurrentAndNextSlot.mockReturnValue({
30
+ currentSlot: currentSlot,
31
+ nextSlot: nextSlot
32
+ });
33
+ });
34
+ it('returns high tolerance error if slot number is not current or next slot (outside clock tolerance)', async ()=>{
35
+ const header = makeHeader(1, 99, 99);
36
+ const mockProposal = await makeProposal({
37
+ blockHeader: header,
38
+ lastBlockHeader: header
39
+ });
40
+ // Mock getEpochAndSlotNow to return time OUTSIDE clock tolerance (1000ms elapsed)
41
+ epochCache.getEpochAndSlotNow.mockReturnValue({
42
+ epoch: 1,
43
+ slot: currentSlot,
44
+ ts: 1000n,
45
+ nowMs: 1001000n
46
+ });
47
+ epochCache.getProposerAttesterAddressInSlot.mockResolvedValue(getAddress());
48
+ const result = await validator.validate(mockProposal);
49
+ expect(result).toEqual({
50
+ result: 'reject',
51
+ severity: PeerErrorSeverity.HighToleranceError
52
+ });
53
+ // Should not try to resolve proposers if base validation fails
54
+ expect(epochCache.getProposerAttesterAddressInSlot).not.toHaveBeenCalled();
55
+ });
56
+ it('returns ignore if previous slot proposal is within clock tolerance', async ()=>{
57
+ const previousProposer = getSigner();
58
+ const header = makeHeader(1, 99, 99);
59
+ const mockProposal = await makeProposal({
60
+ blockHeader: header,
61
+ lastBlockHeader: header,
62
+ signer: previousProposer
63
+ });
64
+ // Mock getEpochAndSlotNow to return time WITHIN clock tolerance (100ms elapsed)
65
+ epochCache.getEpochAndSlotNow.mockReturnValue({
66
+ epoch: 1,
67
+ slot: currentSlot,
68
+ ts: 1000n,
69
+ nowMs: 1000100n
70
+ });
71
+ mockGetProposer(getAddress(), getAddress(), getAddress(previousProposer));
72
+ const result = await validator.validate(mockProposal);
73
+ expect(result).toEqual({
74
+ result: 'ignore'
75
+ });
76
+ });
77
+ it('returns mid tolerance error if proposer is not current proposer for current slot', async ()=>{
78
+ const currentProposer = getSigner();
79
+ const nextProposer = getSigner();
80
+ const invalidProposer = getSigner();
81
+ const header = makeHeader(1, 100, 100);
82
+ const mockProposal = await makeProposal({
83
+ blockHeader: header,
84
+ lastBlockHeader: header,
85
+ signer: invalidProposer
86
+ });
87
+ mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
88
+ const result = await validator.validate(mockProposal);
89
+ expect(result).toEqual({
90
+ result: 'reject',
91
+ severity: PeerErrorSeverity.MidToleranceError
92
+ });
93
+ });
94
+ it('returns mid tolerance error if proposer is not next proposer for next slot', async ()=>{
95
+ const currentProposer = getSigner();
96
+ const nextProposer = getSigner();
97
+ const invalidProposer = getSigner();
98
+ const header = makeHeader(1, 101, 101);
99
+ const mockProposal = await makeProposal({
100
+ blockHeader: header,
101
+ lastBlockHeader: header,
102
+ signer: invalidProposer
103
+ });
104
+ mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
105
+ const result = await validator.validate(mockProposal);
106
+ expect(result).toEqual({
107
+ result: 'reject',
108
+ severity: PeerErrorSeverity.MidToleranceError
109
+ });
110
+ });
111
+ it('returns mid tolerance error if proposer is current proposer but proposal is for next slot', async ()=>{
112
+ const currentProposer = getSigner();
113
+ const nextProposer = getSigner();
114
+ const header = makeHeader(1, 101, 101);
115
+ const mockProposal = await makeProposal({
116
+ blockHeader: header,
117
+ lastBlockHeader: header,
118
+ signer: currentProposer
119
+ });
120
+ mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
121
+ const result = await validator.validate(mockProposal);
122
+ expect(result).toEqual({
123
+ result: 'reject',
124
+ severity: PeerErrorSeverity.MidToleranceError
125
+ });
126
+ });
127
+ it('returns undefined if proposal is valid for current slot and proposer', async ()=>{
128
+ const currentProposer = getSigner();
129
+ const nextProposer = getSigner();
130
+ const header = makeHeader(1, 100, 100);
131
+ const mockProposal = await makeProposal({
132
+ blockHeader: header,
133
+ lastBlockHeader: header,
134
+ signer: currentProposer
135
+ });
136
+ mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
137
+ const result = await validator.validate(mockProposal);
138
+ expect(result).toEqual({
139
+ result: 'accept'
140
+ });
141
+ });
142
+ it('returns undefined if proposal is valid for next slot and proposer', async ()=>{
143
+ const currentProposer = getSigner();
144
+ const nextProposer = getSigner();
145
+ const header = makeHeader(1, 101, 101);
146
+ const mockProposal = await makeProposal({
147
+ blockHeader: header,
148
+ lastBlockHeader: header,
149
+ signer: nextProposer
150
+ });
151
+ mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
152
+ const result = await validator.validate(mockProposal);
153
+ expect(result).toEqual({
154
+ result: 'accept'
155
+ });
156
+ });
157
+ describe('transaction permission validation', ()=>{
158
+ it('returns mid tolerance error if txs not permitted and proposal contains txHashes', async ()=>{
159
+ const currentProposer = getSigner();
160
+ const validatorWithTxsDisabled = validatorFactory(epochCache, {
161
+ txsPermitted: false
162
+ });
163
+ const header = makeHeader(1, 100, 100);
164
+ const mockProposal = await makeProposal({
165
+ blockHeader: header,
166
+ lastBlockHeader: header,
167
+ signer: currentProposer,
168
+ txHashes: getTxHashes(2)
169
+ });
170
+ mockGetProposer(getAddress(currentProposer), getAddress());
171
+ const result = await validatorWithTxsDisabled.validate(mockProposal);
172
+ expect(result).toEqual({
173
+ result: 'reject',
174
+ severity: PeerErrorSeverity.MidToleranceError
175
+ });
176
+ });
177
+ it('returns undefined if txs not permitted but proposal has no txHashes', async ()=>{
178
+ const currentProposer = getSigner();
179
+ const validatorWithTxsDisabled = validatorFactory(epochCache, {
180
+ txsPermitted: false
181
+ });
182
+ const header = makeHeader(1, 100, 100);
183
+ const mockProposal = await makeProposal({
184
+ blockHeader: header,
185
+ lastBlockHeader: header,
186
+ signer: currentProposer,
187
+ txHashes: getTxHashes(0)
188
+ });
189
+ mockGetProposer(getAddress(currentProposer), getAddress());
190
+ const result = await validatorWithTxsDisabled.validate(mockProposal);
191
+ expect(result).toEqual({
192
+ result: 'accept'
193
+ });
194
+ });
195
+ it('returns undefined if txs permitted and proposal contains txHashes', async ()=>{
196
+ const currentProposer = getSigner();
197
+ const header = makeHeader(1, 100, 100);
198
+ const mockProposal = await makeProposal({
199
+ blockHeader: header,
200
+ lastBlockHeader: header,
201
+ signer: currentProposer,
202
+ txHashes: getTxHashes(2)
203
+ });
204
+ mockGetProposer(getAddress(currentProposer), getAddress());
205
+ const result = await validator.validate(mockProposal);
206
+ expect(result).toEqual({
207
+ result: 'accept'
208
+ });
209
+ });
210
+ });
211
+ });
212
+ }
@@ -1,7 +1,7 @@
1
- import type { ProcessedTx, Tx, TxValidationResult, TxValidator } from '@aztec/stdlib/tx';
2
- export declare class AggregateTxValidator<T extends Tx | ProcessedTx> implements TxValidator<T> {
3
- #private;
1
+ import type { TxValidationResult, TxValidator } from '@aztec/stdlib/tx';
2
+ export declare class AggregateTxValidator<T> implements TxValidator<T> {
3
+ readonly validators: TxValidator<T>[];
4
4
  constructor(...validators: TxValidator<T>[]);
5
5
  validateTx(tx: T): Promise<TxValidationResult>;
6
6
  }
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlX3R4X3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9hZ2dyZWdhdGVfdHhfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFekYscUJBQWEsb0JBQW9CLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxXQUFXLENBQUUsWUFBVyxXQUFXLENBQUMsQ0FBQyxDQUFDOztJQUVyRixZQUFZLEdBQUcsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQU0xQztJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQWtCbkQ7Q0FDRiJ9
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdncmVnYXRlX3R4X3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9hZ2dyZWdhdGVfdHhfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXhFLHFCQUFhLG9CQUFvQixDQUFDLENBQUMsQ0FBRSxZQUFXLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDNUQsUUFBUSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN0QyxZQUFZLEdBQUcsVUFBVSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQU0xQztJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQWtCbkQ7Q0FDRiJ9
@@ -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,WAAW,EAAE,EAAE,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEzF,qBAAa,oBAAoB,CAAC,CAAC,SAAS,EAAE,GAAG,WAAW,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAErF,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,CAkBnD;CACF"}
@@ -1,17 +1,17 @@
1
1
  export class AggregateTxValidator {
2
- #validators;
2
+ validators;
3
3
  constructor(...validators){
4
4
  if (validators.length === 0) {
5
5
  throw new Error('At least one validator must be provided');
6
6
  }
7
- this.#validators = validators;
7
+ this.validators = validators;
8
8
  }
9
9
  async validateTx(tx) {
10
10
  const aggregate = {
11
11
  result: 'valid',
12
12
  reason: []
13
13
  };
14
- for (const validator of this.#validators){
14
+ for (const validator of this.validators){
15
15
  const result = await validator.validateTx(tx);
16
16
  if (result.result === 'invalid') {
17
17
  aggregate.result = 'invalid';
@@ -1,5 +1,5 @@
1
- import type { Fr } from '@aztec/foundation/curves/bn254';
2
1
  import type { ArchiveSource } from '@aztec/p2p';
2
+ import type { BlockHash } from '@aztec/stdlib/block';
3
3
  import type { MerkleTreeReadOperations } from '@aztec/stdlib/interfaces/server';
4
4
  /**
5
5
  * Implements an archive source by checking a DB and an in-memory collection.
@@ -9,6 +9,6 @@ export declare class ArchiveCache implements ArchiveSource {
9
9
  private db;
10
10
  archives: Map<string, bigint>;
11
11
  constructor(db: MerkleTreeReadOperations);
12
- getArchiveIndices(archives: Fr[]): Promise<(bigint | undefined)[]>;
12
+ getArchiveIndices(archives: BlockHash[]): Promise<(bigint | undefined)[]>;
13
13
  }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZV9jYWNoZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9hcmNoaXZlX2NhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBR2hGOzs7R0FHRztBQUNILHFCQUFhLFlBQWEsWUFBVyxhQUFhO0lBR3BDLE9BQU8sQ0FBQyxFQUFFO0lBRnRCLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRTlCLFlBQW9CLEVBQUUsRUFBRSx3QkFBd0IsRUFFL0M7SUFFWSxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FVOUU7Q0FDRiJ9
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJjaGl2ZV9jYWNoZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9hcmNoaXZlX2NhY2hlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoRCxPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBR2hGOzs7R0FHRztBQUNILHFCQUFhLFlBQWEsWUFBVyxhQUFhO0lBR3BDLE9BQU8sQ0FBQyxFQUFFO0lBRnRCLFFBQVEsRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRTlCLFlBQW9CLEVBQUUsRUFBRSx3QkFBd0IsRUFFL0M7SUFFWSxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FVckY7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"archive_cache.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/archive_cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAGhF;;;GAGG;AACH,qBAAa,YAAa,YAAW,aAAa;IAGpC,OAAO,CAAC,EAAE;IAFtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9B,YAAoB,EAAE,EAAE,wBAAwB,EAE/C;IAEY,iBAAiB,CAAC,QAAQ,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAU9E;CACF"}
1
+ {"version":3,"file":"archive_cache.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/archive_cache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAGhF;;;GAGG;AACH,qBAAa,YAAa,YAAW,aAAa;IAGpC,OAAO,CAAC,EAAE;IAFtB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9B,YAAoB,EAAE,EAAE,wBAAwB,EAE/C;IAEY,iBAAiB,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAUrF;CACF"}
@@ -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()));
13
+ const toCheckDb = archives.filter((n)=>!this.archives.has(n.toString())).map((n)=>n.toFr());
14
14
  const dbHits = await this.db.findLeafIndices(MerkleTreeId.ARCHIVE, toCheckDb);
15
15
  dbHits.forEach((x, index)=>{
16
16
  if (x !== undefined) {
@@ -1,11 +1,25 @@
1
- import type { Fr } from '@aztec/foundation/curves/bn254';
2
- import { type AnyTx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
1
+ import { type LoggerBindings } from '@aztec/foundation/log';
2
+ import type { BlockHash } from '@aztec/stdlib/block';
3
+ import { type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
3
4
  export interface ArchiveSource {
4
- getArchiveIndices: (archives: Fr[]) => Promise<(bigint | undefined)[]>;
5
+ getArchiveIndices: (archives: BlockHash[]) => Promise<(bigint | undefined)[]>;
5
6
  }
6
- export declare class BlockHeaderTxValidator<T extends AnyTx> implements TxValidator<T> {
7
+ /** Structural interface for block header validation. */
8
+ export interface HasBlockHeaderData {
9
+ txHash: {
10
+ toString(): string;
11
+ };
12
+ data: {
13
+ constants: {
14
+ anchorBlockHeader: {
15
+ hash(): Promise<BlockHash>;
16
+ };
17
+ };
18
+ };
19
+ }
20
+ export declare class BlockHeaderTxValidator<T extends HasBlockHeaderData> implements TxValidator<T> {
7
21
  #private;
8
- constructor(archiveSource: ArchiveSource);
22
+ constructor(archiveSource: ArchiveSource, bindings?: LoggerBindings);
9
23
  validateTx(tx: T): Promise<TxValidationResult>;
10
24
  }
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfaGVhZGVyX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9ibG9ja19oZWFkZXJfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXpELE9BQU8sRUFBRSxLQUFLLEtBQUssRUFBeUIsS0FBSyxrQkFBa0IsRUFBRSxLQUFLLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWhILE1BQU0sV0FBVyxhQUFhO0lBQzVCLGlCQUFpQixFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7Q0FDeEU7QUFFRCxxQkFBYSxzQkFBc0IsQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFFLFlBQVcsV0FBVyxDQUFDLENBQUMsQ0FBQzs7SUFJNUUsWUFBWSxhQUFhLEVBQUUsYUFBYSxFQUV2QztJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQU9uRDtDQUNGIn0=
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfaGVhZGVyX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9ibG9ja19oZWFkZXJfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RixPQUFPLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQXlCLEtBQUssa0JBQWtCLEVBQUUsS0FBSyxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVwRyxNQUFNLFdBQVcsYUFBYTtJQUM1QixpQkFBaUIsRUFBRSxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0NBQy9FO0FBRUQsd0RBQXdEO0FBQ3hELE1BQU0sV0FBVyxrQkFBa0I7SUFDakMsTUFBTSxFQUFFO1FBQUUsUUFBUSxJQUFJLE1BQU0sQ0FBQTtLQUFFLENBQUM7SUFDL0IsSUFBSSxFQUFFO1FBQ0osU0FBUyxFQUFFO1lBQ1QsaUJBQWlCLEVBQUU7Z0JBQ2pCLElBQUksSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDNUIsQ0FBQztTQUNILENBQUM7S0FDSCxDQUFDO0NBQ0g7QUFFRCxxQkFBYSxzQkFBc0IsQ0FBQyxDQUFDLFNBQVMsa0JBQWtCLENBQUUsWUFBVyxXQUFXLENBQUMsQ0FBQyxDQUFDOztJQUl6RixZQUFZLGFBQWEsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLEVBQUUsY0FBYyxFQUdsRTtJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQU9uRDtDQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"block_header_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/block_header_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEzD,OAAO,EAAE,KAAK,KAAK,EAAyB,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEhH,MAAM,WAAW,aAAa;IAC5B,iBAAiB,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;CACxE;AAED,qBAAa,sBAAsB,CAAC,CAAC,SAAS,KAAK,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAI5E,YAAY,aAAa,EAAE,aAAa,EAEvC;IAEK,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAOnD;CACF"}
1
+ {"version":3,"file":"block_header_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/block_header_validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAyB,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpG,MAAM,WAAW,aAAa;IAC5B,iBAAiB,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,OAAO,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;CAC/E;AAED,wDAAwD;AACxD,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAC;IAC/B,IAAI,EAAE;QACJ,SAAS,EAAE;YACT,iBAAiB,EAAE;gBACjB,IAAI,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;aAC5B,CAAC;SACH,CAAC;KACH,CAAC;CACH;AAED,qBAAa,sBAAsB,CAAC,CAAC,SAAS,kBAAkB,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAIzF,YAAY,aAAa,EAAE,aAAa,EAAE,QAAQ,CAAC,EAAE,cAAc,EAGlE;IAEK,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAOnD;CACF"}
@@ -1,17 +1,18 @@
1
1
  import { createLogger } from '@aztec/foundation/log';
2
2
  import { TX_ERROR_BLOCK_HEADER } from '@aztec/stdlib/tx';
3
3
  export class BlockHeaderTxValidator {
4
- #log = createLogger('p2p:tx_validator:tx_block_header');
4
+ #log;
5
5
  #archiveSource;
6
- constructor(archiveSource){
6
+ constructor(archiveSource, bindings){
7
7
  this.#archiveSource = archiveSource;
8
+ this.#log = createLogger('p2p:tx_validator:tx_block_header', bindings);
8
9
  }
9
10
  async validateTx(tx) {
10
11
  const [index] = await this.#archiveSource.getArchiveIndices([
11
12
  await tx.data.constants.anchorBlockHeader.hash()
12
13
  ]);
13
14
  if (index === undefined) {
14
- this.#log.verbose(`Rejecting tx ${'txHash' in tx ? tx.txHash : tx.hash} for referencing an unknown block header`);
15
+ this.#log.verbose(`Rejecting tx ${tx.txHash} for referencing an unknown block header`);
15
16
  return {
16
17
  result: 'invalid',
17
18
  reason: [
@@ -1,6 +1,8 @@
1
+ import { type LoggerBindings } from '@aztec/foundation/log';
1
2
  import { Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
2
3
  export declare class DataTxValidator implements TxValidator<Tx> {
3
4
  #private;
5
+ constructor(bindings?: LoggerBindings);
4
6
  validateTx(tx: Tx): Promise<TxValidationResult>;
5
7
  }
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvZGF0YV92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQVNMLEVBQUUsRUFDRixLQUFLLGtCQUFrQixFQUN2QixLQUFLLFdBQVcsRUFDakIsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixxQkFBYSxlQUFnQixZQUFXLFdBQVcsQ0FBQyxFQUFFLENBQUM7O0lBRy9DLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQU1wRDtDQTJGRiJ9
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvZGF0YV92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFlLEtBQUssY0FBYyxFQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBRXZGLE9BQU8sRUFTTCxFQUFFLEVBQ0YsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxXQUFXLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIscUJBQWEsZUFBZ0IsWUFBVyxXQUFXLENBQUMsRUFBRSxDQUFDOztJQUdyRCxZQUFZLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFFcEM7SUFFSyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FNcEQ7Q0FtR0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"data_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/data_validator.ts"],"names":[],"mappings":"AAGA,OAAO,EASL,EAAE,EACF,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,qBAAa,eAAgB,YAAW,WAAW,CAAC,EAAE,CAAC;;IAG/C,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAMpD;CA2FF"}
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"}
@@ -3,7 +3,10 @@ import { createLogger } from '@aztec/foundation/log';
3
3
  import { computeCalldataHash } from '@aztec/stdlib/hash';
4
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';
5
5
  export class DataTxValidator {
6
- #log = createLogger('p2p:tx_validator:tx_data');
6
+ #log;
7
+ constructor(bindings){
8
+ this.#log = createLogger('p2p:tx_validator:tx_data', bindings);
9
+ }
7
10
  async validateTx(tx) {
8
11
  const reason = await this.#hasCorrectHash(tx) ?? await this.#hasCorrectCalldata(tx) ?? await this.#hasCorrectContractClassLogs(tx);
9
12
  return reason ? {
@@ -1,10 +1,21 @@
1
- import { type AnyTx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
+ import { type LoggerBindings } from '@aztec/foundation/log';
3
+ import { type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
2
4
  export interface NullifierSource {
3
5
  nullifiersExist: (nullifiers: Buffer[]) => Promise<boolean[]>;
4
6
  }
5
- export declare class DoubleSpendTxValidator<T extends AnyTx> implements TxValidator<T> {
7
+ /** Structural interface for double-spend validation. */
8
+ export interface HasNullifierData {
9
+ txHash: {
10
+ toString(): string;
11
+ };
12
+ data: {
13
+ getNonEmptyNullifiers(): Fr[];
14
+ };
15
+ }
16
+ export declare class DoubleSpendTxValidator<T extends HasNullifierData> implements TxValidator<T> {
6
17
  #private;
7
- constructor(nullifierSource: NullifierSource);
18
+ constructor(nullifierSource: NullifierSource, bindings?: LoggerBindings);
8
19
  validateTx(tx: T): Promise<TxValidationResult>;
9
20
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG91YmxlX3NwZW5kX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9kb3VibGVfc3BlbmRfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxLQUFLLEtBQUssRUFJVixLQUFLLGtCQUFrQixFQUN2QixLQUFLLFdBQVcsRUFDakIsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixNQUFNLFdBQVcsZUFBZTtJQUM5QixlQUFlLEVBQUUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Q0FDL0Q7QUFFRCxxQkFBYSxzQkFBc0IsQ0FBQyxDQUFDLFNBQVMsS0FBSyxDQUFFLFlBQVcsV0FBVyxDQUFDLENBQUMsQ0FBQzs7SUFJNUUsWUFBWSxlQUFlLEVBQUUsZUFBZSxFQUUzQztJQUVLLFVBQVUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQWdCbkQ7Q0FDRiJ9
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG91YmxlX3NwZW5kX3ZhbGlkYXRvci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9kb3VibGVfc3BlbmRfdmFsaWRhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pELE9BQU8sRUFBZSxLQUFLLGNBQWMsRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQUN2RixPQUFPLEVBR0wsS0FBSyxrQkFBa0IsRUFDdkIsS0FBSyxXQUFXLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFFMUIsTUFBTSxXQUFXLGVBQWU7SUFDOUIsZUFBZSxFQUFFLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0NBQy9EO0FBRUQsd0RBQXdEO0FBQ3hELE1BQU0sV0FBVyxnQkFBZ0I7SUFDL0IsTUFBTSxFQUFFO1FBQUUsUUFBUSxJQUFJLE1BQU0sQ0FBQTtLQUFFLENBQUM7SUFDL0IsSUFBSSxFQUFFO1FBQUUscUJBQXFCLElBQUksRUFBRSxFQUFFLENBQUE7S0FBRSxDQUFDO0NBQ3pDO0FBRUQscUJBQWEsc0JBQXNCLENBQUMsQ0FBQyxTQUFTLGdCQUFnQixDQUFFLFlBQVcsV0FBVyxDQUFDLENBQUMsQ0FBQzs7SUFJdkYsWUFBWSxlQUFlLEVBQUUsZUFBZSxFQUFFLFFBQVEsQ0FBQyxFQUFFLGNBQWMsRUFHdEU7SUFFSyxVQUFVLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FnQm5EO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"double_spend_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/double_spend_validator.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,KAAK,EAIV,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;CAC/D;AAED,qBAAa,sBAAsB,CAAC,CAAC,SAAS,KAAK,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAI5E,YAAY,eAAe,EAAE,eAAe,EAE3C;IAEK,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAgBnD;CACF"}
1
+ {"version":3,"file":"double_spend_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/double_spend_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AACzD,OAAO,EAAe,KAAK,cAAc,EAAgB,MAAM,uBAAuB,CAAC;AACvF,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,WAAW,EACjB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;CAC/D;AAED,wDAAwD;AACxD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAC;IAC/B,IAAI,EAAE;QAAE,qBAAqB,IAAI,EAAE,EAAE,CAAA;KAAE,CAAC;CACzC;AAED,qBAAa,sBAAsB,CAAC,CAAC,SAAS,gBAAgB,CAAE,YAAW,WAAW,CAAC,CAAC,CAAC;;IAIvF,YAAY,eAAe,EAAE,eAAe,EAAE,QAAQ,CAAC,EAAE,cAAc,EAGtE;IAEK,UAAU,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAgBnD;CACF"}
@@ -1,17 +1,18 @@
1
1
  import { createLogger } from '@aztec/foundation/log';
2
- import { TX_ERROR_DUPLICATE_NULLIFIER_IN_TX, TX_ERROR_EXISTING_NULLIFIER, Tx } from '@aztec/stdlib/tx';
2
+ import { TX_ERROR_DUPLICATE_NULLIFIER_IN_TX, TX_ERROR_EXISTING_NULLIFIER } from '@aztec/stdlib/tx';
3
3
  export class DoubleSpendTxValidator {
4
- #log = createLogger('p2p:tx_validator:tx_double_spend');
4
+ #log;
5
5
  #nullifierSource;
6
- constructor(nullifierSource){
6
+ constructor(nullifierSource, bindings){
7
7
  this.#nullifierSource = nullifierSource;
8
+ this.#log = createLogger('p2p:tx_validator:tx_double_spend', bindings);
8
9
  }
9
10
  async validateTx(tx) {
10
- const nullifiers = tx instanceof Tx ? tx.data.getNonEmptyNullifiers() : tx.txEffect.nullifiers;
11
+ const nullifiers = tx.data.getNonEmptyNullifiers();
11
12
  // Ditch this tx if it has repeated nullifiers
12
13
  const uniqueNullifiers = new Set(nullifiers.map((n)=>n.toBigInt()));
13
14
  if (uniqueNullifiers.size !== nullifiers.length) {
14
- this.#log.verbose(`Rejecting tx ${'txHash' in tx ? tx.txHash : tx.hash} for emitting duplicate nullifiers`);
15
+ this.#log.verbose(`Rejecting tx ${tx.txHash} for emitting duplicate nullifiers`);
15
16
  return {
16
17
  result: 'invalid',
17
18
  reason: [
@@ -20,7 +21,7 @@ export class DoubleSpendTxValidator {
20
21
  };
21
22
  }
22
23
  if ((await this.#nullifierSource.nullifiersExist(nullifiers.map((n)=>n.toBuffer()))).some(Boolean)) {
23
- this.#log.verbose(`Rejecting tx ${'txHash' in tx ? tx.txHash : tx.hash} for repeating a nullifier`);
24
+ this.#log.verbose(`Rejecting tx ${tx.txHash} for repeating a nullifier`);
24
25
  return {
25
26
  result: 'invalid',
26
27
  reason: [
@@ -1,16 +1,129 @@
1
+ /**
2
+ * Transaction validator factories for each tx entry point.
3
+ *
4
+ * Unsolicited transactions (gossip and RPC) are fully validated before acceptance.
5
+ * Transactions received via req/resp or block proposals are only checked for
6
+ * well-formedness because we must include them for block re-execution — they may
7
+ * ultimately be invalid, which is caught during block building and reported as
8
+ * part of block validation/attestation. See the README in this directory for the
9
+ * full validation strategy.
10
+ *
11
+ * 1. **Gossip** — full validation in two stages with a pool pre-check in between.
12
+ * Stage 1 (fast): metadata, data, timestamps, double-spend, gas, phases, block header.
13
+ * Pool pre-check: `canAddPendingTx` — skips proof verification if pool would reject.
14
+ * Stage 2 (slow): proof verification.
15
+ * Orchestrated by `handleGossipedTx` in `libp2p_service.ts`.
16
+ *
17
+ * 2. **JSON-RPC** — full validation including all state-dependent checks.
18
+ * Proof verification and fee enforcement are configurable for testing purposes.
19
+ *
20
+ * 3. **Req/resp & block proposals** — well-formedness checks only (metadata, size,
21
+ * data, proof). Stored for re-execution; validity against state is not checked here.
22
+ *
23
+ * 4. **Block building** — re-validates against current state immediately before
24
+ * sequencing. Catches invalid txs that entered via req/resp or block proposals.
25
+ * Proof and data checks are skipped since they were verified on entry.
26
+ *
27
+ * 5. **Pending pool migration** — when unmined txs (e.g. from req/resp or block
28
+ * proposals) are migrated to the pending pool, the pool runs the state-dependent
29
+ * checks they missed: double-spend, block header, gas limits, and timestamps.
30
+ * This runs on every tx potentially entering the pending pool.
31
+ */
1
32
  import { BlockNumber } from '@aztec/foundation/branded-types';
2
33
  import { Fr } from '@aztec/foundation/curves/bn254';
34
+ import type { LoggerBindings } from '@aztec/foundation/log';
3
35
  import type { ContractDataSource } from '@aztec/stdlib/contract';
4
36
  import type { GasFees } from '@aztec/stdlib/gas';
5
- import type { AllowedElement, ClientProtocolCircuitVerifier, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
37
+ import type { AllowedElement, ClientProtocolCircuitVerifier, MerkleTreeReadOperations, PublicProcessorValidator, WorldStateSynchronizer } from '@aztec/stdlib/interfaces/server';
6
38
  import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
7
- import type { Tx, TxValidationResult } from '@aztec/stdlib/tx';
39
+ import type { GlobalVariables, Tx, TxValidationResult, TxValidator } from '@aztec/stdlib/tx';
8
40
  import type { UInt64 } from '@aztec/stdlib/types';
9
- export interface MessageValidator {
41
+ import type { TxMetaData } from '../../mem_pools/tx_pool_v2/tx_metadata.js';
42
+ /**
43
+ * A validator paired with a peer penalty severity.
44
+ * Used for gossip validation where each validator's failure triggers a peer penalization
45
+ * with the associated severity level.
46
+ */
47
+ export interface TransactionValidator {
10
48
  validator: {
11
49
  validateTx(tx: Tx): Promise<TxValidationResult>;
12
50
  };
13
51
  severity: PeerErrorSeverity;
14
52
  }
15
- export declare function createTxMessageValidators(timestamp: UInt64, blockNumber: BlockNumber, worldStateSynchronizer: WorldStateSynchronizer, gasFees: GasFees, l1ChainId: number, rollupVersion: number, protocolContractsHash: Fr, contractDataSource: ContractDataSource, proofVerifier: ClientProtocolCircuitVerifier, txsPermitted: boolean, allowedInSetup?: AllowedElement[]): Record<string, MessageValidator>[];
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHcEQsT0FBTyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNqRSxPQUFPLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEtBQUssRUFDVixjQUFjLEVBQ2QsNkJBQTZCLEVBQzdCLHNCQUFzQixFQUN2QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRELE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBYWxELE1BQU0sV0FBVyxnQkFBZ0I7SUFDL0IsU0FBUyxFQUFFO1FBQ1QsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7S0FDakQsQ0FBQztJQUNGLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQztDQUM3QjtBQUVELHdCQUFnQix5QkFBeUIsQ0FDdkMsU0FBUyxFQUFFLE1BQU0sRUFDakIsV0FBVyxFQUFFLFdBQVcsRUFDeEIsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQzlDLE9BQU8sRUFBRSxPQUFPLEVBQ2hCLFNBQVMsRUFBRSxNQUFNLEVBQ2pCLGFBQWEsRUFBRSxNQUFNLEVBQ3JCLHFCQUFxQixFQUFFLEVBQUUsRUFDekIsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQ3RDLGFBQWEsRUFBRSw2QkFBNkIsRUFDNUMsWUFBWSxFQUFFLE9BQU8sRUFDckIsY0FBYyxHQUFFLGNBQWMsRUFBTyxHQUNwQyxNQUFNLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsQ0ErRHBDIn0=
53
+ /**
54
+ * First stage of gossip validation — fast checks run before the pool pre-check.
55
+ *
56
+ * If any validator fails, the peer is penalized and the tx is rejected immediately,
57
+ * without consulting the pool or running proof verification.
58
+ *
59
+ * The `doubleSpendValidator` failure is special-cased by the caller (`handleGossipedTx`)
60
+ * to determine severity based on how recently the nullifier appeared.
61
+ */
62
+ export declare function createFirstStageTxValidationsForGossipedTransactions(timestamp: UInt64, blockNumber: BlockNumber, worldStateSynchronizer: WorldStateSynchronizer, gasFees: GasFees, l1ChainId: number, rollupVersion: number, protocolContractsHash: Fr, contractDataSource: ContractDataSource, txsPermitted: boolean, allowedInSetup?: AllowedElement[], bindings?: LoggerBindings): Record<string, TransactionValidator>;
63
+ /**
64
+ * Second stage of gossip validation — expensive proof verification.
65
+ *
66
+ * Only runs after the first stage passes AND `canAddPendingTx` confirms the pool would
67
+ * accept the tx. This avoids wasting CPU on proof verification for txs the pool would reject
68
+ * (e.g., duplicates, insufficient balance, pool full).
69
+ */
70
+ export declare function createSecondStageTxValidationsForGossipedTransactions(proofVerifier: ClientProtocolCircuitVerifier, bindings?: LoggerBindings): Record<string, TransactionValidator>;
71
+ /**
72
+ * Validators for txs received via req/resp or filestores.
73
+ * Checks well-formedness only — we must accept these for re-execution even if they
74
+ * are invalid against current state. State-dependent checks happen when the tx
75
+ * enters the pending pool or during block building.
76
+ */
77
+ export declare function createTxValidatorForReqResponseReceivedTxs(verifier: ClientProtocolCircuitVerifier, { l1ChainId, rollupVersion }: {
78
+ l1ChainId: number;
79
+ rollupVersion: number;
80
+ }, bindings?: LoggerBindings): TxValidator;
81
+ /**
82
+ * Validators for txs received in block proposals.
83
+ * Same as req/resp — well-formedness only. We must store these for block
84
+ * re-execution; their validity against state is checked during block building.
85
+ */
86
+ export declare function createTxValidatorForBlockProposalReceivedTxs(verifier: ClientProtocolCircuitVerifier, { l1ChainId, rollupVersion }: {
87
+ l1ChainId: number;
88
+ rollupVersion: number;
89
+ }, bindings?: LoggerBindings): TxValidator;
90
+ /**
91
+ * Validators for unsolicited txs received over JSON-RPC (from a local wallet/PXE).
92
+ * Full validation — all state-dependent checks are run. Proof verification is optional
93
+ * (can be skipped for testing purposes). Fee enforcement is also optional (skipped for testing/dev).
94
+ * Called from `AztecNodeService.isValidTx()`.
95
+ */
96
+ export declare function createTxValidatorForAcceptingTxsOverRPC(db: MerkleTreeReadOperations, contractDataSource: ContractDataSource, verifier: ClientProtocolCircuitVerifier | undefined, { l1ChainId, rollupVersion, setupAllowList, gasFees, skipFeeEnforcement, timestamp, blockNumber, txsPermitted }: {
97
+ l1ChainId: number;
98
+ rollupVersion: number;
99
+ setupAllowList: AllowedElement[];
100
+ gasFees: GasFees;
101
+ skipFeeEnforcement?: boolean;
102
+ timestamp: UInt64;
103
+ blockNumber: BlockNumber;
104
+ txsPermitted: boolean;
105
+ }, bindings?: LoggerBindings): TxValidator<Tx>;
106
+ /**
107
+ * Validators for txs about to be included in a block by the sequencer.
108
+ * Re-validates against current state. This is where invalid txs that entered via
109
+ * req/resp or block proposals are caught — their invalidity is reported as part
110
+ * of block validation/attestation. Proof and data checks are omitted since they
111
+ * were already verified on entry.
112
+ * Called from `CheckpointBuilder.makeBlockBuilderDeps()`.
113
+ */
114
+ export declare function createTxValidatorForBlockBuilding(db: MerkleTreeReadOperations, contractDataSource: ContractDataSource, globalVariables: GlobalVariables, setupAllowList: AllowedElement[], bindings?: LoggerBindings): PublicProcessorValidator;
115
+ /**
116
+ * Validators for txs migrating to the pending pool.
117
+ *
118
+ * Txs that arrived via req/resp or block proposals only had well-formedness checks
119
+ * on receipt. When they fail to be mined and are migrated to the pending pool, we
120
+ * run the state-dependent checks they missed: double-spend, block header, gas limits,
121
+ * and timestamp expiry. This is run on EVERY tx potentially entering the pending pool
122
+ * — called inside `TxPoolV2Impl` during `addPendingTxs`, `prepareForSlot` (unprotect),
123
+ * `handlePrunedBlocks` (unmine), and startup hydration.
124
+ *
125
+ * Operates on `TxMetaData` rather than full `Tx` since metadata is pre-built by the pool.
126
+ * Injected into `TxPoolV2` as the `createTxValidator` factory in `TxPoolV2Dependencies`.
127
+ */
128
+ export declare function createTxValidatorForTransactionsEnteringPendingTxPool(worldStateSynchronizer: WorldStateSynchronizer, timestamp: bigint, blockNumber: BlockNumber, bindings?: LoggerBindings): Promise<TxValidator<TxMetaData>>;
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21zZ192YWxpZGF0b3JzL3R4X3ZhbGlkYXRvci9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFDSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3BELE9BQU8sS0FBSyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSTVELE9BQU8sS0FBSyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxLQUFLLEVBQ1YsY0FBYyxFQUNkLDZCQUE2QixFQUM3Qix3QkFBd0IsRUFDeEIsd0JBQXdCLEVBQ3hCLHNCQUFzQixFQUN2QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXRELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDN0YsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEQsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFlNUU7Ozs7R0FJRztBQUNILE1BQU0sV0FBVyxvQkFBb0I7SUFDbkMsU0FBUyxFQUFFO1FBQ1QsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7S0FDakQsQ0FBQztJQUNGLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQztDQUM3QjtBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsd0JBQWdCLG9EQUFvRCxDQUNsRSxTQUFTLEVBQUUsTUFBTSxFQUNqQixXQUFXLEVBQUUsV0FBVyxFQUN4QixzQkFBc0IsRUFBRSxzQkFBc0IsRUFDOUMsT0FBTyxFQUFFLE9BQU8sRUFDaEIsU0FBUyxFQUFFLE1BQU0sRUFDakIsYUFBYSxFQUFFLE1BQU0sRUFDckIscUJBQXFCLEVBQUUsRUFBRSxFQUN6QixrQkFBa0IsRUFBRSxrQkFBa0IsRUFDdEMsWUFBWSxFQUFFLE9BQU8sRUFDckIsY0FBYyxHQUFFLGNBQWMsRUFBTyxFQUNyQyxRQUFRLENBQUMsRUFBRSxjQUFjLEdBQ3hCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsb0JBQW9CLENBQUMsQ0FxRXRDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsd0JBQWdCLHFEQUFxRCxDQUNuRSxhQUFhLEVBQUUsNkJBQTZCLEVBQzVDLFFBQVEsQ0FBQyxFQUFFLGNBQWMsR0FDeEIsTUFBTSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxDQU90QztBQW1DRDs7Ozs7R0FLRztBQUNILHdCQUFnQiwwQ0FBMEMsQ0FDeEQsUUFBUSxFQUFFLDZCQUE2QixFQUN2QyxFQUNFLFNBQVMsRUFDVCxhQUFhLEVBQ2QsRUFBRTtJQUNELFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsYUFBYSxFQUFFLE1BQU0sQ0FBQztDQUN2QixFQUNELFFBQVEsQ0FBQyxFQUFFLGNBQWMsR0FDeEIsV0FBVyxDQUViO0FBRUQ7Ozs7R0FJRztBQUNILHdCQUFnQiw0Q0FBNEMsQ0FDMUQsUUFBUSxFQUFFLDZCQUE2QixFQUN2QyxFQUNFLFNBQVMsRUFDVCxhQUFhLEVBQ2QsRUFBRTtJQUNELFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsYUFBYSxFQUFFLE1BQU0sQ0FBQztDQUN2QixFQUNELFFBQVEsQ0FBQyxFQUFFLGNBQWMsR0FDeEIsV0FBVyxDQUViO0FBRUQ7Ozs7O0dBS0c7QUFDSCx3QkFBZ0IsdUNBQXVDLENBQ3JELEVBQUUsRUFBRSx3QkFBd0IsRUFDNUIsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQ3RDLFFBQVEsRUFBRSw2QkFBNkIsR0FBRyxTQUFTLEVBQ25ELEVBQ0UsU0FBUyxFQUNULGFBQWEsRUFDYixjQUFjLEVBQ2QsT0FBTyxFQUNQLGtCQUFrQixFQUNsQixTQUFTLEVBQ1QsV0FBVyxFQUNYLFlBQVksRUFDYixFQUFFO0lBQ0QsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUNsQixhQUFhLEVBQUUsTUFBTSxDQUFDO0lBQ3RCLGNBQWMsRUFBRSxjQUFjLEVBQUUsQ0FBQztJQUNqQyxPQUFPLEVBQUUsT0FBTyxDQUFDO0lBQ2pCLGtCQUFrQixDQUFDLEVBQUUsT0FBTyxDQUFDO0lBQzdCLFNBQVMsRUFBRSxNQUFNLENBQUM7SUFDbEIsV0FBVyxFQUFFLFdBQVcsQ0FBQztJQUN6QixZQUFZLEVBQUUsT0FBTyxDQUFDO0NBQ3ZCLEVBQ0QsUUFBUSxDQUFDLEVBQUUsY0FBYyxHQUN4QixXQUFXLENBQUMsRUFBRSxDQUFDLENBcUNqQjtBQUVEOzs7Ozs7O0dBT0c7QUFDSCx3QkFBZ0IsaUNBQWlDLENBQy9DLEVBQUUsRUFBRSx3QkFBd0IsRUFDNUIsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQ3RDLGVBQWUsRUFBRSxlQUFlLEVBQ2hDLGNBQWMsRUFBRSxjQUFjLEVBQUUsRUFDaEMsUUFBUSxDQUFDLEVBQUUsY0FBYyxHQUN4Qix3QkFBd0IsQ0FpQjFCO0FBMkJEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILHdCQUFzQixxREFBcUQsQ0FDekUsc0JBQXNCLEVBQUUsc0JBQXNCLEVBQzlDLFNBQVMsRUFBRSxNQUFNLEVBQ2pCLFdBQVcsRUFBRSxXQUFXLEVBQ3hCLFFBQVEsQ0FBQyxFQUFFLGNBQWMsR0FDeEIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQW9CbEMifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/tx_validator/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAGpD,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,sBAAsB,EACvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,KAAK,EAAE,EAAE,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAalD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE;QACT,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;KACjD,CAAC;IACF,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,wBAAgB,yBAAyB,CACvC,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,aAAa,EAAE,6BAA6B,EAC5C,YAAY,EAAE,OAAO,EACrB,cAAc,GAAE,cAAc,EAAO,GACpC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,CA+DpC"}
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,GACxB,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAqEtC;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,EACb,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;CACvB,EACD,QAAQ,CAAC,EAAE,cAAc,GACxB,WAAW,CAAC,EAAE,CAAC,CAqCjB;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,QAAQ,CAAC,EAAE,cAAc,GACxB,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAoBlC"}