@aztec/p2p 0.0.1-commit.b655e406 → 0.0.1-commit.d1f2d6c

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 (366) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +1 -1
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/client/factory.d.ts +2 -2
  4. package/dest/client/factory.d.ts.map +1 -1
  5. package/dest/client/factory.js +2 -3
  6. package/dest/client/index.d.ts +1 -1
  7. package/dest/client/interface.d.ts +18 -3
  8. package/dest/client/interface.d.ts.map +1 -1
  9. package/dest/client/p2p_client.d.ts +16 -37
  10. package/dest/client/p2p_client.d.ts.map +1 -1
  11. package/dest/client/p2p_client.js +464 -126
  12. package/dest/config.d.ts +62 -59
  13. package/dest/config.d.ts.map +1 -1
  14. package/dest/config.js +21 -14
  15. package/dest/enr/generate-enr.d.ts +1 -1
  16. package/dest/enr/index.d.ts +1 -1
  17. package/dest/errors/attestation-pool.error.d.ts +7 -0
  18. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  19. package/dest/errors/attestation-pool.error.js +12 -0
  20. package/dest/errors/reqresp.error.d.ts +1 -1
  21. package/dest/errors/reqresp.error.d.ts.map +1 -1
  22. package/dest/index.d.ts +1 -1
  23. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +77 -36
  24. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  25. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  26. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  27. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +241 -266
  28. package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
  29. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +24 -14
  30. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  31. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +123 -95
  32. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +18 -12
  33. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  34. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +91 -108
  35. package/dest/mem_pools/attestation_pool/mocks.d.ts +234 -10
  36. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  37. package/dest/mem_pools/attestation_pool/mocks.js +17 -13
  38. package/dest/mem_pools/index.d.ts +1 -1
  39. package/dest/mem_pools/instrumentation.d.ts +9 -1
  40. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  41. package/dest/mem_pools/instrumentation.js +36 -9
  42. package/dest/mem_pools/interface.d.ts +3 -4
  43. package/dest/mem_pools/interface.d.ts.map +1 -1
  44. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +33 -58
  45. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  46. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +314 -335
  47. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
  48. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  49. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
  50. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
  51. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  52. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
  53. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  54. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  55. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  56. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  57. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  58. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  59. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  60. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  61. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
  62. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  63. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  64. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  65. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  66. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  67. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  68. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  69. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  70. package/dest/mem_pools/tx_pool/index.js +0 -1
  71. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  72. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  73. package/dest/mem_pools/tx_pool/priority.js +6 -1
  74. package/dest/mem_pools/tx_pool/tx_pool.d.ts +11 -6
  75. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  76. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  77. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  78. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +30 -24
  79. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +7 -6
  80. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  81. package/dest/msg_validators/attestation_validator/attestation_validator.js +57 -24
  82. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
  83. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  84. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +71 -0
  85. package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
  86. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
  87. package/dest/msg_validators/attestation_validator/index.js +1 -0
  88. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  89. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  90. package/dest/msg_validators/clock_tolerance.js +37 -0
  91. package/dest/msg_validators/index.d.ts +2 -2
  92. package/dest/msg_validators/index.d.ts.map +1 -1
  93. package/dest/msg_validators/index.js +1 -1
  94. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +1 -1
  95. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -1
  96. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  97. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  98. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  99. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  100. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  101. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  102. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  103. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  104. package/dest/msg_validators/proposal_validator/index.js +3 -0
  105. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  106. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  107. package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
  108. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  109. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  110. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
  111. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  112. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  113. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +1 -1
  114. package/dest/msg_validators/tx_validator/archive_cache.d.ts +2 -2
  115. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  116. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +2 -2
  117. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  118. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  119. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  120. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +1 -1
  121. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  122. package/dest/msg_validators/tx_validator/factory.d.ts +4 -3
  123. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  124. package/dest/msg_validators/tx_validator/factory.js +1 -1
  125. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  126. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  127. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  128. package/dest/msg_validators/tx_validator/gas_validator.d.ts +1 -1
  129. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  130. package/dest/msg_validators/tx_validator/gas_validator.js +8 -14
  131. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  132. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  133. package/dest/msg_validators/tx_validator/index.js +1 -0
  134. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +2 -2
  135. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  136. package/dest/msg_validators/tx_validator/phases_validator.d.ts +1 -1
  137. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  138. package/dest/msg_validators/tx_validator/phases_validator.js +3 -1
  139. package/dest/msg_validators/tx_validator/size_validator.d.ts +6 -0
  140. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  141. package/dest/msg_validators/tx_validator/size_validator.js +20 -0
  142. package/dest/msg_validators/tx_validator/test_utils.d.ts +2 -2
  143. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
  144. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +3 -2
  145. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  146. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +1 -1
  147. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  148. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +1 -1
  149. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  150. package/dest/services/data_store.d.ts +1 -1
  151. package/dest/services/data_store.d.ts.map +1 -1
  152. package/dest/services/discv5/discV5_service.d.ts +1 -1
  153. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  154. package/dest/services/dummy_service.d.ts +6 -2
  155. package/dest/services/dummy_service.d.ts.map +1 -1
  156. package/dest/services/dummy_service.js +3 -0
  157. package/dest/services/encoding.d.ts +1 -1
  158. package/dest/services/encoding.d.ts.map +1 -1
  159. package/dest/services/encoding.js +7 -6
  160. package/dest/services/gossipsub/scoring.d.ts +1 -1
  161. package/dest/services/index.d.ts +1 -1
  162. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  163. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  164. package/dest/services/libp2p/instrumentation.js +26 -72
  165. package/dest/services/libp2p/libp2p_service.d.ts +41 -80
  166. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  167. package/dest/services/libp2p/libp2p_service.js +899 -175
  168. package/dest/services/peer-manager/interface.d.ts +1 -1
  169. package/dest/services/peer-manager/metrics.d.ts +8 -1
  170. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  171. package/dest/services/peer-manager/metrics.js +24 -16
  172. package/dest/services/peer-manager/peer_manager.d.ts +2 -33
  173. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  174. package/dest/services/peer-manager/peer_manager.js +6 -12
  175. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  176. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  177. package/dest/services/peer-manager/peer_scoring.js +37 -2
  178. package/dest/services/reqresp/config.d.ts +1 -1
  179. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +1 -1
  180. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  181. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +1 -4
  182. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  183. package/dest/services/reqresp/constants.d.ts +12 -0
  184. package/dest/services/reqresp/constants.d.ts.map +1 -0
  185. package/dest/services/reqresp/constants.js +7 -0
  186. package/dest/services/reqresp/index.d.ts +1 -1
  187. package/dest/services/reqresp/interface.d.ts +2 -2
  188. package/dest/services/reqresp/interface.d.ts.map +1 -1
  189. package/dest/services/reqresp/interface.js +1 -1
  190. package/dest/services/reqresp/metrics.d.ts +1 -1
  191. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  192. package/dest/services/reqresp/metrics.js +5 -21
  193. package/dest/services/reqresp/protocols/auth.d.ts +2 -2
  194. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
  195. package/dest/services/reqresp/protocols/auth.js +2 -2
  196. package/dest/services/reqresp/protocols/block.d.ts +1 -1
  197. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  198. package/dest/services/reqresp/protocols/block.js +3 -2
  199. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +1 -1
  200. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  201. package/dest/services/reqresp/protocols/block_txs/bitvector.js +7 -0
  202. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  203. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +4 -6
  204. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  205. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +1 -1
  206. package/dest/services/reqresp/protocols/block_txs/index.d.ts +1 -1
  207. package/dest/services/reqresp/protocols/goodbye.d.ts +1 -1
  208. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  209. package/dest/services/reqresp/protocols/index.d.ts +1 -1
  210. package/dest/services/reqresp/protocols/ping.d.ts +1 -1
  211. package/dest/services/reqresp/protocols/status.d.ts +6 -5
  212. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  213. package/dest/services/reqresp/protocols/status.js +7 -3
  214. package/dest/services/reqresp/protocols/tx.d.ts +2 -3
  215. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  216. package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
  217. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +2 -2
  218. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  219. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  220. package/dest/services/reqresp/reqresp.d.ts +1 -41
  221. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  222. package/dest/services/reqresp/reqresp.js +402 -24
  223. package/dest/services/reqresp/status.d.ts +2 -2
  224. package/dest/services/reqresp/status.d.ts.map +1 -1
  225. package/dest/services/service.d.ts +16 -3
  226. package/dest/services/service.d.ts.map +1 -1
  227. package/dest/services/tx_collection/config.d.ts +1 -1
  228. package/dest/services/tx_collection/config.js +1 -1
  229. package/dest/services/tx_collection/fast_tx_collection.d.ts +4 -9
  230. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  231. package/dest/services/tx_collection/index.d.ts +1 -1
  232. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  233. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  234. package/dest/services/tx_collection/instrumentation.js +4 -14
  235. package/dest/services/tx_collection/slow_tx_collection.d.ts +4 -5
  236. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  237. package/dest/services/tx_collection/slow_tx_collection.js +2 -1
  238. package/dest/services/tx_collection/tx_collection.d.ts +7 -7
  239. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  240. package/dest/services/tx_collection/tx_collection_sink.d.ts +3 -3
  241. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  242. package/dest/services/tx_collection/tx_source.d.ts +1 -1
  243. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  244. package/dest/services/tx_provider.d.ts +4 -2
  245. package/dest/services/tx_provider.d.ts.map +1 -1
  246. package/dest/services/tx_provider.js +11 -2
  247. package/dest/services/tx_provider_instrumentation.d.ts +5 -2
  248. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  249. package/dest/services/tx_provider_instrumentation.js +13 -13
  250. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
  251. package/dest/test-helpers/get-ports.d.ts +1 -1
  252. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  253. package/dest/test-helpers/index.d.ts +1 -1
  254. package/dest/test-helpers/make-enrs.d.ts +1 -1
  255. package/dest/test-helpers/make-test-p2p-clients.d.ts +2 -2
  256. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  257. package/dest/test-helpers/mock-pubsub.d.ts +4 -4
  258. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  259. package/dest/test-helpers/mock-tx-helpers.d.ts +2 -2
  260. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -1
  261. package/dest/test-helpers/mock-tx-helpers.js +1 -1
  262. package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
  263. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  264. package/dest/testbench/p2p_client_testbench_worker.d.ts +1 -1
  265. package/dest/testbench/p2p_client_testbench_worker.js +39 -22
  266. package/dest/testbench/parse_log_file.d.ts +1 -1
  267. package/dest/testbench/testbench.d.ts +1 -1
  268. package/dest/testbench/worker_client_manager.d.ts +1 -1
  269. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  270. package/dest/testbench/worker_client_manager.js +6 -1
  271. package/dest/types/index.d.ts +1 -1
  272. package/dest/util.d.ts +2 -1
  273. package/dest/util.d.ts.map +1 -1
  274. package/dest/util.js +11 -2
  275. package/dest/versioning.d.ts +1 -1
  276. package/package.json +19 -18
  277. package/src/client/factory.ts +5 -10
  278. package/src/client/interface.ts +20 -2
  279. package/src/client/p2p_client.ts +108 -155
  280. package/src/config.ts +30 -19
  281. package/src/errors/attestation-pool.error.ts +13 -0
  282. package/src/mem_pools/attestation_pool/attestation_pool.ts +86 -35
  283. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +243 -278
  284. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +175 -111
  285. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +147 -136
  286. package/src/mem_pools/attestation_pool/mocks.ts +21 -15
  287. package/src/mem_pools/instrumentation.ts +47 -10
  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 +45 -32
  303. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +88 -0
  304. package/src/msg_validators/attestation_validator/index.ts +1 -0
  305. package/src/msg_validators/clock_tolerance.ts +51 -0
  306. package/src/msg_validators/index.ts +1 -1
  307. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  308. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  309. package/src/msg_validators/proposal_validator/index.ts +3 -0
  310. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  311. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  312. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  313. package/src/msg_validators/tx_validator/block_header_validator.ts +1 -1
  314. package/src/msg_validators/tx_validator/data_validator.ts +12 -4
  315. package/src/msg_validators/tx_validator/factory.ts +3 -2
  316. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  317. package/src/msg_validators/tx_validator/gas_validator.ts +8 -25
  318. package/src/msg_validators/tx_validator/index.ts +1 -0
  319. package/src/msg_validators/tx_validator/metadata_validator.ts +13 -5
  320. package/src/msg_validators/tx_validator/phases_validator.ts +3 -1
  321. package/src/msg_validators/tx_validator/size_validator.ts +18 -0
  322. package/src/msg_validators/tx_validator/test_utils.ts +1 -1
  323. package/src/msg_validators/tx_validator/timestamp_validator.ts +5 -2
  324. package/src/services/dummy_service.ts +6 -0
  325. package/src/services/encoding.ts +6 -5
  326. package/src/services/libp2p/instrumentation.ts +26 -71
  327. package/src/services/libp2p/libp2p_service.ts +580 -160
  328. package/src/services/peer-manager/metrics.ts +27 -16
  329. package/src/services/peer-manager/peer_manager.ts +7 -4
  330. package/src/services/peer-manager/peer_scoring.ts +42 -3
  331. package/src/services/reqresp/connection-sampler/connection_sampler.ts +3 -1
  332. package/src/services/reqresp/constants.ts +14 -0
  333. package/src/services/reqresp/interface.ts +1 -1
  334. package/src/services/reqresp/metrics.ts +7 -23
  335. package/src/services/reqresp/protocols/auth.ts +2 -2
  336. package/src/services/reqresp/protocols/block.ts +3 -2
  337. package/src/services/reqresp/protocols/block_txs/bitvector.ts +9 -0
  338. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +1 -1
  339. package/src/services/reqresp/protocols/status.ts +16 -12
  340. package/src/services/reqresp/protocols/tx.ts +1 -2
  341. package/src/services/service.ts +19 -4
  342. package/src/services/tx_collection/config.ts +1 -1
  343. package/src/services/tx_collection/fast_tx_collection.ts +3 -2
  344. package/src/services/tx_collection/instrumentation.ts +4 -21
  345. package/src/services/tx_collection/slow_tx_collection.ts +5 -4
  346. package/src/services/tx_collection/tx_collection.ts +6 -5
  347. package/src/services/tx_provider.ts +19 -3
  348. package/src/services/tx_provider_instrumentation.ts +18 -14
  349. package/src/test-helpers/mock-pubsub.ts +1 -1
  350. package/src/test-helpers/mock-tx-helpers.ts +1 -1
  351. package/src/test-helpers/reqresp-nodes.ts +1 -1
  352. package/src/testbench/p2p_client_testbench_worker.ts +45 -22
  353. package/src/testbench/worker_client_manager.ts +6 -1
  354. package/src/util.ts +12 -2
  355. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -80
  356. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  357. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -238
  358. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  359. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  360. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -70
  361. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  362. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  363. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  364. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -283
  365. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -81
  366. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -1,30 +1,29 @@
1
- import { INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
1
+ import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/constants';
2
+ import { BlockNumber, SlotNumber } from '@aztec/foundation/branded-types';
2
3
  import { createLogger } from '@aztec/foundation/log';
3
4
  import { DateProvider } from '@aztec/foundation/timer';
4
- import type { AztecAsyncKVStore, AztecAsyncMap, AztecAsyncSingleton } from '@aztec/kv-store';
5
- import type {
6
- EthAddress,
7
- L2Block,
8
- L2BlockId,
9
- L2BlockSource,
5
+ import type { AztecAsyncKVStore, AztecAsyncSingleton } from '@aztec/kv-store';
6
+ import { L2TipsKVStore } from '@aztec/kv-store/stores';
7
+ import {
8
+ type EthAddress,
9
+ type L2Block,
10
+ type L2BlockSource,
10
11
  L2BlockStream,
11
- L2BlockStreamEvent,
12
- L2Tips,
13
- PublishedL2Block,
12
+ type L2BlockStreamEvent,
13
+ type L2Tips,
14
+ type L2TipsStore,
14
15
  } from '@aztec/stdlib/block';
15
16
  import type { ContractDataSource } from '@aztec/stdlib/contract';
16
17
  import { getTimestampForSlot } from '@aztec/stdlib/epoch-helpers';
17
18
  import { type PeerInfo, tryStop } from '@aztec/stdlib/interfaces/server';
18
- import { BlockAttestation, type BlockProposal, type P2PClientType } from '@aztec/stdlib/p2p';
19
- import type { Tx, TxHash } from '@aztec/stdlib/tx';
20
19
  import {
21
- Attributes,
22
- type TelemetryClient,
23
- TraceableL2BlockStream,
24
- WithTracer,
25
- getTelemetryClient,
26
- trackSpan,
27
- } from '@aztec/telemetry-client';
20
+ type BlockProposal,
21
+ CheckpointAttestation,
22
+ type CheckpointProposal,
23
+ type P2PClientType,
24
+ } from '@aztec/stdlib/p2p';
25
+ import type { Tx, TxHash } from '@aztec/stdlib/tx';
26
+ import { Attributes, type TelemetryClient, WithTracer, getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
28
27
 
29
28
  import type { PeerId } from '@libp2p/interface';
30
29
  import type { ENR } from '@nethermindeth/enr';
@@ -40,7 +39,7 @@ import {
40
39
  type ReqRespSubProtocolValidators,
41
40
  } from '../services/reqresp/interface.js';
42
41
  import { chunkTxHashesRequest } from '../services/reqresp/protocols/tx.js';
43
- import type { P2PBlockReceivedCallback, P2PService } from '../services/service.js';
42
+ import type { P2PBlockReceivedCallback, P2PCheckpointReceivedCallback, P2PService } from '../services/service.js';
44
43
  import { TxCollection } from '../services/tx_collection/tx_collection.js';
45
44
  import { TxProvider } from '../services/tx_provider.js';
46
45
  import { type P2P, P2PClientState, type P2PSyncState } from './interface.js';
@@ -62,14 +61,11 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
62
61
  private provenBlockNumberAtStart = -1;
63
62
  private finalizedBlockNumberAtStart = -1;
64
63
 
65
- private synchedBlockHashes: AztecAsyncMap<number, string>;
66
- private synchedLatestBlockNumber: AztecAsyncSingleton<number>;
67
- private synchedProvenBlockNumber: AztecAsyncSingleton<number>;
68
- private synchedFinalizedBlockNumber: AztecAsyncSingleton<number>;
64
+ private l2Tips: L2TipsStore;
69
65
  private synchedLatestSlot: AztecAsyncSingleton<bigint>;
70
66
 
71
67
  private txPool: TxPool;
72
- private attestationPool: T extends P2PClientType.Full ? AttestationPool : undefined;
68
+ private attestationPool: AttestationPool;
73
69
 
74
70
  private config: P2PConfig;
75
71
 
@@ -91,7 +87,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
91
87
  _clientType: T,
92
88
  private store: AztecAsyncKVStore,
93
89
  private l2BlockSource: L2BlockSource & ContractDataSource,
94
- mempools: MemPools<T>,
90
+ mempools: MemPools,
95
91
  private p2pService: P2PService,
96
92
  private txCollection: TxCollection,
97
93
  config: Partial<P2PConfig> = {},
@@ -103,7 +99,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
103
99
 
104
100
  this.config = { ...getP2PDefaultConfig(), ...config };
105
101
  this.txPool = mempools.txPool;
106
- this.attestationPool = mempools.attestationPool!;
102
+ this.attestationPool = mempools.attestationPool;
107
103
 
108
104
  this.txProvider = new TxProvider(
109
105
  this.txCollection,
@@ -114,30 +110,27 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
114
110
  );
115
111
 
116
112
  // Default to collecting all txs when we see a valid proposal
117
- // This can be overridden by the validator client to attest, and it will call getTxsForBlockProposal on its own
113
+ // This can be overridden by the validator client to validate, and it will call getTxsForBlockProposal on its own
114
+ // Note: Validators do NOT attest to individual blocks - attestations are only for checkpoint proposals.
118
115
  // TODO(palla/txs): We should not trigger a request for txs on a proposal before fully validating it. We need to bring
119
116
  // validator-client code into here so we can validate a proposal is reasonable.
120
117
  this.registerBlockProposalHandler(async (block, sender) => {
121
118
  this.log.debug(`Received block proposal from ${sender.toString()}`);
122
119
  // TODO(palla/txs): Need to subtract validatorReexecuteDeadlineMs from this deadline (see ValidatorClient.getReexecutionDeadline)
123
120
  const constants = this.txCollection.getConstants();
124
- const nextSlotTimestampSeconds = Number(getTimestampForSlot(block.slotNumber.toBigInt() + 1n, constants));
121
+ const nextSlotTimestampSeconds = Number(getTimestampForSlot(SlotNumber(block.slotNumber + 1), constants));
125
122
  const deadline = new Date(nextSlotTimestampSeconds * 1000);
126
- const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.payload.header.lastArchiveRoot);
123
+ const parentBlock = await this.l2BlockSource.getBlockHeaderByArchive(block.blockHeader.lastArchive.root);
127
124
  if (!parentBlock) {
128
125
  this.log.debug(`Cannot collect txs for proposal as parent block not found`);
129
- return;
126
+ return false;
130
127
  }
131
- const blockNumber = parentBlock.getBlockNumber() + 1;
128
+ const blockNumber = BlockNumber(parentBlock.getBlockNumber() + 1);
132
129
  await this.txProvider.getTxsForBlockProposal(block, blockNumber, { pinnedPeer: sender, deadline });
133
- return undefined;
130
+ return true;
134
131
  });
135
132
 
136
- // REFACTOR: Try replacing these with an L2TipsStore
137
- this.synchedBlockHashes = store.openMap('p2p_pool_block_hashes');
138
- this.synchedLatestBlockNumber = store.openSingleton('p2p_pool_last_l2_block');
139
- this.synchedProvenBlockNumber = store.openSingleton('p2p_pool_last_proven_l2_block');
140
- this.synchedFinalizedBlockNumber = store.openSingleton('p2p_pool_last_finalized_l2_block');
133
+ this.l2Tips = new L2TipsKVStore(store, 'p2p_client');
141
134
  this.synchedLatestSlot = store.openSingleton('p2p_pool_last_l2_slot');
142
135
  }
143
136
 
@@ -162,8 +155,8 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
162
155
  return Promise.resolve(this.p2pService.getPeers(includePending));
163
156
  }
164
157
 
165
- public getL2BlockHash(number: number): Promise<string | undefined> {
166
- return this.synchedBlockHashes.getAsync(number);
158
+ public getL2BlockHash(number: BlockNumber): Promise<string | undefined> {
159
+ return this.l2Tips.getL2BlockHash(number);
167
160
  }
168
161
 
169
162
  public updateP2PConfig(config: Partial<P2PConfig>): Promise<void> {
@@ -172,82 +165,45 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
172
165
  return Promise.resolve();
173
166
  }
174
167
 
175
- public async getL2Tips(): Promise<L2Tips> {
176
- const latestBlockNumber = await this.getSyncedLatestBlockNum();
177
- let latestBlockHash: string | undefined;
178
-
179
- const provenBlockNumber = await this.getSyncedProvenBlockNum();
180
- let provenBlockHash: string | undefined;
181
-
182
- const finalizedBlockNumber = await this.getSyncedFinalizedBlockNum();
183
- let finalizedBlockHash: string | undefined;
184
-
185
- if (latestBlockNumber > 0) {
186
- latestBlockHash = await this.synchedBlockHashes.getAsync(latestBlockNumber);
187
- if (typeof latestBlockHash === 'undefined') {
188
- throw new Error(`Block hash for latest block ${latestBlockNumber} not found in p2p client`);
189
- }
190
- }
191
-
192
- if (provenBlockNumber > 0) {
193
- provenBlockHash = await this.synchedBlockHashes.getAsync(provenBlockNumber);
194
- if (typeof provenBlockHash === 'undefined') {
195
- throw new Error(`Block hash for proven block ${provenBlockNumber} not found in p2p client`);
196
- }
197
- }
198
-
199
- if (finalizedBlockNumber > 0) {
200
- finalizedBlockHash = await this.synchedBlockHashes.getAsync(finalizedBlockNumber);
201
- if (typeof finalizedBlockHash === 'undefined') {
202
- throw new Error(`Block hash for finalized block ${finalizedBlockNumber} not found in p2p client`);
203
- }
204
- }
205
-
206
- return {
207
- latest: { hash: latestBlockHash!, number: latestBlockNumber },
208
- proven: { hash: provenBlockHash!, number: provenBlockNumber },
209
- finalized: { hash: finalizedBlockHash!, number: finalizedBlockNumber },
210
- };
168
+ public getL2Tips(): Promise<L2Tips> {
169
+ return this.l2Tips.getL2Tips();
211
170
  }
212
171
 
213
172
  public async handleBlockStreamEvent(event: L2BlockStreamEvent): Promise<void> {
214
173
  this.log.debug(`Handling block stream event ${event.type}`);
174
+
215
175
  switch (event.type) {
216
176
  case 'blocks-added':
217
177
  await this.handleLatestL2Blocks(event.blocks);
218
178
  break;
219
179
  case 'chain-finalized': {
220
- // TODO (alexg): I think we can prune the block hashes map here
221
- await this.setBlockHash(event.block);
222
- const from = (await this.getSyncedFinalizedBlockNum()) + 1;
180
+ const oldFinalizedBlockNum = await this.getSyncedFinalizedBlockNum();
181
+ const from = BlockNumber(oldFinalizedBlockNum + 1);
223
182
  const limit = event.block.number - from + 1;
224
183
  if (limit > 0) {
225
- await this.handleFinalizedL2Blocks(await this.l2BlockSource.getBlocks(from, limit));
184
+ const oldBlocks = await this.l2BlockSource.getBlocks(from, limit);
185
+ await this.handleFinalizedL2Blocks(oldBlocks);
226
186
  }
227
187
  break;
228
188
  }
229
- case 'chain-proven': {
230
- await this.setBlockHash(event.block);
189
+ case 'chain-proven':
231
190
  this.txCollection.stopCollectingForBlocksUpTo(event.block.number);
232
- await this.synchedProvenBlockNumber.set(event.block.number);
233
191
  break;
234
- }
235
192
  case 'chain-pruned':
236
- await this.setBlockHash(event.block);
237
193
  this.txCollection.stopCollectingForBlocksAfter(event.block.number);
238
194
  await this.handlePruneL2Blocks(event.block.number);
239
195
  break;
196
+ case 'chain-checkpointed':
197
+ break;
240
198
  default: {
241
199
  const _: never = event;
242
200
  break;
243
201
  }
244
202
  }
245
- }
246
203
 
247
- private async setBlockHash(block: L2BlockId): Promise<void> {
248
- if (block.hash !== undefined) {
249
- await this.synchedBlockHashes.set(block.number, block.hash.toString());
250
- }
204
+ // Pass the event through to our l2 tips store
205
+ await this.l2Tips.handleBlockStreamEvent(event);
206
+ await this.startServiceIfSynched();
251
207
  }
252
208
 
253
209
  #assertIsReady() {
@@ -271,20 +227,17 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
271
227
 
272
228
  // get the current latest block numbers
273
229
  const latestBlockNumbers = await this.l2BlockSource.getL2Tips();
274
- this.latestBlockNumberAtStart = latestBlockNumbers.latest.number;
275
- this.provenBlockNumberAtStart = latestBlockNumbers.proven.number;
276
- this.finalizedBlockNumberAtStart = latestBlockNumbers.finalized.number;
230
+ this.latestBlockNumberAtStart = latestBlockNumbers.proposed.number;
231
+ this.provenBlockNumberAtStart = latestBlockNumbers.proven.block.number;
232
+ this.finalizedBlockNumberAtStart = latestBlockNumbers.finalized.block.number;
277
233
 
278
234
  const syncedLatestBlock = (await this.getSyncedLatestBlockNum()) + 1;
279
235
  const syncedProvenBlock = (await this.getSyncedProvenBlockNum()) + 1;
280
236
  const syncedFinalizedBlock = (await this.getSyncedFinalizedBlockNum()) + 1;
281
237
 
282
- if (
283
- (await this.txPool.isEmpty()) &&
284
- (this.attestationPool === undefined || (await this.attestationPool?.isEmpty()))
285
- ) {
238
+ if ((await this.txPool.isEmpty()) && (await this.attestationPool.isEmpty())) {
286
239
  // if mempools are empty, we don't care about syncing prior blocks
287
- this.initBlockStream(this.latestBlockNumberAtStart);
240
+ this.initBlockStream(BlockNumber(this.latestBlockNumberAtStart));
288
241
  this.setCurrentState(P2PClientState.RUNNING);
289
242
  this.syncPromise = Promise.resolve();
290
243
  await this.p2pService.start();
@@ -332,15 +285,13 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
332
285
  return this.p2pService.addReqRespSubProtocol(subProtocol, handler, validator);
333
286
  }
334
287
 
335
- private initBlockStream(startingBlock?: number) {
288
+ private initBlockStream(startingBlock?: BlockNumber) {
336
289
  if (!this.blockStream) {
337
290
  const { blockRequestBatchSize: batchSize, blockCheckIntervalMS: pollIntervalMS } = this.config;
338
- this.blockStream = new TraceableL2BlockStream(
291
+ this.blockStream = new L2BlockStream(
339
292
  this.l2BlockSource,
340
293
  this,
341
294
  this,
342
- this.telemetry.getTracer('P2PL2BlockStream'),
343
- 'P2PL2BlockStream',
344
295
  createLogger(`${this.log.module}:l2-block-stream`),
345
296
  { batchSize, pollIntervalMS, startingBlock },
346
297
  );
@@ -371,29 +322,41 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
371
322
  }
372
323
 
373
324
  @trackSpan('p2pClient.broadcastProposal', async proposal => ({
374
- [Attributes.SLOT_NUMBER]: proposal.slotNumber.toNumber(),
325
+ [Attributes.SLOT_NUMBER]: proposal.slotNumber,
375
326
  [Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
376
- [Attributes.P2P_ID]: (await proposal.p2pMessageIdentifier()).toString(),
327
+ [Attributes.P2P_ID]: (await proposal.p2pMessageLoggingIdentifier()).toString(),
377
328
  }))
378
329
  public broadcastProposal(proposal: BlockProposal): Promise<void> {
379
- this.log.verbose(`Broadcasting proposal for slot ${proposal.slotNumber.toNumber()} to peers`);
330
+ this.log.verbose(`Broadcasting proposal for slot ${proposal.slotNumber} to peers`);
380
331
  return this.p2pService.propagate(proposal);
381
332
  }
382
333
 
383
- public async getAttestationsForSlot(slot: bigint, proposalId?: string): Promise<BlockAttestation[]> {
384
- return (
385
- (await (proposalId
386
- ? this.attestationPool?.getAttestationsForSlotAndProposal(slot, proposalId)
387
- : this.attestationPool?.getAttestationsForSlot(slot))) ?? []
388
- );
334
+ @trackSpan('p2pClient.broadcastCheckpointProposal', async proposal => ({
335
+ [Attributes.SLOT_NUMBER]: proposal.slotNumber,
336
+ [Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
337
+ [Attributes.P2P_ID]: (await proposal.p2pMessageLoggingIdentifier()).toString(),
338
+ }))
339
+ public broadcastCheckpointProposal(proposal: CheckpointProposal): Promise<void> {
340
+ this.log.verbose(`Broadcasting checkpoint proposal for slot ${proposal.slotNumber} to peers`);
341
+ return this.p2pService.propagate(proposal);
342
+ }
343
+
344
+ public async broadcastCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void> {
345
+ this.log.verbose(`Broadcasting ${attestations.length} checkpoint attestations to peers`);
346
+ await Promise.all(attestations.map(att => this.p2pService.propagate(att)));
389
347
  }
390
348
 
391
- public addAttestations(attestations: BlockAttestation[]): Promise<void> {
392
- return this.attestationPool?.addAttestations(attestations) ?? Promise.resolve();
349
+ public async getCheckpointAttestationsForSlot(
350
+ slot: SlotNumber,
351
+ proposalId?: string,
352
+ ): Promise<CheckpointAttestation[]> {
353
+ return await (proposalId
354
+ ? this.attestationPool.getCheckpointAttestationsForSlotAndProposal(slot, proposalId)
355
+ : this.attestationPool.getCheckpointAttestationsForSlot(slot));
393
356
  }
394
357
 
395
- public deleteAttestation(attestation: BlockAttestation): Promise<void> {
396
- return this.attestationPool?.deleteAttestations([attestation]) ?? Promise.resolve();
358
+ public addCheckpointAttestations(attestations: CheckpointAttestation[]): Promise<void> {
359
+ return this.attestationPool.addCheckpointAttestations(attestations);
397
360
  }
398
361
 
399
362
  // REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
@@ -402,6 +365,10 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
402
365
  this.p2pService.registerBlockReceivedCallback(handler);
403
366
  }
404
367
 
368
+ public registerCheckpointProposalHandler(handler: P2PCheckpointReceivedCallback): void {
369
+ this.p2pService.registerCheckpointReceivedCallback(handler);
370
+ }
371
+
405
372
  /**
406
373
  * Uses the batched Request Response protocol to request a set of transactions from the network.
407
374
  */
@@ -643,20 +610,23 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
643
610
  * Public function to check the latest block number that the P2P client is synced to.
644
611
  * @returns Block number of latest L2 Block we've synced with.
645
612
  */
646
- public async getSyncedLatestBlockNum(): Promise<number> {
647
- return (await this.synchedLatestBlockNumber.getAsync()) ?? INITIAL_L2_BLOCK_NUM - 1;
613
+ public async getSyncedLatestBlockNum(): Promise<BlockNumber> {
614
+ const tips = await this.l2Tips.getL2Tips();
615
+ return tips.proposed.number;
648
616
  }
649
617
 
650
618
  /**
651
619
  * Public function to check the latest proven block number that the P2P client is synced to.
652
620
  * @returns Block number of latest proven L2 Block we've synced with.
653
621
  */
654
- public async getSyncedProvenBlockNum(): Promise<number> {
655
- return (await this.synchedProvenBlockNumber.getAsync()) ?? INITIAL_L2_BLOCK_NUM - 1;
622
+ public async getSyncedProvenBlockNum(): Promise<BlockNumber> {
623
+ const tips = await this.l2Tips.getL2Tips();
624
+ return tips.proven.block.number;
656
625
  }
657
626
 
658
- public async getSyncedFinalizedBlockNum(): Promise<number> {
659
- return (await this.synchedFinalizedBlockNumber.getAsync()) ?? INITIAL_L2_BLOCK_NUM - 1;
627
+ public async getSyncedFinalizedBlockNum(): Promise<BlockNumber> {
628
+ const tips = await this.l2Tips.getL2Tips();
629
+ return tips.finalized.block.number;
660
630
  }
661
631
 
662
632
  /** Returns latest L2 slot for which we have seen an L2 block. */
@@ -672,7 +642,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
672
642
  const blockNumber = await this.getSyncedLatestBlockNum();
673
643
  const blockHash =
674
644
  blockNumber === 0
675
- ? ''
645
+ ? GENESIS_BLOCK_HEADER_HASH.toString()
676
646
  : await this.l2BlockSource
677
647
  .getBlockHeader(blockNumber)
678
648
  .then(header => header?.hash())
@@ -680,8 +650,8 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
680
650
 
681
651
  return {
682
652
  state: this.currentState,
683
- syncedToL2Block: { number: blockNumber, hash: blockHash },
684
- } as P2PSyncState;
653
+ syncedToL2Block: { number: blockNumber, hash: blockHash! },
654
+ };
685
655
  }
686
656
 
687
657
  /**
@@ -692,7 +662,7 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
692
662
  private async markTxsAsMinedFromBlocks(blocks: L2Block[]): Promise<void> {
693
663
  for (const block of blocks) {
694
664
  const txHashes = block.body.txEffects.map(txEffect => txEffect.txHash);
695
- await this.txPool.markAsMined(txHashes, block.getBlockHeader());
665
+ await this.txPool.markAsMined(txHashes, block.header);
696
666
  }
697
667
  }
698
668
 
@@ -701,29 +671,18 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
701
671
  * @param blocks - A list of existing blocks with txs that the P2P client needs to ensure the tx pool is reconciled with.
702
672
  * @returns Empty promise.
703
673
  */
704
- private async handleLatestL2Blocks(blocks: PublishedL2Block[]): Promise<void> {
674
+ private async handleLatestL2Blocks(blocks: L2Block[]): Promise<void> {
705
675
  if (!blocks.length) {
706
676
  return Promise.resolve();
707
677
  }
708
678
 
709
- await this.markTxsAsMinedFromBlocks(blocks.map(b => b.block));
710
- await this.startCollectingMissingTxs(blocks.map(b => b.block));
711
-
712
- const lastBlock = blocks.at(-1)!.block;
713
-
714
- await Promise.all(
715
- blocks.map(async block =>
716
- this.setBlockHash({
717
- number: block.block.number,
718
- hash: await block.block.hash().then(h => h.toString()),
719
- }),
720
- ),
721
- );
679
+ await this.markTxsAsMinedFromBlocks(blocks);
680
+ await this.txPool.clearNonEvictableTxs();
681
+ await this.startCollectingMissingTxs(blocks);
722
682
 
723
- await this.synchedLatestBlockNumber.set(lastBlock.number);
724
- await this.synchedLatestSlot.set(lastBlock.header.getSlot());
683
+ const lastBlock = blocks.at(-1)!;
684
+ await this.synchedLatestSlot.set(BigInt(lastBlock.header.getSlot()));
725
685
  this.log.verbose(`Synched to latest block ${lastBlock.number}`);
726
- await this.startServiceIfSynched();
727
686
  }
728
687
 
729
688
  /** Request txs for unproven blocks so the prover node has more chances to get them. */
@@ -774,19 +733,16 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
774
733
  await this.txPool.deleteTxs(txHashes, { permanently: true });
775
734
  await this.txPool.cleanupDeletedMinedTxs(lastBlockNum);
776
735
 
777
- await this.attestationPool?.deleteAttestationsOlderThan(lastBlockSlot);
736
+ await this.attestationPool.deleteCheckpointAttestationsOlderThan(lastBlockSlot);
778
737
 
779
- await this.synchedFinalizedBlockNumber.set(lastBlockNum);
780
738
  this.log.debug(`Synched to finalized block ${lastBlockNum} at slot ${lastBlockSlot}`);
781
-
782
- await this.startServiceIfSynched();
783
739
  }
784
740
 
785
741
  /**
786
742
  * Updates the tx pool after a chain prune.
787
743
  * @param latestBlock - The block number the chain was pruned to.
788
744
  */
789
- private async handlePruneL2Blocks(latestBlock: number): Promise<void> {
745
+ private async handlePruneL2Blocks(latestBlock: BlockNumber): Promise<void> {
790
746
  const txsToDelete = new Map<string, TxHash>();
791
747
  const minedTxs = await this.txPool.getMinedTxHashes();
792
748
 
@@ -825,21 +781,18 @@ export class P2PClient<T extends P2PClientType = P2PClientType.Full>
825
781
  this.log.info(`Deleting ${minedTxsFromReorg.length} mined txs from reorg`);
826
782
  await this.txPool.deleteTxs(minedTxsFromReorg);
827
783
  } else {
828
- this.log.info(`Moving ${minedTxsFromReorg.length} mined txs from reorg back to pending`);
829
- await this.txPool.markMinedAsPending(minedTxsFromReorg);
784
+ await this.txPool.markMinedAsPending(minedTxsFromReorg, latestBlock);
830
785
  }
831
-
832
- await this.synchedLatestBlockNumber.set(latestBlock);
833
- // no need to update block hashes, as they will be updated as new blocks are added
834
786
  }
835
787
 
836
788
  private async startServiceIfSynched() {
837
789
  if (this.currentState !== P2PClientState.SYNCHING) {
838
790
  return;
839
791
  }
840
- const syncedFinalizedBlock = await this.getSyncedFinalizedBlockNum();
841
- const syncedProvenBlock = await this.getSyncedProvenBlockNum();
842
- const syncedLatestBlock = await this.getSyncedLatestBlockNum();
792
+ const tips = await this.l2Tips.getL2Tips();
793
+ const syncedFinalizedBlock = tips.finalized.block.number;
794
+ const syncedProvenBlock = tips.proven.block.number;
795
+ const syncedLatestBlock = tips.proposed.number;
843
796
 
844
797
  if (
845
798
  syncedLatestBlock >= this.latestBlockNumberAtStart &&
package/src/config.ts CHANGED
@@ -2,16 +2,16 @@ import {
2
2
  type ConfigMappingsType,
3
3
  SecretValue,
4
4
  booleanConfigHelper,
5
- floatConfigHelper,
6
5
  getConfigFromMappings,
7
6
  getDefaultConfig,
8
7
  numberConfigHelper,
8
+ percentageConfigHelper,
9
9
  pickConfigMappings,
10
10
  secretStringConfigHelper,
11
11
  } from '@aztec/foundation/config';
12
- import { Fr } from '@aztec/foundation/fields';
12
+ import { Fr } from '@aztec/foundation/curves/bn254';
13
13
  import { type DataStoreConfig, dataConfigMappings } from '@aztec/kv-store/config';
14
- import { FunctionSelector } from '@aztec/stdlib/abi';
14
+ import { FunctionSelector } from '@aztec/stdlib/abi/function-selector';
15
15
  import { AztecAddress } from '@aztec/stdlib/aztec-address';
16
16
  import { type AllowedElement, type ChainConfig, chainConfigMappings } from '@aztec/stdlib/config';
17
17
 
@@ -133,11 +133,8 @@ export interface P2PConfig extends P2PReqRespConfig, ChainConfig, TxCollectionCo
133
133
  /** Which calls are allowed in the public setup phase of a tx. */
134
134
  txPublicSetupAllowList: AllowedElement[];
135
135
 
136
- /** The maximum cumulative tx size (in bytes) of pending txs before evicting lower priority txs. */
137
- maxTxPoolSize: number;
138
-
139
- /** If the pool is full, it will still accept a few more txs until it reached maxTxPoolOverspillFactor * maxTxPoolSize. Then it will evict */
140
- txPoolOverflowFactor: number;
136
+ /** The maximum number of pending txs before evicting lower priority txs. */
137
+ maxPendingTxCount: number;
141
138
 
142
139
  /** The node's seen message ID cache size */
143
140
  seenMessageCacheSize: number;
@@ -164,6 +161,12 @@ export interface P2PConfig extends P2PReqRespConfig, ChainConfig, TxCollectionCo
164
161
 
165
162
  /** Whether to delete transactions from the pool after a reorg instead of moving them back to pending. */
166
163
  txPoolDeleteTxsAfterReorg: boolean;
164
+
165
+ /** Alters the format of p2p messages to include things like broadcast timestamp FOR TESTING ONLY */
166
+ debugP2PInstrumentMessages: boolean;
167
+
168
+ /** Whether to run in fisherman mode: validates all proposals and attestations but does not broadcast attestations or participate in consensus */
169
+ fishermanMode: boolean;
167
170
  }
168
171
 
169
172
  export const DEFAULT_P2P_PORT = 40400;
@@ -369,15 +372,12 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
369
372
  printDefault: () =>
370
373
  'AuthRegistry, FeeJuice.increase_public_balance, Token.increase_public_balance, FPC.prepare_fee',
371
374
  },
372
- maxTxPoolSize: {
373
- env: 'P2P_MAX_TX_POOL_SIZE',
374
- description: 'The maximum cumulative tx size of pending txs (in bytes) before evicting lower priority txs.',
375
- ...numberConfigHelper(100_000_000), // 100MB
376
- },
377
- txPoolOverflowFactor: {
378
- env: 'P2P_TX_POOL_OVERFLOW_FACTOR',
379
- description: 'How much the tx pool can overflow before it starts evicting txs. Must be greater than 1',
380
- ...floatConfigHelper(1.1), // 10% overflow
375
+ maxPendingTxCount: {
376
+ env: 'P2P_MAX_PENDING_TX_COUNT',
377
+ description: 'The maximum number of pending txs before evicting lower priority txs.',
378
+ // Worst case scenario: Uncompressed public/private tx is ~ 156kb
379
+ // This implies we are using ~156MB of memory for pending pool
380
+ ...numberConfigHelper(1_000),
381
381
  },
382
382
  seenMessageCacheSize: {
383
383
  env: 'P2P_SEEN_MSG_CACHE_SIZE',
@@ -406,8 +406,8 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
406
406
  },
407
407
  dropTransactionsProbability: {
408
408
  env: 'P2P_DROP_TX_CHANCE',
409
- description: 'The probability that a transaction is discarded. - For testing purposes only',
410
- ...floatConfigHelper(0),
409
+ description: 'The probability that a transaction is discarded (0 - 1). - For testing purposes only',
410
+ ...percentageConfigHelper(0),
411
411
  },
412
412
  disableTransactions: {
413
413
  env: 'TRANSACTIONS_DISABLED',
@@ -420,6 +420,17 @@ export const p2pConfigMappings: ConfigMappingsType<P2PConfig> = {
420
420
  description: 'Whether to delete transactions from the pool after a reorg instead of moving them back to pending.',
421
421
  ...booleanConfigHelper(false),
422
422
  },
423
+ debugP2PInstrumentMessages: {
424
+ env: 'DEBUG_P2P_INSTRUMENT_MESSAGES',
425
+ description: 'Alters the format of p2p messages to include things like broadcast timestamp FOR TESTING ONLY',
426
+ ...booleanConfigHelper(false),
427
+ },
428
+ fishermanMode: {
429
+ env: 'FISHERMAN_MODE',
430
+ description:
431
+ 'Whether to run in fisherman mode: validates all proposals and attestations but does not broadcast attestations or participate in consensus.',
432
+ ...booleanConfigHelper(false),
433
+ },
423
434
  ...p2pReqRespConfigMappings,
424
435
  ...chainConfigMappings,
425
436
  ...txCollectionConfigMappings,
@@ -0,0 +1,13 @@
1
+ export class AttestationPoolError extends Error {
2
+ constructor(message?: string) {
3
+ super(message);
4
+ this.name = 'AttestationPoolError';
5
+ }
6
+ }
7
+
8
+ export class ProposalSlotCapExceededError extends AttestationPoolError {
9
+ constructor(message?: string) {
10
+ super(message);
11
+ this.name = 'ProposalSlotCapExceededError';
12
+ }
13
+ }