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

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 (384) 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 +8 -8
  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 +16 -19
  10. package/dest/client/p2p_client.d.ts.map +1 -1
  11. package/dest/client/p2p_client.js +468 -128
  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 +11 -8
  19. package/dest/config.d.ts.map +1 -1
  20. package/dest/config.js +12 -13
  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/libp2p/instrumentation.d.ts +1 -1
  157. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  158. package/dest/services/libp2p/instrumentation.js +30 -72
  159. package/dest/services/libp2p/libp2p_service.d.ts +39 -16
  160. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  161. package/dest/services/libp2p/libp2p_service.js +754 -191
  162. package/dest/services/peer-manager/metrics.d.ts +7 -2
  163. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  164. package/dest/services/peer-manager/metrics.js +33 -21
  165. package/dest/services/peer-manager/peer_manager.d.ts +2 -2
  166. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  167. package/dest/services/peer-manager/peer_manager.js +4 -12
  168. package/dest/services/peer-manager/peer_scoring.d.ts +1 -1
  169. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  170. package/dest/services/peer-manager/peer_scoring.js +7 -4
  171. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
  172. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  173. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
  174. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  175. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  176. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  177. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  178. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  179. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  180. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
  181. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  182. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
  183. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
  184. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  185. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
  186. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  187. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  188. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  189. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  190. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  191. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  192. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -1
  193. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  194. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  195. package/dest/services/reqresp/constants.d.ts +12 -0
  196. package/dest/services/reqresp/constants.d.ts.map +1 -0
  197. package/dest/services/reqresp/constants.js +7 -0
  198. package/dest/services/reqresp/interface.d.ts +4 -2
  199. package/dest/services/reqresp/interface.d.ts.map +1 -1
  200. package/dest/services/reqresp/interface.js +1 -1
  201. package/dest/services/reqresp/metrics.d.ts +6 -5
  202. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  203. package/dest/services/reqresp/metrics.js +17 -21
  204. package/dest/services/reqresp/protocols/auth.d.ts +2 -2
  205. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
  206. package/dest/services/reqresp/protocols/auth.js +2 -2
  207. package/dest/services/reqresp/protocols/block.d.ts +1 -1
  208. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  209. package/dest/services/reqresp/protocols/block.js +3 -2
  210. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  211. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  212. package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
  213. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  214. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  215. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +16 -3
  216. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +19 -7
  217. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  218. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +44 -14
  219. package/dest/services/reqresp/protocols/status.d.ts +5 -4
  220. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  221. package/dest/services/reqresp/protocols/status.js +7 -3
  222. package/dest/services/reqresp/protocols/tx.d.ts +2 -3
  223. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  224. package/dest/services/reqresp/reqresp.d.ts +6 -1
  225. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  226. package/dest/services/reqresp/reqresp.js +460 -46
  227. package/dest/services/service.d.ts +19 -3
  228. package/dest/services/service.d.ts.map +1 -1
  229. package/dest/services/tx_collection/config.d.ts +4 -1
  230. package/dest/services/tx_collection/config.d.ts.map +1 -1
  231. package/dest/services/tx_collection/config.js +10 -2
  232. package/dest/services/tx_collection/fast_tx_collection.d.ts +9 -6
  233. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  234. package/dest/services/tx_collection/fast_tx_collection.js +16 -5
  235. package/dest/services/tx_collection/index.d.ts +2 -1
  236. package/dest/services/tx_collection/index.d.ts.map +1 -1
  237. package/dest/services/tx_collection/index.js +1 -0
  238. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  239. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  240. package/dest/services/tx_collection/instrumentation.js +10 -13
  241. package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
  242. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  243. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  244. package/dest/services/tx_collection/slow_tx_collection.d.ts +4 -3
  245. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  246. package/dest/services/tx_collection/tx_collection.d.ts +10 -9
  247. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  248. package/dest/services/tx_collection/tx_collection.js +5 -5
  249. package/dest/services/tx_provider.d.ts +4 -2
  250. package/dest/services/tx_provider.d.ts.map +1 -1
  251. package/dest/services/tx_provider.js +11 -2
  252. package/dest/services/tx_provider_instrumentation.d.ts +5 -2
  253. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  254. package/dest/services/tx_provider_instrumentation.js +14 -14
  255. package/dest/test-helpers/index.d.ts +3 -1
  256. package/dest/test-helpers/index.d.ts.map +1 -1
  257. package/dest/test-helpers/index.js +2 -0
  258. package/dest/test-helpers/mock-tx-helpers.js +1 -1
  259. package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
  260. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  261. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  262. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  263. package/dest/test-helpers/test_tx_provider.js +41 -0
  264. package/dest/test-helpers/testbench-utils.d.ts +158 -0
  265. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  266. package/dest/test-helpers/testbench-utils.js +297 -0
  267. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  268. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  269. package/dest/testbench/p2p_client_testbench_worker.js +218 -123
  270. package/dest/testbench/worker_client_manager.d.ts +51 -6
  271. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  272. package/dest/testbench/worker_client_manager.js +226 -39
  273. package/package.json +18 -18
  274. package/src/bootstrap/bootstrap.ts +7 -4
  275. package/src/client/factory.ts +11 -20
  276. package/src/client/interface.ts +19 -4
  277. package/src/client/p2p_client.ts +109 -155
  278. package/src/client/test/tx_proposal_collector/README.md +227 -0
  279. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
  280. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  281. package/src/config.ts +18 -19
  282. package/src/mem_pools/attestation_pool/attestation_pool.ts +68 -41
  283. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +241 -289
  284. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +163 -141
  285. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +141 -164
  286. package/src/mem_pools/attestation_pool/mocks.ts +21 -15
  287. package/src/mem_pools/instrumentation.ts +39 -14
  288. package/src/mem_pools/interface.ts +2 -4
  289. package/src/mem_pools/tx_pool/README.md +270 -0
  290. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +367 -371
  291. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
  292. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
  293. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  294. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  295. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
  296. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  297. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  298. package/src/mem_pools/tx_pool/index.ts +0 -1
  299. package/src/mem_pools/tx_pool/priority.ts +8 -1
  300. package/src/mem_pools/tx_pool/tx_pool.ts +11 -5
  301. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +23 -17
  302. package/src/msg_validators/attestation_validator/attestation_validator.ts +37 -22
  303. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +19 -16
  304. package/src/msg_validators/clock_tolerance.ts +51 -0
  305. package/src/msg_validators/index.ts +1 -1
  306. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  307. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  308. package/src/msg_validators/proposal_validator/index.ts +3 -0
  309. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  310. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  311. package/src/msg_validators/tx_validator/archive_cache.ts +3 -3
  312. package/src/msg_validators/tx_validator/block_header_validator.ts +6 -5
  313. package/src/msg_validators/tx_validator/data_validator.ts +18 -6
  314. package/src/msg_validators/tx_validator/double_spend_validator.ts +4 -3
  315. package/src/msg_validators/tx_validator/factory.ts +67 -25
  316. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  317. package/src/msg_validators/tx_validator/gas_validator.ts +17 -28
  318. package/src/msg_validators/tx_validator/index.ts +1 -0
  319. package/src/msg_validators/tx_validator/metadata_validator.ts +19 -8
  320. package/src/msg_validators/tx_validator/phases_validator.ts +5 -3
  321. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  322. package/src/msg_validators/tx_validator/test_utils.ts +1 -1
  323. package/src/msg_validators/tx_validator/timestamp_validator.ts +11 -5
  324. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  325. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  326. package/src/services/data_store.ts +10 -7
  327. package/src/services/discv5/discV5_service.ts +1 -1
  328. package/src/services/dummy_service.ts +51 -0
  329. package/src/services/encoding.ts +6 -5
  330. package/src/services/libp2p/instrumentation.ts +32 -73
  331. package/src/services/libp2p/libp2p_service.ts +425 -180
  332. package/src/services/peer-manager/metrics.ts +39 -21
  333. package/src/services/peer-manager/peer_manager.ts +5 -4
  334. package/src/services/peer-manager/peer_scoring.ts +3 -4
  335. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  336. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
  337. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  338. package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
  339. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
  340. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
  341. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  342. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  343. package/src/services/reqresp/connection-sampler/connection_sampler.ts +19 -1
  344. package/src/services/reqresp/constants.ts +14 -0
  345. package/src/services/reqresp/interface.ts +4 -1
  346. package/src/services/reqresp/metrics.ts +36 -27
  347. package/src/services/reqresp/protocols/auth.ts +2 -2
  348. package/src/services/reqresp/protocols/block.ts +3 -2
  349. package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
  350. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +18 -4
  351. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +52 -10
  352. package/src/services/reqresp/protocols/status.ts +16 -12
  353. package/src/services/reqresp/protocols/tx.ts +1 -2
  354. package/src/services/reqresp/reqresp.ts +66 -19
  355. package/src/services/service.ts +23 -4
  356. package/src/services/tx_collection/config.ts +16 -2
  357. package/src/services/tx_collection/fast_tx_collection.ts +39 -15
  358. package/src/services/tx_collection/index.ts +5 -0
  359. package/src/services/tx_collection/instrumentation.ts +5 -13
  360. package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
  361. package/src/services/tx_collection/slow_tx_collection.ts +3 -3
  362. package/src/services/tx_collection/tx_collection.ts +10 -9
  363. package/src/services/tx_provider.ts +19 -3
  364. package/src/services/tx_provider_instrumentation.ts +24 -14
  365. package/src/test-helpers/index.ts +2 -0
  366. package/src/test-helpers/mock-pubsub.ts +1 -1
  367. package/src/test-helpers/mock-tx-helpers.ts +1 -1
  368. package/src/test-helpers/reqresp-nodes.ts +1 -1
  369. package/src/test-helpers/test_tx_provider.ts +64 -0
  370. package/src/test-helpers/testbench-utils.ts +374 -0
  371. package/src/testbench/p2p_client_testbench_worker.ts +338 -119
  372. package/src/testbench/worker_client_manager.ts +304 -42
  373. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -80
  374. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  375. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -238
  376. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  377. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  378. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -82
  379. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  380. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  381. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  382. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -283
  383. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -97
  384. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -1,8 +1,6 @@
1
1
  import { AVM_MAX_PROCESSABLE_L2_GAS, FIXED_DA_GAS, FIXED_L2_GAS } from '@aztec/constants';
2
- import { createLogger } from '@aztec/foundation/log';
2
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
3
3
  import { computeFeePayerBalanceStorageSlot } from '@aztec/protocol-contracts/fee-juice';
4
- import { getCallRequestsWithCalldataByPhase } from '@aztec/simulator/server';
5
- import { FunctionSelector } from '@aztec/stdlib/abi';
6
4
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
7
5
  import { Gas, GasFees } from '@aztec/stdlib/gas';
8
6
  import type { PublicStateSource } from '@aztec/stdlib/trees';
@@ -12,18 +10,25 @@ import {
12
10
  TX_ERROR_INSUFFICIENT_FEE_PER_GAS,
13
11
  TX_ERROR_INSUFFICIENT_GAS_LIMIT,
14
12
  type Tx,
15
- TxExecutionPhase,
16
13
  type TxValidationResult,
17
14
  type TxValidator,
18
15
  } from '@aztec/stdlib/tx';
19
16
 
17
+ import { getFeePayerClaimAmount, getTxFeeLimit } from './fee_payer_balance.js';
18
+
20
19
  export class GasTxValidator implements TxValidator<Tx> {
21
- #log = createLogger('sequencer:tx_validator:tx_gas');
20
+ #log: Logger;
22
21
  #publicDataSource: PublicStateSource;
23
22
  #feeJuiceAddress: AztecAddress;
24
23
  #gasFees: GasFees;
25
24
 
26
- constructor(publicDataSource: PublicStateSource, feeJuiceAddress: AztecAddress, gasFees: GasFees) {
25
+ constructor(
26
+ publicDataSource: PublicStateSource,
27
+ feeJuiceAddress: AztecAddress,
28
+ gasFees: GasFees,
29
+ bindings?: LoggerBindings,
30
+ ) {
31
+ this.#log = createLogger('sequencer:tx_validator:tx_gas', bindings);
27
32
  this.#publicDataSource = publicDataSource;
28
33
  this.#feeJuiceAddress = feeJuiceAddress;
29
34
  this.#gasFees = gasFees;
@@ -93,7 +98,7 @@ export class GasTxValidator implements TxValidator<Tx> {
93
98
  const feePayer = tx.data.feePayer;
94
99
 
95
100
  // Compute the maximum fee that this tx may pay, based on its gasLimits and maxFeePerGas
96
- const feeLimit = tx.data.constants.txContext.gasSettings.getFeeLimit();
101
+ const feeLimit = getTxFeeLimit(tx);
97
102
 
98
103
  // Read current balance of the feePayer
99
104
  const initialBalance = await this.#publicDataSource.storageRead(
@@ -102,30 +107,14 @@ export class GasTxValidator implements TxValidator<Tx> {
102
107
  );
103
108
 
104
109
  // If there is a claim in this tx that increases the fee payer balance in Fee Juice, add it to balance
105
- const setupFns = getCallRequestsWithCalldataByPhase(tx, TxExecutionPhase.SETUP);
106
- const increasePublicBalanceSelector = await FunctionSelector.fromSignature(
107
- '_increase_public_balance((Field),u128)',
108
- );
109
-
110
- // Arguments of the claim function call:
111
- // - args[0]: Amount recipient.
112
- // - args[1]: Amount being claimed.
113
- const claimFunctionCall = setupFns.find(
114
- fn =>
115
- fn.request.contractAddress.equals(this.#feeJuiceAddress) &&
116
- fn.request.msgSender.equals(this.#feeJuiceAddress) &&
117
- fn.calldata.length > 2 &&
118
- fn.functionSelector.equals(increasePublicBalanceSelector) &&
119
- fn.args[0].equals(feePayer.toField()) &&
120
- !fn.request.isStaticCall,
121
- );
110
+ const claimAmount = await getFeePayerClaimAmount(tx, this.#feeJuiceAddress);
111
+ const balance = initialBalance.toBigInt() + claimAmount;
122
112
 
123
- const balance = claimFunctionCall ? initialBalance.add(claimFunctionCall.args[1]) : initialBalance;
124
- if (balance.lt(feeLimit)) {
113
+ if (balance < feeLimit) {
125
114
  this.#log.verbose(`Rejecting transaction due to not enough fee payer balance`, {
126
115
  feePayer,
127
- balance: balance.toBigInt(),
128
- feeLimit: feeLimit.toBigInt(),
116
+ balance,
117
+ feeLimit,
129
118
  });
130
119
  return { result: 'invalid', reason: [TX_ERROR_INSUFFICIENT_FEE_PAYER_BALANCE] };
131
120
  }
@@ -11,3 +11,4 @@ export * from './allowed_public_setup.js';
11
11
  export * from './archive_cache.js';
12
12
  export * from './tx_permitted_validator.js';
13
13
  export * from './timestamp_validator.js';
14
+ export * from './size_validator.js';
@@ -1,5 +1,5 @@
1
- import type { Fr } from '@aztec/foundation/fields';
2
- import { createLogger } from '@aztec/foundation/log';
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
3
3
  import {
4
4
  type AnyTx,
5
5
  TX_ERROR_INCORRECT_L1_CHAIN_ID,
@@ -11,7 +11,7 @@ import {
11
11
  } from '@aztec/stdlib/tx';
12
12
 
13
13
  export class MetadataTxValidator<T extends AnyTx> implements TxValidator<T> {
14
- #log = createLogger('p2p:tx_validator:tx_metadata');
14
+ #log: Logger;
15
15
 
16
16
  constructor(
17
17
  private values: {
@@ -20,7 +20,10 @@ export class MetadataTxValidator<T extends AnyTx> implements TxValidator<T> {
20
20
  vkTreeRoot: Fr;
21
21
  protocolContractsHash: Fr;
22
22
  },
23
- ) {}
23
+ bindings?: LoggerBindings,
24
+ ) {
25
+ this.#log = createLogger('p2p:tx_validator:tx_metadata', bindings);
26
+ }
24
27
 
25
28
  validateTx(tx: T): Promise<TxValidationResult> {
26
29
  const errors = [];
@@ -43,7 +46,9 @@ export class MetadataTxValidator<T extends AnyTx> implements TxValidator<T> {
43
46
  // This gets implicitly tested in the proof validator, but we can get a much cheaper check here by looking early at the vk.
44
47
  if (!tx.data.constants.vkTreeRoot.equals(this.values.vkTreeRoot)) {
45
48
  this.#log.verbose(
46
- `Rejecting tx ${'txHash' in tx ? tx.txHash : tx.hash} because of incorrect vk tree root ${tx.data.constants.vkTreeRoot.toString()} != ${this.values.vkTreeRoot.toString()}`,
49
+ `Rejecting tx ${
50
+ 'txHash' in tx ? tx.txHash : tx.hash
51
+ } because of incorrect vk tree root ${tx.data.constants.vkTreeRoot.toString()} != ${this.values.vkTreeRoot.toString()}`,
47
52
  );
48
53
  return false;
49
54
  } else {
@@ -54,7 +59,9 @@ export class MetadataTxValidator<T extends AnyTx> implements TxValidator<T> {
54
59
  #hasCorrectprotocolContractsHash(tx: T): boolean {
55
60
  if (!tx.data.constants.protocolContractsHash.equals(this.values.protocolContractsHash)) {
56
61
  this.#log.verbose(
57
- `Rejecting tx ${'txHash' in tx ? tx.txHash : tx.hash} because of incorrect protocol contracts hash ${tx.data.constants.protocolContractsHash.toString()} != ${this.values.protocolContractsHash.toString()}`,
62
+ `Rejecting tx ${
63
+ 'txHash' in tx ? tx.txHash : tx.hash
64
+ } because of incorrect protocol contracts hash ${tx.data.constants.protocolContractsHash.toString()} != ${this.values.protocolContractsHash.toString()}`,
58
65
  );
59
66
  return false;
60
67
  }
@@ -64,7 +71,9 @@ export class MetadataTxValidator<T extends AnyTx> implements TxValidator<T> {
64
71
  #hasCorrectL1ChainId(tx: T): boolean {
65
72
  if (!tx.data.constants.txContext.chainId.equals(this.values.l1ChainId)) {
66
73
  this.#log.verbose(
67
- `Rejecting tx ${'txHash' in tx ? tx.txHash : tx.hash} because of incorrect L1 chain ${tx.data.constants.txContext.chainId.toNumber()} != ${this.values.l1ChainId.toNumber()}`,
74
+ `Rejecting tx ${
75
+ 'txHash' in tx ? tx.txHash : tx.hash
76
+ } because of incorrect L1 chain ${tx.data.constants.txContext.chainId.toNumber()} != ${this.values.l1ChainId.toNumber()}`,
68
77
  );
69
78
  return false;
70
79
  } else {
@@ -75,7 +84,9 @@ export class MetadataTxValidator<T extends AnyTx> implements TxValidator<T> {
75
84
  #hasCorrectRollupVersion(tx: T): boolean {
76
85
  if (!tx.data.constants.txContext.version.equals(this.values.rollupVersion)) {
77
86
  this.#log.verbose(
78
- `Rejecting tx ${'txHash' in tx ? tx.txHash : tx.hash} because of incorrect rollup version ${tx.data.constants.txContext.version.toNumber()} != ${this.values.rollupVersion.toNumber()}`,
87
+ `Rejecting tx ${
88
+ 'txHash' in tx ? tx.txHash : tx.hash
89
+ } because of incorrect rollup version ${tx.data.constants.txContext.version.toNumber()} != ${this.values.rollupVersion.toNumber()}`,
79
90
  );
80
91
  return false;
81
92
  } else {
@@ -1,4 +1,4 @@
1
- import { createLogger } from '@aztec/foundation/log';
1
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
2
  import { PublicContractsDB, getCallRequestsWithCalldataByPhase } from '@aztec/simulator/server';
3
3
  import type { ContractDataSource } from '@aztec/stdlib/contract';
4
4
  import type { AllowedElement } from '@aztec/stdlib/interfaces/server';
@@ -14,15 +14,17 @@ import {
14
14
  import type { UInt64 } from '@aztec/stdlib/types';
15
15
 
16
16
  export class PhasesTxValidator implements TxValidator<Tx> {
17
- #log = createLogger('sequencer:tx_validator:tx_phases');
17
+ #log: Logger;
18
18
  private contractsDB: PublicContractsDB;
19
19
 
20
20
  constructor(
21
21
  contracts: ContractDataSource,
22
22
  private setupAllowList: AllowedElement[],
23
23
  private timestamp: UInt64,
24
+ bindings?: LoggerBindings,
24
25
  ) {
25
- this.contractsDB = new PublicContractsDB(contracts);
26
+ this.#log = createLogger('sequencer:tx_validator:tx_phases', bindings);
27
+ this.contractsDB = new PublicContractsDB(contracts, bindings);
26
28
  }
27
29
 
28
30
  async validateTx(tx: Tx): Promise<TxValidationResult> {
@@ -0,0 +1,22 @@
1
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
+ import { MAX_TX_SIZE_KB } from '@aztec/stdlib/p2p';
3
+ import { Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
4
+
5
+ export class SizeTxValidator implements TxValidator<Tx> {
6
+ #log: Logger;
7
+
8
+ constructor(bindings?: LoggerBindings) {
9
+ this.#log = createLogger('p2p:tx_validator:tx_size', bindings);
10
+ }
11
+
12
+ validateTx(tx: Tx): Promise<TxValidationResult> {
13
+ const txSize = tx.getSize();
14
+ if (txSize > MAX_TX_SIZE_KB * 1024) {
15
+ this.#log.verbose(
16
+ `Rejecting transaction ${tx.getTxHash().toString()}. Reason: size above size limit. ${txSize}bytes > ${MAX_TX_SIZE_KB}Kb`,
17
+ );
18
+ return Promise.resolve({ result: 'invalid', reason: ['Transaction size above size limit'] });
19
+ }
20
+ return Promise.resolve({ result: 'valid' });
21
+ }
22
+ }
@@ -1,4 +1,4 @@
1
- import type { Fr } from '@aztec/foundation/fields';
1
+ import type { Fr } from '@aztec/foundation/curves/bn254';
2
2
  import type { FunctionSelector } from '@aztec/stdlib/abi';
3
3
  import type { AztecAddress } from '@aztec/stdlib/aztec-address';
4
4
  import { HashedValues, type Tx } from '@aztec/stdlib/tx';
@@ -1,4 +1,5 @@
1
- import { createLogger } from '@aztec/foundation/log';
1
+ import { BlockNumber } from '@aztec/foundation/branded-types';
2
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
3
  import {
3
4
  type AnyTx,
4
5
  TX_ERROR_INVALID_INCLUDE_BY_TIMESTAMP,
@@ -9,7 +10,7 @@ import {
9
10
  import type { UInt64 } from '@aztec/stdlib/types';
10
11
 
11
12
  export class TimestampTxValidator<T extends AnyTx> implements TxValidator<T> {
12
- #log = createLogger('p2p:tx_validator:timestamp');
13
+ #log: Logger;
13
14
 
14
15
  constructor(
15
16
  private values: {
@@ -17,9 +18,12 @@ export class TimestampTxValidator<T extends AnyTx> implements TxValidator<T> {
17
18
  // being built.
18
19
  timestamp: UInt64;
19
20
  // Block number in which the tx is considered to be included.
20
- blockNumber: number;
21
+ blockNumber: BlockNumber;
21
22
  },
22
- ) {}
23
+ bindings?: LoggerBindings,
24
+ ) {
25
+ this.#log = createLogger('p2p:tx_validator:timestamp', bindings);
26
+ }
23
27
 
24
28
  validateTx(tx: T): Promise<TxValidationResult> {
25
29
  const includeByTimestamp = tx.data.includeByTimestamp;
@@ -34,7 +38,9 @@ export class TimestampTxValidator<T extends AnyTx> implements TxValidator<T> {
34
38
  );
35
39
  }
36
40
  this.#log.verbose(
37
- `Rejecting tx ${getTxHash(tx)} for low expiration timestamp. Tx expiration timestamp: ${includeByTimestamp}, timestamp: ${
41
+ `Rejecting tx ${getTxHash(
42
+ tx,
43
+ )} for low expiration timestamp. Tx expiration timestamp: ${includeByTimestamp}, timestamp: ${
38
44
  this.values.timestamp
39
45
  }.`,
40
46
  );
@@ -1,10 +1,15 @@
1
- import { createLogger } from '@aztec/foundation/log';
1
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
2
  import type { Tx, TxValidationResult, TxValidator } from '@aztec/stdlib/tx';
3
3
 
4
4
  export class TxPermittedValidator implements TxValidator<Tx> {
5
- #log = createLogger('p2p:tx_validator:tx_permitted');
5
+ #log: Logger;
6
6
 
7
- constructor(private permitted: boolean) {}
7
+ constructor(
8
+ private permitted: boolean,
9
+ bindings?: LoggerBindings,
10
+ ) {
11
+ this.#log = createLogger('p2p:tx_validator:tx_permitted', bindings);
12
+ }
8
13
 
9
14
  validateTx(tx: Tx): Promise<TxValidationResult> {
10
15
  if (!this.permitted) {
@@ -1,11 +1,16 @@
1
- import { createLogger } from '@aztec/foundation/log';
1
+ import { type Logger, type LoggerBindings, createLogger } from '@aztec/foundation/log';
2
2
  import type { ClientProtocolCircuitVerifier } from '@aztec/stdlib/interfaces/server';
3
3
  import { TX_ERROR_INVALID_PROOF, Tx, type TxValidationResult, type TxValidator } from '@aztec/stdlib/tx';
4
4
 
5
5
  export class TxProofValidator implements TxValidator<Tx> {
6
- #log = createLogger('p2p:tx_validator:private_proof');
6
+ #log: Logger;
7
7
 
8
- constructor(private verifier: ClientProtocolCircuitVerifier) {}
8
+ constructor(
9
+ private verifier: ClientProtocolCircuitVerifier,
10
+ bindings?: LoggerBindings,
11
+ ) {
12
+ this.#log = createLogger('p2p:tx_validator:proof', bindings);
13
+ }
9
14
 
10
15
  async validateTx(tx: Tx): Promise<TxValidationResult> {
11
16
  const result = await this.verifier.verifyProof(tx);
@@ -24,6 +24,7 @@ class KeyNotFoundError extends Error {
24
24
  }
25
25
 
26
26
  export class AztecDatastore implements Datastore {
27
+ #db: AztecAsyncKVStore;
27
28
  #memoryDatastore: Map<string, MemoryItem>;
28
29
  #dbDatastore: AztecAsyncMap<string, Uint8Array>;
29
30
 
@@ -32,9 +33,9 @@ export class AztecDatastore implements Datastore {
32
33
  private maxMemoryItems: number;
33
34
 
34
35
  constructor(db: AztecAsyncKVStore, { maxMemoryItems } = { maxMemoryItems: 50 }) {
36
+ this.#db = db;
35
37
  this.#memoryDatastore = new Map();
36
38
  this.#dbDatastore = db.openMap('p2p_datastore');
37
-
38
39
  this.maxMemoryItems = maxMemoryItems;
39
40
  }
40
41
 
@@ -106,13 +107,15 @@ export class AztecDatastore implements Datastore {
106
107
  });
107
108
  },
108
109
  commit: async () => {
109
- for (const op of this.#batchOps) {
110
- if (op.type === 'put' && op.value) {
111
- await this.put(op.key, op.value);
112
- } else if (op.type === 'del') {
113
- await this.delete(op.key);
110
+ await this.#db.transactionAsync(async () => {
111
+ for (const op of this.#batchOps) {
112
+ if (op.type === 'put' && op.value) {
113
+ await this.put(op.key, op.value);
114
+ } else if (op.type === 'del') {
115
+ await this.delete(op.key);
116
+ }
114
117
  }
115
- }
118
+ });
116
119
  this.#batchOps = []; // Clear operations after commit
117
120
  },
118
121
  };
@@ -87,7 +87,7 @@ export class DiscV5Service extends EventEmitter implements PeerDiscoveryService
87
87
  this.packageVersion,
88
88
  ));
89
89
 
90
- const metricsRegistry = new OtelMetricsAdapter(telemetry);
90
+ const metricsRegistry = new OtelMetricsAdapter(telemetry, this.logger.getBindings());
91
91
  this.discv5 = Discv5.create({
92
92
  enr: this.enr,
93
93
  peerId,
@@ -8,7 +8,9 @@ import type { ENR } from '@nethermindeth/enr';
8
8
  import EventEmitter from 'events';
9
9
 
10
10
  import type { PeerManagerInterface } from './peer-manager/interface.js';
11
+ import type { BatchTxRequesterLibP2PService } from './reqresp/batch-tx-requester/interface.js';
11
12
  import type { P2PReqRespConfig } from './reqresp/config.js';
13
+ import type { ConnectionSampler } from './reqresp/connection-sampler/connection_sampler.js';
12
14
  import { type AuthRequest, StatusMessage } from './reqresp/index.js';
13
15
  import type {
14
16
  ReqRespInterface,
@@ -23,6 +25,7 @@ import type { GoodByeReason } from './reqresp/protocols/goodbye.js';
23
25
  import { ReqRespStatus } from './reqresp/status.js';
24
26
  import {
25
27
  type P2PBlockReceivedCallback,
28
+ type P2PCheckpointReceivedCallback,
26
29
  type P2PService,
27
30
  type PeerDiscoveryService,
28
31
  PeerDiscoveryState,
@@ -74,6 +77,11 @@ export class DummyP2PService implements P2PService {
74
77
  */
75
78
  public registerBlockReceivedCallback(_callback: P2PBlockReceivedCallback) {}
76
79
 
80
+ /**
81
+ * Register a callback into the validator client for when a checkpoint proposal is received
82
+ */
83
+ public registerCheckpointReceivedCallback(_callback: P2PCheckpointReceivedCallback) {}
84
+
77
85
  /**
78
86
  * Sends a request to a peer.
79
87
  * @param _protocol - The protocol to send the request on.
@@ -100,6 +108,15 @@ export class DummyP2PService implements P2PService {
100
108
  return Promise.resolve([]);
101
109
  }
102
110
 
111
+ public sendRequestToPeer(
112
+ _peerId: PeerId,
113
+ _subProtocol: ReqRespSubProtocol,
114
+ _payload: Buffer,
115
+ _dialTimeout?: number,
116
+ ): Promise<ReqRespResponse> {
117
+ return Promise.resolve({ status: ReqRespStatus.SUCCESS, data: Buffer.from([]) });
118
+ }
119
+
103
120
  /**
104
121
  * Returns the ENR of the peer.
105
122
  * @returns The ENR of the peer, otherwise undefined.
@@ -112,6 +129,10 @@ export class DummyP2PService implements P2PService {
112
129
  return Promise.resolve();
113
130
  }
114
131
 
132
+ validatePropagatedTx(_tx: Tx, _peerId: PeerId): Promise<boolean> {
133
+ return Promise.resolve(true);
134
+ }
135
+
115
136
  addReqRespSubProtocol(
116
137
  _subProtocol: ReqRespSubProtocol,
117
138
  _handler: ReqRespSubProtocolHandler,
@@ -126,6 +147,27 @@ export class DummyP2PService implements P2PService {
126
147
 
127
148
  //this is no-op
128
149
  registerThisValidatorAddresses(_address: EthAddress[]): void {}
150
+
151
+ /**
152
+ * Get dummy BatchTxRequesterLibP2PService for testing
153
+ */
154
+ getBatchTxRequesterService(): BatchTxRequesterLibP2PService {
155
+ return {
156
+ reqResp: this, // The dummy service implements ReqRespInterface
157
+ connectionSampler: new DummyReqResp().getConnectionSampler(),
158
+ txValidatorConfig: {
159
+ l1ChainId: 1,
160
+ rollupVersion: 1,
161
+ proofVerifier: {
162
+ verifyProof: () => Promise.resolve({ valid: true, durationMs: 0, totalDurationMs: 0 }),
163
+ stop: () => Promise.resolve(),
164
+ },
165
+ },
166
+ peerScoring: {
167
+ penalizePeer: (_peerId, _penalty) => {},
168
+ },
169
+ };
170
+ }
129
171
  }
130
172
 
131
173
  /**
@@ -262,6 +304,15 @@ export class DummyReqResp implements ReqRespInterface {
262
304
  return Promise.resolve({ status: ReqRespStatus.SUCCESS, data: Buffer.from([]) });
263
305
  }
264
306
 
307
+ /**
308
+ * Get dummy connection sampler for testing
309
+ */
310
+ getConnectionSampler(): Pick<ConnectionSampler, 'getPeerListSortedByConnectionCountAsc'> {
311
+ return {
312
+ getPeerListSortedByConnectionCountAsc: () => [],
313
+ };
314
+ }
315
+
265
316
  addSubProtocol(
266
317
  _subProtocol: ReqRespSubProtocol,
267
318
  _handler: ReqRespSubProtocolHandler,
@@ -1,7 +1,7 @@
1
1
  // Taken from lodestar: https://github.com/ChainSafe/lodestar
2
- import { sha256 } from '@aztec/foundation/crypto';
2
+ import { sha256 } from '@aztec/foundation/crypto/sha256';
3
3
  import { createLogger } from '@aztec/foundation/log';
4
- import { TopicType, getTopicFromString } from '@aztec/stdlib/p2p';
4
+ import { MAX_TX_SIZE_KB, TopicType, getTopicFromString } from '@aztec/stdlib/p2p';
5
5
 
6
6
  import type { RPC } from '@chainsafe/libp2p-gossipsub/message';
7
7
  import type { DataTransform } from '@chainsafe/libp2p-gossipsub/types';
@@ -52,13 +52,14 @@ export function getMsgIdFn(message: Message) {
52
52
  }
53
53
 
54
54
  const DefaultMaxSizesKb: Record<TopicType, number> = {
55
- // Tx effects should not exceed 128kb, so 512kb for the full tx obj should be sufficient
56
- [TopicType.tx]: 512,
55
+ [TopicType.tx]: MAX_TX_SIZE_KB,
57
56
  // An attestation has roughly 30 fields, which is 1kb, so 5x is plenty
58
- [TopicType.block_attestation]: 5,
57
+ [TopicType.checkpoint_attestation]: 5,
59
58
  // Proposals may carry some tx objects, so we allow a larger size capped at 10mb
60
59
  // Note this may not be enough for carrying all tx objects in a block
61
60
  [TopicType.block_proposal]: 1024 * 10,
61
+ // TODO(palla/mbps): Check size for checkpoint proposal
62
+ [TopicType.checkpoint_proposal]: 1024 * 10,
62
63
  };
63
64
 
64
65
  /**
@@ -8,7 +8,7 @@ import {
8
8
  type ObservableGauge,
9
9
  type TelemetryClient,
10
10
  type UpDownCounter,
11
- ValueType,
11
+ createUpDownCounterWithDefault,
12
12
  } from '@aztec/telemetry-client';
13
13
 
14
14
  import { type RecordableHistogram, createHistogram } from 'node:perf_hooks';
@@ -28,81 +28,40 @@ export class P2PInstrumentation {
28
28
  constructor(client: TelemetryClient, name: string) {
29
29
  const meter = client.getMeter(name);
30
30
 
31
- this.messageValidationDuration = meter.createHistogram(Metrics.P2P_GOSSIP_MESSAGE_VALIDATION_DURATION, {
32
- unit: 'ms',
33
- description: 'How long validating a gossiped message takes',
34
- valueType: ValueType.INT,
35
- });
31
+ this.messageValidationDuration = meter.createHistogram(Metrics.P2P_GOSSIP_MESSAGE_VALIDATION_DURATION);
36
32
 
37
- this.messagePrevalidationCount = meter.createUpDownCounter(Metrics.P2P_GOSSIP_MESSAGE_PREVALIDATION_COUNT, {
38
- description: 'How many message pass/fail prevalidation',
39
- valueType: ValueType.INT,
40
- });
33
+ this.messagePrevalidationCount = createUpDownCounterWithDefault(
34
+ meter,
35
+ Metrics.P2P_GOSSIP_MESSAGE_PREVALIDATION_COUNT,
36
+ {
37
+ [Attributes.TOPIC_NAME]: [
38
+ TopicType.tx,
39
+ TopicType.block_proposal,
40
+ TopicType.checkpoint_proposal,
41
+ TopicType.checkpoint_attestation,
42
+ ],
43
+ [Attributes.OK]: [true, false],
44
+ },
45
+ );
41
46
 
42
- this.messageLatency = meter.createHistogram(Metrics.P2P_GOSSIP_MESSAGE_LATENCY, {
43
- unit: 'ms',
44
- description: 'P2P message latency',
45
- valueType: ValueType.INT,
46
- });
47
+ this.messageLatency = meter.createHistogram(Metrics.P2P_GOSSIP_MESSAGE_LATENCY);
47
48
 
48
- this.txReceivedCount = meter.createUpDownCounter(Metrics.P2P_GOSSIP_TX_RECEIVED_COUNT, {
49
- description: 'The number of txs received from the p2p network',
50
- });
49
+ this.txReceivedCount = createUpDownCounterWithDefault(meter, Metrics.P2P_GOSSIP_TX_RECEIVED_COUNT);
51
50
 
52
51
  this.aggLatencyMetrics = {
53
- avg: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_AVG, {
54
- valueType: ValueType.DOUBLE,
55
- description: 'AVG msg latency',
56
- unit: 'ms',
57
- }),
58
- max: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_MAX, {
59
- valueType: ValueType.DOUBLE,
60
- description: 'MAX msg latency',
61
- unit: 'ms',
62
- }),
63
- min: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_MIN, {
64
- valueType: ValueType.DOUBLE,
65
- description: 'MIN msg latency',
66
- unit: 'ms',
67
- }),
68
- p50: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_P50, {
69
- valueType: ValueType.DOUBLE,
70
- description: 'P50 msg latency',
71
- unit: 'ms',
72
- }),
73
- p90: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_P90, {
74
- valueType: ValueType.DOUBLE,
75
- description: 'P90 msg latency',
76
- unit: 'ms',
77
- }),
52
+ avg: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_AVG),
53
+ max: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_MAX),
54
+ min: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_MIN),
55
+ p50: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_P50),
56
+ p90: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_LATENCY_P90),
78
57
  };
79
58
 
80
59
  this.aggValidationMetrics = {
81
- avg: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_AVG, {
82
- valueType: ValueType.DOUBLE,
83
- description: 'AVG msg validation',
84
- unit: 'ms',
85
- }),
86
- max: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_MAX, {
87
- valueType: ValueType.DOUBLE,
88
- description: 'MAX msg validation',
89
- unit: 'ms',
90
- }),
91
- min: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_MIN, {
92
- valueType: ValueType.DOUBLE,
93
- description: 'MIN msg validation',
94
- unit: 'ms',
95
- }),
96
- p50: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_P50, {
97
- valueType: ValueType.DOUBLE,
98
- description: 'P50 msg validation',
99
- unit: 'ms',
100
- }),
101
- p90: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_P90, {
102
- valueType: ValueType.DOUBLE,
103
- description: 'P90 msg validation',
104
- unit: 'ms',
105
- }),
60
+ avg: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_AVG),
61
+ max: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_MAX),
62
+ min: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_MIN),
63
+ p50: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_P50),
64
+ p90: meter.createObservableGauge(Metrics.P2P_GOSSIP_AGG_MESSAGE_VALIDATION_DURATION_P90),
106
65
  };
107
66
 
108
67
  meter.addBatchObservableCallback(this.aggregate, [
@@ -156,11 +115,11 @@ export class P2PInstrumentation {
156
115
  continue;
157
116
  }
158
117
 
159
- res.observe(metrics.avg, histogram.mean, { [Attributes.TOPIC_NAME]: topicName });
160
- res.observe(metrics.max, histogram.max, { [Attributes.TOPIC_NAME]: topicName });
161
- res.observe(metrics.min, histogram.min, { [Attributes.TOPIC_NAME]: topicName });
162
- res.observe(metrics.p50, histogram.percentile(50), { [Attributes.TOPIC_NAME]: topicName });
163
- res.observe(metrics.p90, histogram.percentile(90), { [Attributes.TOPIC_NAME]: topicName });
118
+ res.observe(metrics.avg, Math.ceil(histogram.mean), { [Attributes.TOPIC_NAME]: topicName });
119
+ res.observe(metrics.max, Math.ceil(histogram.max), { [Attributes.TOPIC_NAME]: topicName });
120
+ res.observe(metrics.min, Math.ceil(histogram.min), { [Attributes.TOPIC_NAME]: topicName });
121
+ res.observe(metrics.p50, Math.ceil(histogram.percentile(50)), { [Attributes.TOPIC_NAME]: topicName });
122
+ res.observe(metrics.p90, Math.ceil(histogram.percentile(90)), { [Attributes.TOPIC_NAME]: topicName });
164
123
  }
165
124
  }
166
125
  };