@aztec/p2p 0.0.1-commit.fce3e4f → 0.0.1-commit.fffb133c

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