@aztec/p2p 0.0.1-commit.fcb71a6 → 0.0.1-commit.ff7989d6c

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 (524) 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 +7 -6
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +53 -14
  7. package/dest/client/interface.d.ts +58 -25
  8. package/dest/client/interface.d.ts.map +1 -1
  9. package/dest/client/p2p_client.d.ts +46 -51
  10. package/dest/client/p2p_client.d.ts.map +1 -1
  11. package/dest/client/p2p_client.js +601 -259
  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 +35 -7
  19. package/dest/config.d.ts.map +1 -1
  20. package/dest/config.js +23 -9
  21. package/dest/errors/tx-pool.error.d.ts +8 -0
  22. package/dest/errors/tx-pool.error.d.ts.map +1 -0
  23. package/dest/errors/tx-pool.error.js +9 -0
  24. package/dest/index.d.ts +2 -1
  25. package/dest/index.d.ts.map +1 -1
  26. package/dest/index.js +1 -0
  27. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +111 -76
  28. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool.js +441 -3
  30. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +2 -2
  31. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  32. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +527 -287
  33. package/dest/mem_pools/attestation_pool/index.d.ts +2 -3
  34. package/dest/mem_pools/attestation_pool/index.d.ts.map +1 -1
  35. package/dest/mem_pools/attestation_pool/index.js +1 -2
  36. package/dest/mem_pools/attestation_pool/mocks.d.ts +9 -6
  37. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  38. package/dest/mem_pools/attestation_pool/mocks.js +16 -12
  39. package/dest/mem_pools/index.d.ts +3 -2
  40. package/dest/mem_pools/index.d.ts.map +1 -1
  41. package/dest/mem_pools/index.js +1 -1
  42. package/dest/mem_pools/instrumentation.d.ts +1 -1
  43. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  44. package/dest/mem_pools/instrumentation.js +5 -14
  45. package/dest/mem_pools/interface.d.ts +5 -5
  46. package/dest/mem_pools/interface.d.ts.map +1 -1
  47. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +15 -10
  48. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  49. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +91 -50
  50. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +19 -5
  51. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -1
  52. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +59 -3
  53. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +79 -5
  54. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -1
  55. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +47 -0
  56. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  57. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  58. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  59. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +2 -2
  60. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -1
  61. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +3 -3
  62. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +4 -4
  63. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -1
  64. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +2 -0
  65. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +2 -2
  66. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -1
  67. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  68. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  69. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  70. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts +2 -0
  71. package/dest/mem_pools/tx_pool_v2/archive/index.d.ts.map +1 -0
  72. package/dest/mem_pools/tx_pool_v2/archive/index.js +1 -0
  73. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts +43 -0
  74. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.d.ts.map +1 -0
  75. package/dest/mem_pools/tx_pool_v2/archive/tx_archive.js +103 -0
  76. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts +104 -0
  77. package/dest/mem_pools/tx_pool_v2/deleted_pool.d.ts.map +1 -0
  78. package/dest/mem_pools/tx_pool_v2/deleted_pool.js +251 -0
  79. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts +47 -0
  80. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.d.ts.map +1 -0
  81. package/dest/mem_pools/tx_pool_v2/eviction/eviction_manager.js +128 -0
  82. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +17 -0
  83. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  84. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +93 -0
  85. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts +19 -0
  86. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.d.ts.map +1 -0
  87. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.js +95 -0
  88. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +10 -0
  89. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -0
  90. package/dest/mem_pools/tx_pool_v2/eviction/index.js +11 -0
  91. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +174 -0
  92. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -0
  93. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.js +25 -0
  94. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts +15 -0
  95. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  96. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.js +65 -0
  97. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts +17 -0
  98. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  99. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +93 -0
  100. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts +16 -0
  101. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  102. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.js +78 -0
  103. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +20 -0
  104. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -0
  105. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +73 -0
  106. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +15 -0
  107. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -0
  108. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +19 -0
  109. package/dest/mem_pools/tx_pool_v2/index.d.ts +6 -0
  110. package/dest/mem_pools/tx_pool_v2/index.d.ts.map +1 -0
  111. package/dest/mem_pools/tx_pool_v2/index.js +5 -0
  112. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts +15 -0
  113. package/dest/mem_pools/tx_pool_v2/instrumentation.d.ts.map +1 -0
  114. package/dest/mem_pools/tx_pool_v2/instrumentation.js +43 -0
  115. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +211 -0
  116. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -0
  117. package/dest/mem_pools/tx_pool_v2/interfaces.js +9 -0
  118. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +97 -0
  119. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -0
  120. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +152 -0
  121. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts +26 -0
  122. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.d.ts.map +1 -0
  123. package/dest/mem_pools/tx_pool_v2/tx_pool_bench_metrics.js +70 -0
  124. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +108 -0
  125. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -0
  126. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +355 -0
  127. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +60 -0
  128. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -0
  129. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +161 -0
  130. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +77 -0
  131. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -0
  132. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +896 -0
  133. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -4
  134. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  135. package/dest/msg_validators/attestation_validator/attestation_validator.js +51 -18
  136. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -7
  137. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  138. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +22 -13
  139. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  140. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  141. package/dest/msg_validators/clock_tolerance.js +37 -0
  142. package/dest/msg_validators/index.d.ts +2 -2
  143. package/dest/msg_validators/index.d.ts.map +1 -1
  144. package/dest/msg_validators/index.js +1 -1
  145. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  146. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  147. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  148. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  149. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  150. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  151. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  152. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  153. package/dest/msg_validators/proposal_validator/index.js +3 -0
  154. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  155. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  156. package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
  157. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  158. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  159. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
  160. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +3 -3
  161. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  162. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  163. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  164. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  165. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +20 -6
  166. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  167. package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
  168. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  169. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  170. package/dest/msg_validators/tx_validator/data_validator.js +4 -1
  171. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +15 -4
  172. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  173. package/dest/msg_validators/tx_validator/double_spend_validator.js +7 -6
  174. package/dest/msg_validators/tx_validator/factory.d.ts +8 -3
  175. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  176. package/dest/msg_validators/tx_validator/factory.js +21 -11
  177. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  178. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  179. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  180. package/dest/msg_validators/tx_validator/gas_validator.d.ts +3 -2
  181. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  182. package/dest/msg_validators/tx_validator/gas_validator.js +11 -16
  183. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  184. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  185. package/dest/msg_validators/tx_validator/index.js +1 -0
  186. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +3 -2
  187. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  188. package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
  189. package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
  190. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  191. package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
  192. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  193. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  194. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  195. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +22 -5
  196. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  197. package/dest/msg_validators/tx_validator/timestamp_validator.js +8 -8
  198. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  199. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  200. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  201. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  202. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  203. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  204. package/dest/services/data_store.d.ts +1 -1
  205. package/dest/services/data_store.d.ts.map +1 -1
  206. package/dest/services/data_store.js +10 -6
  207. package/dest/services/discv5/discV5_service.js +1 -1
  208. package/dest/services/dummy_service.d.ts +28 -3
  209. package/dest/services/dummy_service.d.ts.map +1 -1
  210. package/dest/services/dummy_service.js +51 -0
  211. package/dest/services/encoding.d.ts +2 -2
  212. package/dest/services/encoding.d.ts.map +1 -1
  213. package/dest/services/encoding.js +9 -7
  214. package/dest/services/gossipsub/index.d.ts +3 -0
  215. package/dest/services/gossipsub/index.d.ts.map +1 -0
  216. package/dest/services/gossipsub/index.js +2 -0
  217. package/dest/services/gossipsub/scoring.d.ts +21 -3
  218. package/dest/services/gossipsub/scoring.d.ts.map +1 -1
  219. package/dest/services/gossipsub/scoring.js +24 -7
  220. package/dest/services/gossipsub/topic_score_params.d.ts +173 -0
  221. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -0
  222. package/dest/services/gossipsub/topic_score_params.js +346 -0
  223. package/dest/services/index.d.ts +2 -1
  224. package/dest/services/index.d.ts.map +1 -1
  225. package/dest/services/index.js +1 -0
  226. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  227. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  228. package/dest/services/libp2p/instrumentation.js +30 -72
  229. package/dest/services/libp2p/libp2p_service.d.ts +106 -33
  230. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  231. package/dest/services/libp2p/libp2p_service.js +984 -317
  232. package/dest/services/peer-manager/metrics.d.ts +2 -2
  233. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  234. package/dest/services/peer-manager/metrics.js +21 -26
  235. package/dest/services/peer-manager/peer_manager.d.ts +2 -2
  236. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  237. package/dest/services/peer-manager/peer_manager.js +0 -10
  238. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  239. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  240. package/dest/services/peer-manager/peer_scoring.js +32 -6
  241. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +48 -0
  242. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  243. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +562 -0
  244. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  245. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  246. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  247. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +46 -0
  248. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  249. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  250. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +34 -0
  251. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  252. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +130 -0
  253. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
  254. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  255. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
  256. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  257. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  258. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  259. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  260. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  261. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  262. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  263. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  264. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  265. package/dest/services/reqresp/constants.d.ts +12 -0
  266. package/dest/services/reqresp/constants.d.ts.map +1 -0
  267. package/dest/services/reqresp/constants.js +7 -0
  268. package/dest/services/reqresp/interface.d.ts +12 -1
  269. package/dest/services/reqresp/interface.d.ts.map +1 -1
  270. package/dest/services/reqresp/interface.js +15 -1
  271. package/dest/services/reqresp/metrics.d.ts +6 -5
  272. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  273. package/dest/services/reqresp/metrics.js +17 -21
  274. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  275. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  276. package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
  277. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +7 -5
  278. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  279. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +27 -9
  280. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +29 -6
  281. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  282. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +59 -13
  283. package/dest/services/reqresp/protocols/status.d.ts +1 -1
  284. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  285. package/dest/services/reqresp/protocols/status.js +4 -1
  286. package/dest/services/reqresp/protocols/tx.d.ts +7 -1
  287. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  288. package/dest/services/reqresp/protocols/tx.js +20 -0
  289. package/dest/services/reqresp/reqresp.d.ts +6 -1
  290. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  291. package/dest/services/reqresp/reqresp.js +471 -50
  292. package/dest/services/service.d.ts +55 -3
  293. package/dest/services/service.d.ts.map +1 -1
  294. package/dest/services/tx_collection/config.d.ts +22 -1
  295. package/dest/services/tx_collection/config.d.ts.map +1 -1
  296. package/dest/services/tx_collection/config.js +55 -1
  297. package/dest/services/tx_collection/fast_tx_collection.d.ts +7 -4
  298. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  299. package/dest/services/tx_collection/fast_tx_collection.js +71 -44
  300. package/dest/services/tx_collection/file_store_tx_collection.d.ts +53 -0
  301. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -0
  302. package/dest/services/tx_collection/file_store_tx_collection.js +167 -0
  303. package/dest/services/tx_collection/file_store_tx_source.d.ts +37 -0
  304. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -0
  305. package/dest/services/tx_collection/file_store_tx_source.js +90 -0
  306. package/dest/services/tx_collection/index.d.ts +3 -1
  307. package/dest/services/tx_collection/index.d.ts.map +1 -1
  308. package/dest/services/tx_collection/index.js +2 -0
  309. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  310. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  311. package/dest/services/tx_collection/instrumentation.js +11 -13
  312. package/dest/services/tx_collection/missing_txs_tracker.d.ts +32 -0
  313. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +1 -0
  314. package/dest/services/tx_collection/missing_txs_tracker.js +27 -0
  315. package/dest/services/tx_collection/proposal_tx_collector.d.ts +49 -0
  316. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  317. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  318. package/dest/services/tx_collection/slow_tx_collection.d.ts +9 -5
  319. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  320. package/dest/services/tx_collection/slow_tx_collection.js +60 -26
  321. package/dest/services/tx_collection/tx_collection.d.ts +29 -16
  322. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  323. package/dest/services/tx_collection/tx_collection.js +79 -7
  324. package/dest/services/tx_collection/tx_collection_sink.d.ts +18 -8
  325. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  326. package/dest/services/tx_collection/tx_collection_sink.js +26 -29
  327. package/dest/services/tx_collection/tx_source.d.ts +8 -3
  328. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  329. package/dest/services/tx_collection/tx_source.js +19 -2
  330. package/dest/services/tx_file_store/config.d.ts +16 -0
  331. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  332. package/dest/services/tx_file_store/config.js +22 -0
  333. package/dest/services/tx_file_store/index.d.ts +4 -0
  334. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  335. package/dest/services/tx_file_store/index.js +3 -0
  336. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  337. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  338. package/dest/services/tx_file_store/instrumentation.js +29 -0
  339. package/dest/services/tx_file_store/tx_file_store.d.ts +48 -0
  340. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  341. package/dest/services/tx_file_store/tx_file_store.js +152 -0
  342. package/dest/services/tx_provider.d.ts +5 -5
  343. package/dest/services/tx_provider.d.ts.map +1 -1
  344. package/dest/services/tx_provider.js +5 -4
  345. package/dest/services/tx_provider_instrumentation.d.ts +1 -1
  346. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  347. package/dest/services/tx_provider_instrumentation.js +7 -20
  348. package/dest/test-helpers/index.d.ts +3 -1
  349. package/dest/test-helpers/index.d.ts.map +1 -1
  350. package/dest/test-helpers/index.js +2 -0
  351. package/dest/test-helpers/make-test-p2p-clients.d.ts +3 -3
  352. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  353. package/dest/test-helpers/mock-pubsub.d.ts +29 -2
  354. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  355. package/dest/test-helpers/mock-pubsub.js +103 -2
  356. package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
  357. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  358. package/dest/test-helpers/reqresp-nodes.js +2 -1
  359. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  360. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  361. package/dest/test-helpers/test_tx_provider.js +41 -0
  362. package/dest/test-helpers/testbench-utils.d.ts +163 -0
  363. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  364. package/dest/test-helpers/testbench-utils.js +366 -0
  365. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  366. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  367. package/dest/testbench/p2p_client_testbench_worker.js +221 -127
  368. package/dest/testbench/worker_client_manager.d.ts +51 -6
  369. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  370. package/dest/testbench/worker_client_manager.js +226 -39
  371. package/dest/util.d.ts +2 -2
  372. package/dest/util.d.ts.map +1 -1
  373. package/package.json +16 -16
  374. package/src/bootstrap/bootstrap.ts +7 -4
  375. package/src/client/factory.ts +96 -24
  376. package/src/client/interface.ts +76 -25
  377. package/src/client/p2p_client.ts +269 -290
  378. package/src/client/test/tx_proposal_collector/README.md +227 -0
  379. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +346 -0
  380. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  381. package/src/config.ts +49 -13
  382. package/src/errors/tx-pool.error.ts +12 -0
  383. package/src/index.ts +1 -0
  384. package/src/mem_pools/attestation_pool/attestation_pool.ts +510 -78
  385. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +612 -320
  386. package/src/mem_pools/attestation_pool/index.ts +9 -2
  387. package/src/mem_pools/attestation_pool/mocks.ts +20 -13
  388. package/src/mem_pools/index.ts +4 -1
  389. package/src/mem_pools/instrumentation.ts +10 -18
  390. package/src/mem_pools/interface.ts +4 -4
  391. package/src/mem_pools/tx_pool/README.md +29 -14
  392. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +130 -75
  393. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +66 -5
  394. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +119 -4
  395. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  396. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +3 -3
  397. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +4 -2
  398. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  399. package/src/mem_pools/tx_pool_v2/README.md +275 -0
  400. package/src/mem_pools/tx_pool_v2/archive/index.ts +1 -0
  401. package/src/mem_pools/tx_pool_v2/archive/tx_archive.ts +120 -0
  402. package/src/mem_pools/tx_pool_v2/deleted_pool.ts +321 -0
  403. package/src/mem_pools/tx_pool_v2/eviction/eviction_manager.ts +160 -0
  404. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +121 -0
  405. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_pre_add_rule.ts +122 -0
  406. package/src/mem_pools/tx_pool_v2/eviction/index.ts +27 -0
  407. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +209 -0
  408. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_mining_rule.ts +74 -0
  409. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +101 -0
  410. package/src/mem_pools/tx_pool_v2/eviction/low_priority_eviction_rule.ts +91 -0
  411. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +90 -0
  412. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +31 -0
  413. package/src/mem_pools/tx_pool_v2/index.ts +12 -0
  414. package/src/mem_pools/tx_pool_v2/instrumentation.ts +69 -0
  415. package/src/mem_pools/tx_pool_v2/interfaces.ts +242 -0
  416. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +242 -0
  417. package/src/mem_pools/tx_pool_v2/tx_pool_bench_metrics.ts +77 -0
  418. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +444 -0
  419. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +223 -0
  420. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +1069 -0
  421. package/src/msg_validators/attestation_validator/attestation_validator.ts +36 -21
  422. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +21 -18
  423. package/src/msg_validators/clock_tolerance.ts +51 -0
  424. package/src/msg_validators/index.ts +1 -1
  425. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  426. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  427. package/src/msg_validators/proposal_validator/index.ts +3 -0
  428. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  429. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  430. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +2 -2
  431. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  432. package/src/msg_validators/tx_validator/block_header_validator.ts +21 -8
  433. package/src/msg_validators/tx_validator/data_validator.ts +18 -6
  434. package/src/msg_validators/tx_validator/double_spend_validator.ts +15 -9
  435. package/src/msg_validators/tx_validator/factory.ts +64 -23
  436. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  437. package/src/msg_validators/tx_validator/gas_validator.ts +17 -28
  438. package/src/msg_validators/tx_validator/index.ts +1 -0
  439. package/src/msg_validators/tx_validator/metadata_validator.ts +18 -7
  440. package/src/msg_validators/tx_validator/phases_validator.ts +5 -3
  441. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  442. package/src/msg_validators/tx_validator/timestamp_validator.ts +29 -19
  443. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  444. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  445. package/src/services/data_store.ts +10 -7
  446. package/src/services/discv5/discV5_service.ts +1 -1
  447. package/src/services/dummy_service.ts +68 -1
  448. package/src/services/encoding.ts +8 -6
  449. package/src/services/gossipsub/README.md +641 -0
  450. package/src/services/gossipsub/index.ts +2 -0
  451. package/src/services/gossipsub/scoring.ts +29 -5
  452. package/src/services/gossipsub/topic_score_params.ts +487 -0
  453. package/src/services/index.ts +1 -0
  454. package/src/services/libp2p/instrumentation.ts +32 -73
  455. package/src/services/libp2p/libp2p_service.ts +651 -301
  456. package/src/services/peer-manager/metrics.ts +22 -26
  457. package/src/services/peer-manager/peer_manager.ts +1 -2
  458. package/src/services/peer-manager/peer_scoring.ts +28 -4
  459. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  460. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
  461. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  462. package/src/services/reqresp/batch-tx-requester/interface.ts +53 -0
  463. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +161 -0
  464. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
  465. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  466. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  467. package/src/services/reqresp/connection-sampler/connection_sampler.ts +19 -1
  468. package/src/services/reqresp/constants.ts +14 -0
  469. package/src/services/reqresp/interface.ts +29 -1
  470. package/src/services/reqresp/metrics.ts +36 -27
  471. package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
  472. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +35 -12
  473. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +74 -9
  474. package/src/services/reqresp/protocols/status.ts +7 -4
  475. package/src/services/reqresp/protocols/tx.ts +22 -0
  476. package/src/services/reqresp/reqresp.ts +79 -22
  477. package/src/services/service.ts +72 -4
  478. package/src/services/tx_collection/config.ts +83 -1
  479. package/src/services/tx_collection/fast_tx_collection.ts +93 -47
  480. package/src/services/tx_collection/file_store_tx_collection.ts +202 -0
  481. package/src/services/tx_collection/file_store_tx_source.ts +117 -0
  482. package/src/services/tx_collection/index.ts +6 -0
  483. package/src/services/tx_collection/instrumentation.ts +11 -13
  484. package/src/services/tx_collection/missing_txs_tracker.ts +52 -0
  485. package/src/services/tx_collection/proposal_tx_collector.ts +113 -0
  486. package/src/services/tx_collection/slow_tx_collection.ts +68 -35
  487. package/src/services/tx_collection/tx_collection.ts +121 -24
  488. package/src/services/tx_collection/tx_collection_sink.ts +30 -34
  489. package/src/services/tx_collection/tx_source.ts +22 -3
  490. package/src/services/tx_file_store/config.ts +37 -0
  491. package/src/services/tx_file_store/index.ts +3 -0
  492. package/src/services/tx_file_store/instrumentation.ts +36 -0
  493. package/src/services/tx_file_store/tx_file_store.ts +175 -0
  494. package/src/services/tx_provider.ts +10 -9
  495. package/src/services/tx_provider_instrumentation.ts +13 -20
  496. package/src/test-helpers/index.ts +2 -0
  497. package/src/test-helpers/make-test-p2p-clients.ts +3 -3
  498. package/src/test-helpers/mock-pubsub.ts +143 -3
  499. package/src/test-helpers/reqresp-nodes.ts +2 -1
  500. package/src/test-helpers/test_tx_provider.ts +64 -0
  501. package/src/test-helpers/testbench-utils.ts +430 -0
  502. package/src/testbench/p2p_client_testbench_worker.ts +348 -123
  503. package/src/testbench/worker_client_manager.ts +304 -42
  504. package/src/util.ts +7 -1
  505. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +0 -37
  506. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +0 -1
  507. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +0 -213
  508. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +0 -30
  509. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +0 -1
  510. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +0 -219
  511. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts +0 -15
  512. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.d.ts.map +0 -1
  513. package/dest/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.js +0 -88
  514. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  515. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  516. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -82
  517. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  518. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  519. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  520. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +0 -298
  521. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +0 -287
  522. package/src/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.ts +0 -108
  523. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -97
  524. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -1,213 +0,0 @@
1
- import { SlotNumber } from '@aztec/foundation/branded-types';
2
- import { Fr } from '@aztec/foundation/curves/bn254';
3
- import { toArray } from '@aztec/foundation/iterable';
4
- import { createLogger } from '@aztec/foundation/log';
5
- import { BlockAttestation, BlockProposal } from '@aztec/stdlib/p2p';
6
- import { getTelemetryClient } from '@aztec/telemetry-client';
7
- import { ProposalSlotCapExceededError } from '../../errors/attestation-pool.error.js';
8
- import { PoolInstrumentation, PoolName } from '../instrumentation.js';
9
- export const MAX_PROPOSALS_PER_SLOT = 5;
10
- export const ATTESTATION_CAP_BUFFER = 10;
11
- export class KvAttestationPool {
12
- store;
13
- log;
14
- metrics;
15
- attestations;
16
- proposals;
17
- proposalsForSlot;
18
- attestationsForProposal;
19
- constructor(store, telemetry = getTelemetryClient(), log = createLogger('aztec:attestation_pool')){
20
- this.store = store;
21
- this.log = log;
22
- this.poolStats = async ()=>{
23
- return {
24
- itemCount: await this.attestations.sizeAsync()
25
- };
26
- };
27
- this.attestations = store.openMap('attestations');
28
- this.proposals = store.openMap('proposals');
29
- this.proposalsForSlot = store.openMultiMap('proposals_for_slot');
30
- this.attestationsForProposal = store.openMultiMap('attestations_for_proposal');
31
- this.metrics = new PoolInstrumentation(telemetry, PoolName.ATTESTATION_POOL, this.poolStats);
32
- }
33
- poolStats;
34
- async isEmpty() {
35
- for await (const _ of this.attestations.entriesAsync()){
36
- return false;
37
- }
38
- return true;
39
- }
40
- getProposalKey(slot, proposalId) {
41
- const slotStr = typeof slot === 'string' ? slot : new Fr(slot).toString();
42
- const proposalIdStr = typeof proposalId === 'string' ? proposalId : Buffer.isBuffer(proposalId) ? Fr.fromBuffer(proposalId).toString() : proposalId.toString();
43
- return `${slotStr}-${proposalIdStr}`;
44
- }
45
- getAttestationKey(slot, proposalId, address) {
46
- return `${this.getProposalKey(slot, proposalId)}-${address}`;
47
- }
48
- async addAttestations(attestations) {
49
- await this.store.transactionAsync(async ()=>{
50
- for (const attestation of attestations){
51
- const slotNumber = attestation.payload.header.slotNumber;
52
- const proposalId = attestation.archive;
53
- const sender = attestation.getSender();
54
- // Skip attestations with invalid signatures
55
- if (!sender) {
56
- this.log.warn(`Skipping attestation with invalid signature for slot ${slotNumber}`, {
57
- signature: attestation.signature.toString(),
58
- slotNumber,
59
- proposalId
60
- });
61
- continue;
62
- }
63
- 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}`, {
68
- signature: attestation.signature.toString(),
69
- slotNumber,
70
- address,
71
- proposalId
72
- });
73
- }
74
- });
75
- }
76
- async getAttestationsForSlot(slot) {
77
- const proposalIds = await toArray(this.proposalsForSlot.getValuesAsync(slot));
78
- const attestations = [];
79
- for (const proposalId of proposalIds){
80
- attestations.push(...await this.getAttestationsForSlotAndProposal(slot, proposalId));
81
- }
82
- return attestations;
83
- }
84
- async getAttestationsForSlotAndProposal(slot, proposalId) {
85
- const attestationIds = await toArray(this.attestationsForProposal.getValuesAsync(this.getProposalKey(slot, proposalId)));
86
- const attestations = [];
87
- // alternatively iterate this.attestaions starting from slot-proposal-EthAddress.zero
88
- for (const id of attestationIds){
89
- const buf = await this.attestations.getAsync(id);
90
- if (!buf) {
91
- // this should not happen unless we lost writes
92
- throw new Error('Attestation not found ' + id);
93
- }
94
- const attestation = BlockAttestation.fromBuffer(buf);
95
- attestations.push(attestation);
96
- }
97
- return attestations;
98
- }
99
- async deleteAttestationsOlderThan(oldestSlot) {
100
- const olderThan = await toArray(this.proposalsForSlot.keysAsync({
101
- end: oldestSlot
102
- }));
103
- for (const oldSlot of olderThan){
104
- await this.deleteAttestationsForSlot(SlotNumber(oldSlot));
105
- }
106
- }
107
- async deleteAttestationsForSlot(slot) {
108
- let numberOfAttestations = 0;
109
- await this.store.transactionAsync(async ()=>{
110
- const proposalIds = await toArray(this.proposalsForSlot.getValuesAsync(slot));
111
- for (const proposalId of proposalIds){
112
- const attestations = await toArray(this.attestationsForProposal.getValuesAsync(this.getProposalKey(slot, proposalId)));
113
- numberOfAttestations += attestations.length;
114
- for (const attestation of attestations){
115
- await this.attestations.delete(attestation);
116
- }
117
- await this.proposals.delete(proposalId);
118
- await this.attestationsForProposal.delete(this.getProposalKey(slot, proposalId));
119
- }
120
- // Delete from proposalsForSlot
121
- await this.proposalsForSlot.delete(slot);
122
- this.log.verbose(`Removed ${numberOfAttestations} attestations for slot ${slot}`);
123
- });
124
- }
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) {
161
- const slotNumber = attestation.payload.header.slotNumber;
162
- const proposalId = attestation.archive;
163
- const sender = attestation.getSender();
164
- // Attestations with invalid signatures are never in the pool
165
- if (!sender) {
166
- return false;
167
- }
168
- const address = sender.toString();
169
- const key = this.getAttestationKey(slotNumber, proposalId, address);
170
- return await this.attestations.hasAsync(key);
171
- }
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);
182
- }
183
- async hasBlockProposal(idOrProposal) {
184
- const id = typeof idOrProposal === 'string' ? idOrProposal : idOrProposal.payload.archive.toString();
185
- return await this.proposals.hasAsync(id);
186
- }
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
- });
198
- }
199
- async hasReachedProposalCap(slot) {
200
- const uniqueProposalCount = await this.proposalsForSlot.getValueCountAsync(slot);
201
- return uniqueProposalCount >= MAX_PROPOSALS_PER_SLOT;
202
- }
203
- async hasReachedAttestationCap(slot, proposalId, committeeSize) {
204
- 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);
212
- }
213
- }
@@ -1,30 +0,0 @@
1
- import type { SlotNumber } from '@aztec/foundation/branded-types';
2
- import type { BlockAttestation, BlockProposal } from '@aztec/stdlib/p2p';
3
- import { type TelemetryClient } from '@aztec/telemetry-client';
4
- import type { AttestationPool } from './attestation_pool.js';
5
- export declare class InMemoryAttestationPool implements AttestationPool {
6
- #private;
7
- private log;
8
- private metrics;
9
- private attestations;
10
- private proposals;
11
- constructor(telemetry?: TelemetryClient, log?: import("@aztec/foundation/log").Logger);
12
- private poolStats;
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
- addBlockProposal(blockProposal: BlockProposal): Promise<void>;
23
- getBlockProposal(id: string): Promise<BlockProposal | undefined>;
24
- 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>;
29
- }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5X2F0dGVzdGF0aW9uX3Bvb2wuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tZW1fcG9vbHMvYXR0ZXN0YXRpb25fcG9vbC9tZW1vcnlfYXR0ZXN0YXRpb25fcG9vbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVsRSxPQUFPLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsS0FBSyxlQUFlLEVBQXNCLE1BQU0seUJBQXlCLENBQUM7QUFHbkYsT0FBTyxLQUFLLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHN0QscUJBQWEsdUJBQXdCLFlBQVcsZUFBZTs7SUFZM0QsT0FBTyxDQUFDLEdBQUc7SUFYYixPQUFPLENBQUMsT0FBTyxDQUF3QztJQUd2RCxPQUFPLENBQUMsWUFBWSxDQUdsQjtJQUNGLE9BQU8sQ0FBQyxTQUFTLENBQTZCO0lBRTlDLFlBQ0UsU0FBUyxHQUFFLGVBQXNDLEVBQ3pDLEdBQUcseUNBQXVDLEVBS25EO0lBRUQsT0FBTyxDQUFDLFNBQVMsQ0FJZjtJQUVLLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBRWpDO0lBRU0sc0JBQXNCLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQU0zRTtJQUVNLGlDQUFpQyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQVMxRztJQUVNLGVBQWUsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBK0J0RTtJQWNZLDJCQUEyQixDQUFDLFVBQVUsRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQW1COUU7SUFFTSx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FnQmhFO0lBRU0sb0NBQW9DLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FjL0Y7SUFFTSxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBc0J6RTtJQUVNLGNBQWMsQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQXFCckU7SUFFTSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FRbkU7SUFFTSxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDLENBRXRFO0lBRU0sZ0JBQWdCLENBQUMsWUFBWSxFQUFFLE1BQU0sR0FBRyxhQUFhLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUc5RTtJQUVNLHFCQUFxQixDQUFDLElBQUksRUFBRSxVQUFVLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUkvRDtJQUVNLHdCQUF3QixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FJN0c7SUFFWSxjQUFjLENBQUMsS0FBSyxFQUFFLGFBQWEsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLENBRWxFO0lBRVksaUJBQWlCLENBQUMsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQVNyRztDQUNGIn0=
@@ -1 +0,0 @@
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,219 +0,0 @@
1
- import { createLogger } from '@aztec/foundation/log';
2
- import { getTelemetryClient } from '@aztec/telemetry-client';
3
- import { PoolInstrumentation, PoolName } from '../instrumentation.js';
4
- import { ATTESTATION_CAP_BUFFER, MAX_PROPOSALS_PER_SLOT } from './kv_attestation_pool.js';
5
- export class InMemoryAttestationPool {
6
- log;
7
- metrics;
8
- // eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
9
- attestations;
10
- proposals;
11
- constructor(telemetry = getTelemetryClient(), log = createLogger('p2p:attestation_pool')){
12
- this.log = log;
13
- this.poolStats = ()=>{
14
- return Promise.resolve({
15
- itemCount: this.attestations.size
16
- });
17
- };
18
- this.attestations = new Map();
19
- this.proposals = new Map();
20
- this.metrics = new PoolInstrumentation(telemetry, PoolName.ATTESTATION_POOL, this.poolStats);
21
- }
22
- poolStats;
23
- isEmpty() {
24
- return Promise.resolve(this.attestations.size === 0);
25
- }
26
- getAttestationsForSlot(slot) {
27
- return Promise.resolve(Array.from(this.attestations.get(slot)?.values() ?? []).flatMap((proposalAttestationMap)=>Array.from(proposalAttestationMap.values())));
28
- }
29
- getAttestationsForSlotAndProposal(slot, proposalId) {
30
- const slotAttestationMap = this.attestations.get(slot);
31
- if (slotAttestationMap) {
32
- const proposalAttestationMap = slotAttestationMap.get(proposalId);
33
- if (proposalAttestationMap) {
34
- return Promise.resolve(Array.from(proposalAttestationMap.values()));
35
- }
36
- }
37
- return Promise.resolve([]);
38
- }
39
- addAttestations(attestations) {
40
- for (const attestation of attestations){
41
- // Perf: order and group by slot before insertion
42
- const slotNumber = attestation.payload.header.slotNumber;
43
- const proposalId = attestation.archive.toString();
44
- const sender = attestation.getSender();
45
- // Skip attestations with invalid signatures
46
- if (!sender) {
47
- this.log.warn(`Skipping attestation with invalid signature for slot ${slotNumber}`, {
48
- signature: attestation.signature.toString(),
49
- slotNumber,
50
- proposalId
51
- });
52
- continue;
53
- }
54
- const slotAttestationMap = getSlotOrDefault(this.attestations, slotNumber);
55
- const proposalAttestationMap = getProposalOrDefault(slotAttestationMap, proposalId);
56
- proposalAttestationMap.set(sender.toString(), attestation);
57
- this.log.verbose(`Added attestation for slot ${slotNumber} from ${sender}`, {
58
- signature: attestation.signature.toString(),
59
- slotNumber,
60
- address: sender,
61
- proposalId
62
- });
63
- }
64
- return Promise.resolve();
65
- }
66
- #getNumberOfAttestationsInSlot(slot) {
67
- let total = 0;
68
- const slotAttestationMap = getSlotOrDefault(this.attestations, slot);
69
- if (slotAttestationMap) {
70
- for (const proposalAttestationMap of slotAttestationMap.values() ?? []){
71
- total += proposalAttestationMap.size;
72
- }
73
- }
74
- return total;
75
- }
76
- async deleteAttestationsOlderThan(oldestSlot) {
77
- const olderThan = [];
78
- // Entries are iterated in insertion order, so we can break as soon as we find a slot that is older than the oldestSlot.
79
- // Note: this will only prune correctly if attestations are added in order of rising slot, it is important that we do not allow
80
- // insertion of attestations that are old. #(https://github.com/AztecProtocol/aztec-packages/issues/10322)
81
- const slots = this.attestations.keys();
82
- for (const slot of slots){
83
- if (slot < oldestSlot) {
84
- olderThan.push(slot);
85
- } else {
86
- break;
87
- }
88
- }
89
- for (const oldSlot of olderThan){
90
- await this.deleteAttestationsForSlot(oldSlot);
91
- }
92
- return Promise.resolve();
93
- }
94
- deleteAttestationsForSlot(slot) {
95
- // We count the number of attestations we are removing
96
- const numberOfAttestations = this.#getNumberOfAttestationsInSlot(slot);
97
- const proposalIdsToDelete = this.attestations.get(slot)?.keys();
98
- let proposalIdsToDeleteCount = 0;
99
- proposalIdsToDelete?.forEach((proposalId)=>{
100
- this.proposals.delete(proposalId);
101
- proposalIdsToDeleteCount++;
102
- });
103
- this.attestations.delete(slot);
104
- this.log.verbose(`Removed ${numberOfAttestations} attestations and ${proposalIdsToDeleteCount} proposals for slot ${slot}`);
105
- return Promise.resolve();
106
- }
107
- deleteAttestationsForSlotAndProposal(slot, proposalId) {
108
- const slotAttestationMap = getSlotOrDefault(this.attestations, slot);
109
- if (slotAttestationMap) {
110
- if (slotAttestationMap.has(proposalId)) {
111
- const numberOfAttestations = slotAttestationMap.get(proposalId)?.size ?? 0;
112
- slotAttestationMap.delete(proposalId);
113
- this.log.verbose(`Removed ${numberOfAttestations} attestations for slot ${slot} and proposal ${proposalId}`);
114
- }
115
- }
116
- this.proposals.delete(proposalId);
117
- return Promise.resolve();
118
- }
119
- deleteAttestations(attestations) {
120
- for (const attestation of attestations){
121
- const slotNumber = attestation.payload.header.slotNumber;
122
- const slotAttestationMap = this.attestations.get(slotNumber);
123
- if (slotAttestationMap) {
124
- const proposalId = attestation.archive.toString();
125
- const proposalAttestationMap = getProposalOrDefault(slotAttestationMap, proposalId);
126
- if (proposalAttestationMap) {
127
- const sender = attestation.getSender();
128
- // Skip attestations with invalid signatures
129
- if (!sender) {
130
- this.log.warn(`Skipping deletion of attestation with invalid signature for slot ${slotNumber}`);
131
- continue;
132
- }
133
- proposalAttestationMap.delete(sender.toString());
134
- this.log.debug(`Deleted attestation for slot ${slotNumber} from ${sender}`);
135
- }
136
- }
137
- }
138
- return Promise.resolve();
139
- }
140
- hasAttestation(attestation) {
141
- const slotNumber = attestation.payload.header.slotNumber;
142
- const proposalId = attestation.archive.toString();
143
- const sender = attestation.getSender();
144
- // Attestations with invalid signatures are never in the pool
145
- if (!sender) {
146
- return Promise.resolve(false);
147
- }
148
- const slotAttestationMap = this.attestations.get(slotNumber);
149
- if (!slotAttestationMap) {
150
- return Promise.resolve(false);
151
- }
152
- const proposalAttestationMap = slotAttestationMap.get(proposalId);
153
- if (!proposalAttestationMap) {
154
- return Promise.resolve(false);
155
- }
156
- return Promise.resolve(proposalAttestationMap.has(sender.toString()));
157
- }
158
- addBlockProposal(blockProposal) {
159
- // We initialize slot-proposal mapping if it does not exist
160
- // This is important to ensure we can delete this proposal if there were not attestations for it
161
- const slotProposalMapping = getSlotOrDefault(this.attestations, blockProposal.slotNumber);
162
- slotProposalMapping.set(blockProposal.payload.archive.toString(), new Map());
163
- this.proposals.set(blockProposal.payload.archive.toString(), blockProposal);
164
- return Promise.resolve();
165
- }
166
- getBlockProposal(id) {
167
- return Promise.resolve(this.proposals.get(id));
168
- }
169
- hasBlockProposal(idOrProposal) {
170
- const id = typeof idOrProposal === 'string' ? idOrProposal : idOrProposal.payload.archive.toString();
171
- return Promise.resolve(this.proposals.has(id));
172
- }
173
- hasReachedProposalCap(slot) {
174
- const slotAttestationMap = this.attestations.get(slot);
175
- const proposalCount = slotAttestationMap?.size ?? 0;
176
- return Promise.resolve(proposalCount >= MAX_PROPOSALS_PER_SLOT);
177
- }
178
- hasReachedAttestationCap(slot, proposalId, committeeSize) {
179
- const limit = committeeSize + ATTESTATION_CAP_BUFFER;
180
- const count = this.attestations.get(slot)?.get(proposalId)?.size ?? 0;
181
- return Promise.resolve(limit <= 0 || count >= limit);
182
- }
183
- async canAddProposal(block) {
184
- return this.proposals.has(block.archive.toString()) || !await this.hasReachedProposalCap(block.slotNumber);
185
- }
186
- async canAddAttestation(attestation, committeeSize) {
187
- const sender = attestation.getSender();
188
- const slot = attestation.payload.header.slotNumber;
189
- const pid = attestation.archive.toString();
190
- return !!sender && ((this.attestations.get(slot)?.get(pid)?.has(sender.toString()) ?? false) || !await this.hasReachedAttestationCap(slot, pid, committeeSize));
191
- }
192
- }
193
- /**
194
- * Get Slot or Default
195
- *
196
- * Fetch the slot mapping, if it does not exist, then create a mapping and return it
197
- * @param map - The map to fetch from
198
- * @param slot - The slot to fetch
199
- * @returns The slot mapping
200
- */ function getSlotOrDefault(// eslint-disable-next-line aztec-custom/no-non-primitive-in-collections
201
- map, slot) {
202
- if (!map.has(slot)) {
203
- map.set(slot, new Map());
204
- }
205
- return map.get(slot);
206
- }
207
- /**
208
- * Get Proposal or Default
209
- *
210
- * Fetch the proposal mapping, if it does not exist, then create a mapping and return it
211
- * @param map - The map to fetch from
212
- * @param proposalId - The proposal id to fetch
213
- * @returns The proposal mapping
214
- */ function getProposalOrDefault(map, proposalId) {
215
- if (!map.has(proposalId)) {
216
- map.set(proposalId, new Map());
217
- }
218
- return map.get(proposalId);
219
- }
@@ -1,15 +0,0 @@
1
- import type { ReadonlyWorldStateAccess } from '@aztec/stdlib/interfaces/server';
2
- import type { TxPoolOptions } from '../tx_pool.js';
3
- import { type EvictionContext, type EvictionResult, type EvictionRule, type TxPoolOperations } from './eviction_strategy.js';
4
- export declare class InsufficientFeePayerBalanceRule implements EvictionRule {
5
- private worldState;
6
- readonly name: string;
7
- readonly reason: string;
8
- constructor(worldState: ReadonlyWorldStateAccess);
9
- private log;
10
- evict(context: EvictionContext, txPool: TxPoolOperations): Promise<EvictionResult>;
11
- private evictTxs;
12
- private createGasTxValidator;
13
- updateConfig(_config: TxPoolOptions): void;
14
- }
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdWZmaWNpZW50X2ZlZV9wYXllcl9iYWxhbmNlX3J1bGUuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tZW1fcG9vbHMvdHhfcG9vbC9ldmljdGlvbi9pbnN1ZmZpY2llbnRfZmVlX3BheWVyX2JhbGFuY2VfcnVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEtBQUssRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBS2hGLE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsS0FBSyxlQUFlLEVBRXBCLEtBQUssY0FBYyxFQUNuQixLQUFLLFlBQVksRUFFakIsS0FBSyxnQkFBZ0IsRUFDdEIsTUFBTSx3QkFBd0IsQ0FBQztBQUVoQyxxQkFBYSwrQkFBZ0MsWUFBVyxZQUFZO0lBSS9DLE9BQU8sQ0FBQyxVQUFVO0lBSHJDLFNBQWdCLElBQUksU0FBaUM7SUFDckQsU0FBZ0IsTUFBTSxTQUE0QjtJQUVsRCxZQUEyQixVQUFVLEVBQUUsd0JBQXdCLEVBQUk7SUFFbkUsT0FBTyxDQUFDLEdBQUcsQ0FBMkU7SUFFaEYsS0FBSyxDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FrQ3ZGO1lBRWEsUUFBUTtJQXdDdEIsT0FBTyxDQUFDLG9CQUFvQjtJQUk1QixZQUFZLENBQUMsT0FBTyxFQUFFLGFBQWEsR0FBRyxJQUFJLENBQUc7Q0FDOUMifQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"insufficient_fee_payer_balance_rule.d.ts","sourceRoot":"","sources":["../../../../src/mem_pools/tx_pool/eviction/insufficient_fee_payer_balance_rule.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAKhF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,KAAK,eAAe,EAEpB,KAAK,cAAc,EACnB,KAAK,YAAY,EAEjB,KAAK,gBAAgB,EACtB,MAAM,wBAAwB,CAAC;AAEhC,qBAAa,+BAAgC,YAAW,YAAY;IAI/C,OAAO,CAAC,UAAU;IAHrC,SAAgB,IAAI,SAAiC;IACrD,SAAgB,MAAM,SAA4B;IAElD,YAA2B,UAAU,EAAE,wBAAwB,EAAI;IAEnE,OAAO,CAAC,GAAG,CAA2E;IAEhF,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CAkCvF;YAEa,QAAQ;IAwCtB,OAAO,CAAC,oBAAoB;IAI5B,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAG;CAC9C"}
@@ -1,88 +0,0 @@
1
- import { createLogger } from '@aztec/foundation/log';
2
- import { ProtocolContractAddress } from '@aztec/protocol-contracts';
3
- import { GasFees } from '@aztec/stdlib/gas';
4
- import { DatabasePublicStateSource } from '@aztec/stdlib/trees';
5
- import { GasTxValidator } from '../../../msg_validators/index.js';
6
- import { EvictionEvent } from './eviction_strategy.js';
7
- export class InsufficientFeePayerBalanceRule {
8
- worldState;
9
- name;
10
- reason;
11
- constructor(worldState){
12
- this.worldState = worldState;
13
- this.name = 'InsufficientFeePayerBalance';
14
- this.reason = 'insufficient_fee_juice';
15
- this.log = createLogger('p2p:mempool:tx_pool:insufficient_fee_payer_balance_rule');
16
- }
17
- log;
18
- async evict(context, txPool) {
19
- try {
20
- if (context.event === EvictionEvent.CHAIN_PRUNED) {
21
- const affectedTxs = await txPool.getPendingTxInfos();
22
- return this.evictTxs(affectedTxs, context.blockNumber, txPool);
23
- }
24
- if (context.event === EvictionEvent.BLOCK_MINED) {
25
- const affectedTxs = await txPool.getPendingTxsWithFeePayer(context.minedFeePayers);
26
- // TODO: fix this edge-case
27
- // This can lead to a race condition if we are catching up in the p2p client.
28
- // Let's say we have 3 txs for the same fee payer, which get mined in blocks 1, 2, 3.
29
- // Tx1 consumes fee juice, tx2 increases it, tx3 consumes it again. We see block1 with tx1 first, run this rule, and evict tx3.
30
- // But tx3 was valid (due to tx2) and mined on block3. And we have just removed from the mempool a tx we needed for proving/reexec.
31
- // -----
32
- // Proposed fix: evict only if node is synched
33
- return this.evictTxs(affectedTxs, context.block.getBlockNumber(), txPool);
34
- }
35
- return {
36
- reason: this.reason,
37
- success: true,
38
- txsEvicted: []
39
- };
40
- } catch (err) {
41
- this.log.error('Failed to evict invalid transactions after mining', {
42
- err
43
- });
44
- return {
45
- reason: this.reason,
46
- success: false,
47
- txsEvicted: [],
48
- error: new Error('Failed to evict invalid txs after mining', {
49
- cause: err
50
- })
51
- };
52
- }
53
- }
54
- async evictTxs(candidateTxs, blockNumber, txPool) {
55
- const txsToEvict = [];
56
- const gasValidator = this.createGasTxValidator(this.worldState.getSnapshot(blockNumber));
57
- for (const { txHash, isEvictable } of candidateTxs){
58
- if (!isEvictable) {
59
- continue;
60
- }
61
- const tx = await txPool.getTxByHash(txHash);
62
- if (!tx) {
63
- continue;
64
- }
65
- this.log.debug(`Validating tx balance ${txHash}`);
66
- if ((await gasValidator.validateTxFee(tx)).result === 'invalid') {
67
- this.log.verbose(`Evicting tx ${txHash} from pool due to an insufficient fee payer balance`);
68
- txsToEvict.push(txHash);
69
- continue;
70
- }
71
- }
72
- if (txsToEvict.length > 0) {
73
- await txPool.deleteTxs(txsToEvict);
74
- }
75
- this.log.verbose(`Evicted ${txsToEvict.length} invalid txs after block mined`, {
76
- txsToEvict
77
- });
78
- return {
79
- reason: this.reason,
80
- success: true,
81
- txsEvicted: txsToEvict
82
- };
83
- }
84
- createGasTxValidator(db) {
85
- return new GasTxValidator(new DatabasePublicStateSource(db), ProtocolContractAddress.FeeJuice, GasFees.empty());
86
- }
87
- updateConfig(_config) {}
88
- }
@@ -1,12 +0,0 @@
1
- import type { EpochCacheInterface } from '@aztec/epoch-cache';
2
- import { type BlockProposal, type P2PValidator, PeerErrorSeverity } from '@aztec/stdlib/p2p';
3
- export declare class BlockProposalValidator implements P2PValidator<BlockProposal> {
4
- private epochCache;
5
- private logger;
6
- private txsPermitted;
7
- constructor(epochCache: EpochCacheInterface, opts: {
8
- txsPermitted: boolean;
9
- });
10
- validate(block: BlockProposal): Promise<PeerErrorSeverity | undefined>;
11
- }
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbXNnX3ZhbGlkYXRvcnMvYmxvY2tfcHJvcG9zYWxfdmFsaWRhdG9yL2Jsb2NrX3Byb3Bvc2FsX3ZhbGlkYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sRUFBRSxLQUFLLGFBQWEsRUFBRSxLQUFLLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTdGLHFCQUFhLHNCQUF1QixZQUFXLFlBQVksQ0FBQyxhQUFhLENBQUM7SUFDeEUsT0FBTyxDQUFDLFVBQVUsQ0FBc0I7SUFDeEMsT0FBTyxDQUFDLE1BQU0sQ0FBUztJQUN2QixPQUFPLENBQUMsWUFBWSxDQUFVO0lBRTlCLFlBQVksVUFBVSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRTtRQUFFLFlBQVksRUFBRSxPQUFPLENBQUE7S0FBRSxFQUkzRTtJQUVLLFFBQVEsQ0FBQyxLQUFLLEVBQUUsYUFBYSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUMsQ0ErRTNFO0NBQ0YifQ==
@@ -1 +0,0 @@
1
- {"version":3,"file":"block_proposal_validator.d.ts","sourceRoot":"","sources":["../../../src/msg_validators/block_proposal_validator/block_proposal_validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAE7F,qBAAa,sBAAuB,YAAW,YAAY,CAAC,aAAa,CAAC;IACxE,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,YAAY,CAAU;IAE9B,YAAY,UAAU,EAAE,mBAAmB,EAAE,IAAI,EAAE;QAAE,YAAY,EAAE,OAAO,CAAA;KAAE,EAI3E;IAEK,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC,CA+E3E;CACF"}