@aztec/p2p 0.0.1-commit.f504929 → 0.0.1-commit.f5d02921e

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 (283) hide show
  1. package/README.md +129 -3
  2. package/dest/client/factory.d.ts +2 -2
  3. package/dest/client/factory.d.ts.map +1 -1
  4. package/dest/client/factory.js +25 -11
  5. package/dest/client/interface.d.ts +9 -2
  6. package/dest/client/interface.d.ts.map +1 -1
  7. package/dest/client/p2p_client.d.ts +3 -2
  8. package/dest/client/p2p_client.d.ts.map +1 -1
  9. package/dest/client/p2p_client.js +37 -36
  10. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +17 -6
  11. package/dest/config.d.ts +24 -2
  12. package/dest/config.d.ts.map +1 -1
  13. package/dest/config.js +66 -7
  14. package/dest/errors/p2p-service.error.d.ts +9 -0
  15. package/dest/errors/p2p-service.error.d.ts.map +1 -0
  16. package/dest/errors/p2p-service.error.js +10 -0
  17. package/dest/index.d.ts +1 -2
  18. package/dest/index.d.ts.map +1 -1
  19. package/dest/index.js +0 -1
  20. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +4 -4
  21. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  22. package/dest/mem_pools/attestation_pool/attestation_pool.js +6 -5
  23. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +6 -6
  24. package/dest/mem_pools/index.d.ts +1 -2
  25. package/dest/mem_pools/index.d.ts.map +1 -1
  26. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts +1 -1
  27. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -1
  28. package/dest/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.js +2 -1
  29. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts +7 -1
  30. package/dest/mem_pools/tx_pool_v2/eviction/interfaces.d.ts.map +1 -1
  31. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts +1 -1
  32. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.d.ts.map +1 -1
  33. package/dest/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.js +8 -6
  34. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts +2 -2
  35. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.d.ts.map +1 -1
  36. package/dest/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.js +2 -2
  37. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts +9 -5
  38. package/dest/mem_pools/tx_pool_v2/interfaces.d.ts.map +1 -1
  39. package/dest/mem_pools/tx_pool_v2/interfaces.js +2 -1
  40. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts +25 -10
  41. package/dest/mem_pools/tx_pool_v2/tx_metadata.d.ts.map +1 -1
  42. package/dest/mem_pools/tx_pool_v2/tx_metadata.js +38 -11
  43. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts +1 -1
  44. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.d.ts.map +1 -1
  45. package/dest/mem_pools/tx_pool_v2/tx_pool_indices.js +26 -43
  46. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts +4 -2
  47. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.d.ts.map +1 -1
  48. package/dest/mem_pools/tx_pool_v2/tx_pool_v2.js +3 -0
  49. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts +1 -1
  50. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.d.ts.map +1 -1
  51. package/dest/mem_pools/tx_pool_v2/tx_pool_v2_impl.js +21 -6
  52. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +1 -1
  53. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  54. package/dest/msg_validators/attestation_validator/attestation_validator.js +5 -4
  55. package/dest/msg_validators/clock_tolerance.d.ts +1 -1
  56. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -1
  57. package/dest/msg_validators/clock_tolerance.js +4 -3
  58. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +5 -4
  59. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -1
  60. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +10 -2
  61. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +5 -4
  62. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -1
  63. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +16 -2
  64. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +12 -9
  65. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -1
  66. package/dest/msg_validators/proposal_validator/proposal_validator.js +51 -49
  67. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +1 -1
  68. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts.map +1 -1
  69. package/dest/msg_validators/tx_validator/allowed_public_setup.js +21 -32
  70. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts +17 -0
  71. package/dest/msg_validators/tx_validator/allowed_setup_helpers.d.ts.map +1 -0
  72. package/dest/msg_validators/tx_validator/allowed_setup_helpers.js +24 -0
  73. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts +9 -0
  74. package/dest/msg_validators/tx_validator/contract_instance_validator.d.ts.map +1 -0
  75. package/dest/msg_validators/tx_validator/contract_instance_validator.js +48 -0
  76. package/dest/msg_validators/tx_validator/data_validator.d.ts +1 -1
  77. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  78. package/dest/msg_validators/tx_validator/data_validator.js +35 -2
  79. package/dest/msg_validators/tx_validator/factory.d.ts +23 -4
  80. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  81. package/dest/msg_validators/tx_validator/factory.js +36 -10
  82. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +1 -1
  83. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -1
  84. package/dest/msg_validators/tx_validator/fee_payer_balance.js +6 -2
  85. package/dest/msg_validators/tx_validator/gas_validator.d.ts +13 -4
  86. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  87. package/dest/msg_validators/tx_validator/gas_validator.js +39 -9
  88. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  89. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  90. package/dest/msg_validators/tx_validator/index.js +1 -0
  91. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +1 -1
  92. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  93. package/dest/msg_validators/tx_validator/metadata_validator.js +4 -4
  94. package/dest/msg_validators/tx_validator/phases_validator.d.ts +21 -1
  95. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  96. package/dest/msg_validators/tx_validator/phases_validator.js +49 -2
  97. package/dest/services/dummy_service.d.ts +5 -3
  98. package/dest/services/dummy_service.d.ts.map +1 -1
  99. package/dest/services/dummy_service.js +5 -1
  100. package/dest/services/encoding.d.ts +5 -1
  101. package/dest/services/encoding.d.ts.map +1 -1
  102. package/dest/services/encoding.js +7 -1
  103. package/dest/services/libp2p/libp2p_service.d.ts +14 -11
  104. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  105. package/dest/services/libp2p/libp2p_service.js +146 -74
  106. package/dest/services/peer-manager/peer_manager.d.ts +6 -2
  107. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  108. package/dest/services/peer-manager/peer_manager.js +22 -8
  109. package/dest/services/peer-manager/peer_scoring.d.ts +5 -2
  110. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  111. package/dest/services/peer-manager/peer_scoring.js +28 -10
  112. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +11 -8
  113. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -1
  114. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +69 -65
  115. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +3 -2
  116. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -1
  117. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +5 -4
  118. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -1
  119. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +13 -7
  120. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +3 -1
  121. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -1
  122. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +3 -0
  123. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +5 -4
  124. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  125. package/dest/services/reqresp/rate-limiter/rate_limiter.js +10 -8
  126. package/dest/services/reqresp/reqresp.d.ts +1 -1
  127. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  128. package/dest/services/reqresp/reqresp.js +17 -9
  129. package/dest/services/service.d.ts +5 -2
  130. package/dest/services/service.d.ts.map +1 -1
  131. package/dest/services/tx_collection/fast_tx_collection.d.ts +1 -4
  132. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  133. package/dest/services/tx_collection/fast_tx_collection.js +57 -73
  134. package/dest/services/tx_collection/file_store_tx_source.d.ts +5 -4
  135. package/dest/services/tx_collection/file_store_tx_source.d.ts.map +1 -1
  136. package/dest/services/tx_collection/file_store_tx_source.js +39 -29
  137. package/dest/services/tx_collection/proposal_tx_collector.d.ts +6 -7
  138. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -1
  139. package/dest/services/tx_collection/proposal_tx_collector.js +4 -4
  140. package/dest/services/tx_collection/request_tracker.d.ts +53 -0
  141. package/dest/services/tx_collection/request_tracker.d.ts.map +1 -0
  142. package/dest/services/tx_collection/request_tracker.js +84 -0
  143. package/dest/services/tx_collection/slow_tx_collection.js +1 -1
  144. package/dest/services/tx_collection/tx_collection.d.ts +3 -6
  145. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  146. package/dest/services/tx_collection/tx_source.d.ts +6 -5
  147. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  148. package/dest/services/tx_collection/tx_source.js +9 -7
  149. package/dest/test-helpers/make-test-p2p-clients.d.ts +1 -1
  150. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  151. package/dest/test-helpers/reqresp-nodes.d.ts +1 -1
  152. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  153. package/dest/test-helpers/testbench-utils.d.ts +1 -1
  154. package/dest/test-helpers/testbench-utils.d.ts.map +1 -1
  155. package/dest/test-helpers/testbench-utils.js +22 -3
  156. package/dest/testbench/p2p_client_testbench_worker.js +46 -16
  157. package/dest/testbench/worker_client_manager.d.ts +3 -1
  158. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  159. package/dest/testbench/worker_client_manager.js +6 -3
  160. package/dest/util.d.ts +1 -1
  161. package/package.json +14 -14
  162. package/src/client/factory.ts +43 -14
  163. package/src/client/interface.ts +9 -1
  164. package/src/client/p2p_client.ts +39 -36
  165. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +19 -9
  166. package/src/config.ts +92 -4
  167. package/src/errors/p2p-service.error.ts +11 -0
  168. package/src/index.ts +0 -1
  169. package/src/mem_pools/attestation_pool/attestation_pool.ts +7 -5
  170. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +6 -6
  171. package/src/mem_pools/index.ts +0 -3
  172. package/src/mem_pools/tx_pool_v2/README.md +9 -1
  173. package/src/mem_pools/tx_pool_v2/eviction/fee_payer_balance_eviction_rule.ts +2 -1
  174. package/src/mem_pools/tx_pool_v2/eviction/interfaces.ts +11 -1
  175. package/src/mem_pools/tx_pool_v2/eviction/low_priority_pre_add_rule.ts +15 -6
  176. package/src/mem_pools/tx_pool_v2/eviction/nullifier_conflict_rule.ts +2 -1
  177. package/src/mem_pools/tx_pool_v2/interfaces.ts +9 -4
  178. package/src/mem_pools/tx_pool_v2/tx_metadata.ts +59 -13
  179. package/src/mem_pools/tx_pool_v2/tx_pool_indices.ts +29 -43
  180. package/src/mem_pools/tx_pool_v2/tx_pool_v2.ts +13 -1
  181. package/src/mem_pools/tx_pool_v2/tx_pool_v2_impl.ts +23 -6
  182. package/src/msg_validators/attestation_validator/README.md +49 -0
  183. package/src/msg_validators/attestation_validator/attestation_validator.ts +5 -4
  184. package/src/msg_validators/clock_tolerance.ts +4 -3
  185. package/src/msg_validators/proposal_validator/README.md +123 -0
  186. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +13 -3
  187. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +19 -6
  188. package/src/msg_validators/proposal_validator/proposal_validator.ts +63 -53
  189. package/src/msg_validators/tx_validator/README.md +5 -1
  190. package/src/msg_validators/tx_validator/allowed_public_setup.ts +16 -35
  191. package/src/msg_validators/tx_validator/allowed_setup_helpers.ts +31 -0
  192. package/src/msg_validators/tx_validator/contract_instance_validator.ts +56 -0
  193. package/src/msg_validators/tx_validator/data_validator.ts +42 -1
  194. package/src/msg_validators/tx_validator/factory.ts +43 -3
  195. package/src/msg_validators/tx_validator/fee_payer_balance.ts +6 -2
  196. package/src/msg_validators/tx_validator/gas_validator.ts +41 -8
  197. package/src/msg_validators/tx_validator/index.ts +1 -0
  198. package/src/msg_validators/tx_validator/metadata_validator.ts +12 -4
  199. package/src/msg_validators/tx_validator/phases_validator.ts +60 -1
  200. package/src/services/dummy_service.ts +7 -2
  201. package/src/services/encoding.ts +9 -1
  202. package/src/services/libp2p/libp2p_service.ts +147 -87
  203. package/src/services/peer-manager/peer_manager.ts +26 -8
  204. package/src/services/peer-manager/peer_scoring.ts +21 -5
  205. package/src/services/reqresp/README.md +229 -0
  206. package/src/services/reqresp/batch-tx-requester/README.md +46 -7
  207. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +64 -69
  208. package/src/services/reqresp/batch-tx-requester/interface.ts +2 -1
  209. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +13 -6
  210. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +5 -0
  211. package/src/services/reqresp/rate-limiter/rate_limiter.ts +13 -9
  212. package/src/services/reqresp/reqresp.ts +19 -11
  213. package/src/services/service.ts +6 -1
  214. package/src/services/tx_collection/fast_tx_collection.ts +57 -83
  215. package/src/services/tx_collection/file_store_tx_source.ts +43 -31
  216. package/src/services/tx_collection/proposal_tx_collector.ts +8 -13
  217. package/src/services/tx_collection/request_tracker.ts +127 -0
  218. package/src/services/tx_collection/slow_tx_collection.ts +1 -1
  219. package/src/services/tx_collection/tx_collection.ts +3 -5
  220. package/src/services/tx_collection/tx_source.ts +8 -7
  221. package/src/test-helpers/make-test-p2p-clients.ts +1 -1
  222. package/src/test-helpers/reqresp-nodes.ts +1 -1
  223. package/src/test-helpers/testbench-utils.ts +29 -3
  224. package/src/testbench/p2p_client_testbench_worker.ts +45 -15
  225. package/src/testbench/worker_client_manager.ts +13 -6
  226. package/src/util.ts +1 -1
  227. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +0 -125
  228. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +0 -1
  229. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +0 -596
  230. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +0 -32
  231. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +0 -1
  232. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +0 -112
  233. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +0 -157
  234. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +0 -1
  235. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +0 -52
  236. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +0 -16
  237. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +0 -1
  238. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +0 -122
  239. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +0 -17
  240. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +0 -1
  241. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +0 -84
  242. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +0 -19
  243. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +0 -1
  244. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +0 -78
  245. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +0 -26
  246. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +0 -1
  247. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +0 -84
  248. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +0 -25
  249. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +0 -1
  250. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +0 -57
  251. package/dest/mem_pools/tx_pool/index.d.ts +0 -3
  252. package/dest/mem_pools/tx_pool/index.d.ts.map +0 -1
  253. package/dest/mem_pools/tx_pool/index.js +0 -2
  254. package/dest/mem_pools/tx_pool/priority.d.ts +0 -12
  255. package/dest/mem_pools/tx_pool/priority.d.ts.map +0 -1
  256. package/dest/mem_pools/tx_pool/priority.js +0 -15
  257. package/dest/mem_pools/tx_pool/tx_pool.d.ts +0 -127
  258. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +0 -1
  259. package/dest/mem_pools/tx_pool/tx_pool.js +0 -3
  260. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +0 -7
  261. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +0 -1
  262. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +0 -400
  263. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +0 -24
  264. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +0 -1
  265. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +0 -378
  266. package/dest/services/tx_collection/missing_txs_tracker.d.ts +0 -32
  267. package/dest/services/tx_collection/missing_txs_tracker.d.ts.map +0 -1
  268. package/dest/services/tx_collection/missing_txs_tracker.js +0 -27
  269. package/src/mem_pools/tx_pool/README.md +0 -270
  270. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +0 -746
  271. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +0 -132
  272. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +0 -208
  273. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +0 -162
  274. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +0 -104
  275. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +0 -93
  276. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +0 -106
  277. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +0 -75
  278. package/src/mem_pools/tx_pool/index.ts +0 -2
  279. package/src/mem_pools/tx_pool/priority.ts +0 -20
  280. package/src/mem_pools/tx_pool/tx_pool.ts +0 -141
  281. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +0 -319
  282. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +0 -373
  283. package/src/services/tx_collection/missing_txs_tracker.ts +0 -52
@@ -370,14 +370,15 @@ function applyDecs2203RFactory() {
370
370
  function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {
371
371
  return (_apply_decs_2203_r = applyDecs2203RFactory())(targetClass, memberDecs, classDecs, parentClass);
372
372
  }
373
- var _dec, _dec1, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _initProto;
373
+ var _dec, _dec1, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _initProto;
374
374
  import { BlockNumber } from '@aztec/foundation/branded-types';
375
+ import { maxBy } from '@aztec/foundation/collection';
375
376
  import { createLibp2pComponentLogger, createLogger } from '@aztec/foundation/log';
376
377
  import { RunningPromise } from '@aztec/foundation/running-promise';
377
378
  import { Timer } from '@aztec/foundation/timer';
378
379
  import { protocolContractsHash } from '@aztec/protocol-contracts';
379
380
  import { GasFees } from '@aztec/stdlib/gas';
380
- import { BlockProposal, CheckpointAttestation, CheckpointProposal, P2PMessage, PeerErrorSeverity, TopicType, createTopicString, getTopicsForConfig, metricsTopicStrToLabels } from '@aztec/stdlib/p2p';
381
+ import { BlockProposal, CheckpointAttestation, CheckpointProposal, P2PMessage, PeerErrorSeverity, PeerErrorSeverityByHarshness, TopicType, createTopicString, getTopicsForConfig, metricsTopicStrToLabels } from '@aztec/stdlib/p2p';
381
382
  import { MerkleTreeId } from '@aztec/stdlib/trees';
382
383
  import { Tx } from '@aztec/stdlib/tx';
383
384
  import { compressComponentVersions } from '@aztec/stdlib/versioning';
@@ -394,6 +395,7 @@ import { mplex } from '@libp2p/mplex';
394
395
  import { tcp } from '@libp2p/tcp';
395
396
  import { ENR } from '@nethermindeth/enr';
396
397
  import { createLibp2p } from 'libp2p';
398
+ import { CheckpointProposalReceivedCallbackNotRegisteredError } from '../../errors/p2p-service.error.js';
397
399
  import { BlockProposalValidator, CheckpointAttestationValidator, CheckpointProposalValidator, DoubleSpendTxValidator, FishermanAttestationValidator, getDefaultAllowedSetupFunctions } from '../../msg_validators/index.js';
398
400
  import { MessageSeenValidator } from '../../msg_validators/msg_seen_validator/msg_seen_validator.js';
399
401
  import { createFirstStageTxValidationsForGossipedTransactions, createSecondStageTxValidationsForGossipedTransactions, createTxValidatorForBlockProposalReceivedTxs, createTxValidatorForReqResponseReceivedTxs } from '../../msg_validators/tx_validator/factory.js';
@@ -431,10 +433,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
431
433
  [Attributes.TX_HASH]: requestedTxHash.toString()
432
434
  })), _dec7 = trackSpan('Libp2pService.validateRequestedBlock', (requestedBlockNumber, _responseBlock)=>({
433
435
  [Attributes.BLOCK_NUMBER]: requestedBlockNumber.toString()
434
- })), _dec8 = trackSpan('Libp2pService.validateCheckpointAttestation', async (_, attestation)=>({
435
- [Attributes.SLOT_NUMBER]: attestation.payload.header.slotNumber,
436
- [Attributes.BLOCK_ARCHIVE]: attestation.archive.toString(),
437
- [Attributes.P2P_ID]: await attestation.p2pMessageLoggingIdentifier().then((i)=>i.toString())
438
436
  }));
439
437
  /**
440
438
  * Lib P2P implementation of the P2PService interface.
@@ -490,11 +488,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
490
488
  _dec7,
491
489
  2,
492
490
  "validateRequestedBlock"
493
- ],
494
- [
495
- _dec8,
496
- 2,
497
- "validateCheckpointAttestation"
498
491
  ]
499
492
  ], []));
500
493
  }
@@ -518,7 +511,12 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
518
511
  * Callback for when a checkpoint proposal is received from a peer.
519
512
  * @param checkpoint - The checkpoint proposal received from the peer.
520
513
  * @returns The attestations for the checkpoint, if any.
521
- */ checkpointReceivedCallback;
514
+ */ allNodesCheckpointReceivedCallback;
515
+ /**
516
+ * Callback for when a checkpoint proposal is received - specifically for validators - from a peer.
517
+ * @param checkpoint - The checkpoint proposal received from the peer.
518
+ * @returns The attestations for the checkpoint, if any.
519
+ */ validatorCheckpointReceivedCallback;
522
520
  gossipSubEventHandler;
523
521
  instrumentation;
524
522
  telemetry;
@@ -540,24 +538,24 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
540
538
  this.topicStrings[TopicType.block_proposal] = createTopicString(TopicType.block_proposal, this.protocolVersion);
541
539
  this.topicStrings[TopicType.checkpoint_proposal] = createTopicString(TopicType.checkpoint_proposal, this.protocolVersion);
542
540
  this.topicStrings[TopicType.checkpoint_attestation] = createTopicString(TopicType.checkpoint_attestation, this.protocolVersion);
543
- this.blockProposalValidator = new BlockProposalValidator(epochCache, {
544
- txsPermitted: !config.disableTransactions,
545
- maxTxsPerBlock: config.maxTxsPerBlock
546
- });
547
- this.checkpointProposalValidator = new CheckpointProposalValidator(epochCache, {
541
+ const proposalValidatorOpts = {
548
542
  txsPermitted: !config.disableTransactions,
549
- maxTxsPerBlock: config.maxTxsPerBlock
550
- });
543
+ maxTxsPerBlock: config.validateMaxTxsPerBlock ?? config.validateMaxTxsPerCheckpoint
544
+ };
545
+ this.blockProposalValidator = new BlockProposalValidator(epochCache, proposalValidatorOpts);
546
+ this.checkpointProposalValidator = new CheckpointProposalValidator(epochCache, proposalValidatorOpts);
551
547
  this.checkpointAttestationValidator = config.fishermanMode ? new FishermanAttestationValidator(epochCache, mempools.attestationPool, telemetry) : new CheckpointAttestationValidator(epochCache);
552
548
  this.gossipSubEventHandler = this.handleGossipSubEvent.bind(this);
553
549
  this.blockReceivedCallback = async (block)=>{
554
- this.logger.debug(`Handler not yet registered: Block received callback not set. Received block for slot ${block.slotNumber} from peer.`, {
550
+ this.logger.warn(`Handler for block received not yet registered on P2P service. Received block ${block.blockNumber} for slot ${block.slotNumber} from peer.`, {
555
551
  p2pMessageIdentifier: await block.p2pMessageLoggingIdentifier()
556
552
  });
557
- return false;
553
+ return true;
558
554
  };
559
- this.checkpointReceivedCallback = (checkpoint)=>{
560
- this.logger.debug(`Handler not yet registered: Checkpoint received callback not set. Received checkpoint for slot ${checkpoint.slotNumber} from peer.`);
555
+ this.allNodesCheckpointReceivedCallback = (_checkpoint)=>{
556
+ throw new CheckpointProposalReceivedCallbackNotRegisteredError();
557
+ };
558
+ this.validatorCheckpointReceivedCallback = (_checkpoint)=>{
561
559
  return Promise.resolve(undefined);
562
560
  };
563
561
  }
@@ -861,8 +859,14 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
861
859
  registerBlockReceivedCallback(callback) {
862
860
  this.blockReceivedCallback = callback;
863
861
  }
864
- registerCheckpointReceivedCallback(callback) {
865
- this.checkpointReceivedCallback = callback;
862
+ registerValidatorCheckpointReceivedCallback(callback) {
863
+ this.validatorCheckpointReceivedCallback = callback;
864
+ }
865
+ registerAllNodesCheckpointReceivedCallback(callback) {
866
+ this.allNodesCheckpointReceivedCallback = callback;
867
+ }
868
+ async notifyOwnCheckpointProposal(checkpoint) {
869
+ await this.allNodesCheckpointReceivedCallback(checkpoint, this.node.peerId);
866
870
  }
867
871
  /**
868
872
  * Registers a callback to be invoked when a duplicate proposal is detected.
@@ -928,6 +932,12 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
928
932
  if (!validator || !validator.addMessage(msgId)) {
929
933
  this.instrumentation.incMessagePrevalidationStatus(false, topicType);
930
934
  this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), TopicValidatorResult.Ignore);
935
+ if (topicType === TopicType.tx) {
936
+ this.logger.verbose(`Ignoring already-seen tx gossip message`, {
937
+ msgId,
938
+ source: source.toString()
939
+ });
940
+ }
931
941
  return {
932
942
  result: false,
933
943
  topicType
@@ -1033,29 +1043,67 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1033
1043
  return;
1034
1044
  }
1035
1045
  async validateReceivedMessage(validationFunc, msgId, source, topicType) {
1046
+ // Default to reject result with a penalty if validation function throws an error
1036
1047
  let resultAndObj = {
1037
- result: TopicValidatorResult.Reject
1048
+ result: TopicValidatorResult.Reject,
1049
+ severity: PeerErrorSeverity.MidToleranceError
1038
1050
  };
1039
1051
  const timer = new Timer();
1040
1052
  try {
1041
1053
  resultAndObj = await validationFunc();
1042
1054
  } catch (err) {
1043
- this.peerManager.penalizePeer(source, PeerErrorSeverity.LowToleranceError);
1044
- this.logger.error(`Error deserializing and validating gossipsub message`, err, {
1055
+ this.logger.error(`Error validating gossipsub message`, err, {
1045
1056
  msgId,
1046
1057
  source: source.toString(),
1047
1058
  topicType
1048
1059
  });
1049
1060
  }
1050
1061
  if (resultAndObj.result === TopicValidatorResult.Accept) {
1062
+ this.logger.debug(`Message ${topicType} accepted by validator`, {
1063
+ msgId,
1064
+ source: source.toString(),
1065
+ topicType
1066
+ });
1051
1067
  this.instrumentation.recordMessageValidation(topicType, timer);
1068
+ } else if (resultAndObj.result === TopicValidatorResult.Reject) {
1069
+ this.logger.warn(`Message ${topicType} rejected by validator with severity ${resultAndObj.severity}`, {
1070
+ msgId,
1071
+ source: source.toString(),
1072
+ topicType,
1073
+ severity: resultAndObj.severity
1074
+ });
1075
+ this.peerManager.penalizePeer(source, resultAndObj.severity);
1076
+ } else {
1077
+ this.logger.trace(`Message ${topicType} ignored by validator`, {
1078
+ msgId,
1079
+ source: source.toString(),
1080
+ topicType
1081
+ });
1052
1082
  }
1053
1083
  this.node.services.pubsub.reportMessageValidationResult(msgId, source.toString(), resultAndObj.result);
1054
1084
  return resultAndObj;
1055
1085
  }
1086
+ tryDeserialize(deserializeFunc, msgId, source) {
1087
+ try {
1088
+ return deserializeFunc();
1089
+ } catch (err) {
1090
+ this.logger.warn(`Failed to deserialize gossipsub message from buffer`, {
1091
+ err,
1092
+ msgId,
1093
+ source: source.toString()
1094
+ });
1095
+ return undefined;
1096
+ }
1097
+ }
1056
1098
  async handleGossipedTx(payloadData, msgId, source) {
1057
1099
  const validationFunc = async ()=>{
1058
- const tx = Tx.fromBuffer(payloadData);
1100
+ const tx = this.tryDeserialize(()=>Tx.fromBuffer(payloadData), msgId, source);
1101
+ if (!tx) {
1102
+ return {
1103
+ result: TopicValidatorResult.Reject,
1104
+ severity: PeerErrorSeverity.LowToleranceError
1105
+ };
1106
+ }
1059
1107
  const currentBlockNumber = await this.archiver.getBlockNumber();
1060
1108
  const { ts: nextSlotTimestamp } = this.epochCache.getEpochAndSlotInNextL1Slot();
1061
1109
  // Stage 1: fast validators (metadata, data, timestamps, double-spend, gas, phases, block header)
@@ -1071,14 +1119,22 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1071
1119
  const txBlockNumber = BlockNumber(currentBlockNumber + 1);
1072
1120
  severity = await this.handleDoubleSpendFailure(tx, txBlockNumber);
1073
1121
  }
1074
- this.peerManager.penalizePeer(source, severity);
1122
+ this.logger.verbose(`Rejecting gossiped tx ${tx.getTxHash().toString()}: stage 1 validation failed`, {
1123
+ validator: name,
1124
+ severity,
1125
+ source: source.toString()
1126
+ });
1075
1127
  return {
1076
- result: TopicValidatorResult.Reject
1128
+ result: TopicValidatorResult.Reject,
1129
+ severity
1077
1130
  };
1078
1131
  }
1079
1132
  // Pool pre-check: see if the pool would accept this tx before doing expensive proof verification
1080
1133
  const canAdd = await this.mempools.txPool.canAddPendingTx(tx);
1081
1134
  if (canAdd === 'ignored') {
1135
+ this.logger.verbose(`Ignoring gossiped tx ${tx.getTxHash().toString()}: pool pre-check returned ignored`, {
1136
+ source: source.toString()
1137
+ });
1082
1138
  return {
1083
1139
  result: TopicValidatorResult.Ignore,
1084
1140
  obj: tx
@@ -1088,10 +1144,15 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1088
1144
  const secondStageValidators = this.createSecondStageMessageValidators();
1089
1145
  const secondStageOutcome = await this.runValidations(tx, secondStageValidators);
1090
1146
  if (!secondStageOutcome.allPassed) {
1091
- const { severity } = secondStageOutcome.failure;
1092
- this.peerManager.penalizePeer(source, severity);
1147
+ const { severity, name } = secondStageOutcome.failure;
1148
+ this.logger.verbose(`Rejecting gossiped tx ${tx.getTxHash().toString()}: stage 2 validation failed`, {
1149
+ validator: name,
1150
+ severity,
1151
+ source: source.toString()
1152
+ });
1093
1153
  return {
1094
- result: TopicValidatorResult.Reject
1154
+ result: TopicValidatorResult.Reject,
1155
+ severity
1095
1156
  };
1096
1157
  }
1097
1158
  // Pool add: persist the tx
@@ -1103,7 +1164,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1103
1164
  });
1104
1165
  const wasAccepted = addResult.accepted.some((h)=>h.equals(txHash));
1105
1166
  const wasIgnored = addResult.ignored.some((h)=>h.equals(txHash));
1106
- this.logger.trace(`Validate propagated tx`, {
1167
+ this.logger.verbose(`Validate propagated tx ${txHash.toString()}`, {
1107
1168
  wasAccepted,
1108
1169
  wasIgnored,
1109
1170
  [Attributes.P2P_ID]: source.toString()
@@ -1119,8 +1180,13 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1119
1180
  obj: tx
1120
1181
  };
1121
1182
  } else {
1183
+ this.logger.warn(`Gossiped tx ${txHash.toString()} unexpectedly rejected by pool`, {
1184
+ source: source.toString(),
1185
+ txHash: txHash.toString()
1186
+ });
1122
1187
  return {
1123
- result: TopicValidatorResult.Reject
1188
+ result: TopicValidatorResult.Reject,
1189
+ severity: PeerErrorSeverity.HighToleranceError
1124
1190
  };
1125
1191
  }
1126
1192
  };
@@ -1141,7 +1207,16 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1141
1207
  * Process a checkpoint attestation from a peer.
1142
1208
  * Validates the attestation and adds it to the pool.
1143
1209
  */ async processCheckpointAttestationFromPeer(payloadData, msgId, source) {
1144
- const { result, obj: attestation } = await this.validateReceivedMessage(()=>this.validateAndStoreCheckpointAttestation(source, CheckpointAttestation.fromBuffer(payloadData)), msgId, source, TopicType.checkpoint_attestation);
1210
+ const { result, obj: attestation } = await this.validateReceivedMessage(()=>{
1211
+ const attestation = this.tryDeserialize(()=>CheckpointAttestation.fromBuffer(payloadData), msgId, source);
1212
+ if (!attestation) {
1213
+ return Promise.resolve({
1214
+ result: TopicValidatorResult.Reject,
1215
+ severity: PeerErrorSeverity.LowToleranceError
1216
+ });
1217
+ }
1218
+ return this.validateAndStoreCheckpointAttestation(source, attestation);
1219
+ }, msgId, source, TopicType.checkpoint_attestation);
1145
1220
  if (result !== TopicValidatorResult.Accept || !attestation) {
1146
1221
  return;
1147
1222
  }
@@ -1156,9 +1231,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1156
1231
  const validationResult = await this.checkpointAttestationValidator.validate(attestation);
1157
1232
  if (validationResult.result === 'reject') {
1158
1233
  this.logger.warn(`Penalizing peer ${peerId} for checkpoint attestation validation failure`);
1159
- this.peerManager.penalizePeer(peerId, validationResult.severity);
1160
1234
  return {
1161
- result: TopicValidatorResult.Reject
1235
+ result: TopicValidatorResult.Reject,
1236
+ severity: validationResult.severity
1162
1237
  };
1163
1238
  }
1164
1239
  if (validationResult.result === 'ignore') {
@@ -1185,9 +1260,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1185
1260
  obj: attestation
1186
1261
  };
1187
1262
  }
1188
- // Could not add (cap reached for signer), no need to re-broadcast
1263
+ // Could not add (cap reached for signer), penalize and do not re-broadcast
1189
1264
  if (!added) {
1190
- this.logger.warn(`Dropping checkpoint attestation due to cap`, {
1265
+ this.logger.warn(`Rejecting checkpoint attestation due to cap`, {
1191
1266
  slot: slot.toString(),
1192
1267
  archive: attestation.archive.toString(),
1193
1268
  source: peerId.toString(),
@@ -1195,8 +1270,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1195
1270
  count
1196
1271
  });
1197
1272
  return {
1198
- result: TopicValidatorResult.Ignore,
1199
- obj: attestation
1273
+ result: TopicValidatorResult.Reject,
1274
+ severity: PeerErrorSeverity.HighToleranceError
1200
1275
  };
1201
1276
  }
1202
1277
  // Check if this is a duplicate attestation (signer attested to a different proposal at the same slot)
@@ -1234,9 +1309,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1234
1309
  const validationResult = await this.blockProposalValidator.validate(block);
1235
1310
  if (validationResult.result === 'reject') {
1236
1311
  this.logger.warn(`Penalizing peer ${peerId} for block proposal validation failure`);
1237
- this.peerManager.penalizePeer(peerId, validationResult.severity);
1238
1312
  return {
1239
- result: TopicValidatorResult.Reject
1313
+ result: TopicValidatorResult.Reject,
1314
+ severity: validationResult.severity
1240
1315
  };
1241
1316
  }
1242
1317
  if (validationResult.result === 'ignore') {
@@ -1266,7 +1341,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1266
1341
  }
1267
1342
  // Too many blocks received for this slot and index, penalize peer and do not re-broadcast
1268
1343
  if (!added) {
1269
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError);
1270
1344
  this.logger.warn(`Penalizing peer for block proposal exceeding per-position cap`, {
1271
1345
  ...block.toBlockInfo(),
1272
1346
  indexWithinCheckpoint: block.indexWithinCheckpoint,
@@ -1278,7 +1352,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1278
1352
  result: TopicValidatorResult.Reject,
1279
1353
  metadata: {
1280
1354
  isEquivocated
1281
- }
1355
+ },
1356
+ severity: PeerErrorSeverity.HighToleranceError
1282
1357
  };
1283
1358
  }
1284
1359
  // If this was a duplicate proposal, do not process it, but do invoke the duplicate callback,
@@ -1327,7 +1402,7 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1327
1402
  // Note: Validators do NOT attest to individual blocks, only to checkpoint proposals.
1328
1403
  const isValid = await this.blockReceivedCallback(block, sender);
1329
1404
  if (!isValid) {
1330
- this.logger.warn(`Block proposal validation failed for block ${block.blockNumber}`, block.toBlockInfo());
1405
+ this.logger.info(`Block proposal validation failed for block ${block.blockNumber}`, block.toBlockInfo());
1331
1406
  }
1332
1407
  }
1333
1408
  /**
@@ -1352,9 +1427,9 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1352
1427
  const validationResult = await this.checkpointProposalValidator.validate(checkpoint);
1353
1428
  if (validationResult.result === 'reject') {
1354
1429
  this.logger.warn(`Penalizing peer ${peerId} for checkpoint proposal validation failure`);
1355
- this.peerManager.penalizePeer(peerId, validationResult.severity);
1356
1430
  return {
1357
- result: TopicValidatorResult.Reject
1431
+ result: TopicValidatorResult.Reject,
1432
+ severity: validationResult.severity
1358
1433
  };
1359
1434
  }
1360
1435
  if (validationResult.result === 'ignore') {
@@ -1371,18 +1446,20 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1371
1446
  [Attributes.SLOT_NUMBER]: checkpoint.slotNumber.toString(),
1372
1447
  [Attributes.P2P_ID]: peerId.toString()
1373
1448
  });
1374
- const { result, obj, metadata: { isEquivocated } = {} } = await this.validateAndStoreBlockProposal(peerId, blockProposal);
1375
- if (result === TopicValidatorResult.Reject || !obj || isEquivocated) {
1449
+ const blockProposalResult = await this.validateAndStoreBlockProposal(peerId, blockProposal);
1450
+ const { obj, metadata: { isEquivocated } = {} } = blockProposalResult;
1451
+ if (blockProposalResult.result === TopicValidatorResult.Reject || !obj || isEquivocated) {
1376
1452
  this.logger.debug(`Rejecting checkpoint due to invalid last block proposal`, {
1377
1453
  [Attributes.SLOT_NUMBER]: checkpoint.slotNumber.toString(),
1378
1454
  [Attributes.P2P_ID]: peerId.toString(),
1379
1455
  isEquivocated,
1380
- result
1456
+ result: blockProposalResult.result
1381
1457
  });
1382
1458
  return {
1383
- result: TopicValidatorResult.Reject
1459
+ result: TopicValidatorResult.Reject,
1460
+ severity: 'severity' in blockProposalResult ? blockProposalResult.severity : PeerErrorSeverity.MidToleranceError
1384
1461
  };
1385
- } else if (result === TopicValidatorResult.Accept && obj && !isEquivocated) {
1462
+ } else if (blockProposalResult.result === TopicValidatorResult.Accept && obj && !isEquivocated) {
1386
1463
  processBlock = true;
1387
1464
  }
1388
1465
  }
@@ -1409,7 +1486,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1409
1486
  // Too many checkpoint proposals received for this slot, penalize peer and do not re-broadcast
1410
1487
  // Note: We still return the checkpoint obj so the lastBlock can be processed if valid
1411
1488
  if (!added) {
1412
- this.peerManager.penalizePeer(peerId, PeerErrorSeverity.HighToleranceError);
1413
1489
  this.logger.warn(`Penalizing peer for checkpoint proposal exceeding per-slot cap`, {
1414
1490
  ...checkpoint.toCheckpointInfo(),
1415
1491
  count,
@@ -1421,7 +1497,8 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1421
1497
  metadata: {
1422
1498
  isEquivocated,
1423
1499
  processBlock
1424
- }
1500
+ },
1501
+ severity: PeerErrorSeverity.HighToleranceError
1425
1502
  };
1426
1503
  }
1427
1504
  // If this was a duplicate proposal, do not process it, but do invoke the duplicate callback,
@@ -1471,9 +1548,10 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1471
1548
  archive: checkpoint.archive.toString(),
1472
1549
  source: sender.toString()
1473
1550
  });
1551
+ await this.allNodesCheckpointReceivedCallback(checkpoint, sender);
1474
1552
  // Call the checkpoint received callback with the core version (without lastBlock)
1475
1553
  // to validate and potentially generate attestations
1476
- const attestations = await this.checkpointReceivedCallback(checkpoint, sender);
1554
+ const attestations = await this.validatorCheckpointReceivedCallback(checkpoint, sender);
1477
1555
  if (attestations && attestations.length > 0) {
1478
1556
  // If the callback returned attestations, add them to the pool and propagate them
1479
1557
  await this.mempools.attestationPool.addOwnCheckpointAttestations(attestations);
@@ -1696,7 +1774,12 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1696
1774
  ...this.config.txPublicSetupAllowListExtend ?? []
1697
1775
  ];
1698
1776
  const blockNumber = BlockNumber(currentBlockNumber + 1);
1699
- return createFirstStageTxValidationsForGossipedTransactions(nextSlotTimestamp, blockNumber, this.worldStateSynchronizer, gasFees, this.config.l1ChainId, this.config.rollupVersion, protocolContractsHash, this.archiver, !this.config.disableTransactions, allowedInSetup, this.logger.getBindings());
1777
+ const l1Constants = await this.archiver.getL1Constants();
1778
+ return createFirstStageTxValidationsForGossipedTransactions(nextSlotTimestamp, blockNumber, this.worldStateSynchronizer, gasFees, this.config.l1ChainId, this.config.rollupVersion, protocolContractsHash, this.archiver, !this.config.disableTransactions, allowedInSetup, this.logger.getBindings(), {
1779
+ rollupManaLimit: l1Constants.rollupManaLimit,
1780
+ maxBlockL2Gas: this.config.validateMaxL2BlockGas,
1781
+ maxBlockDAGas: this.config.validateMaxDABlockGas
1782
+ });
1700
1783
  }
1701
1784
  /** Creates the second stage (expensive proof verification) validators for gossiped transactions. */ createSecondStageMessageValidators() {
1702
1785
  return createSecondStageTxValidationsForGossipedTransactions(this.proofVerifier, this.logger.getBindings());
@@ -1717,8 +1800,10 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1717
1800
  });
1718
1801
  // A promise that resolves when all validations have been run
1719
1802
  const allValidations = await Promise.all(validationPromises);
1720
- const failed = allValidations.find((x)=>!x.isValid);
1721
- if (failed) {
1803
+ const failures = allValidations.filter((x)=>!x.isValid);
1804
+ if (failures.length > 0) {
1805
+ // Pick the most severe failure (lowest tolerance = harshest penalty)
1806
+ const failed = maxBy(failures, (f)=>PeerErrorSeverityByHarshness.indexOf(f.severity));
1722
1807
  return {
1723
1808
  allPassed: false,
1724
1809
  failure: {
@@ -1765,19 +1850,6 @@ _dec = trackSpan('Libp2pService.validateAndStoreCheckpointAttestation', (_peerId
1765
1850
  }
1766
1851
  return PeerErrorSeverity.HighToleranceError;
1767
1852
  }
1768
- /**
1769
- * Validate a checkpoint attestation.
1770
- *
1771
- * @param attestation - The checkpoint attestation to validate.
1772
- * @returns True if the checkpoint attestation is valid, false otherwise.
1773
- */ async validateCheckpointAttestation(peerId, attestation) {
1774
- const result = await this.checkpointAttestationValidator.validate(attestation);
1775
- if (result.result === 'reject') {
1776
- this.logger.warn(`Penalizing peer ${peerId} for checkpoint attestation validation failure`);
1777
- this.peerManager.penalizePeer(peerId, result.severity);
1778
- }
1779
- return result;
1780
- }
1781
1853
  getPeerScore(peerId) {
1782
1854
  return this.node.services.pubsub.score.score(peerId.toString());
1783
1855
  }
@@ -53,11 +53,15 @@ export declare class PeerManager implements PeerManagerInterface {
53
53
  heartbeat(): Promise<void>;
54
54
  setupDirectPeersIfValidator(): Promise<void>;
55
55
  /**
56
- * Cleans up expired timeouts.
56
+ * Cleans up expired timeouts and stale failed-auth-handshake entries.
57
57
  *
58
58
  * When peers fail to dial after a number of retries, they are temporarily timed out.
59
59
  * This function removes any peers that have been in the timed out state for too long.
60
60
  * To give them a chance to reconnect.
61
+ *
62
+ * Also evicts entries from the failed-auth-handshake map whose expiry window has passed.
63
+ * Without this, peers that probe once and never reconnect would leave their entries in the
64
+ * map forever, causing an unbounded memory leak.
61
65
  */
62
66
  private cleanupExpiredTimeouts;
63
67
  private processScheduledDisconnects;
@@ -171,4 +175,4 @@ export declare class PeerManager implements PeerManagerInterface {
171
175
  handleAuthRequestFromPeer(_authRequest: AuthRequest, peerId: PeerId): Promise<StatusMessage>;
172
176
  private updateAuthenticatedPeers;
173
177
  }
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlcl9tYW5hZ2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcGVlci1tYW5hZ2VyL3BlZXJfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RixPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRS9ELE9BQU8sS0FBSyxFQUFjLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTTVELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRCxPQUFPLEVBQUUsV0FBVyxFQUFnQixNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQXVCLE1BQU0saUNBQWlDLENBQUM7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJELE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsT0FBTyxFQUFrQixLQUFLLFdBQVcsRUFBRSxNQUFNLG1C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
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlcl9tYW5hZ2VyLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcGVlci1tYW5hZ2VyL3BlZXJfbWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzlELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBR2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RCxPQUFPLEtBQUssRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN4RixPQUFPLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRS9ELE9BQU8sS0FBSyxFQUFjLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBTTVELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRCxPQUFPLEVBQUUsV0FBVyxFQUFnQixNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQXVCLE1BQU0saUNBQWlDLENBQUM7QUFDckYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQy9ELE9BQU8sS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXJELE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sS0FBSyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsT0FBTyxFQUFrQixLQUFLLFdBQVcsRUFBRSxNQUFNLG1C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
@@ -1 +1 @@
1
- {"version":3,"file":"peer_manager.d.ts","sourceRoot":"","sources":["../../../src/services/peer-manager/peer_manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"peer_manager.d.ts","sourceRoot":"","sources":["../../../src/services/peer-manager/peer_manager.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@ import { PeerScoreState } from './peer_scoring.js';
17
17
  const MAX_DIAL_ATTEMPTS = 3;
18
18
  const MAX_CACHED_PEERS = 100;
19
19
  const MAX_CACHED_PEER_AGE_MS = 5 * 60 * 1000; // 5 minutes
20
- const FAILED_PEER_BAN_TIME_MS = 5 * 60 * 1000; // 5 minutes timeout after failing MAX_DIAL_ATTEMPTS
20
+ const DEFAULT_FAILED_PEER_BAN_TIME_MS = 5 * 60 * 1000; // 5 minutes timeout after failing MAX_DIAL_ATTEMPTS
21
21
  const GOODBYE_DIAL_TIMEOUT_MS = 1000;
22
22
  const FAILED_AUTH_HANDSHAKE_EXPIRY_MS = 60 * 60 * 1000; // 1 hour
23
23
  export class PeerManager {
@@ -172,19 +172,27 @@ export class PeerManager {
172
172
  this.initializedPreferredPeers = true;
173
173
  }
174
174
  /**
175
- * Cleans up expired timeouts.
175
+ * Cleans up expired timeouts and stale failed-auth-handshake entries.
176
176
  *
177
177
  * When peers fail to dial after a number of retries, they are temporarily timed out.
178
178
  * This function removes any peers that have been in the timed out state for too long.
179
179
  * To give them a chance to reconnect.
180
+ *
181
+ * Also evicts entries from the failed-auth-handshake map whose expiry window has passed.
182
+ * Without this, peers that probe once and never reconnect would leave their entries in the
183
+ * map forever, causing an unbounded memory leak.
180
184
  */ cleanupExpiredTimeouts() {
181
- // Clean up expired timeouts
182
185
  const now = this.dateProvider.now();
183
186
  for (const [peerId, timedOutPeer] of this.timedOutPeers.entries()){
184
187
  if (now >= timedOutPeer.timeoutUntilMs) {
185
188
  this.timedOutPeers.delete(peerId);
186
189
  }
187
190
  }
191
+ for (const [id, entry] of this.failedAuthHandshakes.entries()){
192
+ if (now - entry.lastFailureTimestamp > FAILED_AUTH_HANDSHAKE_EXPIRY_MS) {
193
+ this.failedAuthHandshakes.delete(id);
194
+ }
195
+ }
188
196
  }
189
197
  /**
190
198
  * Processes scheduled disconnects during heartbeat.
@@ -238,13 +246,17 @@ export class PeerManager {
238
246
  * @param e - The disconnected peer event.
239
247
  */ handleDisconnectedPeerEvent(e) {
240
248
  const peerId = e.detail;
249
+ const peerIdStr = peerId.toString();
241
250
  this.metrics.peerDisconnected(peerId);
242
- this.logger.verbose(`Disconnected from peer ${peerId.toString()}`);
243
- const validatorAddress = this.authenticatedPeerIdToValidatorAddress.get(peerId.toString());
251
+ this.logger.verbose(`Disconnected from peer ${peerIdStr}`);
252
+ const validatorAddress = this.authenticatedPeerIdToValidatorAddress.get(peerIdStr);
244
253
  if (validatorAddress !== undefined) {
245
- this.logger.info(`Removing authentication for validator ${validatorAddress} at peer id ${peerId.toString()} due to disconnection`);
254
+ this.logger.info(`Removing authentication for validator ${validatorAddress} at peer id ${peerIdStr} due to disconnection`);
246
255
  this.authenticatedValidatorAddressToPeerId.delete(validatorAddress.toString());
247
- this.authenticatedPeerIdToValidatorAddress.delete(peerId.toString());
256
+ this.authenticatedPeerIdToValidatorAddress.delete(peerIdStr);
257
+ }
258
+ if (this.peerScoring.getScoreState(peerIdStr) === PeerScoreState.Healthy) {
259
+ this.peerScoring.removePeer(peerIdStr);
248
260
  }
249
261
  }
250
262
  registerThisValidatorAddresses(address) {
@@ -624,7 +636,7 @@ export class PeerManager {
624
636
  // Add to timed out peers
625
637
  this.timedOutPeers.set(id, {
626
638
  peerId: id,
627
- timeoutUntilMs: this.dateProvider.now() + FAILED_PEER_BAN_TIME_MS
639
+ timeoutUntilMs: this.dateProvider.now() + (this.config.peerFailedBanTimeMs ?? DEFAULT_FAILED_PEER_BAN_TIME_MS)
628
640
  });
629
641
  }
630
642
  }
@@ -774,6 +786,8 @@ export class PeerManager {
774
786
  ...logData,
775
787
  address: sender.toString()
776
788
  });
789
+ this.markAuthHandshakeFailed(peerId);
790
+ this.markPeerForDisconnect(peerId);
777
791
  return;
778
792
  }
779
793
  this.markAuthHandshakeSuccess(peerId);
@@ -1,3 +1,4 @@
1
+ import { DateProvider } from '@aztec/foundation/timer';
1
2
  import { PeerErrorSeverity } from '@aztec/stdlib/p2p';
2
3
  import { type TelemetryClient } from '@aztec/telemetry-client';
3
4
  import type { PeerId } from '@libp2p/interface';
@@ -8,6 +9,7 @@ export declare enum PeerScoreState {
8
9
  Healthy = 2
9
10
  }
10
11
  export declare class PeerScoring {
12
+ private readonly dateProvider;
11
13
  private logger;
12
14
  private scores;
13
15
  private lastUpdateTime;
@@ -17,10 +19,11 @@ export declare class PeerScoring {
17
19
  [key in PeerErrorSeverity]: number;
18
20
  };
19
21
  private peerStateCounter;
20
- constructor(config: P2PConfig, telemetry?: TelemetryClient);
22
+ constructor(config: P2PConfig, telemetry?: TelemetryClient, dateProvider?: DateProvider);
21
23
  penalizePeer(peerId: PeerId, penalty: PeerErrorSeverity): number;
22
24
  updateScore(peerId: string, scoreDelta: number): number;
23
25
  decayAllScores(): void;
26
+ removePeer(peerId: string): void;
24
27
  getScore(peerId: string): number;
25
28
  getScoreState(peerId: string): PeerScoreState;
26
29
  getStats(): {
@@ -30,4 +33,4 @@ export declare class PeerScoring {
30
33
  bannedCount: number;
31
34
  };
32
35
  }
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlcl9zY29yaW5nLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcGVlci1tYW5hZ2VyL3BlZXJfc2NvcmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBR0wsS0FBSyxlQUFlLEVBSXJCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsT0FBTyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFaEQsT0FBTyxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUF1QmpELG9CQUFZLGNBQWM7SUFDeEIsTUFBTSxJQUFBO0lBQ04sVUFBVSxJQUFBO0lBQ1YsT0FBTyxJQUFBO0NBQ1I7QUFnQkQscUJBQWEsV0FBVztJQUN0QixPQUFPLENBQUMsTUFBTSxDQUFvQztJQUNsRCxPQUFPLENBQUMsTUFBTSxDQUFrQztJQUNoRCxPQUFPLENBQUMsY0FBYyxDQUFrQztJQUN4RCxPQUFPLENBQUMsYUFBYSxDQUFhO0lBQ2xDLE9BQU8sQ0FBQyxXQUFXLENBQU87SUFDMUIsYUFBYSxFQUFFO1NBQUcsR0FBRyxJQUFJLGlCQUFpQixHQUFHLE1BQU07S0FBRSxDQUFDO0lBRXRELE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBZ0I7SUFFeEMsWUFBWSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsR0FBRSxlQUFzQyxFQWdCL0U7SUFFTSxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsaUJBQWlCLFVBTTdEO0lBRUQsV0FBVyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sR0FBRyxNQUFNLENBaUJ0RDtJQUVELGNBQWMsSUFBSSxJQUFJLENBWXJCO0lBRUQsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUUvQjtJQUVNLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLGNBQWMsQ0FVbkQ7SUFFRCxRQUFRLElBQUk7UUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDO1FBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQztRQUFDLGVBQWUsRUFBRSxNQUFNLENBQUM7UUFBQyxXQUFXLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0E0QnRHO0NBQ0YifQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVlcl9zY29yaW5nLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcGVlci1tYW5hZ2VyL3BlZXJfc2NvcmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEQsT0FBTyxFQUdMLEtBQUssZUFBZSxFQUlyQixNQUFNLHlCQUF5QixDQUFDO0FBRWpDLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWhELE9BQU8sS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBdUJqRCxvQkFBWSxjQUFjO0lBQ3hCLE1BQU0sSUFBQTtJQUNOLFVBQVUsSUFBQTtJQUNWLE9BQU8sSUFBQTtDQUNSO0FBaUJELHFCQUFhLFdBQVc7SUFhcEIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxZQUFZO0lBWi9CLE9BQU8sQ0FBQyxNQUFNLENBQW9DO0lBQ2xELE9BQU8sQ0FBQyxNQUFNLENBQWtDO0lBQ2hELE9BQU8sQ0FBQyxjQUFjLENBQWtDO0lBQ3hELE9BQU8sQ0FBQyxhQUFhLENBQWE7SUFDbEMsT0FBTyxDQUFDLFdBQVcsQ0FBTztJQUMxQixhQUFhLEVBQUU7U0FBRyxHQUFHLElBQUksaUJBQWlCLEdBQUcsTUFBTTtLQUFFLENBQUM7SUFFdEQsT0FBTyxDQUFDLGdCQUFnQixDQUFnQjtJQUV4QyxZQUNFLE1BQU0sRUFBRSxTQUFTLEVBQ2pCLFNBQVMsR0FBRSxlQUFzQyxFQUNoQyxZQUFZLEdBQUUsWUFBaUMsRUFpQmpFO0lBRU0sWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLGlCQUFpQixVQU03RDtJQUVELFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEdBQUcsTUFBTSxDQWlCdEQ7SUFFRCxjQUFjLElBQUksSUFBSSxDQWlCckI7SUFFRCxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBRy9CO0lBRUQsUUFBUSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUUvQjtJQUVNLGFBQWEsQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLGNBQWMsQ0FVbkQ7SUFFRCxRQUFRLElBQUk7UUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDO1FBQUMsWUFBWSxFQUFFLE1BQU0sQ0FBQztRQUFDLGVBQWUsRUFBRSxNQUFNLENBQUM7UUFBQyxXQUFXLEVBQUUsTUFBTSxDQUFBO0tBQUUsQ0E0QnRHO0NBQ0YifQ==