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

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 (443) hide show
  1. package/dest/bootstrap/bootstrap.d.ts +4 -3
  2. package/dest/bootstrap/bootstrap.d.ts.map +1 -1
  3. package/dest/bootstrap/bootstrap.js +4 -4
  4. package/dest/client/factory.d.ts +2 -2
  5. package/dest/client/factory.d.ts.map +1 -1
  6. package/dest/client/factory.js +8 -8
  7. package/dest/client/index.d.ts +1 -1
  8. package/dest/client/interface.d.ts +18 -3
  9. package/dest/client/interface.d.ts.map +1 -1
  10. package/dest/client/p2p_client.d.ts +16 -37
  11. package/dest/client/p2p_client.d.ts.map +1 -1
  12. package/dest/client/p2p_client.js +464 -126
  13. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts +2 -0
  14. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.d.ts.map +1 -0
  15. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker.js +305 -0
  16. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts +73 -0
  17. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.d.ts.map +1 -0
  18. package/dest/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.js +8 -0
  19. package/dest/config.d.ts +69 -60
  20. package/dest/config.d.ts.map +1 -1
  21. package/dest/config.js +23 -14
  22. package/dest/enr/generate-enr.d.ts +1 -1
  23. package/dest/enr/index.d.ts +1 -1
  24. package/dest/errors/attestation-pool.error.d.ts +7 -0
  25. package/dest/errors/attestation-pool.error.d.ts.map +1 -0
  26. package/dest/errors/attestation-pool.error.js +12 -0
  27. package/dest/errors/reqresp.error.d.ts +1 -1
  28. package/dest/errors/reqresp.error.d.ts.map +1 -1
  29. package/dest/index.d.ts +1 -1
  30. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts +77 -36
  31. package/dest/mem_pools/attestation_pool/attestation_pool.d.ts.map +1 -1
  32. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts +1 -1
  33. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.d.ts.map +1 -1
  34. package/dest/mem_pools/attestation_pool/attestation_pool_test_suite.js +241 -266
  35. package/dest/mem_pools/attestation_pool/index.d.ts +1 -1
  36. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts +24 -14
  37. package/dest/mem_pools/attestation_pool/kv_attestation_pool.d.ts.map +1 -1
  38. package/dest/mem_pools/attestation_pool/kv_attestation_pool.js +123 -95
  39. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts +18 -12
  40. package/dest/mem_pools/attestation_pool/memory_attestation_pool.d.ts.map +1 -1
  41. package/dest/mem_pools/attestation_pool/memory_attestation_pool.js +91 -108
  42. package/dest/mem_pools/attestation_pool/mocks.d.ts +234 -10
  43. package/dest/mem_pools/attestation_pool/mocks.d.ts.map +1 -1
  44. package/dest/mem_pools/attestation_pool/mocks.js +17 -13
  45. package/dest/mem_pools/index.d.ts +1 -1
  46. package/dest/mem_pools/instrumentation.d.ts +9 -1
  47. package/dest/mem_pools/instrumentation.d.ts.map +1 -1
  48. package/dest/mem_pools/instrumentation.js +37 -10
  49. package/dest/mem_pools/interface.d.ts +3 -4
  50. package/dest/mem_pools/interface.d.ts.map +1 -1
  51. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts +33 -58
  52. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.d.ts.map +1 -1
  53. package/dest/mem_pools/tx_pool/aztec_kv_tx_pool.js +314 -335
  54. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts +32 -0
  55. package/dest/mem_pools/tx_pool/eviction/eviction_manager.d.ts.map +1 -0
  56. package/dest/mem_pools/tx_pool/eviction/eviction_manager.js +112 -0
  57. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts +157 -0
  58. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.d.ts.map +1 -0
  59. package/dest/mem_pools/tx_pool/eviction/eviction_strategy.js +52 -0
  60. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts +16 -0
  61. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.d.ts.map +1 -0
  62. package/dest/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.js +122 -0
  63. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts +17 -0
  64. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.d.ts.map +1 -0
  65. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.js +84 -0
  66. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts +19 -0
  67. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.d.ts.map +1 -0
  68. package/dest/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.js +78 -0
  69. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts +26 -0
  70. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.d.ts.map +1 -0
  71. package/dest/mem_pools/tx_pool/eviction/low_priority_eviction_rule.js +84 -0
  72. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts +25 -0
  73. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.d.ts.map +1 -0
  74. package/dest/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.js +57 -0
  75. package/dest/mem_pools/tx_pool/index.d.ts +1 -2
  76. package/dest/mem_pools/tx_pool/index.d.ts.map +1 -1
  77. package/dest/mem_pools/tx_pool/index.js +0 -1
  78. package/dest/mem_pools/tx_pool/priority.d.ts +5 -1
  79. package/dest/mem_pools/tx_pool/priority.d.ts.map +1 -1
  80. package/dest/mem_pools/tx_pool/priority.js +6 -1
  81. package/dest/mem_pools/tx_pool/tx_pool.d.ts +11 -6
  82. package/dest/mem_pools/tx_pool/tx_pool.d.ts.map +1 -1
  83. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts +1 -1
  84. package/dest/mem_pools/tx_pool/tx_pool_test_suite.d.ts.map +1 -1
  85. package/dest/mem_pools/tx_pool/tx_pool_test_suite.js +30 -24
  86. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts +7 -6
  87. package/dest/msg_validators/attestation_validator/attestation_validator.d.ts.map +1 -1
  88. package/dest/msg_validators/attestation_validator/attestation_validator.js +57 -24
  89. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts +20 -0
  90. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.d.ts.map +1 -0
  91. package/dest/msg_validators/attestation_validator/fisherman_attestation_validator.js +76 -0
  92. package/dest/msg_validators/attestation_validator/index.d.ts +2 -1
  93. package/dest/msg_validators/attestation_validator/index.d.ts.map +1 -1
  94. package/dest/msg_validators/attestation_validator/index.js +1 -0
  95. package/dest/msg_validators/clock_tolerance.d.ts +21 -0
  96. package/dest/msg_validators/clock_tolerance.d.ts.map +1 -0
  97. package/dest/msg_validators/clock_tolerance.js +37 -0
  98. package/dest/msg_validators/index.d.ts +2 -2
  99. package/dest/msg_validators/index.d.ts.map +1 -1
  100. package/dest/msg_validators/index.js +1 -1
  101. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts +1 -1
  102. package/dest/msg_validators/msg_seen_validator/msg_seen_validator.d.ts.map +1 -1
  103. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts +9 -0
  104. package/dest/msg_validators/proposal_validator/block_proposal_validator.d.ts.map +1 -0
  105. package/dest/msg_validators/proposal_validator/block_proposal_validator.js +6 -0
  106. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts +9 -0
  107. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.d.ts.map +1 -0
  108. package/dest/msg_validators/proposal_validator/checkpoint_proposal_validator.js +6 -0
  109. package/dest/msg_validators/proposal_validator/index.d.ts +4 -0
  110. package/dest/msg_validators/proposal_validator/index.d.ts.map +1 -0
  111. package/dest/msg_validators/proposal_validator/index.js +3 -0
  112. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts +13 -0
  113. package/dest/msg_validators/proposal_validator/proposal_validator.d.ts.map +1 -0
  114. package/dest/msg_validators/proposal_validator/proposal_validator.js +104 -0
  115. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts +23 -0
  116. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.d.ts.map +1 -0
  117. package/dest/msg_validators/proposal_validator/proposal_validator_test_suite.js +212 -0
  118. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts +1 -1
  119. package/dest/msg_validators/tx_validator/aggregate_tx_validator.d.ts.map +1 -1
  120. package/dest/msg_validators/tx_validator/allowed_public_setup.d.ts +1 -1
  121. package/dest/msg_validators/tx_validator/archive_cache.d.ts +2 -2
  122. package/dest/msg_validators/tx_validator/archive_cache.d.ts.map +1 -1
  123. package/dest/msg_validators/tx_validator/block_header_validator.d.ts +4 -3
  124. package/dest/msg_validators/tx_validator/block_header_validator.d.ts.map +1 -1
  125. package/dest/msg_validators/tx_validator/block_header_validator.js +4 -3
  126. package/dest/msg_validators/tx_validator/data_validator.d.ts +3 -1
  127. package/dest/msg_validators/tx_validator/data_validator.d.ts.map +1 -1
  128. package/dest/msg_validators/tx_validator/data_validator.js +4 -1
  129. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts +3 -2
  130. package/dest/msg_validators/tx_validator/double_spend_validator.d.ts.map +1 -1
  131. package/dest/msg_validators/tx_validator/double_spend_validator.js +3 -2
  132. package/dest/msg_validators/tx_validator/factory.d.ts +10 -4
  133. package/dest/msg_validators/tx_validator/factory.d.ts.map +1 -1
  134. package/dest/msg_validators/tx_validator/factory.js +22 -12
  135. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts +10 -0
  136. package/dest/msg_validators/tx_validator/fee_payer_balance.d.ts.map +1 -0
  137. package/dest/msg_validators/tx_validator/fee_payer_balance.js +20 -0
  138. package/dest/msg_validators/tx_validator/gas_validator.d.ts +3 -2
  139. package/dest/msg_validators/tx_validator/gas_validator.d.ts.map +1 -1
  140. package/dest/msg_validators/tx_validator/gas_validator.js +11 -16
  141. package/dest/msg_validators/tx_validator/index.d.ts +2 -1
  142. package/dest/msg_validators/tx_validator/index.d.ts.map +1 -1
  143. package/dest/msg_validators/tx_validator/index.js +1 -0
  144. package/dest/msg_validators/tx_validator/metadata_validator.d.ts +4 -3
  145. package/dest/msg_validators/tx_validator/metadata_validator.d.ts.map +1 -1
  146. package/dest/msg_validators/tx_validator/metadata_validator.js +2 -2
  147. package/dest/msg_validators/tx_validator/phases_validator.d.ts +3 -2
  148. package/dest/msg_validators/tx_validator/phases_validator.d.ts.map +1 -1
  149. package/dest/msg_validators/tx_validator/phases_validator.js +6 -4
  150. package/dest/msg_validators/tx_validator/size_validator.d.ts +8 -0
  151. package/dest/msg_validators/tx_validator/size_validator.d.ts.map +1 -0
  152. package/dest/msg_validators/tx_validator/size_validator.js +23 -0
  153. package/dest/msg_validators/tx_validator/test_utils.d.ts +2 -2
  154. package/dest/msg_validators/tx_validator/test_utils.d.ts.map +1 -1
  155. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts +5 -3
  156. package/dest/msg_validators/tx_validator/timestamp_validator.d.ts.map +1 -1
  157. package/dest/msg_validators/tx_validator/timestamp_validator.js +2 -2
  158. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts +3 -2
  159. package/dest/msg_validators/tx_validator/tx_permitted_validator.d.ts.map +1 -1
  160. package/dest/msg_validators/tx_validator/tx_permitted_validator.js +2 -2
  161. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts +3 -2
  162. package/dest/msg_validators/tx_validator/tx_proof_validator.d.ts.map +1 -1
  163. package/dest/msg_validators/tx_validator/tx_proof_validator.js +2 -2
  164. package/dest/services/data_store.d.ts +1 -1
  165. package/dest/services/data_store.d.ts.map +1 -1
  166. package/dest/services/discv5/discV5_service.d.ts +1 -1
  167. package/dest/services/discv5/discV5_service.d.ts.map +1 -1
  168. package/dest/services/discv5/discV5_service.js +1 -1
  169. package/dest/services/dummy_service.d.ts +18 -2
  170. package/dest/services/dummy_service.d.ts.map +1 -1
  171. package/dest/services/dummy_service.js +42 -0
  172. package/dest/services/encoding.d.ts +1 -1
  173. package/dest/services/encoding.d.ts.map +1 -1
  174. package/dest/services/encoding.js +7 -6
  175. package/dest/services/gossipsub/scoring.d.ts +1 -1
  176. package/dest/services/index.d.ts +1 -1
  177. package/dest/services/libp2p/instrumentation.d.ts +3 -1
  178. package/dest/services/libp2p/instrumentation.d.ts.map +1 -1
  179. package/dest/services/libp2p/instrumentation.js +36 -71
  180. package/dest/services/libp2p/libp2p_service.d.ts +48 -81
  181. package/dest/services/libp2p/libp2p_service.d.ts.map +1 -1
  182. package/dest/services/libp2p/libp2p_service.js +926 -193
  183. package/dest/services/peer-manager/interface.d.ts +1 -1
  184. package/dest/services/peer-manager/metrics.d.ts +9 -2
  185. package/dest/services/peer-manager/metrics.d.ts.map +1 -1
  186. package/dest/services/peer-manager/metrics.js +39 -16
  187. package/dest/services/peer-manager/peer_manager.d.ts +2 -33
  188. package/dest/services/peer-manager/peer_manager.d.ts.map +1 -1
  189. package/dest/services/peer-manager/peer_manager.js +6 -12
  190. package/dest/services/peer-manager/peer_scoring.d.ts +7 -2
  191. package/dest/services/peer-manager/peer_scoring.d.ts.map +1 -1
  192. package/dest/services/peer-manager/peer_scoring.js +43 -2
  193. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts +47 -0
  194. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.d.ts.map +1 -0
  195. package/dest/services/reqresp/batch-tx-requester/batch_tx_requester.js +566 -0
  196. package/dest/services/reqresp/batch-tx-requester/config.d.ts +17 -0
  197. package/dest/services/reqresp/batch-tx-requester/config.d.ts.map +1 -0
  198. package/dest/services/reqresp/batch-tx-requester/config.js +27 -0
  199. package/dest/services/reqresp/batch-tx-requester/interface.d.ts +50 -0
  200. package/dest/services/reqresp/batch-tx-requester/interface.d.ts.map +1 -0
  201. package/dest/services/reqresp/batch-tx-requester/interface.js +1 -0
  202. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts +37 -0
  203. package/dest/services/reqresp/batch-tx-requester/missing_txs.d.ts.map +1 -0
  204. package/dest/services/reqresp/batch-tx-requester/missing_txs.js +151 -0
  205. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts +54 -0
  206. package/dest/services/reqresp/batch-tx-requester/peer_collection.d.ts.map +1 -0
  207. package/dest/services/reqresp/batch-tx-requester/peer_collection.js +139 -0
  208. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts +20 -0
  209. package/dest/services/reqresp/batch-tx-requester/tx_validator.d.ts.map +1 -0
  210. package/dest/services/reqresp/batch-tx-requester/tx_validator.js +21 -0
  211. package/dest/services/reqresp/config.d.ts +1 -1
  212. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts +22 -3
  213. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.d.ts.map +1 -1
  214. package/dest/services/reqresp/connection-sampler/batch_connection_sampler.js +63 -4
  215. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts +2 -4
  216. package/dest/services/reqresp/connection-sampler/connection_sampler.d.ts.map +1 -1
  217. package/dest/services/reqresp/connection-sampler/connection_sampler.js +12 -0
  218. package/dest/services/reqresp/constants.d.ts +12 -0
  219. package/dest/services/reqresp/constants.d.ts.map +1 -0
  220. package/dest/services/reqresp/constants.js +7 -0
  221. package/dest/services/reqresp/index.d.ts +1 -1
  222. package/dest/services/reqresp/interface.d.ts +4 -2
  223. package/dest/services/reqresp/interface.d.ts.map +1 -1
  224. package/dest/services/reqresp/interface.js +1 -1
  225. package/dest/services/reqresp/metrics.d.ts +6 -5
  226. package/dest/services/reqresp/metrics.d.ts.map +1 -1
  227. package/dest/services/reqresp/metrics.js +17 -21
  228. package/dest/services/reqresp/protocols/auth.d.ts +2 -2
  229. package/dest/services/reqresp/protocols/auth.d.ts.map +1 -1
  230. package/dest/services/reqresp/protocols/auth.js +2 -2
  231. package/dest/services/reqresp/protocols/block.d.ts +1 -1
  232. package/dest/services/reqresp/protocols/block.d.ts.map +1 -1
  233. package/dest/services/reqresp/protocols/block.js +3 -2
  234. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts +5 -1
  235. package/dest/services/reqresp/protocols/block_txs/bitvector.d.ts.map +1 -1
  236. package/dest/services/reqresp/protocols/block_txs/bitvector.js +12 -0
  237. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts +1 -1
  238. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.d.ts.map +1 -1
  239. package/dest/services/reqresp/protocols/block_txs/block_txs_handler.js +14 -1
  240. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts +17 -7
  241. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.d.ts.map +1 -1
  242. package/dest/services/reqresp/protocols/block_txs/block_txs_reqresp.js +34 -4
  243. package/dest/services/reqresp/protocols/block_txs/index.d.ts +1 -1
  244. package/dest/services/reqresp/protocols/goodbye.d.ts +1 -1
  245. package/dest/services/reqresp/protocols/goodbye.d.ts.map +1 -1
  246. package/dest/services/reqresp/protocols/index.d.ts +1 -1
  247. package/dest/services/reqresp/protocols/ping.d.ts +1 -1
  248. package/dest/services/reqresp/protocols/status.d.ts +6 -5
  249. package/dest/services/reqresp/protocols/status.d.ts.map +1 -1
  250. package/dest/services/reqresp/protocols/status.js +7 -3
  251. package/dest/services/reqresp/protocols/tx.d.ts +2 -3
  252. package/dest/services/reqresp/protocols/tx.d.ts.map +1 -1
  253. package/dest/services/reqresp/rate-limiter/index.d.ts +1 -1
  254. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts +2 -2
  255. package/dest/services/reqresp/rate-limiter/rate_limiter.d.ts.map +1 -1
  256. package/dest/services/reqresp/rate-limiter/rate_limits.d.ts +1 -1
  257. package/dest/services/reqresp/reqresp.d.ts +6 -41
  258. package/dest/services/reqresp/reqresp.d.ts.map +1 -1
  259. package/dest/services/reqresp/reqresp.js +460 -46
  260. package/dest/services/reqresp/status.d.ts +2 -2
  261. package/dest/services/reqresp/status.d.ts.map +1 -1
  262. package/dest/services/service.d.ts +19 -3
  263. package/dest/services/service.d.ts.map +1 -1
  264. package/dest/services/tx_collection/config.d.ts +4 -1
  265. package/dest/services/tx_collection/config.d.ts.map +1 -1
  266. package/dest/services/tx_collection/config.js +10 -2
  267. package/dest/services/tx_collection/fast_tx_collection.d.ts +9 -12
  268. package/dest/services/tx_collection/fast_tx_collection.d.ts.map +1 -1
  269. package/dest/services/tx_collection/fast_tx_collection.js +16 -5
  270. package/dest/services/tx_collection/index.d.ts +2 -1
  271. package/dest/services/tx_collection/index.d.ts.map +1 -1
  272. package/dest/services/tx_collection/index.js +1 -0
  273. package/dest/services/tx_collection/instrumentation.d.ts +1 -1
  274. package/dest/services/tx_collection/instrumentation.d.ts.map +1 -1
  275. package/dest/services/tx_collection/instrumentation.js +10 -13
  276. package/dest/services/tx_collection/proposal_tx_collector.d.ts +48 -0
  277. package/dest/services/tx_collection/proposal_tx_collector.d.ts.map +1 -0
  278. package/dest/services/tx_collection/proposal_tx_collector.js +50 -0
  279. package/dest/services/tx_collection/slow_tx_collection.d.ts +4 -5
  280. package/dest/services/tx_collection/slow_tx_collection.d.ts.map +1 -1
  281. package/dest/services/tx_collection/slow_tx_collection.js +2 -1
  282. package/dest/services/tx_collection/tx_collection.d.ts +10 -10
  283. package/dest/services/tx_collection/tx_collection.d.ts.map +1 -1
  284. package/dest/services/tx_collection/tx_collection.js +5 -5
  285. package/dest/services/tx_collection/tx_collection_sink.d.ts +3 -3
  286. package/dest/services/tx_collection/tx_collection_sink.d.ts.map +1 -1
  287. package/dest/services/tx_collection/tx_source.d.ts +1 -1
  288. package/dest/services/tx_collection/tx_source.d.ts.map +1 -1
  289. package/dest/services/tx_provider.d.ts +4 -2
  290. package/dest/services/tx_provider.d.ts.map +1 -1
  291. package/dest/services/tx_provider.js +11 -2
  292. package/dest/services/tx_provider_instrumentation.d.ts +5 -2
  293. package/dest/services/tx_provider_instrumentation.d.ts.map +1 -1
  294. package/dest/services/tx_provider_instrumentation.js +14 -14
  295. package/dest/test-helpers/generate-peer-id-private-keys.d.ts +1 -1
  296. package/dest/test-helpers/get-ports.d.ts +1 -1
  297. package/dest/test-helpers/get-ports.d.ts.map +1 -1
  298. package/dest/test-helpers/index.d.ts +3 -1
  299. package/dest/test-helpers/index.d.ts.map +1 -1
  300. package/dest/test-helpers/index.js +2 -0
  301. package/dest/test-helpers/make-enrs.d.ts +1 -1
  302. package/dest/test-helpers/make-test-p2p-clients.d.ts +2 -2
  303. package/dest/test-helpers/make-test-p2p-clients.d.ts.map +1 -1
  304. package/dest/test-helpers/mock-pubsub.d.ts +4 -4
  305. package/dest/test-helpers/mock-pubsub.d.ts.map +1 -1
  306. package/dest/test-helpers/mock-tx-helpers.d.ts +2 -2
  307. package/dest/test-helpers/mock-tx-helpers.d.ts.map +1 -1
  308. package/dest/test-helpers/mock-tx-helpers.js +1 -1
  309. package/dest/test-helpers/reqresp-nodes.d.ts +2 -2
  310. package/dest/test-helpers/reqresp-nodes.d.ts.map +1 -1
  311. package/dest/test-helpers/test_tx_provider.d.ts +40 -0
  312. package/dest/test-helpers/test_tx_provider.d.ts.map +1 -0
  313. package/dest/test-helpers/test_tx_provider.js +41 -0
  314. package/dest/test-helpers/testbench-utils.d.ts +156 -0
  315. package/dest/test-helpers/testbench-utils.d.ts.map +1 -0
  316. package/dest/test-helpers/testbench-utils.js +296 -0
  317. package/dest/testbench/p2p_client_testbench_worker.d.ts +28 -2
  318. package/dest/testbench/p2p_client_testbench_worker.d.ts.map +1 -1
  319. package/dest/testbench/p2p_client_testbench_worker.js +218 -120
  320. package/dest/testbench/parse_log_file.d.ts +1 -1
  321. package/dest/testbench/testbench.d.ts +1 -1
  322. package/dest/testbench/worker_client_manager.d.ts +51 -6
  323. package/dest/testbench/worker_client_manager.d.ts.map +1 -1
  324. package/dest/testbench/worker_client_manager.js +226 -39
  325. package/dest/types/index.d.ts +1 -1
  326. package/dest/util.d.ts +2 -1
  327. package/dest/util.d.ts.map +1 -1
  328. package/dest/util.js +11 -2
  329. package/dest/versioning.d.ts +1 -1
  330. package/package.json +19 -18
  331. package/src/bootstrap/bootstrap.ts +7 -4
  332. package/src/client/factory.ts +11 -20
  333. package/src/client/interface.ts +20 -2
  334. package/src/client/p2p_client.ts +108 -155
  335. package/src/client/test/tx_proposal_collector/README.md +227 -0
  336. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker.ts +336 -0
  337. package/src/client/test/tx_proposal_collector/proposal_tx_collector_worker_protocol.ts +43 -0
  338. package/src/config.ts +36 -20
  339. package/src/errors/attestation-pool.error.ts +13 -0
  340. package/src/mem_pools/attestation_pool/attestation_pool.ts +86 -35
  341. package/src/mem_pools/attestation_pool/attestation_pool_test_suite.ts +243 -278
  342. package/src/mem_pools/attestation_pool/kv_attestation_pool.ts +175 -111
  343. package/src/mem_pools/attestation_pool/memory_attestation_pool.ts +147 -136
  344. package/src/mem_pools/attestation_pool/mocks.ts +21 -15
  345. package/src/mem_pools/instrumentation.ts +48 -10
  346. package/src/mem_pools/interface.ts +2 -4
  347. package/src/mem_pools/tx_pool/README.md +270 -0
  348. package/src/mem_pools/tx_pool/aztec_kv_tx_pool.ts +367 -371
  349. package/src/mem_pools/tx_pool/eviction/eviction_manager.ts +132 -0
  350. package/src/mem_pools/tx_pool/eviction/eviction_strategy.ts +208 -0
  351. package/src/mem_pools/tx_pool/eviction/fee_payer_balance_eviction_rule.ts +162 -0
  352. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_mining_rule.ts +104 -0
  353. package/src/mem_pools/tx_pool/eviction/invalid_txs_after_reorg_rule.ts +93 -0
  354. package/src/mem_pools/tx_pool/eviction/low_priority_eviction_rule.ts +106 -0
  355. package/src/mem_pools/tx_pool/eviction/nullifier_conflict_pre_add_rule.ts +75 -0
  356. package/src/mem_pools/tx_pool/index.ts +0 -1
  357. package/src/mem_pools/tx_pool/priority.ts +8 -1
  358. package/src/mem_pools/tx_pool/tx_pool.ts +11 -5
  359. package/src/mem_pools/tx_pool/tx_pool_test_suite.ts +23 -17
  360. package/src/msg_validators/attestation_validator/attestation_validator.ts +45 -32
  361. package/src/msg_validators/attestation_validator/fisherman_attestation_validator.ts +94 -0
  362. package/src/msg_validators/attestation_validator/index.ts +1 -0
  363. package/src/msg_validators/clock_tolerance.ts +51 -0
  364. package/src/msg_validators/index.ts +1 -1
  365. package/src/msg_validators/proposal_validator/block_proposal_validator.ts +10 -0
  366. package/src/msg_validators/proposal_validator/checkpoint_proposal_validator.ts +13 -0
  367. package/src/msg_validators/proposal_validator/index.ts +3 -0
  368. package/src/msg_validators/proposal_validator/proposal_validator.ts +92 -0
  369. package/src/msg_validators/proposal_validator/proposal_validator_test_suite.ts +230 -0
  370. package/src/msg_validators/tx_validator/archive_cache.ts +1 -1
  371. package/src/msg_validators/tx_validator/block_header_validator.ts +8 -5
  372. package/src/msg_validators/tx_validator/data_validator.ts +18 -6
  373. package/src/msg_validators/tx_validator/double_spend_validator.ts +4 -3
  374. package/src/msg_validators/tx_validator/factory.ts +67 -25
  375. package/src/msg_validators/tx_validator/fee_payer_balance.ts +40 -0
  376. package/src/msg_validators/tx_validator/gas_validator.ts +17 -28
  377. package/src/msg_validators/tx_validator/index.ts +1 -0
  378. package/src/msg_validators/tx_validator/metadata_validator.ts +19 -8
  379. package/src/msg_validators/tx_validator/phases_validator.ts +8 -4
  380. package/src/msg_validators/tx_validator/size_validator.ts +22 -0
  381. package/src/msg_validators/tx_validator/test_utils.ts +1 -1
  382. package/src/msg_validators/tx_validator/timestamp_validator.ts +11 -5
  383. package/src/msg_validators/tx_validator/tx_permitted_validator.ts +8 -3
  384. package/src/msg_validators/tx_validator/tx_proof_validator.ts +8 -3
  385. package/src/services/discv5/discV5_service.ts +1 -1
  386. package/src/services/dummy_service.ts +51 -0
  387. package/src/services/encoding.ts +6 -5
  388. package/src/services/libp2p/instrumentation.ts +39 -71
  389. package/src/services/libp2p/libp2p_service.ts +628 -194
  390. package/src/services/peer-manager/metrics.ts +44 -16
  391. package/src/services/peer-manager/peer_manager.ts +7 -4
  392. package/src/services/peer-manager/peer_scoring.ts +45 -3
  393. package/src/services/reqresp/batch-tx-requester/README.md +305 -0
  394. package/src/services/reqresp/batch-tx-requester/batch_tx_requester.ts +706 -0
  395. package/src/services/reqresp/batch-tx-requester/config.ts +40 -0
  396. package/src/services/reqresp/batch-tx-requester/interface.ts +57 -0
  397. package/src/services/reqresp/batch-tx-requester/missing_txs.ts +209 -0
  398. package/src/services/reqresp/batch-tx-requester/peer_collection.ts +205 -0
  399. package/src/services/reqresp/batch-tx-requester/tx_validator.ts +37 -0
  400. package/src/services/reqresp/connection-sampler/batch_connection_sampler.ts +65 -4
  401. package/src/services/reqresp/connection-sampler/connection_sampler.ts +19 -1
  402. package/src/services/reqresp/constants.ts +14 -0
  403. package/src/services/reqresp/interface.ts +4 -1
  404. package/src/services/reqresp/metrics.ts +36 -27
  405. package/src/services/reqresp/protocols/auth.ts +2 -2
  406. package/src/services/reqresp/protocols/block.ts +3 -2
  407. package/src/services/reqresp/protocols/block_txs/bitvector.ts +16 -0
  408. package/src/services/reqresp/protocols/block_txs/block_txs_handler.ts +16 -2
  409. package/src/services/reqresp/protocols/block_txs/block_txs_reqresp.ts +47 -5
  410. package/src/services/reqresp/protocols/status.ts +16 -12
  411. package/src/services/reqresp/protocols/tx.ts +1 -2
  412. package/src/services/reqresp/reqresp.ts +66 -19
  413. package/src/services/service.ts +23 -4
  414. package/src/services/tx_collection/config.ts +16 -2
  415. package/src/services/tx_collection/fast_tx_collection.ts +39 -15
  416. package/src/services/tx_collection/index.ts +5 -0
  417. package/src/services/tx_collection/instrumentation.ts +5 -13
  418. package/src/services/tx_collection/proposal_tx_collector.ts +114 -0
  419. package/src/services/tx_collection/slow_tx_collection.ts +5 -4
  420. package/src/services/tx_collection/tx_collection.ts +10 -9
  421. package/src/services/tx_provider.ts +19 -3
  422. package/src/services/tx_provider_instrumentation.ts +24 -14
  423. package/src/test-helpers/index.ts +2 -0
  424. package/src/test-helpers/mock-pubsub.ts +1 -1
  425. package/src/test-helpers/mock-tx-helpers.ts +1 -1
  426. package/src/test-helpers/reqresp-nodes.ts +1 -1
  427. package/src/test-helpers/test_tx_provider.ts +64 -0
  428. package/src/test-helpers/testbench-utils.ts +372 -0
  429. package/src/testbench/p2p_client_testbench_worker.ts +338 -116
  430. package/src/testbench/worker_client_manager.ts +304 -42
  431. package/src/util.ts +12 -2
  432. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts +0 -80
  433. package/dest/mem_pools/tx_pool/memory_tx_pool.d.ts.map +0 -1
  434. package/dest/mem_pools/tx_pool/memory_tx_pool.js +0 -238
  435. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts +0 -12
  436. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.d.ts.map +0 -1
  437. package/dest/msg_validators/block_proposal_validator/block_proposal_validator.js +0 -70
  438. package/dest/msg_validators/block_proposal_validator/index.d.ts +0 -2
  439. package/dest/msg_validators/block_proposal_validator/index.d.ts.map +0 -1
  440. package/dest/msg_validators/block_proposal_validator/index.js +0 -1
  441. package/src/mem_pools/tx_pool/memory_tx_pool.ts +0 -283
  442. package/src/msg_validators/block_proposal_validator/block_proposal_validator.ts +0 -81
  443. package/src/msg_validators/block_proposal_validator/index.ts +0 -1
@@ -1,10 +1,377 @@
1
1
  // @attribution: lodestar impl for inspiration
2
- function _ts_decorate(decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- 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;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
2
+ function applyDecs2203RFactory() {
3
+ function createAddInitializerMethod(initializers, decoratorFinishedRef) {
4
+ return function addInitializer(initializer) {
5
+ assertNotFinished(decoratorFinishedRef, "addInitializer");
6
+ assertCallable(initializer, "An initializer");
7
+ initializers.push(initializer);
8
+ };
9
+ }
10
+ function memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value) {
11
+ var kindStr;
12
+ switch(kind){
13
+ case 1:
14
+ kindStr = "accessor";
15
+ break;
16
+ case 2:
17
+ kindStr = "method";
18
+ break;
19
+ case 3:
20
+ kindStr = "getter";
21
+ break;
22
+ case 4:
23
+ kindStr = "setter";
24
+ break;
25
+ default:
26
+ kindStr = "field";
27
+ }
28
+ var ctx = {
29
+ kind: kindStr,
30
+ name: isPrivate ? "#" + name : name,
31
+ static: isStatic,
32
+ private: isPrivate,
33
+ metadata: metadata
34
+ };
35
+ var decoratorFinishedRef = {
36
+ v: false
37
+ };
38
+ ctx.addInitializer = createAddInitializerMethod(initializers, decoratorFinishedRef);
39
+ var get, set;
40
+ if (kind === 0) {
41
+ if (isPrivate) {
42
+ get = desc.get;
43
+ set = desc.set;
44
+ } else {
45
+ get = function() {
46
+ return this[name];
47
+ };
48
+ set = function(v) {
49
+ this[name] = v;
50
+ };
51
+ }
52
+ } else if (kind === 2) {
53
+ get = function() {
54
+ return desc.value;
55
+ };
56
+ } else {
57
+ if (kind === 1 || kind === 3) {
58
+ get = function() {
59
+ return desc.get.call(this);
60
+ };
61
+ }
62
+ if (kind === 1 || kind === 4) {
63
+ set = function(v) {
64
+ desc.set.call(this, v);
65
+ };
66
+ }
67
+ }
68
+ ctx.access = get && set ? {
69
+ get: get,
70
+ set: set
71
+ } : get ? {
72
+ get: get
73
+ } : {
74
+ set: set
75
+ };
76
+ try {
77
+ return dec(value, ctx);
78
+ } finally{
79
+ decoratorFinishedRef.v = true;
80
+ }
81
+ }
82
+ function assertNotFinished(decoratorFinishedRef, fnName) {
83
+ if (decoratorFinishedRef.v) {
84
+ throw new Error("attempted to call " + fnName + " after decoration was finished");
85
+ }
86
+ }
87
+ function assertCallable(fn, hint) {
88
+ if (typeof fn !== "function") {
89
+ throw new TypeError(hint + " must be a function");
90
+ }
91
+ }
92
+ function assertValidReturnValue(kind, value) {
93
+ var type = typeof value;
94
+ if (kind === 1) {
95
+ if (type !== "object" || value === null) {
96
+ throw new TypeError("accessor decorators must return an object with get, set, or init properties or void 0");
97
+ }
98
+ if (value.get !== undefined) {
99
+ assertCallable(value.get, "accessor.get");
100
+ }
101
+ if (value.set !== undefined) {
102
+ assertCallable(value.set, "accessor.set");
103
+ }
104
+ if (value.init !== undefined) {
105
+ assertCallable(value.init, "accessor.init");
106
+ }
107
+ } else if (type !== "function") {
108
+ var hint;
109
+ if (kind === 0) {
110
+ hint = "field";
111
+ } else if (kind === 10) {
112
+ hint = "class";
113
+ } else {
114
+ hint = "method";
115
+ }
116
+ throw new TypeError(hint + " decorators must return a function or void 0");
117
+ }
118
+ }
119
+ function applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata) {
120
+ var decs = decInfo[0];
121
+ var desc, init, value;
122
+ if (isPrivate) {
123
+ if (kind === 0 || kind === 1) {
124
+ desc = {
125
+ get: decInfo[3],
126
+ set: decInfo[4]
127
+ };
128
+ } else if (kind === 3) {
129
+ desc = {
130
+ get: decInfo[3]
131
+ };
132
+ } else if (kind === 4) {
133
+ desc = {
134
+ set: decInfo[3]
135
+ };
136
+ } else {
137
+ desc = {
138
+ value: decInfo[3]
139
+ };
140
+ }
141
+ } else if (kind !== 0) {
142
+ desc = Object.getOwnPropertyDescriptor(base, name);
143
+ }
144
+ if (kind === 1) {
145
+ value = {
146
+ get: desc.get,
147
+ set: desc.set
148
+ };
149
+ } else if (kind === 2) {
150
+ value = desc.value;
151
+ } else if (kind === 3) {
152
+ value = desc.get;
153
+ } else if (kind === 4) {
154
+ value = desc.set;
155
+ }
156
+ var newValue, get, set;
157
+ if (typeof decs === "function") {
158
+ newValue = memberDec(decs, name, desc, initializers, kind, isStatic, isPrivate, metadata, value);
159
+ if (newValue !== void 0) {
160
+ assertValidReturnValue(kind, newValue);
161
+ if (kind === 0) {
162
+ init = newValue;
163
+ } else if (kind === 1) {
164
+ init = newValue.init;
165
+ get = newValue.get || value.get;
166
+ set = newValue.set || value.set;
167
+ value = {
168
+ get: get,
169
+ set: set
170
+ };
171
+ } else {
172
+ value = newValue;
173
+ }
174
+ }
175
+ } else {
176
+ for(var i = decs.length - 1; i >= 0; i--){
177
+ var dec = decs[i];
178
+ newValue = memberDec(dec, name, desc, initializers, kind, isStatic, isPrivate, metadata, value);
179
+ if (newValue !== void 0) {
180
+ assertValidReturnValue(kind, newValue);
181
+ var newInit;
182
+ if (kind === 0) {
183
+ newInit = newValue;
184
+ } else if (kind === 1) {
185
+ newInit = newValue.init;
186
+ get = newValue.get || value.get;
187
+ set = newValue.set || value.set;
188
+ value = {
189
+ get: get,
190
+ set: set
191
+ };
192
+ } else {
193
+ value = newValue;
194
+ }
195
+ if (newInit !== void 0) {
196
+ if (init === void 0) {
197
+ init = newInit;
198
+ } else if (typeof init === "function") {
199
+ init = [
200
+ init,
201
+ newInit
202
+ ];
203
+ } else {
204
+ init.push(newInit);
205
+ }
206
+ }
207
+ }
208
+ }
209
+ }
210
+ if (kind === 0 || kind === 1) {
211
+ if (init === void 0) {
212
+ init = function(instance, init) {
213
+ return init;
214
+ };
215
+ } else if (typeof init !== "function") {
216
+ var ownInitializers = init;
217
+ init = function(instance, init) {
218
+ var value = init;
219
+ for(var i = 0; i < ownInitializers.length; i++){
220
+ value = ownInitializers[i].call(instance, value);
221
+ }
222
+ return value;
223
+ };
224
+ } else {
225
+ var originalInitializer = init;
226
+ init = function(instance, init) {
227
+ return originalInitializer.call(instance, init);
228
+ };
229
+ }
230
+ ret.push(init);
231
+ }
232
+ if (kind !== 0) {
233
+ if (kind === 1) {
234
+ desc.get = value.get;
235
+ desc.set = value.set;
236
+ } else if (kind === 2) {
237
+ desc.value = value;
238
+ } else if (kind === 3) {
239
+ desc.get = value;
240
+ } else if (kind === 4) {
241
+ desc.set = value;
242
+ }
243
+ if (isPrivate) {
244
+ if (kind === 1) {
245
+ ret.push(function(instance, args) {
246
+ return value.get.call(instance, args);
247
+ });
248
+ ret.push(function(instance, args) {
249
+ return value.set.call(instance, args);
250
+ });
251
+ } else if (kind === 2) {
252
+ ret.push(value);
253
+ } else {
254
+ ret.push(function(instance, args) {
255
+ return value.call(instance, args);
256
+ });
257
+ }
258
+ } else {
259
+ Object.defineProperty(base, name, desc);
260
+ }
261
+ }
262
+ }
263
+ function applyMemberDecs(Class, decInfos, metadata) {
264
+ var ret = [];
265
+ var protoInitializers;
266
+ var staticInitializers;
267
+ var existingProtoNonFields = new Map();
268
+ var existingStaticNonFields = new Map();
269
+ for(var i = 0; i < decInfos.length; i++){
270
+ var decInfo = decInfos[i];
271
+ if (!Array.isArray(decInfo)) continue;
272
+ var kind = decInfo[1];
273
+ var name = decInfo[2];
274
+ var isPrivate = decInfo.length > 3;
275
+ var isStatic = kind >= 5;
276
+ var base;
277
+ var initializers;
278
+ if (isStatic) {
279
+ base = Class;
280
+ kind = kind - 5;
281
+ staticInitializers = staticInitializers || [];
282
+ initializers = staticInitializers;
283
+ } else {
284
+ base = Class.prototype;
285
+ protoInitializers = protoInitializers || [];
286
+ initializers = protoInitializers;
287
+ }
288
+ if (kind !== 0 && !isPrivate) {
289
+ var existingNonFields = isStatic ? existingStaticNonFields : existingProtoNonFields;
290
+ var existingKind = existingNonFields.get(name) || 0;
291
+ if (existingKind === true || existingKind === 3 && kind !== 4 || existingKind === 4 && kind !== 3) {
292
+ 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);
293
+ } else if (!existingKind && kind > 2) {
294
+ existingNonFields.set(name, kind);
295
+ } else {
296
+ existingNonFields.set(name, true);
297
+ }
298
+ }
299
+ applyMemberDec(ret, base, decInfo, name, kind, isStatic, isPrivate, initializers, metadata);
300
+ }
301
+ pushInitializers(ret, protoInitializers);
302
+ pushInitializers(ret, staticInitializers);
303
+ return ret;
304
+ }
305
+ function pushInitializers(ret, initializers) {
306
+ if (initializers) {
307
+ ret.push(function(instance) {
308
+ for(var i = 0; i < initializers.length; i++){
309
+ initializers[i].call(instance);
310
+ }
311
+ return instance;
312
+ });
313
+ }
314
+ }
315
+ function applyClassDecs(targetClass, classDecs, metadata) {
316
+ if (classDecs.length > 0) {
317
+ var initializers = [];
318
+ var newClass = targetClass;
319
+ var name = targetClass.name;
320
+ for(var i = classDecs.length - 1; i >= 0; i--){
321
+ var decoratorFinishedRef = {
322
+ v: false
323
+ };
324
+ try {
325
+ var nextNewClass = classDecs[i](newClass, {
326
+ kind: "class",
327
+ name: name,
328
+ addInitializer: createAddInitializerMethod(initializers, decoratorFinishedRef),
329
+ metadata
330
+ });
331
+ } finally{
332
+ decoratorFinishedRef.v = true;
333
+ }
334
+ if (nextNewClass !== undefined) {
335
+ assertValidReturnValue(10, nextNewClass);
336
+ newClass = nextNewClass;
337
+ }
338
+ }
339
+ return [
340
+ defineMetadata(newClass, metadata),
341
+ function() {
342
+ for(var i = 0; i < initializers.length; i++){
343
+ initializers[i].call(newClass);
344
+ }
345
+ }
346
+ ];
347
+ }
348
+ }
349
+ function defineMetadata(Class, metadata) {
350
+ return Object.defineProperty(Class, Symbol.metadata || Symbol.for("Symbol.metadata"), {
351
+ configurable: true,
352
+ enumerable: true,
353
+ value: metadata
354
+ });
355
+ }
356
+ return function applyDecs2203R(targetClass, memberDecs, classDecs, parentClass) {
357
+ if (parentClass !== void 0) {
358
+ var parentMetadata = parentClass[Symbol.metadata || Symbol.for("Symbol.metadata")];
359
+ }
360
+ var metadata = Object.create(parentMetadata === void 0 ? null : parentMetadata);
361
+ var e = applyMemberDecs(targetClass, memberDecs, metadata);
362
+ if (!classDecs.length) defineMetadata(targetClass, metadata);
363
+ return {
364
+ e: e,
365
+ get c () {
366
+ return applyClassDecs(targetClass, classDecs, metadata);
367
+ }
368
+ };
369
+ };
7
370
  }
371
+ function _apply_decs_2203_r(targetClass, memberDecs, classDecs, parentClass) {
372
+ return (_apply_decs_2203_r = applyDecs2203RFactory())(targetClass, memberDecs, classDecs, parentClass);
373
+ }
374
+ var _dec, _dec1, _dec2, _initProto;
8
375
  import { compactArray } from '@aztec/foundation/collection';
9
376
  import { AbortError, TimeoutError } from '@aztec/foundation/error';
10
377
  import { createLogger } from '@aztec/foundation/log';
@@ -21,6 +388,16 @@ import { DEFAULT_SUB_PROTOCOL_VALIDATORS, ReqRespSubProtocol, responseFromBuffer
21
388
  import { ReqRespMetrics } from './metrics.js';
22
389
  import { RateLimitStatus, RequestResponseRateLimiter, prettyPrintRateLimitStatus } from './rate-limiter/rate_limiter.js';
23
390
  import { ReqRespStatus, ReqRespStatusError, parseStatusChunk, prettyPrintReqRespStatus } from './status.js';
391
+ _dec = trackSpan('ReqResp.sendBatchRequest', (subProtocol, requests)=>({
392
+ [Attributes.P2P_REQ_RESP_PROTOCOL]: subProtocol,
393
+ [Attributes.P2P_REQ_RESP_BATCH_REQUESTS_COUNT]: requests.length
394
+ })), _dec1 = trackSpan('ReqResp.sendRequestToPeer', (peerId, subProtocol, _)=>({
395
+ [Attributes.P2P_ID]: peerId.toString(),
396
+ [Attributes.P2P_REQ_RESP_PROTOCOL]: subProtocol
397
+ })), _dec2 = trackSpan('ReqResp.streamHandler', (protocol, { connection })=>({
398
+ [Attributes.P2P_REQ_RESP_PROTOCOL]: protocol,
399
+ [Attributes.P2P_ID]: connection.remotePeer.toString()
400
+ }));
24
401
  /**
25
402
  * The Request Response Service
26
403
  *
@@ -38,6 +415,25 @@ import { ReqRespStatus, ReqRespStatusError, parseStatusChunk, prettyPrintReqResp
38
415
  libp2p;
39
416
  peerScoring;
40
417
  logger;
418
+ static{
419
+ ({ e: [_initProto] } = _apply_decs_2203_r(this, [
420
+ [
421
+ _dec,
422
+ 2,
423
+ "sendBatchRequest"
424
+ ],
425
+ [
426
+ _dec1,
427
+ 2,
428
+ "sendRequestToPeer"
429
+ ],
430
+ [
431
+ _dec2,
432
+ 2,
433
+ "streamHandler"
434
+ ]
435
+ ], []));
436
+ }
41
437
  individualRequestTimeoutMs;
42
438
  dialTimeoutMs;
43
439
  subProtocolHandlers;
@@ -50,7 +446,7 @@ import { ReqRespStatus, ReqRespStatusError, parseStatusChunk, prettyPrintReqResp
50
446
  this.libp2p = libp2p;
51
447
  this.peerScoring = peerScoring;
52
448
  this.logger = logger;
53
- this.individualRequestTimeoutMs = DEFAULT_INDIVIDUAL_REQUEST_TIMEOUT_MS;
449
+ this.individualRequestTimeoutMs = (_initProto(this), DEFAULT_INDIVIDUAL_REQUEST_TIMEOUT_MS);
54
450
  this.dialTimeoutMs = DEFAULT_REQRESP_DIAL_TIMEOUT_MS;
55
451
  this.subProtocolHandlers = {};
56
452
  this.subProtocolValidators = {};
@@ -73,6 +469,11 @@ import { ReqRespStatus, ReqRespStatusError, parseStatusChunk, prettyPrintReqResp
73
469
  return this.metrics.tracer;
74
470
  }
75
471
  /**
472
+ * Get the connection sampler instance
473
+ */ getConnectionSampler() {
474
+ return this.connectionSampler;
475
+ }
476
+ /**
76
477
  * Start the reqresp service
77
478
  */ async start(subProtocolHandlers, subProtocolValidators) {
78
479
  Object.assign(this.subProtocolHandlers, subProtocolHandlers);
@@ -132,6 +533,14 @@ import { ReqRespStatus, ReqRespStatusError, parseStatusChunk, prettyPrintReqResp
132
533
  const responseValidator = this.subProtocolValidators[subProtocol] ?? DEFAULT_SUB_PROTOCOL_VALIDATORS[subProtocol];
133
534
  const responses = new Array(requests.length);
134
535
  const requestBuffers = requests.map((req)=>req.toBuffer());
536
+ const isEmptyResponse = (value)=>{
537
+ // Some responses serialize to a non-empty buffer even when they contain no items (e.g., empty TxArray).
538
+ if (!value || typeof value !== 'object') {
539
+ return false;
540
+ }
541
+ const length = value.length;
542
+ return typeof length === 'number' && length === 0;
543
+ };
135
544
  const requestFunction = async (signal)=>{
136
545
  // Track which requests still need to be processed
137
546
  const pendingRequestIndices = new Set(requestBuffers.map((_, i)=>i));
@@ -159,7 +568,7 @@ import { ReqRespStatus, ReqRespStatusError, parseStatusChunk, prettyPrintReqResp
159
568
  for (const requestIndex of pendingRequestIndices){
160
569
  const peer = batchSampler.getPeerForRequest(requestIndex);
161
570
  if (!peer) {
162
- break;
571
+ continue;
163
572
  }
164
573
  const peerAsString = peer.toString();
165
574
  if (!requestBatches.has(peerAsString)) {
@@ -179,6 +588,11 @@ import { ReqRespStatus, ReqRespStatusError, parseStatusChunk, prettyPrintReqResp
179
588
  indices: Array.from(pendingRequestIndices.values()).slice(0, limit)
180
589
  });
181
590
  }
591
+ // If no requests could be assigned (all peers exhausted for all indices), exit early
592
+ if (requestBatches.size === 0) {
593
+ this.logger.warn('No peers available for any pending request indices, stopping batch request');
594
+ break;
595
+ }
182
596
  // Make parallel requests for each peer's batch
183
597
  // A batch entry will look something like this:
184
598
  // PeerId0: [0, 1, 2, 3]
@@ -187,39 +601,56 @@ import { ReqRespStatus, ReqRespStatusError, parseStatusChunk, prettyPrintReqResp
187
601
  // while simultaneously Peer Id 1 will send requests 4, 5, 6, 7 in serial
188
602
  const batchResults = await Promise.all(Array.from(requestBatches.entries()).map(async ([peerAsString, { peerId: peer, indices }])=>{
189
603
  try {
604
+ const markIndexFailed = (index)=>batchSampler.markPeerFailedForIndex(peer, index);
190
605
  // Requests all going to the same peer are sent synchronously
191
606
  const peerResults = [];
607
+ let shouldReplacePeer = false;
608
+ const handleFailure = (status, index)=>{
609
+ this.logger.warn(`Request to peer ${peerAsString} failed with status ${prettyPrintReqRespStatus(status)}`);
610
+ markIndexFailed(index);
611
+ return status === ReqRespStatus.RATE_LIMIT_EXCEEDED;
612
+ };
192
613
  for (const index of indices){
193
- this.logger.trace(`Sending request ${index} to peer ${peerAsString}`);
614
+ this.logger.info(`Sending request ${index} to peer ${peerAsString}`);
194
615
  const response = await this.sendRequestToPeer(peer, subProtocol, requestBuffers[index]);
195
616
  // Check the status of the response buffer
196
617
  if (response.status !== ReqRespStatus.SUCCESS) {
197
- this.logger.debug(`Request to peer ${peerAsString} failed with status ${prettyPrintReqRespStatus(response.status)}`);
198
- // If we hit a rate limit or some failure, we remove the peer and return the results,
199
- // they will be split among remaining peers and the new sampled peer
200
- batchSampler.removePeerAndReplace(peer);
201
- return {
202
- peer,
203
- results: peerResults
204
- };
205
- }
206
- if (response && response.data.length > 0) {
207
- const object = responseFromBuffer(subProtocol, response.data);
208
- const isValid = await responseValidator(requests[index], object, peer);
209
- if (isValid) {
210
- peerResults.push({
211
- index,
212
- response: object
213
- });
618
+ shouldReplacePeer = handleFailure(response.status, index);
619
+ if (shouldReplacePeer) {
620
+ break;
214
621
  }
622
+ continue;
623
+ }
624
+ if (response.data.length === 0) {
625
+ markIndexFailed(index);
626
+ continue;
627
+ }
628
+ const object = responseFromBuffer(subProtocol, response.data);
629
+ if (isEmptyResponse(object)) {
630
+ markIndexFailed(index);
631
+ continue;
215
632
  }
633
+ const isValid = await responseValidator(requests[index], object, peer);
634
+ if (!isValid) {
635
+ markIndexFailed(index);
636
+ continue;
637
+ }
638
+ peerResults.push({
639
+ index,
640
+ response: object
641
+ });
642
+ }
643
+ // If peer had a hard failure (rate limit), replace it for future iterations
644
+ if (shouldReplacePeer) {
645
+ this.logger.warn(`Peer ${peerAsString} hit a hard failure, removing from sampler`);
646
+ batchSampler.removePeerAndReplace(peer);
216
647
  }
217
648
  return {
218
649
  peer,
219
650
  results: peerResults
220
651
  };
221
652
  } catch (error) {
222
- this.logger.debug(`Failed batch request to peer ${peerAsString}:`, error);
653
+ this.logger.warn(`Failed batch request to peer ${peerAsString}:`, error);
223
654
  batchSampler.removePeerAndReplace(peer);
224
655
  return {
225
656
  peer,
@@ -239,14 +670,14 @@ import { ReqRespStatus, ReqRespStatusError, parseStatusChunk, prettyPrintReqResp
239
670
  retryAttempts++;
240
671
  }
241
672
  if (retryAttempts >= maxRetryAttempts) {
242
- this.logger.debug(`Max retry attempts ${maxRetryAttempts} reached for batch request`);
673
+ this.logger.warn(`Max retry attempts ${maxRetryAttempts} reached for batch request`);
243
674
  }
244
675
  return responses;
245
676
  };
246
677
  try {
247
678
  return await executeTimeout(requestFunction, timeoutMs, ()=>new CollectiveReqRespTimeoutError());
248
679
  } catch (e) {
249
- this.logger.debug(`${e.message} | subProtocol: ${subProtocol}`);
680
+ this.logger.warn(`${e.message} | subProtocol: ${subProtocol}`);
250
681
  return [];
251
682
  }
252
683
  }
@@ -294,6 +725,7 @@ import { ReqRespStatus, ReqRespStatusError, parseStatusChunk, prettyPrintReqResp
294
725
  ]), this.individualRequestTimeoutMs, ()=>timeoutErr);
295
726
  return resp;
296
727
  } catch (e) {
728
+ this.logger.warn(`SUBPROTOCOL: ${subProtocol}\n`, e);
297
729
  // On error we immediately abort the stream, this is preferred way,
298
730
  // because it signals to the sender that error happened, whereas
299
731
  // closing the stream only closes our side and is much slower
@@ -587,21 +1019,3 @@ import { ReqRespStatus, ReqRespStatusError, parseStatusChunk, prettyPrintReqResp
587
1019
  return PeerErrorSeverity.HighToleranceError;
588
1020
  }
589
1021
  }
590
- _ts_decorate([
591
- trackSpan('ReqResp.sendBatchRequest', (subProtocol, requests)=>({
592
- [Attributes.P2P_REQ_RESP_PROTOCOL]: subProtocol,
593
- [Attributes.P2P_REQ_RESP_BATCH_REQUESTS_COUNT]: requests.length
594
- }))
595
- ], ReqResp.prototype, "sendBatchRequest", null);
596
- _ts_decorate([
597
- trackSpan('ReqResp.sendRequestToPeer', (peerId, subProtocol, _)=>({
598
- [Attributes.P2P_ID]: peerId.toString(),
599
- [Attributes.P2P_REQ_RESP_PROTOCOL]: subProtocol
600
- }))
601
- ], ReqResp.prototype, "sendRequestToPeer", null);
602
- _ts_decorate([
603
- trackSpan('ReqResp.streamHandler', (protocol, { connection })=>({
604
- [Attributes.P2P_REQ_RESP_PROTOCOL]: protocol,
605
- [Attributes.P2P_ID]: connection.remotePeer.toString()
606
- }))
607
- ], ReqResp.prototype, "streamHandler", null);
@@ -33,5 +33,5 @@ export declare function parseStatusChunk(chunk: Uint8Array): ReqRespStatus;
33
33
  * @param status
34
34
  * @returns
35
35
  */
36
- export declare function prettyPrintReqRespStatus(status: ReqRespStatus): "SUCCESS" | "RATE_LIMIT_EXCEEDED" | "BADLY_FORMED_REQUEST" | "FAILURE" | "INTERNAL_ERROR" | "UNKNOWN" | undefined;
37
- //# sourceMappingURL=status.d.ts.map
36
+ export declare function prettyPrintReqRespStatus(status: ReqRespStatus): "BADLY_FORMED_REQUEST" | "FAILURE" | "INTERNAL_ERROR" | "RATE_LIMIT_EXCEEDED" | "SUCCESS" | "UNKNOWN" | undefined;
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHVzLmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvcmVxcmVzcC9zdGF0dXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxvQkFBWSxhQUFhO0lBQ3ZCLE9BQU8sSUFBSTtJQUNYLG1CQUFtQixJQUFJO0lBQ3ZCLG9CQUFvQixJQUFJO0lBQ3hCLGNBQWMsSUFBSTtJQUNsQixTQUFTLElBQUk7SUFDYixPQUFPLE1BQU07SUFDYixPQUFPLE1BQU07Q0FDZDtBQUVELE1BQU0sTUFBTSx5QkFBeUIsR0FBRyxPQUFPLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUV0RixxQkFBYSxrQkFBbUIsU0FBUSxLQUFLO0lBQzNDOztPQUVHO0lBQ0gsUUFBUSxDQUFDLE1BQU0sRUFBRSx5QkFBeUIsQ0FBQztJQUUzQyxZQUFZLE1BQU0sRUFBRSx5QkFBeUIsRUFBRSxLQUFLLENBQUMsRUFBRTtRQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQTtLQUFFLEVBR3ZFO0NBQ0Y7QUFFRDs7Ozs7O0dBTUc7QUFDSCx3QkFBZ0IsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLFVBQVUsR0FBRyxhQUFhLENBV2pFO0FBRUQ7Ozs7R0FJRztBQUNILHdCQUFnQix3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsYUFBYSxxSEFlN0QifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,aAAa;IACvB,OAAO,IAAI;IACX,mBAAmB,IAAI;IACvB,oBAAoB,IAAI;IACxB,cAAc,IAAI;IAClB,SAAS,IAAI;IACb,OAAO,MAAM;IACb,OAAO,MAAM;CACd;AAED,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;AAEtF,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC;gBAE/B,MAAM,EAAE,yBAAyB,EAAE,KAAK,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE;CAIzE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,aAAa,CAWjE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,qHAe7D"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/services/reqresp/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,aAAa;IACvB,OAAO,IAAI;IACX,mBAAmB,IAAI;IACvB,oBAAoB,IAAI;IACxB,cAAc,IAAI;IAClB,SAAS,IAAI;IACb,OAAO,MAAM;IACb,OAAO,MAAM;CACd;AAED,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;AAEtF,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC;IAE3C,YAAY,MAAM,EAAE,yBAAyB,EAAE,KAAK,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,KAAK,CAAA;KAAE,EAGvE;CACF;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,aAAa,CAWjE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa,qHAe7D"}
@@ -1,10 +1,11 @@
1
1
  import type { EthAddress } from '@aztec/foundation/eth-address';
2
2
  import type { PeerInfo } from '@aztec/stdlib/interfaces/server';
3
- import type { BlockAttestation, BlockProposal, Gossipable } from '@aztec/stdlib/p2p';
3
+ import type { BlockProposal, CheckpointAttestation, CheckpointProposalCore, Gossipable } from '@aztec/stdlib/p2p';
4
4
  import type { Tx } from '@aztec/stdlib/tx';
5
5
  import type { PeerId } from '@libp2p/interface';
6
6
  import type { ENR } from '@nethermindeth/enr';
7
7
  import type EventEmitter from 'events';
8
+ import type { BatchTxRequesterLibP2PService } from './reqresp/batch-tx-requester/interface.js';
8
9
  import type { P2PReqRespConfig } from './reqresp/config.js';
9
10
  import type { StatusMessage } from './reqresp/index.js';
10
11
  import type { ReqRespSubProtocol, ReqRespSubProtocolHandler, ReqRespSubProtocolValidators, SubProtocolMap } from './reqresp/interface.js';
@@ -13,7 +14,19 @@ export declare enum PeerDiscoveryState {
13
14
  RUNNING = "running",
14
15
  STOPPED = "stopped"
15
16
  }
16
- export type P2PBlockReceivedCallback = (block: BlockProposal, sender: PeerId) => Promise<BlockAttestation[] | undefined>;
17
+ /**
18
+ * Callback for when a block proposal is received.
19
+ * Validators validate but DO NOT attest to individual blocks - attestations are only for checkpoints.
20
+ * @returns true if the proposal is valid, false otherwise
21
+ */
22
+ export type P2PBlockReceivedCallback = (block: BlockProposal, sender: PeerId) => Promise<boolean>;
23
+ /**
24
+ * Callback for when a checkpoint proposal is received.
25
+ * The checkpoint proposal is passed as CheckpointProposalCore (without lastBlock) since
26
+ * the lastBlock is extracted and stored separately as a BlockProposal, and the block
27
+ * callback is invoked and awaited before this checkpoint callback.
28
+ */
29
+ export type P2PCheckpointReceivedCallback = (checkpoint: CheckpointProposalCore, sender: PeerId) => Promise<CheckpointAttestation[] | undefined>;
17
30
  export type AuthReceivedCallback = (peerId: PeerId, authRequest: AuthRequest) => Promise<AuthResponse | undefined>;
18
31
  /**
19
32
  * The interface for a P2P service implementation.
@@ -43,6 +56,7 @@ export interface P2PService {
43
56
  */
44
57
  sendBatchRequest<Protocol extends ReqRespSubProtocol>(protocol: Protocol, requests: InstanceType<SubProtocolMap[Protocol]['request']>[], pinnedPeerId?: PeerId, timeoutMs?: number, maxPeers?: number, maxRetryAttempts?: number): Promise<InstanceType<SubProtocolMap[Protocol]['response']>[]>;
45
58
  registerBlockReceivedCallback(callback: P2PBlockReceivedCallback): void;
59
+ registerCheckpointReceivedCallback(callback: P2PCheckpointReceivedCallback): void;
46
60
  getEnr(): ENR | undefined;
47
61
  getPeers(includePending?: boolean): PeerInfo[];
48
62
  validate(txs: Tx[]): Promise<void>;
@@ -51,6 +65,8 @@ export interface P2PService {
51
65
  updateConfig(config: Partial<P2PReqRespConfig>): void;
52
66
  /** If node running this P2P stack is validator, passes in validator address to P2P layer */
53
67
  registerThisValidatorAddresses(address: EthAddress[]): void;
68
+ /** Get BatchTxRequester service dependencies */
69
+ getBatchTxRequesterService(): BatchTxRequesterLibP2PService;
54
70
  }
55
71
  /**
56
72
  * The interface for a peer discovery service implementation.
@@ -88,4 +104,4 @@ export interface PeerDiscoveryService extends EventEmitter {
88
104
  getEnr(): ENR | undefined;
89
105
  bootstrapNodeEnrs: ENR[];
90
106
  }
91
- //# sourceMappingURL=service.d.ts.map
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxLQUFLLEVBQUUsYUFBYSxFQUFFLHFCQUFxQixFQUFFLHNCQUFzQixFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xILE9BQU8sS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTNDLE9BQU8sS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sS0FBSyxZQUFZLE1BQU0sUUFBUSxDQUFDO0FBRXZDLE9BQU8sS0FBSyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDL0YsT0FBTyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RCxPQUFPLEtBQUssRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RCxPQUFPLEtBQUssRUFDVixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLDRCQUE0QixFQUM1QixjQUFjLEVBQ2YsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEtBQUssRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFN0Usb0JBQVksa0JBQWtCO0lBQzVCLE9BQU8sWUFBWTtJQUNuQixPQUFPLFlBQVk7Q0FDcEI7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxNQUFNLHdCQUF3QixHQUFHLENBQUMsS0FBSyxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUs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