@aztec/p2p 0.0.1-commit.96bb3f7 → 0.0.1-commit.993d52e

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 (509) 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 +46 -33
  8. package/dest/client/interface.d.ts.map +1 -1
  9. package/dest/client/p2p_client.d.ts +41 -51
  10. package/dest/client/p2p_client.d.ts.map +1 -1
  11. package/dest/client/p2p_client.js +157 -201
  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 +38 -3
  19. package/dest/config.d.ts.map +1 -1
  20. package/dest/config.js +28 -4
  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 +104 -88
  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 +373 -96
  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 +4 -2
  37. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  38. package/dest/mem_pools/attestation_pool/mocks.js +8 -5
  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 +2 -2
  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 +180 -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 +75 -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 +128 -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 +210 -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 +899 -0
  133. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +3 -3
  134. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  135. package/dest/msg_validators/attestation_validator/attestation_validator.js +41 -10
  136. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +5 -5
  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 +18 -6
  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/proposal_validator/block_proposal_validator.d.ts +2 -1
  143. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  144. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +2 -1
  145. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  146. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +5 -3
  147. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  148. package/dest/msg_validators/proposal_validator/proposal_validator.js +65 -31
  149. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +4 -3
  150. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -1
  151. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +257 -62
  152. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +4 -4
  153. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  154. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +3 -3
  155. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  156. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  157. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  158. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
  159. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  160. package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
  161. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  162. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  163. package/dest/msg_validators/tx_validator/data_validator.js +4 -1
  164. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -4
  165. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  166. package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
  167. package/dest/msg_validators/tx_validator/factory.d.ts +118 -5
  168. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  169. package/dest/msg_validators/tx_validator/factory.js +228 -57
  170. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  171. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  172. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  173. package/dest/msg_validators/tx_validator/gas_validator.d.ts +59 -3
  174. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  175. package/dest/msg_validators/tx_validator/gas_validator.js +84 -52
  176. package/dest/msg_validators/tx_validator/index.d.ts +3 -1
  177. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  178. package/dest/msg_validators/tx_validator/index.js +2 -0
  179. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  180. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  181. package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
  182. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts +14 -0
  183. package/dest/msg_validators/tx_validator/nullifier_cache.d.ts.map +1 -0
  184. package/dest/msg_validators/tx_validator/nullifier_cache.js +24 -0
  185. package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
  186. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  187. package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
  188. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  189. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  190. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  191. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +22 -5
  192. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  193. package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
  194. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  195. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  196. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  197. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  198. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  199. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  200. package/dest/services/data_store.d.ts +1 -1
  201. package/dest/services/data_store.d.ts.map +1 -1
  202. package/dest/services/data_store.js +10 -6
  203. package/dest/services/discv5/discV5_service.js +1 -1
  204. package/dest/services/dummy_service.d.ts +24 -4
  205. package/dest/services/dummy_service.d.ts.map +1 -1
  206. package/dest/services/dummy_service.js +46 -1
  207. package/dest/services/encoding.d.ts +3 -3
  208. package/dest/services/encoding.d.ts.map +1 -1
  209. package/dest/services/encoding.js +13 -13
  210. package/dest/services/gossipsub/index.d.ts +3 -0
  211. package/dest/services/gossipsub/index.d.ts.map +1 -0
  212. package/dest/services/gossipsub/index.js +2 -0
  213. package/dest/services/gossipsub/scoring.d.ts +21 -3
  214. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  215. package/dest/services/gossipsub/scoring.js +24 -7
  216. package/dest/services/gossipsub/topic_score_params.d.ts +173 -0
  217. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  218. package/dest/services/gossipsub/topic_score_params.js +346 -0
  219. package/dest/services/index.d.ts +2 -1
  220. package/dest/services/index.d.ts.map +1 -1
  221. package/dest/services/index.js +1 -0
  222. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  223. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  224. package/dest/services/libp2p/instrumentation.js +19 -8
  225. package/dest/services/libp2p/libp2p_service.d.ts +101 -43
  226. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  227. package/dest/services/libp2p/libp2p_service.js +459 -365
  228. package/dest/services/peer-manager/metrics.d.ts +2 -2
  229. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  230. package/dest/services/peer-manager/metrics.js +20 -5
  231. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  232. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  233. package/dest/services/peer-manager/peer_scoring.js +33 -4
  234. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +48 -0
  235. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  236. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +562 -0
  237. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  238. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  239. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  240. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +46 -0
  241. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  242. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  243. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +34 -0
  244. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  245. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +130 -0
  246. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
  247. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  248. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
  249. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  250. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  251. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  252. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  253. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  254. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  255. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  256. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  257. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  258. package/dest/services/reqresp/constants.d.ts +12 -0
  259. package/dest/services/reqresp/constants.d.ts.map +1 -0
  260. package/dest/services/reqresp/constants.js +7 -0
  261. package/dest/services/reqresp/interface.d.ts +12 -1
  262. package/dest/services/reqresp/interface.d.ts.map +1 -1
  263. package/dest/services/reqresp/interface.js +15 -1
  264. package/dest/services/reqresp/metrics.d.ts +6 -5
  265. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  266. package/dest/services/reqresp/metrics.js +17 -5
  267. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  268. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  269. package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
  270. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  271. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  272. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +27 -9
  273. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +29 -6
  274. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  275. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +59 -13
  276. package/dest/services/reqresp/protocols/status.d.ts +1 -1
  277. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  278. package/dest/services/reqresp/protocols/status.js +2 -1
  279. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  280. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  281. package/dest/services/reqresp/protocols/tx.js +20 -0
  282. package/dest/services/reqresp/reqresp.d.ts +6 -1
  283. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  284. package/dest/services/reqresp/reqresp.js +69 -26
  285. package/dest/services/service.d.ts +42 -3
  286. package/dest/services/service.d.ts.map +1 -1
  287. package/dest/services/tx_collection/config.d.ts +22 -1
  288. package/dest/services/tx_collection/config.d.ts.map +1 -1
  289. package/dest/services/tx_collection/config.js +55 -1
  290. package/dest/services/tx_collection/fast_tx_collection.d.ts +7 -4
  291. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  292. package/dest/services/tx_collection/fast_tx_collection.js +71 -44
  293. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  294. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  295. package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
  296. package/dest/services/tx_collection/file_store_tx_source.d.ts +37 -0
  297. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  298. package/dest/services/tx_collection/file_store_tx_source.js +90 -0
  299. package/dest/services/tx_collection/index.d.ts +3 -1
  300. package/dest/services/tx_collection/index.d.ts.map +1 -1
  301. package/dest/services/tx_collection/index.js +2 -0
  302. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  303. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  304. package/dest/services/tx_collection/instrumentation.js +10 -2
  305. package/dest/services/tx_collection/missing_txs_tracker.d.ts +32 -0
  306. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +1 -0
  307. package/dest/services/tx_collection/missing_txs_tracker.js +27 -0
  308. package/dest/services/tx_collection/proposal_tx_collector.d.ts +49 -0
  309. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  310. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  311. package/dest/services/tx_collection/slow_tx_collection.d.ts +9 -5
  312. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  313. package/dest/services/tx_collection/slow_tx_collection.js +60 -26
  314. package/dest/services/tx_collection/tx_collection.d.ts +29 -16
  315. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  316. package/dest/services/tx_collection/tx_collection.js +79 -7
  317. package/dest/services/tx_collection/tx_collection_sink.d.ts +18 -8
  318. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  319. package/dest/services/tx_collection/tx_collection_sink.js +26 -29
  320. package/dest/services/tx_collection/tx_source.d.ts +8 -3
  321. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  322. package/dest/services/tx_collection/tx_source.js +19 -2
  323. package/dest/services/tx_file_store/config.d.ts +16 -0
  324. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  325. package/dest/services/tx_file_store/config.js +22 -0
  326. package/dest/services/tx_file_store/index.d.ts +4 -0
  327. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  328. package/dest/services/tx_file_store/index.js +3 -0
  329. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  330. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  331. package/dest/services/tx_file_store/instrumentation.js +29 -0
  332. package/dest/services/tx_file_store/tx_file_store.d.ts +48 -0
  333. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  334. package/dest/services/tx_file_store/tx_file_store.js +152 -0
  335. package/dest/services/tx_provider.d.ts +6 -6
  336. package/dest/services/tx_provider.d.ts.map +1 -1
  337. package/dest/services/tx_provider.js +9 -8
  338. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  339. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  340. package/dest/services/tx_provider_instrumentation.js +5 -5
  341. package/dest/test-helpers/index.d.ts +3 -1
  342. package/dest/test-helpers/index.d.ts.map +1 -1
  343. package/dest/test-helpers/index.js +2 -0
  344. package/dest/test-helpers/make-test-p2p-clients.d.ts +7 -8
  345. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  346. package/dest/test-helpers/make-test-p2p-clients.js +1 -2
  347. package/dest/test-helpers/mock-pubsub.d.ts +30 -4
  348. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  349. package/dest/test-helpers/mock-pubsub.js +105 -4
  350. package/dest/test-helpers/reqresp-nodes.d.ts +2 -3
  351. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  352. package/dest/test-helpers/reqresp-nodes.js +4 -3
  353. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  354. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  355. package/dest/test-helpers/test_tx_provider.js +41 -0
  356. package/dest/test-helpers/testbench-utils.d.ts +163 -0
  357. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  358. package/dest/test-helpers/testbench-utils.js +366 -0
  359. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  360. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  361. package/dest/testbench/p2p_client_testbench_worker.js +219 -139
  362. package/dest/testbench/worker_client_manager.d.ts +51 -6
  363. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  364. package/dest/testbench/worker_client_manager.js +226 -44
  365. package/dest/util.d.ts +2 -2
  366. package/dest/util.d.ts.map +1 -1
  367. package/package.json +16 -16
  368. package/src/bootstrap/bootstrap.ts +7 -4
  369. package/src/client/factory.ts +83 -36
  370. package/src/client/interface.ts +56 -34
  371. package/src/client/p2p_client.ts +197 -252
  372. package/src/client/test/tx_proposal_collector/README.md +227 -0
  373. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +345 -0
  374. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  375. package/src/config.ts +58 -4
  376. package/src/errors/tx-pool.error.ts +12 -0
  377. package/src/index.ts +1 -0
  378. package/src/mem_pools/attestation_pool/attestation_pool.ts +496 -91
  379. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +460 -112
  380. package/src/mem_pools/attestation_pool/index.ts +9 -2
  381. package/src/mem_pools/attestation_pool/mocks.ts +7 -4
  382. package/src/mem_pools/index.ts +4 -1
  383. package/src/mem_pools/instrumentation.ts +2 -1
  384. package/src/mem_pools/interface.ts +4 -4
  385. package/src/mem_pools/tx_pool/README.md +29 -14
  386. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +130 -75
  387. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +66 -5
  388. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +119 -4
  389. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  390. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +3 -3
  391. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +4 -2
  392. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  393. package/src/mem_pools/tx_pool_v2/README.md +283 -0
  394. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  395. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
  396. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  397. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  398. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +121 -0
  399. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +125 -0
  400. package/src/mem_pools/tx_pool_v2/eviction/index.ts +27 -0
  401. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +219 -0
  402. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  403. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  404. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  405. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +99 -0
  406. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +32 -0
  407. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  408. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  409. package/src/mem_pools/tx_pool_v2/interfaces.ts +242 -0
  410. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +327 -0
  411. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  412. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +444 -0
  413. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +223 -0
  414. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1079 -0
  415. package/src/msg_validators/attestation_validator/attestation_validator.ts +26 -14
  416. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +16 -10
  417. package/src/msg_validators/clock_tolerance.ts +51 -0
  418. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +1 -1
  419. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +1 -1
  420. package/src/msg_validators/proposal_validator/proposal_validator.ts +46 -32
  421. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +233 -66
  422. package/src/msg_validators/tx_validator/README.md +115 -0
  423. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +5 -5
  424. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  425. package/src/msg_validators/tx_validator/block_header_validator.ts +21 -8
  426. package/src/msg_validators/tx_validator/data_validator.ts +6 -2
  427. package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
  428. package/src/msg_validators/tx_validator/factory.ts +372 -55
  429. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  430. package/src/msg_validators/tx_validator/gas_validator.ts +106 -54
  431. package/src/msg_validators/tx_validator/index.ts +2 -0
  432. package/src/msg_validators/tx_validator/metadata_validator.ts +6 -3
  433. package/src/msg_validators/tx_validator/nullifier_cache.ts +30 -0
  434. package/src/msg_validators/tx_validator/phases_validator.ts +5 -3
  435. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  436. package/src/msg_validators/tx_validator/timestamp_validator.ts +29 -21
  437. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  438. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  439. package/src/services/data_store.ts +10 -7
  440. package/src/services/discv5/discV5_service.ts +1 -1
  441. package/src/services/dummy_service.ts +59 -2
  442. package/src/services/encoding.ts +11 -12
  443. package/src/services/gossipsub/README.md +641 -0
  444. package/src/services/gossipsub/index.ts +2 -0
  445. package/src/services/gossipsub/scoring.ts +29 -5
  446. package/src/services/gossipsub/topic_score_params.ts +487 -0
  447. package/src/services/index.ts +1 -0
  448. package/src/services/libp2p/instrumentation.ts +20 -7
  449. package/src/services/libp2p/libp2p_service.ts +508 -393
  450. package/src/services/peer-manager/metrics.ts +21 -4
  451. package/src/services/peer-manager/peer_scoring.ts +29 -1
  452. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  453. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
  454. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  455. package/src/services/reqresp/batch-tx-requester/interface.ts +53 -0
  456. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +161 -0
  457. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
  458. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  459. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  460. package/src/services/reqresp/connection-sampler/connection_sampler.ts +16 -0
  461. package/src/services/reqresp/constants.ts +14 -0
  462. package/src/services/reqresp/interface.ts +29 -1
  463. package/src/services/reqresp/metrics.ts +34 -9
  464. package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
  465. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +35 -12
  466. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +74 -9
  467. package/src/services/reqresp/protocols/status.ts +5 -3
  468. package/src/services/reqresp/protocols/tx.ts +22 -0
  469. package/src/services/reqresp/reqresp.ts +79 -22
  470. package/src/services/service.ts +55 -2
  471. package/src/services/tx_collection/config.ts +83 -1
  472. package/src/services/tx_collection/fast_tx_collection.ts +93 -47
  473. package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
  474. package/src/services/tx_collection/file_store_tx_source.ts +117 -0
  475. package/src/services/tx_collection/index.ts +6 -0
  476. package/src/services/tx_collection/instrumentation.ts +17 -2
  477. package/src/services/tx_collection/missing_txs_tracker.ts +52 -0
  478. package/src/services/tx_collection/proposal_tx_collector.ts +113 -0
  479. package/src/services/tx_collection/slow_tx_collection.ts +68 -35
  480. package/src/services/tx_collection/tx_collection.ts +121 -24
  481. package/src/services/tx_collection/tx_collection_sink.ts +30 -34
  482. package/src/services/tx_collection/tx_source.ts +22 -3
  483. package/src/services/tx_file_store/config.ts +37 -0
  484. package/src/services/tx_file_store/index.ts +3 -0
  485. package/src/services/tx_file_store/instrumentation.ts +36 -0
  486. package/src/services/tx_file_store/tx_file_store.ts +175 -0
  487. package/src/services/tx_provider.ts +12 -11
  488. package/src/services/tx_provider_instrumentation.ts +11 -5
  489. package/src/test-helpers/index.ts +2 -0
  490. package/src/test-helpers/make-test-p2p-clients.ts +3 -5
  491. package/src/test-helpers/mock-pubsub.ts +146 -9
  492. package/src/test-helpers/reqresp-nodes.ts +4 -6
  493. package/src/test-helpers/test_tx_provider.ts +64 -0
  494. package/src/test-helpers/testbench-utils.ts +430 -0
  495. package/src/testbench/p2p_client_testbench_worker.ts +333 -135
  496. package/src/testbench/worker_client_manager.ts +304 -47
  497. package/src/util.ts +7 -1
  498. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -40
  499. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  500. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -218
  501. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -31
  502. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  503. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -180
  504. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts +0 -15
  505. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts.map +0 -1
  506. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.js +0 -88
  507. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -320
  508. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -264
  509. package/src/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.ts +0 -108
@@ -1,29 +1,99 @@
1
+ import { NoCommitteeError } from '@aztec/ethereum/contracts';
1
2
  import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
3
+ import { jest } from '@jest/globals';
2
4
  export function sharedProposalValidatorTests(params) {
3
5
  const { validatorFactory, makeProposal, makeHeader, getSigner, getAddress, getSlot, getTxHashes, epochCacheMock } = params;
4
6
  describe('shared proposal validation logic', ()=>{
5
7
  let epochCache;
6
8
  let validator;
9
+ const previousSlot = getSlot(99);
10
+ const currentSlot = getSlot(100);
11
+ const nextSlot = getSlot(101);
12
+ function mockGetProposer(currentProposer, nextProposer, previousProposer) {
13
+ epochCache.getProposerAttesterAddressInSlot.mockImplementation((slot)=>{
14
+ if (slot === currentSlot) {
15
+ return Promise.resolve(currentProposer);
16
+ }
17
+ if (slot === nextSlot) {
18
+ return Promise.resolve(nextProposer);
19
+ }
20
+ if (slot === previousSlot && previousProposer) {
21
+ return Promise.resolve(previousProposer);
22
+ }
23
+ throw new Error('Unexpected argument');
24
+ });
25
+ }
7
26
  beforeEach(()=>{
8
27
  epochCache = epochCacheMock();
9
28
  validator = validatorFactory(epochCache, {
10
29
  txsPermitted: true
11
30
  });
31
+ epochCache.getCurrentAndNextSlot.mockReturnValue({
32
+ currentSlot: currentSlot,
33
+ nextSlot: nextSlot
34
+ });
12
35
  });
13
- it('returns high tolerance error if slot number is not current or next slot', async ()=>{
14
- const header = makeHeader(1, 97, 97);
36
+ it('returns high tolerance error if slot number is not current or next slot (outside clock tolerance)', async ()=>{
37
+ const header = makeHeader(1, 99, 99);
15
38
  const mockProposal = await makeProposal({
16
39
  blockHeader: header,
17
40
  lastBlockHeader: header
18
41
  });
19
- epochCache.getProposerAttesterAddressInCurrentOrNextSlot.mockResolvedValue({
20
- currentSlot: getSlot(98),
21
- nextSlot: getSlot(99),
22
- currentProposer: getAddress(),
23
- nextProposer: getAddress()
42
+ // Mock getEpochAndSlotNow to return time OUTSIDE clock tolerance (1000ms elapsed)
43
+ epochCache.getEpochAndSlotNow.mockReturnValue({
44
+ epoch: 1,
45
+ slot: currentSlot,
46
+ ts: 1000n,
47
+ nowMs: 1001000n
48
+ });
49
+ epochCache.getProposerAttesterAddressInSlot.mockResolvedValue(getAddress());
50
+ const result = await validator.validate(mockProposal);
51
+ expect(result).toEqual({
52
+ result: 'reject',
53
+ severity: PeerErrorSeverity.HighToleranceError
54
+ });
55
+ // Should not try to resolve proposers if base validation fails
56
+ expect(epochCache.getProposerAttesterAddressInSlot).not.toHaveBeenCalled();
57
+ });
58
+ it('returns ignore if previous slot proposal is within clock tolerance', async ()=>{
59
+ const previousProposer = getSigner();
60
+ const header = makeHeader(1, 99, 99);
61
+ const mockProposal = await makeProposal({
62
+ blockHeader: header,
63
+ lastBlockHeader: header,
64
+ signer: previousProposer
65
+ });
66
+ // Mock getEpochAndSlotNow to return time WITHIN clock tolerance (100ms elapsed)
67
+ epochCache.getEpochAndSlotNow.mockReturnValue({
68
+ epoch: 1,
69
+ slot: currentSlot,
70
+ ts: 1000n,
71
+ nowMs: 1000100n
24
72
  });
73
+ mockGetProposer(getAddress(), getAddress(), getAddress(previousProposer));
25
74
  const result = await validator.validate(mockProposal);
26
- expect(result).toBe(PeerErrorSeverity.HighToleranceError);
75
+ expect(result).toEqual({
76
+ result: 'ignore'
77
+ });
78
+ });
79
+ it('returns mid tolerance error if proposal has invalid signature', async ()=>{
80
+ const currentProposer = getSigner();
81
+ const header = makeHeader(1, 100, 100);
82
+ const mockProposal = await makeProposal({
83
+ blockHeader: header,
84
+ lastBlockHeader: header,
85
+ signer: currentProposer
86
+ });
87
+ // Override getSender to return undefined (invalid signature)
88
+ jest.spyOn(mockProposal, 'getSender').mockReturnValue(undefined);
89
+ mockGetProposer(getAddress(currentProposer), getAddress());
90
+ const result = await validator.validate(mockProposal);
91
+ expect(result).toEqual({
92
+ result: 'reject',
93
+ severity: PeerErrorSeverity.MidToleranceError
94
+ });
95
+ // Should not try to resolve proposer if signature is invalid
96
+ expect(epochCache.getProposerAttesterAddressInSlot).not.toHaveBeenCalled();
27
97
  });
28
98
  it('returns mid tolerance error if proposer is not current proposer for current slot', async ()=>{
29
99
  const currentProposer = getSigner();
@@ -35,14 +105,12 @@ export function sharedProposalValidatorTests(params) {
35
105
  lastBlockHeader: header,
36
106
  signer: invalidProposer
37
107
  });
38
- epochCache.getProposerAttesterAddressInCurrentOrNextSlot.mockResolvedValue({
39
- currentSlot: getSlot(100),
40
- nextSlot: getSlot(101),
41
- currentProposer: getAddress(currentProposer),
42
- nextProposer: getAddress(nextProposer)
43
- });
108
+ mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
44
109
  const result = await validator.validate(mockProposal);
45
- expect(result).toBe(PeerErrorSeverity.MidToleranceError);
110
+ expect(result).toEqual({
111
+ result: 'reject',
112
+ severity: PeerErrorSeverity.MidToleranceError
113
+ });
46
114
  });
47
115
  it('returns mid tolerance error if proposer is not next proposer for next slot', async ()=>{
48
116
  const currentProposer = getSigner();
@@ -54,14 +122,12 @@ export function sharedProposalValidatorTests(params) {
54
122
  lastBlockHeader: header,
55
123
  signer: invalidProposer
56
124
  });
57
- epochCache.getProposerAttesterAddressInCurrentOrNextSlot.mockResolvedValue({
58
- currentSlot: getSlot(100),
59
- nextSlot: getSlot(101),
60
- currentProposer: getAddress(currentProposer),
61
- nextProposer: getAddress(nextProposer)
62
- });
125
+ mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
63
126
  const result = await validator.validate(mockProposal);
64
- expect(result).toBe(PeerErrorSeverity.MidToleranceError);
127
+ expect(result).toEqual({
128
+ result: 'reject',
129
+ severity: PeerErrorSeverity.MidToleranceError
130
+ });
65
131
  });
66
132
  it('returns mid tolerance error if proposer is current proposer but proposal is for next slot', async ()=>{
67
133
  const currentProposer = getSigner();
@@ -72,14 +138,41 @@ export function sharedProposalValidatorTests(params) {
72
138
  lastBlockHeader: header,
73
139
  signer: currentProposer
74
140
  });
75
- epochCache.getProposerAttesterAddressInCurrentOrNextSlot.mockResolvedValue({
76
- currentSlot: getSlot(100),
77
- nextSlot: getSlot(101),
78
- currentProposer: getAddress(currentProposer),
79
- nextProposer: getAddress(nextProposer)
141
+ mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
142
+ const result = await validator.validate(mockProposal);
143
+ expect(result).toEqual({
144
+ result: 'reject',
145
+ severity: PeerErrorSeverity.MidToleranceError
146
+ });
147
+ });
148
+ it('accepts proposal when proposer is undefined (open committee)', async ()=>{
149
+ const currentProposer = getSigner();
150
+ const header = makeHeader(1, 100, 100);
151
+ const mockProposal = await makeProposal({
152
+ blockHeader: header,
153
+ lastBlockHeader: header,
154
+ signer: currentProposer
155
+ });
156
+ epochCache.getProposerAttesterAddressInSlot.mockResolvedValue(undefined);
157
+ const result = await validator.validate(mockProposal);
158
+ expect(result).toEqual({
159
+ result: 'accept'
80
160
  });
161
+ });
162
+ it('returns low tolerance error when getProposerAttesterAddressInSlot throws NoCommitteeError', async ()=>{
163
+ const currentProposer = getSigner();
164
+ const header = makeHeader(1, 100, 100);
165
+ const mockProposal = await makeProposal({
166
+ blockHeader: header,
167
+ lastBlockHeader: header,
168
+ signer: currentProposer
169
+ });
170
+ epochCache.getProposerAttesterAddressInSlot.mockRejectedValue(new NoCommitteeError());
81
171
  const result = await validator.validate(mockProposal);
82
- expect(result).toBe(PeerErrorSeverity.MidToleranceError);
172
+ expect(result).toEqual({
173
+ result: 'reject',
174
+ severity: PeerErrorSeverity.LowToleranceError
175
+ });
83
176
  });
84
177
  it('returns undefined if proposal is valid for current slot and proposer', async ()=>{
85
178
  const currentProposer = getSigner();
@@ -90,14 +183,11 @@ export function sharedProposalValidatorTests(params) {
90
183
  lastBlockHeader: header,
91
184
  signer: currentProposer
92
185
  });
93
- epochCache.getProposerAttesterAddressInCurrentOrNextSlot.mockResolvedValue({
94
- currentSlot: getSlot(100),
95
- nextSlot: getSlot(101),
96
- currentProposer: getAddress(currentProposer),
97
- nextProposer: getAddress(nextProposer)
98
- });
186
+ mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
99
187
  const result = await validator.validate(mockProposal);
100
- expect(result).toBeUndefined();
188
+ expect(result).toEqual({
189
+ result: 'accept'
190
+ });
101
191
  });
102
192
  it('returns undefined if proposal is valid for next slot and proposer', async ()=>{
103
193
  const currentProposer = getSigner();
@@ -108,14 +198,11 @@ export function sharedProposalValidatorTests(params) {
108
198
  lastBlockHeader: header,
109
199
  signer: nextProposer
110
200
  });
111
- epochCache.getProposerAttesterAddressInCurrentOrNextSlot.mockResolvedValue({
112
- currentSlot: getSlot(100),
113
- nextSlot: getSlot(101),
114
- currentProposer: getAddress(currentProposer),
115
- nextProposer: getAddress(nextProposer)
116
- });
201
+ mockGetProposer(getAddress(currentProposer), getAddress(nextProposer));
117
202
  const result = await validator.validate(mockProposal);
118
- expect(result).toBeUndefined();
203
+ expect(result).toEqual({
204
+ result: 'accept'
205
+ });
119
206
  });
120
207
  describe('transaction permission validation', ()=>{
121
208
  it('returns mid tolerance error if txs not permitted and proposal contains txHashes', async ()=>{
@@ -130,14 +217,12 @@ export function sharedProposalValidatorTests(params) {
130
217
  signer: currentProposer,
131
218
  txHashes: getTxHashes(2)
132
219
  });
133
- epochCache.getProposerAttesterAddressInCurrentOrNextSlot.mockResolvedValue({
134
- currentSlot: getSlot(100),
135
- nextSlot: getSlot(101),
136
- currentProposer: getAddress(currentProposer),
137
- nextProposer: getAddress()
138
- });
220
+ mockGetProposer(getAddress(currentProposer), getAddress());
139
221
  const result = await validatorWithTxsDisabled.validate(mockProposal);
140
- expect(result).toBe(PeerErrorSeverity.MidToleranceError);
222
+ expect(result).toEqual({
223
+ result: 'reject',
224
+ severity: PeerErrorSeverity.MidToleranceError
225
+ });
141
226
  });
142
227
  it('returns undefined if txs not permitted but proposal has no txHashes', async ()=>{
143
228
  const currentProposer = getSigner();
@@ -151,14 +236,11 @@ export function sharedProposalValidatorTests(params) {
151
236
  signer: currentProposer,
152
237
  txHashes: getTxHashes(0)
153
238
  });
154
- epochCache.getProposerAttesterAddressInCurrentOrNextSlot.mockResolvedValue({
155
- currentSlot: getSlot(100),
156
- nextSlot: getSlot(101),
157
- currentProposer: getAddress(currentProposer),
158
- nextProposer: getAddress()
159
- });
239
+ mockGetProposer(getAddress(currentProposer), getAddress());
160
240
  const result = await validatorWithTxsDisabled.validate(mockProposal);
161
- expect(result).toBeUndefined();
241
+ expect(result).toEqual({
242
+ result: 'accept'
243
+ });
162
244
  });
163
245
  it('returns undefined if txs permitted and proposal contains txHashes', async ()=>{
164
246
  const currentProposer = getSigner();
@@ -169,14 +251,127 @@ export function sharedProposalValidatorTests(params) {
169
251
  signer: currentProposer,
170
252
  txHashes: getTxHashes(2)
171
253
  });
172
- epochCache.getProposerAttesterAddressInCurrentOrNextSlot.mockResolvedValue({
173
- currentSlot: getSlot(100),
174
- nextSlot: getSlot(101),
175
- currentProposer: getAddress(currentProposer),
176
- nextProposer: getAddress()
254
+ mockGetProposer(getAddress(currentProposer), getAddress());
255
+ const result = await validator.validate(mockProposal);
256
+ expect(result).toEqual({
257
+ result: 'accept'
258
+ });
259
+ });
260
+ });
261
+ describe('embedded tx validation', ()=>{
262
+ it('returns mid tolerance error if embedded txs are not listed in txHashes', async ()=>{
263
+ const currentProposer = getSigner();
264
+ const txHashes = getTxHashes(2);
265
+ const header = makeHeader(1, 100, 100);
266
+ const mockProposal = await makeProposal({
267
+ blockHeader: header,
268
+ lastBlockHeader: header,
269
+ signer: currentProposer,
270
+ txHashes
271
+ });
272
+ // Create a fake tx whose hash is NOT in txHashes
273
+ const fakeTxHash = getTxHashes(1)[0];
274
+ const fakeTx = {
275
+ getTxHash: ()=>fakeTxHash,
276
+ validateTxHash: ()=>Promise.resolve(true)
277
+ };
278
+ Object.defineProperty(mockProposal, 'txs', {
279
+ get: ()=>[
280
+ fakeTx
281
+ ],
282
+ configurable: true
283
+ });
284
+ mockGetProposer(getAddress(currentProposer), getAddress());
285
+ const result = await validator.validate(mockProposal);
286
+ expect(result).toEqual({
287
+ result: 'reject',
288
+ severity: PeerErrorSeverity.MidToleranceError
289
+ });
290
+ });
291
+ it('returns low tolerance error if embedded tx has invalid tx hash', async ()=>{
292
+ const currentProposer = getSigner();
293
+ const txHashes = getTxHashes(2);
294
+ const header = makeHeader(1, 100, 100);
295
+ const mockProposal = await makeProposal({
296
+ blockHeader: header,
297
+ lastBlockHeader: header,
298
+ signer: currentProposer,
299
+ txHashes
300
+ });
301
+ // Create a fake tx whose hash IS in txHashes but validateTxHash returns false
302
+ const fakeTx = {
303
+ getTxHash: ()=>txHashes[0],
304
+ validateTxHash: ()=>Promise.resolve(false)
305
+ };
306
+ Object.defineProperty(mockProposal, 'txs', {
307
+ get: ()=>[
308
+ fakeTx
309
+ ],
310
+ configurable: true
311
+ });
312
+ mockGetProposer(getAddress(currentProposer), getAddress());
313
+ const result = await validator.validate(mockProposal);
314
+ expect(result).toEqual({
315
+ result: 'reject',
316
+ severity: PeerErrorSeverity.LowToleranceError
317
+ });
318
+ });
319
+ });
320
+ describe('maxTxsPerBlock validation', ()=>{
321
+ it('rejects proposal when txHashes exceed maxTxsPerBlock', async ()=>{
322
+ const validatorWithMaxTxs = validatorFactory(epochCache, {
323
+ txsPermitted: true,
324
+ maxTxsPerBlock: 2
325
+ });
326
+ const currentProposer = getSigner();
327
+ const header = makeHeader(1, 100, 100);
328
+ const mockProposal = await makeProposal({
329
+ blockHeader: header,
330
+ lastBlockHeader: header,
331
+ signer: currentProposer,
332
+ txHashes: getTxHashes(3)
333
+ });
334
+ mockGetProposer(getAddress(currentProposer), getAddress());
335
+ const result = await validatorWithMaxTxs.validate(mockProposal);
336
+ expect(result).toEqual({
337
+ result: 'reject',
338
+ severity: PeerErrorSeverity.MidToleranceError
339
+ });
340
+ });
341
+ it('accepts proposal when txHashes count equals maxTxsPerBlock', async ()=>{
342
+ const validatorWithMaxTxs = validatorFactory(epochCache, {
343
+ txsPermitted: true,
344
+ maxTxsPerBlock: 2
345
+ });
346
+ const currentProposer = getSigner();
347
+ const header = makeHeader(1, 100, 100);
348
+ const mockProposal = await makeProposal({
349
+ blockHeader: header,
350
+ lastBlockHeader: header,
351
+ signer: currentProposer,
352
+ txHashes: getTxHashes(2)
353
+ });
354
+ mockGetProposer(getAddress(currentProposer), getAddress());
355
+ const result = await validatorWithMaxTxs.validate(mockProposal);
356
+ expect(result).toEqual({
357
+ result: 'accept'
177
358
  });
359
+ });
360
+ it('accepts proposal when maxTxsPerBlock is not set (unlimited)', async ()=>{
361
+ // Default validator has no maxTxsPerBlock
362
+ const currentProposer = getSigner();
363
+ const header = makeHeader(1, 100, 100);
364
+ const mockProposal = await makeProposal({
365
+ blockHeader: header,
366
+ lastBlockHeader: header,
367
+ signer: currentProposer,
368
+ txHashes: getTxHashes(10)
369
+ });
370
+ mockGetProposer(getAddress(currentProposer), getAddress());
178
371
  const result = await validator.validate(mockProposal);
179
- expect(result).toBeUndefined();
372
+ expect(result).toEqual({
373
+ result: 'accept'
374
+ });
180
375
  });
181
376
  });
182
377
  });
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YV92YWxpZGF0b3IuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tc2dfdmFsaWRhdG9ycy90eF92YWxpZGF0b3IvZGF0YV92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQVNMLEVBQUUsRUFDRixLQUFLLGtCQUFrQixFQUN2QixLQUFLLFdBQVcsRUFDakIsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixxQkFBYSxlQUFnQixZQUFXLFdBQVcsQ0FBQyxFQUFFLENBQUM7O0lBRy9DLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQU1wRDtDQW1HRiJ9
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;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;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"}