@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,7 +1,8 @@
1
1
  import { routes } from "@lodestar/api";
2
2
  import { BeaconConfig } from "@lodestar/config";
3
- import { Slot, phase0 } from "@lodestar/types";
3
+ import { RootHex, Slot, phase0 } from "@lodestar/types";
4
4
  import { Logger } from "@lodestar/utils";
5
+ import { BlockInput, BlockInputType, NullBlockInput } from "../chain/blocks/types.js";
5
6
  import { IBeaconChain } from "../chain/index.js";
6
7
  import { IBeaconDb } from "../db/index.js";
7
8
  import { Metrics } from "../metrics/index.js";
@@ -44,4 +45,61 @@ export interface SyncModules {
44
45
  chain: IBeaconChain;
45
46
  wsCheckpoint?: phase0.Checkpoint;
46
47
  }
48
+ export type UnknownAndAncestorBlocks = {
49
+ unknowns: UnknownBlock[];
50
+ ancestors: DownloadedBlock[];
51
+ };
52
+ /**
53
+ * onUnknownBlock: store 1 record with undefined parentBlockRootHex & blockInput, blockRootHex as key, status pending
54
+ * onUnknownBlockParent:
55
+ * - store 1 record with known parentBlockRootHex & blockInput, blockRootHex as key, status downloaded
56
+ * - store 1 record with undefined parentBlockRootHex & blockInput, parentBlockRootHex as key, status pending
57
+ */
58
+ export type PendingBlock = UnknownBlock | DownloadedBlock;
59
+ type PendingBlockCommon = {
60
+ blockRootHex: RootHex;
61
+ peerIdStrs: Set<string>;
62
+ downloadAttempts: number;
63
+ };
64
+ export type UnknownBlock = PendingBlockCommon & {
65
+ status: PendingBlockStatus.pending | PendingBlockStatus.fetching;
66
+ parentBlockRootHex: null;
67
+ } & ({
68
+ unknownBlockType: PendingBlockType.UNKNOWN_BLOCK;
69
+ blockInput: null;
70
+ } | {
71
+ unknownBlockType: PendingBlockType.UNKNOWN_DATA;
72
+ blockInput: BlockInput & {
73
+ type: BlockInputType.dataPromise;
74
+ };
75
+ } | {
76
+ unknownBlockType: PendingBlockType.UNKNOWN_BLOCKINPUT;
77
+ blockInput: NullBlockInput;
78
+ });
79
+ /**
80
+ * either the blobs are unknown or in future some blobs and even the block is unknown
81
+ */
82
+ export type DownloadedBlock = PendingBlockCommon & {
83
+ status: PendingBlockStatus.downloaded | PendingBlockStatus.processing;
84
+ parentBlockRootHex: RootHex;
85
+ blockInput: BlockInput;
86
+ };
87
+ export declare enum PendingBlockStatus {
88
+ pending = "pending",
89
+ fetching = "fetching",
90
+ downloaded = "downloaded",
91
+ processing = "processing"
92
+ }
93
+ export declare enum PendingBlockType {
94
+ /**
95
+ * We got a block root (from a gossip attestation, for exxample) but we don't have the block in forkchoice.
96
+ */
97
+ UNKNOWN_BLOCK = "unknown_block",
98
+ /**
99
+ * During gossip time, we may get a block but the parent root is unknown (not in forkchoice).
100
+ */
101
+ UNKNOWN_PARENT = "unknown_parent",
102
+ UNKNOWN_BLOCKINPUT = "unknown_blockinput",
103
+ UNKNOWN_DATA = "unknown_data"
104
+ }
47
105
  //# sourceMappingURL=interface.d.ts.map
@@ -16,4 +16,24 @@ export const syncStateMetric = {
16
16
  [SyncState.SyncingHead]: 2,
17
17
  [SyncState.Synced]: 3,
18
18
  };
19
+ export var PendingBlockStatus;
20
+ (function (PendingBlockStatus) {
21
+ PendingBlockStatus["pending"] = "pending";
22
+ PendingBlockStatus["fetching"] = "fetching";
23
+ PendingBlockStatus["downloaded"] = "downloaded";
24
+ PendingBlockStatus["processing"] = "processing";
25
+ })(PendingBlockStatus || (PendingBlockStatus = {}));
26
+ export var PendingBlockType;
27
+ (function (PendingBlockType) {
28
+ /**
29
+ * We got a block root (from a gossip attestation, for exxample) but we don't have the block in forkchoice.
30
+ */
31
+ PendingBlockType["UNKNOWN_BLOCK"] = "unknown_block";
32
+ /**
33
+ * During gossip time, we may get a block but the parent root is unknown (not in forkchoice).
34
+ */
35
+ PendingBlockType["UNKNOWN_PARENT"] = "unknown_parent";
36
+ PendingBlockType["UNKNOWN_BLOCKINPUT"] = "unknown_blockinput";
37
+ PendingBlockType["UNKNOWN_DATA"] = "unknown_data";
38
+ })(PendingBlockType || (PendingBlockType = {}));
19
39
  //# sourceMappingURL=interface.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/sync/interface.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAN,IAAY,SASX;AATD,WAAY,SAAS;IACnB,oCAAoC;IACpC,gCAAmB,CAAA;IACnB,sEAAsE;IACtE,kDAAqC,CAAA;IACrC,gEAAgE;IAChE,wCAA2B,CAAA;IAC3B,kDAAkD;IAClD,8BAAiB,CAAA;AACnB,CAAC,EATW,SAAS,KAAT,SAAS,QASpB;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,eAAe,GAA+B;IACzD,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;IACtB,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC;IAC/B,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;IAC1B,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;CACtB,CAAC"}
1
+ {"version":3,"file":"interface.js","sourceRoot":"","sources":["../../src/sync/interface.ts"],"names":[],"mappings":"AAuBA,MAAM,CAAN,IAAY,SASX;AATD,WAAY,SAAS;IACnB,oCAAoC;IACpC,gCAAmB,CAAA;IACnB,sEAAsE;IACtE,kDAAqC,CAAA;IACrC,gEAAgE;IAChE,wCAA2B,CAAA;IAC3B,kDAAkD;IAClD,8BAAiB,CAAA;AACnB,CAAC,EATW,SAAS,KAAT,SAAS,QASpB;AAED,6DAA6D;AAC7D,MAAM,CAAC,MAAM,eAAe,GAA+B;IACzD,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;IACtB,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC;IAC/B,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;IAC1B,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;CACtB,CAAC;AAuDF,MAAM,CAAN,IAAY,kBAKX;AALD,WAAY,kBAAkB;IAC5B,yCAAmB,CAAA;IACnB,2CAAqB,CAAA;IACrB,+CAAyB,CAAA;IACzB,+CAAyB,CAAA;AAC3B,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,QAK7B;AAED,MAAM,CAAN,IAAY,gBAYX;AAZD,WAAY,gBAAgB;IAC1B;;OAEG;IACH,mDAA+B,CAAA;IAC/B;;OAEG;IACH,qDAAiC,CAAA;IAEjC,6DAAyC,CAAA;IACzC,iDAA6B,CAAA;AAC/B,CAAC,EAZW,gBAAgB,KAAhB,gBAAgB,QAY3B"}
@@ -12,7 +12,7 @@ export type SyncOptions = {
12
12
  /** USE FOR TESTING ONLY. Disable range sync completely */
13
13
  disableRangeSync?: boolean;
14
14
  /** USE FOR TESTING ONLY. Disable unknown block sync completely */
15
- disableBlockInputSync?: boolean;
15
+ disableUnknownBlockSync?: boolean;
16
16
  /**
17
17
  * The batch size of slots for backfill sync can attempt to sync/process before yielding
18
18
  * to sync loop. This number can be increased or decreased to make a suitable resource
@@ -1,13 +1,9 @@
1
1
  import { ChainForkConfig } from "@lodestar/config";
2
- import { ForkName } from "@lodestar/params";
3
- import { Epoch, RootHex, Slot } from "@lodestar/types";
2
+ import { Epoch, RootHex, phase0 } from "@lodestar/types";
4
3
  import { LodestarError } from "@lodestar/utils";
5
- import { IBlockInput } from "../../chain/blocks/blockInput/types.js";
6
- import { CustodyConfig } from "../../util/dataColumns.js";
4
+ import { BlockInput } from "../../chain/blocks/types.js";
5
+ import { PartialDownload } from "../../network/reqresp/beaconBlocksMaybeBlobsByRange.js";
7
6
  import { PeerIdStr } from "../../util/peerId.js";
8
- import { DownloadByRangeRequests } from "../utils/downloadByRange.js";
9
- import { PeerSyncMeta } from "../../network/peers/peersData.js";
10
- import { IClock } from "../../util/clock.js";
11
7
  /**
12
8
  * Current state of a batch
13
9
  */
@@ -31,35 +27,39 @@ export declare enum BatchStatus {
31
27
  }
32
28
  export type Attempt = {
33
29
  /** The peer that made the attempt */
34
- peers: PeerIdStr[];
30
+ peer: PeerIdStr;
35
31
  /** The hash of the blocks of the attempt */
36
32
  hash: RootHex;
37
33
  };
38
- export type AwaitingDownloadState = {
34
+ export type BatchState = {
39
35
  status: BatchStatus.AwaitingDownload;
40
- blocks: IBlockInput[];
41
- };
42
- export type DownloadSuccessState = {
43
- status: BatchStatus.AwaitingProcessing;
44
- blocks: IBlockInput[];
45
- };
46
- export type BatchState = AwaitingDownloadState | {
36
+ partialDownload: PartialDownload;
37
+ } | {
47
38
  status: BatchStatus.Downloading;
48
39
  peer: PeerIdStr;
49
- blocks: IBlockInput[];
50
- } | DownloadSuccessState | {
40
+ partialDownload: PartialDownload;
41
+ } | {
42
+ status: BatchStatus.AwaitingProcessing;
43
+ peer: PeerIdStr;
44
+ blocks: BlockInput[];
45
+ } | {
51
46
  status: BatchStatus.Processing;
52
- blocks: IBlockInput[];
53
47
  attempt: Attempt;
54
48
  } | {
55
49
  status: BatchStatus.AwaitingValidation;
56
- blocks: IBlockInput[];
57
50
  attempt: Attempt;
58
51
  };
59
52
  export type BatchMetadata = {
60
53
  startEpoch: Epoch;
61
54
  status: BatchStatus;
62
55
  };
56
+ export type DownloadSuccessOutput = {
57
+ status: BatchStatus.AwaitingProcessing;
58
+ blocks: BlockInput[];
59
+ } | {
60
+ status: BatchStatus.AwaitingDownload;
61
+ pendingDataColumns: number[];
62
+ };
63
63
  /**
64
64
  * Batches are downloaded at the first block of the epoch.
65
65
  *
@@ -72,16 +72,11 @@ export type BatchMetadata = {
72
72
  * Jul2022: Offset changed from 1 to 0, see rationale in {@link BATCH_SLOT_OFFSET}
73
73
  */
74
74
  export declare class Batch {
75
- readonly forkName: ForkName;
76
75
  readonly startEpoch: Epoch;
77
- readonly startSlot: Slot;
78
- readonly count: number;
79
- /** Block, blob and column requests that are used to determine the best peer and are used in downloadByRange */
80
- requests: DownloadByRangeRequests;
81
76
  /** State of the batch. */
82
77
  state: BatchState;
83
- /** Peers that provided good data */
84
- goodPeers: PeerIdStr[];
78
+ /** BeaconBlocksByRangeRequest */
79
+ readonly request: phase0.BeaconBlocksByRangeRequest;
85
80
  /** The `Attempts` that have been made and failed to send us this batch. */
86
81
  readonly failedProcessingAttempts: Attempt[];
87
82
  /** The `Attempts` that have been made and failed because of execution malfunction. */
@@ -89,39 +84,32 @@ export declare class Batch {
89
84
  /** The number of download retries this batch has undergone due to a failed request. */
90
85
  private readonly failedDownloadAttempts;
91
86
  private readonly config;
92
- private readonly clock;
93
- private readonly custodyConfig;
94
- constructor(startEpoch: Epoch, config: ChainForkConfig, clock: IClock, custodyConfig: CustodyConfig);
95
- /**
96
- * Builds ByRange requests for block, blobs and columns
97
- */
98
- private getRequests;
99
- /**
100
- * Post-fulu we should only get columns that peer has advertised
101
- */
102
- getRequestsForPeer(peer: PeerSyncMeta): DownloadByRangeRequests;
87
+ constructor(startEpoch: Epoch, config: ChainForkConfig);
103
88
  /**
104
89
  * Gives a list of peers from which this batch has had a failed download or processing attempt.
105
90
  */
106
91
  getFailedPeers(): PeerIdStr[];
107
92
  getMetadata(): BatchMetadata;
108
- getBlocks(): IBlockInput[];
109
93
  /**
110
94
  * AwaitingDownload -> Downloading
111
95
  */
112
- startDownloading(peer: PeerIdStr): void;
96
+ startDownloading(peer: PeerIdStr): PartialDownload;
113
97
  /**
114
98
  * Downloading -> AwaitingProcessing
99
+ * pendingDataColumns is null when a complete download is done, otherwise it contains the columns that are still pending
115
100
  */
116
- downloadingSuccess(peer: PeerIdStr, blocks: IBlockInput[]): DownloadSuccessState;
101
+ downloadingSuccess(downloadResult: {
102
+ blocks: BlockInput[];
103
+ pendingDataColumns: null | number[];
104
+ }): DownloadSuccessOutput;
117
105
  /**
118
106
  * Downloading -> AwaitingDownload
119
107
  */
120
- downloadingError(peer: PeerIdStr): void;
108
+ downloadingError(): void;
121
109
  /**
122
110
  * AwaitingProcessing -> Processing
123
111
  */
124
- startProcessing(): IBlockInput[];
112
+ startProcessing(): BlockInput[];
125
113
  /**
126
114
  * Processing -> AwaitingValidation
127
115
  */
@@ -138,6 +126,7 @@ export declare class Batch {
138
126
  * AwaitingValidation -> Done
139
127
  */
140
128
  validationSuccess(): Attempt;
129
+ isPostFulu(): boolean;
141
130
  private onExecutionEngineError;
142
131
  private onProcessingError;
143
132
  /** Helper to construct typed BatchError. Stack traces are correct as the error is thrown above */
@@ -146,7 +135,6 @@ export declare class Batch {
146
135
  }
147
136
  export declare enum BatchErrorCode {
148
137
  WRONG_STATUS = "BATCH_ERROR_WRONG_STATUS",
149
- INVALID_COUNT = "BATCH_ERROR_INVALID_COUNT",
150
138
  MAX_DOWNLOAD_ATTEMPTS = "BATCH_ERROR_MAX_DOWNLOAD_ATTEMPTS",
151
139
  MAX_PROCESSING_ATTEMPTS = "BATCH_ERROR_MAX_PROCESSING_ATTEMPTS",
152
140
  MAX_EXECUTION_ENGINE_ERROR_ATTEMPTS = "MAX_EXECUTION_ENGINE_ERROR_ATTEMPTS"
@@ -154,10 +142,6 @@ export declare enum BatchErrorCode {
154
142
  type BatchErrorType = {
155
143
  code: BatchErrorCode.WRONG_STATUS;
156
144
  expectedStatus: BatchStatus;
157
- } | {
158
- code: BatchErrorCode.INVALID_COUNT;
159
- count: number;
160
- expected: number;
161
145
  } | {
162
146
  code: BatchErrorCode.MAX_DOWNLOAD_ATTEMPTS;
163
147
  } | {
@@ -1,10 +1,8 @@
1
- import { isForkPostDeneb, isForkPostFulu } from "@lodestar/params";
1
+ import { ForkSeq } from "@lodestar/params";
2
2
  import { LodestarError } from "@lodestar/utils";
3
- import { isBlockInputColumns } from "../../chain/blocks/blockInput/blockInput.js";
4
3
  import { BlockError, BlockErrorCode } from "../../chain/errors/index.js";
5
4
  import { MAX_BATCH_DOWNLOAD_ATTEMPTS, MAX_BATCH_PROCESSING_ATTEMPTS } from "../constants.js";
6
5
  import { getBatchSlotRange, hashBlocks } from "./utils/index.js";
7
- import { isDaOutOfRange } from "../../chain/blocks/blockInput/utils.js";
8
6
  /**
9
7
  * Current state of a batch
10
8
  */
@@ -39,172 +37,33 @@ export var BatchStatus;
39
37
  * Jul2022: Offset changed from 1 to 0, see rationale in {@link BATCH_SLOT_OFFSET}
40
38
  */
41
39
  export class Batch {
42
- forkName;
43
- startEpoch;
44
- startSlot;
45
- count;
46
- /** Block, blob and column requests that are used to determine the best peer and are used in downloadByRange */
47
- requests;
48
- /** State of the batch. */
49
- state = { status: BatchStatus.AwaitingDownload, blocks: [] };
50
- /** Peers that provided good data */
51
- goodPeers = [];
52
- /** The `Attempts` that have been made and failed to send us this batch. */
53
- failedProcessingAttempts = [];
54
- /** The `Attempts` that have been made and failed because of execution malfunction. */
55
- executionErrorAttempts = [];
56
- /** The number of download retries this batch has undergone due to a failed request. */
57
- failedDownloadAttempts = [];
58
- config;
59
- clock;
60
- custodyConfig;
61
- constructor(startEpoch, config, clock, custodyConfig) {
62
- this.config = config;
63
- this.clock = clock;
64
- this.custodyConfig = custodyConfig;
40
+ constructor(startEpoch, config) {
41
+ /** State of the batch. */
42
+ this.state = { status: BatchStatus.AwaitingDownload, partialDownload: null };
43
+ /** The `Attempts` that have been made and failed to send us this batch. */
44
+ this.failedProcessingAttempts = [];
45
+ /** The `Attempts` that have been made and failed because of execution malfunction. */
46
+ this.executionErrorAttempts = [];
47
+ /** The number of download retries this batch has undergone due to a failed request. */
48
+ this.failedDownloadAttempts = [];
65
49
  const { startSlot, count } = getBatchSlotRange(startEpoch);
66
- this.forkName = this.config.getForkName(startSlot);
50
+ this.config = config;
67
51
  this.startEpoch = startEpoch;
68
- this.startSlot = startSlot;
69
- this.count = count;
70
- this.requests = this.getRequests([]);
71
- }
72
- /**
73
- * Builds ByRange requests for block, blobs and columns
74
- */
75
- getRequests(blocks) {
76
- const withinValidRequestWindow = !isDaOutOfRange(this.config, this.forkName, this.startSlot, this.clock.currentEpoch);
77
- // fresh request where no blocks have started to be pulled yet
78
- if (!blocks.length) {
79
- const blocksRequest = {
80
- startSlot: this.startSlot,
81
- count: this.count,
82
- step: 1,
83
- };
84
- if (isForkPostFulu(this.forkName) && withinValidRequestWindow) {
85
- return {
86
- blocksRequest,
87
- columnsRequest: {
88
- startSlot: this.startSlot,
89
- count: this.count,
90
- columns: this.custodyConfig.sampledColumns,
91
- },
92
- };
93
- }
94
- if (isForkPostDeneb(this.forkName) && withinValidRequestWindow) {
95
- return {
96
- blocksRequest,
97
- blobsRequest: {
98
- startSlot: this.startSlot,
99
- count: this.count,
100
- },
101
- };
102
- }
103
- return {
104
- blocksRequest,
105
- };
106
- }
107
- // subsequent request where part of the epoch has already been downloaded. Need to figure out what is the beginning
108
- // of the range where download needs to resume
109
- let blockStartSlot = this.startSlot;
110
- let dataStartSlot = this.startSlot;
111
- const neededColumns = new Set();
112
- // ensure blocks are in slot-wise order
113
- for (const blockInput of blocks) {
114
- const blockSlot = blockInput.slot;
115
- // check if block/data is present (hasBlock/hasAllData). If present then check if startSlot is the same as
116
- // blockSlot. If it is then do not need to pull that slot so increment startSlot by 1. check will fail
117
- // if there is a gap and then the blocks/data is present again. to simplify the request just re-pull remainder
118
- // of range.
119
- //
120
- // ie startSlot = 32 and count = 32. so for slots = [32, 33, 34, 35, 36, _, 38, 39, _, _, ... _endSlot=63_]
121
- // will return an updated startSlot of 37 and pull range 37-63 on the next request.
122
- //
123
- // if all slot have already been pulled then the startSlot will eventually get incremented to the slot after
124
- // the desired end slot
125
- if (blockInput.hasBlock() && blockStartSlot === blockSlot) {
126
- blockStartSlot = blockSlot + 1;
127
- }
128
- if (!blockInput.hasAllData()) {
129
- if (isBlockInputColumns(blockInput)) {
130
- for (const index of blockInput.getMissingSampledColumnMeta().missing) {
131
- neededColumns.add(index);
132
- }
133
- }
134
- }
135
- else if (dataStartSlot === blockSlot) {
136
- dataStartSlot = blockSlot + 1;
137
- }
138
- }
139
- // if the blockStartSlot or dataStartSlot is after the desired endSlot then no request will be made for the batch
140
- // because it is complete
141
- const endSlot = this.startSlot + this.count - 1;
142
- const requests = {};
143
- if (blockStartSlot <= endSlot) {
144
- requests.blocksRequest = {
145
- startSlot: blockStartSlot,
146
- // range of 40 - 63, startSlot will be inclusive but subtraction will exclusive so need to + 1
147
- count: endSlot - blockStartSlot + 1,
148
- step: 1,
149
- };
150
- }
151
- if (dataStartSlot <= endSlot) {
152
- // range of 40 - 63, startSlot will be inclusive but subtraction will exclusive so need to + 1
153
- const count = endSlot - dataStartSlot + 1;
154
- if (isForkPostFulu(this.forkName) && withinValidRequestWindow) {
155
- requests.columnsRequest = {
156
- count,
157
- startSlot: dataStartSlot,
158
- columns: Array.from(neededColumns),
159
- };
160
- }
161
- else if (isForkPostDeneb(this.forkName) && withinValidRequestWindow) {
162
- requests.blobsRequest = {
163
- count,
164
- startSlot: dataStartSlot,
165
- };
166
- }
167
- // dataSlot will still have a value but do not create a request for preDeneb forks
168
- }
169
- return requests;
170
- }
171
- /**
172
- * Post-fulu we should only get columns that peer has advertised
173
- */
174
- getRequestsForPeer(peer) {
175
- if (!isForkPostFulu(this.forkName)) {
176
- return this.requests;
177
- }
178
- // post-fulu we need to ensure that we only request columns that the peer has advertised
179
- const { columnsRequest } = this.requests;
180
- if (columnsRequest == null) {
181
- return this.requests;
182
- }
183
- const peerColumns = new Set(peer.custodyColumns ?? []);
184
- const requestedColumns = columnsRequest.columns.filter((c) => peerColumns.has(c));
185
- if (requestedColumns.length === columnsRequest.columns.length) {
186
- return this.requests;
187
- }
188
- return {
189
- ...this.requests,
190
- columnsRequest: {
191
- ...columnsRequest,
192
- columns: requestedColumns,
193
- },
52
+ this.request = {
53
+ startSlot,
54
+ count,
55
+ step: 1,
194
56
  };
195
57
  }
196
58
  /**
197
59
  * Gives a list of peers from which this batch has had a failed download or processing attempt.
198
60
  */
199
61
  getFailedPeers() {
200
- return [...this.failedDownloadAttempts, ...this.failedProcessingAttempts.flatMap((a) => a.peers)];
62
+ return [...this.failedDownloadAttempts, ...this.failedProcessingAttempts.map((a) => a.peer)];
201
63
  }
202
64
  getMetadata() {
203
65
  return { startEpoch: this.startEpoch, status: this.state.status };
204
66
  }
205
- getBlocks() {
206
- return this.state.blocks;
207
- }
208
67
  /**
209
68
  * AwaitingDownload -> Downloading
210
69
  */
@@ -212,56 +71,57 @@ export class Batch {
212
71
  if (this.state.status !== BatchStatus.AwaitingDownload) {
213
72
  throw new BatchError(this.wrongStatusErrorType(BatchStatus.AwaitingDownload));
214
73
  }
215
- this.state = { status: BatchStatus.Downloading, peer, blocks: this.state.blocks };
74
+ const { partialDownload } = this.state;
75
+ this.state = { status: BatchStatus.Downloading, peer, partialDownload };
76
+ return partialDownload;
216
77
  }
217
78
  /**
218
79
  * Downloading -> AwaitingProcessing
80
+ * pendingDataColumns is null when a complete download is done, otherwise it contains the columns that are still pending
219
81
  */
220
- downloadingSuccess(peer, blocks) {
82
+ downloadingSuccess(downloadResult) {
221
83
  if (this.state.status !== BatchStatus.Downloading) {
222
84
  throw new BatchError(this.wrongStatusErrorType(BatchStatus.Downloading));
223
85
  }
224
- // ensure that blocks are always sorted before getting stored on the batch.state or being used to getRequests
225
- blocks.sort((a, b) => a.slot - b.slot);
226
- this.goodPeers.push(peer);
227
- let allComplete = true;
228
- const slots = new Set();
229
- for (const block of blocks) {
230
- slots.add(block.slot);
231
- if (!block.hasBlockAndAllData()) {
232
- allComplete = false;
233
- }
234
- }
235
- if (slots.size > this.count) {
236
- throw new BatchError({
237
- code: BatchErrorCode.INVALID_COUNT,
238
- startEpoch: this.startEpoch,
239
- count: slots.size,
240
- expected: this.count,
241
- status: this.state.status,
242
- });
243
- }
244
- if (allComplete) {
245
- this.state = { status: BatchStatus.AwaitingProcessing, blocks };
86
+ let updatedPendingDataColumns = this.state.partialDownload?.pendingDataColumns ?? null;
87
+ const { blocks, pendingDataColumns } = downloadResult;
88
+ if (updatedPendingDataColumns == null) {
89
+ // state pendingDataColumns is null as initial value, just update it to pendingDataColumns in this case
90
+ updatedPendingDataColumns = pendingDataColumns;
246
91
  }
247
92
  else {
248
- this.requests = this.getRequests(blocks);
249
- this.state = { status: BatchStatus.AwaitingDownload, blocks };
250
- }
251
- return this.state;
93
+ updatedPendingDataColumns =
94
+ // pendingDataColumns = null means a complete download
95
+ pendingDataColumns == null
96
+ ? null
97
+ : // if not state pendingDataColumns should be reduced over time, see see https://github.com/ChainSafe/lodestar/issues/8036
98
+ updatedPendingDataColumns.filter((column) => pendingDataColumns.includes(column));
99
+ }
100
+ if (updatedPendingDataColumns === null) {
101
+ // complete download
102
+ this.state = { status: BatchStatus.AwaitingProcessing, peer: this.state.peer, blocks };
103
+ return { status: BatchStatus.AwaitingProcessing, blocks };
104
+ }
105
+ // partial download, track updatedPendingDataColumns in state
106
+ this.state = {
107
+ status: BatchStatus.AwaitingDownload,
108
+ partialDownload: blocks.length === 0 ? null : { blocks, pendingDataColumns: updatedPendingDataColumns },
109
+ };
110
+ return { status: BatchStatus.AwaitingDownload, pendingDataColumns: updatedPendingDataColumns };
252
111
  }
253
112
  /**
254
113
  * Downloading -> AwaitingDownload
255
114
  */
256
- downloadingError(peer) {
115
+ downloadingError() {
257
116
  if (this.state.status !== BatchStatus.Downloading) {
258
117
  throw new BatchError(this.wrongStatusErrorType(BatchStatus.Downloading));
259
118
  }
260
- this.failedDownloadAttempts.push(peer);
119
+ this.failedDownloadAttempts.push(this.state.peer);
261
120
  if (this.failedDownloadAttempts.length > MAX_BATCH_DOWNLOAD_ATTEMPTS) {
262
121
  throw new BatchError(this.errorType({ code: BatchErrorCode.MAX_DOWNLOAD_ATTEMPTS }));
263
122
  }
264
- this.state = { status: BatchStatus.AwaitingDownload, blocks: this.state.blocks };
123
+ const { partialDownload } = this.state;
124
+ this.state = { status: BatchStatus.AwaitingDownload, partialDownload };
265
125
  }
266
126
  /**
267
127
  * AwaitingProcessing -> Processing
@@ -272,11 +132,7 @@ export class Batch {
272
132
  }
273
133
  const blocks = this.state.blocks;
274
134
  const hash = hashBlocks(blocks, this.config); // tracks blocks to report peer on processing error
275
- // Reset goodPeers in case another download attempt needs to be made. When Attempt is successful or not the peers
276
- // that the data came from will be handled by the Attempt that goes for processing
277
- const peers = this.goodPeers;
278
- this.goodPeers = [];
279
- this.state = { status: BatchStatus.Processing, blocks, attempt: { peers, hash } };
135
+ this.state = { status: BatchStatus.Processing, attempt: { peer: this.state.peer, hash } };
280
136
  return blocks;
281
137
  }
282
138
  /**
@@ -286,7 +142,7 @@ export class Batch {
286
142
  if (this.state.status !== BatchStatus.Processing) {
287
143
  throw new BatchError(this.wrongStatusErrorType(BatchStatus.Processing));
288
144
  }
289
- this.state = { status: BatchStatus.AwaitingValidation, blocks: this.state.blocks, attempt: this.state.attempt };
145
+ this.state = { status: BatchStatus.AwaitingValidation, attempt: this.state.attempt };
290
146
  }
291
147
  /**
292
148
  * Processing -> AwaitingDownload
@@ -325,23 +181,22 @@ export class Batch {
325
181
  }
326
182
  return this.state.attempt;
327
183
  }
184
+ isPostFulu() {
185
+ return this.config.getForkSeq(this.request.startSlot) >= ForkSeq.fulu;
186
+ }
328
187
  onExecutionEngineError(attempt) {
329
188
  this.executionErrorAttempts.push(attempt);
330
189
  if (this.executionErrorAttempts.length > MAX_BATCH_PROCESSING_ATTEMPTS) {
331
190
  throw new BatchError(this.errorType({ code: BatchErrorCode.MAX_EXECUTION_ENGINE_ERROR_ATTEMPTS }));
332
191
  }
333
- // remove any downloaded blocks and re-attempt
334
- // TODO(fulu): need to remove the bad blocks from the SeenBlockInputCache
335
- this.state = { status: BatchStatus.AwaitingDownload, blocks: [] };
192
+ this.state = { status: BatchStatus.AwaitingDownload, partialDownload: null };
336
193
  }
337
194
  onProcessingError(attempt) {
338
195
  this.failedProcessingAttempts.push(attempt);
339
196
  if (this.failedProcessingAttempts.length > MAX_BATCH_PROCESSING_ATTEMPTS) {
340
197
  throw new BatchError(this.errorType({ code: BatchErrorCode.MAX_PROCESSING_ATTEMPTS }));
341
198
  }
342
- // remove any downloaded blocks and re-attempt
343
- // TODO(fulu): need to remove the bad blocks from the SeenBlockInputCache
344
- this.state = { status: BatchStatus.AwaitingDownload, blocks: [] };
199
+ this.state = { status: BatchStatus.AwaitingDownload, partialDownload: null };
345
200
  }
346
201
  /** Helper to construct typed BatchError. Stack traces are correct as the error is thrown above */
347
202
  errorType(type) {
@@ -354,7 +209,6 @@ export class Batch {
354
209
  export var BatchErrorCode;
355
210
  (function (BatchErrorCode) {
356
211
  BatchErrorCode["WRONG_STATUS"] = "BATCH_ERROR_WRONG_STATUS";
357
- BatchErrorCode["INVALID_COUNT"] = "BATCH_ERROR_INVALID_COUNT";
358
212
  BatchErrorCode["MAX_DOWNLOAD_ATTEMPTS"] = "BATCH_ERROR_MAX_DOWNLOAD_ATTEMPTS";
359
213
  BatchErrorCode["MAX_PROCESSING_ATTEMPTS"] = "BATCH_ERROR_MAX_PROCESSING_ATTEMPTS";
360
214
  BatchErrorCode["MAX_EXECUTION_ENGINE_ERROR_ATTEMPTS"] = "MAX_EXECUTION_ENGINE_ERROR_ATTEMPTS";
@@ -1 +1 @@
1
- {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/sync/range/batch.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,eAAe,EAAE,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAE3E,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAC,mBAAmB,EAAC,MAAM,6CAA6C,CAAC;AAEhF,OAAO,EAAC,UAAU,EAAE,cAAc,EAAC,MAAM,6BAA6B,CAAC;AAGvE,OAAO,EAAC,2BAA2B,EAAE,6BAA6B,EAAC,MAAM,iBAAiB,CAAC;AAE3F,OAAO,EAAC,iBAAiB,EAAE,UAAU,EAAC,MAAM,kBAAkB,CAAC;AAG/D,OAAO,EAAC,cAAc,EAAC,MAAM,wCAAwC,CAAC;AAEtE;;GAEG;AACH,MAAM,CAAN,IAAY,WAiBX;AAjBD,WAAY,WAAW;IACrB,yFAAyF;IACzF,oDAAqC,CAAA;IACrC,qCAAqC;IACrC,0CAA2B,CAAA;IAC3B,4EAA4E;IAC5E,wDAAyC,CAAA;IACzC,oCAAoC;IACpC,wCAAyB,CAAA;IACzB;;;;;;OAMG;IACH,wDAAyC,CAAA;AAC3C,CAAC,EAjBW,WAAW,KAAX,WAAW,QAiBtB;AA+BD;;;;;;;;;;GAUG;AACH,MAAM,OAAO,KAAK;IACP,QAAQ,CAAW;IACnB,UAAU,CAAQ;IAClB,SAAS,CAAO;IAChB,KAAK,CAAS;IAEvB,+GAA+G;IAC/G,QAAQ,CAA0B;IAClC,0BAA0B;IAC1B,KAAK,GAAe,EAAC,MAAM,EAAE,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,EAAE,EAAC,CAAC;IACvE,oCAAoC;IACpC,SAAS,GAAgB,EAAE,CAAC;IAC5B,2EAA2E;IAClE,wBAAwB,GAAc,EAAE,CAAC;IAClD,sFAAsF;IAC7E,sBAAsB,GAAc,EAAE,CAAC;IAChD,uFAAuF;IACtE,sBAAsB,GAAgB,EAAE,CAAC;IACzC,MAAM,CAAkB;IACxB,KAAK,CAAS;IACd,aAAa,CAAgB;IAE9C,YAAY,UAAiB,EAAE,MAAuB,EAAE,KAAa,EAAE,aAA4B;QACjG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QAEnC,MAAM,EAAC,SAAS,EAAE,KAAK,EAAC,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,MAAqB;QACvC,MAAM,wBAAwB,GAAG,CAAC,cAAc,CAC9C,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,KAAK,CAAC,YAAY,CACxB,CAAC;QAEF,8DAA8D;QAC9D,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,aAAa,GAAsC;gBACvD,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI,EAAE,CAAC;aACR,CAAC;YACF,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,wBAAwB,EAAE,CAAC;gBAC9D,OAAO;oBACL,aAAa;oBACb,cAAc,EAAE;wBACd,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,cAAc;qBAC3C;iBACF,CAAC;YACJ,CAAC;YACD,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,wBAAwB,EAAE,CAAC;gBAC/D,OAAO;oBACL,aAAa;oBACb,YAAY,EAAE;wBACZ,SAAS,EAAE,IAAI,CAAC,SAAS;wBACzB,KAAK,EAAE,IAAI,CAAC,KAAK;qBAClB;iBACF,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,aAAa;aACd,CAAC;QACJ,CAAC;QAED,mHAAmH;QACnH,8CAA8C;QAC9C,IAAI,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC;QACpC,IAAI,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC;QACnC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QAExC,uCAAuC;QACvC,KAAK,MAAM,UAAU,IAAI,MAAM,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC;YAClC,0GAA0G;YAC1G,sGAAsG;YACtG,8GAA8G;YAC9G,YAAY;YACZ,EAAE;YACF,2GAA2G;YAC3G,mFAAmF;YACnF,EAAE;YACF,4GAA4G;YAC5G,uBAAuB;YACvB,IAAI,UAAU,CAAC,QAAQ,EAAE,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;gBAC1D,cAAc,GAAG,SAAS,GAAG,CAAC,CAAC;YACjC,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC;gBAC7B,IAAI,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;oBACpC,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,2BAA2B,EAAE,CAAC,OAAO,EAAE,CAAC;wBACrE,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;oBAC3B,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;gBACvC,aAAa,GAAG,SAAS,GAAG,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,iHAAiH;QACjH,yBAAyB;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;QAChD,MAAM,QAAQ,GAA4B,EAAE,CAAC;QAC7C,IAAI,cAAc,IAAI,OAAO,EAAE,CAAC;YAC9B,QAAQ,CAAC,aAAa,GAAG;gBACvB,SAAS,EAAE,cAAc;gBACzB,8FAA8F;gBAC9F,KAAK,EAAE,OAAO,GAAG,cAAc,GAAG,CAAC;gBACnC,IAAI,EAAE,CAAC;aACR,CAAC;QACJ,CAAC;QACD,IAAI,aAAa,IAAI,OAAO,EAAE,CAAC;YAC7B,8FAA8F;YAC9F,MAAM,KAAK,GAAG,OAAO,GAAG,aAAa,GAAG,CAAC,CAAC;YAC1C,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,wBAAwB,EAAE,CAAC;gBAC9D,QAAQ,CAAC,cAAc,GAAG;oBACxB,KAAK;oBACL,SAAS,EAAE,aAAa;oBACxB,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC;iBACnC,CAAC;YACJ,CAAC;iBAAM,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,wBAAwB,EAAE,CAAC;gBACtE,QAAQ,CAAC,YAAY,GAAG;oBACtB,KAAK;oBACL,SAAS,EAAE,aAAa;iBACzB,CAAC;YACJ,CAAC;YACD,kFAAkF;QACpF,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,IAAkB;QACnC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;QAED,wFAAwF;QACxF,MAAM,EAAC,cAAc,EAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QACvC,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,gBAAgB,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,IAAI,gBAAgB,CAAC,MAAM,KAAK,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAC9D,OAAO,IAAI,CAAC,QAAQ,CAAC;QACvB,CAAC;QAED,OAAO;YACL,GAAG,IAAI,CAAC,QAAQ;YAChB,cAAc,EAAE;gBACd,GAAG,cAAc;gBACjB,OAAO,EAAE,gBAAgB;aAC1B;SACF,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,CAAC,GAAG,IAAI,CAAC,sBAAsB,EAAE,GAAG,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IACpG,CAAC;IAED,WAAW;QACT,OAAO,EAAC,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAC,CAAC;IAClE,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,IAAe;QAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,gBAAgB,EAAE,CAAC;YACvD,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC;QAChF,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,EAAC,MAAM,EAAE,WAAW,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAC,CAAC;IAClF,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,IAAe,EAAE,MAAqB;QACvD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC;YAClD,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QAC3E,CAAC;QAED,6GAA6G;QAC7G,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,WAAW,GAAG,IAAI,CAAC;QACvB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAAE,CAAC;gBAChC,WAAW,GAAG,KAAK,CAAC;YACtB,CAAC;QACH,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5B,MAAM,IAAI,UAAU,CAAC;gBACnB,IAAI,EAAE,cAAc,CAAC,aAAa;gBAClC,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,KAAK,EAAE,KAAK,CAAC,IAAI;gBACjB,QAAQ,EAAE,IAAI,CAAC,KAAK;gBACpB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;aAC1B,CAAC,CAAC;QACL,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,KAAK,GAAG,EAAC,MAAM,EAAE,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAC,CAAC;QAChE,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK,GAAG,EAAC,MAAM,EAAE,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAC,CAAC;QAC9D,CAAC;QAED,OAAO,IAAI,CAAC,KAA6B,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,IAAe;QAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC;YAClD,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC;QAC3E,CAAC;QAED,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,IAAI,CAAC,sBAAsB,CAAC,MAAM,GAAG,2BAA2B,EAAE,CAAC;YACrE,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,IAAI,EAAE,cAAc,CAAC,qBAAqB,EAAC,CAAC,CAAC,CAAC;QACrF,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,EAAC,MAAM,EAAE,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAC,CAAC;IACjF,CAAC;IAED;;OAEG;IACH,eAAe;QACb,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,kBAAkB,EAAE,CAAC;YACzD,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QACjC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,mDAAmD;QACjG,kHAAkH;QAClH,kFAAkF;QAClF,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,GAAG,EAAC,MAAM,EAAE,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,EAAC,KAAK,EAAE,IAAI,EAAC,EAAC,CAAC;QAC9E,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,UAAU,EAAE,CAAC;YACjD,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,EAAC,MAAM,EAAE,WAAW,CAAC,kBAAkB,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAC,CAAC;IAChH,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,GAAU;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,UAAU,EAAE,CAAC;YACjD,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,GAAG,YAAY,UAAU,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,sBAAsB,EAAE,CAAC;YACzF,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,GAAU;QACxB,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,kBAAkB,EAAE,CAAC;YACzD,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAClF,CAAC;QAED,IAAI,GAAG,YAAY,UAAU,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,sBAAsB,EAAE,CAAC;YACzF,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,WAAW,CAAC,kBAAkB,EAAE,CAAC;YACzD,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAClF,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;IAC5B,CAAC;IAEO,sBAAsB,CAAC,OAAgB;QAC7C,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,IAAI,CAAC,sBAAsB,CAAC,MAAM,GAAG,6BAA6B,EAAE,CAAC;YACvE,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,IAAI,EAAE,cAAc,CAAC,mCAAmC,EAAC,CAAC,CAAC,CAAC;QACnG,CAAC;QAED,8CAA8C;QAC9C,yEAAyE;QACzE,IAAI,CAAC,KAAK,GAAG,EAAC,MAAM,EAAE,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,EAAE,EAAC,CAAC;IAClE,CAAC;IAEO,iBAAiB,CAAC,OAAgB;QACxC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,6BAA6B,EAAE,CAAC;YACzE,MAAM,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAC,IAAI,EAAE,cAAc,CAAC,uBAAuB,EAAC,CAAC,CAAC,CAAC;QACvF,CAAC;QAED,8CAA8C;QAC9C,yEAAyE;QACzE,IAAI,CAAC,KAAK,GAAG,EAAC,MAAM,EAAE,WAAW,CAAC,gBAAgB,EAAE,MAAM,EAAE,EAAE,EAAC,CAAC;IAClE,CAAC;IAED,kGAAkG;IAC1F,SAAS,CAAC,IAAoB;QACpC,OAAO,EAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,EAAC,CAAC;IAC1C,CAAC;IAEO,oBAAoB,CAAC,cAA2B;QACtD,OAAO,IAAI,CAAC,SAAS,CAAC,EAAC,IAAI,EAAE,cAAc,CAAC,YAAY,EAAE,cAAc,EAAC,CAAC,CAAC;IAC7E,CAAC;CACF;AAED,MAAM,CAAN,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,2DAAyC,CAAA;IACzC,6DAA2C,CAAA;IAC3C,6EAA2D,CAAA;IAC3D,iFAA+D,CAAA;IAC/D,6FAA2E,CAAA;AAC7E,CAAC,EANW,cAAc,KAAd,cAAc,QAMzB;AAcD,MAAM,OAAO,UAAW,SAAQ,aAAkD;CAAG"}
1
+ {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/sync/range/batch.ts"],"names":[],"mappings":"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"}