@aztec/p2p 0.0.1-commit.f504929 → 0.0.1-commit.f650c0a5c

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 (308) hide show
  1. package/README.md +129 -3
  2. package/dest/client/factory.d.ts +2 -2
  3. package/dest/client/factory.d.ts.map +1 -1
  4. package/dest/client/factory.js +25 -11
  5. package/dest/client/interface.d.ts +9 -2
  6. package/dest/client/interface.d.ts.map +1 -1
  7. package/dest/client/p2p_client.d.ts +3 -2
  8. package/dest/client/p2p_client.d.ts.map +1 -1
  9. package/dest/client/p2p_client.js +37 -36
  10. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +17 -6
  11. package/dest/config.d.ts +24 -2
  12. package/dest/config.d.ts.map +1 -1
  13. package/dest/config.js +66 -7
  14. package/dest/errors/p2p-service.error.d.ts +9 -0
  15. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  16. package/dest/errors/p2p-service.error.js +10 -0
  17. package/dest/index.d.ts +1 -2
  18. package/dest/index.d.ts.map +1 -1
  19. package/dest/index.js +0 -1
  20. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +4 -4
  21. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  22. package/dest/mem_pools/attestation_pool/attestation_pool.js +6 -5
  23. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +6 -6
  24. package/dest/mem_pools/index.d.ts +1 -2
  25. package/dest/mem_pools/index.d.ts.map +1 -1
  26. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  27. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  28. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +2 -1
  29. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +7 -1
  30. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
  31. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
  32. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
  33. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
  34. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
  35. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
  36. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +2 -2
  37. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +9 -5
  38. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  39. package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
  40. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +25 -10
  41. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  42. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +38 -11
  43. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
  44. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  45. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +26 -43
  46. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
  47. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  48. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +3 -0
  49. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +1 -1
  50. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  51. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +21 -6
  52. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +1 -1
  53. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  54. package/dest/msg_validators/attestation_validator/attestation_validator.js +5 -4
  55. package/dest/msg_validators/clock_tolerance.d.ts +1 -1
  56. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  57. package/dest/msg_validators/clock_tolerance.js +4 -3
  58. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +5 -4
  59. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  60. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  61. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +5 -4
  62. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  63. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  64. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +12 -9
  65. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  66. package/dest/msg_validators/proposal_validator/proposal_validator.js +51 -49
  67. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +1 -1
  68. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  69. package/dest/msg_validators/tx_validator/allowed_public_setup.js +21 -32
  70. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  71. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  72. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  73. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  74. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  75. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  76. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  77. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  78. package/dest/msg_validators/tx_validator/data_validator.js +35 -2
  79. package/dest/msg_validators/tx_validator/factory.d.ts +23 -4
  80. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  81. package/dest/msg_validators/tx_validator/factory.js +36 -10
  82. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  83. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  84. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  85. package/dest/msg_validators/tx_validator/gas_validator.d.ts +13 -4
  86. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  87. package/dest/msg_validators/tx_validator/gas_validator.js +49 -17
  88. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  89. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  90. package/dest/msg_validators/tx_validator/index.js +1 -0
  91. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  92. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  93. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  94. package/dest/msg_validators/tx_validator/phases_validator.d.ts +21 -1
  95. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  96. package/dest/msg_validators/tx_validator/phases_validator.js +49 -2
  97. package/dest/services/dummy_service.d.ts +5 -3
  98. package/dest/services/dummy_service.d.ts.map +1 -1
  99. package/dest/services/dummy_service.js +5 -1
  100. package/dest/services/encoding.d.ts +5 -1
  101. package/dest/services/encoding.d.ts.map +1 -1
  102. package/dest/services/encoding.js +7 -1
  103. package/dest/services/libp2p/libp2p_service.d.ts +15 -25
  104. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  105. package/dest/services/libp2p/libp2p_service.js +149 -126
  106. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  107. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  108. package/dest/services/peer-manager/peer_manager.js +22 -8
  109. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  110. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  111. package/dest/services/peer-manager/peer_scoring.js +32 -10
  112. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -8
  113. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  114. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +69 -65
  115. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +3 -2
  116. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  117. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  118. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  119. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  120. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
  121. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  122. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
  123. package/dest/services/reqresp/interface.d.ts +1 -9
  124. package/dest/services/reqresp/interface.d.ts.map +1 -1
  125. package/dest/services/reqresp/interface.js +0 -11
  126. package/dest/services/reqresp/metrics.d.ts +1 -1
  127. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  128. package/dest/services/reqresp/metrics.js +0 -1
  129. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  130. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  131. package/dest/services/reqresp/protocols/index.js +0 -1
  132. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  133. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  134. package/dest/services/reqresp/protocols/tx.js +1 -3
  135. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  136. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  137. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  138. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  139. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  140. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  141. package/dest/services/reqresp/reqresp.d.ts +1 -1
  142. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  143. package/dest/services/reqresp/reqresp.js +18 -10
  144. package/dest/services/service.d.ts +5 -2
  145. package/dest/services/service.d.ts.map +1 -1
  146. package/dest/services/tx_collection/fast_tx_collection.d.ts +1 -4
  147. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  148. package/dest/services/tx_collection/fast_tx_collection.js +57 -73
  149. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  150. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  151. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  152. package/dest/services/tx_collection/proposal_tx_collector.d.ts +6 -7
  153. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
  154. package/dest/services/tx_collection/proposal_tx_collector.js +4 -4
  155. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  156. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  157. package/dest/services/tx_collection/request_tracker.js +84 -0
  158. package/dest/services/tx_collection/slow_tx_collection.js +1 -1
  159. package/dest/services/tx_collection/tx_collection.d.ts +3 -6
  160. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  161. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  162. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  163. package/dest/services/tx_collection/tx_source.js +9 -7
  164. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  165. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  166. package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
  167. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  168. package/dest/test-helpers/reqresp-nodes.js +0 -2
  169. package/dest/test-helpers/testbench-utils.d.ts +1 -1
  170. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  171. package/dest/test-helpers/testbench-utils.js +23 -3
  172. package/dest/testbench/p2p_client_testbench_worker.js +68 -16
  173. package/dest/testbench/worker_client_manager.d.ts +10 -1
  174. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  175. package/dest/testbench/worker_client_manager.js +55 -3
  176. package/dest/util.d.ts +1 -1
  177. package/package.json +14 -14
  178. package/src/client/factory.ts +43 -14
  179. package/src/client/interface.ts +9 -1
  180. package/src/client/p2p_client.ts +39 -36
  181. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +19 -9
  182. package/src/config.ts +92 -4
  183. package/src/errors/p2p-service.error.ts +11 -0
  184. package/src/index.ts +0 -1
  185. package/src/mem_pools/attestation_pool/attestation_pool.ts +7 -5
  186. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +6 -6
  187. package/src/mem_pools/index.ts +0 -3
  188. package/src/mem_pools/tx_pool_v2/README.md +9 -1
  189. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  190. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
  191. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
  192. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
  193. package/src/mem_pools/tx_pool_v2/interfaces.ts +9 -4
  194. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +59 -13
  195. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +29 -43
  196. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +13 -1
  197. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +23 -6
  198. package/src/msg_validators/attestation_validator/README.md +49 -0
  199. package/src/msg_validators/attestation_validator/attestation_validator.ts +5 -4
  200. package/src/msg_validators/clock_tolerance.ts +4 -3
  201. package/src/msg_validators/proposal_validator/README.md +123 -0
  202. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +13 -3
  203. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +19 -6
  204. package/src/msg_validators/proposal_validator/proposal_validator.ts +63 -53
  205. package/src/msg_validators/tx_validator/README.md +5 -1
  206. package/src/msg_validators/tx_validator/allowed_public_setup.ts +16 -35
  207. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  208. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  209. package/src/msg_validators/tx_validator/data_validator.ts +42 -1
  210. package/src/msg_validators/tx_validator/factory.ts +43 -3
  211. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  212. package/src/msg_validators/tx_validator/gas_validator.ts +65 -16
  213. package/src/msg_validators/tx_validator/index.ts +1 -0
  214. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  215. package/src/msg_validators/tx_validator/phases_validator.ts +60 -1
  216. package/src/services/dummy_service.ts +7 -2
  217. package/src/services/encoding.ts +9 -1
  218. package/src/services/libp2p/libp2p_service.ts +148 -140
  219. package/src/services/peer-manager/peer_manager.ts +26 -8
  220. package/src/services/peer-manager/peer_scoring.ts +27 -5
  221. package/src/services/reqresp/README.md +229 -0
  222. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  223. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +64 -69
  224. package/src/services/reqresp/batch-tx-requester/interface.ts +2 -1
  225. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  226. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
  227. package/src/services/reqresp/interface.ts +0 -11
  228. package/src/services/reqresp/metrics.ts +0 -1
  229. package/src/services/reqresp/protocols/index.ts +0 -1
  230. package/src/services/reqresp/protocols/tx.ts +1 -3
  231. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  232. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  233. package/src/services/reqresp/reqresp.ts +20 -12
  234. package/src/services/service.ts +6 -1
  235. package/src/services/tx_collection/fast_tx_collection.ts +57 -83
  236. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  237. package/src/services/tx_collection/proposal_tx_collector.ts +8 -13
  238. package/src/services/tx_collection/request_tracker.ts +127 -0
  239. package/src/services/tx_collection/slow_tx_collection.ts +1 -1
  240. package/src/services/tx_collection/tx_collection.ts +3 -5
  241. package/src/services/tx_collection/tx_source.ts +8 -7
  242. package/src/test-helpers/make-test-p2p-clients.ts +1 -1
  243. package/src/test-helpers/reqresp-nodes.ts +1 -3
  244. package/src/test-helpers/testbench-utils.ts +30 -3
  245. package/src/testbench/p2p_client_testbench_worker.ts +72 -15
  246. package/src/testbench/worker_client_manager.ts +68 -6
  247. package/src/util.ts +1 -1
  248. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  249. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  250. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  251. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  252. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  253. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  254. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  255. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  256. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  257. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  258. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  259. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  260. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  261. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  262. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  263. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  264. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  265. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  266. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  267. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  268. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  269. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  270. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  271. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  272. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  273. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  274. package/dest/mem_pools/tx_pool/index.js +0 -2
  275. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  276. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  277. package/dest/mem_pools/tx_pool/priority.js +0 -15
  278. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  279. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  280. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  281. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  282. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  283. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  284. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -24
  285. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  286. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -378
  287. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  288. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  289. package/dest/services/reqresp/protocols/block.js +0 -32
  290. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  291. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  292. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  293. package/src/mem_pools/tx_pool/README.md +0 -270
  294. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  295. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  296. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  297. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  298. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  299. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  300. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  301. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  302. package/src/mem_pools/tx_pool/index.ts +0 -2
  303. package/src/mem_pools/tx_pool/priority.ts +0 -20
  304. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  305. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  306. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -373
  307. package/src/services/reqresp/protocols/block.ts +0 -37
  308. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
@@ -1,596 +0,0 @@
1
- import { insertIntoSortedArray } from '@aztec/foundation/array';
2
- import { Fr } from '@aztec/foundation/curves/bn254';
3
- import { toArray } from '@aztec/foundation/iterable';
4
- import { createLogger } from '@aztec/foundation/log';
5
- import { AztecAddress } from '@aztec/stdlib/aztec-address';
6
- import { ChonkProof } from '@aztec/stdlib/proofs';
7
- import { Tx, TxHash } from '@aztec/stdlib/tx';
8
- import { getTelemetryClient } from '@aztec/telemetry-client';
9
- import assert from 'assert';
10
- import EventEmitter from 'node:events';
11
- import { ArchiveCache } from '../../msg_validators/tx_validator/archive_cache.js';
12
- import { PoolInstrumentation, PoolName } from '../instrumentation.js';
13
- import { EvictionManager } from './eviction/eviction_manager.js';
14
- import { FeePayerTxInfo } from './eviction/eviction_strategy.js';
15
- import { FeePayerBalanceEvictionRule } from './eviction/fee_payer_balance_eviction_rule.js';
16
- import { InvalidTxsAfterMiningRule } from './eviction/invalid_txs_after_mining_rule.js';
17
- import { InvalidTxsAfterReorgRule } from './eviction/invalid_txs_after_reorg_rule.js';
18
- import { LowPriorityEvictionRule } from './eviction/low_priority_eviction_rule.js';
19
- import { NullifierConflictPreAddRule } from './eviction/nullifier_conflict_pre_add_rule.js';
20
- import { getPendingTxPriority } from './priority.js';
21
- /**
22
- * KV implementation of the Transaction Pool.
23
- */ export class AztecKVTxPool extends EventEmitter {
24
- #store;
25
- /** Our tx pool, stored as a Map, with K: tx hash and V: the transaction. */ #txs;
26
- /** Holds the historical block for each tx */ #pendingTxHashToHistoricalBlockHeaderHash;
27
- /** Index from tx hash to the block number in which they were mined, filtered by mined txs. */ #minedTxHashToBlock;
28
- /** Index from tx priority (stored as hex) to its tx hash, filtered by pending txs. */ #pendingTxPriorityToHash;
29
- /** Map from tx hash to the block number it was originally mined in (for soft-deleted txs). */ #deletedMinedTxHashes;
30
- /** MultiMap from block number to deleted mined tx hashes for efficient cleanup. */ #blockToDeletedMinedTxHash;
31
- #historicalHeaderToTxHash;
32
- #feePayerToBalanceEntry;
33
- /** Index from nullifier to pending tx hash */ #pendingNullifierToTxHash;
34
- /** In-memory set of txs that should not be evicted from the pool. */ #nonEvictableTxs;
35
- /** KV store for archived txs. */ #archive;
36
- /** Archived txs map for future lookup. */ #archivedTxs;
37
- /** Indexes of the archived txs by insertion order. */ #archivedTxIndices;
38
- /** Number of txs to archive. */ #archivedTxLimit = 0;
39
- #evictionManager;
40
- #log;
41
- #metrics;
42
- /**
43
- * Class constructor for KV TxPool. Initiates our transaction pool as an AztecMap.
44
- * @param store - A KV store for live txs in the pool.
45
- * @param archive - A KV store for archived txs.
46
- * @param telemetry - A telemetry client.
47
- * @param archivedTxLimit - The number of txs to archive.
48
- * @param log - A logger.
49
- */ constructor(store, archive, worldState, telemetry = getTelemetryClient(), config = {}, log = createLogger('p2p:tx_pool')){
50
- super();
51
- this.#log = log;
52
- this.#evictionManager = new EvictionManager(this);
53
- this.#evictionManager.registerRule(new InvalidTxsAfterMiningRule());
54
- this.#evictionManager.registerRule(new InvalidTxsAfterReorgRule(worldState));
55
- this.#evictionManager.registerRule(new FeePayerBalanceEvictionRule(worldState));
56
- this.#evictionManager.registerRule(new LowPriorityEvictionRule({
57
- //NOTE: 0 effectively disables low priority eviction
58
- maxPoolSize: config.maxPendingTxCount ?? 0
59
- }));
60
- this.#evictionManager.registerPreAddRule(new NullifierConflictPreAddRule());
61
- this.updateConfig(config);
62
- this.#txs = store.openMap('txs');
63
- this.#minedTxHashToBlock = store.openMap('txHashToBlockMined');
64
- this.#pendingTxPriorityToHash = store.openMultiMap('pendingTxFeeToHash');
65
- this.#deletedMinedTxHashes = store.openMap('deletedMinedTxHashes');
66
- this.#blockToDeletedMinedTxHash = store.openMultiMap('blockToDeletedMinedTxHash');
67
- this.#pendingTxHashToHistoricalBlockHeaderHash = store.openMap('txHistoricalBlock');
68
- this.#historicalHeaderToTxHash = store.openMultiMap('historicalHeaderToPendingTxHash');
69
- this.#feePayerToBalanceEntry = store.openMultiMap('feePayerToBalanceEntry');
70
- this.#pendingNullifierToTxHash = store.openMap('pendingNullifierToTxHash');
71
- this.#nonEvictableTxs = new Set();
72
- this.#archivedTxs = archive.openMap('archivedTxs');
73
- this.#archivedTxIndices = archive.openMap('archivedTxIndices');
74
- this.#store = store;
75
- this.#archive = archive;
76
- this.#metrics = new PoolInstrumentation(telemetry, PoolName.TX_POOL, this.countTxs, ()=>store.estimateSize());
77
- }
78
- countTxs = async ()=>{
79
- const [pending = 0, mined = 0] = await Promise.all([
80
- this.getPendingTxCount(),
81
- this.getMinedTxCount()
82
- ]);
83
- return Promise.resolve({
84
- itemCount: {
85
- pending,
86
- mined
87
- }
88
- });
89
- };
90
- async isEmpty() {
91
- for await (const _ of this.#txs.entriesAsync()){
92
- return false;
93
- }
94
- return true;
95
- }
96
- /**
97
- * Marks transactions as mined in a block and updates the pool state accordingly.
98
- * Removes the transactions from the pending set and adds them to the mined set.
99
- * Also evicts any transactions that become invalid after the block is mined.
100
- * @param txHashes - Array of transaction hashes that were mined
101
- * @param blockHeader - The header of the block the transactions were mined in
102
- */ async markAsMined(txHashes, blockHeader) {
103
- if (txHashes.length === 0) {
104
- return Promise.resolve();
105
- }
106
- const uniqueMinedNullifiers = [];
107
- const uniqueMinedFeePayers = [];
108
- try {
109
- await this.#store.transactionAsync(async ()=>{
110
- for (const hash of txHashes){
111
- const key = hash.toString();
112
- await this.#minedTxHashToBlock.set(key, blockHeader.globalVariables.blockNumber);
113
- const tx = await this.getTxByHash(hash);
114
- if (tx) {
115
- const nullifiers = tx.data.getNonEmptyNullifiers();
116
- nullifiers.forEach((nullifier)=>insertIntoSortedArray(uniqueMinedNullifiers, nullifier, Fr.cmp, false));
117
- insertIntoSortedArray(uniqueMinedFeePayers, tx.data.feePayer, (a, b)=>a.toField().cmp(b.toField()), false);
118
- await this.removePendingTxIndicesInDbTx(tx, key);
119
- }
120
- // If this tx was previously soft-deleted, remove it from the deleted sets
121
- if (await this.#deletedMinedTxHashes.hasAsync(key)) {
122
- const originalBlock = await this.#deletedMinedTxHashes.getAsync(key);
123
- await this.#deletedMinedTxHashes.delete(key);
124
- // Remove from block-to-hash mapping
125
- if (originalBlock !== undefined) {
126
- await this.#blockToDeletedMinedTxHash.deleteValue(originalBlock, key);
127
- }
128
- }
129
- }
130
- });
131
- await this.#evictionManager.evictAfterNewBlock(blockHeader, uniqueMinedNullifiers, uniqueMinedFeePayers);
132
- this.#metrics.transactionsRemoved(txHashes.map((hash)=>hash.toBigInt()));
133
- } catch (err) {
134
- this.#log.warn('Unexpected error when marking txs as mined', {
135
- err
136
- });
137
- }
138
- }
139
- async markMinedAsPending(txHashes, latestBlock) {
140
- if (txHashes.length === 0) {
141
- return Promise.resolve();
142
- }
143
- try {
144
- await this.#store.transactionAsync(async ()=>{
145
- for (const hash of txHashes){
146
- const key = hash.toString();
147
- await this.#minedTxHashToBlock.delete(key);
148
- // Clear soft-delete metadata if this tx was previously soft-deleted,
149
- // so cleanupDeletedMinedTxs won't later hard-delete it while it's pending
150
- const deletedBlock = await this.#deletedMinedTxHashes.getAsync(key);
151
- if (deletedBlock !== undefined) {
152
- await this.#deletedMinedTxHashes.delete(key);
153
- await this.#blockToDeletedMinedTxHash.deleteValue(deletedBlock, key);
154
- }
155
- // Rehydrate the tx in the in-memory pending txs mapping
156
- const tx = await this.getTxByHash(hash);
157
- if (tx) {
158
- await this.addPendingTxIndicesInDbTx(tx, key);
159
- }
160
- }
161
- });
162
- await this.#evictionManager.evictAfterChainPrune(latestBlock);
163
- } catch (err) {
164
- this.#log.warn('Unexpected error when marking mined txs as pending', {
165
- err
166
- });
167
- }
168
- }
169
- async getPendingTxHashes() {
170
- const vals = await toArray(this.#pendingTxPriorityToHash.valuesAsync({
171
- reverse: true
172
- }));
173
- return vals.map(TxHash.fromString);
174
- }
175
- /**
176
- * Checks if a transaction exists in the pool and returns it.
177
- * @param txHash - The generated tx hash.
178
- * @returns The transaction, if found, 'undefined' otherwise.
179
- */ async getTxByHash(txHash) {
180
- const buffer = await this.#txs.getAsync(txHash.toString());
181
- return buffer ? Tx.fromBuffer(buffer) : undefined;
182
- }
183
- async getTxsByHash(txHashes) {
184
- const txs = await Promise.all(txHashes.map((txHash)=>this.#txs.getAsync(txHash.toString())));
185
- return txs.map((buffer)=>buffer ? Tx.fromBuffer(buffer) : undefined);
186
- }
187
- async hasTxs(txHashes) {
188
- return await Promise.all(txHashes.map((txHash)=>this.#txs.hasAsync(txHash.toString())));
189
- }
190
- async hasTx(txHash) {
191
- const result = await this.hasTxs([
192
- txHash
193
- ]);
194
- return result[0];
195
- }
196
- /**
197
- * Checks if an archived tx exists and returns it.
198
- * @param txHash - The tx hash.
199
- * @returns The transaction metadata, if found, 'undefined' otherwise.
200
- */ async getArchivedTxByHash(txHash) {
201
- const buffer = await this.#archivedTxs.getAsync(txHash.toString());
202
- return buffer ? Tx.fromBuffer(buffer) : undefined;
203
- }
204
- /**
205
- * Adds a list of transactions to the pool. Duplicates are ignored.
206
- * Handles nullifier deduplication: if an incoming tx has a nullifier conflict with
207
- * existing pending txs, it will either replace them (if higher fee) or be rejected.
208
- * @param txs - An array of txs to be added to the pool.
209
- * @returns count of added transactions
210
- */ async addTxs(txs, opts = {}) {
211
- if (txs.length === 0) {
212
- return Promise.resolve(0);
213
- }
214
- const addedTxs = [];
215
- const uniqueFeePayers = [];
216
- const replacedTxHashes = [];
217
- const hashesAndStats = txs.map((tx)=>({
218
- txHash: tx.getTxHash(),
219
- txStats: tx.getStats()
220
- }));
221
- try {
222
- await this.#store.transactionAsync(async ()=>{
223
- for(let i = 0; i < txs.length; i++){
224
- const tx = txs[i];
225
- const { txHash, txStats } = hashesAndStats[i];
226
- const key = txHash.toString();
227
- if (await this.#txs.hasAsync(key)) {
228
- this.#log.debug(`Tx ${key} already exists in the pool`);
229
- continue;
230
- }
231
- const poolAccess = this.getPreAddPoolAccess();
232
- const { shouldReject, txHashesToEvict } = await this.#evictionManager.runPreAddRules(tx, poolAccess);
233
- if (shouldReject) {
234
- continue;
235
- }
236
- for (const txHashToEvict of txHashesToEvict){
237
- const txToDelete = await this.getTxByHash(txHashToEvict);
238
- if (txToDelete) {
239
- const evictedKey = txHashToEvict.toString();
240
- await this.deletePendingTxInDbTx(txToDelete, evictedKey);
241
- replacedTxHashes.push(txHashToEvict);
242
- this.#log.verbose(`Evicted tx ${evictedKey} due to higher-fee tx ${key}`);
243
- }
244
- }
245
- this.#log.verbose(`Adding tx ${key} to pool`, {
246
- eventName: 'tx-added-to-pool',
247
- ...txStats
248
- });
249
- await this.#txs.set(key, tx.toBuffer());
250
- addedTxs.push(tx);
251
- insertIntoSortedArray(uniqueFeePayers, tx.data.feePayer, (a, b)=>a.toField().cmp(b.toField()), false);
252
- await this.#pendingTxHashToHistoricalBlockHeaderHash.set(key, (await tx.data.constants.anchorBlockHeader.hash()).toString());
253
- if (!await this.#minedTxHashToBlock.hasAsync(key)) {
254
- await this.addPendingTxIndicesInDbTx(tx, key);
255
- this.#metrics.recordSize(tx);
256
- }
257
- }
258
- });
259
- await this.#evictionManager.evictAfterNewTxs(addedTxs.map(({ txHash })=>txHash), uniqueFeePayers);
260
- } catch (err) {
261
- this.#log.warn('Unexpected error when adding txs', {
262
- err
263
- });
264
- }
265
- if (replacedTxHashes.length > 0) {
266
- this.#metrics.transactionsRemoved(replacedTxHashes.map((hash)=>hash.toBigInt()));
267
- }
268
- if (addedTxs.length > 0) {
269
- this.#metrics.transactionsAdded(addedTxs);
270
- this.emit('txs-added', {
271
- ...opts,
272
- txs: addedTxs
273
- });
274
- }
275
- return addedTxs.length;
276
- }
277
- /**
278
- * Deletes transactions from the pool. Tx hashes that are not present are ignored.
279
- * Mined transactions are soft-deleted with a timestamp, pending transactions are permanently deleted.
280
- * @param txHashes - An array of tx hashes to be deleted from the tx pool.
281
- * @returns Empty promise.
282
- */ deleteTxs(txHashes, opts) {
283
- if (txHashes.length === 0) {
284
- return Promise.resolve();
285
- }
286
- const deletedTxs = [];
287
- const poolDbTx = this.#store.transactionAsync(async ()=>{
288
- for (const hash of txHashes){
289
- const key = hash.toString();
290
- const tx = await this.getTxByHash(hash);
291
- if (!tx) {
292
- this.#log.trace(`Skipping deletion of missing tx ${key} from pool`);
293
- continue;
294
- }
295
- const minedBlockNumber = await this.#minedTxHashToBlock.getAsync(key);
296
- const txIsPending = minedBlockNumber === undefined;
297
- if (txIsPending) {
298
- await this.deletePendingTxInDbTx(tx, key);
299
- } else {
300
- await this.deleteMinedTx(key, minedBlockNumber, opts?.permanently ?? false);
301
- const shouldArchiveTx = this.#archivedTxLimit && !opts?.permanently;
302
- if (shouldArchiveTx) {
303
- deletedTxs.push(tx);
304
- }
305
- }
306
- }
307
- });
308
- this.#metrics.transactionsRemoved(txHashes.map((hash)=>hash.toBigInt()));
309
- this.#log.debug(`Deleted ${txHashes.length} txs from pool`, {
310
- txHashes
311
- });
312
- return this.#archivedTxLimit ? poolDbTx.then(()=>this.archiveTxs(deletedTxs)) : poolDbTx;
313
- }
314
- async deleteMinedTx(txHash, minedBlockNumber, permanently) {
315
- await this.#minedTxHashToBlock.delete(txHash);
316
- if (permanently) {
317
- this.#log.trace(`Deleting mined tx ${txHash} from pool`);
318
- await this.#txs.delete(txHash);
319
- return;
320
- }
321
- // Soft-delete mined transactions: remove from mined set but keep in storage
322
- this.#log.trace(`Soft-deleting mined tx ${txHash} from pool`);
323
- await this.#deletedMinedTxHashes.set(txHash, minedBlockNumber);
324
- await this.#blockToDeletedMinedTxHash.set(minedBlockNumber, txHash);
325
- }
326
- // Assumes being called within a DB transaction
327
- async deletePendingTxInDbTx(tx, txHash) {
328
- // We always permanently delete pending transactions
329
- this.#log.trace(`Deleting pending tx ${txHash} from pool`);
330
- await this.removePendingTxIndicesInDbTx(tx, txHash);
331
- await this.#txs.delete(txHash);
332
- await this.#pendingTxHashToHistoricalBlockHeaderHash.delete(txHash);
333
- }
334
- /**
335
- * Gets all the transactions stored in the pool.
336
- * @returns Array of tx objects in the order they were added to the pool.
337
- */ async getAllTxs() {
338
- const vals = await toArray(this.#txs.valuesAsync());
339
- return vals.map((buffer)=>Tx.fromBuffer(buffer));
340
- }
341
- /**
342
- * Gets the hashes of all transactions currently in the tx pool.
343
- * @returns An array of transaction hashes found in the tx pool.
344
- */ async getAllTxHashes() {
345
- const vals = await toArray(this.#txs.keysAsync());
346
- return vals.map((x)=>TxHash.fromString(x));
347
- }
348
- async getPendingTxInfos() {
349
- const vals = await toArray(this.#pendingTxPriorityToHash.valuesAsync());
350
- const results = await Promise.all(vals.map((val)=>this.getPendingTxInfo(TxHash.fromString(val))));
351
- return results.filter((info)=>info !== undefined);
352
- }
353
- async getPendingTxInfo(txHash) {
354
- let historicalBlockHash = await this.#pendingTxHashToHistoricalBlockHeaderHash.getAsync(txHash.toString());
355
- // Not all tx might have this index created.
356
- if (!historicalBlockHash) {
357
- const tx = await this.getTxByHash(txHash);
358
- if (!tx) {
359
- this.#log.warn(`PendingTxInfo:tx ${txHash} not found`);
360
- return undefined;
361
- }
362
- historicalBlockHash = (await tx.data.constants.anchorBlockHeader.hash()).toString();
363
- await this.#pendingTxHashToHistoricalBlockHeaderHash.set(txHash.toString(), historicalBlockHash);
364
- }
365
- return {
366
- txHash,
367
- blockHash: Fr.fromString(historicalBlockHash),
368
- isEvictable: !this.#nonEvictableTxs.has(txHash.toString())
369
- };
370
- }
371
- async getPendingTxsReferencingBlocks(blockHashes) {
372
- const result = [];
373
- for (const blockHash of blockHashes){
374
- const chunk = await toArray(this.#historicalHeaderToTxHash.getValuesAsync(blockHash.toString()));
375
- result.push(...chunk.map((txHash)=>({
376
- txHash: TxHash.fromString(txHash),
377
- blockHash,
378
- isEvictable: !this.#nonEvictableTxs.has(txHash)
379
- })));
380
- }
381
- return result;
382
- }
383
- async getPendingFeePayers() {
384
- const feePayers = [];
385
- for await (const feePayer of this.#feePayerToBalanceEntry.keysAsync()){
386
- const address = AztecAddress.fromString(feePayer);
387
- insertIntoSortedArray(feePayers, address, (a, b)=>a.toField().cmp(b.toField()), false);
388
- }
389
- return feePayers;
390
- }
391
- async *getFeePayerTxInfos(feePayer) {
392
- for await (const value of this.#feePayerToBalanceEntry.getValuesAsync(feePayer.toString())){
393
- const info = FeePayerTxInfo.decode(value);
394
- info.isEvictable = !this.#nonEvictableTxs.has(info.txHash.toString());
395
- yield info;
396
- }
397
- }
398
- async getMinedTxHashes() {
399
- const vals = await toArray(this.#minedTxHashToBlock.entriesAsync());
400
- return vals.map(([txHash, blockNumber])=>[
401
- TxHash.fromString(txHash),
402
- blockNumber
403
- ]);
404
- }
405
- async getPendingTxCount() {
406
- return await this.#pendingTxPriorityToHash.sizeAsync() ?? 0;
407
- }
408
- async getMinedTxCount() {
409
- return await this.#minedTxHashToBlock.sizeAsync() ?? 0;
410
- }
411
- async getTxStatus(txHash) {
412
- const key = txHash.toString();
413
- const [isMined, isKnown, isDeleted] = await Promise.all([
414
- this.#minedTxHashToBlock.hasAsync(key),
415
- this.#txs.hasAsync(key),
416
- this.#deletedMinedTxHashes.hasAsync(key)
417
- ]);
418
- if (isDeleted) {
419
- return 'deleted';
420
- } else if (isMined) {
421
- return 'mined';
422
- } else if (isKnown) {
423
- return 'pending';
424
- } else {
425
- return undefined;
426
- }
427
- }
428
- updateConfig(cfg) {
429
- if (typeof cfg.archivedTxLimit === 'number') {
430
- assert(cfg.archivedTxLimit >= 0, 'archivedTxLimit must be greater or equal to 0');
431
- this.#archivedTxLimit = cfg.archivedTxLimit;
432
- }
433
- if (this.#evictionManager) {
434
- this.#evictionManager.updateConfig(cfg);
435
- }
436
- }
437
- markTxsAsNonEvictable(txHashes) {
438
- txHashes.forEach((txHash)=>this.#nonEvictableTxs.add(txHash.toString()));
439
- return Promise.resolve();
440
- }
441
- clearNonEvictableTxs() {
442
- // Clear the non-evictable set after completing the DB updates above.
443
- // This ensures pinned (non-evictable) txs are protected while we mark mined txs,
444
- // but they won't remain pinned indefinitely across blocks. Note that eviction rules
445
- // (including post-mining invalidation) respect the non-evictable flag while it is set.
446
- this.#nonEvictableTxs.clear();
447
- return Promise.resolve();
448
- }
449
- /**
450
- * Permanently deletes deleted mined transactions from blocks up to and including the specified block number.
451
- * @param blockNumber - Block number threshold. Deleted mined txs from this block or earlier will be permanently deleted.
452
- * @returns The number of transactions permanently deleted.
453
- */ async cleanupDeletedMinedTxs(blockNumber) {
454
- let deletedCount = 0;
455
- await this.#store.transactionAsync(async ()=>{
456
- const txHashesToDelete = [];
457
- const blocksToDelete = [];
458
- // Iterate through all entries and check block numbers
459
- for await (const [block, txHash] of this.#blockToDeletedMinedTxHash.entriesAsync()){
460
- if (block <= blockNumber) {
461
- // Permanently delete the transaction
462
- await this.#txs.delete(txHash);
463
- await this.#deletedMinedTxHashes.delete(txHash);
464
- txHashesToDelete.push(txHash);
465
- if (!blocksToDelete.includes(block)) {
466
- blocksToDelete.push(block);
467
- }
468
- deletedCount++;
469
- }
470
- }
471
- this.#metrics.transactionsRemoved(txHashesToDelete);
472
- // Clean up block-to-hash mapping - delete all values for each block
473
- for (const block of blocksToDelete){
474
- const txHashesForBlock = await toArray(this.#blockToDeletedMinedTxHash.getValuesAsync(block));
475
- for (const txHash of txHashesForBlock){
476
- await this.#blockToDeletedMinedTxHash.deleteValue(block, txHash);
477
- }
478
- }
479
- });
480
- if (deletedCount > 0) {
481
- this.#log.debug(`Permanently deleted ${deletedCount} deleted mined txs from blocks up to ${blockNumber}`);
482
- }
483
- return deletedCount;
484
- }
485
- /**
486
- * Creates an ArchiveCache instance.
487
- * @param db - DB for the cache to use
488
- * @returns An ArchiveCache instance
489
- */ createArchiveCache(db) {
490
- return new ArchiveCache(db);
491
- }
492
- /**
493
- * Archives a list of txs for future reference. The number of archived txs is limited by the specified archivedTxLimit.
494
- * Note: Pending txs should not be archived, only finalized txs
495
- * @param txs - The list of transactions to archive.
496
- * @returns Empty promise.
497
- */ async archiveTxs(txs) {
498
- if (txs.length === 0) {
499
- return;
500
- }
501
- if (this.#archivedTxLimit === 0) {
502
- return;
503
- }
504
- try {
505
- const txHashes = await Promise.all(txs.map((tx)=>tx.getTxHash()));
506
- await this.#archive.transactionAsync(async ()=>{
507
- // calculate the head and tail indices of the archived txs by insertion order.
508
- let headIdx = ((await this.#archivedTxIndices.entriesAsync({
509
- limit: 1,
510
- reverse: true
511
- }).next()).value?.[0] ?? -1) + 1;
512
- let tailIdx = (await this.#archivedTxIndices.entriesAsync({
513
- limit: 1
514
- }).next()).value?.[0] ?? 0;
515
- for(let i = 0; i < txs.length; i++){
516
- const tx = txs[i];
517
- while(headIdx - tailIdx >= this.#archivedTxLimit){
518
- const txHash = await this.#archivedTxIndices.getAsync(tailIdx);
519
- if (txHash) {
520
- await this.#archivedTxs.delete(txHash);
521
- await this.#archivedTxIndices.delete(tailIdx);
522
- }
523
- tailIdx++;
524
- }
525
- const archivedTx = new Tx(tx.txHash, tx.data, ChonkProof.empty(), tx.contractClassLogFields, tx.publicFunctionCalldata);
526
- const txHash = txHashes[i].toString();
527
- await this.#archivedTxs.set(txHash, archivedTx.toBuffer());
528
- await this.#archivedTxIndices.set(headIdx, txHash);
529
- headIdx++;
530
- }
531
- this.#log.debug(`Archived ${txs.length} txs`, {
532
- txHashes
533
- });
534
- this.#log.debug(`Total archived txs: ${headIdx - tailIdx}`);
535
- });
536
- } catch (error) {
537
- this.#log.error(`Error archiving txs`, {
538
- error
539
- });
540
- }
541
- }
542
- // Assumes being called within a DB transaction
543
- async addPendingTxIndicesInDbTx(tx, txHash) {
544
- await this.#pendingTxPriorityToHash.set(getPendingTxPriority(tx), txHash);
545
- await this.#historicalHeaderToTxHash.set((await tx.data.constants.anchorBlockHeader.hash()).toString(), txHash);
546
- await this.#feePayerToBalanceEntry.set(tx.data.feePayer.toString(), await FeePayerTxInfo.encode(tx, txHash));
547
- // Add nullifier entries for conflict detection
548
- const nullifiers = tx.data.getNonEmptyNullifiers();
549
- for (const nullifier of nullifiers){
550
- await this.#pendingNullifierToTxHash.set(nullifier.toString(), txHash);
551
- }
552
- }
553
- // Assumes being called within a DB transaction
554
- async removePendingTxIndicesInDbTx(tx, txHash) {
555
- await this.#pendingTxPriorityToHash.deleteValue(getPendingTxPriority(tx), txHash);
556
- await this.#historicalHeaderToTxHash.deleteValue((await tx.data.constants.anchorBlockHeader.hash()).toString(), txHash);
557
- await this.#feePayerToBalanceEntry.deleteValue(tx.data.feePayer.toString(), await FeePayerTxInfo.encode(tx, txHash));
558
- // Remove nullifier entries
559
- const nullifiers = tx.data.getNonEmptyNullifiers();
560
- for (const nullifier of nullifiers){
561
- await this.#pendingNullifierToTxHash.delete(nullifier.toString());
562
- }
563
- }
564
- /**
565
- * Returns up to `limit` lowest-priority evictable pending tx hashes without hydrating transactions.
566
- * Iterates the priority index in ascending order and skips non-evictable txs.
567
- */ async getLowestPriorityEvictable(limit) {
568
- const txsToEvict = [];
569
- if (limit <= 0) {
570
- return txsToEvict;
571
- }
572
- for await (const txHashStr of this.#pendingTxPriorityToHash.valuesAsync()){
573
- if (this.#nonEvictableTxs.has(txHashStr)) {
574
- continue;
575
- }
576
- txsToEvict.push(TxHash.fromString(txHashStr));
577
- if (txsToEvict.length >= limit) {
578
- break;
579
- }
580
- }
581
- return txsToEvict;
582
- }
583
- /**
584
- * Creates a PreAddPoolAccess object for use by pre-add eviction rules.
585
- * Provides read-only access to pool state during addTxs transaction.
586
- */ getPreAddPoolAccess() {
587
- return {
588
- getTxHashByNullifier: async (nullifier)=>{
589
- const hashStr = await this.#pendingNullifierToTxHash.getAsync(nullifier.toString());
590
- return hashStr ? TxHash.fromString(hashStr) : undefined;
591
- },
592
- getPendingTxByHash: this.getTxByHash.bind(this),
593
- getTxPriority: getPendingTxPriority
594
- };
595
- }
596
- }
@@ -1,32 +0,0 @@
1
- import type { BlockNumber } from '@aztec/foundation/branded-types';
2
- import { Fr } from '@aztec/foundation/curves/bn254';
3
- import type { AztecAddress } from '@aztec/stdlib/aztec-address';
4
- import { BlockHeader, Tx, TxHash } from '@aztec/stdlib/tx';
5
- import type { TxPoolOptions } from '../tx_pool.js';
6
- import { type EvictionRule, type PreAddEvictionResult, type PreAddEvictionRule, type PreAddPoolAccess, type TxPoolOperations } from './eviction_strategy.js';
7
- export declare class EvictionManager {
8
- private txPool;
9
- private log;
10
- private rules;
11
- /** Pre-add eviction rules (run inside addTxs transaction) */
12
- private preAddRules;
13
- constructor(txPool: TxPoolOperations, log?: import("@aztec/foundation/log").Logger);
14
- evictAfterNewTxs(newTxs: TxHash[], feePayers: AztecAddress[]): Promise<void>;
15
- evictAfterNewBlock(block: BlockHeader, newNullifiers: Fr[], minedFeePayers: AztecAddress[]): Promise<void>;
16
- evictAfterChainPrune(blockNumber: BlockNumber): Promise<void>;
17
- /**
18
- * Runs pre-add eviction rules to determine if an incoming tx should be added
19
- * and which existing txs should be evicted.
20
- * Called from inside the addTxs database transaction for atomicity.
21
- *
22
- * @param tx - The incoming transaction
23
- * @param poolAccess - Read-only access to pool state
24
- * @returns Combined result from all pre-add rules
25
- */
26
- runPreAddRules(tx: Tx, poolAccess: PreAddPoolAccess): Promise<PreAddEvictionResult>;
27
- registerRule(rule: EvictionRule): void;
28
- registerPreAddRule(rule: PreAddEvictionRule): void;
29
- updateConfig(config: TxPoolOptions): void;
30
- private runEvictionRules;
31
- }
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZpY3Rpb25fbWFuYWdlci5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL21lbV9wb29scy90eF9wb29sL2V2aWN0aW9uL2V2aWN0aW9uX21hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXBELE9BQU8sS0FBSyxFQUFFLFlBQVksRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTNELE9BQU8sS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBR0wsS0FBSyxZQUFZLEVBQ2pCLEtBQUssb0JBQW9CLEVBQ3pCLEtBQUssa0JBQWtCLEVBQ3ZCLEtBQUssZ0JBQWdCLEVBQ3JCLEtBQUssZ0JBQWdCLEVBQ3RCLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMscUJBQWEsZUFBZTtJQU94QixPQUFPLENBQUMsTUFBTTtJQUNkLE9BQU8sQ0FBQyxHQUFHO0lBUGIsT0FBTyxDQUFDLEtBQUssQ0FBc0I7SUFFbkMsNkRBQTZEO0lBQzdELE9BQU8sQ0FBQyxXQUFXLENBQTRCO0lBRS9DLFlBQ1UsTUFBTSxFQUFFLGdCQUFnQixFQUN4QixHQUFHLHlDQUF1RCxFQUNoRTtJQUVTLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQU94RjtJQUVZLGtCQUFrQixDQUM3QixLQUFLLEVBQUUsV0FBVyxFQUNsQixhQUFhLEVBQUUsRUFBRSxFQUFFLEVBQ25CLGNBQWMsRUFBRSxZQUFZLEVBQUUsR0FDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyxDQVNmO0lBRVksb0JBQW9CLENBQUMsV0FBVyxFQUFFLFdBQVcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBTXpFO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDVSxjQUFjLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBNkIvRjtJQUVNLFlBQVksQ0FBQyxJQUFJLEVBQUUsWUFBWSxRQUVyQztJQUVNLGtCQUFrQixDQUFDLElBQUksRUFBRSxrQkFBa0IsUUFFakQ7SUFFTSxZQUFZLENBQUMsTUFBTSxFQUFFLGFBQWEsR0FBRyxJQUFJLENBTy9DO1lBRWEsZ0JBQWdCO0NBYS9CIn0=
@@ -1 +0,0 @@
1
- {"version":3,"file":"eviction_manager.d.ts","sourceRoot":"","sources":["../../../../src/mem_pools/tx_pool/eviction/eviction_manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,MAAM,gCAAgC,CAAC;AAEpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,wBAAwB,CAAC;AAEhC,qBAAa,eAAe;IAOxB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,GAAG;IAPb,OAAO,CAAC,KAAK,CAAsB;IAEnC,6DAA6D;IAC7D,OAAO,CAAC,WAAW,CAA4B;IAE/C,YACU,MAAM,EAAE,gBAAgB,EACxB,GAAG,yCAAuD,EAChE;IAES,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAOxF;IAEY,kBAAkB,CAC7B,KAAK,EAAE,WAAW,EAClB,aAAa,EAAE,EAAE,EAAE,EACnB,cAAc,EAAE,YAAY,EAAE,GAC7B,OAAO,CAAC,IAAI,CAAC,CASf;IAEY,oBAAoB,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAMzE;IAED;;;;;;;;OAQG;IACU,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA6B/F;IAEM,YAAY,CAAC,IAAI,EAAE,YAAY,QAErC;IAEM,kBAAkB,CAAC,IAAI,EAAE,kBAAkB,QAEjD;IAEM,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAO/C;YAEa,gBAAgB;CAa/B"}