@aztec/p2p 0.0.1-commit.85d7d01 → 0.0.1-commit.8655d4a

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 (447) hide show
  1. package/README.md +129 -3
  2. package/dest/bootstrap/bootstrap.d.ts +1 -1
  3. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  4. package/dest/bootstrap/bootstrap.js +9 -1
  5. package/dest/client/factory.d.ts +5 -4
  6. package/dest/client/factory.d.ts.map +1 -1
  7. package/dest/client/factory.js +33 -15
  8. package/dest/client/interface.d.ts +14 -5
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +13 -9
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +93 -49
  13. package/dest/config.d.ts +153 -102
  14. package/dest/config.d.ts.map +1 -1
  15. package/dest/config.js +134 -35
  16. package/dest/errors/p2p-service.error.d.ts +9 -0
  17. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  18. package/dest/errors/p2p-service.error.js +10 -0
  19. package/dest/errors/reqresp.error.d.ts +1 -20
  20. package/dest/errors/reqresp.error.d.ts.map +1 -1
  21. package/dest/errors/reqresp.error.js +0 -21
  22. package/dest/index.d.ts +1 -2
  23. package/dest/index.d.ts.map +1 -1
  24. package/dest/index.js +0 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +99 -59
  26. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool.js +267 -197
  28. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +181 -65
  31. package/dest/mem_pools/attestation_pool/mocks.d.ts +1 -1
  32. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  33. package/dest/mem_pools/attestation_pool/mocks.js +6 -4
  34. package/dest/mem_pools/index.d.ts +1 -2
  35. package/dest/mem_pools/index.d.ts.map +1 -1
  36. package/dest/mem_pools/instrumentation.d.ts +4 -2
  37. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  38. package/dest/mem_pools/instrumentation.js +33 -15
  39. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  40. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  41. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +2 -1
  42. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts +2 -1
  43. package/dest/mem_pools/tx_pool_v2/eviction/index.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool_v2/eviction/index.js +1 -0
  45. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts +16 -0
  46. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.d.ts.map +1 -0
  47. package/dest/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.js +62 -0
  48. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +7 -1
  49. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
  50. package/dest/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.js +2 -2
  51. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
  52. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
  54. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
  55. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
  56. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +2 -2
  57. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +12 -5
  58. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  59. package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
  60. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +29 -11
  61. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  62. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +46 -16
  63. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
  64. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  65. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +26 -43
  66. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
  67. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  68. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +6 -0
  69. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +2 -1
  70. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  71. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +97 -88
  72. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +9 -3
  73. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  74. package/dest/msg_validators/attestation_validator/attestation_validator.js +37 -12
  75. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +7 -3
  76. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  77. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +4 -5
  78. package/dest/msg_validators/clock_tolerance.d.ts +12 -1
  79. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  80. package/dest/msg_validators/clock_tolerance.js +61 -3
  81. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +10 -4
  82. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  83. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  84. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +10 -4
  85. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  86. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  87. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +21 -8
  88. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  89. package/dest/msg_validators/proposal_validator/proposal_validator.js +90 -44
  90. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  91. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  92. package/dest/msg_validators/tx_validator/aggregate_tx_validator.js +8 -15
  93. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +2 -1
  94. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  95. package/dest/msg_validators/tx_validator/allowed_public_setup.js +25 -21
  96. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  97. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  98. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  99. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  100. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts +15 -0
  101. package/dest/msg_validators/tx_validator/cached_tx_validator.d.ts.map +1 -0
  102. package/dest/msg_validators/tx_validator/cached_tx_validator.js +19 -0
  103. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  104. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  105. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  106. package/dest/msg_validators/tx_validator/data_validator.d.ts +2 -1
  107. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  108. package/dest/msg_validators/tx_validator/data_validator.js +36 -2
  109. package/dest/msg_validators/tx_validator/factory.d.ts +27 -7
  110. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  111. package/dest/msg_validators/tx_validator/factory.js +47 -17
  112. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  113. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  114. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  115. package/dest/msg_validators/tx_validator/gas_validator.d.ts +48 -7
  116. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  117. package/dest/msg_validators/tx_validator/gas_validator.js +88 -41
  118. package/dest/msg_validators/tx_validator/index.d.ts +4 -1
  119. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  120. package/dest/msg_validators/tx_validator/index.js +3 -0
  121. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  122. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  123. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  124. package/dest/msg_validators/tx_validator/phases_validator.d.ts +22 -2
  125. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  126. package/dest/msg_validators/tx_validator/phases_validator.js +72 -24
  127. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +2 -1
  128. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  129. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -0
  130. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts +48 -0
  131. package/dest/msg_validators/tx_validator/tx_validation_cache.d.ts.map +1 -0
  132. package/dest/msg_validators/tx_validator/tx_validation_cache.js +69 -0
  133. package/dest/services/data_store.d.ts +1 -1
  134. package/dest/services/data_store.d.ts.map +1 -1
  135. package/dest/services/data_store.js +5 -5
  136. package/dest/services/discv5/discV5_service.d.ts +2 -1
  137. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  138. package/dest/services/discv5/discV5_service.js +35 -8
  139. package/dest/services/dummy_service.d.ts +11 -15
  140. package/dest/services/dummy_service.d.ts.map +1 -1
  141. package/dest/services/dummy_service.js +12 -16
  142. package/dest/services/encoding.d.ts +5 -1
  143. package/dest/services/encoding.d.ts.map +1 -1
  144. package/dest/services/encoding.js +7 -1
  145. package/dest/services/gossipsub/topic_score_params.d.ts +13 -2
  146. package/dest/services/gossipsub/topic_score_params.d.ts.map +1 -1
  147. package/dest/services/gossipsub/topic_score_params.js +21 -4
  148. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  149. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  150. package/dest/services/libp2p/instrumentation.js +14 -0
  151. package/dest/services/libp2p/libp2p_service.d.ts +36 -46
  152. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  153. package/dest/services/libp2p/libp2p_service.js +296 -244
  154. package/dest/services/peer-manager/metrics.d.ts +3 -1
  155. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  156. package/dest/services/peer-manager/metrics.js +6 -0
  157. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  158. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  159. package/dest/services/peer-manager/peer_manager.js +40 -11
  160. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  161. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  162. package/dest/services/peer-manager/peer_scoring.js +32 -10
  163. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -8
  164. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  165. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +84 -71
  166. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +10 -6
  167. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  168. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  169. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  170. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  171. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
  172. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  173. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
  174. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +5 -14
  175. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -1
  176. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +6 -20
  177. package/dest/services/reqresp/config.d.ts +3 -3
  178. package/dest/services/reqresp/config.d.ts.map +1 -1
  179. package/dest/services/reqresp/interface.d.ts +16 -18
  180. package/dest/services/reqresp/interface.d.ts.map +1 -1
  181. package/dest/services/reqresp/interface.js +10 -20
  182. package/dest/services/reqresp/metrics.d.ts +1 -1
  183. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  184. package/dest/services/reqresp/metrics.js +0 -1
  185. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  186. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  187. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +4 -2
  188. package/dest/services/reqresp/protocols/index.d.ts +1 -2
  189. package/dest/services/reqresp/protocols/index.d.ts.map +1 -1
  190. package/dest/services/reqresp/protocols/index.js +0 -1
  191. package/dest/services/reqresp/protocols/tx.d.ts +1 -1
  192. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  193. package/dest/services/reqresp/protocols/tx.js +1 -3
  194. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  195. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  196. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  197. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  198. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts.map +1 -1
  199. package/dest/services/reqresp/rate-limiter/rate_limits.js +0 -10
  200. package/dest/services/reqresp/reqresp.d.ts +7 -29
  201. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  202. package/dest/services/reqresp/reqresp.js +41 -214
  203. package/dest/services/service.d.ts +9 -12
  204. package/dest/services/service.d.ts.map +1 -1
  205. package/dest/services/tx_collection/config.d.ts +2 -23
  206. package/dest/services/tx_collection/config.d.ts.map +1 -1
  207. package/dest/services/tx_collection/config.js +2 -55
  208. package/dest/services/tx_collection/file_store_tx_collection.d.ts +12 -28
  209. package/dest/services/tx_collection/file_store_tx_collection.d.ts.map +1 -1
  210. package/dest/services/tx_collection/file_store_tx_collection.js +43 -83
  211. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  212. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  213. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  214. package/dest/services/tx_collection/index.d.ts +2 -3
  215. package/dest/services/tx_collection/index.d.ts.map +1 -1
  216. package/dest/services/tx_collection/index.js +0 -1
  217. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  218. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  219. package/dest/services/tx_collection/instrumentation.js +0 -2
  220. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  221. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  222. package/dest/services/tx_collection/request_tracker.js +84 -0
  223. package/dest/services/tx_collection/tx_collection.d.ts +36 -55
  224. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  225. package/dest/services/tx_collection/tx_collection.js +275 -119
  226. package/dest/services/tx_collection/tx_collection_sink.d.ts +1 -1
  227. package/dest/services/tx_collection/tx_collection_sink.js +2 -2
  228. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  229. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  230. package/dest/services/tx_collection/tx_source.js +9 -7
  231. package/dest/services/tx_file_store/tx_file_store.d.ts +1 -3
  232. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -1
  233. package/dest/services/tx_file_store/tx_file_store.js +4 -14
  234. package/dest/services/tx_provider.d.ts +3 -1
  235. package/dest/services/tx_provider.d.ts.map +1 -1
  236. package/dest/services/tx_provider.js +3 -0
  237. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  238. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  239. package/dest/test-helpers/make-test-p2p-clients.js +5 -2
  240. package/dest/test-helpers/mock-pubsub.d.ts +23 -9
  241. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  242. package/dest/test-helpers/mock-pubsub.js +44 -44
  243. package/dest/test-helpers/reqresp-nodes.d.ts +4 -5
  244. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  245. package/dest/test-helpers/reqresp-nodes.js +16 -18
  246. package/dest/test-helpers/test_tx_provider.d.ts +3 -1
  247. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -1
  248. package/dest/test-helpers/test_tx_provider.js +3 -0
  249. package/dest/test-helpers/testbench-utils.d.ts +12 -14
  250. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  251. package/dest/test-helpers/testbench-utils.js +42 -15
  252. package/dest/testbench/p2p_client_testbench_worker.d.ts +3 -5
  253. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  254. package/dest/testbench/p2p_client_testbench_worker.js +85 -39
  255. package/dest/testbench/worker_client_manager.d.ts +12 -6
  256. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  257. package/dest/testbench/worker_client_manager.js +57 -11
  258. package/dest/util.d.ts +12 -7
  259. package/dest/util.d.ts.map +1 -1
  260. package/dest/util.js +35 -14
  261. package/dest/versioning.d.ts +3 -6
  262. package/dest/versioning.d.ts.map +1 -1
  263. package/dest/versioning.js +3 -24
  264. package/package.json +15 -14
  265. package/src/bootstrap/bootstrap.ts +9 -1
  266. package/src/client/factory.ts +57 -8
  267. package/src/client/interface.ts +15 -11
  268. package/src/client/p2p_client.ts +106 -70
  269. package/src/client/test/{tx_proposal_collector/README.md → p2p_client.batch_tx_requester.bench.README.md} +23 -53
  270. package/src/config.ts +226 -36
  271. package/src/errors/p2p-service.error.ts +11 -0
  272. package/src/errors/reqresp.error.ts +0 -25
  273. package/src/index.ts +0 -1
  274. package/src/mem_pools/attestation_pool/attestation_pool.ts +318 -242
  275. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +204 -68
  276. package/src/mem_pools/attestation_pool/mocks.ts +13 -8
  277. package/src/mem_pools/index.ts +0 -3
  278. package/src/mem_pools/instrumentation.ts +22 -14
  279. package/src/mem_pools/tx_pool_v2/README.md +9 -1
  280. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  281. package/src/mem_pools/tx_pool_v2/eviction/index.ts +1 -0
  282. package/src/mem_pools/tx_pool_v2/eviction/insufficient_fee_per_gas_eviction_rule.ts +65 -0
  283. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
  284. package/src/mem_pools/tx_pool_v2/eviction/invalid_txs_after_reorg_rule.ts +3 -3
  285. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
  286. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
  287. package/src/mem_pools/tx_pool_v2/interfaces.ts +12 -4
  288. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +72 -20
  289. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +29 -43
  290. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +16 -1
  291. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +101 -94
  292. package/src/msg_validators/attestation_validator/README.md +49 -0
  293. package/src/msg_validators/attestation_validator/attestation_validator.ts +41 -9
  294. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +14 -7
  295. package/src/msg_validators/clock_tolerance.ts +79 -3
  296. package/src/msg_validators/proposal_validator/README.md +123 -0
  297. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +24 -4
  298. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +35 -7
  299. package/src/msg_validators/proposal_validator/proposal_validator.ts +114 -47
  300. package/src/msg_validators/tx_validator/README.md +15 -3
  301. package/src/msg_validators/tx_validator/aggregate_tx_validator.ts +3 -12
  302. package/src/msg_validators/tx_validator/allowed_public_setup.ts +22 -27
  303. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  304. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  305. package/src/msg_validators/tx_validator/cached_tx_validator.ts +31 -0
  306. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  307. package/src/msg_validators/tx_validator/data_validator.ts +44 -1
  308. package/src/msg_validators/tx_validator/factory.ts +61 -10
  309. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  310. package/src/msg_validators/tx_validator/gas_validator.ts +121 -39
  311. package/src/msg_validators/tx_validator/index.ts +3 -0
  312. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  313. package/src/msg_validators/tx_validator/phases_validator.ts +82 -27
  314. package/src/msg_validators/tx_validator/tx_proof_validator.ts +2 -0
  315. package/src/msg_validators/tx_validator/tx_validation_cache.ts +102 -0
  316. package/src/services/data_store.ts +5 -13
  317. package/src/services/discv5/discV5_service.ts +38 -5
  318. package/src/services/dummy_service.ts +14 -39
  319. package/src/services/encoding.ts +9 -1
  320. package/src/services/gossipsub/topic_score_params.ts +36 -4
  321. package/src/services/libp2p/instrumentation.ts +14 -0
  322. package/src/services/libp2p/libp2p_service.ts +321 -276
  323. package/src/services/peer-manager/metrics.ts +7 -0
  324. package/src/services/peer-manager/peer_manager.ts +46 -11
  325. package/src/services/peer-manager/peer_scoring.ts +27 -5
  326. package/src/services/reqresp/README.md +215 -0
  327. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  328. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +83 -77
  329. package/src/services/reqresp/batch-tx-requester/interface.ts +13 -5
  330. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  331. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
  332. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +12 -25
  333. package/src/services/reqresp/config.ts +2 -2
  334. package/src/services/reqresp/interface.ts +21 -47
  335. package/src/services/reqresp/metrics.ts +0 -1
  336. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +4 -2
  337. package/src/services/reqresp/protocols/index.ts +0 -1
  338. package/src/services/reqresp/protocols/tx.ts +1 -3
  339. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  340. package/src/services/reqresp/rate-limiter/rate_limits.ts +0 -10
  341. package/src/services/reqresp/reqresp.ts +45 -260
  342. package/src/services/service.ts +12 -28
  343. package/src/services/tx_collection/config.ts +3 -80
  344. package/src/services/tx_collection/file_store_tx_collection.ts +54 -103
  345. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  346. package/src/services/tx_collection/index.ts +1 -6
  347. package/src/services/tx_collection/instrumentation.ts +1 -7
  348. package/src/services/tx_collection/request_tracker.ts +127 -0
  349. package/src/services/tx_collection/tx_collection.ts +331 -176
  350. package/src/services/tx_collection/tx_collection_sink.ts +2 -2
  351. package/src/services/tx_collection/tx_source.ts +8 -7
  352. package/src/services/tx_file_store/tx_file_store.ts +5 -17
  353. package/src/services/tx_provider.ts +5 -0
  354. package/src/test-helpers/make-test-p2p-clients.ts +4 -1
  355. package/src/test-helpers/mock-pubsub.ts +46 -60
  356. package/src/test-helpers/reqresp-nodes.ts +13 -23
  357. package/src/test-helpers/test_tx_provider.ts +5 -0
  358. package/src/test-helpers/testbench-utils.ts +53 -28
  359. package/src/testbench/p2p_client_testbench_worker.ts +89 -55
  360. package/src/testbench/worker_client_manager.ts +72 -25
  361. package/src/util.ts +33 -18
  362. package/src/versioning.ts +3 -33
  363. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +0 -2
  364. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +0 -1
  365. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +0 -304
  366. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +0 -73
  367. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +0 -1
  368. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +0 -8
  369. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  370. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  371. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  372. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  373. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  374. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  375. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  376. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  377. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  378. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  379. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  380. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  381. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  382. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  383. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  384. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  385. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  386. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  387. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  388. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  389. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  390. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  391. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  392. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  393. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  394. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  395. package/dest/mem_pools/tx_pool/index.js +0 -2
  396. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  397. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  398. package/dest/mem_pools/tx_pool/priority.js +0 -15
  399. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  400. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  401. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  402. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  403. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  404. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  405. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -23
  406. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  407. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -212
  408. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +0 -64
  409. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +0 -1
  410. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +0 -151
  411. package/dest/services/reqresp/protocols/block.d.ts +0 -9
  412. package/dest/services/reqresp/protocols/block.d.ts.map +0 -1
  413. package/dest/services/reqresp/protocols/block.js +0 -32
  414. package/dest/services/tx_collection/fast_tx_collection.d.ts +0 -54
  415. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +0 -1
  416. package/dest/services/tx_collection/fast_tx_collection.js +0 -327
  417. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  418. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  419. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  420. package/dest/services/tx_collection/proposal_tx_collector.d.ts +0 -49
  421. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +0 -1
  422. package/dest/services/tx_collection/proposal_tx_collector.js +0 -50
  423. package/dest/services/tx_collection/slow_tx_collection.d.ts +0 -57
  424. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +0 -1
  425. package/dest/services/tx_collection/slow_tx_collection.js +0 -211
  426. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +0 -345
  427. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +0 -43
  428. package/src/mem_pools/tx_pool/README.md +0 -270
  429. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  430. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  431. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  432. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  433. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  434. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  435. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  436. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  437. package/src/mem_pools/tx_pool/index.ts +0 -2
  438. package/src/mem_pools/tx_pool/priority.ts +0 -20
  439. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  440. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  441. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -230
  442. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +0 -161
  443. package/src/services/reqresp/protocols/block.ts +0 -37
  444. package/src/services/tx_collection/fast_tx_collection.ts +0 -387
  445. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
  446. package/src/services/tx_collection/proposal_tx_collector.ts +0 -113
  447. package/src/services/tx_collection/slow_tx_collection.ts +0 -266
@@ -1,345 +0,0 @@
1
- import { MockL2BlockSource } from '@aztec/archiver/test';
2
- import { SecretValue } from '@aztec/foundation/config';
3
- import { createLogger } from '@aztec/foundation/log';
4
- import { sleep } from '@aztec/foundation/sleep';
5
- import { DateProvider, Timer, executeTimeout } from '@aztec/foundation/timer';
6
- import type { DataStoreConfig } from '@aztec/kv-store/config';
7
- import { openTmpStore } from '@aztec/kv-store/lmdb-v2';
8
- import type { L2BlockSource } from '@aztec/stdlib/block';
9
- import type { ContractDataSource } from '@aztec/stdlib/contract';
10
- import type { ClientProtocolCircuitVerifier } from '@aztec/stdlib/interfaces/server';
11
- import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
12
- import type { Tx, TxValidationResult } from '@aztec/stdlib/tx';
13
- import { type TelemetryClient, getTelemetryClient } from '@aztec/telemetry-client';
14
-
15
- import type { PeerId } from '@libp2p/interface';
16
- import { peerIdFromString } from '@libp2p/peer-id';
17
-
18
- import type { P2PConfig } from '../../../config.js';
19
- import { BatchTxRequesterCollector, SendBatchRequestCollector } from '../../../services/index.js';
20
- import type { IBatchRequestTxValidator } from '../../../services/reqresp/batch-tx-requester/tx_validator.js';
21
- import { RateLimitStatus } from '../../../services/reqresp/rate-limiter/rate_limiter.js';
22
- import { MissingTxsTracker } from '../../../services/tx_collection/missing_txs_tracker.js';
23
- import {
24
- AlwaysTrueCircuitVerifier,
25
- BENCHMARK_CONSTANTS,
26
- InMemoryAttestationPool,
27
- InMemoryTxPool,
28
- UNLIMITED_RATE_LIMIT_QUOTA,
29
- calculateInternalTimeout,
30
- createMockEpochCache,
31
- createMockWorldStateSynchronizer,
32
- } from '../../../test-helpers/index.js';
33
- import { createP2PClient } from '../../index.js';
34
- import type { P2PClient } from '../../p2p_client.js';
35
- import {
36
- type WorkerCommand,
37
- type WorkerResponse,
38
- deserializeBlockProposal,
39
- deserializeTx,
40
- deserializeTxHash,
41
- } from './proposal_tx_collector_worker_protocol.js';
42
-
43
- let client: P2PClient | undefined;
44
- let txPool: InMemoryTxPool | undefined;
45
- let attestationPool: InMemoryAttestationPool | undefined;
46
- let logger = createLogger('p2p:proposal-bench');
47
- let kvStore: Awaited<ReturnType<typeof openTmpStore>> | undefined;
48
- let ipcDisconnected = false;
49
-
50
- function ensureClient(): P2PClient {
51
- if (!client || !txPool) {
52
- throw new Error('Worker client not started');
53
- }
54
- return client;
55
- }
56
-
57
- function isIpcDisconnectError(err: unknown): boolean {
58
- const code = (err as NodeJS.ErrnoException | undefined)?.code;
59
- return code === 'EPIPE' || code === 'ERR_IPC_CHANNEL_CLOSED';
60
- }
61
-
62
- function sendMessage(message: WorkerResponse): Promise<void> {
63
- const send = process.send;
64
- if (!send || !process.connected || ipcDisconnected) {
65
- return Promise.resolve();
66
- }
67
-
68
- return new Promise(resolve => {
69
- const fallbackTimeout = setTimeout(() => resolve(), 2000);
70
- try {
71
- send.call(process, message, undefined, undefined, err => {
72
- clearTimeout(fallbackTimeout);
73
- if (!err) {
74
- resolve();
75
- return;
76
- }
77
- if (isIpcDisconnectError(err)) {
78
- ipcDisconnected = true;
79
- resolve();
80
- return;
81
- }
82
- logger.warn('Failed to send IPC message', { error: err?.message ?? String(err) });
83
- resolve();
84
- });
85
- } catch (err: any) {
86
- clearTimeout(fallbackTimeout);
87
- if (isIpcDisconnectError(err)) {
88
- ipcDisconnected = true;
89
- resolve();
90
- return;
91
- }
92
- logger.warn('Failed to send IPC message', { error: err?.message ?? String(err) });
93
- resolve();
94
- }
95
- });
96
- }
97
-
98
- async function startClient(config: P2PConfig, clientIndex: number) {
99
- txPool = new InMemoryTxPool();
100
- attestationPool = new InMemoryAttestationPool();
101
- const epochCache = createMockEpochCache();
102
- const worldState = createMockWorldStateSynchronizer();
103
- const l2BlockSource = new MockL2BlockSource();
104
- const proofVerifier = new AlwaysTrueCircuitVerifier();
105
- kvStore = await openTmpStore(`proposal-bench-${clientIndex}`, true, BENCHMARK_CONSTANTS.KV_STORE_MAP_SIZE_KB);
106
- logger = createLogger(`p2p:proposal-bench:${clientIndex}`);
107
-
108
- const telemetry = getTelemetryClient();
109
- const deps = {
110
- txPool,
111
- attestationPool,
112
- store: kvStore,
113
- logger,
114
- };
115
-
116
- client = await createP2PClient(
117
- config as P2PConfig & DataStoreConfig,
118
- l2BlockSource as L2BlockSource & ContractDataSource,
119
- proofVerifier as ClientProtocolCircuitVerifier,
120
- worldState,
121
- epochCache,
122
- 'proposal-tx-collector-bench-worker',
123
- new DateProvider(),
124
- telemetry as TelemetryClient,
125
- deps,
126
- );
127
-
128
- await client.start();
129
- installUnlimitedRateLimits();
130
-
131
- for (let i = 0; i < 120; i++) {
132
- if (client.isReady()) {
133
- return;
134
- }
135
- await sleep(500);
136
- }
137
-
138
- throw new Error('Timed out waiting for P2P client readiness');
139
- }
140
-
141
- function installSamplerOverrides(peerList: ReturnType<typeof peerIdFromString>[]) {
142
- const reqResp = (ensureClient() as any).p2pService.reqresp as any;
143
- const sampler = reqResp.connectionSampler as any;
144
-
145
- sampler.getPeerListSortedByConnectionCountAsc = (excluding?: Set<string>) => {
146
- if (!excluding || excluding.size === 0) {
147
- return peerList;
148
- }
149
- return peerList.filter(peerId => !excluding.has(peerId.toString()));
150
- };
151
- sampler.samplePeersBatch = (numberToSample: number, excluding?: Map<string, boolean>) => {
152
- const filtered = peerList.filter(peerId => !excluding?.has(peerId.toString()));
153
- return filtered.slice(0, Math.min(numberToSample, filtered.length));
154
- };
155
- sampler.getPeer = (excluding?: Map<string, boolean>) => {
156
- const filtered = peerList.filter(peerId => !excluding?.has(peerId.toString()));
157
- return filtered[0];
158
- };
159
- }
160
-
161
- function installUnlimitedRateLimits() {
162
- const reqResp = (ensureClient() as any).p2pService.reqresp as any;
163
- const rateLimiter = reqResp.rateLimiter as any;
164
-
165
- rateLimiter.getRateLimits = () => UNLIMITED_RATE_LIMIT_QUOTA;
166
- rateLimiter.allow = () => RateLimitStatus.Allowed;
167
- }
168
-
169
- async function runCollector(cmd: Extract<WorkerCommand, { type: 'RUN_COLLECTOR' }>) {
170
- const { collectorType, txHashes, blockProposal, pinnedPeerId, peerIds, timeoutMs } = cmd;
171
- const reqResp = (ensureClient() as any).p2pService.reqresp as any;
172
- const peerList = peerIds.map(peerId => peerIdFromString(peerId));
173
-
174
- installSamplerOverrides(peerList);
175
- installUnlimitedRateLimits();
176
-
177
- const p2pService = {
178
- reqResp,
179
- connectionSampler: {
180
- getPeerListSortedByConnectionCountAsc: () => peerList,
181
- },
182
- txValidatorConfig: {
183
- l1ChainId: 1,
184
- rollupVersion: 1,
185
- proofVerifier: {
186
- verifyProof: () => Promise.resolve({ valid: true, durationMs: 0, totalDurationMs: 0 }),
187
- stop: () => Promise.resolve(),
188
- },
189
- },
190
- peerScoring: {
191
- penalizePeer: (_peerId: PeerId, _penalty: PeerErrorSeverity) => {},
192
- },
193
- };
194
-
195
- const parsedTxHashes = txHashes.map(deserializeTxHash);
196
- const parsedProposal = deserializeBlockProposal(blockProposal);
197
- const pinnedPeer = pinnedPeerId ? peerIdFromString(pinnedPeerId) : undefined;
198
-
199
- const timer = new Timer();
200
- let fetchedCount = 0;
201
-
202
- const internalTimeoutMs = calculateInternalTimeout(timeoutMs);
203
-
204
- const noopTxValidator: IBatchRequestTxValidator = {
205
- validateRequestedTx: (_tx: Tx): Promise<TxValidationResult> => Promise.resolve({ result: 'valid' }),
206
- validateRequestedTxs: (txs: Tx[]): Promise<TxValidationResult[]> =>
207
- Promise.resolve(txs.map(() => ({ result: 'valid' }))),
208
- };
209
-
210
- try {
211
- if (collectorType === 'batch-requester') {
212
- const collector = new BatchTxRequesterCollector(p2pService, logger, new DateProvider(), noopTxValidator);
213
- const fetched = await executeTimeout(
214
- (_signal: AbortSignal) =>
215
- collector.collectTxs(
216
- MissingTxsTracker.fromArray(parsedTxHashes),
217
- parsedProposal,
218
- pinnedPeer,
219
- internalTimeoutMs,
220
- ),
221
- timeoutMs,
222
- () => new Error(`Collector timed out after ${timeoutMs}ms`),
223
- );
224
- fetchedCount = fetched.length;
225
- } else {
226
- const collector = new SendBatchRequestCollector(
227
- p2pService,
228
- BENCHMARK_CONSTANTS.FIXED_MAX_PEERS,
229
- BENCHMARK_CONSTANTS.FIXED_MAX_RETRY_ATTEMPTS,
230
- );
231
- const fetched = await executeTimeout(
232
- (_signal: AbortSignal) =>
233
- collector.collectTxs(
234
- MissingTxsTracker.fromArray(parsedTxHashes),
235
- parsedProposal,
236
- pinnedPeer,
237
- internalTimeoutMs,
238
- ),
239
- timeoutMs,
240
- () => new Error(`Collector timed out after ${timeoutMs}ms`),
241
- );
242
- fetchedCount = fetched.length;
243
- }
244
- } catch (err: any) {
245
- logger.warn(`Collector error: ${err?.message ?? String(err)}`);
246
- }
247
-
248
- return { durationMs: timer.ms(), fetchedCount };
249
- }
250
-
251
- async function stopClient() {
252
- if (!client) {
253
- return;
254
- }
255
- await client.stop();
256
- if (kvStore?.close) {
257
- await kvStore.close();
258
- }
259
- client = undefined;
260
- txPool = undefined;
261
- attestationPool = undefined;
262
- }
263
-
264
- process.on('disconnect', () => {
265
- ipcDisconnected = true;
266
- void stopClient().finally(() => process.exit(0));
267
- });
268
-
269
- process.on('error', err => {
270
- if (isIpcDisconnectError(err)) {
271
- ipcDisconnected = true;
272
- return;
273
- }
274
- logger.warn('Worker process error', { error: err?.message ?? String(err) });
275
- });
276
-
277
- process.on('message', (msg: WorkerCommand) => {
278
- void (async () => {
279
- if (!msg || typeof msg !== 'object') {
280
- return;
281
- }
282
-
283
- const requestId = msg.requestId;
284
-
285
- try {
286
- switch (msg.type) {
287
- case 'START': {
288
- const rawConfig = msg.config;
289
- const config: P2PConfig = {
290
- ...rawConfig,
291
- peerIdPrivateKey: rawConfig.peerIdPrivateKey ? new SecretValue(rawConfig.peerIdPrivateKey) : undefined,
292
- } as P2PConfig;
293
-
294
- await startClient(config, msg.clientIndex);
295
- const peerId = (ensureClient() as any).p2pService.node.peerId.toString();
296
- await sendMessage({ type: 'READY', requestId, peerId });
297
- break;
298
- }
299
- case 'SET_TXS': {
300
- if (!txPool) {
301
- throw new Error('Tx pool not initialized');
302
- }
303
- const txs = msg.txs.map(deserializeTx);
304
- const count = msg.mode === 'append' ? txPool.appendTxs(txs) : txPool.setTxs(txs);
305
- await sendMessage({ type: 'TXS_SET', requestId, count });
306
- break;
307
- }
308
- case 'SET_BLOCK_PROPOSAL': {
309
- if (!attestationPool) {
310
- throw new Error('Attestation pool not initialized');
311
- }
312
- const proposal = deserializeBlockProposal(msg.blockProposal);
313
- await attestationPool.tryAddBlockProposal(proposal);
314
- await sendMessage({ type: 'BLOCK_PROPOSAL_SET', requestId, archiveRoot: proposal.archive.toString() });
315
- break;
316
- }
317
- case 'RUN_COLLECTOR': {
318
- const { durationMs, fetchedCount } = await runCollector(msg);
319
- await sendMessage({ type: 'COLLECTOR_RESULT', requestId, durationMs, fetchedCount });
320
- break;
321
- }
322
- case 'GET_PEER_COUNT': {
323
- const peers = await ensureClient().getPeers();
324
- await sendMessage({ type: 'PEER_COUNT', requestId, count: peers.length });
325
- break;
326
- }
327
- case 'STOP': {
328
- await stopClient();
329
- await sendMessage({ type: 'STOPPED', requestId });
330
- process.exit(0);
331
- break;
332
- }
333
- default: {
334
- const _exhaustive: never = msg;
335
- throw new Error(`Unknown command: ${(msg as { type?: string }).type}`);
336
- }
337
- }
338
- } catch (err: any) {
339
- await sendMessage({ type: 'ERROR', requestId, error: err?.message ?? String(err) });
340
- if (msg.type === 'START') {
341
- process.exit(1);
342
- }
343
- }
344
- })();
345
- });
@@ -1,43 +0,0 @@
1
- import { BlockProposal } from '@aztec/stdlib/p2p';
2
- import { Tx, TxHash } from '@aztec/stdlib/tx';
3
-
4
- import type { P2PConfig } from '../../../config.js';
5
-
6
- export type SerializedP2PConfig = Omit<P2PConfig, 'peerIdPrivateKey'> & { peerIdPrivateKey?: string };
7
-
8
- export type CollectorType = 'batch-requester' | 'send-batch-request';
9
-
10
- export type WorkerCommand =
11
- | { type: 'START'; requestId: string; clientIndex: number; config: SerializedP2PConfig }
12
- | { type: 'SET_TXS'; requestId: string; txs: string[]; mode?: 'replace' | 'append' }
13
- | { type: 'SET_BLOCK_PROPOSAL'; requestId: string; blockProposal: string }
14
- | {
15
- type: 'RUN_COLLECTOR';
16
- requestId: string;
17
- collectorType: CollectorType;
18
- txHashes: string[];
19
- blockProposal: string;
20
- pinnedPeerId?: string;
21
- peerIds: string[];
22
- timeoutMs: number;
23
- }
24
- | { type: 'GET_PEER_COUNT'; requestId: string }
25
- | { type: 'STOP'; requestId: string };
26
-
27
- export type WorkerResponse =
28
- | { type: 'READY'; requestId: string; peerId: string }
29
- | { type: 'TXS_SET'; requestId: string; count: number }
30
- | { type: 'BLOCK_PROPOSAL_SET'; requestId: string; archiveRoot: string }
31
- | { type: 'COLLECTOR_RESULT'; requestId: string; durationMs: number; fetchedCount: number }
32
- | { type: 'PEER_COUNT'; requestId: string; count: number }
33
- | { type: 'STOPPED'; requestId: string }
34
- | { type: 'ERROR'; requestId: string; error: string };
35
-
36
- export const serializeTx = (tx: Tx) => tx.toBuffer().toString('hex');
37
- export const deserializeTx = (hex: string) => Tx.fromBuffer(Buffer.from(hex, 'hex'));
38
-
39
- export const serializeTxHash = (txHash: TxHash) => txHash.toString();
40
- export const deserializeTxHash = (hex: string) => TxHash.fromString(hex);
41
-
42
- export const serializeBlockProposal = (proposal: BlockProposal) => proposal.toBuffer().toString('hex');
43
- export const deserializeBlockProposal = (hex: string) => BlockProposal.fromBuffer(Buffer.from(hex, 'hex'));
@@ -1,270 +0,0 @@
1
- # Transaction Pool (Mempool)
2
-
3
- This module implements the transaction pool (mempool) for the Aztec P2P network. The mempool holds unconfirmed transactions awaiting inclusion in a block.
4
-
5
- ## Overview
6
-
7
- The transaction pool serves as a staging area for transactions before they are included in blocks. It manages the lifecycle of transactions from initial submission through mining, handling duplicates, priority ordering, and eviction of invalid or low-priority transactions.
8
-
9
- ## Interface: `TxPool`
10
-
11
- The [`TxPool`](tx_pool.ts) interface defines the contract that all transaction pool implementations must fulfill:
12
-
13
- ### Transaction Lifecycle
14
-
15
- The lifecycle of transactions in the pool is summarised in the following table:
16
-
17
- | State | Meaning | Possible Future States |
18
- | --- | --- | --- |
19
- | Pending | Available to be added to a block, can be evicted | Protected, Mined, Soft Deleted |
20
- | Protected | Added to a proposal, must not be evicted | Mined, Pending |
21
- | Mined | Confirmed as added to a block | Soft Deleted, Pending |
22
- | Soft Deleted | Awaiting full deletion once state has been finalised on L1 | Pending, Deleted |
23
- | Deleted | Removed from the pool | N/A |
24
-
25
- **Note on why Soft Delete:**
26
- Mined transactions are soft-deleted rather than permanently removed to support:
27
- 1. Reorg handling — If a chain reorganization occurs, soft-deleted transactions are still available in the mempool
28
- 2. Slash condition detection — The epoch prune watcher needs access to transactions from pruned epochs to correctly identify data withholding slash conditions. Without soft-delete, transactions invalidated by reorgs (e.g., built on removed blocks) would be lost, causing false positives for data withholding violations.
29
-
30
- Mined transactions are permanently deleted via `cleanupDeletedMinedTxs()` once their original block is finalized on L1, ensuring theyremain available during the uncertainty window.
31
- Alternatively, mined transactions can be permanently deleted immediately by passing the `permanent: true` option to `deleteTxs()`.
32
-
33
- #### Transaction Lifecycle Methods
34
-
35
- | Method | Description |
36
- |--------|-------------|
37
- | `addTxs(txs, opts?)` | Adds transactions to the pool. Duplicates and nullifier conflicts are handled. Returns count of newly added txs. |
38
- | `deleteTxs(txHashes, opts?)` | Removes transactions from the pool. Supports soft-delete for mined txs. |
39
- | `markAsMined(txHashes, blockHeader)` | Marks transactions as included in a block. |
40
- | `markMinedAsPending(txHashes, blockNumber)` | Reverts mined transactions to pending (used during reorgs). |
41
- | `getArchivedTxByHash(txHash)` | Retrieves archived (historical) transactions. |
42
- | `getTxStatus(txHash)` | Returns status: `'pending'`, `'mined'`, `'deleted'`, or `undefined`. |
43
-
44
- ### Transaction Fetching
45
-
46
- | Method | Description |
47
- |--------|-------------|
48
- | `hasTx(txHash)` / `hasTxs(txHashes)` | Checks if transaction(s) exist in the pool. |
49
- | `getTxByHash(txHash)` | Retrieves a transaction by its hash. |
50
- | `getTxsByHash(txHashes)` | Batch retrieval of transactions by hash. |
51
- | `getAllTxs()` / `getAllTxHashes()` | Returns all transactions or their hashes. |
52
- | `getPendingTxHashes()` | Returns pending tx hashes **sorted by priority** (highest first). |
53
- | `getPendingTxCount()` | Returns count of pending transactions. |
54
- | `getMinedTxHashes()` | Returns mined tx hashes with their block numbers. |
55
-
56
- ### Pool Management
57
-
58
- | Method | Description |
59
- |--------|-------------|
60
- | `updateConfig(config)` | Updates pool configuration (max size, archive limit). |
61
- | `markTxsAsNonEvictable(txHashes)` | Protects transactions from eviction. |
62
- | `clearNonEvictableTxs()` | Clears non-evictable flag from all transactions. |
63
- | `cleanupDeletedMinedTxs(blockNumber)` | Permanently removes soft-deleted txs from blocks ≤ blockNumber. |
64
- | `isEmpty()` | Checks if the pool has no transactions. |
65
-
66
- ### Events
67
-
68
- The pool emits a `txs-added` event when new transactions are successfully added, allowing subscribers to react to pool changes.
69
-
70
- ## `AztecKVTxPool`
71
-
72
- The [`AztecKVTxPool`](aztec_kv_tx_pool.ts) is the production-grade implementation backed by a persistent key-value store. It provides:
73
-
74
- - **Persistent storage** via `AztecAsyncKVStore`
75
- - **Multiple indexes** for efficient queries
76
- - **Automatic eviction** of invalid and low-priority transactions
77
- - **Transaction archival** for historical lookups
78
- - **Soft-delete semantics** for mined transactions
79
-
80
- #### Storage Structure
81
-
82
- The pool maintains several KV maps and indexes:
83
-
84
- | Store | Purpose |
85
- |-------|---------|
86
- | `#txs` | Primary storage: tx hash → serialized tx buffer |
87
- | `#minedTxHashToBlock` | Index of mined txs: tx hash → block number |
88
- | `#pendingTxPriorityToHash` | Priority-ordered index of pending txs |
89
- | `#deletedMinedTxHashes` | Soft-deleted mined txs: tx hash → original block number |
90
- | `#blockToDeletedMinedTxHash` | Reverse index for cleanup: block → deleted tx hashes |
91
- | `#txHashToHistoricalBlockHeaderHash` | Anchor block reference for each tx |
92
- | `#historicalHeaderToTxHash` | Index from historical block → tx hashes |
93
- | `#feePayerToTxHash` | Index from fee payer address → tx hashes |
94
- | `#pendingNullifierToTxHash` | Index from nullifier → tx hash |
95
- | `#archivedTxs` | Archived transactions for historical lookup |
96
-
97
- #### In-Memory Caches
98
-
99
- | Cache | Purpose |
100
- |-------|---------|
101
- | `#pendingTxs` | Hydrated pending transactions for fast access |
102
- | `#nonEvictableTxs` | Set of tx hashes protected from eviction |
103
-
104
- ## Transaction Priority
105
-
106
- Transactions are prioritized based on their **total priority fees** (see [`priority.ts`](priority.ts)):
107
-
108
- ```typescript
109
- priorityFee = maxPriorityFeesPerGas.feePerDaGas + maxPriorityFeesPerGas.feePerL2Gas
110
- ```
111
-
112
- The priority is stored as a hex string derived from a 32-byte buffer representation of the fee amount, enabling lexicographic ordering in the KV store. Pending transactions are returned in **descending priority order** (highest fees first).
113
-
114
- ## Transaction Lifecycle in AztecKVTxPool
115
-
116
- ### 1. Adding Transactions
117
-
118
- When `addTxs()` is called:
119
-
120
- 1. Check for duplicates (skip if tx already exists)
121
- 2. Check for nullifier conflicts (see Nullifier Deduplication below)
122
- 3. Store the serialized tx in `#txs`
123
- 4. Index the tx by its anchor block hash
124
- 5. If not already mined, add to pending indexes:
125
- - Priority-to-hash index (for ordering)
126
- - Historical header index (for reorg handling)
127
- - Fee payer index (for balance validation)
128
- - Nullifier-to-tx-hash index (for conflict detection)
129
- 6. Record metrics
130
- 7. Trigger eviction rules for `TXS_ADDED` event
131
- 8. Emit `txs-added` event
132
-
133
- ### 2. Marking as Mined
134
-
135
- When a block is finalized, `markAsMined()`:
136
-
137
- 1. Move tx from pending to mined status
138
- 2. If previously soft-deleted, restore to mined status
139
- 3. Trigger eviction rules for `BLOCK_MINED` event
140
-
141
- ### 3. Handling Reorgs
142
-
143
- When blocks are pruned, `markMinedAsPending()`:
144
-
145
- 1. Remove tx from mined index
146
- 2. Rehydrate pending indexes
147
- 3. Trigger eviction rules for `CHAIN_PRUNED` event
148
-
149
- ### 4. Deleting Transactions
150
-
151
- The `deleteTxs()` method handles two cases:
152
-
153
- - **Pending transactions**: Permanently deleted (transactions and all indexes to the transaction)
154
- - **Mined transactions**: Soft-deleted by default (moved to `#deletedMinedTxHashes`), with option for permanent deletion
155
-
156
- Soft-deleted mined transactions are retained for potential future reference and can be permanently cleaned up later via `cleanupDeletedMinedTxs()`.
157
-
158
- ### Nullifier Deduplication
159
-
160
- The pool prevents nullifier spam attacks by ensuring only one pending transaction can reference each unique nullifier. When an incoming transaction shares nullifiers with existing pending transactions:
161
-
162
- - **Higher fee wins**: If the incoming tx has a higher priority fee than ALL conflicting txs, those conflicting txs are replaced
163
- - **Existing tx wins on tie**: If any conflicting tx has an equal or higher fee, the incoming tx is rejected
164
- - **Partial overlap counts**: Even a single shared nullifier triggers conflict resolution
165
-
166
- This is enforced at entry time via the `#pendingNullifierToTxHash` index, which maps each nullifier to the tx hash that references it. The index is maintained atomically with tx additions and removals.
167
-
168
- ## Eviction System
169
-
170
- The eviction system automatically removes invalid or low-priority transactions based on configurable rules. See the [`eviction/`](eviction/) subdirectory for implementation details.
171
-
172
- ### Architecture
173
-
174
- ```
175
- ┌─────────────────────────────────────────────────────────────────┐
176
- │ EvictionManager │
177
- │ Orchestrates eviction rules based on pool events │
178
- ├─────────────────────────────────────────────────────────────────┤
179
- │ │
180
- │ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │
181
- │ │EvictionRule #1 │ │EvictionRule #2 │ │EvictionRule #N │ │
182
- │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │
183
- │ │
184
- └─────────────────────────────────────────────────────────────────┘
185
-
186
-
187
- ┌─────────────────┐
188
- │ TxPoolOperations│
189
- │ (interface) │
190
- └─────────────────┘
191
- ```
192
-
193
- The [`EvictionManager`](eviction/eviction_manager.ts) coordinates eviction by:
194
-
195
- 1. Registering multiple `EvictionRule` implementations
196
- 2. Calling each rule when tx pool events occur
197
- 3. Propagating configuration updates to all rules
198
-
199
- ### Eviction Events
200
-
201
- | Event | Trigger | Purpose |
202
- |-------|---------|---------|
203
- | `TXS_ADDED` | New transactions added | Enforce pool size limits |
204
- | `BLOCK_MINED` | Block finalized | Remove invalidated transactions |
205
- | `CHAIN_PRUNED` | Chain reorganization | Remove txs referencing pruned blocks and re-evaluate fee payer balances |
206
-
207
- ### Eviction Rules
208
-
209
- #### 1. `InvalidTxsAfterMiningRule`
210
-
211
- **Triggers on:** `BLOCK_MINED`
212
-
213
- Evicts transactions that become invalid after a block is mined:
214
-
215
- - Duplicate nullifiers: Txs with nullifiers already included in the mined block
216
- - Expired transactions: Txs with `expirationTimestamp` ≤ mined block timestamp
217
-
218
- #### 2. `InvalidTxsAfterReorgRule`
219
-
220
- **Triggers on:** `CHAIN_PRUNED`
221
-
222
- Evicts transactions that reference blocks no longer in the canonical chain:
223
-
224
- - Checks each pending tx's anchor block hash against the archive tree
225
- - Removes txs whose anchor blocks are not found (pruned)
226
-
227
- #### 3. `FeePayerBalanceEvictionRule`
228
-
229
- **Triggers on:** `TXS_ADDED`, `BLOCK_MINED`, `CHAIN_PRUNED`
230
-
231
- Evicts low-priority transactions when a fee payer's pending fee limits exceed their Fee Juice balance:
232
-
233
- - Evaluates transactions in priority order so higher-priority claims can fund lower-priority spends
234
- - Accounts for self-funding claims made during setup
235
- - Removes evictable txs that do not fit within the running balance
236
-
237
- #### 4. `LowPriorityEvictionRule`
238
-
239
- **Triggers on:** `TXS_ADDED`
240
-
241
- Enforces maximum pool size by evicting lowest-priority (by fee) transactions:
242
-
243
- - Configured via `maxPendingTxCount` option (0 = disabled)
244
- - Uses `getLowestPriorityEvictable()` to find txs to evict
245
-
246
- ### Non-Evictable Transactions
247
-
248
- Transactions can be marked as non-evictable via `markTxsAsNonEvictable()`. This protects them from all eviction rules, typically used during block building to ensure transactions being processed aren't evicted mid-operation. The flag is cleared after block processing via `clearNonEvictableTxs()`.
249
- The `clearNonEvictableTxs` is called upon getting new L2 block.
250
-
251
- ## Configuration
252
-
253
- The pool accepts configuration via `TxPoolOptions`:
254
-
255
- ```typescript
256
- type TxPoolOptions = {
257
- maxPendingTxCount?: number; // Max pending txs (0 = unlimited)
258
- archivedTxLimit?: number; // Number of archived txs to retain
259
- };
260
- ```
261
-
262
- Configuration can be updated at runtime via `updateConfig()`.
263
-
264
- ## Telemetry
265
-
266
- The pool integrates with the telemetry system to report:
267
-
268
- - Transaction counts (pending vs mined)
269
- - Transaction sizes
270
- - Store size estimates