@aztec/p2p 0.0.1-commit.9b94fc1 → 0.0.1-commit.9d2bcf6d

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 (404) 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 +2 -2
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +11 -9
  7. package/dest/client/interface.d.ts +18 -5
  8. package/dest/client/interface.d.ts.map +1 -1
  9. package/dest/client/p2p_client.d.ts +18 -19
  10. package/dest/client/p2p_client.d.ts.map +1 -1
  11. package/dest/client/p2p_client.js +473 -129
  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 +305 -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 +17 -8
  19. package/dest/config.d.ts.map +1 -1
  20. package/dest/config.js +15 -14
  21. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +61 -42
  22. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  23. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  24. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +239 -265
  26. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +21 -18
  27. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  28. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +114 -109
  29. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +17 -16
  30. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  31. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +89 -128
  32. package/dest/mem_pools/attestation_pool/mocks.d.ts +11 -8
  33. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  34. package/dest/mem_pools/attestation_pool/mocks.js +17 -13
  35. package/dest/mem_pools/instrumentation.d.ts +7 -1
  36. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  37. package/dest/mem_pools/instrumentation.js +31 -13
  38. package/dest/mem_pools/interface.d.ts +3 -4
  39. package/dest/mem_pools/interface.d.ts.map +1 -1
  40. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +37 -27
  41. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  42. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +314 -335
  43. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
  44. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  45. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
  46. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
  47. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  48. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
  49. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  50. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  51. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  52. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  53. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  54. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  55. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  56. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  57. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
  58. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  59. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  60. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  61. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  62. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  63. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  64. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  65. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  66. package/dest/mem_pools/tx_pool/index.js +0 -1
  67. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  68. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  69. package/dest/mem_pools/tx_pool/priority.js +6 -1
  70. package/dest/mem_pools/tx_pool/tx_pool.d.ts +11 -6
  71. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  72. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  73. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  74. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +30 -24
  75. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -4
  76. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  77. package/dest/msg_validators/attestation_validator/attestation_validator.js +52 -19
  78. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +5 -5
  79. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  80. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +22 -13
  81. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  82. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  83. package/dest/msg_validators/clock_tolerance.js +37 -0
  84. package/dest/msg_validators/index.d.ts +2 -2
  85. package/dest/msg_validators/index.d.ts.map +1 -1
  86. package/dest/msg_validators/index.js +1 -1
  87. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  88. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  89. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  90. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  91. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  92. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  93. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  94. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  95. package/dest/msg_validators/proposal_validator/index.js +3 -0
  96. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  97. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  98. package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
  99. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  100. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  101. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
  102. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  103. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  104. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  105. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +5 -4
  106. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  107. package/dest/msg_validators/tx_validator/block_header_validator.js +3 -2
  108. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  109. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  110. package/dest/msg_validators/tx_validator/data_validator.js +4 -1
  111. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -2
  112. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  113. package/dest/msg_validators/tx_validator/double_spend_validator.js +3 -2
  114. package/dest/msg_validators/tx_validator/factory.d.ts +10 -4
  115. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  116. package/dest/msg_validators/tx_validator/factory.js +22 -12
  117. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  118. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  119. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  120. package/dest/msg_validators/tx_validator/gas_validator.d.ts +3 -2
  121. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  122. package/dest/msg_validators/tx_validator/gas_validator.js +11 -16
  123. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  124. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  125. package/dest/msg_validators/tx_validator/index.js +1 -0
  126. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +4 -3
  127. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  128. package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
  129. package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
  130. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  131. package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
  132. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  133. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  134. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  135. package/dest/msg_validators/tx_validator/test_utils.d.ts +2 -2
  136. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
  137. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +5 -3
  138. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  139. package/dest/msg_validators/tx_validator/timestamp_validator.js +2 -2
  140. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  141. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  142. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  143. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  144. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  145. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  146. package/dest/services/data_store.d.ts +1 -1
  147. package/dest/services/data_store.d.ts.map +1 -1
  148. package/dest/services/data_store.js +10 -6
  149. package/dest/services/discv5/discV5_service.js +1 -1
  150. package/dest/services/dummy_service.d.ts +18 -2
  151. package/dest/services/dummy_service.d.ts.map +1 -1
  152. package/dest/services/dummy_service.js +42 -0
  153. package/dest/services/encoding.d.ts +1 -1
  154. package/dest/services/encoding.d.ts.map +1 -1
  155. package/dest/services/encoding.js +7 -6
  156. package/dest/services/index.d.ts +2 -1
  157. package/dest/services/index.d.ts.map +1 -1
  158. package/dest/services/index.js +1 -0
  159. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  160. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  161. package/dest/services/libp2p/instrumentation.js +30 -72
  162. package/dest/services/libp2p/libp2p_service.d.ts +39 -16
  163. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  164. package/dest/services/libp2p/libp2p_service.js +754 -191
  165. package/dest/services/peer-manager/metrics.d.ts +7 -2
  166. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  167. package/dest/services/peer-manager/metrics.js +33 -21
  168. package/dest/services/peer-manager/peer_manager.d.ts +2 -2
  169. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  170. package/dest/services/peer-manager/peer_manager.js +4 -12
  171. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  172. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  173. package/dest/services/peer-manager/peer_scoring.js +7 -4
  174. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
  175. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  176. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
  177. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  178. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  179. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  180. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  181. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  182. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  183. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
  184. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  185. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
  186. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
  187. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  188. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
  189. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  190. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  191. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  192. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  193. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  194. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  195. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  196. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  197. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  198. package/dest/services/reqresp/constants.d.ts +12 -0
  199. package/dest/services/reqresp/constants.d.ts.map +1 -0
  200. package/dest/services/reqresp/constants.js +7 -0
  201. package/dest/services/reqresp/interface.d.ts +4 -2
  202. package/dest/services/reqresp/interface.d.ts.map +1 -1
  203. package/dest/services/reqresp/interface.js +1 -1
  204. package/dest/services/reqresp/metrics.d.ts +6 -5
  205. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  206. package/dest/services/reqresp/metrics.js +17 -21
  207. package/dest/services/reqresp/protocols/auth.d.ts +2 -2
  208. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
  209. package/dest/services/reqresp/protocols/auth.js +2 -2
  210. package/dest/services/reqresp/protocols/block.d.ts +1 -1
  211. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  212. package/dest/services/reqresp/protocols/block.js +3 -2
  213. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  214. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  215. package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
  216. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  217. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  218. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +16 -3
  219. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +19 -7
  220. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  221. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +44 -14
  222. package/dest/services/reqresp/protocols/status.d.ts +5 -4
  223. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  224. package/dest/services/reqresp/protocols/status.js +7 -3
  225. package/dest/services/reqresp/protocols/tx.d.ts +2 -3
  226. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  227. package/dest/services/reqresp/reqresp.d.ts +6 -1
  228. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  229. package/dest/services/reqresp/reqresp.js +460 -46
  230. package/dest/services/service.d.ts +19 -3
  231. package/dest/services/service.d.ts.map +1 -1
  232. package/dest/services/tx_collection/config.d.ts +4 -1
  233. package/dest/services/tx_collection/config.d.ts.map +1 -1
  234. package/dest/services/tx_collection/config.js +10 -2
  235. package/dest/services/tx_collection/fast_tx_collection.d.ts +9 -6
  236. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  237. package/dest/services/tx_collection/fast_tx_collection.js +16 -5
  238. package/dest/services/tx_collection/index.d.ts +2 -1
  239. package/dest/services/tx_collection/index.d.ts.map +1 -1
  240. package/dest/services/tx_collection/index.js +1 -0
  241. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  242. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  243. package/dest/services/tx_collection/instrumentation.js +10 -13
  244. package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
  245. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  246. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  247. package/dest/services/tx_collection/slow_tx_collection.d.ts +4 -3
  248. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  249. package/dest/services/tx_collection/tx_collection.d.ts +10 -9
  250. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  251. package/dest/services/tx_collection/tx_collection.js +5 -5
  252. package/dest/services/tx_file_store/config.d.ts +18 -0
  253. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  254. package/dest/services/tx_file_store/config.js +26 -0
  255. package/dest/services/tx_file_store/index.d.ts +4 -0
  256. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  257. package/dest/services/tx_file_store/index.js +3 -0
  258. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  259. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  260. package/dest/services/tx_file_store/instrumentation.js +29 -0
  261. package/dest/services/tx_file_store/tx_file_store.d.ts +47 -0
  262. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  263. package/dest/services/tx_file_store/tx_file_store.js +149 -0
  264. package/dest/services/tx_provider.d.ts +4 -2
  265. package/dest/services/tx_provider.d.ts.map +1 -1
  266. package/dest/services/tx_provider.js +11 -2
  267. package/dest/services/tx_provider_instrumentation.d.ts +5 -2
  268. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  269. package/dest/services/tx_provider_instrumentation.js +14 -14
  270. package/dest/test-helpers/index.d.ts +3 -1
  271. package/dest/test-helpers/index.d.ts.map +1 -1
  272. package/dest/test-helpers/index.js +2 -0
  273. package/dest/test-helpers/mock-tx-helpers.js +1 -1
  274. package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
  275. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  276. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  277. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  278. package/dest/test-helpers/test_tx_provider.js +41 -0
  279. package/dest/test-helpers/testbench-utils.d.ts +158 -0
  280. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  281. package/dest/test-helpers/testbench-utils.js +297 -0
  282. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  283. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  284. package/dest/testbench/p2p_client_testbench_worker.js +218 -123
  285. package/dest/testbench/worker_client_manager.d.ts +51 -6
  286. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  287. package/dest/testbench/worker_client_manager.js +226 -39
  288. package/package.json +18 -18
  289. package/src/bootstrap/bootstrap.ts +7 -4
  290. package/src/client/factory.ts +15 -20
  291. package/src/client/interface.ts +19 -4
  292. package/src/client/p2p_client.ts +114 -155
  293. package/src/client/test/tx_proposal_collector/README.md +227 -0
  294. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
  295. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  296. package/src/config.ts +25 -19
  297. package/src/mem_pools/attestation_pool/attestation_pool.ts +68 -41
  298. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +241 -289
  299. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +163 -141
  300. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +141 -164
  301. package/src/mem_pools/attestation_pool/mocks.ts +21 -15
  302. package/src/mem_pools/instrumentation.ts +39 -14
  303. package/src/mem_pools/interface.ts +2 -4
  304. package/src/mem_pools/tx_pool/README.md +270 -0
  305. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +367 -371
  306. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
  307. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
  308. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  309. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  310. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
  311. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  312. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  313. package/src/mem_pools/tx_pool/index.ts +0 -1
  314. package/src/mem_pools/tx_pool/priority.ts +8 -1
  315. package/src/mem_pools/tx_pool/tx_pool.ts +11 -5
  316. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +23 -17
  317. package/src/msg_validators/attestation_validator/attestation_validator.ts +37 -22
  318. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +19 -16
  319. package/src/msg_validators/clock_tolerance.ts +51 -0
  320. package/src/msg_validators/index.ts +1 -1
  321. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  322. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  323. package/src/msg_validators/proposal_validator/index.ts +3 -0
  324. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  325. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  326. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  327. package/src/msg_validators/tx_validator/block_header_validator.ts +6 -5
  328. package/src/msg_validators/tx_validator/data_validator.ts +18 -6
  329. package/src/msg_validators/tx_validator/double_spend_validator.ts +4 -3
  330. package/src/msg_validators/tx_validator/factory.ts +67 -25
  331. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  332. package/src/msg_validators/tx_validator/gas_validator.ts +17 -28
  333. package/src/msg_validators/tx_validator/index.ts +1 -0
  334. package/src/msg_validators/tx_validator/metadata_validator.ts +19 -8
  335. package/src/msg_validators/tx_validator/phases_validator.ts +5 -3
  336. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  337. package/src/msg_validators/tx_validator/test_utils.ts +1 -1
  338. package/src/msg_validators/tx_validator/timestamp_validator.ts +11 -5
  339. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  340. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  341. package/src/services/data_store.ts +10 -7
  342. package/src/services/discv5/discV5_service.ts +1 -1
  343. package/src/services/dummy_service.ts +51 -0
  344. package/src/services/encoding.ts +6 -5
  345. package/src/services/index.ts +1 -0
  346. package/src/services/libp2p/instrumentation.ts +32 -73
  347. package/src/services/libp2p/libp2p_service.ts +425 -180
  348. package/src/services/peer-manager/metrics.ts +39 -21
  349. package/src/services/peer-manager/peer_manager.ts +5 -4
  350. package/src/services/peer-manager/peer_scoring.ts +3 -4
  351. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  352. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
  353. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  354. package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
  355. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
  356. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
  357. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  358. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  359. package/src/services/reqresp/connection-sampler/connection_sampler.ts +19 -1
  360. package/src/services/reqresp/constants.ts +14 -0
  361. package/src/services/reqresp/interface.ts +4 -1
  362. package/src/services/reqresp/metrics.ts +36 -27
  363. package/src/services/reqresp/protocols/auth.ts +2 -2
  364. package/src/services/reqresp/protocols/block.ts +3 -2
  365. package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
  366. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +18 -4
  367. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +52 -10
  368. package/src/services/reqresp/protocols/status.ts +16 -12
  369. package/src/services/reqresp/protocols/tx.ts +1 -2
  370. package/src/services/reqresp/reqresp.ts +66 -19
  371. package/src/services/service.ts +23 -4
  372. package/src/services/tx_collection/config.ts +16 -2
  373. package/src/services/tx_collection/fast_tx_collection.ts +39 -15
  374. package/src/services/tx_collection/index.ts +5 -0
  375. package/src/services/tx_collection/instrumentation.ts +5 -13
  376. package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
  377. package/src/services/tx_collection/slow_tx_collection.ts +3 -3
  378. package/src/services/tx_collection/tx_collection.ts +10 -9
  379. package/src/services/tx_file_store/config.ts +43 -0
  380. package/src/services/tx_file_store/index.ts +3 -0
  381. package/src/services/tx_file_store/instrumentation.ts +36 -0
  382. package/src/services/tx_file_store/tx_file_store.ts +173 -0
  383. package/src/services/tx_provider.ts +19 -3
  384. package/src/services/tx_provider_instrumentation.ts +24 -14
  385. package/src/test-helpers/index.ts +2 -0
  386. package/src/test-helpers/mock-pubsub.ts +1 -1
  387. package/src/test-helpers/mock-tx-helpers.ts +1 -1
  388. package/src/test-helpers/reqresp-nodes.ts +1 -1
  389. package/src/test-helpers/test_tx_provider.ts +64 -0
  390. package/src/test-helpers/testbench-utils.ts +374 -0
  391. package/src/testbench/p2p_client_testbench_worker.ts +338 -119
  392. package/src/testbench/worker_client_manager.ts +304 -42
  393. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -80
  394. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  395. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -238
  396. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  397. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  398. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -82
  399. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  400. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  401. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  402. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -283
  403. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -97
  404. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -1,6 +1,6 @@
1
1
  import { SlotNumber } from '@aztec/foundation/branded-types';
2
2
  import type { AztecAsyncKVStore } from '@aztec/kv-store';
3
- import { BlockAttestation, BlockProposal } from '@aztec/stdlib/p2p';
3
+ import { BlockProposal, CheckpointAttestation, CheckpointProposal, type CheckpointProposalCore } from '@aztec/stdlib/p2p';
4
4
  import { type TelemetryClient } from '@aztec/telemetry-client';
5
5
  import type { AttestationPool } from './attestation_pool.js';
6
6
  export declare const MAX_PROPOSALS_PER_SLOT = 5;
@@ -9,29 +9,32 @@ export declare class KvAttestationPool implements AttestationPool {
9
9
  private store;
10
10
  private log;
11
11
  private metrics;
12
- private attestations;
13
12
  private proposals;
14
- private proposalsForSlot;
15
- private attestationsForProposal;
13
+ private checkpointAttestations;
14
+ private checkpointProposals;
15
+ private checkpointProposalsForSlot;
16
+ private checkpointAttestationsForProposal;
16
17
  constructor(store: AztecAsyncKVStore, telemetry?: TelemetryClient, log?: import("@aztec/foundation/log").Logger);
17
18
  private poolStats;
18
19
  isEmpty(): Promise<boolean>;
19
20
  private getProposalKey;
20
21
  private getAttestationKey;
21
- addAttestations(attestations: BlockAttestation[]): Promise<void>;
22
- getAttestationsForSlot(slot: SlotNumber): Promise<BlockAttestation[]>;
23
- getAttestationsForSlotAndProposal(slot: SlotNumber, proposalId: string): Promise<BlockAttestation[]>;
24
- deleteAttestationsOlderThan(oldestSlot: SlotNumber): Promise<void>;
25
- deleteAttestationsForSlot(slot: SlotNumber): Promise<void>;
26
- deleteAttestationsForSlotAndProposal(slot: SlotNumber, proposalId: string): Promise<void>;
27
- deleteAttestations(attestations: BlockAttestation[]): Promise<void>;
28
- hasAttestation(attestation: BlockAttestation): Promise<boolean>;
22
+ addBlockProposal(blockProposal: BlockProposal): Promise<void>;
29
23
  getBlockProposal(id: string): Promise<BlockProposal | undefined>;
30
24
  hasBlockProposal(idOrProposal: string | BlockProposal): Promise<boolean>;
31
- addBlockProposal(blockProposal: BlockProposal): Promise<void>;
32
- hasReachedProposalCap(slot: SlotNumber): Promise<boolean>;
33
- hasReachedAttestationCap(slot: SlotNumber, proposalId: string, committeeSize: number): Promise<boolean>;
34
- canAddProposal(block: BlockProposal): Promise<boolean>;
35
- canAddAttestation(attestation: BlockAttestation, committeeSize: number): Promise<boolean>;
25
+ addCheckpointProposal(proposal: CheckpointProposal): Promise<void>;
26
+ getCheckpointProposal(id: string): Promise<CheckpointProposalCore | undefined>;
27
+ hasCheckpointProposal(idOrProposal: string | CheckpointProposal): Promise<boolean>;
28
+ addCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void>;
29
+ getCheckpointAttestationsForSlot(slot: SlotNumber): Promise<CheckpointAttestation[]>;
30
+ getCheckpointAttestationsForSlotAndProposal(slot: SlotNumber, proposalId: string): Promise<CheckpointAttestation[]>;
31
+ deleteCheckpointAttestationsOlderThan(oldestSlot: SlotNumber): Promise<void>;
32
+ private deleteCheckpointAttestationsForSlot;
33
+ hasCheckpointAttestation(attestation: CheckpointAttestation): Promise<boolean>;
34
+ canAddProposal(_block: BlockProposal): Promise<boolean>;
35
+ canAddCheckpointProposal(proposal: CheckpointProposal): Promise<boolean>;
36
+ canAddCheckpointAttestation(attestation: CheckpointAttestation, committeeSize: number): Promise<boolean>;
37
+ hasReachedCheckpointProposalCap(slot: SlotNumber): Promise<boolean>;
38
+ hasReachedCheckpointAttestationCap(slot: SlotNumber, proposalId: string, committeeSize: number): Promise<boolean>;
36
39
  }
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3ZfYXR0ZXN0YXRpb25fcG9vbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21lbV9wb29scy9hdHRlc3RhdGlvbl9wb29sL2t2X2F0dGVzdGF0aW9uX3Bvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSTdELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFxQyxNQUFNLGlCQUFpQixDQUFDO0FBQzVGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0seUJBQXlCLENBQUM7QUFJbkYsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFN0QsZUFBTyxNQUFNLHNCQUFzQixJQUFJLENBQUM7QUFDeEMsZUFBTyxNQUFNLHNCQUFzQixLQUFLLENBQUM7QUFFekMscUJBQWEsaUJBQWtCLFlBQVcsZUFBZTtJQVlyRCxPQUFPLENBQUMsS0FBSztJQUViLE9BQU8sQ0FBQyxHQUFHO0lBYmIsT0FBTyxDQUFDLE9BQU8sQ0FBd0M7SUFFdkQsT0FBTyxDQUFDLFlBQVksQ0FBZ0M7SUFDcEQsT0FBTyxDQUFDLFNBQVMsQ0FHZjtJQUNGLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBcUM7SUFDN0QsT0FBTyxDQUFDLHVCQUF1QixDQUFxQztJQUVwRSxZQUNVLEtBQUssRUFBRSxpQkFBaUIsRUFDaEMsU0FBUyxHQUFFLGVBQXNDLEVBQ3pDLEdBQUcseUNBQXlDLEVBUXJEO0lBRUQsT0FBTyxDQUFDLFNBQVMsQ0FJZjtJQUVXLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBS3ZDO0lBRUQsT0FBTyxDQUFDLGNBQWM7SUFZdEIsT0FBTyxDQUFDLGlCQUFpQjtJQUlaLGVBQWUsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBbUM1RTtJQUVZLHNCQUFzQixDQUFDLElBQUksRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FTakY7SUFFWSxpQ0FBaUMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FvQmhIO0lBRVksMkJBQTJCLENBQUMsVUFBVSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBSzlFO0lBRVkseUJBQXlCLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBdUJ0RTtJQUVZLG9DQUFvQyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBa0JyRztJQUVZLGtCQUFrQixDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0E0Qi9FO0lBRVksY0FBYyxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBYzNFO0lBRVksZ0JBQWdCLENBQUMsRUFBRSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQyxDQVc1RTtJQUVZLGdCQUFnQixDQUFDLFlBQVksRUFBRSxNQUFNLEdBQUcsYUFBYSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FHcEY7SUFFWSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FlekU7SUFFWSxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FHckU7SUFFWSx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBR25IO0lBRVksY0FBYyxDQUFDLEtBQUssRUFBRSxhQUFhLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUlsRTtJQUVZLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FTckc7Q0FDRiJ9
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia3ZfYXR0ZXN0YXRpb25fcG9vbC5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21lbV9wb29scy9hdHRlc3RhdGlvbl9wb29sL2t2X2F0dGVzdGF0aW9uX3Bvb2wudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSTdELE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFxQyxNQUFNLGlCQUFpQixDQUFDO0FBQzVGLE9BQU8sRUFDTCxhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNsQixLQUFLLHNCQUFzQixFQUM1QixNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUluRixPQUFPLEtBQUssRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU3RCxlQUFPLE1BQU0sc0JBQXNCLElBQUksQ0FBQztBQUN4QyxlQUFPLE1BQU0sc0JBQXNCLEtBQUssQ0FBQztBQUV6QyxxQkFBYSxpQkFBa0IsWUFBVyxlQUFlO0lBZXJELE9BQU8sQ0FBQyxLQUFLO0lBRWIsT0FBTyxDQUFDLEdBQUc7SUFoQmIsT0FBTyxDQUFDLE9BQU8sQ0FBNkM7SUFFNUQsT0FBTyxDQUFDLFNBQVMsQ0FHZjtJQUdGLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBZ0M7SUFDOUQsT0FBTyxDQUFDLG1CQUFtQixDQUFnQztJQUMzRCxPQUFPLENBQUMsMEJBQTBCLENBQXFDO0lBQ3ZFLE9BQU8sQ0FBQyxpQ0FBaUMsQ0FBcUM7SUFFOUUsWUFDVSxLQUFLLEVBQUUsaUJBQWlCLEVBQ2hDLFNBQVMsR0FBRSxlQUFzQyxFQUN6QyxHQUFHLHlDQUF5QyxFQVdyRDtJQUVELE9BQU8sQ0FBQyxTQUFTLENBSWY7SUFFVyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQVF2QztJQUVELE9BQU8sQ0FBQyxjQUFjO0lBWXRCLE9BQU8sQ0FBQyxpQkFBaUI7SUFJWixnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FNekU7SUFFWSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLENBVzVFO0lBRVksZ0JBQWdCLENBQUMsWUFBWSxFQUFFLE1BQU0sR0FBRyxhQUFhLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUdwRjtJQUVZLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBNEI5RTtJQUVZLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLHNCQUFzQixHQUFHLFNBQVMsQ0FBQyxDQVcxRjtJQUVZLHFCQUFxQixDQUFDLFlBQVksRUFBRSxNQUFNLEdBQUcsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUc5RjtJQUVZLHlCQUF5QixDQUFDLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FzQzNGO0lBRVksZ0NBQWdDLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQVNoRztJQUVZLDJDQUEyQyxDQUN0RCxJQUFJLEVBQUUsVUFBVSxFQUNoQixVQUFVLEVBQUUsTUFBTSxHQUNqQixPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxDQWtCbEM7SUFFWSxxQ0FBcUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FLeEY7WUFFYSxtQ0FBbUM7SUF3QnBDLHdCQUF3QixDQUFDLFdBQVcsRUFBRSxxQkFBcUIsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBYzFGO0lBRU0sY0FBYyxDQUFDLE1BQU0sRUFBRSxhQUFhLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUc3RDtJQUVZLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBTXBGO0lBRVksMkJBQTJCLENBQ3RDLFdBQVcsRUFBRSxxQkFBcUIsRUFDbEMsYUFBYSxFQUFFLE1BQU0sR0FDcEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQVNsQjtJQUVZLCtCQUErQixDQUFDLElBQUksRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUcvRTtJQUVZLGtDQUFrQyxDQUM3QyxJQUFJLEVBQUUsVUFBVSxFQUNoQixVQUFVLEVBQUUsTUFBTSxFQUNsQixhQUFhLEVBQUUsTUFBTSxHQUNwQixPQUFPLENBQUMsT0FBTyxDQUFDLENBS2xCO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"kv_attestation_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/kv_attestation_pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAI7D,OAAO,KAAK,EAAE,iBAAiB,EAAqC,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAInF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,qBAAa,iBAAkB,YAAW,eAAe;IAYrD,OAAO,CAAC,KAAK;IAEb,OAAO,CAAC,GAAG;IAbb,OAAO,CAAC,OAAO,CAAwC;IAEvD,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,SAAS,CAGf;IACF,OAAO,CAAC,gBAAgB,CAAqC;IAC7D,OAAO,CAAC,uBAAuB,CAAqC;IAEpE,YACU,KAAK,EAAE,iBAAiB,EAChC,SAAS,GAAE,eAAsC,EACzC,GAAG,yCAAyC,EAQrD;IAED,OAAO,CAAC,SAAS,CAIf;IAEW,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAKvC;IAED,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,iBAAiB;IAIZ,eAAe,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC5E;IAEY,sBAAsB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CASjF;IAEY,iCAAiC,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAoBhH;IAEY,2BAA2B,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAK9E;IAEY,yBAAyB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBtE;IAEY,oCAAoC,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBrG;IAEY,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B/E;IAEY,cAAc,CAAC,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAc3E;IAEY,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAW5E;IAEY,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAGpF;IAEY,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAezE;IAEY,qBAAqB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAGrE;IAEY,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGnH;IAEY,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAIlE;IAEY,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASrG;CACF"}
1
+ {"version":3,"file":"kv_attestation_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/kv_attestation_pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAI7D,OAAO,KAAK,EAAE,iBAAiB,EAAqC,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,kBAAkB,EAClB,KAAK,sBAAsB,EAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAInF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,qBAAa,iBAAkB,YAAW,eAAe;IAerD,OAAO,CAAC,KAAK;IAEb,OAAO,CAAC,GAAG;IAhBb,OAAO,CAAC,OAAO,CAA6C;IAE5D,OAAO,CAAC,SAAS,CAGf;IAGF,OAAO,CAAC,sBAAsB,CAAgC;IAC9D,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,0BAA0B,CAAqC;IACvE,OAAO,CAAC,iCAAiC,CAAqC;IAE9E,YACU,KAAK,EAAE,iBAAiB,EAChC,SAAS,GAAE,eAAsC,EACzC,GAAG,yCAAyC,EAWrD;IAED,OAAO,CAAC,SAAS,CAIf;IAEW,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAQvC;IAED,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,iBAAiB;IAIZ,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzE;IAEY,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAW5E;IAEY,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAGpF;IAEY,qBAAqB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B9E;IAEY,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAW1F;IAEY,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAG9F;IAEY,yBAAyB,CAAC,YAAY,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC3F;IAEY,gCAAgC,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAShG;IAEY,2CAA2C,CACtD,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAkBlC;IAEY,qCAAqC,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAKxF;YAEa,mCAAmC;IAwBpC,wBAAwB,CAAC,WAAW,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAc1F;IAEM,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAG7D;IAEY,wBAAwB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAMpF;IAEY,2BAA2B,CACtC,WAAW,EAAE,qBAAqB,EAClC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,OAAO,CAAC,CASlB;IAEY,+BAA+B,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAG/E;IAEY,kCAAkC,CAC7C,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,OAAO,CAAC,CAKlB;CACF"}
@@ -1,8 +1,8 @@
1
1
  import { SlotNumber } from '@aztec/foundation/branded-types';
2
- import { Fr } from '@aztec/foundation/fields';
2
+ import { Fr } from '@aztec/foundation/curves/bn254';
3
3
  import { toArray } from '@aztec/foundation/iterable';
4
4
  import { createLogger } from '@aztec/foundation/log';
5
- import { BlockAttestation, BlockProposal } from '@aztec/stdlib/p2p';
5
+ import { BlockProposal, CheckpointAttestation, CheckpointProposal } from '@aztec/stdlib/p2p';
6
6
  import { getTelemetryClient } from '@aztec/telemetry-client';
7
7
  import { ProposalSlotCapExceededError } from '../../errors/attestation-pool.error.js';
8
8
  import { PoolInstrumentation, PoolName } from '../instrumentation.js';
@@ -12,27 +12,34 @@ export class KvAttestationPool {
12
12
  store;
13
13
  log;
14
14
  metrics;
15
- attestations;
16
15
  proposals;
17
- proposalsForSlot;
18
- attestationsForProposal;
16
+ // Checkpoint attestation storage
17
+ checkpointAttestations;
18
+ checkpointProposals;
19
+ checkpointProposalsForSlot;
20
+ checkpointAttestationsForProposal;
19
21
  constructor(store, telemetry = getTelemetryClient(), log = createLogger('aztec:attestation_pool')){
20
22
  this.store = store;
21
23
  this.log = log;
22
24
  this.poolStats = async ()=>{
23
25
  return {
24
- itemCount: await this.attestations.sizeAsync()
26
+ itemCount: await this.checkpointAttestations.sizeAsync()
25
27
  };
26
28
  };
27
- this.attestations = store.openMap('attestations');
28
29
  this.proposals = store.openMap('proposals');
29
- this.proposalsForSlot = store.openMultiMap('proposals_for_slot');
30
- this.attestationsForProposal = store.openMultiMap('attestations_for_proposal');
30
+ // Initialize checkpoint attestation storage
31
+ this.checkpointAttestations = store.openMap('checkpoint_attestations');
32
+ this.checkpointProposals = store.openMap('checkpoint_proposals');
33
+ this.checkpointProposalsForSlot = store.openMultiMap('checkpoint_proposals_for_slot');
34
+ this.checkpointAttestationsForProposal = store.openMultiMap('checkpoint_attestations_for_proposal');
31
35
  this.metrics = new PoolInstrumentation(telemetry, PoolName.ATTESTATION_POOL, this.poolStats);
32
36
  }
33
37
  poolStats;
34
38
  async isEmpty() {
35
- for await (const _ of this.attestations.entriesAsync()){
39
+ for await (const _ of this.checkpointAttestations.entriesAsync()){
40
+ return false;
41
+ }
42
+ for await (const _ of this.proposals.entriesAsync()){
36
43
  return false;
37
44
  }
38
45
  return true;
@@ -45,7 +52,65 @@ export class KvAttestationPool {
45
52
  getAttestationKey(slot, proposalId, address) {
46
53
  return `${this.getProposalKey(slot, proposalId)}-${address}`;
47
54
  }
48
- async addAttestations(attestations) {
55
+ async addBlockProposal(blockProposal) {
56
+ await this.store.transactionAsync(async ()=>{
57
+ const proposalId = blockProposal.archive.toString();
58
+ // Strip signedTxs before storing to avoid persisting full tx data
59
+ await this.proposals.set(proposalId, blockProposal.withoutSignedTxs().toBuffer());
60
+ });
61
+ }
62
+ async getBlockProposal(id) {
63
+ const buffer = await this.proposals.getAsync(id);
64
+ try {
65
+ if (buffer && buffer.length > 0) {
66
+ return BlockProposal.fromBuffer(buffer);
67
+ }
68
+ } catch {
69
+ return Promise.resolve(undefined);
70
+ }
71
+ return Promise.resolve(undefined);
72
+ }
73
+ async hasBlockProposal(idOrProposal) {
74
+ const id = typeof idOrProposal === 'string' ? idOrProposal : idOrProposal.archive.toString();
75
+ return await this.proposals.hasAsync(id);
76
+ }
77
+ async addCheckpointProposal(proposal) {
78
+ if (!await this.canAddCheckpointProposal(proposal)) {
79
+ throw new ProposalSlotCapExceededError(`Maximum checkpoint proposals per slot reached: slot=${proposal.slotNumber} cap=${MAX_PROPOSALS_PER_SLOT} proposal=${proposal.archive.toString()}`);
80
+ }
81
+ // Extract and validate the block proposal if present
82
+ const blockProposal = proposal.getBlockProposal();
83
+ if (blockProposal && !await this.canAddProposal(blockProposal)) {
84
+ throw new ProposalSlotCapExceededError(`Maximum block proposals per slot reached when extracting from checkpoint: slot=${proposal.slotNumber} proposal=${blockProposal.archive.toString()}`);
85
+ }
86
+ await this.store.transactionAsync(async ()=>{
87
+ const slotKey = proposal.slotNumber;
88
+ const proposalId = proposal.archive.toString();
89
+ await this.checkpointProposalsForSlot.set(slotKey, proposalId);
90
+ // Store the checkpoint proposal as core (without lastBlock) to avoid duplication
91
+ await this.checkpointProposals.set(proposalId, proposal.toCore().toBuffer());
92
+ // Store the extracted block proposal separately
93
+ if (blockProposal) {
94
+ await this.proposals.set(blockProposal.archive.toString(), blockProposal.withoutSignedTxs().toBuffer());
95
+ }
96
+ });
97
+ }
98
+ async getCheckpointProposal(id) {
99
+ const buffer = await this.checkpointProposals.getAsync(id);
100
+ try {
101
+ if (buffer && buffer.length > 0) {
102
+ return CheckpointProposal.fromBuffer(buffer);
103
+ }
104
+ } catch {
105
+ return Promise.resolve(undefined);
106
+ }
107
+ return Promise.resolve(undefined);
108
+ }
109
+ async hasCheckpointProposal(idOrProposal) {
110
+ const id = typeof idOrProposal === 'string' ? idOrProposal : idOrProposal.archive.toString();
111
+ return await this.checkpointProposals.hasAsync(id);
112
+ }
113
+ async addCheckpointAttestations(attestations) {
49
114
  await this.store.transactionAsync(async ()=>{
50
115
  for (const attestation of attestations){
51
116
  const slotNumber = attestation.payload.header.slotNumber;
@@ -53,7 +118,7 @@ export class KvAttestationPool {
53
118
  const sender = attestation.getSender();
54
119
  // Skip attestations with invalid signatures
55
120
  if (!sender) {
56
- this.log.warn(`Skipping attestation with invalid signature for slot ${slotNumber}`, {
121
+ this.log.warn(`Skipping checkpoint attestation with invalid signature for slot ${slotNumber}`, {
57
122
  signature: attestation.signature.toString(),
58
123
  slotNumber,
59
124
  proposalId
@@ -61,10 +126,10 @@ export class KvAttestationPool {
61
126
  continue;
62
127
  }
63
128
  const address = sender.toString();
64
- await this.attestations.set(this.getAttestationKey(slotNumber, proposalId, address), attestation.toBuffer());
65
- await this.proposalsForSlot.set(slotNumber, proposalId.toString());
66
- await this.attestationsForProposal.set(this.getProposalKey(slotNumber, proposalId), this.getAttestationKey(slotNumber, proposalId, address));
67
- this.log.verbose(`Added attestation for slot ${slotNumber} from ${address}`, {
129
+ await this.checkpointAttestations.set(this.getAttestationKey(slotNumber, proposalId, address), attestation.toBuffer());
130
+ await this.checkpointProposalsForSlot.set(slotNumber, proposalId.toString());
131
+ await this.checkpointAttestationsForProposal.set(this.getProposalKey(slotNumber, proposalId), this.getAttestationKey(slotNumber, proposalId, address));
132
+ this.log.verbose(`Added checkpoint attestation for slot ${slotNumber} from ${address}`, {
68
133
  signature: attestation.signature.toString(),
69
134
  slotNumber,
70
135
  address,
@@ -73,91 +138,53 @@ export class KvAttestationPool {
73
138
  }
74
139
  });
75
140
  }
76
- async getAttestationsForSlot(slot) {
77
- const proposalIds = await toArray(this.proposalsForSlot.getValuesAsync(slot));
141
+ async getCheckpointAttestationsForSlot(slot) {
142
+ const proposalIds = await toArray(this.checkpointProposalsForSlot.getValuesAsync(slot));
78
143
  const attestations = [];
79
144
  for (const proposalId of proposalIds){
80
- attestations.push(...await this.getAttestationsForSlotAndProposal(slot, proposalId));
145
+ attestations.push(...await this.getCheckpointAttestationsForSlotAndProposal(slot, proposalId));
81
146
  }
82
147
  return attestations;
83
148
  }
84
- async getAttestationsForSlotAndProposal(slot, proposalId) {
85
- const attestationIds = await toArray(this.attestationsForProposal.getValuesAsync(this.getProposalKey(slot, proposalId)));
149
+ async getCheckpointAttestationsForSlotAndProposal(slot, proposalId) {
150
+ const attestationIds = await toArray(this.checkpointAttestationsForProposal.getValuesAsync(this.getProposalKey(slot, proposalId)));
86
151
  const attestations = [];
87
- // alternatively iterate this.attestaions starting from slot-proposal-EthAddress.zero
88
152
  for (const id of attestationIds){
89
- const buf = await this.attestations.getAsync(id);
153
+ const buf = await this.checkpointAttestations.getAsync(id);
90
154
  if (!buf) {
91
- // this should not happen unless we lost writes
92
- throw new Error('Attestation not found ' + id);
155
+ throw new Error('Checkpoint attestation not found ' + id);
93
156
  }
94
- const attestation = BlockAttestation.fromBuffer(buf);
157
+ const attestation = CheckpointAttestation.fromBuffer(buf);
95
158
  attestations.push(attestation);
96
159
  }
97
160
  return attestations;
98
161
  }
99
- async deleteAttestationsOlderThan(oldestSlot) {
100
- const olderThan = await toArray(this.proposalsForSlot.keysAsync({
162
+ async deleteCheckpointAttestationsOlderThan(oldestSlot) {
163
+ const olderThan = await toArray(this.checkpointProposalsForSlot.keysAsync({
101
164
  end: oldestSlot
102
165
  }));
103
166
  for (const oldSlot of olderThan){
104
- await this.deleteAttestationsForSlot(SlotNumber(oldSlot));
167
+ await this.deleteCheckpointAttestationsForSlot(SlotNumber(oldSlot));
105
168
  }
106
169
  }
107
- async deleteAttestationsForSlot(slot) {
170
+ async deleteCheckpointAttestationsForSlot(slot) {
108
171
  let numberOfAttestations = 0;
109
172
  await this.store.transactionAsync(async ()=>{
110
- const proposalIds = await toArray(this.proposalsForSlot.getValuesAsync(slot));
173
+ const proposalIds = await toArray(this.checkpointProposalsForSlot.getValuesAsync(slot));
111
174
  for (const proposalId of proposalIds){
112
- const attestations = await toArray(this.attestationsForProposal.getValuesAsync(this.getProposalKey(slot, proposalId)));
175
+ const attestations = await toArray(this.checkpointAttestationsForProposal.getValuesAsync(this.getProposalKey(slot, proposalId)));
113
176
  numberOfAttestations += attestations.length;
114
177
  for (const attestation of attestations){
115
- await this.attestations.delete(attestation);
178
+ await this.checkpointAttestations.delete(attestation);
116
179
  }
117
- await this.proposals.delete(proposalId);
118
- await this.attestationsForProposal.delete(this.getProposalKey(slot, proposalId));
180
+ await this.checkpointProposals.delete(proposalId);
181
+ await this.checkpointAttestationsForProposal.delete(this.getProposalKey(slot, proposalId));
119
182
  }
120
- // Delete from proposalsForSlot
121
- await this.proposalsForSlot.delete(slot);
122
- this.log.verbose(`Removed ${numberOfAttestations} attestations for slot ${slot}`);
183
+ await this.checkpointProposalsForSlot.delete(slot);
184
+ this.log.verbose(`Removed ${numberOfAttestations} checkpoint attestations for slot ${slot}`);
123
185
  });
124
186
  }
125
- async deleteAttestationsForSlotAndProposal(slot, proposalId) {
126
- let numberOfAttestations = 0;
127
- await this.store.transactionAsync(async ()=>{
128
- const attestations = await toArray(this.attestationsForProposal.getValuesAsync(this.getProposalKey(slot, proposalId)));
129
- numberOfAttestations += attestations.length;
130
- for (const attestation of attestations){
131
- await this.attestations.delete(attestation);
132
- }
133
- await this.proposals.delete(proposalId);
134
- await this.proposalsForSlot.deleteValue(slot, proposalId);
135
- await this.attestationsForProposal.delete(this.getProposalKey(slot, proposalId));
136
- this.log.verbose(`Removed ${numberOfAttestations} attestations for slot ${slot} and proposal ${proposalId}`);
137
- });
138
- }
139
- async deleteAttestations(attestations) {
140
- await this.store.transactionAsync(async ()=>{
141
- for (const attestation of attestations){
142
- const slotNumber = attestation.payload.header.slotNumber;
143
- const proposalId = attestation.archive;
144
- const sender = attestation.getSender();
145
- // Skip attestations with invalid signatures
146
- if (!sender) {
147
- this.log.warn(`Skipping deletion of attestation with invalid signature for slot ${slotNumber}`);
148
- continue;
149
- }
150
- const address = sender.toString();
151
- const key = this.getAttestationKey(slotNumber, proposalId, address);
152
- if (await this.attestations.hasAsync(key)) {
153
- await this.attestations.delete(key);
154
- }
155
- await this.attestationsForProposal.deleteValue(this.getProposalKey(slotNumber, proposalId), this.getAttestationKey(slotNumber, proposalId, address));
156
- this.log.debug(`Deleted attestation for slot ${slotNumber} from ${address}`);
157
- }
158
- });
159
- }
160
- async hasAttestation(attestation) {
187
+ async hasCheckpointAttestation(attestation) {
161
188
  const slotNumber = attestation.payload.header.slotNumber;
162
189
  const proposalId = attestation.archive;
163
190
  const sender = attestation.getSender();
@@ -167,47 +194,25 @@ export class KvAttestationPool {
167
194
  }
168
195
  const address = sender.toString();
169
196
  const key = this.getAttestationKey(slotNumber, proposalId, address);
170
- return await this.attestations.hasAsync(key);
197
+ return await this.checkpointAttestations.hasAsync(key);
171
198
  }
172
- async getBlockProposal(id) {
173
- const buffer = await this.proposals.getAsync(id);
174
- try {
175
- if (buffer && buffer.length > 0) {
176
- return BlockProposal.fromBuffer(buffer);
177
- }
178
- } catch {
179
- return Promise.resolve(undefined);
180
- }
181
- return Promise.resolve(undefined);
199
+ canAddProposal(_block) {
200
+ // TODO(palla/mbps): implement proposal cap logic
201
+ return Promise.resolve(true);
182
202
  }
183
- async hasBlockProposal(idOrProposal) {
184
- const id = typeof idOrProposal === 'string' ? idOrProposal : idOrProposal.payload.archive.toString();
185
- return await this.proposals.hasAsync(id);
203
+ async canAddCheckpointProposal(proposal) {
204
+ // TODO(palla/mbps): Adjust checkpoint proposal limit to 1. Also connect to slashing condition in the caller.
205
+ return await this.checkpointProposals.hasAsync(proposal.archive.toString()) || !await this.hasReachedCheckpointProposalCap(proposal.slotNumber);
186
206
  }
187
- async addBlockProposal(blockProposal) {
188
- await this.store.transactionAsync(async ()=>{
189
- const slotKey = blockProposal.slotNumber;
190
- const proposalId = blockProposal.archive.toString();
191
- if (!await this.canAddProposal(blockProposal)) {
192
- throw new ProposalSlotCapExceededError(`Maximum proposals per slot reached: slot=${slotKey} cap=${MAX_PROPOSALS_PER_SLOT} proposal=${proposalId}`);
193
- }
194
- await this.proposalsForSlot.set(slotKey, proposalId);
195
- // Always update the stored proposal buffer so re-adds overwrite with latest data
196
- await this.proposals.set(proposalId, blockProposal.toBuffer());
197
- });
207
+ async canAddCheckpointAttestation(attestation, committeeSize) {
208
+ return await this.hasCheckpointAttestation(attestation) || !await this.hasReachedCheckpointAttestationCap(attestation.payload.header.slotNumber, attestation.archive.toString(), committeeSize);
198
209
  }
199
- async hasReachedProposalCap(slot) {
200
- const uniqueProposalCount = await this.proposalsForSlot.getValueCountAsync(slot);
210
+ async hasReachedCheckpointProposalCap(slot) {
211
+ const uniqueProposalCount = await this.checkpointProposalsForSlot.getValueCountAsync(slot);
201
212
  return uniqueProposalCount >= MAX_PROPOSALS_PER_SLOT;
202
213
  }
203
- async hasReachedAttestationCap(slot, proposalId, committeeSize) {
214
+ async hasReachedCheckpointAttestationCap(slot, proposalId, committeeSize) {
204
215
  const limit = committeeSize + ATTESTATION_CAP_BUFFER;
205
- return await this.attestationsForProposal.getValueCountAsync(this.getProposalKey(slot, proposalId)) >= limit;
206
- }
207
- async canAddProposal(block) {
208
- return await this.proposals.hasAsync(block.archive.toString()) || !await this.hasReachedProposalCap(block.slotNumber);
209
- }
210
- async canAddAttestation(attestation, committeeSize) {
211
- return await this.hasAttestation(attestation) || !await this.hasReachedAttestationCap(attestation.payload.header.slotNumber, attestation.archive.toString(), committeeSize);
216
+ return await this.checkpointAttestationsForProposal.getValueCountAsync(this.getProposalKey(slot, proposalId)) >= limit;
212
217
  }
213
218
  }
@@ -1,30 +1,31 @@
1
1
  import type { SlotNumber } from '@aztec/foundation/branded-types';
2
- import type { BlockAttestation, BlockProposal } from '@aztec/stdlib/p2p';
2
+ import type { BlockProposal, CheckpointAttestation, CheckpointProposal, CheckpointProposalCore } from '@aztec/stdlib/p2p';
3
3
  import { type TelemetryClient } from '@aztec/telemetry-client';
4
4
  import type { AttestationPool } from './attestation_pool.js';
5
5
  export declare class InMemoryAttestationPool implements AttestationPool {
6
- #private;
7
6
  private log;
8
7
  private metrics;
9
- private attestations;
10
8
  private proposals;
9
+ private checkpointAttestations;
10
+ private checkpointProposals;
11
11
  constructor(telemetry?: TelemetryClient, log?: import("@aztec/foundation/log").Logger);
12
12
  private poolStats;
13
13
  isEmpty(): Promise<boolean>;
14
- getAttestationsForSlot(slot: SlotNumber): Promise<BlockAttestation[]>;
15
- getAttestationsForSlotAndProposal(slot: SlotNumber, proposalId: string): Promise<BlockAttestation[]>;
16
- addAttestations(attestations: BlockAttestation[]): Promise<void>;
17
- deleteAttestationsOlderThan(oldestSlot: SlotNumber): Promise<void>;
18
- deleteAttestationsForSlot(slot: SlotNumber): Promise<void>;
19
- deleteAttestationsForSlotAndProposal(slot: SlotNumber, proposalId: string): Promise<void>;
20
- deleteAttestations(attestations: BlockAttestation[]): Promise<void>;
21
- hasAttestation(attestation: BlockAttestation): Promise<boolean>;
22
14
  addBlockProposal(blockProposal: BlockProposal): Promise<void>;
23
15
  getBlockProposal(id: string): Promise<BlockProposal | undefined>;
24
16
  hasBlockProposal(idOrProposal: string | BlockProposal): Promise<boolean>;
25
- hasReachedProposalCap(slot: SlotNumber): Promise<boolean>;
26
- hasReachedAttestationCap(slot: SlotNumber, proposalId: string, committeeSize: number): Promise<boolean>;
27
- canAddProposal(block: BlockProposal): Promise<boolean>;
28
- canAddAttestation(attestation: BlockAttestation, committeeSize: number): Promise<boolean>;
17
+ canAddProposal(_block: BlockProposal): Promise<boolean>;
18
+ addCheckpointProposal(proposal: CheckpointProposal): Promise<void>;
19
+ getCheckpointProposal(id: string): Promise<CheckpointProposalCore | undefined>;
20
+ hasCheckpointProposal(idOrProposal: string | CheckpointProposal): Promise<boolean>;
21
+ addCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void>;
22
+ getCheckpointAttestationsForSlot(slot: SlotNumber): Promise<CheckpointAttestation[]>;
23
+ getCheckpointAttestationsForSlotAndProposal(slot: SlotNumber, proposalId: string): Promise<CheckpointAttestation[]>;
24
+ deleteCheckpointAttestationsOlderThan(oldestSlot: SlotNumber): Promise<void>;
25
+ hasReachedCheckpointProposalCap(slot: SlotNumber): Promise<boolean>;
26
+ hasReachedCheckpointAttestationCap(slot: SlotNumber, proposalId: string, committeeSize: number): Promise<boolean>;
27
+ canAddCheckpointProposal(proposal: CheckpointProposal): Promise<boolean>;
28
+ canAddCheckpointAttestation(attestation: CheckpointAttestation, committeeSize: number): Promise<boolean>;
29
+ hasCheckpointAttestation(attestation: CheckpointAttestation): Promise<boolean>;
29
30
  }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5X2F0dGVzdGF0aW9uX3Bvb2wuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tZW1fcG9vbHMvYXR0ZXN0YXRpb25fcG9vbC9tZW1vcnlfYXR0ZXN0YXRpb25fcG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0seUJBQXlCLENBQUM7QUFHbkYsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHN0QscUJBQWEsdUJBQXdCLFlBQVcsZUFBZTs7SUFZM0QsT0FBTyxDQUFDLEdBQUc7SUFYYixPQUFPLENBQUMsT0FBTyxDQUF3QztJQUd2RCxPQUFPLENBQUMsWUFBWSxDQUdsQjtJQUNGLE9BQU8sQ0FBQyxTQUFTLENBQTZCO0lBRTlDLFlBQ0UsU0FBUyxHQUFFLGVBQXNDLEVBQ3pDLEdBQUcseUNBQXVDLEVBS25EO0lBRUQsT0FBTyxDQUFDLFNBQVMsQ0FJZjtJQUVLLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBRWpDO0lBRU0sc0JBQXNCLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQU0zRTtJQUVNLGlDQUFpQyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQVMxRztJQUVNLGVBQWUsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBK0J0RTtJQWNZLDJCQUEyQixDQUFDLFVBQVUsRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQW1COUU7SUFFTSx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FnQmhFO0lBRU0sb0NBQW9DLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FjL0Y7SUFFTSxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBc0J6RTtJQUVNLGNBQWMsQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQXFCckU7SUFFTSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FRbkU7SUFFTSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLENBRXRFO0lBRU0sZ0JBQWdCLENBQUMsWUFBWSxFQUFFLE1BQU0sR0FBRyxhQUFhLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUc5RTtJQUVNLHFCQUFxQixDQUFDLElBQUksRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUkvRDtJQUVNLHdCQUF3QixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FJN0c7SUFFWSxjQUFjLENBQUMsS0FBSyxFQUFFLGFBQWEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBRWxFO0lBRVksaUJBQWlCLENBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQVNyRztDQUNGIn0=
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5X2F0dGVzdGF0aW9uX3Bvb2wuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tZW1fcG9vbHMvYXR0ZXN0YXRpb25fcG9vbC9tZW1vcnlfYXR0ZXN0YXRpb25fcG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRSxPQUFPLEtBQUssRUFDVixhQUFhLEVBQ2IscUJBQXFCLEVBQ3JCLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdkIsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0seUJBQXlCLENBQUM7QUFJbkYsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHN0QscUJBQWEsdUJBQXdCLFlBQVcsZUFBZTtJQWUzRCxPQUFPLENBQUMsR0FBRztJQWRiLE9BQU8sQ0FBQyxPQUFPLENBQTZDO0lBRTVELE9BQU8sQ0FBQyxTQUFTLENBQTZCO0lBSTlDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FHNUI7SUFDRixPQUFPLENBQUMsbUJBQW1CLENBQXNDO0lBRWpFLFlBQ0UsU0FBUyxHQUFFLGVBQXNDLEVBQ3pDLEdBQUcseUNBQXVDLEVBTW5EO0lBRUQsT0FBTyxDQUFDLFNBQVMsQ0FJZjtJQUVLLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBRWpDO0lBRU0sZ0JBQWdCLENBQUMsYUFBYSxFQUFFLGFBQWEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBSW5FO0lBRU0sZ0JBQWdCLENBQUMsRUFBRSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQyxDQUV0RTtJQUVNLGdCQUFnQixDQUFDLFlBQVksRUFBRSxNQUFNLEdBQUcsYUFBYSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FHOUU7SUFFTSxjQUFjLENBQUMsTUFBTSxFQUFFLGFBQWEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBRzdEO0lBSVkscUJBQXFCLENBQUMsUUFBUSxFQUFFLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0EyQjlFO0lBRU0scUJBQXFCLENBQUMsRUFBRSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsc0JBQXNCLEdBQUcsU0FBUyxDQUFDLENBRXBGO0lBRU0scUJBQXFCLENBQUMsWUFBWSxFQUFFLE1BQU0sR0FBRyxrQkFBa0IsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBR3hGO0lBRU0seUJBQXlCLENBQUMsWUFBWSxFQUFFLHFCQUFxQixFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQTZCckY7SUFFTSxnQ0FBZ0MsQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBTTFGO0lBRU0sMkNBQTJDLENBQ2hELElBQUksRUFBRSxVQUFVLEVBQ2hCLFVBQVUsRUFBRSxNQUFNLEdBQ2pCLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBU2xDO0lBRU0scUNBQXFDLENBQUMsVUFBVSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBa0JsRjtJQUVNLCtCQUErQixDQUFDLElBQUksRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUl6RTtJQUVNLGtDQUFrQyxDQUN2QyxJQUFJLEVBQUUsVUFBVSxFQUNoQixVQUFVLEVBQUUsTUFBTSxFQUNsQixhQUFhLEVBQUUsTUFBTSxHQUNwQixPQUFPLENBQUMsT0FBTyxDQUFDLENBSWxCO0lBRVksd0JBQXdCLENBQUMsUUFBUSxFQUFFLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FLcEY7SUFFWSwyQkFBMkIsQ0FDdEMsV0FBVyxFQUFFLHFCQUFxQixFQUNsQyxhQUFhLEVBQUUsTUFBTSxHQUNwQixPQUFPLENBQUMsT0FBTyxDQUFDLENBU2xCO0lBRU0sd0JBQXdCLENBQUMsV0FBVyxFQUFFLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FxQnBGO0NBQ0YifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"memory_attestation_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/memory_attestation_pool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAGnF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,qBAAa,uBAAwB,YAAW,eAAe;;IAY3D,OAAO,CAAC,GAAG;IAXb,OAAO,CAAC,OAAO,CAAwC;IAGvD,OAAO,CAAC,YAAY,CAGlB;IACF,OAAO,CAAC,SAAS,CAA6B;IAE9C,YACE,SAAS,GAAE,eAAsC,EACzC,GAAG,yCAAuC,EAKnD;IAED,OAAO,CAAC,SAAS,CAIf;IAEK,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAEjC;IAEM,sBAAsB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAM3E;IAEM,iCAAiC,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAS1G;IAEM,eAAe,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BtE;IAcY,2BAA2B,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB9E;IAEM,yBAAyB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBhE;IAEM,oCAAoC,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAc/F;IAEM,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBzE;IAEM,cAAc,CAAC,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBrE;IAEM,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAQnE;IAEM,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAEtE;IAEM,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAG9E;IAEM,qBAAqB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAI/D;IAEM,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAI7G;IAEY,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAElE;IAEY,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASrG;CACF"}
1
+ {"version":3,"file":"memory_attestation_pool.d.ts","sourceRoot":"","sources":["../../../src/mem_pools/attestation_pool/memory_attestation_pool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAElE,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAInF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAG7D,qBAAa,uBAAwB,YAAW,eAAe;IAe3D,OAAO,CAAC,GAAG;IAdb,OAAO,CAAC,OAAO,CAA6C;IAE5D,OAAO,CAAC,SAAS,CAA6B;IAI9C,OAAO,CAAC,sBAAsB,CAG5B;IACF,OAAO,CAAC,mBAAmB,CAAsC;IAEjE,YACE,SAAS,GAAE,eAAsC,EACzC,GAAG,yCAAuC,EAMnD;IAED,OAAO,CAAC,SAAS,CAIf;IAEK,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAEjC;IAEM,gBAAgB,CAAC,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAInE;IAEM,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CAEtE;IAEM,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAG9E;IAEM,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAG7D;IAIY,qBAAqB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B9E;IAEM,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAEpF;IAEM,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAGxF;IAEM,yBAAyB,CAAC,YAAY,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BrF;IAEM,gCAAgC,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAM1F;IAEM,2CAA2C,CAChD,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,EAAE,CAAC,CASlC;IAEM,qCAAqC,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBlF;IAEM,+BAA+B,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAIzE;IAEM,kCAAkC,CACvC,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,OAAO,CAAC,CAIlB;IAEY,wBAAwB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAKpF;IAEY,2BAA2B,CACtC,WAAW,EAAE,qBAAqB,EAClC,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,OAAO,CAAC,CASlB;IAEM,wBAAwB,CAAC,WAAW,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBpF;CACF"}