@lodestar/beacon-node 1.35.0-dev.7a3b3a996e → 1.35.0-dev.811265f1e2

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 (385) hide show
  1. package/lib/api/impl/beacon/blocks/index.js +46 -58
  2. package/lib/api/impl/beacon/blocks/index.js.map +1 -1
  3. package/lib/api/impl/errors.js +0 -2
  4. package/lib/api/impl/errors.js.map +1 -1
  5. package/lib/api/impl/lodestar/index.js +1 -1
  6. package/lib/api/impl/lodestar/index.js.map +1 -1
  7. package/lib/api/impl/validator/index.js +1 -2
  8. package/lib/api/impl/validator/index.js.map +1 -1
  9. package/lib/api/rest/activeSockets.js +2 -3
  10. package/lib/api/rest/activeSockets.js.map +1 -1
  11. package/lib/api/rest/base.js +0 -4
  12. package/lib/api/rest/base.js.map +1 -1
  13. package/lib/api/rest/index.js +0 -2
  14. package/lib/api/rest/index.js.map +1 -1
  15. package/lib/api/rest/swaggerUI.js +2 -4
  16. package/lib/api/rest/swaggerUI.js.map +1 -1
  17. package/lib/chain/archiveStore/archiveStore.js +38 -49
  18. package/lib/chain/archiveStore/archiveStore.js.map +1 -1
  19. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js +0 -2
  20. package/lib/chain/archiveStore/historicalState/historicalStateRegen.js.map +1 -1
  21. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js +0 -5
  22. package/lib/chain/archiveStore/strategies/frequencyStateArchiveStrategy.js.map +1 -1
  23. package/lib/chain/balancesCache.js +3 -1
  24. package/lib/chain/balancesCache.js.map +1 -1
  25. package/lib/chain/beaconProposerCache.js +0 -1
  26. package/lib/chain/beaconProposerCache.js.map +1 -1
  27. package/lib/chain/blocks/blockInput/blockInput.d.ts +7 -19
  28. package/lib/chain/blocks/blockInput/blockInput.js +88 -132
  29. package/lib/chain/blocks/blockInput/blockInput.js.map +1 -1
  30. package/lib/chain/blocks/blockInput/types.d.ts +10 -19
  31. package/lib/chain/blocks/blockInput/types.js +0 -1
  32. package/lib/chain/blocks/blockInput/types.js.map +1 -1
  33. package/lib/chain/blocks/blockInput/utils.d.ts +4 -0
  34. package/lib/chain/blocks/blockInput/utils.js +29 -6
  35. package/lib/chain/blocks/blockInput/utils.js.map +1 -1
  36. package/lib/chain/blocks/importBlock.js +12 -16
  37. package/lib/chain/blocks/importBlock.js.map +1 -1
  38. package/lib/chain/blocks/index.d.ts +4 -5
  39. package/lib/chain/blocks/index.js +4 -5
  40. package/lib/chain/blocks/index.js.map +1 -1
  41. package/lib/chain/blocks/types.d.ts +106 -3
  42. package/lib/chain/blocks/types.js +119 -0
  43. package/lib/chain/blocks/types.js.map +1 -1
  44. package/lib/chain/blocks/utils/chainSegment.d.ts +2 -2
  45. package/lib/chain/blocks/utils/chainSegment.js +2 -2
  46. package/lib/chain/blocks/utils/chainSegment.js.map +1 -1
  47. package/lib/chain/blocks/verifyBlock.d.ts +3 -3
  48. package/lib/chain/blocks/verifyBlock.js +14 -15
  49. package/lib/chain/blocks/verifyBlock.js.map +1 -1
  50. package/lib/chain/blocks/verifyBlocksDataAvailability.d.ts +22 -7
  51. package/lib/chain/blocks/verifyBlocksDataAvailability.js +110 -18
  52. package/lib/chain/blocks/verifyBlocksDataAvailability.js.map +1 -1
  53. package/lib/chain/blocks/verifyBlocksExecutionPayloads.d.ts +3 -4
  54. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js +22 -24
  55. package/lib/chain/blocks/verifyBlocksExecutionPayloads.js.map +1 -1
  56. package/lib/chain/blocks/verifyBlocksSanityChecks.d.ts +3 -4
  57. package/lib/chain/blocks/verifyBlocksSanityChecks.js +2 -2
  58. package/lib/chain/blocks/verifyBlocksSanityChecks.js.map +1 -1
  59. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.d.ts +2 -3
  60. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js +2 -2
  61. package/lib/chain/blocks/verifyBlocksStateTransitionOnly.js.map +1 -1
  62. package/lib/chain/blocks/writeBlockInputToDb.d.ts +3 -3
  63. package/lib/chain/blocks/writeBlockInputToDb.js +66 -61
  64. package/lib/chain/blocks/writeBlockInputToDb.js.map +1 -1
  65. package/lib/chain/bls/multithread/index.js +163 -167
  66. package/lib/chain/bls/multithread/index.js.map +1 -1
  67. package/lib/chain/bls/singleThread.js +0 -1
  68. package/lib/chain/bls/singleThread.js.map +1 -1
  69. package/lib/chain/chain.d.ts +10 -12
  70. package/lib/chain/chain.js +20 -79
  71. package/lib/chain/chain.js.map +1 -1
  72. package/lib/chain/emitter.d.ts +2 -43
  73. package/lib/chain/emitter.js +0 -18
  74. package/lib/chain/emitter.js.map +1 -1
  75. package/lib/chain/errors/blobSidecarError.d.ts +0 -24
  76. package/lib/chain/errors/blobSidecarError.js +0 -10
  77. package/lib/chain/errors/blobSidecarError.js.map +1 -1
  78. package/lib/chain/errors/blockError.js +0 -1
  79. package/lib/chain/errors/blockError.js.map +1 -1
  80. package/lib/chain/errors/dataColumnSidecarError.d.ts +0 -42
  81. package/lib/chain/errors/dataColumnSidecarError.js +0 -14
  82. package/lib/chain/errors/dataColumnSidecarError.js.map +1 -1
  83. package/lib/chain/errors/gossipValidation.js +0 -1
  84. package/lib/chain/errors/gossipValidation.js.map +1 -1
  85. package/lib/chain/genesis/genesis.js +5 -16
  86. package/lib/chain/genesis/genesis.js.map +1 -1
  87. package/lib/chain/interface.d.ts +9 -12
  88. package/lib/chain/interface.js.map +1 -1
  89. package/lib/chain/lightClient/index.js +9 -16
  90. package/lib/chain/lightClient/index.js.map +1 -1
  91. package/lib/chain/opPools/aggregatedAttestationPool.js +8 -13
  92. package/lib/chain/opPools/aggregatedAttestationPool.js.map +1 -1
  93. package/lib/chain/opPools/attestationPool.js +2 -7
  94. package/lib/chain/opPools/attestationPool.js.map +1 -1
  95. package/lib/chain/opPools/opPool.js +12 -10
  96. package/lib/chain/opPools/opPool.js.map +1 -1
  97. package/lib/chain/opPools/syncCommitteeMessagePool.js +6 -9
  98. package/lib/chain/opPools/syncCommitteeMessagePool.js.map +1 -1
  99. package/lib/chain/opPools/syncContributionAndProofPool.js +2 -5
  100. package/lib/chain/opPools/syncContributionAndProofPool.js.map +1 -1
  101. package/lib/chain/prepareNextSlot.js +136 -141
  102. package/lib/chain/prepareNextSlot.js.map +1 -1
  103. package/lib/chain/produceBlock/produceBlockBody.d.ts +1 -1
  104. package/lib/chain/produceBlock/produceBlockBody.js +10 -3
  105. package/lib/chain/produceBlock/produceBlockBody.js.map +1 -1
  106. package/lib/chain/regen/errors.js +0 -1
  107. package/lib/chain/regen/errors.js.map +1 -1
  108. package/lib/chain/regen/queued.js +28 -35
  109. package/lib/chain/regen/queued.js.map +1 -1
  110. package/lib/chain/regen/regen.js +0 -1
  111. package/lib/chain/regen/regen.js.map +1 -1
  112. package/lib/chain/reprocess.js +1 -3
  113. package/lib/chain/reprocess.js.map +1 -1
  114. package/lib/chain/seenCache/index.d.ts +1 -1
  115. package/lib/chain/seenCache/index.js +1 -1
  116. package/lib/chain/seenCache/index.js.map +1 -1
  117. package/lib/chain/seenCache/seenAggregateAndProof.js +6 -7
  118. package/lib/chain/seenCache/seenAggregateAndProof.js.map +1 -1
  119. package/lib/chain/seenCache/seenAttestationData.js +2 -5
  120. package/lib/chain/seenCache/seenAttestationData.js.map +1 -1
  121. package/lib/chain/seenCache/seenAttesters.js +4 -2
  122. package/lib/chain/seenCache/seenAttesters.js.map +1 -1
  123. package/lib/chain/seenCache/seenBlockInput.d.ts +84 -0
  124. package/lib/chain/seenCache/seenBlockInput.js +225 -0
  125. package/lib/chain/seenCache/seenBlockInput.js.map +1 -0
  126. package/lib/chain/seenCache/seenBlockProposers.js +4 -2
  127. package/lib/chain/seenCache/seenBlockProposers.js.map +1 -1
  128. package/lib/chain/seenCache/seenCommittee.js +3 -1
  129. package/lib/chain/seenCache/seenCommittee.js.map +1 -1
  130. package/lib/chain/seenCache/seenCommitteeContribution.js +2 -3
  131. package/lib/chain/seenCache/seenCommitteeContribution.js.map +1 -1
  132. package/lib/chain/seenCache/seenGossipBlockInput.d.ts +78 -74
  133. package/lib/chain/seenCache/seenGossipBlockInput.js +369 -235
  134. package/lib/chain/seenCache/seenGossipBlockInput.js.map +1 -1
  135. package/lib/chain/shufflingCache.js +2 -5
  136. package/lib/chain/shufflingCache.js.map +1 -1
  137. package/lib/chain/stateCache/blockStateCacheImpl.js +7 -13
  138. package/lib/chain/stateCache/blockStateCacheImpl.js.map +1 -1
  139. package/lib/chain/stateCache/datastore/db.js +0 -1
  140. package/lib/chain/stateCache/datastore/db.js.map +1 -1
  141. package/lib/chain/stateCache/datastore/file.js +0 -1
  142. package/lib/chain/stateCache/datastore/file.js.map +1 -1
  143. package/lib/chain/stateCache/fifoBlockStateCache.js +0 -10
  144. package/lib/chain/stateCache/fifoBlockStateCache.js.map +1 -1
  145. package/lib/chain/stateCache/inMemoryCheckpointsCache.js +4 -10
  146. package/lib/chain/stateCache/inMemoryCheckpointsCache.js.map +1 -1
  147. package/lib/chain/stateCache/mapMetrics.js +4 -4
  148. package/lib/chain/stateCache/mapMetrics.js.map +1 -1
  149. package/lib/chain/stateCache/persistentCheckpointsCache.js +4 -13
  150. package/lib/chain/stateCache/persistentCheckpointsCache.js.map +1 -1
  151. package/lib/chain/validation/blobSidecar.d.ts +3 -8
  152. package/lib/chain/validation/blobSidecar.js +31 -73
  153. package/lib/chain/validation/blobSidecar.js.map +1 -1
  154. package/lib/chain/validation/dataColumnSidecar.d.ts +9 -7
  155. package/lib/chain/validation/dataColumnSidecar.js +56 -94
  156. package/lib/chain/validation/dataColumnSidecar.js.map +1 -1
  157. package/lib/chain/validatorMonitor.js +1 -2
  158. package/lib/chain/validatorMonitor.js.map +1 -1
  159. package/lib/db/beacon.js +0 -24
  160. package/lib/db/beacon.js.map +1 -1
  161. package/lib/db/repositories/depositDataRoot.js +0 -1
  162. package/lib/db/repositories/depositDataRoot.js.map +1 -1
  163. package/lib/db/single/preGenesisState.js +0 -6
  164. package/lib/db/single/preGenesisState.js.map +1 -1
  165. package/lib/db/single/preGenesisStateLastProcessedBlock.js +0 -5
  166. package/lib/db/single/preGenesisStateLastProcessedBlock.js.map +1 -1
  167. package/lib/eth1/eth1DataCache.js +0 -2
  168. package/lib/eth1/eth1DataCache.js.map +1 -1
  169. package/lib/eth1/eth1DepositDataTracker.js +5 -18
  170. package/lib/eth1/eth1DepositDataTracker.js.map +1 -1
  171. package/lib/eth1/eth1DepositsCache.js +0 -3
  172. package/lib/eth1/eth1DepositsCache.js.map +1 -1
  173. package/lib/eth1/eth1MergeBlockTracker.js +4 -10
  174. package/lib/eth1/eth1MergeBlockTracker.js.map +1 -1
  175. package/lib/eth1/index.js +0 -2
  176. package/lib/eth1/index.js.map +1 -1
  177. package/lib/eth1/provider/eth1Provider.js +2 -6
  178. package/lib/eth1/provider/eth1Provider.js.map +1 -1
  179. package/lib/eth1/provider/jsonRpcHttpClient.js +2 -16
  180. package/lib/eth1/provider/jsonRpcHttpClient.js.map +1 -1
  181. package/lib/eth1/provider/utils.d.ts +0 -5
  182. package/lib/eth1/provider/utils.js +1 -9
  183. package/lib/eth1/provider/utils.js.map +1 -1
  184. package/lib/execution/builder/cache.js +0 -6
  185. package/lib/execution/builder/cache.js.map +1 -1
  186. package/lib/execution/builder/http.js +8 -14
  187. package/lib/execution/builder/http.js.map +1 -1
  188. package/lib/execution/engine/disabled.js +4 -2
  189. package/lib/execution/engine/disabled.js.map +1 -1
  190. package/lib/execution/engine/http.d.ts +2 -2
  191. package/lib/execution/engine/http.js +11 -43
  192. package/lib/execution/engine/http.js.map +1 -1
  193. package/lib/execution/engine/interface.d.ts +2 -2
  194. package/lib/execution/engine/mock.d.ts +0 -1
  195. package/lib/execution/engine/mock.js +12 -16
  196. package/lib/execution/engine/mock.js.map +1 -1
  197. package/lib/execution/engine/payloadIdCache.js +3 -1
  198. package/lib/execution/engine/payloadIdCache.js.map +1 -1
  199. package/lib/execution/engine/types.d.ts +1 -5
  200. package/lib/execution/engine/types.js +8 -37
  201. package/lib/execution/engine/types.js.map +1 -1
  202. package/lib/execution/engine/utils.js +1 -2
  203. package/lib/execution/engine/utils.js.map +1 -1
  204. package/lib/metrics/metrics/beacon.d.ts +5 -11
  205. package/lib/metrics/metrics/beacon.js +20 -40
  206. package/lib/metrics/metrics/beacon.js.map +1 -1
  207. package/lib/metrics/metrics/lodestar.d.ts +13 -55
  208. package/lib/metrics/metrics/lodestar.js +7 -84
  209. package/lib/metrics/metrics/lodestar.js.map +1 -1
  210. package/lib/metrics/nodeJsMetrics.js +1 -1
  211. package/lib/metrics/nodeJsMetrics.js.map +1 -1
  212. package/lib/metrics/utils/avgMinMax.js +6 -10
  213. package/lib/metrics/utils/avgMinMax.js.map +1 -1
  214. package/lib/metrics/utils/gauge.js +4 -1
  215. package/lib/metrics/utils/gauge.js.map +1 -1
  216. package/lib/monitoring/properties.js +0 -4
  217. package/lib/monitoring/properties.js.map +1 -1
  218. package/lib/monitoring/service.js +1 -13
  219. package/lib/monitoring/service.js.map +1 -1
  220. package/lib/monitoring/system.js +27 -25
  221. package/lib/monitoring/system.js.map +1 -1
  222. package/lib/network/core/networkCore.d.ts +1 -1
  223. package/lib/network/core/networkCore.js +49 -66
  224. package/lib/network/core/networkCore.js.map +1 -1
  225. package/lib/network/core/networkCoreWorkerHandler.d.ts +1 -1
  226. package/lib/network/core/networkCoreWorkerHandler.js +1 -4
  227. package/lib/network/core/networkCoreWorkerHandler.js.map +1 -1
  228. package/lib/network/discv5/index.js +1 -4
  229. package/lib/network/discv5/index.js.map +1 -1
  230. package/lib/network/discv5/worker.js.map +1 -1
  231. package/lib/network/events.d.ts +18 -2
  232. package/lib/network/events.js +7 -0
  233. package/lib/network/events.js.map +1 -1
  234. package/lib/network/gossip/encoding.js +0 -2
  235. package/lib/network/gossip/encoding.js.map +1 -1
  236. package/lib/network/gossip/errors.js +0 -1
  237. package/lib/network/gossip/errors.js.map +1 -1
  238. package/lib/network/gossip/gossipsub.js +0 -7
  239. package/lib/network/gossip/gossipsub.js.map +1 -1
  240. package/lib/network/gossip/topic.d.ts +49 -49
  241. package/lib/network/gossip/topic.js +1 -2
  242. package/lib/network/gossip/topic.js.map +1 -1
  243. package/lib/network/interface.d.ts +1 -2
  244. package/lib/network/metadata.js +0 -4
  245. package/lib/network/metadata.js.map +1 -1
  246. package/lib/network/network.d.ts +1 -3
  247. package/lib/network/network.js +71 -89
  248. package/lib/network/network.js.map +1 -1
  249. package/lib/network/options.js +1 -1
  250. package/lib/network/options.js.map +1 -1
  251. package/lib/network/peers/datastore.js +2 -8
  252. package/lib/network/peers/datastore.js.map +1 -1
  253. package/lib/network/peers/discover.js +64 -74
  254. package/lib/network/peers/discover.js.map +1 -1
  255. package/lib/network/peers/peerManager.js +130 -154
  256. package/lib/network/peers/peerManager.js.map +1 -1
  257. package/lib/network/peers/peersData.d.ts +1 -1
  258. package/lib/network/peers/peersData.js +3 -1
  259. package/lib/network/peers/peersData.js.map +1 -1
  260. package/lib/network/peers/score/score.js +0 -6
  261. package/lib/network/peers/score/score.js.map +1 -1
  262. package/lib/network/peers/score/store.js +0 -3
  263. package/lib/network/peers/score/store.js.map +1 -1
  264. package/lib/network/peers/utils/subnetMap.js +4 -2
  265. package/lib/network/peers/utils/subnetMap.js.map +1 -1
  266. package/lib/network/processor/aggregatorTracker.js +3 -1
  267. package/lib/network/processor/aggregatorTracker.js.map +1 -1
  268. package/lib/network/processor/gossipHandlers.js +164 -145
  269. package/lib/network/processor/gossipHandlers.js.map +1 -1
  270. package/lib/network/processor/gossipQueues/indexed.js +9 -11
  271. package/lib/network/processor/gossipQueues/indexed.js.map +1 -1
  272. package/lib/network/processor/gossipQueues/linear.js +8 -9
  273. package/lib/network/processor/gossipQueues/linear.js.map +1 -1
  274. package/lib/network/processor/index.d.ts +1 -2
  275. package/lib/network/processor/index.js +6 -21
  276. package/lib/network/processor/index.js.map +1 -1
  277. package/lib/network/reqresp/ReqRespBeaconNode.js +2 -11
  278. package/lib/network/reqresp/ReqRespBeaconNode.js.map +1 -1
  279. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.d.ts +28 -0
  280. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js +328 -0
  281. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRange.js.map +1 -0
  282. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.d.ts +49 -0
  283. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js +499 -0
  284. package/lib/network/reqresp/beaconBlocksMaybeBlobsByRoot.js.map +1 -0
  285. package/lib/network/reqresp/index.d.ts +2 -0
  286. package/lib/network/reqresp/index.js +2 -0
  287. package/lib/network/reqresp/index.js.map +1 -1
  288. package/lib/network/reqresp/rateLimit.js +5 -11
  289. package/lib/network/reqresp/rateLimit.js.map +1 -1
  290. package/lib/network/statusCache.js +0 -1
  291. package/lib/network/statusCache.js.map +1 -1
  292. package/lib/network/subnets/attnetsService.js +65 -73
  293. package/lib/network/subnets/attnetsService.js.map +1 -1
  294. package/lib/network/subnets/syncnetsService.js +22 -29
  295. package/lib/network/subnets/syncnetsService.js.map +1 -1
  296. package/lib/node/nodejs.js +0 -15
  297. package/lib/node/nodejs.js.map +1 -1
  298. package/lib/sync/backfill/backfill.js +15 -57
  299. package/lib/sync/backfill/backfill.js.map +1 -1
  300. package/lib/sync/constants.d.ts +1 -2
  301. package/lib/sync/constants.js +1 -2
  302. package/lib/sync/constants.js.map +1 -1
  303. package/lib/sync/interface.d.ts +59 -1
  304. package/lib/sync/interface.js +20 -0
  305. package/lib/sync/interface.js.map +1 -1
  306. package/lib/sync/options.d.ts +1 -1
  307. package/lib/sync/range/batch.d.ts +32 -48
  308. package/lib/sync/range/batch.js +55 -201
  309. package/lib/sync/range/batch.js.map +1 -1
  310. package/lib/sync/range/chain.d.ts +10 -15
  311. package/lib/sync/range/chain.js +70 -141
  312. package/lib/sync/range/chain.js.map +1 -1
  313. package/lib/sync/range/range.d.ts +2 -2
  314. package/lib/sync/range/range.js +54 -86
  315. package/lib/sync/range/range.js.map +1 -1
  316. package/lib/sync/range/utils/hashBlocks.d.ts +2 -2
  317. package/lib/sync/range/utils/hashBlocks.js +4 -6
  318. package/lib/sync/range/utils/hashBlocks.js.map +1 -1
  319. package/lib/sync/range/utils/peerBalancer.js +13 -18
  320. package/lib/sync/range/utils/peerBalancer.js.map +1 -1
  321. package/lib/sync/sync.js +87 -95
  322. package/lib/sync/sync.js.map +1 -1
  323. package/lib/sync/unknownBlock.d.ts +28 -42
  324. package/lib/sync/unknownBlock.js +458 -404
  325. package/lib/sync/unknownBlock.js.map +1 -1
  326. package/lib/sync/utils/pendingBlocksTree.d.ts +6 -14
  327. package/lib/sync/utils/pendingBlocksTree.js +18 -24
  328. package/lib/sync/utils/pendingBlocksTree.js.map +1 -1
  329. package/lib/util/array.js +3 -7
  330. package/lib/util/array.js.map +1 -1
  331. package/lib/util/asyncIterableToEvents.js +3 -6
  332. package/lib/util/asyncIterableToEvents.js.map +1 -1
  333. package/lib/util/binarySearch.js +0 -2
  334. package/lib/util/binarySearch.js.map +1 -1
  335. package/lib/util/blobs.d.ts +2 -2
  336. package/lib/util/blobs.js +4 -4
  337. package/lib/util/blobs.js.map +1 -1
  338. package/lib/util/bufferPool.js +2 -7
  339. package/lib/util/bufferPool.js.map +1 -1
  340. package/lib/util/clock.js +18 -23
  341. package/lib/util/clock.js.map +1 -1
  342. package/lib/util/dataColumns.d.ts +12 -15
  343. package/lib/util/dataColumns.js +132 -90
  344. package/lib/util/dataColumns.js.map +1 -1
  345. package/lib/util/itTrigger.js +4 -4
  346. package/lib/util/itTrigger.js.map +1 -1
  347. package/lib/util/map.js +0 -2
  348. package/lib/util/map.js.map +1 -1
  349. package/lib/util/queue/itemQueue.js +49 -52
  350. package/lib/util/queue/itemQueue.js.map +1 -1
  351. package/lib/util/serializedCache.js +3 -1
  352. package/lib/util/serializedCache.js.map +1 -1
  353. package/lib/util/set.js +0 -2
  354. package/lib/util/set.js.map +1 -1
  355. package/lib/util/sszBytes.d.ts +0 -1
  356. package/lib/util/sszBytes.js +1 -1
  357. package/lib/util/sszBytes.js.map +1 -1
  358. package/lib/util/timeSeries.js +1 -3
  359. package/lib/util/timeSeries.js.map +1 -1
  360. package/lib/util/types.d.ts +1 -1
  361. package/lib/util/types.js +2 -2
  362. package/lib/util/types.js.map +1 -1
  363. package/lib/util/wrapError.d.ts +0 -7
  364. package/package.json +16 -22
  365. package/lib/bun-wrappers/prometheus-gc-stats.d.ts +0 -2
  366. package/lib/bun-wrappers/prometheus-gc-stats.js +0 -8
  367. package/lib/bun-wrappers/prometheus-gc-stats.js.map +0 -1
  368. package/lib/chain/ColumnReconstructionTracker.d.ts +0 -32
  369. package/lib/chain/ColumnReconstructionTracker.js +0 -67
  370. package/lib/chain/ColumnReconstructionTracker.js.map +0 -1
  371. package/lib/chain/GetBlobsTracker.d.ts +0 -31
  372. package/lib/chain/GetBlobsTracker.js +0 -82
  373. package/lib/chain/GetBlobsTracker.js.map +0 -1
  374. package/lib/sync/types.d.ts +0 -44
  375. package/lib/sync/types.js +0 -34
  376. package/lib/sync/types.js.map +0 -1
  377. package/lib/sync/utils/downloadByRange.d.ts +0 -186
  378. package/lib/sync/utils/downloadByRange.js +0 -457
  379. package/lib/sync/utils/downloadByRange.js.map +0 -1
  380. package/lib/sync/utils/downloadByRoot.d.ts +0 -119
  381. package/lib/sync/utils/downloadByRoot.js +0 -319
  382. package/lib/sync/utils/downloadByRoot.js.map +0 -1
  383. package/lib/util/execution.d.ts +0 -20
  384. package/lib/util/execution.js +0 -148
  385. package/lib/util/execution.js.map +0 -1
@@ -1,20 +1,17 @@
1
1
  import { ChainForkConfig } from "@lodestar/config";
2
- import { Epoch, Root, Slot } from "@lodestar/types";
2
+ import { Epoch, Root, Slot, phase0 } from "@lodestar/types";
3
3
  import { Logger } from "@lodestar/utils";
4
- import { IBlockInput } from "../../chain/blocks/blockInput/types.js";
4
+ import { BlockInput } from "../../chain/blocks/types.js";
5
5
  import { Metrics } from "../../metrics/metrics.js";
6
6
  import { PeerAction } from "../../network/index.js";
7
7
  import { PeerSyncMeta } from "../../network/peers/peersData.js";
8
+ import { PartialDownload } from "../../network/reqresp/beaconBlocksMaybeBlobsByRange.js";
8
9
  import { CustodyConfig } from "../../util/dataColumns.js";
9
10
  import { PeerIdStr } from "../../util/peerId.js";
10
- import { WarnResult } from "../../util/wrapError.js";
11
- import { DownloadByRangeError } from "../utils/downloadByRange.js";
12
11
  import { RangeSyncType } from "../utils/remoteSyncType.js";
13
- import { Batch, BatchErrorCode, BatchMetadata } from "./batch.js";
14
- import { IClock } from "../../util/clock.js";
12
+ import { BatchErrorCode, BatchMetadata } from "./batch.js";
15
13
  export type SyncChainModules = {
16
14
  config: ChainForkConfig;
17
- clock: IClock;
18
15
  custodyConfig: CustodyConfig;
19
16
  logger: Logger;
20
17
  metrics: Metrics | null;
@@ -24,17 +21,18 @@ export type SyncChainFns = {
24
21
  * Must return if ALL blocks are processed successfully
25
22
  * If SOME blocks are processed must throw BlockProcessorError()
26
23
  */
27
- processChainSegment: (blocks: IBlockInput[], syncType: RangeSyncType) => Promise<void>;
24
+ processChainSegment: (blocks: BlockInput[], syncType: RangeSyncType) => Promise<void>;
28
25
  /** Must download blocks, and validate their range */
29
- downloadByRange: (peer: PeerSyncMeta, batch: Batch, syncType: RangeSyncType) => Promise<WarnResult<IBlockInput[], DownloadByRangeError>>;
26
+ downloadBeaconBlocksByRange: (peer: PeerSyncMeta, request: phase0.BeaconBlocksByRangeRequest, partialDownload: PartialDownload, syncType: RangeSyncType) => Promise<{
27
+ blocks: BlockInput[];
28
+ pendingDataColumns: null | number[];
29
+ }>;
30
30
  /** Report peer for negative actions. Decouples from the full network instance */
31
31
  reportPeer: (peer: PeerIdStr, action: PeerAction, actionName: string) => void;
32
32
  /** Gets current peer custodyColumns and earliestAvailableSlot */
33
33
  getConnectedPeerSyncMeta: (peerId: string) => PeerSyncMeta;
34
34
  /** Hook called when Chain state completes */
35
35
  onEnd: (err: Error | null, target: ChainTarget | null) => void;
36
- /** Deletes an array of BlockInputs from the BlockInputCache */
37
- pruneBlockInputs: (blockInputs: IBlockInput[]) => void;
38
36
  };
39
37
  /**
40
38
  * Sync this up to this target. Uses slot instead of epoch to re-use logic for finalized sync
@@ -88,10 +86,9 @@ export declare class SyncChain {
88
86
  private lastEpochWithProcessBlocks;
89
87
  private status;
90
88
  private readonly processChainSegment;
91
- private readonly downloadByRange;
89
+ private readonly downloadBeaconBlocksByRange;
92
90
  private readonly reportPeer;
93
91
  private readonly getConnectedPeerSyncMeta;
94
- private readonly pruneBlockInputs;
95
92
  /** AsyncIterable that guarantees processChainSegment is run only at once at anytime */
96
93
  private readonly batchProcessor;
97
94
  /** Sorted map of batches undergoing some kind of processing. */
@@ -99,8 +96,6 @@ export declare class SyncChain {
99
96
  private readonly peerset;
100
97
  private readonly logger;
101
98
  private readonly config;
102
- private readonly clock;
103
- private readonly metrics;
104
99
  private readonly custodyConfig;
105
100
  constructor(initialBatchEpoch: Epoch, initialTarget: ChainTarget, syncType: RangeSyncType, fns: SyncChainFns, modules: SyncChainModules);
106
101
  /**
@@ -1,13 +1,10 @@
1
+ import { ForkName, isForkPostFulu } from "@lodestar/params";
1
2
  import { ErrorAborted, toRootHex } from "@lodestar/utils";
2
- import { isBlockInputBlobs, isBlockInputColumns } from "../../chain/blocks/blockInput/blockInput.js";
3
- import { BlockInputErrorCode } from "../../chain/blocks/blockInput/errors.js";
4
- import { BlobSidecarErrorCode } from "../../chain/errors/blobSidecarError.js";
5
- import { DataColumnSidecarErrorCode } from "../../chain/errors/dataColumnSidecarError.js";
3
+ import { BlockInputType } from "../../chain/blocks/types.js";
6
4
  import { PeerAction, prettyPrintPeerIdStr } from "../../network/index.js";
7
5
  import { ItTrigger } from "../../util/itTrigger.js";
8
6
  import { wrapError } from "../../util/wrapError.js";
9
7
  import { BATCH_BUFFER_SIZE, EPOCHS_PER_BATCH, MAX_LOOK_AHEAD_EPOCHS } from "../constants.js";
10
- import { DownloadByRangeErrorCode } from "../utils/downloadByRange.js";
11
8
  import { RangeSyncType } from "../utils/remoteSyncType.js";
12
9
  import { Batch, BatchError, BatchErrorCode, BatchStatus } from "./batch.js";
13
10
  import { ChainPeersBalancer, batchStartEpochIsAfterSlot, computeHighestTarget, getBatchSlotRange, getNextBatchToProcess, isSyncChainDone, toArr, toBeDownloadedStartEpoch, validateBatchesStatus, } from "./utils/index.js";
@@ -31,53 +28,25 @@ let nextChainId = 0;
31
28
  * root are grouped into the peer pool and queried for batches when downloading the chain.
32
29
  */
33
30
  export class SyncChain {
34
- /** Short string id to identify this SyncChain in logs */
35
- logId;
36
- syncType;
37
- /**
38
- * Should sync up until this slot, then stop.
39
- * Finalized SyncChains have a dynamic target, so if this chain has no peers the target can become null
40
- */
41
- target;
42
- /** Number of validated epochs. For the SyncRange to prevent switching chains too fast */
43
- validatedEpochs = 0;
44
- firstBatchEpoch;
45
- /**
46
- * The start of the chain segment. Any epoch previous to this one has been validated.
47
- * Note: lastEpochWithProcessBlocks` signals the epoch at which 1 or more blocks have been processed
48
- * successfully. So that epoch itself may or may not be valid.
49
- */
50
- lastEpochWithProcessBlocks;
51
- status = SyncChainStatus.Stopped;
52
- processChainSegment;
53
- downloadByRange;
54
- reportPeer;
55
- getConnectedPeerSyncMeta;
56
- pruneBlockInputs;
57
- /** AsyncIterable that guarantees processChainSegment is run only at once at anytime */
58
- batchProcessor = new ItTrigger();
59
- /** Sorted map of batches undergoing some kind of processing. */
60
- batches = new Map();
61
- peerset = new Map();
62
- logger;
63
- config;
64
- clock;
65
- metrics;
66
- custodyConfig;
67
31
  constructor(initialBatchEpoch, initialTarget, syncType, fns, modules) {
68
- const { config, clock, custodyConfig, logger, metrics } = modules;
32
+ /** Number of validated epochs. For the SyncRange to prevent switching chains too fast */
33
+ this.validatedEpochs = 0;
34
+ this.status = SyncChainStatus.Stopped;
35
+ /** AsyncIterable that guarantees processChainSegment is run only at once at anytime */
36
+ this.batchProcessor = new ItTrigger();
37
+ /** Sorted map of batches undergoing some kind of processing. */
38
+ this.batches = new Map();
39
+ this.peerset = new Map();
40
+ const { config, custodyConfig, logger, metrics } = modules;
69
41
  this.firstBatchEpoch = initialBatchEpoch;
70
42
  this.lastEpochWithProcessBlocks = initialBatchEpoch;
71
43
  this.target = initialTarget;
72
44
  this.syncType = syncType;
73
45
  this.processChainSegment = fns.processChainSegment;
74
- this.downloadByRange = fns.downloadByRange;
46
+ this.downloadBeaconBlocksByRange = fns.downloadBeaconBlocksByRange;
75
47
  this.reportPeer = fns.reportPeer;
76
- this.pruneBlockInputs = fns.pruneBlockInputs;
77
48
  this.getConnectedPeerSyncMeta = fns.getConnectedPeerSyncMeta;
78
49
  this.config = config;
79
- this.clock = clock;
80
- this.metrics = metrics;
81
50
  this.custodyConfig = custodyConfig;
82
51
  this.logger = logger;
83
52
  this.logId = `${syncType}-${nextChainId++}`;
@@ -214,9 +183,6 @@ export class SyncChain {
214
183
  if (e instanceof ErrorAborted) {
215
184
  return; // Ignore
216
185
  }
217
- for (const batch of this.batches.values()) {
218
- this.pruneBlockInputs(batch.getBlocks());
219
- }
220
186
  this.status = SyncChainStatus.Error;
221
187
  this.logger.verbose("SyncChain Error", { id: this.logId }, e);
222
188
  // If a batch exceeds it's retry limit, maybe downscore peers.
@@ -322,7 +288,7 @@ export class SyncChain {
322
288
  this.logger.error("Attempting to add existing Batch to SyncChain", { id: this.logId, startEpoch });
323
289
  return null;
324
290
  }
325
- const batch = new Batch(startEpoch, this.config, this.clock, this.custodyConfig);
291
+ const batch = new Batch(startEpoch, this.config);
326
292
  this.batches.set(startEpoch, batch);
327
293
  return batch;
328
294
  }
@@ -336,95 +302,62 @@ export class SyncChain {
336
302
  peer: prettyPrintPeerIdStr(peer.peerId),
337
303
  });
338
304
  try {
339
- batch.startDownloading(peer.peerId);
305
+ const partialDownload = batch.startDownloading(peer.peerId);
340
306
  // wrapError ensures to never call both batch success() and batch error()
341
- const res = await wrapError(this.downloadByRange(peer, batch, this.syncType));
342
- if (res.err) {
343
- // There's several known error cases where we want to take action on the peer
344
- const errCode = res.err.type?.code;
345
- this.metrics?.syncRange.downloadByRange.error.inc({ client: peer.client, code: errCode ?? "UNKNOWN" });
346
- if (this.syncType === RangeSyncType.Finalized) {
347
- // For finalized sync, we are stricter with peers as there is no ambiguity about which chain we're syncing.
348
- // The below cases indicate the peer may be on a different chain, so are not penalized during head sync.
349
- switch (errCode) {
350
- case BlockInputErrorCode.MISMATCHED_ROOT_HEX:
351
- case DownloadByRangeErrorCode.MISSING_BLOBS:
352
- case DownloadByRangeErrorCode.EXTRA_BLOBS:
353
- case DownloadByRangeErrorCode.MISSING_COLUMNS:
354
- case DownloadByRangeErrorCode.EXTRA_COLUMNS:
355
- case BlobSidecarErrorCode.INCORRECT_SIDECAR_COUNT:
356
- case BlobSidecarErrorCode.INCORRECT_BLOCK:
357
- case DataColumnSidecarErrorCode.INCORRECT_SIDECAR_COUNT:
358
- case DataColumnSidecarErrorCode.INCORRECT_BLOCK:
359
- this.reportPeer(peer.peerId, PeerAction.LowToleranceError, res.err.message);
360
- }
361
- }
362
- switch (errCode) {
363
- case DownloadByRangeErrorCode.EXTRA_BLOCKS:
364
- case DownloadByRangeErrorCode.OUT_OF_ORDER_BLOCKS:
365
- case DownloadByRangeErrorCode.OUT_OF_RANGE_BLOCKS:
366
- case DownloadByRangeErrorCode.PARENT_ROOT_MISMATCH:
367
- case BlobSidecarErrorCode.INCLUSION_PROOF_INVALID:
368
- case BlobSidecarErrorCode.INVALID_KZG_PROOF_BATCH:
369
- case DataColumnSidecarErrorCode.INCORRECT_KZG_COMMITMENTS_COUNT:
370
- case DataColumnSidecarErrorCode.INCORRECT_KZG_PROOF_COUNT:
371
- case DataColumnSidecarErrorCode.INVALID_KZG_PROOF_BATCH:
372
- case DataColumnSidecarErrorCode.INCLUSION_PROOF_INVALID:
373
- this.reportPeer(peer.peerId, PeerAction.LowToleranceError, res.err.message);
374
- }
375
- this.logger.verbose("Batch download error", { id: this.logId, ...batch.getMetadata(), peer: prettyPrintPeerIdStr(peer.peerId) }, res.err);
376
- batch.downloadingError(peer.peerId); // Throws after MAX_DOWNLOAD_ATTEMPTS
377
- }
378
- else {
379
- this.logger.verbose("Batch download success", {
380
- id: this.logId,
381
- ...batch.getMetadata(),
382
- peer: prettyPrintPeerIdStr(peer.peerId),
383
- });
384
- this.metrics?.syncRange.downloadByRange.success.inc();
385
- const { warnings, result } = res.result;
386
- const downloadSuccessOutput = batch.downloadingSuccess(peer.peerId, result);
387
- const logMeta = {
388
- blockCount: downloadSuccessOutput.blocks.length,
389
- };
390
- if (warnings && warnings.length > 0) {
391
- for (const warning of warnings) {
392
- this.metrics?.syncRange.downloadByRange.warn.inc({ client: peer.client, code: warning.type.code });
393
- this.logger.debug("Batch downloaded with warning", { id: this.logId, epoch: batch.startEpoch, ...logMeta, peer: prettyPrintPeerIdStr(peer.peerId) }, warning);
394
- }
395
- }
396
- for (const block of downloadSuccessOutput.blocks) {
397
- if (isBlockInputBlobs(block)) {
398
- const blockLogMeta = block.getLogMeta();
399
- const expectedBlobs = typeof blockLogMeta.expectedBlobs === "number" ? blockLogMeta.expectedBlobs : 0;
400
- logMeta.expectedBlobCount = (logMeta.expectedBlobCount ?? 0) + expectedBlobs;
401
- logMeta.receivedBlobCount = (logMeta.receivedBlobCount ?? 0) + blockLogMeta.receivedBlobs;
402
- }
403
- else if (isBlockInputColumns(block)) {
404
- logMeta.columnCount = (logMeta.columnCount ?? 0) + block.getLogMeta().receivedColumns;
405
- }
406
- }
407
- let logMessage;
307
+ const res = await wrapError(this.downloadBeaconBlocksByRange(peer, batch.request, partialDownload, this.syncType));
308
+ if (!res.err) {
309
+ const downloadSuccessOutput = batch.downloadingSuccess(res.result);
408
310
  if (downloadSuccessOutput.status === BatchStatus.AwaitingProcessing) {
409
- logMessage = "Finished downloading batch by range";
311
+ const blocks = downloadSuccessOutput.blocks;
312
+ let hasPostDenebBlocks = false;
313
+ const blobs = blocks.reduce((acc, blockInput) => {
314
+ hasPostDenebBlocks ||= blockInput.type === BlockInputType.availableData;
315
+ return hasPostDenebBlocks
316
+ ? acc +
317
+ (blockInput.type === BlockInputType.availableData &&
318
+ (blockInput.blockData.fork === ForkName.deneb || blockInput.blockData.fork === ForkName.electra)
319
+ ? blockInput.blockData.blobs.length
320
+ : 0)
321
+ : 0;
322
+ }, 0);
323
+ const dataColumns = blocks.reduce((acc, blockInput) => {
324
+ hasPostDenebBlocks ||= blockInput.type === BlockInputType.availableData;
325
+ return hasPostDenebBlocks
326
+ ? acc +
327
+ (blockInput.type === BlockInputType.availableData && isForkPostFulu(blockInput.blockData.fork)
328
+ ? blockInput.blockData.dataColumns.length
329
+ : 0)
330
+ : 0;
331
+ }, 0);
332
+ const downloadInfo = { blocks: blocks.length };
333
+ if (hasPostDenebBlocks) {
334
+ Object.assign(downloadInfo, { blobs, dataColumns });
335
+ }
336
+ this.logger.debug("Downloaded batch", {
337
+ id: this.logId,
338
+ ...batch.getMetadata(),
339
+ ...downloadInfo,
340
+ peer: prettyPrintPeerIdStr(peer.peerId),
341
+ });
410
342
  this.triggerBatchProcessor();
411
343
  }
412
344
  else {
413
- logMessage = "Partially downloaded batch by range. Attempting another round of downloads";
345
+ const pendingDataColumns = downloadSuccessOutput.pendingDataColumns.join(",");
346
+ this.logger.debug("Partially downloaded batch", {
347
+ id: this.logId,
348
+ ...batch.getMetadata(),
349
+ pendingDataColumns,
350
+ peer: peer.peerId,
351
+ });
414
352
  // the flow will continue to call triggerBatchDownloader() below
415
353
  }
416
- this.logger.debug(logMessage, {
417
- id: this.logId,
418
- epoch: batch.startEpoch,
419
- ...logMeta,
420
- peer: prettyPrintPeerIdStr(peer.peerId),
421
- });
354
+ }
355
+ else {
356
+ this.logger.verbose("Batch download error", { id: this.logId, ...batch.getMetadata(), peer: prettyPrintPeerIdStr(peer.peerId) }, res.err);
357
+ batch.downloadingError(); // Throws after MAX_DOWNLOAD_ATTEMPTS
422
358
  }
423
359
  // Preemptively request more blocks from peers whilst we process current blocks
424
- //
425
- // TODO(fulu): why is this second call here. should fall through to the one below the catch block. commenting
426
- // for now and will resolve during PR process
427
- // this.triggerBatchDownloader();
360
+ this.triggerBatchDownloader();
428
361
  }
429
362
  catch (e) {
430
363
  // bubble the error up to the main async iterable loop
@@ -442,7 +375,6 @@ export class SyncChain {
442
375
  const res = await wrapError(this.processChainSegment(blocks, this.syncType));
443
376
  if (!res.err) {
444
377
  batch.processingSuccess();
445
- this.pruneBlockInputs(batch.getBlocks());
446
378
  // If the processed batch is not empty, validate previous AwaitingValidation blocks.
447
379
  if (blocks.length > 0) {
448
380
  this.advanceChain(batch.startEpoch);
@@ -488,15 +420,13 @@ export class SyncChain {
488
420
  const attemptOk = batch.validationSuccess();
489
421
  for (const attempt of batch.failedProcessingAttempts) {
490
422
  if (attempt.hash !== attemptOk.hash) {
491
- for (const badAttemptPeer of attempt.peers) {
492
- if (attemptOk.peers.find((goodPeer) => goodPeer === badAttemptPeer)) {
493
- // The same peer corrected its previous attempt
494
- this.reportPeer(badAttemptPeer, PeerAction.MidToleranceError, "SyncChainInvalidBatchSelf");
495
- }
496
- else {
497
- // A different peer sent an bad batch
498
- this.reportPeer(badAttemptPeer, PeerAction.LowToleranceError, "SyncChainInvalidBatchOther");
499
- }
423
+ if (attemptOk.peer === attempt.peer.toString()) {
424
+ // The same peer corrected its previous attempt
425
+ this.reportPeer(attempt.peer, PeerAction.MidToleranceError, "SyncChainInvalidBatchSelf");
426
+ }
427
+ else {
428
+ // A different peer sent an bad batch
429
+ this.reportPeer(attempt.peer, PeerAction.LowToleranceError, "SyncChainInvalidBatchOther");
500
430
  }
501
431
  }
502
432
  }
@@ -523,8 +453,8 @@ export class SyncChain {
523
453
  }
524
454
  const peersByColumnIndex = new Map();
525
455
  for (const [columnIndex, column] of this.custodyConfig.sampledColumns.entries()) {
526
- for (const { custodyColumns } of peersSyncMeta.values()) {
527
- if (custodyColumns.includes(column)) {
456
+ for (const { custodyGroups } of peersSyncMeta.values()) {
457
+ if (custodyGroups.includes(column)) {
528
458
  peersByColumnIndex.set(columnIndex, (peersByColumnIndex.get(columnIndex) ?? 0) + 1);
529
459
  }
530
460
  }
@@ -548,9 +478,8 @@ export function shouldReportPeerOnBatchError(code) {
548
478
  case BatchErrorCode.MAX_PROCESSING_ATTEMPTS:
549
479
  return { action: PeerAction.LowToleranceError, reason: "SyncChainMaxProcessingAttempts" };
550
480
  // TODO: Should peers be reported for MAX_DOWNLOAD_ATTEMPTS?
551
- case BatchErrorCode.MAX_DOWNLOAD_ATTEMPTS:
552
- case BatchErrorCode.INVALID_COUNT:
553
481
  case BatchErrorCode.WRONG_STATUS:
482
+ case BatchErrorCode.MAX_DOWNLOAD_ATTEMPTS:
554
483
  case BatchErrorCode.MAX_EXECUTION_ENGINE_ERROR_ATTEMPTS:
555
484
  return null;
556
485
  }
@@ -1 +1 @@
1
- {"version":3,"file":"chain.js","sourceRoot":"","sources":["../../../src/sync/range/chain.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chain.js","sourceRoot":"","sources":["../../../src/sync/range/chain.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAE,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAC,YAAY,EAAU,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAoC,cAAc,EAAC,MAAM,6BAA6B,CAAC;AAE9F,OAAO,EAAC,UAAU,EAAE,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAIxE,OAAO,EAAC,SAAS,EAAC,MAAM,yBAAyB,CAAC;AAElD,OAAO,EAAC,SAAS,EAAC,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAC,iBAAiB,EAAE,gBAAgB,EAAE,qBAAqB,EAAC,MAAM,iBAAiB,CAAC;AAC3F,OAAO,EAAC,aAAa,EAAC,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAC,KAAK,EAAE,UAAU,EAAE,cAAc,EAAiB,WAAW,EAAC,MAAM,YAAY,CAAC;AACzF,OAAO,EACL,kBAAkB,EAElB,0BAA0B,EAC1B,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,KAAK,EACL,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC;AAuC1B,MAAM,OAAO,mBAAoB,SAAQ,KAAK;CAAG;AAYjD,MAAM,CAAN,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,sCAAmB,CAAA;IACnB,sCAAmB,CAAA;IACnB,gCAAa,CAAA;IACb,kCAAe,CAAA;AACjB,CAAC,EALW,eAAe,KAAf,eAAe,QAK1B;AAED,8GAA8G;AAC9G,wGAAwG;AACxG,IAAI,WAAW,GAAG,CAAC,CAAC;AAEpB;;;;;;GAMG;AACH,MAAM,OAAO,SAAS;IAoCpB,YACE,iBAAwB,EACxB,aAA0B,EAC1B,QAAuB,EACvB,GAAiB,EACjB,OAAyB;QA/B3B,yFAAyF;QACzF,oBAAe,GAAG,CAAC,CAAC;QASZ,WAAM,GAAG,eAAe,CAAC,OAAO,CAAC;QAMzC,uFAAuF;QACtE,mBAAc,GAAG,IAAI,SAAS,EAAE,CAAC;QAClD,gEAAgE;QAC/C,YAAO,GAAG,IAAI,GAAG,EAAgB,CAAC;QAClC,YAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;QAa3D,MAAM,EAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO,EAAC,GAAG,OAAO,CAAC;QACzD,IAAI,CAAC,eAAe,GAAG,iBAAiB,CAAC;QACzC,IAAI,CAAC,0BAA0B,GAAG,iBAAiB,CAAC;QACpD,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,mBAAmB,GAAG,GAAG,CAAC,mBAAmB,CAAC;QACnD,IAAI,CAAC,2BAA2B,GAAG,GAAG,CAAC,2BAA2B,CAAC;QACnE,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;QACjC,IAAI,CAAC,wBAAwB,GAAG,GAAG,CAAC,wBAAwB,CAAC;QAC7D,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,GAAG,QAAQ,IAAI,WAAW,EAAE,EAAE,CAAC;QAE5C,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QAChF,CAAC;QAED,gCAAgC;QAChC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CACd,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,EAClC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAC1B,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,mBAA0B;QACrC,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;YACpB,KAAK,eAAe,CAAC,OAAO;gBAC1B,MAAM,CAAC,eAAe;YACxB,KAAK,eAAe,CAAC,OAAO;gBAC1B,OAAO,CAAC,wBAAwB;YAClC,KAAK,eAAe,CAAC,KAAK,CAAC;YAC3B,KAAK,eAAe,CAAC,IAAI;gBACvB,MAAM,IAAI,mBAAmB,CAAC,yCAAyC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1F,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC;QAEtC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,wBAAwB,EAAE;YAC1C,mBAAmB;YACnB,0BAA0B,EAAE,IAAI,CAAC,0BAA0B;YAC3D,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;SAC7B,CAAC,CAAC;QAEH,oFAAoF;QACpF,mFAAmF;QACnF,MAAM,iCAAiC,GACrC,IAAI,CAAC,0BAA0B;YAC/B,IAAI,CAAC,KAAK,CAAC,CAAC,mBAAmB,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,gBAAgB,CAAC,GAAG,gBAAgB,CAAC;QAC5G,IAAI,CAAC,YAAY,CAAC,iCAAiC,CAAC,CAAC;QAErD,uDAAuD;QACvD,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,qBAAqB,EAAE,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,OAAO,CAAC,IAAe,EAAE,MAAmB;QAC1C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,MAAiB;QAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,IAAI,iBAAiB;QACnB,uDAAuD;QACvD,OAAO,iBAAiB,CAAC,IAAI,CAAC,0BAA0B,GAAG,gBAAgB,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;IAC7F,CAAC;IAED,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,MAAM,KAAK,eAAe,CAAC,OAAO,CAAC;IACjD,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,MAAM,KAAK,eAAe,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,KAAK,eAAe,CAAC,IAAI,CAAC;IACvF,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,QAAQ;QACN,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,wCAAwC;IACxC,aAAa;QACX,OAAO;YACL,UAAU,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACvC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI;YAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,UAAU,EAAE,IAAI,CAAC,0BAA0B;YAC3C,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE;SAChC,CAAC;IACJ,CAAC;IAEO,aAAa;QACnB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,IAAI;QAChB,IAAI,CAAC;YACH,wDAAwD;YACxD,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC1C,IAAI,IAAI,CAAC,MAAM,KAAK,eAAe,CAAC,OAAO,EAAE,CAAC;oBAC5C,SAAS;gBACX,CAAC;gBAED,6EAA6E;gBAC7E,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBAE3C,uFAAuF;gBACvF,IAAI,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC5F,MAAM;gBACR,CAAC;gBAED,oCAAoC;gBACpC,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBACzD,IAAI,KAAK;oBAAE,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC5C,CAAC;YAED,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC;YACnC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAC,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,YAAY,EAAE,CAAC;gBAC9B,OAAO,CAAC,SAAS;YACnB,CAAC;YAED,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAC,EAAE,CAAU,CAAC,CAAC;YAErE,8DAA8D;YAC9D,8FAA8F;YAC9F,IAAI,CAAC,YAAY,UAAU,EAAE,CAAC;gBAC5B,MAAM,gBAAgB,GAAG,4BAA4B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnE,IAAI,gBAAgB,EAAE,CAAC;oBACrB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;wBACvC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;oBAC1E,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,CAAC,CAAC;QACV,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB;QAC3B,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;IAChC,CAAC;IAED;;;OAGG;IACK,sBAAsB;QAC5B,IAAI,CAAC;YACH,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,sDAAsD;YACtD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAU,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,cAAc;QACpB,IAAI,IAAI,CAAC,MAAM,KAAK,eAAe,CAAC,OAAO,EAAE,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAmB,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACtD,IAAI,CAAC;gBACH,aAAa,CAAC,IAAI,CAAC,EAAC,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,EAAE,MAAM,EAAC,CAAC,CAAC;YACzE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,EAAC,MAAM,EAAC,EAAE,CAAU,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,kBAAkB,CAAC,aAAa,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEnH,qCAAqC;QACrC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,gBAAgB,EAAE,CAAC;gBACxD,SAAS;YACX,CAAC;YAED,MAAM,IAAI,GAAG,YAAY,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YACtD,IAAI,IAAI,EAAE,CAAC;gBACT,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAED,2DAA2D;QAC3D,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpC,OAAO,KAAK,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,IAAI,GAAG,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAClD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,4IAA4I;gBAC5I,MAAM;YACR,CAAC;YACD,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACjC,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEpC,mDAAmD;QACnD,sFAAsF;QACtF,+EAA+E;QAC/E,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YAC/C,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,kBAAkB,CAAC;QACjH,CAAC,CAAC,CAAC;QACH,IAAI,eAAe,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,wGAAwG;QACxG,gGAAgG;QAChG,8HAA8H;QAC9H,IACE,OAAO,CAAC,MAAM,GAAG,CAAC;YAClB,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,IAAI,CAAC,0BAA0B,GAAG,qBAAqB,EACxG,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,iHAAiH;QACjH,MAAM,UAAU,GAAG,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAEtF,mHAAmH;QACnH,IAAI,0BAA0B,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7D,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+CAA+C,EAAE,EAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAC,CAAC,CAAC;YACjG,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,SAAS,CAAC,KAAY,EAAE,IAAkB;QACtD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,mBAAmB,EAAE;YACvC,EAAE,EAAE,IAAI,CAAC,KAAK;YACd,GAAG,KAAK,CAAC,WAAW,EAAE;YACtB,IAAI,EAAE,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;SACxC,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAE5D,yEAAyE;YACzE,MAAM,GAAG,GAAG,MAAM,SAAS,CACzB,IAAI,CAAC,2BAA2B,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,CACtF,CAAC;YAEF,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;gBACb,MAAM,qBAAqB,GAAG,KAAK,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACnE,IAAI,qBAAqB,CAAC,MAAM,KAAK,WAAW,CAAC,kBAAkB,EAAE,CAAC;oBACpE,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC;oBAC5C,IAAI,kBAAkB,GAAG,KAAK,CAAC;oBAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE;wBAC9C,kBAAkB,KAAK,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,aAAa,CAAC;wBACxE,OAAO,kBAAkB;4BACvB,CAAC,CAAC,GAAG;gCACD,CAAC,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,aAAa;oCACjD,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,KAAK,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,CAAC,OAAO,CAAC;oCAC9F,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM;oCACnC,CAAC,CAAC,CAAC,CAAC;4BACV,CAAC,CAAC,CAAC,CAAC;oBACR,CAAC,EAAE,CAAC,CAAC,CAAC;oBACN,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE;wBACpD,kBAAkB,KAAK,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,aAAa,CAAC;wBACxE,OAAO,kBAAkB;4BACvB,CAAC,CAAC,GAAG;gCACD,CAAC,UAAU,CAAC,IAAI,KAAK,cAAc,CAAC,aAAa,IAAI,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC;oCAC5F,CAAC,CAAE,UAAU,CAAC,SAAmC,CAAC,WAAW,CAAC,MAAM;oCACpE,CAAC,CAAC,CAAC,CAAC;4BACV,CAAC,CAAC,CAAC,CAAC;oBACR,CAAC,EAAE,CAAC,CAAC,CAAC;oBAEN,MAAM,YAAY,GAAG,EAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAC,CAAC;oBAC7C,IAAI,kBAAkB,EAAE,CAAC;wBACvB,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,EAAC,KAAK,EAAE,WAAW,EAAC,CAAC,CAAC;oBACpD,CAAC;oBACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,EAAE;wBACpC,EAAE,EAAE,IAAI,CAAC,KAAK;wBACd,GAAG,KAAK,CAAC,WAAW,EAAE;wBACtB,GAAG,YAAY;wBACf,IAAI,EAAE,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC;qBACxC,CAAC,CAAC;oBACH,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC/B,CAAC;qBAAM,CAAC;oBACN,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC9E,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE;wBAC9C,EAAE,EAAE,IAAI,CAAC,KAAK;wBACd,GAAG,KAAK,CAAC,WAAW,EAAE;wBACtB,kBAAkB;wBAClB,IAAI,EAAE,IAAI,CAAC,MAAM;qBAClB,CAAC,CAAC;oBACH,gEAAgE;gBAClE,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,OAAO,CACjB,sBAAsB,EACtB,EAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,EAAC,EACjF,GAAG,CAAC,GAAG,CACR,CAAC;gBACF,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,qCAAqC;YACjE,CAAC;YAED,+EAA+E;YAC/E,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAChC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,sDAAsD;YACtD,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAU,CAAC,CAAC;QACtC,CAAC;QAED,+EAA+E;QAC/E,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY,CAAC,KAAY;QACrC,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC;QAEvC,yEAAyE;QACzE,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE7E,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAE1B,oFAAoF;YACpF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACtC,CAAC;YAED,oDAAoD;YACpD,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,WAAW,EAAE,EAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9F,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,6CAA6C;YAE7E,mFAAmF;YACnF,oFAAoF;YACpF,yBAAyB;YACzB,4EAA4E;YAC5E,yCAAyC;YACzC,IAAI;YAEJ,4FAA4F;YAC5F,yFAAyF;YACzF,kDAAkD;YAClD,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;gBACjD,IAAI,YAAY,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC;oBAC/C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,wBAAwB,EAAE,EAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,YAAY,CAAC,WAAW,EAAE,EAAC,CAAC,CAAC;oBAC/F,YAAY,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,6CAA6C;gBACtF,CAAC;YACH,CAAC;QACH,CAAC;QAED,4FAA4F;QAC5F,IAAI,CAAC,sBAAsB,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,6BAAoC;QACvD,+CAA+C;QAC/C,IAAI,6BAA6B,IAAI,IAAI,CAAC,0BAA0B,EAAE,CAAC;YACrE,OAAO;QACT,CAAC;QAED,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YACvD,IAAI,KAAK,CAAC,UAAU,GAAG,6BAA6B,EAAE,CAAC;gBACrD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC9B,IAAI,CAAC,eAAe,IAAI,gBAAgB,CAAC;gBAEzC,8EAA8E;gBAC9E,MAAM,SAAS,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC5C,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,wBAAwB,EAAE,CAAC;oBACrD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;wBACpC,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;4BAC/C,+CAA+C;4BAC/C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,iBAAiB,EAAE,2BAA2B,CAAC,CAAC;wBAC3F,CAAC;6BAAM,CAAC;4BACN,qCAAqC;4BACrC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,iBAAiB,EAAE,4BAA4B,CAAC,CAAC;wBAC5F,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC,0BAA0B,GAAG,6BAA6B,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,EAAE;YACpC,EAAE,EAAE,IAAI,CAAC,KAAK;YACd,0BAA0B,EAAE,IAAI,CAAC,0BAA0B;SAC5D,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,OAAgB;QACpC,MAAM,eAAe,GACnB,IAAI,CAAC,QAAQ,KAAK,aAAa,CAAC,SAAS;YACvC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,kBAAkB;YACtC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC;QAEtC,MAAM,aAAa,GAAG,IAAI,GAAG,EAA2B,CAAC;QACzD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC;gBACH,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,CAAC,CAAC;YACnE,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,kDAAkD;YACpD,CAAC;QACH,CAAC;QAED,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;QACrD,KAAK,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;YAChF,KAAK,MAAM,EAAC,aAAa,EAAC,IAAI,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC;gBACrD,IAAI,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACnC,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtF,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,IAAI,WAAW,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC;YAChG,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;YAC3D,eAAe,CAAC,GAAG,CAAC,EAAC,WAAW,EAAC,EAAE,SAAS,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAC1C,IAAoB;IAEpB,QAAQ,IAAI,EAAE,CAAC;QACb,mFAAmF;QACnF,0FAA0F;QAC1F,0CAA0C;QAC1C,2FAA2F;QAC3F,KAAK,cAAc,CAAC,uBAAuB;YACzC,OAAO,EAAC,MAAM,EAAE,UAAU,CAAC,iBAAiB,EAAE,MAAM,EAAE,gCAAgC,EAAC,CAAC;QAE1F,4DAA4D;QAC5D,KAAK,cAAc,CAAC,YAAY,CAAC;QACjC,KAAK,cAAc,CAAC,qBAAqB,CAAC;QAC1C,KAAK,cAAc,CAAC,mCAAmC;YACrD,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC"}
@@ -98,8 +98,8 @@ export declare class RangeSync extends RangeSync_base {
98
98
  getSyncChainsDebugState(): SyncChainDebugState[];
99
99
  /** Convenience method for `SyncChain` */
100
100
  private processChainSegment;
101
- private downloadByRange;
102
- private pruneBlockInputs;
101
+ /** Convenience method for `SyncChain` */
102
+ private downloadBeaconBlocksByRange;
103
103
  /** Convenience method for `SyncChain` */
104
104
  private reportPeer;
105
105
  private getConnectedPeerSyncMeta;
@@ -2,7 +2,7 @@ import { EventEmitter } from "node:events";
2
2
  import { computeStartSlotAtEpoch } from "@lodestar/state-transition";
3
3
  import { toRootHex } from "@lodestar/utils";
4
4
  import { AttestationImportOpt } from "../../chain/blocks/index.js";
5
- import { cacheByRangeResponses, downloadByRange } from "../utils/downloadByRange.js";
5
+ import { beaconBlocksMaybeBlobsByRange } from "../../network/reqresp/beaconBlocksMaybeBlobsByRange.js";
6
6
  import { RangeSyncType, getRangeSyncTarget, rangeSyncTypes } from "../utils/remoteSyncType.js";
7
7
  import { SyncChain } from "./chain.js";
8
8
  import { updateChains } from "./utils/index.js";
@@ -44,16 +44,59 @@ export var RangeSyncStatus;
44
44
  * - If there are many head chains the ones with more peers take priority
45
45
  */
46
46
  export class RangeSync extends EventEmitter {
47
- chain;
48
- network;
49
- metrics;
50
- config;
51
- logger;
52
- /** There is a single chain per type, 1 finalized sync, 1 head sync */
53
- chains = new Map();
54
- opts;
55
47
  constructor(modules, opts) {
56
48
  super();
49
+ /** There is a single chain per type, 1 finalized sync, 1 head sync */
50
+ this.chains = new Map();
51
+ /** Convenience method for `SyncChain` */
52
+ this.processChainSegment = async (blocks, syncType) => {
53
+ // Not trusted, verify signatures
54
+ const flags = {
55
+ // Only skip importing attestations for finalized sync. For head sync attestation are valuable.
56
+ // Importing attestations also triggers a head update, see https://github.com/ChainSafe/lodestar/issues/3804
57
+ // TODO: Review if this is okay, can we prevent some attacks by importing attestations?
58
+ importAttestations: syncType === RangeSyncType.Finalized ? AttestationImportOpt.Skip : undefined,
59
+ // Ignores ALREADY_KNOWN or GENESIS_BLOCK errors, and continues with the next block in chain segment
60
+ ignoreIfKnown: true,
61
+ // Ignore WOULD_REVERT_FINALIZED_SLOT error, continue with the next block in chain segment
62
+ ignoreIfFinalized: true,
63
+ // We won't attest to this block so it's okay to ignore a SYNCING message from execution layer
64
+ fromRangeSync: true,
65
+ // when this runs, syncing is the most important thing and gossip is not likely to run
66
+ // so we can utilize worker threads to verify signatures
67
+ blsVerifyOnMainThread: false,
68
+ // we want to be safe to only persist blocks after verifying it to avoid any attacks that may cause our DB
69
+ // to grow too much
70
+ eagerPersistBlock: false,
71
+ };
72
+ if (this.opts?.disableProcessAsChainSegment) {
73
+ // Should only be used for debugging or testing
74
+ for (const block of blocks)
75
+ await this.chain.processBlock(block, flags);
76
+ }
77
+ else {
78
+ await this.chain.processChainSegment(blocks, flags);
79
+ }
80
+ };
81
+ /** Convenience method for `SyncChain` */
82
+ this.downloadBeaconBlocksByRange = async (peer, request, partialDownload, syncType) => {
83
+ return beaconBlocksMaybeBlobsByRange(this.config, this.network, peer, request, this.chain.clock.currentEpoch, partialDownload, syncType, this.metrics, this.logger);
84
+ };
85
+ /** Convenience method for `SyncChain` */
86
+ this.reportPeer = (peer, action, actionName) => {
87
+ this.network.reportPeer(peer, action, actionName);
88
+ };
89
+ this.getConnectedPeerSyncMeta = (peerId) => {
90
+ return this.network.getConnectedPeerSyncMeta(peerId);
91
+ };
92
+ /** Convenience method for `SyncChain` */
93
+ this.onSyncChainEnd = (err, target) => {
94
+ this.update(this.chain.forkChoice.getFinalizedCheckpoint().epoch);
95
+ this.emit(RangeSyncEvent.completedChain);
96
+ if (err === null && target !== null) {
97
+ this.metrics?.syncRange.syncChainHighestTargetSlotCompleted.set(target.slot);
98
+ }
99
+ };
57
100
  const { chain, network, metrics, config, logger } = modules;
58
101
  this.chain = chain;
59
102
  this.network = network;
@@ -126,91 +169,16 @@ export class RangeSync extends EventEmitter {
126
169
  .map((syncChain) => syncChain.getDebugState())
127
170
  .reverse(); // Newest additions first
128
171
  }
129
- /** Convenience method for `SyncChain` */
130
- processChainSegment = async (blocks, syncType) => {
131
- // Not trusted, verify signatures
132
- const flags = {
133
- // Only skip importing attestations for finalized sync. For head sync attestation are valuable.
134
- // Importing attestations also triggers a head update, see https://github.com/ChainSafe/lodestar/issues/3804
135
- // TODO: Review if this is okay, can we prevent some attacks by importing attestations?
136
- importAttestations: syncType === RangeSyncType.Finalized ? AttestationImportOpt.Skip : undefined,
137
- // Ignores ALREADY_KNOWN or GENESIS_BLOCK errors, and continues with the next block in chain segment
138
- ignoreIfKnown: true,
139
- // Ignore WOULD_REVERT_FINALIZED_SLOT error, continue with the next block in chain segment
140
- ignoreIfFinalized: true,
141
- // We won't attest to this block so it's okay to ignore a SYNCING message from execution layer
142
- fromRangeSync: true,
143
- // when this runs, syncing is the most important thing and gossip is not likely to run
144
- // so we can utilize worker threads to verify signatures
145
- blsVerifyOnMainThread: false,
146
- // we want to be safe to only persist blocks after verifying it to avoid any attacks that may cause our DB
147
- // to grow too much
148
- eagerPersistBlock: false,
149
- };
150
- if (this.opts?.disableProcessAsChainSegment) {
151
- // Should only be used for debugging or testing
152
- for (const block of blocks)
153
- await this.chain.processBlock(block, flags);
154
- }
155
- else {
156
- await this.chain.processChainSegment(blocks, flags);
157
- }
158
- };
159
- downloadByRange = async (peer, batch) => {
160
- const batchBlocks = batch.getBlocks();
161
- const { result, warnings } = await downloadByRange({
162
- config: this.config,
163
- network: this.network,
164
- logger: this.logger,
165
- peerIdStr: peer.peerId,
166
- batchBlocks,
167
- ...batch.getRequestsForPeer(peer),
168
- });
169
- const cached = cacheByRangeResponses({
170
- cache: this.chain.seenBlockInputCache,
171
- peerIdStr: peer.peerId,
172
- responses: result,
173
- batchBlocks,
174
- });
175
- return { result: cached, warnings };
176
- };
177
- pruneBlockInputs = (blocks) => {
178
- for (const block of blocks) {
179
- this.chain.seenBlockInputCache.prune(block.blockRootHex);
180
- }
181
- };
182
- /** Convenience method for `SyncChain` */
183
- reportPeer = (peer, action, actionName) => {
184
- this.network.reportPeer(peer, action, actionName);
185
- };
186
- getConnectedPeerSyncMeta = (peerId) => {
187
- return this.network.getConnectedPeerSyncMeta(peerId);
188
- };
189
- /** Convenience method for `SyncChain` */
190
- onSyncChainEnd = (err, target) => {
191
- this.update(this.chain.forkChoice.getFinalizedCheckpoint().epoch);
192
- this.emit(RangeSyncEvent.completedChain);
193
- if (err === null && target !== null) {
194
- this.metrics?.syncRange.syncChainHighestTargetSlotCompleted.set(target.slot);
195
- }
196
- };
197
172
  addPeerOrCreateChain(startEpoch, target, peer, syncType) {
198
173
  let syncChain = this.chains.get(syncType);
199
174
  if (!syncChain) {
200
175
  syncChain = new SyncChain(startEpoch, target, syncType, {
201
176
  processChainSegment: this.processChainSegment,
202
- downloadByRange: this.downloadByRange,
177
+ downloadBeaconBlocksByRange: this.downloadBeaconBlocksByRange,
203
178
  reportPeer: this.reportPeer,
204
179
  getConnectedPeerSyncMeta: this.getConnectedPeerSyncMeta,
205
- pruneBlockInputs: this.pruneBlockInputs,
206
180
  onEnd: this.onSyncChainEnd,
207
- }, {
208
- config: this.config,
209
- clock: this.chain.clock,
210
- logger: this.logger,
211
- custodyConfig: this.chain.custodyConfig,
212
- metrics: this.metrics,
213
- });
181
+ }, { config: this.config, logger: this.logger, custodyConfig: this.chain.custodyConfig, metrics: this.metrics });
214
182
  this.chains.set(syncType, syncChain);
215
183
  this.metrics?.syncRange.syncChainsEvents.inc({ syncType: syncChain.syncType, event: "add" });
216
184
  this.logger.debug("SyncChain added", {