@aztec/p2p 0.0.1-commit.9b94fc1 → 0.0.1-commit.9d2bcf6d

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 (404) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +4 -3
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +4 -4
  4. package/dest/client/factory.d.ts +2 -2
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +11 -9
  7. package/dest/client/interface.d.ts +18 -5
  8. package/dest/client/interface.d.ts.map +1 -1
  9. package/dest/client/p2p_client.d.ts +18 -19
  10. package/dest/client/p2p_client.d.ts.map +1 -1
  11. package/dest/client/p2p_client.js +473 -129
  12. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  13. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  14. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
  15. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  16. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  17. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  18. package/dest/config.d.ts +17 -8
  19. package/dest/config.d.ts.map +1 -1
  20. package/dest/config.js +15 -14
  21. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +61 -42
  22. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  23. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  24. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +239 -265
  26. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +21 -18
  27. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  28. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +114 -109
  29. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +17 -16
  30. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  31. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +89 -128
  32. package/dest/mem_pools/attestation_pool/mocks.d.ts +11 -8
  33. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  34. package/dest/mem_pools/attestation_pool/mocks.js +17 -13
  35. package/dest/mem_pools/instrumentation.d.ts +7 -1
  36. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  37. package/dest/mem_pools/instrumentation.js +31 -13
  38. package/dest/mem_pools/interface.d.ts +3 -4
  39. package/dest/mem_pools/interface.d.ts.map +1 -1
  40. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +37 -27
  41. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  42. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +314 -335
  43. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
  44. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  45. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
  46. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
  47. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  48. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
  49. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  50. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  51. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  52. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  53. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  54. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  55. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  56. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  57. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
  58. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  59. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  60. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  61. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  62. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  63. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  64. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  65. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  66. package/dest/mem_pools/tx_pool/index.js +0 -1
  67. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  68. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  69. package/dest/mem_pools/tx_pool/priority.js +6 -1
  70. package/dest/mem_pools/tx_pool/tx_pool.d.ts +11 -6
  71. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  72. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  73. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  74. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +30 -24
  75. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +4 -4
  76. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  77. package/dest/msg_validators/attestation_validator/attestation_validator.js +52 -19
  78. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +5 -5
  79. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -1
  80. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +22 -13
  81. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  82. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  83. package/dest/msg_validators/clock_tolerance.js +37 -0
  84. package/dest/msg_validators/index.d.ts +2 -2
  85. package/dest/msg_validators/index.d.ts.map +1 -1
  86. package/dest/msg_validators/index.js +1 -1
  87. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  88. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  89. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  90. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  91. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  92. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  93. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  94. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  95. package/dest/msg_validators/proposal_validator/index.js +3 -0
  96. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  97. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  98. package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
  99. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  100. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  101. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
  102. package/dest/msg_validators/tx_validator/archive_cache.d.ts +3 -3
  103. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  104. package/dest/msg_validators/tx_validator/archive_cache.js +1 -1
  105. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +5 -4
  106. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  107. package/dest/msg_validators/tx_validator/block_header_validator.js +3 -2
  108. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  109. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  110. package/dest/msg_validators/tx_validator/data_validator.js +4 -1
  111. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -2
  112. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  113. package/dest/msg_validators/tx_validator/double_spend_validator.js +3 -2
  114. package/dest/msg_validators/tx_validator/factory.d.ts +10 -4
  115. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  116. package/dest/msg_validators/tx_validator/factory.js +22 -12
  117. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  118. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  119. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  120. package/dest/msg_validators/tx_validator/gas_validator.d.ts +3 -2
  121. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  122. package/dest/msg_validators/tx_validator/gas_validator.js +11 -16
  123. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  124. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  125. package/dest/msg_validators/tx_validator/index.js +1 -0
  126. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +4 -3
  127. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  128. package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
  129. package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
  130. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  131. package/dest/msg_validators/tx_validator/phases_validator.js +3 -3
  132. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  133. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  134. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  135. package/dest/msg_validators/tx_validator/test_utils.d.ts +2 -2
  136. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
  137. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +5 -3
  138. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  139. package/dest/msg_validators/tx_validator/timestamp_validator.js +2 -2
  140. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  141. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  142. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  143. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  144. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  145. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  146. package/dest/services/data_store.d.ts +1 -1
  147. package/dest/services/data_store.d.ts.map +1 -1
  148. package/dest/services/data_store.js +10 -6
  149. package/dest/services/discv5/discV5_service.js +1 -1
  150. package/dest/services/dummy_service.d.ts +18 -2
  151. package/dest/services/dummy_service.d.ts.map +1 -1
  152. package/dest/services/dummy_service.js +42 -0
  153. package/dest/services/encoding.d.ts +1 -1
  154. package/dest/services/encoding.d.ts.map +1 -1
  155. package/dest/services/encoding.js +7 -6
  156. package/dest/services/index.d.ts +2 -1
  157. package/dest/services/index.d.ts.map +1 -1
  158. package/dest/services/index.js +1 -0
  159. package/dest/services/libp2p/instrumentation.d.ts +1 -1
  160. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  161. package/dest/services/libp2p/instrumentation.js +30 -72
  162. package/dest/services/libp2p/libp2p_service.d.ts +39 -16
  163. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  164. package/dest/services/libp2p/libp2p_service.js +754 -191
  165. package/dest/services/peer-manager/metrics.d.ts +7 -2
  166. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  167. package/dest/services/peer-manager/metrics.js +33 -21
  168. package/dest/services/peer-manager/peer_manager.d.ts +2 -2
  169. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  170. package/dest/services/peer-manager/peer_manager.js +4 -12
  171. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  172. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  173. package/dest/services/peer-manager/peer_scoring.js +7 -4
  174. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
  175. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  176. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
  177. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  178. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  179. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  180. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  181. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  182. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  183. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
  184. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  185. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
  186. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
  187. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  188. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
  189. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  190. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  191. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  192. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  193. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  194. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  195. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  196. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  197. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  198. package/dest/services/reqresp/constants.d.ts +12 -0
  199. package/dest/services/reqresp/constants.d.ts.map +1 -0
  200. package/dest/services/reqresp/constants.js +7 -0
  201. package/dest/services/reqresp/interface.d.ts +4 -2
  202. package/dest/services/reqresp/interface.d.ts.map +1 -1
  203. package/dest/services/reqresp/interface.js +1 -1
  204. package/dest/services/reqresp/metrics.d.ts +6 -5
  205. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  206. package/dest/services/reqresp/metrics.js +17 -21
  207. package/dest/services/reqresp/protocols/auth.d.ts +2 -2
  208. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
  209. package/dest/services/reqresp/protocols/auth.js +2 -2
  210. package/dest/services/reqresp/protocols/block.d.ts +1 -1
  211. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  212. package/dest/services/reqresp/protocols/block.js +3 -2
  213. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  214. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  215. package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
  216. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  217. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  218. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +16 -3
  219. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +19 -7
  220. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  221. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +44 -14
  222. package/dest/services/reqresp/protocols/status.d.ts +5 -4
  223. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  224. package/dest/services/reqresp/protocols/status.js +7 -3
  225. package/dest/services/reqresp/protocols/tx.d.ts +2 -3
  226. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  227. package/dest/services/reqresp/reqresp.d.ts +6 -1
  228. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  229. package/dest/services/reqresp/reqresp.js +460 -46
  230. package/dest/services/service.d.ts +19 -3
  231. package/dest/services/service.d.ts.map +1 -1
  232. package/dest/services/tx_collection/config.d.ts +4 -1
  233. package/dest/services/tx_collection/config.d.ts.map +1 -1
  234. package/dest/services/tx_collection/config.js +10 -2
  235. package/dest/services/tx_collection/fast_tx_collection.d.ts +9 -6
  236. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  237. package/dest/services/tx_collection/fast_tx_collection.js +16 -5
  238. package/dest/services/tx_collection/index.d.ts +2 -1
  239. package/dest/services/tx_collection/index.d.ts.map +1 -1
  240. package/dest/services/tx_collection/index.js +1 -0
  241. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  242. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  243. package/dest/services/tx_collection/instrumentation.js +10 -13
  244. package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
  245. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  246. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  247. package/dest/services/tx_collection/slow_tx_collection.d.ts +4 -3
  248. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  249. package/dest/services/tx_collection/tx_collection.d.ts +10 -9
  250. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  251. package/dest/services/tx_collection/tx_collection.js +5 -5
  252. package/dest/services/tx_file_store/config.d.ts +18 -0
  253. package/dest/services/tx_file_store/config.d.ts.map +1 -0
  254. package/dest/services/tx_file_store/config.js +26 -0
  255. package/dest/services/tx_file_store/index.d.ts +4 -0
  256. package/dest/services/tx_file_store/index.d.ts.map +1 -0
  257. package/dest/services/tx_file_store/index.js +3 -0
  258. package/dest/services/tx_file_store/instrumentation.d.ts +15 -0
  259. package/dest/services/tx_file_store/instrumentation.d.ts.map +1 -0
  260. package/dest/services/tx_file_store/instrumentation.js +29 -0
  261. package/dest/services/tx_file_store/tx_file_store.d.ts +47 -0
  262. package/dest/services/tx_file_store/tx_file_store.d.ts.map +1 -0
  263. package/dest/services/tx_file_store/tx_file_store.js +149 -0
  264. package/dest/services/tx_provider.d.ts +4 -2
  265. package/dest/services/tx_provider.d.ts.map +1 -1
  266. package/dest/services/tx_provider.js +11 -2
  267. package/dest/services/tx_provider_instrumentation.d.ts +5 -2
  268. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  269. package/dest/services/tx_provider_instrumentation.js +14 -14
  270. package/dest/test-helpers/index.d.ts +3 -1
  271. package/dest/test-helpers/index.d.ts.map +1 -1
  272. package/dest/test-helpers/index.js +2 -0
  273. package/dest/test-helpers/mock-tx-helpers.js +1 -1
  274. package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
  275. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  276. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  277. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  278. package/dest/test-helpers/test_tx_provider.js +41 -0
  279. package/dest/test-helpers/testbench-utils.d.ts +158 -0
  280. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  281. package/dest/test-helpers/testbench-utils.js +297 -0
  282. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  283. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  284. package/dest/testbench/p2p_client_testbench_worker.js +218 -123
  285. package/dest/testbench/worker_client_manager.d.ts +51 -6
  286. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  287. package/dest/testbench/worker_client_manager.js +226 -39
  288. package/package.json +18 -18
  289. package/src/bootstrap/bootstrap.ts +7 -4
  290. package/src/client/factory.ts +15 -20
  291. package/src/client/interface.ts +19 -4
  292. package/src/client/p2p_client.ts +114 -155
  293. package/src/client/test/tx_proposal_collector/README.md +227 -0
  294. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
  295. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  296. package/src/config.ts +25 -19
  297. package/src/mem_pools/attestation_pool/attestation_pool.ts +68 -41
  298. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +241 -289
  299. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +163 -141
  300. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +141 -164
  301. package/src/mem_pools/attestation_pool/mocks.ts +21 -15
  302. package/src/mem_pools/instrumentation.ts +39 -14
  303. package/src/mem_pools/interface.ts +2 -4
  304. package/src/mem_pools/tx_pool/README.md +270 -0
  305. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +367 -371
  306. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
  307. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
  308. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  309. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  310. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
  311. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  312. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  313. package/src/mem_pools/tx_pool/index.ts +0 -1
  314. package/src/mem_pools/tx_pool/priority.ts +8 -1
  315. package/src/mem_pools/tx_pool/tx_pool.ts +11 -5
  316. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +23 -17
  317. package/src/msg_validators/attestation_validator/attestation_validator.ts +37 -22
  318. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +19 -16
  319. package/src/msg_validators/clock_tolerance.ts +51 -0
  320. package/src/msg_validators/index.ts +1 -1
  321. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  322. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  323. package/src/msg_validators/proposal_validator/index.ts +3 -0
  324. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  325. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  326. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  327. package/src/msg_validators/tx_validator/block_header_validator.ts +6 -5
  328. package/src/msg_validators/tx_validator/data_validator.ts +18 -6
  329. package/src/msg_validators/tx_validator/double_spend_validator.ts +4 -3
  330. package/src/msg_validators/tx_validator/factory.ts +67 -25
  331. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  332. package/src/msg_validators/tx_validator/gas_validator.ts +17 -28
  333. package/src/msg_validators/tx_validator/index.ts +1 -0
  334. package/src/msg_validators/tx_validator/metadata_validator.ts +19 -8
  335. package/src/msg_validators/tx_validator/phases_validator.ts +5 -3
  336. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  337. package/src/msg_validators/tx_validator/test_utils.ts +1 -1
  338. package/src/msg_validators/tx_validator/timestamp_validator.ts +11 -5
  339. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  340. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  341. package/src/services/data_store.ts +10 -7
  342. package/src/services/discv5/discV5_service.ts +1 -1
  343. package/src/services/dummy_service.ts +51 -0
  344. package/src/services/encoding.ts +6 -5
  345. package/src/services/index.ts +1 -0
  346. package/src/services/libp2p/instrumentation.ts +32 -73
  347. package/src/services/libp2p/libp2p_service.ts +425 -180
  348. package/src/services/peer-manager/metrics.ts +39 -21
  349. package/src/services/peer-manager/peer_manager.ts +5 -4
  350. package/src/services/peer-manager/peer_scoring.ts +3 -4
  351. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  352. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
  353. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  354. package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
  355. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
  356. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
  357. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  358. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  359. package/src/services/reqresp/connection-sampler/connection_sampler.ts +19 -1
  360. package/src/services/reqresp/constants.ts +14 -0
  361. package/src/services/reqresp/interface.ts +4 -1
  362. package/src/services/reqresp/metrics.ts +36 -27
  363. package/src/services/reqresp/protocols/auth.ts +2 -2
  364. package/src/services/reqresp/protocols/block.ts +3 -2
  365. package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
  366. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +18 -4
  367. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +52 -10
  368. package/src/services/reqresp/protocols/status.ts +16 -12
  369. package/src/services/reqresp/protocols/tx.ts +1 -2
  370. package/src/services/reqresp/reqresp.ts +66 -19
  371. package/src/services/service.ts +23 -4
  372. package/src/services/tx_collection/config.ts +16 -2
  373. package/src/services/tx_collection/fast_tx_collection.ts +39 -15
  374. package/src/services/tx_collection/index.ts +5 -0
  375. package/src/services/tx_collection/instrumentation.ts +5 -13
  376. package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
  377. package/src/services/tx_collection/slow_tx_collection.ts +3 -3
  378. package/src/services/tx_collection/tx_collection.ts +10 -9
  379. package/src/services/tx_file_store/config.ts +43 -0
  380. package/src/services/tx_file_store/index.ts +3 -0
  381. package/src/services/tx_file_store/instrumentation.ts +36 -0
  382. package/src/services/tx_file_store/tx_file_store.ts +173 -0
  383. package/src/services/tx_provider.ts +19 -3
  384. package/src/services/tx_provider_instrumentation.ts +24 -14
  385. package/src/test-helpers/index.ts +2 -0
  386. package/src/test-helpers/mock-pubsub.ts +1 -1
  387. package/src/test-helpers/mock-tx-helpers.ts +1 -1
  388. package/src/test-helpers/reqresp-nodes.ts +1 -1
  389. package/src/test-helpers/test_tx_provider.ts +64 -0
  390. package/src/test-helpers/testbench-utils.ts +374 -0
  391. package/src/testbench/p2p_client_testbench_worker.ts +338 -119
  392. package/src/testbench/worker_client_manager.ts +304 -42
  393. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -80
  394. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  395. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -238
  396. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  397. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  398. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -82
  399. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  400. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  401. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  402. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -283
  403. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -97
  404. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -1,21 +1,399 @@
1
- function _ts_decorate(decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
1
+ function applyDecs2203RFactory() {
2
+ function createAddInitializerMethod(initializers, decoratorFinishedRef) {
3
+ return function addInitializer(initializer) {
4
+ assertNotFinished(decoratorFinishedRef, "addInitializer");
5
+ assertCallable(initializer, "An initializer");
6
+ initializers.push(initializer);
7
+ };
8
+ }
9
+ function memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value) {
10
+ var kindStr;
11
+ switch(kind){
12
+ case 1:
13
+ kindStr = "accessor";
14
+ break;
15
+ case 2:
16
+ kindStr = "method";
17
+ break;
18
+ case 3:
19
+ kindStr = "getter";
20
+ break;
21
+ case 4:
22
+ kindStr = "setter";
23
+ break;
24
+ default:
25
+ kindStr = "field";
26
+ }
27
+ var ctx = {
28
+ kind: kindStr,
29
+ name: isPrivate ? "#" + name : name,
30
+ static: isStatic,
31
+ private: isPrivate,
32
+ metadata: metadata
33
+ };
34
+ var decoratorFinishedRef = {
35
+ v: false
36
+ };
37
+ ctx.addInitializer = createAddInitializerMethod(initializers, decoratorFinishedRef);
38
+ var get, set;
39
+ if (kind === 0) {
40
+ if (isPrivate) {
41
+ get = desc.get;
42
+ set = desc.set;
43
+ } else {
44
+ get = function() {
45
+ return this[name];
46
+ };
47
+ set = function(v) {
48
+ this[name] = v;
49
+ };
50
+ }
51
+ } else if (kind === 2) {
52
+ get = function() {
53
+ return desc.value;
54
+ };
55
+ } else {
56
+ if (kind === 1 || kind === 3) {
57
+ get = function() {
58
+ return desc.get.call(this);
59
+ };
60
+ }
61
+ if (kind === 1 || kind === 4) {
62
+ set = function(v) {
63
+ desc.set.call(this, v);
64
+ };
65
+ }
66
+ }
67
+ ctx.access = get && set ? {
68
+ get: get,
69
+ set: set
70
+ } : get ? {
71
+ get: get
72
+ } : {
73
+ set: set
74
+ };
75
+ try {
76
+ return dec(value, ctx);
77
+ } finally{
78
+ decoratorFinishedRef.v = true;
79
+ }
80
+ }
81
+ function assertNotFinished(decoratorFinishedRef, fnName) {
82
+ if (decoratorFinishedRef.v) {
83
+ throw new Error("attempted to call " + fnName + " after decoration was finished");
84
+ }
85
+ }
86
+ function assertCallable(fn, hint) {
87
+ if (typeof fn !== "function") {
88
+ throw new TypeError(hint + " must be a function");
89
+ }
90
+ }
91
+ function assertValidReturnValue(kind, value) {
92
+ var type = typeof value;
93
+ if (kind === 1) {
94
+ if (type !== "object" || value === null) {
95
+ throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
96
+ }
97
+ if (value.get !== undefined) {
98
+ assertCallable(value.get, "accessor.get");
99
+ }
100
+ if (value.set !== undefined) {
101
+ assertCallable(value.set, "accessor.set");
102
+ }
103
+ if (value.init !== undefined) {
104
+ assertCallable(value.init, "accessor.init");
105
+ }
106
+ } else if (type !== "function") {
107
+ var hint;
108
+ if (kind === 0) {
109
+ hint = "field";
110
+ } else if (kind === 10) {
111
+ hint = "class";
112
+ } else {
113
+ hint = "method";
114
+ }
115
+ throw new TypeError(hint + " decorators must return a function or void 0");
116
+ }
117
+ }
118
+ function applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata) {
119
+ var decs = decInfo[0];
120
+ var desc, init, value;
121
+ if (isPrivate) {
122
+ if (kind === 0 || kind === 1) {
123
+ desc = {
124
+ get: decInfo[3],
125
+ set: decInfo[4]
126
+ };
127
+ } else if (kind === 3) {
128
+ desc = {
129
+ get: decInfo[3]
130
+ };
131
+ } else if (kind === 4) {
132
+ desc = {
133
+ set: decInfo[3]
134
+ };
135
+ } else {
136
+ desc = {
137
+ value: decInfo[3]
138
+ };
139
+ }
140
+ } else if (kind !== 0) {
141
+ desc = Object.getOwnPropertyDescriptor(base, name);
142
+ }
143
+ if (kind === 1) {
144
+ value = {
145
+ get: desc.get,
146
+ set: desc.set
147
+ };
148
+ } else if (kind === 2) {
149
+ value = desc.value;
150
+ } else if (kind === 3) {
151
+ value = desc.get;
152
+ } else if (kind === 4) {
153
+ value = desc.set;
154
+ }
155
+ var newValue, get, set;
156
+ if (typeof decs === "function") {
157
+ newValue = memberDec(decs, name, desc, initializers, kind, isStatic, isPrivate, metadata, value);
158
+ if (newValue !== void 0) {
159
+ assertValidReturnValue(kind, newValue);
160
+ if (kind === 0) {
161
+ init = newValue;
162
+ } else if (kind === 1) {
163
+ init = newValue.init;
164
+ get = newValue.get || value.get;
165
+ set = newValue.set || value.set;
166
+ value = {
167
+ get: get,
168
+ set: set
169
+ };
170
+ } else {
171
+ value = newValue;
172
+ }
173
+ }
174
+ } else {
175
+ for(var i = decs.length - 1; i >= 0; i--){
176
+ var dec = decs[i];
177
+ newValue = memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value);
178
+ if (newValue !== void 0) {
179
+ assertValidReturnValue(kind, newValue);
180
+ var newInit;
181
+ if (kind === 0) {
182
+ newInit = newValue;
183
+ } else if (kind === 1) {
184
+ newInit = newValue.init;
185
+ get = newValue.get || value.get;
186
+ set = newValue.set || value.set;
187
+ value = {
188
+ get: get,
189
+ set: set
190
+ };
191
+ } else {
192
+ value = newValue;
193
+ }
194
+ if (newInit !== void 0) {
195
+ if (init === void 0) {
196
+ init = newInit;
197
+ } else if (typeof init === "function") {
198
+ init = [
199
+ init,
200
+ newInit
201
+ ];
202
+ } else {
203
+ init.push(newInit);
204
+ }
205
+ }
206
+ }
207
+ }
208
+ }
209
+ if (kind === 0 || kind === 1) {
210
+ if (init === void 0) {
211
+ init = function(instance, init) {
212
+ return init;
213
+ };
214
+ } else if (typeof init !== "function") {
215
+ var ownInitializers = init;
216
+ init = function(instance, init) {
217
+ var value = init;
218
+ for(var i = 0; i < ownInitializers.length; i++){
219
+ value = ownInitializers[i].call(instance, value);
220
+ }
221
+ return value;
222
+ };
223
+ } else {
224
+ var originalInitializer = init;
225
+ init = function(instance, init) {
226
+ return originalInitializer.call(instance, init);
227
+ };
228
+ }
229
+ ret.push(init);
230
+ }
231
+ if (kind !== 0) {
232
+ if (kind === 1) {
233
+ desc.get = value.get;
234
+ desc.set = value.set;
235
+ } else if (kind === 2) {
236
+ desc.value = value;
237
+ } else if (kind === 3) {
238
+ desc.get = value;
239
+ } else if (kind === 4) {
240
+ desc.set = value;
241
+ }
242
+ if (isPrivate) {
243
+ if (kind === 1) {
244
+ ret.push(function(instance, args) {
245
+ return value.get.call(instance, args);
246
+ });
247
+ ret.push(function(instance, args) {
248
+ return value.set.call(instance, args);
249
+ });
250
+ } else if (kind === 2) {
251
+ ret.push(value);
252
+ } else {
253
+ ret.push(function(instance, args) {
254
+ return value.call(instance, args);
255
+ });
256
+ }
257
+ } else {
258
+ Object.defineProperty(base, name, desc);
259
+ }
260
+ }
261
+ }
262
+ function applyMemberDecs(Class, decInfos, metadata) {
263
+ var ret = [];
264
+ var protoInitializers;
265
+ var staticInitializers;
266
+ var existingProtoNonFields = new Map();
267
+ var existingStaticNonFields = new Map();
268
+ for(var i = 0; i < decInfos.length; i++){
269
+ var decInfo = decInfos[i];
270
+ if (!Array.isArray(decInfo)) continue;
271
+ var kind = decInfo[1];
272
+ var name = decInfo[2];
273
+ var isPrivate = decInfo.length > 3;
274
+ var isStatic = kind >= 5;
275
+ var base;
276
+ var initializers;
277
+ if (isStatic) {
278
+ base = Class;
279
+ kind = kind - 5;
280
+ staticInitializers = staticInitializers || [];
281
+ initializers = staticInitializers;
282
+ } else {
283
+ base = Class.prototype;
284
+ protoInitializers = protoInitializers || [];
285
+ initializers = protoInitializers;
286
+ }
287
+ if (kind !== 0 && !isPrivate) {
288
+ var existingNonFields = isStatic ? existingStaticNonFields : existingProtoNonFields;
289
+ var existingKind = existingNonFields.get(name) || 0;
290
+ if (existingKind === true || existingKind === 3 && kind !== 4 || existingKind === 4 && kind !== 3) {
291
+ throw new Error("Attempted to decorate a public method/accessor that has the same name as a previously decorated public method/accessor. This is not currently supported by the decorators plugin. Property name was: " + name);
292
+ } else if (!existingKind && kind > 2) {
293
+ existingNonFields.set(name, kind);
294
+ } else {
295
+ existingNonFields.set(name, true);
296
+ }
297
+ }
298
+ applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata);
299
+ }
300
+ pushInitializers(ret, protoInitializers);
301
+ pushInitializers(ret, staticInitializers);
302
+ return ret;
303
+ }
304
+ function pushInitializers(ret, initializers) {
305
+ if (initializers) {
306
+ ret.push(function(instance) {
307
+ for(var i = 0; i < initializers.length; i++){
308
+ initializers[i].call(instance);
309
+ }
310
+ return instance;
311
+ });
312
+ }
313
+ }
314
+ function applyClassDecs(targetClass, classDecs, metadata) {
315
+ if (classDecs.length > 0) {
316
+ var initializers = [];
317
+ var newClass = targetClass;
318
+ var name = targetClass.name;
319
+ for(var i = classDecs.length - 1; i >= 0; i--){
320
+ var decoratorFinishedRef = {
321
+ v: false
322
+ };
323
+ try {
324
+ var nextNewClass = classDecs[i](newClass, {
325
+ kind: "class",
326
+ name: name,
327
+ addInitializer: createAddInitializerMethod(initializers, decoratorFinishedRef),
328
+ metadata
329
+ });
330
+ } finally{
331
+ decoratorFinishedRef.v = true;
332
+ }
333
+ if (nextNewClass !== undefined) {
334
+ assertValidReturnValue(10, nextNewClass);
335
+ newClass = nextNewClass;
336
+ }
337
+ }
338
+ return [
339
+ defineMetadata(newClass, metadata),
340
+ function() {
341
+ for(var i = 0; i < initializers.length; i++){
342
+ initializers[i].call(newClass);
343
+ }
344
+ }
345
+ ];
346
+ }
347
+ }
348
+ function defineMetadata(Class, metadata) {
349
+ return Object.defineProperty(Class, Symbol.metadata || Symbol.for("Symbol.metadata"), {
350
+ configurable: true,
351
+ enumerable: true,
352
+ value: metadata
353
+ });
354
+ }
355
+ return function applyDecs2203R(targetClass, memberDecs, classDecs, parentClass) {
356
+ if (parentClass !== void 0) {
357
+ var parentMetadata = parentClass[Symbol.metadata || Symbol.for("Symbol.metadata")];
358
+ }
359
+ var metadata = Object.create(parentMetadata === void 0 ? null : parentMetadata);
360
+ var e = applyMemberDecs(targetClass, memberDecs, metadata);
361
+ if (!classDecs.length) defineMetadata(targetClass, metadata);
362
+ return {
363
+ e: e,
364
+ get c () {
365
+ return applyClassDecs(targetClass, classDecs, metadata);
366
+ }
367
+ };
368
+ };
369
+ }
370
+ function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {
371
+ return (_apply_decs_2203_r = applyDecs2203RFactory())(targetClass, memberDecs, classDecs, parentClass);
6
372
  }
7
- import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
8
- import { SlotNumber } from '@aztec/foundation/branded-types';
373
+ var _dec, _dec1, _initProto;
374
+ import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/constants';
375
+ import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
9
376
  import { createLogger } from '@aztec/foundation/log';
10
377
  import { DateProvider } from '@aztec/foundation/timer';
378
+ import { L2TipsKVStore } from '@aztec/kv-store/stores';
379
+ import { L2BlockStream } from '@aztec/stdlib/block';
11
380
  import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
12
381
  import { tryStop } from '@aztec/stdlib/interfaces/server';
13
- import { Attributes, TraceableL2BlockStream, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
382
+ import { Attributes, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
14
383
  import { getP2PDefaultConfig } from '../config.js';
15
384
  import { ReqRespSubProtocol } from '../services/reqresp/interface.js';
16
385
  import { chunkTxHashesRequest } from '../services/reqresp/protocols/tx.js';
17
386
  import { TxProvider } from '../services/tx_provider.js';
18
387
  import { P2PClientState } from './interface.js';
388
+ _dec = trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
389
+ [Attributes.SLOT_NUMBER]: proposal.slotNumber,
390
+ [Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
391
+ [Attributes.P2P_ID]: (await proposal.p2pMessageLoggingIdentifier()).toString()
392
+ })), _dec1 = trackSpan('p2pClient.broadcastCheckpointProposal', async (proposal)=>({
393
+ [Attributes.SLOT_NUMBER]: proposal.slotNumber,
394
+ [Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
395
+ [Attributes.P2P_ID]: (await proposal.p2pMessageLoggingIdentifier()).toString()
396
+ }));
19
397
  /**
20
398
  * The P2P client implementation.
21
399
  */ export class P2PClient extends WithTracer {
@@ -23,9 +401,24 @@ import { P2PClientState } from './interface.js';
23
401
  l2BlockSource;
24
402
  p2pService;
25
403
  txCollection;
404
+ txFileStore;
26
405
  _dateProvider;
27
406
  telemetry;
28
407
  log;
408
+ static{
409
+ ({ e: [_initProto] } = _apply_decs_2203_r(this, [
410
+ [
411
+ _dec,
412
+ 2,
413
+ "broadcastProposal"
414
+ ],
415
+ [
416
+ _dec1,
417
+ 2,
418
+ "broadcastCheckpointProposal"
419
+ ]
420
+ ], []));
421
+ }
29
422
  /** The JS promise that will be running to keep the client's data in sync. Can be interrupted if the client is stopped. */ runningPromise;
30
423
  currentState;
31
424
  syncPromise;
@@ -33,10 +426,7 @@ import { P2PClientState } from './interface.js';
33
426
  latestBlockNumberAtStart;
34
427
  provenBlockNumberAtStart;
35
428
  finalizedBlockNumberAtStart;
36
- synchedBlockHashes;
37
- synchedLatestBlockNumber;
38
- synchedProvenBlockNumber;
39
- synchedFinalizedBlockNumber;
429
+ l2Tips;
40
430
  synchedLatestSlot;
41
431
  txPool;
42
432
  attestationPool;
@@ -51,8 +441,8 @@ import { P2PClientState } from './interface.js';
51
441
  * @param txPool - The client's instance of a transaction pool. Defaults to in-memory implementation.
52
442
  * @param p2pService - The concrete instance of p2p networking to use.
53
443
  * @param log - A logger.
54
- */ constructor(_clientType, store, l2BlockSource, mempools, p2pService, txCollection, config = {}, _dateProvider = new DateProvider(), telemetry = getTelemetryClient(), log = createLogger('p2p')){
55
- super(telemetry, 'P2PClient'), this.store = store, this.l2BlockSource = l2BlockSource, this.p2pService = p2pService, this.txCollection = txCollection, this._dateProvider = _dateProvider, this.telemetry = telemetry, this.log = log, this.currentState = P2PClientState.IDLE, this.syncPromise = Promise.resolve(), this.syncResolve = undefined, this.latestBlockNumberAtStart = -1, this.provenBlockNumberAtStart = -1, this.finalizedBlockNumberAtStart = -1, this.validatorAddresses = [];
444
+ */ constructor(_clientType, store, l2BlockSource, mempools, p2pService, txCollection, txFileStore, config = {}, _dateProvider = new DateProvider(), telemetry = getTelemetryClient(), log = createLogger('p2p')){
445
+ super(telemetry, 'P2PClient'), this.store = store, this.l2BlockSource = l2BlockSource, this.p2pService = p2pService, this.txCollection = txCollection, this.txFileStore = txFileStore, this._dateProvider = _dateProvider, this.telemetry = telemetry, this.log = log, this.currentState = (_initProto(this), P2PClientState.IDLE), this.syncPromise = Promise.resolve(), this.syncResolve = undefined, this.latestBlockNumberAtStart = -1, this.provenBlockNumberAtStart = -1, this.finalizedBlockNumberAtStart = -1, this.validatorAddresses = [];
56
446
  this.config = {
57
447
  ...getP2PDefaultConfig(),
58
448
  ...config
@@ -61,7 +451,8 @@ import { P2PClientState } from './interface.js';
61
451
  this.attestationPool = mempools.attestationPool;
62
452
  this.txProvider = new TxProvider(this.txCollection, this.txPool, this, this.log.createChild('tx-provider'), this.telemetry);
63
453
  // Default to collecting all txs when we see a valid proposal
64
- // This can be overridden by the validator client to attest, and it will call getTxsForBlockProposal on its own
454
+ // This can be overridden by the validator client to validate, and it will call getTxsForBlockProposal on its own
455
+ // Note: Validators do NOT attest to individual blocks - attestations are only for checkpoint proposals.
65
456
  // TODO(palla/txs): We should not trigger a request for txs on a proposal before fully validating it. We need to bring
66
457
  // validator-client code into here so we can validate a proposal is reasonable.
67
458
  this.registerBlockProposalHandler(async (block, sender)=>{
@@ -70,23 +461,19 @@ import { P2PClientState } from './interface.js';
70
461
  const constants = this.txCollection.getConstants();
71
462
  const nextSlotTimestampSeconds = Number(getTimestampForSlot(SlotNumber(block.slotNumber + 1), constants));
72
463
  const deadline = new Date(nextSlotTimestampSeconds * 1000);
73
- const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.payload.header.lastArchiveRoot);
464
+ const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.blockHeader.lastArchive.root);
74
465
  if (!parentBlock) {
75
466
  this.log.debug(`Cannot collect txs for proposal as parent block not found`);
76
- return;
467
+ return false;
77
468
  }
78
- const blockNumber = parentBlock.getBlockNumber() + 1;
469
+ const blockNumber = BlockNumber(parentBlock.getBlockNumber() + 1);
79
470
  await this.txProvider.getTxsForBlockProposal(block, blockNumber, {
80
471
  pinnedPeer: sender,
81
472
  deadline
82
473
  });
83
- return undefined;
474
+ return true;
84
475
  });
85
- // REFACTOR: Try replacing these with an L2TipsStore
86
- this.synchedBlockHashes = store.openMap('p2p_pool_block_hashes');
87
- this.synchedLatestBlockNumber = store.openSingleton('p2p_pool_last_l2_block');
88
- this.synchedProvenBlockNumber = store.openSingleton('p2p_pool_last_proven_l2_block');
89
- this.synchedFinalizedBlockNumber = store.openSingleton('p2p_pool_last_finalized_l2_block');
476
+ this.l2Tips = new L2TipsKVStore(store, 'p2p_client');
90
477
  this.synchedLatestSlot = store.openSingleton('p2p_pool_last_l2_slot');
91
478
  }
92
479
  registerThisValidatorAddresses(addresses) {
@@ -108,52 +495,15 @@ import { P2PClientState } from './interface.js';
108
495
  return Promise.resolve(this.p2pService.getPeers(includePending));
109
496
  }
110
497
  getL2BlockHash(number) {
111
- return this.synchedBlockHashes.getAsync(number);
498
+ return this.l2Tips.getL2BlockHash(number);
112
499
  }
113
500
  updateP2PConfig(config) {
114
501
  this.txPool.updateConfig(config);
115
502
  this.p2pService.updateConfig(config);
116
503
  return Promise.resolve();
117
504
  }
118
- async getL2Tips() {
119
- const latestBlockNumber = await this.getSyncedLatestBlockNum();
120
- let latestBlockHash;
121
- const provenBlockNumber = await this.getSyncedProvenBlockNum();
122
- let provenBlockHash;
123
- const finalizedBlockNumber = await this.getSyncedFinalizedBlockNum();
124
- let finalizedBlockHash;
125
- if (latestBlockNumber > 0) {
126
- latestBlockHash = await this.synchedBlockHashes.getAsync(latestBlockNumber);
127
- if (typeof latestBlockHash === 'undefined') {
128
- throw new Error(`Block hash for latest block ${latestBlockNumber} not found in p2p client`);
129
- }
130
- }
131
- if (provenBlockNumber > 0) {
132
- provenBlockHash = await this.synchedBlockHashes.getAsync(provenBlockNumber);
133
- if (typeof provenBlockHash === 'undefined') {
134
- throw new Error(`Block hash for proven block ${provenBlockNumber} not found in p2p client`);
135
- }
136
- }
137
- if (finalizedBlockNumber > 0) {
138
- finalizedBlockHash = await this.synchedBlockHashes.getAsync(finalizedBlockNumber);
139
- if (typeof finalizedBlockHash === 'undefined') {
140
- throw new Error(`Block hash for finalized block ${finalizedBlockNumber} not found in p2p client`);
141
- }
142
- }
143
- return {
144
- latest: {
145
- hash: latestBlockHash,
146
- number: latestBlockNumber
147
- },
148
- proven: {
149
- hash: provenBlockHash,
150
- number: provenBlockNumber
151
- },
152
- finalized: {
153
- hash: finalizedBlockHash,
154
- number: finalizedBlockNumber
155
- }
156
- };
505
+ getL2Tips() {
506
+ return this.l2Tips.getL2Tips();
157
507
  }
158
508
  async handleBlockStreamEvent(event) {
159
509
  this.log.debug(`Handling block stream event ${event.type}`);
@@ -163,38 +513,33 @@ import { P2PClientState } from './interface.js';
163
513
  break;
164
514
  case 'chain-finalized':
165
515
  {
166
- // TODO (alexg): I think we can prune the block hashes map here
167
- await this.setBlockHash(event.block);
168
- const from = await this.getSyncedFinalizedBlockNum() + 1;
516
+ const oldFinalizedBlockNum = await this.getSyncedFinalizedBlockNum();
517
+ const from = BlockNumber(oldFinalizedBlockNum + 1);
169
518
  const limit = event.block.number - from + 1;
170
519
  if (limit > 0) {
171
- await this.handleFinalizedL2Blocks(await this.l2BlockSource.getBlocks(from, limit));
520
+ const oldBlocks = await this.l2BlockSource.getBlocks(from, limit);
521
+ await this.handleFinalizedL2Blocks(oldBlocks);
172
522
  }
173
523
  break;
174
524
  }
175
525
  case 'chain-proven':
176
- {
177
- await this.setBlockHash(event.block);
178
- this.txCollection.stopCollectingForBlocksUpTo(event.block.number);
179
- await this.synchedProvenBlockNumber.set(event.block.number);
180
- break;
181
- }
526
+ this.txCollection.stopCollectingForBlocksUpTo(event.block.number);
527
+ break;
182
528
  case 'chain-pruned':
183
- await this.setBlockHash(event.block);
184
529
  this.txCollection.stopCollectingForBlocksAfter(event.block.number);
185
530
  await this.handlePruneL2Blocks(event.block.number);
186
531
  break;
532
+ case 'chain-checkpointed':
533
+ break;
187
534
  default:
188
535
  {
189
536
  const _ = event;
190
537
  break;
191
538
  }
192
539
  }
193
- }
194
- async setBlockHash(block) {
195
- if (block.hash !== undefined) {
196
- await this.synchedBlockHashes.set(block.number, block.hash.toString());
197
- }
540
+ // Pass the event through to our l2 tips store
541
+ await this.l2Tips.handleBlockStreamEvent(event);
542
+ await this.startServiceIfSynched();
198
543
  }
199
544
  #assertIsReady() {
200
545
  // this.log.info('Checking if p2p client is ready, current state: ', this.currentState);
@@ -214,15 +559,15 @@ import { P2PClientState } from './interface.js';
214
559
  }
215
560
  // get the current latest block numbers
216
561
  const latestBlockNumbers = await this.l2BlockSource.getL2Tips();
217
- this.latestBlockNumberAtStart = latestBlockNumbers.latest.number;
218
- this.provenBlockNumberAtStart = latestBlockNumbers.proven.number;
219
- this.finalizedBlockNumberAtStart = latestBlockNumbers.finalized.number;
562
+ this.latestBlockNumberAtStart = latestBlockNumbers.proposed.number;
563
+ this.provenBlockNumberAtStart = latestBlockNumbers.proven.block.number;
564
+ this.finalizedBlockNumberAtStart = latestBlockNumbers.finalized.block.number;
220
565
  const syncedLatestBlock = await this.getSyncedLatestBlockNum() + 1;
221
566
  const syncedProvenBlock = await this.getSyncedProvenBlockNum() + 1;
222
567
  const syncedFinalizedBlock = await this.getSyncedFinalizedBlockNum() + 1;
223
- if (await this.txPool.isEmpty() && (this.attestationPool === undefined || await this.attestationPool?.isEmpty())) {
568
+ if (await this.txPool.isEmpty() && await this.attestationPool.isEmpty()) {
224
569
  // if mempools are empty, we don't care about syncing prior blocks
225
- this.initBlockStream(this.latestBlockNumberAtStart);
570
+ this.initBlockStream(BlockNumber(this.latestBlockNumberAtStart));
226
571
  this.setCurrentState(P2PClientState.RUNNING);
227
572
  this.syncPromise = Promise.resolve();
228
573
  await this.p2pService.start();
@@ -254,6 +599,7 @@ import { P2PClientState } from './interface.js';
254
599
  }
255
600
  this.blockStream.start();
256
601
  await this.txCollection.start();
602
+ this.txFileStore?.start();
257
603
  return this.syncPromise;
258
604
  }
259
605
  addReqRespSubProtocol(subProtocol, handler, validator) {
@@ -262,7 +608,7 @@ import { P2PClientState } from './interface.js';
262
608
  initBlockStream(startingBlock) {
263
609
  if (!this.blockStream) {
264
610
  const { blockRequestBatchSize: batchSize, blockCheckIntervalMS: pollIntervalMS } = this.config;
265
- this.blockStream = new TraceableL2BlockStream(this.l2BlockSource, this, this, this.telemetry.getTracer('P2PL2BlockStream'), 'P2PL2BlockStream', createLogger(`${this.log.module}:l2-block-stream`), {
611
+ this.blockStream = new L2BlockStream(this.l2BlockSource, this, this, createLogger(`${this.log.module}:l2-block-stream`), {
266
612
  batchSize,
267
613
  pollIntervalMS,
268
614
  startingBlock
@@ -276,6 +622,8 @@ import { P2PClientState } from './interface.js';
276
622
  this.log.debug('Stopping p2p client...');
277
623
  await tryStop(this.txCollection);
278
624
  this.log.debug('Stopped tx collection service');
625
+ await this.txFileStore?.stop();
626
+ this.log.debug('Stopped tx file store');
279
627
  await this.p2pService.stop();
280
628
  this.log.debug('Stopped p2p service');
281
629
  await this.blockStream?.stop();
@@ -288,30 +636,39 @@ import { P2PClientState } from './interface.js';
288
636
  this.initBlockStream();
289
637
  await this.blockStream.sync();
290
638
  }
291
- broadcastProposal(proposal) {
639
+ async broadcastProposal(proposal) {
292
640
  this.log.verbose(`Broadcasting proposal for slot ${proposal.slotNumber} to peers`);
641
+ // Store our own proposal so we can respond to req/resp requests for it
642
+ await this.attestationPool.addBlockProposal(proposal);
293
643
  return this.p2pService.propagate(proposal);
294
644
  }
295
- async broadcastAttestations(attestations) {
296
- this.log.verbose(`Broadcasting ${attestations.length} attestations to peers`);
297
- await Promise.all(attestations.map((att)=>this.p2pService.propagate(att)));
645
+ async broadcastCheckpointProposal(proposal) {
646
+ this.log.verbose(`Broadcasting checkpoint proposal for slot ${proposal.slotNumber} to peers`);
647
+ const blockProposal = proposal.getBlockProposal();
648
+ if (blockProposal) {
649
+ // Store our own last-block proposal so we can respond to req/resp requests for it.
650
+ await this.attestationPool.addBlockProposal(blockProposal);
651
+ }
652
+ return this.p2pService.propagate(proposal);
298
653
  }
299
- async getAttestationsForSlot(slot, proposalId) {
300
- return await (proposalId ? this.attestationPool?.getAttestationsForSlotAndProposal(slot, proposalId) : this.attestationPool?.getAttestationsForSlot(slot)) ?? [];
654
+ async broadcastCheckpointAttestations(attestations) {
655
+ this.log.verbose(`Broadcasting ${attestations.length} checkpoint attestations to peers`);
656
+ await Promise.all(attestations.map((att)=>this.p2pService.propagate(att)));
301
657
  }
302
- addAttestations(attestations) {
303
- return this.attestationPool?.addAttestations(attestations) ?? Promise.resolve();
658
+ async getCheckpointAttestationsForSlot(slot, proposalId) {
659
+ return await (proposalId ? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot, proposalId) : this.attestationPool.getCheckpointAttestationsForSlot(slot));
304
660
  }
305
- deleteAttestation(attestation) {
306
- return this.attestationPool?.deleteAttestations([
307
- attestation
308
- ]) ?? Promise.resolve();
661
+ addCheckpointAttestations(attestations) {
662
+ return this.attestationPool.addCheckpointAttestations(attestations);
309
663
  }
310
664
  // REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
311
665
  // ^ This pattern is not my favorite (md)
312
666
  registerBlockProposalHandler(handler) {
313
667
  this.p2pService.registerBlockReceivedCallback(handler);
314
668
  }
669
+ registerCheckpointProposalHandler(handler) {
670
+ this.p2pService.registerCheckpointReceivedCallback(handler);
671
+ }
315
672
  /**
316
673
  * Uses the batched Request Response protocol to request a set of transactions from the network.
317
674
  */ async requestTxsByHash(txHashes, pinnedPeerId) {
@@ -502,16 +859,19 @@ import { P2PClientState } from './interface.js';
502
859
  * Public function to check the latest block number that the P2P client is synced to.
503
860
  * @returns Block number of latest L2 Block we've synced with.
504
861
  */ async getSyncedLatestBlockNum() {
505
- return await this.synchedLatestBlockNumber.getAsync() ?? INITIAL_L2_BLOCK_NUM - 1;
862
+ const tips = await this.l2Tips.getL2Tips();
863
+ return tips.proposed.number;
506
864
  }
507
865
  /**
508
866
  * Public function to check the latest proven block number that the P2P client is synced to.
509
867
  * @returns Block number of latest proven L2 Block we've synced with.
510
868
  */ async getSyncedProvenBlockNum() {
511
- return await this.synchedProvenBlockNumber.getAsync() ?? INITIAL_L2_BLOCK_NUM - 1;
869
+ const tips = await this.l2Tips.getL2Tips();
870
+ return tips.proven.block.number;
512
871
  }
513
872
  async getSyncedFinalizedBlockNum() {
514
- return await this.synchedFinalizedBlockNumber.getAsync() ?? INITIAL_L2_BLOCK_NUM - 1;
873
+ const tips = await this.l2Tips.getL2Tips();
874
+ return tips.finalized.block.number;
515
875
  }
516
876
  /** Returns latest L2 slot for which we have seen an L2 block. */ async getSyncedLatestSlot() {
517
877
  return await this.synchedLatestSlot.getAsync() ?? BigInt(0);
@@ -521,7 +881,7 @@ import { P2PClientState } from './interface.js';
521
881
  * @returns Information about p2p client status: state & syncedToBlockNum.
522
882
  */ async getStatus() {
523
883
  const blockNumber = await this.getSyncedLatestBlockNum();
524
- const blockHash = blockNumber === 0 ? '' : await this.l2BlockSource.getBlockHeader(blockNumber).then((header)=>header?.hash()).then((hash)=>hash?.toString());
884
+ const blockHash = blockNumber === 0 ? GENESIS_BLOCK_HEADER_HASH.toString() : await this.l2BlockSource.getBlockHeader(blockNumber).then((header)=>header?.hash()).then((hash)=>hash?.toString());
525
885
  return {
526
886
  state: this.currentState,
527
887
  syncedToL2Block: {
@@ -537,7 +897,7 @@ import { P2PClientState } from './interface.js';
537
897
  */ async markTxsAsMinedFromBlocks(blocks) {
538
898
  for (const block of blocks){
539
899
  const txHashes = block.body.txEffects.map((txEffect)=>txEffect.txHash);
540
- await this.txPool.markAsMined(txHashes, block.getBlockHeader());
900
+ await this.txPool.markAsMined(txHashes, block.header);
541
901
  }
542
902
  }
543
903
  /**
@@ -548,17 +908,12 @@ import { P2PClientState } from './interface.js';
548
908
  if (!blocks.length) {
549
909
  return Promise.resolve();
550
910
  }
551
- await this.markTxsAsMinedFromBlocks(blocks.map((b)=>b.block));
552
- await this.startCollectingMissingTxs(blocks.map((b)=>b.block));
553
- const lastBlock = blocks.at(-1).block;
554
- await Promise.all(blocks.map(async (block)=>this.setBlockHash({
555
- number: block.block.number,
556
- hash: await block.block.hash().then((h)=>h.toString())
557
- })));
558
- await this.synchedLatestBlockNumber.set(lastBlock.number);
911
+ await this.markTxsAsMinedFromBlocks(blocks);
912
+ await this.txPool.clearNonEvictableTxs();
913
+ await this.startCollectingMissingTxs(blocks);
914
+ const lastBlock = blocks.at(-1);
559
915
  await this.synchedLatestSlot.set(BigInt(lastBlock.header.getSlot()));
560
916
  this.log.verbose(`Synched to latest block ${lastBlock.number}`);
561
- await this.startServiceIfSynched();
562
917
  }
563
918
  /** Request txs for unproven blocks so the prover node has more chances to get them. */ async startCollectingMissingTxs(blocks) {
564
919
  try {
@@ -603,10 +958,8 @@ import { P2PClientState } from './interface.js';
603
958
  permanently: true
604
959
  });
605
960
  await this.txPool.cleanupDeletedMinedTxs(lastBlockNum);
606
- await this.attestationPool?.deleteAttestationsOlderThan(lastBlockSlot);
607
- await this.synchedFinalizedBlockNumber.set(lastBlockNum);
961
+ await this.attestationPool.deleteCheckpointAttestationsOlderThan(lastBlockSlot);
608
962
  this.log.debug(`Synched to finalized block ${lastBlockNum} at slot ${lastBlockSlot}`);
609
- await this.startServiceIfSynched();
610
963
  }
611
964
  /**
612
965
  * Updates the tx pool after a chain prune.
@@ -645,19 +998,17 @@ import { P2PClientState } from './interface.js';
645
998
  this.log.info(`Deleting ${minedTxsFromReorg.length} mined txs from reorg`);
646
999
  await this.txPool.deleteTxs(minedTxsFromReorg);
647
1000
  } else {
648
- this.log.info(`Moving ${minedTxsFromReorg.length} mined txs from reorg back to pending`);
649
- await this.txPool.markMinedAsPending(minedTxsFromReorg);
1001
+ await this.txPool.markMinedAsPending(minedTxsFromReorg, latestBlock);
650
1002
  }
651
- await this.synchedLatestBlockNumber.set(latestBlock);
652
- // no need to update block hashes, as they will be updated as new blocks are added
653
1003
  }
654
1004
  async startServiceIfSynched() {
655
1005
  if (this.currentState !== P2PClientState.SYNCHING) {
656
1006
  return;
657
1007
  }
658
- const syncedFinalizedBlock = await this.getSyncedFinalizedBlockNum();
659
- const syncedProvenBlock = await this.getSyncedProvenBlockNum();
660
- const syncedLatestBlock = await this.getSyncedLatestBlockNum();
1008
+ const tips = await this.l2Tips.getL2Tips();
1009
+ const syncedFinalizedBlock = tips.finalized.block.number;
1010
+ const syncedProvenBlock = tips.proven.block.number;
1011
+ const syncedLatestBlock = tips.proposed.number;
661
1012
  if (syncedLatestBlock >= this.latestBlockNumberAtStart && syncedProvenBlock >= this.provenBlockNumberAtStart && syncedFinalizedBlock >= this.finalizedBlockNumberAtStart) {
662
1013
  this.log.info(`Completed P2P client sync to block ${syncedLatestBlock}. Starting service.`, {
663
1014
  syncedLatestBlock,
@@ -692,10 +1043,3 @@ import { P2PClientState } from './interface.js';
692
1043
  return this.p2pService.handleAuthRequestFromPeer(authRequest, peerId);
693
1044
  }
694
1045
  }
695
- _ts_decorate([
696
- trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
697
- [Attributes.SLOT_NUMBER]: proposal.slotNumber,
698
- [Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
699
- [Attributes.P2P_ID]: (await proposal.p2pMessageLoggingIdentifier()).toString()
700
- }))
701
- ], P2PClient.prototype, "broadcastProposal", null);