@aztec/p2p 0.0.1-commit.b655e406 → 0.0.1-commit.d1f2d6c

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 (366) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +1 -1
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/client/factory.d.ts +2 -2
  4. package/dest/client/factory.d.ts.map +1 -1
  5. package/dest/client/factory.js +2 -3
  6. package/dest/client/index.d.ts +1 -1
  7. package/dest/client/interface.d.ts +18 -3
  8. package/dest/client/interface.d.ts.map +1 -1
  9. package/dest/client/p2p_client.d.ts +16 -37
  10. package/dest/client/p2p_client.d.ts.map +1 -1
  11. package/dest/client/p2p_client.js +464 -126
  12. package/dest/config.d.ts +62 -59
  13. package/dest/config.d.ts.map +1 -1
  14. package/dest/config.js +21 -14
  15. package/dest/enr/generate-enr.d.ts +1 -1
  16. package/dest/enr/index.d.ts +1 -1
  17. package/dest/errors/attestation-pool.error.d.ts +7 -0
  18. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  19. package/dest/errors/attestation-pool.error.js +12 -0
  20. package/dest/errors/reqresp.error.d.ts +1 -1
  21. package/dest/errors/reqresp.error.d.ts.map +1 -1
  22. package/dest/index.d.ts +1 -1
  23. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +77 -36
  24. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  26. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +241 -266
  28. package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +24 -14
  30. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  31. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +123 -95
  32. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +18 -12
  33. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  34. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +91 -108
  35. package/dest/mem_pools/attestation_pool/mocks.d.ts +234 -10
  36. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  37. package/dest/mem_pools/attestation_pool/mocks.js +17 -13
  38. package/dest/mem_pools/index.d.ts +1 -1
  39. package/dest/mem_pools/instrumentation.d.ts +9 -1
  40. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  41. package/dest/mem_pools/instrumentation.js +36 -9
  42. package/dest/mem_pools/interface.d.ts +3 -4
  43. package/dest/mem_pools/interface.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +33 -58
  45. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  46. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +314 -335
  47. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
  48. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  49. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
  50. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
  51. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  52. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
  53. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  54. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  55. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  56. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  57. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  58. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  59. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  60. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  61. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
  62. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  63. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  64. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  65. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  66. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  67. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  68. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  69. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  70. package/dest/mem_pools/tx_pool/index.js +0 -1
  71. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  72. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  73. package/dest/mem_pools/tx_pool/priority.js +6 -1
  74. package/dest/mem_pools/tx_pool/tx_pool.d.ts +11 -6
  75. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  76. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  77. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  78. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +30 -24
  79. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +7 -6
  80. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  81. package/dest/msg_validators/attestation_validator/attestation_validator.js +57 -24
  82. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
  83. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  84. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +71 -0
  85. package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
  86. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
  87. package/dest/msg_validators/attestation_validator/index.js +1 -0
  88. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  89. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  90. package/dest/msg_validators/clock_tolerance.js +37 -0
  91. package/dest/msg_validators/index.d.ts +2 -2
  92. package/dest/msg_validators/index.d.ts.map +1 -1
  93. package/dest/msg_validators/index.js +1 -1
  94. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +1 -1
  95. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -1
  96. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  97. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  98. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  99. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  100. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  101. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  102. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  103. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  104. package/dest/msg_validators/proposal_validator/index.js +3 -0
  105. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  106. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  107. package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
  108. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  109. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  110. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
  111. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  112. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  113. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +1 -1
  114. package/dest/msg_validators/tx_validator/archive_cache.d.ts +2 -2
  115. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  116. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +2 -2
  117. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  118. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  119. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  120. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +1 -1
  121. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  122. package/dest/msg_validators/tx_validator/factory.d.ts +4 -3
  123. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  124. package/dest/msg_validators/tx_validator/factory.js +1 -1
  125. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  126. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  127. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  128. package/dest/msg_validators/tx_validator/gas_validator.d.ts +1 -1
  129. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  130. package/dest/msg_validators/tx_validator/gas_validator.js +8 -14
  131. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  132. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  133. package/dest/msg_validators/tx_validator/index.js +1 -0
  134. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +2 -2
  135. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  136. package/dest/msg_validators/tx_validator/phases_validator.d.ts +1 -1
  137. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  138. package/dest/msg_validators/tx_validator/phases_validator.js +3 -1
  139. package/dest/msg_validators/tx_validator/size_validator.d.ts +6 -0
  140. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  141. package/dest/msg_validators/tx_validator/size_validator.js +20 -0
  142. package/dest/msg_validators/tx_validator/test_utils.d.ts +2 -2
  143. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
  144. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +3 -2
  145. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  146. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +1 -1
  147. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  148. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +1 -1
  149. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  150. package/dest/services/data_store.d.ts +1 -1
  151. package/dest/services/data_store.d.ts.map +1 -1
  152. package/dest/services/discv5/discV5_service.d.ts +1 -1
  153. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  154. package/dest/services/dummy_service.d.ts +6 -2
  155. package/dest/services/dummy_service.d.ts.map +1 -1
  156. package/dest/services/dummy_service.js +3 -0
  157. package/dest/services/encoding.d.ts +1 -1
  158. package/dest/services/encoding.d.ts.map +1 -1
  159. package/dest/services/encoding.js +7 -6
  160. package/dest/services/gossipsub/scoring.d.ts +1 -1
  161. package/dest/services/index.d.ts +1 -1
  162. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  163. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  164. package/dest/services/libp2p/instrumentation.js +26 -72
  165. package/dest/services/libp2p/libp2p_service.d.ts +41 -80
  166. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  167. package/dest/services/libp2p/libp2p_service.js +899 -175
  168. package/dest/services/peer-manager/interface.d.ts +1 -1
  169. package/dest/services/peer-manager/metrics.d.ts +8 -1
  170. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  171. package/dest/services/peer-manager/metrics.js +24 -16
  172. package/dest/services/peer-manager/peer_manager.d.ts +2 -33
  173. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  174. package/dest/services/peer-manager/peer_manager.js +6 -12
  175. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  176. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  177. package/dest/services/peer-manager/peer_scoring.js +37 -2
  178. package/dest/services/reqresp/config.d.ts +1 -1
  179. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +1 -1
  180. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  181. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +1 -4
  182. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  183. package/dest/services/reqresp/constants.d.ts +12 -0
  184. package/dest/services/reqresp/constants.d.ts.map +1 -0
  185. package/dest/services/reqresp/constants.js +7 -0
  186. package/dest/services/reqresp/index.d.ts +1 -1
  187. package/dest/services/reqresp/interface.d.ts +2 -2
  188. package/dest/services/reqresp/interface.d.ts.map +1 -1
  189. package/dest/services/reqresp/interface.js +1 -1
  190. package/dest/services/reqresp/metrics.d.ts +1 -1
  191. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  192. package/dest/services/reqresp/metrics.js +5 -21
  193. package/dest/services/reqresp/protocols/auth.d.ts +2 -2
  194. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
  195. package/dest/services/reqresp/protocols/auth.js +2 -2
  196. package/dest/services/reqresp/protocols/block.d.ts +1 -1
  197. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  198. package/dest/services/reqresp/protocols/block.js +3 -2
  199. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +1 -1
  200. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  201. package/dest/services/reqresp/protocols/block_txs/bitvector.js +7 -0
  202. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  203. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +4 -6
  204. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  205. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +1 -1
  206. package/dest/services/reqresp/protocols/block_txs/index.d.ts +1 -1
  207. package/dest/services/reqresp/protocols/goodbye.d.ts +1 -1
  208. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  209. package/dest/services/reqresp/protocols/index.d.ts +1 -1
  210. package/dest/services/reqresp/protocols/ping.d.ts +1 -1
  211. package/dest/services/reqresp/protocols/status.d.ts +6 -5
  212. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  213. package/dest/services/reqresp/protocols/status.js +7 -3
  214. package/dest/services/reqresp/protocols/tx.d.ts +2 -3
  215. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  216. package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
  217. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +2 -2
  218. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  219. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  220. package/dest/services/reqresp/reqresp.d.ts +1 -41
  221. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  222. package/dest/services/reqresp/reqresp.js +402 -24
  223. package/dest/services/reqresp/status.d.ts +2 -2
  224. package/dest/services/reqresp/status.d.ts.map +1 -1
  225. package/dest/services/service.d.ts +16 -3
  226. package/dest/services/service.d.ts.map +1 -1
  227. package/dest/services/tx_collection/config.d.ts +1 -1
  228. package/dest/services/tx_collection/config.js +1 -1
  229. package/dest/services/tx_collection/fast_tx_collection.d.ts +4 -9
  230. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  231. package/dest/services/tx_collection/index.d.ts +1 -1
  232. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  233. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  234. package/dest/services/tx_collection/instrumentation.js +4 -14
  235. package/dest/services/tx_collection/slow_tx_collection.d.ts +4 -5
  236. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  237. package/dest/services/tx_collection/slow_tx_collection.js +2 -1
  238. package/dest/services/tx_collection/tx_collection.d.ts +7 -7
  239. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  240. package/dest/services/tx_collection/tx_collection_sink.d.ts +3 -3
  241. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  242. package/dest/services/tx_collection/tx_source.d.ts +1 -1
  243. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  244. package/dest/services/tx_provider.d.ts +4 -2
  245. package/dest/services/tx_provider.d.ts.map +1 -1
  246. package/dest/services/tx_provider.js +11 -2
  247. package/dest/services/tx_provider_instrumentation.d.ts +5 -2
  248. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  249. package/dest/services/tx_provider_instrumentation.js +13 -13
  250. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
  251. package/dest/test-helpers/get-ports.d.ts +1 -1
  252. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  253. package/dest/test-helpers/index.d.ts +1 -1
  254. package/dest/test-helpers/make-enrs.d.ts +1 -1
  255. package/dest/test-helpers/make-test-p2p-clients.d.ts +2 -2
  256. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  257. package/dest/test-helpers/mock-pubsub.d.ts +4 -4
  258. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  259. package/dest/test-helpers/mock-tx-helpers.d.ts +2 -2
  260. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -1
  261. package/dest/test-helpers/mock-tx-helpers.js +1 -1
  262. package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
  263. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  264. package/dest/testbench/p2p_client_testbench_worker.d.ts +1 -1
  265. package/dest/testbench/p2p_client_testbench_worker.js +39 -22
  266. package/dest/testbench/parse_log_file.d.ts +1 -1
  267. package/dest/testbench/testbench.d.ts +1 -1
  268. package/dest/testbench/worker_client_manager.d.ts +1 -1
  269. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  270. package/dest/testbench/worker_client_manager.js +6 -1
  271. package/dest/types/index.d.ts +1 -1
  272. package/dest/util.d.ts +2 -1
  273. package/dest/util.d.ts.map +1 -1
  274. package/dest/util.js +11 -2
  275. package/dest/versioning.d.ts +1 -1
  276. package/package.json +19 -18
  277. package/src/client/factory.ts +5 -10
  278. package/src/client/interface.ts +20 -2
  279. package/src/client/p2p_client.ts +108 -155
  280. package/src/config.ts +30 -19
  281. package/src/errors/attestation-pool.error.ts +13 -0
  282. package/src/mem_pools/attestation_pool/attestation_pool.ts +86 -35
  283. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +243 -278
  284. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +175 -111
  285. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +147 -136
  286. package/src/mem_pools/attestation_pool/mocks.ts +21 -15
  287. package/src/mem_pools/instrumentation.ts +47 -10
  288. package/src/mem_pools/interface.ts +2 -4
  289. package/src/mem_pools/tx_pool/README.md +270 -0
  290. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +367 -371
  291. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
  292. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
  293. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  294. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  295. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
  296. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  297. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  298. package/src/mem_pools/tx_pool/index.ts +0 -1
  299. package/src/mem_pools/tx_pool/priority.ts +8 -1
  300. package/src/mem_pools/tx_pool/tx_pool.ts +11 -5
  301. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +23 -17
  302. package/src/msg_validators/attestation_validator/attestation_validator.ts +45 -32
  303. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +88 -0
  304. package/src/msg_validators/attestation_validator/index.ts +1 -0
  305. package/src/msg_validators/clock_tolerance.ts +51 -0
  306. package/src/msg_validators/index.ts +1 -1
  307. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  308. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  309. package/src/msg_validators/proposal_validator/index.ts +3 -0
  310. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  311. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  312. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  313. package/src/msg_validators/tx_validator/block_header_validator.ts +1 -1
  314. package/src/msg_validators/tx_validator/data_validator.ts +12 -4
  315. package/src/msg_validators/tx_validator/factory.ts +3 -2
  316. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  317. package/src/msg_validators/tx_validator/gas_validator.ts +8 -25
  318. package/src/msg_validators/tx_validator/index.ts +1 -0
  319. package/src/msg_validators/tx_validator/metadata_validator.ts +13 -5
  320. package/src/msg_validators/tx_validator/phases_validator.ts +3 -1
  321. package/src/msg_validators/tx_validator/size_validator.ts +18 -0
  322. package/src/msg_validators/tx_validator/test_utils.ts +1 -1
  323. package/src/msg_validators/tx_validator/timestamp_validator.ts +5 -2
  324. package/src/services/dummy_service.ts +6 -0
  325. package/src/services/encoding.ts +6 -5
  326. package/src/services/libp2p/instrumentation.ts +26 -71
  327. package/src/services/libp2p/libp2p_service.ts +580 -160
  328. package/src/services/peer-manager/metrics.ts +27 -16
  329. package/src/services/peer-manager/peer_manager.ts +7 -4
  330. package/src/services/peer-manager/peer_scoring.ts +42 -3
  331. package/src/services/reqresp/connection-sampler/connection_sampler.ts +3 -1
  332. package/src/services/reqresp/constants.ts +14 -0
  333. package/src/services/reqresp/interface.ts +1 -1
  334. package/src/services/reqresp/metrics.ts +7 -23
  335. package/src/services/reqresp/protocols/auth.ts +2 -2
  336. package/src/services/reqresp/protocols/block.ts +3 -2
  337. package/src/services/reqresp/protocols/block_txs/bitvector.ts +9 -0
  338. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +1 -1
  339. package/src/services/reqresp/protocols/status.ts +16 -12
  340. package/src/services/reqresp/protocols/tx.ts +1 -2
  341. package/src/services/service.ts +19 -4
  342. package/src/services/tx_collection/config.ts +1 -1
  343. package/src/services/tx_collection/fast_tx_collection.ts +3 -2
  344. package/src/services/tx_collection/instrumentation.ts +4 -21
  345. package/src/services/tx_collection/slow_tx_collection.ts +5 -4
  346. package/src/services/tx_collection/tx_collection.ts +6 -5
  347. package/src/services/tx_provider.ts +19 -3
  348. package/src/services/tx_provider_instrumentation.ts +18 -14
  349. package/src/test-helpers/mock-pubsub.ts +1 -1
  350. package/src/test-helpers/mock-tx-helpers.ts +1 -1
  351. package/src/test-helpers/reqresp-nodes.ts +1 -1
  352. package/src/testbench/p2p_client_testbench_worker.ts +45 -22
  353. package/src/testbench/worker_client_manager.ts +6 -1
  354. package/src/util.ts +12 -2
  355. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -80
  356. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  357. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -238
  358. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  359. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  360. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -70
  361. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  362. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  363. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  364. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -283
  365. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -81
  366. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -1,45 +1,64 @@
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, BlockProposal } 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
 
14
+ import { ProposalSlotCapExceededError } from '../../errors/attestation-pool.error.js';
8
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>;
13
23
 
14
- private attestations: AztecAsyncMap<string, Buffer>;
15
24
  private proposals: AztecAsyncMap<
16
25
  /* proposal.payload.archive */ string,
17
26
  /* buffer representation of proposal */ Buffer
18
27
  >;
19
- private proposalsForSlot: AztecAsyncMultiMap<string, string>;
20
- private attestationsForProposal: AztecAsyncMultiMap<string, string>;
28
+
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>;
21
34
 
22
35
  constructor(
23
36
  private store: AztecAsyncKVStore,
24
37
  telemetry: TelemetryClient = getTelemetryClient(),
25
38
  private log = createLogger('aztec:attestation_pool'),
26
39
  ) {
27
- this.attestations = store.openMap('attestations');
28
40
  this.proposals = store.openMap('proposals');
29
- this.proposalsForSlot = store.openMultiMap('proposals_for_slot');
30
- this.attestationsForProposal = store.openMultiMap('attestations_for_proposal');
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');
31
47
 
32
48
  this.metrics = new PoolInstrumentation(telemetry, PoolName.ATTESTATION_POOL, this.poolStats);
33
49
  }
34
50
 
35
51
  private poolStats: PoolStatsCallback = async () => {
36
52
  return {
37
- itemCount: await this.attestations.sizeAsync(),
53
+ itemCount: await this.checkpointAttestations.sizeAsync(),
38
54
  };
39
55
  };
40
56
 
41
57
  public async isEmpty(): Promise<boolean> {
42
- for await (const _ of this.attestations.entriesAsync()) {
58
+ for await (const _ of this.checkpointAttestations.entriesAsync()) {
59
+ return false;
60
+ }
61
+ for await (const _ of this.proposals.entriesAsync()) {
43
62
  return false;
44
63
  }
45
64
  return true;
@@ -61,7 +80,81 @@ export class KvAttestationPool implements AttestationPool {
61
80
  return `${this.getProposalKey(slot, proposalId)}-${address}`;
62
81
  }
63
82
 
64
- 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> {
65
158
  await this.store.transactionAsync(async () => {
66
159
  for (const attestation of attestations) {
67
160
  const slotNumber = attestation.payload.header.slotNumber;
@@ -70,7 +163,7 @@ export class KvAttestationPool implements AttestationPool {
70
163
 
71
164
  // Skip attestations with invalid signatures
72
165
  if (!sender) {
73
- this.log.warn(`Skipping attestation with invalid signature for slot ${slotNumber.toBigInt()}`, {
166
+ this.log.warn(`Skipping checkpoint attestation with invalid signature for slot ${slotNumber}`, {
74
167
  signature: attestation.signature.toString(),
75
168
  slotNumber,
76
169
  proposalId,
@@ -80,15 +173,18 @@ export class KvAttestationPool implements AttestationPool {
80
173
 
81
174
  const address = sender.toString();
82
175
 
83
- await this.attestations.set(this.getAttestationKey(slotNumber, proposalId, address), attestation.toBuffer());
176
+ await this.checkpointAttestations.set(
177
+ this.getAttestationKey(slotNumber, proposalId, address),
178
+ attestation.toBuffer(),
179
+ );
84
180
 
85
- await this.proposalsForSlot.set(slotNumber.toString(), proposalId.toString());
86
- await this.attestationsForProposal.set(
181
+ await this.checkpointProposalsForSlot.set(slotNumber, proposalId.toString());
182
+ await this.checkpointAttestationsForProposal.set(
87
183
  this.getProposalKey(slotNumber, proposalId),
88
184
  this.getAttestationKey(slotNumber, proposalId, address),
89
185
  );
90
186
 
91
- this.log.verbose(`Added attestation for slot ${slotNumber.toBigInt()} from ${address}`, {
187
+ this.log.verbose(`Added checkpoint attestation for slot ${slotNumber} from ${address}`, {
92
188
  signature: attestation.signature.toString(),
93
189
  slotNumber,
94
190
  address,
@@ -98,122 +194,72 @@ export class KvAttestationPool implements AttestationPool {
98
194
  });
99
195
  }
100
196
 
101
- public async getAttestationsForSlot(slot: bigint): Promise<BlockAttestation[]> {
102
- const slotFr = new Fr(slot);
103
- const proposalIds = await toArray(this.proposalsForSlot.getValuesAsync(slotFr.toString()));
104
- const attestations: BlockAttestation[] = [];
197
+ public async getCheckpointAttestationsForSlot(slot: SlotNumber): Promise<CheckpointAttestation[]> {
198
+ const proposalIds = await toArray(this.checkpointProposalsForSlot.getValuesAsync(slot));
199
+ const attestations: CheckpointAttestation[] = [];
105
200
 
106
201
  for (const proposalId of proposalIds) {
107
- attestations.push(...(await this.getAttestationsForSlotAndProposal(slot, proposalId)));
202
+ attestations.push(...(await this.getCheckpointAttestationsForSlotAndProposal(slot, proposalId)));
108
203
  }
109
204
 
110
205
  return attestations;
111
206
  }
112
207
 
113
- public async getAttestationsForSlotAndProposal(slot: bigint, proposalId: string): Promise<BlockAttestation[]> {
208
+ public async getCheckpointAttestationsForSlotAndProposal(
209
+ slot: SlotNumber,
210
+ proposalId: string,
211
+ ): Promise<CheckpointAttestation[]> {
114
212
  const attestationIds = await toArray(
115
- this.attestationsForProposal.getValuesAsync(this.getProposalKey(slot, proposalId)),
213
+ this.checkpointAttestationsForProposal.getValuesAsync(this.getProposalKey(slot, proposalId)),
116
214
  );
117
- const attestations: BlockAttestation[] = [];
215
+ const attestations: CheckpointAttestation[] = [];
118
216
 
119
- // alternatively iterate this.attestaions starting from slot-proposal-EthAddress.zero
120
217
  for (const id of attestationIds) {
121
- const buf = await this.attestations.getAsync(id);
218
+ const buf = await this.checkpointAttestations.getAsync(id);
122
219
 
123
220
  if (!buf) {
124
- // this should not happen unless we lost writes
125
- throw new Error('Attestation not found ' + id);
221
+ throw new Error('Checkpoint attestation not found ' + id);
126
222
  }
127
223
 
128
- const attestation = BlockAttestation.fromBuffer(buf);
224
+ const attestation = CheckpointAttestation.fromBuffer(buf);
129
225
  attestations.push(attestation);
130
226
  }
131
227
 
132
228
  return attestations;
133
229
  }
134
230
 
135
- public async deleteAttestationsOlderThan(oldestSlot: bigint): Promise<void> {
136
- 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 }));
137
233
  for (const oldSlot of olderThan) {
138
- await this.deleteAttestationsForSlot(BigInt(oldSlot));
234
+ await this.deleteCheckpointAttestationsForSlot(SlotNumber(oldSlot));
139
235
  }
140
236
  }
141
237
 
142
- public async deleteAttestationsForSlot(slot: bigint): Promise<void> {
143
- const slotFr = new Fr(slot);
238
+ private async deleteCheckpointAttestationsForSlot(slot: SlotNumber): Promise<void> {
144
239
  let numberOfAttestations = 0;
145
240
  await this.store.transactionAsync(async () => {
146
- const proposalIds = await toArray(this.proposalsForSlot.getValuesAsync(slotFr.toString()));
241
+ const proposalIds = await toArray(this.checkpointProposalsForSlot.getValuesAsync(slot));
147
242
  for (const proposalId of proposalIds) {
148
243
  const attestations = await toArray(
149
- this.attestationsForProposal.getValuesAsync(this.getProposalKey(slotFr, proposalId)),
244
+ this.checkpointAttestationsForProposal.getValuesAsync(this.getProposalKey(slot, proposalId)),
150
245
  );
151
246
 
152
247
  numberOfAttestations += attestations.length;
153
248
  for (const attestation of attestations) {
154
- await this.attestations.delete(attestation);
249
+ await this.checkpointAttestations.delete(attestation);
155
250
  }
156
251
 
157
- await this.proposals.delete(proposalId);
158
- await this.attestationsForProposal.delete(this.getProposalKey(slotFr, proposalId));
252
+ await this.checkpointProposals.delete(proposalId);
253
+ await this.checkpointAttestationsForProposal.delete(this.getProposalKey(slot, proposalId));
159
254
  }
160
255
 
161
- this.log.verbose(`Removed ${numberOfAttestations} attestations for slot ${slot}`);
162
- });
163
- }
164
-
165
- public async deleteAttestationsForSlotAndProposal(slot: bigint, proposalId: string): Promise<void> {
166
- let numberOfAttestations = 0;
167
- await this.store.transactionAsync(async () => {
168
- const slotString = new Fr(slot).toString();
169
- const attestations = await toArray(
170
- this.attestationsForProposal.getValuesAsync(this.getProposalKey(slot, proposalId)),
171
- );
172
-
173
- numberOfAttestations += attestations.length;
174
- for (const attestation of attestations) {
175
- await this.attestations.delete(attestation);
176
- }
177
-
178
- await this.proposals.delete(proposalId);
179
- await this.proposalsForSlot.deleteValue(slotString, proposalId);
180
- await this.attestationsForProposal.delete(this.getProposalKey(slotString, proposalId));
181
-
182
- this.log.verbose(`Removed ${numberOfAttestations} attestations for slot ${slot} and proposal ${proposalId}`);
183
- });
184
- }
185
-
186
- public async deleteAttestations(attestations: BlockAttestation[]): Promise<void> {
187
- await this.store.transactionAsync(async () => {
188
- for (const attestation of attestations) {
189
- const slotNumber = attestation.payload.header.slotNumber;
190
- const proposalId = attestation.archive;
191
- const sender = attestation.getSender();
192
-
193
- // Skip attestations with invalid signatures
194
- if (!sender) {
195
- this.log.warn(`Skipping deletion of attestation with invalid signature for slot ${slotNumber.toBigInt()}`);
196
- continue;
197
- }
198
-
199
- const address = sender.toString();
200
- const key = this.getAttestationKey(slotNumber, proposalId, address);
201
-
202
- if (await this.attestations.hasAsync(key)) {
203
- await this.attestations.delete(key);
204
- }
256
+ await this.checkpointProposalsForSlot.delete(slot);
205
257
 
206
- await this.attestationsForProposal.deleteValue(
207
- this.getProposalKey(slotNumber, proposalId),
208
- this.getAttestationKey(slotNumber, proposalId, address),
209
- );
210
-
211
- this.log.debug(`Deleted attestation for slot ${slotNumber} from ${address}`);
212
- }
258
+ this.log.verbose(`Removed ${numberOfAttestations} checkpoint attestations for slot ${slot}`);
213
259
  });
214
260
  }
215
261
 
216
- public async hasAttestation(attestation: BlockAttestation): Promise<boolean> {
262
+ public async hasCheckpointAttestation(attestation: CheckpointAttestation): Promise<boolean> {
217
263
  const slotNumber = attestation.payload.header.slotNumber;
218
264
  const proposalId = attestation.archive;
219
265
  const sender = attestation.getSender();
@@ -226,31 +272,49 @@ export class KvAttestationPool implements AttestationPool {
226
272
  const address = sender.toString();
227
273
  const key = this.getAttestationKey(slotNumber, proposalId, address);
228
274
 
229
- return await this.attestations.hasAsync(key);
275
+ return await this.checkpointAttestations.hasAsync(key);
230
276
  }
231
277
 
232
- public async getBlockProposal(id: string): Promise<BlockProposal | undefined> {
233
- const buffer = await this.proposals.getAsync(id);
234
- try {
235
- if (buffer && buffer.length > 0) {
236
- return BlockProposal.fromBuffer(buffer);
237
- }
238
- } catch {
239
- return Promise.resolve(undefined);
240
- }
278
+ public canAddProposal(_block: BlockProposal): Promise<boolean> {
279
+ // TODO(palla/mbps): implement proposal cap logic
280
+ return Promise.resolve(true);
281
+ }
241
282
 
242
- return Promise.resolve(undefined);
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
+ );
243
289
  }
244
290
 
245
- public async hasBlockProposal(idOrProposal: string | BlockProposal): Promise<boolean> {
246
- const id = typeof idOrProposal === 'string' ? idOrProposal : idOrProposal.payload.archive.toString();
247
- return await this.proposals.hasAsync(id);
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
+ );
248
303
  }
249
304
 
250
- public async addBlockProposal(blockProposal: BlockProposal): Promise<void> {
251
- await this.store.transactionAsync(async () => {
252
- await this.proposalsForSlot.set(blockProposal.slotNumber.toString(), blockProposal.archive.toString());
253
- await this.proposals.set(blockProposal.payload.archive.toString(), blockProposal.toBuffer());
254
- });
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
+ );
255
319
  }
256
320
  }