@aztec/p2p 0.0.1-commit.d3ec352c → 0.0.1-commit.e61ad554

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 (275) 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 +11 -14
  7. package/dest/client/p2p_client.d.ts.map +1 -1
  8. package/dest/client/p2p_client.js +456 -124
  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 +35 -26
  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 +8 -4
  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 +25 -20
  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 +2 -2
  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 +1 -1
  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 +718 -164
  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.js +1 -1
  157. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +1 -1
  158. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  159. package/dest/services/reqresp/protocols/block_txs/bitvector.js +7 -0
  160. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +2 -2
  161. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  162. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +1 -1
  163. package/dest/services/reqresp/protocols/status.d.ts +1 -1
  164. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  165. package/dest/services/reqresp/protocols/status.js +4 -1
  166. package/dest/services/reqresp/protocols/tx.d.ts +2 -3
  167. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  168. package/dest/services/reqresp/reqresp.js +402 -24
  169. package/dest/services/service.d.ts +16 -3
  170. package/dest/services/service.d.ts.map +1 -1
  171. package/dest/services/tx_collection/config.js +1 -1
  172. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  173. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  174. package/dest/services/tx_collection/instrumentation.js +4 -14
  175. package/dest/services/tx_collection/tx_collection.d.ts +3 -3
  176. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  177. package/dest/services/tx_collection/tx_collection.js +1 -1
  178. package/dest/services/tx_provider.d.ts +4 -3
  179. package/dest/services/tx_provider.d.ts.map +1 -1
  180. package/dest/services/tx_provider.js +11 -2
  181. package/dest/services/tx_provider_instrumentation.d.ts +5 -2
  182. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  183. package/dest/services/tx_provider_instrumentation.js +13 -13
  184. package/dest/test-helpers/mock-tx-helpers.js +1 -1
  185. package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
  186. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  187. package/dest/testbench/p2p_client_testbench_worker.js +31 -17
  188. package/dest/testbench/worker_client_manager.d.ts +1 -1
  189. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  190. package/dest/testbench/worker_client_manager.js +6 -1
  191. package/package.json +16 -16
  192. package/src/client/factory.ts +5 -10
  193. package/src/client/interface.ts +19 -4
  194. package/src/client/p2p_client.ts +89 -144
  195. package/src/config.ts +12 -18
  196. package/src/mem_pools/attestation_pool/attestation_pool.ts +68 -41
  197. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +241 -289
  198. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +163 -141
  199. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +141 -164
  200. package/src/mem_pools/attestation_pool/mocks.ts +21 -15
  201. package/src/mem_pools/instrumentation.ts +38 -14
  202. package/src/mem_pools/interface.ts +2 -4
  203. package/src/mem_pools/tx_pool/README.md +270 -0
  204. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +362 -367
  205. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
  206. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
  207. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  208. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  209. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
  210. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  211. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  212. package/src/mem_pools/tx_pool/index.ts +0 -1
  213. package/src/mem_pools/tx_pool/priority.ts +8 -1
  214. package/src/mem_pools/tx_pool/tx_pool.ts +8 -3
  215. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +18 -13
  216. package/src/msg_validators/attestation_validator/attestation_validator.ts +37 -22
  217. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +13 -16
  218. package/src/msg_validators/clock_tolerance.ts +51 -0
  219. package/src/msg_validators/index.ts +1 -1
  220. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  221. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  222. package/src/msg_validators/proposal_validator/index.ts +3 -0
  223. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  224. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  225. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  226. package/src/msg_validators/tx_validator/block_header_validator.ts +4 -2
  227. package/src/msg_validators/tx_validator/data_validator.ts +12 -4
  228. package/src/msg_validators/tx_validator/factory.ts +1 -1
  229. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  230. package/src/msg_validators/tx_validator/gas_validator.ts +8 -25
  231. package/src/msg_validators/tx_validator/index.ts +1 -0
  232. package/src/msg_validators/tx_validator/metadata_validator.ts +13 -5
  233. package/src/msg_validators/tx_validator/size_validator.ts +18 -0
  234. package/src/msg_validators/tx_validator/test_utils.ts +1 -1
  235. package/src/msg_validators/tx_validator/timestamp_validator.ts +3 -1
  236. package/src/services/dummy_service.ts +6 -0
  237. package/src/services/encoding.ts +6 -5
  238. package/src/services/libp2p/instrumentation.ts +19 -73
  239. package/src/services/libp2p/libp2p_service.ts +361 -130
  240. package/src/services/peer-manager/metrics.ts +22 -21
  241. package/src/services/peer-manager/peer_manager.ts +5 -4
  242. package/src/services/peer-manager/peer_scoring.ts +1 -5
  243. package/src/services/reqresp/connection-sampler/connection_sampler.ts +3 -1
  244. package/src/services/reqresp/constants.ts +14 -0
  245. package/src/services/reqresp/interface.ts +1 -1
  246. package/src/services/reqresp/metrics.ts +7 -23
  247. package/src/services/reqresp/protocols/auth.ts +2 -2
  248. package/src/services/reqresp/protocols/block.ts +1 -1
  249. package/src/services/reqresp/protocols/block_txs/bitvector.ts +9 -0
  250. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +1 -1
  251. package/src/services/reqresp/protocols/status.ts +7 -4
  252. package/src/services/reqresp/protocols/tx.ts +1 -2
  253. package/src/services/service.ts +19 -4
  254. package/src/services/tx_collection/config.ts +1 -1
  255. package/src/services/tx_collection/instrumentation.ts +4 -21
  256. package/src/services/tx_collection/tx_collection.ts +3 -3
  257. package/src/services/tx_provider.ts +19 -4
  258. package/src/services/tx_provider_instrumentation.ts +18 -14
  259. package/src/test-helpers/mock-pubsub.ts +1 -1
  260. package/src/test-helpers/mock-tx-helpers.ts +1 -1
  261. package/src/test-helpers/reqresp-nodes.ts +1 -1
  262. package/src/testbench/p2p_client_testbench_worker.ts +42 -22
  263. package/src/testbench/worker_client_manager.ts +6 -1
  264. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -81
  265. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  266. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -239
  267. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  268. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  269. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -82
  270. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  271. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  272. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  273. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -285
  274. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -97
  275. 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 { GENESIS_BLOCK_HEADER_HASH, INITIAL_L2_BLOCK_NUM } from '@aztec/constants';
373
+ var _dec, _dec1, _initProto;
374
+ import { GENESIS_BLOCK_HEADER_HASH } from '@aztec/constants';
8
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
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,53 +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
- const genesisHash = GENESIS_BLOCK_HEADER_HASH.toString();
144
- return {
145
- latest: {
146
- hash: latestBlockHash ?? genesisHash,
147
- number: latestBlockNumber
148
- },
149
- proven: {
150
- hash: provenBlockHash ?? genesisHash,
151
- number: provenBlockNumber
152
- },
153
- finalized: {
154
- hash: finalizedBlockHash ?? genesisHash,
155
- number: finalizedBlockNumber
156
- }
157
- };
504
+ getL2Tips() {
505
+ return this.l2Tips.getL2Tips();
158
506
  }
159
507
  async handleBlockStreamEvent(event) {
160
508
  this.log.debug(`Handling block stream event ${event.type}`);
@@ -164,38 +512,33 @@ import { P2PClientState } from './interface.js';
164
512
  break;
165
513
  case 'chain-finalized':
166
514
  {
167
- // TODO (alexg): I think we can prune the block hashes map here
168
- await this.setBlockHash(event.block);
169
- const from = BlockNumber(await this.getSyncedFinalizedBlockNum() + 1);
515
+ const oldFinalizedBlockNum = await this.getSyncedFinalizedBlockNum();
516
+ const from = BlockNumber(oldFinalizedBlockNum + 1);
170
517
  const limit = event.block.number - from + 1;
171
518
  if (limit > 0) {
172
- await this.handleFinalizedL2Blocks(await this.l2BlockSource.getBlocks(from, limit));
519
+ const oldBlocks = await this.l2BlockSource.getBlocks(from, limit);
520
+ await this.handleFinalizedL2Blocks(oldBlocks);
173
521
  }
174
522
  break;
175
523
  }
176
524
  case 'chain-proven':
177
- {
178
- await this.setBlockHash(event.block);
179
- this.txCollection.stopCollectingForBlocksUpTo(event.block.number);
180
- await this.synchedProvenBlockNumber.set(event.block.number);
181
- break;
182
- }
525
+ this.txCollection.stopCollectingForBlocksUpTo(event.block.number);
526
+ break;
183
527
  case 'chain-pruned':
184
- await this.setBlockHash(event.block);
185
528
  this.txCollection.stopCollectingForBlocksAfter(event.block.number);
186
529
  await this.handlePruneL2Blocks(event.block.number);
187
530
  break;
531
+ case 'chain-checkpointed':
532
+ break;
188
533
  default:
189
534
  {
190
535
  const _ = event;
191
536
  break;
192
537
  }
193
538
  }
194
- }
195
- async setBlockHash(block) {
196
- if (block.hash !== undefined) {
197
- await this.synchedBlockHashes.set(block.number, block.hash.toString());
198
- }
539
+ // Pass the event through to our l2 tips store
540
+ await this.l2Tips.handleBlockStreamEvent(event);
541
+ await this.startServiceIfSynched();
199
542
  }
200
543
  #assertIsReady() {
201
544
  // this.log.info('Checking if p2p client is ready, current state: ', this.currentState);
@@ -215,13 +558,13 @@ import { P2PClientState } from './interface.js';
215
558
  }
216
559
  // get the current latest block numbers
217
560
  const latestBlockNumbers = await this.l2BlockSource.getL2Tips();
218
- this.latestBlockNumberAtStart = latestBlockNumbers.latest.number;
219
- this.provenBlockNumberAtStart = latestBlockNumbers.proven.number;
220
- 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;
221
564
  const syncedLatestBlock = await this.getSyncedLatestBlockNum() + 1;
222
565
  const syncedProvenBlock = await this.getSyncedProvenBlockNum() + 1;
223
566
  const syncedFinalizedBlock = await this.getSyncedFinalizedBlockNum() + 1;
224
- if (await this.txPool.isEmpty() && (this.attestationPool === undefined || await this.attestationPool?.isEmpty())) {
567
+ if (await this.txPool.isEmpty() && await this.attestationPool.isEmpty()) {
225
568
  // if mempools are empty, we don't care about syncing prior blocks
226
569
  this.initBlockStream(BlockNumber(this.latestBlockNumberAtStart));
227
570
  this.setCurrentState(P2PClientState.RUNNING);
@@ -263,7 +606,7 @@ import { P2PClientState } from './interface.js';
263
606
  initBlockStream(startingBlock) {
264
607
  if (!this.blockStream) {
265
608
  const { blockRequestBatchSize: batchSize, blockCheckIntervalMS: pollIntervalMS } = this.config;
266
- 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`), {
267
610
  batchSize,
268
611
  pollIntervalMS,
269
612
  startingBlock
@@ -293,26 +636,28 @@ import { P2PClientState } from './interface.js';
293
636
  this.log.verbose(`Broadcasting proposal for slot ${proposal.slotNumber} to peers`);
294
637
  return this.p2pService.propagate(proposal);
295
638
  }
296
- async broadcastAttestations(attestations) {
297
- this.log.verbose(`Broadcasting ${attestations.length} attestations to peers`);
298
- 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);
299
642
  }
300
- async getAttestationsForSlot(slot, proposalId) {
301
- 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)));
302
646
  }
303
- addAttestations(attestations) {
304
- 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));
305
649
  }
306
- deleteAttestation(attestation) {
307
- return this.attestationPool?.deleteAttestations([
308
- attestation
309
- ]) ?? Promise.resolve();
650
+ addCheckpointAttestations(attestations) {
651
+ return this.attestationPool.addCheckpointAttestations(attestations);
310
652
  }
311
653
  // REVIEW: https://github.com/AztecProtocol/aztec-packages/issues/7963
312
654
  // ^ This pattern is not my favorite (md)
313
655
  registerBlockProposalHandler(handler) {
314
656
  this.p2pService.registerBlockReceivedCallback(handler);
315
657
  }
658
+ registerCheckpointProposalHandler(handler) {
659
+ this.p2pService.registerCheckpointReceivedCallback(handler);
660
+ }
316
661
  /**
317
662
  * Uses the batched Request Response protocol to request a set of transactions from the network.
318
663
  */ async requestTxsByHash(txHashes, pinnedPeerId) {
@@ -503,16 +848,19 @@ import { P2PClientState } from './interface.js';
503
848
  * Public function to check the latest block number that the P2P client is synced to.
504
849
  * @returns Block number of latest L2 Block we've synced with.
505
850
  */ async getSyncedLatestBlockNum() {
506
- return await this.synchedLatestBlockNumber.getAsync() ?? BlockNumber(INITIAL_L2_BLOCK_NUM - 1);
851
+ const tips = await this.l2Tips.getL2Tips();
852
+ return tips.proposed.number;
507
853
  }
508
854
  /**
509
855
  * Public function to check the latest proven block number that the P2P client is synced to.
510
856
  * @returns Block number of latest proven L2 Block we've synced with.
511
857
  */ async getSyncedProvenBlockNum() {
512
- return await this.synchedProvenBlockNumber.getAsync() ?? BlockNumber(INITIAL_L2_BLOCK_NUM - 1);
858
+ const tips = await this.l2Tips.getL2Tips();
859
+ return tips.proven.block.number;
513
860
  }
514
861
  async getSyncedFinalizedBlockNum() {
515
- return await this.synchedFinalizedBlockNumber.getAsync() ?? BlockNumber(INITIAL_L2_BLOCK_NUM - 1);
862
+ const tips = await this.l2Tips.getL2Tips();
863
+ return tips.finalized.block.number;
516
864
  }
517
865
  /** Returns latest L2 slot for which we have seen an L2 block. */ async getSyncedLatestSlot() {
518
866
  return await this.synchedLatestSlot.getAsync() ?? BigInt(0);
@@ -538,7 +886,7 @@ import { P2PClientState } from './interface.js';
538
886
  */ async markTxsAsMinedFromBlocks(blocks) {
539
887
  for (const block of blocks){
540
888
  const txHashes = block.body.txEffects.map((txEffect)=>txEffect.txHash);
541
- await this.txPool.markAsMined(txHashes, block.getBlockHeader());
889
+ await this.txPool.markAsMined(txHashes, block.header);
542
890
  }
543
891
  }
544
892
  /**
@@ -549,17 +897,12 @@ import { P2PClientState } from './interface.js';
549
897
  if (!blocks.length) {
550
898
  return Promise.resolve();
551
899
  }
552
- await this.markTxsAsMinedFromBlocks(blocks.map((b)=>b.block));
553
- await this.startCollectingMissingTxs(blocks.map((b)=>b.block));
554
- const lastBlock = blocks.at(-1).block;
555
- await Promise.all(blocks.map(async (block)=>this.setBlockHash({
556
- number: block.block.number,
557
- hash: await block.block.hash().then((h)=>h.toString())
558
- })));
559
- 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);
560
904
  await this.synchedLatestSlot.set(BigInt(lastBlock.header.getSlot()));
561
905
  this.log.verbose(`Synched to latest block ${lastBlock.number}`);
562
- await this.startServiceIfSynched();
563
906
  }
564
907
  /** Request txs for unproven blocks so the prover node has more chances to get them. */ async startCollectingMissingTxs(blocks) {
565
908
  try {
@@ -604,10 +947,8 @@ import { P2PClientState } from './interface.js';
604
947
  permanently: true
605
948
  });
606
949
  await this.txPool.cleanupDeletedMinedTxs(lastBlockNum);
607
- await this.attestationPool?.deleteAttestationsOlderThan(lastBlockSlot);
608
- await this.synchedFinalizedBlockNumber.set(lastBlockNum);
950
+ await this.attestationPool.deleteCheckpointAttestationsOlderThan(lastBlockSlot);
609
951
  this.log.debug(`Synched to finalized block ${lastBlockNum} at slot ${lastBlockSlot}`);
610
- await this.startServiceIfSynched();
611
952
  }
612
953
  /**
613
954
  * Updates the tx pool after a chain prune.
@@ -646,19 +987,17 @@ import { P2PClientState } from './interface.js';
646
987
  this.log.info(`Deleting ${minedTxsFromReorg.length} mined txs from reorg`);
647
988
  await this.txPool.deleteTxs(minedTxsFromReorg);
648
989
  } else {
649
- this.log.info(`Moving ${minedTxsFromReorg.length} mined txs from reorg back to pending`);
650
- await this.txPool.markMinedAsPending(minedTxsFromReorg);
990
+ await this.txPool.markMinedAsPending(minedTxsFromReorg, latestBlock);
651
991
  }
652
- await this.synchedLatestBlockNumber.set(latestBlock);
653
- // no need to update block hashes, as they will be updated as new blocks are added
654
992
  }
655
993
  async startServiceIfSynched() {
656
994
  if (this.currentState !== P2PClientState.SYNCHING) {
657
995
  return;
658
996
  }
659
- const syncedFinalizedBlock = await this.getSyncedFinalizedBlockNum();
660
- const syncedProvenBlock = await this.getSyncedProvenBlockNum();
661
- 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;
662
1001
  if (syncedLatestBlock >= this.latestBlockNumberAtStart && syncedProvenBlock >= this.provenBlockNumberAtStart && syncedFinalizedBlock >= this.finalizedBlockNumberAtStart) {
663
1002
  this.log.info(`Completed P2P client sync to block ${syncedLatestBlock}. Starting service.`, {
664
1003
  syncedLatestBlock,
@@ -693,10 +1032,3 @@ import { P2PClientState } from './interface.js';
693
1032
  return this.p2pService.handleAuthRequestFromPeer(authRequest, peerId);
694
1033
  }
695
1034
  }
696
- _ts_decorate([
697
- trackSpan('p2pClient.broadcastProposal', async (proposal)=>({
698
- [Attributes.SLOT_NUMBER]: proposal.slotNumber,
699
- [Attributes.BLOCK_ARCHIVE]: proposal.archive.toString(),
700
- [Attributes.P2P_ID]: (await proposal.p2pMessageLoggingIdentifier()).toString()
701
- }))
702
- ], P2PClient.prototype, "broadcastProposal", null);