@aztec/p2p 0.0.0-test.1 → 0.0.1-commit.1142ef1

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 (443) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +1 -1
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +22 -9
  4. package/dest/client/factory.d.ts +15 -5
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +60 -25
  7. package/dest/client/index.d.ts +2 -1
  8. package/dest/client/index.d.ts.map +1 -1
  9. package/dest/client/index.js +1 -0
  10. package/dest/client/interface.d.ts +170 -0
  11. package/dest/client/interface.d.ts.map +1 -0
  12. package/dest/client/interface.js +9 -0
  13. package/dest/client/p2p_client.d.ts +75 -193
  14. package/dest/client/p2p_client.d.ts.map +1 -1
  15. package/dest/client/p2p_client.js +757 -228
  16. package/dest/config.d.ts +148 -125
  17. package/dest/config.d.ts.map +1 -1
  18. package/dest/config.js +180 -34
  19. package/dest/enr/generate-enr.d.ts +11 -3
  20. package/dest/enr/generate-enr.d.ts.map +1 -1
  21. package/dest/enr/generate-enr.js +27 -5
  22. package/dest/enr/index.d.ts +1 -1
  23. package/dest/errors/attestation-pool.error.d.ts +7 -0
  24. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  25. package/dest/errors/attestation-pool.error.js +12 -0
  26. package/dest/errors/reqresp.error.d.ts +1 -1
  27. package/dest/errors/reqresp.error.d.ts.map +1 -1
  28. package/dest/index.d.ts +4 -1
  29. package/dest/index.d.ts.map +1 -1
  30. package/dest/index.js +2 -0
  31. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +104 -25
  32. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  34. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  35. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +288 -174
  36. package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
  37. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +29 -11
  38. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  39. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +168 -62
  40. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +24 -10
  41. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  42. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +133 -82
  43. package/dest/mem_pools/attestation_pool/mocks.d.ts +232 -11
  44. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  45. package/dest/mem_pools/attestation_pool/mocks.js +15 -20
  46. package/dest/mem_pools/index.d.ts +1 -1
  47. package/dest/mem_pools/instrumentation.d.ts +16 -12
  48. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  49. package/dest/mem_pools/instrumentation.js +55 -40
  50. package/dest/mem_pools/interface.d.ts +3 -4
  51. package/dest/mem_pools/interface.d.ts.map +1 -1
  52. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +70 -16
  53. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  54. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +452 -142
  55. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +18 -0
  56. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  57. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +56 -0
  58. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +83 -0
  59. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  60. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +5 -0
  61. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts +15 -0
  62. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts.map +1 -0
  63. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.js +88 -0
  64. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  65. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  66. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  67. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  68. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  69. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +76 -0
  70. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  71. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  72. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  73. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  74. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  75. package/dest/mem_pools/tx_pool/index.js +0 -1
  76. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  77. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  78. package/dest/mem_pools/tx_pool/priority.js +7 -2
  79. package/dest/mem_pools/tx_pool/tx_pool.d.ts +72 -11
  80. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  81. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  82. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  83. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +276 -45
  84. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +7 -5
  85. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  86. package/dest/msg_validators/attestation_validator/attestation_validator.js +48 -10
  87. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
  88. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  89. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +64 -0
  90. package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
  91. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
  92. package/dest/msg_validators/attestation_validator/index.js +1 -0
  93. package/dest/msg_validators/index.d.ts +2 -2
  94. package/dest/msg_validators/index.d.ts.map +1 -1
  95. package/dest/msg_validators/index.js +1 -1
  96. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +10 -0
  97. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -0
  98. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.js +36 -0
  99. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  100. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  101. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  102. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  103. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  104. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  105. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  106. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  107. package/dest/msg_validators/proposal_validator/index.js +3 -0
  108. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  109. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  110. package/dest/msg_validators/proposal_validator/proposal_validator.js +80 -0
  111. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  112. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  113. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +183 -0
  114. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  115. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  116. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +3 -0
  117. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -0
  118. package/dest/msg_validators/tx_validator/allowed_public_setup.js +27 -0
  119. package/dest/msg_validators/tx_validator/archive_cache.d.ts +14 -0
  120. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -0
  121. package/dest/msg_validators/tx_validator/archive_cache.js +22 -0
  122. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +2 -2
  123. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  124. package/dest/msg_validators/tx_validator/block_header_validator.js +4 -4
  125. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  126. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  127. package/dest/msg_validators/tx_validator/data_validator.js +56 -86
  128. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +1 -3
  129. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  130. package/dest/msg_validators/tx_validator/double_spend_validator.js +21 -27
  131. package/dest/msg_validators/tx_validator/factory.d.ts +16 -0
  132. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -0
  133. package/dest/msg_validators/tx_validator/factory.js +74 -0
  134. package/dest/msg_validators/tx_validator/gas_validator.d.ts +11 -0
  135. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -0
  136. package/dest/msg_validators/tx_validator/gas_validator.js +115 -0
  137. package/dest/msg_validators/tx_validator/index.d.ts +8 -1
  138. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  139. package/dest/msg_validators/tx_validator/index.js +7 -0
  140. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +9 -5
  141. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  142. package/dest/msg_validators/tx_validator/metadata_validator.js +39 -20
  143. package/dest/msg_validators/tx_validator/phases_validator.d.ts +14 -0
  144. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -0
  145. package/dest/msg_validators/tx_validator/phases_validator.js +93 -0
  146. package/dest/msg_validators/tx_validator/test_utils.d.ts +17 -0
  147. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -0
  148. package/dest/msg_validators/tx_validator/test_utils.js +22 -0
  149. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +13 -0
  150. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -0
  151. package/dest/msg_validators/tx_validator/timestamp_validator.js +32 -0
  152. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +8 -0
  153. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -0
  154. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +24 -0
  155. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +1 -1
  156. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  157. package/dest/msg_validators/tx_validator/tx_proof_validator.js +6 -5
  158. package/dest/services/data_store.d.ts +1 -1
  159. package/dest/services/data_store.d.ts.map +1 -1
  160. package/dest/services/discv5/discV5_service.d.ts +10 -9
  161. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  162. package/dest/services/discv5/discV5_service.js +63 -36
  163. package/dest/services/dummy_service.d.ts +54 -11
  164. package/dest/services/dummy_service.d.ts.map +1 -1
  165. package/dest/services/dummy_service.js +91 -5
  166. package/dest/services/encoding.d.ts +26 -7
  167. package/dest/services/encoding.d.ts.map +1 -1
  168. package/dest/services/encoding.js +76 -6
  169. package/dest/services/gossipsub/scoring.d.ts +1 -1
  170. package/dest/services/index.d.ts +5 -1
  171. package/dest/services/index.d.ts.map +1 -1
  172. package/dest/services/index.js +4 -0
  173. package/dest/services/libp2p/instrumentation.d.ts +20 -0
  174. package/dest/services/libp2p/instrumentation.d.ts.map +1 -0
  175. package/dest/services/libp2p/instrumentation.js +111 -0
  176. package/dest/services/libp2p/libp2p_service.d.ts +102 -96
  177. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  178. package/dest/services/libp2p/libp2p_service.js +1307 -301
  179. package/dest/services/peer-manager/interface.d.ts +23 -0
  180. package/dest/services/peer-manager/interface.d.ts.map +1 -0
  181. package/dest/services/peer-manager/interface.js +1 -0
  182. package/dest/services/peer-manager/metrics.d.ts +11 -2
  183. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  184. package/dest/services/peer-manager/metrics.js +29 -12
  185. package/dest/services/peer-manager/peer_manager.d.ts +103 -23
  186. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  187. package/dest/services/peer-manager/peer_manager.js +551 -82
  188. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  189. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  190. package/dest/services/peer-manager/peer_scoring.js +37 -2
  191. package/dest/services/reqresp/config.d.ts +11 -9
  192. package/dest/services/reqresp/config.d.ts.map +1 -1
  193. package/dest/services/reqresp/config.js +18 -4
  194. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +2 -2
  195. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  196. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +10 -6
  197. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +31 -17
  198. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  199. package/dest/services/reqresp/connection-sampler/connection_sampler.js +142 -84
  200. package/dest/services/reqresp/index.d.ts +3 -2
  201. package/dest/services/reqresp/index.d.ts.map +1 -1
  202. package/dest/services/reqresp/index.js +2 -1
  203. package/dest/services/reqresp/interface.d.ts +73 -24
  204. package/dest/services/reqresp/interface.d.ts.map +1 -1
  205. package/dest/services/reqresp/interface.js +46 -27
  206. package/dest/services/reqresp/metrics.d.ts +1 -1
  207. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  208. package/dest/services/reqresp/metrics.js +5 -21
  209. package/dest/services/reqresp/protocols/auth.d.ts +43 -0
  210. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -0
  211. package/dest/services/reqresp/protocols/auth.js +71 -0
  212. package/dest/services/reqresp/protocols/block.d.ts +6 -1
  213. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  214. package/dest/services/reqresp/protocols/block.js +30 -6
  215. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +30 -0
  216. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -0
  217. package/dest/services/reqresp/protocols/block_txs/bitvector.js +75 -0
  218. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +11 -0
  219. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -0
  220. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +39 -0
  221. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +47 -0
  222. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -0
  223. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +75 -0
  224. package/dest/services/reqresp/protocols/block_txs/index.d.ts +4 -0
  225. package/dest/services/reqresp/protocols/block_txs/index.d.ts.map +1 -0
  226. package/dest/services/reqresp/protocols/block_txs/index.js +3 -0
  227. package/dest/services/reqresp/protocols/goodbye.d.ts +3 -5
  228. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  229. package/dest/services/reqresp/protocols/goodbye.js +7 -7
  230. package/dest/services/reqresp/protocols/index.d.ts +3 -1
  231. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  232. package/dest/services/reqresp/protocols/index.js +2 -0
  233. package/dest/services/reqresp/protocols/ping.d.ts +1 -3
  234. package/dest/services/reqresp/protocols/ping.d.ts.map +1 -1
  235. package/dest/services/reqresp/protocols/status.d.ts +40 -7
  236. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  237. package/dest/services/reqresp/protocols/status.js +75 -5
  238. package/dest/services/reqresp/protocols/tx.d.ts +14 -4
  239. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  240. package/dest/services/reqresp/protocols/tx.js +34 -6
  241. package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
  242. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +6 -4
  243. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  244. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -2
  245. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  246. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  247. package/dest/services/reqresp/rate-limiter/rate_limits.js +21 -1
  248. package/dest/services/reqresp/reqresp.d.ts +24 -66
  249. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  250. package/dest/services/reqresp/reqresp.js +699 -230
  251. package/dest/services/reqresp/status.d.ts +10 -4
  252. package/dest/services/reqresp/status.d.ts.map +1 -1
  253. package/dest/services/reqresp/status.js +9 -2
  254. package/dest/services/service.d.ts +37 -20
  255. package/dest/services/service.d.ts.map +1 -1
  256. package/dest/services/tx_collection/config.d.ts +25 -0
  257. package/dest/services/tx_collection/config.d.ts.map +1 -0
  258. package/dest/services/tx_collection/config.js +58 -0
  259. package/dest/services/tx_collection/fast_tx_collection.d.ts +51 -0
  260. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -0
  261. package/dest/services/tx_collection/fast_tx_collection.js +300 -0
  262. package/dest/services/tx_collection/index.d.ts +3 -0
  263. package/dest/services/tx_collection/index.d.ts.map +1 -0
  264. package/dest/services/tx_collection/index.js +2 -0
  265. package/dest/services/tx_collection/instrumentation.d.ts +10 -0
  266. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -0
  267. package/dest/services/tx_collection/instrumentation.js +24 -0
  268. package/dest/services/tx_collection/slow_tx_collection.d.ts +53 -0
  269. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -0
  270. package/dest/services/tx_collection/slow_tx_collection.js +177 -0
  271. package/dest/services/tx_collection/tx_collection.d.ts +110 -0
  272. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -0
  273. package/dest/services/tx_collection/tx_collection.js +128 -0
  274. package/dest/services/tx_collection/tx_collection_sink.d.ts +30 -0
  275. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -0
  276. package/dest/services/tx_collection/tx_collection_sink.js +111 -0
  277. package/dest/services/tx_collection/tx_source.d.ts +18 -0
  278. package/dest/services/tx_collection/tx_source.d.ts.map +1 -0
  279. package/dest/services/tx_collection/tx_source.js +31 -0
  280. package/dest/services/tx_provider.d.ts +51 -0
  281. package/dest/services/tx_provider.d.ts.map +1 -0
  282. package/dest/services/tx_provider.js +219 -0
  283. package/dest/services/tx_provider_instrumentation.d.ts +16 -0
  284. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -0
  285. package/dest/services/tx_provider_instrumentation.js +34 -0
  286. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
  287. package/dest/test-helpers/get-ports.d.ts +1 -1
  288. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  289. package/dest/test-helpers/index.d.ts +2 -1
  290. package/dest/test-helpers/index.d.ts.map +1 -1
  291. package/dest/test-helpers/index.js +1 -0
  292. package/dest/test-helpers/make-enrs.d.ts +1 -1
  293. package/dest/test-helpers/make-enrs.d.ts.map +1 -1
  294. package/dest/test-helpers/make-enrs.js +4 -5
  295. package/dest/test-helpers/make-test-p2p-clients.d.ts +33 -5
  296. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  297. package/dest/test-helpers/make-test-p2p-clients.js +86 -16
  298. package/dest/test-helpers/mock-pubsub.d.ts +59 -0
  299. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -0
  300. package/dest/test-helpers/mock-pubsub.js +130 -0
  301. package/dest/test-helpers/mock-tx-helpers.d.ts +12 -0
  302. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -0
  303. package/dest/test-helpers/mock-tx-helpers.js +19 -0
  304. package/dest/test-helpers/reqresp-nodes.d.ts +15 -11
  305. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  306. package/dest/test-helpers/reqresp-nodes.js +62 -28
  307. package/dest/testbench/p2p_client_testbench_worker.d.ts +1 -1
  308. package/dest/testbench/p2p_client_testbench_worker.js +124 -35
  309. package/dest/testbench/parse_log_file.d.ts +1 -1
  310. package/dest/testbench/parse_log_file.js +4 -4
  311. package/dest/testbench/testbench.d.ts +1 -1
  312. package/dest/testbench/testbench.js +4 -4
  313. package/dest/testbench/worker_client_manager.d.ts +1 -6
  314. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  315. package/dest/testbench/worker_client_manager.js +17 -20
  316. package/dest/types/index.d.ts +4 -2
  317. package/dest/types/index.d.ts.map +1 -1
  318. package/dest/types/index.js +2 -0
  319. package/dest/util.d.ts +24 -16
  320. package/dest/util.d.ts.map +1 -1
  321. package/dest/util.js +75 -69
  322. package/dest/versioning.d.ts +4 -4
  323. package/dest/versioning.d.ts.map +1 -1
  324. package/dest/versioning.js +8 -3
  325. package/package.json +32 -27
  326. package/src/bootstrap/bootstrap.ts +27 -11
  327. package/src/client/factory.ts +139 -53
  328. package/src/client/index.ts +1 -0
  329. package/src/client/interface.ts +213 -0
  330. package/src/client/p2p_client.ts +471 -385
  331. package/src/config.ts +299 -134
  332. package/src/enr/generate-enr.ts +39 -6
  333. package/src/errors/attestation-pool.error.ts +13 -0
  334. package/src/index.ts +4 -0
  335. package/src/mem_pools/attestation_pool/attestation_pool.ts +119 -24
  336. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +344 -201
  337. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +233 -72
  338. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +199 -96
  339. package/src/mem_pools/attestation_pool/mocks.ts +21 -16
  340. package/src/mem_pools/instrumentation.ts +71 -48
  341. package/src/mem_pools/interface.ts +2 -4
  342. package/src/mem_pools/tx_pool/README.md +255 -0
  343. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +537 -155
  344. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +71 -0
  345. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +93 -0
  346. package/src/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.ts +108 -0
  347. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  348. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +91 -0
  349. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  350. package/src/mem_pools/tx_pool/index.ts +0 -1
  351. package/src/mem_pools/tx_pool/priority.ts +9 -2
  352. package/src/mem_pools/tx_pool/tx_pool.ts +75 -10
  353. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +225 -36
  354. package/src/msg_validators/attestation_validator/attestation_validator.ts +60 -14
  355. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +88 -0
  356. package/src/msg_validators/attestation_validator/index.ts +1 -0
  357. package/src/msg_validators/index.ts +1 -1
  358. package/src/msg_validators/msg_seen_validator/msg_seen_validator.ts +36 -0
  359. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  360. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  361. package/src/msg_validators/proposal_validator/index.ts +3 -0
  362. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  363. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +206 -0
  364. package/src/msg_validators/tx_validator/allowed_public_setup.ts +35 -0
  365. package/src/msg_validators/tx_validator/archive_cache.ts +28 -0
  366. package/src/msg_validators/tx_validator/block_header_validator.ts +5 -5
  367. package/src/msg_validators/tx_validator/data_validator.ts +89 -69
  368. package/src/msg_validators/tx_validator/double_spend_validator.ts +19 -17
  369. package/src/msg_validators/tx_validator/factory.ts +110 -0
  370. package/src/msg_validators/tx_validator/gas_validator.ts +134 -0
  371. package/src/msg_validators/tx_validator/index.ts +7 -0
  372. package/src/msg_validators/tx_validator/metadata_validator.ts +67 -22
  373. package/src/msg_validators/tx_validator/phases_validator.ts +116 -0
  374. package/src/msg_validators/tx_validator/test_utils.ts +43 -0
  375. package/src/msg_validators/tx_validator/timestamp_validator.ts +49 -0
  376. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +17 -0
  377. package/src/msg_validators/tx_validator/tx_proof_validator.ts +6 -5
  378. package/src/services/discv5/discV5_service.ts +84 -38
  379. package/src/services/dummy_service.ts +153 -9
  380. package/src/services/encoding.ts +83 -6
  381. package/src/services/index.ts +4 -0
  382. package/src/services/libp2p/instrumentation.ts +113 -0
  383. package/src/services/libp2p/libp2p_service.ts +1120 -329
  384. package/src/services/peer-manager/interface.ts +29 -0
  385. package/src/services/peer-manager/metrics.ts +38 -12
  386. package/src/services/peer-manager/peer_manager.ts +657 -80
  387. package/src/services/peer-manager/peer_scoring.ts +42 -3
  388. package/src/services/reqresp/config.ts +26 -9
  389. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +12 -6
  390. package/src/services/reqresp/connection-sampler/connection_sampler.ts +150 -95
  391. package/src/services/reqresp/index.ts +2 -0
  392. package/src/services/reqresp/interface.ts +92 -37
  393. package/src/services/reqresp/metrics.ts +11 -24
  394. package/src/services/reqresp/protocols/auth.ts +83 -0
  395. package/src/services/reqresp/protocols/block.ts +26 -4
  396. package/src/services/reqresp/protocols/block_txs/bitvector.ts +90 -0
  397. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +53 -0
  398. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +79 -0
  399. package/src/services/reqresp/protocols/block_txs/index.ts +3 -0
  400. package/src/services/reqresp/protocols/goodbye.ts +9 -7
  401. package/src/services/reqresp/protocols/index.ts +2 -0
  402. package/src/services/reqresp/protocols/status.ts +119 -5
  403. package/src/services/reqresp/protocols/tx.ts +36 -8
  404. package/src/services/reqresp/rate-limiter/rate_limiter.ts +12 -3
  405. package/src/services/reqresp/rate-limiter/rate_limits.ts +21 -1
  406. package/src/services/reqresp/reqresp.ts +387 -256
  407. package/src/services/reqresp/status.ts +12 -3
  408. package/src/services/service.ts +61 -22
  409. package/src/services/tx_collection/config.ts +84 -0
  410. package/src/services/tx_collection/fast_tx_collection.ts +341 -0
  411. package/src/services/tx_collection/index.ts +2 -0
  412. package/src/services/tx_collection/instrumentation.ts +26 -0
  413. package/src/services/tx_collection/slow_tx_collection.ts +233 -0
  414. package/src/services/tx_collection/tx_collection.ts +216 -0
  415. package/src/services/tx_collection/tx_collection_sink.ts +129 -0
  416. package/src/services/tx_collection/tx_source.ts +37 -0
  417. package/src/services/tx_provider.ts +232 -0
  418. package/src/services/tx_provider_instrumentation.ts +48 -0
  419. package/src/test-helpers/index.ts +1 -0
  420. package/src/test-helpers/make-enrs.ts +4 -5
  421. package/src/test-helpers/make-test-p2p-clients.ts +111 -21
  422. package/src/test-helpers/mock-pubsub.ts +188 -0
  423. package/src/test-helpers/mock-tx-helpers.ts +24 -0
  424. package/src/test-helpers/reqresp-nodes.ts +87 -36
  425. package/src/testbench/p2p_client_testbench_worker.ts +182 -32
  426. package/src/testbench/parse_log_file.ts +4 -4
  427. package/src/testbench/testbench.ts +4 -4
  428. package/src/testbench/worker_client_manager.ts +23 -24
  429. package/src/types/index.ts +2 -0
  430. package/src/util.ts +105 -91
  431. package/src/versioning.ts +11 -4
  432. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -56
  433. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  434. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -141
  435. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -8
  436. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  437. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -21
  438. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  439. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  440. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  441. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -174
  442. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -29
  443. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -1,30 +1,67 @@
1
- import { Fr } from '@aztec/foundation/fields';
1
+ import { SlotNumber } from '@aztec/foundation/branded-types';
2
+ import { Fr } from '@aztec/foundation/curves/bn254';
2
3
  import { toArray } from '@aztec/foundation/iterable';
3
4
  import { createLogger } from '@aztec/foundation/log';
4
5
  import type { AztecAsyncKVStore, AztecAsyncMap, AztecAsyncMultiMap } from '@aztec/kv-store';
5
- import { BlockAttestation } from '@aztec/stdlib/p2p';
6
+ import {
7
+ BlockProposal,
8
+ CheckpointAttestation,
9
+ CheckpointProposal,
10
+ type CheckpointProposalCore,
11
+ } from '@aztec/stdlib/p2p';
6
12
  import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
7
13
 
8
- import { PoolInstrumentation, PoolName } from '../instrumentation.js';
14
+ import { ProposalSlotCapExceededError } from '../../errors/attestation-pool.error.js';
15
+ import { PoolInstrumentation, PoolName, type PoolStatsCallback } from '../instrumentation.js';
9
16
  import type { AttestationPool } from './attestation_pool.js';
10
17
 
18
+ export const MAX_PROPOSALS_PER_SLOT = 5;
19
+ export const ATTESTATION_CAP_BUFFER = 10;
20
+
11
21
  export class KvAttestationPool implements AttestationPool {
12
- private metrics: PoolInstrumentation<BlockAttestation>;
22
+ private metrics: PoolInstrumentation<CheckpointAttestation>;
23
+
24
+ private proposals: AztecAsyncMap<
25
+ /* proposal.payload.archive */ string,
26
+ /* buffer representation of proposal */ Buffer
27
+ >;
13
28
 
14
- private attestations: AztecAsyncMap<string, Buffer>;
15
- private proposalsForSlot: AztecAsyncMultiMap<string, string>;
16
- private attestationsForProposal: AztecAsyncMultiMap<string, string>;
29
+ // Checkpoint attestation storage
30
+ private checkpointAttestations: AztecAsyncMap<string, Buffer>;
31
+ private checkpointProposals: AztecAsyncMap<string, Buffer>;
32
+ private checkpointProposalsForSlot: AztecAsyncMultiMap<number, string>;
33
+ private checkpointAttestationsForProposal: AztecAsyncMultiMap<string, string>;
17
34
 
18
35
  constructor(
19
36
  private store: AztecAsyncKVStore,
20
37
  telemetry: TelemetryClient = getTelemetryClient(),
21
38
  private log = createLogger('aztec:attestation_pool'),
22
39
  ) {
23
- this.attestations = store.openMap('attestations');
24
- this.proposalsForSlot = store.openMultiMap('proposals_for_slot');
25
- this.attestationsForProposal = store.openMultiMap('attestations_for_proposal');
40
+ this.proposals = store.openMap('proposals');
41
+
42
+ // Initialize checkpoint attestation storage
43
+ this.checkpointAttestations = store.openMap('checkpoint_attestations');
44
+ this.checkpointProposals = store.openMap('checkpoint_proposals');
45
+ this.checkpointProposalsForSlot = store.openMultiMap('checkpoint_proposals_for_slot');
46
+ this.checkpointAttestationsForProposal = store.openMultiMap('checkpoint_attestations_for_proposal');
47
+
48
+ this.metrics = new PoolInstrumentation(telemetry, PoolName.ATTESTATION_POOL, this.poolStats);
49
+ }
26
50
 
27
- this.metrics = new PoolInstrumentation(telemetry, PoolName.ATTESTATION_POOL);
51
+ private poolStats: PoolStatsCallback = async () => {
52
+ return {
53
+ itemCount: await this.checkpointAttestations.sizeAsync(),
54
+ };
55
+ };
56
+
57
+ public async isEmpty(): Promise<boolean> {
58
+ for await (const _ of this.checkpointAttestations.entriesAsync()) {
59
+ return false;
60
+ }
61
+ for await (const _ of this.proposals.entriesAsync()) {
62
+ return false;
63
+ }
64
+ return true;
28
65
  }
29
66
 
30
67
  private getProposalKey(slot: number | bigint | Fr | string, proposalId: Fr | string | Buffer): string {
@@ -33,8 +70,8 @@ export class KvAttestationPool implements AttestationPool {
33
70
  typeof proposalId === 'string'
34
71
  ? proposalId
35
72
  : Buffer.isBuffer(proposalId)
36
- ? Fr.fromBuffer(proposalId).toString()
37
- : proposalId.toString();
73
+ ? Fr.fromBuffer(proposalId).toString()
74
+ : proposalId.toString();
38
75
 
39
76
  return `${slotStr}-${proposalIdStr}`;
40
77
  }
@@ -43,117 +80,241 @@ export class KvAttestationPool implements AttestationPool {
43
80
  return `${this.getProposalKey(slot, proposalId)}-${address}`;
44
81
  }
45
82
 
46
- public async addAttestations(attestations: BlockAttestation[]): Promise<void> {
83
+ public async addBlockProposal(blockProposal: BlockProposal): Promise<void> {
84
+ await this.store.transactionAsync(async () => {
85
+ const proposalId = blockProposal.archive.toString();
86
+ // Strip signedTxs before storing to avoid persisting full tx data
87
+ await this.proposals.set(proposalId, blockProposal.withoutSignedTxs().toBuffer());
88
+ });
89
+ }
90
+
91
+ public async getBlockProposal(id: string): Promise<BlockProposal | undefined> {
92
+ const buffer = await this.proposals.getAsync(id);
93
+ try {
94
+ if (buffer && buffer.length > 0) {
95
+ return BlockProposal.fromBuffer(buffer);
96
+ }
97
+ } catch {
98
+ return Promise.resolve(undefined);
99
+ }
100
+
101
+ return Promise.resolve(undefined);
102
+ }
103
+
104
+ public async hasBlockProposal(idOrProposal: string | BlockProposal): Promise<boolean> {
105
+ const id = typeof idOrProposal === 'string' ? idOrProposal : idOrProposal.archive.toString();
106
+ return await this.proposals.hasAsync(id);
107
+ }
108
+
109
+ public async addCheckpointProposal(proposal: CheckpointProposal): Promise<void> {
110
+ if (!(await this.canAddCheckpointProposal(proposal))) {
111
+ throw new ProposalSlotCapExceededError(
112
+ `Maximum checkpoint proposals per slot reached: slot=${proposal.slotNumber} cap=${MAX_PROPOSALS_PER_SLOT} proposal=${proposal.archive.toString()}`,
113
+ );
114
+ }
115
+
116
+ // Extract and validate the block proposal if present
117
+ const blockProposal = proposal.getBlockProposal();
118
+ if (blockProposal && !(await this.canAddProposal(blockProposal))) {
119
+ throw new ProposalSlotCapExceededError(
120
+ `Maximum block proposals per slot reached when extracting from checkpoint: slot=${proposal.slotNumber} proposal=${blockProposal.archive.toString()}`,
121
+ );
122
+ }
123
+
124
+ await this.store.transactionAsync(async () => {
125
+ const slotKey = proposal.slotNumber;
126
+ const proposalId = proposal.archive.toString();
127
+
128
+ await this.checkpointProposalsForSlot.set(slotKey, proposalId);
129
+ // Store the checkpoint proposal as core (without lastBlock) to avoid duplication
130
+ await this.checkpointProposals.set(proposalId, proposal.toCore().toBuffer());
131
+
132
+ // Store the extracted block proposal separately
133
+ if (blockProposal) {
134
+ await this.proposals.set(blockProposal.archive.toString(), blockProposal.withoutSignedTxs().toBuffer());
135
+ }
136
+ });
137
+ }
138
+
139
+ public async getCheckpointProposal(id: string): Promise<CheckpointProposalCore | undefined> {
140
+ const buffer = await this.checkpointProposals.getAsync(id);
141
+ try {
142
+ if (buffer && buffer.length > 0) {
143
+ return CheckpointProposal.fromBuffer(buffer);
144
+ }
145
+ } catch {
146
+ return Promise.resolve(undefined);
147
+ }
148
+
149
+ return Promise.resolve(undefined);
150
+ }
151
+
152
+ public async hasCheckpointProposal(idOrProposal: string | CheckpointProposal): Promise<boolean> {
153
+ const id = typeof idOrProposal === 'string' ? idOrProposal : idOrProposal.archive.toString();
154
+ return await this.checkpointProposals.hasAsync(id);
155
+ }
156
+
157
+ public async addCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void> {
47
158
  await this.store.transactionAsync(async () => {
48
159
  for (const attestation of attestations) {
49
- const slotNumber = attestation.payload.header.globalVariables.slotNumber;
160
+ const slotNumber = attestation.payload.header.slotNumber;
50
161
  const proposalId = attestation.archive;
51
- const address = (await attestation.getSender()).toString();
162
+ const sender = attestation.getSender();
163
+
164
+ // Skip attestations with invalid signatures
165
+ if (!sender) {
166
+ this.log.warn(`Skipping checkpoint attestation with invalid signature for slot ${slotNumber}`, {
167
+ signature: attestation.signature.toString(),
168
+ slotNumber,
169
+ proposalId,
170
+ });
171
+ continue;
172
+ }
52
173
 
53
- await this.attestations.set(this.getAttestationKey(slotNumber, proposalId, address), attestation.toBuffer());
174
+ const address = sender.toString();
175
+
176
+ await this.checkpointAttestations.set(
177
+ this.getAttestationKey(slotNumber, proposalId, address),
178
+ attestation.toBuffer(),
179
+ );
54
180
 
55
- await this.proposalsForSlot.set(slotNumber.toString(), proposalId.toString());
56
- await this.attestationsForProposal.set(
181
+ await this.checkpointProposalsForSlot.set(slotNumber, proposalId.toString());
182
+ await this.checkpointAttestationsForProposal.set(
57
183
  this.getProposalKey(slotNumber, proposalId),
58
184
  this.getAttestationKey(slotNumber, proposalId, address),
59
185
  );
60
186
 
61
- this.log.verbose(`Added attestation for slot ${slotNumber} from ${address}`);
187
+ this.log.verbose(`Added checkpoint attestation for slot ${slotNumber} from ${address}`, {
188
+ signature: attestation.signature.toString(),
189
+ slotNumber,
190
+ address,
191
+ proposalId,
192
+ });
62
193
  }
63
194
  });
195
+ }
196
+
197
+ public async getCheckpointAttestationsForSlot(slot: SlotNumber): Promise<CheckpointAttestation[]> {
198
+ const proposalIds = await toArray(this.checkpointProposalsForSlot.getValuesAsync(slot));
199
+ const attestations: CheckpointAttestation[] = [];
200
+
201
+ for (const proposalId of proposalIds) {
202
+ attestations.push(...(await this.getCheckpointAttestationsForSlotAndProposal(slot, proposalId)));
203
+ }
64
204
 
65
- this.metrics.recordAddedObjects(attestations.length);
205
+ return attestations;
66
206
  }
67
207
 
68
- public async getAttestationsForSlot(slot: bigint, proposalId: string): Promise<BlockAttestation[]> {
208
+ public async getCheckpointAttestationsForSlotAndProposal(
209
+ slot: SlotNumber,
210
+ proposalId: string,
211
+ ): Promise<CheckpointAttestation[]> {
69
212
  const attestationIds = await toArray(
70
- this.attestationsForProposal.getValuesAsync(this.getProposalKey(slot, proposalId)),
213
+ this.checkpointAttestationsForProposal.getValuesAsync(this.getProposalKey(slot, proposalId)),
71
214
  );
72
- const attestations: BlockAttestation[] = [];
215
+ const attestations: CheckpointAttestation[] = [];
73
216
 
74
- // alternatively iterate this.attestaions starting from slot-proposal-EthAddress.zero
75
217
  for (const id of attestationIds) {
76
- const buf = await this.attestations.getAsync(id);
218
+ const buf = await this.checkpointAttestations.getAsync(id);
77
219
 
78
220
  if (!buf) {
79
- // this should not happen unless we lost writes
80
- throw new Error('Attestation not found ' + id);
221
+ throw new Error('Checkpoint attestation not found ' + id);
81
222
  }
82
223
 
83
- const attestation = BlockAttestation.fromBuffer(buf);
224
+ const attestation = CheckpointAttestation.fromBuffer(buf);
84
225
  attestations.push(attestation);
85
226
  }
86
227
 
87
228
  return attestations;
88
229
  }
89
230
 
90
- public async deleteAttestationsOlderThan(oldestSlot: bigint): Promise<void> {
91
- const olderThan = await toArray(this.proposalsForSlot.keysAsync({ end: new Fr(oldestSlot).toString() }));
231
+ public async deleteCheckpointAttestationsOlderThan(oldestSlot: SlotNumber): Promise<void> {
232
+ const olderThan = await toArray(this.checkpointProposalsForSlot.keysAsync({ end: oldestSlot }));
92
233
  for (const oldSlot of olderThan) {
93
- await this.deleteAttestationsForSlot(BigInt(oldSlot));
234
+ await this.deleteCheckpointAttestationsForSlot(SlotNumber(oldSlot));
94
235
  }
95
236
  }
96
237
 
97
- public async deleteAttestationsForSlot(slot: bigint): Promise<void> {
98
- const slotFr = new Fr(slot);
238
+ private async deleteCheckpointAttestationsForSlot(slot: SlotNumber): Promise<void> {
99
239
  let numberOfAttestations = 0;
100
240
  await this.store.transactionAsync(async () => {
101
- const proposalIds = await toArray(this.proposalsForSlot.getValuesAsync(slotFr.toString()));
241
+ const proposalIds = await toArray(this.checkpointProposalsForSlot.getValuesAsync(slot));
102
242
  for (const proposalId of proposalIds) {
103
243
  const attestations = await toArray(
104
- this.attestationsForProposal.getValuesAsync(this.getProposalKey(slotFr, proposalId)),
244
+ this.checkpointAttestationsForProposal.getValuesAsync(this.getProposalKey(slot, proposalId)),
105
245
  );
106
246
 
107
247
  numberOfAttestations += attestations.length;
108
248
  for (const attestation of attestations) {
109
- await this.attestations.delete(attestation);
249
+ await this.checkpointAttestations.delete(attestation);
110
250
  }
111
251
 
112
- await this.attestationsForProposal.delete(this.getProposalKey(slotFr, proposalId));
252
+ await this.checkpointProposals.delete(proposalId);
253
+ await this.checkpointAttestationsForProposal.delete(this.getProposalKey(slot, proposalId));
113
254
  }
114
- });
115
255
 
116
- this.log.verbose(`Removed ${numberOfAttestations} attestations for slot ${slot}`);
117
- this.metrics.recordRemovedObjects(numberOfAttestations);
256
+ await this.checkpointProposalsForSlot.delete(slot);
257
+
258
+ this.log.verbose(`Removed ${numberOfAttestations} checkpoint attestations for slot ${slot}`);
259
+ });
118
260
  }
119
261
 
120
- public async deleteAttestationsForSlotAndProposal(slot: bigint, proposalId: string): Promise<void> {
121
- let numberOfAttestations = 0;
122
- await this.store.transactionAsync(async () => {
123
- const slotString = new Fr(slot).toString();
124
- const attestations = await toArray(
125
- this.attestationsForProposal.getValuesAsync(this.getProposalKey(slot, proposalId)),
126
- );
262
+ public async hasCheckpointAttestation(attestation: CheckpointAttestation): Promise<boolean> {
263
+ const slotNumber = attestation.payload.header.slotNumber;
264
+ const proposalId = attestation.archive;
265
+ const sender = attestation.getSender();
127
266
 
128
- numberOfAttestations += attestations.length;
129
- for (const attestation of attestations) {
130
- await this.attestations.delete(attestation);
131
- }
267
+ // Attestations with invalid signatures are never in the pool
268
+ if (!sender) {
269
+ return false;
270
+ }
132
271
 
133
- await this.proposalsForSlot.deleteValue(slotString, proposalId);
134
- await this.attestationsForProposal.delete(this.getProposalKey(slotString, proposalId));
135
- });
272
+ const address = sender.toString();
273
+ const key = this.getAttestationKey(slotNumber, proposalId, address);
136
274
 
137
- this.log.verbose(`Removed ${numberOfAttestations} attestations for slot ${slot} and proposal ${proposalId}`);
138
- this.metrics.recordRemovedObjects(numberOfAttestations);
275
+ return await this.checkpointAttestations.hasAsync(key);
139
276
  }
140
277
 
141
- public async deleteAttestations(attestations: BlockAttestation[]): Promise<void> {
142
- await this.store.transactionAsync(async () => {
143
- for (const attestation of attestations) {
144
- const slotNumber = attestation.payload.header.globalVariables.slotNumber;
145
- const proposalId = attestation.archive;
146
- const address = (await attestation.getSender()).toString();
278
+ public canAddProposal(_block: BlockProposal): Promise<boolean> {
279
+ // TODO(palla/mbps): implement proposal cap logic
280
+ return Promise.resolve(true);
281
+ }
147
282
 
148
- await this.attestations.delete(this.getAttestationKey(slotNumber, proposalId, address));
149
- await this.attestationsForProposal.deleteValue(
150
- this.getProposalKey(slotNumber, proposalId),
151
- this.getAttestationKey(slotNumber, proposalId, address),
152
- );
283
+ public async canAddCheckpointProposal(proposal: CheckpointProposal): Promise<boolean> {
284
+ // TODO(palla/mbps): Adjust checkpoint proposal limit to 1. Also connect to slashing condition in the caller.
285
+ return (
286
+ (await this.checkpointProposals.hasAsync(proposal.archive.toString())) ||
287
+ !(await this.hasReachedCheckpointProposalCap(proposal.slotNumber))
288
+ );
289
+ }
153
290
 
154
- this.log.debug(`Deleted attestation for slot ${slotNumber} from ${address}`);
155
- }
156
- });
157
- this.metrics.recordRemovedObjects(attestations.length);
291
+ public async canAddCheckpointAttestation(
292
+ attestation: CheckpointAttestation,
293
+ committeeSize: number,
294
+ ): Promise<boolean> {
295
+ return (
296
+ (await this.hasCheckpointAttestation(attestation)) ||
297
+ !(await this.hasReachedCheckpointAttestationCap(
298
+ attestation.payload.header.slotNumber,
299
+ attestation.archive.toString(),
300
+ committeeSize,
301
+ ))
302
+ );
303
+ }
304
+
305
+ public async hasReachedCheckpointProposalCap(slot: SlotNumber): Promise<boolean> {
306
+ const uniqueProposalCount = await this.checkpointProposalsForSlot.getValueCountAsync(slot);
307
+ return uniqueProposalCount >= MAX_PROPOSALS_PER_SLOT;
308
+ }
309
+
310
+ public async hasReachedCheckpointAttestationCap(
311
+ slot: SlotNumber,
312
+ proposalId: string,
313
+ committeeSize: number,
314
+ ): Promise<boolean> {
315
+ const limit = committeeSize + ATTESTATION_CAP_BUFFER;
316
+ return (
317
+ (await this.checkpointAttestationsForProposal.getValueCountAsync(this.getProposalKey(slot, proposalId))) >= limit
318
+ );
158
319
  }
159
320
  }